{"version":3,"file":"tuki-io-tuki-widgets-contact-center.mjs","sources":["../../../../projects/tuki/widgets/contact-center/shared/api.service.ts","../../../../projects/tuki/widgets/contact-center/shared/api.endpoints.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/cc-readiness.service.ts","../../../../projects/tuki/widgets/contact-center/shared/components/card/card.component.ts","../../../../projects/tuki/widgets/contact-center/shared/components/card/card.component.html","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.html","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.html","../../../../projects/tuki/widgets/contact-center/shared/material.module.ts","../../../../projects/tuki/widgets/contact-center/shared/shared.module.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/cc-readiness.module.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/constants/cytoscape.config.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/utils/node-mappings.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/utils/node-html-template.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/add-node-dialog/add-node-dialog.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/add-node-dialog/add-node-dialog.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/link-node-dialog/link-node-dialog.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/link-node-dialog/link-node-dialog.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc2graph.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/cystoscape-viewport.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc-activity-manage.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc-activity-creation.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-details-sidebar/node-details-sidebar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-details-sidebar/node-details-sidebar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-action-toolbar/node-action-toolbar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-action-toolbar/node-action-toolbar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-search-panel/node-search-panel.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-search-panel/node-search-panel.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/constants/wxcc-api.constants.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc-flow-api.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-file-selection-bar/wxcc-file-selection-bar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-file-selection-bar/wxcc-file-selection-bar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-actions-bar/wxcc-actions-bar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-actions-bar/wxcc-actions-bar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/cc-script-editor.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/cc-script-editor.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.module.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/cc-script-editor.module.ts","../../../../projects/tuki/widgets/contact-center/shared/dcp-api.service.ts","../../../../projects/tuki/widgets/contact-center/cc-import/types/uccx.ts","../../../../projects/tuki/widgets/contact-center/cc-import/constants/cc-import.constants.ts","../../../../projects/tuki/widgets/contact-center/cc-import/mock/cc-import.mock.ts","../../../../projects/tuki/widgets/contact-center/cc-import/cc-import.service.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.html","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.html","../../../../projects/tuki/widgets/contact-center/cc-import/cc-import.module.ts","../../../../projects/tuki/widgets/contact-center/tuki-io-tuki-widgets-contact-center.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class APIService {\r\ntoken!: string;\r\napiUrl!: string;\r\n\r\nconstructor(\r\n  private httpClient: HttpClient\r\n  ) { }\r\n\r\n  fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n    const headers = this.getHeaders(cache);\r\n    params = params || {};\r\n    return this.httpClient.get(this.apiUrl + url, {params: this.prepareEncodedParams(params), headers});\r\n  }\r\n\r\n  post(url: string, body: any, params = {}, options: { responseType?: 'json' | 'blob' } = {}): Observable<any> {\r\n    body = body || null;\r\n    const headers = this.getHeaders();\r\n    return this.httpClient.post(this.apiUrl + url, body, {\r\n      params: this.prepareEncodedParams(params),\r\n      headers,\r\n      // Some migration endpoints answer with a file rather than JSON.\r\n      responseType: (options.responseType || 'json') as 'json'\r\n    });\r\n  }\r\n\r\n  // use when response extended data is necessary:\r\n  postExtended(url: string, body = null, params = {}, headers = {}) {\r\n    headers = headers || this.getHeaders();\r\n    return this.httpClient.post(this.apiUrl + url, body, {\r\n      headers,\r\n      observe: 'response',\r\n      params: this.prepareEncodedParams(params)\r\n    });\r\n  }\r\n\r\n  put(url: string, body = null, params = {}) {\r\n    const headers = this.getHeaders();\r\n    return this.httpClient.put(this.apiUrl + url, body, {headers, params: this.prepareEncodedParams(params)});\r\n  }\r\n\r\n  delete(url: string, params = {}) {\r\n    const headers = this.getHeaders();\r\n    return this.httpClient.delete(this.apiUrl + url, {headers, params: this.prepareEncodedParams(params)});\r\n  }\r\n\r\n  fetchPagination(url: string, pageSize: number, pageNumber: number, additionalParams = {}, cache?: boolean): Observable<any> {\r\n    const copyAdditionalParams = JSON.parse(JSON.stringify(additionalParams));\r\n    const params = Object.assign(copyAdditionalParams, {size: pageSize.toString(), page: pageNumber.toString()});\r\n    return this.fetch(url, params, cache) as Observable<any>;\r\n  }\r\n\r\n  private prepareEncodedParams(params: any) {\r\n    const result: any = {};\r\n\r\n    if (!params) {\r\n      return {};\r\n    }\r\n    for (const key of Object.keys(params)) {\r\n      if (params[key]) {\r\n        const stringParam = params[key].toString();\r\n        result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  private getHeaders(cache?: boolean): HttpHeaders {\r\n    let headers = new HttpHeaders();\r\n    if (cache) {\r\n      headers = headers.append('_Cache', 'true ');\r\n    }\r\n    const token = this.token || this.getParameterByName('token');\r\n    headers = headers.append('Authorization', 'Bearer '+ token);\r\n    return headers;\r\n  }\r\n\r\n  private getParameterByName(name: any, url = window.location.href) {\r\n    name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n      results = regex.exec(url);\r\n    if (!results) return null;\r\n    if (!results[2]) return '';\r\n    return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n  }\r\n}","export const API = {\r\n    READINESS: {\r\n        UCCX_SERVER_ENTITY_STATS: (customerId: number) => `/api/uccx/migration/customer/${customerId}/entity-counts`,\r\n        LICENSE_USAGE_SUMMARY: (customerId: number) => `/api/uccx/migration/customer/${customerId}/cc-license-stats`,\r\n    },\r\n    /**\r\n     * The application-centric UCCX migration endpoints, as used by webex-ops-client\r\n     * (`ContactCenterService` / `constants.json`). There is no dedicated\r\n     * \"contact center\" API - a contact center *is* a UCCX application, and its\r\n     * entities are reached through the e2emigration batches that carry it.\r\n     */\r\n    UCCX: {\r\n        /** Every UCCX application known for the customer. Served by the **dcp** host. */\r\n        APPLICATION_NAMES: (customerId: number) =>\r\n            `/api/cache/uccx/application/customer/${customerId}/getall`,\r\n        /** All UCCX batches for the customer, one per entity type. */\r\n        BATCHES: (customerId: number) =>\r\n            `/api/e2emigration/batch/${customerId}/UCCX`,\r\n        /**\r\n         * The entities of one batch.\r\n         *\r\n         * It also takes an `applicationName` param, but on dev2 that filter answers\r\n         * `[]` for every application - including ones whose items *do* carry a\r\n         * matching `applicationName` - so the widget reads the batch unfiltered and\r\n         * narrows on the item field itself.\r\n         */\r\n        BATCH_ITEMS: (customerId: number, batchId: string | number) =>\r\n            `/api/e2emigration/batch/${batchId}/customer/${customerId}/uccx/filter`,\r\n        /** Per-AEF-script migration state (NEW / MIGRATED / MIGRATION_FAILED / ...). */\r\n        CALL_FLOW_MIGRATION_STATUSES: (customerId: number) =>\r\n            `/api/uccx/migration/customer/${customerId}/callflow/getAll`,\r\n        /** Runs the UCCX -> Webex Contact Center migration. Responds with an XLSX tracker. */\r\n        MIGRATE: (customerId: number) =>\r\n            `/api/migration/webex/customer/${customerId}/uccx/migrate`,\r\n    }\r\n}\r\n","import { inject, Inject, Injectable } from '@angular/core';\r\nimport { APIService } from '../shared/api.service';\r\nimport { UccxServerEntityStats, WebexLicenseUsageSummary } from './types/cc-readiness';\r\nimport { API } from '../shared/api.endpoints';\r\nimport { catchError, map, Observable, throwError } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CcReadinessService {\r\n  private readonly api = inject(APIService);\r\n\r\n  constructor() { }\r\n\r\n  fetchUccxServerEntityStats(customerId: number): Observable<UccxServerEntityStats[]> {\r\n    return this.api.fetch(API.READINESS.UCCX_SERVER_ENTITY_STATS(customerId))\r\n      .pipe(map((stats: UccxServerEntityStats[]) => {\r\n        stats.forEach(stat => {\r\n          // @ts-ignore\r\n          delete stat.counts.reasonCodes;\r\n        });\r\n        return stats;\r\n      }));\r\n  }\r\n\r\n  fetchWebexLicenseUsageSummary(customerId: number): Observable<WebexLicenseUsageSummary[]> {\r\n    return this.api.fetch(API.READINESS.LICENSE_USAGE_SUMMARY(customerId));\r\n  }\r\n\r\n  setToken(token: string): void {\r\n    this.api.token = token;\r\n  }\r\n\r\n  setHost(host: string): void {\r\n    this.api.apiUrl = host;\r\n  }\r\n}","import { Component, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Standard contact-center panel chrome. Content goes into the `card-content` slot;\r\n * `card-title-adornment` takes a small element rendered next to the title (info icon,\r\n * badge).\r\n */\r\n@Component({\r\n    selector: 'tk-card',\r\n    templateUrl: './card.component.html',\r\n    styleUrls: ['./card.component.scss']\r\n})\r\nexport class CardComponent {\r\n    @Input() title!: string;\r\n    /** Tightens the padding and inner spacing for compact panels. */\r\n    @Input() dense = false;\r\n}\r\n","<article class=\"card\" [class.card--dense]=\"dense\">\r\n    <header class=\"card__header\">\r\n        <div class=\"card__title-group\">\r\n            <h2>{{ title }}</h2>\r\n            <ng-content select=\"card-title-adornment\"></ng-content>\r\n        </div>\r\n        <!--<div class=\"card__menu-button\">\r\n            <img width=\"18\" src=\"assets/icons/menu_icon.png\" alt=\"Menu Icon\">\r\n        </div>-->\r\n    </header>\r\n    <div class=\"card__content\">\r\n        <ng-content select=\"card-content\"></ng-content>\r\n    </div>\r\n</article>\r\n","import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, inject } from '@angular/core';\r\nimport { ApexChart, ApexDataLabels, ApexLegend, ApexNonAxisChartSeries, ApexPlotOptions, ApexTooltip } from 'ng-apexcharts';\r\nimport { catchError, finalize, of, Subscription } from 'rxjs';\r\nimport { CcReadinessService } from '../../cc-readiness.service';\r\nimport { WebexLicenseUsageSummary } from '../../types/cc-readiness';\r\n\r\ninterface LicenseLegendItem {\r\n  label: string;\r\n  count: number;\r\n  percentage: number;\r\n  color: string;\r\n}\r\n\r\ninterface LicenseTableRow {\r\n  label: string;\r\n  value: number;\r\n}\r\n\r\ninterface LicenseChartOptions {\r\n  series: ApexNonAxisChartSeries;\r\n  chart: ApexChart;\r\n  labels: string[];\r\n  colors: string[];\r\n  legend: ApexLegend;\r\n  plotOptions: ApexPlotOptions;\r\n  dataLabels: ApexDataLabels;\r\n  tooltip: ApexTooltip;\r\n}\r\n\r\ninterface LicenseRequirementViewModel {\r\n  chartOptions: LicenseChartOptions;\r\n  legendItems: LicenseLegendItem[];\r\n  rows: LicenseTableRow[];\r\n  totalRequired: number;\r\n}\r\n\r\nconst LEGEND_COLORS = {\r\n  existing: '#16A693',\r\n  missing: '#808080',\r\n  empty: '#E0E0E0'\r\n};\r\n\r\n@Component({\r\n  selector: 'cc-licenses-requirement',\r\n  templateUrl: './licences-requirement.component.html',\r\n  styleUrls: ['./licences-requirement.component.scss']\r\n})\r\nexport class LicencesRequirementComponent implements OnInit, OnDestroy, OnChanges {\r\n  @Input() customerId!: number;\r\n  @Input() host!: string;\r\n  @Input() token!: string;\r\n\r\n  private readonly ccReadinessService = inject(CcReadinessService);\r\n  private subscription?: Subscription;\r\n\r\n  viewModel: LicenseRequirementViewModel | null = null;\r\n  loading = false;\r\n  error = false;\r\n\r\n  filters: string[] = ['All'];\r\n  selectedSummaryIndex = 0;\r\n\r\n  private summary: WebexLicenseUsageSummary | null = null;\r\n\r\n  ngOnInit(): void {\r\n    this.loadSummaries();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscription?.unsubscribe();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if ((changes['customerId'] && !changes['customerId'].firstChange) ||\r\n      (changes['token'] && !changes['token'].firstChange)) {\r\n      this.loadSummaries();\r\n    }\r\n  }\r\n\r\n  onFilterChange(index: number): void {\r\n    if (!isNaN(index) && index >= 0 && index < this.filters.length) {\r\n      this.selectFilter(index);\r\n    }\r\n  }\r\n\r\n  private loadSummaries(): void {\r\n    const numericCustomerId = Number(this.customerId);\r\n    if (!numericCustomerId || !this.token) {\r\n      return;\r\n    }\r\n\r\n    this.subscription?.unsubscribe();\r\n    this.loading = true;\r\n    this.error = false;\r\n    this.viewModel = null;\r\n    this.selectedSummaryIndex = 0;\r\n\r\n    this.ccReadinessService.setHost(this.host);\r\n    this.ccReadinessService.setToken(this.token);\r\n\r\n    this.subscription = this.ccReadinessService.fetchWebexLicenseUsageSummary(numericCustomerId)\r\n      .pipe(\r\n        catchError(error => {\r\n          console.error('Unable to load Webex license usage summary', error);\r\n          this.error = true;\r\n          return of<WebexLicenseUsageSummary[]>([]);\r\n        }),\r\n        finalize(() => this.loading = false)\r\n      )\r\n      .subscribe(items => {\r\n        console.log('Raw API response:', items);\r\n        // Handle both array and single object responses\r\n        if (Array.isArray(items) && items.length > 0) {\r\n          this.summary = items[0];\r\n        } else if (items && typeof items === 'object' && !Array.isArray(items)) {\r\n          // If single object returned, use it directly\r\n          this.summary = items as unknown as WebexLicenseUsageSummary;\r\n        } else {\r\n          this.summary = null;\r\n        }\r\n\r\n        // Build filters dynamically from license names\r\n        if (this.summary?.licenses?.length) {\r\n          this.filters = ['All', ...this.summary.licenses.map(l => l.name)];\r\n        } else {\r\n          this.filters = ['All'];\r\n        }\r\n\r\n        console.log('Processed summary:', this.summary);\r\n        this.selectFilter(0);\r\n      });\r\n  }\r\n\r\n  private selectFilter(index: number): void {\r\n    this.selectedSummaryIndex = index;\r\n    if (!this.summary) {\r\n      this.viewModel = null;\r\n      return;\r\n    }\r\n    this.viewModel = this.mapSummaryToViewModel(this.summary, index);\r\n    console.log('Created viewModel for filter index', index, ':', this.viewModel);\r\n  }\r\n\r\n  private mapSummaryToViewModel(summary: WebexLicenseUsageSummary, filterIndex: number): LicenseRequirementViewModel {\r\n    console.log('Mapping summary to viewModel:', summary, 'filterIndex:', filterIndex);\r\n\r\n    const licenses = summary.licenses || [];\r\n\r\n    let existingCount: number;\r\n    let missingCount: number;\r\n    let rows: LicenseTableRow[];\r\n\r\n    if (filterIndex === 0) {\r\n      // \"All\" filter: show totalExistingLicenses vs total consumedUnits\r\n      existingCount = summary.totalExistingLicenses ?? 0;\r\n      missingCount = licenses.reduce((acc, l) => acc + l.consumedUnits, 0);\r\n      rows = licenses.map(l => ({\r\n        label: l.name,\r\n        value: l.consumedUnits\r\n      }));\r\n    } else {\r\n      // Specific license filter: show 0 existing vs consumedUnits for that license\r\n      const selectedLicense = licenses[filterIndex - 1];\r\n      existingCount = 0;\r\n      missingCount = selectedLicense?.consumedUnits ?? 0;\r\n      rows = selectedLicense ? [{ label: selectedLicense.name, value: selectedLicense.consumedUnits }] : [];\r\n    }\r\n\r\n    const totalLicenses = existingCount + missingCount;\r\n\r\n    const legendItems: LicenseLegendItem[] = [\r\n      {\r\n        label: 'Existing licenses',\r\n        count: existingCount,\r\n        percentage: totalLicenses > 0 ? (existingCount / totalLicenses) * 100 : 0,\r\n        color: LEGEND_COLORS.existing\r\n      },\r\n      {\r\n        label: 'Missing licenses',\r\n        count: missingCount,\r\n        percentage: totalLicenses > 0 ? (missingCount / totalLicenses) * 100 : 0,\r\n        color: LEGEND_COLORS.missing\r\n      }\r\n    ];\r\n\r\n    console.log('Legend items:', legendItems);\r\n    console.log('Table rows:', rows);\r\n\r\n    const totalRequired = existingCount + missingCount;\r\n\r\n    return {\r\n      chartOptions: this.buildChartOptions(legendItems),\r\n      legendItems,\r\n      rows,\r\n      totalRequired\r\n    };\r\n  }\r\n\r\n  private buildChartOptions(legendItems: LicenseLegendItem[]): LicenseChartOptions {\r\n    const totalCount = legendItems.reduce((acc, item) => acc + item.count, 0);\r\n    const isEmpty = totalCount === 0;\r\n\r\n    // For empty chart, show a full light gray donut\r\n    const series = isEmpty ? [1] : legendItems.map(item => item.count);\r\n    const labels = isEmpty ? ['No data'] : legendItems.map(item => item.label);\r\n    const colors = isEmpty ? [LEGEND_COLORS.empty] : legendItems.map(item => item.color);\r\n\r\n    return {\r\n      series,\r\n      chart: {\r\n        type: 'donut',\r\n        height: 220\r\n      },\r\n      labels,\r\n      colors,\r\n      legend: {\r\n        show: false\r\n      },\r\n      plotOptions: {\r\n        pie: {\r\n          donut: {\r\n            size: '75%'\r\n          }\r\n        }\r\n      },\r\n      dataLabels: {\r\n        enabled: false\r\n      },\r\n      tooltip: {\r\n        enabled: !isEmpty\r\n      }\r\n    };\r\n  }\r\n\r\n  private normalizePercentage(value: number): number {\r\n    if (!isFinite(value)) {\r\n      return 0;\r\n    }\r\n    // Convert decimal to percentage (0.9487 → 94.9)\r\n    const percentage = value * 100;\r\n    return Math.round(percentage * 10) / 10;\r\n  }\r\n}\r\n","<tk-card title=\"Licenses requirement\">\r\n  <ng-container ngProjectAs=\"card-content\">\r\n    <div\r\n      class=\"widget-body\"\r\n      *ngIf=\"!loading && !error && viewModel; else widgetState\"\r\n    >\r\n      <div class=\"left-section\">\r\n        <mat-select\r\n          [(value)]=\"selectedSummaryIndex\"\r\n          (selectionChange)=\"onFilterChange($event.value)\"\r\n          class=\"filter-select\"\r\n        >\r\n          <mat-option *ngFor=\"let option of filters; index as i\" [value]=\"i\">\r\n            {{ option }}\r\n          </mat-option>\r\n        </mat-select>\r\n\r\n        <div class=\"chart-section\">\r\n          <div class=\"chart-wrapper\">\r\n            <apx-chart\r\n              [series]=\"viewModel.chartOptions.series\"\r\n              [chart]=\"viewModel.chartOptions.chart\"\r\n              [labels]=\"viewModel.chartOptions.labels\"\r\n              [colors]=\"viewModel.chartOptions.colors\"\r\n              [legend]=\"viewModel.chartOptions.legend\"\r\n              [plotOptions]=\"viewModel.chartOptions.plotOptions\"\r\n              [dataLabels]=\"viewModel.chartOptions.dataLabels\"\r\n              [tooltip]=\"viewModel.chartOptions.tooltip\"\r\n            >\r\n            </apx-chart>\r\n          </div>\r\n          <div class=\"legend\">\r\n            <div class=\"legend-item\" *ngFor=\"let item of viewModel.legendItems\">\r\n              <span\r\n                class=\"legend-marker\"\r\n                [style.backgroundColor]=\"item.color\"\r\n              ></span>\r\n              <span class=\"legend-label\">{{ item.label }}</span>\r\n              <span class=\"legend-value\">{{ item.count | number }}</span>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"divider\" aria-hidden=\"true\"></div>\r\n\r\n      <div class=\"table-section\">\r\n        <div class=\"lic-table-header\">\r\n          <span>License</span>\r\n          <span>Required</span>\r\n        </div>\r\n        <div class=\"table-row\" *ngFor=\"let row of viewModel.rows\">\r\n          <span>{{ row.label }}</span>\r\n          <span>{{ row.value | number }}</span>\r\n        </div>\r\n        <div class=\"table-row total-row\">\r\n          <span>Total</span>\r\n          <span>{{ viewModel.totalRequired | number }}</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <ng-template #widgetState>\r\n      <div class=\"state-message\" *ngIf=\"loading\">\r\n        Loading license requirements…\r\n      </div>\r\n      <div class=\"state-message error\" *ngIf=\"!loading && error\">\r\n        Unable to load license requirements.\r\n      </div>\r\n      <div class=\"state-message\" *ngIf=\"!loading && !error && !viewModel\">\r\n        No license data available.\r\n      </div>\r\n    </ng-template>\r\n  </ng-container>\r\n</tk-card>\r\n","import { Component, inject, Input, OnInit } from \"@angular/core\";\r\nimport { CcReadinessService } from \"../../cc-readiness.service\";\r\nimport { map, Observable } from \"rxjs\";\r\nimport { EntityType, UccxServerEntityStats } from \"../../types/cc-readiness\";\r\n\r\ninterface SummaryGridCount {\r\n    name: string;\r\n    value: number;\r\n}\r\n\r\ninterface SummaryGridItem {\r\n    uccxIp: string;\r\n    counts: SummaryGridCount[];\r\n}\r\n\r\nconst ENTITY_CONFIG: { [key: string]: { label: string } } = {\r\n    applications: { label: 'Applications' },\r\n    triggers: { label: 'Triggers' },\r\n    contactServiceQueues: { label: 'CSQs' },\r\n    resources: { label: 'Resources' },\r\n    resourceGroups: { label: 'Resource Groups' },\r\n    skills: { label: 'Skills' },\r\n    xml: { label: 'XML' },\r\n    scripts: { label: 'Scripts' },\r\n    audioPrompts: { label: 'Audio Prompts' },\r\n    teams: { label: 'Teams' },\r\n    wrapUpCodes: { label: 'Wrap-Up Codes' },\r\n    phonebooks: { label: 'Phonebooks' }\r\n};\r\n\r\n@Component({\r\n    selector: 'cc-summary-grid',\r\n    templateUrl: 'summary-grid.component.html',\r\n    styleUrls: ['summary-grid.component.scss']\r\n})\r\nexport class SummaryGridComponent implements OnInit {\r\n    @Input() customerId!: number;\r\n    @Input() host!: string;\r\n    @Input() token!: string;\r\n\r\n    private readonly ccReadinessService = inject(CcReadinessService);\r\n\r\n    readonly ENTITY_CONFIG = ENTITY_CONFIG;\r\n\r\n    data$!: Observable<SummaryGridItem[]>;\r\n\r\n    ngOnInit(): void {\r\n        this.ccReadinessService.setToken(this.token);\r\n        this.ccReadinessService.setHost(this.host);\r\n\r\n        this.data$ = this.ccReadinessService.fetchUccxServerEntityStats(this.customerId)\r\n            .pipe(map(items => {\r\n                return items.map(item => ({\r\n                    uccxIp: item.uccxIp,\r\n                    counts: Object.entries(item.counts).map(([name, value]) => ({ name, value }))\r\n                }));\r\n            }));\r\n    }\r\n}","<ng-container *ngIf=\"data$ | async as data\">\r\n    <div *ngFor=\"let stats of data\">\r\n        <tk-card [title]=\"stats.uccxIp\">\r\n            <ng-container ngProjectAs=\"card-content\">\r\n                <div class=\"grid-wrapper\">\r\n                    <div class=\"grid-item\" *ngFor=\"let item of stats.counts\">\r\n                        <div class=\"item-top\">\r\n                            <span class=\"item-icon\">\r\n                                <img width=\"24\" height=\"24\" src=\"assets/icons/{{ item.name }}.svg\" alt=\"{{ item.name }} Icon\">\r\n                            </span>\r\n                            <span class=\"item-count\">{{ item.value }}</span>\r\n                        </div>\r\n                        <span class=\"item-label\">{{ ENTITY_CONFIG[item.name].label }}</span>\r\n                    </div>\r\n                </div>\r\n            </ng-container>\r\n        </tk-card>\r\n    </div>\r\n</ng-container>","import { NgModule } from \"@angular/core\";\r\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\"\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatProgressSpinner, MatProgressSpinnerModule, MatSpinner } from \"@angular/material/progress-spinner\";\r\n\r\n@NgModule({\r\n    imports: [\r\n        MatProgressBarModule,\r\n        MatTooltipModule,\r\n        MatTableModule,\r\n        MatCheckboxModule,\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        MatFormFieldModule,\r\n        MatInputModule,\r\n        MatSelectModule\r\n    ],\r\n    exports: [\r\n        MatProgressBarModule,\r\n        MatTooltipModule,\r\n        MatTableModule,\r\n        MatCheckboxModule,\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        MatFormFieldModule,\r\n        MatInputModule,\r\n        MatSelectModule,\r\n        MatProgressSpinnerModule\r\n    ]\r\n})\r\nexport class MaterialModule { }","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MaterialModule } from \"./material.module\";\r\nimport { NgApexchartsModule } from \"ng-apexcharts\"\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { CardComponent } from \"./components/card/card.component\";\r\n\r\n/**\r\n * Presentational building blocks shared by the contact-center widgets.\r\n * Widget modules import this to pick up the standard card chrome plus the\r\n * Material/Apex modules they all need.\r\n */\r\n@NgModule({\r\n    declarations: [\r\n        CardComponent\r\n    ],\r\n    imports: [\r\n        CommonModule,\r\n        MaterialModule,\r\n        NgApexchartsModule,\r\n        HttpClientModule\r\n    ],\r\n    exports: [\r\n        MaterialModule,\r\n        CardComponent\r\n    ]\r\n})\r\nexport class SharedModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { LicencesRequirementComponent } from './widgets/licences-requirement/licences-requirement.component';\r\nimport { SummaryGridComponent } from './widgets/summary-grid/summary-grid.component';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { MaterialModule } from '../shared/material.module';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTableModule } from '@angular/material/table';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    LicencesRequirementComponent,\r\n    SummaryGridComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    SharedModule,\r\n    HttpClientModule,\r\n    NgApexchartsModule,\r\n    MatTableModule,\r\n    MatButtonModule,\r\n    MatCheckboxModule,\r\n    MatSelectModule,\r\n    MatProgressSpinnerModule,\r\n    MatOptionModule,\r\n    MatPaginatorModule,\r\n    MatSelectModule\r\n  ],\r\n  exports: [\r\n    LicencesRequirementComponent,\r\n    SummaryGridComponent\r\n  ]\r\n})\r\nexport class CcReadinessModule { }\r\n","import { StylesheetStyle } from \"cytoscape\";\r\n\r\nexport const StyleConfig: StylesheetStyle[] = [\r\n    {\r\n        selector: 'node',\r\n        style: {\r\n            'background-color': 'transparent',\r\n            'background-opacity': 0,\r\n            'width': 220,\r\n            'height': 100,\r\n            'shape': 'roundrectangle',\r\n            'border-width': 0\r\n        }\r\n    },\r\n    {\r\n        selector: 'node:selected',\r\n        style: {\r\n            'background-color': 'transparent',\r\n            'background-opacity': 0\r\n        }\r\n    },\r\n    {\r\n        selector: 'edge',\r\n        style: {\r\n            'width': 1,\r\n            'line-color': '#d4d4d4',\r\n            // 'line-color': '#B0BEC5',\r\n            'target-arrow-color': '#d4d4d4',\r\n            'target-arrow-shape': 'triangle',\r\n            'curve-style': 'bezier',\r\n            'control-point-step-size': 40,\r\n            'label': 'data(label)',\r\n            'font-size': '9px',\r\n            'color': '#546E7A',\r\n            'text-background-color': '#fff',\r\n            'text-background-opacity': 1,\r\n            'text-background-padding': '4px',\r\n            'text-border-width': 1,\r\n            'text-border-color': '#E0E0E0',\r\n            'text-border-opacity': 0.8,\r\n            'text-margin-y': -10,\r\n            'z-index': 10\r\n        }\r\n    },\r\n    {\r\n        selector: 'edge[label=\"default\"]',\r\n        style: {\r\n            'line-color': '#90A4AE',\r\n            'target-arrow-color': '#90A4AE'\r\n        }\r\n    },\r\n    {\r\n        selector: 'edge[label=\"queued\"]',\r\n        style: {\r\n            'line-color': '#66BB6A',\r\n            'target-arrow-color': '#66BB6A'\r\n        }\r\n    },\r\n    {\r\n        selector: 'edge[label=\"failure\"]',\r\n        style: {\r\n            'line-color': '#EF5350',\r\n            'target-arrow-color': '#EF5350'\r\n        }\r\n    },\r\n    {\r\n        selector: ':selected',\r\n        style: {\r\n            'line-color': '#FF6B6B',\r\n            'target-arrow-color': '#FF6B6B'\r\n        }\r\n    }\r\n];","import { ExtendedActivityType } from \"../types/extended-activity\";\r\nimport { WxCCActivityType, WxCCTemplatedActivityType } from \"../types/wxcc-activity\";\r\n\r\nexport interface IconInfo {\r\n    iconSrc: string;\r\n    alt: string;\r\n}\r\n\r\nexport interface ActivityDisplayType {\r\n    activityName: ExtendedActivityType,\r\n    value: ActivityDisplayTypeValue;\r\n    label: string;\r\n    icon: string;\r\n    group: string;\r\n}\r\n\r\nexport interface CreatableActivityDisplayType extends ActivityDisplayType {\r\n    activityName: WxCCTemplatedActivityType;\r\n}\r\n\r\nconst CREATABLE_WXCC_ACTIVITY_TYPES: ReadonlySet<WxCCTemplatedActivityType> = new Set<WxCCTemplatedActivityType>([\r\n    'NewPhoneContact',\r\n    'play-message',\r\n    'play-music',\r\n    'ivr-menu',\r\n    'set-variable',\r\n    'blind-transfer',\r\n    'business-hours',\r\n]);\r\n\r\nexport type ActivityDisplayTypeValue =\r\n    | 'condition-activity'\r\n    | 'queue-contact'\r\n    | 'ivr-menu'\r\n    | 'blind-transfer'\r\n    | 'wait-activity'\r\n    | 'newphonecontact'\r\n    | 'disconnect-contact'\r\n    | 'play-message'\r\n    | 'play-music'\r\n    | 'unmapped'\r\n    | 'business-hours'\r\n    | 'set-variable'\r\n    | 'end'\r\n\r\n/**\r\n * Map of node icons based on display type or label\r\n */\r\nexport const ICON_MAP: { [key in ActivityDisplayTypeValue]: string } = {\r\n    'condition-activity': 'assets/wxcc/if.svg',\r\n    'queue-contact': 'assets/wxcc/route.svg',\r\n    'ivr-menu': 'assets/wxcc/m1.svg',\r\n    'blind-transfer': 'assets/wxcc/terminate2.svg',\r\n    'wait-activity': 'assets/wxcc/delay.svg',\r\n    'newphonecontact': 'assets/wxcc/p1.svg',\r\n    'disconnect-contact': 'assets/wxcc/terminate2.svg',\r\n    'play-message': 'assets/wxcc/s1.svg',\r\n    'play-music': 'assets/wxcc/delay.svg',\r\n    'unmapped': 'assets/wxcc/unmapped.svg',\r\n    'business-hours': 'assets/wxcc/c2.svg',\r\n    'set-variable': 'assets/wxcc/variable.svg',\r\n    'end': 'assets/wxcc/close1.svg'\r\n};\r\n\r\n/**\r\n * Map of node color classes based on group\r\n */\r\nconst COLOR_CLASS_MAP: { [key: string]: string } = {\r\n    'start': 'node-start',\r\n    'end': 'node-end',\r\n    'terminating-action': 'node-end',\r\n    'set-variable': 'node-action',\r\n    'unmapped': 'node-default',\r\n    'enum-gateway': 'node-gateway',\r\n    'action': 'node-action'\r\n};\r\n\r\n/**\r\n * Map of activity type labels based on group\r\n */\r\nconst ACTIVITY_TYPE_LABELS: { [key: string]: string } = {\r\n    'start': 'Start',\r\n    'end': 'End',\r\n    'terminating-action': 'Terminate',\r\n    'enum-gateway': 'Menu',\r\n    'action': 'Action',\r\n    'unmapped': 'Unmapped'\r\n};\r\n\r\n/**\r\n * All available activity display types for node configuration\r\n * Values match ICON_MAP keys exactly\r\n */\r\nexport const ACTIVITY_DISPLAY_TYPES: ActivityDisplayType[] = [\r\n    { activityName: 'NewPhoneContact', value: 'newphonecontact', label: 'Start', icon: ICON_MAP['newphonecontact'], group: 'start' },\r\n    { activityName: 'end', value: 'end', label: 'End', icon: ICON_MAP['end'], group: 'end' },\r\n    { activityName: 'play-message', value: 'play-message', label: 'Play Message', icon: ICON_MAP['play-message'], group: 'action' },\r\n    { activityName: 'ivr-menu', value: 'ivr-menu', label: 'Menu', icon: ICON_MAP['ivr-menu'], group: 'enum-gateway' },\r\n    { activityName: 'queue-contact', value: 'queue-contact', label: 'Queue Contact', icon: ICON_MAP['queue-contact'], group: 'action' },\r\n    { activityName: 'set-variable', value: 'set-variable', label: 'Set Variable', icon: ICON_MAP['set-variable'], group: 'set-variable' },\r\n    { activityName: 'condition-activity', value: 'condition-activity', label: 'Condition', icon: ICON_MAP['condition-activity'], group: 'enum-gateway' },\r\n    { activityName: 'business-hours', value: 'business-hours', label: 'Business Hours', icon: ICON_MAP['business-hours'], group: 'enum-gateway' },\r\n    { activityName: 'wait-activity', value: 'wait-activity', label: 'Wait', icon: ICON_MAP['wait-activity'], group: 'action' },\r\n    { activityName: 'play-music', value: 'play-music', label: 'Play Music', icon: ICON_MAP['play-music'], group: 'action' },\r\n    { activityName: 'blind-transfer', value: 'blind-transfer', label: 'Blind Transfer', icon: ICON_MAP['blind-transfer'], group: 'action' },\r\n    { activityName: 'disconnect-contact', value: 'disconnect-contact', label: 'Disconnect', icon: ICON_MAP['disconnect-contact'], group: 'terminating-action' },\r\n    { activityName: 'unmapped', value: 'unmapped', label: 'Unmapped', icon: ICON_MAP['unmapped'], group: 'unmapped' }\r\n];\r\n\r\nexport const CREATABLE_ACTIVITY_DISPLAY_TYPES: CreatableActivityDisplayType[] = ACTIVITY_DISPLAY_TYPES\r\n    .filter(type => CREATABLE_WXCC_ACTIVITY_TYPES.has(type.activityName as WxCCTemplatedActivityType)) as CreatableActivityDisplayType[];\r\n\r\n/**\r\n * Get node icon information based on name or display type\r\n * @param name - The node name or display type\r\n * @returns Icon information with src and alt text\r\n */\r\nexport function getNodeIcon(name: string): IconInfo {\r\n    const key = name.toLowerCase() as ActivityDisplayTypeValue;\r\n    const iconSrc = ICON_MAP[key] || ICON_MAP['unmapped'];\r\n    return { iconSrc, alt: key };\r\n}\r\n\r\n/**\r\n * Get node color class based on group\r\n * @param group - The node group\r\n * @returns CSS class name for node coloring\r\n */\r\nexport function getNodeColorClass(group: string): string {\r\n    return COLOR_CLASS_MAP[group] || 'node-default';\r\n}\r\n\r\n/**\r\n * Get activity type label based on group\r\n * @param group - The node group\r\n * @returns Human-readable activity type label\r\n */\r\nexport function getActivityTypeLabel(group: string): string {\r\n    return ACTIVITY_TYPE_LABELS[group] || 'Activity';\r\n}\r\n\r\n/**\r\n * Find activity display type by value\r\n * @param value - The display type value\r\n * @returns Display type or unmapped if not found\r\n */\r\nexport function getActivityDisplayTypeByValue(value: string): ActivityDisplayType {\r\n    return ACTIVITY_DISPLAY_TYPES.find(dt => dt.value === value) || ACTIVITY_DISPLAY_TYPES[ACTIVITY_DISPLAY_TYPES.length - 1];\r\n}\r\n\r\nexport function getCreatableActivityDisplayTypeByValue(value: string): CreatableActivityDisplayType {\r\n    return CREATABLE_ACTIVITY_DISPLAY_TYPES.find(type => type.value === value) || CREATABLE_ACTIVITY_DISPLAY_TYPES[0];\r\n}\r\n","import { ExtendedActivity, Review } from \"../types/extended-activity\";\r\nimport { getNodeIcon, getNodeColorClass, getActivityTypeLabel } from \"./node-mappings\";\r\n\r\nfunction escapeHtml(text: string): string {\r\n    if (!text) return '';\r\n    return text\r\n        .replace(/&/g, '&amp;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/'/g, '&#039;');\r\n}\r\n\r\nexport function getTranformedActivityName(name: string): string {\r\n    return name\r\n        .split('-')\r\n        .map(s => s.charAt(0).toLocaleUpperCase() + s.slice(1))\r\n        .join(' ');\r\n}\r\n\r\nfunction getReviewElement(review?: Review): string {\r\n    if (!review)\r\n        return `No review is available`;\r\n\r\n    const reviewColor = review.color;\r\n    const reviewColorLabel = `${reviewColor.charAt(0).toUpperCase()}${reviewColor.slice(1)}`;\r\n\r\n    const reviewLevelLabel = review.level.replace('_', ' ');\r\n\r\n    return `\r\n        <span class=\"review-${reviewColor}\">\r\n            ${reviewColorLabel} (${reviewLevelLabel})\r\n        </span>\r\n    `;\r\n}\r\n\r\nexport function getNodeHtmlTemplate(data: ExtendedActivity): string {\r\n    const group = data.wxccGroup || 'unknown';\r\n\r\n    const colorClass = getNodeColorClass(group);\r\n    const typeLabel = getActivityTypeLabel(group);\r\n\r\n    const name = data.name ? data.name.split('\\n')[0] : '';\r\n    const detailsHeading =\r\n        (data.suggestedProperties && data.suggestedProperties.uccxDescription\r\n            ? data.suggestedProperties.uccxDescription\r\n            : '').trim();\r\n    const activityName = data.wxccActivityName || 'unmapped';\r\n\r\n    const iconInfo = data.iconUrl ?\r\n        { iconSrc: data.iconUrl, alt: data.iconUrl } :\r\n        getNodeIcon(typeLabel === 'Unmapped' ? typeLabel : activityName);\r\n    const { iconSrc, alt } = iconInfo;\r\n\r\n    const transformedActivityName = getTranformedActivityName(activityName);\r\n\r\n    const extraDetails: { [key: string]: string } = {\r\n        Review: getReviewElement(data.review)\r\n    };\r\n\r\n    // Allow highlight class to be toggled by data.highlighted property\r\n    const highlightClass = (data as any).highlighted ? 'highlighted' : '';\r\n\r\n    return `\r\n        <div class=\"node-content ${colorClass} ${highlightClass}\">\r\n            <header>\r\n                <div class=\"node-icon\">\r\n                    <img\r\n                        src=\"${iconSrc}\"\r\n                        alt=\"${alt}\"\r\n                        title=\"${typeLabel}\"\r\n                    />\r\n                </div>\r\n                <div class=\"node-info\">\r\n                    <div class=\"node-label\" title=\"${escapeHtml(name)}\">${name}</div>\r\n                    <div class=\"node-activity-name\" title=\"${escapeHtml(transformedActivityName)}\">\r\n                        ${transformedActivityName}\r\n                    </div>\r\n                </div>\r\n            </header>\r\n            <div class=\"node-details\">\r\n                <div class=\"node-details-item\" title=\"${escapeHtml(detailsHeading)}\">${detailsHeading}</div>\r\n                    ${Object.entries(extraDetails).map(([key, value]) => {\r\n        const fullText = `${key}: ${value}`;\r\n        return `<div>${fullText}</div>`;\r\n    })}\r\n            </div>\r\n        </div>\r\n    `;\r\n}","import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core';\r\nimport {\r\n    CREATABLE_ACTIVITY_DISPLAY_TYPES,\r\n    CreatableActivityDisplayType,\r\n    getCreatableActivityDisplayTypeByValue,\r\n} from '../../../utils/node-mappings';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ReadonlyExtendedActivity } from '../../../types/extended-activity';\r\n\r\nexport interface NewNodeData {\r\n    activityTypeName: CreatableActivityDisplayType['activityName'];\r\n    name: string;\r\n    parentNodeIds: string[];\r\n    childNodeIds: string[];\r\n}\r\n\r\n@Component({\r\n    selector: 'add-node-dialog',\r\n    templateUrl: './add-node-dialog.component.html',\r\n    styleUrls: ['./add-node-dialog.component.scss'],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AddNodeDialogComponent implements OnInit {\r\n    readonly activityDisplayTypes = CREATABLE_ACTIVITY_DISPLAY_TYPES;\r\n\r\n    selectedActivityType: CreatableActivityDisplayType = CREATABLE_ACTIVITY_DISPLAY_TYPES[0];\r\n    nodeName = '';\r\n    selectedParentIds: string[] = [];\r\n    selectedChildIds: string[] = [];\r\n    availableNodes: ReadonlyExtendedActivity[] = [];\r\n\r\n    constructor(\r\n        @Inject(MAT_DIALOG_DATA) public data: { availableNodes: ReadonlyExtendedActivity[] },\r\n        private dialogRef: MatDialogRef<AddNodeDialogComponent>\r\n    ) { }\r\n\r\n    ngOnInit(): void {\r\n        this.availableNodes = this.data.availableNodes;\r\n    }\r\n\r\n    private resetForm(): void {\r\n        this.selectedActivityType = CREATABLE_ACTIVITY_DISPLAY_TYPES[0];\r\n        this.nodeName = '';\r\n        this.selectedParentIds = [];\r\n        this.selectedChildIds = [];\r\n    }\r\n\r\n    onActivityTypeChange(value: string): void {\r\n        this.selectedActivityType = getCreatableActivityDisplayTypeByValue(value);\r\n    }\r\n\r\n    onClose(): void {\r\n        this.dialogRef.close();\r\n    }\r\n\r\n    onSubmit(): void {\r\n        if (!this.nodeName.trim()) {\r\n            return;\r\n        }\r\n\r\n        const newNodeData: NewNodeData = {\r\n            activityTypeName: this.selectedActivityType.activityName,\r\n            name: this.nodeName.trim(),\r\n            parentNodeIds: this.selectedParentIds,\r\n            childNodeIds: this.selectedChildIds\r\n        };\r\n\r\n        this.dialogRef.close(newNodeData);\r\n    }\r\n\r\n    trackByValue(index: number, type: CreatableActivityDisplayType): string {\r\n        return type.value;\r\n    }\r\n\r\n    trackByNodeId(index: number, node: ReadonlyExtendedActivity): string {\r\n        return node.id;\r\n    }\r\n}\r\n","","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ReadonlyExtendedActivity } from '../../../types/extended-activity';\r\n\r\nexport interface LinkNodeData {\r\n    sourceNodeId: string;\r\n    targetNodeId: string;\r\n    label?: string;\r\n}\r\n\r\n@Component({\r\n    selector: 'link-node-dialog',\r\n    templateUrl: './link-node-dialog.component.html',\r\n    styleUrls: ['./link-node-dialog.component.scss'],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class LinkNodeDialogComponent implements OnInit, OnChanges {\r\n    // @Input() isOpen = false;\r\n    // @Input() sourceNode: ActivityData | null = null;\r\n    \r\n    availableNodes: ReadonlyExtendedActivity[] = [];\r\n    sourceNode!: ReadonlyExtendedActivity;\r\n\r\n    @Output() close = new EventEmitter<void>();\r\n    @Output() linkNodes = new EventEmitter<LinkNodeData>();\r\n\r\n    selectedTargetId: string | null = null;\r\n    linkLabel = '';\r\n    searchQuery = '';\r\n\r\n    constructor(\r\n        @Inject(MAT_DIALOG_DATA) public data: {\r\n            sourceNode: ReadonlyExtendedActivity,\r\n            availableNodes: ReadonlyExtendedActivity[]\r\n        },\r\n        private readonly dialogRef: MatDialogRef<LinkNodeDialogComponent>\r\n    ) {}\r\n\r\n    ngOnInit(): void {\r\n        this.availableNodes = this.data.availableNodes;\r\n        this.sourceNode = this.data.sourceNode;\r\n    }\r\n\r\n    get filteredNodes(): ReadonlyExtendedActivity[] {\r\n        if (!this.sourceNode) {\r\n            return [];\r\n        }\r\n        \r\n        if (!this.searchQuery.trim()) {\r\n            return this.availableNodes.filter(n => n && n.id !== this.sourceNode!.id);\r\n        }\r\n        \r\n        const query = this.searchQuery.toLowerCase();\r\n        return this.availableNodes.filter(n => \r\n            n && n.id !== this.sourceNode!.id && \r\n            ((n.name && n.name.toLowerCase().includes(query)) || \r\n             (n.wxccActivityName && n.wxccActivityName.toLowerCase().includes(query)))\r\n        );\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        // if (changes['isOpen'] && this.isOpen) {\r\n        //     this.resetForm();\r\n        // }\r\n    }\r\n\r\n    private resetForm(): void {\r\n        this.selectedTargetId = null;\r\n        this.linkLabel = '';\r\n        this.searchQuery = '';\r\n    }\r\n\r\n    selectNode(nodeId: string): void {\r\n        this.selectedTargetId = nodeId;\r\n    }\r\n\r\n    isSelected(nodeId: string): boolean {\r\n        return this.selectedTargetId === nodeId;\r\n    }\r\n\r\n    onClose(): void {\r\n        this.dialogRef.close();\r\n    }\r\n    \r\n\r\n    onSubmit(): void {\r\n        if (!this.sourceNode || !this.selectedTargetId) {\r\n            return;\r\n        }\r\n\r\n        const linkData: LinkNodeData = {\r\n            sourceNodeId: this.sourceNode.id,\r\n            targetNodeId: this.selectedTargetId,\r\n            label: this.linkLabel.trim() || undefined\r\n        };\r\n\r\n        this.dialogRef.close(linkData);\r\n        // this.linkNodes.emit(linkData);\r\n        // this.onClose();\r\n    }\r\n\r\n    trackByNodeId(index: number, node: ReadonlyExtendedActivity): string {\r\n        return node.id;\r\n    }\r\n}\r\n","","import { Injectable } from \"@angular/core\";\r\nimport * as uuid from \"uuid\";\r\nimport { IWxCCFlowchart, IWxCCJSON, IWxCCNonIRJSON, WxCCFlowchartEdge, WxCCFlowchartNode } from \"../types/wxcc\";\r\nimport { ExtendedActivity, ExtendedLink } from \"../types/extended-activity\";\r\n\r\n@Injectable()\r\nexport class WxCC2GraphService {\r\n    wxccJSON!: IWxCCJSON;\r\n    wxccNonIRJSON!: IWxCCNonIRJSON;\r\n\r\n    parseWxCC(wxcc: IWxCCJSON, nonIr?: IWxCCNonIRJSON): IWxCCFlowchart {\r\n        this.wxccJSON = wxcc;\r\n        if (nonIr) {\r\n            this.wxccNonIRJSON = nonIr;\r\n        }\r\n\r\n        const nodes: WxCCFlowchartNode[] = [];\r\n        const edges: WxCCFlowchartEdge[] = [];\r\n\r\n        wxcc.activities.forEach(activity => nodes.push(this.toWxCCNode(activity)));\r\n        wxcc.links.forEach(link => edges.push(this.toWxCCEdge(link)));\r\n\r\n        return {\r\n            flowId: wxcc.generatedAt,\r\n            flowName: wxcc.prefix,\r\n            nodes: nodes,\r\n            edges: edges\r\n        } as IWxCCFlowchart;\r\n    }\r\n\r\n    setSourceDocuments(ir: IWxCCJSON, nonIr: IWxCCNonIRJSON): void {\r\n        this.wxccJSON = ir;\r\n        this.wxccNonIRJSON = nonIr;\r\n    }\r\n\r\n    updateActivityData(data: ExtendedActivity): boolean {\r\n        const { iconUrl, ...dataWithoutIcon } = data;\r\n\r\n        const wxccActivityData = this.getActivityById(data.id);\r\n\r\n        if (!wxccActivityData) {\r\n            console.error(`Activity with id ${data.id} not found`);\r\n            return false;\r\n        }\r\n\r\n        const source = dataWithoutIcon as Record<string, any>;\r\n        const target = wxccActivityData as Record<string, any>;\r\n\r\n        Object.keys(source).forEach(key => {\r\n            if (typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key])) {\r\n                // For nested objects, merge them recursively\r\n                target[key] = { ...target[key], ...source[key] };\r\n            } else {\r\n                // For primitives and arrays, assign directly\r\n                target[key] = source[key];\r\n            }\r\n        });\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * Add a new activity to the graph\r\n     */\r\n    addActivity(activity: ExtendedActivity): WxCCFlowchartNode {\r\n        // Add to internal JSON structure\r\n        (this.wxccJSON.activities as ExtendedActivity[]).push(activity);\r\n        return this.toWxCCNode(activity);\r\n    }\r\n\r\n    /**\r\n     * Remove an activity and all its connected links\r\n     */\r\n    removeActivity(activityId: string): { removedLinkIds: string[] } {\r\n        // Remove the activity\r\n        const activityIndex = this.wxccJSON.activities.findIndex(a => a.id === activityId);\r\n        if (activityIndex !== -1) {\r\n            (this.wxccJSON.activities as ExtendedActivity[]).splice(activityIndex, 1);\r\n        }\r\n\r\n        // Find and remove all links connected to this activity\r\n        const removedLinkIds: string[] = [];\r\n        const linksToRemove = this.wxccJSON.links.filter(\r\n            link => link.sourceActivityId === activityId || link.targetActivityId === activityId\r\n        );\r\n\r\n        linksToRemove.forEach(link => {\r\n            removedLinkIds.push(link.id);\r\n            const linkIndex = this.wxccJSON.links.findIndex(l => l.id === link.id);\r\n            if (linkIndex !== -1) {\r\n                (this.wxccJSON.links as ExtendedLink[]).splice(linkIndex, 1);\r\n            }\r\n        });\r\n\r\n        return { removedLinkIds };\r\n    }\r\n\r\n    /**\r\n     * Add a new link between two activities\r\n     */\r\n    addLink(sourceActivityId: string, targetActivityId: string, label?: string): WxCCFlowchartEdge {\r\n        const linkId = this.generateId();\r\n\r\n        const link: ExtendedLink = {\r\n            id: linkId,\r\n            sourceActivityId,\r\n            targetActivityId,\r\n            uccxLabel: label || ''\r\n        };\r\n\r\n        (this.wxccJSON.links as ExtendedLink[]).push(link);\r\n        return this.toWxCCEdge(link);\r\n    }\r\n\r\n    /**\r\n     * Remove a link by its id\r\n     */\r\n    removeLink(linkId: string): boolean {\r\n        const linkIndex = this.wxccJSON.links.findIndex(l => l.id === linkId);\r\n        if (linkIndex !== -1) {\r\n            (this.wxccJSON.links as ExtendedLink[]).splice(linkIndex, 1);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Check if a link already exists between two nodes\r\n     */\r\n    linkExists(sourceActivityId: string, targetActivityId: string): boolean {\r\n        return this.wxccJSON.links.some(\r\n            link => link.sourceActivityId === sourceActivityId && link.targetActivityId === targetActivityId\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Get all activities for selection purposes\r\n     */\r\n    getAllActivities(): ExtendedActivity[] {\r\n        return [...this.wxccJSON.activities];\r\n    }\r\n\r\n    getActivityById(id: string): ExtendedActivity | undefined {\r\n        return this.wxccJSON.activities.find(a => a.id === id);\r\n    }\r\n\r\n    generateId() {\r\n        return uuid.v4();\r\n    }\r\n\r\n    private toWxCCNode(activity: ExtendedActivity): WxCCFlowchartNode {\r\n        const label = activity.name || activity.wxccActivityName || 'Activity';\r\n        return {\r\n            data: {\r\n                ...activity,\r\n                label: label\r\n            }\r\n        }\r\n    }\r\n\r\n    private toWxCCEdge(link: ExtendedLink): WxCCFlowchartEdge {\r\n        const label = link.uccxLabel || link.conditionExpr || '';\r\n        return {\r\n            data: {\r\n                ...link,\r\n                source: link.sourceActivityId,\r\n                target: link.targetActivityId,\r\n                label: label\r\n            }\r\n        }\r\n    }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { CollectionReturnValue, Core, Css } from \"cytoscape\";\r\n\r\ntype ViewportConfig = Readonly<{\r\n    minZoomLevel: number,\r\n    maxZoomLevel: number,\r\n    animateOptions: {\r\n        duration: number,\r\n        easing: Css.TransitionTimingFunction\r\n    }\r\n}>;\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class CytoscapeViewportService {\r\n    \r\n    readonly config: ViewportConfig = {\r\n        minZoomLevel: 0.8,\r\n        maxZoomLevel: 1.2,\r\n        animateOptions: {\r\n            duration: 400,\r\n            easing: 'ease-in-out-cubic'\r\n        }\r\n    };\r\n\r\n    zoomIn(cy: Core): void {\r\n        this.handleZoomChange(cy, this.config.maxZoomLevel);\r\n    }\r\n\r\n    zoomOut(cy: Core): void {\r\n        this.handleZoomChange(cy, this.config.minZoomLevel);\r\n    }\r\n\r\n    resetView(cy: Core, eles: CollectionReturnValue): void {\r\n        this.fitToView(cy, eles);\r\n    }\r\n\r\n    private handleZoomChange(cy: Core, zoomLevel: number): void {\r\n        if (cy) {\r\n            const currentZoom = cy.zoom();\r\n            const newZoom = currentZoom * zoomLevel;\r\n            const zoomDelta = newZoom / currentZoom;\r\n\r\n            const pan = cy.pan();\r\n            const containerWidth = cy.width();\r\n            const containerHeight = cy.height();\r\n\r\n            const centerX = containerWidth / 2;\r\n            const centerY = containerHeight / 2;\r\n\r\n            // Adjust pan to zoom toward center\r\n            const newPan = {\r\n                x: centerX - (centerX - pan.x) * zoomDelta,\r\n                y: centerY - (centerY - pan.y) * zoomDelta\r\n            };\r\n\r\n            cy.viewport({\r\n                zoom: newZoom,\r\n                pan: newPan\r\n            });\r\n        }\r\n    }\r\n\r\n    private fitToView(cy: Core, eles: CollectionReturnValue, padding = 60): void {\r\n        if (cy && eles) {\r\n            cy.animate({\r\n                fit: {\r\n                    eles: eles,\r\n                    padding: padding\r\n                },\r\n                duration: this.config.animateOptions.duration,\r\n                easing: this.config.animateOptions.easing\r\n            });\r\n        }\r\n    }\r\n}","\r\nimport { Injectable } from \"@angular/core\";\r\nimport { WxCCActivity, WxCCActivityMap, WxCCTemplatedActivityType } from \"../types/wxcc-activity\";\r\n\r\n@Injectable()\r\nexport class WxCCActivityManageService {\r\n\r\n    private readonly ACTIVITY_TEMPLATES: Record<WxCCTemplatedActivityType, WxCCActivity> = {\r\n        NewPhoneContact: {\r\n            id: '',\r\n            type: 'NewPhoneContact',\r\n            group: 'start',\r\n            name: 'NewPhoneContact',\r\n            properties: {\r\n                name: 'NewPhoneContact',\r\n                event: 'NewPhoneContact',\r\n                flowType: {\r\n                    eventSourceName: 'WebexContactCenter',\r\n                    eventSpecificationName: 'ContactStartWorkflow',\r\n                    eventClassificationId: '',\r\n                    eventClassificationName: '',\r\n                    eventSpecificationId: '',\r\n                    eventSourceId: ''\r\n                },\r\n                activityName: 'NewPhoneContact',\r\n                _renderRequestTimestamp: Date.now(),\r\n                activityId: 'start'\r\n            }\r\n        },\r\n        \"blind-transfer\": {\r\n            id: '',\r\n            type: 'blind-transfer',\r\n            group: 'terminating-action',\r\n            name: 'BlindTransfer',\r\n            properties: {\r\n                name: 'BlindTransfer',\r\n                activityName: 'blind-transfer',\r\n                _renderRequestTimestamp: Date.now(),\r\n                transfertodn: '',\r\n                activityId: '',\r\n                transfertodn_radioName: 'dn',\r\n                'transfertodn:radioName': 'dn',\r\n                customAttributes: {},\r\n                flowDecryptAccess: false,\r\n            }\r\n        },\r\n        \"ivr-menu\": {\r\n            id: '',\r\n            type: 'ivr-menu',\r\n            group: 'enum-gateway',\r\n            name: 'Menu',\r\n            properties: {\r\n                connector_name: null,\r\n                name: 'Menu',\r\n                menuLinks: [],\r\n                toggle: false,\r\n                activityName: 'ivr-menu',\r\n                prompts: [],\r\n                _renderRequestTimestamp: Date.now(),\r\n                'connector:name': null,\r\n                activityId: '',\r\n                'menuLinks:input': [],\r\n                entryTimeout: 3,\r\n                volumeGainDb: 0,\r\n                menuLinks_input: [],\r\n                voiceLanguage_name: null,\r\n                promptsTts: null,\r\n                interruptible: false,\r\n                connector: null,\r\n                speakingRate: 1,\r\n                toggleLanguage: null,\r\n                voiceLanguage: null,\r\n                flowDecryptAccess: false,\r\n                'voiceLanguage:name': null\r\n            }\r\n        },\r\n        \"play-message\": {\r\n            id: '',\r\n            type: 'play-message',\r\n            group: 'action',\r\n            name: 'PlayMessage',\r\n            properties: {\r\n                connector_name: null,\r\n                name: 'PlayMessage',\r\n                toggle: false,\r\n                activityName: 'play-message',\r\n                prompts: [],\r\n                _renderRequestTimestamp: Date.now(),\r\n                'connector:name': null,\r\n                activityId: '',\r\n                volumeGainDb: 0,\r\n                voiceLanguage_name: null,\r\n                promptsTts: null,\r\n                connector: null,\r\n                speakingRate: 1,\r\n                toggleLanguage: null,\r\n                voiceLanguage: null,\r\n                flowDecryptAccess: false,\r\n                'voiceLanguage:name': null\r\n            }\r\n        },\r\n        \"play-music\": {\r\n            id: '',\r\n            type: 'play-music',\r\n            group: 'action',\r\n            name: 'PlayPrompt',\r\n            properties: {\r\n                connector_name: null,\r\n                name: 'PlayPrompt',\r\n                toggle: false,\r\n                activityName: 'play-music',\r\n                prompts: [],\r\n                _renderRequestTimestamp: Date.now(),\r\n                'connector:name': null,\r\n                activityId: '',\r\n                volumeGainDb: 0,\r\n                voiceLanguage_name: null,\r\n                promptsTts: null,\r\n                connector: null,\r\n                speakingRate: 1,\r\n                toggleLanguage: null,\r\n                voiceLanguage: null,\r\n                flowDecryptAccess: false,\r\n                'voiceLanguage:name': null\r\n            }\r\n        },\r\n        \"set-variable\": {\r\n            id: '',\r\n            type: 'set-variable',\r\n            group: 'set-variable',\r\n            name: 'SetVariable',\r\n            properties: {\r\n                setTo: 'set-to-literal',\r\n                name: 'SetVariable',\r\n                literal_invalid_error: false,\r\n                activityName: 'set-variable',\r\n                _renderRequestTimestamp: Date.now(),\r\n                activityId: 'set-variable',\r\n                setVariablesArray: [],\r\n                flowDecryptAccess: false\r\n            }\r\n        },\r\n        \"business-hours\": {\r\n            id: '',\r\n            type: 'business-hours',\r\n            name: '',\r\n            group: '',\r\n            properties: {\r\n                activityName: 'business-hours',\r\n                _renderRequestTimestamp: Date.now(),\r\n                activityId: ''\r\n            }\r\n        }\r\n    }\r\n\r\n    create<K extends keyof WxCCActivityMap>(type: K): WxCCActivityMap[K] {\r\n        return JSON.parse(JSON.stringify(this.ACTIVITY_TEMPLATES[type])) as WxCCActivityMap[K];\r\n    }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { WxCC2GraphService } from \"./wxcc2graph.service\";\r\nimport { WxCCActivityManageService } from \"./wxcc-activity-manage.service\";\r\nimport { WxCCFlowchartNode } from \"../types/wxcc\";\r\nimport { ReadonlyExtendedActivity } from \"../types/extended-activity\";\r\nimport { WxCCActivity, WxCCTemplatedActivityType } from \"../types/wxcc-activity\";\r\nimport { ACTIVITY_DISPLAY_TYPES } from \"../utils/node-mappings\";\r\n\r\nexport interface CreateActivityRequest {\r\n    activityTypeName: WxCCTemplatedActivityType;\r\n    name: string;\r\n}\r\n\r\n@Injectable()\r\nexport class WxCCActivityCreationService {\r\n    constructor(\r\n        private readonly wxcc2graph: WxCC2GraphService,\r\n        private readonly wxccActivityTemplateService: WxCCActivityManageService,\r\n    ) { }\r\n\r\n    createAndSync(request: CreateActivityRequest): WxCCFlowchartNode {\r\n        const newActivityId = this.wxcc2graph.generateId();\r\n        const activityTemplate = this.buildTemplatedActivity(request, newActivityId);\r\n\r\n        this.seedNonIrActivity(activityTemplate, newActivityId);\r\n\r\n        const activityData = this.buildExtendedActivity(request, activityTemplate, newActivityId);\r\n        const node = this.wxcc2graph.addActivity(activityData);\r\n\r\n        return node;\r\n    }\r\n\r\n    private buildTemplatedActivity(request: CreateActivityRequest, newActivityId: string): WxCCActivity {\r\n        const activityTemplate = this.wxccActivityTemplateService.create(request.activityTypeName);\r\n        const templateProperties = activityTemplate.properties;\r\n        const displayType = ACTIVITY_DISPLAY_TYPES.find((type) => type.activityName === request.activityTypeName);\r\n\r\n        activityTemplate.id = newActivityId;\r\n        activityTemplate.name = request.name;\r\n        activityTemplate.group = activityTemplate.group || displayType?.group || \"unmapped\";\r\n        activityTemplate.properties.activityId = newActivityId;\r\n        activityTemplate.properties._renderRequestTimestamp = Date.now();\r\n        // @ts-ignore\r\n        templateProperties.name = request.name;\r\n\r\n        return activityTemplate;\r\n    }\r\n\r\n    private seedNonIrActivity(activityTemplate: WxCCActivity, newActivityId: string): void {\r\n        const nonIrActivities = this.getNonIrActivitiesMap();\r\n        if (!nonIrActivities) {\r\n            return;\r\n        }\r\n\r\n        nonIrActivities[newActivityId] = {\r\n            id: newActivityId,\r\n            group: activityTemplate.group,\r\n            name: activityTemplate.name,\r\n            properties: {\r\n                ...activityTemplate.properties,\r\n            },\r\n        };\r\n    }\r\n\r\n    private getNonIrActivitiesMap(): Record<string, any> | null {\r\n        const nonIrDoc = this.wxcc2graph.wxccNonIRJSON;\r\n        if (!nonIrDoc) {\r\n            return null;\r\n        }\r\n\r\n        const process = nonIrDoc.process;\r\n        if (!process) {\r\n            return null;\r\n        }\r\n\r\n        const activities = process.activities;\r\n        if (!activities) {\r\n            return null;\r\n        }\r\n\r\n        return activities as Record<string, any>;\r\n    }\r\n\r\n    private buildExtendedActivity(request: CreateActivityRequest, activityTemplate: WxCCActivity, newActivityId: string): ReadonlyExtendedActivity {\r\n        const displayType = ACTIVITY_DISPLAY_TYPES.find((type) => type.activityName === request.activityTypeName);\r\n\r\n        return {\r\n            id: newActivityId,\r\n            name: request.name,\r\n            wxccActivityName: activityTemplate.type,\r\n            wxccGroup: activityTemplate.group,\r\n            wxccActivityId: activityTemplate.properties.activityId,\r\n            // @ts-ignore\r\n            iconUrl: displayType.icon || \"assets/wxcc/unmapped.svg\",\r\n            suggestedProperties: {\r\n                uccxDescription: \"\",\r\n            },\r\n        };\r\n    }\r\n}\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\ntype _ToolbarItem = {\r\n    id: string,\r\n    label: string,\r\n    svg: SafeHtml,\r\n    action: () => void\r\n};\r\n\r\nexport interface FloatingToolbarVisibility {\r\n    resetView?: boolean;\r\n    zoomIn?: boolean;\r\n    zoomOut?: boolean;\r\n    export?: boolean;\r\n}\r\n\r\nconst DEFAULT_VISIBILITY: FloatingToolbarVisibility = {\r\n    resetView: true,\r\n    zoomIn: true,\r\n    zoomOut: true,\r\n    export: true\r\n};\r\n\r\n@Component({\r\n    selector: 'graph-floating-toolbar',\r\n    templateUrl: './floating-toolbar.component.html',\r\n    styleUrls: ['./floating-toolbar.component.scss'],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FloatingToolBarComponent implements OnInit {\r\n    @Input() visibility: FloatingToolbarVisibility = DEFAULT_VISIBILITY;\r\n\r\n    toolbarConfig!: Readonly<_ToolbarItem>[];\r\n\r\n    @Output() resetViewChange = new EventEmitter<void>();\r\n    @Output() zoomInChange = new EventEmitter<void>();\r\n    @Output() zoomOutChange = new EventEmitter<void>();\r\n    @Output() exportImageChange = new EventEmitter<void>();\r\n\r\n    constructor(\r\n        private sanitizer: DomSanitizer\r\n    ) { }\r\n\r\n    ngOnInit(): void {\r\n        const mergedVisibility = { ...DEFAULT_VISIBILITY, ...this.visibility };\r\n        \r\n        const allItems: (_ToolbarItem & { visibilityKey: keyof FloatingToolbarVisibility })[] = [\r\n            {\r\n                id: 'reset-view',\r\n                visibilityKey: 'resetView',\r\n                label: 'UCCX.BUTTONS.RESET_VIEW',\r\n                svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n                        <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"></path>\r\n                        <path d=\"M21 3v5h-5\"></path>\r\n                        <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"></path>\r\n                        <path d=\"M3 21v-5h5\"></path>\r\n                    </svg>`),\r\n                action: () => this.resetView()\r\n            },\r\n            {\r\n                id: 'zoom-in',\r\n                visibilityKey: 'zoomIn',\r\n                label: 'UCCX.BUTTONS.ZOOM_IN',\r\n                svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n                        <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\r\n                        <path d=\"m21 21-4.35-4.35\"></path>\r\n                        <path d=\"M11 8v6M8 11h6\"></path>\r\n                    </svg>`),\r\n                action: () => this.zoomIn()\r\n            },\r\n            {\r\n                id: 'zoom-out',\r\n                visibilityKey: 'zoomOut',\r\n                label: 'UCCX.BUTTONS.ZOOM_OUT',\r\n                svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n                        <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\r\n                        <path d=\"m21 21-4.35-4.35\"></path>\r\n                        <path d=\"M8 11h6\"></path>\r\n                    </svg>`),\r\n                action: () => this.zoomOut()\r\n            },\r\n            {\r\n                id: 'export',\r\n                visibilityKey: 'export',\r\n                label: 'UCCX.BUTTONS.EXPORT',\r\n                svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n                        <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\r\n                        <polyline points=\"7 10 12 15 17 10\"></polyline>\r\n                        <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\r\n                    </svg>`),\r\n                action: () => this.exportImage()\r\n            }\r\n        ];\r\n\r\n        this.toolbarConfig = allItems.filter(item => mergedVisibility[item.visibilityKey] !== false);\r\n    }\r\n\r\n    resetView(): void {\r\n        this.resetViewChange.emit();\r\n    }\r\n\r\n    zoomIn(): void {\r\n        this.zoomInChange.emit();\r\n    }\r\n\r\n    zoomOut(): void {\r\n        this.zoomOutChange.emit();\r\n    }\r\n\r\n    exportImage(): void {\r\n        this.exportImageChange.emit();\r\n    }\r\n\r\n    trackById(index: number, item: _ToolbarItem): string {\r\n        return item.id;\r\n    }\r\n}","<div class=\"toolbar-wrapper\" role=\"toolbar\">\r\n    <ng-container *ngFor=\"let item of toolbarConfig; trackBy: trackById\">\r\n        <button\r\n            type=\"button\"\r\n            [attr.aria-label]=\"item.label\"\r\n            [matTooltip]=\"item.label\"\r\n            matTooltipPosition=\"left\"\r\n            class=\"toolbar-button\"\r\n            (click)=\"item.action()\">\r\n            <div [innerHTML]=\"item.svg\"></div>\r\n        </button>\r\n    </ng-container>\r\n</div>","import { Component, EventEmitter, Input, Output, OnChanges, ChangeDetectionStrategy, SimpleChanges } from '@angular/core';\r\nimport {\r\n    ACTIVITY_DISPLAY_TYPES,\r\n    ActivityDisplayType,\r\n    getNodeColorClass,\r\n    getActivityDisplayTypeByValue,\r\n    ICON_MAP\r\n} from '../../utils/node-mappings';\r\nimport { getTranformedActivityName } from '../../utils/node-html-template';\r\nimport { ReadonlyExtendedActivity } from '../../types/extended-activity';\r\n\r\n@Component({\r\n    selector: 'node-details-sidebar',\r\n    templateUrl: './node-details-sidebar.component.html',\r\n    styleUrls: ['./node-details-sidebar.component.scss'],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NodeDetailsSidebarComponent {\r\n    @Input() isOpen = false;\r\n    @Input() nodeData: ReadonlyExtendedActivity | null = null;\r\n\r\n    @Output() close = new EventEmitter<void>();\r\n    @Output() activityTypeChange = new EventEmitter<ActivityDisplayType>();\r\n    @Output() descriptionChange = new EventEmitter<string>();\r\n\r\n    readonly activityDisplayTypes = ACTIVITY_DISPLAY_TYPES;\r\n\r\n    transformedActivityName!: string;\r\n    selectedActivityType: ActivityDisplayType | null = null;\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['nodeData'] && this.nodeData) {\r\n            this.initializeActivityType();\r\n        }\r\n    }\r\n\r\n    private initializeActivityType(): void {\r\n        const activityName = this.nodeData && this.nodeData.wxccActivityName;\r\n        this.selectedActivityType = getActivityDisplayTypeByValue((activityName || 'unmapped').toLocaleLowerCase());\r\n        this.transformedActivityName = getTranformedActivityName(activityName || 'unmapped');\r\n    }\r\n\r\n    onDescriptionChange(event: Event): void {\r\n        const target = event.target as HTMLTextAreaElement | null;\r\n\r\n        if (!target) {\r\n            return;\r\n        }\r\n\r\n        const description = target.value.trim();\r\n\r\n        if (!description)\r\n            return;\r\n\r\n        this.descriptionChange.emit(description);\r\n    }\r\n\r\n    private onActivityTypeChange(type: ActivityDisplayType): void {\r\n        this.selectedActivityType = type;\r\n        this.activityTypeChange.emit(type);\r\n    }\r\n\r\n    onActivityTypeSelectChange(event: Event): void {\r\n        const target = event.target as HTMLSelectElement | null;\r\n\r\n        if (!target) {\r\n            return;\r\n        }\r\n\r\n        const value = target.value;\r\n        const type = getActivityDisplayTypeByValue(value);\r\n        this.onActivityTypeChange(type);\r\n    }\r\n\r\n    onClose(): void {\r\n        this.close.emit();\r\n    }\r\n\r\n    getNodeIcon(): string {\r\n        return (this.selectedActivityType && this.selectedActivityType.icon) || ICON_MAP['unmapped'];\r\n    }\r\n\r\n    getNodeColorClass(): string {\r\n        const group = (this.selectedActivityType && this.selectedActivityType.group) || 'unmapped';\r\n        return getNodeColorClass(group);\r\n    }\r\n\r\n    getReviewColor(): string {\r\n        const color =\r\n            (this.nodeData && this.nodeData.review && this.nodeData.review.color) ||\r\n            'green';\r\n        const colors: { [key: string]: string } = {\r\n            'green': '#4CAF50',\r\n            'yellow': '#FF9800',\r\n            'red': '#F44336'\r\n        };\r\n        return colors[color] || colors['green'];\r\n    }\r\n\r\n    getReviewLabel(): string {\r\n        const color =\r\n            (this.nodeData && this.nodeData.review && this.nodeData.review.color) ||\r\n            'green';\r\n        const level =\r\n            (this.nodeData && this.nodeData.review && this.nodeData.review.level) ||\r\n            'confident';\r\n        return `${color.charAt(0).toUpperCase() + color.slice(1)} (${level.replace('_', ' ')})`;\r\n    }\r\n\r\n    trackByValue(index: number, type: ActivityDisplayType): string {\r\n        return type.value;\r\n    }\r\n}","<!-- <div class=\"sidebar-overlay\" *ngIf=\"isOpen\" (click)=\"onClose()\"></div> -->\r\n\r\n<div class=\"node-details-sidebar\" [class.open]=\"isOpen\">\r\n  <div class=\"sidebar-header\">\r\n    <h3>Node Details</h3>\r\n    <button class=\"close-btn\" (click)=\"onClose()\">\r\n      <span>&times;</span>\r\n    </button>\r\n  </div>\r\n\r\n  <div class=\"sidebar-content\" *ngIf=\"nodeData\">\r\n    <!-- Node Preview -->\r\n    <div class=\"node-preview\">\r\n      <div class=\"node-preview-card\" [ngClass]=\"getNodeColorClass()\">\r\n        <div class=\"node-icon\">\r\n          <img [src]=\"getNodeIcon()\" alt=\"Node Icon\" />\r\n        </div>\r\n        <div class=\"node-info\">\r\n          <div class=\"node-label\">{{ nodeData.name?.split(\"\\n\")?.[0] }}</div>\r\n          <div class=\"node-type\">{{ transformedActivityName }}</div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Activity Type Selector -->\r\n    <div class=\"section\">\r\n      <label class=\"section-label\">Activity Type</label>\r\n      <div class=\"display-type-selector\">\r\n        <select\r\n          class=\"form-control\"\r\n          title=\"Select activity type\"\r\n          [value]=\"selectedActivityType?.value\"\r\n          (change)=\"onActivityTypeSelectChange($event)\"\r\n        >\r\n          <option\r\n            *ngFor=\"let type of activityDisplayTypes; trackBy: trackByValue\"\r\n            [value]=\"type.value\"\r\n          >\r\n            {{ type.label }}\r\n          </option>\r\n        </select>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"section\">\r\n      <label class=\"section-label\">Description</label>\r\n      <div class=\"display-type-selector\">\r\n        <textarea\r\n          class=\"form-control\"\r\n          aria-label=\"property-description\"\r\n          (input)=\"onDescriptionChange($event)\"\r\n          [value]=\"nodeData.suggestedProperties?.uccxDescription\"\r\n          rows=\"3\"\r\n        ></textarea>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Node Information -->\r\n    <div class=\"section\">\r\n      <label class=\"section-label\">Information</label>\r\n      <div class=\"info-grid\">\r\n        <div class=\"info-item\">\r\n          <span class=\"info-label\">UCCX Type:</span>\r\n          <span class=\"info-value\" [title]=\"nodeData.uccxTypeName\">{{\r\n            nodeData.uccxTypeName\r\n          }}</span>\r\n        </div>\r\n        <div class=\"info-item\">\r\n          <span class=\"info-label\">WxCC Activity Name:</span>\r\n          <span class=\"info-value\" [title]=\"transformedActivityName\">{{\r\n            transformedActivityName\r\n          }}</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Review Status -->\r\n    <div class=\"section\" *ngIf=\"nodeData.review\">\r\n      <label class=\"section-label\">Review Status</label>\r\n      <div class=\"review-status\">\r\n        <div class=\"review-badge\" [style.background-color]=\"getReviewColor()\">\r\n          {{ getReviewLabel() }}\r\n        </div>\r\n        <div\r\n          class=\"review-reasons\"\r\n          *ngIf=\"nodeData.review.reasons && nodeData.review.reasons.length > 0\"\r\n        >\r\n          <div class=\"reason\" *ngFor=\"let reason of nodeData.review.reasons\">\r\n            <span class=\"reason-icon\">⚠</span>\r\n            <span>{{ reason }}</span>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Suggested Properties -->\r\n    <div class=\"section\" *ngIf=\"nodeData.suggestedProperties\">\r\n      <label class=\"section-label\">Migration Information</label>\r\n      <div class=\"migration-info\">\r\n        <div\r\n          class=\"info-card\"\r\n          *ngIf=\"nodeData.suggestedProperties.closestWxccActivity\"\r\n        >\r\n          <div class=\"card-label\">Closest WXCC Activity</div>\r\n          <div class=\"card-value\">\r\n            {{ nodeData.suggestedProperties.closestWxccActivity }}\r\n          </div>\r\n        </div>\r\n        <div\r\n          class=\"info-card\"\r\n          *ngIf=\"nodeData.suggestedProperties.mappingNotes\"\r\n        >\r\n          <div class=\"card-label\">Mapping Notes</div>\r\n          <div class=\"card-value\">\r\n            {{ nodeData.suggestedProperties.mappingNotes }}\r\n          </div>\r\n        </div>\r\n        <div\r\n          class=\"info-card\"\r\n          *ngIf=\"nodeData.suggestedProperties.migrationInstructions\"\r\n        >\r\n          <div class=\"card-label\">Migration Instructions</div>\r\n          <div class=\"card-value instructions\">\r\n            {{ nodeData.suggestedProperties.migrationInstructions }}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\nexport interface NodeToolbarPosition {\r\n    x: number;\r\n    y: number;\r\n}\r\n\r\nexport interface NodeActionToolbarAction {\r\n    id: string;\r\n    label: string;\r\n    svg: SafeHtml;\r\n    action: () => void;\r\n}\r\n\r\n@Component({\r\n    selector: 'node-action-toolbar',\r\n    templateUrl: './node-action-toolbar.component.html',\r\n    styleUrls: ['./node-action-toolbar.component.scss'],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NodeActionToolbarComponent {\r\n    @Input() isVisible = false;\r\n    @Input() position: NodeToolbarPosition = { x: 0, y: 0 };\r\n\r\n    @Output() deleteNode = new EventEmitter<void>();\r\n    @Output() linkNode = new EventEmitter<void>();\r\n\r\n    toolbarActions: NodeActionToolbarAction[];\r\n\r\n    constructor(private sanitizer: DomSanitizer) {\r\n        this.toolbarActions = [\r\n            {\r\n                id: 'link',\r\n                label: 'Link to Node',\r\n                svg: this.sanitizer.bypassSecurityTrustHtml(`\r\n                    <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n                        <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path>\r\n                        <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path>\r\n                    </svg>\r\n                `),\r\n                action: () => this.onLinkNode()\r\n            },\r\n            {\r\n                id: 'delete',\r\n                label: 'Delete Node',\r\n                svg: this.sanitizer.bypassSecurityTrustHtml(`\r\n                    <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n                        <path d=\"M3 6h18\"></path>\r\n                        <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"></path>\r\n                        <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"></path>\r\n                        <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\r\n                        <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\r\n                    </svg>\r\n                `),\r\n                action: () => this.onDeleteNode()\r\n            }\r\n        ];\r\n    }\r\n\r\n    onDeleteNode(): void {\r\n        this.deleteNode.emit();\r\n    }\r\n\r\n    onLinkNode(): void {\r\n        this.linkNode.emit();\r\n    }\r\n\r\n    trackById(index: number, item: NodeActionToolbarAction): string {\r\n        return item.id;\r\n    }\r\n}\r\n","<div \r\n    class=\"node-action-toolbar\" \r\n    [class.visible]=\"isVisible\"\r\n    [style.left.px]=\"position.x\"\r\n    [style.top.px]=\"position.y\">\r\n    <ng-container *ngFor=\"let action of toolbarActions; trackBy: trackById\">\r\n        <button\r\n            type=\"button\"\r\n            class=\"toolbar-action-btn\"\r\n            [class.delete-btn]=\"action.id === 'delete'\"\r\n            [attr.aria-label]=\"action.label\"\r\n            [matTooltip]=\"action.label\"\r\n            matTooltipPosition=\"above\"\r\n            (click)=\"action.action()\">\r\n            <div [innerHTML]=\"action.svg\"></div>\r\n        </button>\r\n    </ng-container>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { ReadonlyExtendedActivity } from \"../../types/extended-activity\";\r\n\r\n@Component({\r\n    selector: 'node-search-panel',\r\n    templateUrl: './node-search-panel.component.html',\r\n    styleUrls: ['./node-search-panel.component.scss'],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NodeSearchPanelComponent implements OnInit {\r\n    @Input() nodes!: ReadonlyExtendedActivity[];\r\n\r\n    @Output() private readonly searchChange = new EventEmitter<string>();\r\n    @Output() private readonly selectNodeChange = new EventEmitter<string>();\r\n\r\n    filteredNodes!: ReadonlyExtendedActivity[];\r\n\r\n    ngOnInit(): void {\r\n        this.filteredNodes = this.nodes;\r\n    }\r\n\r\n    onSearchChange(event: Event): void {\r\n        const value = (event.target as HTMLInputElement).value.trim().toLowerCase();\r\n\r\n        if (!value) {\r\n            this.filteredNodes = this.nodes.slice();\r\n            return;\r\n        }\r\n\r\n        this.filteredNodes = this.nodes\r\n            .filter(node =>\r\n                node.name?.toLowerCase().includes(value) ||\r\n                node.wxccActivityName?.toLowerCase().includes(value) ||\r\n                node.uccxTypeName?.toLowerCase().includes(value) ||\r\n                node.wxccGroup?.toLowerCase().includes(value) ||\r\n                node.uccxDisplayType?.toLowerCase().includes(value)\r\n            );\r\n    }\r\n\r\n    onSelectNodeChange(event: Event): void {\r\n        const target = event.target as HTMLElement;\r\n        const id = target.id;\r\n\r\n        this.selectNodeChange.emit(id);\r\n    }\r\n}","<div class=\"search-panel\">\r\n    <div class=\"search-input-wrapper\">\r\n        <div class=\"search-icon\">\r\n            <img src=\"assets/icons/search.svg\" />\r\n        </div>\r\n        <input (input)=\"onSearchChange($event)\" type=\"text\" name=\"\" id=\"\" placeholder=\"Search nodes by name, type, variables...\" class=\"search-input\">\r\n    </div>\r\n    <div class=\"search-results-wrapper\" (click)=\"onSelectNodeChange($event)\">\r\n        <div class=\"activity-result-wrapper\" *ngFor=\"let act of filteredNodes\" id=\"{{ act.id }}\">\r\n            {{ act.wxccActivityName || act.name }}\r\n        </div>\r\n    </div>\r\n</div>","import {\r\n\tAfterViewInit,\r\n\tChangeDetectionStrategy,\r\n\tChangeDetectorRef,\r\n\tComponent,\r\n\tElementRef,\r\n\tInput,\r\n\tOnChanges,\r\n\tOnDestroy,\r\n\tSimpleChanges,\r\n\tViewChild\r\n} from \"@angular/core\";\r\nimport { IWxCCFlowchart } from \"../../types/wxcc\";\r\nimport cytoscape, {\r\n\tElementDefinition,\r\n\tEdgeSingular,\r\n\tNodeSingular\r\n} from \"cytoscape\";\r\nimport dagre from \"cytoscape-dagre\";\r\nimport nodeHtmlLabel from \"cytoscape-node-html-label\";\r\nimport { StyleConfig } from \"../../constants/cytoscape.config\";\r\nimport { getNodeHtmlTemplate } from \"../../utils/node-html-template\";\r\nimport { ActivityDisplayType } from \"../../utils/node-mappings\";\r\nimport { WxCC2GraphService } from \"../../services/wxcc2graph.service\";\r\nimport { NodeToolbarPosition } from \"../node-action-toolbar/node-action-toolbar.component\";\r\nimport {\r\n\tAddNodeDialogComponent,\r\n\tNewNodeData\r\n} from \"../dialogs/add-node-dialog/add-node-dialog.component\";\r\nimport {\r\n\tLinkNodeData,\r\n\tLinkNodeDialogComponent\r\n} from \"../dialogs/link-node-dialog/link-node-dialog.component\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { ReadonlyExtendedActivity } from \"../../types/extended-activity\";\r\nimport { WxCCActivityCreationService } from \"../../services/wxcc-activity-creation.service\";\r\nimport { CytoscapeViewportService } from \"../../services/cystoscape-viewport.service\";\r\n\r\ncytoscape.use(dagre);\r\ncytoscape.use(nodeHtmlLabel as any);\r\n\r\n@Component({\r\n\tselector: \"wxcc-flowchart\",\r\n\ttemplateUrl: \"./wxcc-flowchart.component.html\",\r\n\tstyleUrls: [\"./wxcc-flowchart.component.scss\"],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class WxCCFlowchartComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n\t@Input() flowchart!: IWxCCFlowchart;\r\n\t@ViewChild(\"flowchartContainer\") flowchartContainer!: ElementRef<HTMLElement>;\r\n\r\n\tprivate cy?: cytoscape.Core;\r\n\tprivate viewReady = false;\r\n\tprivate readonly layoutOptions: dagre.DagreLayoutOptions = {\r\n\t\tname: \"dagre\",\r\n\t\trankDir: \"LR\",\r\n\t\tnodeSep: 180,\r\n\t\tedgeSep: 60,\r\n\t\trankSep: 150,\r\n\t\tanimate: true,\r\n\t\tanimationDuration: 500,\r\n\t\tfit: true\r\n\t};\r\n\r\n\t// Sidebar state\r\n\tisSidebarOpen = false;\r\n\tselectedNodeData: ReadonlyExtendedActivity | null = null;\r\n\r\n\t// Search panel state\r\n\tisSearchPanelVisible = false;\r\n\tsearchPanelVisible = false;\r\n\r\n\t// Node action toolbar state\r\n\tisNodeToolbarVisible = false;\r\n\tnodeToolbarPosition: NodeToolbarPosition = { x: 0, y: 0 };\r\n\r\n\t// Add node dialog state\r\n\tavailableNodes: ReadonlyExtendedActivity[] = [];\r\n\r\n\t// Link node dialog state\r\n\tisLinkDialogOpen = false;\r\n\tselectedEdgeId: string | null = null;\r\n\tselectedEdgeDeleteButtonPosition: { x: number; y: number } | null = null;\r\n\r\n\tconstructor(\r\n\t\tprivate readonly wxcc2graph: WxCC2GraphService,\r\n\t\tprivate readonly cytoscapeViewportService: CytoscapeViewportService,\r\n\t\tprivate readonly dialog: MatDialog,\r\n\t\tprivate readonly wxccActivityCreationService: WxCCActivityCreationService,\r\n\t\tprivate cdr: ChangeDetectorRef,\r\n\t) { }\r\n\r\n\tngAfterViewInit(): void {\r\n\t\tthis.viewReady = true;\r\n\t\tthis.tryInit();\r\n\t}\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tif (changes[\"flowchart\"]) {\r\n\t\t\tthis.tryInit();\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.cy?.destroy();\r\n\t\tthis.cy = undefined;\r\n\t}\r\n\r\n\tprivate tryInit(): void {\r\n\t\tif (!this.viewReady || !this.flowchartContainer || !this.flowchart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.init();\r\n\t}\r\n\r\n\tprivate init(): void {\r\n\t\tconst container = this.flowchartContainer.nativeElement;\r\n\r\n\t\tthis.cy?.destroy();\r\n\t\tthis.cy = undefined;\r\n\r\n\t\tconst elements: ElementDefinition[] = [\r\n\t\t\t...this.flowchart.nodes,\r\n\t\t\t...this.flowchart.edges,\r\n\t\t];\r\n\r\n\t\tthis.cy = cytoscape({\r\n\t\t\tcontainer: container,\r\n\t\t\telements: elements,\r\n\t\t\tstyle: this.getStylesheet(),\r\n\t\t});\r\n\r\n\t\t(this.cy as any).nodeHtmlLabel([\r\n\t\t\t{\r\n\t\t\t\tquery: \"node\",\r\n\t\t\t\thalign: \"center\",\r\n\t\t\t\tvalign: \"center\",\r\n\t\t\t\thalignBox: \"center\",\r\n\t\t\t\tvalignBox: \"center\",\r\n\t\t\t\ttpl: (data: ReadonlyExtendedActivity) => getNodeHtmlTemplate(data),\r\n\t\t\t},\r\n\t\t]);\r\n\r\n\t\tconst layout = this.cy?.layout({\r\n\t\t\t...this.layoutOptions,\r\n\t\t}).run();\r\n\r\n\t\tlayout.on(\"layoutstop\", () => {\r\n\t\t\tthis.cytoscapeViewportService.resetView(this.cy as any, this.cy?.elements() as any);\r\n\t\t});\r\n\r\n\t\tthis.setupEventListeners();\r\n\t}\r\n\r\n\tget activities() { return this.wxcc2graph.getAllActivities(); }\r\n\r\n\t// Toggle search panel visibility\r\n\ttoggleSearchPanel(): void {\r\n\t\tthis.isSearchPanelVisible = !this.isSearchPanelVisible;\r\n\t\tthis.cdr.markForCheck();\r\n\t}\r\n\r\n\tprivate setupEventListeners(): void {\r\n\t\t// Single tap on node - show only the toolbar (quick actions)\r\n\t\tthis.cy?.on(\"mouseover\", \"node\", (event) => {\r\n\t\t\tconst node = event.target as NodeSingular;\r\n\t\t\tthis.selectedNodeData = node.data() as ReadonlyExtendedActivity;\r\n\r\n\t\t\t// Calculate toolbar position relative to the container\r\n\t\t\tthis.updateToolbarPosition(node);\r\n\t\t\tthis.isNodeToolbarVisible = true;\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\tthis.cy?.on(\"tap\", \"node\", (event) => {\r\n\t\t\tconst node = event.target as NodeSingular;\r\n\t\t\tthis.clearSelectedEdge();\r\n\t\t\tthis.selectedNodeData = node.data() as ReadonlyExtendedActivity;\r\n\t\t\tthis.isSidebarOpen = true;\r\n\r\n\t\t\t// Hide toolbar when sidebar opens\r\n\t\t\tthis.isNodeToolbarVisible = false;\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\tthis.cy?.on(\"mousemove\", \"node\", (event) => {\r\n\t\t\tconst node = event.target as NodeSingular;\r\n\t\t\tthis.updateToolbarPosition(node);\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\t// Edge tap - select edge for explicit deletion action\r\n\t\tthis.cy?.on(\"tap\", \"edge\", (event) => {\r\n\t\t\tconst edge = event.target as EdgeSingular;\r\n\r\n\t\t\tthis.isSidebarOpen = false;\r\n\t\t\tthis.hideNodeToolbar();\r\n\t\t\tthis.selectedNodeData = null;\r\n\r\n\t\t\tthis.selectedEdgeId = edge.id();\r\n\t\t\tedge.select();\r\n\t\t\tthis.updateSelectedEdgeDeleteButtonPosition();\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\t// Canvas tap - hide toolbar and deselect\r\n\t\tthis.cy?.on(\"tap\", (event) => {\r\n\t\t\tif (event.target === this.cy) {\r\n\t\t\t\tthis.clearSelectedEdge();\r\n\t\t\t\tthis.isSidebarOpen = false;\r\n\t\t\t\tthis.hideNodeToolbar();\r\n\t\t\t\tthis.selectedNodeData = null;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Pan/zoom events - update toolbar position\r\n\t\tthis.cy?.on(\"pan zoom\", () => {\r\n\t\t\tif (this.isNodeToolbarVisible && this.selectedNodeData) {\r\n\t\t\t\tconst node = this.cy?.getElementById(this.selectedNodeData.id);\r\n\t\t\t\tif (node?.length) {\r\n\t\t\t\t\tthis.updateToolbarPosition(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.selectedEdgeId) {\r\n\t\t\t\tthis.updateSelectedEdgeDeleteButtonPosition();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate updateToolbarPosition(node: NodeSingular): void {\r\n\t\tconst renderedPosition = node.renderedPosition();\r\n\t\tconst renderedWidth = node.renderedWidth();\r\n\t\tconst renderedHeight = node.renderedHeight();\r\n\r\n\t\t// Position toolbar above the node, centered\r\n\t\tthis.nodeToolbarPosition = {\r\n\t\t\tx: renderedPosition.x - 30, // Center the toolbar (approx half toolbar width)\r\n\t\t\ty: renderedPosition.y - renderedHeight / 2 - 40, // Above the node\r\n\t\t};\r\n\t}\r\n\r\n\tprivate hideNodeToolbar(): void {\r\n\t\tthis.isNodeToolbarVisible = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprivate getStylesheet(): cytoscape.StylesheetStyle[] {\r\n\t\treturn StyleConfig;\r\n\t}\r\n\r\n\t// ==================== Sidebar Events ====================\r\n\r\n\tonCloseSidebar(): void {\r\n\t\tthis.isSidebarOpen = false;\r\n\t\tthis.hideNodeToolbar();\r\n\t\tthis.selectedNodeData = null;\r\n\t\t// this.cdr.detectChanges();\r\n\t}\r\n\r\n\tonDescriptionChange(description: string): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst node = this.cy?.getElementById(this.selectedNodeData.id);\r\n\t\tif (node) {\r\n\t\t\tconst updatedData: ReadonlyExtendedActivity = {\r\n\t\t\t\t...this.selectedNodeData,\r\n\t\t\t\tsuggestedProperties: {\r\n\t\t\t\t\t...this.selectedNodeData.suggestedProperties,\r\n\t\t\t\t\tuccxDescription: description,\r\n\t\t\t\t},\r\n\t\t\t};\r\n\r\n\t\t\tthis.wxcc2graph.updateActivityData(updatedData);\r\n\t\t\tnode.data(updatedData);\r\n\r\n\t\t\tthis.selectedNodeData = updatedData;\r\n\t\t}\r\n\t}\r\n\r\n\tonActivityTypeChange(activityType: ActivityDisplayType): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst node = this.cy?.getElementById(this.selectedNodeData.id);\r\n\t\tif (node) {\r\n\t\t\tconst updatedData: ReadonlyExtendedActivity = {\r\n\t\t\t\t...this.selectedNodeData,\r\n\t\t\t\twxccActivityName: activityType.activityName,\r\n\t\t\t\twxccGroup: activityType.group,\r\n\t\t\t\ticonUrl: activityType.icon\r\n\t\t\t};\r\n\r\n\t\t\tthis.wxcc2graph.updateActivityData(updatedData);\r\n\t\t\tnode.data(updatedData);\r\n\r\n\t\t\tthis.selectedNodeData = updatedData;\r\n\t\t}\r\n\t}\r\n\r\n\t// ==================== Node Toolbar Events ====================\r\n\r\n\tonDeleteNode(): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst nodeId = this.selectedNodeData.id;\r\n\r\n\t\t// Remove from service and get affected link IDs\r\n\t\tconst { removedLinkIds } = this.wxcc2graph.removeActivity(nodeId);\r\n\r\n\t\t// Remove edges from cytoscape\r\n\t\tremovedLinkIds.forEach((linkId) => {\r\n\t\t\tthis.cy?.getElementById(linkId).remove();\r\n\t\t});\r\n\r\n\t\t// Remove node from cytoscape\r\n\t\tthis.cy?.getElementById(nodeId).remove();\r\n\r\n\t\t// Close sidebar and toolbar\r\n\t\tthis.onCloseSidebar();\r\n\r\n\t\t// Re-run layout\r\n\t\tthis.runLayout();\r\n\t}\r\n\r\n\tonDeleteSelectedEdge(): void {\r\n\t\tif (!this.selectedEdgeId || !this.cy) return;\r\n\r\n\t\tconst edgeId = this.selectedEdgeId;\r\n\t\tconst removed = this.wxcc2graph.removeLink(edgeId);\r\n\t\tif (!removed) return;\r\n\r\n\t\tthis.cy?.getElementById(edgeId).remove();\r\n\t\tthis.selectedEdgeId = null;\r\n\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tonLinkNodeRequest(): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst sourceNode = this.selectedNodeData;\r\n\r\n\t\tif (!this.canCreateOutgoingLink(sourceNode.id)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Get the cytoscape node to inspect existing connections\r\n\t\tconst cyNode = this.cy?.getElementById(sourceNode.id);\r\n\r\n\t\t// Collect IDs of nodes already connected as targets from this source\r\n\t\tconst existingTargetIds = new Set<string>(\r\n\t\t\tcyNode.outgoers('node').map((n: NodeSingular) => n.id())\r\n\t\t);\r\n\r\n\t\t// Build the filtered list of linkable targets:\r\n\t\t//  - Never allow the start node (NewPhoneContact) as a target\r\n\t\t//  - Exclude the source node itself\r\n\t\t//  - Exclude nodes already linked as targets from this source\r\n\t\tthis.availableNodes = this.wxcc2graph.getAllActivities().filter(act =>\r\n\t\t\tact.id !== sourceNode.id &&\r\n\t\t\tact.wxccActivityName !== 'NewPhoneContact' &&\r\n\t\t\t!existingTargetIds.has(act.id)\r\n\t\t);\r\n\r\n\t\tconst dialogRef = this.dialog.open(LinkNodeDialogComponent, {\r\n\t\t\tpanelClass: \"no-padding-modal\",\r\n\t\t\twidth: \"550px\",\r\n\t\t\tdata: {\r\n\t\t\t\tavailableNodes: this.availableNodes,\r\n\t\t\t\tsourceNode: this.selectedNodeData,\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\tdialogRef.afterClosed().subscribe((result: any) => {\r\n\t\t\tif (result) {\r\n\t\t\t\tthis.onLinkNodes(result);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// ==================== Link Dialog Events ====================\r\n\r\n\tonLinkNodes(linkData: LinkNodeData): void {\r\n\t\tif (!this.cy) return;\r\n\r\n\t\tif (!this.canCreateOutgoingLink(linkData.sourceNodeId)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.wxcc2graph.linkExists(linkData.sourceNodeId, linkData.targetNodeId)) {\r\n\t\t\tconsole.warn(\"Link already exists between these nodes\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst edge = this.wxcc2graph.addLink(\r\n\t\t\tlinkData.sourceNodeId,\r\n\t\t\tlinkData.targetNodeId,\r\n\t\t\tlinkData.label,\r\n\t\t);\r\n\r\n\t\tthis.cy?.add(edge);\r\n\t\tthis.runLayout();\r\n\t}\r\n\r\n\t// ==================== Add Node Dialog Events ====================\r\n\r\n\topenAddNodeDialog(): void {\r\n\t\tthis.availableNodes = this.wxcc2graph.getAllActivities();\r\n\r\n\t\tconst dialogRef = this.dialog.open(AddNodeDialogComponent, {\r\n\t\t\tpanelClass: \"no-padding-modal\",\r\n\t\t\twidth: '450px',\r\n\t\t\tdata: {\r\n\t\t\t\tavailableNodes: this.availableNodes,\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\tdialogRef.afterClosed().subscribe((result: any) => {\r\n\t\t\tif (result) {\r\n\t\t\t\tthis.addActivity(result);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\taddActivity(newNodeData: NewNodeData): void {\r\n\t\tif (!this.cy) return;\r\n\r\n\t\tconst node = this.wxccActivityCreationService.createAndSync({\r\n\t\t\tactivityTypeName: newNodeData.activityTypeName,\r\n\t\t\tname: newNodeData.name\r\n\t\t});\r\n\r\n\t\t// Add node to cytoscape\r\n\t\tthis.cy?.add({\r\n\t\t\tgroup: \"nodes\",\r\n\t\t\tdata: node.data\r\n\t\t});\r\n\r\n\t\t// Re-run layout to position the new node\r\n\t\tthis.runLayout();\r\n\t}\r\n\r\n\tonNodeSelectChange(id: string): void {\r\n\t\tconst node = this.cy?.getElementById(id) as NodeSingular;\r\n\t\tif (node) {\r\n\t\t\tthis.cy?.center(node);\r\n\r\n\t\t\t// Set highlighted property in node data\r\n\t\t\tconst originalData = node.data();\r\n\t\t\tnode.data({ ...originalData, highlighted: true });\r\n\t\t\tnode.emit('data');\r\n\r\n\t\t\t// Remove highlight after 1s\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tconst currentData = node.data();\r\n\t\t\t\tif (currentData.highlighted) {\r\n\t\t\t\t\t// Remove the property completely\r\n\t\t\t\t\tdelete currentData.highlighted;\r\n\t\t\t\t\tnode.data(currentData);\r\n\t\t\t\t\tnode.emit('data');\r\n\t\t\t\t}\r\n\t\t\t}, 1000);\r\n\t\t}\r\n\t}\r\n\r\n\tzoomIn(): void {\r\n\t\tthis.cytoscapeViewportService.zoomIn(this.cy as any);\r\n\t}\r\n\r\n\tzoomOut(): void {\r\n\t\tthis.cytoscapeViewportService.zoomOut(this.cy as any);\r\n\t}\r\n\r\n\tresetView(): void {\r\n\t\tthis.cytoscapeViewportService.resetView(this.cy as any, this.cy?.elements() as any);\r\n\t}\r\n\r\n\tprivate runLayout(): void {\r\n\t\tif (!this.cy) return;\r\n\r\n\t\tconst layout = this.cy?.layout({\r\n\t\t\t...this.layoutOptions,\r\n\t\t}).run();\r\n\r\n\t\tlayout.on(\"layoutstop\", () => {\r\n\t\t\tthis.cytoscapeViewportService.resetView(this.cy as any, this.cy?.elements() as any);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate canCreateOutgoingLink(sourceNodeId: string): boolean {\r\n\t\tif (!this.cy) return false;\r\n\r\n\t\tconst cyNode = this.cy?.getElementById(sourceNodeId);\r\n\t\tif (!cyNode || cyNode.length === 0) return false;\r\n\r\n\t\tconst sourceActivity = (cyNode.data() as ReadonlyExtendedActivity).wxccActivityName;\r\n\t\tconst outgoingEdgeCount = cyNode.outgoers('edge').length;\r\n\r\n\t\t// End-type nodes cannot have outgoing links.\r\n\t\tconst END_NODE_TYPES: string[] = ['end', 'disconnect-contact', 'blind-transfer'];\r\n\t\tif (END_NODE_TYPES.includes(sourceActivity as string)) return false;\r\n\r\n\t\t// Start node can only have one output.\r\n\t\tif (sourceActivity === 'NewPhoneContact' && outgoingEdgeCount >= 1) return false;\r\n\r\n\t\t// Condition node can only have true/false outputs.\r\n\t\tif (sourceActivity === 'condition-activity' && outgoingEdgeCount >= 2) return false;\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprivate clearSelectedEdge(): void {\r\n\t\tif (!this.selectedEdgeId || !this.cy) return;\r\n\r\n\t\tconst edge = this.cy?.getElementById(this.selectedEdgeId);\r\n\t\tif (edge && edge.length) {\r\n\t\t\tedge.unselect();\r\n\t\t}\r\n\r\n\t\tthis.selectedEdgeId = null;\r\n\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprivate updateSelectedEdgeDeleteButtonPosition(): void {\r\n\t\tif (!this.cy || !this.selectedEdgeId) {\r\n\t\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst edge = this.cy?.getElementById(this.selectedEdgeId);\r\n\t\tif (!edge || edge.length === 0) {\r\n\t\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst midpoint = (edge as EdgeSingular).renderedMidpoint();\r\n\r\n\t\t// Slight offset so the icon does not sit exactly on top of the edge line.\r\n\t\tthis.selectedEdgeDeleteButtonPosition = {\r\n\t\t\tx: midpoint.x + 12,\r\n\t\t\ty: midpoint.y - 12,\r\n\t\t};\r\n\t}\r\n}\r\n","<div class=\"wxcc-flowchart-container\">\r\n  <div #flowchartContainer class=\"flowchart-canvas\"></div>\r\n\r\n  <!-- Floating toolbar for viewport controls -->\r\n  <graph-floating-toolbar\r\n    [visibility]=\"{ export: false }\"\r\n    (resetViewChange)=\"resetView()\"\r\n    (zoomInChange)=\"zoomIn()\"\r\n    (zoomOutChange)=\"zoomOut()\">\r\n  </graph-floating-toolbar>\r\n\r\n  <!-- Graph Acts -->\r\n  <div class=\"graph-actions-wrapper\">\r\n    <button\r\n      class=\"add-node-btn\"\r\n      matTooltip=\"Search workflow\"\r\n      matTooltipPosition=\"above\"\r\n      (click)=\"toggleSearchPanel()\"\r\n    >\r\n      <img src=\"assets/wxcc/search.svg\" width=\"28\" height=\"28\" alt=\"\" />\r\n    </button>\r\n    <button\r\n      class=\"add-node-btn\"\r\n      matTooltip=\"Add New Node\"\r\n      matTooltipPosition=\"above\"\r\n      (click)=\"openAddNodeDialog()\"\r\n    >\r\n      <svg\r\n        width=\"28\"\r\n        height=\"28\"\r\n        viewBox=\"0 0 24 24\"\r\n        fill=\"none\"\r\n        stroke=\"currentColor\"\r\n        stroke-width=\"2\"\r\n      >\r\n        <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n        <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\r\n      </svg>\r\n    </button>\r\n  </div>\r\n\r\n  <button\r\n    *ngIf=\"selectedEdgeId && selectedEdgeDeleteButtonPosition\"\r\n    class=\"edge-delete-btn\"\r\n    matTooltip=\"Delete this edge\"\r\n    matTooltipPosition=\"above\"\r\n    [style.left.px]=\"selectedEdgeDeleteButtonPosition.x\"\r\n    [style.top.px]=\"selectedEdgeDeleteButtonPosition.y\"\r\n    (click)=\"onDeleteSelectedEdge()\"\r\n    type=\"button\"\r\n    aria-label=\"Delete selected edge\"\r\n  >\r\n    ×\r\n  </button>\r\n\r\n  <node-search-panel\r\n    class=\"fade-in-search-panel\"\r\n    [class.visible]=\"isSearchPanelVisible\"\r\n    [nodes]=\"activities\"\r\n    (selectNodeChange)=\"onNodeSelectChange($event)\"\r\n    (searchChange)=\"openAddNodeDialog()\"\r\n  >\r\n  </node-search-panel>\r\n\r\n  <!-- Node action toolbar (floating near selected node) -->\r\n  <node-action-toolbar\r\n    [isVisible]=\"isNodeToolbarVisible\"\r\n    [position]=\"nodeToolbarPosition\"\r\n    (deleteNode)=\"onDeleteNode()\"\r\n    (linkNode)=\"onLinkNodeRequest()\"\r\n  >\r\n  </node-action-toolbar>\r\n\r\n  <!-- Node details sidebar -->\r\n  <node-details-sidebar\r\n    [isOpen]=\"isSidebarOpen\"\r\n    [nodeData]=\"selectedNodeData\"\r\n    (close)=\"onCloseSidebar()\"\r\n    (descriptionChange)=\"onDescriptionChange($event)\"\r\n    (activityTypeChange)=\"onActivityTypeChange($event)\"\r\n  >\r\n  </node-details-sidebar>\r\n</div>\r\n","\r\nexport type WxCCBaseURLParams = {\r\n    customerId: number;\r\n    uccxIp: string;\r\n    fileName: string;\r\n};\r\n\r\nexport type FileState = 'ORIG' | 'DRAFT' | 'COMPLETED';\r\n\r\nconst BASE = '/api/uccx/migration';\r\n\r\nfunction buildUrl(\r\n    customerId: number,\r\n    uccxIp: string,\r\n    fileName: string,\r\n    action: 'get' | 'save',\r\n    state: FileState,\r\n    format?: 'ir' | undefined\r\n): string {\r\n    return `${BASE}/customer/${customerId}/uccx/${uccxIp}/filename/${fileName}/${action}/type/${state}/wxcc${format ? '/ir' : ''}/json`;\r\n}\r\n/**\r\n * Any WxCC flowchart api endpoint should go here\r\n */\r\nexport const WXCC_FLOWCHART_API = {\r\n    GET_DATA: (params: WxCCBaseURLParams, state: FileState = 'ORIG', format?: 'ir') => buildUrl(\r\n        params.customerId,\r\n        params.uccxIp,\r\n        params.fileName,\r\n        'get',\r\n        state,\r\n        format\r\n    ),\r\n    SAVE_DRAFT: (params: WxCCBaseURLParams, format?: 'ir') => buildUrl(\r\n        params.customerId,\r\n        params.uccxIp,\r\n        params.fileName,\r\n        'save',\r\n        'DRAFT',\r\n        format\r\n    ),\r\n    RESET_DRAFT: (params: WxCCBaseURLParams, format?: 'ir') =>\r\n        `${BASE}/customer/${params.customerId}/uccx/${params.uccxIp}/filename/${params.fileName}${format ? '' : '/wxcc'}/reset/draft`,\r\n    COMPLETE_FLOW: (params: WxCCBaseURLParams, format?: 'ir') => buildUrl(\r\n        params.customerId,\r\n        params.uccxIp,\r\n        params.fileName,\r\n        'save',\r\n        'COMPLETED',\r\n        format\r\n    )\r\n};","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { IWxCCJSON, IWxCCNonIRJSON } from \"../types/wxcc\";\r\nimport { WxCCBaseURLParams, FileState, WXCC_FLOWCHART_API } from \"../constants/wxcc-api.constants\";\r\nimport { APIService } from \"../../shared/api.service\";\r\n\r\n@Injectable()\r\nexport class WxCCAPIService {\r\n    constructor(private readonly api: APIService) { }\r\n    /**\r\n     * Fetch original WXCC flow data\r\n     */\r\n    fetchWxCCFlowData(params: WxCCBaseURLParams, state: FileState = 'ORIG'): Observable<IWxCCNonIRJSON> {\r\n        const url = WXCC_FLOWCHART_API.GET_DATA(params, state);\r\n        // @ts-ignore\r\n        return this.api.fetch<IWxCCNonIRJSON>(url);\r\n    }\r\n\r\n    /**\r\n     * Fetch original WXCC flow data as IR format\r\n     */\r\n    fetchWxCCFlowDataIR(params: WxCCBaseURLParams, state: FileState = 'ORIG'): Observable<IWxCCJSON> {\r\n        const url = WXCC_FLOWCHART_API.GET_DATA(params, state, 'ir');\r\n        // @ts-ignore\r\n        return this.api.fetch<IWxCCJSON>(url);\r\n    }\r\n\r\n    /**\r\n     * Save WXCC flow data as DRAFT\r\n     */\r\n    saveWxCCFlowData(params: WxCCBaseURLParams, data: IWxCCNonIRJSON): Observable<string> {\r\n        const url = WXCC_FLOWCHART_API.SAVE_DRAFT(params);\r\n        // @ts-ignore\r\n        return this.api.post<string>(url, data);\r\n    }\r\n\r\n    /**\r\n     * Save WXCC flow data as DRAFT in IR format\r\n     */\r\n    saveWxCCFlowDataIR(params: WxCCBaseURLParams, data: IWxCCJSON): Observable<string> {\r\n        const url = WXCC_FLOWCHART_API.SAVE_DRAFT(params, 'ir');\r\n        // @ts-ignore\r\n        return this.api.post<string>(url, data);\r\n    }\r\n\r\n    /**\r\n     * Reset to original WXCC flow data\r\n     */\r\n    resetWxCCFlowData(params: WxCCBaseURLParams): Observable<IWxCCNonIRJSON> {\r\n        const url = WXCC_FLOWCHART_API.RESET_DRAFT(params);\r\n        // @ts-ignore\r\n        return this.api.post<IWxCCNonIRJSON>(url);\r\n    }\r\n\r\n    /**\r\n     * Reset to original WXCC flow data in IR format\r\n     */\r\n    resetWxCCFlowDataIR(params: WxCCBaseURLParams): Observable<IWxCCJSON> {\r\n        const url = WXCC_FLOWCHART_API.RESET_DRAFT(params, 'ir');\r\n        // @ts-ignore\r\n        return this.api.post<IWxCCJSON>(url);\r\n    }\r\n\r\n    /**\r\n     * Save WXCC flow data as COMPLETED\r\n     */\r\n    completeWxCCFlowData(params: WxCCBaseURLParams, data: IWxCCNonIRJSON): Observable<string> {\r\n        const url = WXCC_FLOWCHART_API.COMPLETE_FLOW(params);\r\n        // @ts-ignore\r\n        return this.api.post<string>(url, data);\r\n    }\r\n\r\n    /**\r\n     * Save WXCC flow data as COMPLETED in IR format\r\n     */\r\n    completeWxCCFlowDataIR(params: WxCCBaseURLParams, data: IWxCCJSON): Observable<string> {\r\n        const url = WXCC_FLOWCHART_API.COMPLETE_FLOW(params, 'ir');\r\n        // @ts-ignore\r\n        return this.api.post<string>(url, data);\r\n    }\r\n}","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\n\r\n@Component({\r\n    selector: 'wxcc-file-selection-bar',\r\n    templateUrl: './wxcc-file-selection-bar.component.html',\r\n    styleUrls: ['./wxcc-file-selection-bar.component.scss'],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class WxCCFileSelectionBarComponent implements OnInit {\r\n    @Input() fileNames!: { fileName: string; host: string }[];\r\n    @Input() selectedFileName!: string;\r\n    @Input() selectedHost!: string;\r\n\r\n    @Output() fileNameSelectionChange = new EventEmitter<{ host: string, fileName: string }>();\r\n\r\n    readonly hostFileNames = new Map<string, string[]>();\r\n\r\n    ngOnInit(): void {\r\n        this.fileNames.forEach(({ fileName, host }) => {\r\n            if (!this.hostFileNames.has(host)) {\r\n                this.hostFileNames.set(host, []);\r\n            }\r\n            this.hostFileNames.get(host)?.push(fileName);\r\n        });\r\n    }\r\n\r\n    get fileNamesByHost(): string[] {\r\n        return this.hostFileNames.get(this.selectedHost) as string[];\r\n    }\r\n\r\n    get hosts(): string[] | null {\r\n        if (!this.fileNames.length) {\r\n            return null;\r\n        }\r\n        const hostsSet = new Set(this.fileNames.map((file) => file.host));\r\n        return Array.from(hostsSet).filter(host => host);\r\n    }\r\n\r\n    onFileSelectionChange(fileName: string): void {\r\n        this.fileNameSelectionChange.emit({ fileName: fileName, host: this.selectedHost });\r\n    }\r\n\r\n    onHostSelectionChange(host: string): void {\r\n        this.selectedHost = host;\r\n        this.fileNameSelectionChange.emit({\r\n            host: host,\r\n            fileName: this.fileNamesByHost[0]\r\n        });\r\n    }\r\n\r\n    trackByFileName(_index: number, fileName: string): string {\r\n        return fileName;\r\n    }\r\n\r\n    trackByHost(_index: number, host: string): string {\r\n        return host;\r\n    }\r\n}","<div class=\"file-selection-bar\">\r\n    <mat-form-field appearance=\"outline\" class=\"host-selection\" *ngIf=\"hosts?.length\">\r\n        <!-- <mat-label>Host</mat-label> -->\r\n        <mat-select\r\n            [value]=\"selectedHost\"\r\n            (selectionChange)=\"onHostSelectionChange($event.value)\">\r\n            <mat-option\r\n                *ngFor=\"let host of hosts; trackBy: trackByHost\"\r\n                title=\"{{ host }}\"\r\n                [value]=\"host\">\r\n                {{ host }}\r\n            </mat-option>\r\n        </mat-select>\r\n    </mat-form-field>\r\n\r\n    <mat-form-field appearance=\"outline\" class=\"file-selection\">\r\n        <!-- <mat-label>Script file</mat-label> -->\r\n        <mat-select\r\n            [value]=\"selectedFileName\"\r\n            (selectionChange)=\"onFileSelectionChange($event.value)\">\r\n            <mat-option\r\n                *ngFor=\"let name of fileNamesByHost; trackBy: trackByFileName\"\r\n                title=\"{{ name }}\"\r\n                [value]=\"name\">\r\n                {{ name }}\r\n            </mat-option>\r\n        </mat-select>\r\n    </mat-form-field>\r\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, OnInit, Output } from \"@angular/core\";\r\n\r\n@Component({\r\n    selector: 'wxcc-actions-bar',\r\n    templateUrl: './wxcc-actions-bar.component.html',\r\n    styleUrls: ['./wxcc-actions-bar.component.scss'],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class WxCCActionsBarComponent implements OnInit {\r\n    @Output() save = new EventEmitter<void>();\r\n    @Output() reset = new EventEmitter<void>();\r\n    @Output() complete = new EventEmitter<void>();\r\n    @Output() exportNonIr = new EventEmitter<void>();\r\n\r\n    ngOnInit(): void { }\r\n}","<div class=\"actions-wrapper\">\r\n    <button\r\n        type=\"button\"\r\n        mat-button\r\n        class=\"outline-button\"\r\n        (click)=\"exportNonIr.emit()\">\r\n        Export JSON\r\n    </button>\r\n    <button\r\n        type=\"button\"\r\n        mat-button\r\n        class=\"outline-button\"\r\n        (click)=\"reset.emit()\">\r\n        Reset\r\n    </button>\r\n    <button\r\n        type=\"button\"\r\n        mat-button\r\n        class=\"outline-button\"\r\n        (click)=\"save.emit()\">\r\n        Save\r\n    </button>\r\n    <button\r\n        type=\"button\"\r\n        mat-button\r\n        color=\"primary\"\r\n        (click)=\"complete.emit()\">\r\n        Complete\r\n    </button>\r\n</div>","import { Component, Input, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { WxCCAPIService } from \"./services/wxcc-flow-api.service\";\r\nimport { forkJoin, of, Subject, throwError } from \"rxjs\";\r\nimport { IWxCCFlowchart, IWxCCJSON, IWxCCNonIRJSON } from \"./types/wxcc\";\r\nimport { WxCC2GraphService } from \"./services/wxcc2graph.service\";\r\nimport { filter, finalize, mergeMap, takeUntil, tap } from \"rxjs/operators\";\r\nimport irData from \"./mock/data/QWC_ir.json\";\r\n// import { UCCXWorkflowAPIService } from \"../../uccx-workflow/services/uccx-workflow-api.service\";\r\n// import { CustomersService } from \"../../../services/customers.service\";\r\n// import { ContactCenterService } from \"../contact-center.service\";\r\n// import {\r\n//     CALL_FLOW_MIGRATION_STATUSES_TO_SCRIPT_STATUS,\r\n//     CallFlowMigrationStatus\r\n// } from \"../interfaces/call-flow-migration-status.interface\";\r\nimport { FileState } from \"./constants/wxcc-api.constants\";\r\n\r\ntype WxCCFlowchartState = {\r\n    fileNames: { fileName: string; host: string }[];\r\n    uccxIp: string;\r\n    selectedFileName: string;\r\n    selectedFileStatus: FileState;\r\n    loading: boolean;\r\n    flowchart: IWxCCFlowchart | null;\r\n    irDoc: IWxCCJSON;\r\n    nonIrDoc: IWxCCNonIRJSON;\r\n    errorMessage: string;\r\n    statuses: any[];\r\n};\r\n\r\n@Component({\r\n    selector: 'cc-script-editor',\r\n    templateUrl: './cc-script-editor.component.html',\r\n    styleUrls: ['./cc-script-editor.component.scss']\r\n})\r\nexport class WxCCFlowchartPageComponent implements OnInit, OnDestroy {\r\n    @Input() customerId = 0;\r\n    @Input() host = \"\";\r\n    @Input() token = \"\";\r\n\r\n    private readonly destroy$ = new Subject<void>();\r\n\r\n    readonly state: WxCCFlowchartState = {\r\n        loading: true\r\n    } as any;\r\n\r\n    constructor(\r\n        private readonly api: WxCCAPIService,\r\n        private readonly wxcc2graph: WxCC2GraphService,\r\n        // private readonly customersService: CustomersService,\r\n        // private readonly uccxWorkflowApi: UCCXWorkflowAPIService,\r\n        // private readonly contactCenterService: ContactCenterService\r\n    ) { }\r\n\r\n    ngOnInit(): void {\r\n        this.subscribeToCustomerChanges();\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.destroy$.next();\r\n        this.destroy$.complete();\r\n    }\r\n\r\n    private init(): void {\r\n        this.loadMockFlowchart();\r\n    }\r\n\r\n    private subscribeToCustomerChanges(): void {\r\n        // if (!this.customer) {\r\n        // this.customersService.customer$\r\n        //     .pipe(takeUntil(this.destroy$))\r\n        //     .subscribe((customer) => {\r\n        //         if (customer) {\r\n        this.init();\r\n        // }\r\n        // });\r\n        // } else {\r\n        //     this.init();\r\n        // }\r\n    }\r\n\r\n    private loadMockFlowchart(): void {\r\n        const irDoc = irData as unknown as IWxCCJSON;\r\n        this.state.irDoc = irDoc;\r\n        this.state.flowchart = this.wxcc2graph.parseWxCC(irDoc);\r\n        this.setLoading(false);\r\n    }\r\n\r\n    private loadFileNames(): void {\r\n        // forkJoin([\r\n        //     this.uccxWorkflowApi.fetchFileNames(this.customerId)\r\n        //         .pipe(filter(fileNames => fileNames && fileNames.length > 0)),\r\n        //     this.contactCenterService.getCallFlowMigrationStatuses()\r\n        // ]).pipe(takeUntil(this.destroy$))\r\n        //     .subscribe(([fileNames, statuses]) => {\r\n        //         this.state.fileNames = fileNames;\r\n        //         this.state.uccxIp = fileNames[0].host;\r\n        //         this.state.selectedFileName = fileNames[0].fileName;\r\n\r\n        //         this.state.statuses = statuses.filter(status => status.uccxIp === this.state.uccxIp);\r\n        //         this.state.selectedFileStatus = this.getStatus(this.state.selectedFileName, this.state.uccxIp);\r\n\r\n        //         this.loadWxCCFlowData();\r\n        //     });\r\n    }\r\n\r\n    private loadWxCCFlowData(): void {\r\n        forkJoin([\r\n            this.api.fetchWxCCFlowData(this.baseParams, this.state.selectedFileStatus),\r\n            this.api.fetchWxCCFlowDataIR(this.baseParams, this.state.selectedFileStatus),\r\n        ]).pipe(\r\n            mergeMap(([nonIrDoc, irDoc]) =>\r\n                irDoc !== null ?\r\n                    of({ nonIrDoc, irDoc }) :\r\n                    throwError(() => new Error('No wxcc flow diagram available for this script'))\r\n            ),\r\n            takeUntil(this.destroy$),\r\n            finalize(() => this.setLoading(false))\r\n        ).subscribe({\r\n            next: ({ nonIrDoc, irDoc }) => {\r\n                this.wxcc2graph.setSourceDocuments(irDoc, nonIrDoc);\r\n                this.state.irDoc = irDoc;\r\n                this.state.nonIrDoc = nonIrDoc;\r\n                this.state.flowchart = this.wxcc2graph.parseWxCC(irDoc, nonIrDoc);\r\n            },\r\n            error: (error) => {\r\n                this.state.flowchart = null;\r\n                this.setError('No wxcc flow diagram available for this script');\r\n            }\r\n        });\r\n    }\r\n\r\n    onSave() {\r\n        this.setLoading(true);\r\n\r\n        forkJoin([\r\n            this.api.saveWxCCFlowData(this.baseParams, this.wxcc2graph.wxccNonIRJSON),\r\n            this.api.saveWxCCFlowDataIR(this.baseParams, this.wxcc2graph.wxccJSON)\r\n        ]).pipe(\r\n            takeUntil(this.destroy$),\r\n            finalize(() => this.setLoading(false)),\r\n            tap(() => {\r\n                this.state.flowchart = this.wxcc2graph.parseWxCC(\r\n                    this.wxcc2graph.wxccJSON,\r\n                    this.wxcc2graph.wxccNonIRJSON\r\n                );\r\n            })\r\n        ).subscribe({\r\n            next: ([regularResponse, irResponse]) => console.log('Flow data saved as DRAFT', regularResponse, irResponse),\r\n            error: (error) => console.error('Error while saving wxcc data: ', error)\r\n        });\r\n    }\r\n\r\n    onExportNonIr() {\r\n        if (!this.wxcc2graph.wxccNonIRJSON) {\r\n            console.error('Non-IR wxcc document is not loaded');\r\n            return;\r\n        }\r\n\r\n        const fileStem = (this.state.selectedFileName || 'wxcc-flow').replace(/\\.[^/.]+$/, '');\r\n        const fileName = fileStem + '-non-ir.json';\r\n        const jsonContent = JSON.stringify(this.wxcc2graph.wxccNonIRJSON, null, 2);\r\n        const blob = new Blob([jsonContent], { type: 'application/json' });\r\n        const url = window.URL.createObjectURL(blob);\r\n\r\n        const anchor = document.createElement('a');\r\n        anchor.href = url;\r\n        anchor.download = fileName;\r\n        document.body.appendChild(anchor);\r\n        anchor.click();\r\n        document.body.removeChild(anchor);\r\n\r\n        window.URL.revokeObjectURL(url);\r\n    }\r\n\r\n    onReset() {\r\n        this.setLoading(true);\r\n        forkJoin([\r\n            this.api.resetWxCCFlowData(this.baseParams),\r\n            this.api.resetWxCCFlowDataIR(this.baseParams)\r\n        ]).pipe(\r\n            takeUntil(this.destroy$),\r\n            finalize(() => this.setLoading(false))\r\n        ).subscribe({\r\n            next: ([nonIrDoc, irDoc]) => {\r\n                this.wxcc2graph.setSourceDocuments(irDoc, nonIrDoc);\r\n                this.state.irDoc = irDoc;\r\n                this.state.nonIrDoc = nonIrDoc;\r\n                this.state.flowchart = this.wxcc2graph.parseWxCC(irDoc, nonIrDoc);\r\n                console.log('Flow data reset to original');\r\n            },\r\n            error: (error) => {\r\n                console.error('Error while resetting wxcc data: ', error);\r\n            }\r\n        });\r\n    }\r\n\r\n    onComplete() {\r\n        this.setLoading(true);\r\n\r\n        forkJoin([\r\n            this.api.completeWxCCFlowData(this.baseParams, this.wxcc2graph.wxccNonIRJSON),\r\n            this.api.completeWxCCFlowDataIR(this.baseParams, this.wxcc2graph.wxccJSON)\r\n        ]).pipe(\r\n            takeUntil(this.destroy$),\r\n            finalize(() => this.setLoading(false))\r\n        ).subscribe({\r\n            next: ([regularResponse, irResponse]) => {\r\n                console.log('Flow data saved as COMPLETED', regularResponse, irResponse);\r\n            },\r\n            error: (error) => {\r\n                console.error('Error while completing wxcc data: ', error);\r\n            }\r\n        });\r\n    }\r\n\r\n    onFileNameSelectionChange(item: { fileName: string, host: string }) {\r\n        const { fileName, host } = item;\r\n        this.state.selectedFileName = fileName;\r\n        this.state.uccxIp = host;\r\n\r\n        this.state.selectedFileStatus = this.getStatus(fileName, this.state.uccxIp);\r\n        this.setLoading(true);\r\n        this.loadWxCCFlowData();\r\n    }\r\n\r\n    getStatus(fileName: string, uccxIp: string): any {\r\n        if (!this.state.statuses) {\r\n            throw Error('File status array is undefined');\r\n        }\r\n\r\n        const callFlowMigrationStatus = this.state.statuses.find(\r\n            status => status.uccxIp === uccxIp && status.scriptName === fileName\r\n        );\r\n\r\n        // if (callFlowMigrationStatus && callFlowMigrationStatus.status) {\r\n        //     return CALL_FLOW_MIGRATION_STATUSES_TO_SCRIPT_STATUS[callFlowMigrationStatus.status];\r\n        // }\r\n    }\r\n\r\n    setLoading(loading: boolean): void {\r\n        this.state.loading = loading;\r\n    }\r\n\r\n    setError(error: string): void {\r\n        this.state.errorMessage = error;\r\n    }\r\n\r\n    private get baseParams() {\r\n        return {\r\n            customerId: this.customerId,\r\n            uccxIp: this.state.uccxIp || '',\r\n            fileName: this.state.selectedFileName || ''\r\n        };\r\n    }\r\n\r\n    // private get customer() {\r\n    //     return this.customersService.currentCustomer;\r\n    // }\r\n\r\n    // private get customerId() {\r\n    //     return this.customer.id;\r\n    // }\r\n}\r\n","<div class=\"wxcc-flowchart-wrapper\">\r\n    <header class=\"wxcc-flowchart-header\">\r\n        <wxcc-file-selection-bar\r\n            *ngIf=\"state.fileNames && state.fileNames.length\"\r\n            [fileNames]=\"state.fileNames\"\r\n            [selectedHost]=\"state.uccxIp\"\r\n            [selectedFileName]=\"state.selectedFileName\"\r\n            (fileNameSelectionChange)=\"onFileNameSelectionChange($event)\">\r\n        </wxcc-file-selection-bar>\r\n        <wxcc-actions-bar\r\n            *ngIf=\"state.flowchart\"\r\n            (save)=\"onSave()\"\r\n            (reset)=\"onReset()\"\r\n            (exportNonIr)=\"onExportNonIr()\"\r\n            (complete)=\"onComplete()\">\r\n        </wxcc-actions-bar>\r\n    </header>\r\n    <ng-container *ngIf=\"!state.loading; else loadingTemplate\">\r\n        <wxcc-flowchart\r\n            *ngIf=\"state.flowchart; else errorTemplate\"\r\n            [flowchart]=\"state.flowchart\">\r\n        </wxcc-flowchart>\r\n    </ng-container>\r\n</div>\r\n\r\n<ng-template #loadingTemplate>\r\n    <div class=\"placeholder-wrapper\">\r\n        <mat-spinner diameter=\"40\"></mat-spinner>\r\n    </div>\r\n</ng-template>\r\n\r\n<ng-template #errorTemplate>\r\n    <div class=\"placeholder-wrapper\">\r\n        Error loading script\r\n    </div>\r\n</ng-template>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { FloatingToolBarComponent } from \"./floating-toolbar.component\";\r\n\r\n@NgModule({\r\n    declarations: [\r\n        FloatingToolBarComponent\r\n    ],\r\n    imports: [\r\n        CommonModule,\r\n        MatTooltipModule\r\n    ],\r\n    exports: [\r\n        FloatingToolBarComponent\r\n    ]\r\n})\r\nexport class FloatingToolbarModule { }\r\n","import { NgModule } from \"@angular/core\";\r\nimport { WxCCFlowchartComponent } from \"./components/wxcc-flowchart/wxcc-flowchart.component\";\r\nimport { NodeDetailsSidebarComponent } from \"./components/node-details-sidebar/node-details-sidebar.component\";\r\nimport { NodeActionToolbarComponent } from \"./components/node-action-toolbar/node-action-toolbar.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { WxCCAPIService } from \"./services/wxcc-flow-api.service\";\r\nimport { WxCC2GraphService } from \"./services/wxcc2graph.service\";\r\nimport { WxCCActivityManageService } from \"./services/wxcc-activity-manage.service\";\r\nimport { WxCCActivityCreationService } from \"./services/wxcc-activity-creation.service\";\r\nimport { WxCCFileSelectionBarComponent } from \"./components/wxcc-file-selection-bar/wxcc-file-selection-bar.component\";\r\nimport { WxCCActionsBarComponent } from \"./components/wxcc-actions-bar/wxcc-actions-bar.component\";\r\nimport { AddNodeDialogComponent } from \"./components/dialogs/add-node-dialog/add-node-dialog.component\";\r\nimport { LinkNodeDialogComponent } from \"./components/dialogs/link-node-dialog/link-node-dialog.component\";\r\nimport { NodeSearchPanelComponent } from \"./components/node-search-panel/node-search-panel.component\";\r\nimport { WxCCFlowchartPageComponent } from \"./cc-script-editor.component\";\r\nimport { SharedModule } from \"../shared/shared.module\";\r\nimport { MaterialModule } from \"../shared/material.module\";\r\nimport { FloatingToolbarModule } from \"./components/floating-toolbar/floating-toolbar.module\";\r\n\r\n@NgModule({\r\n    declarations: [\r\n        WxCCFlowchartPageComponent,\r\n        WxCCFlowchartComponent,\r\n        NodeDetailsSidebarComponent,\r\n        NodeActionToolbarComponent,\r\n        LinkNodeDialogComponent,\r\n        WxCCFileSelectionBarComponent,\r\n        AddNodeDialogComponent,\r\n        WxCCActionsBarComponent,\r\n        NodeSearchPanelComponent\r\n    ],\r\n    imports: [\r\n        CommonModule,\r\n        FormsModule,\r\n        SharedModule,\r\n        MaterialModule,\r\n        FloatingToolbarModule\r\n    ],\r\n    exports: [\r\n        WxCCFlowchartPageComponent\r\n    ],\r\n    providers: [\r\n        WxCCAPIService,\r\n        WxCC2GraphService,\r\n        WxCCActivityManageService,\r\n        WxCCActivityCreationService\r\n    ],\r\n    entryComponents: [\r\n        AddNodeDialogComponent,\r\n        LinkNodeDialogComponent\r\n    ]\r\n})\r\nexport class WxCCFlowchartModule { }","import { Injectable } from '@angular/core';\r\nimport { APIService } from './api.service';\r\n\r\n/**\r\n * Same contract as {@link APIService}, pointed at the **dcp** host instead of the\r\n * main API host. A handful of UCCX endpoints (application names, file downloads,\r\n * dependency analysis) are only served there - webex-ops-client does the same thing\r\n * with its `ContactCenterService.customUrl`.\r\n *\r\n * Registered separately from `APIService` so each keeps its own `apiUrl`/`token`.\r\n */\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class DcpApiService extends APIService {\r\n    override apiUrl = window.location.protocol + '//' + window.location.hostname + '/dcp';\r\n}\r\n","/**\r\n * The UCCX migration payloads as the backend returns them, mirroring\r\n * webex-ops-client's `pages/contact-center/interfaces/uccx-batch.interface.ts`.\r\n * Only the fields this widget reads are declared.\r\n */\r\n\r\n/** The UCCX server a batch/application was collected from. */\r\nexport interface UccxHost {\r\n    id?: number;\r\n    host?: string;\r\n    name?: string;\r\n}\r\n\r\n/**\r\n * One UCCX application, as the dcp application cache returns it. Note this is a\r\n * different shape from {@link UccxBatch} - webex-ops-client types the same endpoint\r\n * as `UccxBatch[]` but only ever reads `.name` and `.uccx.host` off it.\r\n */\r\nexport interface UccxApplication {\r\n    id: number;\r\n    name: string;\r\n    /** Wrapped by UCCX as `SCRIPT[Foo.aef]`; see `CcImportService.toScriptName`. */\r\n    scriptName?: string | null;\r\n    description?: string;\r\n    type?: string;\r\n    enabled?: boolean;\r\n    /** Present on the payload, null throughout dev2 - see `resolveMigrationState`. */\r\n    migrationStatus?: string | null;\r\n    aefFiles?: string[] | null;\r\n    uccx?: UccxHost;\r\n}\r\n\r\n/** One migratable UCCX entity: a CSQ, a prompt, an agent, a script, ... */\r\nexport interface UccxItem {\r\n    id: number | null;\r\n    name: string;\r\n    files: string[];\r\n    /** One of {@link UCCX_ITEM_TYPE}. */\r\n    type: string;\r\n    /**\r\n     * The application this entity belongs to - the application-centric link.\r\n     * Populated per entity type by the backend's dependency analysis; on dev2 only\r\n     * Trigger items carry it, everything else is null.\r\n     */\r\n    applicationName?: string | null;\r\n    batchId?: number;\r\n    sourceUCCXIp: string;\r\n    destination: string;\r\n    customerId: number;\r\n    migrate?: boolean;\r\n}\r\n\r\n/** The request/response envelope the migrate endpoint expects. */\r\nexport interface UccxItemsWrapper {\r\n    /** Items grouped by batch - the backend takes a list of lists. */\r\n    uccxItemsList: UccxItem[][];\r\n}\r\n\r\n/**\r\n * A batch groups UCCX entities of one type. A single application is therefore\r\n * spread across several batches, which is why the entity overview has to fan out.\r\n */\r\nexport interface UccxBatch {\r\n    /** A number on the wire, despite webex-ops-client typing it as a string. */\r\n    id: number | string;\r\n    name: string;\r\n    /**\r\n     * Everything below is optional on purpose: the same shape is returned by the\r\n     * batch endpoints and by the dcp application cache, and the latter fills in\r\n     * far fewer fields.\r\n     */\r\n    type?: string;\r\n    applicationName?: string;\r\n    applicationNames?: string;\r\n    sourceUccxIp?: string;\r\n    size?: number;\r\n    destination?: string;\r\n    customerId?: number;\r\n    aefFiles?: string[];\r\n    uccx?: UccxHost;\r\n    /**\r\n     * Compatibility score for the application's AEF script, 0-100.\r\n     * Not served yet - see `CcImportService.resolveCompatibility`.\r\n     */\r\n    compatibilityScore?: number;\r\n}\r\n\r\n/** Per-AEF-script migration state, keyed by `scriptName` + `uccxIp`. */\r\nexport interface CallFlowMigrationStatus {\r\n    id: number;\r\n    scriptName: string;\r\n    /** NEW | EDITING | READY_FOR_MIGRATION | MIGRATED | MIGRATION_FAILED | CONVERTING */\r\n    status: string;\r\n    type: string;\r\n    uccxIp: string;\r\n    customerId: number;\r\n}\r\n\r\n/** The `type` values a {@link UccxItem} can carry. */\r\nexport const UCCX_ITEM_TYPE = {\r\n    RESOURCE_GROUP: 'Resource Group',\r\n    TRIGGER: 'Trigger',\r\n    SCRIPT: 'Script',\r\n    APPLICATION: 'Application',\r\n    CSQ: 'CSQ',\r\n    DOCUMENT: 'Document',\r\n    PHONE_BOOK: 'Phone Book',\r\n    PROMPT: 'Prompt',\r\n    REASON_CODE: 'Reason Code',\r\n    RESOURCE: 'Resource',\r\n    SKILL: 'Skill',\r\n    TEAM: 'Team',\r\n    WRAP_UP_CODE: 'Wrap Up Code'\r\n} as const;\r\n\r\n/** The only call-flow state that counts as imported. */\r\nexport const CALL_FLOW_MIGRATED = 'MIGRATED';\r\n","import { ImportPanelSlice } from '../types/cc-import';\r\nimport { UCCX_ITEM_TYPE } from '../types/uccx';\r\n\r\nexport const CHART_COLORS = {\r\n    customerAssist: '#177A5C',\r\n    webexContactCenter: '#D0D0D0',\r\n    requiresReview: '#1268E3'\r\n} as const;\r\n\r\n/** Compatibility score thresholds, per the ticket's scoring table. */\r\nexport const COMPATIBILITY_THRESHOLDS = {\r\n    /** 80-100 - migrates to Customer Assist with no functional loss. */\r\n    migratable: 80,\r\n    /** 60-79 - migrates to Customer Assist, minor unsupported steps dropped. */\r\n    requiresReview: 60\r\n} as const;\r\n\r\n/**\r\n * Slices of the panel's pie chart, in order: the recommended destination for every\r\n * contact center detected in the connected UCCX environment.\r\n *\r\n * The panel is slice-driven, so re-cutting the chart when the design changes means\r\n * editing this array - no component change.\r\n */\r\nexport const IMPORT_PANEL_SLICES: ImportPanelSlice[] = [\r\n    {\r\n        label: 'To Customer Assist',\r\n        color: CHART_COLORS.customerAssist,\r\n        tooltip: 'Fully supported by Customer Assist.',\r\n        match: contactCenter => contactCenter.compatibilityStatus === 'migratable'\r\n    },\r\n    {\r\n        label: 'Requires Review',\r\n        color: CHART_COLORS.requiresReview,\r\n        tooltip: 'Supported by Customer Assist, but a few unsupported steps would change. '\r\n            + 'Can also go to Webex Contact Center for full feature coverage.',\r\n        match: contactCenter => contactCenter.compatibilityStatus === 'requires-review'\r\n    },\r\n    {\r\n        label: 'To Webex Contact Center',\r\n        color: CHART_COLORS.webexContactCenter,\r\n        tooltip: 'Not supported by Customer Assist - migrate to Webex Contact Center.',\r\n        match: contactCenter => contactCenter.compatibilityStatus === 'unsupported'\r\n    }\r\n];\r\n\r\n/**\r\n * How UCCX entity types roll up into the groups the Overview step shows, in display\r\n * order. Types not listed here get a group of their own under their raw type name,\r\n * so nothing the backend returns is silently dropped.\r\n */\r\nexport const OVERVIEW_ENTITY_GROUPS: { label: string; types: string[] }[] = [\r\n    { label: 'Channel', types: [UCCX_ITEM_TYPE.TRIGGER] },\r\n    { label: 'Queues', types: [UCCX_ITEM_TYPE.CSQ] },\r\n    { label: 'Audio files', types: [UCCX_ITEM_TYPE.PROMPT, UCCX_ITEM_TYPE.DOCUMENT] },\r\n    { label: 'Flows', types: [UCCX_ITEM_TYPE.SCRIPT] },\r\n    { label: 'Skill', types: [UCCX_ITEM_TYPE.SKILL] },\r\n    { label: 'Contact center users', types: [UCCX_ITEM_TYPE.RESOURCE] }\r\n];\r\n\r\nexport const IMPORT_PANEL_TITLE = 'Import Contact center';\r\n\r\nexport const IMPORT_PANEL_TOOLTIP =\r\n    'Contact centers detected in the connected UCCX environment, and where each one can migrate to.';\r\n\r\nexport const IMPORT_WIZARD_TITLE = 'Contact Center';\r\n\r\n/** Shown once a \"requires review\" contact center is picked. Dismissible. */\r\nexport const CUSTOMER_ASSIST_NOTICE =\r\n    'This contact center may also be supported by Customer Assist. Check compatibility before continuing.';\r\n\r\n/** Tooltip on the marker the picker puts next to those same contact centers. */\r\nexport const CUSTOMER_ASSIST_MARKER_TOOLTIP = 'May also be supported by Customer Assist.';\r\n","import { ContactCenter, ContactCenterCompatibilityStatus, ContactCenterEntities } from '../types/cc-import';\r\n\r\n/**\r\n * Stand-in data used when `CcImportService.useMockData` is on.\r\n *\r\n * Shapes here mirror exactly what `CcImportService` produces from the real backend,\r\n * so switching over is a matter of flipping `useMockData` to false.\r\n */\r\n\r\nconst APPLICATION_NAMES = [\r\n    'Operations', 'Sales', 'Support', 'Billing', 'Reception', 'Helpdesk', 'Retention',\r\n    'Onboarding', 'Escalations', 'Emergency', 'Pharmacy', 'Appointments', 'Claims',\r\n    'Collections', 'Dispatch', 'Front Desk', 'IT Service Desk', 'Loyalty', 'Orders', 'Returns'\r\n];\r\n\r\n/** One tab per group on the wizard's Overview step, in the order they are shown. */\r\nconst ENTITY_GROUP_TEMPLATE: { label: string; suffixes: string[] }[] = [\r\n    { label: 'Channel', suffixes: ['_CC'] },\r\n    { label: 'Queues', suffixes: ['_Queue'] },\r\n    { label: 'Audio files', suffixes: [' Welcome', ' Music On Hold', ' Closed Message'] },\r\n    { label: 'Flows', suffixes: ['_Flow'] },\r\n    { label: 'Skill', suffixes: ['_Skill'] },\r\n    { label: 'Contact center users', suffixes: [' Supervisor', ' Agent 1', ' Agent 2'] }\r\n];\r\n\r\n/**\r\n * The ten contact centers that still need a decision - the only ones the wizard\r\n * offers, so these are exactly the rows the picker shows, in this order. The flagged\r\n * three are \"requires review\" and carry the marker plus the advisory notice.\r\n */\r\nconst REVIEW_CONTACT_CENTERS: { name: string; requiresReview?: boolean }[] = [\r\n    { name: 'Operations', requiresReview: true },\r\n    { name: 'Sales_inquiry' },\r\n    { name: 'Tech Support' },\r\n    { name: 'Tech_Info' },\r\n    { name: 'Finance', requiresReview: true },\r\n    { name: 'Innovation', requiresReview: true },\r\n    { name: 'Marketing' },\r\n    { name: 'Gen_Support' },\r\n    { name: 'Legal' },\r\n    { name: 'Sales Support' }\r\n];\r\n\r\n/** 100 contact centers: 70 migratable, 20 unsupported, 10 still to be imported. */\r\nexport function mockContactCenters(): ContactCenter[] {\r\n    const contactCenters: ContactCenter[] = [];\r\n\r\n    // 90 already-imported ones, split across the two destinations.\r\n    for (let i = 0; i < 90; i++) {\r\n        const name = `${APPLICATION_NAMES[i % APPLICATION_NAMES.length]}_${Math.floor(i / APPLICATION_NAMES.length) + 1}`;\r\n        const compatibilityStatus: ContactCenterCompatibilityStatus = i < 70 ? 'migratable' : 'unsupported';\r\n\r\n        contactCenters.push({\r\n            applicationId: `app-${i + 1}`,\r\n            applicationName: name,\r\n            scriptName: `${name}_AA_Queue.aef`,\r\n            compatibilityStatus,\r\n            compatibilityScore: compatibilityStatus === 'migratable' ? 92 : 41,\r\n            migrationState: 'migrated'\r\n        });\r\n    }\r\n\r\n    REVIEW_CONTACT_CENTERS.forEach((contactCenter, i) => {\r\n        const compatibilityStatus: ContactCenterCompatibilityStatus =\r\n            contactCenter.requiresReview ? 'requires-review' : 'unsupported';\r\n\r\n        contactCenters.push({\r\n            applicationId: `app-${91 + i}`,\r\n            applicationName: contactCenter.name,\r\n            scriptName: `${contactCenter.name}_AA_Queue.aef`,\r\n            compatibilityStatus,\r\n            compatibilityScore: contactCenter.requiresReview ? 68 : 44,\r\n            migrationState: 'not-migrated',\r\n            customerAssistCapable: compatibilityStatus === 'requires-review'\r\n        });\r\n    });\r\n\r\n    return contactCenters;\r\n}\r\n\r\nexport function mockContactCenterEntities(contactCenter: ContactCenter): ContactCenterEntities {\r\n    const base = contactCenter.applicationName;\r\n\r\n    return {\r\n        applicationId: contactCenter.applicationId,\r\n        groups: ENTITY_GROUP_TEMPLATE.map(group => ({\r\n            label: group.label,\r\n            items: group.suffixes.map(suffix => `${base}${suffix}`)\r\n        }))\r\n    };\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, delay, forkJoin, map, of, switchMap } from 'rxjs';\r\nimport { API } from '../shared/api.endpoints';\r\nimport { APIService } from '../shared/api.service';\r\nimport { DcpApiService } from '../shared/dcp-api.service';\r\nimport { COMPATIBILITY_THRESHOLDS, OVERVIEW_ENTITY_GROUPS } from './constants/cc-import.constants';\r\nimport { mockContactCenterEntities, mockContactCenters } from './mock/cc-import.mock';\r\nimport {\r\n    ContactCenter,\r\n    ContactCenterCompatibilityStatus,\r\n    ContactCenterEntities,\r\n    ContactCenterEntityGroup,\r\n    ImportResult\r\n} from './types/cc-import';\r\nimport {\r\n    CALL_FLOW_MIGRATED,\r\n    CallFlowMigrationStatus,\r\n    UccxApplication,\r\n    UccxBatch,\r\n    UccxItem,\r\n    UccxItemsWrapper\r\n} from './types/uccx';\r\n\r\n/** Simulated network latency for the mock responses, so loading states are exercised. */\r\nconst MOCK_LATENCY_MS = 300;\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class CcImportService {\r\n    private readonly api = inject(APIService);\r\n    private readonly dcpApi = inject(DcpApiService);\r\n\r\n    /**\r\n     * Answer everything from `mock/cc-import.mock.ts` instead of calling the backend.\r\n     *\r\n     * Note this is all-or-nothing: with it off, the contact-center list, the entity\r\n     * overview and the import all hit real endpoints. Compatibility scoring is the\r\n     * exception - see {@link resolveCompatibility}.\r\n     */\r\n    useMockData = true;\r\n\r\n    setToken(token: string): void {\r\n        this.api.token = token;\r\n        this.dcpApi.token = token;\r\n    }\r\n\r\n    setHost(host: string): void {\r\n        this.api.apiUrl = host;\r\n    }\r\n\r\n    /** Base URL of the dcp host, which serves the UCCX application list. */\r\n    setDcpHost(dcpHost: string): void {\r\n        this.dcpApi.apiUrl = dcpHost;\r\n    }\r\n\r\n    /**\r\n     * Every UCCX contact center Tuki can import.\r\n     *\r\n     * A \"contact center\" is a UCCX application. The list comes from the dcp\r\n     * application cache; whether each one has already been imported is joined on from\r\n     * the per-AEF-script call-flow migration states.\r\n     */\r\n    fetchContactCenters(customerId: number): Observable<ContactCenter[]> {\r\n        if (this.useMockData) {\r\n            return of(mockContactCenters()).pipe(delay(MOCK_LATENCY_MS));\r\n        }\r\n\r\n        return forkJoin({\r\n            applications: this.dcpApi.fetch(API.UCCX.APPLICATION_NAMES(customerId)),\r\n            callFlows: this.api.fetch(API.UCCX.CALL_FLOW_MIGRATION_STATUSES(customerId))\r\n        }).pipe(\r\n            map(({ applications, callFlows }) => this.toContactCenters(\r\n                this.asArray<UccxApplication>(applications),\r\n                this.asArray<CallFlowMigrationStatus>(callFlows)\r\n            ))\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Application-centric entity breakdown: everything Tuki will create on import.\r\n     *\r\n     * Note this only ever returns entities the backend has actually linked to the\r\n     * application. Where that linkage is missing the groups come back empty rather\r\n     * than padded with unrelated entities of the right type.\r\n     */\r\n    fetchContactCenterEntities(customerId: number, contactCenter: ContactCenter): Observable<ContactCenterEntities> {\r\n        if (this.useMockData) {\r\n            return of(mockContactCenterEntities(contactCenter)).pipe(delay(MOCK_LATENCY_MS));\r\n        }\r\n\r\n        return this.fetchApplicationItems(customerId, contactCenter.applicationName).pipe(\r\n            map(items => ({\r\n                applicationId: contactCenter.applicationId,\r\n                groups: this.groupEntities(items)\r\n            }))\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Kicks off the UCCX -> Webex Contact Center import of one contact center, as a\r\n     * single migration unit: every entity of the application goes in one request.\r\n     *\r\n     * The endpoint is synchronous and answers with an XLSX tracker rather than a job\r\n     * id - execution and progress tracking are defined in a separate ticket.\r\n     *\r\n     * @param siteId     required by the backend when a Resource Group is in scope.\r\n     * @param locationId required by the backend when a Trigger is in scope.\r\n     */\r\n    importContactCenter(\r\n        customerId: number,\r\n        applicationId: string,\r\n        siteId?: string,\r\n        locationId?: string\r\n    ): Observable<ImportResult> {\r\n        if (this.useMockData) {\r\n            return of<ImportResult>({ applicationId, accepted: true }).pipe(delay(MOCK_LATENCY_MS));\r\n        }\r\n\r\n        return this.fetchApplicationItems(customerId, applicationId).pipe(\r\n            switchMap(items => {\r\n                const payload: UccxItemsWrapper = {\r\n                    uccxItemsList: items.length ? [items.map(item => ({ ...item, migrate: true }))] : []\r\n                };\r\n\r\n                return this.api.post(\r\n                    API.UCCX.MIGRATE(customerId),\r\n                    payload,\r\n                    { siteId, locationId },\r\n                    { responseType: 'blob' }\r\n                );\r\n            }),\r\n            map((report: Blob) => ({\r\n                applicationId,\r\n                accepted: true,\r\n                report: report instanceof Blob ? report : undefined\r\n            }))\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Every UCCX entity belonging to one application, gathered across the batches.\r\n     *\r\n     * UCCX batches hold one entity type each, so this reads them all and keeps the\r\n     * items whose `applicationName` matches. The narrowing is done here rather than\r\n     * through the endpoint's own `applicationName` param because that param answers\r\n     * `[]` on dev2 even for items that plainly carry the name.\r\n     */\r\n    private fetchApplicationItems(customerId: number, applicationName: string): Observable<UccxItem[]> {\r\n        return this.api.fetch(API.UCCX.BATCHES(customerId)).pipe(\r\n            switchMap(response => {\r\n                const batches = this.asArray<UccxBatch>(response);\r\n                if (!batches.length) {\r\n                    return of<UccxItem[]>([]);\r\n                }\r\n\r\n                return forkJoin(batches.map(batch =>\r\n                    this.api.fetch(API.UCCX.BATCH_ITEMS(customerId, batch.id))\r\n                        .pipe(map((wrapper: UccxItemsWrapper) => this.flattenItems(wrapper)))\r\n                )).pipe(map(perBatch => this.dedupeItems(\r\n                    perBatch.flat().filter(item => item.applicationName === applicationName)\r\n                )));\r\n            })\r\n        );\r\n    }\r\n\r\n    /** The items endpoint nests items one level; older responses come back flat. */\r\n    private flattenItems(wrapper: UccxItemsWrapper | null): UccxItem[] {\r\n        const items = wrapper?.uccxItemsList ?? [];\r\n        const flattened = Array.isArray(items[0])\r\n            ? (items as UccxItem[][]).flat()\r\n            : (items as unknown as UccxItem[]);\r\n        return flattened.filter(Boolean);\r\n    }\r\n\r\n    /** The same entity can be carried by more than one batch. */\r\n    private dedupeItems(items: UccxItem[]): UccxItem[] {\r\n        const seen = new Set<string>();\r\n        return items.filter(item => {\r\n            const key = `${item.type}::${item.name}::${item.sourceUCCXIp}`;\r\n            if (seen.has(key)) {\r\n                return false;\r\n            }\r\n            seen.add(key);\r\n            return true;\r\n        });\r\n    }\r\n\r\n    private groupEntities(items: UccxItem[]): ContactCenterEntityGroup[] {\r\n        const remaining = new Map<string, string[]>();\r\n        items.forEach(item => {\r\n            const names = remaining.get(item.type) ?? [];\r\n            names.push(item.name);\r\n            remaining.set(item.type, names);\r\n        });\r\n\r\n        const groups: ContactCenterEntityGroup[] = OVERVIEW_ENTITY_GROUPS.map(group => {\r\n            const collected: string[] = [];\r\n            group.types.forEach(type => {\r\n                collected.push(...(remaining.get(type) ?? []));\r\n                remaining.delete(type);\r\n            });\r\n            return { label: group.label, items: collected };\r\n        });\r\n\r\n        // Anything the backend returned that has no group of its own keeps its raw\r\n        // type as a label, rather than being dropped from the overview.\r\n        remaining.forEach((names, type) => groups.push({ label: type, items: names }));\r\n\r\n        return groups;\r\n    }\r\n\r\n    private toContactCenters(\r\n        applications: UccxApplication[],\r\n        callFlows: CallFlowMigrationStatus[]\r\n    ): ContactCenter[] {\r\n        return applications\r\n            .filter(application => !!application?.name)\r\n            .map(application => {\r\n                const uccxIp = application.uccx?.host;\r\n                const scriptName = this.toScriptName(application);\r\n                const compatibilityStatus = this.resolveCompatibility(application);\r\n\r\n                const contactCenter: ContactCenter = {\r\n                    // UCCX identifies an application by name - it is what the entity\r\n                    // records link back to - so it doubles as the widget's key.\r\n                    applicationId: application.name,\r\n                    applicationName: application.name,\r\n                    scriptName,\r\n                    uccxIp,\r\n                    compatibilityStatus,\r\n                    migrationState: this.resolveMigrationState(application, scriptName, uccxIp, callFlows),\r\n                    // Per the ticket, \"requires review\" is exactly the set that can go\r\n                    // to either destination.\r\n                    customerAssistCapable: compatibilityStatus === 'requires-review'\r\n                };\r\n\r\n                return contactCenter;\r\n            });\r\n    }\r\n\r\n    /** UCCX wraps the backing script as `SCRIPT[Foo.aef]`; the widget shows `Foo.aef`. */\r\n    private toScriptName(application: UccxApplication): string {\r\n        const raw = application.scriptName ?? application.aefFiles?.[0] ?? '';\r\n        return raw.replace(/^SCRIPT\\[(.*)\\]$/, '$1');\r\n    }\r\n\r\n    /**\r\n     * Whether Tuki has already imported this contact center.\r\n     *\r\n     * The application record carries its own `migrationStatus`, but it is null\r\n     * throughout dev2, so this falls back to the per-AEF-script call-flow state.\r\n     */\r\n    private resolveMigrationState(\r\n        application: UccxApplication,\r\n        scriptName: string,\r\n        uccxIp: string | undefined,\r\n        callFlows: CallFlowMigrationStatus[]\r\n    ): ContactCenter['migrationState'] {\r\n        if (application.migrationStatus) {\r\n            return application.migrationStatus === CALL_FLOW_MIGRATED ? 'migrated' : 'not-migrated';\r\n        }\r\n\r\n        const callFlow = callFlows.find(flow =>\r\n            flow.scriptName === scriptName && (!uccxIp || flow.uccxIp === uccxIp));\r\n\r\n        return callFlow?.status === CALL_FLOW_MIGRATED ? 'migrated' : 'not-migrated';\r\n    }\r\n\r\n    /**\r\n     * Turns an AEF compatibility score into a status.\r\n     *\r\n     * The scoring API does not exist yet - the AEF step mapping is still a pending\r\n     * input on the ticket - so when the backend sends no score every contact center\r\n     * falls back to \"requires review\": the status that offers both destinations and\r\n     * claims nothing about compatibility we have not actually measured.\r\n     *\r\n     * Once the backend returns `compatibilityScore`, the thresholds below take over\r\n     * with no further change here.\r\n     */\r\n    private resolveCompatibility(application: UccxApplication): ContactCenterCompatibilityStatus {\r\n        const score = (application as { compatibilityScore?: number }).compatibilityScore;\r\n\r\n        if (typeof score !== 'number') {\r\n            return 'requires-review';\r\n        }\r\n        if (score >= COMPATIBILITY_THRESHOLDS.migratable) {\r\n            return 'migratable';\r\n        }\r\n        if (score >= COMPATIBILITY_THRESHOLDS.requiresReview) {\r\n            return 'requires-review';\r\n        }\r\n        return 'unsupported';\r\n    }\r\n\r\n    private asArray<T>(value: unknown): T[] {\r\n        return Array.isArray(value) ? value as T[] : [];\r\n    }\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, inject } from '@angular/core';\r\nimport { ApexChart, ApexDataLabels, ApexLegend, ApexNonAxisChartSeries, ApexPlotOptions, ApexStates, ApexTooltip } from 'ng-apexcharts';\r\nimport { Subscription, catchError, finalize, of } from 'rxjs';\r\nimport { CcImportService } from '../../cc-import.service';\r\nimport { CHART_COLORS, IMPORT_PANEL_SLICES, IMPORT_PANEL_TITLE, IMPORT_PANEL_TOOLTIP } from '../../constants/cc-import.constants';\r\nimport { ContactCenter, ImportPanelSegment } from '../../types/cc-import';\r\n\r\ninterface PanelChartOptions {\r\n    series: ApexNonAxisChartSeries;\r\n    chart: ApexChart;\r\n    labels: string[];\r\n    colors: string[];\r\n    legend: ApexLegend;\r\n    plotOptions: ApexPlotOptions;\r\n    dataLabels: ApexDataLabels;\r\n    tooltip: ApexTooltip;\r\n    states: ApexStates;\r\n}\r\n\r\n/**\r\n * \"Import Contact center\" panel: how many UCCX contact centers were detected, how many\r\n * have been imported, and an Import button that asks the host to open the import wizard.\r\n */\r\n@Component({\r\n    selector: 'cc-import-contact-center-panel',\r\n    templateUrl: './import-contact-center-panel.component.html',\r\n    styleUrls: ['./import-contact-center-panel.component.scss']\r\n})\r\nexport class ImportContactCenterPanelComponent implements OnInit, OnChanges, OnDestroy {\r\n    @Input() customerId!: number;\r\n    @Input() host!: string;\r\n    /** Base URL of the dcp host, which serves the UCCX application list. */\r\n    @Input() dcpHost!: string;\r\n    @Input() token!: string;\r\n    /** Serve mock data instead of calling the UCCX migration API. */\r\n    @Input() useMockData = true;\r\n\r\n    /**\r\n     * Asked for the import wizard, carrying the contact centers already loaded here so\r\n     * the wizard opens without refetching them. The host renders\r\n     * `cc-import-contact-center-wizard` as a page in response.\r\n     */\r\n    @Output() importRequested = new EventEmitter<ContactCenter[]>();\r\n\r\n    private readonly ccImportService = inject(CcImportService);\r\n    private subscription?: Subscription;\r\n\r\n    readonly title = IMPORT_PANEL_TITLE;\r\n    readonly tooltip = IMPORT_PANEL_TOOLTIP;\r\n\r\n    segments: ImportPanelSegment[] = [];\r\n    chartOptions!: PanelChartOptions;\r\n    total = 0;\r\n    loading = false;\r\n    error = false;\r\n\r\n    private contactCenters: ContactCenter[] = [];\r\n\r\n    ngOnInit(): void {\r\n        // Render an empty donut up front so the template never reads unset chart options,\r\n        // including when load() bails out because the widget has no credentials yet.\r\n        this.buildViewModel();\r\n        this.load();\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        const reloadTriggers = ['customerId', 'host', 'dcpHost', 'token', 'useMockData'];\r\n        if (reloadTriggers.some(input => changes[input] && !changes[input].firstChange)) {\r\n            this.load();\r\n        }\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.subscription?.unsubscribe();\r\n    }\r\n\r\n    onImport(): void {\r\n        this.importRequested.emit(this.contactCenters);\r\n    }\r\n\r\n    /** Call after an import has run so the donut picks up the new counts. */\r\n    refresh(): void {\r\n        this.load();\r\n    }\r\n\r\n    private load(): void {\r\n        const customerId = Number(this.customerId);\r\n        this.ccImportService.useMockData = this.useMockData;\r\n\r\n        if (!this.useMockData && (!customerId || !this.token)) {\r\n            return;\r\n        }\r\n\r\n        if (this.host) {\r\n            this.ccImportService.setHost(this.host);\r\n        }\r\n        if (this.dcpHost) {\r\n            this.ccImportService.setDcpHost(this.dcpHost);\r\n        }\r\n        if (this.token) {\r\n            this.ccImportService.setToken(this.token);\r\n        }\r\n\r\n        this.subscription?.unsubscribe();\r\n        this.loading = true;\r\n        this.error = false;\r\n\r\n        this.subscription = this.ccImportService.fetchContactCenters(customerId)\r\n            .pipe(\r\n                catchError(error => {\r\n                    console.error('Unable to load the contact centers', error);\r\n                    this.error = true;\r\n                    return of<ContactCenter[]>([]);\r\n                }),\r\n                finalize(() => this.loading = false)\r\n            )\r\n            .subscribe(contactCenters => {\r\n                this.contactCenters = contactCenters;\r\n                this.buildViewModel();\r\n            });\r\n    }\r\n\r\n    private buildViewModel(): void {\r\n        this.total = this.contactCenters.length;\r\n\r\n        this.segments = IMPORT_PANEL_SLICES.map(slice => {\r\n            const count = this.contactCenters.filter(slice.match).length;\r\n            return {\r\n                label: slice.label,\r\n                color: slice.color,\r\n                tooltip: slice.tooltip,\r\n                count,\r\n                percentage: this.total > 0 ? Math.round((count / this.total) * 100) : 0\r\n            };\r\n        });\r\n\r\n        this.chartOptions = this.buildChartOptions();\r\n    }\r\n\r\n    private buildChartOptions(): PanelChartOptions {\r\n        const charted = this.segments.filter(segment => segment.count > 0);\r\n        const isEmpty = charted.length === 0;\r\n\r\n        return {\r\n            series: isEmpty ? [1] : charted.map(segment => segment.count),\r\n            labels: isEmpty ? ['No contact centers'] : charted.map(segment => segment.label),\r\n            colors: isEmpty ? [CHART_COLORS.webexContactCenter] : charted.map(segment => segment.color),\r\n            chart: {\r\n                type: 'donut',\r\n                height: 150,\r\n                width: 150,\r\n                sparkline: { enabled: true }\r\n            },\r\n            legend: { show: false },\r\n            plotOptions: {\r\n                pie: {\r\n                    expandOnClick: false,\r\n                    donut: { size: '72%' }\r\n                }\r\n            },\r\n            dataLabels: { enabled: false },\r\n            tooltip: { enabled: !isEmpty },\r\n            states: {\r\n                active: { filter: { type: 'none', value: 0 } }\r\n            }\r\n        };\r\n    }\r\n}\r\n","<tk-card [title]=\"title\" [dense]=\"true\">\r\n  <ng-container ngProjectAs=\"card-title-adornment\">\r\n    <span class=\"cc-import-panel__info\" [matTooltip]=\"tooltip\">\r\n      <ng-container *ngTemplateOutlet=\"infoIcon\"></ng-container>\r\n    </span>\r\n  </ng-container>\r\n\r\n  <ng-container ngProjectAs=\"card-content\">\r\n    <div class=\"cc-import-panel__body\" *ngIf=\"!loading && !error; else panelState\">\r\n      <div class=\"cc-import-panel__chart\">\r\n        <apx-chart\r\n          [series]=\"chartOptions.series\"\r\n          [chart]=\"chartOptions.chart\"\r\n          [labels]=\"chartOptions.labels\"\r\n          [colors]=\"chartOptions.colors\"\r\n          [legend]=\"chartOptions.legend\"\r\n          [plotOptions]=\"chartOptions.plotOptions\"\r\n          [dataLabels]=\"chartOptions.dataLabels\"\r\n          [tooltip]=\"chartOptions.tooltip\"\r\n          [states]=\"chartOptions.states\"\r\n        ></apx-chart>\r\n        <div class=\"cc-import-panel__chart-center\">\r\n          <span class=\"cc-import-panel__chart-total\">{{ total | number }}</span>\r\n          <span class=\"cc-import-panel__chart-caption\">Contact Center</span>\r\n        </div>\r\n      </div>\r\n\r\n      <ul class=\"cc-import-panel__legend\">\r\n        <li class=\"cc-import-panel__legend-item\" *ngFor=\"let segment of segments\">\r\n          <span class=\"cc-import-panel__legend-marker\" [style.backgroundColor]=\"segment.color\"></span>\r\n          <span class=\"cc-import-panel__legend-label\">{{ segment.label }}</span>\r\n          <span class=\"cc-import-panel__info\" [matTooltip]=\"segment.tooltip\">\r\n            <ng-container *ngTemplateOutlet=\"infoIcon\"></ng-container>\r\n          </span>\r\n          <span class=\"cc-import-panel__legend-value\">{{ segment.count | number }} ({{ segment.percentage }}%)</span>\r\n        </li>\r\n      </ul>\r\n    </div>\r\n\r\n    <ng-template #panelState>\r\n      <div class=\"cc-import-panel__state\" *ngIf=\"loading\">Loading contact centers…</div>\r\n      <div class=\"cc-import-panel__state cc-import-panel__state--error\" *ngIf=\"!loading && error\">\r\n        Unable to load contact centers.\r\n      </div>\r\n    </ng-template>\r\n\r\n    <div class=\"cc-import-panel__actions\">\r\n      <button\r\n        type=\"button\"\r\n        class=\"cc-import-panel__button\"\r\n        [disabled]=\"loading || error\"\r\n        (click)=\"onImport()\"\r\n      >\r\n        Import\r\n      </button>\r\n    </div>\r\n  </ng-container>\r\n</tk-card>\r\n\r\n<ng-template #infoIcon>\r\n  <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\r\n    <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.2\" />\r\n    <path d=\"M8 7.2v4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\r\n    <circle cx=\"8\" cy=\"5\" r=\"0.85\" fill=\"currentColor\" />\r\n  </svg>\r\n</ng-template>\r\n","/** The wizard's steps, in order. Index-aligned with the `mat-stepper` steps. */\r\nexport const IMPORT_WIZARD_STEPS = ['select', 'overview'] as const;\r\n\r\nexport type ImportWizardStepId = typeof IMPORT_WIZARD_STEPS[number];\r\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewEncapsulation, inject } from '@angular/core';\r\nimport { StepperSelectionEvent } from '@angular/cdk/stepper';\r\nimport { MatStepper } from '@angular/material/stepper';\r\nimport { Subscription, catchError, finalize, of } from 'rxjs';\r\nimport { CcImportService } from '../../cc-import.service';\r\nimport { CUSTOMER_ASSIST_MARKER_TOOLTIP, CUSTOMER_ASSIST_NOTICE, IMPORT_WIZARD_TITLE } from '../../constants/cc-import.constants';\r\nimport { ContactCenter, ContactCenterEntityGroup, ImportResult } from '../../types/cc-import';\r\nimport { IMPORT_WIZARD_STEPS, ImportWizardStepId } from './import-contact-center-wizard.types';\r\n\r\n/**\r\n * Full-page \"Import contact center\" wizard: pick a UCCX contact center, review the\r\n * entities Tuki will create for it, then start the import.\r\n *\r\n * Rendered as a page by the host app (like `tk-user-creation-wizard`), not as a dialog -\r\n * the host swaps it in when the panel's Import button is pressed and swaps it back out\r\n * on `cancel` / `imported`.\r\n */\r\n@Component({\r\n    selector: 'cc-import-contact-center-wizard',\r\n    templateUrl: './import-contact-center-wizard.component.html',\r\n    styleUrls: ['./import-contact-center-wizard.component.scss'],\r\n    encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ImportContactCenterWizardComponent implements OnInit, OnChanges, OnDestroy {\r\n    @Input() title = IMPORT_WIZARD_TITLE;\r\n    @Input() customerId!: number;\r\n    @Input() host!: string;\r\n    /** Base URL of the dcp host, which serves the UCCX application list. */\r\n    @Input() dcpHost!: string;\r\n    @Input() token!: string;\r\n    /** Serve mock data instead of calling the UCCX migration API. */\r\n    @Input() useMockData = true;\r\n    /**\r\n     * Contact centers the caller has already loaded (the panel has them), so the wizard\r\n     * opens without a second round trip. Left unset, the wizard fetches them itself.\r\n     */\r\n    @Input() contactCenters: ContactCenter[] | null = null;\r\n\r\n    @Output() cancel = new EventEmitter<void>();\r\n    @Output() imported = new EventEmitter<ImportResult>();\r\n\r\n    private readonly ccImportService = inject(CcImportService);\r\n    private subscriptions = new Subscription();\r\n\r\n    readonly customerAssistNotice = CUSTOMER_ASSIST_NOTICE;\r\n    readonly customerAssistMarkerTooltip = CUSTOMER_ASSIST_MARKER_TOOLTIP;\r\n\r\n    selectedIndex = 0;\r\n\r\n    /** Contact centers awaiting review - the ones there is something to import. */\r\n    options: ContactCenter[] = [];\r\n    /** `options` narrowed by the picker's search box. */\r\n    filteredOptions: ContactCenter[] = [];\r\n    searchTerm = '';\r\n    selected: ContactCenter | null = null;\r\n    noticeDismissed = false;\r\n    loading = false;\r\n    error = false;\r\n\r\n    entityGroups: ContactCenterEntityGroup[] = [];\r\n    /** Which entity group the Overview step's tab bar is showing. */\r\n    activeGroupIndex = 0;\r\n    entitiesLoading = false;\r\n    entitiesError = false;\r\n\r\n    importing = false;\r\n    importError = false;\r\n\r\n    ngOnInit(): void {\r\n        this.load();\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        const reloadTriggers = ['customerId', 'host', 'dcpHost', 'token', 'useMockData', 'contactCenters'];\r\n        if (reloadTriggers.some(input => changes[input] && !changes[input].firstChange)) {\r\n            this.load();\r\n        }\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.subscriptions.unsubscribe();\r\n    }\r\n\r\n    get canGoNext(): boolean {\r\n        return !!this.selected;\r\n    }\r\n\r\n    /** The Customer Assist advisory, until the user dismisses it or picks something else. */\r\n    get showCustomerAssistNotice(): boolean {\r\n        return !!this.selected?.customerAssistCapable && !this.noticeDismissed;\r\n    }\r\n\r\n    get canImport(): boolean {\r\n        return !!this.selected && !this.importing && !this.entitiesLoading && !this.entitiesError;\r\n    }\r\n\r\n    onCancel(): void {\r\n        this.cancel.emit();\r\n    }\r\n\r\n    onSelect(applicationId: string): void {\r\n        const selected = this.options.find(option => option.applicationId === applicationId) ?? null;\r\n        if (selected === this.selected) {\r\n            return;\r\n        }\r\n\r\n        this.selected = selected;\r\n        this.noticeDismissed = false;\r\n        // Entities belong to the previously selected contact center - drop them so the\r\n        // overview step refetches for the new one.\r\n        this.entityGroups = [];\r\n        this.activeGroupIndex = 0;\r\n        this.entitiesError = false;\r\n    }\r\n\r\n    get activeGroup(): ContactCenterEntityGroup | undefined {\r\n        return this.entityGroups[this.activeGroupIndex];\r\n    }\r\n\r\n    selectGroup(index: number): void {\r\n        this.activeGroupIndex = index;\r\n    }\r\n\r\n    dismissNotice(): void {\r\n        this.noticeDismissed = true;\r\n    }\r\n\r\n    onSearch(event: Event): void {\r\n        this.searchTerm = (event.target as HTMLInputElement).value;\r\n        this.filter();\r\n    }\r\n\r\n    /** Resets the search box each time the picker's panel is closed. */\r\n    onPanelToggle(opened: boolean): void {\r\n        if (!opened && this.searchTerm) {\r\n            this.searchTerm = '';\r\n            this.filter();\r\n        }\r\n    }\r\n\r\n    onStepSelectionChange(event: StepperSelectionEvent): void {\r\n        this.selectedIndex = event.selectedIndex;\r\n\r\n        if (this.stepIdAt(event.selectedIndex) === 'overview') {\r\n            this.loadEntities();\r\n        }\r\n    }\r\n\r\n    onNext(stepper: MatStepper): void {\r\n        if (this.canGoNext) {\r\n            stepper.next();\r\n        }\r\n    }\r\n\r\n    onPrevious(stepper: MatStepper): void {\r\n        stepper.previous();\r\n    }\r\n\r\n    runImport(): void {\r\n        if (!this.selected || this.importing) {\r\n            return;\r\n        }\r\n\r\n        this.importing = true;\r\n        this.importError = false;\r\n\r\n        this.subscriptions.add(\r\n            this.ccImportService.importContactCenter(Number(this.customerId), this.selected.applicationId)\r\n                .pipe(\r\n                    catchError(error => {\r\n                        console.error('Unable to start the contact-center import', error);\r\n                        this.importError = true;\r\n                        return of<ImportResult | null>(null);\r\n                    }),\r\n                    finalize(() => this.importing = false)\r\n                )\r\n                .subscribe(result => {\r\n                    if (result) {\r\n                        this.imported.emit(result);\r\n                    }\r\n                })\r\n        );\r\n    }\r\n\r\n    private stepIdAt(index: number): ImportWizardStepId | undefined {\r\n        return IMPORT_WIZARD_STEPS[index];\r\n    }\r\n\r\n    private load(): void {\r\n        this.ccImportService.useMockData = this.useMockData;\r\n\r\n        if (this.host) {\r\n            this.ccImportService.setHost(this.host);\r\n        }\r\n        if (this.dcpHost) {\r\n            this.ccImportService.setDcpHost(this.dcpHost);\r\n        }\r\n        if (this.token) {\r\n            this.ccImportService.setToken(this.token);\r\n        }\r\n\r\n        if (this.contactCenters) {\r\n            this.setOptions(this.contactCenters);\r\n            return;\r\n        }\r\n\r\n        const customerId = Number(this.customerId);\r\n        if (!this.useMockData && (!customerId || !this.token)) {\r\n            return;\r\n        }\r\n\r\n        this.loading = true;\r\n        this.error = false;\r\n\r\n        this.subscriptions.add(\r\n            this.ccImportService.fetchContactCenters(customerId)\r\n                .pipe(\r\n                    catchError(error => {\r\n                        console.error('Unable to load the contact centers', error);\r\n                        this.error = true;\r\n                        return of<ContactCenter[]>([]);\r\n                    }),\r\n                    finalize(() => this.loading = false)\r\n                )\r\n                .subscribe(contactCenters => this.setOptions(contactCenters))\r\n        );\r\n    }\r\n\r\n    private setOptions(contactCenters: ContactCenter[]): void {\r\n        // Left in source order on purpose - the picker shows them the way the backend\r\n        // (and the mock) hands them over, not alphabetically.\r\n        //\r\n        // Eligible for a Webex Contact Center import: not imported yet, and either\r\n        // unsupported on Customer Assist or reviewable for full feature coverage.\r\n        this.options = contactCenters.filter(contactCenter =>\r\n            contactCenter.migrationState !== 'migrated'\r\n            && (contactCenter.compatibilityStatus === 'unsupported'\r\n                || contactCenter.compatibilityStatus === 'requires-review'));\r\n\r\n        // A contact center selected before a reload may no longer be importable.\r\n        if (this.selected && !this.options.some(option => option.applicationId === this.selected?.applicationId)) {\r\n            this.selected = null;\r\n            this.entityGroups = [];\r\n            this.activeGroupIndex = 0;\r\n        }\r\n\r\n        this.filter();\r\n    }\r\n\r\n    private filter(): void {\r\n        const needle = this.searchTerm.trim().toLowerCase();\r\n        this.filteredOptions = needle\r\n            ? this.options.filter(option => option.applicationName.toLowerCase().includes(needle))\r\n            : this.options;\r\n    }\r\n\r\n    private loadEntities(): void {\r\n        if (!this.selected || this.entityGroups.length || this.entitiesLoading) {\r\n            return;\r\n        }\r\n\r\n        this.entitiesLoading = true;\r\n        this.entitiesError = false;\r\n\r\n        this.subscriptions.add(\r\n            this.ccImportService.fetchContactCenterEntities(Number(this.customerId), this.selected)\r\n                .pipe(\r\n                    catchError(error => {\r\n                        console.error('Unable to load the contact-center entities', error);\r\n                        this.entitiesError = true;\r\n                        return of(null);\r\n                    }),\r\n                    finalize(() => this.entitiesLoading = false)\r\n                )\r\n                .subscribe(entities => {\r\n                    this.entityGroups = entities ? entities.groups : [];\r\n                    this.activeGroupIndex = 0;\r\n                })\r\n        );\r\n    }\r\n}\r\n","<div class=\"move-user-stepper-container\" [attr.aria-busy]=\"importing\">\r\n  <header class=\"move-user-header\">\r\n    <div class=\"move-user-header__title\">{{ title }}</div>\r\n    <div class=\"move-user-header__close\">\r\n      <span class=\"app-icon cc-import-close-icon\" (click)=\"onCancel()\" role=\"button\" aria-label=\"Close\">\r\n        <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n          <path d=\"M5 5L19 19M19 5L5 19\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" />\r\n        </svg>\r\n      </span>\r\n    </div>\r\n  </header>\r\n\r\n  <div id=\"cc-import-stepper\">\r\n    <mat-stepper\r\n      #stepper\r\n      [linear]=\"true\"\r\n      labelPosition=\"bottom\"\r\n      [selectedIndex]=\"selectedIndex\"\r\n      (selectionChange)=\"onStepSelectionChange($event)\"\r\n    >\r\n\r\n      <!-- Step 1: pick the UCCX contact center -->\r\n      <mat-step [completed]=\"canGoNext\">\r\n        <ng-template matStepLabel>Select</ng-template>\r\n\r\n        <div class=\"cc-import-notice\" *ngIf=\"showCustomerAssistNotice\" role=\"status\">\r\n          <span class=\"cc-import-notice__icon\" aria-hidden=\"true\">\r\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n              <circle cx=\"8\" cy=\"8\" r=\"7\" fill=\"currentColor\" />\r\n              <path d=\"M8 7.1v4.2\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\r\n              <circle cx=\"8\" cy=\"4.8\" r=\"0.9\" fill=\"#fff\" />\r\n            </svg>\r\n          </span>\r\n          <span class=\"cc-import-notice__text\">{{ customerAssistNotice }}</span>\r\n          <button type=\"button\" class=\"cc-import-notice__close\" aria-label=\"Dismiss\" (click)=\"dismissNotice()\">\r\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n              <path d=\"M5 5L19 19M19 5L5 19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n            </svg>\r\n          </button>\r\n        </div>\r\n\r\n        <div class=\"step-title\">Step 1: Select contact center</div>\r\n\r\n        <div class=\"move-user-tab-content-box\">\r\n          <div class=\"cc-import-state\" *ngIf=\"loading\">Loading contact centers&hellip;</div>\r\n          <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"!loading && error\">\r\n            Unable to load contact centers.\r\n          </div>\r\n\r\n          <section class=\"cc-import-step-content\" *ngIf=\"!loading && !error\">\r\n            <div class=\"cc-import-field\">\r\n              <label class=\"cc-import-label\" for=\"cc-import-contact-center\">Contact center</label>\r\n\r\n              <mat-form-field class=\"cc-import-select\" appearance=\"outline\">\r\n                <mat-select\r\n                  id=\"cc-import-contact-center\"\r\n                  panelClass=\"cc-import-select-panel\"\r\n                  placeholder=\"Select contact center\"\r\n                  [disableOptionCentering]=\"true\"\r\n                  [value]=\"selected?.applicationId ?? null\"\r\n                  (selectionChange)=\"onSelect($event.value)\"\r\n                  (openedChange)=\"onPanelToggle($event)\"\r\n                >\r\n                  <mat-select-trigger>{{ selected?.applicationName }}</mat-select-trigger>\r\n\r\n                  <!-- Search box pinned above the options. Keystrokes are stopped here so\r\n                       mat-select's own typeahead does not steal them. -->\r\n                  <div class=\"cc-import-select-search\" (click)=\"$event.stopPropagation()\">\r\n                    <span class=\"cc-import-select-search__icon\" aria-hidden=\"true\">\r\n                      <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n                        <circle cx=\"7\" cy=\"7\" r=\"4.6\" stroke=\"currentColor\" stroke-width=\"1.4\" />\r\n                        <path d=\"M10.6 10.6L14 14\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\r\n                      </svg>\r\n                    </span>\r\n                    <input\r\n                      class=\"cc-import-select-search__input\"\r\n                      type=\"text\"\r\n                      autocomplete=\"off\"\r\n                      placeholder=\"Search\"\r\n                      aria-label=\"Search contact centers\"\r\n                      [value]=\"searchTerm\"\r\n                      (input)=\"onSearch($event)\"\r\n                      (keydown)=\"$event.stopPropagation()\"\r\n                    />\r\n                  </div>\r\n\r\n                  <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option.applicationId\">\r\n                    <div class=\"option-row\">\r\n                      <span class=\"name\">{{ option.applicationName }}</span>\r\n                      <span\r\n                        class=\"cc-import-option-marker\"\r\n                        *ngIf=\"option.customerAssistCapable\"\r\n                        [matTooltip]=\"customerAssistMarkerTooltip\"\r\n                        aria-hidden=\"true\"\r\n                      >\r\n                        <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n                          <path d=\"M8 2.2 14.6 13.4H1.4L8 2.2Z\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linejoin=\"round\" />\r\n                          <path d=\"M8 6.5v3\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\r\n                          <circle cx=\"8\" cy=\"11.3\" r=\"0.7\" fill=\"currentColor\" />\r\n                        </svg>\r\n                      </span>\r\n                    </div>\r\n                  </mat-option>\r\n                </mat-select>\r\n              </mat-form-field>\r\n\r\n              <p class=\"cc-import-empty\" *ngIf=\"!options.length\">\r\n                Every detected contact center has already been imported.\r\n              </p>\r\n            </div>\r\n          </section>\r\n        </div>\r\n      </mat-step>\r\n\r\n      <!-- Step 2: the entities Tuki will create for it -->\r\n      <mat-step>\r\n        <ng-template matStepLabel>Overview</ng-template>\r\n\r\n        <div class=\"step-title\">Overview</div>\r\n\r\n        <div class=\"move-user-tab-content-box\">\r\n          <h3 class=\"cc-import-card-title\">Review Contact Center Settings</h3>\r\n          <p class=\"cc-import-card-text\">\r\n            Review the settings for your new Contact center to make sure everything is correct.<br />\r\n            You can make changes at any time by clicking on the name of the contact center on the dedicated page.\r\n          </p>\r\n\r\n          <div class=\"cc-import-state\" *ngIf=\"entitiesLoading\">Loading entities&hellip;</div>\r\n          <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"entitiesError\">\r\n            Unable to load the related entities.\r\n          </div>\r\n\r\n          <ng-container *ngIf=\"!entitiesLoading && !entitiesError && entityGroups.length\">\r\n            <div class=\"cc-import-tabs\" role=\"tablist\">\r\n              <button\r\n                type=\"button\"\r\n                class=\"cc-import-tab\"\r\n                *ngFor=\"let group of entityGroups; index as i\"\r\n                role=\"tab\"\r\n                [attr.aria-selected]=\"i === activeGroupIndex\"\r\n                [class.cc-import-tab--active]=\"i === activeGroupIndex\"\r\n                (click)=\"selectGroup(i)\"\r\n              >\r\n                {{ group.label }}\r\n              </button>\r\n            </div>\r\n\r\n            <ul class=\"cc-import-items\" role=\"tabpanel\">\r\n              <li class=\"cc-import-item\" *ngFor=\"let item of activeGroup?.items\">{{ item }}</li>\r\n              <li class=\"cc-import-item cc-import-item--empty\" *ngIf=\"!activeGroup?.items?.length\">\r\n                Nothing to create for {{ activeGroup?.label }}.\r\n              </li>\r\n            </ul>\r\n          </ng-container>\r\n\r\n          <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"importError\">\r\n            Unable to start the import. Please try again.\r\n          </div>\r\n        </div>\r\n      </mat-step>\r\n    </mat-stepper>\r\n\r\n    <div class=\"wizard-actions\">\r\n      <ng-container [ngSwitch]=\"stepper.selectedIndex\">\r\n        <ng-container *ngSwitchCase=\"0\">\r\n          <button\r\n            mat-button\r\n            class=\"uc-btn uc-btn-primary\"\r\n            type=\"button\"\r\n            [disabled]=\"!canGoNext\"\r\n            (click)=\"onNext(stepper)\"\r\n          >\r\n            Next\r\n          </button>\r\n          <button mat-button class=\"uc-btn uc-btn-secondary\" type=\"button\" (click)=\"onCancel()\">\r\n            Cancel\r\n          </button>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"1\">\r\n          <button\r\n            mat-button\r\n            class=\"uc-btn uc-btn-primary\"\r\n            type=\"button\"\r\n            [disabled]=\"!canImport\"\r\n            (click)=\"runImport()\"\r\n          >\r\n            <span class=\"uc-btn__inline-content\">\r\n              <span class=\"uc-btn__spinner\" *ngIf=\"importing\" aria-hidden=\"true\"></span>\r\n              <span>{{ importing ? 'Importing...' : 'Import' }}</span>\r\n            </span>\r\n          </button>\r\n          <button\r\n            mat-button\r\n            class=\"uc-btn uc-btn-secondary\"\r\n            type=\"button\"\r\n            [disabled]=\"importing\"\r\n            (click)=\"onPrevious(stepper)\"\r\n          >\r\n            Previous\r\n          </button>\r\n        </ng-container>\r\n      </ng-container>\r\n    </div>\r\n  </div>\r\n\r\n  <div class=\"wizard-loading-overlay\" [class.wizard-loading-overlay--visible]=\"importing\" aria-hidden=\"true\"></div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { ImportContactCenterPanelComponent } from './components/import-contact-center-panel/import-contact-center-panel.component';\r\nimport { ImportContactCenterWizardComponent } from './components/import-contact-center-wizard/import-contact-center-wizard.component';\r\n\r\n@NgModule({\r\n    declarations: [\r\n        ImportContactCenterPanelComponent,\r\n        ImportContactCenterWizardComponent\r\n    ],\r\n    imports: [\r\n        CommonModule,\r\n        HttpClientModule,\r\n        NgApexchartsModule,\r\n        MatStepperModule,\r\n        SharedModule\r\n    ],\r\n    exports: [\r\n        ImportContactCenterPanelComponent,\r\n        ImportContactCenterWizardComponent\r\n    ]\r\n})\r\nexport class CcImportModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4.CardComponent","i2.CardComponent","i1.WxCC2GraphService","i2.WxCCActivityManageService","i3","i2.CytoscapeViewportService","i4.WxCCActivityCreationService","i5","i6","i7.FloatingToolBarComponent","i8.NodeDetailsSidebarComponent","i9.NodeActionToolbarComponent","i10.NodeSearchPanelComponent","i1.APIService","i4","finalize","i1.WxCCAPIService","i2.WxCC2GraphService","i5.WxCCFlowchartComponent","i6.WxCCFileSelectionBarComponent","i7.WxCCActionsBarComponent","i7"],"mappings":"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"}