@fuentis/phoenix-ui 0.0.9-alpha.607 → 0.0.9-alpha.608

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"fuentis-phoenix-ui.mjs","sources":["../../../projects/phoenix-ui/src/lib/components/inner-header/inner-header.component.ts","../../../projects/phoenix-ui/src/lib/components/inner-header/inner-header.component.html","../../../projects/phoenix-ui/src/lib/components/sidebar-item/sidebar-item.component.ts","../../../projects/phoenix-ui/src/lib/components/sidebar/sidebar.component.ts","../../../projects/phoenix-ui/src/lib/components/sidebar/sidebar.component.html","../../../projects/phoenix-ui/src/lib/components/actions/action-state.service.ts","../../../projects/phoenix-ui/src/lib/components/actions/actions.component.ts","../../../projects/phoenix-ui/src/lib/components/actions/actions.component.html","../../../projects/phoenix-ui/src/lib/utils/actions.utils.ts","../../../projects/phoenix-ui/src/lib/components/card/card.component.ts","../../../projects/phoenix-ui/src/lib/components/card/card.component.html","../../../projects/phoenix-ui/src/lib/services/crud.service.ts","../../../projects/phoenix-ui/src/lib/components/search-card/search-card.component.ts","../../../projects/phoenix-ui/src/lib/components/search-card/search-card.component.html","../../../projects/phoenix-ui/src/lib/utils/compl-types.utils.ts","../../../projects/phoenix-ui/src/lib/utils/assm-url-resolver.utils.ts","../../../projects/phoenix-ui/src/lib/components/search-bar/search-bar.component.ts","../../../projects/phoenix-ui/src/lib/components/search-bar/search-bar.component.html","../../../projects/phoenix-ui/src/lib/components/user/user.component.ts","../../../projects/phoenix-ui/src/lib/components/topbar/topbar.component.ts","../../../projects/phoenix-ui/src/lib/components/topbar/topbar.component.html","../../../projects/phoenix-ui/src/lib/components/quick-pick/quick-pick/quick-pick.component.ts","../../../projects/phoenix-ui/src/lib/components/quick-pick/quick-pick/quick-pick.component.html","../../../projects/phoenix-ui/src/lib/components/status-header/status-header.component.ts","../../../projects/phoenix-ui/src/lib/components/status-header/status-header.component.html","../../../projects/phoenix-ui/src/lib/components/status-bar/models/status-attribute.model.ts","../../../projects/phoenix-ui/src/lib/components/tag/tag.component.ts","../../../projects/phoenix-ui/src/lib/components/tag/tag.component.html","../../../projects/phoenix-ui/src/lib/components/context-object/contex-object.component.ts","../../../projects/phoenix-ui/src/lib/components/context-object/contex-object.component.html","../../../projects/phoenix-ui/src/lib/components/shell/shell.component.ts","../../../projects/phoenix-ui/src/lib/components/shell/shell.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/form-fields.utils.ts","../../../projects/phoenix-ui/src/lib/pipes/time-period.pipe.ts","../../../projects/phoenix-ui/src/lib/utils/initials.pipe.ts","../../../projects/phoenix-ui/src/lib/components/data-table/utils/dataTable.enum.ts","../../../projects/phoenix-ui/src/lib/components/data-table/phoenix-data-table-action/phoenix-data-table-action.component.ts","../../../projects/phoenix-ui/src/lib/components/data-table/phoenix-data-table-action/phoenix-data-table-action.component.html","../../../projects/phoenix-ui/src/lib/components/data-table/phoenix-data-table-tabs/phoenix-data-table-tabs.component.ts","../../../projects/phoenix-ui/src/lib/components/data-table/phoenix-data-table-tabs/phoenix-data-table-tabs.component.html","../../../projects/phoenix-ui/src/lib/components/data-table/table/isSelected.pipe.ts","../../../projects/phoenix-ui/src/lib/components/data-table/table-caption/table-caption.component.ts","../../../projects/phoenix-ui/src/lib/components/data-table/table-caption/table-caption.component.html","../../../projects/phoenix-ui/src/lib/components/data-table/utils/is-boolean.pipe.ts","../../../projects/phoenix-ui/src/lib/components/data-table/utils/table-cell.pipe.ts","../../../projects/phoenix-ui/src/lib/components/data-table/utils/table.utils.ts","../../../projects/phoenix-ui/src/lib/components/data-table/table/table.component.ts","../../../projects/phoenix-ui/src/lib/components/data-table/table/table.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-validators/due-date/start-due-date.validator.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-validators/timeperiod/timeperiod.validator.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/control-type.enum.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/get-field-type.utils.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-validators/white-space-validator.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-validators/no-dangerous-chars/do-danerous-chars.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-validators/date-compare-validator.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/services/meta-form.service.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-abstract.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/lang.utils.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/field-label.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-field-label/meta-label.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/object-item-dialog/object-item-dialog.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/object-item-dialog/object-item-dialog.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-assign-responsible/meta-assign-responsible.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/error-type.util.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-field-error/inline-field-error.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/base-meta-field.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-calendar/meta-calendar.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-checkbox-color-picker/meta-checkbox-color-picker.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-checkbox/meta-checkbox.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-color-picker/meta-color-picker.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-currency/meta-currency.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-multiple-select/meta-multiple-select.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-number-input/meta-number-input.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-password-feild/meta-password-feild.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-select-button/meta-select-button.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/translate-dropdown-data.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-single-select-object-based/meta-single-select-object_based.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-single-select/meta-single-select.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-start-due-date/meta-start-due-date.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-switch/meta-switch.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-text-area/meta-text-area.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-text-editor/meta-text-editor.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-text-input/meta-text-input.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-timeperiod/meta-timeperiod.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-upload/meta-upload.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/field-col.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/global-phase.utils.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/so-types.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/strip-html.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-templates/read-only-input/read-only-input.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-templates/read-only-input/read-only-input.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-assign-asset/meta-assign-asset.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-upload-dragdrop/meta-upload-dragdrop.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-buttons/meta-form-buttons.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-buttons/meta-form-buttons.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-templates/groups-form/groups-form.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-templates/groups-form/groups-form.component.html","../../../projects/phoenix-ui/src/lib/components/status-bar/pipes/text-length.pipe.ts","../../../projects/phoenix-ui/src/lib/components/status-bar/enums/status-col-type.enum.ts","../../../projects/phoenix-ui/src/lib/components/status-bar/status-attribute-display.component.ts","../../../projects/phoenix-ui/src/lib/components/status-bar/status-attribute-display.component.html","../../../projects/phoenix-ui/src/lib/components/status-bar/status-bar.component.ts","../../../projects/phoenix-ui/src/lib/components/status-bar/status-bar.component.html","../../../projects/phoenix-ui/src/lib/components/quick-pick/quick-pick-sidepanel/quick-pick-sidepanel.component.ts","../../../projects/phoenix-ui/src/lib/components/quick-pick/quick-pick-sidepanel/quick-pick-sidepanel.component.html","../../../projects/phoenix-ui/src/lib/models/status.model.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/pipes/strip-html-safe.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/pipes/file-size.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/read-only-input-v2/read-only-input-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/read-only-input-v2/read-only-input-v2.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-assign-responsible-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-color-picker-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-checkbox-color-picker-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-start-due-date-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-switch-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-password-field-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-field-v2/meta-form-field-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-field-v2/meta-form-field-v2.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-group-v2/meta-form-group-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-group-v2/meta-form-group-v2.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/tokens/meta-form.tokens.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/services/meta-submit-validator.service.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/utils/start-due-date-v2.validator.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/utils/meta-form-validators.util.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/utils/meta-form-builder.util.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/utils/meta-form-flatten.util.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-v2/meta-form-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-v2/meta-form-v2.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-buttons-v2/meta-form-buttons-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-buttons-v2/meta-form-buttons-v2.component.html","../../../projects/phoenix-ui/src/public-api.ts","../../../projects/phoenix-ui/src/fuentis-phoenix-ui.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { Input } from '@angular/core';\n\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n selector: 'pho-inner-header',\n standalone: true,\n imports: [CommonModule, TooltipModule],\n templateUrl: './inner-header.component.html',\n})\nexport class InnerHeaderComponent {\n @Input() title: string = '';\n @Input() tooltipContent: string = '';\n}\n","<div\n class=\"flex align-items-center justify-content-between border-bottom-1 border-300 pt-2 pb-2\"\n>\n <div class=\"flex align-items-center gap-2\">\n <span class=\"font-medium text-lg\">\n {{ title }}\n </span>\n <i [pTooltip]=\"tooltipContent\" class=\"pi pi-info-circle text-blue-500\"></i>\n </div>\n\n <div class=\"flex align-items-center gap-2\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Router, RouterLink, RouterLinkActive } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TagModule } from 'primeng/tag';\nimport { MenuModule } from 'primeng/menu';\nimport { DividerModule } from 'primeng/divider';\n\n@Component({\n selector: 'pho-sidebar-item',\n standalone: true,\n styleUrl: '../../styles/global.css',\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n ButtonModule,\n RouterLink,\n RouterLinkActive,\n TooltipModule,\n TranslateModule,\n MenuModule,\n TagModule,\n DividerModule,\n ],\n template: `\n @if(item.path === '/dashboard'){\n <li\n class=\"list-none flex align-items-center border-bottom-1 border-200\"\n routerLinkActive=\"active-link\"\n [routerLinkActiveOptions]=\"{ exact: false }\"\n >\n <!-- Visible link: user navigation goes to item.path -->\n <a\n class=\"p-button no-underline w-full justify-content-between surface-0 hover:surface-100 border-none overflow-hidden bg-transparent sidebaritem\"\n [attr.data-cy]=\"'navigation-side-navigation-item-' + item.label\"\n [routerLink]=\"item?.disabled ? null : item.path\"\n [ngClass]=\"[\n classname,\n item?.disabled ? 'opacity-50 cursor-not-allowed' : ''\n ]\"\n [style.pointer-events]=\"item?.disabled ? 'none' : 'auto'\"\n >\n <div class=\"flex align-items-center \">\n <img class=\"mr-2\" width=\"28\" [src]=\"item.icon\" alt=\"\" />\n <span class=\"text-primary font-bold pr-3 \">{{\n item.label | translate\n }}</span>\n </div>\n\n <p-button\n icon=\"pi pi-sliders-v\"\n size=\"small\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"onSliderClick($event, menu)\"\n [disabled]=\"item.disabledConfig\"\n />\n </a>\n\n <!-- Hidden link: used ONLY to activate based on basePath -->\n <a\n [routerLink]=\"item.basePath || item.path\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n style=\"display:none\"\n ></a>\n\n <p-menu\n styleClass=\"w-20rem\"\n appendTo=\"body\"\n #menu\n [model]=\"item.subitems\"\n [popup]=\"true\"\n >\n <ng-template #submenuheader let-item>\n <span class=\"text-400 text-sm font-semibold\">{{\n item.label | translate\n }}</span>\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n <a\n (click)=\"onSliderItemsClick(item)\"\n [ngClass]=\"{ 'pointer-events-none': item.activated }\"\n pRipple\n class=\"flex align-items-center p-menuitem-link p-2 cursor-pointer w-full\"\n >\n <div class=\"flex justify-content-between w-full\">\n <div>\n @if(item.icon){ <i [class]=\"item.icon\"></i> }\n <span class=\"ml-2\">{{ item.title | translate }}</span>\n </div>\n @if(item.activated){ <i class=\"pi pi-check\"></i> }\n </div>\n </a>\n </ng-template>\n <ng-template #end>\n <p-divider styleClass=\"m-0\" type=\"solid\" />\n <p-button\n [label]=\"'ACTION.CREATE' | translate\"\n icon=\"pi pi-plus\"\n [text]=\"true\"\n severity=\"secondary\"\n styleClass=\"w-full p-2\"\n (click)=\"onSliderItemsClick({ type: 'CREATE' })\"\n />\n </ng-template>\n </p-menu>\n </li>\n\n } @else {\n <li\n class=\"list-none flex align-items-center\"\n [pTooltip]=\"item?.tooltip | translate\"\n routerLinkActive=\"active-link\"\n [routerLinkActiveOptions]=\"{ exact: false }\"\n >\n <!-- Visible link: user navigation goes to item.path -->\n <a\n [attr.data-cy]=\"'navigation-side-navigation-item-' + item.label\"\n [routerLink]=\"item?.disabled ? null : item.path\"\n class=\"p-button no-underline w-full justify-content-start surface-0 hover:surface-100 border-none overflow-hidden bg-transparent sidebaritem\"\n [ngClass]=\"[\n classname,\n item?.disabled ? 'opacity-50 cursor-not-allowed' : ''\n ]\"\n [style.pointer-events]=\"item?.disabled ? 'none' : 'auto'\"\n >\n <div\n class=\"flex justify-content-between w-full\"\n style=\"margin-left: 24px;\"\n >\n <span style=\"font-size:13px\" class=\"text-primary white-space-nowrap\">\n {{ item.label | translate }}\n </span>\n </div>\n </a>\n @if(item.tag){\n <p-tag\n [style]=\"{\n fontSize: '9px',\n padding: '2px 6px',\n \n }\"\n severity=\"info\"\n [value]=\"item.tag | translate\"\n />\n } @if(item.lock){\n <p-tag\n [style]=\"{ fontSize: '9px', paddingRight: '3px' }\"\n severity=\"warn\"\n icon=\"pi pi-lock\"\n />\n }\n <!-- Hidden link: used ONLY to activate based on basePath -->\n <a\n [routerLink]=\"item.basePath || item.path\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n style=\"display:none\"\n ></a>\n </li>\n }\n `,\n})\nexport class SidebarItemComponent implements OnChanges {\n @Input() item!: any;\n @Input() classname: string = '';\n @Output() sliderClick = new EventEmitter<any>();\n\n constructor(private router: Router) {}\n\n onSliderClick($event: any, menu: any): void {\n $event.stopPropagation();\n $event.preventDefault();\n menu.toggle($event);\n }\n\n onSliderItemsClick(event: any) {\n this.sliderClick.emit(event);\n }\n\n ngOnChanges(_: SimpleChanges): void {}\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { SidebarItemComponent } from '../sidebar-item/sidebar-item.component';\nimport { CommonModule } from '@angular/common';\nimport { SidebarItem } from '../../models/shell-config.model';\nimport { AccordionModule } from 'primeng/accordion';\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n selector: 'pho-sidebar',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n SidebarItemComponent,\n RouterModule,\n AccordionModule,\n TranslateModule,\n TooltipModule,\n ],\n templateUrl: './sidebar.component.html',\n styleUrl: './sidebar.component.scss',\n animations: [\n trigger('hoverState', [\n state(\n 'default',\n style({\n width: '50px',\n })\n ),\n state(\n 'hovered',\n style({\n width: '190px',\n })\n ),\n transition('default <=> hovered', animate('200ms ease-in-out')),\n ]),\n ],\n})\nexport class SidebarComponent {\n @Output() toggleSidebar = new EventEmitter<boolean>();\n @Output() sliderClick = new EventEmitter<any>();\n @Input() classname: string = '';\n\n @Input() mainItems: any;\n @Input() footerItem: any;\n\n isHovered = false;\n isSlim = false;\n\n get hoverState() {\n return this.isHovered ? 'hovered' : 'default';\n }\n\n onMouseEnter() {\n this.isHovered = true;\n }\n\n onMouseLeave() {\n this.isHovered = false;\n }\n\n onToggleSidebar() {\n this.isSlim = !this.isSlim;\n this.toggleSidebar.emit(this.isSlim);\n }\n}\n","@if (isSlim) {\n <div\n [@hoverState]=\"hoverState\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n class=\"relative shadow-3 h-full sidebar overflow-hidden\"\n >\n <div class=\"flex flex-column h-full\" style=\"scroll-padding-bottom: 5rem\">\n <div class=\"ml-1 mr-1\">\n <pho-sidebar-item\n (sliderClick)=\"sliderClick.emit($event)\"\n [item]=\"mainItems[0].items[0]\"\n />\n </div>\n\n <p-accordion [value]=\"[0, 1, 2, 3]\" [multiple]=\"true\">\n @for (itemGroup of mainItems; track $index) {\n <p-accordion-panel [value]=\"$index\">\n <p-accordion-header>\n <div class=\"flex align-items-center\">\n <img class=\"mr-2\" width=\"28\" [src]=\"itemGroup.icon\" alt=\"\" />\n <span class=\"text-primary font-bold\">\n {{ itemGroup.module | translate }}\n </span>\n </div>\n\n <ng-template #toggleicon let-active=\"active\">\n @if (active) { } @else { }\n </ng-template>\n </p-accordion-header>\n\n <p-accordion-content>\n @if (isHovered) {\n @for (item of itemGroup.items.slice(1); track $index) {\n <pho-sidebar-item [item]=\"item\" class=\"group-item\" />\n }\n }\n </p-accordion-content>\n </p-accordion-panel>\n }\n </p-accordion>\n\n <!-- footer list (slim hover state) -->\n @if (footerItem) {\n <div class=\"absolute bottom-0 left-0 flex flex-column w-full\">\n\n <pho-sidebar-item [item]=\"footerItem\" class=\"group-item\" />\n <!-- <ul class=\"flex flex-column gap-3 mb-2 p-0 m-0\">\n @for (item of footerItem; track $index) {\n <pho-sidebar-item [item]=\"item\" class=\"group-item\" />\n }\n </ul> -->\n </div>\n }\n </div>\n\n <!-- bottom actions (ALWAYS stable layout) -->\n <div class=\"absolute bottom-0 left-0 flex justify-content-between align-items-center w-full p-1\">\n <!-- settings -->\n @if (footerItem) {\n <div\n class=\"flex align-items-center\"\n [pTooltip]=\"footerItem.tooltip | translate\"\n [tooltipPosition]=\"'top'\"\n >\n <a\n [routerLink]=\"footerItem?.path\"\n pButton\n icon=\"pi pi-cog\"\n [text]=\"true\"\n size=\"large\"\n class=\"m-1 no-underline\"\n style=\"min-width: fit-content\"\n [attr.data-cy]=\"'navigation-settings-button'\"\n ></a>\n </div>\n } @else {\n <div></div>\n }\n\n <!-- toggle -->\n <p-button\n (onClick)=\"onToggleSidebar()\"\n [text]=\"true\"\n class=\"m-1\"\n [style.transform]=\"isSlim ? 'rotate(180deg)' : ''\"\n [attr.data-cy]=\"'navigation-toggle-button'\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 17 15\"\n fill=\"none\"\n class=\"opacity-70\"\n [style.marginTop.px]=\"2\"\n [style.width.px]=\"14\"\n [style.height.px]=\"12\"\n >\n <path\n d=\"M7.071 0L8.485 1.414L3.828 6.071H13V8.071H3.828L8.485 12.728L7.071 14.142L0 7.071L7.071 0ZM15.001 14.071V0.0710001H17.001V14.071H15.001Z\"\n fill=\"black\"\n />\n </svg>\n </p-button>\n </div>\n </div>\n} @else {\n <div class=\"relative shadow-3 h-full sidebar overflow-hidden pr-1\">\n <div class=\"flex flex-column h-full\" style=\"scroll-padding-bottom: 5rem\">\n <div class=\"ml-1 mr-1\">\n <pho-sidebar-item\n [item]=\"mainItems[0].items[0]\"\n (sliderClick)=\"sliderClick.emit($event)\"\n />\n </div>\n\n <p-accordion [value]=\"[0, 1, 2, 3]\" [multiple]=\"true\">\n @for (itemGroup of mainItems; track $index) {\n <p-accordion-panel [value]=\"$index\">\n <p-accordion-header>\n <div class=\"flex align-items-center\">\n <img class=\"mr-2\" width=\"28\" [src]=\"itemGroup.icon\" alt=\"\" />\n <span class=\"text-primary font-bold\">\n {{ itemGroup.module | translate }}\n </span>\n </div>\n\n <ng-template #toggleicon let-active=\"active\">\n @if (active) {\n <i\n style=\"font-size: 0.7rem; padding-right: 12px\"\n class=\"pi pi-sort-up-fill opacity-70\"\n ></i>\n } @else {\n <i\n style=\"font-size: 0.7rem; padding-right: 12px\"\n class=\"pi pi-sort-down-fill opacity-70\"\n ></i>\n }\n </ng-template>\n </p-accordion-header>\n\n <p-accordion-content>\n @for (item of itemGroup.items.slice(1); track $index) {\n <pho-sidebar-item [item]=\"item\" class=\"group-item\" />\n }\n </p-accordion-content>\n </p-accordion-panel>\n }\n </p-accordion>\n </div>\n\n <!-- bottom actions (ALWAYS stable layout) -->\n <div class=\"absolute bottom-0 left-0 flex justify-content-between align-items-center w-full p-1\">\n <!-- settings -->\n @if (footerItem) {\n <div\n class=\"flex align-items-center\"\n [pTooltip]=\"footerItem?.tooltip | translate\"\n [tooltipPosition]=\"'top'\"\n >\n <a\n [routerLink]=\"footerItem?.path\"\n pButton\n icon=\"pi pi-cog\"\n [text]=\"true\"\n size=\"large\"\n class=\"m-1 no-underline\"\n style=\"min-width: fit-content\"\n [attr.data-cy]=\"'navigation-settings-button'\"\n ></a>\n </div>\n } @else {\n <div></div>\n }\n\n <!-- toggle -->\n <p-button\n (onClick)=\"onToggleSidebar()\"\n [text]=\"true\"\n class=\"m-1\"\n [attr.data-cy]=\"'navigation-toggle-button'\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 17 15\"\n fill=\"none\"\n class=\"arrow-icon\"\n [style.marginTop.px]=\"2\"\n [style.width.px]=\"14\"\n [style.height.px]=\"13\"\n >\n <path\n d=\"M7.071 0L8.485 1.414L3.828 6.071H13V8.071H3.828L8.485 12.728L7.071 14.142L0 7.071L7.071 0ZM15.001 14.071V0.0710001H17.001V14.071H15.001Z\"\n fill=\"black\"\n />\n </svg>\n </p-button>\n </div>\n </div>\n}","import { Injectable, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ActionStateService {\n private _disabledActions = signal<Set<string>>(new Set());\n\n get disabledActions() {\n return this._disabledActions.asReadonly();\n }\n\n disableAction(id: string) {\n const current = new Set(this._disabledActions());\n current.add(id);\n this._disabledActions.set(current);\n }\n\n enableAction(id: string) {\n const current = new Set(this._disabledActions());\n current.delete(id);\n this._disabledActions.set(current);\n }\n\n isDisabled(id: string): boolean {\n return this._disabledActions().has(id);\n }\n}","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule, ButtonProps } from 'primeng/button';\nimport { MenuModule } from 'primeng/menu';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ActionStateService } from './action-state.service';\nimport { Tooltip } from 'primeng/tooltip';\n\nexport enum ActionTypes {\n BASIC = 'BASIC',\n SELECT = 'SELECT',\n}\n\n// Interface for users to augment\nexport interface Actions {\n // Base actions are always available\n}\n\n// Helper type to get all registered action enums\nexport type RegisteredActionEnums = Actions[keyof Actions];\n\n// Helper type to get all possible action values\nexport type AllActionValues =\n RegisteredActionEnums[keyof RegisteredActionEnums];\n\nexport interface Action<T = AllActionValues> {\n id?: string;\n actionId: T;\n label: string;\n icon: string;\n severity: Exclude<ButtonProps['severity'], 'warning'> | 'warn';\n iconPos?: 'right' | 'left';\n type: keyof typeof ActionTypes;\n text?: boolean;\n tooltip?: string;\n key?: string;\n requiredPermission?: string;\n data?: any;\n disabled?: boolean;\n visible?: boolean;\n loading?: boolean;\n class?: string;\n\n items?: {\n key?: string;\n actionId?: T;\n label?: string;\n separator?: boolean;\n icon?: string;\n requiredPermission?: string;\n }[];\n}\n\n@Component({\n selector: 'pho-actions',\n imports: [\n CommonModule,\n ButtonModule,\n MenuModule,\n PopoverModule,\n TranslateModule,\n Tooltip,\n ],\n templateUrl: './actions.component.html',\n styleUrl: './actions.component.css',\n})\nexport class ActionsComponent {\n public actionStateService = inject(ActionStateService);\n\n @Input() actions!: Action[];\n @Output() actionClick = new EventEmitter<Action>();\n\n onActionClick($event: any, action: Action, menuRef?: Popover) {\n $event.stopPropagation();\n if (action.type === ActionTypes.SELECT && menuRef) {\n menuRef.toggle($event);\n } else {\n this.actionClick.emit(action);\n }\n }\n}\n","<div class=\"flex align-items-center gap-2\">\n @for (action of actions; track action.actionId) {\n @switch (action.type) {\n @case (\"BASIC\") {\n <p-button\n [attr.data-cy]=\"'action-button-basic'\"\n *ngIf=\"action.visible !== false\"\n [label]=\"action.label | translate\"\n [icon]=\"action.icon || ''\"\n [styleClass]=\"action.class || ''\"\n [severity]=\"action.severity ?? 'primary'\"\n [disabled]=\"\n action.disabled || actionStateService.isDisabled(action.actionId)\n \"\n [loading]=\"action.loading || false\"\n [pTooltip]=\"action.tooltip ?? '' | translate\"\n [id]=\"action.id\"\n (onClick)=\"onActionClick($event, action)\"\n size=\"small\"\n [iconPos]=\"action.iconPos ?? 'right'\"\n ></p-button>\n }\n @case (\"SELECT\") {\n <p-button\n [attr.data-cy]=\"'action-button-select'\"\n *ngIf=\"action.visible !== false\"\n [label]=\"action.label | translate\"\n [icon]=\"action.icon || ''\"\n [styleClass]=\"action.class || ''\"\n [severity]=\"action.severity ?? 'primary'\"\n [disabled]=\"\n action.disabled || actionStateService.isDisabled(action.actionId)\n \"\n [loading]=\"action.loading || false\"\n [id]=\"action.id\"\n (onClick)=\"onActionClick($event, action, menuRef)\"\n size=\"small\"\n [iconPos]=\"action.iconPos ?? 'right'\"\n ></p-button>\n\n <p-popover #menuRef [dismissable]=\"true\" class=\"actions-popover\">\n <p-menu styleClass=\"border-0\" [model]=\"action.items\">\n <ng-template pTemplate=\"item\" let-item>\n <div\n [attr.data-cy]=\"'action-button-popover-item-' + item?.actionId\"\n (click)=\"onActionClick($event, item)\"\n (keydown.enter)=\"onActionClick($event, item)\"\n (keydown.space)=\"onActionClick($event, item)\"\n pRipple\n tabindex=\"0\"\n role=\"button\"\n class=\"flex items-center p-menu-item-link cursor-pointer\"\n >\n <span [class]=\"item.icon\"></span>\n <span class=\"ml-2\">{{ item.label | translate }}</span>\n </div>\n </ng-template>\n </p-menu>\n </p-popover>\n }\n }\n }\n</div>\n","export enum ActionKinds {\n CREATE = 'CREATE',\n SUBMIT = 'SUBMIT',\n ASSIGN = 'ASSIGN',\n NEW = 'NEW',\n UPDATE = 'UPDATE',\n RELOAD = 'RELOAD',\n CLOSE = 'CLOSE',\n OPEN = 'OPEN',\n EDIT = 'EDIT',\n DELETE = 'DELETE',\n EDIT_TRANSITION = 'EDIT_TRANSITION',\n ADD_TRANSITION = 'ADD_TRANSITION',\n READ = 'READ',\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { DividerModule } from 'primeng/divider';\nimport { TagModule } from 'primeng/tag';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ActionKinds } from '../../utils/actions.utils';\nimport { ActionsComponent } from '../actions/actions.component';\nimport { AfterViewInit, ElementRef, ViewChild } from '@angular/core';\nexport interface cardConfig {\n name: string;\n subName: string;\n description: string;\n actions: any[];\n additional: any[];\n}\n@Component({\n selector: 'phoenix-card',\n imports: [\n CommonModule,\n TooltipModule,\n TranslateModule,\n ButtonModule,\n CardModule,\n ActionsComponent,\n TagModule,\n DividerModule,\n TooltipModule,\n ],\n templateUrl: './card.component.html',\n styleUrl: './card.component.scss',\n})\nexport class CardComponent<T extends Record<string, any>> {\n card = input.required<T>();\n cardEventEmmiter = output<{ data: T; action: string }>();\n actionEnum = ActionKinds;\n cardActions = input<any>();\n\n getObjectValueByKey(obj: any, key: string) {\n return obj[key];\n }\n\n @ViewChild('descEl') descEl!: ElementRef<HTMLElement>;\n showTooltip = false;\n\n ngAfterViewInit(): void {\n const el = this.descEl?.nativeElement;\n this.showTooltip = !!el && el.scrollHeight > el.clientHeight;\n }\n\n onCardClick(event: any, actionType?: string): void {\n const data = {\n id: this.card()['id'],\n };\n\n const finalEvent = {\n ...event,\n data,\n };\n\n if (actionType) {\n finalEvent.actionId = actionType;\n }\n\n this.cardEventEmmiter.emit(finalEvent);\n }\n\n shouldShowTitleTooltip(): boolean {\n const title = this.card()['title'];\n return title && title.length > 40;\n }\n}\n","<p-card\n styleClass=\"cursor-pointer pho-card hover:surface-100\"\n [style]=\"{ width: '25rem', overflow: 'hidden' }\"\n (click)=\"onCardClick(card(), 'NAVIGATE')\"\n [attr.data-cy]=\"'card-navigate-click'\"\n>\n <ng-template #header> </ng-template>\n <ng-template #title>\n <div class=\"flex justify-content-between\" style=\"height: 30px\">\n <span\n class=\"font-semibold text-base card-title\"\n [pTooltip]=\"shouldShowTitleTooltip() ? card()['title'] : undefined\"\n tooltipStyleClass=\"phoenix-card-tooltip\"\n >\n {{ card()[\"title\"] }}</span\n >\n\n <pho-actions\n (actionClick)=\"onCardClick($event)\"\n [actions]=\"cardActions()\"\n ></pho-actions>\n </div>\n </ng-template>\n <ng-template #subtitle> </ng-template>\n <p\n #descEl\n class=\"text-500 text-sm\"\n [style]=\"{ height: '5rem', overflow: 'hidden' }\"\n [innerHTML]=\"card()['description'] || '--'\"\n [pTooltip]=\"showTooltip ? card()['description'] : undefined\"\n tooltipStyleClass=\"phoenix-card-tooltip\"\n ></p>\n <ng-content select=\"[custom]\"></ng-content>\n <ng-template #footer>\n <p-divider />\n <ng-content select=\"[footer]\"></ng-content>\n <div class=\"flex flex-wrap gap-1 justify-content-between\">\n @for (item of card()[\"footerData\"]; track item.key; let i = $index) {\n @if (item?.value) {\n <p-tag\n [icon]=\"item?.icon\"\n [severity]=\"item?.severity || 'info'\"\n [value]=\"item.value\"\n />\n } @else {\n <span>--</span>\n }\n }\n </div>\n </ng-template>\n</p-card>\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CrudService {\n constructor(private http: HttpClient) {}\n\n getSearchData<T>(url: string, phrase: string, size: number): Observable<T[]> {\n const params = new HttpParams().set('phrase', phrase).set('size', size);\n return this.http.get<T[]>(url, { params });\n }\n\n update<T, B>(url: string, body: B): Observable<T> {\n return this.http.put<T>(url, body);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CheckboxChangeEvent, CheckboxModule } from 'primeng/checkbox';\nimport { DividerModule } from 'primeng/divider';\nimport { ImageModule } from 'primeng/image';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { SearchResult } from '../../models/search-result.model';\n\ninterface types {\n title: string;\n checkboxes: any;\n}\n\n@Component({\n selector: 'pho-serach-card',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n TooltipModule,\n DividerModule,\n CheckboxModule,\n FormsModule,\n ImageModule,\n ],\n templateUrl: './search-card.component.html',\n styleUrls: ['./search-card.component.css'],\n})\nexport class SearchCardComponent {\n public translate = inject(TranslateService);\n @Input() searchData: SearchResult[] | any;\n @Input() tab?: number;\n\n @Input() mocekedFilters!: types[];\n\n @Input() checkboxes!: { [key: string]: boolean };\n @Output() onScrollEvent = new EventEmitter<Event>();\n @Output() onSelectLinkEvent = new EventEmitter<SearchResult>();\n @Output() onSelectFilterEvent = new EventEmitter<{\n value: { checked: boolean };\n name: string;\n }>();\n\n onScroll(scrollObj: Event): void {\n this.onScrollEvent.emit(scrollObj);\n }\n\n setLinkUrl(link: SearchResult): void {\n this.onSelectLinkEvent.emit(link);\n }\n\n onClick(event: CheckboxChangeEvent, name: string): void {\n event?.originalEvent?.stopPropagation();\n const data = {\n event: event,\n value: { checked: event.checked },\n name: name,\n };\n this.onSelectFilterEvent.emit(data);\n }\n}\n","<ng-container>\n <div class=\"flex h-20rem\">\n <div\n [attr.data-cy]=\"'navigation-search-bar-tab-card-' + tab\"\n class=\"overflow-y-auto\"\n [style.width.vw]=\"35\"\n (scroll)=\"onScroll($event)\"\n *ngIf=\"searchData?.length > 0; else message\"\n >\n <ng-container *ngFor=\"let link of searchData\">\n <div\n [attr.data-cy]=\"'navigation-search-bar-tab-card-link-' + tab\"\n class=\"flex cursor-pointer mb-3 hover:surface-200 border-round-md\"\n (click)=\"setLinkUrl(link)\"\n >\n <p-image\n class=\"border-round-sm p-2 mt-1\"\n [src]=\"\n 'assets/object_types/pink/full/' + link.type.labelKey + '.svg'\n \"\n height=\"24\"\n width=\"27\"\n ></p-image>\n <div class=\"flex flex-column justify-content-around ml-2\">\n <span\n [pTooltip]=\"link.name\"\n tooltipPosition=\"bottom\"\n class=\"mt-1 font-light text-lg\"\n >\n <small class=\"mr-2 font-light text-lg\"\n >{{ link.title | slice : 0 : 50\n }}{{ link.title.length > 50 ? \"...\" : \"\" }}</small\n >\n\n {{ link.name | slice : 0 : 50\n }}{{ link.name.length > 50 ? \"...\" : \"\" }}\n\n <small class=\"font-light text-base text-400\">{{\n link.type?.labelKeyVal | slice : 0 : 20\n }}</small>\n </span>\n <div class=\"flex\">\n <span class=\"mb-1 text-sm\" [pTooltip]=\"link.entity.name\"\n >{{ \"LABELS.ENTITY\" | translate }}:&nbsp;{{\n link.entity.name | slice : 0 : 50\n }}{{ link.entity.name.length > 50 ? \"...\" : \"\" }}</span\n >\n <span\n [pTooltip]=\"link.asset.name\"\n *ngIf=\"link?.asset?.name\"\n class=\"ml-2 mb-1 text-sm\"\n >{{ \"LABELS.ASSET\" | translate }}:&nbsp;{{\n link.asset.name | slice : 0 : 50\n }}{{ link.asset.name.length > 50 ? \"...\" : \"\" }}</span\n >\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <ng-container\n *ngIf=\"mocekedFilters[0].checkboxes?.length > 0 && checkboxes\"\n >\n <p-divider layout=\"vertical\"></p-divider>\n <div\n class=\"flex flex-column overflow-y-auto h-40rem pl-3 justify-content-start\"\n >\n <ng-container *ngFor=\"let item of mocekedFilters\">\n <span class=\"mt-2 mb-3 font-semibold text-sm justify-content-start\"\n >{{ item.title | translate }}\n </span>\n <div class=\"h-25rem flex flex-column justify-content-start\">\n <ng-container *ngFor=\"let checkbox of item.checkboxes\">\n <div class=\"field-checkbox\" *ngIf=\"checkbox?.name\">\n <p-checkbox\n [attr.data-cy]=\"\n 'navigation-search-filter-checkbox-' + checkbox?.labelKey\n \"\n [(ngModel)]=\"checkboxes[checkbox?.labelKey]\"\n [binary]=\"true\"\n [inputId]=\"checkbox?.name\"\n (onChange)=\"onClick($event, checkbox?.labelKey)\"\n ></p-checkbox>\n\n <label class=\"text-sm\" [for]=\"checkbox?.name\">{{\n checkbox.name | translate\n }}</label>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n</ng-container>\n<ng-template #message>\n <div class=\"overflow-y-auto\" style=\"width: 35vw\">\n {{ \"NO_RESULTS_FOUND\" | translate }}\n </div>\n</ng-template>\n","export enum ComplItems {\n COMPL_APPLIED_MODULES = 'COMPL_APPLIED_MODULES',\n COMPL_APPLIED_MEASURE = 'COMPL_APPLIED_MEASURE',\n COMPL_APPLIED_REQUIREMENT = 'COMPL_APPLIED_REQUIREMENT',\n COMPL_APPLIED_THREAT = 'COMPL_APPLIED_THREAT',\n COMPL_APPLIED_CONTROL = 'COMPL_APPLIED_CONTROL',\n COMPL_SCOPE = 'COMPL_SCOPE',\n COMPL_TOT_BUILDING = 'COMPL_TOT_BUILDING',\n COMPL_TOT_DOMAIN = 'COMPL_TOT_DOMAIN',\n COMPL_TOT_INFORMATION = 'COMPL_TOT_INFORMATION',\n COMPL_TOT_BUSINESS = 'COMPL_TOT_BUSINESS_PROCESS',\n COMPL_TOT_APPLICATION = 'COMPL_TOT_APPLICATION',\n COMPL_TOT_ITSYSETEM = 'COMPL_TOT_IT_SYSTEM',\n COMPL_TOT_NETWORK = 'COMPL_TOT_NETWORK',\n COMPL_TOT_EMPLOYEE = 'COMPL_TOT_EMPLOYEE',\n COMPL_TOT_INFRASTRUCTURE = 'COMPL_TOT_INFRASTRUCTURE',\n COMPL_TOT_OUTSORCING = 'COMPL_TOT_OUTSORCING',\n COMPL_TOT_PHYSICAL_FACILITY = 'COMPL_TOT_PHYSICAL_FACILITY',\n COMPL_TOT_ROOM = 'COMPL_TOT_ROOM',\n COMPL_TOGS = 'COMPL_TOGS',\n RISK = 'RISK',\n}\n","export function buildAssetDetailsUrl(\n baseUrl: string,\n assetGroupLabelKey: string,\n uuid: string\n): string {\n const groupSeg = ASSET_GROUP_TO_SEGMENT[assetGroupLabelKey];\n const typeSeg = ASSET_TYPE_TO_SEGMENT[assetGroupLabelKey];\n\n return `${baseUrl}/assets/assets/${groupSeg}/${typeSeg}/${uuid}/details`;\n}\n\nexport const ASSET_GROUP_TO_SEGMENT: Record<string, string> = {\n // IT\n GRP_IT_SYSTEM: 'it-assets',\n GRP_STORAGE_SYSTEM: 'it-assets',\n GRP_VIRTUALIZATION: 'it-assets',\n GRP_NETWORK: 'it-assets',\n GRP_NETWORK_DEVICE: 'it-assets',\n GRP_SOFTWARE: 'it-assets',\n GRP_VOLUME: 'it-assets',\n\n // Facilities\n GRP_LOCATION: 'facilities',\n GRP_INFRASTRUCTURE: 'facilities',\n GRP_ACCESS_CONTROL: 'facilities',\n\n // Business context\n GRP_BUSINESS_PROCESSES: 'business-context',\n GRP_ORGANIZATION: 'business-context',\n GRP_SUPPORT: 'business-context',\n};\n\nexport const ASSET_TYPE_TO_SEGMENT: Record<string, string> = {\n // --- IT ASSETS ---\n GRP_IT_SYSTEM: 'it-system',\n GRP_STORAGE_SYSTEM: 'storage-system',\n GRP_VIRTUALIZATION: 'virtualization',\n GRP_NETWORK: 'network',\n GRP_NETWORK_DEVICE: 'network-device',\n GRP_SOFTWARE: 'software',\n GRP_VOLUME: 'volume',\n\n // --- FACILITIES ---\n GRP_LOCATION: 'location',\n GRP_INFRASTRUCTURE: 'infrastructure',\n GRP_ACCESS_CONTROL: 'access-control',\n\n // --- BUSINESS CONTEXT ---\n GRP_ORGANIZATION: 'organization',\n GRP_BUSINESS_PROCESSES: 'business-processes',\n GRP_SUPPORT: 'support',\n};\n","import {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { Component, ElementRef, ViewChild, inject, input } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { InputTextModule } from 'primeng/inputtext';\nimport { PopoverModule } from 'primeng/popover';\nimport { TabsModule } from 'primeng/tabs';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { MessageModule } from 'primeng/message';\n\nimport { Subject, Subscription, debounceTime, switchMap, catchError, of } from 'rxjs';\n\nimport { CrudService } from '../../services/crud.service';\nimport { SearchCardComponent } from '../search-card/search-card.component';\nimport { SearchResult } from '../../models/search-result.model';\nimport { SearchTabs } from '../../models/search.model';\nimport { ComplItems } from '../../utils/compl-types.utils';\nimport { buildAssetDetailsUrl } from '../../utils/assm-url-resolver.utils';\n\ninterface TypesFilter {\n title: string;\n checkboxes: any;\n}\n\n@Component({\n selector: 'pho-search-bar',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n\n InputTextModule,\n IconFieldModule,\n InputIconModule,\n\n PopoverModule,\n TabsModule,\n MessageModule,\n\n SearchCardComponent,\n ],\n styleUrls: ['./search-bar.component.css'],\n templateUrl: './search-bar.component.html',\n animations: [\n trigger('openClose', [\n state(\n 'open',\n style({\n width: '50vw',\n opacity: 1,\n })\n ),\n state(\n 'closed',\n style({\n width: '13vw',\n opacity: 0.8,\n })\n ),\n transition('* <=> *', [animate('0.1s ease-in-out')]),\n ]),\n ],\n})\nexport class SearchBarComponent {\n @ViewChild('op') op!: any; // p-popover instance\n @ViewChild('elm', { static: true }) elm!: ElementRef;\n\n private crudService = inject(CrudService);\n\n tabs = input<SearchTabs[]>();\n\n isOpen = false;\n\n valueChanges = new Subject<Event>();\n inputEvent!: Event;\n\n clonedData?: SearchResult[];\n searchData?: SearchResult[];\n\n size = 10;\n tabIndex = 0;\n trigg = true;\n\n inputText?: string;\n textValue!: string;\n\n checkboxes: { [key: string]: boolean } = {};\n\n valueSub$!: Subscription;\n reloadSubscription$?: Subscription;\n\n mocekedFilters: TypesFilter[] = [\n { title: 'LABELS.FILTER_BY_TYPE', checkboxes: [] },\n ];\n\n constructor(public translate: TranslateService) {\n this.valueSub$ = this.valueChanges\n .pipe(\n debounceTime(200),\n switchMap((ev) => {\n this.inputEvent = ev;\n const target = ev?.target as HTMLInputElement;\n\n this.size = 10;\n this.inputText = target?.value;\n\n if (!target?.value) return of(null);\n\n this.textValue = target.value;\n\n const url = this.tabs()?.[this.tabIndex]?.apiUrl;\n if (!url) return of(null);\n\n return this.crudService\n .getSearchData<SearchResult>(url, target.value, this.size)\n .pipe(\n catchError((err) => {\n console.error('Error fetching data', err);\n return of(null);\n })\n );\n })\n )\n .subscribe((res) => {\n if (Array.isArray(res)) {\n this.searchData = [...res];\n this.clonedData = [...res];\n this.populateFilters(res);\n this.trigg = true;\n this.filterData();\n }\n });\n }\n\n expand(): void {\n this.isOpen = true;\n }\n\n onParentClick(event: Event): void {\n setTimeout(() => {\n this.op?.show(event, this.elm.nativeElement);\n }, 120);\n }\n\n onTabClick(id: number): void {\n this.searchData = [];\n this.clonedData = [];\n this.filterData();\n this.tabIndex = id;\n\n if (this.inputEvent?.target) {\n this.valueChanges.next(this.inputEvent);\n }\n }\n\n onScroll(scrollObj: Event): void {\n const el = scrollObj.target as HTMLElement;\n if (!el) return;\n\n if (el.offsetHeight + el.scrollTop >= el.scrollHeight) {\n if (this.size <= 100) {\n this.size += 10;\n this.valueChanges.next(this.inputEvent);\n }\n }\n }\n\n populateFilters(data?: SearchResult[]): void {\n this.checkboxes = {};\n if (!data) return;\n\n data.forEach((item) => {\n const key = item?.type?.labelKey;\n if (key) this.checkboxes[key] = false;\n });\n }\n\n onClick(data: { value: { checked: boolean }; name: string }): void {\n this.checkboxes[data.name] = data.value.checked;\n this.filterData(false);\n }\n\n filterData(makeNewFilters: boolean = true): void {\n let selected: string[] = [];\n\n for (const key in this.checkboxes) {\n if (this.checkboxes[key]) selected.push(key);\n\n if (this.checkboxes[ComplItems.COMPL_TOGS]) {\n selected = selected.concat([\n ComplItems.COMPL_TOT_BUILDING,\n ComplItems.COMPL_TOT_DOMAIN,\n ComplItems.COMPL_TOT_INFORMATION,\n ComplItems.COMPL_TOT_BUSINESS,\n ComplItems.COMPL_TOT_APPLICATION,\n ComplItems.COMPL_TOT_ITSYSETEM,\n ComplItems.COMPL_TOT_NETWORK,\n ComplItems.COMPL_TOT_EMPLOYEE,\n ComplItems.COMPL_TOT_INFRASTRUCTURE,\n ComplItems.COMPL_TOT_OUTSORCING,\n ComplItems.COMPL_TOT_PHYSICAL_FACILITY,\n ComplItems.COMPL_TOT_ROOM,\n ]);\n }\n }\n\n if (selected.length === 0) {\n this.searchData = this.clonedData;\n } else {\n this.searchData = this.clonedData?.filter((item: any) =>\n selected.includes(item?.type?.labelKey)\n );\n }\n\n if (makeNewFilters) this.setCheckBoxes();\n }\n\n setCheckBoxes(): void {\n if (!this.trigg) return;\n\n this.mocekedFilters[0].checkboxes = [];\n const seen: string[] = [];\n\n this.searchData?.forEach((item: any) => {\n const key = item?.type?.labelKey;\n if (!key || seen.includes(key)) return;\n\n this.mocekedFilters[0].checkboxes.push({\n name: item.type?.labelKeyVal,\n labelKey: key,\n value: false,\n });\n\n seen.push(key);\n });\n }\n\n setLinkUrl(data?: any): void {\n const baseUrl = this.tabs()?.[this.tabIndex]?.linkUrl;\n if (!baseUrl) return;\n\n if (this.tabIndex !== 1) {\n if (data?.url) window.open(baseUrl + data.url);\n return;\n }\n\n if (!data?.scopes) {\n const url = `scoping/scopes/scope/${data.uuid}/details`;\n window.open(baseUrl + url);\n } else {\n window.open(buildAssetDetailsUrl(baseUrl, data.type.groupLabelKey!, data.uuid));\n }\n }\n\n ngOnDestroy(): void {\n this.valueSub$?.unsubscribe();\n this.reloadSubscription$?.unsubscribe();\n }\n}","<div\n (click)=\"onParentClick($event)\"\n class=\"p-input-icon-left ml-1\"\n #elm\n [attr.data-cy]=\"'navigation-search-bar'\"\n>\n <p-iconfield>\n <!-- styleClass deprecated -> class -->\n <p-inputicon class=\"pi pi-search\"></p-inputicon>\n\n <input\n [attr.data-cy]=\"'navigation-search-bar-input'\"\n [@openClose]=\"isOpen ? 'open' : 'closed'\"\n type=\"text\"\n pInputText\n placeholder=\"{{ 'SEARCH_PLACEHOLDERS.GLOBAL_SEARCH' | translate }}\"\n (input)=\"valueChanges.next($event)\"\n (focus)=\"onParentClick($event); expand()\"\n />\n </p-iconfield>\n</div>\n\n<p-popover\n [dismissable]=\"true\"\n [showTransitionOptions]=\"'.2s ease-out'\"\n [autoZIndex]=\"true\"\n #op\n [style]=\"{ width: '50vw', paddingLeft: '0' }\"\n styleClass=\"global-search\"\n (onHide)=\"isOpen = false\"\n>\n <div\n *ngIf=\"!inputText\"\n class=\"flex align-items-start gap-2 p-3 border-1 border-blue-300 surface-50 text-blue-700 border-round w-full\"\n >\n <i class=\"pi pi-info-circle mt-1 text-blue-500\"></i>\n <span class=\"text-sm\">{{ 'MESSAGES.START_TYPING' | translate }}</span>\n </div>\n\n <ng-template pTemplate=\"content\">\n @if (inputText) {\n <p-tabs [value]=\"tabIndex\">\n <p-tablist>\n @for (tab of tabs(); track tab.id) {\n <p-tab\n [value]=\"tab.id\"\n (click)=\"onTabClick(tab.id)\"\n [attr.data-cy]=\"'navigation-search-bar-tab-' + tab.id\"\n >\n <span>{{ tab.header }}</span>\n </p-tab>\n }\n </p-tablist>\n\n <p-tabpanels>\n @for (tab of tabs(); track tab.id) {\n <p-tabpanel [value]=\"tab.id\">\n <pho-serach-card\n [tab]=\"tab.id\"\n [mocekedFilters]=\"mocekedFilters\"\n [searchData]=\"searchData\"\n [checkboxes]=\"checkboxes\"\n (onScrollEvent)=\"onScroll($event)\"\n (onSelectLinkEvent)=\"setLinkUrl($event)\"\n (onSelectFilterEvent)=\"onClick($event)\"\n ></pho-serach-card>\n </p-tabpanel>\n }\n </p-tabpanels>\n </p-tabs>\n }\n </ng-template>\n</p-popover>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Avatar } from 'primeng/avatar';\nimport { Popover } from 'primeng/popover';\nimport { User } from '../../models/shell-config.model';\nimport { DividerModule } from 'primeng/divider';\n\n@Component({\n selector: 'pho-user',\n imports: [Avatar, Popover, TranslateModule, DividerModule],\n template: `\n <a\n data-cy=\"user-panel-togg-button\"\n (click)=\"op.toggle($event)\"\n class=\"layout-topbar-action flex flex-row justify-content-center align-items-center px-2 rounded-circle\"\n pRipple\n >\n @if(user.bindImageUrl){\n <div\n [style.background-image]=\"user.bindImageUrl\"\n class=\"cover-image\"\n ></div>\n }@else {\n\n <p-avatar\n [style]=\"{ 'background-color': '#9c27b0', color: '#ffffff' }\"\n [label]=\"\n (user.firstname?.charAt(0)?.toUpperCase() || '') +\n (user.lastname?.charAt(0)?.toUpperCase() || '')\n \"\n shape=\"circle\"\n />\n }\n </a>\n <p-popover #op>\n @if(user){\n <div class=\"p-2\">\n <div class=\"flex align-items-top\">\n @if(user.bindImageUrl){\n <div\n [style.background-image]=\"user.bindImageUrl\"\n class=\"profile-image\"\n ></div>\n }@else {\n <p-avatar\n [style]=\"{ 'background-color': '#9c27b0', color: '#ffffff' }\"\n [label]=\"\n (user.firstname?.charAt(0)?.toUpperCase() || '') +\n (user.lastname?.charAt(0)?.toUpperCase() || '')\n \"\n shape=\"circle\"\n />\n }\n\n <div class=\"text-primary cursor-pointer ml-2\">\n <div class=\"text-xl\">{{ user.firstname }} {{ user.lastname }}</div>\n <div class=\"font-bold text-500 text-m\">{{ user.username }}</div>\n <div class=\"text-m\">{{ user.email }}</div>\n </div>\n </div>\n </div>\n <p-divider class=\"p-0 m-0\" />\n <div>\n <a\n class=\"flex flex-row align-items-center cursor-pointer ml-2 mb-2 mt-2\"\n data-cy=\"user-panel-settings-button\"\n (click)=\"actionEmmiter.emit('SETTINGS')\"\n pRipple\n >\n <i class=\"pi pi-user-edit p-2\" style=\"font-size: 1rem\"></i>\n <span>{{ 'ACTION.USER_PROFILE' | translate }}</span>\n </a>\n\n <p-divider class=\"p-0 m-0\" />\n <a\n style=\"color: red\"\n class=\"flex flex-row align-items-center cursor-pointer ml-2 mb-2 mt-2\"\n data-cy=\"user-panel-logout-button\"\n (click)=\"actionEmmiter.emit('LOGOUT')\"\n pRipple\n >\n <i class=\"pi pi-power-off p-2 \" style=\"font-size: 1rem\"></i>\n <span>{{ 'ACTION.LOGOUT' | translate }}</span>\n </a>\n </div>\n }\n <!-- <div class=\"flex gap-2 w-20rem\">\n @if(user.bindImageUrl){\n <div\n [style.background-image]=\"user.bindImageUrl\"\n class=\"profile-image\"\n ></div>\n }\n <div class=\"flex gap-2 flex-column\">\n <div class=\"text-sm mt-auto\">{{ user.username }}</div>\n <div class=\"text-sm\">{{ user.email }}</div>\n </div>\n </div> -->\n </p-popover>\n `,\n styles: [\n `\n .profile-image {\n width: 50px;\n height: 50px;\n border-radius: 50%;\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n cursor: pointer;\n }\n .cover-image {\n width: 35px;\n height: 35px;\n border-radius: 50%;\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n cursor: pointer;\n }\n `,\n ],\n})\nexport class UserComponent {\n @Input() user!: User;\n @Output() actionEmmiter = new EventEmitter<string>();\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n inject,\n input,\n Input,\n OnInit,\n output,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { Drawer, DrawerModule } from 'primeng/drawer';\nimport { SearchBarComponent } from '../search-bar/search-bar.component';\nimport { UserComponent } from '../user/user.component';\nimport { RouterModule } from '@angular/router';\nimport { DividerModule } from 'primeng/divider';\nimport { ButtonModule } from 'primeng/button';\nimport { User } from '../../models/shell-config.model';\nimport { SearchResult } from '../../models/search-result.model';\nimport { SearchTabs } from '../../models/search.model';\nimport { Ripple } from 'primeng/ripple';\nimport { ImageModule } from 'primeng/image';\nimport { TagModule } from 'primeng/tag';\nimport { PopoverModule } from 'primeng/popover';\nimport { MessageService } from 'primeng/api';\nimport { ToastModule } from 'primeng/toast';\nimport { TooltipModule } from 'primeng/tooltip';\n\nexport interface TopbarModuleItem {\n label: string;\n fullName?: string; // Opcioni, jer ne postoji kod svih modula\n icon?: string;\n url?: string;\n routerLink?: string[];\n disabled?: boolean;\n}\n\nexport interface TopbarModuleGroup {\n label: string;\n layout: 'full' | 'grid';\n showIconBackground: boolean;\n items: TopbarModuleItem[];\n}\n\nexport interface TopbarFooterConfig {\n companyName: string;\n companyUrl: string;\n guideLabel: string;\n guideUrl: string;\n copyrightText: string;\n}\n\nexport interface UrlConfig {\n url: string | null;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'pho-topbar',\n standalone: true,\n imports: [\n CommonModule,\n SearchBarComponent,\n UserComponent,\n TranslateModule,\n RouterModule,\n DrawerModule,\n Drawer,\n DividerModule,\n DividerModule,\n ButtonModule,\n ImageModule,\n TagModule,\n PopoverModule,\n ToastModule,\n TooltipModule,\n ],\n templateUrl: './topbar.component.html',\n encapsulation: ViewEncapsulation.None,\n providers: [MessageService],\n})\nexport class TopbarComponent {\n sidebarConfig = { visible: false, type: '' };\n currentYear: number = new Date().getFullYear();\n isSidebarVisible: boolean = false;\n\n @Input() homeUrl: string = '/';\n @Input() user!: User;\n @Input() shortModuleName?: string = 'FLEX';\n @Input() hidelogo?: boolean = false;\n @Input() topbarModulesMenu: any[] = [];\n @Input() darkModeSelector: any;\n @Input() urlConfig?: UrlConfig;\n @Input() footerConfig: TopbarFooterConfig = {\n companyName: 'fuentis',\n companyUrl: 'https://fuentis.com/',\n guideLabel: 'Guide',\n guideUrl: 'https://servicehub.fuentis.com/',\n copyrightText:\n '© ' + new Date().getFullYear() + ' fuentis. All Rights Reserved.',\n };\n\n @Output() onDarkModeSelect = new EventEmitter<void>();\n @Output() onUserPopoverAction = new EventEmitter<string>();\n closeCallback(event: any) {}\n searchConfig = input<SearchTabs[]>();\n openSidebarPanel() {\n this.isSidebarVisible = true;\n }\n private messageService = inject(MessageService);\n private translateService = inject(TranslateService);\n\n /** ✅ Zatvara sidebar */\n closeSidebar() {\n this.isSidebarVisible = false;\n }\n\n ngOnInit() {\n const items = this.topbarModulesMenu[0]?.items || [];\n }\n\n onDarkModeSelectEmit() {\n this.onDarkModeSelect.emit();\n }\n\n goToHome() {\n if (this.homeUrl) {\n window.location.href = this.homeUrl;\n }\n }\n\n goToTicketCenter() {\n window.open(\n 'https://fuentis.atlassian.net/servicedesk/customer/portal/1',\n '_blank'\n );\n }\n\n copyToClipboard($event: any, linkUrl: any) {\n $event.stopPropagation();\n $event.preventDefault();\n\n if (!linkUrl) {\n console.warn('No linkUrl for extIncidentConfig');\n return;\n }\n this.isSidebarVisible = false;\n navigator.clipboard.writeText(linkUrl);\n\n this.messageService.add({\n severity: 'success',\n summary: this.translateService.instant('TOASTER.SUCCESS'),\n detail: this.translateService.instant('TOASTER.LINK_COPIED'),\n life: 3000,\n });\n }\n\n get bindImageUrl(): string {\n return this.user?.imageUrl\n ? `url(${this.user.imageUrl})`\n : `url('assets/default-user.png')`;\n }\n}\n","<div\n class=\"h-full px-2 justify-content-between w-full flex align-items-center shadow-1 topbar\"\n>\n <!-- Title -->\n <div class=\"flex align-items-center justify-content-center mb-2 ml-2\">\n @if (!hidelogo) {\n <img class=\"h-2rem\" src=\"assets/logo_rose.png\" alt=\"fuentis_logo_white\" />\n }\n <!-- <p-tag\n [style]=\"{\n marginLeft: '5px',\n marginBottom: '8px',\n padding: '2px 6px',\n fontSize: '9px',\n border: '1px solid var(--text-color)',\n background: 'transparent',\n color: 'var(--text-color)'\n }\"\n severity=\"info\"\n [value]=\"shortModuleName\"\n /> -->\n </div>\n <!-- children -->\n <ng-content></ng-content>\n\n <div class=\"flex align-items-center gap-2\">\n <!-- Search Bar -->\n <pho-search-bar\n [pTooltip]=\"'TOPBAR_FUNCTIONS.SEARCH' | translate\"\n tooltipPosition=\"bottom\"\n showDelay=\"500\"\n [tabs]=\"searchConfig()\"\n ></pho-search-bar>\n\n <!-- ToggleDarkmode -->\n <p-button\n [pTooltip]=\"'TOPBAR_FUNCTIONS.THEME_SWITCH' | translate\"\n tooltipPosition=\"bottom\"\n showDelay=\"500\"\n data-cy=\"theme-switch-button\"\n (onClick)=\"onDarkModeSelectEmit()\"\n [icon]=\"darkModeSelector.mode === 'dark' ? 'pi pi-sun' : 'pi pi-moon'\"\n variant=\"outlined\"\n />\n\n <p-button\n data-cy=\"side-panel-togg-button\"\n data-cy=\"side-panel-togg-button\"\n (onClick)=\"op.toggle($event)\"\n icon=\"pi pi-th-large\"\n variant=\"outlined\"\n [pTooltip]=\"'TOPBAR_FUNCTIONS.APPLICATION_MENU' | translate\"\n tooltipPosition=\"bottom\"\n showDelay=\"500\"\n />\n <!-- Side Panel (Opens Sidebar) -->\n <p-button\n data-cy=\"side-panel-togg-button\"\n data-cy=\"side-panel-togg-button\"\n (onClick)=\"openSidebarPanel()\"\n icon=\"pi pi-question-circle\"\n variant=\"outlined\"\n [pTooltip]=\"'TOPBAR_FUNCTIONS.HELP_CENTER' | translate\"\n tooltipPosition=\"bottom\"\n showDelay=\"500\"\n />\n\n <!-- User Icon -->\n <pho-user\n [user]=\"user\"\n (actionEmmiter)=\"onUserPopoverAction.emit($event)\"\n [pTooltip]=\"'TOPBAR_FUNCTIONS.USER_MENU' | translate\"\n tooltipPosition=\"bottom\"\n showDelay=\"500\"\n />\n </div>\n</div>\n\n<!-- Sidebar Menu -->\n<p-drawer\n styleClass=\"w-25rem\"\n position=\"right\"\n [(visible)]=\"isSidebarVisible\"\n [closable]=\"false\"\n>\n <ng-template #header>\n <div class=\"flex align-items-center justify-content-between w-full\">\n <div class=\"flex\">\n <span class=\"font-bold text-xl\">\n {{ \"ACTION.HELP_CENTER\" | translate }}\n </span>\n </div>\n\n <p-button\n (onClick)=\"isSidebarVisible = false\"\n icon=\"pi pi-times\"\n [rounded]=\"true\"\n [text]=\"true\"\n />\n </div>\n </ng-template>\n <div class=\"p-1\">\n <div class=\"flex flex-wrap gap-4\">\n <!-- first -->\n <div\n class=\"w-22rem border-round-md border-300 surface-100 pho-reverse p-3\"\n >\n <div\n style=\"width: 30px; height: 30px\"\n class=\"m-2 border-round-md bg-primary font-bold flex align-items-center justify-content-center\"\n >\n <i class=\"pi pi-ticket text-white\" style=\"font-size: 1.2rem\"></i>\n </div>\n <div>\n <div class=\"text-xl font-semibold mb-1\">\n {{ \"HELP_CENTER.CREATE_TICKET\" | translate }}\n </div>\n <div class=\"text-sm mb-2\">\n {{ \"HELP_CENTER.CREATE_TICKET_DESCRIPTION\" | translate }}\n </div>\n </div>\n <div class=\"w-full\">\n <p-button\n (onClick)=\"goToTicketCenter()\"\n [label]=\"'HELP_CENTER.CREATE_TICKET_BUTTON' | translate\"\n variant=\"outlined\"\n size=\"small\"\n />\n </div>\n </div>\n\n <!-- second -->\n <div\n class=\"w-22rem border-round-md border-300 surface-100 pho-reverse p-3\"\n >\n <div\n style=\"width: 30px; height: 30px\"\n class=\"m-2 border-round-md bg-primary font-bold flex align-items-center justify-content-center\"\n >\n <i class=\"pi pi-headphones text-white\" style=\"font-size: 1.2rem\"></i>\n </div>\n <div>\n <div class=\"text-xl font-semibold mb-1\">\n {{ \"HELP_CENTER.CALL_US\" | translate }}\n </div>\n <div class=\"text-sm mb-2\">\n {{ \"HELP_CENTER.CALL_US_DESCRIPTION\" | translate }}\n </div>\n </div>\n <div class=\"w-full\">\n {{ \"HELP_CENTER.PHONE_NUMBER\" | translate }}\n </div>\n </div>\n\n <!-- third -->\n <div\n class=\"w-22rem border-round-md border-300 surface-100 pho-reverse p-3\"\n >\n <div\n style=\"width: 30px; height: 30px\"\n class=\"m-2 border-round-md bg-primary font-bold flex align-items-center justify-content-center\"\n >\n <i class=\"pi pi-envelope text-white\" style=\"font-size: 1.2rem\"></i>\n </div>\n <div>\n <div class=\"text-xl font-semibold mb-1\">\n {{ \"HELP_CENTER.SEND_EMAIL\" | translate }}\n </div>\n <div class=\"text-sm mb-2\">\n {{ \"HELP_CENTER.SEND_EMAIL_DESCRIPTION\" | translate }}\n </div>\n </div>\n <div class=\"w-full\">\n <a href=\"mailto:support&#64;fuentis.com\">\n {{ \"HELP_CENTER.SUPPORT_EMAIL\" | translate }}\n </a>\n </div>\n </div>\n\n <div\n class=\"w-22rem border-round-md border-300 surface-100 pho-reverse p-3\"\n [ngClass]=\"{ 'opacity-30 pointer-events-none': urlConfig?.disabled }\"\n >\n <div\n style=\"width: 30px; height: 30px\"\n class=\"m-2 border-round-md bg-primary font-bold flex align-items-center justify-content-center\"\n >\n <i class=\"pi pi-file text-white\" style=\"font-size: 1.2rem\"></i>\n </div>\n\n <div>\n <div class=\"text-xl font-semibold mb-1\">\n {{ \"HELP_CENTER.REPORT_INCIDENT_TITLE\" | translate }}\n </div>\n <div class=\"text-sm mb-2\">\n {{ \"HELP_CENTER.REPORT_INCIDENT_DESCRIPTION\" | translate }}\n </div>\n </div>\n\n <div class=\"w-full flex align-items-center gap-2\">\n <a\n class=\"no-underline\"\n [href]=\"urlConfig?.url || '#'\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <p-button\n [label]=\"'HELP_CENTER.REPORT_INCIDENT_ACTION' | translate\"\n variant=\"outlined\"\n size=\"small\"\n icon=\"pi pi-copy\"\n (onClick)=\"copyToClipboard($event, urlConfig?.url)\"\n [disabled]=\"urlConfig?.disabled || !urlConfig?.url\"\n />\n </a>\n </div>\n </div>\n </div>\n <!-- External Incident Report card -->\n\n <div class=\"mt-5 p-3\">\n <h4 class=\"\">\n {{ \"ACTION.BROWSE\" | translate }} <br />\n <a\n class=\"\"\n [href]=\"footerConfig.guideUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"flex align-items-center\">\n {{ \"ACTION.KNOWLEDGE_BASE\" | translate }}\n <span style=\"text-decoration: none\">\n <i\n style=\"font-size: 15px\"\n class=\"pi pi-graduation-cap p-2 no-underline\"\n ></i>\n </span>\n\n <!-- <i\n style=\"font-size: 11px\"\n class=\"pi pi-external-link p-2 no-underline\"\n ></i> -->\n </span>\n </a>\n </h4>\n </div>\n </div>\n <ng-template #footer>\n <div class=\"text-xs text-center text-600\">\n {{ \"HELP_CENTER.SUITE_DESCRIPTION\" | translate }}\n </div>\n </ng-template>\n</p-drawer>\n\n<!-- <p-popover #op>\n <div class=\"w-22rem\">\n <ng-container *ngFor=\"let moduleGroup of topbarModulesMenu\">\n <div class=\"grid\">\n <ng-container *ngIf=\"moduleGroup.layout === 'grid'\">\n <div\n *ngFor=\"let module of moduleGroup.items\"\n class=\"col-4 p-3 hover:surface-100 cursor-pointer p-0 m-0 sidebaritem\"\n [ngClass]=\"{ 'opacity-30 pointer-events-none': module?.disabled }\"\n >\n <a\n class=\"text-primary flex flex-column align-items-center gap-2\"\n [href]=\"module.url || '#'\"\n style=\"text-decoration: none; cursor: pointer\"\n [attr.data-cy]=\"'side-panel-menu-item-' + module.label\"\n >\n <div\n class=\"w-4rem border-round-sm flex justify-content-center align-items-center\"\n [style.backgroundColor]=\"\n moduleGroup.showIconBackground\n ? module.disabled\n ? '#ccc'\n : '#e74360'\n : 'transparent'\n \"\n >\n <img *ngIf=\"module.icon\" [src]=\"module.icon\" class=\"w-2rem\" />\n </div>\n <span class=\"text-sm text-center\">{{\n module.label | translate\n }}</span>\n </a>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n</p-popover> -->\n<p-toast></p-toast>\n\n<!-- wait for restructure of the topbar modules menu -->\n<p-popover #op>\n <div class=\"w-25rem\">\n <ng-container *ngFor=\"let item of topbarModulesMenu\">\n <div\n class=\"p-0 m-0 hover:surface-100 cursor-pointer p-2\"\n [ngClass]=\"{ 'opacity-30 pointer-events-none': item?.disabled }\"\n >\n <a\n class=\"text-primary flex align-items-center\"\n [href]=\"item.url || '#'\"\n style=\"text-decoration: none; cursor: pointer\"\n [attr.data-cy]=\"'side-panel-menu-item-' + item.title\"\n >\n <div\n class=\"w-3rem h-3rem border-round-md flex justify-content-center align-items-center border-200 border-1\"\n style=\"margin-right: 10px\"\n >\n <img *ngIf=\"item.icon\" [src]=\"item.icon\" class=\"w-2rem\" />\n </div>\n <div class=\"\">\n <div class=\"font-semibold\">\n {{ item.title | translate }}\n </div>\n <div class=\"text-sm max-w-17rem text-600\">\n {{ item.description | translate }}\n </div>\n </div>\n </a>\n </div>\n </ng-container>\n </div>\n</p-popover>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Output } from '@angular/core';\n\n@Component({\n selector: 'phoenix-quick-pick',\n imports: [CommonModule],\n templateUrl: './quick-pick.component.html',\n styleUrl: './quick-pick.component.css',\n})\nexport class QuickPickComponent {\n @Output() onBack = new EventEmitter<void>();\n @Output() onQuickPick = new EventEmitter<void>();\n @Output() onForward = new EventEmitter<void>();\n}\n","<div class=\"flex align-items-center gap-2\">\n <i\n class=\"pi pi-chevron-left text-blue-500 cursor-pointer hover:text-blue-700 text-sm\"\n data-cy=\"quic-pick-back-button\"\n (click)=\"onBack.emit()\"\n role=\"button\"\n tabindex=\"0\"\n ></i>\n <i\n class=\"pi pi-table text-blue-500 cursor-pointer hover:text-blue-700 text-sm\"\n data-cy=\"quic-pick-button\"\n (click)=\"onQuickPick.emit()\"\n role=\"button\"\n tabindex=\"0\"\n ></i>\n <i\n class=\"pi pi-chevron-right text-blue-500 cursor-pointer hover:text-blue-700 text-sm\"\n data-cy=\"quic-pick-forward-button\"\n (click)=\"onForward.emit()\"\n role=\"button\"\n tabindex=\"0\"\n ></i>\n</div>\n","import {\n Component,\n Input,\n ChangeDetectionStrategy,\n EventEmitter,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TieredMenuModule } from 'primeng/tieredmenu';\nimport { QuickPickComponent } from '../quick-pick/quick-pick/quick-pick.component';\nimport { TagModule } from 'primeng/tag';\n\n@Component({\n selector: 'phoenix-status-header',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n SplitButtonModule,\n TranslateModule,\n TooltipModule,\n TieredMenuModule,\n QuickPickComponent,\n TagModule,\n ],\n templateUrl: './status-header.component.html',\n styleUrls: ['./status-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StatusHeaderComponent {\n @Output() onQuickPickClickEmiter = new EventEmitter<void>();\n @Output() onToggleClickEmmiter = new EventEmitter<'forward' | 'back'>();\n @Output() onCloseEvent = new EventEmitter<void>();\n @Input() type!: any;\n @Input() items!: any;\n @Input() name: string = '';\n @Input() title: string = '';\n @Input() tag?: { icon?: string; text?: string; variant?: string };\n @Input() tags?: Array<{\n icon?: string;\n value?: string;\n variant?: string;\n color?: string;\n tooltip?: string;\n }> = [];\n @Input() enableQuickPick: boolean = false;\n @Input() actions: any[] = [];\n @Input() panelState: boolean = false;\n @Input() customClose: boolean = true;\n\n validSeverities: string[] = [\n 'success',\n 'info',\n 'warn',\n 'danger',\n 'help',\n 'primary',\n 'secondary',\n 'contrast',\n ];\n\n onToggleClick(direction: 'forward' | 'back') {\n this.onToggleClickEmmiter.emit(direction);\n }\n\n toggleSidePanel() {\n this.onQuickPickClickEmiter.emit();\n }\n\n closePanel() {\n this.onCloseEvent.emit();\n }\n}\n","<div class=\"flex justify-content-between p-2\">\n <div class=\"flex align-items-center gap-2 w-full\">\n @if (enableQuickPick) {\n <phoenix-quick-pick\n (onBack)=\"onToggleClick('back')\"\n (onQuickPick)=\"toggleSidePanel()\"\n (onForward)=\"onToggleClick('forward')\"\n >\n </phoenix-quick-pick>\n }\n\n <!-- NAME with tooltip and truncation -->\n @if (name) {\n <span\n class=\"text-xl font-semibold\"\n [pTooltip]=\"name.length > 40 ? name : undefined\"\n >\n {{ name.length > 60 ? (name | slice: 0 : 60) + \"…\" : name }}\n </span>\n }\n\n <!-- TITLE with tooltip and truncation -->\n @if (title) {\n <span\n class=\"text-base text-gray-500\"\n [pTooltip]=\"title.length > 20 ? title : undefined\"\n >\n {{ title.length > 20 ? (title | slice: 0 : 20) + \"…\" : title }}\n </span>\n }\n\n <!-- Type goes here -->\n <!-- @if (type.text) {\n <p-tag\n [value]=\"type?.text\"\n [style]=\"{\n border: '2px solid var(--surface-300)',\n background: 'transparent',\n color: 'var(--text-color)',\n 'font-size': '11px',\n padding: '2px 4px',\n width: 'fit-content',\n 'white-space': 'nowrap'\n }\"\n ></p-tag>\n } -->\n </div>\n\n <!-- <div class=\"flex gap-1 align-items-center\">\n @for (tag of tags; track $index) {\n <p-tag\n [pTooltip]=\"tag?.tooltip ? (tag.tooltip! | translate) : undefined\"\n [value]=\"tag?.value || '--'\"\n [severity]=\"tag.variant || 'info'\"\n [icon]=\"tag?.icon || 'pi pi-check'\"\n [style]=\"{\n 'font-size': '11px',\n padding: '3px 8px',\n width: 'fit-content',\n 'white-space': 'nowrap'\n }\"\n [ngStyle]=\"\n tag?.color\n ? {\n 'background-color': tag.color + '36',\n color: tag.color,\n }\n : null\n \"\n ></p-tag>\n }\n </div> -->\n</div>\n","import { StatusColType } from '../enums/status-col-type.enum';\n\nexport enum StatusTooltipType {\n TAG = 'TAG',\n STRING = 'STRING',\n PERSON = 'PERSON',\n LINK = 'LINK',\n DATE = 'DATE',\n DATE_ONLY = 'DATE_ONLY',\n COPY_TO_CLIPBOARD = 'COPY_TO_CLIPBOARD',\n DATE_PERSON = 'DATE_PERSON',\n}\n\nexport interface StatusTooltipItem {\n label: string;\n value: string | null;\n type: StatusTooltipType;\n value1?: string;\n value2?: string;\n}\n\nexport interface StatusAttribute {\n type: StatusColType;\n label: string;\n value: any;\n dateFormat?: string;\n // Specific to TAG\n key?: string;\n color?: string;\n\n //Specific to url with icon\n icon?: string;\n // Specific to PERSON\n value1?: string;\n\n tooltip?: StatusTooltipItem[];\n\n url?: string;\n\n // Specific to LIST\n item?:\n | {\n name: string;\n url?: string;\n disabled?: boolean;\n }[]\n | string\n | null;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'phoenix-tag',\n standalone: true,\n imports: [CommonModule, TranslateModule],\n templateUrl: './tag.component.html',\n styleUrls: ['./tag.component.scss'],\n})\nexport class TagComponent implements OnChanges {\n @Input() key!: string;\n @Input() content!: string;\n @Input() customColor!: string;\n\n color: string | undefined;\n customStyle!: {\n 'background-color': string;\n border: string;\n color: string;\n };\n\n ngOnChanges(): void {\n if (this.customColor) {\n this.customStyle = {\n 'background-color': this.customColor,\n border: this.invertHex(this.customColor),\n color: 'white',\n //color: this.invertHex(this.customColor),\n };\n }\n }\n\n invertHex(hex: string) {\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n\n if (hex.length != 6) {\n console.warn('Hex color must be six hex numbers in length.');\n return '#' + hex;\n }\n\n hex = hex.toUpperCase();\n const splitNum: any = hex.split('');\n let resultNum = '';\n const simpleNum = 'FEDCBA9876'.split('');\n const complexNum: any = {\n A: '5',\n B: '4',\n C: '3',\n D: '2',\n E: '1',\n F: '0',\n };\n\n for (let i = 0; i < 6; i++) {\n if (!isNaN(Number(splitNum[i]))) {\n resultNum += simpleNum[splitNum[i]];\n } else if (complexNum[splitNum[i]]) {\n resultNum += complexNum[splitNum[i]];\n } else {\n console.warn('Hex colors must only include hex numbers 0-9, and A-F');\n return '#' + hex;\n }\n }\n\n return '#' + resultNum;\n }\n}\n","<ng-container>\n <span [class]=\"'phoenix-tag '\" [ngStyle]=\"customStyle\" [attr.data-cy]=\"'tag'\">\n {{ content | translate }}\n </span>\n</ng-container>\n\n<!-- class=\"text-800\" style color depends on theme -->\n","import {\n Component,\n Input,\n ChangeDetectionStrategy,\n inject,\n ViewChildren,\n QueryList,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TagModule } from 'primeng/tag';\nimport { ContextObjectConfig, ContextObjectTag } from './context-object.model';\nimport { Router } from '@angular/router';\nimport { AvatarModule } from 'primeng/avatar';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport {\n StatusAttribute,\n StatusTooltipItem,\n StatusTooltipType,\n} from '../status-bar/models/status-attribute.model';\nimport { TagComponent } from '../tag/tag.component';\n\n@Component({\n selector: 'phoenix-contex-object',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n TranslateModule,\n TooltipModule,\n TagModule,\n AvatarModule,\n PopoverModule,\n TagComponent,\n ],\n templateUrl: './contex-object.component.html',\n styleUrls: ['./contex-object.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContexObjectComponent {\n @Input() config?: ContextObjectConfig;\n @Input() dateFormat = 'dd.MM.yyyy | HH:mm';\n @Input() dateOnlyFormat = 'dd.MM.yyyy';\n\n router = inject(Router);\n\n statusTooltipType = StatusTooltipType;\n\n validSeverities: string[] = [\n 'success',\n 'info',\n 'warn',\n 'danger',\n 'help',\n 'primary',\n 'secondary',\n 'contrast',\n ];\n\n get ctxType(): string | undefined {\n return this.config?.type ?? '';\n }\n\n get ctxName(): string {\n return this.config?.name ?? '';\n }\n\n get ctxTitle(): string {\n return this.config?.title ?? '';\n }\n\n get ctxTags(): ContextObjectTag[] {\n return this.config?.tags ?? [];\n }\n\n /**\n * Groups tags by their `group` property.\n * Ungrouped tags are returned as-is.\n * Grouped tags collapse into one display entry showing the first tag + remaining count.\n */\n get displayTags(): {\n tag: ContextObjectTag;\n groupedTags: ContextObjectTag[];\n remainingCount: number;\n }[] {\n const tags = this.ctxTags;\n const result: {\n tag: ContextObjectTag;\n groupedTags: ContextObjectTag[];\n remainingCount: number;\n }[] = [];\n const seenGroups = new Set<string>();\n\n for (const tag of tags) {\n if (!tag.group) {\n // Ungrouped tag — show as-is\n result.push({ tag, groupedTags: [tag], remainingCount: 0 });\n } else if (!seenGroups.has(tag.group)) {\n // First occurrence of this group\n seenGroups.add(tag.group);\n const allInGroup = tags.filter((t) => t.group === tag.group);\n result.push({\n tag,\n groupedTags: allInGroup,\n remainingCount: allInGroup.length - 1,\n });\n }\n // Subsequent tags of an already-seen group are skipped\n }\n return result;\n }\n\n get ctxLabels(): { text: string }[] {\n return this.config?.labels ?? [];\n }\n\n get ctxBackRoute(): any[] | undefined {\n return this.config?.backRoute ?? [];\n }\n\n get ctxOtherInfo(): StatusAttribute[] {\n return this.config?.otherInfo ?? [];\n }\n\n @ViewChildren('tagPop') tagPopovers!: QueryList<Popover>;\n\n onTagPopoverEnter(event: Event, currentPopover: Popover): void {\n this.tagPopovers?.forEach((p) => {\n if (p !== currentPopover) p.hide();\n });\n currentPopover.show(event);\n }\n\n onTagPopoverLeave(event: Event, currentPopover: Popover): void {\n currentPopover.hide();\n }\n\n onBackClick(): void {\n const route = this.ctxBackRoute;\n if (route?.length) {\n this.router.navigate(route);\n }\n }\n\n getFullUrl(path: string): string {\n if (path.startsWith('http')) return path;\n return '/' + path.replace(/^\\/+/, '');\n }\n}\n","<div class=\"flex align-items-center gap-2 w-full\">\n @if (ctxBackRoute?.length) {\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-arrow-left\"\n class=\"p-button-text ml-1\"\n (click)=\"onBackClick()\"\n ></button>\n } @if (ctxType) {\n <span class=\"text-xl font-semibold text-gray-500\"> {{ ctxType }} : </span>\n } @if (ctxName) {\n <span\n class=\"text-xl font-semibold text-primary\"\n [pTooltip]=\"ctxName.length > 40 ? ctxName : undefined\"\n >\n {{ ctxName.length > 60 ? (ctxName | slice : 0 : 60) + \"…\" : ctxName }}\n </span>\n } @if (ctxTitle) {\n <span\n class=\"text-base text-gray-500\"\n [pTooltip]=\"ctxTitle.length > 20 ? ctxTitle : undefined\"\n >\n {{ ctxTitle.length > 20 ? (ctxTitle | slice : 0 : 20) + \"…\" : ctxTitle }}\n </span>\n } @if (ctxTags.length) {\n <div class=\"flex align-items-center gap-2 ml-3\">\n @for (item of displayTags; track $index) {\n <div class=\"tag-group-wrapper\">\n <div\n class=\"tag-popover-trigger\"\n (mouseenter)=\"onTagPopoverEnter($event, tagPop)\"\n (mouseleave)=\"onTagPopoverLeave($event, tagPop)\"\n >\n <p-tag\n [value]=\"item.remainingCount > 0 ? item.tag.text + ' +' + item.remainingCount : item.tag.text\"\n [severity]=\"$any(item.tag.variant || 'info')\"\n [icon]=\"item.tag.icon\"\n [style]=\"{\n 'font-size': '11px',\n padding: '3px 8px',\n width: 'fit-content',\n cursor: item.remainingCount > 0 ? 'pointer' : 'default',\n }\"\n [ngStyle]=\"\n item.tag.color\n ? {\n 'background-color': item.tag.color + '36',\n color: item.tag.color,\n }\n : null\n \"\n ></p-tag>\n </div>\n <p-popover #tagPop [style]=\"{ maxWidth: '400px' }\">\n @if (item.remainingCount === 0) {\n <div>\n <span>{{ item.tag.label ? item.tag.label + \": \" : \"\" }}</span>\n <span>{{ item.tag.text }} </span>\n </div>\n } @else {\n @if (item.tag.label) {\n <div class=\"tag-group-popup-label\">{{ item.tag.label }}</div>\n }\n <div class=\"flex flex-wrap gap-1\">\n @for (gt of item.groupedTags; track $index) {\n <p-tag\n [value]=\"gt.text\"\n [severity]=\"$any(gt.variant || 'info')\"\n [icon]=\"gt.icon\"\n [style]=\"{\n 'font-size': '11px',\n padding: '3px 8px',\n width: 'fit-content',\n }\"\n [ngStyle]=\"\n gt.color\n ? {\n 'background-color': gt.color + '36',\n color: gt.color,\n }\n : null\n \"\n ></p-tag>\n }\n </div>\n }\n </p-popover>\n </div>\n } @for (label of ctxLabels; track label.text) {\n <span\n [style]=\"{\n 'font-size': '11px',\n padding: '3px 8px',\n width: 'fit-content',\n }\"\n >\n {{ label.text }}\n </span>\n }\n </div>\n\n }\n <!-- Other Info items -->\n <ng-container *ngFor=\"let attr of ctxOtherInfo\">\n <span\n class=\"cursor-pointer ml-3\"\n (mouseenter)=\"pop.toggle($event)\"\n (mouseleave)=\"pop.toggle($event)\"\n >\n <i class=\"pi pi-calendar text-blue-900 mr-1\"></i>\n <span class=\"text-sm\">{{\n attr.value | date : attr.dateFormat || dateOnlyFormat\n }}</span>\n </span>\n <p-popover #pop [style]=\"{ maxWidth: '400px' }\">\n <!-- GRID layout for all tooltip items except DATE_PERSON -->\n <div\n style=\"\n display: grid;\n grid-template-columns: max-content 1fr;\n column-gap: 1rem;\n row-gap: 0.5rem;\n align-items: start;\n width: 100%;\n \"\n >\n <ng-container *ngFor=\"let item of attr?.tooltip\">\n <ng-container *ngIf=\"item.type !== statusTooltipType.DATE_PERSON\">\n <!-- Tooltip label -->\n <div class=\"text-sm text-600 text-left\">{{ item.label }}:</div>\n\n <!-- Tooltip value rendering -->\n <div class=\"text-sm text-left break-words\">\n <ng-container [ngSwitch]=\"item?.type || statusTooltipType.TAG\">\n <!-- LINK type: renders as a clickable hyperlink if value exists -->\n <ng-container *ngSwitchCase=\"'LINK'\">\n <a\n *ngIf=\"item.value; else empty\"\n [href]=\"getFullUrl(item.value)\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-blue-500 underline\"\n >\n {{ item.label || \"Open\" }}\n </a>\n </ng-container>\n\n <!-- STRING type: renders text with truncation and tooltip if too long -->\n <ng-container *ngSwitchCase=\"statusTooltipType.STRING\">\n <div\n *ngIf=\"item.value; else empty\"\n class=\"text-sm\"\n style=\"\n white-space: normal;\n word-break: break-word;\n overflow-wrap: break-word;\n \"\n >\n {{ item.value }}\n </div>\n </ng-container>\n\n <!-- DATE type: formatted date or fallback -->\n <ng-container *ngSwitchCase=\"statusTooltipType.DATE\">\n <span *ngIf=\"item.value; else empty\">\n {{ item.value | date : dateFormat }}\n </span>\n </ng-container>\n\n <!-- PERSON type: shows initial avatar and name if value exists -->\n <ng-container *ngSwitchCase=\"statusTooltipType.PERSON\">\n <ng-container *ngIf=\"item.value; else empty\">\n <span class=\"person-wrap flex items-center gap-1 truncate\">\n <div\n class=\"person-avatar small\"\n style=\"font-size: 0.875rem; line-height: 1\"\n >\n {{ item?.value?.charAt(0)?.toUpperCase() }}\n </div>\n <span class=\"truncate\">\n {{ item.value }} {{ item.value1 }}\n </span>\n </span>\n </ng-container>\n </ng-container>\n\n <!-- TAG or unknown type: uses phoenix-tag if value exists -->\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"item.value; else empty\">\n <div class=\"flex gap-2\">\n <span> {{ item.value }} </span>\n <phoenix-tag\n [customColor]=\"item.value2 || ''\"\n [content]=\"item.value1 || ''\"\n >\n </phoenix-tag>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <!-- Separate layout for DATE_PERSON entries (includes avatar and date) -->\n <ng-container *ngFor=\"let item of attr?.tooltip\">\n <ng-container *ngIf=\"item.type === statusTooltipType.DATE_PERSON\">\n <ng-container *ngIf=\"item.value; else emptyDatePerson\">\n <div>\n <!-- Label -->\n <div\n class=\"font-sm text-600 truncate mb-1\"\n [pTooltip]=\"item.label.length > 20 ? item.label : undefined\"\n >\n {{ item.label }}\n </div>\n <!-- Avatar and person name/date -->\n <div class=\"flex items-center gap-2 person-wrap\">\n <div class=\"person-avatar\">\n {{ item?.value?.charAt(0)?.toUpperCase() }}\n </div>\n <div>\n <div\n class=\"text-blue-800 font-sm\"\n style=\"\n word-break: break-word;\n white-space: normal;\n overflow-wrap: break-word;\n \"\n >\n {{ item.value }}\n </div>\n <div class=\"text-sm\">\n {{ item.value1 | date : dateFormat }}\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n <!-- Fallback for empty DATE_PERSON -->\n <ng-template #emptyDatePerson>\n <div class=\"text-sm\">--</div>\n </ng-template>\n </ng-container>\n </ng-container>\n\n <!-- Shared fallback for missing or empty values -->\n <ng-template #empty>\n <span>--</span>\n </ng-template>\n </p-popover>\n </ng-container>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SidebarComponent } from '../sidebar/sidebar.component';\nimport { TopbarComponent } from '../topbar/topbar.component';\nimport { ContexObjectComponent } from '../context-object/contex-object.component';\nimport { ContextObjectConfig } from '../context-object/context-object.model';\n\nexport interface ShellTheme {\n mode: 'light' | 'dark' | 'system';\n}\n\n@Component({\n selector: 'pho-shell',\n imports: [\n SidebarComponent,\n TopbarComponent,\n CommonModule,\n ContexObjectComponent,\n ],\n templateUrl: './shell.component.html',\n encapsulation: ViewEncapsulation.None,\n})\nexport class ShellComponent {\n @Input() config!: {\n user: any;\n shortModuleName: string;\n hidelogo?: boolean;\n\n /** header control */\n headerContext?: ContextObjectConfig;\n\n searchConfig?: any;\n topbarModulesMenu?: any;\n urlConfig?: {\n url: string | null;\n disabled?: boolean;\n };\n mainItems?: any[];\n footerItem?: any;\n };\n\n @Input() darkModeSelector = { mode: 'dark' };\n @Input() theme: ShellTheme = { mode: 'system' };\n @Output() onDarkModeSelect = new EventEmitter<any>();\n @Output() onIsSlimSelect = new EventEmitter<any>();\n @Output() onUserAction = new EventEmitter<string>();\n @Output() sliderClick = new EventEmitter<any>();\n @Output() themeChange = new EventEmitter<ShellTheme>();\n\n isSlim!: boolean;\n\n readonly gridTemplateColumns = 'auto 1fr';\n\n /** if showHeader=true adding additional row between topbar and content */\n get gridTemplateRows(): string {\n return this.config?.headerContext?.showHeader ? '3.5rem auto 1fr' : '3.5rem 1fr';\n }\n\n toggleSidebar(isSlim: boolean) {\n this.isSlim = isSlim;\n this.onIsSlimSelect.emit(this.isSlim);\n }\n\n onThemeChange(mode: ShellTheme['mode']) {\n this.theme.mode = mode;\n this.themeChange.emit(this.theme);\n }\n\n selectDarkMode() {\n this.onDarkModeSelect.emit(this.darkModeSelector);\n }\n}\n","<!-- Sidebar Layout -->\n<div\n class=\"pho-grid w-full h-screen overflow-hidden m-0 p-0\"\n [ngStyle]=\"{\n 'grid-template-rows': gridTemplateRows,\n 'grid-template-columns': gridTemplateColumns\n }\"\n>\n <!-- Top header (uvek preko 2 kolone) -->\n <pho-topbar\n class=\"pho-col-span-2 z-1\"\n [user]=\"config.user\"\n [shortModuleName]=\"config.shortModuleName\"\n [hidelogo]=\"config.hidelogo\"\n [searchConfig]=\"config.searchConfig\"\n [topbarModulesMenu]=\"config.topbarModulesMenu\"\n [urlConfig]=\"config.urlConfig\"\n [darkModeSelector]=\"darkModeSelector\"\n (onDarkModeSelect)=\"selectDarkMode()\"\n (onUserPopoverAction)=\"onUserAction.emit($event)\"\n ></pho-topbar>\n\n <!-- Context object - full width -->\n <div class=\"pho-col-span-2\" *ngIf=\"config.headerContext && config.headerContext.showHeader\">\n <div\n class=\"flex align-items-center justify-content-between border-bottom-1 border-300 pb-2 pt-2\"\n >\n <phoenix-contex-object\n *ngIf=\"config.headerContext\"\n [config]=\"config.headerContext\"\n ></phoenix-contex-object>\n </div>\n </div>\n\n <!-- Sidebar (uvek prisutan) -->\n <div class=\"w-max\">\n <pho-sidebar\n [mainItems]=\"config.mainItems\"\n [footerItem]=\"config.footerItem\"\n (toggleSidebar)=\"toggleSidebar($event)\"\n (sliderClick)=\"sliderClick.emit($event)\"\n ></pho-sidebar>\n </div>\n\n <!-- Main content -->\n <div class=\"overflow-auto surface-50 wrap w-full\">\n <ng-content></ng-content>\n </div>\n</div>\n","export function timePeriodFromMS(milliseconds: number, lang: string = 'en'): string {\n const weeks = Math.floor(milliseconds / (7 * 24 * 60 * 60 * 1000));\n milliseconds %= 7 * 24 * 60 * 60 * 1000;\n \n const days = Math.floor(milliseconds / (24 * 60 * 60 * 1000));\n milliseconds %= 24 * 60 * 60 * 1000;\n \n const hours = Math.floor(milliseconds / (60 * 60 * 1000));\n milliseconds %= 60 * 60 * 1000;\n \n const minutes = Math.floor(milliseconds / (60 * 1000));\n \n let result = '';\n \n switch (lang) {\n case 'de':\n if (weeks > 0) result += `${weeks}w `;\n if (days > 0) result += `${days}t `;\n if (hours > 0) result += `${hours}s `;\n if (minutes > 0) result += `${minutes}m`;\n break;\n \n case 'sr':\n if (weeks > 0) result += `${weeks}n `;\n if (days > 0) result += `${days}d `;\n if (hours > 0) result += `${hours}č `;\n if (minutes > 0) result += `${minutes}m`;\n break;\n \n default: // 'en' or fallback\n if (weeks > 0) result += `${weeks}w `;\n if (days > 0) result += `${days}d `;\n if (hours > 0) result += `${hours}h `;\n if (minutes > 0) result += `${minutes}m`;\n break;\n }\n \n return result.trim();\n }","import { Pipe, PipeTransform } from '@angular/core';\nimport { timePeriodFromMS } from '../components/meta-form/utils/form-fields.utils';\n\n@Pipe({\n name: 'timePeriod'\n})\nexport class TimePeriodPipe implements PipeTransform {\n transform(value: number): string {\n return timePeriodFromMS(value);\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'initials' })\nexport class InitialsPipe implements PipeTransform {\n transform(name: string): string {\n return (\n name\n ?.split(' ')\n .map((word) => word.charAt(0).toUpperCase())\n .join('') || ''\n );\n }\n}\n","export enum tableActionType {\n CREATE = 'create',\n EDIT = 'edit',\n BULK_EDIT = 'bulk_edit',\n DELETE = 'delete',\n DETAILS = 'details',\n ASSIGN = 'assign',\n APPLY = 'apply',\n OPEN_IN_NEW_TAB = 'open_in_new_tab',\n TAB = 'tab',\n OPEN_FULL_SCREEN = 'open_full_screen',\n ADD_LINK = 'add_link',\n DISCONNECT = 'disconnect',\n REMOVE = 'remove',\n SYNC = 'sync',\n MENU = 'menu',\n DROP = 'drop',\n OVERVIEW = 'overview',\n HISTORY = 'syncHistory',\n DOWNLOAD = 'download',\n ATTACH = 'attach',\n IMPORT = 'import',\n ROW_DELETE = 'row_delete',\n RUN = 'run',\n ///multiple options\n ASSIGN_FROM_CATALOG = 'ASSIGN_FROM_CATALOG',\n ASSIGN_FROM_ITEM = 'ASSIGN_FROM_ITEM',\n ASSIGN_CONTROLS = 'ASSING_CONTROLS',\n ASSIGN_MEASURE = 'ASSGIN_MEASURE',\n CREATE_ADITIONAL_MEASURE = 'CREATE_ADITIONAL_MEASURE'\n}\n\nexport enum tableButtonFormat {\n TEXT_ICON = 'TEXT_ICON',\n TEXT = 'TEXT',\n ICON = 'ICON',\n ICON_ROUNDED = 'ICON_ROUNDED',\n}\n\nexport enum tableButtonContext {\n GLOBAL = 'GLOBAL',\n MORE = 'MORE',\n BULK = 'BULK',\n ROW = 'ROW',\n}\n\nexport enum tableColumnType {\n TEXT = 'TEXT',\n TIMEPERIOD = 'TIMEPERIOD',\n RICH_TEXT = 'RICH_TEXT',\n TEXT_AREA = 'TEXT_AREA',\n DATE = 'DATE',\n DATE_COMPLEX = 'DATE_COMPLEX', //Date and time\n TAG = 'TAG',\n OBJ_TAG = 'OBJ_TAG',\n LIST_TAG = 'LIST_TAG',\n NUMBER = 'NUMBER',\n PERSON = 'PERSON',\n COMPLETNESS = 'COMPLETNESS',\n BOOLEAN = 'BOOLEAN',\n LIST = 'LIST',\n CUSTOM = 'CUSTOM',\n EMAIL = 'EMAIL',\n}\n\nexport enum tableSelectionType {\n CHECKBOX = 'checkbox',\n RADIO_BTN = 'radio_btn',\n}\n\nexport enum tableFilterType {\n ///not using text, its in global srch\n // TEXT = 'text',\n DATE = 'date',\n // NUMERIC = 'numeric',\n BOOLEAN = 'boolean',\n MULTISELECT = 'multiselect',\n COMPLETNESS = 'completness',\n // ICON = 'icon',\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n} from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { tableActionType, tableButtonContext } from '../utils/dataTable.enum';\nimport { TableAction } from '../utils/dataTable.interface';\nimport { PopoverModule } from 'primeng/popover';\n\ninterface BtnConfig {\n text: boolean;\n label: string;\n icon: string;\n outlined: boolean;\n class?: string;\n type?: string; // default is 'button' , for multiselect button set 'multiselect'\n items?: any;\n severity?:\n | 'info'\n | 'success'\n | 'warn'\n | 'danger'\n | 'secondary'\n | 'contrast'\n | 'help'\n | 'primary';\n checkboxrelatedauth?: boolean;\n}\nenum ico {\n import = 'pi pi-file-import',\n create = 'pi pi-plus',\n open_full_screen = 'pi pi-external-link',\n bulk_edit = 'pi pi-pencil',\n edit = 'pi pi-pencil',\n delete = 'pi pi-trash',\n assign = 'pi pi-paperclip',\n apply = 'pi pi-check-square',\n open_in_new_tab = 'pi pi-external-link',\n add_link = 'pi pi-link',\n disconnect = 'pi pi-link',\n remove = 'pi pi-minus',\n sync = 'pi pi-sync',\n menu = 'pi pi-ellipsis-v',\n drop = 'pi pi-angle-down',\n overview = 'pi pi-history',\n syncHistory = 'pi pi-history',\n download = 'pi pi-download',\n attach = 'pi pi-paperclip',\n details = 'pi pi-info-circle',\n row_delete = 'pi pi-trash',\n run = 'pi pi-play',\n}\n\n@Component({\n selector: 'phoenix-data-table-action',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n TooltipModule,\n TranslateModule,\n PopoverModule,\n ],\n templateUrl: './phoenix-data-table-action.component.html',\n styleUrls: ['./phoenix-data-table-action.component.css'],\n})\n\n/// two disble opt\n/// Read only: Default scope/enity or any other reason | referenced type etc...\n/// solved with readonly property from response and it works per row. It works independed from user. Response has to return readonly:boolean\n\n/// Authorization\n//// needs in btn configuration and its fro all buttons. all rows\nexport class PhoenixDataTableActionComponent implements OnChanges {\n @Input({ required: true }) actionConfig!: TableAction;\n @Input() rowData!: any;\n // @Input() selectedData!: any;\n\n @Output() actionClick = new EventEmitter<any>();\n\n icon!: string;\n disabled!: boolean | undefined;\n btnConfig!: BtnConfig;\n\n ngOnChanges(): void {\n this.icon = ico[this.actionConfig.type as keyof typeof ico];\n\n ///set standard btn configuraton\n this.btnConfig = {\n text: true,\n label: this.actionConfig.label,\n icon: 'pi pi-circle',\n class: '',\n outlined: false,\n type: this.actionConfig.buttonType,\n items: this.actionConfig.items,\n checkboxrelatedauth: this.actionConfig.checkboxrelatedauth\n ? this.actionConfig.checkboxrelatedauth\n : false,\n };\n switch (this.actionConfig.context) {\n case tableButtonContext.GLOBAL:\n ///disable by permission\n\n this.disabled = this.actionConfig.disabled;\n break;\n case tableButtonContext.BULK:\n this.btnConfig.outlined = true;\n this.btnConfig.class = 'ml-1';\n ///disable by permission\n this.disabled = this.actionConfig.disabled;\n\n ///configure bulk delete button\n if (this.actionConfig.type === tableActionType.DELETE) {\n this.btnConfig.severity = 'warn';\n }\n\n break;\n case tableButtonContext.ROW:\n this.btnConfig.label = '';\n ///Test the order of disabling\n ///disable by permission\n this.disabled = this.actionConfig.disabled;\n if (this.disabled) {\n break;\n }\n if (this.actionConfig?.type && !this.actionConfig?.notauthorized) {\n this.disabled =\n this.rowData[this.actionConfig.type] != undefined &&\n this.rowData[this.actionConfig.type] != null\n ? !this.rowData[this.actionConfig.type]\n : false;\n }\n /// always disable delete button if object response is readOnly:true\n if (\n this.rowData?.readOnly &&\n this.actionConfig.type === tableActionType.DELETE\n ) {\n this.disabled = true;\n }\n /// this CUSTOM condition is only for BCMS Resources. readOnly is not enough (its not appropriate for ISMS & BCMS) we should have isEditable, isDeletable ets... boolean for each action :)\n if (\n this.rowData?.typeLabelKey === 'CUSTOM' &&\n this.actionConfig.type === tableActionType.OPEN_IN_NEW_TAB\n ) {\n this.disabled = true;\n }\n\n break;\n }\n }\n\n onActionClick(action: any) {\n this.actionClick.emit({ action, rowData: this.rowData });\n }\n}\n","<p-popover #op>\n <ul class=\"list-none p-0 m-0\" [attr.data-cy]=\"'table-button-popover'\">\n <ng-container *ngFor=\"let item of btnConfig.items; let last = last\">\n <li\n class=\"cursor-pointer block\"\n [ngClass]=\"{ 'mb-3': !last, disabledAction: item.disabled }\"\n (click)=\"onActionClick(item)\"\n >\n <i class=\"mr-2\" [class]=\"item.icon\"></i> {{ item.label | translate }}\n </li>\n </ng-container>\n </ul>\n</p-popover>\n\n<p-button\n [attr.data-cy]=\"'table-button-' + actionConfig.type\"\n [label]=\"btnConfig.label | translate\"\n [text]=\"btnConfig.text\"\n [icon]=\"icon\"\n [disabled]=\"disabled\"\n [iconPos]=\"btnConfig.type === 'multiselect' ? 'right' : 'left'\"\n (click)=\"\n btnConfig.type === 'multiselect'\n ? op.toggle($event)\n : onActionClick(actionConfig)\n \"\n [outlined]=\"btnConfig.outlined\"\n [pTooltip]=\"actionConfig.label | translate\"\n tooltipPosition=\"bottom\"\n [class]=\"btnConfig.class\"\n [severity]=\"btnConfig.severity\"\n>\n</p-button>\n","import {\n Component,\n DestroyRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableAction } from '../utils/dataTable.interface';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BadgeModule } from 'primeng/badge';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'phoenix-data-table-tabs',\n standalone: true,\n imports: [\n CommonModule,\n SelectButtonModule,\n FormsModule,\n TranslateModule,\n BadgeModule,\n ],\n templateUrl: './phoenix-data-table-tabs.component.html',\n styleUrls: ['./phoenix-data-table-tabs.component.css'],\n})\nexport class PhoenixDataTableTabsComponent implements OnInit, OnChanges {\n @Input({ required: true }) actions!: TableAction[];\n @Output() actionClick = new EventEmitter<any>();\n\n private router = inject(Router);\n private dr = inject(DestroyRef);\n value!: string | undefined;\n\n private resolveTabFromRoute(): string {\n const fullPath = this.router.url;\n const pathSegments = fullPath.split('/').filter(Boolean);\n const lastSegment = pathSegments[pathSegments.length - 1];\n\n if (this.actions && this.actions.length > 0) {\n const found = this.actions.find((ac) => ac.key === lastSegment);\n return (found?.key || this.actions[0].key)!;\n }\n return '';\n }\n\n ngOnInit(): void {\n this.router.events.pipe(takeUntilDestroyed(this.dr)).subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.value = this.resolveTabFromRoute();\n }\n });\n }\n\n ngOnChanges() {\n if (this.actions?.length > 0) {\n this.value = this.resolveTabFromRoute();\n }\n }\n\n onActionClick(event: any) {\n const opt = this.actions.find((i) => i.key === event.value);\n this.actionClick.emit({ action: opt });\n }\n}\n","<p-selectButton\n [attr.data-cy]=\"'table-tab-select-button'\"\n [options]=\"actions\"\n optionValue=\"key\"\n [(ngModel)]=\"value\"\n optionLabel=\"icon\"\n [unselectable]=\"true\"\n (onChange)=\"onActionClick($event)\"\n>\n <ng-template #item let-item>\n <span>\n {{ item.label | translate }}\n </span>\n <span>\n <p-badge\n *ngIf=\"item.badgeCount\"\n [value]=\"item.badgeCount\"\n severity=\"danger\"\n badgeSize=\"small\"\n />\n </span>\n </ng-template>\n</p-selectButton>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isSelected',\n standalone: true,\n})\nexport class IsSelectedPipe implements PipeTransform {\n transform(item: any, selectedColumns: any[]): boolean {\n return selectedColumns.some(\n selectedItem => selectedItem.field == item.field,\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n EventEmitter,\n Input,\n Output,\n SimpleChanges,\n ViewChild,\n OnChanges,\n inject,\n} from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime, map } from 'rxjs';\n\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { ButtonModule } from 'primeng/button';\nimport { SelectModule } from 'primeng/select';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { ListboxModule } from 'primeng/listbox';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { OverlayBadgeModule } from 'primeng/overlaybadge';\nimport { RippleModule } from 'primeng/ripple';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { PhoenixDataTableActionComponent } from '../phoenix-data-table-action/phoenix-data-table-action.component';\nimport { PhoenixDataTableTabsComponent } from '../phoenix-data-table-tabs/phoenix-data-table-tabs.component';\n\nimport { TableColumn } from '../utils/dataTable.interface';\nimport { IsSelectedPipe } from '../table/isSelected.pipe';\n\ntype FilterType =\n | 'text'\n | 'dropdown'\n | 'multiselect'\n | 'checkbox'\n | 'person-dropdown'\n | 'boolean-multiselect';\n\n/**\n * Filter definition used by table caption.\n *\n * IMPORTANT: Backward compatible:\n * - You can still pass: [{ key: 'entityName', label: 'LABELS.ENTITY_NAME' }]\n * - In that case it will become type='text' by default.\n */\nexport type CaptionFilter = {\n key: string;\n label: string;\n\n // optional (new)\n type?: FilterType;\n options?: any[];\n selected?: any;\n\n // optional UI\n isInCaption?: boolean;\n\n // optional mappings for PrimeNG options\n optionLabel?: string; // default: 'label'\n optionValue?: string; // default: 'key' (NOTE: boolean-multiselect uses OBJECT value in form)\n};\n\n@Component({\n selector: 'table-caption',\n standalone: true,\n imports: [\n CommonModule,\n PopoverModule,\n ButtonModule,\n SelectModule,\n MultiSelectModule,\n InputTextModule,\n FormsModule,\n ReactiveFormsModule,\n InputIconModule,\n IconFieldModule,\n ListboxModule,\n CheckboxModule,\n OverlayBadgeModule,\n RippleModule,\n FloatLabelModule,\n TranslateModule,\n PhoenixDataTableActionComponent,\n PhoenixDataTableTabsComponent,\n IsSelectedPipe,\n ],\n templateUrl: './table-caption.component.html',\n styleUrl: './table-caption.component.css',\n})\nexport class TableCaptionComponent implements OnChanges {\n @ViewChild('filtersPopover') filtersPopover?: Popover;\n @ViewChild('columnsPopover') columnsPopover?: Popover;\n\n /** Table config (key, UI toggles, global actions, tabs, etc.) */\n @Input() tableConfiguration!: any;\n\n /** Available columns for \"Columns\" popover */\n @Input() columns: TableColumn[] = [];\n\n /** Selected items (for bulk actions, only passed through) */\n @Input() selectedItems: any[] = [];\n\n /**\n * Filters config (backward compatible):\n * - old style: [{ key, label }]\n * - new style: [{ key, label, type, options, isInCaption, ... }]\n */\n @Input() filters: CaptionFilter[] = [];\n\n /** Emits normalized filter values (no nulls/empties) */\n @Output() applyFiltersEvent = new EventEmitter<Record<string, any>>();\n\n /** Emits selected column field keys (string[]) */\n @Output() applyColumnsEvent = new EventEmitter<string[]>();\n\n /** Emits global search input changes */\n @Output() searchChange = new EventEmitter<string>();\n\n /** Emits action clicks from tabs/global/more area */\n @Output() actionClick = new EventEmitter<any>();\n\n private fb = inject(FormBuilder);\n private dr = inject(DestroyRef);\n translate = inject(TranslateService);\n\n /** Reactive form built from filters[] */\n filtersForm: FormGroup = this.fb.group({});\n\n /** Columns currently visible (kept in original order) */\n _selectedColumns: TableColumn[] = [];\n\n get columnsChanged(): boolean {\n return (this.columns?.length ?? 0) !== (this._selectedColumns?.length ?? 0);\n }\n\n /** Local storage keys */\n private FILTER_KEY = '';\n private COLUMN_KEY = '';\n\n /**\n * Internal signature to avoid rebuilding form on every ngOnChanges.\n * We rebuild only if:\n * - table key changes OR\n * - set/order of filter keys changes\n */\n private lastSignature = '';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.tableConfiguration) return;\n\n this.FILTER_KEY = `filters_${this.tableConfiguration.key ?? 'table'}`;\n this.COLUMN_KEY = `columns_${this.tableConfiguration.key ?? 'table'}`;\n\n // Default visible columns: all non-hidden columns\n this._selectedColumns = (this.columns ?? []).filter((c: any) => !c?.hidden);\n\n // Restore columns once when config/columns arrive\n if (this.tableConfiguration?.hasColumns) {\n this.restoreColumnState();\n } else {\n this.emitColumns(this._selectedColumns);\n }\n\n // Normalize filters (backward compatible) before building form\n const normalizedFilters = this.normalizeFilters(this.filters);\n\n const signature = this.buildSignature(this.tableConfiguration.key, normalizedFilters);\n if (signature !== this.lastSignature) {\n this.lastSignature = signature;\n this.buildFiltersForm(normalizedFilters);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Filters form (performance-focused)\n // ---------------------------------------------------------------------------\n\n /**\n * Build reactive form only when signature changes.\n * Subscribes once, emits debounced normalized payload.\n */\n private buildFiltersForm(filtersCfg: CaptionFilter[]): void {\n const fg = this.fb.group({});\n\n for (const f of filtersCfg) {\n const t = f.type ?? 'text';\n\n /**\n * Important:\n * - For boolean-multiselect we keep SELECTED VALUES AS OPTION OBJECTS\n * (PrimeNG is much more stable with object model here than with boolean primitives),\n * but outgoing payload will still be boolean[].\n */\n const initialValue =\n t === 'boolean-multiselect'\n ? this.normalizeBooleanMultiSelection(f.selected, f)\n : t === 'multiselect'\n ? this.normalizeMultiInitial(f.selected)\n : t === 'checkbox'\n ? !!f.selected\n : f.selected ?? '';\n\n fg.addControl(f.key, this.fb.control(initialValue));\n }\n\n this.filtersForm = fg;\n\n // 1) Restore persisted values (but only valid keys)\n this.restoreFilterState(filtersCfg);\n\n // 2) Subscribe once with debounce and emit normalized payload\n this.filtersForm.valueChanges\n .pipe(\n takeUntilDestroyed(this.dr),\n debounceTime(120),\n map((raw) => this.normalizeOutgoingPayload(raw, filtersCfg))\n )\n .subscribe((payload) => {\n this.applyFiltersEvent.emit(payload);\n this.persistState(payload, this.FILTER_KEY);\n });\n\n // 3) Emit initial state (normalized) once\n queueMicrotask(() => {\n const raw = this.filtersForm.getRawValue();\n const payload = this.normalizeOutgoingPayload(raw, filtersCfg);\n this.applyFiltersEvent.emit(payload);\n this.persistState(payload, this.FILTER_KEY);\n });\n }\n\n /**\n * Normalize filters to be fully usable even if user passes [{key,label}] only.\n * Rule:\n * - If no type: treat as 'text'\n * - If options exist: treat as 'dropdown' (single) unless explicitly multiselect\n */\n private normalizeFilters(filters: CaptionFilter[]): CaptionFilter[] {\n const arr = Array.isArray(filters) ? filters : [];\n\n return arr.map((f) => {\n const hasOptions = Array.isArray(f.options) && f.options.length > 0;\n\n // Backward compatibility:\n // - old style: {key,label} => text input\n // - if options exist but no type => dropdown\n const type: FilterType = f.type ?? (hasOptions ? 'dropdown' : 'text');\n\n return {\n ...f,\n type,\n optionLabel: f.optionLabel ?? 'label',\n optionValue: f.optionValue ?? 'key',\n };\n });\n }\n\n private buildSignature(tableKey: any, filtersCfg: CaptionFilter[]): string {\n const keys = (filtersCfg ?? []).map((f) => f.key).join('|');\n return `${tableKey ?? 'table'}::${keys}`;\n }\n\n private normalizeMultiInitial(selected: any): any[] {\n if (selected == null) return [];\n return Array.isArray(selected) ? selected : [selected];\n }\n\n // ---------------------------------------------------------------------------\n // boolean-multiselect helpers (UI value = option objects, output = boolean[])\n // ---------------------------------------------------------------------------\n\n private coerceBool(x: any): boolean | null {\n if (typeof x === 'boolean') return x;\n if (typeof x === 'string') {\n if (x === 'true') return true;\n if (x === 'false') return false;\n }\n return null;\n }\n\n /**\n * Returns array of OPTION OBJECTS that match selected booleans.\n * Accepts selected coming as:\n * - boolean | boolean[]\n * - 'true'/'false' | string[]\n * - option object(s) (already from UI)\n */\n private normalizeBooleanMultiSelection(value: any, cfg: CaptionFilter): any[] {\n const options = Array.isArray(cfg.options) ? cfg.options : [];\n\n // If UI already provides objects, keep them (PrimeNG uses them to render labels/checks)\n if (Array.isArray(value) && value.length && typeof value[0] === 'object') {\n return value;\n }\n\n const arr = Array.isArray(value) ? value : value == null ? [] : [value];\n\n const bools = arr\n .map((v) => this.coerceBool(v))\n .filter((v): v is boolean => v !== null);\n\n const ov = cfg.optionValue ?? 'key';\n return bools\n .map((b) => options.find((o) => this.coerceBool(o?.[ov]) === b))\n .filter(Boolean);\n }\n\n private extractBooleanArrayFromUiValue(value: any, cfg: CaptionFilter): boolean[] {\n const ov = cfg.optionValue ?? 'key';\n const arr = Array.isArray(value) ? value : value == null ? [] : [value];\n\n const bools = arr\n .map((x) => {\n // UI sends option objects (preferred)\n if (x && typeof x === 'object') return this.coerceBool(x?.[ov]);\n // fallback if primitives ever come through\n return this.coerceBool(x);\n })\n .filter((x): x is boolean => x !== null);\n\n return bools;\n }\n\n // ---------------------------------------------------------------------------\n // Payload normalization\n // ---------------------------------------------------------------------------\n\n /**\n * Emit only meaningful values:\n * - text: '' removed\n * - dropdown: '' / null removed\n * - multiselect: [] removed\n * - boolean-multiselect: boolean[] removed if empty (UI stores option objects)\n * - checkbox: included only if true\n */\n private normalizeOutgoingPayload(raw: any, cfg: CaptionFilter[]): Record<string, any> {\n const out: Record<string, any> = {};\n const mapCfg = new Map(cfg.map((f) => [f.key, f]));\n\n for (const key of Object.keys(raw ?? {})) {\n const f = mapCfg.get(key);\n if (!f) continue;\n\n const t = f.type ?? 'text';\n const v = raw[key];\n\n if (t === 'boolean-multiselect') {\n const bools = this.extractBooleanArrayFromUiValue(v, f);\n if (bools.length) out[key] = bools; \n continue;\n }\n\n if (t === 'multiselect') {\n const arr = Array.isArray(v) ? v.filter((x) => x != null && x !== '') : [];\n if (arr.length) out[key] = arr;\n continue;\n }\n\n if (t === 'checkbox') {\n if (!!v) out[key] = true;\n continue;\n }\n\n // dropdown or text:\n if (v != null && v !== '') out[key] = v;\n }\n\n return out;\n }\n\n /**\n * Restore persisted filters from localStorage.\n * We patchValue with emitEvent:false to avoid double emission.\n *\n * NOTE:\n * - boolean-multiselect is restored into OPTION OBJECTS (for UI),\n * even though persisted payload is boolean[].\n */\n private restoreFilterState(cfg: CaptionFilter[]): void {\n const stored = localStorage.getItem(this.FILTER_KEY);\n if (!stored) return;\n\n try {\n const parsed = JSON.parse(stored);\n if (!parsed || typeof parsed !== 'object') return;\n\n const known = new Set(cfg.map((f) => f.key));\n const patch: any = {};\n for (const k of Object.keys(parsed)) {\n if (known.has(k)) patch[k] = parsed[k];\n }\n\n for (const f of cfg) {\n const t = f.type ?? 'text';\n\n if (t === 'boolean-multiselect') {\n // parsed payload is boolean[]; map -> option objects\n patch[f.key] = this.normalizeBooleanMultiSelection(patch[f.key], f);\n continue;\n }\n\n if (t === 'multiselect') {\n const val = patch[f.key];\n if (val == null) patch[f.key] = [];\n else if (!Array.isArray(val)) patch[f.key] = [val];\n continue;\n }\n\n if (t === 'checkbox') {\n patch[f.key] = !!patch[f.key];\n continue;\n }\n }\n\n this.filtersForm.patchValue(patch, { emitEvent: false });\n } catch {\n // ignore invalid state\n }\n }\n\n // ---------------------------------------------------------------------------\n // Columns\n // ---------------------------------------------------------------------------\n\n onColumnSelectionChange(newSelection: TableColumn[]): void {\n this.selectedColumns = newSelection;\n this.applyColumns();\n }\n\n /** Keep selection in original column order (stable UX) */\n get selectedColumns(): TableColumn[] {\n return this._selectedColumns;\n }\n set selectedColumns(val: TableColumn[]) {\n const wanted = new Set((val ?? []).map((v) => v.field));\n this._selectedColumns = (this.columns ?? []).filter((c) => wanted.has(c.field));\n }\n\n applyColumns(): void {\n this.emitColumns(this._selectedColumns);\n this.persistState(this._selectedColumns, this.COLUMN_KEY);\n }\n\n resetColumns(): void {\n this._selectedColumns = [...(this.columns ?? [])];\n this.applyColumns();\n }\n\n private emitColumns(cols: TableColumn[]): void {\n this.applyColumnsEvent.emit((cols ?? []).map((c) => c.field));\n }\n\n private restoreColumnState(): void {\n const stored = localStorage.getItem(this.COLUMN_KEY);\n if (!stored) {\n this.emitColumns(this._selectedColumns);\n return;\n }\n\n try {\n const parsed = JSON.parse(stored);\n if (!Array.isArray(parsed)) {\n this.emitColumns(this._selectedColumns);\n return;\n }\n\n const valid = parsed.filter((sc: any) =>\n (this.columns ?? []).some((c) => c.field === sc.field)\n );\n if (!valid.length) {\n this.emitColumns(this._selectedColumns);\n return;\n }\n\n this.selectedColumns = valid;\n this.emitColumns(this._selectedColumns);\n } catch {\n this.emitColumns(this._selectedColumns);\n }\n }\n\n // ---------------------------------------------------------------------------\n // UI actions\n // ---------------------------------------------------------------------------\n\n emitSearch(query: string): void {\n this.searchChange.emit(query ?? '');\n }\n\n handleActionClick(actionPayload: any): void {\n this.actionClick.emit(actionPayload);\n }\n\n // ---------------------------------------------------------------------------\n // Utilities\n // ---------------------------------------------------------------------------\n\n hasFormValues(): boolean {\n const v = this.filtersForm?.value ?? {};\n return Object.values(v).some((x) => {\n if (x == null || x === '') return false;\n if (Array.isArray(x)) return x.length > 0;\n if (typeof x === 'object') return Object.keys(x).length > 0;\n return true;\n });\n }\n\n clearSelectFilter(key: string): void {\n this.filtersForm.get(key)?.setValue([], { emitEvent: true });\n }\n\n resetFilters(): void {\n this.filtersForm.reset({}, { emitEvent: true });\n localStorage.removeItem(this.FILTER_KEY);\n this.filtersPopover?.hide();\n }\n\n private persistState(state: any, key: string): void {\n const isEmpty =\n state == null ||\n (Array.isArray(state) && state.length === 0) ||\n (typeof state === 'object' && !Array.isArray(state) && Object.keys(state).length === 0);\n\n if (isEmpty) localStorage.removeItem(key);\n else localStorage.setItem(key, JSON.stringify(state));\n }\n\n getOptionLabelField(control: CaptionFilter): string {\n return (control?.optionLabel ?? 'label') as string;\n }\n\n getSelectedLabels(value: any, control: CaptionFilter): string {\n const arr = Array.isArray(value) ? value : [];\n const labelField = this.getOptionLabelField(control);\n\n return arr\n .map((x) => (x && typeof x === 'object' ? x[labelField] : String(x ?? '')))\n .filter((s) => !!s)\n .join(', ');\n }\n}","<div class=\"flex justify-content-between border-bottom-1 border-300 p-2\">\n <!-- Left: Tabs + Global actions -->\n <div class=\"flex align-items-center gap-2\">\n <phoenix-data-table-tabs\n [attr.data-cy]=\"'table-select-button-' + (tableConfiguration?.tabs?.key ?? 'tabs')\"\n [actions]=\"tableConfiguration?.tabs\"\n (actionClick)=\"actionClick.emit($event)\"\n />\n\n @for (action of (tableConfiguration?.globalActions ?? []); track action?.key ?? $index) {\n <phoenix-data-table-action\n [actionConfig]=\"action\"\n (actionClick)=\"actionClick.emit($event)\"\n />\n }\n </div>\n\n <!-- Right: caption filters + icons + search + more -->\n <div class=\"flex align-items-center gap-2\">\n <!-- Filters in caption row -->\n @for (control of (filters ?? []); track control.key) {\n @if (control.isInCaption) {\n @switch (control.type ?? (control.options?.length ? 'dropdown' : 'text')) {\n @case ('dropdown') {\n <p-select\n class=\"w-12rem\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [optionValue]=\"control.optionValue ?? 'key'\"\n [formControl]=\"$any(filtersForm.get(control.key))\"\n [showClear]=\"true\"\n placeholder=\"{{ control.label | translate }}\"\n (onClear)=\"filtersForm.get(control.key)?.setValue('')\"\n />\n }\n\n @case ('multiselect') {\n <p-multiselect\n class=\"w-12rem\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [optionValue]=\"control.optionValue ?? 'key'\"\n [formControl]=\"$any(filtersForm.get(control.key))\"\n [showClear]=\"true\"\n placeholder=\"{{ control.label | translate }}\"\n (onClear)=\"clearSelectFilter(control.key)\"\n />\n }\n\n @case ('boolean-multiselect') {\n <p-multiselect\n class=\"w-12rem\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [formControl]=\"$any(filtersForm.get(control.key))\"\n [showClear]=\"true\"\n placeholder=\"{{ control.label | translate }}\"\n (onClear)=\"clearSelectFilter(control.key)\"\n >\n <ng-template pTemplate=\"selectedItems\" let-value>\n @if ((value?.length ?? 0) === 0) {\n <span class=\"p-2 text-500\">{{ control.label | translate }}</span>\n } @else {\n <span class=\"p-2\">{{ getSelectedLabels(value, control) }}</span>\n }\n </ng-template>\n\n <ng-template pTemplate=\"item\" let-item>\n <span>{{ item?.[control.optionLabel ?? 'label'] }}</span>\n </ng-template>\n </p-multiselect>\n }\n\n @case ('checkbox') {\n <p-checkbox binary=\"true\" [formControl]=\"$any(filtersForm.get(control.key))\" />\n }\n\n @default {\n <input\n class=\"w-12rem\"\n pInputText\n [formControl]=\"$any(filtersForm.get(control.key))\"\n placeholder=\"{{ control.label | translate }}\"\n />\n }\n }\n }\n }\n\n <!-- Filter icon -->\n @if (tableConfiguration?.hasFilter) {\n @if (hasFormValues()) {\n <p-overlaybadge class=\"p-2\" severity=\"danger\">\n <span pRipple class=\"cursor-pointer\" (click)=\"filtersPopover?.toggle($event)\">\n <i class=\"pi pi-filter\"></i>\n </span>\n </p-overlaybadge>\n } @else {\n <span pRipple class=\"cursor-pointer p-2\" (click)=\"filtersPopover?.toggle($event)\">\n <i class=\"pi pi-filter\"></i>\n </span>\n }\n }\n\n <!-- Columns icon -->\n @if (tableConfiguration?.hasColumns) {\n @if (columnsChanged) {\n <p-overlaybadge class=\"p-2\" severity=\"danger\">\n <span pRipple class=\"cursor-pointer\" (click)=\"columnsPopover?.toggle($event)\">\n <i class=\"pi pi-sliders-v\"></i>\n </span>\n </p-overlaybadge>\n } @else {\n <span pRipple class=\"cursor-pointer p-2\" (click)=\"columnsPopover?.toggle($event)\">\n <i class=\"pi pi-sliders-v\"></i>\n </span>\n }\n }\n\n <!-- Search + More -->\n <div class=\"flex\">\n @if (tableConfiguration?.hasSearch) {\n <p-iconfield>\n <p-inputicon styleClass=\"pi pi-search\" />\n <input\n type=\"text\"\n pInputText\n (input)=\"emitSearch($any($event.target).value)\"\n placeholder=\"{{ 'SEARCH_KEYWORD' | translate }}\"\n />\n </p-iconfield>\n }\n\n @if (tableConfiguration?.hasMore && tableConfiguration?.moreActions) {\n <phoenix-data-table-action\n [actionConfig]=\"tableConfiguration.moreActions\"\n (actionClick)=\"actionClick.emit($event)\"\n />\n }\n </div>\n </div>\n</div>\n\n<!-- Filters Popover -->\n<p-popover #filtersPopover>\n <div class=\"flex flex-column gap-3 w-25rem\">\n <div class=\"flex justify-content-between align-items-center\">\n <div class=\"text-lg font-bold\">{{ 'LABELS.FILTERS' | translate }}</div>\n <p-button\n icon=\"pi pi-refresh\"\n [text]=\"true\"\n label=\"{{ 'ACTION.CLEAR' | translate }}\"\n class=\"mr-2\"\n (click)=\"resetFilters()\"\n />\n </div>\n\n <form [formGroup]=\"filtersForm\">\n @for (control of (filters ?? []); track control.key) {\n @if (!control.isInCaption) {\n @switch (control.type ?? (control.options?.length ? 'dropdown' : 'text')) {\n @case ('checkbox') {\n <div class=\"mb-2\">\n <p-checkbox binary=\"true\" [formControlName]=\"control.key\" />\n <label class=\"ml-2\">{{ control.label | translate }}</label>\n </div>\n }\n\n @case ('dropdown') {\n <div class=\"mb-2\">\n <label class=\"mb-2 block\">{{ control.label | translate }}</label>\n <p-select\n class=\"w-full\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [optionValue]=\"control.optionValue ?? 'key'\"\n [showClear]=\"true\"\n [formControlName]=\"control.key\"\n (onClear)=\"filtersForm.get(control.key)?.setValue('')\"\n />\n </div>\n }\n\n @case ('multiselect') {\n <div class=\"mb-2\">\n <p-floatlabel variant=\"on\">\n <p-multiselect\n class=\"w-full\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [optionValue]=\"control.optionValue ?? 'key'\"\n [showClear]=\"true\"\n [formControlName]=\"control.key\"\n (onClear)=\"clearSelectFilter(control.key)\"\n />\n <label>{{ control.label | translate }}</label>\n </p-floatlabel>\n </div>\n }\n\n @case ('boolean-multiselect') {\n <div class=\"mb-2\">\n <p-floatlabel variant=\"on\">\n <p-multiselect\n class=\"w-full\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [showClear]=\"true\"\n [formControlName]=\"control.key\"\n (onClear)=\"clearSelectFilter(control.key)\"\n >\n <ng-template pTemplate=\"selectedItems\" let-value>\n @if ((value?.length ?? 0) === 0) {\n <span class=\"p-2 text-500\">{{ control.label | translate }}</span>\n } @else {\n <span class=\"p-2\">{{ getSelectedLabels(value, control) }}</span>\n }\n </ng-template>\n\n <ng-template pTemplate=\"item\" let-item>\n <span>{{ item?.[control.optionLabel ?? 'label'] }}</span>\n </ng-template>\n </p-multiselect>\n <label>{{ control.label | translate }}</label>\n </p-floatlabel>\n </div>\n }\n\n @default {\n <div class=\"mb-2\">\n <label class=\"mb-2 block\">{{ control.label | translate }}</label>\n <input\n class=\"w-full\"\n pInputText\n [formControlName]=\"control.key\"\n placeholder=\"{{ control.label | translate }}\"\n />\n </div>\n }\n }\n }\n }\n </form>\n </div>\n</p-popover>\n\n<!-- Columns Popover -->\n<p-popover #columnsPopover>\n <div class=\"flex flex-column gap-3 w-25rem\">\n <div class=\"flex justify-content-between align-items-center\">\n <div class=\"text-lg font-bold\">{{ 'LABELS.COLUMNS' | translate }}</div>\n <p-button\n icon=\"pi pi-eye\"\n [text]=\"true\"\n label=\"{{ 'ACTION.SHOW_ALL' | translate }}\"\n class=\"mr-2\"\n (click)=\"resetColumns()\"\n />\n </div>\n\n <p-listbox\n [options]=\"columns\"\n [ngModel]=\"_selectedColumns\"\n (ngModelChange)=\"onColumnSelectionChange($event)\"\n [multiple]=\"true\"\n [metaKeySelection]=\"false\"\n [listStyle]=\"{ 'max-height': '420px' }\"\n [attr.data-cy]=\"'table-list-box'\"\n >\n <ng-template pTemplate=\"item\" let-item>\n @if (item | isSelected : selectedColumns) {\n <i class=\"pi pi-eye\"></i>\n } @else {\n <i class=\"pi pi-eye-slash\"></i>\n }\n <span class=\"ml-2\">{{ item.header | translate }}</span>\n </ng-template>\n </p-listbox>\n </div>\n</p-popover>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isBoolean',\n standalone: true,\n pure: false,\n})\nexport class IsBooleanPipe implements PipeTransform {\n transform(value: string | null | undefined): any {\n return typeof value === 'boolean';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DatePipe } from '@angular/common';\n\n@Pipe({\n name: 'cell',\n standalone: true,\n pure: false,\n})\nexport class TableCellPipe implements PipeTransform {\n constructor(private datePipe: DatePipe) {}\n\n transform(obj: any, col: any, dateFormat: string = 'dd.MM.yyyy'): any {\n const value = this.getNestedValue(obj, col.field);\n if (!value) return '--';\n\n switch (col.columnType) {\n case 'DATE':\n return this.datePipe.transform(value, dateFormat);\n\n case 'DATE_COMPLEX':\n return this.datePipe.transform(value, dateFormat + ' | HH:mm');\n\n case 'RICH_TEXT':\n return value;\n\n case 'CUSTOM':\n return col.customRenderer ? col.customRenderer(value) : value;\n\n default:\n return value?.toString();\n }\n }\n\n getNestedValue(obj: any, path: string): string {\n if (!obj || !path) return '';\n\n let value: any;\n\n if (!path.includes('.')) {\n value = obj[path];\n } else {\n value = path.split('.').reduce((acc, part) => acc?.[part], obj);\n }\n\n return value != null ? value.toString() : '';\n }\n}\n","import * as XLSX from 'xlsx';\nimport { DatePipe } from '@angular/common';\n// @ts-ignore - pdfmake types may not be available\nimport pdfMake from 'pdfmake/build/pdfmake';\n// @ts-ignore - pdfmake vfs fonts\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\n/**\n * Defines a column that can be exported (visible in PDF/CSV).\n */\nexport interface ExportColumn {\n field: string; // Property name in row object (supports dot notation)\n header: string; // i18n key or plain text (will be translated via t())\n columnType?: string; // Column type (DATE, BOOLEAN, etc.), optional fallback\n}\n\n/* ----------------------------- Helpers ----------------------------- */\n\n/**\n * Safely retrieves nested object property using dot notation.\n * Example: \"user.address.city\" → row.user.address.city\n */\nfunction getNestedValue(obj: any, path: string): any {\n try {\n if (obj && Object.prototype.hasOwnProperty.call(obj, path)) {\n return obj[path]?.key ?? obj[path];\n }\n const keys = path.split('.');\n let current = obj;\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key];\n } else {\n return undefined;\n }\n }\n return current?.key ?? current;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Sanitizes text:\n * - Removes HTML tags\n * - Replaces &nbsp; and non-breaking spaces\n * - Normalizes Unicode (keeps German umlauts and Serbian letters)\n * - Removes emoji characters (since PDF fonts don't support them properly)\n */\nfunction sanitizeText(v: any): string {\n const s = (v ?? '').toString();\n const noHtml = s.replace(/<[^>]*>/g, '');\n\n // Remove emoji characters - they don't render properly in PDF\n // Emoji ranges: U+1F300–U+1F9FF, U+2600–U+26FF, U+2700–U+27BF, U+FE00–U+FE0F, U+1F900–U+1F9FF, U+1F1E0–U+1F1FF\n const emojiRegex =\n /[\\u{1F300}-\\u{1F9FF}\\u{2600}-\\u{26FF}\\u{2700}-\\u{27BF}\\u{FE00}-\\u{FE0F}\\u{1F900}-\\u{1F9FF}\\u{1F1E0}-\\u{1F1FF}]/gu;\n const noEmoji = noHtml.replace(emojiRegex, '');\n\n return noEmoji\n .replace(/&nbsp;/g, ' ')\n .replace(/\\u00A0/g, ' ')\n .normalize('NFKC')\n .trim();\n}\n\n/**\n * Checks if a CSV value must be quoted (contains delimiter, quotes or newlines).\n */\nfunction needsQuotesCSV(value: string, delimiter: string): boolean {\n const pattern = new RegExp(`[\\\"\\\\n${delimiter === ',' ? ',' : ';'}]`);\n return pattern.test(value);\n}\n\n/**\n * Formats a date value using Angular DatePipe and the provided locale.\n */\nfunction formatDateValue(val: any, pattern: string, locale: string): string {\n try {\n const d = new Date(val);\n if (!isNaN(d.getTime())) {\n const dp = new DatePipe(locale || 'en-US');\n return dp.transform(d, pattern) ?? '';\n }\n } catch {}\n return String(val ?? '');\n}\n\n/* ------------------------- Display resolver ------------------------ */\n\n/**\n * Converts raw row values into human-readable strings for export.\n * Handles various column types: DATE, LIST, BOOLEAN, etc.\n */\nfunction getDisplayValue(\n row: any,\n col: ExportColumn,\n columnTypeMap: Record<string, string>,\n columnTypeEnum: any,\n t?: (k: string) => string,\n locale: string = 'en-US',\n): string {\n const field = col.field;\n const type = columnTypeMap[field] || col.columnType;\n const val = getNestedValue(row, field);\n\n if (val === null || val === undefined) return '';\n\n switch (type) {\n case columnTypeEnum.DATE:\n return formatDateValue(val, 'dd.MM.yyyy HH:mm', locale);\n\n case columnTypeEnum.DATE_WITHOUT_TIME:\n return formatDateValue(val, 'dd.MM.yyyy', locale);\n\n case columnTypeEnum.TAG:\n return (val?.name ?? val)?.toString();\n\n case columnTypeEnum.LIST_TAG:\n case columnTypeEnum.LIST:\n return Array.isArray(val)\n ? val.map((x: any) => x?.name ?? x).join(', ')\n : String(val);\n\n case columnTypeEnum.OBJ_TAG:\n return (val?.value ?? val)?.toString();\n\n case columnTypeEnum.BOOLEAN: {\n // Translate YES/NO if translation function is provided\n const yes = t ? t('ACTION.YES') : 'Yes';\n const no = t ? t('ACTION.NO') : 'No';\n return val === true || val === 'true' ? yes : no;\n }\n\n case columnTypeEnum.TEXT_AREA:\n case columnTypeEnum.TEXT:\n case columnTypeEnum.TIMEPERIOD:\n default:\n if (typeof val === 'object' && !Array.isArray(val)) {\n const prefer = val.name ?? val.label ?? val.value ?? val.key ?? '';\n return prefer ? String(prefer) : JSON.stringify(val);\n }\n return String(val);\n }\n}\n\n/* -------------------------- Export: PDF ---------------------------- */\n\nexport interface ExportOptions {\n locale?: string; // e.g. 'de-DE' for German date format\n delimiter?: ',' | ';'; // CSV delimiter (',' for EN, ';' for DE Excel)\n sheetName?: string; // Excel sheet name (default: 'Sheet1')\n autoWidth?: boolean; // Auto-adjust column widths (default: true)\n}\n\nfunction trimExcelLineBreaks(s: string): string {\n return s\n .replace(/^[\\r\\n]+/, '') // remove leading line breaks\n .replace(/[\\r\\n]+$/, '') // remove trailing line breaks\n .replace(/(\\r?\\n){2,}/g, '\\n'); // collapse multiple to a single\n}\n\nfunction collapseInlineSpaces(s: string): string {\n if (!s) return '';\n return s\n .replace(/\\u00A0/g, ' ')\n .replace(/[^\\S\\r\\n]+/g, ' ')\n .trim();\n}\n\n/**\n * Loads Noto Sans font from CDN for better emoji support\n */\nasync function loadNotoSansFont(): Promise<string | null> {\n try {\n // Noto Sans has better Unicode and emoji support than Roboto\n // Try jsDelivr CDN first (more reliable)\n const response = await fetch(\n 'https://cdn.jsdelivr.net/gh/google/fonts@main/ofl/notosans/NotoSans-Regular.ttf',\n );\n if (!response.ok) {\n return null;\n }\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n let binary = '';\n const chunkSize = 8192;\n for (let i = 0; i < bytes.length; i += chunkSize) {\n const chunk = bytes.subarray(i, i + chunkSize);\n binary += String.fromCharCode.apply(null, Array.from(chunk));\n }\n return btoa(binary);\n } catch (error) {\n console.warn('Failed to load Noto Sans font from CDN:', error);\n return null;\n }\n}\n\n/**\n * Exports table rows to a PDF file using pdfmake.\n * - Uses pdfmake which has excellent Unicode support for Serbian characters (ć, č, đ, š, ž)\n * - Respects only visible columns\n * - Translates headers with provided translation function\n * - Attempts to load Noto Sans font for better emoji support\n */\nexport async function exportRowsToPdf(\n columns: ExportColumn[],\n rows: any[],\n columnTypeMap: Record<string, string>,\n columnTypeEnum: any,\n t: (key: string) => string,\n fileName = 'table.pdf',\n options: ExportOptions = {},\n): Promise<void> {\n if (!columns?.length) return;\n\n const locale = options.locale || 'en-US';\n\n /* =========================\n HEADERS\n ========================= */\n const headers = columns.map((c) => sanitizeText(t(c.header)));\n\n /* =========================\n BODY ROWS\n ========================= */\n const bodyRows = (rows ?? []).map((row) =>\n columns.map((col) => {\n const type = columnTypeMap[col.field] || col.columnType;\n\n if (type === columnTypeEnum.LIST || type === columnTypeEnum.LIST_TAG) {\n const rawVal = getNestedValue(row, col.field);\n const items = Array.isArray(rawVal)\n ? rawVal.map((x: any) => x?.name ?? x)\n : String(\n getDisplayValue(\n row,\n col,\n columnTypeMap,\n columnTypeEnum,\n t,\n locale,\n ),\n ).split(/,\\s*/);\n\n const cleaned = items\n .map((it) => collapseInlineSpaces(String(it)))\n .filter(Boolean);\n\n return sanitizeText(cleaned.join(',\\n'));\n }\n\n const raw = String(\n getDisplayValue(row, col, columnTypeMap, columnTypeEnum, t, locale),\n );\n\n return sanitizeText(collapseInlineSpaces(raw));\n }),\n );\n\n /* =========================\n FONTS\n ========================= */\n if (pdfFonts && (pdfFonts as any).pdfMake) {\n (pdfMake as any).vfs = (pdfFonts as any).pdfMake.vfs;\n } else if (pdfFonts && (pdfFonts as any).vfs) {\n (pdfMake as any).vfs = (pdfFonts as any).vfs;\n } else {\n (pdfMake as any).vfs = (pdfFonts as any) || {};\n }\n\n try {\n const notoSansFont = await loadNotoSansFont();\n if (notoSansFont) {\n (pdfMake as any).fonts ??= {};\n (pdfMake as any).fonts.NotoSans = {\n normal: 'NotoSans-Regular.ttf',\n bold: 'NotoSans-Bold.ttf',\n italics: 'NotoSans-Italic.ttf',\n bolditalics: 'NotoSans-BoldItalic.ttf',\n };\n (pdfMake as any).vfs['NotoSans-Regular.ttf'] = notoSansFont;\n (pdfMake as any).vfs['NotoSans-Bold.ttf'] = notoSansFont;\n }\n } catch {\n console.warn('NotoSans not loaded, fallback to Roboto');\n }\n\n /* =========================\n FIXED TABLE WIDTH LOGIC\n ========================= */\n const fixedTableWidth = 750;\n const listColumnWidth = 80;\n const minColumnWidth = 40;\n\n const listIndexes: number[] = [];\n const regularIndexes: number[] = [];\n\n columns.forEach((col, i) => {\n const type = columnTypeMap[col.field] || col.columnType;\n if (type === columnTypeEnum.LIST || type === columnTypeEnum.LIST_TAG) {\n listIndexes.push(i);\n } else {\n regularIndexes.push(i);\n }\n });\n\n const reservedWidth = listIndexes.length * listColumnWidth;\n const availableWidth = fixedTableWidth - reservedWidth;\n\n const baseRegularWidth =\n regularIndexes.length > 0\n ? Math.max(minColumnWidth, availableWidth / regularIndexes.length)\n : minColumnWidth;\n\n let columnWidths = columns.map((_, i) =>\n listIndexes.includes(i) ? listColumnWidth : baseRegularWidth,\n );\n\n /* === NORMALIZACIJA (TAČNO 750px) === */\n const regularSum = regularIndexes.reduce(\n (sum, i) => sum + columnWidths[i],\n 0,\n );\n\n if (regularSum > 0) {\n const scaleFactor = availableWidth / regularSum;\n console.log(scaleFactor);\n // 1. skaliranje + floor\n regularIndexes.forEach((i) => {\n columnWidths[i] = Math.floor(columnWidths[i] * scaleFactor);\n });\n\n // 2. korekcija razlike (1px po koloni)\n let diff = fixedTableWidth - columnWidths.reduce((sum, w) => sum + w, 0);\n\n let idx = 0;\n while (diff !== 0 && regularIndexes.length) {\n const i = regularIndexes[idx % regularIndexes.length];\n columnWidths[i] += diff > 0 ? 1 : -1;\n diff += diff > 0 ? -1 : 1;\n idx++;\n }\n }\n\n /* =========================\n TABLE BODY\n ========================= */\n const tableBody = [\n headers.map((header) => ({\n text: header,\n style: 'tableHeader',\n })),\n ...bodyRows.map((row) =>\n row.map((cell) => ({\n text: cell || '',\n style: 'tableCell',\n noWrap: false,\n })),\n ),\n ];\n console.log(columnWidths);\n /* =========================\n PDF DEFINITION\n ========================= */\n const docDefinition: any = {\n pageOrientation: 'landscape',\n pageSize: 'A4',\n pageMargins: [25, 30, 15, 30],\n\n content: [\n {\n columns: [\n {\n width: fixedTableWidth,\n table: {\n headerRows: 1,\n widths: columnWidths,\n body: tableBody,\n },\n layout: {\n hLineWidth: () => 0,\n vLineWidth: () => 0,\n paddingLeft: () => 3,\n paddingRight: () => 3,\n paddingTop: () => 3,\n paddingBottom: () => 3,\n fillColor: (rowIndex: number) =>\n rowIndex === 0\n ? [41, 128, 186]\n : (rowIndex - 1) % 2 === 0\n ? '#f5f5f5'\n : null,\n },\n },\n ],\n },\n ],\n\n styles: {\n tableHeader: {\n fontSize: 11,\n bold: true,\n color: '#ffffff',\n margin: [0, 5, 0, 5],\n },\n tableCell: {\n fontSize: 9,\n margin: [0, 5, 0, 5],\n },\n },\n\n defaultStyle: {\n font: (pdfMake as any).fonts?.NotoSans ? 'NotoSans' : 'Roboto',\n },\n };\n\n pdfMake.createPdf(docDefinition).download(fileName);\n}\n\n/* -------------------------- Export: Excel -------------------------- */\n\n/**\n * Exports table rows to an Excel file (.xlsx).\n * - Includes only visible columns\n * - Translates headers via provided translation function\n * - Supports auto-width columns and custom sheet names\n * - Handles various data types including dates, booleans, and lists\n */\nexport function exportRowsToExcel(\n columns: ExportColumn[],\n rows: any[],\n columnTypeMap: Record<string, string>,\n columnTypeEnum: any,\n t: (key: string) => string,\n fileName = 'table.xlsx',\n options: ExportOptions = {},\n): void {\n if (!columns?.length) return;\n\n const locale = options.locale || 'en-US';\n const sheetName = options.sheetName || 'Sheet1';\n const autoWidth = options.autoWidth !== false; // default to true\n\n // Prepare headers\n const headers = columns.map((c) => sanitizeText(t(c.header)));\n\n // Prepare data rows\n const data = (rows ?? []).map((row) =>\n columns.map((col) => {\n const raw = getDisplayValue(\n row,\n col,\n columnTypeMap,\n columnTypeEnum,\n t,\n locale,\n );\n // Convert escaped \\n to real newline characters\n let fixedText =\n typeof raw === 'string' ? raw.replace(/\\\\n/g, '\\n') : String(raw);\n\n // Preserve newlines during sanitization by temporarily replacing them\n const tempMarker = '___NEWLINE___';\n const withMarker = fixedText.replace(/\\r?\\n/g, tempMarker);\n const sanitized = sanitizeText(withMarker);\n // Restore newlines after sanitization\n fixedText = sanitized.replace(new RegExp(tempMarker, 'g'), '\\n');\n\n return fixedText;\n }),\n );\n\n // Create worksheet data\n const worksheetData = [headers, ...data];\n\n // Create workbook and worksheet\n const workbook = XLSX.utils.book_new();\n const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);\n\n // --- ✅ FIX: Apply wrapText to all cells so newlines show in Excel\n for (const cellAddress in worksheet) {\n if (Object.prototype.hasOwnProperty.call(worksheet, cellAddress)) {\n if (cellAddress[0] === '!') continue; // skip metadata\n const cell = worksheet[cellAddress];\n if (!cell.s) cell.s = {};\n if (!cell.s.alignment) cell.s.alignment = {};\n cell.s.alignment.wrapText = true;\n }\n }\n\n // Auto-adjust column widths if enabled\n if (autoWidth) {\n const colWidths = columns.map((col, index) => {\n const maxLength = Math.max(\n headers[index]?.length || 0,\n ...data.map((row) => (row[index] || '').toString().length),\n );\n return { wch: Math.min(Math.max(maxLength + 2, 10), 50) }; // min 10, max 50\n });\n worksheet['!cols'] = colWidths;\n }\n\n // Add worksheet to workbook\n XLSX.utils.book_append_sheet(workbook, worksheet, sheetName);\n\n // Generate Excel file and trigger download\n XLSX.writeFile(workbook, fileName);\n}\n\n/* -------------------------- Export: CSV ---------------------------- */\n\n/**\n * Exports table rows to a CSV file.\n * - Includes only visible columns\n * - Translates headers via provided translation function\n * - Escapes quotes and adds UTF-8 BOM (so Excel reads special chars correctly)\n */\nexport function exportRowsToCsv(\n columns: ExportColumn[],\n rows: any[],\n columnTypeMap: Record<string, string>,\n columnTypeEnum: any,\n t: (key: string) => string,\n fileName = 'table.csv',\n options: ExportOptions = {},\n): void {\n if (!columns?.length) return;\n\n const locale = options.locale || 'en-US';\n const delimiter = options.delimiter || ',';\n\n const headers = columns.map((c) => sanitizeText(t(c.header)));\n const lines = (rows ?? []).map((row) =>\n columns\n .map((col) => {\n const raw = getDisplayValue(\n row,\n col,\n columnTypeMap,\n columnTypeEnum,\n t,\n locale,\n );\n // keep multiline, but remove useless blank line at start/end\n const v = trimExcelLineBreaks(sanitizeText(raw));\n const safe = v.replace(/\"/g, '\"\"'); // escape double quotes\n return needsQuotesCSV(v, delimiter) ? `\"${safe}\"` : safe;\n })\n .join(delimiter),\n );\n\n const csv = [headers.join(delimiter), ...lines].join('\\n');\n\n // Add UTF-8 BOM → Excel correctly recognizes UTF-8 (handles č, ć, š, đ, ž, ä, ö, ü, ß, etc.)\n const BOM = '\\uFEFF';\n const blob = new Blob([BOM + csv], { type: 'text/csv;charset=utf-8;' });\n\n const a = document.createElement('a');\n const url = URL.createObjectURL(blob);\n a.href = url;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n}\n\n/* --------------------------- File name ----------------------------- */\n\n/**\n * Builds a file name with pattern: tableKey_YYYY-MM-DD_HH-mm.ext\n * Example: risks_2025-09-10_14-32.xlsx\n */\nexport function buildFileName(baseKey: string, ext: string = 'xlsx'): string {\n const now = new Date();\n const yyyy = now.getFullYear();\n const MM = String(now.getMonth() + 1).padStart(2, '0');\n const dd = String(now.getDate()).padStart(2, '0');\n const hh = String(now.getHours()).padStart(2, '0');\n const mm = String(now.getMinutes()).padStart(2, '0');\n return `${baseKey}_${yyyy}-${MM}-${dd}_${hh}-${mm}.${ext}`;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n inject,\n signal,\n} from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { AvatarModule } from 'primeng/avatar';\nimport { BadgeModule } from 'primeng/badge';\nimport { ChipModule } from 'primeng/chip';\nimport { PanelModule } from 'primeng/panel';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { Table, TableModule } from 'primeng/table';\nimport { TagModule } from 'primeng/tag';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { PopoverModule } from 'primeng/popover';\n\nimport { TimePeriodPipe } from '../../../pipes/time-period.pipe';\nimport { InitialsPipe } from '../../../utils/initials.pipe';\nimport { PhoenixDataTableActionComponent } from '../phoenix-data-table-action/phoenix-data-table-action.component';\nimport { TableCaptionComponent } from '../table-caption/table-caption.component';\nimport {\n tableActionType,\n tableButtonContext,\n tableColumnType,\n tableSelectionType,\n} from '../utils/dataTable.enum';\nimport { IsBooleanPipe } from '../utils/is-boolean.pipe';\nimport { TableCellPipe } from '../utils/table-cell.pipe';\nimport {\n buildFileName,\n exportRowsToExcel,\n exportRowsToPdf,\n} from '../utils/table.utils';\nimport {\n InitialSortMeta,\n SortOrder,\n TableAction,\n TableConfiguration,\n} from '../utils/dataTable.interface';\n\n/**\n * Default \"More\" dropdown actions used when tableConfiguration.moreActions is missing.\n * Keeps behavior consistent across tables.\n */\nconst DEFAULT_MORE_ACTIONS: TableAction = {\n context: tableButtonContext.MORE,\n type: tableActionType.MENU,\n buttonType: 'multiselect',\n label: '',\n items: [\n { key: 'EXPORT_PDF', label: 'ACTION.EXPORT_PDF', icon: 'pi pi-file-pdf' },\n {\n key: 'EXPORT_EXCEL',\n label: 'ACTION.EXPORT_EXCEL',\n icon: 'pi pi-file-excel',\n },\n ],\n};\n\nexport type SortMeta = { field: string; order: 1 | -1 };\nexport type ColumnTypeMap = Record<string, string>;\nexport interface SortRequest {\n reqId: number;\n data: any[];\n multiSortMeta: SortMeta[];\n columnTypeMap: ColumnTypeMap;\n dateTypeKey?: string; // e.g. 'DATE'\n}\n\nexport interface SortResponse {\n reqId: number;\n sorted: any[];\n}\n@Component({\n selector: 'phoenix-table',\n standalone: true,\n imports: [\n CommonModule,\n TableModule,\n TableCaptionComponent,\n TranslateModule,\n PhoenixDataTableActionComponent,\n TagModule,\n AvatarModule,\n TooltipModule,\n TableCellPipe,\n SkeletonModule,\n PanelModule,\n PopoverModule,\n ChipModule,\n InitialsPipe,\n TimePeriodPipe,\n IsBooleanPipe,\n BadgeModule,\n ],\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.css'],\n})\nexport class TableComponent implements OnChanges, OnDestroy {\n /** PrimeNG Table reference (used for sort meta + virtual scroll helpers). */\n @ViewChild('dt') dt!: Table;\n\n translateService = inject(TranslateService);\n private cdr = inject(ChangeDetectorRef);\n\n // ============================================================\n // DATASETS\n // ============================================================\n /**\n * originalData:\n * The raw dataset received through @Input() set data().\n * We never mutate this array; it is the \"source of truth\".\n */\n originalData: any[] = [];\n\n /**\n * allData:\n * The dataset after applying filters and global search.\n * This is the \"base dataset\" that sorting runs on.\n */\n allData: any[] = [];\n\n /**\n * tableData:\n * The final dataset rendered by the table.\n * IMPORTANT: This is still the full array; PrimeNG virtual scroll renders only visible rows.\n */\n tableData: any[] = [];\n\n /** Total record count shown (used in footer and table metadata). */\n totalRecords = 0;\n\n // ============================================================\n // SELECTION / COLUMNS\n // ============================================================\n /** Selected rows (signal so UI updates fast). */\n selectedItems = signal<any[]>([]);\n\n /** Currently visible columns (based on table-caption selection). */\n selectedColumns: any[] = [];\n\n searchQuery = '';\n bulkMode = false;\n\n selectionTypeEnum = tableSelectionType;\n columnTypeEnum = tableColumnType;\n\n /** Latest active filters coming from table-caption. */\n private currentFilters: Record<string, any> = {};\n\n /**\n * columnTypeMap:\n * field -> columnType (DATE/BOOLEAN/TEXT/etc).\n * The sort worker uses this to normalize values correctly (e.g., DATE parsing, BOOLEAN 0/1).\n */\n columnTypeMap: Record<string, string> = {};\n\n dateFormat = 'dd.MM.yyyy';\n\n // ============================================================\n // INPUTS\n // ============================================================\n @Input() columns: any[] = [];\n @Input() selectedColumnsInput: any[] = [];\n @Input() tableConfiguration!: TableConfiguration;\n @Input() filters: any;\n\n // ============================================================\n // OUTPUTS\n // ============================================================\n @Output() actionClick = new EventEmitter<any>();\n @Output() rowSelection = new EventEmitter<any>();\n @Output() checkBoxSelection = new EventEmitter<any>();\n @Output() saveColumns = new EventEmitter<string[]>();\n\n // ============================================================\n // WORKER SORT (OFF-MAIN THREAD)\n // ============================================================\n private sortWorker: Worker | null = null;\n\n /**\n * reqId counters ensure we can ignore outdated results\n * if user triggers multiple sorts quickly.\n */\n private workerReqId = 0;\n private latestWorkerReqId = 0;\n\n /**\n * lastSortKey prevents re-sorting when PrimeNG emits same multiSortMeta repeatedly.\n */\n private lastSortKey = '';\n\n /** Ensures initial sort runs only once per dataset/config change */\n private initialSortApplied = false;\n\n /** Remembers which field was used last time for initial sort (optional safety) */\n private initialSortFieldApplied: string | null = null;\n\n /** True while initial sort is running to avoid \"flash\" of unsorted data */\n initialSortLoading = false;\n\n // /** How many skeleton rows to render while initial sort/data is loading */\n // skeletonRowCount = 8;\n\n // /** Array used by Angular @for (must be iterable) */\n // skeletonRows = Array.from({ length: this.skeletonRowCount });\n\n private createSortWorkerInline(): Worker {\n const code = `\n const compareStringsNatural = (a,b) => a.localeCompare(b, undefined, { numeric:true, sensitivity:'base' });\n\n const getNestedValue = (obj, path) => {\n try {\n if (!obj || !path) return undefined;\n if (Object.prototype.hasOwnProperty.call(obj, path)) {\n const v = obj[path];\n return (v && v.key !== undefined) ? v.key : v;\n }\n return path.split('.').reduce((acc, k) => (acc == null ? undefined : acc[k]), obj);\n } catch { return undefined; }\n };\n\n const getComparableValue = (val, field, columnTypeMap, dateTypeKey='DATE') => {\n if (val === null || val === undefined) return '';\n const columnType = columnTypeMap?.[field];\n\n if ((columnType || '').toString().toUpperCase() === 'BOOLEAN') {\n if (typeof val === 'boolean') return val ? 1 : 0;\n if (typeof val === 'number') return val ? 1 : 0;\n if (typeof val === 'string') {\n const s = val.trim().toLowerCase();\n if (['true','1','yes'].includes(s)) return 1;\n if (['false','0','no'].includes(s)) return 0;\n return '';\n }\n if (typeof val === 'object') {\n const v = val.value ?? val.key ?? val.enabled ?? val.checked;\n return getComparableValue(v, field, columnTypeMap, dateTypeKey);\n }\n return '';\n }\n\n if (typeof val === 'number') return val;\n\n if (typeof val === 'string') {\n if (columnType === dateTypeKey) {\n const t = Date.parse(val);\n return Number.isNaN(t) ? val.toLowerCase() : t;\n }\n return val.toLowerCase();\n }\n\n if (val instanceof Date) return val.getTime();\n\n if (typeof val === 'object') {\n if (val.from && val.to) {\n const from = Date.parse(val.from);\n const to = Date.parse(val.to);\n return (Number.isNaN(from) || Number.isNaN(to)) ? '' : (from + to);\n }\n if (Array.isArray(val) && val.length) return getComparableValue(val[0], field, columnTypeMap, dateTypeKey);\n\n for (const k of ['name','value','label','key','date']) {\n if (val[k] !== undefined && val[k] !== null) return getComparableValue(val[k], field, columnTypeMap, dateTypeKey);\n }\n for (const v of Object.values(val)) {\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n return getComparableValue(v, field, columnTypeMap, dateTypeKey);\n }\n }\n }\n return '';\n };\n\n const sortData = (data, meta, columnTypeMap, dateTypeKey='DATE') => {\n const sorted = (data || []).slice();\n if (!meta?.length) return sorted;\n\n sorted.sort((a,b) => {\n for (const s of meta) {\n const field = s.field;\n const order = s.order ?? 1;\n\n const A = getComparableValue(getNestedValue(a, field), field, columnTypeMap, dateTypeKey);\n const B = getComparableValue(getNestedValue(b, field), field, columnTypeMap, dateTypeKey);\n\n if (typeof A === 'string' && typeof B === 'string') {\n const c = compareStringsNatural(A,B);\n if (c !== 0) return c * order;\n } else {\n if (A < B) return -1 * order;\n if (A > B) return 1 * order;\n }\n }\n return 0;\n });\n\n return sorted;\n };\n\n self.addEventListener('message', (ev) => {\n const data = ev.data || {};\n const sorted = sortData(data.data, data.multiSortMeta, data.columnTypeMap, data.dateTypeKey || 'DATE');\n self.postMessage({ reqId: data.reqId, sorted });\n });\n `;\n\n const blob = new Blob([code], { type: 'text/javascript' });\n const url = URL.createObjectURL(blob);\n return new Worker(url); // classic worker, nema module MIME problema\n }\n\n constructor() {\n /**\n * Create sorting worker if supported.\n * Fallback is synchronous sort (still works, but can freeze on huge arrays).\n */\n if (typeof Worker !== 'undefined') {\n this.sortWorker = this.createSortWorkerInline();\n\n this.sortWorker.onmessage = (e: MessageEvent<SortResponse>) => {\n const { reqId, sorted } = e.data ?? ({} as any);\n if (reqId !== this.latestWorkerReqId) return;\n\n this.tableData = Array.isArray(sorted) ? sorted : [];\n this.totalRecords = this.tableData.length;\n\n // initial sort done → stop loading\n this.initialSortLoading = false;\n\n try {\n this.dt?.scrollToVirtualIndex?.(0);\n } catch {}\n this.cdr.markForCheck();\n };\n\n this.sortWorker.onerror = (err) =>\n console.error('Sort worker error:', err);\n }\n }\n\n ngOnDestroy(): void {\n this.sortWorker?.terminate();\n this.sortWorker = null;\n }\n\n // ============================================================\n // DATA INPUT\n // ============================================================\n /**\n * Whenever parent sets data, we reset base datasets and invalidate sort cache.\n */\n @Input() set data(value: any[]) {\n this.originalData = value ?? [];\n this.allData = [...this.originalData];\n\n this.lastSortKey = '';\n\n // allow re-applying initial sort for new dataset\n this.initialSortApplied = false;\n this.initialSortFieldApplied = null;\n\n // Do NOT immediately render unsorted data.\n // We'll render after initial sort finishes (or immediately if no sort will run).\n this.tableData = [];\n this.totalRecords = this.allData.length;\n\n // show loading only if we expect initial sort\n this.initialSortLoading = true;\n\n this.cdr.markForCheck();\n\n // try to run initial sort ASAP (if columns are already present)\n this.applyInitialSortIfNeeded();\n }\n\n // ============================================================\n // CONFIG / COLUMNS CHANGES\n // ============================================================\n ngOnChanges(changes: SimpleChanges): void {\n // clear selection on inputs update (safe default behavior)\n this.selectedItems.set([]);\n\n // Build columnTypeMap for sorting normalization\n if (this.columns?.length > 0) {\n this.columnTypeMap = {};\n for (const col of this.columns)\n this.columnTypeMap[col.field] = col.columnType;\n\n const nextSelected = this.selectedColumnsInput?.length\n ? this.selectedColumnsInput\n : this.columns;\n\n // microtask to avoid change detection timing issues\n Promise.resolve().then(() => {\n this.selectedColumns = [...nextSelected];\n this.cdr.markForCheck();\n\n // run initial sort after columns are ready\n this.applyInitialSortIfNeeded();\n });\n }\n\n // Ensure \"more actions\" exist\n if (!this.tableConfiguration?.moreActions) {\n const cfg = this.tableConfiguration;\n Promise.resolve().then(() => {\n this.tableConfiguration = { ...cfg, moreActions: DEFAULT_MORE_ACTIONS };\n this.cdr.markForCheck();\n });\n }\n }\n\n // ============================================================\n // PRIME CUSTOM SORT (WORKER)\n // ============================================================\n /**\n * PrimeNG calls this when sorting changes.\n * We run worker sort only when meta changes.\n */\n onCustomSort(event: any) {\n const meta = (event.multiSortMeta ?? []) as any[];\n const sortKey = JSON.stringify(meta ?? []);\n\n // If sort is removed -> return to base dataset (filtered/searched)\n if (!meta.length) {\n this.tableData = this.allData;\n this.totalRecords = this.tableData.length;\n this.lastSortKey = '';\n this.cdr.markForCheck();\n return;\n }\n\n // Avoid re-sorting if meta didn't change\n if (sortKey === this.lastSortKey) return;\n this.lastSortKey = sortKey;\n\n this.runWorkerSort(meta);\n }\n\n /**\n * Dispatches sort request to the worker (or sync fallback).\n */\n private runWorkerSort(multiSortMeta: any[]) {\n if (!this.sortWorker) {\n this.tableData = this.sortSync(this.allData, multiSortMeta);\n this.totalRecords = this.tableData.length;\n this.initialSortLoading = false;\n this.cdr.markForCheck();\n return;\n }\n\n const meta: SortMeta[] = (multiSortMeta ?? [])\n .filter((m: any) => !!m?.field)\n .map((m: any) => ({ field: m.field, order: (m.order ?? 1) as 1 | -1 }));\n\n const reqId = ++this.workerReqId;\n this.latestWorkerReqId = reqId;\n\n const payload: SortRequest = {\n reqId,\n data: this.allData,\n multiSortMeta: meta,\n columnTypeMap: this.columnTypeMap,\n dateTypeKey: this.columnTypeEnum.DATE,\n };\n\n this.sortWorker.postMessage(payload);\n }\n\n /**\n * Synchronous sort fallback (used if WebWorker is not available).\n * Uses the same normalization logic as your worker approach.\n */\n private sortSync(data: any[], multiSortMeta: any[]) {\n const sorted = [...data];\n if (!multiSortMeta?.length) return sorted;\n\n sorted.sort((a, b) => {\n for (const s of multiSortMeta) {\n const field = s.field!;\n const order = s.order ?? 1;\n\n const A = this.getComparableValue(this.getNestedValue(a, field), field);\n const B = this.getComparableValue(this.getNestedValue(b, field), field);\n\n if (typeof A === 'string' && typeof B === 'string') {\n const c = this.compareStringsNatural(A, B);\n if (c !== 0) return c * order;\n } else {\n if ((A as any) < (B as any)) return -1 * order;\n if ((A as any) > (B as any)) return 1 * order;\n }\n }\n return 0;\n });\n\n return sorted;\n }\n\n private normalizeInitialSort(\n cfg: TableConfiguration | undefined | null,\n ): InitialSortMeta[] {\n const s = cfg?.initialSort;\n\n // NEW style\n if (Array.isArray(s)) return s.filter((x) => !!x?.field);\n if (s && typeof s === 'object' && (s as any).field)\n return [s as InitialSortMeta];\n\n // LEGACY fallback\n if (cfg?.initialSortField) {\n return [\n {\n field: cfg.initialSortField,\n order: (cfg.initialSortOrder ?? 1) as SortOrder,\n },\n ];\n }\n\n return [];\n }\n\n /**\n * Applies initial sort once:\n * - Uses tableConfiguration.initialSortField if provided\n * - Otherwise uses the first available column field\n * - Always ASC (order = 1)\n *\n * Runs only when:\n * - we have data\n * - we have columns/selectedColumns\n * - it hasn't been applied yet for current dataset\n */\n private applyInitialSortIfNeeded(): void {\n if (this.initialSortApplied) return;\n\n if (!this.allData?.length) {\n this.tableData = [];\n this.totalRecords = 0;\n this.initialSortLoading = false;\n this.initialSortApplied = true;\n return;\n }\n\n const cols =\n (this.selectedColumns?.length ? this.selectedColumns : this.columns) ??\n [];\n if (!cols.length) return;\n\n // 1) normalize config\n const cfgMeta = this.normalizeInitialSort(this.tableConfiguration);\n\n // 2) if nothing configured -> fallback first column ASC\n const fallbackField = cols[0]?.field;\n const wantedMeta = (\n cfgMeta.length ? cfgMeta : [{ field: fallbackField, order: 1 as const }]\n ).filter((m) => !!m?.field);\n\n // 3) keep only fields that exist in columns\n const validMeta = wantedMeta.filter((m) =>\n cols.some((c: any) => c?.field === m.field),\n );\n const finalMeta = validMeta.length\n ? validMeta\n : [{ field: fallbackField, order: 1 as const }];\n\n if (!finalMeta[0]?.field) {\n this.tableData = this.allData;\n this.totalRecords = this.tableData.length;\n this.initialSortLoading = false;\n this.initialSortApplied = true;\n return;\n }\n\n try {\n if (this.dt) this.dt.multiSortMeta = finalMeta as any;\n } catch {}\n\n this.lastSortKey = JSON.stringify(finalMeta);\n this.initialSortApplied = true;\n this.initialSortFieldApplied = finalMeta[0].field;\n\n this.runWorkerSort(finalMeta);\n }\n\n // ============================================================\n // SEARCH / FILTER\n // ============================================================\n /**\n * Applies global search over the currently filtered dataset.\n * Then re-applies sort if any sort is active.\n */\n onSearch(query: string) {\n const trimmed = (query ?? '').trim().toLowerCase();\n this.searchQuery = trimmed;\n\n const baseData =\n Object.keys(this.currentFilters).length > 0\n ? this.getFilteredData()\n : this.originalData;\n\n const searchableFields = (this.columns ?? [])\n .map((c: any) => (c?.field ?? '').trim())\n .filter((f: string) => !!f);\n\n if (!trimmed) {\n this.allData = [...baseData];\n } else {\n this.allData = baseData.filter((row: any) =>\n searchableFields.some((field: string) =>\n this.matchesQuery(this.getValueByPath(row, field), trimmed),\n ),\n );\n }\n\n this.applyCurrentSortOrReset();\n }\n\n /**\n * Called from table-caption when filter form changes.\n * Rebuilds allData and re-applies current sorting.\n */\n applyFilters(filters: Record<string, any>) {\n this.currentFilters = { ...filters };\n this.allData = this.getFilteredData();\n this.applyCurrentSortOrReset();\n }\n\n /**\n * If table is currently sorted, re-run sort on new base dataset.\n * Otherwise just render base dataset.\n */\n private applyCurrentSortOrReset() {\n const meta = (this.dt?.multiSortMeta ?? []) as any[];\n const sortKey = JSON.stringify(meta ?? []);\n\n if (meta?.length) {\n this.lastSortKey = sortKey;\n this.runWorkerSort(meta);\n return;\n }\n\n this.tableData = this.allData;\n this.totalRecords = this.tableData.length;\n this.lastSortKey = '';\n this.cdr.markForCheck();\n }\n\n // ============================================================\n // SEARCH HELPERS\n // ============================================================\n private getValueByPath(obj: any, path: string): any {\n if (!obj || !path) return undefined;\n if (!path.includes('.')) return obj[path];\n return path\n .split('.')\n .reduce((acc, key) => (acc == null ? undefined : acc[key]), obj);\n }\n\n private matchesQuery(value: any, query: string): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === 'string' || typeof value === 'number')\n return value.toString().toLowerCase().includes(query);\n if (Array.isArray(value))\n return value.some((item) => this.matchesQuery(item, query));\n if (typeof value === 'object')\n return Object.values(value).some((val) => this.matchesQuery(val, query));\n return false;\n }\n\n // ============================================================\n // FILTER IMPLEMENTATION\n // ============================================================\n /**\n * Applies currentFilters to originalData and returns the filtered result.\n * Supports:\n * - single value (primitive or {key,...})\n * - multi-select arrays (primitives or objects with .key)\n * - empty filters mean \"match all\"\n */\n private getFilteredData() {\n return this.originalData.filter((item) => {\n return Object.keys(this.currentFilters).every((key) => {\n const filterValue = this.currentFilters[key];\n if (\n !filterValue ||\n (Array.isArray(filterValue) && filterValue.length === 0)\n )\n return true;\n\n const itemValue = this.getNestedValue(item, key);\n\n // Ako je itemValue niz (kao u scopes)\n if (Array.isArray(itemValue)) {\n return filterValue.some((option: any) => {\n const optionKey = option?.key || option;\n return itemValue.some(\n (val) =>\n val?.name?.toString().toLowerCase() ===\n optionKey?.toString().toLowerCase(),\n );\n });\n }\n\n // Ako je filterValue niz\n if (Array.isArray(filterValue)) {\n return filterValue.some((option) => {\n const optionKey = option?.key || option;\n return (\n itemValue?.toString().toLowerCase() ===\n optionKey?.toString().toLowerCase()\n );\n });\n }\n\n // Single filter\n const singleFilterValue = filterValue?.key || filterValue;\n return singleFilterValue\n ? itemValue?.toString().toLowerCase() ===\n singleFilterValue.toString().toLowerCase()\n : true;\n });\n });\n }\n\n /**\n * Reads nested values using dot paths and unwraps `.key` when present.\n */\n private getNestedValue(obj: any, path: string): any {\n try {\n if (obj && Object.prototype.hasOwnProperty.call(obj, path))\n return obj[path]?.key || obj[path];\n const keys = path.split('.');\n let current = obj;\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current)\n current = current[key];\n else return undefined;\n }\n return (current as any)?.key ?? current;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Produces comparable primitives for sorting (sync fallback).\n * The worker uses its own copy of this logic.\n */\n private getComparableValue(val: any, field?: string): string | number {\n if (val === null || val === undefined) return '';\n\n const columnType = field ? this.columnTypeMap[field] : null;\n\n if (typeof val === 'number') return val;\n\n if (typeof val === 'string') {\n if (columnType === this.columnTypeEnum.DATE) {\n const parsedDate = Date.parse(val);\n return isNaN(parsedDate) ? val.toLowerCase() : parsedDate;\n }\n return val.toLowerCase();\n }\n\n if (val instanceof Date) return val.getTime();\n\n if (typeof val === 'object') {\n if ((val as any).from && (val as any).to) {\n const from = Date.parse((val as any).from);\n const to = Date.parse((val as any).to);\n return isNaN(from) || isNaN(to) ? '' : from + to;\n }\n\n if (Array.isArray(val) && val.length > 0)\n return this.getComparableValue(val[0], field);\n\n const priorityFields = ['name', 'value', 'label', 'key', 'date'];\n for (const key of priorityFields) {\n if ((val as any)[key] !== undefined && (val as any)[key] !== null) {\n return this.getComparableValue((val as any)[key], field);\n }\n }\n\n for (const v of Object.values(val)) {\n if (typeof v === 'string' || typeof v === 'number')\n return this.getComparableValue(v, field);\n }\n }\n\n return '';\n }\n\n private compareStringsNatural(a: string, b: string): number {\n return a.localeCompare(b, undefined, {\n numeric: true,\n sensitivity: 'base',\n });\n }\n\n // ============================================================\n // SELECTION / UI ACTIONS\n // ============================================================\n onSelectionChange(selected: any[]) {\n this.selectedItems.set(selected);\n this.bulkMode = (selected?.length ?? 0) > 0;\n this.checkBoxSelection.emit(selected);\n }\n\n onRowClick(event: Event, rowData: any) {\n event.stopPropagation();\n this.rowSelection.emit(rowData);\n }\n\n clearSelection() {\n this.selectedItems.set([]);\n this.bulkMode = false;\n }\n\n /**\n * Handles export actions locally, otherwise bubbles up to parent.\n */\n handleActionClick(event: any) {\n if (event?.action?.key === 'EXPORT_PDF') {\n const file = this.tableConfiguration?.key\n ? buildFileName(this.tableConfiguration.key, 'pdf')\n : buildFileName('table', 'pdf');\n\n exportRowsToPdf(\n this.selectedColumns,\n this.tableData,\n this.columnTypeMap,\n this.columnTypeEnum,\n (k: string) => this.translateService.instant(k),\n file,\n ).catch((error) => {\n console.error('Failed to export PDF:', error);\n });\n return;\n }\n\n if (event?.action?.key === 'EXPORT_EXCEL') {\n const file = this.tableConfiguration?.key\n ? buildFileName(this.tableConfiguration.key, 'xlsx')\n : buildFileName('table', 'xlsx');\n\n exportRowsToExcel(\n this.selectedColumns,\n this.tableData,\n this.columnTypeMap,\n this.columnTypeEnum,\n (k: string) => this.translateService.instant(k),\n file,\n );\n return;\n }\n\n this.actionClick.emit(event);\n }\n\n /**\n * Used by checkbox template to disable selection on specific rows.\n */\n isRowSelectable(event: any): boolean {\n return typeof event.data?.canSelect === 'boolean'\n ? event.data.canSelect\n : true;\n }\n\n /**\n * Some tables allow click on first N columns to open details.\n */\n isColumnClickable(columnIndex: number): boolean {\n const max = this.tableConfiguration?.clickableColumnCount ?? 1;\n const enabled = this.tableConfiguration?.hasCellClick ?? false;\n\n return columnIndex < max && enabled;\n }\n\n /**\n * Utility for copy icons inside cells (prevents row-click).\n */\n copyToClipboard(event: Event, text: string): void {\n event.stopPropagation();\n navigator.clipboard.writeText(text);\n }\n\n /**\n * Generic nested getter used by templates (flags etc).\n */\n getNested(obj: any, path?: string): any {\n if (!obj || !path) return null;\n return path\n .split('.')\n .reduce((o, k) => (o != null ? (o as any)[k] : null), obj);\n }\n\n /**\n * Applies column selection coming from table-caption (array of field names).\n */\n applyColumns(selected: any[]) {\n const next = this.columns.filter((col) => selected.includes(col.field));\n Promise.resolve().then(() => {\n this.selectedColumns = next;\n this.cdr.markForCheck();\n });\n }\n}\n","<div class=\"border-1 border-round-sm border-300 border-round-md m-2\">\n @if (selectedItems().length === 0) {\n <table-caption [columns]=\"columns\" [tableConfiguration]=\"tableConfiguration\" [filters]=\"filters\"\n [selectedItems]=\"selectedItems()\" (applyFiltersEvent)=\"applyFilters($event)\"\n (applyColumnsEvent)=\"applyColumns($event)\" (searchChange)=\"onSearch($event)\"\n (actionClick)=\"handleActionClick($event)\"></table-caption>\n } @else {\n <div style=\"min-height: 40px; padding: 8px\"\n class=\"flex justify-content-between align-items-center border-bottom-1 border-300 pl-5 pr-5 text-sm text-500\">\n <div>\n @if (tableConfiguration.selectionType === selectionTypeEnum.CHECKBOX) {\n <span>\n {{ selectedItems().length }}\n {{\n selectedItems().length === 1\n ? (\"LABELS.ITEM_SELECTED\" | translate)\n : (\"LABELS.ITEMS_SELECTED\" | translate)\n }}\n </span>\n }\n </div>\n\n <div>\n @for (\n action of tableConfiguration.bulkActions;\n track action?.key ?? $index\n ) {\n <phoenix-data-table-action [actionConfig]=\"action\" (actionClick)=\"\n handleActionClick({\n action: action,\n selectedItems: selectedItems(),\n });\n clearSelection()\n \"></phoenix-data-table-action>\n }\n\n <button [attr.data-cy]=\"'clear-selection-button'\" class=\"p-button p-button-text p-button-plain\"\n (click)=\"clearSelection()\" aria-label=\"Clear Selection\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n </div>\n }\n <div class=\"table-host\" [style.height]=\"tableConfiguration.scrollHeight ?? null\">\n <p-table #dt [columns]=\"selectedColumns\" [value]=\"tableData\" [size]=\"'small'\" scrollable=\"true\" scrollHeight=\"flex\"\n [virtualScroll]=\"true\" [virtualScrollItemSize]=\"40\" [virtualScrollDelay]=\"80\" [totalRecords]=\"totalRecords\"\n [sortMode]=\"'multiple'\" [customSort]=\"true\" (sortFunction)=\"onCustomSort($event)\" [selection]=\"selectedItems()\"\n (selectionChange)=\"onSelectionChange($event)\" [resizableColumns]=\"true\" columnResizeMode=\"expand\" [loading]=\"initialSortLoading\">\n <ng-template #header let-columns>\n <tr style=\"height: 40px\" class=\"dt-header\">\n @switch (tableConfiguration.selectionType) {\n @case (selectionTypeEnum.CHECKBOX) {\n <th class=\"custom-th\">\n <p-tableHeaderCheckbox [attr.data-cy]=\"'table-header-checkbox'\"></p-tableHeaderCheckbox>\n </th>\n }\n @case (selectionTypeEnum.RADIO_BTN) {\n <th class=\"custom-th\"></th>\n }\n }\n @for (\n col of columns;\n track col.field ?? col.header ?? $index;\n let colIdx = $index\n ) {\n <th pResizableColumn class=\"custom-th text-primary font-bold\" [pSortableColumn]=\"col.field\">\n {{ col.header | translate }}\n <p-sortIcon [field]=\"col.field\" [attr.data-cy]=\"'sort-button-' + col.header\"></p-sortIcon>\n </th>\n }\n\n <th class=\"custom-th\"></th>\n </tr>\n </ng-template>\n\n <ng-template #body let-rowData let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr>\n @switch (tableConfiguration.selectionType) {\n @case (selectionTypeEnum.CHECKBOX) {\n <td class=\"w-2rem\">\n <p-tableCheckbox [attr.data-cy]=\"\n 'table-row-' + selectionTypeEnum.CHECKBOX + '-' + rowIndex\n \" [disabled]=\"\n rowData?.canSelect !== undefined\n ? !rowData.canSelect\n : false\n \" [value]=\"rowData\"></p-tableCheckbox>\n </td>\n }\n @case (selectionTypeEnum.RADIO_BTN) {\n <td>\n <p-tableRadioButton [value]=\"rowData\" [attr.data-cy]=\"\n 'table-row-' + selectionTypeEnum.RADIO_BTN + '-' + rowIndex\n \"></p-tableRadioButton>\n </td>\n }\n }\n @for (\n col of columns;\n track col.field ?? col.header ?? $index;\n let i = $index\n ) {\n <td (click)=\"\n isColumnClickable(i) ? onRowClick($event, rowData) : null\n \" [ngClass]=\"{\n 'text-blue-500 underline cursor-pointer': isColumnClickable(i),\n }\">\n @switch (col.columnType) {\n @case (columnTypeEnum.TAG) {\n @if (rowData[col.field]) {\n <div class=\"border-round-md font-semibold\" [style]=\"{\n fontSize: '12px',\n padding: '3px 8px',\n width: 'fit-content',\n 'background-color':\n (rowData[col.field + 'Color'] || '#ccc') + '56',\n color: rowData[col.field + 'Color'],\n }\">\n {{\n rowData[col.field]?.name ||\n (rowData[col.field] | translate)\n }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.LIST_TAG) {\n @if (rowData[col.field]) {\n @for (item of rowData[col.field]; track $index) {\n <p-badge severity=\"warn\" class=\"mr-1\" [value]=\"item\" />\n }\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.OBJ_TAG) {\n @if (rowData[col.field]) {\n <p-tag [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.OBJ_TAG +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" [style]=\"{\n fontSize: '12px',\n padding: '3px 8px',\n width: 'fit-content',\n 'background-color':\n (rowData[col.field].color || '#ccc') + '56',\n color: rowData[col.field].color,\n }\" [value]=\"rowData[col.field]?.value | translate\"></p-tag>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.PERSON) {\n @if (rowData[col.field]) {\n <p-avatar [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.PERSON +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" [label]=\"rowData[col.field]?.name | initials\" class=\"cursor-pointer\" [style]=\"{\n 'background-color': '#9c27b0',\n color: '#ffffff',\n 'font-size': '0.8rem!important',\n }\" shape=\"circle\" (click)=\"personPop.toggle($event)\"></p-avatar>\n\n <p-popover #personPop [dismissable]=\"true\">\n <div>\n <span class=\"text-lg\">{{\n rowData[col.field].name\n }}</span>\n <span class=\"block text-sm\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{ rowData[col.field].email ?? \" --\" }}\n </span>\n <span class=\"block text-sm\">\n <i class=\"pi pi-phone text-500\"></i>\n {{ rowData[col.field].phone ?? \" --\" }}\n </span>\n </div>\n </p-popover>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.LIST) {\n @if (rowData[col.field]?.length) {\n @if (rowData[col.field].length > 1) {\n <div class=\"cursor-pointer\" (click)=\"listPop.toggle($event)\" [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.LIST +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \">\n <span class=\"mr-1\">{{\n rowData[col.field][0].name\n }}</span>\n <p-chip class=\"text-sm font-semibold p-1 m-0\" [label]=\"'+' + (rowData[col.field].length - 1)\" />\n </div>\n } @else {\n <span>{{ rowData[col.field][0].name }}</span>\n }\n\n <p-popover #listPop [dismissable]=\"true\">\n @for (\n item of rowData[col.field];\n track item.name;\n let isFirst = $first\n ) {\n @if (!isFirst) {\n <ul class=\"list-none m-0 p-0\">\n <li>{{ item.name }}</li>\n </ul>\n }\n }\n </p-popover>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.BOOLEAN) {\n @if (rowData[col.field] | isBoolean) {\n <i [pTooltip]=\"rowData?.[col.field + 'Tooltip']\" [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.BOOLEAN +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" class=\"pi\" [ngClass]=\"\n rowData[col.field]\n ? 'text-green-500 pi-check-circle'\n : 'text-red-500 pi-times-circle'\n \"></i>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.TEXT_AREA) {\n @if (rowData[col.field]) {\n <div [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.TEXT_AREA +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" [pTooltip]=\"rowData[col.field]\">\n {{\n rowData[col.field].length > (col.maxLength ?? 50)\n ? (rowData[col.field]\n | slice: 0 : col.maxLength ?? 50) + \"...\"\n : rowData[col.field]\n }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.EMAIL) {\n @if (rowData[col.field]) {\n <div class=\"email-cell\" [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.EMAIL +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \">\n <span>{{ rowData[col.field] }}</span>\n <i class=\"pi pi-copy email-copy-icon\" (click)=\"copyToClipboard($event, rowData[col.field])\"\n [pTooltip]=\"'LABELS.COPY_EMAIL' | translate\">\n </i>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.TIMEPERIOD) {\n @if (rowData[col.field]) {\n <div [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.TIMEPERIOD +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" [pTooltip]=\"rowData[col.field] | timePeriod\" style=\"max-width: 200px\">\n {{ rowData[col.field] | timePeriod }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @default {\n @if (col.flag && getNested(rowData, col.flagCodeField)) {\n <div [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.TEXT +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" class=\"flex align-items-center gap-2\" style=\"max-width: 200px\"\n [pTooltip]=\"rowData | cell: col : dateFormat\">\n <img src=\"https://primefaces.org/cdn/primeng/images/demo/flag/flag_placeholder.png\" [class]=\"\n 'flag flag-' +\n (getNested(rowData, col.flagCodeField) || '')\n .toString()\n .toLowerCase()\n \" style=\"width: 22px\" alt=\"\" />\n <span [innerHTML]=\"rowData | cell: col : dateFormat\"></span>\n </div>\n } @else {\n @if (rowData | cell: col : dateFormat) {\n <div [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.TEXT +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" [pTooltip]=\"rowData | cell: col : dateFormat\" style=\"max-width: 200px\"\n [innerHTML]=\"rowData | cell: col : dateFormat\"></div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n }\n }\n </td>\n }\n\n <td class=\"p-0\">\n @for (\n action of tableConfiguration.rowActions;\n track action?.key ?? $index\n ) {\n <phoenix-data-table-action [actionConfig]=\"action\" [rowData]=\"rowData\"\n (actionClick)=\"handleActionClick($event)\"></phoenix-data-table-action>\n }\n </td>\n </tr>\n </ng-template>\n\n <!-- <ng-template pTemplate=\"loadingbody\" let-columns>\n @for (_ of skeletonRows; track $index; let rowIdx = $index) {\n <tr style=\"height: 40px\">\n @switch (tableConfiguration.selectionType) {\n @case (selectionTypeEnum.CHECKBOX) {\n <td class=\"w-2rem\">\n <p-skeleton width=\"1.2rem\" height=\"1.2rem\"></p-skeleton>\n </td>\n }\n @case (selectionTypeEnum.RADIO_BTN) {\n <td class=\"w-2rem\">\n <p-skeleton width=\"1.2rem\" height=\"1.2rem\"></p-skeleton>\n </td>\n }\n }\n\n @for (col of columns; track col.field ?? col.header ?? $index) {\n <td>\n <p-skeleton\n [ngStyle]=\"{\n width: (60 + (rowIdx % 3) * 10) + '%',\n height: '1rem'\n }\"\n ></p-skeleton>\n </td>\n }\n\n <td>\n <p-skeleton width=\"2rem\" height=\"1rem\"></p-skeleton>\n </td>\n </tr>\n }\n </ng-template> -->\n\n <ng-template #emptyCell let-dataCy=\"dataCy\">\n <span [attr.data-cy]=\"dataCy\">--</span>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <td class=\"p-2\" colspan=\"100\">\n <div class=\"flex align-items-center\">\n <i class=\"pi pi-info-circle mr-2\"></i>\n {{ \"NO_RESULTS_FOUND\" | translate }}\n </div>\n </td>\n </ng-template>\n </p-table>\n\n <div class=\"border-top-1 border-300 pl-2 p-1 text-sm text-500\">\n {{ \"LABELS.TOTAL_RECORDS\" | translate }}: {{ totalRecords }}\n </div>\n </div>\n</div>","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function startDueDateValidator(\n control: AbstractControl,\n): { [key: string]: any } | null {\n const startDate = control.get('startDate')?.value;\n const dueDate = control.get('dueDate')?.value;\n\n return { invalidDate: true };\n}\n","import {\n AbstractControl,\n AsyncValidatorFn,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { debounceTime, map, of, switchMap, timer } from 'rxjs';\n\nconst regexPatternEn =\n /^(?:(\\d+(?:\\.\\d+)?)w\\s*|)(?:(\\d+(?:\\.\\d+)?)d\\s*|)(?:(\\d+(?:\\.\\d+)?)h\\s*|)(?:(\\d+(?:\\.\\d+)?)m\\s*|)$/;\nconst regexPatternDe =\n /^(?:(\\d+(?:\\.\\d+)?)w\\s*|)(?:(\\d+(?:\\.\\d+)?)t\\s*|)(?:(\\d+(?:\\.\\d+)?)s\\s*|)(?:(\\d+(?:\\.\\d+)?)m\\s*|)$/;\n\nconst regexPatternSr =\n /^(?:(\\d+(?:\\.\\d+)?)n\\s*|)(?:(\\d+(?:\\.\\d+)?)d\\s*|)(?:(\\d+(?:\\.\\d+)?)č\\s*|)(?:(\\d+(?:\\.\\d+)?)m\\s*|)$/;\n\nfunction toMS(input: string, regex: RegExp) {\n const match = input?.match(regex);\n if (!match) return 0; // or handle it differently\n\n const weeks = parseFloat(match[1]) || 0;\n const days = parseFloat(match[2]) || 0;\n const hours = parseFloat(match[3]) || 0;\n const minutes = parseFloat(match[4]) || 0;\n\n const milliseconds =\n (weeks * 7 + days) * 24 * 60 * 60 * 1000 +\n hours * 60 * 60 * 1000 +\n minutes * 60 * 1000;\n return milliseconds;\n}\n\nfunction getLangPattern(currentLang: string) {\n switch (currentLang) {\n case 'de':\n return regexPatternDe;\n case 'en':\n return regexPatternEn;\n default:\n return regexPatternSr;\n }\n}\n\nexport function timePeriod(currentLang: string, tpMin: number): ValidatorFn {\n return (control: AbstractControl) => {\n if (!control.pristine) {\n const regValidator = Validators.pattern(getLangPattern(currentLang));\n if (regValidator(control)) {\n return { timeperiod: true };\n }\n\n if (control.status === 'VALID' && control.dirty) {\n if (toMS(control.value, getLangPattern(currentLang)) > 31536000000) {\n return { timeperiod_limit_max: true };\n }\n if (\n tpMin != null &&\n toMS(control.value, getLangPattern(currentLang)) <= tpMin\n ) {\n return { timeperiod_limit_min: true };\n }\n return null;\n }\n return null;\n }\n\n return null;\n };\n}\n","export enum ControlType {\n TEXT = 'TEXT',\n NUMBER = 'NUMBER',\n MS_OPTION = 'MS_OPTION',\n SS_OPTION = 'SS_OPTION',\n TEXT_AREA = 'TEXT_AREA',\n TEXT_EDITOR = 'TEXT_EDITOR',\n DATE = 'DATE',\n START_DUE_DATE = 'START_DUE_DATE',\n CHECKBOX = 'CHECKBOX',\n CHECKBOX_COLOR = 'CHECKBOX_COLOR',\n LINKS_DATA = 'LINKS_DATA',\n PASSWORD = 'PASSWORD',\n SWITCH = 'SWITCH',\n TIMEPERIOD = 'TIMEPERIOD',\n CURRENCY = 'CURRENCY',\n ASSIGN = 'ASSIGN',\n ASSIGN_ASSET = 'ASSIGN_ASSET',\n COLOR = 'COLOR',\n SELECT_BUTTON = 'SELECT_BUTTON',\n UPLOAD = 'UPLOAD',\n UPLOAD_DRAG_DROP = 'UPLOAD_DRAG_DROP',\n SLOT = 'SLOT',\n SS_OPTION_OBJECT_BASED = 'SS_OPTION_OBJECT_BASED',\n}\n","import { ControlType } from './control-type.enum';\n\nexport function getFieldType(control: any) {\n switch (control.configuration.type) {\n case ControlType.TEXT:\n case ControlType.TEXT_AREA:\n case ControlType.TEXT_EDITOR:\n case ControlType.CHECKBOX:\n return control.dataValue;\n case ControlType.SS_OPTION:\n return control.dataOptionValue;\n case ControlType.MS_OPTION:\n return control.dataOptionValues;\n default:\n }\n}\n","import { AbstractControl, UntypedFormControl } from '@angular/forms';\n\nexport class WhiteSpaceValidator {\n static noWhiteSpaceValidator(control: AbstractControl<any, any>) {\n if (typeof control.value === 'object') {\n return { whitespace: false };\n }\n if (control.value === '') {\n return { whitespace: false };\n }\n const isWhitespace = (control.value || '').trim().length === 0;\n const isValid = !isWhitespace;\n return isValid ? null : { whitespace: true };\n }\n static noWhiteSpaceValidatorForEditor(control: UntypedFormControl) {\n const isWhitespace =\n (control.value?.replace(/(<([^>]+)>)/gi, '') || '').trim().length === 0;\n const isValid = !isWhitespace;\n return isValid ? null : { whitespace: true };\n }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function noDangerousCharsValidator(): ValidatorFn {\n const dangerousPatterns = [\n /<\\s*script/i, // <script tags\n /<\\s*\\/\\s*script/i, // </script>\n /javascript\\s*:/i, // javascript: protocol\n /on\\w+\\s*=/i, // event handlers like onerror= onclick=\n /<\\s*iframe/i, // iframes\n /<\\s*img[^>]+onerror/i, // <img onerror=\n /expression\\s*\\(/i, // CSS expression() attacks\n /vbscript\\s*:/i, // vbscript: protocol\n ];\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (!value) return null;\n\n const str = String(value);\n const isdangerous = dangerousPatterns.some(pattern => pattern.test(str));\n\n return isdangerous ? { dangerousChars: true } : null;\n };\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport enum CompareOperatorType {\n LESS_OR_EQUAL = 'LESS_OR_EQUAL',\n LESS = 'LESS',\n EQUAL = 'EQUAL',\n MORE_OR_EQUAL = 'MORE_OR_EQUAL',\n MORE = 'MORE',\n}\n\nexport function dateCompareValidator(\n fieldToCompare: string,\n comparison: CompareOperatorType,\n errMessage?: string,\n): ValidatorFn {\n return (control: AbstractControl) => {\n if (!control.parent) return null; // ako form group ne postoji\n const compareControl = control.parent.get(fieldToCompare);\n if (!compareControl) return null; // polje za poređenje ne postoji\n\n const controlValue = control.value ? new Date(control.value) : null;\n const compareValue = compareControl.value\n ? new Date(compareControl.value)\n : null;\n\n if (!controlValue || !compareValue) return null; // nema vrednosti, ne validira\n\n let valid = true;\n\n switch (comparison) {\n case CompareOperatorType.LESS:\n valid = controlValue < compareValue;\n break;\n case CompareOperatorType.LESS_OR_EQUAL:\n valid = controlValue <= compareValue;\n break;\n case CompareOperatorType.EQUAL:\n valid = controlValue.getTime() === compareValue.getTime();\n break;\n case CompareOperatorType.MORE_OR_EQUAL:\n valid = controlValue >= compareValue;\n break;\n case CompareOperatorType.MORE:\n valid = controlValue > compareValue;\n break;\n }\n\n if (!valid) {\n return {\n dateCompare:\n errMessage ||\n `Datum ne zadovoljava uslov ${comparison} u odnosu na ${fieldToCompare}`,\n };\n }\n\n return null; // validno\n };\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MetaFormService {\n router = inject(Router);\n private formEvent = new Subject<any>();\n private formReadOnlySubject = new BehaviorSubject<boolean>(false);\n private formTabContent = new BehaviorSubject<string>('FORM');\n private formDirtyStatus = new BehaviorSubject<boolean>(false);\n private formBuildCompletedSubject = new BehaviorSubject<boolean>(false);\n\n currentFormState = this.formEvent.asObservable();\n formReadOnlyState = this.formReadOnlySubject.asObservable();\n currentFormTabContent = this.formTabContent.asObservable();\n currentFormDirtyStatus = this.formDirtyStatus.asObservable();\n\n /**\n * Notify when form is completed\n * @description Notifies you about when form bild is completed in meta-form component class. Usefull when you need to attach some listeners on form controls or any other action related to form when all controls are avaiable\n * @returns {boolean}\n */\n formBuildCompleted = this.formBuildCompletedSubject.asObservable();\n\n constructor() {}\n\n setFormEvent(event: any): void {\n this.formEvent.next(event);\n }\n\n setFormReadOnlyState(state: boolean) {\n this.formReadOnlySubject.next(state);\n // this.router.navigate([], {\n // queryParams: {\n // edit: state ? null : !state,\n // },\n // queryParamsHandling: 'merge',\n // });\n }\n\n setFormTabContent(tabContent: string) {\n this.formTabContent.next(tabContent);\n }\n\n setFormDirtyStatus(status: boolean) {\n this.formDirtyStatus.next(status);\n }\n /**\n * Sets the form build completion status to indicate when the form is created.\n *\n * @param {boolean} isCompleted - A boolean value to indicate whether the form build is completed.\n * Set to `true` when the form is fully created.\n *\n * @description This method is used to notify when the form is created and ready for use.\n */\n setFormBuildCompletition(isCompleted: boolean) {\n this.formBuildCompletedSubject.next(isCompleted);\n }\n}\n","import { Directive, EventEmitter, Input, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subscription } from 'rxjs';\n\nimport { HttpClient } from '@angular/common/http';\n// import { EnvService } from '@phoenix/environment';\nimport { startDueDateValidator } from './meta-validators/due-date/start-due-date.validator';\n\nimport { timePeriod } from './meta-validators/timeperiod/timeperiod.validator';\n\nimport { MetaControl } from './meta-form-interface/interfaces';\nimport { MetaFormService } from './services/meta-form.service';\nimport { ControlType } from './utils/control-type.enum';\nimport { getFieldType } from './utils/get-field-type.utils';\nimport { WhiteSpaceValidator } from './meta-validators/white-space-validator';\nimport { noDangerousCharsValidator } from './meta-validators/no-dangerous-chars/do-danerous-chars';\nimport { dateCompareValidator } from './meta-validators/date-compare-validator';\n\n@Directive()\nexport abstract class MetaFormAbstract {\n @Input() metaForm!: FormGroup;\n @Input() metaFormValues: any;\n @Input() metaFormControls: any;\n @Input() loading: boolean = false;\n @Input() disableForm: boolean = false;\n @Input() formButtons: boolean = true;\n @Input() groupForm: boolean = false;\n @Input() formStyle: any;\n @Output() onFormSubmit = new EventEmitter();\n @Output() onFormCancel = new EventEmitter();\n\n formActive$!: Observable<boolean>;\n formSub$!: Subscription;\n\n constructor(\n private fb: FormBuilder,\n public metaService: MetaFormService,\n\n private translateService: TranslateService,\n private http: HttpClient, // private env: EnvService\n ) {\n this.metaForm = this.fb.group({});\n this.formActive$ = this.metaService.formReadOnlyState;\n ///check if this has usecase\n this.formSub$ = this.metaForm.valueChanges.subscribe((ev: any) => {\n this.metaService.setFormEvent(ev);\n });\n }\n\n createForm(controls: MetaControl[] | any) {\n controls?.forEach((control: any) => {\n this.metaForm.addControl(\n control.configuration?.key,\n this.fb.control(\n getFieldType(control),\n ///updateOn: blur only for controls with async validators. If added for all each tab/step toggle removes form value. Check why\n // control.asyncValidators && { updateOn: 'blur' },\n ),\n );\n //add validators\n this.addControlValidators(control);\n\n //disable non editable fields\n if (control.disable) {\n this.metaForm.get(control.configuration.key)?.disable();\n }\n });\n ///patch values in form\n if (this.metaFormValues) {\n this.metaForm.patchValue(this.metaFormValues);\n }\n\n this.metaService.setFormBuildCompletition(true);\n }\n\n activateForm() {\n throw new Error('not implemented');\n }\n\n addControlValidators(control: any) {\n const validators: any[] = [];\n const asyncValidators: any[] = [];\n\n if (control.validators) {\n control.validators.min &&\n validators.push(Validators.min(control.validators.min));\n\n control.validators.max &&\n validators.push(Validators.max(control.validators.max));\n\n control.validators.maxLenght &&\n validators.push(Validators.maxLength(control.validators.maxLenght));\n\n control.validators.minLength &&\n validators.push(Validators.minLength(control.validators.minLength));\n\n control.validators.email && validators.push(Validators.email);\n\n control.validators.regex &&\n validators.push(\n Validators.pattern(control.validators.regex?.regexType),\n );\n control.validators.phone &&\n validators.push(Validators.pattern(/^\\+?[1-9]\\d{7,14}$/));\n\n control.validators.timeperiod &&\n validators.push(\n timePeriod(\n this.translateService.currentLang,\n control.validators.tpMin,\n ),\n );\n\n control.validators.dueDate && validators.push(startDueDateValidator);\n }\n\n if (control.validators?.compare) {\n const compareConfig = control.validators.compare;\n validators.push(\n dateCompareValidator(\n compareConfig.fieldToCompare, // napomena: ispravi typo 'feildToCompare'\n compareConfig.comparisonOperator,\n compareConfig.errMessage,\n ),\n );\n }\n if (control?.mandatory) {\n validators.push(Validators.required);\n }\n\n if (control?.mandatory && control.configuration.type === ControlType.TEXT) {\n validators.push(WhiteSpaceValidator.noWhiteSpaceValidator);\n }\n\n if (\n control?.mandatory &&\n control.configuration.type === ControlType.TEXT_AREA\n ) {\n validators.push(WhiteSpaceValidator.noWhiteSpaceValidator);\n }\n\n if (\n (control.configuration.type === ControlType.TEXT &&\n !control.configuration?.skipValidation) ||\n (control.configuration.type === ControlType.TEXT_AREA &&\n !control.configuration?.skipValidation)\n ) {\n validators.push(noDangerousCharsValidator());\n }\n\n this.metaForm.get(control.configuration.key)?.setValidators(validators);\n }\n\n onSubmit() {\n this.onFormSubmit.emit(this.metaForm);\n }\n\n onCancel() {\n this.metaForm.reset();\n this.onFormCancel.emit();\n }\n\n /**\n * Resets form to initial state\n *\n * @description Useful when user interact with form (edit some inputs) and than clicks CANCEL. This method patch original values to FormGroup again\n *\n */\n resetToInitialValues() {\n this.metaForm.patchValue(this.metaFormValues);\n }\n\n ngOnDestroy(): void {\n if (this.formSub$) this.formSub$.unsubscribe();\n }\n}\n","export function getLanguageParam(\n obj: any,\n langType: string,\n paramName: string,\n): string {\n if (!langType) langType = 'en';\n if (langType && paramName) {\n const param: string =\n paramName + langType.charAt(0).toUpperCase() + langType.slice(1);\n const fallBackParam: string = paramName + 'En';\n if (obj?.[param]) {\n return obj[param];\n } else if (obj?.[fallBackParam]) {\n return obj[fallBackParam];\n } else {\n return param;\n }\n } else {\n return '***NO VALUE***';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { getLanguageParam } from './lang.utils';\n\n@Pipe({\n name: 'fieldLabel',\n standalone: true,\n})\nexport class FieldLabelPipe implements PipeTransform {\n transform(value: any, currentLang: string): string {\n if (value.hasOwnProperty('userFriendlyMessage')) {\n return value?.userFriendlyMessage;\n }\n const metaLabel = getLanguageParam(value, currentLang, 'labelKeyVal');\n return metaLabel;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { FieldLabelPipe } from '../utils/field-label.pipe';\n\n@Component({\n selector: 'phoenix-meta-label',\n standalone: true,\n imports: [CommonModule, TranslateModule, FieldLabelPipe],\n template: `\n <label class=\"mb-1 block\" *ngIf=\"!control?.hidden\">\n {{ control | fieldLabel: currentLang | translate }}\n <span *ngIf=\"control.mandatory\" class=\"red-asterisk\">*</span>\n </label>\n `,\n styles: [],\n})\nexport class MetaLabelComponent {\n @Input() control: any;\n currentLang: string;\n constructor(private translateService: TranslateService) {\n this.currentLang = this.translateService.currentLang;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, ViewChild } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { TableModule } from 'primeng/table';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { map } from 'rxjs';\nimport {\n tableColumnType,\n tableSelectionType,\n} from '../../../data-table/utils/dataTable.enum';\nimport { TableComponent } from '../../../data-table/table/table.component';\nimport { ButtonModule } from 'primeng/button';\nimport { ActionButton } from '../../../../models/status.model';\n\n\n@Component({\n selector: 'phoenix-object-item-dialog',\n standalone: true,\n imports: [\n TranslateModule,\n TableModule,\n TooltipModule,\n CommonModule,\n TableComponent,\n ButtonModule\n ],\n templateUrl: './object-item-dialog.component.html',\n styleUrls: ['./object-item-dialog.component.scss'],\n})\nexport class ObjectItemDialogComponent implements OnInit {\n @ViewChild('table') table!: TableComponent;\n\n columns: any;\n disableButton: boolean = true;\n tableData = [];\n hasSelection = false;\n constructor(\n public ref: DynamicDialogRef,\n public config: DynamicDialogConfig\n ) {}\n\n ngOnInit(): void {\n this.tableData = this.config.data.tableData;\n this.columns = this.config.data.columns;\n }\n\n actions: ActionButton[] = [\n {\n id: 'assign',\n disabled: true,\n label: 'ACTION.ASSIGN',\n icon: 'pi pi-check',\n severity: 'primary',\n },\n {\n id: 'cancel',\n disabled: false,\n label: 'ACTION.CANCEL',\n severity: 'secondary',\n },\n ];\n\n onSelectionChanged(selectedItem: any) {\n this.hasSelection = !!selectedItem;\n }\n\n actionClick(key: any) {\n if (key === 'assign') {\n this.ref.close(this.table.selectedItems());\n } else {\n this.ref.close();\n }\n }\n tableConfiguration = {\n lazy: false,\n scrollHeight: '200px',\n hasSearch: true,\n hasFilter: false,\n key: 'asd',\n rows: 20,\n selectionType: tableSelectionType.RADIO_BTN,\n actions: [],\n exportTable: false,\n filterConfiguration: []\n\n };\n}\n","<div style=\"overflow: hidden; padding-bottom: 50px\">\n <phoenix-table\n #table\n [data]=\"tableData\"\n [columns]=\"columns\"\n [tableConfiguration]=\"tableConfiguration\"\n (checkBoxSelection)=\"onSelectionChanged($event)\"\n >\n </phoenix-table>\n</div>\n<div class=\"absolute bottom-0 right-0 p-4\">\n <div class=\"flex gap-2\">\n <ng-container *ngFor=\"let action of actions\">\n <p-button\n [label]=\"action.label | translate\"\n [icon]=\"action.icon || ''\"\n [severity]=\"action.severity || 'primary'\"\n [disabled]=\"action.id === 'assign' && !hasSelection\"\n [id]=\"action.id\"\n (onClick)=\"actionClick(action.id)\"\n size=\"small\"\n ></p-button>\n </ng-container>\n</div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef, inject } from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroup,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { PopoverModule } from 'primeng/popover';\nimport { PanelModule } from 'primeng/panel';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { ObjectItemDialogComponent } from '../object-item-dialog/object-item-dialog.component';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { Assignee } from '../../../../models/assignee.model';\nimport { tableColumnType } from '../../../data-table/utils/dataTable.enum';\n\n@Component({\n selector: 'phoenix-meta-assign-responsible',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n MetaLabelComponent,\n TranslateModule,\n PopoverModule,\n PanelModule,\n ],\n template: `\n <div [style.display]=\"control.hidden ? 'none' : 'block'\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <div\n [attr.data-cy]=\"'assign-' + control?.id\"\n *ngIf=\"\n parentForm.controls[this.control.configuration.key].value &&\n parentForm.controls[this.control.configuration.key].value.uuid\n \"\n class=\"flex align-items-center\"\n >\n <div>\n <p-button\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"op.toggle($event)\"\n >\n <div class=\"person-wrap\">\n <div class=\"person-avatar\">\n {{\n parentForm.controls[\n this.control.configuration.key\n ].value?.name?.charAt(0)\n }}\n </div>\n <div>\n <p\n class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\"\n >\n {{\n parentForm.controls[this.control.configuration.key].value\n ?.name\n }}\n </p>\n <p\n class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\"\n >\n {{\n parentForm.controls[this.control.configuration.key].value\n ?.function\n }}\n </p>\n </div>\n </div>\n </p-button>\n\n <p-popover #op [dismissable]=\"true\">\n <div class=\"person-details\">\n <span class=\"block mb-2\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{\n parentForm.controls[this.control.configuration.key].value\n ?.email ?? ' --'\n }}\n </span>\n <p>\n <i class=\"pi pi-phone mr-1 text-500\"></i>\n {{\n parentForm.controls[this.control.configuration.key].value\n ?.phone ?? ' --'\n }}\n </p>\n </div>\n </p-popover>\n </div>\n\n <div style=\"paddingBottom:4px\">\n <p-button\n *ngIf=\"\n parentForm.controls[this.control.configuration.key].value &&\n parentForm.controls[this.control.configuration.key].value.uuid\n \"\n styleClass=\"p-button-sm mt-1\"\n type=\"button\"\n [text]=\"true\"\n label=\"{{ 'ACTION.REASSIGN' | translate }}\"\n (click)=\"op.hide(); assignResponsible()\"\n ></p-button>\n\n <p-button\n *ngIf=\"\n parentForm.controls[this.control.configuration.key].value &&\n parentForm.controls[this.control.configuration.key].value.uuid\n \"\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"op.hide(); clear()\"\n [text]=\"true\"\n styleClass=\"p-button-danger p-button-sm mt-1 ml-2\"\n ></p-button>\n </div>\n </div>\n\n <p-button\n *ngIf=\"\n !(\n parentForm.controls[this.control.configuration.key].value &&\n parentForm.controls[this.control.configuration.key].value.uuid\n )\n \"\n type=\"button\"\n icon=\"pi pi-user-plus\"\n styleClass=\"p-button-sm mt-1\"\n label=\"{{ 'ACTION.ASSIGN' | translate }}\"\n (click)=\"assignResponsible()\"\n [text]=\"true\"\n ></p-button>\n </div>\n `,\n styles: [\n `\n ::ng-deep .p-popover-content {\n padding: 0 !important;\n }\n\n .person-wrap {\n display: flex;\n align-items: center;\n margin-left: -6px;\n }\n\n .person-wrap p {\n margin: 0;\n }\n\n .person-avatar {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 28px;\n height: 28px;\n min-width: 28px;\n min-height: 28px;\n margin-right: 5px;\n background-color: rgb(233, 66, 96);\n color: white;\n border-radius: 50%;\n font-size: 1rem;\n }\n\n .person-details {\n border-top: 1px solid #e0e0e0;\n padding: 10px;\n width: 200px;\n }\n\n .person-details p {\n margin: 0;\n display: flex;\n align-items: center;\n }\n\n .person-details i {\n color: #e94260;\n padding-right: 5px;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaAssignResponsibleComponent),\n multi: true,\n },\n ],\n})\nexport class MetaAssignResponsibleComponent implements ControlValueAccessor {\n @Input() control: any;\n @Input() parentForm!: FormGroup;\n @Input() disable?: boolean;\n\n public onChanged!: (value: any) => void;\n public onTouched!: () => void;\n public isDisabled!: boolean;\n\n writeValue(value: any): void {}\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean) {\n this.isDisabled = isDisabled;\n }\n\n private translateService = inject(TranslateService);\n private dialogService = inject(DialogService);\n\n person!: any;\n\n clear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null);\n }\n\n assignResponsible() {\n const ref = this.dialogService.open(ObjectItemDialogComponent, {\n header: this.translateService.instant('LABELS.ASSIGN_RESPONSIBLE'),\n width: '700px',\n modal: true,\n data: {\n tableData: this.control.configuration.items,\n columns: [\n { field: 'name', header: 'LABELS.NAME', columnType: tableColumnType.TEXT },\n { field: 'function', header: 'LABELS.FUNCTION', columnType: tableColumnType.TEXT },\n { field: 'phone', header: 'LABELS.PHONE', columnType: tableColumnType.TEXT },\n { field: 'email', header: 'LABELS.EMAIL', columnType: tableColumnType.TEXT }\n ],\n },\n contentStyle: { overflow: 'auto' },\n draggable: true,\n closable: true,\n });\n\n if (ref) {\n ref.onClose.subscribe((response: Assignee) => {\n if (response) {\n this.person = response;\n this.parentForm.controls[this.control.configuration.key].setValue(response);\n }\n });\n }\n }\n}","export enum ErrorType {\n REQUIRED = 'required',\n MIN_LENGTH = 'minlength',\n MAX_LENGTH = 'maxlength',\n EMAIL = 'email',\n CUSTOM = 'custom',\n PATTERN = 'pattern',\n UIQUE_ENTRY = 'uniqueEntry',\n TIMEPERIOD = 'timeperiod',\n TIMEPERIOD_LIMIT_MAX = 'timeperiod_limit_max',\n TIMEPERIOD_LIMIT_MIN = 'timeperiod_limit_min',\n DUE_DATE = 'dueDate',\n UIQUE = 'unique',\n BOTH_DATES = 'both_dates',\n MAX = 'max',\n MIN = 'min',\n DANGEROUS_CHARS = 'dangerousChars',\n DATE_COMPARE = 'dateCompare',\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { Component, Input, OnChanges, OnDestroy, inject } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MessageModule } from 'primeng/message';\nimport { Subscription, combineLatestWith } from 'rxjs';\nimport { MetaFormService } from '../services/meta-form.service';\nimport { ErrorType } from '../utils/error-type.util';\n\n@Component({\n standalone: true,\n imports: [MessageModule],\n selector: 'phoenix-inline-field-error',\n styles: [``],\n animations: [\n trigger('slideInOut', [\n transition(':enter', [\n style({ transform: 'translateY(-60%)' }),\n animate('100ms ease-out', style({ transform: 'translateY(0%)' })),\n ]),\n transition(':leave', [\n animate(\n '50ms ease-out',\n style({ transform: 'translateY(-100%)', opacity: '0' }),\n ),\n ]),\n ]),\n ],\n template: `\n <div style=\"height: 1px;\">\n @if (note) {\n <div [@slideInOut] class=\"static\">\n <!-- <small class=\"text-blue-700\" *ngIf=\"note.type === 'info'; else warn\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 11px\"></i>\n {{ note.content }}\n </small> -->\n @if (note?.type) {\n <p-message\n [severity]=\"note?.type\"\n variant=\"simple\"\n size=\"small\"\n styleClass=\"small-message\"\n >\n @if (note?.icon) {\n <ng-template #icon>\n <i [class]=\"note?.icon\" style=\"font-size: 11px\"></i>\n </ng-template>\n }\n {{ note.content }}</p-message\n >\n } @else {\n <!-- <small class=\"p-error\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 11px\"></i>\n {{ note }}\n </small> -->\n <p-message\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n styleClass=\"small-message\"\n >\n <ng-template #icon>\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 11px\"></i>\n </ng-template>\n {{ note }}</p-message\n >\n }\n </div>\n }\n </div>\n `,\n})\nexport class InlineFieldError implements OnDestroy, OnChanges {\n @Input() ctrl!: AbstractControl;\n\n note!: any;\n constructor(private translateService: TranslateService) {}\n sub$!: Subscription;\n metaFormService = inject(MetaFormService);\n loaded: Boolean = false;\n\n ngOnChanges(): void {\n if (this.ctrl && !this.loaded) {\n if (this.ctrl?.status === 'PENDING') {\n ///this is only for async validators for name and title. Remove this one, we have this in onChange() method\n this.ctrl.updateValueAndValidity();\n }\n this.sub$ = this.ctrl?.statusChanges\n ?.pipe(combineLatestWith(this.metaFormService.formReadOnlyState))\n .subscribe((arr) => {\n if (arr[0] !== 'VALID') {\n setTimeout(() => {\n this.note = this.getErrorMessage(this.ctrl);\n });\n } else {\n setTimeout(() => {\n this.note = null;\n });\n }\n // if (arr[1]) {\n // setTimeout(() => {\n // this.note = null;\n // });\n // }\n });\n this.loaded = true;\n }\n }\n\n getErrorMessage(control: AbstractControl): any {\n if (control?.status === 'PENDING') {\n return {\n type: 'info',\n content: this.translateService.instant(\n 'VALIDATION_MESSAGE.CHECKING_ENTRY_AVAILABILITY',\n ),\n icon: 'pi pi-spin pi-spinner',\n };\n }\n\n if (control?.errors) {\n console.log('error type', Object.keys(control.errors)[0]);\n switch (Object.keys(control.errors)[0]) {\n case ErrorType.REQUIRED:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.THIS_FIELD_IS_REQUIRED',\n );\n case ErrorType.MIN_LENGTH:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_AT_LEAST',\n { minlength: control.errors['minlength'].requiredLength },\n );\n case ErrorType.MAX_LENGTH:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_NO_MORE',\n { maxlength: control.errors['maxlength'].requiredLength },\n );\n case ErrorType.EMAIL:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.ENTER_VALID_EMAIL',\n );\n case ErrorType.DANGEROUS_CHARS:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.NO_SPECIAL_CHARS_ALLOWED',\n );\n case ErrorType.CUSTOM:\n return this.translateService.instant(control?.errors?.['custom']);\n\n case ErrorType.UIQUE_ENTRY:\n return control.errors['uniqueEntry'];\n\n case ErrorType.TIMEPERIOD:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_SHOULD_MATCH_TIMEPATTERN',\n );\n\n case ErrorType.MAX:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_SHOULD_BE_LESS_THAN_AND_MORE_THAN',\n {\n lowerValue: control.errors['min']?.min ?? 0,\n upperValue: control.errors['max']?.max,\n },\n );\n\n case ErrorType.DUE_DATE:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.INVALID_DATE',\n );\n case ErrorType.UIQUE:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_IS_ALREADY_IN_USE',\n );\n case ErrorType.TIMEPERIOD_LIMIT_MAX:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_SHOULD_MATCH_TIMEPATTERN_LIMIT_MAX',\n );\n\n case ErrorType.TIMEPERIOD_LIMIT_MIN:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_SHOULD_MATCH_TIMEPATTERN_LIMIT_MIN',\n );\n\n case ErrorType.BOTH_DATES:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.BOTH_START_END_DATE_REQUIRED',\n );\n case ErrorType.DATE_COMPARE:\n return this.translateService.instant(control.errors['dateCompare']);\n\n // add more cases for other validators as needed\n case ErrorType.PATTERN:\n const re = '^(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?$';\n\n if (control?.errors?.['pattern']?.requiredPattern === re)\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_SHOUL_BE_URL',\n );\n else {\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.INVALID_VALUE',\n );\n }\n // add more cases for other validators as needed\n default:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.INVALID_VALUE',\n );\n }\n } else return '';\n }\n\n ngOnDestroy(): void {\n this.sub$?.unsubscribe();\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { ControlValueAccessor, FormGroup } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\n\n@Directive()\nexport class BaseMetaField implements ControlValueAccessor {\n @Input() disable: boolean = false;\n @Input() control: any;\n @Input() parentForm!: FormGroup;\n fcs$!: Subscription | undefined;\n cfc$!: Subscription | undefined;\n\n public value!: any;\n public onChanged!: (value: any) => void;\n public onTouched!: () => void;\n ctrl: any;\n\n protected changeSub = new Subject<boolean>();\n protected changeSubs$!: Subscription;\n\n ngOnInit() {\n this.ctrl = this.parentForm.get(this.control.configuration.key);\n }\n\n getInputValue(event: Event | any): any {\n if (event.value) {\n return event.value;\n }\n if (event.target instanceof HTMLInputElement) {\n return event.target.value?.trim();\n }\n if (event.target instanceof HTMLTextAreaElement) {\n return event.target.value;\n }\n return '';\n }\n\n writeValue(value: string): void {\n this.value = value;\n }\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n this.changeSub.next(true);\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disable = isDisabled;\n }\n\n ngOnDestroy(): void {\n this.changeSubs$?.unsubscribe();\n this.fcs$?.unsubscribe();\n this.cfc$?.unsubscribe();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DatePickerModule } from 'primeng/datepicker';\n\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-calendar',\n standalone: true,\n imports: [\n CommonModule,\n MetaLabelComponent,\n FormsModule,\n InlineFieldError,\n DatePickerModule,\n ],\n template: `\n <div [hidden]=\"control?.hidden\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-datepicker\n [attr.data-cy]=\"'calendar-' + control?.id\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onModelChange($event)\"\n [style]=\"{ width: '100%' }\"\n [disabled]=\"disable\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [minDate]=\"control.configuration?.minDate\"\n [maxDate]=\"control.configuration?.maxDate\"\n [showIcon]=\"true\"\n (onClearClick)=\"onDateClear()\"\n [showTime]=\"control.configuration?.showTime\"\n hourFormat=\"24\"\n appendTo=\"body\"\n ></p-datepicker>\n\n <phoenix-inline-field-error [ctrl]=\"ctrl\"></phoenix-inline-field-error>\n </div>\n `,\n styleUrls: ['./meta-calendar.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaCalendarComponent),\n multi: true,\n },\n ],\n})\nexport class MetaCalendarComponent extends BaseMetaField {\n onModelChange(val: Date | null) {\n if (!val) {\n this.onChanged(null);\n return;\n }\n\n const showTime = !!this.control?.configuration?.showTime;\n\n if (!showTime) {\n const normalized = new Date(\n val.getFullYear(),\n val.getMonth(),\n val.getDate(),\n 12, 0, 0, 0\n );\n this.value = normalized;\n\n this.parentForm?.controls?.[this.control.configuration.key]?.setValue(normalized, {\n emitEvent: false,\n });\n\n this.onChanged(normalized);\n return;\n }\n\n this.onChanged(val);\n }\n\n onDateClear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null, { emitEvent: false });\n this.value = null as any;\n this.onChanged(null);\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { PopoverModule } from 'primeng/popover';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-checkbox-color-picker',\n standalone: true,\n imports: [\n CommonModule,\n CheckboxModule,\n FormsModule,\n TranslateModule,\n PopoverModule,\n MetaLabelComponent,\n ],\n template: `\n <p-popover #popover>\n <div class=\"color-picker\">\n @for (row of control.configuration.options; track $index; let last = $last) {\n <div class=\"color-row\" [ngClass]=\"{ 'mb-2': !last }\">\n @for (color of row; track color) {\n <div\n class=\"color-box\"\n [ngStyle]=\"{\n 'background-color': color,\n outline: focusedColor === color ? '3px solid ' + color : 'none',\n 'outline-offset': focusedColor === color ? '3px' : '0'\n }\"\n (click)=\"onChanged(color); changeColor(color); popover.hide()\"\n ></div>\n }\n </div>\n }\n </div>\n </p-popover>\n\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <div\n class=\"selected-color\"\n [ngStyle]=\"{ 'background-color': value, marginTop: '3px' }\"\n [attr.data-cy]=\"'checkbox-' + control?.id\"\n (click)=\"popover.toggle($event)\"\n ></div>\n `,\n styles: [\n `\n ::ng-deep .p-popover-content {\n padding: 0 !important;\n }\n\n .color-picker {\n display: flex;\n flex-direction: column;\n padding: 10px;\n }\n\n .color-row {\n display: flex;\n justify-content: center;\n gap: 8px;\n }\n\n .color-box {\n margin: 2px;\n width: 30px;\n height: 30px;\n cursor: pointer;\n border-radius: 4px;\n }\n\n .color-box:hover {\n transform: scale(1.1);\n opacity: 0.9;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);\n }\n\n .selected-color {\n width: 35px;\n height: 35px;\n border: 2px solid #ccc;\n cursor: pointer;\n border-radius: 6px;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaCheckboxColorPickerComponent),\n multi: true,\n },\n ],\n})\nexport class MetaCheckboxColorPickerComponent extends BaseMetaField {\n private translateService = inject(TranslateService);\n\n currentLang = this.translateService.currentLang;\n focusedColor: string | null = null;\n\n changeColor(color: string): void {\n this.focusedColor = color;\n this.value = color;\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { FieldLabelPipe } from '../../utils/field-label.pipe';\n\n@Component({\n selector: 'phoenix-meta-checkbox',\n standalone: true,\n imports: [\n CommonModule,\n CheckboxModule,\n FormsModule,\n TranslateModule,\n FieldLabelPipe,\n ],\n template: ` <div class=\"ml-3 field-checkbox\">\n <p-checkbox\n [attr.data-cy]=\"'checkbox-' + control?.id\"\n [(ngModel)]=\"value\"\n (onChange)=\"onChanged(value)\"\n [binary]=\"true\"\n inputId=\"binary\"\n [disabled]=\"control.readOnly || disable\"\n ></p-checkbox>\n\n <label for=\"binary\">\n {{ control | fieldLabel: currentLang | translate }}\n <span *ngIf=\"control.mandatory\" class=\"red-asterisk\">*</span></label\n >\n </div>`,\n styles: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaCheckboxComponent),\n multi: true,\n },\n ],\n})\nexport class MetaCheckboxComponent extends BaseMetaField {\n private translateService = inject(TranslateService);\n currentLang = this.translateService.currentLang;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ColorPickerModule } from 'primeng/colorpicker';\n\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-color-picker',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n TranslateModule,\n ColorPickerModule,\n MetaLabelComponent,\n InlineFieldError,\n ],\n template: `\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-colorPicker\n class=\"color-swatch\"\n [attr.data-cy]=\"'color-picker-' + control?.id\"\n [(ngModel)]=\"value\"\n (onChange)=\"onChanged(value)\"\n [disabled]=\"disable\"\n [appendTo]=\"'body'\"\n ></p-colorPicker>\n\n @if (!control?.hidden) {\n <phoenix-inline-field-error [ctrl]=\"ctrl\"></phoenix-inline-field-error>\n }\n `,\n styles: [\n `\n :host ::ng-deep .color-swatch.p-colorpicker {\n width: 35px;\n height: 35px;\n padding: 0 !important;\n border: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n\n :host ::ng-deep .color-swatch .p-colorpicker-preview {\n width: 35px !important;\n height: 35px !important;\n border: none !important; \n border-radius: 6px !important;\n box-shadow: none !important;\n }\n\n :host ::ng-deep .color-swatch .p-colorpicker-preview:focus,\n :host ::ng-deep .color-swatch .p-colorpicker-preview:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaColorPickerComponent),\n multi: true,\n },\n ],\n})\nexport class MetaColorPickerComponent extends BaseMetaField {}","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { KeyFilterModule } from 'primeng/keyfilter';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-currency',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n InputTextModule,\n InlineFieldError,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n InputNumberModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <p-inputNumber\n [attr.data-cy]=\"'currency-' + control?.id\"\n #myInput\n [style.display]=\"control.hidden ? 'none' : 'block'\"\n mode=\"currency\"\n inputId=\"currency-germany\"\n currency=\"EUR\"\n locale=\"de-DE\"\n [min]=\"10\"\n [(ngModel)]=\"value\"\n (input)=\"input($event)\"\n (ngModelChange)=\"changeValue($event)\"\n (blur)=\"onTouched()\"\n [disabled]=\"disable\"\n class=\"w-full\"\n [style]=\"{ width: '100%' }\"\n >\n </p-inputNumber>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [\n `\n :host ::ng-deep p-inputnumber input {\n width: 100% !important;\n box-sizing: border-box;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaCurrencyComponent),\n multi: true,\n },\n ],\n})\nexport class MetaCurrencyComponent extends BaseMetaField {\n changeValue(data: any) {\n this.parentForm.controls[this.control?.configuration?.key].setValue(data);\n }\n input(data: any) {\n const number = this.convertCurrencyStringToNumber(data.target.value);\n this.parentForm.controls[this.control?.configuration?.key].setValue(number);\n }\n\n convertCurrencyStringToNumber(currencyString: string) {\n // Remove dots for thousands separators\n const stringWithoutDots = currencyString.replace(/\\./g, '');\n\n // Replace comma with dot for decimal separator\n const stringWithDotDecimal = stringWithoutDots.replace(',', '.');\n\n // Parse the string into a number\n const numericValue = parseFloat(stringWithDotDecimal);\n\n return numericValue;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'phoenix-meta-multiple-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MultiSelectModule,\n FormsModule,\n MetaLabelComponent,\n InlineFieldError,\n TranslateModule,\n ],\n template: `\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <p-multiSelect\n [attr.data-cy]=\"'multiSelect-' + control?.id\"\n [hidden]=\"control?.hidden\"\n (onChange)=\"onChanged(value)\"\n (onSelectAllChange)=\"onChanged(value)\"\n [(ngModel)]=\"value\"\n [options]=\"control.configuration.options\"\n optionLabel=\"userFriendlyMessage\"\n [filter]=\"control.configuration.options.length > 15\"\n [style]=\"{ width: '100%' }\"\n [disabled]=\"disable\"\n appendTo=\"body\"\n [showHeader]=\"false\"\n ></p-multiSelect>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n `,\n styles: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaMultipleSelectComponent),\n multi: true,\n },\n ],\n})\nexport class MetaMultipleSelectComponent extends BaseMetaField {}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { KeyFilterModule } from 'primeng/keyfilter';\n// import { LanguageParamResolverPipe, Regex } from '@phoenix/util/util-common';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\n\n@Component({\n selector: 'phoenix-meta-number-input',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputNumberModule,\n InlineFieldError,\n FormsModule,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n InputTextModule,\n // LanguageParamResolverPipe,\n ],\n template: `\n <div [hidden]=\"control?.hidden\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <p-inputNumber\n [attr.data-cy]=\"'input-number-' + control?.id\"\n [(ngModel)]=\"value\"\n (onInput)=\"onChanged(getInputValue($event))\"\n (blur)=\"onTouched()\"\n [disabled]=\"disable\"\n [useGrouping]=\"false\"\n [min]=\"1\"\n class=\"w-full\"\n [style]=\"{ width: '100%' }\"\n >\n </p-inputNumber>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [``],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaNumberComponent),\n multi: true,\n },\n ],\n})\nexport class MetaNumberComponent extends BaseMetaField {\n // public regex = Regex;\n lang = inject(TranslateService).currentLang;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { PasswordModule } from 'primeng/password';\n\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-password-feild',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n TranslateModule,\n\n PasswordModule,\n MetaLabelComponent,\n InlineFieldError,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-password\n [attr.data-cy]=\"'password-' + control?.id\"\n [(ngModel)]=\"value\"\n [disabled]=\"disable\"\n [hidden]=\"control?.hidden\"\n [feedback]=\"false\"\n (input)=\"onChanged(getInputValue($event))\"\n class=\"ng-invalid ng-dirty\"\n [autocomplete]=\"'one-time-code'\"\n ></p-password>\n\n @if (!control?.hidden) {\n <phoenix-inline-field-error [ctrl]=\"ctrl\"></phoenix-inline-field-error>\n }\n </div>\n `,\n styles: [\n `\n :host ::ng-deep .p-component {\n width: 100%;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaPasswordFeildComponent),\n multi: true,\n },\n ],\n})\nexport class MetaPasswordFeildComponent extends BaseMetaField {}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { SelectButtonModule } from 'primeng/selectbutton';\n\n@Component({\n selector: 'phoenix-meta-select-button',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InlineFieldError,\n MetaLabelComponent,\n TranslateModule,\n FormsModule,\n SelectButtonModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-selectButton\n [attr.data-cy]=\"'select-button-' + control?.id\"\n [options]=\"control.configuration.options\"\n [hidden]=\"control?.hidden\"\n [(ngModel)]=\"value\"\n [disabled]=\"disable\"\n (onChange)=\"onChanged(value)\"\n optionLabel=\"userFriendlyMessage\"\n optionValue=\"value\"\n ></p-selectButton>\n\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaSelectButtonComponent),\n multi: true,\n },\n ],\n})\nexport class MetaSelectButtonComponent extends BaseMetaField {}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'translateDropdownData',\n standalone: true,\n})\nexport class TranslateDropdownData implements PipeTransform {\n protected translateService = inject(TranslateService);\n transform(data: any, paramName: string): any {\n let arr: any = [];\n paramName\n ? data?.forEach((item: any) => {\n const obj = item;\n obj[paramName] = item[paramName]\n ? this.translateService.instant(item[paramName])\n : paramName;\n arr.push(obj);\n })\n : (arr = data);\n\n return arr;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { ImageModule } from 'primeng/image';\nimport { SelectModule } from 'primeng/select';\nimport { debounceTime, of, switchMap } from 'rxjs';\n\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { TranslateDropdownData } from '../../utils/translate-dropdown-data.pipe';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-single-select-object-based',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n SelectModule,\n MetaLabelComponent,\n FormsModule,\n TranslateModule,\n TranslateDropdownData,\n ImageModule,\n InlineFieldError,\n ],\n template: `\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-select\n [attr.data-cy]=\"'single-select-ob' + control?.id\"\n [hidden]=\"control?.hidden\"\n [optionLabel]=\"oiKey\"\n [options]=\"control.configuration.options | translateDropdownData : 'value'\"\n [showClear]=\"control.configuration?.showClear\"\n [(ngModel)]=\"value\"\n [style]=\"{ width: '100%' }\"\n [disabled]=\"disable || control?.disable\"\n [filter]=\"control.configuration?.filter\"\n filterBy=\"value\"\n [group]=\"control.configuration.group\"\n (onClear)=\"onDateClear()\"\n (onChange)=\"onChanged(value)\"\n [panelStyle]=\"{ width: '100%' }\"\n appendTo=\"body\"\n >\n <ng-template let-option pTemplate=\"group\">\n <div class=\"flex align-items-center\">\n <span class=\"font-bold ml-2\">{{ option.value }}</span>\n </div>\n </ng-template>\n\n <ng-template let-data pTemplate=\"selectedItem\">\n @if (data) {\n <div class=\"flex align-items-center gap-2\">\n <div>{{ data?.[oiKey] }}</div>\n </div>\n }\n </ng-template>\n\n <ng-template let-option pTemplate=\"item\">\n <div class=\"flex\">\n @if (option.icon) {\n <i [ngClass]=\"option.icon\" class=\"mr-1\"></i>\n }\n <div>{{ option?.value }}</div>\n </div>\n </ng-template>\n </p-select>\n\n @if (!control?.hidden) {\n <phoenix-inline-field-error [ctrl]=\"ctrl\"></phoenix-inline-field-error>\n }\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaSingleSelectObjectBasedComponent),\n multi: true,\n },\n ],\n})\nexport class MetaSingleSelectObjectBasedComponent extends BaseMetaField {\n public oiKey: string = 'value';\n\n onDateClear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null);\n }\n\n constructor() {\n super();\n this.changeSubs$ = this.changeSub\n .asObservable()\n .pipe(\n debounceTime(500),\n switchMap((item) => of(item))\n )\n .subscribe((trigg: boolean) => {\n if (trigg) {\n this.changes();\n }\n });\n }\n\n override ngOnInit(): void {\n this.changes();\n }\n\n changes(): void {\n let soi = this.control.configuration.options?.[0];\n\n if (!this.parentForm.get(this.control.configuration.key)?.value) {\n this.control.configuration.options?.forEach((o: any, i: number) => {\n if (o.update?.default || o.default) {\n soi = this.control.configuration.options[i];\n this.parentForm.get(this.control.configuration.key)?.setValue(soi);\n }\n });\n }\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ImageModule } from 'primeng/image';\nimport { SelectModule } from 'primeng/select';\nimport { debounceTime, of, switchMap } from 'rxjs';\n\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { TranslateDropdownData } from '../../utils/translate-dropdown-data.pipe';\n\n@Component({\n selector: 'phoenix-meta-single-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MetaLabelComponent,\n SelectModule,\n FormsModule,\n TranslateModule,\n TranslateDropdownData,\n ImageModule,\n InlineFieldError,\n ],\n template: `\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-select\n [attr.data-cy]=\"'single-select-' + control?.id\"\n [hidden]=\"control?.hidden\"\n [optionLabel]=\"flagMode ? 'viewName' : oiKey ? oiKey : 'labelKeyValEn'\"\n [optionValue]=\"flagMode ? 'original' : undefined\"\n [options]=\"\n flagMode\n ? flagOptions\n : (control.configuration.options\n | translateDropdownData : (oiKey ? oiKey : 'labelKeyValEn'))\n \"\n [dataKey]=\"flagMode ? 'key' : dataKeyProp\"\n [filter]=\"control.configuration.options.length > 15\"\n [filterFields]=\"\n flagMode\n ? [\n 'viewName',\n 'viewCode',\n 'original.userFriendlyMessage',\n 'original.key'\n ]\n : undefined\n \"\n [showClear]=\"control.configuration?.showClear\"\n [(ngModel)]=\"value\"\n [style]=\"{ width: '100%' }\"\n [disabled]=\"disable || control?.disable\"\n [group]=\"control.configuration.group\"\n (onClear)=\"onDateClear()\"\n (onChange)=\"onChanged($event.value)\"\n [panelStyle]=\"{ width: '100%' }\"\n appendTo=\"body\"\n >\n <!-- Optional group header -->\n <ng-template let-option pTemplate=\"group\">\n <div class=\"flex align-items-center\">\n <i [class]=\"option.icon\"></i>\n <span class=\"font-bold ml-2\">{{ option.label }}</span>\n </div>\n </ng-template>\n\n <!-- Selected value (in flag mode 'data' is ORIGINAL object) -->\n <ng-template let-data pTemplate=\"selectedItem\">\n <div class=\"flex align-items-center gap-2\" *ngIf=\"data\">\n <img\n *ngIf=\"flagMode && (data.key || data.code)\"\n src=\"https://primefaces.org/cdn/primeng/images/demo/flag/flag_placeholder.png\"\n [class]=\"'flag flag-' + (data.key || data.code).toLowerCase()\"\n style=\"width:22px\"\n alt=\"\"\n />\n <img\n *ngIf=\"!flagMode && data?.image\"\n [src]=\"data.image\"\n height=\"17\"\n width=\"20\"\n alt=\"\"\n />\n <div>\n {{ flagMode\n ? (data.userFriendlyMessage || data.name || data['labelKeyValEn'])\n : (data?.[oiKey] ? data?.[oiKey] : data?.['labelKeyValEn']) }}\n </div>\n </div>\n </ng-template>\n\n <!-- Dropdown list item (in flag mode 'option' is the VIEW-MODEL) -->\n <ng-template let-option pTemplate=\"item\">\n <div class=\"flex align-items-center gap-2\">\n <img\n *ngIf=\"flagMode && option.viewCode\"\n src=\"https://primefaces.org/cdn/primeng/images/demo/flag/flag_placeholder.png\"\n [class]=\"'flag flag-' + option.viewCode.toLowerCase()\"\n style=\"width:22px\"\n alt=\"\"\n />\n <img\n *ngIf=\"!flagMode && option?.image\"\n [src]=\"option.image\"\n height=\"20\"\n width=\"20\"\n alt=\"\"\n />\n <div>\n {{ flagMode\n ? option.viewName\n : (option?.[oiKey] ? option?.[oiKey] : option?.['labelKeyValEn']) }}\n </div>\n </div>\n </ng-template>\n </p-select>\n\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n `,\n styles: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaSingleSelectComponent),\n multi: true,\n },\n ],\n})\nexport class MetaSingleSelectComponent extends BaseMetaField {\n /** Label key used in legacy mode */\n public oiKey!: string;\n\n /** True = render flags + search; value remains original { key, userFriendlyMessage } */\n public flagMode = false;\n\n /**\n * In flag mode, we feed a VIEW list that merges the original option with view fields:\n * { ...original, viewName, viewCode, original } and select by 'original'.\n */\n public flagOptions: Array<\n { viewName: string; viewCode: string; original: any } & any\n > = [];\n\n private translateService = inject(TranslateService);\n\n onDateClear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null);\n }\n\n constructor() {\n super();\n this.changeSubs$ = this.changeSub\n .asObservable()\n .pipe(\n debounceTime(300),\n switchMap((x) => of(x))\n )\n .subscribe((trigg: boolean) => {\n if (trigg) this.changes();\n });\n }\n\n override ngOnInit(): void {\n this.changes();\n }\n\n /** dataKey for legacy mode; lets PrimeNG match value to option by a stable field */\n get dataKeyProp(): string | undefined {\n const opts = this.control?.configuration?.options ?? [];\n const sample = opts[0] || {};\n if ('key' in sample) return 'key';\n if ('value' in sample) return 'value';\n return undefined;\n }\n\n /** Initialize/normalize options and current value */\n changes(): void {\n this.flagMode = !!this.control?.configuration?.flagMode;\n\n if (this.flagMode) {\n const currentLang = this.translateService.currentLang || 'en';\n const source = this.control.configuration.options || [];\n\n // Merge original option + view fields; keep original shape for the model\n this.flagOptions = source\n .map((o: any) => {\n const viewName =\n o.userFriendlyMessage ?? o.name ?? o['labelKeyValEn'] ?? '';\n const viewCode = (\n o.key ??\n o.code ??\n o.iso2 ??\n o.value ??\n ''\n ).toString();\n return { ...o, viewName, viewCode, original: o };\n })\n .filter(\n (vm: { viewName: any; viewCode: any }) => vm.viewName && vm.viewCode\n )\n .sort((a: { viewName: string }, b: { viewName: any }) =>\n a.viewName.localeCompare(b.viewName, currentLang, {\n sensitivity: 'base',\n })\n );\n\n // Normalize current value so the select can display it:\n // - if backend sent 'DE' (string) → find matching option by key/code and set the ORIGINAL object\n // - if backend sent { code:'DE', name:'Germany' } → map to ORIGINAL, or minimally to {key,userFriendlyMessage}\n const v = this.value;\n if (typeof v === 'string' && v) {\n const found = this.flagOptions.find(\n (o) =>\n (o.key && o.key.toLowerCase() === v.toLowerCase()) ||\n (o.viewCode && o.viewCode.toLowerCase() === v.toLowerCase())\n );\n if (found) {\n this.value = found.original;\n this.onChanged?.(this.value);\n }\n } else if (\n v &&\n typeof v === 'object' &&\n !('key' in v) &&\n ('code' in v || 'value' in v)\n ) {\n const key = (v.key ?? v.code ?? v.value ?? '').toString();\n const found = this.flagOptions.find(\n (o) =>\n (o.key && o.key.toLowerCase() === key.toLowerCase()) ||\n (o.viewCode && o.viewCode.toLowerCase() === key.toLowerCase())\n );\n if (found) {\n this.value = found.original;\n this.onChanged?.(this.value);\n } else {\n // fallback minimal normalization\n this.value = {\n key,\n userFriendlyMessage:\n v.userFriendlyMessage ?? v.name ?? v['labelKeyValEn'] ?? '',\n };\n this.onChanged?.(this.value);\n }\n }\n return;\n }\n\n // Legacy (no flags): keep previous behavior\n this.oiKey = 'userFriendlyMessage';\n const currentLang = this.translateService.currentLang;\n let soi = this.control.configuration.options?.[0];\n\n if (\n this.control.mandatory &&\n this.control.configuration.options?.length === 1\n ) {\n this.parentForm\n .get(this.control.configuration.key)\n ?.setValue(this.control.configuration.options[0]);\n }\n\n if (!this.parentForm.get(this.control.configuration.key)?.value) {\n this.control.configuration.options?.forEach((o: any, i: number) => {\n if (o.update?.default || o.default) {\n soi = this.control.configuration.options[i];\n this.parentForm.get(this.control.configuration.key)?.setValue(soi);\n }\n });\n }\n\n if (soi?.labelKeyValEn) {\n this.oiKey =\n 'labelKeyVal' +\n currentLang.charAt(0).toUpperCase() +\n currentLang.slice(1);\n return;\n }\n if (soi?.userFriendlyMessage) {\n this.oiKey = 'userFriendlyMessage';\n return;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n forwardRef,\n inject,\n Input,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DatePickerModule } from 'primeng/datepicker';\n\n@Component({\n selector: 'phoenix-meta-start-due-date',\n standalone: true,\n imports: [\n DatePickerModule,\n InlineFieldError,\n ReactiveFormsModule,\n FormsModule,\n MetaLabelComponent,\n TranslateModule,\n ],\n template: `\n <div [hidden]=\"control?.hidden\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <div class=\"flex align-items-center gap-2 w-full\">\n <!-- START -->\n <div class=\"flex-1\" style=\"min-width: 0;\">\n <p-datepicker\n class=\"w-full\"\n [inputStyle]=\"{ width: '100%' }\"\n [attr.data-cy]=\"'start-date-' + control?.id\"\n (onSelect)=\"onStartDateSelect($event)\"\n (onClearClick)=\"onStartDateClear()\"\n [(ngModel)]=\"startDate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [showIcon]=\"true\"\n [placeholder]=\"'LABELS.PLANNED_START' | translate\"\n appendTo=\"body\"\n ></p-datepicker>\n </div>\n\n <!-- ARROW -->\n <div class=\"flex align-items-center justify-content-center\" style=\"flex: 0 0 18px;\">\n <i class=\"pi pi-arrow-right text-sm\" style=\"color: var(--surface-600)\"></i>\n </div>\n\n <!-- DUE -->\n <div class=\"flex-1\" style=\"min-width: 0;\">\n <p-datepicker\n class=\"w-full\"\n [inputStyle]=\"{ width: '100%' }\"\n [attr.data-cy]=\"'due-date-' + control?.id\"\n (onSelect)=\"onEndDateSelect($event)\"\n (onClearClick)=\"onEndDateClear()\"\n [(ngModel)]=\"endDate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [showIcon]=\"true\"\n [placeholder]=\"'LABELS.PLANNED_END' | translate\"\n appendTo=\"body\"\n ></p-datepicker>\n </div>\n </div>\n\n <phoenix-inline-field-error [ctrl]=\"ctrl\"></phoenix-inline-field-error>\n </div>\n `,\n styles: [``],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaStartDueDateComponent),\n multi: true,\n },\n ],\n})\nexport class MetaStartDueDateComponent implements ControlValueAccessor {\n @Input() control: any;\n @Input() parentForm!: FormGroup;\n\n ctrl: any;\n private readonly dr = inject(DestroyRef);\n\n startDate: Date | null = null;\n endDate: Date | null = null;\n\n public onChanged: (value: any) => void = () => { };\n public onTouched: () => void = () => { };\n\n ngOnInit() {\n this.ctrl = this.parentForm.get(this.control.configuration.key);\n\n if (this.control.mandatory) this.ctrl?.setValidators(this.ctrl?.validator);\n\n this.parentForm\n .get(this.control.configuration.key)\n ?.valueChanges.pipe(takeUntilDestroyed(this.dr))\n .subscribe(() => this.validateDates());\n\n this.validateDates();\n }\n\n private normalizeDateOnly(v: any): Date | null {\n if (!v) return null;\n const d = v instanceof Date ? v : new Date(v);\n if (isNaN(d.getTime())) return null;\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 12, 0, 0, 0);\n }\n\n writeValue(obj: any): void {\n if (obj) {\n this.startDate = this.normalizeDateOnly(obj.startDate);\n this.endDate = this.normalizeDateOnly(obj.endDate);\n } else {\n this.startDate = null;\n this.endDate = null;\n }\n this.validateDates();\n }\n\n // Handle start date selection\n onStartDateSelect(event: any) {\n this.startDate = this.normalizeDateOnly(event);\n this.onChanged({ startDate: this.startDate, endDate: this.endDate });\n this.validateDates();\n }\n\n // Handle end date selection\n onEndDateSelect(event: any) {\n this.endDate = this.normalizeDateOnly(event);\n this.onChanged({ startDate: this.startDate, endDate: this.endDate });\n this.validateDates();\n }\n\n // Handle start date clear value\n onStartDateClear() {\n this.startDate = null;\n this.onChanged({ startDate: this.startDate, endDate: this.endDate });\n this.validateDates();\n }\n\n // Handle end date clear value\n onEndDateClear() {\n this.endDate = null;\n this.onChanged({ startDate: this.startDate, endDate: this.endDate });\n this.validateDates();\n }\n\n validateDates() {\n const c = this.parentForm.get(this.control.configuration.key);\n if (!c) return;\n\n // clear previous errors\n c.setErrors(null);\n\n // Both dates are mandatory\n if (this.control.mandatory && (!this.startDate || !this.endDate)) {\n c.setErrors({ required: true });\n return;\n }\n\n if (this.startDate && this.endDate) {\n const s = new Date(\n this.startDate.getFullYear(),\n this.startDate.getMonth(),\n this.startDate.getDate(),\n 12, 0, 0, 0\n ).getTime();\n\n const e = new Date(\n this.endDate.getFullYear(),\n this.endDate.getMonth(),\n this.endDate.getDate(),\n 12, 0, 0, 0\n ).getTime();\n\n if (s > e) {\n c.setErrors({ dueDate: true });\n return;\n }\n }\n }\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChanged = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\n\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n selector: 'phoenix-meta-switch',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InlineFieldError,\n MetaLabelComponent,\n TranslateModule,\n ToggleSwitchModule,\n FormsModule,\n MessageModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-toggleSwitch\n [attr.data-cy]=\"'switch-' + control?.id\"\n class=\"ml-1 mr-1\"\n [hidden]=\"control?.hidden\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onChanged($event)\"\n [disabled]=\"disable\"\n ></p-toggleSwitch>\n\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n @if (control?.configuration?.message) {\n <p-message\n [severity]=\"control.configuration.message?.type\"\n variant=\"simple\"\n size=\"small\"\n styleClass=\"small-message\"\n >\n @if (control.configuration.message?.icon) {\n <ng-template #icon>\n <i\n [class]=\"control.configuration.message.icon\"\n style=\"font-size: 11px\"\n ></i>\n </ng-template>\n }\n <span style=\"font-style: italic;\">\n {{ control.configuration.message.content | translate }}\n </span></p-message\n >\n }\n </div>\n `,\n styles: [\n `\n :host ::ng-deep .p-toggleswitch {\n margin-top: 12px;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaSwitchComponent),\n multi: true,\n },\n ],\n})\nexport class MetaSwitchComponent extends BaseMetaField {}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { TextareaModule } from 'primeng/textarea';\n\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-text-area',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n TextareaModule,\n MetaLabelComponent,\n TranslateModule,\n InlineFieldError,\n ],\n template: `\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <textarea\n [attr.data-cy]=\"'text-area-' + control?.id\"\n [hidden]=\"control?.hidden\"\n [(ngModel)]=\"value\"\n (input)=\"onChanged(getInputValue($event))\"\n [disabled]=\"disable\"\n (blur)=\"onTouched()\"\n [rows]=\"5\"\n [cols]=\"30\"\n pTextarea\n class=\"w-full h-10rem\"\n ></textarea>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n `,\n styles: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaTextAreaComponent),\n multi: true,\n },\n ],\n})\nexport class MetaTextAreaComponent extends BaseMetaField {\n lang = inject(TranslateService).currentLang;\n private stripHtmlTags(input: string): string {\n if (!input) return '';\n // Replace <br> tags (and variations) with a temporary placeholder\n const placeholder = '___BR_TAG_PLACEHOLDER___';\n const brPattern = /<br\\s*\\/?>/gi;\n let textWithPlaceholders = input.replace(brPattern, placeholder);\n\n // Replace closing block-level tags with placeholder + newline for better formatting\n const blockTags = ['p', 'div', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n blockTags.forEach((tag) => {\n const closingTagPattern = new RegExp(`</${tag}>`, 'gi');\n textWithPlaceholders = textWithPlaceholders.replace(\n closingTagPattern,\n placeholder,\n );\n });\n\n // Strip all remaining HTML tags\n const textWithoutHtml = textWithPlaceholders.replace(/<\\/?[^>]+(>|$)/g, '');\n\n // Decode HTML entities\n const decodedText = this.decodeHtmlEntities(textWithoutHtml);\n\n // Replace placeholder back with newline characters for textarea\n // Clean up multiple consecutive newlines (max 2)\n return decodedText\n .replace(new RegExp(placeholder, 'g'), '\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n }\n\n private decodeHtmlEntities(text: string): string {\n const textarea = document.createElement('textarea');\n textarea.innerHTML = text;\n return textarea.value;\n }\n\n override writeValue(value: string): void {\n // Clean HTML before assigning\n this.value = this.stripHtmlTags(value);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n forwardRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport {\n NgxEditorComponent,\n NgxEditorMenuComponent,\n Editor,\n toHTML,\n toDoc,\n Toolbar,\n schema,\n} from 'ngx-editor';\nimport { ButtonModule } from 'primeng/button';\nimport { TextareaModule } from 'primeng/textarea';\nimport { Schema } from 'prosemirror-model';\n\n// Create a custom schema that extends the default ngx-editor schema\n// to support the 'type' attribute on ordered lists\nfunction createCustomSchema(): Schema {\n const baseSchema = schema;\n const customNodes = baseSchema.spec.nodes.update('ordered_list', {\n ...baseSchema.spec.nodes.get('ordered_list'),\n attrs: {\n order: { default: 1 },\n type: { default: null }, // Add support for type attribute (1, a, A, i, I)\n },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs: (dom: HTMLElement | string) => {\n if (typeof dom === 'string') return null;\n return {\n order: dom.hasAttribute('start')\n ? parseInt(dom.getAttribute('start') || '1', 10)\n : 1,\n type: dom.getAttribute('type') || null,\n };\n },\n },\n ],\n toDOM: (node: any) => {\n const attrs: any = { order: node.attrs.order };\n if (node.attrs.type) {\n attrs.type = node.attrs.type;\n }\n return ['ol', attrs, 0];\n },\n });\n\n return new Schema({\n nodes: customNodes,\n marks: baseSchema.spec.marks,\n });\n}\n\n@Component({\n selector: 'phoenix-meta-text-editor',\n standalone: true,\n imports: [\n CommonModule,\n MetaLabelComponent,\n ReactiveFormsModule,\n FormsModule,\n InlineFieldError,\n NgxEditorComponent,\n NgxEditorMenuComponent,\n ButtonModule,\n TextareaModule,\n ],\n template: `\n <div [hidden]=\"control?.hidden\">\n <!-- Preview/Display Only Mode -->\n <div *ngIf=\"previewMode\" class=\"preview-mode\">\n <phoenix-meta-label\n *ngIf=\"!hideLabel\"\n [control]=\"control\"\n ></phoenix-meta-label>\n <div class=\"html-preview-content\" [innerHTML]=\"htmlContent\"></div>\n </div>\n\n <!-- Edit Mode -->\n <div *ngIf=\"!previewMode\">\n <div class=\"mb-2\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n </div>\n <div [attr.data-cy]=\"'editor-' + control?.id\">\n <!-- Visual Editor Mode -->\n <div *ngIf=\"!isHtmlMode\">\n <ngx-editor-menu\n [editor]=\"editor\"\n [toolbar]=\"toolbar\"\n ></ngx-editor-menu>\n <ngx-editor\n [editor]=\"editor\"\n [(ngModel)]=\"htmlContent\"\n [disabled]=\"disable\"\n (ngModelChange)=\"onEditorChange($event)\"\n (blur)=\"onTouched()\"\n ></ngx-editor>\n </div>\n\n <!-- HTML Source Mode -->\n <textarea\n *ngIf=\"isHtmlMode\"\n pTextarea\n [(ngModel)]=\"htmlContent\"\n [disabled]=\"disable\"\n (ngModelChange)=\"onHtmlChange($event)\"\n (blur)=\"onTouched()\"\n [rows]=\"10\"\n class=\"w-full font-monospace\"\n ></textarea>\n </div>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n </div>\n `,\n styles: [\n `\n :host::ng-deep {\n .NgxEditor__Wrapper {\n min-height: 120px;\n }\n .NgxEditor__Content {\n min-height: 120px;\n }\n /* remove import image if needed */\n .NgxEditor__MenuItem--IconContainer[title='Insert Image'] {\n display: none !important;\n }\n\n .font-monospace {\n font-family: 'Courier New', Courier, monospace;\n font-size: 13px;\n }\n\n .html-preview-content {\n padding: 0.75rem;\n background: var(--surface-ground);\n border: 1px solid var(--surface-border);\n border-radius: var(--border-radius);\n min-height: 50px;\n\n /* Style the rendered HTML content */\n p {\n margin: 0 0 0.5rem 0;\n }\n\n p:last-child {\n margin-bottom: 0;\n }\n\n ul,\n ol {\n margin: 0.5rem 0;\n padding-left: 1.5rem;\n }\n\n strong {\n font-weight: bold;\n }\n\n em {\n font-style: italic;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin: 0.5rem 0;\n }\n }\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaTextEditorComponent),\n multi: true,\n },\n ],\n})\nexport class MetaTextEditorComponent\n extends BaseMetaField\n implements OnInit, OnDestroy\n{\n @Input() previewMode: boolean = false;\n @Input() hideLabel: boolean = false;\n\n editor!: Editor;\n isHtmlMode = false;\n htmlContent: string = '';\n\n toolbar: Toolbar = [\n ['bold', 'italic'],\n ['underline', 'strike'],\n ['code', 'blockquote'],\n ['ordered_list', 'bullet_list'],\n [{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],\n ['link'],\n ['text_color', 'background_color'],\n ['align_left', 'align_center', 'align_right', 'align_justify'],\n ];\n\n override ngOnInit(): void {\n super.ngOnInit();\n // Only initialize editor if not in preview mode\n if (!this.previewMode) {\n this.editor = new Editor({\n schema: createCustomSchema(),\n keyboardShortcuts: true,\n history: true,\n inputRules: true,\n });\n }\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n // Only destroy editor if it was initialized\n if (this.editor) {\n this.editor.destroy();\n }\n }\n\n override writeValue(value: string): void {\n this.value = value;\n this.htmlContent = this.removeLinks(value || '');\n }\n\n @HostListener('document:keydown', ['$event'])\n handleToggleShortcut(event: KeyboardEvent): void {\n // Hidden shortcut: Ctrl/Cmd + Shift + H\n const usesToggleKey =\n (event.ctrlKey || event.metaKey) &&\n event.shiftKey &&\n event.key.toLowerCase() === 'h';\n\n if (!usesToggleKey || this.previewMode || this.disable) {\n return;\n }\n\n event.preventDefault();\n this.toggleHtmlMode();\n }\n\n onEditorChange(content: any): void {\n // Convert to HTML if the editor outputs a JSON doc object\n if (content && typeof content === 'object') {\n this.htmlContent = toHTML(content);\n } else {\n this.htmlContent = content || '';\n }\n this.htmlContent = this.removeLinks(this.htmlContent);\n this.value = this.htmlContent;\n this.onChanged(this.htmlContent);\n }\n\n onHtmlChange(html: string): void {\n this.htmlContent = this.removeLinks(html);\n this.value = this.htmlContent;\n this.onChanged(this.htmlContent);\n }\n\n toggleHtmlMode(): void {\n this.isHtmlMode = !this.isHtmlMode;\n }\n\n private removeLinks(html: string): string {\n if (!html) {\n return '';\n }\n // Unwrap only anchor links (href starting with '#') while keeping their text\n return html.replace(\n /<a\\b[^>]*href\\s*=\\s*[\"']?#([^\"']*)[\"'][^>]*>(.*?)<\\/a>/gis,\n '$2'\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { InputTextModule } from 'primeng/inputtext';\nimport { KeyFilterModule } from 'primeng/keyfilter';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-text-input',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextModule,\n InlineFieldError,\n FormsModule,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <input\n [attr.data-cy]=\"'input-' + control?.id\"\n [hidden]=\"control?.hidden\"\n [(ngModel)]=\"value\"\n (input)=\"onChanged(getInputValue($event))\"\n (blur)=\"onTouched()\"\n [disabled]=\"disable\"\n type=\"text\"\n pInputText\n class=\"w-full\"\n [autocomplete]=\"'one-time-code'\"\n />\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [``],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaTextInputComponent),\n multi: true,\n },\n ],\n})\nexport class MetaTextInputComponent extends BaseMetaField {\n lang = inject(TranslateService).currentLang;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef, inject } from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroup,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { InputTextModule } from 'primeng/inputtext';\nimport { KeyFilterModule } from 'primeng/keyfilter';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { timePeriodFromMS } from '../../utils/form-fields.utils';\n\n@Component({\n selector: 'phoenix-meta-timeperiod',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextModule,\n InlineFieldError,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <input\n [attr.data-cy]=\"'time-period-' + control?.id\"\n [hidden]=\"control?.hidden\"\n [value]=\"value\"\n (input)=\"onChanged(getInputValue($event))\"\n (blur)=\"onTouched()\"\n [disabled]=\"isDisabled\"\n type=\"text\"\n pInputText\n class=\"w-full\"\n />\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaTimeperiodComponent),\n multi: true,\n },\n ],\n})\nexport class MetaTimeperiodComponent implements ControlValueAccessor {\n @Input() control: any;\n @Input() parentForm!: FormGroup;\n value!: string;\n ctrl: any;\n\n ngOnInit() {\n this.ctrl = this.parentForm.get(this.control.configuration.key);\n }\n\n public onChanged!: (value: string) => void;\n public onTouched!: () => void;\n public isDisabled!: boolean;\n getInputValue(event: Event): string {\n if (event.target instanceof HTMLInputElement) {\n return event.target.value;\n }\n if (event.target instanceof HTMLTextAreaElement) {\n return event.target.value;\n }\n return '';\n }\n writeValue(value: string | number | null | undefined): void {\n if (value === null || value === undefined || value === '') {\n this.value = '';\n return;\n }\n\n this.value = typeof value === 'string' ? value : timePeriodFromMS(value);\n }\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean) {\n this.isDisabled = isDisabled;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n ViewChild,\n forwardRef,\n inject,\n} from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { KeyFilterModule } from 'primeng/keyfilter';\n\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'phoenix-meta-upload',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextModule,\n InlineFieldError,\n FormsModule,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n\n FileUploadModule,\n ButtonModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <p-button\n [label]=\"\n file?.name\n ? ('LABELS.SELECTED_FILE' | translate) + ': ' + file?.name\n : (control?.configuration?.label | translate)\n \"\n icon=\"pi pi-upload\"\n class=\" white-space-nowrap overflow-hidden text-overflow-ellipsis\"\n (click)=\"triggerFileInput()\"\n [text]=\"true\"\n />\n\n <input\n [attr.data-cy]=\"'upload-' + control?.id\"\n #fileInput\n [accept]=\"control?.configuration?.accept\"\n id=\"file-upload\"\n [hidden]=\"control?.hidden\"\n [(ngModel)]=\"value\"\n (input)=\"onChanged(this.fileChange($event))\"\n (blur)=\"onTouched()\"\n [disabled]=\"disable\"\n [pKeyFilter]=\"\"\n type=\"file\"\n pInputText\n class=\"w-full\"\n />\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [\n `\n input[type='file'] {\n display: none;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaUploadComponent),\n multi: true,\n },\n ],\n})\nexport class MetaUploadComponent extends BaseMetaField {\n @ViewChild('fileInput') fileInput!: ElementRef;\n\n lang = inject(TranslateService).currentLang;\n file: any;\n fileChange(event: any) {\n this.file = event.target.files[0];\n return this.file;\n }\n\n triggerFileInput() {\n this.fileInput.nativeElement.click();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'fieldCol',\n standalone: true,\n})\nexport class FieldColPipe implements PipeTransform {\n transform(value: any, ...args: unknown[]): string {\n if (value.style) {\n return `col-${value.style.colWidth} `;\n } else {\n return 'col-12';\n }\n }\n}\n","export enum GlobalPhase {\n SC_PHASE = 'sc',\n RA_PHASE = 'ra',\n PRA_PHASE = 'pra',\n IA_PHASE = 'ia',\n GAP_PHASE = 'gap',\n ADMINISTRATION_PHASE = 'administration',\n WF_PHASE = 'workflow',\n REPORT_PHASE = 'reporting',\n MY_TASKS = 'my-tasks',\n ALL_TASKS = 'all-tasks',\n TASKBOARD = 'taskboards',\n SPACES = 'spaces',\n CATALOG = 'catalog',\n CATEGORIES = 'categories',\n DASHBOARD = 'dashboard',\n MONITORING = 'monitoring',\n RISK_OVERVIEW = 'RISK_OVERVIEW',\n}\n","export class SoTypes {\n static readonly COMPL_APPLIED_MODULE = 'COMPL_APPLIED_MODULE';\n static readonly COMPL_APPLIED_MEASURE = 'COMPL_APPLIED_MEASURE';\n static readonly COMPL_APPLIED_REQUIREMENT = 'COMPL_APPLIED_REQUIREMENT';\n static readonly COMPL_APPLIED_THREAT = 'COMPL_APPLIED_THREAT';\n static readonly COMPL_APPLIED_RISK = 'COMPL_APPLIED_RISK';\n static readonly COMPL_APPLIED_CONTROL = 'COMPL_APPLIED_CONTROL';\n\n static resolveUrlType(typeLabelKey: SoTypes | string) {\n switch (typeLabelKey) {\n case SoTypes.COMPL_APPLIED_MODULE:\n return SoTypesString.MODULES;\n case SoTypes.COMPL_APPLIED_CONTROL:\n return SoTypesString.CONTROLS;\n case SoTypes.COMPL_APPLIED_REQUIREMENT:\n return SoTypesString.REQUIREMENTS;\n case SoTypes.COMPL_APPLIED_MEASURE:\n return SoTypesString.MEASURES;\n case SoTypes.COMPL_APPLIED_THREAT:\n return SoTypesString.THREATS;\n case SoTypes.COMPL_APPLIED_RISK:\n return SoTypesString.RISKS;\n case 'COMPL_RISK_OBJECT':\n return SoTypesString.RISKS;\n default:\n return SoTypesString.MODULES;\n }\n }\n\n static resolveUrlTypeByString(stringType: SoTypesString | string) {\n switch (stringType) {\n case SoTypesString.MODULES:\n return SoTypes.COMPL_APPLIED_MODULE;\n case SoTypesString.CONTROLS:\n return SoTypes.COMPL_APPLIED_CONTROL;\n case SoTypesString.REQUIREMENTS:\n return SoTypes.COMPL_APPLIED_REQUIREMENT;\n case SoTypesString.MEASURES:\n return SoTypes.COMPL_APPLIED_MEASURE;\n case SoTypesString.THREATS:\n return SoTypes.COMPL_APPLIED_THREAT;\n case SoTypesString.RISKS:\n return SoTypes.COMPL_APPLIED_RISK;\n default:\n return SoTypes.COMPL_APPLIED_MODULE;\n }\n }\n}\n\nexport enum SoTypesString {\n MODULES = 'modules',\n REQUIREMENTS = 'requirements',\n MEASURES = 'measures',\n THREATS = 'threats',\n RISKS = 'risks',\n VULNERABILITIES = 'vulnerabilities',\n DAMAGE_SCENARIO = 'damagescenarios',\n RISK_TREATMENT = 'risktreatments',\n CONTROLS = 'controls',\n ADDITIONAL_MEASURES = 'additionalmeasures',\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'stripHtml',\n standalone: true,\n})\nexport class StripHtmlPipe implements PipeTransform {\n transform(value: string | null | undefined): string {\n if (!value) return '';\n return value.replace(/<\\/?[^>]+(>|$)/g, '');\n }\n}","import {\n AfterViewInit,\n Component,\n DestroyRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { FormGroup, FormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { PasswordModule } from 'primeng/password';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { PopoverModule } from 'primeng/popover';\nimport { PanelModule } from 'primeng/panel';\nimport { ButtonModule } from 'primeng/button';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { distinctUntilChanged } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { GlobalPhase } from '../../utils/global-phase.utils';\nimport { SoTypes } from '../../utils/so-types';\nimport { ControlType } from '../../utils/control-type.enum';\nimport { timePeriodFromMS } from '../../utils/form-fields.utils';\nimport { StripHtmlPipe } from '../../utils/strip-html.pipe';\n\n@Component({\n selector: 'phoenix-read-only-input',\n standalone: true,\n imports: [\n CommonModule,\n MetaLabelComponent,\n FormsModule,\n\n ToggleSwitchModule,\n CheckboxModule,\n PasswordModule,\n SelectButtonModule,\n\n TranslateModule,\n\n PopoverModule,\n PanelModule,\n ButtonModule,\n\n StripHtmlPipe,\n ],\n templateUrl: './read-only-input.component.html',\n styleUrls: ['./read-only-input.component.scss'],\n})\nexport class ReadOnlyInputComponent implements OnInit, AfterViewInit {\n @Input() control: any;\n @Input() metaform!: FormGroup;\n\n value!: any;\n ctrlType = ControlType;\n\n constructor(\n private sanitizer: DomSanitizer,\n private translateService: TranslateService,\n private dr: DestroyRef\n ) {}\n\n ngAfterViewInit(): void {\n this.metaform\n .get(this.control.configuration.key)\n ?.valueChanges.pipe(takeUntilDestroyed(this.dr), distinctUntilChanged())\n .subscribe(() => {\n this.setData();\n });\n }\n\n ngOnInit() {\n this.setData();\n }\n\n resolvePhase(type: string) {\n switch (type) {\n case SoTypes.COMPL_APPLIED_THREAT:\n case SoTypes.COMPL_APPLIED_MEASURE:\n case SoTypes.COMPL_APPLIED_MODULE:\n case SoTypes.COMPL_APPLIED_REQUIREMENT:\n case SoTypes.COMPL_APPLIED_CONTROL:\n return GlobalPhase.SC_PHASE;\n case SoTypes.COMPL_APPLIED_THREAT:\n case 'COMPL_RISK_OBJECT':\n return GlobalPhase.RA_PHASE;\n case 'CVE':\n return 'CVE';\n default:\n return GlobalPhase.IA_PHASE;\n }\n }\n\n setData(): void {\n switch (this.control.configuration.type) {\n case ControlType.CURRENCY:\n this.value = this.metaform.get(this.control.configuration.key)?.value;\n break;\n\n case ControlType.SS_OPTION: {\n const data = this.metaform.get(this.control.configuration.key)?.value;\n if (!data) {\n this.value = null;\n break;\n }\n\n if (this.control.configuration.flagMode) {\n this.value = {\n key: data.key ?? data.code,\n userFriendlyMessage:\n data.userFriendlyMessage ?? data.name ?? data['labelKeyValEn'],\n };\n } else {\n const lang = localStorage.getItem('language') ?? 'en';\n const formattedLang =\n lang.charAt(0).toUpperCase() + lang.slice(1).toLowerCase();\n const val = data?.[`labelKeyVal${formattedLang}`];\n this.value = val ? val : data?.userFriendlyMessage;\n }\n break;\n }\n\n case ControlType.MS_OPTION: {\n const values = this.metaform.get(this.control.configuration.key)?.value;\n const maxItems = 4;\n\n if (values?.length) {\n this.value =\n values.length <= maxItems\n ? values.map((v: any) => v.userFriendlyMessage).join(', ')\n : values\n .slice(0, maxItems)\n .map((v: any) => v.userFriendlyMessage)\n .join(', ') + ' ...';\n } else {\n this.value = '';\n }\n break;\n }\n\n case ControlType.DATE:\n case ControlType.START_DUE_DATE:\n this.value = this.metaform.get(this.control.configuration.key)?.value;\n break;\n\n case ControlType.LINKS_DATA:\n this.value = this.control?.data?.task?.links;\n break;\n\n case ControlType.TIMEPERIOD: {\n const formValue = this.metaform.get(this.control.configuration.key)?.value;\n this.value =\n typeof formValue === 'string' ? formValue : timePeriodFromMS(formValue);\n break;\n }\n\n case ControlType.TEXT_AREA: {\n const textAreaContent = this.metaform.get(this.control.configuration.key)?.value;\n this.value = textAreaContent ? this.stripHtmlTags(textAreaContent) : null;\n break;\n }\n\n case ControlType.SWITCH:\n this.value = {\n isBoolean:\n typeof this.metaform.get(this.control.configuration.key)?.value ===\n 'boolean',\n res: this.metaform.get(this.control.configuration.key)?.value,\n };\n break;\n\n default:\n this.value = this.metaform.get(this.control.configuration.key)?.value;\n break;\n }\n }\n\n private stripHtmlTags(input: string): string {\n if (!input) return '';\n const placeholder = '___BR_TAG_PLACEHOLDER___';\n const brPattern = /<br\\s*\\/?>/gi;\n let textWithPlaceholders = input.replace(brPattern, placeholder);\n\n const blockTags = ['p', 'div', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n blockTags.forEach((tag) => {\n const closingTagPattern = new RegExp(`</${tag}>`, 'gi');\n textWithPlaceholders = textWithPlaceholders.replace(\n closingTagPattern,\n placeholder\n );\n });\n\n const textWithoutHtml = textWithPlaceholders.replace(/<\\/?[^>]+(>|$)/g, '');\n const decodedText = this.decodeHtmlEntities(textWithoutHtml);\n\n return decodedText\n .replace(new RegExp(placeholder, 'g'), '\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n }\n\n private decodeHtmlEntities(text: string): string {\n const textarea = document.createElement('textarea');\n textarea.innerHTML = text;\n return textarea.value;\n }\n}","<phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n@switch (control.configuration.type) {\n @case (ctrlType.TEXT_EDITOR) {\n @if (value) {\n <div\n [attr.data-cy]=\"'editor-' + control?.id\"\n class=\"read-only-editor-content\"\n [innerHTML]=\"value\"\n ></div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.TEXT_AREA) {\n <div\n class=\"w-full mt-3 mb-2 font-semibold text-500 whitespace-pre-line\"\n [attr.data-cy]=\"'textarea-' + control?.id\"\n [hidden]=\"control?.hidden\"\n [innerText]=\"value\"\n ></div>\n }\n\n @case (ctrlType.SWITCH) {\n @if (value?.isBoolean) {\n <p-toggleSwitch\n [attr.data-cy]=\"'switch-' + control?.id\"\n styleClass=\"mt-2 ml-1 mr-1\"\n [disabled]=\"true\"\n [(ngModel)]=\"value.res\"\n ></p-toggleSwitch>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.DATE) {\n @if (value) {\n <div\n [attr.data-cy]=\"'date-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value | date }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.START_DUE_DATE) {\n @if (value?.startDate) {\n <div\n [attr.data-cy]=\"'date-' + control?.id\"\n class=\"flex font-semibold text-500 mt-3 mb-2\"\n >\n <span style=\"padding-top: 3px\">{{ value.startDate | date }}</span>\n <div class=\"flex align-items-center p-2\">\n <i class=\"pi pi-arrow-right text-sm\" style=\"color: 'var(--surface-600)'\"></i>\n </div>\n <span style=\"padding-top: 3px\">{{ value.endDate | date }}</span>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.CHECKBOX) {\n @if (value) {\n <p-checkbox\n [attr.data-cy]=\"'checkbox-' + control?.id\"\n styleClass=\"mt-3\"\n [(ngModel)]=\"value\"\n [binary]=\"true\"\n inputId=\"binary\"\n [disabled]=\"true\"\n ></p-checkbox>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.LINKS_DATA) {\n @if (value) {\n <div\n class=\"font-semibold text-500 mt-3 mb-2 overflow-y-auto\"\n [attr.data-cy]=\"'link-' + control?.id\"\n >\n @for (item of value; track item) {\n <span class=\"m-2 text-sm font-light\">{{ item?.relationLabel }}</span>\n }\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.ASSIGN) {\n @if (value?.name) {\n <div [attr.data-cy]=\"'number-' + control?.id\">\n <div>\n <p-button [rounded]=\"true\" [text]=\"true\" (onClick)=\"op.toggle($event)\">\n <div class=\"person-wrap\">\n <div class=\"person-avatar\">\n {{ value?.name?.toUpperCase().charAt(0) }}\n </div>\n <div>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ value?.name }}\n </p>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ value?.function }}\n </p>\n </div>\n </div>\n </p-button>\n\n <p-popover #op [dismissable]=\"true\">\n <div>\n <span class=\"block mb-2\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{ value.email ?? ' --' }}\n </span>\n <p>\n <i class=\"pi pi-phone mr-1 text-500\"></i>{{ value.phone ?? ' --' }}\n </p>\n </div>\n </p-popover>\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.CURRENCY) {\n @if (value) {\n <div\n [attr.data-cy]=\"'currency-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value }}&nbsp; &#8364;\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.PASSWORD) {\n @if (value) {\n <div\n [attr.data-cy]=\"'password-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n <p-password\n class=\"ng-invalid ng-dirty\"\n [disabled]=\"true\"\n [(ngModel)]=\"value\"\n [feedback]=\"false\"\n ></p-password>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.SS_OPTION_OBJECT_BASED) {\n @if (value) {\n <div\n [attr.data-cy]=\"'SS-OPTION-OBJECT-BASED-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value.value }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.MS_OPTION) {\n @if (value) {\n <div\n [attr.data-cy]=\"'MS-OPTION-OBJECT-BASED-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2 white-space-nowrap overflow-hidden\"\n >\n {{ value }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.SS_OPTION) {\n @if (control?.configuration?.flagMode) {\n @if (value) {\n <div\n [attr.data-cy]=\"'SS-OPTION-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2 flex align-items-center gap-2\"\n >\n @if (value?.key) {\n <img\n src=\"https://primefaces.org/cdn/primeng/images/demo/flag/flag_placeholder.png\"\n [class]=\"'flag flag-' + value.key.toLowerCase()\"\n style=\"width: 22px\"\n alt=\"\"\n />\n }\n <span>{{ value.userFriendlyMessage }}</span>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n } @else {\n @if (value) {\n <div\n [attr.data-cy]=\"'SS-OPTION-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value | translate }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n }\n\n @case (ctrlType.NUMBER) {\n @if (value != null) {\n <div\n [attr.data-cy]=\"'number-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @default {\n @if (value) {\n <div\n [attr.data-cy]=\"'test-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value | stripHtml }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n}\n\n<ng-template #fallBack>\n <div\n [attr.data-cy]=\"'test-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n --\n </div>\n</ng-template>","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef, inject } from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroup,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { PanelModule } from 'primeng/panel';\nimport { PopoverModule } from 'primeng/popover';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { ObjectItemDialogComponent } from '../object-item-dialog/object-item-dialog.component';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { tableColumnType } from '../../../data-table/utils/dataTable.enum';\n\n@Component({\n selector: 'phoenix-meta-assign-asset',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n MetaLabelComponent,\n TranslateModule,\n PopoverModule,\n PanelModule,\n ],\n template: `\n <div [style.display]=\"control?.hidden ? 'none' : 'block'\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n @if (\n parentForm?.controls?.[control?.configuration?.key]?.value &&\n parentForm?.controls?.[control?.configuration?.key]?.value?.uuid\n ) {\n <div\n class=\"flex align-items-center\"\n [attr.data-cy]=\"'assign-' + control?.id\"\n >\n <div>\n <p-button [rounded]=\"true\" [text]=\"true\" (onClick)=\"op.toggle($event)\">\n <div class=\"person-wrap\">\n <div class=\"person-avatar\">\n {{\n parentForm.controls[control.configuration.key].value?.name\n ?.charAt(0)\n }}\n </div>\n\n <div>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ parentForm.controls[control.configuration.key].value?.name }}\n </p>\n\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ parentForm.controls[control.configuration.key].value?.title }}\n </p>\n </div>\n </div>\n </p-button>\n\n <p-popover #op [dismissable]=\"true\">\n <div class=\"person-details\">\n <span class=\"block mb-2\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{\n parentForm.controls[control.configuration.key].value?.email ??\n ' --'\n }}\n </span>\n\n <p>\n <i class=\"pi pi-phone mr-1 text-500\"></i>\n {{\n parentForm.controls[control.configuration.key].value?.phone ??\n ' --'\n }}\n </p>\n </div>\n </p-popover>\n </div>\n\n <div style=\"padding-bottom: 4px\">\n <p-button\n styleClass=\"p-button-sm mt-1\"\n type=\"button\"\n [text]=\"true\"\n label=\"{{ 'ACTION.REASSIGN' | translate }}\"\n (click)=\"assignAsset()\"\n ></p-button>\n\n <p-button\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"clear()\"\n [text]=\"true\"\n styleClass=\"p-button-danger p-button-sm mt-1 ml-2\"\n ></p-button>\n </div>\n </div>\n } @else {\n <p-button\n type=\"button\"\n icon=\"pi pi-user-plus\"\n styleClass=\"p-button-sm mt-1\"\n label=\"{{ 'ACTION.ASSIGN' | translate }}\"\n (click)=\"assignAsset()\"\n [text]=\"true\"\n ></p-button>\n }\n </div>\n `,\n styles: [\n `\n .person-wrap {\n display: flex;\n align-items: center;\n margin-left: -6px;\n\n & p {\n margin: 0;\n }\n\n .person-avatar {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 28px;\n height: 28px;\n min-width: 28px;\n min-height: 28px;\n margin-right: 5px;\n background-color: rgb(233, 66, 96);\n color: white;\n border-radius: 50%;\n font-size: 1rem;\n }\n\n .person-name :first-child {\n font-size: 1rem;\n }\n }\n\n .person-details {\n border-top: 1px solid #e0e0e0;\n padding: 5px;\n margin-left: -6px;\n width: 150px;\n\n p {\n margin: 0;\n display: flex;\n align-items: center;\n }\n\n i {\n color: #e94260;\n padding-right: 5px;\n }\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaAssignAssetComponent),\n multi: true,\n },\n ],\n})\nexport class MetaAssignAssetComponent implements ControlValueAccessor {\n @Input() control: any;\n @Input() parentForm!: FormGroup;\n @Input() disable?: boolean;\n\n public onChanged!: (value: any) => void;\n public onTouched!: () => void;\n public isDisabled!: boolean;\n\n private translateService = inject(TranslateService);\n private dialogService = inject(DialogService);\n\n person!: any;\n\n writeValue(_value: any): void {}\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean) {\n this.isDisabled = isDisabled;\n }\n\n clear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null);\n this.onChanged?.(null);\n this.onTouched?.();\n }\n\n assignAsset() {\n const ref = this.dialogService.open(ObjectItemDialogComponent, {\n header: this.translateService.instant('LABELS.ASSIGN_ASSET_GROUP'),\n width: '700px',\n height: '400px',\n modal: true,\n data: {\n tableData: this.control.configuration.items,\n columns: [\n {\n field: 'name',\n header: 'LABELS.Name',\n columnType: tableColumnType.TEXT,\n },\n {\n field: 'title',\n header: 'LABELS.TITLE',\n columnType: tableColumnType.TEXT,\n },\n ],\n },\n contentStyle: { overflow: 'auto' },\n draggable: true,\n closable: true,\n });\n\n if (ref) {\n ref.onClose.subscribe((response: any) => {\n if (response) {\n this.person = response;\n this.parentForm.controls[this.control.configuration.key].setValue(response);\n this.onChanged?.(response);\n this.onTouched?.();\n }\n });\n }\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n ViewChild,\n forwardRef,\n inject,\n} from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { KeyFilterModule } from 'primeng/keyfilter';\n\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'phoenix-meta-upload-dragdrop',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextModule,\n InlineFieldError,\n FormsModule,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n FileUploadModule,\n ButtonModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <p-fileUpload\n [attr.data-cy]=\"'upload-' + control?.id\"\n #fileInput\n [multiple]=\"false\"\n [accept]=\"control?.configuration?.accept\"\n maxFileSize=\"10485760\"\n styleClass=\"mb-3\"\n [hidden]=\"control?.hidden\"\n [showUploadButton]=\"false\"\n [showCancelButton]=\"false\"\n [disabled]=\"disable\"\n (onSelect)=\"onFileSelect($event)\"\n (onRemove)=\"onFileRemove($event)\"\n (onClear)=\"onFileClear()\"\n [chooseLabel]=\"'LABELS.BROWSE' | translate\"\n chooseIcon=\"pi pi-upload\"\n >\n <ng-template\n #header\n let-files\n let-chooseCallback=\"chooseCallback\"\n let-clearCallback=\"clearCallback\"\n let-uploadCallback=\"uploadCallback\"\n >\n <div class=\"flex justify-content-center w-full\">\n <p-button\n (onClick)=\"choose($event, chooseCallback)\"\n icon=\"pi pi-upload\"\n [label]=\"\n file?.name\n ? ('LABELS.SELECTED_FILE' | translate) + ': ' + file?.name\n : ('LABELS.BROWSE' | translate)\n \"\n severity=\"secondary\"\n />\n </div>\n </ng-template>\n <ng-template #empty>\n @if(ctrl.value){\n <div class=\"flex align-items-center justify-content-between\t w-full\">\n <div>\n <div>{{ ctrl.value['fileName'] }}</div>\n <div>{{ ctrl.value['size'] }} KB</div>\n </div>\n <p-button\n icon=\"pi pi-times\"\n [rounded]=\"true\"\n [text]=\"true\"\n severity=\"danger\"\n (onClick)=\"onFileRemove($event)\"\n />\n </div>\n\n } @else{\n <div class=\"text-center\">\n <div>\n <i\n style=\"font-size: 55px; opacity: 0.2\"\n class=\"pi pi-cloud-upload\"\n ></i>\n <p class=\"\">\n {{ 'PLACEHOLDERS.DRAG_AND_DROP_MESSAGE' | translate }}\n </p>\n </div>\n </div>\n }\n </ng-template>\n </p-fileUpload>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [\n `\n input[type='file'] {\n display: none;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaUploadComponentDragDrop),\n multi: true,\n },\n ],\n})\nexport class MetaUploadComponentDragDrop extends BaseMetaField {\n @ViewChild('fileInput') fileInput!: ElementRef;\n fakeFile: any;\n\n createFakeFile(\n fileName: string,\n size: number,\n type: string = 'application/pdf'\n ): File {\n const emptyBuffer = new ArrayBuffer(size);\n const blob = new Blob([emptyBuffer], { type });\n\n return new File([blob], fileName, {\n type: type,\n lastModified: Date.now(),\n });\n }\n\n choose(event: any, callback: any) {\n callback();\n }\n\n ngAfterViewInit() {\n const { fileName, size, type } = this.ctrl.value;\n\n this.fakeFile = this.createFakeFile(fileName, size, type);\n\n this.file = this.fakeFile;\n }\n\n onFileSelect(event: any) {\n const selectedFile = event.files?.[0] || event.currentFiles?.[0];\n\n if (selectedFile) {\n this.file = selectedFile;\n\n this.onChanged(selectedFile);\n this.onTouched();\n }\n }\n\n onFileRemove(event: any) {\n this.file = null;\n this.onChanged(null);\n this.onTouched();\n }\n\n onFileClear() {\n this.file = null;\n this.onChanged(null);\n this.onTouched();\n }\n\n lang = inject(TranslateService).currentLang;\n file: any;\n\n // Keep this method for consistency, though it's not directly used in drag-drop\n fileChange(event: any) {\n this.file = event.target.files[0];\n\n return this.file;\n }\n\n triggerFileInput() {\n this.fileInput.nativeElement.click();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n OnChanges,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n///Meta Fields\nimport { MetaFormAbstract } from './meta-form-abstract';\nimport { MetaAssignResponsibleComponent } from './meta-form-fields/meta-assign-responsible/meta-assign-responsible.component';\nimport { MetaCalendarComponent } from './meta-form-fields/meta-calendar/meta-calendar.component';\nimport { MetaCheckboxColorPickerComponent } from './meta-form-fields/meta-checkbox-color-picker/meta-checkbox-color-picker.component';\nimport { MetaCheckboxComponent } from './meta-form-fields/meta-checkbox/meta-checkbox.component';\nimport { MetaColorPickerComponent } from './meta-form-fields/meta-color-picker/meta-color-picker.component';\nimport { MetaCurrencyComponent } from './meta-form-fields/meta-currency/meta-currency.component';\nimport { MetaMultipleSelectComponent } from './meta-form-fields/meta-multiple-select/meta-multiple-select.component';\nimport { MetaNumberComponent } from './meta-form-fields/meta-number-input/meta-number-input.component';\nimport { MetaPasswordFeildComponent } from './meta-form-fields/meta-password-feild/meta-password-feild.component';\nimport { MetaSelectButtonComponent } from './meta-form-fields/meta-select-button/meta-select-button.component';\nimport { MetaSingleSelectObjectBasedComponent } from './meta-form-fields/meta-single-select-object-based/meta-single-select-object_based.component';\nimport { MetaSingleSelectComponent } from './meta-form-fields/meta-single-select/meta-single-select.component';\nimport { MetaStartDueDateComponent } from './meta-form-fields/meta-start-due-date/meta-start-due-date.component';\nimport { MetaSwitchComponent } from './meta-form-fields/meta-switch/meta-switch.component';\nimport { MetaTextAreaComponent } from './meta-form-fields/meta-text-area/meta-text-area.component';\nimport { MetaTextEditorComponent } from './meta-form-fields/meta-text-editor/meta-text-editor.component';\nimport { MetaTextInputComponent } from './meta-form-fields/meta-text-input/meta-text-input.component';\nimport { MetaTimeperiodComponent } from './meta-form-fields/meta-timeperiod/meta-timeperiod.component';\nimport { MetaUploadComponent } from './meta-form-fields/meta-upload/meta-upload.component';\n\nimport { FieldColPipe } from './utils/field-col.pipe';\nimport { MetaFormService } from './services/meta-form.service';\nimport { HttpClient } from '@angular/common/http';\nimport { ControlType } from './utils/control-type.enum';\nimport { ReadOnlyInputComponent } from './meta-form-templates/read-only-input/read-only-input.component';\nimport { MetaAssignAssetComponent } from './meta-form-fields/meta-assign-asset/meta-assign-asset.component';\nimport { MetaUploadComponentDragDrop } from './meta-form-fields/meta-upload-dragdrop/meta-upload-dragdrop.component';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'phoenix-meta-form',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ButtonModule,\n TranslateModule,\n ReactiveFormsModule,\n FieldColPipe,\n //metafields -> to one module and than import here\n MetaTextEditorComponent,\n MetaCheckboxComponent,\n MetaTextInputComponent,\n MetaSingleSelectComponent,\n MetaStartDueDateComponent,\n MetaTextAreaComponent,\n MetaTextEditorComponent,\n MetaMultipleSelectComponent,\n MetaCalendarComponent,\n MetaUploadComponentDragDrop,\n MetaSwitchComponent,\n MetaPasswordFeildComponent,\n MetaTimeperiodComponent,\n MetaCurrencyComponent,\n MetaNumberComponent,\n MetaAssignResponsibleComponent,\n MetaAssignAssetComponent,\n MetaColorPickerComponent,\n ReadOnlyInputComponent,\n MetaSelectButtonComponent,\n MetaUploadComponent,\n MetaSingleSelectObjectBasedComponent,\n MetaCheckboxColorPickerComponent,\n ],\n templateUrl: './meta-form.component.html',\n styleUrls: ['./meta-form.component.scss'],\n //changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MetaFormComponent extends MetaFormAbstract implements OnChanges {\n constructor(\n fb: FormBuilder,\n metaService: MetaFormService,\n\n translateService: TranslateService,\n http: HttpClient\n // env: EnvService\n ) {\n super(fb, metaService, translateService, http);\n }\n\n public ControlType = ControlType;\n optionLabel!: string;\n\n ngOnChanges(simpleChanges: SimpleChanges): void {\n ///set dirty only when metaform changes, not others from simplechanges\n ///optimize this. check what is needed for creating form\n\n if (\n simpleChanges?.['metaFormControls'] ||\n simpleChanges?.['metaFormValues'] ||\n simpleChanges?.['metaForm']\n ) {\n this.createForm(this.metaFormControls);\n this.metaService.setFormDirtyStatus(this.metaForm.dirty);\n }\n }\n}\n","<form autocomplete=\"off\" [formGroup]=\"metaForm\" (ngSubmit)=\"onSubmit()\">\n <div class=\"grid\" [style]=\"formStyle\">\n @for (control of metaFormControls; track control?.id) {\n @switch (control.configuration.type) {\n @case (ControlType.TEXT) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'text-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-text-input\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-input>\n }\n </div>\n }\n\n @case (ControlType.NUMBER) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'number-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-number-input\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-number-input>\n }\n </div>\n }\n\n @case (ControlType.TIMEPERIOD) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'timeperiod-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-timeperiod\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-timeperiod>\n }\n </div>\n }\n\n @case (ControlType.CURRENCY) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'currency-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-currency\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-currency>\n }\n </div>\n }\n\n @case (ControlType.TEXT_AREA) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'text-area-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-text-area\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-area>\n }\n </div>\n }\n\n @case (ControlType.SS_OPTION) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'ss-option-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-single-select\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-single-select>\n }\n </div>\n }\n\n @case (ControlType.SS_OPTION_OBJECT_BASED) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'ss-option-object-based-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-single-select-object-based\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-single-select-object-based>\n }\n </div>\n }\n\n @case (ControlType.MS_OPTION) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'ms-option-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-multiple-select\n [attr.data-cy]=\"'multiSelect-' + control?.id\"\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-multiple-select>\n }\n </div>\n }\n\n @case (ControlType.START_DUE_DATE) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'start-due-date-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-start-due-date\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-start-due-date>\n }\n </div>\n }\n\n @case (ControlType.DATE) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'date-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-calendar\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-calendar>\n }\n </div>\n }\n\n @case (ControlType.TEXT_EDITOR) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'text-editor-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-text-editor\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-editor>\n }\n </div>\n }\n\n @case (ControlType.CHECKBOX) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column justify-content-end\"\n [attr.data-cy]=\"'checkbox-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-checkbox\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-checkbox>\n }\n </div>\n }\n\n @case (ControlType.CHECKBOX_COLOR) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column justify-content-end\"\n [attr.data-cy]=\"'CHECKBOX_COLOR-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-checkbox-color-picker\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-checkbox-color-picker>\n }\n </div>\n }\n\n @case (ControlType.SWITCH) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'switch-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-switch\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-switch>\n }\n </div>\n }\n\n @case (ControlType.SELECT_BUTTON) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'select-button-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-select-button\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-select-button>\n }\n </div>\n }\n\n @case (ControlType.ASSIGN) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'assign-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-assign-responsible\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-assign-responsible>\n }\n </div>\n }\n\n @case (ControlType.ASSIGN_ASSET) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'assign-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-assign-asset\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-assign-asset>\n }\n </div>\n }\n\n @case (ControlType.LINKS_DATA) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control | fieldCol\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'links-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <!-- <phoenix-meta-object-links\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-object-links> -->\n }\n </div>\n }\n\n @case (ControlType.PASSWORD) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'password-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-password-feild\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-password-feild>\n }\n </div>\n }\n\n @case (ControlType.COLOR) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'color-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-color-picker\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-color-picker>\n }\n </div>\n }\n\n @case (ControlType.UPLOAD) {\n <div\n [style]=\"{ order: control.order }\"\n [attr.data-cy]=\"'upload-' + control?.id\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-upload\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-upload>\n }\n </div>\n }\n\n @case (ControlType.UPLOAD_DRAG_DROP) {\n <div\n [style]=\"{ order: control.order }\"\n [attr.data-cy]=\"'upload-' + control?.id\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-upload-dragdrop\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-upload-dragdrop>\n }\n </div>\n }\n\n @case (ControlType.SLOT) {\n <ng-content [select]=\"[control.configuration.key]\"></ng-content>\n }\n }\n }\n </div>\n\n @if (formButtons) {\n <div class=\"flex justify-content-end\">\n <p-button\n class=\"mr-1\"\n [disabled]=\"!metaForm.valid || disableForm\"\n type=\"submit\"\n label=\"{{ 'ACTION.SAVE' | translate }}\"\n [attr.data-cy]=\"'submit-button'\"\n [loading]=\"loading\"\n ></p-button>\n\n <p-button\n [disabled]=\"disableForm\"\n styleClass=\"p-button-link\"\n [text]=\"true\"\n (onClick)=\"onCancel()\"\n label=\"{{ 'ACTION.CANCEL' | translate }}\"\n [attr.data-cy]=\"'cancel-button'\"\n ></p-button>\n </div>\n }\n</form>\n","import {\n Component,\n EventEmitter,\n input,\n Input,\n model,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { FormsModule } from '@angular/forms';\nimport { Observable, combineLatest, Subscription } from 'rxjs';\nimport { MetaFormService } from '../services/meta-form.service';\n\n@Component({\n selector: 'phoenix-meta-form-buttons',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n TranslateModule,\n CheckboxModule,\n FormsModule,\n ],\n templateUrl: './meta-form-buttons.component.html',\n styleUrls: ['./meta-form-buttons.component.scss'],\n providers: [],\n})\nexport class MetaFormButtonsComponent implements OnInit, OnDestroy {\n isDisabled = input<boolean>();\n isCreateAnother = input<boolean>(false);\n isLoading = input<boolean>(false);\n\n @Output() handleSave = new EventEmitter<any>();\n @Output() handleCancel = new EventEmitter<any>();\n\n display!: boolean;\n formActive$!: Observable<boolean>;\n createAnother!: boolean;\n sub$!: Subscription;\n\n constructor(private metaFormService: MetaFormService) {\n this.formActive$ = this.metaFormService.formReadOnlyState;\n }\n ngOnInit(): void {\n this.sub$ = combineLatest([\n this.metaFormService.currentFormTabContent,\n this.metaFormService.formReadOnlyState,\n ]).subscribe((r) => {\n let [formTabContent, formReadOnlyStatus] = r;\n if (formTabContent === 'FORM' && !formReadOnlyStatus) {\n this.display = true;\n } else {\n this.display = false;\n }\n });\n }\n\n ngOnDestroy(): void {\n this.sub$?.unsubscribe();\n }\n}\n","<!-- <ng-template *ngIf=\"formActive$ | async as formState\" pTemplate=\"footer\">\n <div *ngIf=\"!formState\" class=\"flex justify-content-end p-2\"> -->\n<div *ngIf=\"display\" class=\"flex justify-content-end p-2\">\n <p-checkbox\n *ngIf=\"isCreateAnother()\"\n id=\"dialog-buttons-checkbox\"\n data-cy=\"dialog-buttons-checkbox-cy\"\n [(ngModel)]=\"createAnother\"\n [binary]=\"true\"\n inputId=\"binary\"\n class=\"mr-3\"\n ></p-checkbox>\n\n <button\n class=\"mr-2\"\n pButton\n [disabled]=\"isDisabled()\"\n [loading]=\"isLoading()\"\n (click)=\"handleSave.emit({ isAnother: createAnother })\"\n [attr.data-cy]=\"'submit-button'\"\n >\n <span class=\"mx-1\">{{ \"ACTION.SAVE\" | translate }}</span>\n </button>\n\n <p-button\n [text]=\"true\"\n (click)=\"handleCancel.emit('CANCEL')\"\n [attr.data-cy]=\"'cancel-button'\"\n >\n {{ \"ACTION.CANCEL\" | translate }}\n </p-button>\n</div>\n<!-- </div>\n</ng-template> -->\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { EditorModule } from 'primeng/editor';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { PanelModule } from 'primeng/panel';\nimport { MetaFormAbstract } from '../../meta-form-abstract';\nimport { MetaAssignResponsibleComponent } from '../../meta-form-fields/meta-assign-responsible/meta-assign-responsible.component';\nimport { MetaCalendarComponent } from '../../meta-form-fields/meta-calendar/meta-calendar.component';\nimport { MetaCheckboxComponent } from '../../meta-form-fields/meta-checkbox/meta-checkbox.component';\nimport { MetaCurrencyComponent } from '../../meta-form-fields/meta-currency/meta-currency.component';\nimport { MetaMultipleSelectComponent } from '../../meta-form-fields/meta-multiple-select/meta-multiple-select.component';\nimport { MetaNumberComponent } from '../../meta-form-fields/meta-number-input/meta-number-input.component';\nimport { MetaPasswordFeildComponent } from '../../meta-form-fields/meta-password-feild/meta-password-feild.component';\nimport { MetaSingleSelectObjectBasedComponent } from '../../meta-form-fields/meta-single-select-object-based/meta-single-select-object_based.component';\nimport { MetaSingleSelectComponent } from '../../meta-form-fields/meta-single-select/meta-single-select.component';\nimport { MetaStartDueDateComponent } from '../../meta-form-fields/meta-start-due-date/meta-start-due-date.component';\nimport { MetaSwitchComponent } from '../../meta-form-fields/meta-switch/meta-switch.component';\nimport { MetaTextAreaComponent } from '../../meta-form-fields/meta-text-area/meta-text-area.component';\nimport { MetaTextEditorComponent } from '../../meta-form-fields/meta-text-editor/meta-text-editor.component';\nimport { MetaTextInputComponent } from '../../meta-form-fields/meta-text-input/meta-text-input.component';\nimport { MetaTimeperiodComponent } from '../../meta-form-fields/meta-timeperiod/meta-timeperiod.component';\nimport { FieldColPipe } from '../../utils/field-col.pipe';\nimport { ReadOnlyInputComponent } from '../read-only-input/read-only-input.component';\nimport { ControlType } from '../../utils/control-type.enum';\nimport { AccordionModule } from 'primeng/accordion';\nimport { MetaAssignAssetComponent } from '../../meta-form-fields/meta-assign-asset/meta-assign-asset.component';\nimport { MetaUploadComponentDragDrop } from '../../meta-form-fields/meta-upload-dragdrop/meta-upload-dragdrop.component';\nimport { MetaUploadComponent } from '../../meta-form-fields/meta-upload/meta-upload.component';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { MessageModule } from 'primeng/message';\nimport { SelectModule } from 'primeng/select';\n\n@Component({\n selector: 'phoenix-groups-form',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // InputTextModule,\n // InputTextareaModule,\n // DatePickerModule,\n // SelectModule,\n // ButtonModule,\n // MultiSelectModule,\n TranslateModule,\n // CheckboxModule,\n // EditorModule,\n FieldColPipe,\n MetaTextEditorComponent,\n MetaCheckboxComponent,\n MetaTextInputComponent,\n MetaSingleSelectComponent,\n MetaStartDueDateComponent,\n MetaTextAreaComponent,\n MetaTextEditorComponent,\n MetaMultipleSelectComponent,\n MetaCalendarComponent,\n MetaUploadComponentDragDrop,\n AccordionModule,\n // MetaObjectLinksComponent,\n MetaSwitchComponent,\n MetaPasswordFeildComponent,\n MetaTimeperiodComponent,\n MetaCurrencyComponent,\n MetaNumberComponent,\n MetaAssignResponsibleComponent,\n MetaAssignAssetComponent,\n PanelModule,\n ReadOnlyInputComponent,\n // MessageModule,\n MetaSingleSelectObjectBasedComponent,\n MetaUploadComponent,\n ],\n templateUrl: './groups-form.component.html',\n styleUrls: ['./groups-form.component.css'],\n})\nexport class GroupsFormComponent extends MetaFormAbstract implements OnChanges {\n @Input() activePanelsIndex: number[] = [0, 1, 2, 3];\n public ControlType = ControlType;\n optionLabel!: string;\n notiffication?: any;\n private trans = inject(TranslateService);\n\n ngOnChanges(simpleChanges?: SimpleChanges): void {\n if (\n simpleChanges?.['metaFormControls'] ||\n simpleChanges?.['metaFormValues'] ||\n simpleChanges?.['metaForm']\n ) {\n const mergedArr = this.metaFormControls.flatMap((ob: any) => ob.ctrl);\n this.createForm(mergedArr);\n this.metaService.setFormDirtyStatus(this.metaForm.dirty);\n }\n }\n}\n","<p-accordion [multiple]=\"true\" [(value)]=\"activePanelsIndex\">\n @if (metaFormControls?.length) {\n <form [formGroup]=\"metaForm\" (ngSubmit)=\"onSubmit()\">\n @for (group of metaFormControls; track group.groupName; let idx = $index) {\n <div [style]=\"{ order: group.order }\" class=\"w-full\">\n <p-accordion-panel\n [value]=\"idx\"\n [attr.data-cy]=\"'table-accordion-header-' + group.groupName\"\n >\n <p-accordion-header>\n <ng-template #toggleicon let-active=\"active\">\n @if (active) {\n <i class=\"pi pi-minus-circle\"></i>\n } @else {\n <i class=\"pi pi-plus-circle\"></i>\n }\n </ng-template>\n {{ group.groupName | translate }}\n </p-accordion-header>\n\n <p-accordion-content>\n <div [style]=\"formStyle\" class=\"grid align-items-end\">\n @for (control of group.ctrl; track (control?.id ?? control?.configuration?.key)) {\n @switch (control.configuration.type) {\n\n @case (ControlType.TEXT) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-text-input\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-input>\n }\n </div>\n }\n\n @case (ControlType.NUMBER) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-number-input\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-number-input>\n }\n </div>\n }\n\n @case (ControlType.TIMEPERIOD) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-timeperiod\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-timeperiod>\n }\n </div>\n }\n\n @case (ControlType.CURRENCY) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-currency\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-currency>\n }\n </div>\n }\n\n @case (ControlType.TEXT_AREA) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-text-area\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-area>\n }\n </div>\n }\n\n @case (ControlType.SS_OPTION) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-single-select\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-single-select>\n }\n </div>\n }\n\n @case (ControlType.SS_OPTION_OBJECT_BASED) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-single-select-object-based\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-single-select-object-based>\n }\n </div>\n }\n\n @case (ControlType.MS_OPTION) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-multiple-select\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-multiple-select>\n }\n </div>\n }\n\n @case (ControlType.START_DUE_DATE) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-start-due-date\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-start-due-date>\n }\n </div>\n }\n\n @case (ControlType.DATE) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-calendar\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-calendar>\n }\n </div>\n }\n\n @case (ControlType.TEXT_EDITOR) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-text-editor\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-editor>\n }\n </div>\n }\n\n @case (ControlType.CHECKBOX) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n <phoenix-meta-checkbox\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-checkbox>\n </div>\n }\n\n @case (ControlType.SWITCH) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-switch\n [disable]=\"true\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-switch>\n }\n </div>\n }\n\n @case (ControlType.ASSIGN) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-assign-responsible\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-assign-responsible>\n }\n </div>\n }\n\n @case (ControlType.ASSIGN_ASSET) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'assign-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-assign-asset\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-assign-asset>\n }\n </div>\n }\n\n @case (ControlType.UPLOAD) {\n <div\n [style]=\"{ order: control.order }\"\n [attr.data-cy]=\"'upload-' + control?.id\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-upload\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-upload>\n }\n </div>\n }\n\n @case (ControlType.UPLOAD_DRAG_DROP) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'assign-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-upload-dragdrop\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-upload-dragdrop>\n }\n </div>\n }\n\n @case (ControlType.LINKS_DATA) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control | fieldCol\"\n class=\"flex flex-column\"\n >\n </div>\n }\n\n @case (ControlType.PASSWORD) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n <phoenix-meta-password-feild\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-password-feild>\n </div>\n }\n\n @default {\n }\n }\n }\n </div>\n </p-accordion-content>\n </p-accordion-panel>\n </div>\n }\n </form>\n }\n</p-accordion>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'textLength',\n standalone: true,\n})\nexport class TextLength implements PipeTransform {\n /**\n * Transforms the specified text value\n * If the size of the string is greater than the limit, it returns a substring of the desired size, and adds ellipsis \"...\"\n * If the size of the string is less than the limit, it returns the original string\n * @param value\n * @param limit\n */\n\n transform(value: string, limit: number) {\n if (value?.length > limit) {\n return value.substring(0, limit) + ' ...';\n }\n return value;\n }\n}\n","// export type StatusColType = \"LIST\" | \"TAG\" | \"DATE_LIST\" | \"DATE\" | \"STRING\" | \"ACTION\" | \"OWNER\" | \"PERSON\";\n\nexport enum StatusColType {\n TAG = 'TAG',\n STRING = 'STRING',\n PERSON = 'PERSON',\n LINK = 'LINK',\n DATE = 'DATE',\n DATE_ONLY = 'DATE_ONLY',\n LIST = 'LIST',\n COUNTRY = 'COUNTRY',\n COPY_TO_CLIPBOARD = 'COPY_TO_CLIPBOARD',\n}","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { AvatarModule } from 'primeng/avatar';\nimport { PopoverModule } from 'primeng/popover';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TagComponent } from '../tag/tag.component';\nimport {\n StatusAttribute,\n StatusTooltipType,\n} from './models/status-attribute.model';\nimport { TextLength } from './pipes/text-length.pipe';\nimport { MessageService } from 'primeng/api';\n\n@Component({\n selector: 'phoenix-status-attribute-display',\n standalone: true,\n templateUrl: './status-attribute-display.component.html',\n styleUrls: ['./status-bar.component.scss'],\n imports: [\n CommonModule,\n TooltipModule,\n PopoverModule,\n TagComponent,\n TranslateModule,\n AvatarModule,\n TextLength,\n ],\n})\nexport class StatusAttributeDisplayComponent {\n @Input() attr!: StatusAttribute;\n @Input() dateFormat = 'dd.MM.yyyy | HH:mm';\n\n @Output() listItemClick = new EventEmitter<any>();\n private messageService = inject(MessageService);\n private translateService = inject(TranslateService);\n statusTooltipType = StatusTooltipType;\n\n copyToClipboard(value: string | undefined) {\n if (!value) return;\n\n this.messageService.add({\n severity: 'success',\n summary: this.translateService.instant('TOASTER.SUCCESS'),\n detail: this.translateService.instant('TOASTER.LINK_COPIED'),\n life: 3000,\n });\n navigator.clipboard.writeText(value).catch((err) => {\n console.error('Could not copy text: ', err);\n });\n }\n\n getFullUrl(path: string): string {\n if (path.startsWith('http')) return path;\n return '/' + path.replace(/^\\/+/, '');\n }\n\n isMultiWordLabel(label: string | undefined | null): boolean {\n return label ? label.trim().split(/\\s+/).length > 2 : false;\n }\n\n getPersonName(attr: any): string {\n const first = (attr?.value || '').trim();\n const last = (attr?.value1 || '').trim();\n return [first, last].filter(Boolean).join(' ');\n }\n\n getPersonTooltip(attr: any): string | undefined {\n const fullName = this.getPersonName(attr);\n return fullName.length > 20 ? fullName : undefined;\n }\n\n getPersonDisplayName(attr: any): string {\n const fullName = (attr?.value || '').trim();\n return fullName.length > 20 ? fullName.slice(0, 20) + '…' : fullName;\n }\n\n getPersonInitial(attr: any): string {\n return (attr?.value?.charAt(0) || '-').toUpperCase();\n }\n}\n","<div class=\"attribute flex justify-content-start align-items-start\">\n <div class=\"flex flex-column\">\n <!-- LABEL + ICON -->\n <div class=\"flex align-items-start gap-1\">\n <label\n class=\"font-semibold text-500\"\n [ngClass]=\"{\n 'wrap-label': isMultiWordLabel(attr.label | translate),\n 'nowrap-label': !isMultiWordLabel(attr.label | translate),\n }\"\n >\n {{ attr.label | translate }}\n </label>\n\n @if (attr?.tooltip?.length) {\n <i\n [attr.data-cy]=\"'status-togg-button-item'\"\n class=\"pi pi-info-circle text-blue-500 cursor-pointer\"\n style=\"font-size: 0.875rem; line-height: 1\"\n (mouseenter)=\"popover.toggle($event)\"\n (mouseleave)=\"popover.toggle($event)\"\n ></i>\n }\n </div>\n\n <!-- VALUE -->\n @if (attr?.value) {\n <!-- removed [ngSwitch]=\"attr.type\" because @switch handles it -->\n <div style=\"white-space: nowrap\">\n @switch (attr.type) {\n @case (\"STRING\") {\n @if (attr.url) {\n <a\n [href]=\"attr.url\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-blue-500 underline\"\n [pTooltip]=\"attr.value?.length > 20 ? attr.value : null\"\n >\n {{ attr.value | textLength: 20 }}\n <i class=\"ml-1\" [class]=\"attr.icon\"></i>\n </a>\n } @else {\n <span [pTooltip]=\"attr.value?.length > 20 ? attr.value : null\">\n {{ attr.value | textLength: 20 }}\n </span>\n }\n }\n\n @case (\"DATE\") {\n <span>\n <i class=\"pi pi-calendar text-blue-900\"></i>\n {{\n attr.value\n ? (attr.value | date: attr.dateFormat ?? dateFormat)\n : \"--\"\n }}\n </span>\n }\n\n @case (\"DATE_ONLY\") {\n <span>\n <i class=\"pi pi-calendar text-blue-900\"></i>\n {{ attr.value ? (attr.value | date: \"dd.MM.yyyy\") : \"--\" }}\n </span>\n }\n\n @case (\"LINK\") {\n <a\n [href]=\"attr.url\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-blue-500 underline\"\n >\n {{ attr.value || \"--\" }} <i class=\"ml-1\" [class]=\"attr.icon\"></i>\n </a>\n }\n\n @case (\"PERSON\") {\n <div class=\"person-wrap flex align-items-center gap-2\">\n <div class=\"person-avatar\">\n {{ getPersonInitial(attr) }}\n </div>\n\n <div\n class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\"\n [pTooltip]=\"getPersonTooltip(attr)\"\n >\n {{ getPersonDisplayName(attr) }}\n </div>\n </div>\n }\n\n @case (\"COUNTRY\") {\n <span>\n <span class=\"flex align-items-center gap-2\">\n <img\n src=\"https://primefaces.org/cdn/primeng/images/demo/flag/flag_placeholder.png\"\n [class]=\"'flag flag-' + attr.value?.code.toLowerCase()\"\n style=\"width: 22px\"\n />\n <span\n [pTooltip]=\"\n attr.value?.name?.length > 20 ? attr.value?.name : null\n \"\n >\n {{ attr.value?.name || attr.value?.code || \"--\" }}\n </span>\n </span>\n </span>\n }\n\n @case (\"COPY_TO_CLIPBOARD\") {\n <div class=\"flex align-items-center gap-1\">\n <i\n class=\"pi pi-copy text-blue-900 cursor-pointer\"\n (click)=\"copyToClipboard(attr?.value1)\"\n ></i>\n <span>{{ attr.value || \"--\" }}</span>\n </div>\n }\n\n @case (\"LIST\") {\n <ul class=\"list overflow-x-hidden\" style=\"margin-top: 0.25rem\">\n @for (item of attr.value; track $index) {\n <li\n [ngClass]=\"item?.disabled ? 'disableLinks' : ''\"\n class=\"white-space-nowrap mb-1 cursor-pointer\"\n (click)=\"!item?.disabled ? listItemClick.emit(item) : null\"\n >\n <span [pTooltip]=\"item?.name?.length > 20 ? item.name : null\">\n {{ item.name | textLength: 20 }}\n </span>\n <i class=\"pi pi-link ml-1 text-sm\"></i>\n </li>\n }\n </ul>\n }\n\n @default {\n <span [style.color]=\"attr.color\" class=\"text-xl\">\n {{ attr.value || \"--\" }}\n </span>\n }\n }\n </div>\n } @else {\n <span>--</span>\n }\n </div>\n</div>\n\n<p-popover #popover [style]=\"{ maxWidth: '400px' }\">\n <div\n style=\"\n display: grid;\n grid-template-columns: max-content 1fr;\n column-gap: 1rem;\n row-gap: 0.5rem;\n align-items: start;\n width: 100%;\n \"\n >\n @for (item of attr?.tooltip; track $index) {\n @if (item.type !== statusTooltipType.DATE_PERSON) {\n <div class=\"text-sm text-600 text-left\">{{ item.label }}:</div>\n\n <div class=\"text-sm text-left break-words\">\n @switch (item?.type || statusTooltipType.TAG) {\n @case (\"LINK\") {\n @if (item.value) {\n <a\n [href]=\"getFullUrl(item.value)\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-blue-500 underline\"\n >\n {{ item.label || \"Open\" }}\n </a>\n } @else {\n <span>--</span>\n }\n }\n\n @case (statusTooltipType.STRING) {\n @if (item.value) {\n <div\n class=\"text-sm\"\n style=\"\n white-space: normal;\n word-break: break-word;\n overflow-wrap: break-word;\n \"\n >\n {{ item.value }}\n </div>\n } @else {\n <span>--</span>\n }\n }\n\n @case (statusTooltipType.DATE) {\n @if (item.value) {\n <span>{{ item.value | date: dateFormat }}</span>\n } @else {\n <span>--</span>\n }\n }\n\n @case (statusTooltipType.COPY_TO_CLIPBOARD) {\n <div class=\"flex\">\n <i\n class=\"pi pi-copy text-blue-900\"\n (click)=\"copyToClipboard(item?.value1)\"\n ></i>\n <span>\n {{ item?.value ? item.value : \"--\" }}\n </span>\n </div>\n }\n\n @case (statusTooltipType.DATE_ONLY) {\n <span>\n <i class=\"pi pi-calendar text-blue-900\"></i>\n {{ item.value ? (item.value | date: \"dd.MM.yyyy\") : \"--\" }}\n </span>\n }\n\n @case (statusTooltipType.PERSON) {\n @if (item.value) {\n <span class=\"person-wrap flex items-center gap-1 truncate\">\n <div\n class=\"person-avatar small\"\n style=\"font-size: 0.875rem; line-height: 1\"\n >\n {{ item?.value?.charAt(0)?.toUpperCase() }}\n </div>\n <span class=\"truncate\">\n {{ item.value }} {{ item.value1 }}\n </span>\n </span>\n } @else {\n <span>--</span>\n }\n }\n\n @default {\n @if (item.value) {\n <div class=\"flex gap-2\">\n <span>{{ item.value }}</span>\n <phoenix-tag\n [customColor]=\"item.value2 || ''\"\n [content]=\"item.value1 || ''\"\n ></phoenix-tag>\n </div>\n } @else {\n <span>--</span>\n }\n }\n }\n </div>\n }\n }\n </div>\n\n @for (item of attr?.tooltip; track $index) {\n @if (item.type === statusTooltipType.DATE_PERSON) {\n @if (item.value) {\n <div>\n <div\n class=\"font-sm text-600 truncate mb-1\"\n [pTooltip]=\"item.label.length > 20 ? item.label : undefined\"\n >\n {{ item.label }}\n </div>\n\n <div class=\"flex items-center gap-2 person-wrap\">\n <div class=\"person-avatar\">\n {{ item?.value?.charAt(0)?.toUpperCase() }}\n </div>\n\n <div>\n <div\n class=\"text-blue-800 font-sm\"\n style=\"\n word-break: break-word;\n white-space: normal;\n overflow-wrap: break-word;\n \"\n >\n {{ item.value }}\n </div>\n <div class=\"text-sm\">{{ item.value1 | date: dateFormat }}</div>\n </div>\n </div>\n </div>\n } @else {\n <div class=\"text-sm\">--</div>\n }\n }\n }\n</p-popover>\n","import { CommonModule, DatePipe } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ImageModule } from 'primeng/image';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TextLength } from './pipes/text-length.pipe';\nimport { FirstLetterPipe } from './pipes/first-letter.pipe';\nimport { AvatarModule } from 'primeng/avatar';\nimport { PopoverModule } from 'primeng/popover';\nimport { TagComponent } from '../tag/tag.component';\nimport { StatusBarConfig } from './models/status-bar-configuration.model';\nimport { StatusColType } from './enums/status-col-type.enum';\nimport { ButtonModule } from 'primeng/button';\nimport { StatusAttributeDisplayComponent } from './status-attribute-display.component';\n\n@Component({\n selector: 'phoenix-status-bar',\n standalone: true,\n templateUrl: './status-bar.component.html',\n styleUrls: ['./status-bar.component.scss'],\n imports: [\n CommonModule,\n TranslateModule,\n TooltipModule,\n ImageModule,\n AvatarModule,\n PopoverModule,\n TextLength,\n ButtonModule,\n StatusAttributeDisplayComponent,\n ],\n})\nexport class StatusBarComponent {\n @Input() statusBarConfig!: StatusBarConfig;\n @Input() iconEnable = true;\n @Input() enableClosing = true;\n @Input() description = true;\n @Input() dateFormat = 'dd.MM.yyyy | HH:mm';\n\n @Output() onListItemClick = new EventEmitter<any>();\n\n StatusColType = StatusColType;\n\n iconStyle = {\n height: 40,\n width: 40,\n };\n}\n","<!-- status-bar.component.html -->\n<div class=\"p-2 pt-0 pb-3\">\n @if (statusBarConfig) {\n <div class=\"flex\">\n @if (description) {\n <div class=\"description flex\">\n @if (statusBarConfig.icon) {\n <div\n class=\"type-icon flex justify-content-center align-items-center mr-3\"\n [style.height]=\"iconStyle.height + 20 + 'px'\"\n [style.width]=\"iconStyle.width + 20 + 'px'\"\n >\n <p-image\n [src]=\"\n 'assets/object_types/white/' +\n (statusBarConfig.icon || 'UNDEFINED') +\n '.svg'\n \"\n [height]=\"iconStyle.height.toString()\"\n [width]=\"iconStyle.width.toString()\"\n ></p-image>\n </div>\n }\n\n <ul>\n @for (attr of statusBarConfig.description; track attr.label) {\n <li class=\"text-sm flex mb-1\">\n <span class=\"mr-1 text-600 font-semibold\"\n >{{ attr.label | translate }}:</span\n >\n @if (attr.value) {\n <span>\n @if (attr.icon) {\n <i\n class=\"{{ attr.icon }} mr-1\"\n style=\"font-size: 0.8em\"\n ></i>\n }\n @switch (attr.type) {\n @case (\"DATE\") {\n <span>{{ attr.value | date: dateFormat }}</span>\n }\n @default {\n <span\n pTooltip=\"{{\n attr?.value?.length > 20 ? attr.value : ''\n }}\"\n >\n {{ attr.value | textLength: 20 }}\n </span>\n }\n }\n </span>\n } @else {\n <span>--</span>\n }\n </li>\n }\n </ul>\n </div>\n }\n <div class=\"status-bar-attributes w-full flex gap-5\">\n @for (attr of statusBarConfig.attributes; track attr.label) {\n <div class=\"status-bar-attribute-item\">\n <phoenix-status-attribute-display\n [attr]=\"attr\"\n [dateFormat]=\"dateFormat\"\n (listItemClick)=\"onListItemClick.emit($event)\"\n ></phoenix-status-attribute-display>\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n computed,\n signal,\n} from '@angular/core';\nimport { DrawerModule, Drawer } from 'primeng/drawer';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { TableComponent } from '../../data-table/table/table.component';\n\n@Component({\n selector: 'phoenix-quick-pick-sidepanel',\n standalone: true,\n imports: [\n CommonModule,\n DrawerModule,\n TableComponent,\n TranslateModule,\n ButtonModule,\n ],\n templateUrl: './quick-pick-sidepanel.component.html',\n styleUrl: './quick-pick-sidepanel.component.css',\n})\nexport class QuickPickSidePanelComponent {\n @ViewChild('drawer') drawer!: Drawer;\n\n @Input() title: string = 'Default Title';\n @Input() data: any[] = [];\n @Input() columns: any[] = [];\n @Input() tableConfiguration: any = {};\n @Input() widthClass: string = 'w-6';\n @Input() isFullScreen: boolean = false;\n\n private _panelVisible = signal(false);\n @Input()\n set panelState(value: boolean) {\n this._panelVisible.set(value);\n }\n @Output() panelStateChange = new EventEmitter<boolean>();\n\n @Output() onRowClick = new EventEmitter<any>();\n @Output() lazyLoadData = new EventEmitter<void>();\n @Output() handlePanelFullScreen = new EventEmitter<void>();\n\n drawerVisible = computed(() => this._panelVisible());\n\n visibleChange(newVal: boolean) {\n this._panelVisible.set(newVal);\n this.panelStateChange.emit(newVal);\n \n if (newVal) {\n this.onDrawerShow(); \n }\n }\n\n onDrawerShow(): void {\n this.lazyLoadData.emit();\n }\n\n onTableRowClick(row: any): void {\n this.onRowClick.emit(row);\n }\n}\n","<p-drawer\n #drawer\n [visible]=\"drawerVisible()\"\n (visibleChange)=\"visibleChange($event)\"\n [header]=\"title | translate\"\n appendTo=\"body\"\n position=\"right\"\n [styleClass]=\"widthClass\"\n>\n <!-- Content -->\n <ng-container *ngIf=\"tableConfiguration\">\n <div class=\"px-2\">\n <phoenix-table\n [data]=\"data\"\n [columns]=\"columns\"\n [tableConfiguration]=\"tableConfiguration\"\n (rowSelection)=\"onTableRowClick($event)\"\n ></phoenix-table>\n </div>\n </ng-container>\n</p-drawer>","export enum SimpleButtonType {\n REGULAR = 'regular',\n SPLIT = 'split'\n}\n\nexport type Severity =\n | 'success'\n | 'info'\n | 'warn'\n | 'danger'\n | 'help'\n | 'primary'\n | 'secondary'\n | 'contrast'\n | null\n | undefined;\n\nexport interface ActionButton {\n id?: number | string;\n label: string;\n icon?: string;\n disabled?: boolean;\n type?: SimpleButtonType;\n severity?: Severity;\n tooltip?: string;\n action?: () => void;\n splitItems?: { label: string; icon?: string; command: () => void }[];\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'stripHtmlSafe', standalone: true })\nexport class StripHtmlSafePipe implements PipeTransform {\n transform(value: unknown): string {\n if (value === null || value === undefined) return '';\n const s = typeof value === 'string' ? value : String(value);\n return s.replace(/<\\/?[^>]+(>|$)/g, '');\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'fileSize', standalone: true })\nexport class FileSizePipe implements PipeTransform {\n transform(bytes: unknown): string {\n const n = typeof bytes === 'number' ? bytes : Number(bytes);\n if (!isFinite(n) || n <= 0) return '';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n let v = n;\n while (v >= 1024 && i < units.length - 1) {\n v = v / 1024;\n i++;\n }\n const fixed = i === 0 ? 0 : v < 10 ? 1 : 0;\n return `${v.toFixed(fixed)} ${units[i]}`;\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Input,\n computed,\n inject,\n signal\n} from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { ButtonModule } from 'primeng/button';\nimport { PopoverModule } from 'primeng/popover';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { MetaFieldConfig, MetaFieldType } from '../../models/meta-field-config.model';\nimport { StripHtmlSafePipe } from '../../pipes/strip-html-safe.pipe';\nimport { FileSizePipe } from '../../pipes/file-size.pipe';\n\n@Component({\n selector: 'phoenix-read-only-input-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n\n ButtonModule,\n PopoverModule,\n\n StripHtmlSafePipe,\n FileSizePipe,\n ],\n templateUrl: './read-only-input-v2.component.html',\n styleUrls: ['./read-only-input-v2.component.scss'],\n})\nexport class ReadOnlyInputV2Component {\n /** Field metadata (type, key, options, labels, etc.) */\n @Input({ required: true }) field!: MetaFieldConfig;\n\n /** Parent FormGroup that contains the control referenced by field.configuration.key */\n @Input({ required: true }) form!: FormGroup;\n\n /** Used to automatically unsubscribe from valueChanges on destroy */\n private dr = inject(DestroyRef);\n\n /**\n * Internal reactive signal holding the current control value.\n * We keep a local signal to optimize OnPush change detection and computed selectors.\n */\n private _v = signal<unknown>(null);\n\n ngOnInit(): void {\n // Initial sync of the control value into the local signal\n this.sync();\n\n // Keep local signal in sync with the form control value\n this.ctrl()?.valueChanges\n .pipe(takeUntilDestroyed(this.dr))\n .subscribe(() => this.sync());\n }\n\n /** Control key resolved from MetaFieldConfig */\n get key(): string {\n return this.field?.configuration?.key ?? '';\n }\n\n /** Meta field type (TEXT, DATE, ASSIGN, UPLOAD, etc.) */\n get type(): MetaFieldType {\n return this.field?.configuration?.type ?? 'TEXT';\n }\n\n /** Shortcut to the underlying FormControl */\n ctrl() {\n return this.form.get(this.key);\n }\n\n /**\n * Synchronizes the FormControl value into the local signal.\n * This keeps computed properties reactive and OnPush-friendly.\n */\n private sync(): void {\n this._v.set(this.ctrl()?.value ?? null);\n }\n\n // ---------- helpers ----------\n\n /**\n * Resolves language suffix used by backend DTOs (labelKeyValEn/De/Sr).\n * This is used to pick the correct localized label for option objects.\n */\n private getLangSuffix(): 'En' | 'De' | 'Sr' {\n const lang = (localStorage.getItem('language') ?? 'en').toLowerCase();\n if (lang.startsWith('de')) return 'De';\n if (lang.startsWith('sr')) return 'Sr';\n return 'En';\n }\n\n /**\n * Boolean renderer (for SWITCH / CHECKBOX).\n * Returns boolean value or null if the value is not a boolean.\n */\n readonly bool = computed(() => {\n const v = this._v();\n return typeof v === 'boolean' ? v : null;\n });\n\n /**\n * DATE renderer.\n * Supports both Date instances and ISO-like string values.\n * Returns a valid Date object or null if parsing fails.\n */\n readonly dateValue = computed(() => {\n const v = this._v();\n if (!v) return null;\n if (v instanceof Date) return v;\n\n const d = new Date(String(v));\n return isNaN(d.getTime()) ? null : d;\n });\n\n /**\n * START_DUE_DATE renderer.\n * Expects shape: { startDate, endDate } (Date or string).\n * Returns normalized Date objects or null if invalid.\n */\n readonly startDue = computed(() => {\n const v: any = this._v();\n if (!v || typeof v !== 'object') return null;\n\n const sdRaw = v?.startDate ?? null;\n const edRaw = v?.endDate ?? null;\n\n const sd = sdRaw ? new Date(sdRaw) : null;\n const ed = edRaw ? new Date(edRaw) : null;\n\n if (!sd || isNaN(sd.getTime())) return null;\n\n return {\n startDate: sd,\n endDate: ed && !isNaN(ed.getTime()) ? ed : null,\n };\n });\n\n /**\n * ASSIGN renderer.\n * Normalizes various backend DTO shapes into a unified view model.\n */\n readonly assign = computed(() => {\n const v: any = this._v();\n if (!v || typeof v !== 'object') return null;\n\n return {\n name: v?.name ?? v?.label ?? null,\n function: v?.function ?? v?.role ?? null,\n email: v?.email ?? null,\n phone: v?.phone ?? null,\n };\n });\n\n /**\n * UPLOAD renderer.\n * Supports common upload DTO shapes (fileName/name, size, type).\n */\n readonly upload = computed(() => {\n const v: any = this._v();\n if (!v || typeof v !== 'object') return null;\n\n return {\n fileName: v?.fileName ?? v?.name ?? null,\n size: v?.size ?? null,\n type: v?.type ?? null,\n };\n });\n\n /**\n * Single-select option label resolver (SS_OPTION / SS_OPTION_OBJECT_BASED).\n * - If value is primitive -> find matching option in configuration.options\n * - If value is object -> resolve best display label using common DTO fields\n */\n readonly ssLabel = computed(() => {\n const v: any = this._v();\n if (v === null || v === undefined || v === '') return null;\n\n // Primitive value: resolve label from options list\n if (typeof v !== 'object') {\n const opt = (this.field.configuration.options ?? []).find((x: any) => x?.value === v);\n return opt?.label ?? String(v);\n }\n\n // Object value: resolve localized label from DTO\n const suffix = this.getLangSuffix();\n const key = `labelKeyVal${suffix}`;\n\n return (\n v?.label ??\n v?.userFriendlyMessage ??\n v?.name ??\n v?.[key] ??\n v?.value ??\n null\n );\n });\n\n /**\n * Multi-select option label resolver (MS_OPTION).\n * Joins multiple labels into a single string with truncation after maxItems.\n */\n readonly msLabel = computed(() => {\n const v: any = this._v();\n if (!Array.isArray(v) || v.length === 0) return null;\n\n const suffix = this.getLangSuffix();\n const key = `labelKeyVal${suffix}`;\n\n const maxItems = 4;\n const labels = v\n .map((x: any) => x?.label ?? x?.userFriendlyMessage ?? x?.name ?? x?.[key] ?? x?.value ?? x)\n .filter((x: any) => x !== null && x !== undefined && String(x).trim() !== '')\n .map((x: any) => String(x));\n\n if (!labels.length) return null;\n\n return labels.length <= maxItems\n ? labels.join(', ')\n : `${labels.slice(0, maxItems).join(', ')} ...`;\n });\n\n /**\n * Generic fallback display value.\n * Ensures that every field type has a safe string representation.\n */\n readonly displayText = computed(() => {\n const v = this._v();\n if (v === null || v === undefined || v === '') return null;\n\n if (this.type === 'SS_OPTION' || this.type === 'SS_OPTION_OBJECT_BASED') return this.ssLabel();\n if (this.type === 'MS_OPTION') return this.msLabel();\n\n if (this.type === 'UPLOAD' || this.type === 'UPLOAD_DRAG_DROP') {\n const u = this.upload();\n return u?.fileName ?? null;\n }\n\n if (this.type === 'ASSIGN' || this.type === 'ASSIGN_ASSET') {\n return this.assign()?.name ?? null;\n }\n\n // Text areas and editors often contain HTML\n if (this.type === 'TEXT_AREA' || this.type === 'TEXT_EDITOR') {\n return typeof v === 'string' ? v : String(v);\n }\n\n if (typeof v === 'object') return JSON.stringify(v);\n return String(v);\n });\n}","@switch (type) {\n\n @case ('TEXT_EDITOR') {\n @if (displayText()) {\n <div class=\"read-only-editor-content\" [innerHTML]=\"displayText()\"></div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('TEXT_AREA') {\n @if (displayText()) {\n <div class=\"w-full mt-2 mb-2 font-semibold text-500 whitespace-pre-line\">\n {{ displayText() | stripHtmlSafe }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('SWITCH') {\n @if (bool() !== null) {\n <div class=\"mt-2 mb-2 font-semibold text-500\">\n {{ bool() ? ('Yes' | translate) : ('No' | translate) }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('CHECKBOX') {\n @if (bool() !== null) {\n <div class=\"mt-2 mb-2 font-semibold text-500\">\n {{ bool() ? ('Yes' | translate) : ('No' | translate) }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('DATE') {\n @if (dateValue()) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ dateValue() | date }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('START_DUE_DATE') {\n @if (startDue()) {\n <div class=\"flex font-semibold text-500 mt-2 mb-2\">\n <span style=\"padding-top: 3px\">{{ startDue()?.startDate | date }}</span>\n <div class=\"flex align-items-center p-2\">\n <i class=\"pi pi-arrow-right text-sm\"></i>\n </div>\n <span style=\"padding-top: 3px\">{{ startDue()?.endDate | date }}</span>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('ASSIGN') {\n @if (assign()?.name) {\n <div>\n <p-button [rounded]=\"true\" [text]=\"true\" (onClick)=\"op.toggle($event)\">\n <div class=\"person-wrap\">\n <div class=\"person-avatar\">\n {{ (assign()?.name ?? '')!.toUpperCase().charAt(0) }}\n </div>\n <div>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ assign()?.name }}\n </p>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ assign()?.function ?? '--' }}\n </p>\n </div>\n </div>\n </p-button>\n\n <p-popover #op [dismissable]=\"true\">\n <div>\n <span class=\"block mb-2\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{ assign()?.email ?? '--' }}\n </span>\n <p>\n <i class=\"pi pi-phone mr-1 text-500\"></i>\n {{ assign()?.phone ?? '--' }}\n </p>\n </div>\n </p-popover>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('UPLOAD') {\n @if (upload()?.fileName) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ upload()?.fileName }}\n @if (upload()?.size) {\n <span class=\"text-600 font-normal\"> • {{ upload()?.size | fileSize }}</span>\n }\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('UPLOAD_DRAG_DROP') {\n @if (upload()?.fileName) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ upload()?.fileName }}\n @if (upload()?.size) {\n <span class=\"text-600 font-normal\"> • {{ upload()?.size | fileSize }}</span>\n }\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('SS_OPTION') {\n @if (ssLabel()) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ ssLabel() | translate }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('SS_OPTION_OBJECT_BASED') {\n @if (ssLabel()) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ ssLabel() | translate }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('MS_OPTION') {\n @if (msLabel()) {\n <div class=\"font-semibold text-500 mt-2 mb-2 white-space-nowrap overflow-hidden\">\n {{ msLabel() }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n @case ('PASSWORD') {\n @if (displayText()) {\n <input\n pInputText\n type=\"password\"\n class=\"w-full p-inputtext\"\n [disabled]=\"true\"\n [value]=\"displayText() ?? ''\"\n autocomplete=\"off\"\n aria-label=\"password\"\n />\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @default {\n @if (displayText()) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ displayText() | stripHtmlSafe }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n}\n\n<ng-template #fallBack>\n <div class=\"font-semibold text-500 mt-2 mb-2\">--</div>\n</ng-template>","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { PopoverModule } from 'primeng/popover';\nimport { DialogService } from 'primeng/dynamicdialog';\n\nimport { Assignee } from '../../../../models/assignee.model';\nimport { tableColumnType } from '../../../data-table/utils/dataTable.enum';\nimport { ObjectItemDialogComponent } from '../../../../../public-api';\n\n@Component({\n selector: 'phoenix-meta-assign-responsible-v2',\n standalone: true,\n imports: [CommonModule, ButtonModule, PopoverModule, TranslateModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaAssignResponsibleV2Component),\n multi: true,\n },\n ],\n template: `\n\n @if (value?.uuid) {\n <div class=\"flex align-items-center\">\n <div>\n <p-button [rounded]=\"true\" [text]=\"true\" (onClick)=\"op.toggle($event)\" [disabled]=\"disabled\">\n <div class=\"person-wrap\">\n <div class=\"person-avatar\">\n {{ (value?.name ?? '').toUpperCase().charAt(0) }}\n </div>\n <div>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ value?.name ?? '--' }}\n </p>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ value?.function ?? '--' }}\n </p>\n </div>\n </div>\n </p-button>\n\n <p-popover #op [dismissable]=\"true\">\n <div class=\"person-details\">\n <span class=\"block mb-2\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{ value?.email ?? '--' }}\n </span>\n <p>\n <i class=\"pi pi-phone mr-1 text-500\"></i>\n {{ value?.phone ?? '--' }}\n </p>\n </div>\n </p-popover>\n </div>\n\n <div style=\"padding-bottom:4px\">\n <p-button\n styleClass=\"p-button-sm mt-1\"\n type=\"button\"\n [text]=\"true\"\n [disabled]=\"disabled\"\n [label]=\"'ACTION.REASSIGN' | translate\"\n (click)=\"op.hide(); openDialog()\"\n ></p-button>\n\n <p-button\n type=\"button\"\n icon=\"pi pi-times\"\n [disabled]=\"disabled\"\n (click)=\"op.hide(); clear()\"\n [text]=\"true\"\n styleClass=\"p-button-danger p-button-sm mt-1 ml-2\"\n ></p-button>\n </div>\n </div>\n } @else {\n <p-button\n type=\"button\"\n icon=\"pi pi-user-plus\"\n styleClass=\"p-button-sm mt-1\"\n [label]=\"'ACTION.ASSIGN' | translate\"\n (click)=\"openDialog()\"\n [text]=\"true\"\n [disabled]=\"disabled\"\n ></p-button>\n }\n `,\n styles: [`\n ::ng-deep .p-popover-content { padding: 0 !important; }\n .person-wrap { display:flex; align-items:center; margin-left:-6px; }\n .person-wrap p { margin:0; }\n .person-avatar {\n display:flex; justify-content:center; align-items:center;\n width:28px; height:28px; min-width:28px; min-height:28px;\n margin-right:5px; background-color: rgb(233, 66, 96);\n color:#fff; border-radius:50%; font-size:1rem;\n }\n .person-details { border-top:1px solid #e0e0e0; padding:10px; width:200px; }\n .person-details p { margin:0; display:flex; align-items:center; }\n .person-details i { color:#e94260; padding-right:5px; }\n `],\n})\nexport class MetaAssignResponsibleV2Component implements ControlValueAccessor {\n /**\n * List of available assignees used as table data inside the selection dialog.\n * This replaces legacy `control.configuration.items` access and keeps the CVA independent\n * from meta-form internals.\n */\n @Input() items: Assignee[] = [];\n\n /**\n * Translation key for the dialog header title.\n * Kept as an input so different contexts can reuse this field with a custom title.\n */\n @Input() dialogHeaderKey = 'LABELS.ASSIGN_RESPONSIBLE';\n\n private translate = inject(TranslateService);\n private dialog = inject(DialogService);\n\n /**\n * Currently selected assignee value bound to the parent form control.\n * We store the full object (row) because downstream fields often need more than uuid.\n */\n value: Assignee | null = null;\n\n /**\n * Disabled state propagated from Angular forms via `setDisabledState`.\n * (If you later add a field-level `@Input() disable`, combine them like in other CVAs.)\n */\n disabled = false;\n\n /**\n * CVA callback invoked when the value changes (selection/clear).\n */\n private onChange: (value: Assignee | null) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched (user interaction).\n * Standard: call on meaningful interactions (open dialog, select, clear).\n */\n private onTouched: () => void = () => {};\n\n /**\n * Called by Angular forms when the model value changes programmatically.\n * Keep it side-effect free: do not call `onChange`/`onTouched` from here.\n */\n writeValue(value: Assignee | null): void {\n this.value = value ?? null;\n }\n\n /**\n * Registers the callback that should be called when the component updates the value.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the callback that should be called when the control becomes \"touched\".\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Clears current assignee value.\n * - emits `null`\n * - marks as touched (user action)\n */\n clear(): void {\n if (this.disabled) return;\n\n // prevent redundant emits\n if (this.value === null) {\n this.onTouched();\n return;\n }\n\n this.value = null;\n this.onChange(null);\n this.onTouched();\n }\n\n /**\n * Opens object selection dialog for choosing a new assignee.\n * The dialog renders a generic table and returns the selected row on close.\n *\n * Standard for CVA:\n * - mark as touched when user opens the picker (interaction started)\n * - emit onChange only when a row is actually selected\n */\n openDialog(): void {\n if (this.disabled) return;\n\n this.onTouched();\n\n const ref = this.dialog.open(ObjectItemDialogComponent, {\n header: this.translate.instant(this.dialogHeaderKey),\n width: '700px',\n modal: true,\n data: {\n tableData: this.items,\n columns: [\n { field: 'name', header: 'LABELS.NAME', columnType: tableColumnType.TEXT },\n { field: 'function', header: 'LABELS.FUNCTION', columnType: tableColumnType.TEXT },\n { field: 'phone', header: 'LABELS.PHONE', columnType: tableColumnType.TEXT },\n { field: 'email', header: 'LABELS.EMAIL', columnType: tableColumnType.TEXT },\n ],\n },\n contentStyle: { overflow: 'auto' },\n draggable: true,\n closable: true,\n });\n\n ref?.onClose.subscribe((response: Assignee | null | undefined) => {\n if (!response) return;\n\n // prevent redundant emits (same selection)\n const same =\n (this.value?.uuid ?? null) === (response?.uuid ?? null) &&\n JSON.stringify(this.value ?? null) === JSON.stringify(response ?? null);\n\n this.value = response;\n\n if (!same) {\n this.onChange(response);\n }\n\n this.onTouched();\n });\n }\n}","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ColorPickerModule } from 'primeng/colorpicker';\n\n@Component({\n selector: 'phoenix-meta-color-picker-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, ColorPickerModule],\n template: `\n <p-colorPicker\n class=\"color-swatch\"\n [(ngModel)]=\"value\"\n (onChange)=\"onPickerChange()\"\n (onBlur)=\"handleBlur()\"\n [disabled]=\"disabled\"\n [appendTo]=\"'body'\"\n ></p-colorPicker>\n `,\n styles: [\n `\n :host ::ng-deep .color-swatch.p-colorpicker {\n width: 35px;\n height: 35px;\n padding: 0 !important;\n border: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n\n :host ::ng-deep .color-swatch .p-colorpicker-preview {\n width: 35px !important;\n height: 35px !important;\n border: none !important;\n border-radius: 6px !important;\n box-shadow: none !important;\n }\n\n :host ::ng-deep .color-swatch .p-colorpicker-preview:focus,\n :host ::ng-deep .color-swatch .p-colorpicker-preview:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaColorPickerV2Component),\n multi: true,\n },\n ],\n})\nexport class MetaColorPickerV2Component implements ControlValueAccessor {\n /**\n * Optional external disable flag (field-level disable coming from meta config).\n * This is combined with the disabled state coming from Angular Forms (CVA).\n */\n @Input() disable = false;\n\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Currently selected color value.\n * Expected format: HEX string (e.g. \"#ff00aa\") or null.\n */\n value: string | null = null;\n\n /**\n * CVA callback invoked when the value changes.\n */\n private onChange: (v: string | null) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched.\n * Standard: call on blur / close, not on every value change.\n */\n private onTouched: () => void = () => {};\n\n /**\n * Disabled state coming from Angular Forms (ControlValueAccessor).\n */\n private isDisabled = false;\n\n /**\n * Final disabled state combining:\n * - form-level disabled state (CVA)\n * - field-level disable flag (input)\n */\n get disabled(): boolean {\n return this.disable || this.isDisabled;\n }\n\n /**\n * Writes a new value from the parent form control into the component.\n * Keep it idempotent and UI-safe.\n */\n writeValue(v: any): void {\n this.value = this.normalizeHex(v);\n this.cdr.markForCheck();\n }\n\n /**\n * Registers callback that is triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers callback that is triggered when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular Forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n /**\n * Handler for PrimeNG color picker change event.\n * Propagates the currently selected color value to the parent form control.\n *\n * Note: we intentionally do NOT call onTouched here (our standard is: touched on blur).\n */\n onPickerChange(): void {\n if (this.disabled) return;\n\n const next = this.normalizeHex(this.value);\n\n // prevent redundant emits (useful when PrimeNG fires multiple times)\n if (next === this.value) {\n this.cdr.markForCheck();\n return;\n }\n\n this.value = next;\n this.onChange(next);\n this.cdr.markForCheck();\n }\n\n /**\n * Marks control as touched when user leaves the component.\n * (Matches \"touched on blur\" CVA guideline.)\n */\n handleBlur(): void {\n if (this.disabled) return;\n this.onTouched();\n }\n\n /**\n * Normalizes incoming values to a safe HEX string or null.\n * - accepts \"#RRGGBB\" / \"#RGB\" / \"RRGGBB\"\n * - returns null for empty/invalid inputs\n */\n private normalizeHex(v: any): string | null {\n if (v === null || v === undefined) return null;\n\n const s = String(v).trim();\n if (!s) return null;\n\n const withHash = s.startsWith('#') ? s : `#${s}`;\n const ok = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(withHash);\n\n return ok ? withHash.toLowerCase() : null;\n }\n}","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { PopoverModule } from 'primeng/popover';\n\n@Component({\n selector: 'phoenix-meta-checkbox-color-picker-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, PopoverModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaCheckboxColorPickerV2Component),\n multi: true,\n },\n ],\n template: `\n <p-popover #popover>\n <div class=\"color-picker\">\n @for (row of options; track $index; let last = $last) {\n <div class=\"color-row\" [class.mb-2]=\"!last\">\n @for (color of row; track color) {\n <button\n type=\"button\"\n class=\"color-box\"\n [disabled]=\"disabled\"\n [style.backgroundColor]=\"color\"\n [style.outline]=\"focusedColor === color ? '3px solid ' + color : 'none'\"\n [style.outlineOffset]=\"focusedColor === color ? '3px' : '0'\"\n (click)=\"select(color, popover)\"\n (mouseenter)=\"focusedColor = color\"\n ></button>\n }\n </div>\n }\n </div>\n </p-popover>\n\n <button\n type=\"button\"\n class=\"selected-color\"\n [disabled]=\"disabled\"\n [style.backgroundColor]=\"value || 'transparent'\"\n (click)=\"toggle(popover, $event)\"\n aria-label=\"Select color\"\n ></button>\n `,\n styles: [\n `\n :host ::ng-deep .p-popover-content {\n padding: 0 !important;\n }\n\n .color-picker {\n display: flex;\n flex-direction: column;\n padding: 10px;\n }\n\n .color-row {\n display: flex;\n justify-content: center;\n gap: 8px;\n }\n\n .mb-2 {\n margin-bottom: 8px;\n }\n\n .color-box {\n margin: 2px;\n width: 30px;\n height: 30px;\n cursor: pointer;\n border-radius: 4px;\n border: 0;\n padding: 0;\n background: transparent;\n }\n\n .color-box:hover:not(:disabled) {\n transform: scale(1.1);\n opacity: 0.9;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);\n }\n\n .color-box:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .selected-color {\n width: 35px;\n height: 35px;\n border: 2px solid #ccc;\n cursor: pointer;\n border-radius: 6px;\n padding: 0;\n background: transparent;\n }\n\n .selected-color:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n `,\n ],\n})\nexport class MetaCheckboxColorPickerV2Component implements ControlValueAccessor {\n /**\n * 2D array of color values used to render the color grid in the popover.\n * Example:\n * [\n * ['#ff0000', '#00ff00', '#0000ff'],\n * ['#facc15', '#22c55e', '#0ea5e9']\n * ]\n */\n @Input() options: string[][] = [];\n\n /**\n * External disable flag (e.g. meta-form field-level disable).\n * This is combined with CVA disabled state.\n */\n @Input() disable = false;\n\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Currently selected color value bound to the parent form control.\n */\n value: string | null = null;\n\n /**\n * Color currently focused/hovered in the UI.\n * Used only for visual outline highlight in the picker grid.\n */\n focusedColor: string | null = null;\n\n /**\n * Disabled state coming from Angular Forms (ControlValueAccessor).\n */\n private isDisabled = false;\n\n /**\n * CVA callback invoked when the value changes.\n */\n private onChange: (v: string | null) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched.\n * Standard: touched on \"open/blur/close\" actions, not necessarily on hover.\n */\n private onTouched: () => void = () => {};\n\n /**\n * Final disabled state combining:\n * - form-level disabled state (CVA)\n * - field-level disable flag (input)\n */\n get disabled(): boolean {\n return this.disable || this.isDisabled;\n }\n\n // ----- ControlValueAccessor implementation -----\n\n /**\n * Writes a new value from the parent form into the component.\n * Keeps internal value and focusedColor in sync for correct UI outline.\n */\n writeValue(v: any): void {\n this.value = this.normalizeColor(v);\n this.focusedColor = this.value;\n this.cdr.markForCheck();\n }\n\n /**\n * Registers callback that is triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers callback that is triggered when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular Forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n // ----- UI handlers -----\n\n /**\n * Toggles the popover visibility when the selected-color button is clicked.\n * We mark as touched because user interacted with the control.\n */\n toggle(popover: any, ev: Event): void {\n if (this.disabled) return;\n\n this.onTouched();\n popover.toggle(ev);\n }\n\n /**\n * Handles color selection from the grid:\n * - updates internal value\n * - propagates value to parent form (onChange)\n * - marks control as touched (selection is a meaningful interaction)\n * - closes the popover\n */\n select(color: string, popover: any): void {\n if (this.disabled) return;\n\n const next = this.normalizeColor(color);\n\n // prevent redundant emits\n if (next === this.value) {\n this.focusedColor = next;\n this.onTouched();\n this.cdr.markForCheck();\n popover.hide();\n return;\n }\n\n this.focusedColor = next;\n this.value = next;\n\n this.onChange(next);\n this.onTouched();\n\n this.cdr.markForCheck();\n popover.hide();\n }\n\n /**\n * Normalizes incoming values to a safe CSS color string or null.\n * For this component we keep it permissive:\n * - accepts \"#RRGGBB\" / \"#RGB\"\n * - also allows any non-empty string (in case someone passes \"red\" or \"var(--x)\")\n * - returns null for empty values\n */\n private normalizeColor(v: any): string | null {\n if (v === null || v === undefined) return null;\n\n const s = String(v).trim();\n if (!s) return null;\n\n // normalize common hex values (with/without '#')\n const withHash = s.startsWith('#') ? s : `#${s}`;\n if (/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(withHash)) return withHash.toLowerCase();\n\n // fallback: allow CSS colors (e.g. \"red\") or CSS vars\n return s;\n }\n}","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Input, inject } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { DatePickerModule } from 'primeng/datepicker';\n\n/**\n * Value shape for the START_DUE_DATE field.\n * Represents a date range with optional start/end values.\n * When both values are null/empty, the control emits `null`.\n */\ntype StartDueValue =\n | { startDate: Date | string | null; endDate: Date | string | null }\n | null;\n\n@Component({\n selector: 'phoenix-meta-start-due-date-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, TranslateModule, DatePickerModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaStartDueDateV2Component),\n multi: true,\n },\n ],\n template: `\n <div class=\"start-due\">\n <div class=\"flex\">\n <div class=\"flex-grow-1\">\n <p-datepicker\n [style]=\"{ width: '100%' }\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [showIcon]=\"true\"\n [placeholder]=\"'LABELS.PLANNED_START' | translate\"\n [disabled]=\"disabled\"\n [ngModel]=\"startDate\"\n (ngModelChange)=\"onStartChange($event)\"\n (onBlur)=\"handleBlur()\"\n appendTo=\"body\"\n ></p-datepicker>\n </div>\n\n <div class=\"flex align-items-center p-2\">\n <i class=\"pi pi-arrow-right text-sm\"></i>\n </div>\n\n <div class=\"flex-grow-1\">\n <p-datepicker\n [style]=\"{ width: '100%' }\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [showIcon]=\"true\"\n [placeholder]=\"'LABELS.PLANNED_END' | translate\"\n [disabled]=\"disabled\"\n [ngModel]=\"endDate\"\n (ngModelChange)=\"onEndChange($event)\"\n (onBlur)=\"handleBlur()\"\n appendTo=\"body\"\n ></p-datepicker>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class MetaStartDueDateV2Component implements ControlValueAccessor {\n /**\n * Optional data-cy attribute prefix for e2e testing.\n * Can be used by parent components to uniquely identify this field in tests.\n */\n @Input() dataCy?: string;\n\n /**\n * Optional parent-level disable flag (in addition to reactive-form disable).\n * Use this when the field must be disabled due to page/business logic.\n */\n @Input() disable = false;\n\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Disabled state coming from Angular Forms (ControlValueAccessor).\n * When true, both date pickers are non-interactive.\n */\n private isDisabled = false;\n\n /**\n * Local UI state for the selected start date.\n * Normalized to Date or null for PrimeNG DatePicker compatibility.\n */\n startDate: Date | null = null;\n\n /**\n * Local UI state for the selected end date.\n * Normalized to Date or null for PrimeNG DatePicker compatibility.\n */\n endDate: Date | null = null;\n\n /**\n * CVA callback invoked when the composite value changes.\n */\n private onChange: (v: StartDueValue) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched.\n * IMPORTANT: We call this on blur (not on every change) to match standard CVA behavior.\n */\n private onTouched: () => void = () => {};\n\n /**\n * Effective disabled state used by the template.\n * Combines reactive form disable + parent-level disable.\n */\n get disabled(): boolean {\n return this.disable || this.isDisabled;\n }\n\n /**\n * Writes a new value from the parent form control into the component.\n * Incoming values are normalized to Date instances for the UI layer.\n *\n * NOTE: \"YYYY-MM-DD\" strings are parsed as local dates to avoid timezone day-shifts.\n */\n writeValue(v: StartDueValue): void {\n this.startDate = this.normalizeDateOnly(this.parseToDate(v?.startDate ?? null));\n this.endDate = this.normalizeDateOnly(this.parseToDate(v?.endDate ?? null));\n\n // OnPush: ensure UI reflects external value writes (patchValue/setValue)\n this.cdr.markForCheck();\n }\n\n /**\n * Registers the callback that should be called when the value changes.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the callback that should be called when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular Forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n\n // OnPush: reflect disabled state changes immediately\n this.cdr.markForCheck();\n }\n\n /**\n * Handler used by PrimeNG DatePicker blur events.\n * Marks the control as touched without emitting a value change.\n */\n handleBlur(): void {\n if (this.disabled) return;\n this.onTouched();\n }\n\n /**\n * Handler for start date change coming from the DatePicker.\n * Updates local state and propagates the composite value.\n */\n onStartChange(d: Date | null): void {\n if (this.disabled) return;\n this.startDate = this.normalizeDateOnly(d ?? null);\n this.emitChange();\n }\n\n /**\n * Handler for end date change coming from the DatePicker.\n * Updates local state and propagates the composite value.\n */\n onEndChange(d: Date | null): void {\n if (this.disabled) return;\n this.endDate = this.normalizeDateOnly(d ?? null);\n this.emitChange();\n }\n\n /**\n * Emits the composite value to the parent form control.\n * - Emits `null` when both dates are empty (cleaner semantics for required/bothDates validators).\n * - Otherwise emits the `{ startDate, endDate }` object (partial values allowed; validator decides).\n */\n private emitChange(): void {\n if (!this.startDate && !this.endDate) {\n this.onChange(null);\n this.cdr.markForCheck();\n return;\n }\n\n this.onChange({\n startDate: this.startDate,\n endDate: this.endDate,\n });\n\n this.cdr.markForCheck();\n }\n\n /**\n * Parses Date | string safely into a Date instance for the UI.\n * Important: \"YYYY-MM-DD\" is treated as a local date (prevents timezone day-shift).\n */\n private parseToDate(v: Date | string | null): Date | null {\n if (!v) return null;\n\n if (v instanceof Date) {\n return isNaN(v.getTime()) ? null : v;\n }\n\n const s = String(v).trim();\n if (!s) return null;\n\n // Date-only string -> create LOCAL date (avoid UTC shifting)\n const m = s.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (m) {\n const y = Number(m[1]);\n const mo = Number(m[2]) - 1;\n const d = Number(m[3]);\n const local = new Date(y, mo, d, 12, 0, 0, 0);\n return isNaN(local.getTime()) ? null : local;\n }\n\n // ISO / other -> fallback\n const dt = new Date(s);\n return isNaN(dt.getTime()) ? null : dt;\n }\n\n private normalizeDateOnly(d: Date | null): Date | null {\n if (!d) return null;\n if (isNaN(d.getTime())) return null;\n\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 12, 0, 0, 0);\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\n\n@Component({\n selector: 'phoenix-meta-switch-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, ToggleSwitchModule],\n template: `\n <p-toggleSwitch\n class=\"phoenix-switch-v2\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onSwitchChange($event)\"\n (onBlur)=\"handleBlur()\"\n [disabled]=\"disabled\"\n [hidden]=\"hidden\"\n [attr.data-cy]=\"dataCy ?? null\"\n ></p-toggleSwitch>\n `,\n styles: [\n `\n :host ::ng-deep .p-toggleswitch {\n margin-top: 12px;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaSwitchV2Component),\n multi: true,\n },\n ],\n})\nexport class MetaSwitchV2Component implements ControlValueAccessor {\n /**\n * Optional external disable flag (field-level disable coming from meta config).\n * This is combined with the disabled state coming from Angular Forms (CVA).\n */\n @Input() disable = false;\n\n /**\n * Optional flag to hide the switch from UI (meta hidden).\n * Keep in mind: hidden does not automatically disable the control.\n */\n @Input() hidden = false;\n\n /**\n * Optional data-cy attribute for e2e tests (e.g. \"switch-singleEntity\").\n */\n @Input() dataCy?: string;\n\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Current boolean value stored inside the component.\n * This value is synchronized with the parent FormControl through CVA.\n */\n value = false;\n\n /**\n * CVA callback invoked when the value changes.\n */\n private onChange: (v: boolean) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched.\n * Standard: call on blur, not on every change.\n */\n private onTouched: () => void = () => {};\n\n /**\n * Disabled state coming from Angular Forms (ControlValueAccessor).\n */\n private isDisabled = false;\n\n /**\n * Final disabled state combining:\n * - form-level disabled state (CVA)\n * - field-level disable flag (input)\n */\n get disabled(): boolean {\n return this.disable || this.isDisabled;\n }\n\n /**\n * Writes a new value from the parent form control into the component.\n * Keep it idempotent and UI-safe.\n */\n writeValue(v: any): void {\n this.value = this.normalizeBool(v);\n this.cdr.markForCheck();\n }\n\n /**\n * Registers callback that is triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers callback that is triggered when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular Forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n /**\n * Handler for switch change.\n * Propagates value to the parent form control.\n *\n * Important note:\n * We intentionally use [ngModel] instead of [(ngModel)] in the template.\n * Two-way binding would update the local value BEFORE this handler runs,\n * which would prevent correct change detection and CVA propagation.\n */\n onSwitchChange(next: boolean): void {\n if (this.disabled) return;\n\n const normalized = this.normalizeBool(next);\n\n if (normalized !== this.value) {\n this.value = normalized;\n this.onChange(normalized);\n this.cdr.markForCheck();\n return;\n }\n\n // ensure the form control still receives the value\n this.onChange(normalized);\n this.cdr.markForCheck();\n }\n\n /**\n * Marks control as touched when user leaves the component.\n */\n handleBlur(): void {\n if (this.disabled) return;\n this.onTouched();\n }\n\n /**\n * Normalizes incoming values to strict boolean.\n * Supports: boolean, \"true\"/\"false\", 1/0, \"1\"/\"0\".\n */\n private normalizeBool(v: any): boolean {\n if (v === true || v === false) return v;\n\n if (v === 1 || v === '1') return true;\n if (v === 0 || v === '0') return false;\n\n if (typeof v === 'string') {\n const s = v.trim().toLowerCase();\n if (s === 'true') return true;\n if (s === 'false') return false;\n }\n\n return !!v;\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { PasswordModule } from 'primeng/password';\n\n/**\n * V2 Password meta field component.\n *\n * Goals vs legacy component:\n * - Uses a clean ControlValueAccessor implementation (no BaseMetaField inheritance).\n * - OnPush + explicit markForCheck() for predictable rendering in large dynamic forms.\n * - Supports \"disable\" (meta-level) + Angular Forms disabled state (CVA) combined.\n * - Emits touched on blur (standard), not on every input.\n * - Keeps value as string and normalizes null/undefined to ''.\n *\n * Notes:\n * - PrimeNG <p-password> supports toggleMask, feedback, strength meter, etc.\n * - We keep [feedback]=\"false\" to match old behavior.\n */\n@Component({\n selector: 'phoenix-meta-password-field-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n TranslateModule,\n PasswordModule,\n ],\n template: `\n <div>\n\n <!--\n PrimeNG Password:\n - We use ngModel for simple CVA integration (same pattern as other meta v2 fields).\n - We handle change via (input) to propagate every keystroke to the parent form.\n - We mark touched on blur to match standard UX (touched != changed).\n -->\n <p-password\n class=\"phoenix-password-v2\"\n [(ngModel)]=\"value\"\n (input)=\"onPasswordInput($event)\"\n (onBlur)=\"handleBlur()\"\n [disabled]=\"disabled\"\n [hidden]=\"hidden\"\n [feedback]=\"feedback\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.data-cy]=\"dataCy ?? null\"\n ></p-password>\n </div>\n `,\n styles: [\n `\n :host ::ng-deep .p-component {\n width: 100%;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaPasswordFieldV2Component),\n multi: true,\n },\n ],\n})\nexport class MetaPasswordFieldV2Component implements ControlValueAccessor {\n /**\n * Meta control configuration passed from dynamic forms system.\n * Keep it `any` to be compatible with existing meta-form model.\n *\n * If you have a shared type (e.g. MetaFormControl), replace `any`.\n */\n @Input() control: any;\n\n /**\n * Underlying Angular control reference used by InlineFieldError.\n * In your meta system this is typically injected/assigned by parent wrapper.\n *\n * If you have a strict type: AbstractControl | null\n */\n @Input() ctrl: any;\n\n /**\n * Optional external disable flag (field-level disable coming from meta config).\n * This is combined with the disabled state coming from Angular Forms (CVA).\n */\n @Input() disable = false;\n\n /**\n * Optional flag to hide the control from UI (meta hidden).\n * Keep in mind: hidden does not automatically disable the control.\n */\n @Input() hidden = false;\n\n /**\n * Optional data-cy attribute for e2e tests (e.g. \"password-admin\").\n * If not provided, you can still generate it from control.id in template usage.\n */\n @Input() dataCy?: string;\n\n /**\n * PrimeNG feedback (strength meter / hints). Disabled by default to match v1.\n */\n @Input() feedback = false;\n\n /**\n * Autocomplete attribute: by default we set to \"off\" (match old component).\n * For login forms you might want \"current-password\" or \"new-password\".\n */\n @Input() autocomplete: string = 'off';\n\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Current password value.\n * Always keep as string to avoid null/undefined edge cases with ngModel.\n */\n value = '';\n\n /**\n * CVA callback invoked when the value changes.\n */\n private onChange: (v: string) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched.\n * Standard: call on blur, not on every change.\n */\n private onTouched: () => void = () => {};\n\n /**\n * Disabled state coming from Angular Forms (ControlValueAccessor).\n */\n private isDisabled = false;\n\n /**\n * Final disabled state combining:\n * - form-level disabled state (CVA)\n * - field-level disable flag (input)\n */\n get disabled(): boolean {\n return this.disable || this.isDisabled;\n }\n\n /**\n * Writes a new value from the parent form control into the component.\n * Keep it idempotent and UI-safe.\n */\n writeValue(v: any): void {\n const next = this.normalizeString(v);\n\n // Prevent redundant UI updates.\n if (next === this.value) {\n this.cdr.markForCheck();\n return;\n }\n\n this.value = next;\n this.cdr.markForCheck();\n }\n\n /**\n * Registers callback that is triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers callback that is triggered when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular Forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n /**\n * Handler for user typing into the password input.\n * Propagates current value to the parent form control.\n *\n * Note:\n * - PrimeNG (input) gives us an event; we can also just use this.value directly.\n * - We intentionally do NOT call onTouched here (touched on blur).\n */\n onPasswordInput(event: any): void {\n if (this.disabled) return;\n\n const next = this.getInputValue(event);\n\n // Prevent redundant emits.\n if (next === this.value) {\n this.cdr.markForCheck();\n return;\n }\n\n this.value = next;\n this.onChange(next);\n this.cdr.markForCheck();\n }\n\n /**\n * Marks control as touched when user leaves the component.\n */\n handleBlur(): void {\n if (this.disabled) return;\n this.onTouched();\n }\n\n /**\n * PrimeNG input event -> string value.\n * Supports:\n * - native input event: event.target.value\n * - direct string (some wrappers)\n */\n private getInputValue(event: any): string {\n const v = event?.target?.value ?? event;\n return this.normalizeString(v);\n }\n\n /**\n * Normalizes incoming values to a string.\n * - null/undefined -> ''\n * - other -> String(v)\n */\n private normalizeString(v: any): string {\n if (v === null || v === undefined) return '';\n return String(v);\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n Input\n} from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { MetaFieldConfig, MetaFieldType } from '../../models/meta-field-config.model';\n\n// PrimeNG 20\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { SelectModule } from 'primeng/select';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { MessageModule } from 'primeng/message';\nimport { TextareaModule } from 'primeng/textarea';\n\nimport { MetaTimeperiodComponent } from '../../../meta-form/meta-form-fields/meta-timeperiod/meta-timeperiod.component';\nimport { MetaCurrencyComponent } from '../../../meta-form/meta-form-fields/meta-currency/meta-currency.component';\nimport { MetaTextEditorComponent } from '../../../meta-form/meta-form-fields/meta-text-editor/meta-text-editor.component';\nimport { MetaSelectButtonComponent } from '../../../meta-form/meta-form-fields/meta-select-button/meta-select-button.component';\nimport { MetaUploadComponent } from '../../../meta-form/meta-form-fields/meta-upload/meta-upload.component';\nimport { MetaUploadComponentDragDrop } from '../../../meta-form/meta-form-fields/meta-upload-dragdrop/meta-upload-dragdrop.component';\nimport { ReadOnlyInputV2Component } from '../read-only-input-v2/read-only-input-v2.component';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport { MetaAssignResponsibleV2Component } from '../meta-form-custom-fields/meta-assign-responsible-v2.component';\nimport { MetaColorPickerV2Component } from '../meta-form-custom-fields/meta-color-picker-v2.component';\nimport { MetaCheckboxColorPickerV2Component } from '../meta-form-custom-fields/meta-checkbox-color-picker-v2.component';\nimport { MetaStartDueDateV2Component } from '../meta-form-custom-fields/meta-start-due-date-v2.component';\nimport { MetaSwitchV2Component } from '../meta-form-custom-fields/meta-switch-v2.component';\nimport { MetaPasswordFieldV2Component } from '../meta-form-custom-fields/meta-password-field-v2.component';\n\n@Component({\n selector: 'phoenix-meta-form-field-v2',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n\n // PrimeNG 20 base inputs\n InputTextModule,\n TextareaModule,\n InputNumberModule,\n CheckboxModule,\n MultiSelectModule,\n SelectModule,\n DatePickerModule,\n MessageModule,\n\n // Advanced / custom Phoenix fields\n MetaTimeperiodComponent,\n MetaCurrencyComponent,\n MetaStartDueDateV2Component,\n MetaTextEditorComponent,\n MetaCheckboxColorPickerV2Component,\n MetaSwitchV2Component,\n MetaSelectButtonComponent,\n MetaAssignResponsibleV2Component,\n // MetaAssignAssetComponent,\n MetaPasswordFieldV2Component,\n MetaColorPickerV2Component,\n MetaUploadComponent,\n MetaUploadComponentDragDrop,\n\n // Read-only renderer used when page or field is in read-only mode\n ReadOnlyInputV2Component,\n ],\n templateUrl: './meta-form-field-v2.component.html',\n styleUrls: ['./meta-form-field-v2.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MetaFormFieldV2Component {\n /** Metadata definition of the field (type, key, options, styles, flags, etc.) */\n @Input({ required: true }) field!: MetaFieldConfig;\n\n /** Parent FormGroup that contains the FormControl for this field */\n @Input({ required: true }) form!: FormGroup;\n\n /**\n * Page-level read-only flag.\n * When true, the component renders ReadOnlyInputV2Component instead of editable controls.\n */\n @Input() readOnly = false;\n\n /**\n * Global disable flag (e.g. parent dialog toggles entire form disabled).\n * This is merged with field-level disable configuration.\n */\n @Input() disableForm = false;\n\n /** Used to manually trigger change detection for OnPush strategy */\n private cdr = inject(ChangeDetectorRef);\n\n /** Used to automatically unsubscribe from value/status streams on destroy */\n private dr = inject(DestroyRef);\n\n /** Translation service for validation and display labels */\n private translate = inject(TranslateService);\n\n /**\n * Exposed enum-like mapping of MetaFieldType for template usage.\n * Keeps templates readable and avoids magic strings.\n */\n readonly MetaFieldType = Object.freeze({\n TEXT: 'TEXT',\n URL: 'URL',\n NUMBER: 'NUMBER',\n TIMEPERIOD: 'TIMEPERIOD',\n CURRENCY: 'CURRENCY',\n TEXT_AREA: 'TEXT_AREA',\n SS_OPTION: 'SS_OPTION',\n SS_OPTION_OBJECT_BASED: 'SS_OPTION_OBJECT_BASED',\n MS_OPTION: 'MS_OPTION',\n START_DUE_DATE: 'START_DUE_DATE',\n DATE: 'DATE',\n TEXT_EDITOR: 'TEXT_EDITOR',\n CHECKBOX: 'CHECKBOX',\n CHECKBOX_COLOR: 'CHECKBOX_COLOR',\n SWITCH: 'SWITCH',\n SELECT_BUTTON: 'SELECT_BUTTON',\n ASSIGN: 'ASSIGN',\n ASSIGN_ASSET: 'ASSIGN_ASSET',\n PASSWORD: 'PASSWORD',\n COLOR: 'COLOR',\n UPLOAD: 'UPLOAD',\n UPLOAD_DRAG_DROP: 'UPLOAD_DRAG_DROP',\n LINKS_DATA: 'LINKS_DATA',\n SLOT: 'SLOT',\n } satisfies Record<string, MetaFieldType>);\n\n /** Control key resolved from MetaFieldConfig */\n get key(): string {\n return this.field?.configuration?.key ?? '';\n }\n\n /** Field type resolved from MetaFieldConfig */\n get type(): MetaFieldType {\n return this.field?.configuration?.type ?? 'TEXT';\n }\n\n /** Column width class for grid layout (falls back to default if not provided) */\n get colClass(): string {\n return this.field?.hidden\n ? 'p-0'\n : (this.field?.style.colWidth ?? 'col-12 md:col-6');\n }\n\n ngOnInit(): void {\n const ctrl = this.ctrl();\n if (!ctrl) return;\n\n /**\n * Subscribe to both valueChanges and statusChanges so the component:\n * - re-renders when user changes the value\n * - re-renders when validation state changes (touched/dirty/errors)\n */\n merge(ctrl.valueChanges, ctrl.statusChanges)\n .pipe(takeUntilDestroyed(this.dr))\n .subscribe(() => this.cdr.markForCheck());\n }\n\n /** Human-friendly label defined in metadata (already localized key) */\n userFriendlyMessage(): string | null {\n return this.field?.userFriendlyMessage ?? null;\n }\n\n /** Optional placeholder i18n key defined in metadata */\n placeholderKey(): string | null {\n return this.field?.configuration?.placeholderKey ?? null;\n }\n\n /**\n * Resolves final read-only state for this field:\n * - page-level readOnly OR field-level readOnly\n */\n isReadOnly(): boolean {\n return !!this.readOnly || !!this.field?.readOnly;\n }\n\n /**\n * Resolves final disabled state for this field:\n * - page-level disable OR field-level disable\n */\n isDisabled(): boolean {\n return !!this.disableForm || !!this.field?.disable;\n }\n\n /** Shortcut to underlying FormControl */\n ctrl() {\n return this.form.get(this.key);\n }\n\n /**\n * Minimal value formatter for legacy read-only rendering.\n * Kept intentionally simple to match V1 behavior.\n */\n displayValue(): any {\n const v = this.ctrl()?.value;\n if (v === null || v === undefined) return '';\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') return v;\n\n // Common DTO shapes (assign, option objects, uploads, etc.)\n if (typeof v === 'object') {\n return (v as any).label ?? (v as any).name ?? (v as any).fileName ?? JSON.stringify(v);\n }\n\n return String(v);\n }\n\n /**\n * Determines whether validation error should be displayed.\n * Errors are shown only after user interaction (touched or dirty).\n */\n showError(): boolean {\n const c = this.ctrl();\n return !!c && (c.touched || c.dirty) && !!c.errors;\n }\n\n /**\n * Maps control error object to a normalized error key.\n * Supports:\n * - Angular built-in validators\n * - Phoenix custom validators\n * - Submit-only async validators\n */\n errorKey(): string | null {\n const c = this.ctrl();\n if (!c?.errors) return null;\n\n // Angular built-in validators\n if (c.errors['required']) return 'required';\n if (c.errors['minlength']) return 'minlength';\n if (c.errors['maxlength']) return 'maxlength';\n if (c.errors['email']) return 'email';\n if (c.errors['pattern']) return 'pattern';\n if (c.errors['min']) return 'min';\n if (c.errors['max']) return 'max';\n\n // Phoenix custom validators\n if (c.errors['dangerousChars']) return 'dangerousChars';\n if (c.errors['timeperiod']) return 'timeperiod';\n if (c.errors['invalidDate']) return 'invalidDate';\n if (c.errors['dueDate']) return 'dueDate';\n if (c.errors['bothDates']) return 'bothDates';\n\n // Submit-only async validators\n if (c.errors['unique']) return 'unique';\n if (c.errors['uniqueEntry']) return 'uniqueEntry';\n if (c.errors['custom']) return 'custom';\n\n // Fallback: return first error key\n return Object.keys(c.errors)[0] ?? null;\n }\n\n /**\n * Resolves translated error message based on errorKey().\n * This is the single place responsible for validation message UX.\n */\n errorText(): string {\n const c = this.ctrl();\n const k = this.errorKey();\n if (!c || !k) return '';\n\n switch (k) {\n case 'required':\n return this.translate.instant('VALIDATION_MESSAGE.THIS_FIELD_IS_REQUIRED');\n\n case 'minlength':\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_AT_LEAST', {\n minlength: c.errors?.['minlength']?.requiredLength,\n });\n\n case 'maxlength':\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_NO_MORE', {\n maxlength: c.errors?.['maxlength']?.requiredLength,\n });\n\n case 'email':\n return this.translate.instant('VALIDATION_MESSAGE.ENTER_VALID_EMAIL');\n\n case 'dangerousChars':\n return this.translate.instant('VALIDATION_MESSAGE.NO_SPECIAL_CHARS_ALLOWED');\n\n case 'custom':\n // Legacy behavior: custom error can already be a translation key\n return this.translate.instant(c.errors?.['custom']);\n\n case 'uniqueEntry':\n // Legacy behavior: uniqueEntry may already be a translated string\n return (\n c.errors?.['uniqueEntry'] ??\n this.translate.instant('VALIDATION_MESSAGE.VALUE_IS_ALREADY_IN_USE')\n );\n\n case 'unique':\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_IS_ALREADY_IN_USE');\n\n case 'timeperiod':\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_SHOULD_MATCH_TIMEPATTERN');\n\n case 'dueDate':\n return this.translate.instant('VALIDATION_MESSAGE.INVALID_DATE');\n\n case 'bothDates':\n return this.translate.instant('VALIDATION_MESSAGE.BOTH_START_END_DATE_REQUIRED');\n\n case 'max':\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_SHOULD_BE_LESS_THAN_AND_MORE_THAN', {\n lowerValue: c.errors?.['min']?.min ?? 0,\n upperValue: c.errors?.['max']?.max,\n });\n\n case 'pattern': {\n // Special-case URL pattern handling (legacy InlineFieldError behavior)\n const re = '^(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?$';\n const requiredPattern = c.errors?.['pattern']?.requiredPattern;\n\n if (requiredPattern === re) {\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_SHOUL_BE_URL');\n }\n return this.translate.instant('VALIDATION_MESSAGE.INVALID_VALUE');\n }\n\n default:\n return this.translate.instant('VALIDATION_MESSAGE.INVALID_VALUE');\n }\n }\n\n /**\n * Lightweight text formatter for simple read-only display use cases.\n * This is used mainly for inline displays and summary UIs.\n */\n valueText(): string {\n const c = this.ctrl();\n const v = c?.value;\n\n if (v === null || v === undefined || v === '') return '--';\n\n // Single-select option: resolve label from options\n if (this.type === 'SS_OPTION') {\n const opts = (this.field?.configuration as any)?.options ?? [];\n if (typeof v !== 'object') {\n const hit = opts.find((o: any) => o?.value === v);\n const label = hit?.label ?? v;\n return this.translate.instant(label);\n }\n\n // Object value fallback\n const label = (v as any).label ?? (v as any).value;\n return this.translate.instant(label);\n }\n\n // Date formatting\n if (this.type === 'DATE' && v instanceof Date) {\n return v.toLocaleDateString();\n }\n\n // Text editor / textarea: strip basic HTML tags for compact display\n if (this.type === 'TEXT_EDITOR' || this.type === 'TEXT_AREA') {\n return String(v).replace(/<[^>]*>/g, '').trim() || '--';\n }\n\n return String(v);\n }\n\n isCheckbox(): boolean {\n return this.type === this.MetaFieldType.CHECKBOX;\n }\n\n onDateSelected(val: any) {\n const ctrl = this.ctrl();\n if (!ctrl) return;\n\n const d = val instanceof Date ? val : (val ? new Date(val) : null);\n if (!d || isNaN(d.getTime())) return;\n\n const normalized = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 12, 0, 0, 0);\n\n // set without re-triggering loops\n ctrl.setValue(normalized, { emitEvent: false });\n ctrl.markAsDirty();\n ctrl.markAsTouched();\n\n this.cdr.markForCheck();\n }\n\n onDateCleared() {\n const ctrl = this.ctrl();\n if (!ctrl) return;\n ctrl.setValue(null, { emitEvent: false });\n ctrl.markAsDirty();\n ctrl.markAsTouched();\n this.cdr.markForCheck();\n }\n}","<div [formGroup]=\"form\">\n @if (!field.hidden) {\n <div\n class=\"meta-field flex gap-2\"\n [class.flex-column]=\"!isCheckbox()\"\n [class.align-items-center]=\"isCheckbox()\"\n [style.order]=\"field.order ?? null\"\n [attr.data-cy]=\"'meta-field-' + key\"\n >\n\n @if (userFriendlyMessage() && !isCheckbox()) {\n <label class=\"meta-label\" [attr.for]=\"key\">\n {{ userFriendlyMessage()! | translate }}\n @if (field.mandatory) { <span class=\"meta-required\">*</span> }\n </label>\n }\n\n <!-- READ ONLY (page-level ili field-level) -->\n @if (isReadOnly()) {\n <phoenix-read-only-input-v2 [field]=\"field\" [form]=\"form\"></phoenix-read-only-input-v2>\n } @else {\n @switch (type) {\n\n @case (MetaFieldType.TEXT) {\n <input pInputText [id]=\"key\" [formControlName]=\"key\"\n [attr.placeholder]=\"placeholderKey() ? (placeholderKey()! | translate) : null\" [readonly]=\"isReadOnly()\">\n }\n\n @case (MetaFieldType.URL) {\n <input pInputText [id]=\"key\" [formControlName]=\"key\"\n [attr.placeholder]=\"placeholderKey() ? (placeholderKey()! | translate) : null\" [readonly]=\"isReadOnly()\">\n }\n\n @case (MetaFieldType.PASSWORD) {\n <phoenix-meta-password-field-v2 [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\">\n </phoenix-meta-password-field-v2>\n }\n\n @case (MetaFieldType.TEXT_AREA) {\n <textarea pTextarea class=\"meta-textarea\" [id]=\"key\" [formControlName]=\"key\" fluid [autoResize]=\"false\" rows=\"5\"\n [readonly]=\"isReadOnly()\" [attr.placeholder]=\"placeholderKey() ? (placeholderKey()! | translate) : null\">\n </textarea>\n }\n\n @case (MetaFieldType.NUMBER) {\n <p-inputNumber [inputId]=\"key\" [formControlName]=\"key\">\n </p-inputNumber>\n }\n\n @case (MetaFieldType.DATE) {\n <p-datepicker\n [inputId]=\"key\"\n [formControlName]=\"key\"\n [showIcon]=\"true\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n appendTo=\"body\"\n (onSelect)=\"onDateSelected($event)\"\n (onClearClick)=\"onDateCleared()\"\n ></p-datepicker>\n }\n\n @case (MetaFieldType.SS_OPTION) {\n <p-select [inputId]=\"key\" [options]=\"field.configuration.options ?? []\" optionLabel=\"label\" optionValue=\"value\"\n [formControlName]=\"key\" [showClear]=\"false\">\n </p-select>\n }\n\n @case (MetaFieldType.SS_OPTION_OBJECT_BASED) {\n <p-select [inputId]=\"key\" [options]=\"field.configuration.options ?? []\" optionLabel=\"label\" [formControlName]=\"key\"\n [showClear]=\"true\">\n </p-select>\n }\n\n @case (MetaFieldType.MS_OPTION) {\n <p-multiselect [inputId]=\"key\" [options]=\"field.configuration.options ?? []\" optionLabel=\"label\" optionValue=\"value\"\n [formControlName]=\"key\" [showClear]=\"false\" display=\"chip\">\n </p-multiselect>\n }\n\n @case (MetaFieldType.CHECKBOX) {\n <p-checkbox\n [inputId]=\"key\"\n [binary]=\"true\"\n [formControlName]=\"key\"\n [disabled]=\"isDisabled()\"\n ></p-checkbox>\n\n <label class=\"meta-inline-label\" [attr.for]=\"key\">\n {{ (userFriendlyMessage() ?? placeholderKey() ?? '') | translate }}\n @if (field.mandatory) { <span class=\"meta-required\">*</span> }\n </label>\n }\n\n <!-- advanced: preko postojećih komponenti -->\n @case (MetaFieldType.TIMEPERIOD) {\n <phoenix-meta-timeperiod [formControlName]=\"key\" [control]=\"field\" [parentForm]=\"form\"></phoenix-meta-timeperiod>\n }\n\n @case (MetaFieldType.CURRENCY) {\n <phoenix-meta-currency [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-currency>\n }\n\n @case (MetaFieldType.START_DUE_DATE) {\n <phoenix-meta-start-due-date-v2\n [formControlName]=\"key\"\n [attr.data-cy]=\"'start-due-' + key\">\n </phoenix-meta-start-due-date-v2>\n }\n\n @case (MetaFieldType.TEXT_EDITOR) {\n <phoenix-meta-text-editor [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-text-editor>\n }\n\n @case (MetaFieldType.CHECKBOX_COLOR) {\n <phoenix-meta-checkbox-color-picker-v2\n [formControlName]=\"key\"\n [options]=\"(field.configuration.extra?.['colorGrid'] ?? [])\"\n [disable]=\"isDisabled()\">\n </phoenix-meta-checkbox-color-picker-v2>\n }\n\n @case (MetaFieldType.SWITCH) {\n <phoenix-meta-switch-v2 [disable]=\"isDisabled()\" [formControlName]=\"key\" [hidden]=\"field.hidden ?? false\"\n [dataCy]=\"'switch-' + key\"></phoenix-meta-switch-v2>\n }\n\n @case (MetaFieldType.SELECT_BUTTON) {\n <phoenix-meta-select-button [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-select-button>\n }\n\n @case (MetaFieldType.ASSIGN) {\n <phoenix-meta-assign-responsible-v2\n [formControlName]=\"key\"\n [items]=\"(field.configuration.extra?.['items'] ?? [])\"\n [dialogHeaderKey]=\"(field.configuration.extra?.['dialogHeaderKey'] ?? 'LABELS.ASSIGN_RESPONSIBLE')\"\n ></phoenix-meta-assign-responsible-v2>\n }\n\n <!-- @case (MetaFieldType.ASSIGN_ASSET) {\n <phoenix-meta-assign-asset [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-assign-asset>\n } -->\n\n @case (MetaFieldType.COLOR) {\n <phoenix-meta-color-picker-v2\n [formControlName]=\"key\"\n [disable]=\"isDisabled()\">\n </phoenix-meta-color-picker-v2>\n }\n\n @case (MetaFieldType.UPLOAD) {\n <phoenix-meta-upload [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-upload>\n }\n\n @case (MetaFieldType.UPLOAD_DRAG_DROP) {\n <phoenix-meta-upload-dragdrop [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-upload-dragdrop>\n }\n\n @case (MetaFieldType.LINKS_DATA) {\n <!-- <input pInputText [id]=\"key\" [formControlName]=\"key\" [readonly]=\"true\"> -->\n }\n\n @case (MetaFieldType.SLOT) { }\n\n @default {\n <input pInputText [id]=\"key\" [formControlName]=\"key\">\n }\n }\n\n @if (field.configuration.extra?.['dividerAfter']) {\n <div\n class=\"meta-divider\"\n [style.margin]=\"field.configuration.extra?.['dividerMargin'] ?? '12px 0'\"\n ></div>\n }\n }\n\n\n @if (!readOnly && showError()) {\n <small class=\"p-error block mt-1\">\n <i class=\"pi pi-info-circle mr-1\"></i>{{ errorText() }}\n </small>\n }\n </div>\n }\n</div>","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { MetaFormGroupConfig } from '../../models/meta-form-config.model';\nimport { MetaFormFieldV2Component } from '../meta-form-field-v2/meta-form-field-v2.component';\n\n@Component({\n selector: 'phoenix-meta-form-group-v2',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MetaFormFieldV2Component],\n templateUrl: './meta-form-group-v2.component.html',\n styleUrls: ['./meta-form-group-v2.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MetaFormGroupV2Component {\n @Input({ required: true }) group!: MetaFormGroupConfig;\n @Input({ required: true }) form!: FormGroup;\n @Input() readOnly = false;\n}","<div class=\"pho-group\" [formGroup]=\"form\">\n <div class=\"grid\">\n @for (f of group.ctrl; track f?.configuration?.key) {\n <div [ngClass]=\"f.style.colWidth || 'col-12 md:col-6'\">\n <phoenix-meta-form-field-v2 [field]=\"f\" [form]=\"form\" [readOnly]=\"readOnly\"></phoenix-meta-form-field-v2>\n </div>\n }\n </div>\n\n</div>","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { UniqueValidationResponse } from '../models/meta-submit-validator.model';\n\nexport type MetaAsyncExecutor = (url: string, body?: any) => Observable<any>;\n\n/**\n * You provide this from app (or phoenix-config) so V2 lib doesn't depend on CrudService directly.\n * Example impl: (url, body) => this.crud.post(url, body)\n */\nexport const META_FORM_ASYNC_EXECUTOR =\n new InjectionToken<MetaAsyncExecutor>('META_FORM_ASYNC_EXECUTOR');","import { Inject, Injectable, Optional, DestroyRef, inject } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { firstValueFrom, Subscription } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { MetaSubmitValidatorConfig, UniqueValidationResponse } from '../models/meta-submit-validator.model';\nimport { META_FORM_ASYNC_EXECUTOR, MetaAsyncExecutor } from '../tokens/meta-form.tokens';\n\n// Symbols used to attach submit-only validators and cleanup subscriptions\n// directly onto the FormGroup instance without polluting its public API.\nconst SUBMIT_VALIDATORS = Symbol('META_FORM_V2_SUBMIT_VALIDATORS');\nconst SUBMIT_CLEAR_SUBS = Symbol('META_FORM_V2_SUBMIT_CLEAR_SUBS');\n\n@Injectable({ providedIn: 'root' })\nexport class MetaSubmitValidatorService {\n /** Used to automatically clean up subscriptions when the service is destroyed */\n private dr = inject(DestroyRef);\n\n constructor(\n /**\n * Optional async executor abstraction used to perform server-side validation\n * (e.g. uniqueness checks).\n *\n * If not provided, submit-only validators will be skipped gracefully.\n */\n @Optional()\n @Inject(META_FORM_ASYNC_EXECUTOR)\n private executor?: MetaAsyncExecutor\n ) {}\n\n /**\n * Registers submit-only validators on the given form.\n *\n * - Attaches validator metadata to the form instance (via Symbols)\n * - Cleans up any previous subscriptions\n * - Subscribes to valueChanges in order to auto-clear submit-only errors\n * when the user modifies the field after a failed submit\n */\n register(form: FormGroup, validators: MetaSubmitValidatorConfig[] | null | undefined): void {\n const list = validators ?? [];\n (form as any)[SUBMIT_VALIDATORS] = list;\n\n // Cleanup old auto-clear subscriptions\n const old: Subscription[] = (form as any)[SUBMIT_CLEAR_SUBS] ?? [];\n old.forEach((s) => s.unsubscribe());\n (form as any)[SUBMIT_CLEAR_SUBS] = [];\n\n // Subscribe to valueChanges in order to remove submit-only errors\n // as soon as the user changes the input.\n const subs: Subscription[] = [];\n\n for (const v of list) {\n const ctrl = form.get(v.controlKey);\n if (!ctrl) continue;\n\n const errorKey = v.errorKey ?? 'unique';\n\n subs.push(\n ctrl.valueChanges\n .pipe(takeUntilDestroyed(this.dr))\n .subscribe(() => {\n // ✅ Only remove submit-only error.\n // ❌ Do NOT trigger updateValueAndValidity here to avoid noisy re-validation.\n this.removeError(ctrl, errorKey);\n })\n );\n }\n\n (form as any)[SUBMIT_CLEAR_SUBS] = subs;\n }\n\n /**\n * Executes submit-only validators.\n *\n * Flow:\n * 1) Mark all controls as touched/dirty so sync validation messages become visible\n * 2) If form is sync-invalid, skip async validation\n * 3) Clear previous submit-only errors\n * 4) Execute async validators sequentially\n * 5) Apply mapped errors back to controls\n *\n * Returns:\n * - true → form is valid (sync + submit-only async)\n * - false → at least one submit-only validator failed\n */\n async run(form: FormGroup): Promise<boolean> {\n const validators: MetaSubmitValidatorConfig[] = (form as any)[SUBMIT_VALIDATORS] ?? [];\n\n // Make sure sync validation errors are visible on submit\n this.markAllTouchedOnSubmit(form);\n\n // Do not emit valueChanges/statusChanges events here\n form.updateValueAndValidity({ emitEvent: false });\n\n if (!validators.length) return form.valid;\n\n // If no async executor is provided, do not block submit\n if (!this.executor) return form.valid;\n\n // Clear previous submit-only errors before re-running validation\n this.clearSubmitErrors(form, validators);\n\n // If sync validation fails, skip async calls\n form.updateValueAndValidity({ emitEvent: false });\n if (form.invalid) return false;\n\n // Execute submit-only validators sequentially\n for (const v of validators) {\n const req = v.buildRequest(form);\n if (!req) continue;\n\n const raw = await firstValueFrom(this.executor(req.url, req.body));\n const mapped: UniqueValidationResponse =\n v.mapResponse?.(raw) ?? (raw as UniqueValidationResponse);\n\n const targetKey = (mapped?.control || v.controlKey) ?? v.controlKey;\n const ctrl = form.get(targetKey);\n if (!ctrl) continue;\n\n if (mapped?.isValid === false) {\n const errorKey = v.errorKey ?? 'unique';\n const msg =\n mapped?.message ??\n 'VALIDATION_MESSAGE.VALUE_IS_ALREADY_IN_USE';\n\n // Attach submit-only error to control\n ctrl.setErrors({ ...(ctrl.errors ?? {}), [errorKey]: msg });\n\n // Force visibility of the error in UI\n ctrl.markAsTouched();\n ctrl.markAsDirty();\n\n return false;\n }\n }\n\n return form.valid;\n }\n\n /**\n * Removes a specific submit-only error from the control without\n * touching other validation errors.\n */\n private removeError(ctrl: AbstractControl, errorKey: string) {\n if (!ctrl.errors?.[errorKey]) return;\n\n const next = { ...(ctrl.errors ?? {}) };\n delete next[errorKey];\n ctrl.setErrors(Object.keys(next).length ? next : null);\n }\n\n /**\n * Clears submit-only errors for all controls involved in submit validators.\n * This does NOT trigger updateValueAndValidity to avoid unnecessary re-validation.\n */\n private clearSubmitErrors(form: FormGroup, validators: MetaSubmitValidatorConfig[]): void {\n const keys = new Set<string>();\n validators.forEach((v) => keys.add(v.controlKey));\n\n const errorKeys = new Set<string>(validators.map((v) => v.errorKey ?? 'unique'));\n\n keys.forEach((k) => {\n const ctrl = form.get(k);\n if (!ctrl?.errors) return;\n\n const nextErrors = { ...(ctrl.errors ?? {}) };\n errorKeys.forEach((ek) => delete nextErrors[ek]);\n\n // ✅ Only update errors object, no re-validation side effects\n ctrl.setErrors(Object.keys(nextErrors).length ? nextErrors : null);\n });\n }\n\n /**\n * Marks all form controls as touched and dirty.\n * This is used on submit to make validation errors visible to the user.\n */\n private markAllTouchedOnSubmit(form: FormGroup): void {\n Object.values(form.controls).forEach((c: AbstractControl) => {\n c.markAsTouched();\n c.markAsDirty();\n });\n }\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Value shape expected by the START_DUE_DATE control.\n * Can be:\n * - null\n * - object with optional startDate / endDate (Date or ISO string)\n */\ntype StartDueValue =\n | { startDate: Date | string | null; endDate: Date | string | null }\n | null;\n\n/**\n * Validator for START_DUE_DATE composite field.\n *\n * Responsibilities:\n * - Optionally enforce that BOTH startDate and endDate are provided (requireBoth)\n * - Validate that provided dates are valid Date values\n * - Ensure startDate is not after endDate\n *\n * This is a synchronous validator and should be attached to the single FormControl\n * that represents the composite START_DUE_DATE value.\n */\nexport function startDueDateV2Validator(opts?: { requireBoth?: boolean }): ValidatorFn {\n const requireBoth = !!opts?.requireBoth;\n\n return (control: AbstractControl): ValidationErrors | null => {\n const v = control.value as StartDueValue;\n\n const sdRaw = v?.startDate ?? null;\n const edRaw = v?.endDate ?? null;\n\n // Case 1: both dates are empty\n // - If both are required -> invalid\n // - Otherwise -> valid (optional date range)\n if (!sdRaw && !edRaw) {\n return requireBoth ? { bothDates: true } : null;\n }\n\n // Case 2: only one date is provided but both are required\n if (requireBoth && (!sdRaw || !edRaw)) {\n return { bothDates: true };\n }\n\n // Case 3: both are optional and one is missing -> valid\n if (!sdRaw || !edRaw) return null;\n\n // Parse raw values into Date instances\n const sd = new Date(sdRaw as any);\n const ed = new Date(edRaw as any);\n\n // Invalid date values (e.g. unparsable strings)\n if (isNaN(sd.getTime()) || isNaN(ed.getTime())) return { dueDate: true };\n\n // Normalize both dates to midnight for date-only comparison (ignore time)\n const s = new Date(sd);\n s.setHours(0, 0, 0, 0);\n\n const e = new Date(ed);\n e.setHours(0, 0, 0, 0);\n\n // Start date must not be after end date\n return s.getTime() > e.getTime() ? { dueDate: true } : null;\n };\n}","import { AbstractControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { MetaFieldConfig, MetaFieldType } from '../models/meta-field-config.model';\nimport { startDueDateV2Validator } from './start-due-date-v2.validator';\nimport { timePeriod } from '../../meta-form/meta-validators/timeperiod/timeperiod.validator';\nimport { WhiteSpaceValidator } from '../../meta-form/meta-validators/white-space-validator';\nimport { noDangerousCharsValidator } from '../../meta-form/meta-validators/no-dangerous-chars/do-danerous-chars';\n\n/**\n * Builds synchronous Angular validators for a single meta-field.\n *\n * This function only returns *sync* validators:\n * - Required, min/max, length\n * - Email\n * - Regex / phone\n * - Timeperiod\n * - Start/Due date cross-field-ish validator (but still sync)\n * - Whitespace rules\n * - Dangerous characters\n *\n * Submit-only async validators (e.g. uniqueness) are handled elsewhere (MetaSubmitValidatorService).\n */\nexport function buildSyncValidators(\n field: MetaFieldConfig,\n ctx?: { lang?: string }\n): ValidatorFn[] {\n const out: ValidatorFn[] = [];\n\n // `field.validators` is a metadata-driven bag of validation rules\n const v: any = field.validators ?? {};\n\n // Field type drives some special-case validators\n const type = field.configuration.type as MetaFieldType;\n\n // ---- numeric constraints ----\n if (v.min != null) out.push(Validators.min(v.min));\n if (v.max != null) out.push(Validators.max(v.max));\n\n // ---- length constraints ----\n if (v.minLength != null) out.push(Validators.minLength(v.minLength));\n if (v.maxLength != null) out.push(Validators.maxLength(v.maxLength));\n\n // ---- email ----\n if (v.email) out.push(Validators.email);\n\n // ---- regex / pattern ----\n // Supports either:\n // - plain pattern string\n // - \"/.../flags\" format which we try to compile into RegExp\n if (v.regex?.regexType) {\n out.push(\n Validators.pattern(\n resolvePattern(v.regex.regexType) ?? v.regex.regexType\n )\n );\n }\n\n // ---- phone ----\n // if (v.phone) out.push(Validators.pattern(/^\\+?[1-9]\\d{7,14}$/));\n if (v.phone) out.push(phoneHumanValidator({ minDigits: 8, maxDigits: 15 }));\n\n // ---- time period ----\n // Localized validator; tpMin can enforce minimal value/length depending on your implementation.\n if (v.timeperiod) out.push(timePeriod(ctx?.lang ?? 'en', v.tpMin));\n\n // ---- start/due date ----\n // Apply the validator if field is of START_DUE_DATE type or if metadata explicitly enables dueDate.\n // requireBoth is driven by field.mandatory\n if (type === 'START_DUE_DATE' || v.dueDate) {\n out.push(startDueDateV2Validator({ requireBoth: !!field.mandatory }));\n }\n\n // ---- required ----\n if (field.mandatory) out.push(Validators.required);\n\n // ---- whitespace guard for required text fields ----\n // Prevent \" \" from passing required validation.\n if (field.mandatory && (type === 'TEXT' || type === 'TEXT_AREA')) {\n out.push(WhiteSpaceValidator.noWhiteSpaceValidator);\n }\n\n // ---- dangerous characters ----\n // Applied to text and textarea only.\n if (type === 'TEXT' || type === 'TEXT_AREA') {\n out.push(noDangerousCharsValidator());\n }\n\n return out;\n}\n\n/**\n * Tries to interpret a regex string in \"/pattern/flags\" format.\n * If parsing fails, returns null and the caller falls back to using the raw string.\n */\nfunction resolvePattern(regexType?: string): string | RegExp | null {\n if (!regexType) return null;\n\n // Support format like: \"/^[0-9]+$/g\"\n const m = regexType.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (m) {\n try {\n return new RegExp(m[1], m[2]);\n } catch {\n return null;\n }\n }\n\n // Otherwise treat it as a plain string pattern\n return regexType;\n}\n\n/**\n * Phone validator that accepts common human formats:\n * - spaces, hyphens, parentheses\n * - local numbers starting with 0 (e.g. 060...)\n * - international numbers with +\n *\n * Strategy:\n * 1) Strip formatting chars\n * 2) Validate the normalized digits\n */\nexport function phoneHumanValidator(opts?: {\n minDigits?: number; // total digits after normalization\n maxDigits?: number;\n}): ValidatorFn {\n const min = opts?.minDigits ?? 8;\n const max = opts?.maxDigits ?? 15;\n\n return (control: AbstractControl): ValidationErrors | null => {\n const raw = (control.value ?? '').toString().trim();\n if (!raw) return null; // let required handle empties\n\n // Keep leading \"+\" if present, remove common separators\n const normalized = raw\n .replace(/[\\s\\-().]/g, '') // remove spaces, dashes, parentheses, dots\n .replace(/(?!^\\+)\\+/g, ''); // remove any \"+\" not at the start\n\n // Allow optional leading \"+\"\n const hasPlus = normalized.startsWith('+');\n const digits = hasPlus ? normalized.slice(1) : normalized;\n\n // Digits only after normalization\n if (!/^\\d+$/.test(digits)) return { phone: true };\n\n // Length constraints (digits only)\n if (digits.length < min || digits.length > max) return { phone: true };\n\n // If it has \"+\", require country code style (first digit not 0)\n if (hasPlus && digits.startsWith('0')) return { phone: true };\n\n // If local, allow leading 0 (e.g. 060...)\n return null;\n };\n}","import { FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { MetaFieldConfig } from '../models/meta-field-config.model';\nimport { buildSyncValidators } from './meta-form-validators.util';\n\n/**\n * Ensures that the FormGroup structure matches the provided metadata (flat field list).\n *\n * Responsibilities:\n * - Create missing FormControls based on MetaFieldConfig\n * - Apply (and re-apply) synchronous validators derived from metadata\n * - Sync disabled/enabled state with metadata\n * - Remove obsolete controls that are no longer present in metadata\n *\n * This function is intentionally idempotent:\n * Calling it multiple times with the same metadata should not break form state.\n */\nexport function ensureControlsV2(\n fb: FormBuilder,\n form: FormGroup,\n flat: MetaFieldConfig[],\n initialValues: any,\n ctx?: { lang?: string }\n): void {\n // Tracks which control keys are allowed by current metadata\n const allowed = new Set<string>();\n\n for (const field of flat) {\n const key = field?.configuration?.key;\n if (!key) continue;\n allowed.add(key);\n\n /**\n * Create control if it does not exist yet.\n * Initial value is taken from initialValues map if provided,\n * otherwise defaults to null.\n */\n if (!form.contains(key)) {\n form.addControl(key, new FormControl(initialValues?.[key] ?? null));\n }\n\n const ctrl = form.get(key);\n if (!ctrl) continue;\n\n /**\n * (1) Sync validators:\n * Rebuild and apply synchronous validators based on current field metadata.\n * This ensures that changes in metadata (e.g. required, min/max, patterns)\n * are reflected on the form control.\n */\n ctrl.setValidators(buildSyncValidators(field, ctx));\n\n // Recalculate validity silently (do not emit events to avoid UI side-effects)\n ctrl.updateValueAndValidity({ emitEvent: false });\n\n /**\n * (2) Sync disabled/enabled state:\n * The control's enabled state must reflect the field metadata.\n * This is symmetric:\n * - If metadata says \"disable\" → disable control\n * - If metadata says \"enable\" → enable control\n */\n const shouldBeDisabled = !!field.disable;\n\n if (shouldBeDisabled && ctrl.enabled) {\n ctrl.disable({ emitEvent: false });\n } else if (!shouldBeDisabled && ctrl.disabled) {\n ctrl.enable({ emitEvent: false });\n }\n }\n\n /**\n * Remove any controls that are present in the FormGroup\n * but no longer exist in the metadata.\n *\n * This keeps the form structure in sync when metadata changes dynamically\n * (e.g. conditional fields, stage-based forms, etc.).\n */\n Object.keys(form.controls).forEach((k) => {\n if (!allowed.has(k)) form.removeControl(k);\n });\n}","import { MetaFieldConfig } from '../models/meta-field-config.model';\nimport { MetaFormControls, MetaFormGroupConfig } from '../models/meta-form-config.model';\n\nexport function isGrouped(input: MetaFormControls): input is MetaFormGroupConfig[] {\n return Array.isArray(input) && !!(input as any[])[0]?.ctrl;\n}\n\nexport function flattenControls(input: MetaFormControls | null | undefined): MetaFieldConfig[] {\n if (!input || !Array.isArray(input)) return [];\n\n if (!isGrouped(input as any)) return input as MetaFieldConfig[];\n\n return (input as any[])\n .flatMap((g: any) => (Array.isArray(g?.ctrl) ? g.ctrl : []))\n .filter((x: any) => !!x?.configuration?.key);\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, AbstractControl } from '@angular/forms';\nimport { AccordionModule } from 'primeng/accordion';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { MetaFormV2Config } from '../../models/meta-form-config.model';\nimport { MetaFormFieldV2Component } from '../meta-form-field-v2/meta-form-field-v2.component';\nimport { MetaFormGroupV2Component } from '../meta-form-group-v2/meta-form-group-v2.component';\n\nimport { MetaSubmitValidatorService } from '../../services/meta-submit-validator.service';\nimport { ensureControlsV2 } from '../../utils/meta-form-builder.util';\nimport { flattenControls } from '../../utils/meta-form-flatten.util';\n\ntype AccordionValue = string | number | string[] | number[] | null | undefined;\n\n@Component({\n selector: 'phoenix-meta-form-v2',\n standalone: true,\n templateUrl: './meta-form-v2.component.html',\n styleUrls: ['./meta-form-v2.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n AccordionModule,\n TranslateModule,\n MetaFormFieldV2Component,\n MetaFormGroupV2Component,\n ],\n})\nexport class MetaFormV2Component implements OnChanges, OnDestroy {\n /** Form instance created/owned by the parent (dialog/page) */\n @Input({ required: true }) form!: FormGroup;\n\n /**\n * V2 metadata/config:\n * - controls (grouped or flat)\n * - initialValues\n * - submitValidators (run on submit only)\n * - setupDependencies (optional runtime bindings)\n */\n @Input({ required: true }) config!: MetaFormV2Config;\n\n /**\n * Page-level readOnly state controlled by parent.\n * Used both for rendering and for \"enter edit mode\" behavior.\n */\n @Input() readOnly = false;\n\n /** Optional layout customization for inner content wrapper */\n @Input() contentStyle: Record<string, any> | null = null;\n\n /** Optional class name(s) applied to inner content wrapper */\n @Input() contentClass: string | null = null;\n\n /** Builds/ensures controls exist (ensures validators & default values are wired) */\n private fb = inject(FormBuilder);\n\n /** Registers and executes submit-only validators (async validation on submit) */\n private submitValidator = inject(MetaSubmitValidatorService);\n\n /** Used for validator localization (lang-dependent validators / messages) */\n private translate = inject(TranslateService);\n\n /**\n * A lightweight signature of the current metadata structure.\n * Used to detect when the form schema changes (and avoid unnecessary resets).\n */\n private lastSignature = '';\n\n /**\n * Cleanup function returned by setupDependencies (if any).\n * Called only when metadata structure changes or on destroy.\n */\n private depCleanup?: () => void;\n\n /**\n * PrimeNG Accordion \"value\" for opened panels.\n * For multiple panels, PrimeNG expects an array of ids.\n */\n expandedGroupIds: string[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.form || !this.config) return;\n\n /**\n * Flatten metadata controls to a single list for:\n * - building/enforcing FormControls\n * - dependency binding\n * - signature calculation\n */\n const flat = flattenControls(this.config.controls);\n\n /**\n * Signature is used to detect real schema changes.\n * We intentionally ignore labels/props and track key+type only.\n */\n const signature = flat.map((f) => `${f.configuration.key}:${f.configuration.type}`).join('|');\n\n /** \"config changed\" includes initialValues, validators, dependencies, etc. */\n const configChanged = !!changes['config'];\n\n /** \"form changed\" means parent passed a different FormGroup instance */\n const formChanged = !!changes['form'];\n\n /** schema changed if the signature differs from the last one */\n const metaChanged = signature !== this.lastSignature;\n\n /**\n * Special case: entering edit mode (readOnly true -> false).\n * Used to selectively show validation for already-filled values.\n */\n const enteringEdit =\n !!changes['readOnly'] &&\n changes['readOnly'].previousValue === true &&\n changes['readOnly'].currentValue === false;\n\n // If nothing relevant changed, exit early to avoid unnecessary work.\n if (!configChanged && !formChanged && !metaChanged && !enteringEdit) return;\n\n /**\n * Dependencies are tied to the metadata structure.\n * If schema changed, cleanup old subscriptions/bindings first.\n */\n if (configChanged || metaChanged) {\n this.depCleanup?.();\n this.depCleanup = undefined;\n }\n\n /**\n * Ensure controls exist on the passed FormGroup and sync validators.\n * This is where missing controls are added and validator wiring is applied.\n */\n const initial = this.config.initialValues ?? {};\n ensureControlsV2(this.fb, this.form, flat, initial, { lang: this.translate.currentLang });\n\n /**\n * Patch initial values without emitting changes:\n * - prevents loops\n * - keeps create/edit initialization silent\n */\n this.form.patchValue(initial, { emitEvent: false });\n this.form.updateValueAndValidity({ emitEvent: false });\n\n /**\n * Initialize accordion open panels ONLY when schema changes.\n * IMPORTANT: do NOT do this on readOnly toggle, otherwise user-collapsed state resets.\n */\n if (metaChanged) {\n if (this.isGrouped) {\n const groups = this.groupedControls ?? [];\n this.expandedGroupIds = groups\n .filter((g: any) => !g?.collapsed)\n .map((g: any) => this.panelValue(g))\n .filter(Boolean);\n } else {\n this.expandedGroupIds = [];\n }\n }\n\n /**\n * Register submit-only validators.\n * Safe to call even if empty; service will attach necessary structures internally.\n */\n this.submitValidator.register(this.form, this.config.submitValidators);\n\n /**\n * Bind dependencies ONLY when schema changes.\n * setupDependencies can subscribe to valueChanges, set options, reset fields, etc.\n * If it returns a function, we store it for cleanup.\n */\n if ((configChanged || metaChanged) && this.config.setupDependencies) {\n const maybeCleanup = this.config.setupDependencies({\n form: this.form,\n flatControls: flat,\n initialValues: initial,\n getControl: (k: string) => this.form.get(k),\n findField: (k: string) => flat.find((f) => f.configuration.key === k) ?? null,\n });\n\n if (typeof maybeCleanup === 'function') this.depCleanup = maybeCleanup;\n }\n\n /**\n * Entering edit mode:\n * - mark controls as touched ONLY if they already have a meaningful value\n * - expand groups that contain \"visible invalid\" controls (invalid + touched/dirty)\n * This prevents CREATE dialogs from showing \"required\" errors immediately.\n */\n if (enteringEdit) {\n queueMicrotask(() => {\n this.touchAndValidateOnlyFilledControls();\n this.expandVisibleInvalidGroupsUnion();\n });\n }\n\n // Store signature for the next change detection pass\n this.lastSignature = signature;\n }\n\n /**\n * PrimeNG Accordion emits value as:\n * - single id (string/number)\n * - array of ids\n * We normalize everything into string[] for stable internal state.\n */\n onAccordionValueChange(v: AccordionValue): void {\n this.expandedGroupIds = this.normalizeAccordionValue(v);\n }\n\n /** Normalizes Accordion value into a stable string[] representation */\n private normalizeAccordionValue(v: AccordionValue): string[] {\n if (Array.isArray(v)) return v.map((x) => `${x}`);\n if (v === null || v === undefined) return [];\n return [`${v}`];\n }\n\n // ---------------- template helpers ----------------\n\n /** True when metadata contains at least one control definition */\n get hasControls(): boolean {\n return Array.isArray(this.config?.controls) && this.config.controls.length > 0;\n }\n\n /**\n * Heuristic: grouped config has \"ctrl\" on first element.\n * (Keeps template simple and avoids extra schema fields.)\n */\n get isGrouped(): boolean {\n const c = (this.config?.controls as any[]) ?? [];\n return !!c[0]?.ctrl;\n }\n\n /** Returns grouped schema structure (accordion groups) */\n get groupedControls(): any[] {\n return (this.config?.controls as any[]) ?? [];\n }\n\n /** Returns flat schema structure (grid mode) */\n get flatControls(): any[] {\n return (this.config?.controls as any[]) ?? [];\n }\n\n /** TrackBy for group rendering */\n groupTrack(g: any, idx: number): any {\n return g?.id ?? idx;\n }\n\n /**\n * PrimeNG accordion panel `value` must match accordion `value` type.\n * We always convert group id to string for consistent behavior.\n */\n panelValue(g: any): string {\n const id = g?.id;\n return id === null || id === undefined ? '' : `${id}`;\n }\n\n // ---------------- core behavior ----------------\n\n /**\n * Marks & validates ONLY controls that already have meaningful values.\n * This is used when switching from readOnly -> edit mode to avoid:\n * - triggering \"required\" errors for empty fields\n * - expanding groups based on empty mandatory fields on CREATE dialogs\n */\n private touchAndValidateOnlyFilledControls(): void {\n const controls = this.form?.controls ?? {};\n for (const [key, ctrl] of Object.entries(controls)) {\n if (!ctrl) continue;\n\n const value = ctrl.value;\n\n // Touch only if this field is already populated (edit case) or prefilled.\n if (this.hasMeaningfulValue(value)) {\n ctrl.markAsTouched();\n ctrl.updateValueAndValidity({ emitEvent: true });\n }\n }\n\n // Optional: keep form status consistent after selective updates\n this.form.updateValueAndValidity({ emitEvent: true });\n }\n\n /**\n * Defines what counts as a \"meaningful\" value:\n * - non-empty strings\n * - numbers / booleans\n * - non-empty arrays\n * - objects with common identifiers (key/uuid/id) or any own keys\n */\n private hasMeaningfulValue(v: any): boolean {\n if (v === null || v === undefined) return false;\n\n if (typeof v === 'string') return v.trim().length > 0;\n if (typeof v === 'number') return true;\n if (typeof v === 'boolean') return true;\n\n if (Array.isArray(v)) return v.length > 0;\n\n if (typeof v === 'object') {\n // Common selection shapes: { key }, { uuid }, { id }, etc.\n if ('key' in v && v.key != null && `${v.key}`.trim() !== '') return true;\n if ('uuid' in v && v.uuid != null && `${v.uuid}`.trim() !== '') return true;\n if ('id' in v && v.id != null && `${v.id}`.trim() !== '') return true;\n\n // Fallback: any own keys\n return Object.keys(v).length > 0;\n }\n\n return false;\n }\n\n /**\n * \"Visible invalid\" means:\n * - invalid\n * - AND user has interacted with it (touched or dirty)\n * This matches typical UI behavior: show errors only after interaction.\n */\n private isVisibleInvalid(ctrl: AbstractControl | null): boolean {\n if (!ctrl) return false;\n return ctrl.invalid && (ctrl.touched || ctrl.dirty);\n }\n\n /**\n * Checks if a group contains at least one visible invalid control.\n * Used to auto-expand groups when entering edit mode.\n */\n private groupHasVisibleInvalid(g: any): boolean {\n const keys = (g?.ctrl ?? [])\n .map((f: any) => f?.configuration?.key)\n .filter(Boolean);\n\n return keys.some((k: string) => this.isVisibleInvalid(this.form.get(k)));\n }\n\n /**\n * Expands all groups that contain visible invalid controls,\n * while preserving any groups already expanded by the user.\n */\n private expandVisibleInvalidGroupsUnion(): void {\n if (!this.isGrouped) return;\n\n const groups = this.groupedControls ?? [];\n const invalidIds = groups\n .filter((g: any) => this.groupHasVisibleInvalid(g))\n .map((g: any) => this.panelValue(g))\n .filter(Boolean);\n\n if (!invalidIds.length) return;\n\n this.expandedGroupIds = Array.from(new Set([...this.expandedGroupIds, ...invalidIds]));\n }\n\n /** Cleanup dependency subscriptions when component is destroyed */\n ngOnDestroy(): void {\n this.depCleanup?.();\n }\n}","<div [formGroup]=\"form\">\n @if (hasControls) {\n\n @if (isGrouped) {\n <p-accordion\n [multiple]=\"true\"\n [value]=\"expandedGroupIds\"\n (valueChange)=\"onAccordionValueChange($event)\"\n >\n @for (g of groupedControls; track groupTrack(g, $index)) {\n <p-accordion-panel [value]=\"panelValue(g)\">\n <p-accordion-header>\n\n <!-- plus/minus toggle icon -->\n <ng-template #toggleicon let-active=\"active\">\n @if (active) {\n <i class=\"pi pi-minus-circle\"></i>\n } @else {\n <i class=\"pi pi-plus-circle\"></i>\n }\n </ng-template>\n\n {{ g?.groupName | translate }}\n </p-accordion-header>\n \n <p-accordion-content>\n <div [ngStyle]=\"contentStyle\" [ngClass]=\"contentClass\">\n <phoenix-meta-form-group-v2 [group]=\"g\" [form]=\"form\" [readOnly]=\"readOnly\"></phoenix-meta-form-group-v2>\n </div>\n </p-accordion-content>\n </p-accordion-panel>\n }\n </p-accordion>\n\n } @else {\n <div class=\"grid\">\n @for (f of flatControls; track f.configuration.key) {\n <div [ngClass]=\"f.style.colWidth ?? 'col-12 md:col-6'\">\n <phoenix-meta-form-field-v2 [field]=\"f\" [form]=\"form\" [readOnly]=\"readOnly\"></phoenix-meta-form-field-v2>\n </div>\n }\n </div>\n }\n\n }\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Output, input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\n\n@Component({\n selector: 'phoenix-meta-form-buttons-v2',\n standalone: true,\n imports: [CommonModule, ButtonModule, TranslateModule, CheckboxModule, FormsModule],\n templateUrl: './meta-form-buttons-v2.component.html',\n styleUrls: ['./meta-form-buttons-v2.component.scss'],\n})\nexport class MetaFormButtonsV2Component {\n /**\n * Disabled state for Save button (usually: form invalid or readOnly or loading)\n */\n isDisabled = input<boolean>(false);\n\n /**\n * Optional feature: \"Create another\" checkbox.\n * If false => checkbox is not rendered.\n */\n isCreateAnother = input<boolean>(false);\n\n /**\n * Loading indicator for Save button.\n */\n isLoading = input<boolean>(false);\n\n /**\n * Emits when user clicks Save.\n * Payload matches existing contract: { isAnother: boolean }\n */\n @Output() handleSave = new EventEmitter<{ isAnother: boolean }>();\n\n /**\n * Emits when user clicks Cancel.\n */\n @Output() handleCancel = new EventEmitter<'CANCEL'>();\n\n /**\n * Local checkbox model (kept only in this component).\n */\n createAnother = false;\n\n onSaveClick(): void {\n this.handleSave.emit({ isAnother: !!this.createAnother });\n }\n\n onCancelClick(): void {\n this.handleCancel.emit('CANCEL');\n }\n}","<div class=\"flex justify-content-end p-2\">\n @if (isCreateAnother()) {\n <p-checkbox\n id=\"dialog-buttons-checkbox\"\n data-cy=\"dialog-buttons-checkbox-cy\"\n [(ngModel)]=\"createAnother\"\n [binary]=\"true\"\n inputId=\"binary\"\n class=\"mr-3\"\n ></p-checkbox>\n }\n\n <button\n class=\"mr-2\"\n pButton\n [disabled]=\"isDisabled()\"\n [loading]=\"isLoading()\"\n (click)=\"onSaveClick()\"\n [attr.data-cy]=\"'submit-button'\"\n >\n <span class=\"mx-1\">{{ 'ACTION.SAVE' | translate }}</span>\n </button>\n\n <p-button\n [text]=\"true\"\n (click)=\"onCancelClick()\"\n [attr.data-cy]=\"'cancel-button'\"\n >\n {{ 'ACTION.CANCEL' | translate }}\n </p-button>\n</div>","/** Public API Surface of phoenix */\nexport * from './lib/components/inner-header/inner-header.component';\nexport * from './lib/components/sidebar/sidebar.component';\nexport * from './lib/components/actions/actions.component';\nexport * from './lib/components/card/card.component';\nexport * from './lib/components/topbar/topbar.component';\nexport * from './lib/components/search-bar/search-bar.component';\nexport * from './lib/components/sidebar-item/sidebar-item.component';\nexport * from './lib/components/user/user.component';\nexport * from './lib/components/status-header/status-header.component';\nexport * from './lib/components/context-object/contex-object.component';\nexport * from './lib/components/shell/shell.component';\nexport * from './lib/components/data-table/table/table.component';\nexport * from './lib/components/meta-form/meta-form.component';\nexport * from './lib/components/meta-form/meta-form-buttons/meta-form-buttons.component';\nexport * from './lib/components/meta-form/meta-form-templates/groups-form/groups-form.component';\nexport * from './lib/components/meta-form/services/meta-form.service';\nexport * from './lib/components/meta-form/meta-form-fields/object-item-dialog/object-item-dialog.component';\n//Status bar\nexport * from './lib/components/quick-pick/quick-pick/quick-pick.component';\nexport * from './lib/components/status-bar/status-bar.component';\nexport * from './lib/components/quick-pick/quick-pick-sidepanel/quick-pick-sidepanel.component';\nexport * from './lib/components/status-bar/models/status-attribute.model';\nexport * from './lib/components/status-bar/enums/status-col-type.enum';\nexport * from './lib/components/status-bar/models/status-bar-configuration.model';\n//model topbar\nexport * from './lib/models/shell-config.model';\nexport * from './lib/models/status.model';\n//data-table utils\nexport * from './lib/components/data-table/utils/dataTable.enum';\nexport * from './lib/components/data-table/utils/dataTable.interface';\n//Context object model\nexport * from './lib/components/context-object/context-object.model';\n//utils\nexport * from './lib/components/meta-form/utils/control-type.enum';\n\n// META FORM V2\nexport * from './lib/components/meta-form-v2/components/meta-form-v2/meta-form-v2.component';\nexport * from './lib/components/meta-form-v2/components/meta-form-field-v2/meta-form-field-v2.component';\nexport * from './lib/components/meta-form-v2/components/meta-form-group-v2/meta-form-group-v2.component';\nexport * from './lib/components/meta-form-v2/components/meta-form-buttons-v2/meta-form-buttons-v2.component';\n\nexport * from './lib/components/meta-form-v2/models/meta-form-config.model';\nexport * from './lib/components/meta-form-v2/models/meta-field-config.model';\nexport * from './lib/components/meta-form-v2/models/meta-submit-validator.model';\n\nexport * from './lib/components/meta-form-v2/services/meta-submit-validator.service';\n\nexport * from './lib/components/meta-form-v2/tokens/meta-form.tokens';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i5","i9","i3","i4","i6","i7","i8","i11","i10","i2.MetaFormService","i1.MetaFormService"],"mappings":"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"}
1
+ {"version":3,"file":"fuentis-phoenix-ui.mjs","sources":["../../../projects/phoenix-ui/src/lib/components/inner-header/inner-header.component.ts","../../../projects/phoenix-ui/src/lib/components/inner-header/inner-header.component.html","../../../projects/phoenix-ui/src/lib/components/sidebar-item/sidebar-item.component.ts","../../../projects/phoenix-ui/src/lib/components/sidebar/sidebar.component.ts","../../../projects/phoenix-ui/src/lib/components/sidebar/sidebar.component.html","../../../projects/phoenix-ui/src/lib/components/actions/action-state.service.ts","../../../projects/phoenix-ui/src/lib/components/actions/actions.component.ts","../../../projects/phoenix-ui/src/lib/components/actions/actions.component.html","../../../projects/phoenix-ui/src/lib/utils/actions.utils.ts","../../../projects/phoenix-ui/src/lib/components/card/card.component.ts","../../../projects/phoenix-ui/src/lib/components/card/card.component.html","../../../projects/phoenix-ui/src/lib/services/crud.service.ts","../../../projects/phoenix-ui/src/lib/components/search-card/search-card.component.ts","../../../projects/phoenix-ui/src/lib/components/search-card/search-card.component.html","../../../projects/phoenix-ui/src/lib/utils/compl-types.utils.ts","../../../projects/phoenix-ui/src/lib/utils/assm-url-resolver.utils.ts","../../../projects/phoenix-ui/src/lib/components/search-bar/search-bar.component.ts","../../../projects/phoenix-ui/src/lib/components/search-bar/search-bar.component.html","../../../projects/phoenix-ui/src/lib/components/user/user.component.ts","../../../projects/phoenix-ui/src/lib/components/topbar/topbar.component.ts","../../../projects/phoenix-ui/src/lib/components/topbar/topbar.component.html","../../../projects/phoenix-ui/src/lib/components/quick-pick/quick-pick/quick-pick.component.ts","../../../projects/phoenix-ui/src/lib/components/quick-pick/quick-pick/quick-pick.component.html","../../../projects/phoenix-ui/src/lib/components/status-header/status-header.component.ts","../../../projects/phoenix-ui/src/lib/components/status-header/status-header.component.html","../../../projects/phoenix-ui/src/lib/components/status-bar/models/status-attribute.model.ts","../../../projects/phoenix-ui/src/lib/components/tag/tag.component.ts","../../../projects/phoenix-ui/src/lib/components/tag/tag.component.html","../../../projects/phoenix-ui/src/lib/components/context-object/contex-object.component.ts","../../../projects/phoenix-ui/src/lib/components/context-object/contex-object.component.html","../../../projects/phoenix-ui/src/lib/components/shell/shell.component.ts","../../../projects/phoenix-ui/src/lib/components/shell/shell.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/form-fields.utils.ts","../../../projects/phoenix-ui/src/lib/pipes/time-period.pipe.ts","../../../projects/phoenix-ui/src/lib/utils/initials.pipe.ts","../../../projects/phoenix-ui/src/lib/components/data-table/utils/dataTable.enum.ts","../../../projects/phoenix-ui/src/lib/components/data-table/phoenix-data-table-action/phoenix-data-table-action.component.ts","../../../projects/phoenix-ui/src/lib/components/data-table/phoenix-data-table-action/phoenix-data-table-action.component.html","../../../projects/phoenix-ui/src/lib/components/data-table/phoenix-data-table-tabs/phoenix-data-table-tabs.component.ts","../../../projects/phoenix-ui/src/lib/components/data-table/phoenix-data-table-tabs/phoenix-data-table-tabs.component.html","../../../projects/phoenix-ui/src/lib/components/data-table/table/isSelected.pipe.ts","../../../projects/phoenix-ui/src/lib/components/data-table/table-caption/table-caption.component.ts","../../../projects/phoenix-ui/src/lib/components/data-table/table-caption/table-caption.component.html","../../../projects/phoenix-ui/src/lib/components/data-table/utils/is-boolean.pipe.ts","../../../projects/phoenix-ui/src/lib/components/data-table/utils/table-cell.pipe.ts","../../../projects/phoenix-ui/src/lib/components/data-table/utils/table.utils.ts","../../../projects/phoenix-ui/src/lib/components/data-table/table/table.component.ts","../../../projects/phoenix-ui/src/lib/components/data-table/table/table.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-validators/due-date/start-due-date.validator.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-validators/timeperiod/timeperiod.validator.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/control-type.enum.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/get-field-type.utils.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-validators/white-space-validator.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-validators/no-dangerous-chars/do-danerous-chars.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-validators/date-compare-validator.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/services/meta-form.service.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-abstract.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/lang.utils.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/field-label.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-field-label/meta-label.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/object-item-dialog/object-item-dialog.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/object-item-dialog/object-item-dialog.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-assign-responsible/meta-assign-responsible.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/error-type.util.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-field-error/inline-field-error.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/base-meta-field.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-calendar/meta-calendar.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-checkbox-color-picker/meta-checkbox-color-picker.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-checkbox/meta-checkbox.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-color-picker/meta-color-picker.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-currency/meta-currency.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-multiple-select/meta-multiple-select.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-number-input/meta-number-input.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-password-feild/meta-password-feild.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-select-button/meta-select-button.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/translate-dropdown-data.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-single-select-object-based/meta-single-select-object_based.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-single-select/meta-single-select.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-start-due-date/meta-start-due-date.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-switch/meta-switch.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-text-area/meta-text-area.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-text-editor/meta-text-editor.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-text-input/meta-text-input.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-timeperiod/meta-timeperiod.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-upload/meta-upload.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/field-col.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/global-phase.utils.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/so-types.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/utils/strip-html.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-templates/read-only-input/read-only-input.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-templates/read-only-input/read-only-input.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-assign-asset/meta-assign-asset.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-fields/meta-upload-dragdrop/meta-upload-dragdrop.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-buttons/meta-form-buttons.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-buttons/meta-form-buttons.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-templates/groups-form/groups-form.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form/meta-form-templates/groups-form/groups-form.component.html","../../../projects/phoenix-ui/src/lib/components/status-bar/pipes/text-length.pipe.ts","../../../projects/phoenix-ui/src/lib/components/status-bar/enums/status-col-type.enum.ts","../../../projects/phoenix-ui/src/lib/components/status-bar/status-attribute-display.component.ts","../../../projects/phoenix-ui/src/lib/components/status-bar/status-attribute-display.component.html","../../../projects/phoenix-ui/src/lib/components/status-bar/status-bar.component.ts","../../../projects/phoenix-ui/src/lib/components/status-bar/status-bar.component.html","../../../projects/phoenix-ui/src/lib/components/quick-pick/quick-pick-sidepanel/quick-pick-sidepanel.component.ts","../../../projects/phoenix-ui/src/lib/components/quick-pick/quick-pick-sidepanel/quick-pick-sidepanel.component.html","../../../projects/phoenix-ui/src/lib/models/status.model.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/pipes/strip-html-safe.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/pipes/file-size.pipe.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/read-only-input-v2/read-only-input-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/read-only-input-v2/read-only-input-v2.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-assign-responsible-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-color-picker-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-checkbox-color-picker-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-start-due-date-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-switch-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-custom-fields/meta-password-field-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-field-v2/meta-form-field-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-field-v2/meta-form-field-v2.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-group-v2/meta-form-group-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-group-v2/meta-form-group-v2.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/tokens/meta-form.tokens.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/services/meta-submit-validator.service.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/utils/start-due-date-v2.validator.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/utils/meta-form-validators.util.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/utils/meta-form-builder.util.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/utils/meta-form-flatten.util.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-v2/meta-form-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-v2/meta-form-v2.component.html","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-buttons-v2/meta-form-buttons-v2.component.ts","../../../projects/phoenix-ui/src/lib/components/meta-form-v2/components/meta-form-buttons-v2/meta-form-buttons-v2.component.html","../../../projects/phoenix-ui/src/public-api.ts","../../../projects/phoenix-ui/src/fuentis-phoenix-ui.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { Input } from '@angular/core';\n\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n selector: 'pho-inner-header',\n standalone: true,\n imports: [CommonModule, TooltipModule],\n templateUrl: './inner-header.component.html',\n})\nexport class InnerHeaderComponent {\n @Input() title: string = '';\n @Input() tooltipContent: string = '';\n}\n","<div\n class=\"flex align-items-center justify-content-between border-bottom-1 border-300 pt-2 pb-2\"\n>\n <div class=\"flex align-items-center gap-2\">\n <span class=\"font-medium text-lg\">\n {{ title }}\n </span>\n <i [pTooltip]=\"tooltipContent\" class=\"pi pi-info-circle text-blue-500\"></i>\n </div>\n\n <div class=\"flex align-items-center gap-2\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Router, RouterLink, RouterLinkActive } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TagModule } from 'primeng/tag';\nimport { MenuModule } from 'primeng/menu';\nimport { DividerModule } from 'primeng/divider';\n\n@Component({\n selector: 'pho-sidebar-item',\n standalone: true,\n styleUrl: '../../styles/global.css',\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n ButtonModule,\n RouterLink,\n RouterLinkActive,\n TooltipModule,\n TranslateModule,\n MenuModule,\n TagModule,\n DividerModule,\n ],\n template: `\n @if(item.path === '/dashboard'){\n <li\n class=\"list-none flex align-items-center border-bottom-1 border-200\"\n routerLinkActive=\"active-link\"\n [routerLinkActiveOptions]=\"{ exact: false }\"\n >\n <!-- Visible link: user navigation goes to item.path -->\n <a\n class=\"p-button no-underline w-full justify-content-between surface-0 hover:surface-100 border-none overflow-hidden bg-transparent sidebaritem\"\n [attr.data-cy]=\"'navigation-side-navigation-item-' + item.label\"\n [routerLink]=\"item?.disabled ? null : item.path\"\n [ngClass]=\"[\n classname,\n item?.disabled ? 'opacity-50 cursor-not-allowed' : ''\n ]\"\n [style.pointer-events]=\"item?.disabled ? 'none' : 'auto'\"\n >\n <div class=\"flex align-items-center \">\n <img class=\"mr-2\" width=\"28\" [src]=\"item.icon\" alt=\"\" />\n <span class=\"text-primary font-bold pr-3 \">{{\n item.label | translate\n }}</span>\n </div>\n\n <p-button\n icon=\"pi pi-sliders-v\"\n size=\"small\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"onSliderClick($event, menu)\"\n [disabled]=\"item.disabledConfig\"\n />\n </a>\n\n <!-- Hidden link: used ONLY to activate based on basePath -->\n <a\n [routerLink]=\"item.basePath || item.path\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n style=\"display:none\"\n ></a>\n\n <p-menu\n styleClass=\"w-20rem\"\n appendTo=\"body\"\n #menu\n [model]=\"item.subitems\"\n [popup]=\"true\"\n >\n <ng-template #submenuheader let-item>\n <span class=\"text-400 text-sm font-semibold\">{{\n item.label | translate\n }}</span>\n </ng-template>\n <ng-template pTemplate=\"item\" let-item>\n <a\n (click)=\"onSliderItemsClick(item)\"\n [ngClass]=\"{ 'pointer-events-none': item.activated }\"\n pRipple\n class=\"flex align-items-center p-menuitem-link p-2 cursor-pointer w-full\"\n >\n <div class=\"flex justify-content-between w-full\">\n <div>\n @if(item.icon){ <i [class]=\"item.icon\"></i> }\n <span class=\"ml-2\">{{ item.title | translate }}</span>\n </div>\n @if(item.activated){ <i class=\"pi pi-check\"></i> }\n </div>\n </a>\n </ng-template>\n <ng-template #end>\n <p-divider styleClass=\"m-0\" type=\"solid\" />\n <p-button\n [label]=\"'ACTION.CREATE' | translate\"\n icon=\"pi pi-plus\"\n [text]=\"true\"\n severity=\"secondary\"\n styleClass=\"w-full p-2\"\n (click)=\"onSliderItemsClick({ type: 'CREATE' })\"\n />\n </ng-template>\n </p-menu>\n </li>\n\n } @else {\n <li\n class=\"list-none flex align-items-center\"\n [pTooltip]=\"item?.tooltip | translate\"\n routerLinkActive=\"active-link\"\n [routerLinkActiveOptions]=\"{ exact: false }\"\n >\n <!-- Visible link: user navigation goes to item.path -->\n <a\n [attr.data-cy]=\"'navigation-side-navigation-item-' + item.label\"\n [routerLink]=\"item?.disabled ? null : item.path\"\n class=\"p-button no-underline w-full justify-content-start surface-0 hover:surface-100 border-none overflow-hidden bg-transparent sidebaritem\"\n [ngClass]=\"[\n classname,\n item?.disabled ? 'opacity-50 cursor-not-allowed' : ''\n ]\"\n [style.pointer-events]=\"item?.disabled ? 'none' : 'auto'\"\n >\n <div\n class=\"flex justify-content-between w-full\"\n style=\"margin-left: 24px;\"\n >\n <span style=\"font-size:13px\" class=\"text-primary white-space-nowrap\">\n {{ item.label | translate }}\n </span>\n </div>\n </a>\n @if(item.tag){\n <p-tag\n [style]=\"{\n fontSize: '9px',\n padding: '2px 6px',\n \n }\"\n severity=\"info\"\n [value]=\"item.tag | translate\"\n />\n } @if(item.lock){\n <p-tag\n [style]=\"{ fontSize: '9px', paddingRight: '3px' }\"\n severity=\"warn\"\n icon=\"pi pi-lock\"\n />\n }\n <!-- Hidden link: used ONLY to activate based on basePath -->\n <a\n [routerLink]=\"item.basePath || item.path\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n style=\"display:none\"\n ></a>\n </li>\n }\n `,\n})\nexport class SidebarItemComponent implements OnChanges {\n @Input() item!: any;\n @Input() classname: string = '';\n @Output() sliderClick = new EventEmitter<any>();\n\n constructor(private router: Router) {}\n\n onSliderClick($event: any, menu: any): void {\n $event.stopPropagation();\n $event.preventDefault();\n menu.toggle($event);\n }\n\n onSliderItemsClick(event: any) {\n this.sliderClick.emit(event);\n }\n\n ngOnChanges(_: SimpleChanges): void {}\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { SidebarItemComponent } from '../sidebar-item/sidebar-item.component';\nimport { CommonModule } from '@angular/common';\nimport { SidebarItem } from '../../models/shell-config.model';\nimport { AccordionModule } from 'primeng/accordion';\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n selector: 'pho-sidebar',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n SidebarItemComponent,\n RouterModule,\n AccordionModule,\n TranslateModule,\n TooltipModule,\n ],\n templateUrl: './sidebar.component.html',\n styleUrl: './sidebar.component.scss',\n animations: [\n trigger('hoverState', [\n state(\n 'default',\n style({\n width: '50px',\n })\n ),\n state(\n 'hovered',\n style({\n width: '190px',\n })\n ),\n transition('default <=> hovered', animate('200ms ease-in-out')),\n ]),\n ],\n})\nexport class SidebarComponent {\n @Output() toggleSidebar = new EventEmitter<boolean>();\n @Output() sliderClick = new EventEmitter<any>();\n @Input() classname: string = '';\n\n @Input() mainItems: any;\n @Input() footerItem: any;\n\n isHovered = false;\n isSlim = false;\n\n get hoverState() {\n return this.isHovered ? 'hovered' : 'default';\n }\n\n onMouseEnter() {\n this.isHovered = true;\n }\n\n onMouseLeave() {\n this.isHovered = false;\n }\n\n onToggleSidebar() {\n this.isSlim = !this.isSlim;\n this.toggleSidebar.emit(this.isSlim);\n }\n}\n","@if (isSlim) {\n <div\n [@hoverState]=\"hoverState\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n class=\"relative shadow-3 h-full sidebar overflow-hidden\"\n >\n <div class=\"flex flex-column h-full\" style=\"scroll-padding-bottom: 5rem\">\n <div class=\"ml-1 mr-1\">\n <pho-sidebar-item\n (sliderClick)=\"sliderClick.emit($event)\"\n [item]=\"mainItems[0].items[0]\"\n />\n </div>\n\n <p-accordion [value]=\"[0, 1, 2, 3]\" [multiple]=\"true\">\n @for (itemGroup of mainItems; track $index) {\n <p-accordion-panel [value]=\"$index\">\n <p-accordion-header>\n <div class=\"flex align-items-center\">\n <img class=\"mr-2\" width=\"28\" [src]=\"itemGroup.icon\" alt=\"\" />\n <span class=\"text-primary font-bold\">\n {{ itemGroup.module | translate }}\n </span>\n </div>\n\n <ng-template #toggleicon let-active=\"active\">\n @if (active) { } @else { }\n </ng-template>\n </p-accordion-header>\n\n <p-accordion-content>\n @if (isHovered) {\n @for (item of itemGroup.items.slice(1); track $index) {\n <pho-sidebar-item [item]=\"item\" class=\"group-item\" />\n }\n }\n </p-accordion-content>\n </p-accordion-panel>\n }\n </p-accordion>\n\n <!-- footer list (slim hover state) -->\n @if (footerItem) {\n <div class=\"absolute bottom-0 left-0 flex flex-column w-full\">\n\n <pho-sidebar-item [item]=\"footerItem\" class=\"group-item\" />\n <!-- <ul class=\"flex flex-column gap-3 mb-2 p-0 m-0\">\n @for (item of footerItem; track $index) {\n <pho-sidebar-item [item]=\"item\" class=\"group-item\" />\n }\n </ul> -->\n </div>\n }\n </div>\n\n <!-- bottom actions (ALWAYS stable layout) -->\n <div class=\"absolute bottom-0 left-0 flex justify-content-between align-items-center w-full p-1\">\n <!-- settings -->\n @if (footerItem) {\n <div\n class=\"flex align-items-center\"\n [pTooltip]=\"footerItem.tooltip | translate\"\n [tooltipPosition]=\"'top'\"\n >\n <a\n [routerLink]=\"footerItem?.path\"\n pButton\n icon=\"pi pi-cog\"\n [text]=\"true\"\n size=\"large\"\n class=\"m-1 no-underline\"\n style=\"min-width: fit-content\"\n [attr.data-cy]=\"'navigation-settings-button'\"\n ></a>\n </div>\n } @else {\n <div></div>\n }\n\n <!-- toggle -->\n <p-button\n (onClick)=\"onToggleSidebar()\"\n [text]=\"true\"\n class=\"m-1\"\n [style.transform]=\"isSlim ? 'rotate(180deg)' : ''\"\n [attr.data-cy]=\"'navigation-toggle-button'\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 17 15\"\n fill=\"none\"\n class=\"opacity-70\"\n [style.marginTop.px]=\"2\"\n [style.width.px]=\"14\"\n [style.height.px]=\"12\"\n >\n <path\n d=\"M7.071 0L8.485 1.414L3.828 6.071H13V8.071H3.828L8.485 12.728L7.071 14.142L0 7.071L7.071 0ZM15.001 14.071V0.0710001H17.001V14.071H15.001Z\"\n fill=\"black\"\n />\n </svg>\n </p-button>\n </div>\n </div>\n} @else {\n <div class=\"relative shadow-3 h-full sidebar overflow-hidden pr-1\">\n <div class=\"flex flex-column h-full\" style=\"scroll-padding-bottom: 5rem\">\n <div class=\"ml-1 mr-1\">\n <pho-sidebar-item\n [item]=\"mainItems[0].items[0]\"\n (sliderClick)=\"sliderClick.emit($event)\"\n />\n </div>\n\n <p-accordion [value]=\"[0, 1, 2, 3]\" [multiple]=\"true\">\n @for (itemGroup of mainItems; track $index) {\n <p-accordion-panel [value]=\"$index\">\n <p-accordion-header>\n <div class=\"flex align-items-center\">\n <img class=\"mr-2\" width=\"28\" [src]=\"itemGroup.icon\" alt=\"\" />\n <span class=\"text-primary font-bold\">\n {{ itemGroup.module | translate }}\n </span>\n </div>\n\n <ng-template #toggleicon let-active=\"active\">\n @if (active) {\n <i\n style=\"font-size: 0.7rem; padding-right: 12px\"\n class=\"pi pi-sort-up-fill opacity-70\"\n ></i>\n } @else {\n <i\n style=\"font-size: 0.7rem; padding-right: 12px\"\n class=\"pi pi-sort-down-fill opacity-70\"\n ></i>\n }\n </ng-template>\n </p-accordion-header>\n\n <p-accordion-content>\n @for (item of itemGroup.items.slice(1); track $index) {\n <pho-sidebar-item [item]=\"item\" class=\"group-item\" />\n }\n </p-accordion-content>\n </p-accordion-panel>\n }\n </p-accordion>\n </div>\n\n <!-- bottom actions (ALWAYS stable layout) -->\n <div class=\"absolute bottom-0 left-0 flex justify-content-between align-items-center w-full p-1\">\n <!-- settings -->\n @if (footerItem) {\n <div\n class=\"flex align-items-center\"\n [pTooltip]=\"footerItem?.tooltip | translate\"\n [tooltipPosition]=\"'top'\"\n >\n <a\n [routerLink]=\"footerItem?.path\"\n pButton\n icon=\"pi pi-cog\"\n [text]=\"true\"\n size=\"large\"\n class=\"m-1 no-underline\"\n style=\"min-width: fit-content\"\n [attr.data-cy]=\"'navigation-settings-button'\"\n ></a>\n </div>\n } @else {\n <div></div>\n }\n\n <!-- toggle -->\n <p-button\n (onClick)=\"onToggleSidebar()\"\n [text]=\"true\"\n class=\"m-1\"\n [attr.data-cy]=\"'navigation-toggle-button'\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 17 15\"\n fill=\"none\"\n class=\"arrow-icon\"\n [style.marginTop.px]=\"2\"\n [style.width.px]=\"14\"\n [style.height.px]=\"13\"\n >\n <path\n d=\"M7.071 0L8.485 1.414L3.828 6.071H13V8.071H3.828L8.485 12.728L7.071 14.142L0 7.071L7.071 0ZM15.001 14.071V0.0710001H17.001V14.071H15.001Z\"\n fill=\"black\"\n />\n </svg>\n </p-button>\n </div>\n </div>\n}","import { Injectable, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ActionStateService {\n private _disabledActions = signal<Set<string>>(new Set());\n\n get disabledActions() {\n return this._disabledActions.asReadonly();\n }\n\n disableAction(id: string) {\n const current = new Set(this._disabledActions());\n current.add(id);\n this._disabledActions.set(current);\n }\n\n enableAction(id: string) {\n const current = new Set(this._disabledActions());\n current.delete(id);\n this._disabledActions.set(current);\n }\n\n isDisabled(id: string): boolean {\n return this._disabledActions().has(id);\n }\n}","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule, ButtonProps } from 'primeng/button';\nimport { MenuModule } from 'primeng/menu';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ActionStateService } from './action-state.service';\nimport { Tooltip } from 'primeng/tooltip';\n\nexport enum ActionTypes {\n BASIC = 'BASIC',\n SELECT = 'SELECT',\n}\n\n// Interface for users to augment\nexport interface Actions {\n // Base actions are always available\n}\n\n// Helper type to get all registered action enums\nexport type RegisteredActionEnums = Actions[keyof Actions];\n\n// Helper type to get all possible action values\nexport type AllActionValues =\n RegisteredActionEnums[keyof RegisteredActionEnums];\n\nexport interface Action<T = AllActionValues> {\n id?: string;\n actionId: T;\n label: string;\n icon: string;\n severity: Exclude<ButtonProps['severity'], 'warning'> | 'warn';\n iconPos?: 'right' | 'left';\n type: keyof typeof ActionTypes;\n text?: boolean;\n tooltip?: string;\n key?: string;\n requiredPermission?: string;\n data?: any;\n disabled?: boolean;\n visible?: boolean;\n loading?: boolean;\n class?: string;\n\n items?: {\n key?: string;\n actionId?: T;\n label?: string;\n separator?: boolean;\n icon?: string;\n requiredPermission?: string;\n }[];\n}\n\n@Component({\n selector: 'pho-actions',\n imports: [\n CommonModule,\n ButtonModule,\n MenuModule,\n PopoverModule,\n TranslateModule,\n Tooltip,\n ],\n templateUrl: './actions.component.html',\n styleUrl: './actions.component.css',\n})\nexport class ActionsComponent {\n public actionStateService = inject(ActionStateService);\n\n @Input() actions!: Action[];\n @Output() actionClick = new EventEmitter<Action>();\n\n onActionClick($event: any, action: Action, menuRef?: Popover) {\n $event.stopPropagation();\n if (action.type === ActionTypes.SELECT && menuRef) {\n menuRef.toggle($event);\n } else {\n this.actionClick.emit(action);\n }\n }\n}\n","<div class=\"flex align-items-center gap-2\">\n @for (action of actions; track action.actionId) {\n @switch (action.type) {\n @case (\"BASIC\") {\n <p-button\n [attr.data-cy]=\"'action-button-basic'\"\n *ngIf=\"action.visible !== false\"\n [label]=\"action.label | translate\"\n [icon]=\"action.icon || ''\"\n [styleClass]=\"action.class || ''\"\n [severity]=\"action.severity ?? 'primary'\"\n [disabled]=\"\n action.disabled || actionStateService.isDisabled(action.actionId)\n \"\n [loading]=\"action.loading || false\"\n [pTooltip]=\"action.tooltip ?? '' | translate\"\n [id]=\"action.id\"\n (onClick)=\"onActionClick($event, action)\"\n size=\"small\"\n [iconPos]=\"action.iconPos ?? 'right'\"\n ></p-button>\n }\n @case (\"SELECT\") {\n <p-button\n [attr.data-cy]=\"'action-button-select'\"\n *ngIf=\"action.visible !== false\"\n [label]=\"action.label | translate\"\n [icon]=\"action.icon || ''\"\n [styleClass]=\"action.class || ''\"\n [severity]=\"action.severity ?? 'primary'\"\n [disabled]=\"\n action.disabled || actionStateService.isDisabled(action.actionId)\n \"\n [loading]=\"action.loading || false\"\n [id]=\"action.id\"\n (onClick)=\"onActionClick($event, action, menuRef)\"\n size=\"small\"\n [iconPos]=\"action.iconPos ?? 'right'\"\n ></p-button>\n\n <p-popover #menuRef [dismissable]=\"true\" class=\"actions-popover\">\n <p-menu styleClass=\"border-0\" [model]=\"action.items\">\n <ng-template pTemplate=\"item\" let-item>\n <div\n [attr.data-cy]=\"'action-button-popover-item-' + item?.actionId\"\n (click)=\"onActionClick($event, item)\"\n (keydown.enter)=\"onActionClick($event, item)\"\n (keydown.space)=\"onActionClick($event, item)\"\n pRipple\n tabindex=\"0\"\n role=\"button\"\n class=\"flex items-center p-menu-item-link cursor-pointer\"\n >\n <span [class]=\"item.icon\"></span>\n <span class=\"ml-2\">{{ item.label | translate }}</span>\n </div>\n </ng-template>\n </p-menu>\n </p-popover>\n }\n }\n }\n</div>\n","export enum ActionKinds {\n CREATE = 'CREATE',\n SUBMIT = 'SUBMIT',\n ASSIGN = 'ASSIGN',\n NEW = 'NEW',\n UPDATE = 'UPDATE',\n RELOAD = 'RELOAD',\n CLOSE = 'CLOSE',\n OPEN = 'OPEN',\n EDIT = 'EDIT',\n DELETE = 'DELETE',\n EDIT_TRANSITION = 'EDIT_TRANSITION',\n ADD_TRANSITION = 'ADD_TRANSITION',\n READ = 'READ',\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { DividerModule } from 'primeng/divider';\nimport { TagModule } from 'primeng/tag';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ActionKinds } from '../../utils/actions.utils';\nimport { ActionsComponent } from '../actions/actions.component';\nimport { AfterViewInit, ElementRef, ViewChild } from '@angular/core';\nexport interface cardConfig {\n name: string;\n subName: string;\n description: string;\n actions: any[];\n additional: any[];\n}\n@Component({\n selector: 'phoenix-card',\n imports: [\n CommonModule,\n TooltipModule,\n TranslateModule,\n ButtonModule,\n CardModule,\n ActionsComponent,\n TagModule,\n DividerModule,\n TooltipModule,\n ],\n templateUrl: './card.component.html',\n styleUrl: './card.component.scss',\n})\nexport class CardComponent<T extends Record<string, any>> {\n card = input.required<T>();\n cardEventEmmiter = output<{ data: T; action: string }>();\n actionEnum = ActionKinds;\n cardActions = input<any>();\n\n getObjectValueByKey(obj: any, key: string) {\n return obj[key];\n }\n\n @ViewChild('descEl') descEl!: ElementRef<HTMLElement>;\n showTooltip = false;\n\n ngAfterViewInit(): void {\n const el = this.descEl?.nativeElement;\n this.showTooltip = !!el && el.scrollHeight > el.clientHeight;\n }\n\n onCardClick(event: any, actionType?: string): void {\n const data = {\n id: this.card()['id'],\n };\n\n const finalEvent = {\n ...event,\n data,\n };\n\n if (actionType) {\n finalEvent.actionId = actionType;\n }\n\n this.cardEventEmmiter.emit(finalEvent);\n }\n\n shouldShowTitleTooltip(): boolean {\n const title = this.card()['title'];\n return title && title.length > 40;\n }\n}\n","<p-card\n styleClass=\"cursor-pointer pho-card hover:surface-100\"\n [style]=\"{ width: '25rem', overflow: 'hidden' }\"\n (click)=\"onCardClick(card(), 'NAVIGATE')\"\n [attr.data-cy]=\"'card-navigate-click'\"\n>\n <ng-template #header> </ng-template>\n <ng-template #title>\n <div class=\"flex justify-content-between\" style=\"height: 30px\">\n <span\n class=\"font-semibold text-base card-title\"\n [pTooltip]=\"shouldShowTitleTooltip() ? card()['title'] : undefined\"\n tooltipStyleClass=\"phoenix-card-tooltip\"\n >\n {{ card()[\"title\"] }}</span\n >\n\n <pho-actions\n (actionClick)=\"onCardClick($event)\"\n [actions]=\"cardActions()\"\n ></pho-actions>\n </div>\n </ng-template>\n <ng-template #subtitle> </ng-template>\n <p\n #descEl\n class=\"text-500 text-sm\"\n [style]=\"{ height: '5rem', overflow: 'hidden' }\"\n [innerHTML]=\"card()['description'] || '--'\"\n [pTooltip]=\"showTooltip ? card()['description'] : undefined\"\n tooltipStyleClass=\"phoenix-card-tooltip\"\n ></p>\n <ng-content select=\"[custom]\"></ng-content>\n <ng-template #footer>\n <p-divider />\n <ng-content select=\"[footer]\"></ng-content>\n <div class=\"flex flex-wrap gap-1 justify-content-between\">\n @for (item of card()[\"footerData\"]; track item.key; let i = $index) {\n @if (item?.value) {\n <p-tag\n [icon]=\"item?.icon\"\n [severity]=\"item?.severity || 'info'\"\n [value]=\"item.value\"\n />\n } @else {\n <span>--</span>\n }\n }\n </div>\n </ng-template>\n</p-card>\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CrudService {\n constructor(private http: HttpClient) {}\n\n getSearchData<T>(url: string, phrase: string, size: number): Observable<T[]> {\n const params = new HttpParams().set('phrase', phrase).set('size', size);\n return this.http.get<T[]>(url, { params });\n }\n\n update<T, B>(url: string, body: B): Observable<T> {\n return this.http.put<T>(url, body);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CheckboxChangeEvent, CheckboxModule } from 'primeng/checkbox';\nimport { DividerModule } from 'primeng/divider';\nimport { ImageModule } from 'primeng/image';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { SearchResult } from '../../models/search-result.model';\n\ninterface types {\n title: string;\n checkboxes: any;\n}\n\n@Component({\n selector: 'pho-serach-card',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n TooltipModule,\n DividerModule,\n CheckboxModule,\n FormsModule,\n ImageModule,\n ],\n templateUrl: './search-card.component.html',\n styleUrls: ['./search-card.component.css'],\n})\nexport class SearchCardComponent {\n public translate = inject(TranslateService);\n @Input() searchData: SearchResult[] | any;\n @Input() tab?: number;\n\n @Input() mocekedFilters!: types[];\n\n @Input() checkboxes!: { [key: string]: boolean };\n @Output() onScrollEvent = new EventEmitter<Event>();\n @Output() onSelectLinkEvent = new EventEmitter<SearchResult>();\n @Output() onSelectFilterEvent = new EventEmitter<{\n value: { checked: boolean };\n name: string;\n }>();\n\n onScroll(scrollObj: Event): void {\n this.onScrollEvent.emit(scrollObj);\n }\n\n setLinkUrl(link: SearchResult): void {\n this.onSelectLinkEvent.emit(link);\n }\n\n onClick(event: CheckboxChangeEvent, name: string): void {\n event?.originalEvent?.stopPropagation();\n const data = {\n event: event,\n value: { checked: event.checked },\n name: name,\n };\n this.onSelectFilterEvent.emit(data);\n }\n}\n","<ng-container>\n <div class=\"flex h-20rem\">\n <div\n [attr.data-cy]=\"'navigation-search-bar-tab-card-' + tab\"\n class=\"overflow-y-auto\"\n [style.width.vw]=\"35\"\n (scroll)=\"onScroll($event)\"\n *ngIf=\"searchData?.length > 0; else message\"\n >\n <ng-container *ngFor=\"let link of searchData\">\n <div\n [attr.data-cy]=\"'navigation-search-bar-tab-card-link-' + tab\"\n class=\"flex cursor-pointer mb-3 hover:surface-200 border-round-md\"\n (click)=\"setLinkUrl(link)\"\n >\n <p-image\n class=\"border-round-sm p-2 mt-1\"\n [src]=\"\n 'assets/object_types/pink/full/' + link.type.labelKey + '.svg'\n \"\n height=\"24\"\n width=\"27\"\n ></p-image>\n <div class=\"flex flex-column justify-content-around ml-2\">\n <span\n [pTooltip]=\"link.name\"\n tooltipPosition=\"bottom\"\n class=\"mt-1 font-light text-lg\"\n >\n <small class=\"mr-2 font-light text-lg\"\n >{{ link.title | slice : 0 : 50\n }}{{ link.title.length > 50 ? \"...\" : \"\" }}</small\n >\n\n {{ link.name | slice : 0 : 50\n }}{{ link.name.length > 50 ? \"...\" : \"\" }}\n\n <small class=\"font-light text-base text-400\">{{\n link.type?.labelKeyVal | slice : 0 : 20\n }}</small>\n </span>\n <div class=\"flex\">\n <span class=\"mb-1 text-sm\" [pTooltip]=\"link.entity.name\"\n >{{ \"LABELS.ENTITY\" | translate }}:&nbsp;{{\n link.entity.name | slice : 0 : 50\n }}{{ link.entity.name.length > 50 ? \"...\" : \"\" }}</span\n >\n <span\n [pTooltip]=\"link.asset.name\"\n *ngIf=\"link?.asset?.name\"\n class=\"ml-2 mb-1 text-sm\"\n >{{ \"LABELS.ASSET\" | translate }}:&nbsp;{{\n link.asset.name | slice : 0 : 50\n }}{{ link.asset.name.length > 50 ? \"...\" : \"\" }}</span\n >\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <ng-container\n *ngIf=\"mocekedFilters[0].checkboxes?.length > 0 && checkboxes\"\n >\n <p-divider layout=\"vertical\"></p-divider>\n <div\n class=\"flex flex-column overflow-y-auto h-40rem pl-3 justify-content-start\"\n >\n <ng-container *ngFor=\"let item of mocekedFilters\">\n <span class=\"mt-2 mb-3 font-semibold text-sm justify-content-start\"\n >{{ item.title | translate }}\n </span>\n <div class=\"h-25rem flex flex-column justify-content-start\">\n <ng-container *ngFor=\"let checkbox of item.checkboxes\">\n <div class=\"field-checkbox\" *ngIf=\"checkbox?.name\">\n <p-checkbox\n [attr.data-cy]=\"\n 'navigation-search-filter-checkbox-' + checkbox?.labelKey\n \"\n [(ngModel)]=\"checkboxes[checkbox?.labelKey]\"\n [binary]=\"true\"\n [inputId]=\"checkbox?.name\"\n (onChange)=\"onClick($event, checkbox?.labelKey)\"\n ></p-checkbox>\n\n <label class=\"text-sm\" [for]=\"checkbox?.name\">{{\n checkbox.name | translate\n }}</label>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n</ng-container>\n<ng-template #message>\n <div class=\"overflow-y-auto\" style=\"width: 35vw\">\n {{ \"NO_RESULTS_FOUND\" | translate }}\n </div>\n</ng-template>\n","export enum ComplItems {\n COMPL_APPLIED_MODULES = 'COMPL_APPLIED_MODULES',\n COMPL_APPLIED_MEASURE = 'COMPL_APPLIED_MEASURE',\n COMPL_APPLIED_REQUIREMENT = 'COMPL_APPLIED_REQUIREMENT',\n COMPL_APPLIED_THREAT = 'COMPL_APPLIED_THREAT',\n COMPL_APPLIED_CONTROL = 'COMPL_APPLIED_CONTROL',\n COMPL_SCOPE = 'COMPL_SCOPE',\n COMPL_TOT_BUILDING = 'COMPL_TOT_BUILDING',\n COMPL_TOT_DOMAIN = 'COMPL_TOT_DOMAIN',\n COMPL_TOT_INFORMATION = 'COMPL_TOT_INFORMATION',\n COMPL_TOT_BUSINESS = 'COMPL_TOT_BUSINESS_PROCESS',\n COMPL_TOT_APPLICATION = 'COMPL_TOT_APPLICATION',\n COMPL_TOT_ITSYSETEM = 'COMPL_TOT_IT_SYSTEM',\n COMPL_TOT_NETWORK = 'COMPL_TOT_NETWORK',\n COMPL_TOT_EMPLOYEE = 'COMPL_TOT_EMPLOYEE',\n COMPL_TOT_INFRASTRUCTURE = 'COMPL_TOT_INFRASTRUCTURE',\n COMPL_TOT_OUTSORCING = 'COMPL_TOT_OUTSORCING',\n COMPL_TOT_PHYSICAL_FACILITY = 'COMPL_TOT_PHYSICAL_FACILITY',\n COMPL_TOT_ROOM = 'COMPL_TOT_ROOM',\n COMPL_TOGS = 'COMPL_TOGS',\n RISK = 'RISK',\n}\n","export function buildAssetDetailsUrl(\n baseUrl: string,\n assetGroupLabelKey: string,\n uuid: string\n): string {\n const groupSeg = ASSET_GROUP_TO_SEGMENT[assetGroupLabelKey];\n const typeSeg = ASSET_TYPE_TO_SEGMENT[assetGroupLabelKey];\n\n return `${baseUrl}/assets/assets/${groupSeg}/${typeSeg}/${uuid}/details`;\n}\n\nexport const ASSET_GROUP_TO_SEGMENT: Record<string, string> = {\n // IT\n GRP_IT_SYSTEM: 'it-assets',\n GRP_STORAGE_SYSTEM: 'it-assets',\n GRP_VIRTUALIZATION: 'it-assets',\n GRP_NETWORK: 'it-assets',\n GRP_NETWORK_DEVICE: 'it-assets',\n GRP_SOFTWARE: 'it-assets',\n GRP_VOLUME: 'it-assets',\n\n // Facilities\n GRP_LOCATION: 'facilities',\n GRP_INFRASTRUCTURE: 'facilities',\n GRP_ACCESS_CONTROL: 'facilities',\n\n // Business context\n GRP_BUSINESS_PROCESSES: 'business-context',\n GRP_ORGANIZATION: 'business-context',\n GRP_SUPPORT: 'business-context',\n};\n\nexport const ASSET_TYPE_TO_SEGMENT: Record<string, string> = {\n // --- IT ASSETS ---\n GRP_IT_SYSTEM: 'it-system',\n GRP_STORAGE_SYSTEM: 'storage-system',\n GRP_VIRTUALIZATION: 'virtualization',\n GRP_NETWORK: 'network',\n GRP_NETWORK_DEVICE: 'network-device',\n GRP_SOFTWARE: 'software',\n GRP_VOLUME: 'volume',\n\n // --- FACILITIES ---\n GRP_LOCATION: 'location',\n GRP_INFRASTRUCTURE: 'infrastructure',\n GRP_ACCESS_CONTROL: 'access-control',\n\n // --- BUSINESS CONTEXT ---\n GRP_ORGANIZATION: 'organization',\n GRP_BUSINESS_PROCESSES: 'business-processes',\n GRP_SUPPORT: 'support',\n};\n","import {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { Component, ElementRef, ViewChild, inject, input } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { InputTextModule } from 'primeng/inputtext';\nimport { PopoverModule } from 'primeng/popover';\nimport { TabsModule } from 'primeng/tabs';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { MessageModule } from 'primeng/message';\n\nimport { Subject, Subscription, debounceTime, switchMap, catchError, of } from 'rxjs';\n\nimport { CrudService } from '../../services/crud.service';\nimport { SearchCardComponent } from '../search-card/search-card.component';\nimport { SearchResult } from '../../models/search-result.model';\nimport { SearchTabs } from '../../models/search.model';\nimport { ComplItems } from '../../utils/compl-types.utils';\nimport { buildAssetDetailsUrl } from '../../utils/assm-url-resolver.utils';\n\ninterface TypesFilter {\n title: string;\n checkboxes: any;\n}\n\n@Component({\n selector: 'pho-search-bar',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n\n InputTextModule,\n IconFieldModule,\n InputIconModule,\n\n PopoverModule,\n TabsModule,\n MessageModule,\n\n SearchCardComponent,\n ],\n styleUrls: ['./search-bar.component.css'],\n templateUrl: './search-bar.component.html',\n animations: [\n trigger('openClose', [\n state(\n 'open',\n style({\n width: '50vw',\n opacity: 1,\n })\n ),\n state(\n 'closed',\n style({\n width: '13vw',\n opacity: 0.8,\n })\n ),\n transition('* <=> *', [animate('0.1s ease-in-out')]),\n ]),\n ],\n})\nexport class SearchBarComponent {\n @ViewChild('op') op!: any; // p-popover instance\n @ViewChild('elm', { static: true }) elm!: ElementRef;\n\n private crudService = inject(CrudService);\n\n tabs = input<SearchTabs[]>();\n\n isOpen = false;\n\n valueChanges = new Subject<Event>();\n inputEvent!: Event;\n\n clonedData?: SearchResult[];\n searchData?: SearchResult[];\n\n size = 10;\n tabIndex = 0;\n trigg = true;\n\n inputText?: string;\n textValue!: string;\n\n checkboxes: { [key: string]: boolean } = {};\n\n valueSub$!: Subscription;\n reloadSubscription$?: Subscription;\n\n mocekedFilters: TypesFilter[] = [\n { title: 'LABELS.FILTER_BY_TYPE', checkboxes: [] },\n ];\n\n constructor(public translate: TranslateService) {\n this.valueSub$ = this.valueChanges\n .pipe(\n debounceTime(200),\n switchMap((ev) => {\n this.inputEvent = ev;\n const target = ev?.target as HTMLInputElement;\n\n this.size = 10;\n this.inputText = target?.value;\n\n if (!target?.value) return of(null);\n\n this.textValue = target.value;\n\n const url = this.tabs()?.[this.tabIndex]?.apiUrl;\n if (!url) return of(null);\n\n return this.crudService\n .getSearchData<SearchResult>(url, target.value, this.size)\n .pipe(\n catchError((err) => {\n console.error('Error fetching data', err);\n return of(null);\n })\n );\n })\n )\n .subscribe((res) => {\n if (Array.isArray(res)) {\n this.searchData = [...res];\n this.clonedData = [...res];\n this.populateFilters(res);\n this.trigg = true;\n this.filterData();\n }\n });\n }\n\n expand(): void {\n this.isOpen = true;\n }\n\n onParentClick(event: Event): void {\n setTimeout(() => {\n this.op?.show(event, this.elm.nativeElement);\n }, 120);\n }\n\n onTabClick(id: number): void {\n this.searchData = [];\n this.clonedData = [];\n this.filterData();\n this.tabIndex = id;\n\n if (this.inputEvent?.target) {\n this.valueChanges.next(this.inputEvent);\n }\n }\n\n onScroll(scrollObj: Event): void {\n const el = scrollObj.target as HTMLElement;\n if (!el) return;\n\n if (el.offsetHeight + el.scrollTop >= el.scrollHeight) {\n if (this.size <= 100) {\n this.size += 10;\n this.valueChanges.next(this.inputEvent);\n }\n }\n }\n\n populateFilters(data?: SearchResult[]): void {\n this.checkboxes = {};\n if (!data) return;\n\n data.forEach((item) => {\n const key = item?.type?.labelKey;\n if (key) this.checkboxes[key] = false;\n });\n }\n\n onClick(data: { value: { checked: boolean }; name: string }): void {\n this.checkboxes[data.name] = data.value.checked;\n this.filterData(false);\n }\n\n filterData(makeNewFilters: boolean = true): void {\n let selected: string[] = [];\n\n for (const key in this.checkboxes) {\n if (this.checkboxes[key]) selected.push(key);\n\n if (this.checkboxes[ComplItems.COMPL_TOGS]) {\n selected = selected.concat([\n ComplItems.COMPL_TOT_BUILDING,\n ComplItems.COMPL_TOT_DOMAIN,\n ComplItems.COMPL_TOT_INFORMATION,\n ComplItems.COMPL_TOT_BUSINESS,\n ComplItems.COMPL_TOT_APPLICATION,\n ComplItems.COMPL_TOT_ITSYSETEM,\n ComplItems.COMPL_TOT_NETWORK,\n ComplItems.COMPL_TOT_EMPLOYEE,\n ComplItems.COMPL_TOT_INFRASTRUCTURE,\n ComplItems.COMPL_TOT_OUTSORCING,\n ComplItems.COMPL_TOT_PHYSICAL_FACILITY,\n ComplItems.COMPL_TOT_ROOM,\n ]);\n }\n }\n\n if (selected.length === 0) {\n this.searchData = this.clonedData;\n } else {\n this.searchData = this.clonedData?.filter((item: any) =>\n selected.includes(item?.type?.labelKey)\n );\n }\n\n if (makeNewFilters) this.setCheckBoxes();\n }\n\n setCheckBoxes(): void {\n if (!this.trigg) return;\n\n this.mocekedFilters[0].checkboxes = [];\n const seen: string[] = [];\n\n this.searchData?.forEach((item: any) => {\n const key = item?.type?.labelKey;\n if (!key || seen.includes(key)) return;\n\n this.mocekedFilters[0].checkboxes.push({\n name: item.type?.labelKeyVal,\n labelKey: key,\n value: false,\n });\n\n seen.push(key);\n });\n }\n\n setLinkUrl(data?: any): void {\n const baseUrl = this.tabs()?.[this.tabIndex]?.linkUrl;\n if (!baseUrl) return;\n\n if (this.tabIndex !== 1) {\n if (data?.url) window.open(baseUrl + data.url);\n return;\n }\n\n if (!data?.scopes) {\n const url = `scoping/scopes/scope/${data.uuid}/details`;\n window.open(baseUrl + url);\n } else {\n window.open(buildAssetDetailsUrl(baseUrl, data.type.groupLabelKey!, data.uuid));\n }\n }\n\n ngOnDestroy(): void {\n this.valueSub$?.unsubscribe();\n this.reloadSubscription$?.unsubscribe();\n }\n}","<div\n (click)=\"onParentClick($event)\"\n class=\"p-input-icon-left ml-1\"\n #elm\n [attr.data-cy]=\"'navigation-search-bar'\"\n>\n <p-iconfield>\n <!-- styleClass deprecated -> class -->\n <p-inputicon class=\"pi pi-search\"></p-inputicon>\n\n <input\n [attr.data-cy]=\"'navigation-search-bar-input'\"\n [@openClose]=\"isOpen ? 'open' : 'closed'\"\n type=\"text\"\n pInputText\n placeholder=\"{{ 'SEARCH_PLACEHOLDERS.GLOBAL_SEARCH' | translate }}\"\n (input)=\"valueChanges.next($event)\"\n (focus)=\"onParentClick($event); expand()\"\n />\n </p-iconfield>\n</div>\n\n<p-popover\n [dismissable]=\"true\"\n [showTransitionOptions]=\"'.2s ease-out'\"\n [autoZIndex]=\"true\"\n #op\n [style]=\"{ width: '50vw', paddingLeft: '0' }\"\n styleClass=\"global-search\"\n (onHide)=\"isOpen = false\"\n>\n <div\n *ngIf=\"!inputText\"\n class=\"flex align-items-start gap-2 p-3 border-1 border-blue-300 surface-50 text-blue-700 border-round w-full\"\n >\n <i class=\"pi pi-info-circle mt-1 text-blue-500\"></i>\n <span class=\"text-sm\">{{ 'MESSAGES.START_TYPING' | translate }}</span>\n </div>\n\n <ng-template pTemplate=\"content\">\n @if (inputText) {\n <p-tabs [value]=\"tabIndex\">\n <p-tablist>\n @for (tab of tabs(); track tab.id) {\n <p-tab\n [value]=\"tab.id\"\n (click)=\"onTabClick(tab.id)\"\n [attr.data-cy]=\"'navigation-search-bar-tab-' + tab.id\"\n >\n <span>{{ tab.header }}</span>\n </p-tab>\n }\n </p-tablist>\n\n <p-tabpanels>\n @for (tab of tabs(); track tab.id) {\n <p-tabpanel [value]=\"tab.id\">\n <pho-serach-card\n [tab]=\"tab.id\"\n [mocekedFilters]=\"mocekedFilters\"\n [searchData]=\"searchData\"\n [checkboxes]=\"checkboxes\"\n (onScrollEvent)=\"onScroll($event)\"\n (onSelectLinkEvent)=\"setLinkUrl($event)\"\n (onSelectFilterEvent)=\"onClick($event)\"\n ></pho-serach-card>\n </p-tabpanel>\n }\n </p-tabpanels>\n </p-tabs>\n }\n </ng-template>\n</p-popover>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Avatar } from 'primeng/avatar';\nimport { Popover } from 'primeng/popover';\nimport { User } from '../../models/shell-config.model';\nimport { DividerModule } from 'primeng/divider';\n\n@Component({\n selector: 'pho-user',\n imports: [Avatar, Popover, TranslateModule, DividerModule],\n template: `\n <a\n data-cy=\"user-panel-togg-button\"\n (click)=\"op.toggle($event)\"\n class=\"layout-topbar-action flex flex-row justify-content-center align-items-center px-2 rounded-circle\"\n pRipple\n >\n @if(user.bindImageUrl){\n <div\n [style.background-image]=\"user.bindImageUrl\"\n class=\"cover-image\"\n ></div>\n }@else {\n\n <p-avatar\n [style]=\"{ 'background-color': '#9c27b0', color: '#ffffff' }\"\n [label]=\"\n (user.firstname?.charAt(0)?.toUpperCase() || '') +\n (user.lastname?.charAt(0)?.toUpperCase() || '')\n \"\n shape=\"circle\"\n />\n }\n </a>\n <p-popover #op>\n @if(user){\n <div class=\"p-2\">\n <div class=\"flex align-items-top\">\n @if(user.bindImageUrl){\n <div\n [style.background-image]=\"user.bindImageUrl\"\n class=\"profile-image\"\n ></div>\n }@else {\n <p-avatar\n [style]=\"{ 'background-color': '#9c27b0', color: '#ffffff' }\"\n [label]=\"\n (user.firstname?.charAt(0)?.toUpperCase() || '') +\n (user.lastname?.charAt(0)?.toUpperCase() || '')\n \"\n shape=\"circle\"\n />\n }\n\n <div class=\"text-primary cursor-pointer ml-2\">\n <div class=\"text-xl\">{{ user.firstname }} {{ user.lastname }}</div>\n <div class=\"font-bold text-500 text-m\">{{ user.username }}</div>\n <div class=\"text-m\">{{ user.email }}</div>\n </div>\n </div>\n </div>\n <p-divider class=\"p-0 m-0\" />\n <div>\n <a\n class=\"flex flex-row align-items-center cursor-pointer ml-2 mb-2 mt-2\"\n data-cy=\"user-panel-settings-button\"\n (click)=\"actionEmmiter.emit('SETTINGS')\"\n pRipple\n >\n <i class=\"pi pi-user-edit p-2\" style=\"font-size: 1rem\"></i>\n <span>{{ 'ACTION.USER_PROFILE' | translate }}</span>\n </a>\n\n <p-divider class=\"p-0 m-0\" />\n <a\n style=\"color: red\"\n class=\"flex flex-row align-items-center cursor-pointer ml-2 mb-2 mt-2\"\n data-cy=\"user-panel-logout-button\"\n (click)=\"actionEmmiter.emit('LOGOUT')\"\n pRipple\n >\n <i class=\"pi pi-power-off p-2 \" style=\"font-size: 1rem\"></i>\n <span>{{ 'ACTION.LOGOUT' | translate }}</span>\n </a>\n </div>\n }\n <!-- <div class=\"flex gap-2 w-20rem\">\n @if(user.bindImageUrl){\n <div\n [style.background-image]=\"user.bindImageUrl\"\n class=\"profile-image\"\n ></div>\n }\n <div class=\"flex gap-2 flex-column\">\n <div class=\"text-sm mt-auto\">{{ user.username }}</div>\n <div class=\"text-sm\">{{ user.email }}</div>\n </div>\n </div> -->\n </p-popover>\n `,\n styles: [\n `\n .profile-image {\n width: 50px;\n height: 50px;\n border-radius: 50%;\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n cursor: pointer;\n }\n .cover-image {\n width: 35px;\n height: 35px;\n border-radius: 50%;\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n cursor: pointer;\n }\n `,\n ],\n})\nexport class UserComponent {\n @Input() user!: User;\n @Output() actionEmmiter = new EventEmitter<string>();\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n inject,\n input,\n Input,\n OnInit,\n output,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { Drawer, DrawerModule } from 'primeng/drawer';\nimport { SearchBarComponent } from '../search-bar/search-bar.component';\nimport { UserComponent } from '../user/user.component';\nimport { RouterModule } from '@angular/router';\nimport { DividerModule } from 'primeng/divider';\nimport { ButtonModule } from 'primeng/button';\nimport { User } from '../../models/shell-config.model';\nimport { SearchResult } from '../../models/search-result.model';\nimport { SearchTabs } from '../../models/search.model';\nimport { Ripple } from 'primeng/ripple';\nimport { ImageModule } from 'primeng/image';\nimport { TagModule } from 'primeng/tag';\nimport { PopoverModule } from 'primeng/popover';\nimport { MessageService } from 'primeng/api';\nimport { ToastModule } from 'primeng/toast';\nimport { TooltipModule } from 'primeng/tooltip';\n\nexport interface TopbarModuleItem {\n label: string;\n fullName?: string; // Opcioni, jer ne postoji kod svih modula\n icon?: string;\n url?: string;\n routerLink?: string[];\n disabled?: boolean;\n}\n\nexport interface TopbarModuleGroup {\n label: string;\n layout: 'full' | 'grid';\n showIconBackground: boolean;\n items: TopbarModuleItem[];\n}\n\nexport interface TopbarFooterConfig {\n companyName: string;\n companyUrl: string;\n guideLabel: string;\n guideUrl: string;\n copyrightText: string;\n}\n\nexport interface UrlConfig {\n url: string | null;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'pho-topbar',\n standalone: true,\n imports: [\n CommonModule,\n SearchBarComponent,\n UserComponent,\n TranslateModule,\n RouterModule,\n DrawerModule,\n Drawer,\n DividerModule,\n DividerModule,\n ButtonModule,\n ImageModule,\n TagModule,\n PopoverModule,\n ToastModule,\n TooltipModule,\n ],\n templateUrl: './topbar.component.html',\n encapsulation: ViewEncapsulation.None,\n providers: [MessageService],\n})\nexport class TopbarComponent {\n sidebarConfig = { visible: false, type: '' };\n currentYear: number = new Date().getFullYear();\n isSidebarVisible: boolean = false;\n\n @Input() homeUrl: string = '/';\n @Input() user!: User;\n @Input() shortModuleName?: string = 'FLEX';\n @Input() hidelogo?: boolean = false;\n @Input() topbarModulesMenu: any[] = [];\n @Input() darkModeSelector: any;\n @Input() urlConfig?: UrlConfig;\n @Input() footerConfig: TopbarFooterConfig = {\n companyName: 'fuentis',\n companyUrl: 'https://fuentis.com/',\n guideLabel: 'Guide',\n guideUrl: 'https://servicehub.fuentis.com/',\n copyrightText:\n '© ' + new Date().getFullYear() + ' fuentis. All Rights Reserved.',\n };\n\n @Output() onDarkModeSelect = new EventEmitter<void>();\n @Output() onUserPopoverAction = new EventEmitter<string>();\n closeCallback(event: any) {}\n searchConfig = input<SearchTabs[]>();\n openSidebarPanel() {\n this.isSidebarVisible = true;\n }\n private messageService = inject(MessageService);\n private translateService = inject(TranslateService);\n\n /** ✅ Zatvara sidebar */\n closeSidebar() {\n this.isSidebarVisible = false;\n }\n\n ngOnInit() {\n const items = this.topbarModulesMenu[0]?.items || [];\n }\n\n onDarkModeSelectEmit() {\n this.onDarkModeSelect.emit();\n }\n\n goToHome() {\n if (this.homeUrl) {\n window.location.href = this.homeUrl;\n }\n }\n\n goToTicketCenter() {\n window.open(\n 'https://fuentis.atlassian.net/servicedesk/customer/portal/1',\n '_blank'\n );\n }\n\n copyToClipboard($event: any, linkUrl: any) {\n $event.stopPropagation();\n $event.preventDefault();\n\n if (!linkUrl) {\n console.warn('No linkUrl for extIncidentConfig');\n return;\n }\n this.isSidebarVisible = false;\n navigator.clipboard.writeText(linkUrl);\n\n this.messageService.add({\n severity: 'success',\n summary: this.translateService.instant('TOASTER.SUCCESS'),\n detail: this.translateService.instant('TOASTER.LINK_COPIED'),\n life: 3000,\n });\n }\n\n get bindImageUrl(): string {\n return this.user?.imageUrl\n ? `url(${this.user.imageUrl})`\n : `url('assets/default-user.png')`;\n }\n}\n","<div\n class=\"h-full px-2 justify-content-between w-full flex align-items-center shadow-1 topbar\"\n>\n <!-- Title -->\n <div class=\"flex align-items-center justify-content-center mb-2 ml-2\">\n @if (!hidelogo) {\n <img class=\"h-2rem\" src=\"assets/logo_rose.png\" alt=\"fuentis_logo_white\" />\n }\n <!-- <p-tag\n [style]=\"{\n marginLeft: '5px',\n marginBottom: '8px',\n padding: '2px 6px',\n fontSize: '9px',\n border: '1px solid var(--text-color)',\n background: 'transparent',\n color: 'var(--text-color)'\n }\"\n severity=\"info\"\n [value]=\"shortModuleName\"\n /> -->\n </div>\n <!-- children -->\n <ng-content></ng-content>\n\n <div class=\"flex align-items-center gap-2\">\n <!-- Search Bar -->\n <pho-search-bar\n [pTooltip]=\"'TOPBAR_FUNCTIONS.SEARCH' | translate\"\n tooltipPosition=\"bottom\"\n showDelay=\"500\"\n [tabs]=\"searchConfig()\"\n ></pho-search-bar>\n\n <!-- ToggleDarkmode -->\n <p-button\n [pTooltip]=\"'TOPBAR_FUNCTIONS.THEME_SWITCH' | translate\"\n tooltipPosition=\"bottom\"\n showDelay=\"500\"\n data-cy=\"theme-switch-button\"\n (onClick)=\"onDarkModeSelectEmit()\"\n [icon]=\"darkModeSelector.mode === 'dark' ? 'pi pi-sun' : 'pi pi-moon'\"\n variant=\"outlined\"\n />\n\n <p-button\n data-cy=\"side-panel-togg-button\"\n data-cy=\"side-panel-togg-button\"\n (onClick)=\"op.toggle($event)\"\n icon=\"pi pi-th-large\"\n variant=\"outlined\"\n [pTooltip]=\"'TOPBAR_FUNCTIONS.APPLICATION_MENU' | translate\"\n tooltipPosition=\"bottom\"\n showDelay=\"500\"\n />\n <!-- Side Panel (Opens Sidebar) -->\n <p-button\n data-cy=\"side-panel-togg-button\"\n data-cy=\"side-panel-togg-button\"\n (onClick)=\"openSidebarPanel()\"\n icon=\"pi pi-question-circle\"\n variant=\"outlined\"\n [pTooltip]=\"'TOPBAR_FUNCTIONS.HELP_CENTER' | translate\"\n tooltipPosition=\"bottom\"\n showDelay=\"500\"\n />\n\n <!-- User Icon -->\n <pho-user\n [user]=\"user\"\n (actionEmmiter)=\"onUserPopoverAction.emit($event)\"\n [pTooltip]=\"'TOPBAR_FUNCTIONS.USER_MENU' | translate\"\n tooltipPosition=\"bottom\"\n showDelay=\"500\"\n />\n </div>\n</div>\n\n<!-- Sidebar Menu -->\n<p-drawer\n styleClass=\"w-25rem\"\n position=\"right\"\n [(visible)]=\"isSidebarVisible\"\n [closable]=\"false\"\n>\n <ng-template #header>\n <div class=\"flex align-items-center justify-content-between w-full\">\n <div class=\"flex\">\n <span class=\"font-bold text-xl\">\n {{ \"ACTION.HELP_CENTER\" | translate }}\n </span>\n </div>\n\n <p-button\n (onClick)=\"isSidebarVisible = false\"\n icon=\"pi pi-times\"\n [rounded]=\"true\"\n [text]=\"true\"\n />\n </div>\n </ng-template>\n <div class=\"p-1\">\n <div class=\"flex flex-wrap gap-4\">\n <!-- first -->\n <div\n class=\"w-22rem border-round-md border-300 surface-100 pho-reverse p-3\"\n >\n <div\n style=\"width: 30px; height: 30px\"\n class=\"m-2 border-round-md bg-primary font-bold flex align-items-center justify-content-center\"\n >\n <i class=\"pi pi-ticket text-white\" style=\"font-size: 1.2rem\"></i>\n </div>\n <div>\n <div class=\"text-xl font-semibold mb-1\">\n {{ \"HELP_CENTER.CREATE_TICKET\" | translate }}\n </div>\n <div class=\"text-sm mb-2\">\n {{ \"HELP_CENTER.CREATE_TICKET_DESCRIPTION\" | translate }}\n </div>\n </div>\n <div class=\"w-full\">\n <p-button\n (onClick)=\"goToTicketCenter()\"\n [label]=\"'HELP_CENTER.CREATE_TICKET_BUTTON' | translate\"\n variant=\"outlined\"\n size=\"small\"\n />\n </div>\n </div>\n\n <!-- second -->\n <div\n class=\"w-22rem border-round-md border-300 surface-100 pho-reverse p-3\"\n >\n <div\n style=\"width: 30px; height: 30px\"\n class=\"m-2 border-round-md bg-primary font-bold flex align-items-center justify-content-center\"\n >\n <i class=\"pi pi-headphones text-white\" style=\"font-size: 1.2rem\"></i>\n </div>\n <div>\n <div class=\"text-xl font-semibold mb-1\">\n {{ \"HELP_CENTER.CALL_US\" | translate }}\n </div>\n <div class=\"text-sm mb-2\">\n {{ \"HELP_CENTER.CALL_US_DESCRIPTION\" | translate }}\n </div>\n </div>\n <div class=\"w-full\">\n {{ \"HELP_CENTER.PHONE_NUMBER\" | translate }}\n </div>\n </div>\n\n <!-- third -->\n <div\n class=\"w-22rem border-round-md border-300 surface-100 pho-reverse p-3\"\n >\n <div\n style=\"width: 30px; height: 30px\"\n class=\"m-2 border-round-md bg-primary font-bold flex align-items-center justify-content-center\"\n >\n <i class=\"pi pi-envelope text-white\" style=\"font-size: 1.2rem\"></i>\n </div>\n <div>\n <div class=\"text-xl font-semibold mb-1\">\n {{ \"HELP_CENTER.SEND_EMAIL\" | translate }}\n </div>\n <div class=\"text-sm mb-2\">\n {{ \"HELP_CENTER.SEND_EMAIL_DESCRIPTION\" | translate }}\n </div>\n </div>\n <div class=\"w-full\">\n <a href=\"mailto:support&#64;fuentis.com\">\n {{ \"HELP_CENTER.SUPPORT_EMAIL\" | translate }}\n </a>\n </div>\n </div>\n\n <div\n class=\"w-22rem border-round-md border-300 surface-100 pho-reverse p-3\"\n [ngClass]=\"{ 'opacity-30 pointer-events-none': urlConfig?.disabled }\"\n >\n <div\n style=\"width: 30px; height: 30px\"\n class=\"m-2 border-round-md bg-primary font-bold flex align-items-center justify-content-center\"\n >\n <i class=\"pi pi-file text-white\" style=\"font-size: 1.2rem\"></i>\n </div>\n\n <div>\n <div class=\"text-xl font-semibold mb-1\">\n {{ \"HELP_CENTER.REPORT_INCIDENT_TITLE\" | translate }}\n </div>\n <div class=\"text-sm mb-2\">\n {{ \"HELP_CENTER.REPORT_INCIDENT_DESCRIPTION\" | translate }}\n </div>\n </div>\n\n <div class=\"w-full flex align-items-center gap-2\">\n <a\n class=\"no-underline\"\n [href]=\"urlConfig?.url || '#'\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <p-button\n [label]=\"'HELP_CENTER.REPORT_INCIDENT_ACTION' | translate\"\n variant=\"outlined\"\n size=\"small\"\n icon=\"pi pi-copy\"\n (onClick)=\"copyToClipboard($event, urlConfig?.url)\"\n [disabled]=\"urlConfig?.disabled || !urlConfig?.url\"\n />\n </a>\n </div>\n </div>\n </div>\n <!-- External Incident Report card -->\n\n <div class=\"mt-5 p-3\">\n <h4 class=\"\">\n {{ \"ACTION.BROWSE\" | translate }} <br />\n <a\n class=\"\"\n [href]=\"footerConfig.guideUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"flex align-items-center\">\n {{ \"ACTION.KNOWLEDGE_BASE\" | translate }}\n <span style=\"text-decoration: none\">\n <i\n style=\"font-size: 15px\"\n class=\"pi pi-graduation-cap p-2 no-underline\"\n ></i>\n </span>\n\n <!-- <i\n style=\"font-size: 11px\"\n class=\"pi pi-external-link p-2 no-underline\"\n ></i> -->\n </span>\n </a>\n </h4>\n </div>\n </div>\n <ng-template #footer>\n <div class=\"text-xs text-center text-600\">\n {{ \"HELP_CENTER.SUITE_DESCRIPTION\" | translate }}\n </div>\n </ng-template>\n</p-drawer>\n\n<!-- <p-popover #op>\n <div class=\"w-22rem\">\n <ng-container *ngFor=\"let moduleGroup of topbarModulesMenu\">\n <div class=\"grid\">\n <ng-container *ngIf=\"moduleGroup.layout === 'grid'\">\n <div\n *ngFor=\"let module of moduleGroup.items\"\n class=\"col-4 p-3 hover:surface-100 cursor-pointer p-0 m-0 sidebaritem\"\n [ngClass]=\"{ 'opacity-30 pointer-events-none': module?.disabled }\"\n >\n <a\n class=\"text-primary flex flex-column align-items-center gap-2\"\n [href]=\"module.url || '#'\"\n style=\"text-decoration: none; cursor: pointer\"\n [attr.data-cy]=\"'side-panel-menu-item-' + module.label\"\n >\n <div\n class=\"w-4rem border-round-sm flex justify-content-center align-items-center\"\n [style.backgroundColor]=\"\n moduleGroup.showIconBackground\n ? module.disabled\n ? '#ccc'\n : '#e74360'\n : 'transparent'\n \"\n >\n <img *ngIf=\"module.icon\" [src]=\"module.icon\" class=\"w-2rem\" />\n </div>\n <span class=\"text-sm text-center\">{{\n module.label | translate\n }}</span>\n </a>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n</p-popover> -->\n<p-toast></p-toast>\n\n<!-- wait for restructure of the topbar modules menu -->\n<p-popover #op>\n <div class=\"w-25rem\">\n <ng-container *ngFor=\"let item of topbarModulesMenu\">\n <div\n class=\"p-0 m-0 hover:surface-100 cursor-pointer p-2\"\n [ngClass]=\"{ 'opacity-30 pointer-events-none': item?.disabled }\"\n >\n <a\n class=\"text-primary flex align-items-center\"\n [href]=\"item.url || '#'\"\n style=\"text-decoration: none; cursor: pointer\"\n [attr.data-cy]=\"'side-panel-menu-item-' + item.title\"\n >\n <div\n class=\"w-3rem h-3rem border-round-md flex justify-content-center align-items-center border-200 border-1\"\n style=\"margin-right: 10px\"\n >\n <img *ngIf=\"item.icon\" [src]=\"item.icon\" class=\"w-2rem\" />\n </div>\n <div class=\"\">\n <div class=\"font-semibold\">\n {{ item.title | translate }}\n </div>\n <div class=\"text-sm max-w-17rem text-600\">\n {{ item.description | translate }}\n </div>\n </div>\n </a>\n </div>\n </ng-container>\n </div>\n</p-popover>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Output } from '@angular/core';\n\n@Component({\n selector: 'phoenix-quick-pick',\n imports: [CommonModule],\n templateUrl: './quick-pick.component.html',\n styleUrl: './quick-pick.component.css',\n})\nexport class QuickPickComponent {\n @Output() onBack = new EventEmitter<void>();\n @Output() onQuickPick = new EventEmitter<void>();\n @Output() onForward = new EventEmitter<void>();\n}\n","<div class=\"flex align-items-center gap-2\">\n <i\n class=\"pi pi-chevron-left text-blue-500 cursor-pointer hover:text-blue-700 text-sm\"\n data-cy=\"quic-pick-back-button\"\n (click)=\"onBack.emit()\"\n role=\"button\"\n tabindex=\"0\"\n ></i>\n <i\n class=\"pi pi-table text-blue-500 cursor-pointer hover:text-blue-700 text-sm\"\n data-cy=\"quic-pick-button\"\n (click)=\"onQuickPick.emit()\"\n role=\"button\"\n tabindex=\"0\"\n ></i>\n <i\n class=\"pi pi-chevron-right text-blue-500 cursor-pointer hover:text-blue-700 text-sm\"\n data-cy=\"quic-pick-forward-button\"\n (click)=\"onForward.emit()\"\n role=\"button\"\n tabindex=\"0\"\n ></i>\n</div>\n","import {\n Component,\n Input,\n ChangeDetectionStrategy,\n EventEmitter,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TieredMenuModule } from 'primeng/tieredmenu';\nimport { QuickPickComponent } from '../quick-pick/quick-pick/quick-pick.component';\nimport { TagModule } from 'primeng/tag';\n\n@Component({\n selector: 'phoenix-status-header',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n SplitButtonModule,\n TranslateModule,\n TooltipModule,\n TieredMenuModule,\n QuickPickComponent,\n TagModule,\n ],\n templateUrl: './status-header.component.html',\n styleUrls: ['./status-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StatusHeaderComponent {\n @Output() onQuickPickClickEmiter = new EventEmitter<void>();\n @Output() onToggleClickEmmiter = new EventEmitter<'forward' | 'back'>();\n @Output() onCloseEvent = new EventEmitter<void>();\n @Input() type!: any;\n @Input() items!: any;\n @Input() name: string = '';\n @Input() title: string = '';\n @Input() tag?: { icon?: string; text?: string; variant?: string };\n @Input() tags?: Array<{\n icon?: string;\n value?: string;\n variant?: string;\n color?: string;\n tooltip?: string;\n }> = [];\n @Input() enableQuickPick: boolean = false;\n @Input() actions: any[] = [];\n @Input() panelState: boolean = false;\n @Input() customClose: boolean = true;\n\n validSeverities: string[] = [\n 'success',\n 'info',\n 'warn',\n 'danger',\n 'help',\n 'primary',\n 'secondary',\n 'contrast',\n ];\n\n onToggleClick(direction: 'forward' | 'back') {\n this.onToggleClickEmmiter.emit(direction);\n }\n\n toggleSidePanel() {\n this.onQuickPickClickEmiter.emit();\n }\n\n closePanel() {\n this.onCloseEvent.emit();\n }\n}\n","<div class=\"flex justify-content-between p-2\">\n <div class=\"flex align-items-center gap-2 w-full\">\n @if (enableQuickPick) {\n <phoenix-quick-pick\n (onBack)=\"onToggleClick('back')\"\n (onQuickPick)=\"toggleSidePanel()\"\n (onForward)=\"onToggleClick('forward')\"\n >\n </phoenix-quick-pick>\n }\n\n <!-- NAME with tooltip and truncation -->\n @if (name) {\n <span\n class=\"text-xl font-semibold\"\n [pTooltip]=\"name.length > 40 ? name : undefined\"\n >\n {{ name.length > 60 ? (name | slice: 0 : 60) + \"…\" : name }}\n </span>\n }\n\n <!-- TITLE with tooltip and truncation -->\n @if (title) {\n <span\n class=\"text-base text-gray-500\"\n [pTooltip]=\"title.length > 20 ? title : undefined\"\n >\n {{ title.length > 20 ? (title | slice: 0 : 20) + \"…\" : title }}\n </span>\n }\n\n <!-- Type goes here -->\n <!-- @if (type.text) {\n <p-tag\n [value]=\"type?.text\"\n [style]=\"{\n border: '2px solid var(--surface-300)',\n background: 'transparent',\n color: 'var(--text-color)',\n 'font-size': '11px',\n padding: '2px 4px',\n width: 'fit-content',\n 'white-space': 'nowrap'\n }\"\n ></p-tag>\n } -->\n </div>\n\n <!-- <div class=\"flex gap-1 align-items-center\">\n @for (tag of tags; track $index) {\n <p-tag\n [pTooltip]=\"tag?.tooltip ? (tag.tooltip! | translate) : undefined\"\n [value]=\"tag?.value || '--'\"\n [severity]=\"tag.variant || 'info'\"\n [icon]=\"tag?.icon || 'pi pi-check'\"\n [style]=\"{\n 'font-size': '11px',\n padding: '3px 8px',\n width: 'fit-content',\n 'white-space': 'nowrap'\n }\"\n [ngStyle]=\"\n tag?.color\n ? {\n 'background-color': tag.color + '36',\n color: tag.color,\n }\n : null\n \"\n ></p-tag>\n }\n </div> -->\n</div>\n","import { StatusColType } from '../enums/status-col-type.enum';\n\nexport enum StatusTooltipType {\n TAG = 'TAG',\n STRING = 'STRING',\n PERSON = 'PERSON',\n LINK = 'LINK',\n DATE = 'DATE',\n DATE_ONLY = 'DATE_ONLY',\n COPY_TO_CLIPBOARD = 'COPY_TO_CLIPBOARD',\n DATE_PERSON = 'DATE_PERSON',\n}\n\nexport interface StatusTooltipItem {\n label: string;\n value: string | null;\n type: StatusTooltipType;\n value1?: string;\n value2?: string;\n}\n\nexport interface StatusAttribute {\n type: StatusColType;\n label: string;\n value: any;\n dateFormat?: string;\n // Specific to TAG\n key?: string;\n color?: string;\n\n //Specific to url with icon\n icon?: string;\n // Specific to PERSON\n value1?: string;\n value2?: string;\n tooltip?: StatusTooltipItem[];\n\n url?: string;\n\n // Specific to LIST\n item?:\n | {\n name: string;\n url?: string;\n disabled?: boolean;\n }[]\n | string\n | null;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'phoenix-tag',\n standalone: true,\n imports: [CommonModule, TranslateModule],\n templateUrl: './tag.component.html',\n styleUrls: ['./tag.component.scss'],\n})\nexport class TagComponent implements OnChanges {\n @Input() key!: string;\n @Input() content!: string;\n @Input() customColor!: string;\n\n color: string | undefined;\n customStyle!: {\n 'background-color': string;\n border: string;\n color: string;\n };\n\n ngOnChanges(): void {\n if (this.customColor) {\n this.customStyle = {\n 'background-color': this.customColor,\n border: this.invertHex(this.customColor),\n color: 'white',\n //color: this.invertHex(this.customColor),\n };\n }\n }\n\n invertHex(hex: string) {\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n\n if (hex.length != 6) {\n console.warn('Hex color must be six hex numbers in length.');\n return '#' + hex;\n }\n\n hex = hex.toUpperCase();\n const splitNum: any = hex.split('');\n let resultNum = '';\n const simpleNum = 'FEDCBA9876'.split('');\n const complexNum: any = {\n A: '5',\n B: '4',\n C: '3',\n D: '2',\n E: '1',\n F: '0',\n };\n\n for (let i = 0; i < 6; i++) {\n if (!isNaN(Number(splitNum[i]))) {\n resultNum += simpleNum[splitNum[i]];\n } else if (complexNum[splitNum[i]]) {\n resultNum += complexNum[splitNum[i]];\n } else {\n console.warn('Hex colors must only include hex numbers 0-9, and A-F');\n return '#' + hex;\n }\n }\n\n return '#' + resultNum;\n }\n}\n","<ng-container>\n <span [class]=\"'phoenix-tag '\" [ngStyle]=\"customStyle\" [attr.data-cy]=\"'tag'\">\n {{ content | translate }}\n </span>\n</ng-container>\n\n<!-- class=\"text-800\" style color depends on theme -->\n","import {\n Component,\n Input,\n ChangeDetectionStrategy,\n inject,\n ViewChildren,\n QueryList,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TagModule } from 'primeng/tag';\nimport { ContextObjectConfig, ContextObjectTag } from './context-object.model';\nimport { Router } from '@angular/router';\nimport { AvatarModule } from 'primeng/avatar';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport {\n StatusAttribute,\n StatusTooltipItem,\n StatusTooltipType,\n} from '../status-bar/models/status-attribute.model';\nimport { TagComponent } from '../tag/tag.component';\n\n@Component({\n selector: 'phoenix-contex-object',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n TranslateModule,\n TooltipModule,\n TagModule,\n AvatarModule,\n PopoverModule,\n TagComponent,\n ],\n templateUrl: './contex-object.component.html',\n styleUrls: ['./contex-object.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContexObjectComponent {\n @Input() config?: ContextObjectConfig;\n @Input() dateFormat = 'dd.MM.yyyy | HH:mm';\n @Input() dateOnlyFormat = 'dd.MM.yyyy';\n\n router = inject(Router);\n\n statusTooltipType = StatusTooltipType;\n\n validSeverities: string[] = [\n 'success',\n 'info',\n 'warn',\n 'danger',\n 'help',\n 'primary',\n 'secondary',\n 'contrast',\n ];\n\n get ctxType(): string | undefined {\n return this.config?.type ?? '';\n }\n\n get ctxName(): string {\n return this.config?.name ?? '';\n }\n\n get ctxTitle(): string {\n return this.config?.title ?? '';\n }\n\n get ctxTags(): ContextObjectTag[] {\n return this.config?.tags ?? [];\n }\n\n /**\n * Groups tags by their `group` property.\n * Ungrouped tags are returned as-is.\n * Grouped tags collapse into one display entry showing the first tag + remaining count.\n */\n get displayTags(): {\n tag: ContextObjectTag;\n groupedTags: ContextObjectTag[];\n remainingCount: number;\n }[] {\n const tags = this.ctxTags;\n const result: {\n tag: ContextObjectTag;\n groupedTags: ContextObjectTag[];\n remainingCount: number;\n }[] = [];\n const seenGroups = new Set<string>();\n\n for (const tag of tags) {\n if (!tag.group) {\n // Ungrouped tag — show as-is\n result.push({ tag, groupedTags: [tag], remainingCount: 0 });\n } else if (!seenGroups.has(tag.group)) {\n // First occurrence of this group\n seenGroups.add(tag.group);\n const allInGroup = tags.filter((t) => t.group === tag.group);\n result.push({\n tag,\n groupedTags: allInGroup,\n remainingCount: allInGroup.length - 1,\n });\n }\n // Subsequent tags of an already-seen group are skipped\n }\n return result;\n }\n\n get ctxLabels(): { text: string }[] {\n return this.config?.labels ?? [];\n }\n\n get ctxBackRoute(): any[] | undefined {\n return this.config?.backRoute ?? [];\n }\n\n get ctxOtherInfo(): StatusAttribute[] {\n return this.config?.otherInfo ?? [];\n }\n\n @ViewChildren('tagPop') tagPopovers!: QueryList<Popover>;\n\n onTagPopoverEnter(event: Event, currentPopover: Popover): void {\n this.tagPopovers?.forEach((p) => {\n if (p !== currentPopover) p.hide();\n });\n currentPopover.show(event);\n }\n\n onTagPopoverLeave(event: Event, currentPopover: Popover): void {\n currentPopover.hide();\n }\n\n onBackClick(): void {\n const route = this.ctxBackRoute;\n if (route?.length) {\n this.router.navigate(route);\n }\n }\n\n getFullUrl(path: string): string {\n if (path.startsWith('http')) return path;\n return '/' + path.replace(/^\\/+/, '');\n }\n}\n","<div class=\"flex align-items-center gap-2 w-full\">\n @if (ctxBackRoute?.length) {\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-arrow-left\"\n class=\"p-button-text ml-1\"\n (click)=\"onBackClick()\"\n ></button>\n } @if (ctxType) {\n <span class=\"text-xl font-semibold text-gray-500\"> {{ ctxType }} : </span>\n } @if (ctxName) {\n <span\n class=\"text-xl font-semibold text-primary\"\n [pTooltip]=\"ctxName.length > 40 ? ctxName : undefined\"\n >\n {{ ctxName.length > 60 ? (ctxName | slice : 0 : 60) + \"…\" : ctxName }}\n </span>\n } @if (ctxTitle) {\n <span\n class=\"text-base text-gray-500\"\n [pTooltip]=\"ctxTitle.length > 20 ? ctxTitle : undefined\"\n >\n {{ ctxTitle.length > 20 ? (ctxTitle | slice : 0 : 20) + \"…\" : ctxTitle }}\n </span>\n } @if (ctxTags.length) {\n <div class=\"flex align-items-center gap-2 ml-3\">\n @for (item of displayTags; track $index) {\n <div class=\"tag-group-wrapper\">\n <div\n class=\"tag-popover-trigger\"\n (mouseenter)=\"onTagPopoverEnter($event, tagPop)\"\n (mouseleave)=\"onTagPopoverLeave($event, tagPop)\"\n >\n <p-tag\n [value]=\"item.remainingCount > 0 ? item.tag.text + ' +' + item.remainingCount : item.tag.text\"\n [severity]=\"$any(item.tag.variant || 'info')\"\n [icon]=\"item.tag.icon\"\n [style]=\"{\n 'font-size': '11px',\n padding: '3px 8px',\n width: 'fit-content',\n cursor: item.remainingCount > 0 ? 'pointer' : 'default',\n }\"\n [ngStyle]=\"\n item.tag.color\n ? {\n 'background-color': item.tag.color + '36',\n color: item.tag.color,\n }\n : null\n \"\n ></p-tag>\n </div>\n <p-popover #tagPop [style]=\"{ maxWidth: '400px' }\">\n @if (item.remainingCount === 0) {\n <div>\n <span>{{ item.tag.label ? item.tag.label + \": \" : \"\" }}</span>\n <span>{{ item.tag.text }} </span>\n </div>\n } @else {\n @if (item.tag.label) {\n <div class=\"tag-group-popup-label\">{{ item.tag.label }}</div>\n }\n <div class=\"flex flex-wrap gap-1\">\n @for (gt of item.groupedTags; track $index) {\n <p-tag\n [value]=\"gt.text\"\n [severity]=\"$any(gt.variant || 'info')\"\n [icon]=\"gt.icon\"\n [style]=\"{\n 'font-size': '11px',\n padding: '3px 8px',\n width: 'fit-content',\n }\"\n [ngStyle]=\"\n gt.color\n ? {\n 'background-color': gt.color + '36',\n color: gt.color,\n }\n : null\n \"\n ></p-tag>\n }\n </div>\n }\n </p-popover>\n </div>\n } @for (label of ctxLabels; track label.text) {\n <span\n [style]=\"{\n 'font-size': '11px',\n padding: '3px 8px',\n width: 'fit-content',\n }\"\n >\n {{ label.text }}\n </span>\n }\n </div>\n\n }\n <!-- Other Info items -->\n <ng-container *ngFor=\"let attr of ctxOtherInfo\">\n <span\n class=\"cursor-pointer ml-3\"\n (mouseenter)=\"pop.toggle($event)\"\n (mouseleave)=\"pop.toggle($event)\"\n >\n <i class=\"pi pi-calendar text-blue-900 mr-1\"></i>\n <span class=\"text-sm\">{{\n attr.value | date : attr.dateFormat || dateOnlyFormat\n }}</span>\n </span>\n <p-popover #pop [style]=\"{ maxWidth: '400px' }\">\n <!-- GRID layout for all tooltip items except DATE_PERSON -->\n <div\n style=\"\n display: grid;\n grid-template-columns: max-content 1fr;\n column-gap: 1rem;\n row-gap: 0.5rem;\n align-items: start;\n width: 100%;\n \"\n >\n <ng-container *ngFor=\"let item of attr?.tooltip\">\n <ng-container *ngIf=\"item.type !== statusTooltipType.DATE_PERSON\">\n <!-- Tooltip label -->\n <div class=\"text-sm text-600 text-left\">{{ item.label }}:</div>\n\n <!-- Tooltip value rendering -->\n <div class=\"text-sm text-left break-words\">\n <ng-container [ngSwitch]=\"item?.type || statusTooltipType.TAG\">\n <!-- LINK type: renders as a clickable hyperlink if value exists -->\n <ng-container *ngSwitchCase=\"'LINK'\">\n <a\n *ngIf=\"item.value; else empty\"\n [href]=\"getFullUrl(item.value)\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-blue-500 underline\"\n >\n {{ item.label || \"Open\" }}\n </a>\n </ng-container>\n\n <!-- STRING type: renders text with truncation and tooltip if too long -->\n <ng-container *ngSwitchCase=\"statusTooltipType.STRING\">\n <div\n *ngIf=\"item.value; else empty\"\n class=\"text-sm\"\n style=\"\n white-space: normal;\n word-break: break-word;\n overflow-wrap: break-word;\n \"\n >\n {{ item.value }}\n </div>\n </ng-container>\n\n <!-- DATE type: formatted date or fallback -->\n <ng-container *ngSwitchCase=\"statusTooltipType.DATE\">\n <span *ngIf=\"item.value; else empty\">\n {{ item.value | date : dateFormat }}\n </span>\n </ng-container>\n\n <!-- PERSON type: shows initial avatar and name if value exists -->\n <ng-container *ngSwitchCase=\"statusTooltipType.PERSON\">\n <ng-container *ngIf=\"item.value; else empty\">\n <span class=\"person-wrap flex items-center gap-1 truncate\">\n <div\n class=\"person-avatar small\"\n style=\"font-size: 0.875rem; line-height: 1\"\n >\n {{ item?.value?.charAt(0)?.toUpperCase() }}\n </div>\n <span class=\"truncate\">\n {{ item.value }} {{ item.value1 }}\n </span>\n </span>\n </ng-container>\n </ng-container>\n\n <!-- TAG or unknown type: uses phoenix-tag if value exists -->\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"item.value; else empty\">\n <div class=\"flex gap-2\">\n <span> {{ item.value }} </span>\n <phoenix-tag\n [customColor]=\"item.value2 || ''\"\n [content]=\"item.value1 || ''\"\n >\n </phoenix-tag>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <!-- Separate layout for DATE_PERSON entries (includes avatar and date) -->\n <ng-container *ngFor=\"let item of attr?.tooltip\">\n <ng-container *ngIf=\"item.type === statusTooltipType.DATE_PERSON\">\n <ng-container *ngIf=\"item.value; else emptyDatePerson\">\n <div>\n <!-- Label -->\n <div\n class=\"font-sm text-600 truncate mb-1\"\n [pTooltip]=\"item.label.length > 20 ? item.label : undefined\"\n >\n {{ item.label }}\n </div>\n <!-- Avatar and person name/date -->\n <div class=\"flex items-center gap-2 person-wrap\">\n <div class=\"person-avatar\">\n {{ item?.value?.charAt(0)?.toUpperCase() }}\n </div>\n <div>\n <div\n class=\"text-blue-800 font-sm\"\n style=\"\n word-break: break-word;\n white-space: normal;\n overflow-wrap: break-word;\n \"\n >\n {{ item.value }}\n </div>\n <div class=\"text-sm\">\n {{ item.value1 | date : dateFormat }}\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n <!-- Fallback for empty DATE_PERSON -->\n <ng-template #emptyDatePerson>\n <div class=\"text-sm\">--</div>\n </ng-template>\n </ng-container>\n </ng-container>\n\n <!-- Shared fallback for missing or empty values -->\n <ng-template #empty>\n <span>--</span>\n </ng-template>\n </p-popover>\n </ng-container>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SidebarComponent } from '../sidebar/sidebar.component';\nimport { TopbarComponent } from '../topbar/topbar.component';\nimport { ContexObjectComponent } from '../context-object/contex-object.component';\nimport { ContextObjectConfig } from '../context-object/context-object.model';\n\nexport interface ShellTheme {\n mode: 'light' | 'dark' | 'system';\n}\n\n@Component({\n selector: 'pho-shell',\n imports: [\n SidebarComponent,\n TopbarComponent,\n CommonModule,\n ContexObjectComponent,\n ],\n templateUrl: './shell.component.html',\n encapsulation: ViewEncapsulation.None,\n})\nexport class ShellComponent {\n @Input() config!: {\n user: any;\n shortModuleName: string;\n hidelogo?: boolean;\n\n /** header control */\n headerContext?: ContextObjectConfig;\n\n searchConfig?: any;\n topbarModulesMenu?: any;\n urlConfig?: {\n url: string | null;\n disabled?: boolean;\n };\n mainItems?: any[];\n footerItem?: any;\n };\n\n @Input() darkModeSelector = { mode: 'dark' };\n @Input() theme: ShellTheme = { mode: 'system' };\n @Output() onDarkModeSelect = new EventEmitter<any>();\n @Output() onIsSlimSelect = new EventEmitter<any>();\n @Output() onUserAction = new EventEmitter<string>();\n @Output() sliderClick = new EventEmitter<any>();\n @Output() themeChange = new EventEmitter<ShellTheme>();\n\n isSlim!: boolean;\n\n readonly gridTemplateColumns = 'auto 1fr';\n\n /** if showHeader=true adding additional row between topbar and content */\n get gridTemplateRows(): string {\n return this.config?.headerContext?.showHeader ? '3.5rem auto 1fr' : '3.5rem 1fr';\n }\n\n toggleSidebar(isSlim: boolean) {\n this.isSlim = isSlim;\n this.onIsSlimSelect.emit(this.isSlim);\n }\n\n onThemeChange(mode: ShellTheme['mode']) {\n this.theme.mode = mode;\n this.themeChange.emit(this.theme);\n }\n\n selectDarkMode() {\n this.onDarkModeSelect.emit(this.darkModeSelector);\n }\n}\n","<!-- Sidebar Layout -->\n<div\n class=\"pho-grid w-full h-screen overflow-hidden m-0 p-0\"\n [ngStyle]=\"{\n 'grid-template-rows': gridTemplateRows,\n 'grid-template-columns': gridTemplateColumns\n }\"\n>\n <!-- Top header (uvek preko 2 kolone) -->\n <pho-topbar\n class=\"pho-col-span-2 z-1\"\n [user]=\"config.user\"\n [shortModuleName]=\"config.shortModuleName\"\n [hidelogo]=\"config.hidelogo\"\n [searchConfig]=\"config.searchConfig\"\n [topbarModulesMenu]=\"config.topbarModulesMenu\"\n [urlConfig]=\"config.urlConfig\"\n [darkModeSelector]=\"darkModeSelector\"\n (onDarkModeSelect)=\"selectDarkMode()\"\n (onUserPopoverAction)=\"onUserAction.emit($event)\"\n ></pho-topbar>\n\n <!-- Context object - full width -->\n <div class=\"pho-col-span-2\" *ngIf=\"config.headerContext && config.headerContext.showHeader\">\n <div\n class=\"flex align-items-center justify-content-between border-bottom-1 border-300 pb-2 pt-2\"\n >\n <phoenix-contex-object\n *ngIf=\"config.headerContext\"\n [config]=\"config.headerContext\"\n ></phoenix-contex-object>\n </div>\n </div>\n\n <!-- Sidebar (uvek prisutan) -->\n <div class=\"w-max\">\n <pho-sidebar\n [mainItems]=\"config.mainItems\"\n [footerItem]=\"config.footerItem\"\n (toggleSidebar)=\"toggleSidebar($event)\"\n (sliderClick)=\"sliderClick.emit($event)\"\n ></pho-sidebar>\n </div>\n\n <!-- Main content -->\n <div class=\"overflow-auto surface-50 wrap w-full\">\n <ng-content></ng-content>\n </div>\n</div>\n","export function timePeriodFromMS(milliseconds: number, lang: string = 'en'): string {\n const weeks = Math.floor(milliseconds / (7 * 24 * 60 * 60 * 1000));\n milliseconds %= 7 * 24 * 60 * 60 * 1000;\n \n const days = Math.floor(milliseconds / (24 * 60 * 60 * 1000));\n milliseconds %= 24 * 60 * 60 * 1000;\n \n const hours = Math.floor(milliseconds / (60 * 60 * 1000));\n milliseconds %= 60 * 60 * 1000;\n \n const minutes = Math.floor(milliseconds / (60 * 1000));\n \n let result = '';\n \n switch (lang) {\n case 'de':\n if (weeks > 0) result += `${weeks}w `;\n if (days > 0) result += `${days}t `;\n if (hours > 0) result += `${hours}s `;\n if (minutes > 0) result += `${minutes}m`;\n break;\n \n case 'sr':\n if (weeks > 0) result += `${weeks}n `;\n if (days > 0) result += `${days}d `;\n if (hours > 0) result += `${hours}č `;\n if (minutes > 0) result += `${minutes}m`;\n break;\n \n default: // 'en' or fallback\n if (weeks > 0) result += `${weeks}w `;\n if (days > 0) result += `${days}d `;\n if (hours > 0) result += `${hours}h `;\n if (minutes > 0) result += `${minutes}m`;\n break;\n }\n \n return result.trim();\n }","import { Pipe, PipeTransform } from '@angular/core';\nimport { timePeriodFromMS } from '../components/meta-form/utils/form-fields.utils';\n\n@Pipe({\n name: 'timePeriod'\n})\nexport class TimePeriodPipe implements PipeTransform {\n transform(value: number): string {\n return timePeriodFromMS(value);\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'initials' })\nexport class InitialsPipe implements PipeTransform {\n transform(name: string): string {\n return (\n name\n ?.split(' ')\n .map((word) => word.charAt(0).toUpperCase())\n .join('') || ''\n );\n }\n}\n","export enum tableActionType {\n CREATE = 'create',\n EDIT = 'edit',\n BULK_EDIT = 'bulk_edit',\n DELETE = 'delete',\n DETAILS = 'details',\n ASSIGN = 'assign',\n APPLY = 'apply',\n OPEN_IN_NEW_TAB = 'open_in_new_tab',\n TAB = 'tab',\n OPEN_FULL_SCREEN = 'open_full_screen',\n ADD_LINK = 'add_link',\n DISCONNECT = 'disconnect',\n REMOVE = 'remove',\n SYNC = 'sync',\n MENU = 'menu',\n DROP = 'drop',\n OVERVIEW = 'overview',\n HISTORY = 'syncHistory',\n DOWNLOAD = 'download',\n ATTACH = 'attach',\n IMPORT = 'import',\n ROW_DELETE = 'row_delete',\n RUN = 'run',\n ///multiple options\n ASSIGN_FROM_CATALOG = 'ASSIGN_FROM_CATALOG',\n ASSIGN_FROM_ITEM = 'ASSIGN_FROM_ITEM',\n ASSIGN_CONTROLS = 'ASSING_CONTROLS',\n ASSIGN_MEASURE = 'ASSGIN_MEASURE',\n CREATE_ADITIONAL_MEASURE = 'CREATE_ADITIONAL_MEASURE'\n}\n\nexport enum tableButtonFormat {\n TEXT_ICON = 'TEXT_ICON',\n TEXT = 'TEXT',\n ICON = 'ICON',\n ICON_ROUNDED = 'ICON_ROUNDED',\n}\n\nexport enum tableButtonContext {\n GLOBAL = 'GLOBAL',\n MORE = 'MORE',\n BULK = 'BULK',\n ROW = 'ROW',\n}\n\nexport enum tableColumnType {\n TEXT = 'TEXT',\n TIMEPERIOD = 'TIMEPERIOD',\n RICH_TEXT = 'RICH_TEXT',\n TEXT_AREA = 'TEXT_AREA',\n DATE = 'DATE',\n DATE_COMPLEX = 'DATE_COMPLEX', //Date and time\n TAG = 'TAG',\n OBJ_TAG = 'OBJ_TAG',\n LIST_TAG = 'LIST_TAG',\n NUMBER = 'NUMBER',\n PERSON = 'PERSON',\n COMPLETNESS = 'COMPLETNESS',\n BOOLEAN = 'BOOLEAN',\n LIST = 'LIST',\n CUSTOM = 'CUSTOM',\n EMAIL = 'EMAIL',\n}\n\nexport enum tableSelectionType {\n CHECKBOX = 'checkbox',\n RADIO_BTN = 'radio_btn',\n}\n\nexport enum tableFilterType {\n ///not using text, its in global srch\n // TEXT = 'text',\n DATE = 'date',\n // NUMERIC = 'numeric',\n BOOLEAN = 'boolean',\n MULTISELECT = 'multiselect',\n COMPLETNESS = 'completness',\n // ICON = 'icon',\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n} from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { tableActionType, tableButtonContext } from '../utils/dataTable.enum';\nimport { TableAction } from '../utils/dataTable.interface';\nimport { PopoverModule } from 'primeng/popover';\n\ninterface BtnConfig {\n text: boolean;\n label: string;\n icon: string;\n outlined: boolean;\n class?: string;\n type?: string; // default is 'button' , for multiselect button set 'multiselect'\n items?: any;\n severity?:\n | 'info'\n | 'success'\n | 'warn'\n | 'danger'\n | 'secondary'\n | 'contrast'\n | 'help'\n | 'primary';\n checkboxrelatedauth?: boolean;\n}\nenum ico {\n import = 'pi pi-file-import',\n create = 'pi pi-plus',\n open_full_screen = 'pi pi-external-link',\n bulk_edit = 'pi pi-pencil',\n edit = 'pi pi-pencil',\n delete = 'pi pi-trash',\n assign = 'pi pi-paperclip',\n apply = 'pi pi-check-square',\n open_in_new_tab = 'pi pi-external-link',\n add_link = 'pi pi-link',\n disconnect = 'pi pi-link',\n remove = 'pi pi-minus',\n sync = 'pi pi-sync',\n menu = 'pi pi-ellipsis-v',\n drop = 'pi pi-angle-down',\n overview = 'pi pi-history',\n syncHistory = 'pi pi-history',\n download = 'pi pi-download',\n attach = 'pi pi-paperclip',\n details = 'pi pi-info-circle',\n row_delete = 'pi pi-trash',\n run = 'pi pi-play',\n}\n\n@Component({\n selector: 'phoenix-data-table-action',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n TooltipModule,\n TranslateModule,\n PopoverModule,\n ],\n templateUrl: './phoenix-data-table-action.component.html',\n styleUrls: ['./phoenix-data-table-action.component.css'],\n})\n\n/// two disble opt\n/// Read only: Default scope/enity or any other reason | referenced type etc...\n/// solved with readonly property from response and it works per row. It works independed from user. Response has to return readonly:boolean\n\n/// Authorization\n//// needs in btn configuration and its fro all buttons. all rows\nexport class PhoenixDataTableActionComponent implements OnChanges {\n @Input({ required: true }) actionConfig!: TableAction;\n @Input() rowData!: any;\n // @Input() selectedData!: any;\n\n @Output() actionClick = new EventEmitter<any>();\n\n icon!: string;\n disabled!: boolean | undefined;\n btnConfig!: BtnConfig;\n\n ngOnChanges(): void {\n this.icon = ico[this.actionConfig.type as keyof typeof ico];\n\n ///set standard btn configuraton\n this.btnConfig = {\n text: true,\n label: this.actionConfig.label,\n icon: 'pi pi-circle',\n class: '',\n outlined: false,\n type: this.actionConfig.buttonType,\n items: this.actionConfig.items,\n checkboxrelatedauth: this.actionConfig.checkboxrelatedauth\n ? this.actionConfig.checkboxrelatedauth\n : false,\n };\n switch (this.actionConfig.context) {\n case tableButtonContext.GLOBAL:\n ///disable by permission\n\n this.disabled = this.actionConfig.disabled;\n break;\n case tableButtonContext.BULK:\n this.btnConfig.outlined = true;\n this.btnConfig.class = 'ml-1';\n ///disable by permission\n this.disabled = this.actionConfig.disabled;\n\n ///configure bulk delete button\n if (this.actionConfig.type === tableActionType.DELETE) {\n this.btnConfig.severity = 'warn';\n }\n\n break;\n case tableButtonContext.ROW:\n this.btnConfig.label = '';\n ///Test the order of disabling\n ///disable by permission\n this.disabled = this.actionConfig.disabled;\n if (this.disabled) {\n break;\n }\n if (this.actionConfig?.type && !this.actionConfig?.notauthorized) {\n this.disabled =\n this.rowData[this.actionConfig.type] != undefined &&\n this.rowData[this.actionConfig.type] != null\n ? !this.rowData[this.actionConfig.type]\n : false;\n }\n /// always disable delete button if object response is readOnly:true\n if (\n this.rowData?.readOnly &&\n this.actionConfig.type === tableActionType.DELETE\n ) {\n this.disabled = true;\n }\n /// this CUSTOM condition is only for BCMS Resources. readOnly is not enough (its not appropriate for ISMS & BCMS) we should have isEditable, isDeletable ets... boolean for each action :)\n if (\n this.rowData?.typeLabelKey === 'CUSTOM' &&\n this.actionConfig.type === tableActionType.OPEN_IN_NEW_TAB\n ) {\n this.disabled = true;\n }\n\n break;\n }\n }\n\n onActionClick(action: any) {\n this.actionClick.emit({ action, rowData: this.rowData });\n }\n}\n","<p-popover #op>\n <ul class=\"list-none p-0 m-0\" [attr.data-cy]=\"'table-button-popover'\">\n <ng-container *ngFor=\"let item of btnConfig.items; let last = last\">\n <li\n class=\"cursor-pointer block\"\n [ngClass]=\"{ 'mb-3': !last, disabledAction: item.disabled }\"\n (click)=\"onActionClick(item)\"\n >\n <i class=\"mr-2\" [class]=\"item.icon\"></i> {{ item.label | translate }}\n </li>\n </ng-container>\n </ul>\n</p-popover>\n\n<p-button\n [attr.data-cy]=\"'table-button-' + actionConfig.type\"\n [label]=\"btnConfig.label | translate\"\n [text]=\"btnConfig.text\"\n [icon]=\"icon\"\n [disabled]=\"disabled\"\n [iconPos]=\"btnConfig.type === 'multiselect' ? 'right' : 'left'\"\n (click)=\"\n btnConfig.type === 'multiselect'\n ? op.toggle($event)\n : onActionClick(actionConfig)\n \"\n [outlined]=\"btnConfig.outlined\"\n [pTooltip]=\"actionConfig.label | translate\"\n tooltipPosition=\"bottom\"\n [class]=\"btnConfig.class\"\n [severity]=\"btnConfig.severity\"\n>\n</p-button>\n","import {\n Component,\n DestroyRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableAction } from '../utils/dataTable.interface';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BadgeModule } from 'primeng/badge';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'phoenix-data-table-tabs',\n standalone: true,\n imports: [\n CommonModule,\n SelectButtonModule,\n FormsModule,\n TranslateModule,\n BadgeModule,\n ],\n templateUrl: './phoenix-data-table-tabs.component.html',\n styleUrls: ['./phoenix-data-table-tabs.component.css'],\n})\nexport class PhoenixDataTableTabsComponent implements OnInit, OnChanges {\n @Input({ required: true }) actions!: TableAction[];\n @Output() actionClick = new EventEmitter<any>();\n\n private router = inject(Router);\n private dr = inject(DestroyRef);\n value!: string | undefined;\n\n private resolveTabFromRoute(): string {\n const fullPath = this.router.url;\n const pathSegments = fullPath.split('/').filter(Boolean);\n const lastSegment = pathSegments[pathSegments.length - 1];\n\n if (this.actions && this.actions.length > 0) {\n const found = this.actions.find((ac) => ac.key === lastSegment);\n return (found?.key || this.actions[0].key)!;\n }\n return '';\n }\n\n ngOnInit(): void {\n this.router.events.pipe(takeUntilDestroyed(this.dr)).subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.value = this.resolveTabFromRoute();\n }\n });\n }\n\n ngOnChanges() {\n if (this.actions?.length > 0) {\n this.value = this.resolveTabFromRoute();\n }\n }\n\n onActionClick(event: any) {\n const opt = this.actions.find((i) => i.key === event.value);\n this.actionClick.emit({ action: opt });\n }\n}\n","<p-selectButton\n [attr.data-cy]=\"'table-tab-select-button'\"\n [options]=\"actions\"\n optionValue=\"key\"\n [(ngModel)]=\"value\"\n optionLabel=\"icon\"\n [unselectable]=\"true\"\n (onChange)=\"onActionClick($event)\"\n>\n <ng-template #item let-item>\n <span>\n {{ item.label | translate }}\n </span>\n <span>\n <p-badge\n *ngIf=\"item.badgeCount\"\n [value]=\"item.badgeCount\"\n severity=\"danger\"\n badgeSize=\"small\"\n />\n </span>\n </ng-template>\n</p-selectButton>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isSelected',\n standalone: true,\n})\nexport class IsSelectedPipe implements PipeTransform {\n transform(item: any, selectedColumns: any[]): boolean {\n return selectedColumns.some(\n selectedItem => selectedItem.field == item.field,\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n EventEmitter,\n Input,\n Output,\n SimpleChanges,\n ViewChild,\n OnChanges,\n inject,\n} from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime, map } from 'rxjs';\n\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { ButtonModule } from 'primeng/button';\nimport { SelectModule } from 'primeng/select';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { ListboxModule } from 'primeng/listbox';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { OverlayBadgeModule } from 'primeng/overlaybadge';\nimport { RippleModule } from 'primeng/ripple';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { PhoenixDataTableActionComponent } from '../phoenix-data-table-action/phoenix-data-table-action.component';\nimport { PhoenixDataTableTabsComponent } from '../phoenix-data-table-tabs/phoenix-data-table-tabs.component';\n\nimport { TableColumn } from '../utils/dataTable.interface';\nimport { IsSelectedPipe } from '../table/isSelected.pipe';\n\ntype FilterType =\n | 'text'\n | 'dropdown'\n | 'multiselect'\n | 'checkbox'\n | 'person-dropdown'\n | 'boolean-multiselect';\n\n/**\n * Filter definition used by table caption.\n *\n * IMPORTANT: Backward compatible:\n * - You can still pass: [{ key: 'entityName', label: 'LABELS.ENTITY_NAME' }]\n * - In that case it will become type='text' by default.\n */\nexport type CaptionFilter = {\n key: string;\n label: string;\n\n // optional (new)\n type?: FilterType;\n options?: any[];\n selected?: any;\n\n // optional UI\n isInCaption?: boolean;\n\n // optional mappings for PrimeNG options\n optionLabel?: string; // default: 'label'\n optionValue?: string; // default: 'key' (NOTE: boolean-multiselect uses OBJECT value in form)\n};\n\n@Component({\n selector: 'table-caption',\n standalone: true,\n imports: [\n CommonModule,\n PopoverModule,\n ButtonModule,\n SelectModule,\n MultiSelectModule,\n InputTextModule,\n FormsModule,\n ReactiveFormsModule,\n InputIconModule,\n IconFieldModule,\n ListboxModule,\n CheckboxModule,\n OverlayBadgeModule,\n RippleModule,\n FloatLabelModule,\n TranslateModule,\n PhoenixDataTableActionComponent,\n PhoenixDataTableTabsComponent,\n IsSelectedPipe,\n ],\n templateUrl: './table-caption.component.html',\n styleUrl: './table-caption.component.css',\n})\nexport class TableCaptionComponent implements OnChanges {\n @ViewChild('filtersPopover') filtersPopover?: Popover;\n @ViewChild('columnsPopover') columnsPopover?: Popover;\n\n /** Table config (key, UI toggles, global actions, tabs, etc.) */\n @Input() tableConfiguration!: any;\n\n /** Available columns for \"Columns\" popover */\n @Input() columns: TableColumn[] = [];\n\n /** Selected items (for bulk actions, only passed through) */\n @Input() selectedItems: any[] = [];\n\n /**\n * Filters config (backward compatible):\n * - old style: [{ key, label }]\n * - new style: [{ key, label, type, options, isInCaption, ... }]\n */\n @Input() filters: CaptionFilter[] = [];\n\n /** Emits normalized filter values (no nulls/empties) */\n @Output() applyFiltersEvent = new EventEmitter<Record<string, any>>();\n\n /** Emits selected column field keys (string[]) */\n @Output() applyColumnsEvent = new EventEmitter<string[]>();\n\n /** Emits global search input changes */\n @Output() searchChange = new EventEmitter<string>();\n\n /** Emits action clicks from tabs/global/more area */\n @Output() actionClick = new EventEmitter<any>();\n\n private fb = inject(FormBuilder);\n private dr = inject(DestroyRef);\n translate = inject(TranslateService);\n\n /** Reactive form built from filters[] */\n filtersForm: FormGroup = this.fb.group({});\n\n /** Columns currently visible (kept in original order) */\n _selectedColumns: TableColumn[] = [];\n\n get columnsChanged(): boolean {\n return (this.columns?.length ?? 0) !== (this._selectedColumns?.length ?? 0);\n }\n\n /** Local storage keys */\n private FILTER_KEY = '';\n private COLUMN_KEY = '';\n\n /**\n * Internal signature to avoid rebuilding form on every ngOnChanges.\n * We rebuild only if:\n * - table key changes OR\n * - set/order of filter keys changes\n */\n private lastSignature = '';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.tableConfiguration) return;\n\n this.FILTER_KEY = `filters_${this.tableConfiguration.key ?? 'table'}`;\n this.COLUMN_KEY = `columns_${this.tableConfiguration.key ?? 'table'}`;\n\n // Default visible columns: all non-hidden columns\n this._selectedColumns = (this.columns ?? []).filter((c: any) => !c?.hidden);\n\n // Restore columns once when config/columns arrive\n if (this.tableConfiguration?.hasColumns) {\n this.restoreColumnState();\n } else {\n this.emitColumns(this._selectedColumns);\n }\n\n // Normalize filters (backward compatible) before building form\n const normalizedFilters = this.normalizeFilters(this.filters);\n\n const signature = this.buildSignature(this.tableConfiguration.key, normalizedFilters);\n if (signature !== this.lastSignature) {\n this.lastSignature = signature;\n this.buildFiltersForm(normalizedFilters);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Filters form (performance-focused)\n // ---------------------------------------------------------------------------\n\n /**\n * Build reactive form only when signature changes.\n * Subscribes once, emits debounced normalized payload.\n */\n private buildFiltersForm(filtersCfg: CaptionFilter[]): void {\n const fg = this.fb.group({});\n\n for (const f of filtersCfg) {\n const t = f.type ?? 'text';\n\n /**\n * Important:\n * - For boolean-multiselect we keep SELECTED VALUES AS OPTION OBJECTS\n * (PrimeNG is much more stable with object model here than with boolean primitives),\n * but outgoing payload will still be boolean[].\n */\n const initialValue =\n t === 'boolean-multiselect'\n ? this.normalizeBooleanMultiSelection(f.selected, f)\n : t === 'multiselect'\n ? this.normalizeMultiInitial(f.selected)\n : t === 'checkbox'\n ? !!f.selected\n : f.selected ?? '';\n\n fg.addControl(f.key, this.fb.control(initialValue));\n }\n\n this.filtersForm = fg;\n\n // 1) Restore persisted values (but only valid keys)\n this.restoreFilterState(filtersCfg);\n\n // 2) Subscribe once with debounce and emit normalized payload\n this.filtersForm.valueChanges\n .pipe(\n takeUntilDestroyed(this.dr),\n debounceTime(120),\n map((raw) => this.normalizeOutgoingPayload(raw, filtersCfg))\n )\n .subscribe((payload) => {\n this.applyFiltersEvent.emit(payload);\n this.persistState(payload, this.FILTER_KEY);\n });\n\n // 3) Emit initial state (normalized) once\n queueMicrotask(() => {\n const raw = this.filtersForm.getRawValue();\n const payload = this.normalizeOutgoingPayload(raw, filtersCfg);\n this.applyFiltersEvent.emit(payload);\n this.persistState(payload, this.FILTER_KEY);\n });\n }\n\n /**\n * Normalize filters to be fully usable even if user passes [{key,label}] only.\n * Rule:\n * - If no type: treat as 'text'\n * - If options exist: treat as 'dropdown' (single) unless explicitly multiselect\n */\n private normalizeFilters(filters: CaptionFilter[]): CaptionFilter[] {\n const arr = Array.isArray(filters) ? filters : [];\n\n return arr.map((f) => {\n const hasOptions = Array.isArray(f.options) && f.options.length > 0;\n\n // Backward compatibility:\n // - old style: {key,label} => text input\n // - if options exist but no type => dropdown\n const type: FilterType = f.type ?? (hasOptions ? 'dropdown' : 'text');\n\n return {\n ...f,\n type,\n optionLabel: f.optionLabel ?? 'label',\n optionValue: f.optionValue ?? 'key',\n };\n });\n }\n\n private buildSignature(tableKey: any, filtersCfg: CaptionFilter[]): string {\n const keys = (filtersCfg ?? []).map((f) => f.key).join('|');\n return `${tableKey ?? 'table'}::${keys}`;\n }\n\n private normalizeMultiInitial(selected: any): any[] {\n if (selected == null) return [];\n return Array.isArray(selected) ? selected : [selected];\n }\n\n // ---------------------------------------------------------------------------\n // boolean-multiselect helpers (UI value = option objects, output = boolean[])\n // ---------------------------------------------------------------------------\n\n private coerceBool(x: any): boolean | null {\n if (typeof x === 'boolean') return x;\n if (typeof x === 'string') {\n if (x === 'true') return true;\n if (x === 'false') return false;\n }\n return null;\n }\n\n /**\n * Returns array of OPTION OBJECTS that match selected booleans.\n * Accepts selected coming as:\n * - boolean | boolean[]\n * - 'true'/'false' | string[]\n * - option object(s) (already from UI)\n */\n private normalizeBooleanMultiSelection(value: any, cfg: CaptionFilter): any[] {\n const options = Array.isArray(cfg.options) ? cfg.options : [];\n\n // If UI already provides objects, keep them (PrimeNG uses them to render labels/checks)\n if (Array.isArray(value) && value.length && typeof value[0] === 'object') {\n return value;\n }\n\n const arr = Array.isArray(value) ? value : value == null ? [] : [value];\n\n const bools = arr\n .map((v) => this.coerceBool(v))\n .filter((v): v is boolean => v !== null);\n\n const ov = cfg.optionValue ?? 'key';\n return bools\n .map((b) => options.find((o) => this.coerceBool(o?.[ov]) === b))\n .filter(Boolean);\n }\n\n private extractBooleanArrayFromUiValue(value: any, cfg: CaptionFilter): boolean[] {\n const ov = cfg.optionValue ?? 'key';\n const arr = Array.isArray(value) ? value : value == null ? [] : [value];\n\n const bools = arr\n .map((x) => {\n // UI sends option objects (preferred)\n if (x && typeof x === 'object') return this.coerceBool(x?.[ov]);\n // fallback if primitives ever come through\n return this.coerceBool(x);\n })\n .filter((x): x is boolean => x !== null);\n\n return bools;\n }\n\n // ---------------------------------------------------------------------------\n // Payload normalization\n // ---------------------------------------------------------------------------\n\n /**\n * Emit only meaningful values:\n * - text: '' removed\n * - dropdown: '' / null removed\n * - multiselect: [] removed\n * - boolean-multiselect: boolean[] removed if empty (UI stores option objects)\n * - checkbox: included only if true\n */\n private normalizeOutgoingPayload(raw: any, cfg: CaptionFilter[]): Record<string, any> {\n const out: Record<string, any> = {};\n const mapCfg = new Map(cfg.map((f) => [f.key, f]));\n\n for (const key of Object.keys(raw ?? {})) {\n const f = mapCfg.get(key);\n if (!f) continue;\n\n const t = f.type ?? 'text';\n const v = raw[key];\n\n if (t === 'boolean-multiselect') {\n const bools = this.extractBooleanArrayFromUiValue(v, f);\n if (bools.length) out[key] = bools; \n continue;\n }\n\n if (t === 'multiselect') {\n const arr = Array.isArray(v) ? v.filter((x) => x != null && x !== '') : [];\n if (arr.length) out[key] = arr;\n continue;\n }\n\n if (t === 'checkbox') {\n if (!!v) out[key] = true;\n continue;\n }\n\n // dropdown or text:\n if (v != null && v !== '') out[key] = v;\n }\n\n return out;\n }\n\n /**\n * Restore persisted filters from localStorage.\n * We patchValue with emitEvent:false to avoid double emission.\n *\n * NOTE:\n * - boolean-multiselect is restored into OPTION OBJECTS (for UI),\n * even though persisted payload is boolean[].\n */\n private restoreFilterState(cfg: CaptionFilter[]): void {\n const stored = localStorage.getItem(this.FILTER_KEY);\n if (!stored) return;\n\n try {\n const parsed = JSON.parse(stored);\n if (!parsed || typeof parsed !== 'object') return;\n\n const known = new Set(cfg.map((f) => f.key));\n const patch: any = {};\n for (const k of Object.keys(parsed)) {\n if (known.has(k)) patch[k] = parsed[k];\n }\n\n for (const f of cfg) {\n const t = f.type ?? 'text';\n\n if (t === 'boolean-multiselect') {\n // parsed payload is boolean[]; map -> option objects\n patch[f.key] = this.normalizeBooleanMultiSelection(patch[f.key], f);\n continue;\n }\n\n if (t === 'multiselect') {\n const val = patch[f.key];\n if (val == null) patch[f.key] = [];\n else if (!Array.isArray(val)) patch[f.key] = [val];\n continue;\n }\n\n if (t === 'checkbox') {\n patch[f.key] = !!patch[f.key];\n continue;\n }\n }\n\n this.filtersForm.patchValue(patch, { emitEvent: false });\n } catch {\n // ignore invalid state\n }\n }\n\n // ---------------------------------------------------------------------------\n // Columns\n // ---------------------------------------------------------------------------\n\n onColumnSelectionChange(newSelection: TableColumn[]): void {\n this.selectedColumns = newSelection;\n this.applyColumns();\n }\n\n /** Keep selection in original column order (stable UX) */\n get selectedColumns(): TableColumn[] {\n return this._selectedColumns;\n }\n set selectedColumns(val: TableColumn[]) {\n const wanted = new Set((val ?? []).map((v) => v.field));\n this._selectedColumns = (this.columns ?? []).filter((c) => wanted.has(c.field));\n }\n\n applyColumns(): void {\n this.emitColumns(this._selectedColumns);\n this.persistState(this._selectedColumns, this.COLUMN_KEY);\n }\n\n resetColumns(): void {\n this._selectedColumns = [...(this.columns ?? [])];\n this.applyColumns();\n }\n\n private emitColumns(cols: TableColumn[]): void {\n this.applyColumnsEvent.emit((cols ?? []).map((c) => c.field));\n }\n\n private restoreColumnState(): void {\n const stored = localStorage.getItem(this.COLUMN_KEY);\n if (!stored) {\n this.emitColumns(this._selectedColumns);\n return;\n }\n\n try {\n const parsed = JSON.parse(stored);\n if (!Array.isArray(parsed)) {\n this.emitColumns(this._selectedColumns);\n return;\n }\n\n const valid = parsed.filter((sc: any) =>\n (this.columns ?? []).some((c) => c.field === sc.field)\n );\n if (!valid.length) {\n this.emitColumns(this._selectedColumns);\n return;\n }\n\n this.selectedColumns = valid;\n this.emitColumns(this._selectedColumns);\n } catch {\n this.emitColumns(this._selectedColumns);\n }\n }\n\n // ---------------------------------------------------------------------------\n // UI actions\n // ---------------------------------------------------------------------------\n\n emitSearch(query: string): void {\n this.searchChange.emit(query ?? '');\n }\n\n handleActionClick(actionPayload: any): void {\n this.actionClick.emit(actionPayload);\n }\n\n // ---------------------------------------------------------------------------\n // Utilities\n // ---------------------------------------------------------------------------\n\n hasFormValues(): boolean {\n const v = this.filtersForm?.value ?? {};\n return Object.values(v).some((x) => {\n if (x == null || x === '') return false;\n if (Array.isArray(x)) return x.length > 0;\n if (typeof x === 'object') return Object.keys(x).length > 0;\n return true;\n });\n }\n\n clearSelectFilter(key: string): void {\n this.filtersForm.get(key)?.setValue([], { emitEvent: true });\n }\n\n resetFilters(): void {\n this.filtersForm.reset({}, { emitEvent: true });\n localStorage.removeItem(this.FILTER_KEY);\n this.filtersPopover?.hide();\n }\n\n private persistState(state: any, key: string): void {\n const isEmpty =\n state == null ||\n (Array.isArray(state) && state.length === 0) ||\n (typeof state === 'object' && !Array.isArray(state) && Object.keys(state).length === 0);\n\n if (isEmpty) localStorage.removeItem(key);\n else localStorage.setItem(key, JSON.stringify(state));\n }\n\n getOptionLabelField(control: CaptionFilter): string {\n return (control?.optionLabel ?? 'label') as string;\n }\n\n getSelectedLabels(value: any, control: CaptionFilter): string {\n const arr = Array.isArray(value) ? value : [];\n const labelField = this.getOptionLabelField(control);\n\n return arr\n .map((x) => (x && typeof x === 'object' ? x[labelField] : String(x ?? '')))\n .filter((s) => !!s)\n .join(', ');\n }\n}","<div class=\"flex justify-content-between border-bottom-1 border-300 p-2\">\n <!-- Left: Tabs + Global actions -->\n <div class=\"flex align-items-center gap-2\">\n <phoenix-data-table-tabs\n [attr.data-cy]=\"'table-select-button-' + (tableConfiguration?.tabs?.key ?? 'tabs')\"\n [actions]=\"tableConfiguration?.tabs\"\n (actionClick)=\"actionClick.emit($event)\"\n />\n\n @for (action of (tableConfiguration?.globalActions ?? []); track action?.key ?? $index) {\n <phoenix-data-table-action\n [actionConfig]=\"action\"\n (actionClick)=\"actionClick.emit($event)\"\n />\n }\n </div>\n\n <!-- Right: caption filters + icons + search + more -->\n <div class=\"flex align-items-center gap-2\">\n <!-- Filters in caption row -->\n @for (control of (filters ?? []); track control.key) {\n @if (control.isInCaption) {\n @switch (control.type ?? (control.options?.length ? 'dropdown' : 'text')) {\n @case ('dropdown') {\n <p-select\n class=\"w-12rem\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [optionValue]=\"control.optionValue ?? 'key'\"\n [formControl]=\"$any(filtersForm.get(control.key))\"\n [showClear]=\"true\"\n placeholder=\"{{ control.label | translate }}\"\n (onClear)=\"filtersForm.get(control.key)?.setValue('')\"\n />\n }\n\n @case ('multiselect') {\n <p-multiselect\n class=\"w-12rem\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [optionValue]=\"control.optionValue ?? 'key'\"\n [formControl]=\"$any(filtersForm.get(control.key))\"\n [showClear]=\"true\"\n placeholder=\"{{ control.label | translate }}\"\n (onClear)=\"clearSelectFilter(control.key)\"\n />\n }\n\n @case ('boolean-multiselect') {\n <p-multiselect\n class=\"w-12rem\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [formControl]=\"$any(filtersForm.get(control.key))\"\n [showClear]=\"true\"\n placeholder=\"{{ control.label | translate }}\"\n (onClear)=\"clearSelectFilter(control.key)\"\n >\n <ng-template pTemplate=\"selectedItems\" let-value>\n @if ((value?.length ?? 0) === 0) {\n <span class=\"p-2 text-500\">{{ control.label | translate }}</span>\n } @else {\n <span class=\"p-2\">{{ getSelectedLabels(value, control) }}</span>\n }\n </ng-template>\n\n <ng-template pTemplate=\"item\" let-item>\n <span>{{ item?.[control.optionLabel ?? 'label'] }}</span>\n </ng-template>\n </p-multiselect>\n }\n\n @case ('checkbox') {\n <p-checkbox binary=\"true\" [formControl]=\"$any(filtersForm.get(control.key))\" />\n }\n\n @default {\n <input\n class=\"w-12rem\"\n pInputText\n [formControl]=\"$any(filtersForm.get(control.key))\"\n placeholder=\"{{ control.label | translate }}\"\n />\n }\n }\n }\n }\n\n <!-- Filter icon -->\n @if (tableConfiguration?.hasFilter) {\n @if (hasFormValues()) {\n <p-overlaybadge class=\"p-2\" severity=\"danger\">\n <span pRipple class=\"cursor-pointer\" (click)=\"filtersPopover?.toggle($event)\">\n <i class=\"pi pi-filter\"></i>\n </span>\n </p-overlaybadge>\n } @else {\n <span pRipple class=\"cursor-pointer p-2\" (click)=\"filtersPopover?.toggle($event)\">\n <i class=\"pi pi-filter\"></i>\n </span>\n }\n }\n\n <!-- Columns icon -->\n @if (tableConfiguration?.hasColumns) {\n @if (columnsChanged) {\n <p-overlaybadge class=\"p-2\" severity=\"danger\">\n <span pRipple class=\"cursor-pointer\" (click)=\"columnsPopover?.toggle($event)\">\n <i class=\"pi pi-sliders-v\"></i>\n </span>\n </p-overlaybadge>\n } @else {\n <span pRipple class=\"cursor-pointer p-2\" (click)=\"columnsPopover?.toggle($event)\">\n <i class=\"pi pi-sliders-v\"></i>\n </span>\n }\n }\n\n <!-- Search + More -->\n <div class=\"flex\">\n @if (tableConfiguration?.hasSearch) {\n <p-iconfield>\n <p-inputicon styleClass=\"pi pi-search\" />\n <input\n type=\"text\"\n pInputText\n (input)=\"emitSearch($any($event.target).value)\"\n placeholder=\"{{ 'SEARCH_KEYWORD' | translate }}\"\n />\n </p-iconfield>\n }\n\n @if (tableConfiguration?.hasMore && tableConfiguration?.moreActions) {\n <phoenix-data-table-action\n [actionConfig]=\"tableConfiguration.moreActions\"\n (actionClick)=\"actionClick.emit($event)\"\n />\n }\n </div>\n </div>\n</div>\n\n<!-- Filters Popover -->\n<p-popover #filtersPopover>\n <div class=\"flex flex-column gap-3 w-25rem\">\n <div class=\"flex justify-content-between align-items-center\">\n <div class=\"text-lg font-bold\">{{ 'LABELS.FILTERS' | translate }}</div>\n <p-button\n icon=\"pi pi-refresh\"\n [text]=\"true\"\n label=\"{{ 'ACTION.CLEAR' | translate }}\"\n class=\"mr-2\"\n (click)=\"resetFilters()\"\n />\n </div>\n\n <form [formGroup]=\"filtersForm\">\n @for (control of (filters ?? []); track control.key) {\n @if (!control.isInCaption) {\n @switch (control.type ?? (control.options?.length ? 'dropdown' : 'text')) {\n @case ('checkbox') {\n <div class=\"mb-2\">\n <p-checkbox binary=\"true\" [formControlName]=\"control.key\" />\n <label class=\"ml-2\">{{ control.label | translate }}</label>\n </div>\n }\n\n @case ('dropdown') {\n <div class=\"mb-2\">\n <label class=\"mb-2 block\">{{ control.label | translate }}</label>\n <p-select\n class=\"w-full\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [optionValue]=\"control.optionValue ?? 'key'\"\n [showClear]=\"true\"\n [formControlName]=\"control.key\"\n (onClear)=\"filtersForm.get(control.key)?.setValue('')\"\n />\n </div>\n }\n\n @case ('multiselect') {\n <div class=\"mb-2\">\n <p-floatlabel variant=\"on\">\n <p-multiselect\n class=\"w-full\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [optionValue]=\"control.optionValue ?? 'key'\"\n [showClear]=\"true\"\n [formControlName]=\"control.key\"\n (onClear)=\"clearSelectFilter(control.key)\"\n />\n <label>{{ control.label | translate }}</label>\n </p-floatlabel>\n </div>\n }\n\n @case ('boolean-multiselect') {\n <div class=\"mb-2\">\n <p-floatlabel variant=\"on\">\n <p-multiselect\n class=\"w-full\"\n [options]=\"control.options ?? []\"\n [optionLabel]=\"control.optionLabel ?? 'label'\"\n [showClear]=\"true\"\n [formControlName]=\"control.key\"\n (onClear)=\"clearSelectFilter(control.key)\"\n >\n <ng-template pTemplate=\"selectedItems\" let-value>\n @if ((value?.length ?? 0) === 0) {\n <span class=\"p-2 text-500\">{{ control.label | translate }}</span>\n } @else {\n <span class=\"p-2\">{{ getSelectedLabels(value, control) }}</span>\n }\n </ng-template>\n\n <ng-template pTemplate=\"item\" let-item>\n <span>{{ item?.[control.optionLabel ?? 'label'] }}</span>\n </ng-template>\n </p-multiselect>\n <label>{{ control.label | translate }}</label>\n </p-floatlabel>\n </div>\n }\n\n @default {\n <div class=\"mb-2\">\n <label class=\"mb-2 block\">{{ control.label | translate }}</label>\n <input\n class=\"w-full\"\n pInputText\n [formControlName]=\"control.key\"\n placeholder=\"{{ control.label | translate }}\"\n />\n </div>\n }\n }\n }\n }\n </form>\n </div>\n</p-popover>\n\n<!-- Columns Popover -->\n<p-popover #columnsPopover>\n <div class=\"flex flex-column gap-3 w-25rem\">\n <div class=\"flex justify-content-between align-items-center\">\n <div class=\"text-lg font-bold\">{{ 'LABELS.COLUMNS' | translate }}</div>\n <p-button\n icon=\"pi pi-eye\"\n [text]=\"true\"\n label=\"{{ 'ACTION.SHOW_ALL' | translate }}\"\n class=\"mr-2\"\n (click)=\"resetColumns()\"\n />\n </div>\n\n <p-listbox\n [options]=\"columns\"\n [ngModel]=\"_selectedColumns\"\n (ngModelChange)=\"onColumnSelectionChange($event)\"\n [multiple]=\"true\"\n [metaKeySelection]=\"false\"\n [listStyle]=\"{ 'max-height': '420px' }\"\n [attr.data-cy]=\"'table-list-box'\"\n >\n <ng-template pTemplate=\"item\" let-item>\n @if (item | isSelected : selectedColumns) {\n <i class=\"pi pi-eye\"></i>\n } @else {\n <i class=\"pi pi-eye-slash\"></i>\n }\n <span class=\"ml-2\">{{ item.header | translate }}</span>\n </ng-template>\n </p-listbox>\n </div>\n</p-popover>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isBoolean',\n standalone: true,\n pure: false,\n})\nexport class IsBooleanPipe implements PipeTransform {\n transform(value: string | null | undefined): any {\n return typeof value === 'boolean';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DatePipe } from '@angular/common';\n\n@Pipe({\n name: 'cell',\n standalone: true,\n pure: false,\n})\nexport class TableCellPipe implements PipeTransform {\n constructor(private datePipe: DatePipe) {}\n\n transform(obj: any, col: any, dateFormat: string = 'dd.MM.yyyy'): any {\n const value = this.getNestedValue(obj, col.field);\n if (!value) return '--';\n\n switch (col.columnType) {\n case 'DATE':\n return this.datePipe.transform(value, dateFormat);\n\n case 'DATE_COMPLEX':\n return this.datePipe.transform(value, dateFormat + ' | HH:mm');\n\n case 'RICH_TEXT':\n return value;\n\n case 'CUSTOM':\n return col.customRenderer ? col.customRenderer(value) : value;\n\n default:\n return value?.toString();\n }\n }\n\n getNestedValue(obj: any, path: string): string {\n if (!obj || !path) return '';\n\n let value: any;\n\n if (!path.includes('.')) {\n value = obj[path];\n } else {\n value = path.split('.').reduce((acc, part) => acc?.[part], obj);\n }\n\n return value != null ? value.toString() : '';\n }\n}\n","import * as XLSX from 'xlsx';\nimport { DatePipe } from '@angular/common';\n// @ts-ignore - pdfmake types may not be available\nimport pdfMake from 'pdfmake/build/pdfmake';\n// @ts-ignore - pdfmake vfs fonts\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\n/**\n * Defines a column that can be exported (visible in PDF/CSV).\n */\nexport interface ExportColumn {\n field: string; // Property name in row object (supports dot notation)\n header: string; // i18n key or plain text (will be translated via t())\n columnType?: string; // Column type (DATE, BOOLEAN, etc.), optional fallback\n}\n\n/* ----------------------------- Helpers ----------------------------- */\n\n/**\n * Safely retrieves nested object property using dot notation.\n * Example: \"user.address.city\" → row.user.address.city\n */\nfunction getNestedValue(obj: any, path: string): any {\n try {\n if (obj && Object.prototype.hasOwnProperty.call(obj, path)) {\n return obj[path]?.key ?? obj[path];\n }\n const keys = path.split('.');\n let current = obj;\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key];\n } else {\n return undefined;\n }\n }\n return current?.key ?? current;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Sanitizes text:\n * - Removes HTML tags\n * - Replaces &nbsp; and non-breaking spaces\n * - Normalizes Unicode (keeps German umlauts and Serbian letters)\n * - Removes emoji characters (since PDF fonts don't support them properly)\n */\nfunction sanitizeText(v: any): string {\n const s = (v ?? '').toString();\n const noHtml = s.replace(/<[^>]*>/g, '');\n\n // Remove emoji characters - they don't render properly in PDF\n // Emoji ranges: U+1F300–U+1F9FF, U+2600–U+26FF, U+2700–U+27BF, U+FE00–U+FE0F, U+1F900–U+1F9FF, U+1F1E0–U+1F1FF\n const emojiRegex =\n /[\\u{1F300}-\\u{1F9FF}\\u{2600}-\\u{26FF}\\u{2700}-\\u{27BF}\\u{FE00}-\\u{FE0F}\\u{1F900}-\\u{1F9FF}\\u{1F1E0}-\\u{1F1FF}]/gu;\n const noEmoji = noHtml.replace(emojiRegex, '');\n\n return noEmoji\n .replace(/&nbsp;/g, ' ')\n .replace(/\\u00A0/g, ' ')\n .normalize('NFKC')\n .trim();\n}\n\n/**\n * Checks if a CSV value must be quoted (contains delimiter, quotes or newlines).\n */\nfunction needsQuotesCSV(value: string, delimiter: string): boolean {\n const pattern = new RegExp(`[\\\"\\\\n${delimiter === ',' ? ',' : ';'}]`);\n return pattern.test(value);\n}\n\n/**\n * Formats a date value using Angular DatePipe and the provided locale.\n */\nfunction formatDateValue(val: any, pattern: string, locale: string): string {\n try {\n const d = new Date(val);\n if (!isNaN(d.getTime())) {\n const dp = new DatePipe(locale || 'en-US');\n return dp.transform(d, pattern) ?? '';\n }\n } catch {}\n return String(val ?? '');\n}\n\n/* ------------------------- Display resolver ------------------------ */\n\n/**\n * Converts raw row values into human-readable strings for export.\n * Handles various column types: DATE, LIST, BOOLEAN, etc.\n */\nfunction getDisplayValue(\n row: any,\n col: ExportColumn,\n columnTypeMap: Record<string, string>,\n columnTypeEnum: any,\n t?: (k: string) => string,\n locale: string = 'en-US',\n): string {\n const field = col.field;\n const type = columnTypeMap[field] || col.columnType;\n const val = getNestedValue(row, field);\n\n if (val === null || val === undefined) return '';\n\n switch (type) {\n case columnTypeEnum.DATE:\n return formatDateValue(val, 'dd.MM.yyyy HH:mm', locale);\n\n case columnTypeEnum.DATE_WITHOUT_TIME:\n return formatDateValue(val, 'dd.MM.yyyy', locale);\n\n case columnTypeEnum.TAG:\n return (val?.name ?? val)?.toString();\n\n case columnTypeEnum.LIST_TAG:\n case columnTypeEnum.LIST:\n return Array.isArray(val)\n ? val.map((x: any) => x?.name ?? x).join(', ')\n : String(val);\n\n case columnTypeEnum.OBJ_TAG:\n return (val?.value ?? val)?.toString();\n\n case columnTypeEnum.BOOLEAN: {\n // Translate YES/NO if translation function is provided\n const yes = t ? t('ACTION.YES') : 'Yes';\n const no = t ? t('ACTION.NO') : 'No';\n return val === true || val === 'true' ? yes : no;\n }\n\n case columnTypeEnum.TEXT_AREA:\n case columnTypeEnum.TEXT:\n case columnTypeEnum.TIMEPERIOD:\n default:\n if (typeof val === 'object' && !Array.isArray(val)) {\n const prefer = val.name ?? val.label ?? val.value ?? val.key ?? '';\n return prefer ? String(prefer) : JSON.stringify(val);\n }\n return String(val);\n }\n}\n\n/* -------------------------- Export: PDF ---------------------------- */\n\nexport interface ExportOptions {\n locale?: string; // e.g. 'de-DE' for German date format\n delimiter?: ',' | ';'; // CSV delimiter (',' for EN, ';' for DE Excel)\n sheetName?: string; // Excel sheet name (default: 'Sheet1')\n autoWidth?: boolean; // Auto-adjust column widths (default: true)\n}\n\nfunction trimExcelLineBreaks(s: string): string {\n return s\n .replace(/^[\\r\\n]+/, '') // remove leading line breaks\n .replace(/[\\r\\n]+$/, '') // remove trailing line breaks\n .replace(/(\\r?\\n){2,}/g, '\\n'); // collapse multiple to a single\n}\n\nfunction collapseInlineSpaces(s: string): string {\n if (!s) return '';\n return s\n .replace(/\\u00A0/g, ' ')\n .replace(/[^\\S\\r\\n]+/g, ' ')\n .trim();\n}\n\n/**\n * Loads Noto Sans font from CDN for better emoji support\n */\nasync function loadNotoSansFont(): Promise<string | null> {\n try {\n // Noto Sans has better Unicode and emoji support than Roboto\n // Try jsDelivr CDN first (more reliable)\n const response = await fetch(\n 'https://cdn.jsdelivr.net/gh/google/fonts@main/ofl/notosans/NotoSans-Regular.ttf',\n );\n if (!response.ok) {\n return null;\n }\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n let binary = '';\n const chunkSize = 8192;\n for (let i = 0; i < bytes.length; i += chunkSize) {\n const chunk = bytes.subarray(i, i + chunkSize);\n binary += String.fromCharCode.apply(null, Array.from(chunk));\n }\n return btoa(binary);\n } catch (error) {\n console.warn('Failed to load Noto Sans font from CDN:', error);\n return null;\n }\n}\n\n/**\n * Exports table rows to a PDF file using pdfmake.\n * - Uses pdfmake which has excellent Unicode support for Serbian characters (ć, č, đ, š, ž)\n * - Respects only visible columns\n * - Translates headers with provided translation function\n * - Attempts to load Noto Sans font for better emoji support\n */\nexport async function exportRowsToPdf(\n columns: ExportColumn[],\n rows: any[],\n columnTypeMap: Record<string, string>,\n columnTypeEnum: any,\n t: (key: string) => string,\n fileName = 'table.pdf',\n options: ExportOptions = {},\n): Promise<void> {\n if (!columns?.length) return;\n\n const locale = options.locale || 'en-US';\n\n /* =========================\n HEADERS\n ========================= */\n const headers = columns.map((c) => sanitizeText(t(c.header)));\n\n /* =========================\n BODY ROWS\n ========================= */\n const bodyRows = (rows ?? []).map((row) =>\n columns.map((col) => {\n const type = columnTypeMap[col.field] || col.columnType;\n\n if (type === columnTypeEnum.LIST || type === columnTypeEnum.LIST_TAG) {\n const rawVal = getNestedValue(row, col.field);\n const items = Array.isArray(rawVal)\n ? rawVal.map((x: any) => x?.name ?? x)\n : String(\n getDisplayValue(\n row,\n col,\n columnTypeMap,\n columnTypeEnum,\n t,\n locale,\n ),\n ).split(/,\\s*/);\n\n const cleaned = items\n .map((it) => collapseInlineSpaces(String(it)))\n .filter(Boolean);\n\n return sanitizeText(cleaned.join(',\\n'));\n }\n\n const raw = String(\n getDisplayValue(row, col, columnTypeMap, columnTypeEnum, t, locale),\n );\n\n return sanitizeText(collapseInlineSpaces(raw));\n }),\n );\n\n /* =========================\n FONTS\n ========================= */\n if (pdfFonts && (pdfFonts as any).pdfMake) {\n (pdfMake as any).vfs = (pdfFonts as any).pdfMake.vfs;\n } else if (pdfFonts && (pdfFonts as any).vfs) {\n (pdfMake as any).vfs = (pdfFonts as any).vfs;\n } else {\n (pdfMake as any).vfs = (pdfFonts as any) || {};\n }\n\n try {\n const notoSansFont = await loadNotoSansFont();\n if (notoSansFont) {\n (pdfMake as any).fonts ??= {};\n (pdfMake as any).fonts.NotoSans = {\n normal: 'NotoSans-Regular.ttf',\n bold: 'NotoSans-Bold.ttf',\n italics: 'NotoSans-Italic.ttf',\n bolditalics: 'NotoSans-BoldItalic.ttf',\n };\n (pdfMake as any).vfs['NotoSans-Regular.ttf'] = notoSansFont;\n (pdfMake as any).vfs['NotoSans-Bold.ttf'] = notoSansFont;\n }\n } catch {\n console.warn('NotoSans not loaded, fallback to Roboto');\n }\n\n /* =========================\n FIXED TABLE WIDTH LOGIC\n ========================= */\n const fixedTableWidth = 750;\n const listColumnWidth = 80;\n const minColumnWidth = 40;\n\n const listIndexes: number[] = [];\n const regularIndexes: number[] = [];\n\n columns.forEach((col, i) => {\n const type = columnTypeMap[col.field] || col.columnType;\n if (type === columnTypeEnum.LIST || type === columnTypeEnum.LIST_TAG) {\n listIndexes.push(i);\n } else {\n regularIndexes.push(i);\n }\n });\n\n const reservedWidth = listIndexes.length * listColumnWidth;\n const availableWidth = fixedTableWidth - reservedWidth;\n\n const baseRegularWidth =\n regularIndexes.length > 0\n ? Math.max(minColumnWidth, availableWidth / regularIndexes.length)\n : minColumnWidth;\n\n let columnWidths = columns.map((_, i) =>\n listIndexes.includes(i) ? listColumnWidth : baseRegularWidth,\n );\n\n /* === NORMALIZACIJA (TAČNO 750px) === */\n const regularSum = regularIndexes.reduce(\n (sum, i) => sum + columnWidths[i],\n 0,\n );\n\n if (regularSum > 0) {\n const scaleFactor = availableWidth / regularSum;\n console.log(scaleFactor);\n // 1. skaliranje + floor\n regularIndexes.forEach((i) => {\n columnWidths[i] = Math.floor(columnWidths[i] * scaleFactor);\n });\n\n // 2. korekcija razlike (1px po koloni)\n let diff = fixedTableWidth - columnWidths.reduce((sum, w) => sum + w, 0);\n\n let idx = 0;\n while (diff !== 0 && regularIndexes.length) {\n const i = regularIndexes[idx % regularIndexes.length];\n columnWidths[i] += diff > 0 ? 1 : -1;\n diff += diff > 0 ? -1 : 1;\n idx++;\n }\n }\n\n /* =========================\n TABLE BODY\n ========================= */\n const tableBody = [\n headers.map((header) => ({\n text: header,\n style: 'tableHeader',\n })),\n ...bodyRows.map((row) =>\n row.map((cell) => ({\n text: cell || '',\n style: 'tableCell',\n noWrap: false,\n })),\n ),\n ];\n console.log(columnWidths);\n /* =========================\n PDF DEFINITION\n ========================= */\n const docDefinition: any = {\n pageOrientation: 'landscape',\n pageSize: 'A4',\n pageMargins: [25, 30, 15, 30],\n\n content: [\n {\n columns: [\n {\n width: fixedTableWidth,\n table: {\n headerRows: 1,\n widths: columnWidths,\n body: tableBody,\n },\n layout: {\n hLineWidth: () => 0,\n vLineWidth: () => 0,\n paddingLeft: () => 3,\n paddingRight: () => 3,\n paddingTop: () => 3,\n paddingBottom: () => 3,\n fillColor: (rowIndex: number) =>\n rowIndex === 0\n ? [41, 128, 186]\n : (rowIndex - 1) % 2 === 0\n ? '#f5f5f5'\n : null,\n },\n },\n ],\n },\n ],\n\n styles: {\n tableHeader: {\n fontSize: 11,\n bold: true,\n color: '#ffffff',\n margin: [0, 5, 0, 5],\n },\n tableCell: {\n fontSize: 9,\n margin: [0, 5, 0, 5],\n },\n },\n\n defaultStyle: {\n font: (pdfMake as any).fonts?.NotoSans ? 'NotoSans' : 'Roboto',\n },\n };\n\n pdfMake.createPdf(docDefinition).download(fileName);\n}\n\n/* -------------------------- Export: Excel -------------------------- */\n\n/**\n * Exports table rows to an Excel file (.xlsx).\n * - Includes only visible columns\n * - Translates headers via provided translation function\n * - Supports auto-width columns and custom sheet names\n * - Handles various data types including dates, booleans, and lists\n */\nexport function exportRowsToExcel(\n columns: ExportColumn[],\n rows: any[],\n columnTypeMap: Record<string, string>,\n columnTypeEnum: any,\n t: (key: string) => string,\n fileName = 'table.xlsx',\n options: ExportOptions = {},\n): void {\n if (!columns?.length) return;\n\n const locale = options.locale || 'en-US';\n const sheetName = options.sheetName || 'Sheet1';\n const autoWidth = options.autoWidth !== false; // default to true\n\n // Prepare headers\n const headers = columns.map((c) => sanitizeText(t(c.header)));\n\n // Prepare data rows\n const data = (rows ?? []).map((row) =>\n columns.map((col) => {\n const raw = getDisplayValue(\n row,\n col,\n columnTypeMap,\n columnTypeEnum,\n t,\n locale,\n );\n // Convert escaped \\n to real newline characters\n let fixedText =\n typeof raw === 'string' ? raw.replace(/\\\\n/g, '\\n') : String(raw);\n\n // Preserve newlines during sanitization by temporarily replacing them\n const tempMarker = '___NEWLINE___';\n const withMarker = fixedText.replace(/\\r?\\n/g, tempMarker);\n const sanitized = sanitizeText(withMarker);\n // Restore newlines after sanitization\n fixedText = sanitized.replace(new RegExp(tempMarker, 'g'), '\\n');\n\n return fixedText;\n }),\n );\n\n // Create worksheet data\n const worksheetData = [headers, ...data];\n\n // Create workbook and worksheet\n const workbook = XLSX.utils.book_new();\n const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);\n\n // --- ✅ FIX: Apply wrapText to all cells so newlines show in Excel\n for (const cellAddress in worksheet) {\n if (Object.prototype.hasOwnProperty.call(worksheet, cellAddress)) {\n if (cellAddress[0] === '!') continue; // skip metadata\n const cell = worksheet[cellAddress];\n if (!cell.s) cell.s = {};\n if (!cell.s.alignment) cell.s.alignment = {};\n cell.s.alignment.wrapText = true;\n }\n }\n\n // Auto-adjust column widths if enabled\n if (autoWidth) {\n const colWidths = columns.map((col, index) => {\n const maxLength = Math.max(\n headers[index]?.length || 0,\n ...data.map((row) => (row[index] || '').toString().length),\n );\n return { wch: Math.min(Math.max(maxLength + 2, 10), 50) }; // min 10, max 50\n });\n worksheet['!cols'] = colWidths;\n }\n\n // Add worksheet to workbook\n XLSX.utils.book_append_sheet(workbook, worksheet, sheetName);\n\n // Generate Excel file and trigger download\n XLSX.writeFile(workbook, fileName);\n}\n\n/* -------------------------- Export: CSV ---------------------------- */\n\n/**\n * Exports table rows to a CSV file.\n * - Includes only visible columns\n * - Translates headers via provided translation function\n * - Escapes quotes and adds UTF-8 BOM (so Excel reads special chars correctly)\n */\nexport function exportRowsToCsv(\n columns: ExportColumn[],\n rows: any[],\n columnTypeMap: Record<string, string>,\n columnTypeEnum: any,\n t: (key: string) => string,\n fileName = 'table.csv',\n options: ExportOptions = {},\n): void {\n if (!columns?.length) return;\n\n const locale = options.locale || 'en-US';\n const delimiter = options.delimiter || ',';\n\n const headers = columns.map((c) => sanitizeText(t(c.header)));\n const lines = (rows ?? []).map((row) =>\n columns\n .map((col) => {\n const raw = getDisplayValue(\n row,\n col,\n columnTypeMap,\n columnTypeEnum,\n t,\n locale,\n );\n // keep multiline, but remove useless blank line at start/end\n const v = trimExcelLineBreaks(sanitizeText(raw));\n const safe = v.replace(/\"/g, '\"\"'); // escape double quotes\n return needsQuotesCSV(v, delimiter) ? `\"${safe}\"` : safe;\n })\n .join(delimiter),\n );\n\n const csv = [headers.join(delimiter), ...lines].join('\\n');\n\n // Add UTF-8 BOM → Excel correctly recognizes UTF-8 (handles č, ć, š, đ, ž, ä, ö, ü, ß, etc.)\n const BOM = '\\uFEFF';\n const blob = new Blob([BOM + csv], { type: 'text/csv;charset=utf-8;' });\n\n const a = document.createElement('a');\n const url = URL.createObjectURL(blob);\n a.href = url;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n}\n\n/* --------------------------- File name ----------------------------- */\n\n/**\n * Builds a file name with pattern: tableKey_YYYY-MM-DD_HH-mm.ext\n * Example: risks_2025-09-10_14-32.xlsx\n */\nexport function buildFileName(baseKey: string, ext: string = 'xlsx'): string {\n const now = new Date();\n const yyyy = now.getFullYear();\n const MM = String(now.getMonth() + 1).padStart(2, '0');\n const dd = String(now.getDate()).padStart(2, '0');\n const hh = String(now.getHours()).padStart(2, '0');\n const mm = String(now.getMinutes()).padStart(2, '0');\n return `${baseKey}_${yyyy}-${MM}-${dd}_${hh}-${mm}.${ext}`;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n inject,\n signal,\n} from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { AvatarModule } from 'primeng/avatar';\nimport { BadgeModule } from 'primeng/badge';\nimport { ChipModule } from 'primeng/chip';\nimport { PanelModule } from 'primeng/panel';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { Table, TableModule } from 'primeng/table';\nimport { TagModule } from 'primeng/tag';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { PopoverModule } from 'primeng/popover';\n\nimport { TimePeriodPipe } from '../../../pipes/time-period.pipe';\nimport { InitialsPipe } from '../../../utils/initials.pipe';\nimport { PhoenixDataTableActionComponent } from '../phoenix-data-table-action/phoenix-data-table-action.component';\nimport { TableCaptionComponent } from '../table-caption/table-caption.component';\nimport {\n tableActionType,\n tableButtonContext,\n tableColumnType,\n tableSelectionType,\n} from '../utils/dataTable.enum';\nimport { IsBooleanPipe } from '../utils/is-boolean.pipe';\nimport { TableCellPipe } from '../utils/table-cell.pipe';\nimport {\n buildFileName,\n exportRowsToExcel,\n exportRowsToPdf,\n} from '../utils/table.utils';\nimport {\n InitialSortMeta,\n SortOrder,\n TableAction,\n TableConfiguration,\n} from '../utils/dataTable.interface';\n\n/**\n * Default \"More\" dropdown actions used when tableConfiguration.moreActions is missing.\n * Keeps behavior consistent across tables.\n */\nconst DEFAULT_MORE_ACTIONS: TableAction = {\n context: tableButtonContext.MORE,\n type: tableActionType.MENU,\n buttonType: 'multiselect',\n label: '',\n items: [\n { key: 'EXPORT_PDF', label: 'ACTION.EXPORT_PDF', icon: 'pi pi-file-pdf' },\n {\n key: 'EXPORT_EXCEL',\n label: 'ACTION.EXPORT_EXCEL',\n icon: 'pi pi-file-excel',\n },\n ],\n};\n\nexport type SortMeta = { field: string; order: 1 | -1 };\nexport type ColumnTypeMap = Record<string, string>;\nexport interface SortRequest {\n reqId: number;\n data: any[];\n multiSortMeta: SortMeta[];\n columnTypeMap: ColumnTypeMap;\n dateTypeKey?: string; // e.g. 'DATE'\n}\n\nexport interface SortResponse {\n reqId: number;\n sorted: any[];\n}\n@Component({\n selector: 'phoenix-table',\n standalone: true,\n imports: [\n CommonModule,\n TableModule,\n TableCaptionComponent,\n TranslateModule,\n PhoenixDataTableActionComponent,\n TagModule,\n AvatarModule,\n TooltipModule,\n TableCellPipe,\n SkeletonModule,\n PanelModule,\n PopoverModule,\n ChipModule,\n InitialsPipe,\n TimePeriodPipe,\n IsBooleanPipe,\n BadgeModule,\n ],\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.css'],\n})\nexport class TableComponent implements OnChanges, OnDestroy {\n /** PrimeNG Table reference (used for sort meta + virtual scroll helpers). */\n @ViewChild('dt') dt!: Table;\n\n translateService = inject(TranslateService);\n private cdr = inject(ChangeDetectorRef);\n\n // ============================================================\n // DATASETS\n // ============================================================\n /**\n * originalData:\n * The raw dataset received through @Input() set data().\n * We never mutate this array; it is the \"source of truth\".\n */\n originalData: any[] = [];\n\n /**\n * allData:\n * The dataset after applying filters and global search.\n * This is the \"base dataset\" that sorting runs on.\n */\n allData: any[] = [];\n\n /**\n * tableData:\n * The final dataset rendered by the table.\n * IMPORTANT: This is still the full array; PrimeNG virtual scroll renders only visible rows.\n */\n tableData: any[] = [];\n\n /** Total record count shown (used in footer and table metadata). */\n totalRecords = 0;\n\n // ============================================================\n // SELECTION / COLUMNS\n // ============================================================\n /** Selected rows (signal so UI updates fast). */\n selectedItems = signal<any[]>([]);\n\n /** Currently visible columns (based on table-caption selection). */\n selectedColumns: any[] = [];\n\n searchQuery = '';\n bulkMode = false;\n\n selectionTypeEnum = tableSelectionType;\n columnTypeEnum = tableColumnType;\n\n /** Latest active filters coming from table-caption. */\n private currentFilters: Record<string, any> = {};\n\n /**\n * columnTypeMap:\n * field -> columnType (DATE/BOOLEAN/TEXT/etc).\n * The sort worker uses this to normalize values correctly (e.g., DATE parsing, BOOLEAN 0/1).\n */\n columnTypeMap: Record<string, string> = {};\n\n dateFormat = 'dd.MM.yyyy';\n\n // ============================================================\n // INPUTS\n // ============================================================\n @Input() columns: any[] = [];\n @Input() selectedColumnsInput: any[] = [];\n @Input() tableConfiguration!: TableConfiguration;\n @Input() filters: any;\n\n // ============================================================\n // OUTPUTS\n // ============================================================\n @Output() actionClick = new EventEmitter<any>();\n @Output() rowSelection = new EventEmitter<any>();\n @Output() checkBoxSelection = new EventEmitter<any>();\n @Output() saveColumns = new EventEmitter<string[]>();\n\n // ============================================================\n // WORKER SORT (OFF-MAIN THREAD)\n // ============================================================\n private sortWorker: Worker | null = null;\n\n /**\n * reqId counters ensure we can ignore outdated results\n * if user triggers multiple sorts quickly.\n */\n private workerReqId = 0;\n private latestWorkerReqId = 0;\n\n /**\n * lastSortKey prevents re-sorting when PrimeNG emits same multiSortMeta repeatedly.\n */\n private lastSortKey = '';\n\n /** Ensures initial sort runs only once per dataset/config change */\n private initialSortApplied = false;\n\n /** Remembers which field was used last time for initial sort (optional safety) */\n private initialSortFieldApplied: string | null = null;\n\n /** True while initial sort is running to avoid \"flash\" of unsorted data */\n initialSortLoading = false;\n\n // /** How many skeleton rows to render while initial sort/data is loading */\n // skeletonRowCount = 8;\n\n // /** Array used by Angular @for (must be iterable) */\n // skeletonRows = Array.from({ length: this.skeletonRowCount });\n\n private createSortWorkerInline(): Worker {\n const code = `\n const compareStringsNatural = (a,b) => a.localeCompare(b, undefined, { numeric:true, sensitivity:'base' });\n\n const getNestedValue = (obj, path) => {\n try {\n if (!obj || !path) return undefined;\n if (Object.prototype.hasOwnProperty.call(obj, path)) {\n const v = obj[path];\n return (v && v.key !== undefined) ? v.key : v;\n }\n return path.split('.').reduce((acc, k) => (acc == null ? undefined : acc[k]), obj);\n } catch { return undefined; }\n };\n\n const getComparableValue = (val, field, columnTypeMap, dateTypeKey='DATE') => {\n if (val === null || val === undefined) return '';\n const columnType = columnTypeMap?.[field];\n\n if ((columnType || '').toString().toUpperCase() === 'BOOLEAN') {\n if (typeof val === 'boolean') return val ? 1 : 0;\n if (typeof val === 'number') return val ? 1 : 0;\n if (typeof val === 'string') {\n const s = val.trim().toLowerCase();\n if (['true','1','yes'].includes(s)) return 1;\n if (['false','0','no'].includes(s)) return 0;\n return '';\n }\n if (typeof val === 'object') {\n const v = val.value ?? val.key ?? val.enabled ?? val.checked;\n return getComparableValue(v, field, columnTypeMap, dateTypeKey);\n }\n return '';\n }\n\n if (typeof val === 'number') return val;\n\n if (typeof val === 'string') {\n if (columnType === dateTypeKey) {\n const t = Date.parse(val);\n return Number.isNaN(t) ? val.toLowerCase() : t;\n }\n return val.toLowerCase();\n }\n\n if (val instanceof Date) return val.getTime();\n\n if (typeof val === 'object') {\n if (val.from && val.to) {\n const from = Date.parse(val.from);\n const to = Date.parse(val.to);\n return (Number.isNaN(from) || Number.isNaN(to)) ? '' : (from + to);\n }\n if (Array.isArray(val) && val.length) return getComparableValue(val[0], field, columnTypeMap, dateTypeKey);\n\n for (const k of ['name','value','label','key','date']) {\n if (val[k] !== undefined && val[k] !== null) return getComparableValue(val[k], field, columnTypeMap, dateTypeKey);\n }\n for (const v of Object.values(val)) {\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n return getComparableValue(v, field, columnTypeMap, dateTypeKey);\n }\n }\n }\n return '';\n };\n\n const sortData = (data, meta, columnTypeMap, dateTypeKey='DATE') => {\n const sorted = (data || []).slice();\n if (!meta?.length) return sorted;\n\n sorted.sort((a,b) => {\n for (const s of meta) {\n const field = s.field;\n const order = s.order ?? 1;\n\n const A = getComparableValue(getNestedValue(a, field), field, columnTypeMap, dateTypeKey);\n const B = getComparableValue(getNestedValue(b, field), field, columnTypeMap, dateTypeKey);\n\n if (typeof A === 'string' && typeof B === 'string') {\n const c = compareStringsNatural(A,B);\n if (c !== 0) return c * order;\n } else {\n if (A < B) return -1 * order;\n if (A > B) return 1 * order;\n }\n }\n return 0;\n });\n\n return sorted;\n };\n\n self.addEventListener('message', (ev) => {\n const data = ev.data || {};\n const sorted = sortData(data.data, data.multiSortMeta, data.columnTypeMap, data.dateTypeKey || 'DATE');\n self.postMessage({ reqId: data.reqId, sorted });\n });\n `;\n\n const blob = new Blob([code], { type: 'text/javascript' });\n const url = URL.createObjectURL(blob);\n return new Worker(url); // classic worker, nema module MIME problema\n }\n\n constructor() {\n /**\n * Create sorting worker if supported.\n * Fallback is synchronous sort (still works, but can freeze on huge arrays).\n */\n if (typeof Worker !== 'undefined') {\n this.sortWorker = this.createSortWorkerInline();\n\n this.sortWorker.onmessage = (e: MessageEvent<SortResponse>) => {\n const { reqId, sorted } = e.data ?? ({} as any);\n if (reqId !== this.latestWorkerReqId) return;\n\n this.tableData = Array.isArray(sorted) ? sorted : [];\n this.totalRecords = this.tableData.length;\n\n // initial sort done → stop loading\n this.initialSortLoading = false;\n\n try {\n this.dt?.scrollToVirtualIndex?.(0);\n } catch {}\n this.cdr.markForCheck();\n };\n\n this.sortWorker.onerror = (err) =>\n console.error('Sort worker error:', err);\n }\n }\n\n ngOnDestroy(): void {\n this.sortWorker?.terminate();\n this.sortWorker = null;\n }\n\n // ============================================================\n // DATA INPUT\n // ============================================================\n /**\n * Whenever parent sets data, we reset base datasets and invalidate sort cache.\n */\n @Input() set data(value: any[]) {\n this.originalData = value ?? [];\n this.allData = [...this.originalData];\n\n this.lastSortKey = '';\n\n // allow re-applying initial sort for new dataset\n this.initialSortApplied = false;\n this.initialSortFieldApplied = null;\n\n // Do NOT immediately render unsorted data.\n // We'll render after initial sort finishes (or immediately if no sort will run).\n this.tableData = [];\n this.totalRecords = this.allData.length;\n\n // show loading only if we expect initial sort\n this.initialSortLoading = true;\n\n this.cdr.markForCheck();\n\n // try to run initial sort ASAP (if columns are already present)\n this.applyInitialSortIfNeeded();\n }\n\n // ============================================================\n // CONFIG / COLUMNS CHANGES\n // ============================================================\n ngOnChanges(changes: SimpleChanges): void {\n // clear selection on inputs update (safe default behavior)\n this.selectedItems.set([]);\n\n // Build columnTypeMap for sorting normalization\n if (this.columns?.length > 0) {\n this.columnTypeMap = {};\n for (const col of this.columns)\n this.columnTypeMap[col.field] = col.columnType;\n\n const nextSelected = this.selectedColumnsInput?.length\n ? this.selectedColumnsInput\n : this.columns;\n\n // microtask to avoid change detection timing issues\n Promise.resolve().then(() => {\n this.selectedColumns = [...nextSelected];\n this.cdr.markForCheck();\n\n // run initial sort after columns are ready\n this.applyInitialSortIfNeeded();\n });\n }\n\n // Ensure \"more actions\" exist\n if (!this.tableConfiguration?.moreActions) {\n const cfg = this.tableConfiguration;\n Promise.resolve().then(() => {\n this.tableConfiguration = { ...cfg, moreActions: DEFAULT_MORE_ACTIONS };\n this.cdr.markForCheck();\n });\n }\n }\n\n // ============================================================\n // PRIME CUSTOM SORT (WORKER)\n // ============================================================\n /**\n * PrimeNG calls this when sorting changes.\n * We run worker sort only when meta changes.\n */\n onCustomSort(event: any) {\n const meta = (event.multiSortMeta ?? []) as any[];\n const sortKey = JSON.stringify(meta ?? []);\n\n // If sort is removed -> return to base dataset (filtered/searched)\n if (!meta.length) {\n this.tableData = this.allData;\n this.totalRecords = this.tableData.length;\n this.lastSortKey = '';\n this.cdr.markForCheck();\n return;\n }\n\n // Avoid re-sorting if meta didn't change\n if (sortKey === this.lastSortKey) return;\n this.lastSortKey = sortKey;\n\n this.runWorkerSort(meta);\n }\n\n /**\n * Dispatches sort request to the worker (or sync fallback).\n */\n private runWorkerSort(multiSortMeta: any[]) {\n if (!this.sortWorker) {\n this.tableData = this.sortSync(this.allData, multiSortMeta);\n this.totalRecords = this.tableData.length;\n this.initialSortLoading = false;\n this.cdr.markForCheck();\n return;\n }\n\n const meta: SortMeta[] = (multiSortMeta ?? [])\n .filter((m: any) => !!m?.field)\n .map((m: any) => ({ field: m.field, order: (m.order ?? 1) as 1 | -1 }));\n\n const reqId = ++this.workerReqId;\n this.latestWorkerReqId = reqId;\n\n const payload: SortRequest = {\n reqId,\n data: this.allData,\n multiSortMeta: meta,\n columnTypeMap: this.columnTypeMap,\n dateTypeKey: this.columnTypeEnum.DATE,\n };\n\n this.sortWorker.postMessage(payload);\n }\n\n /**\n * Synchronous sort fallback (used if WebWorker is not available).\n * Uses the same normalization logic as your worker approach.\n */\n private sortSync(data: any[], multiSortMeta: any[]) {\n const sorted = [...data];\n if (!multiSortMeta?.length) return sorted;\n\n sorted.sort((a, b) => {\n for (const s of multiSortMeta) {\n const field = s.field!;\n const order = s.order ?? 1;\n\n const A = this.getComparableValue(this.getNestedValue(a, field), field);\n const B = this.getComparableValue(this.getNestedValue(b, field), field);\n\n if (typeof A === 'string' && typeof B === 'string') {\n const c = this.compareStringsNatural(A, B);\n if (c !== 0) return c * order;\n } else {\n if ((A as any) < (B as any)) return -1 * order;\n if ((A as any) > (B as any)) return 1 * order;\n }\n }\n return 0;\n });\n\n return sorted;\n }\n\n private normalizeInitialSort(\n cfg: TableConfiguration | undefined | null,\n ): InitialSortMeta[] {\n const s = cfg?.initialSort;\n\n // NEW style\n if (Array.isArray(s)) return s.filter((x) => !!x?.field);\n if (s && typeof s === 'object' && (s as any).field)\n return [s as InitialSortMeta];\n\n // LEGACY fallback\n if (cfg?.initialSortField) {\n return [\n {\n field: cfg.initialSortField,\n order: (cfg.initialSortOrder ?? 1) as SortOrder,\n },\n ];\n }\n\n return [];\n }\n\n /**\n * Applies initial sort once:\n * - Uses tableConfiguration.initialSortField if provided\n * - Otherwise uses the first available column field\n * - Always ASC (order = 1)\n *\n * Runs only when:\n * - we have data\n * - we have columns/selectedColumns\n * - it hasn't been applied yet for current dataset\n */\n private applyInitialSortIfNeeded(): void {\n if (this.initialSortApplied) return;\n\n if (!this.allData?.length) {\n this.tableData = [];\n this.totalRecords = 0;\n this.initialSortLoading = false;\n this.initialSortApplied = true;\n return;\n }\n\n const cols =\n (this.selectedColumns?.length ? this.selectedColumns : this.columns) ??\n [];\n if (!cols.length) return;\n\n // 1) normalize config\n const cfgMeta = this.normalizeInitialSort(this.tableConfiguration);\n\n // 2) if nothing configured -> fallback first column ASC\n const fallbackField = cols[0]?.field;\n const wantedMeta = (\n cfgMeta.length ? cfgMeta : [{ field: fallbackField, order: 1 as const }]\n ).filter((m) => !!m?.field);\n\n // 3) keep only fields that exist in columns\n const validMeta = wantedMeta.filter((m) =>\n cols.some((c: any) => c?.field === m.field),\n );\n const finalMeta = validMeta.length\n ? validMeta\n : [{ field: fallbackField, order: 1 as const }];\n\n if (!finalMeta[0]?.field) {\n this.tableData = this.allData;\n this.totalRecords = this.tableData.length;\n this.initialSortLoading = false;\n this.initialSortApplied = true;\n return;\n }\n\n try {\n if (this.dt) this.dt.multiSortMeta = finalMeta as any;\n } catch {}\n\n this.lastSortKey = JSON.stringify(finalMeta);\n this.initialSortApplied = true;\n this.initialSortFieldApplied = finalMeta[0].field;\n\n this.runWorkerSort(finalMeta);\n }\n\n // ============================================================\n // SEARCH / FILTER\n // ============================================================\n /**\n * Applies global search over the currently filtered dataset.\n * Then re-applies sort if any sort is active.\n */\n onSearch(query: string) {\n const trimmed = (query ?? '').trim().toLowerCase();\n this.searchQuery = trimmed;\n\n const baseData =\n Object.keys(this.currentFilters).length > 0\n ? this.getFilteredData()\n : this.originalData;\n\n const searchableFields = (this.columns ?? [])\n .map((c: any) => (c?.field ?? '').trim())\n .filter((f: string) => !!f);\n\n if (!trimmed) {\n this.allData = [...baseData];\n } else {\n this.allData = baseData.filter((row: any) =>\n searchableFields.some((field: string) =>\n this.matchesQuery(this.getValueByPath(row, field), trimmed),\n ),\n );\n }\n\n this.applyCurrentSortOrReset();\n }\n\n /**\n * Called from table-caption when filter form changes.\n * Rebuilds allData and re-applies current sorting.\n */\n applyFilters(filters: Record<string, any>) {\n this.currentFilters = { ...filters };\n this.allData = this.getFilteredData();\n this.applyCurrentSortOrReset();\n }\n\n /**\n * If table is currently sorted, re-run sort on new base dataset.\n * Otherwise just render base dataset.\n */\n private applyCurrentSortOrReset() {\n const meta = (this.dt?.multiSortMeta ?? []) as any[];\n const sortKey = JSON.stringify(meta ?? []);\n\n if (meta?.length) {\n this.lastSortKey = sortKey;\n this.runWorkerSort(meta);\n return;\n }\n\n this.tableData = this.allData;\n this.totalRecords = this.tableData.length;\n this.lastSortKey = '';\n this.cdr.markForCheck();\n }\n\n // ============================================================\n // SEARCH HELPERS\n // ============================================================\n private getValueByPath(obj: any, path: string): any {\n if (!obj || !path) return undefined;\n if (!path.includes('.')) return obj[path];\n return path\n .split('.')\n .reduce((acc, key) => (acc == null ? undefined : acc[key]), obj);\n }\n\n private matchesQuery(value: any, query: string): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === 'string' || typeof value === 'number')\n return value.toString().toLowerCase().includes(query);\n if (Array.isArray(value))\n return value.some((item) => this.matchesQuery(item, query));\n if (typeof value === 'object')\n return Object.values(value).some((val) => this.matchesQuery(val, query));\n return false;\n }\n\n // ============================================================\n // FILTER IMPLEMENTATION\n // ============================================================\n /**\n * Applies currentFilters to originalData and returns the filtered result.\n * Supports:\n * - single value (primitive or {key,...})\n * - multi-select arrays (primitives or objects with .key)\n * - empty filters mean \"match all\"\n */\n private getFilteredData() {\n return this.originalData.filter((item) => {\n return Object.keys(this.currentFilters).every((key) => {\n const filterValue = this.currentFilters[key];\n if (\n !filterValue ||\n (Array.isArray(filterValue) && filterValue.length === 0)\n )\n return true;\n\n const itemValue = this.getNestedValue(item, key);\n\n // Ako je itemValue niz (kao u scopes)\n if (Array.isArray(itemValue)) {\n return filterValue.some((option: any) => {\n const optionKey = option?.key || option;\n return itemValue.some(\n (val) =>\n val?.name?.toString().toLowerCase() ===\n optionKey?.toString().toLowerCase(),\n );\n });\n }\n\n // Ako je filterValue niz\n if (Array.isArray(filterValue)) {\n return filterValue.some((option) => {\n const optionKey = option?.key || option;\n return (\n itemValue?.toString().toLowerCase() ===\n optionKey?.toString().toLowerCase()\n );\n });\n }\n\n // Single filter\n const singleFilterValue = filterValue?.key || filterValue;\n return singleFilterValue\n ? itemValue?.toString().toLowerCase() ===\n singleFilterValue.toString().toLowerCase()\n : true;\n });\n });\n }\n\n /**\n * Reads nested values using dot paths and unwraps `.key` when present.\n */\n private getNestedValue(obj: any, path: string): any {\n try {\n if (obj && Object.prototype.hasOwnProperty.call(obj, path))\n return obj[path]?.key || obj[path];\n const keys = path.split('.');\n let current = obj;\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current)\n current = current[key];\n else return undefined;\n }\n return (current as any)?.key ?? current;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Produces comparable primitives for sorting (sync fallback).\n * The worker uses its own copy of this logic.\n */\n private getComparableValue(val: any, field?: string): string | number {\n if (val === null || val === undefined) return '';\n\n const columnType = field ? this.columnTypeMap[field] : null;\n\n if (typeof val === 'number') return val;\n\n if (typeof val === 'string') {\n if (columnType === this.columnTypeEnum.DATE) {\n const parsedDate = Date.parse(val);\n return isNaN(parsedDate) ? val.toLowerCase() : parsedDate;\n }\n return val.toLowerCase();\n }\n\n if (val instanceof Date) return val.getTime();\n\n if (typeof val === 'object') {\n if ((val as any).from && (val as any).to) {\n const from = Date.parse((val as any).from);\n const to = Date.parse((val as any).to);\n return isNaN(from) || isNaN(to) ? '' : from + to;\n }\n\n if (Array.isArray(val) && val.length > 0)\n return this.getComparableValue(val[0], field);\n\n const priorityFields = ['name', 'value', 'label', 'key', 'date'];\n for (const key of priorityFields) {\n if ((val as any)[key] !== undefined && (val as any)[key] !== null) {\n return this.getComparableValue((val as any)[key], field);\n }\n }\n\n for (const v of Object.values(val)) {\n if (typeof v === 'string' || typeof v === 'number')\n return this.getComparableValue(v, field);\n }\n }\n\n return '';\n }\n\n private compareStringsNatural(a: string, b: string): number {\n return a.localeCompare(b, undefined, {\n numeric: true,\n sensitivity: 'base',\n });\n }\n\n // ============================================================\n // SELECTION / UI ACTIONS\n // ============================================================\n onSelectionChange(selected: any[]) {\n this.selectedItems.set(selected);\n this.bulkMode = (selected?.length ?? 0) > 0;\n this.checkBoxSelection.emit(selected);\n }\n\n onRowClick(event: Event, rowData: any) {\n event.stopPropagation();\n this.rowSelection.emit(rowData);\n }\n\n clearSelection() {\n this.selectedItems.set([]);\n this.bulkMode = false;\n }\n\n /**\n * Handles export actions locally, otherwise bubbles up to parent.\n */\n handleActionClick(event: any) {\n if (event?.action?.key === 'EXPORT_PDF') {\n const file = this.tableConfiguration?.key\n ? buildFileName(this.tableConfiguration.key, 'pdf')\n : buildFileName('table', 'pdf');\n\n exportRowsToPdf(\n this.selectedColumns,\n this.tableData,\n this.columnTypeMap,\n this.columnTypeEnum,\n (k: string) => this.translateService.instant(k),\n file,\n ).catch((error) => {\n console.error('Failed to export PDF:', error);\n });\n return;\n }\n\n if (event?.action?.key === 'EXPORT_EXCEL') {\n const file = this.tableConfiguration?.key\n ? buildFileName(this.tableConfiguration.key, 'xlsx')\n : buildFileName('table', 'xlsx');\n\n exportRowsToExcel(\n this.selectedColumns,\n this.tableData,\n this.columnTypeMap,\n this.columnTypeEnum,\n (k: string) => this.translateService.instant(k),\n file,\n );\n return;\n }\n\n this.actionClick.emit(event);\n }\n\n /**\n * Used by checkbox template to disable selection on specific rows.\n */\n isRowSelectable(event: any): boolean {\n return typeof event.data?.canSelect === 'boolean'\n ? event.data.canSelect\n : true;\n }\n\n /**\n * Some tables allow click on first N columns to open details.\n */\n isColumnClickable(columnIndex: number): boolean {\n const max = this.tableConfiguration?.clickableColumnCount ?? 1;\n const enabled = this.tableConfiguration?.hasCellClick ?? false;\n\n return columnIndex < max && enabled;\n }\n\n /**\n * Utility for copy icons inside cells (prevents row-click).\n */\n copyToClipboard(event: Event, text: string): void {\n event.stopPropagation();\n navigator.clipboard.writeText(text);\n }\n\n /**\n * Generic nested getter used by templates (flags etc).\n */\n getNested(obj: any, path?: string): any {\n if (!obj || !path) return null;\n return path\n .split('.')\n .reduce((o, k) => (o != null ? (o as any)[k] : null), obj);\n }\n\n /**\n * Applies column selection coming from table-caption (array of field names).\n */\n applyColumns(selected: any[]) {\n const next = this.columns.filter((col) => selected.includes(col.field));\n Promise.resolve().then(() => {\n this.selectedColumns = next;\n this.cdr.markForCheck();\n });\n }\n}\n","<div class=\"border-1 border-round-sm border-300 border-round-md m-2\">\n @if (selectedItems().length === 0) {\n <table-caption [columns]=\"columns\" [tableConfiguration]=\"tableConfiguration\" [filters]=\"filters\"\n [selectedItems]=\"selectedItems()\" (applyFiltersEvent)=\"applyFilters($event)\"\n (applyColumnsEvent)=\"applyColumns($event)\" (searchChange)=\"onSearch($event)\"\n (actionClick)=\"handleActionClick($event)\"></table-caption>\n } @else {\n <div style=\"min-height: 40px; padding: 8px\"\n class=\"flex justify-content-between align-items-center border-bottom-1 border-300 pl-5 pr-5 text-sm text-500\">\n <div>\n @if (tableConfiguration.selectionType === selectionTypeEnum.CHECKBOX) {\n <span>\n {{ selectedItems().length }}\n {{\n selectedItems().length === 1\n ? (\"LABELS.ITEM_SELECTED\" | translate)\n : (\"LABELS.ITEMS_SELECTED\" | translate)\n }}\n </span>\n }\n </div>\n\n <div>\n @for (\n action of tableConfiguration.bulkActions;\n track action?.key ?? $index\n ) {\n <phoenix-data-table-action [actionConfig]=\"action\" (actionClick)=\"\n handleActionClick({\n action: action,\n selectedItems: selectedItems(),\n });\n clearSelection()\n \"></phoenix-data-table-action>\n }\n\n <button [attr.data-cy]=\"'clear-selection-button'\" class=\"p-button p-button-text p-button-plain\"\n (click)=\"clearSelection()\" aria-label=\"Clear Selection\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n </div>\n }\n <div class=\"table-host\" [style.height]=\"tableConfiguration.scrollHeight ?? null\">\n <p-table #dt [columns]=\"selectedColumns\" [value]=\"tableData\" [size]=\"'small'\" scrollable=\"true\" scrollHeight=\"flex\"\n [virtualScroll]=\"true\" [virtualScrollItemSize]=\"40\" [virtualScrollDelay]=\"80\" [totalRecords]=\"totalRecords\"\n [sortMode]=\"'multiple'\" [customSort]=\"true\" (sortFunction)=\"onCustomSort($event)\" [selection]=\"selectedItems()\"\n (selectionChange)=\"onSelectionChange($event)\" [resizableColumns]=\"true\" columnResizeMode=\"expand\" [loading]=\"initialSortLoading\">\n <ng-template #header let-columns>\n <tr style=\"height: 40px\" class=\"dt-header\">\n @switch (tableConfiguration.selectionType) {\n @case (selectionTypeEnum.CHECKBOX) {\n <th class=\"custom-th\">\n <p-tableHeaderCheckbox [attr.data-cy]=\"'table-header-checkbox'\"></p-tableHeaderCheckbox>\n </th>\n }\n @case (selectionTypeEnum.RADIO_BTN) {\n <th class=\"custom-th\"></th>\n }\n }\n @for (\n col of columns;\n track col.field ?? col.header ?? $index;\n let colIdx = $index\n ) {\n <th pResizableColumn class=\"custom-th text-primary font-bold\" [pSortableColumn]=\"col.field\">\n {{ col.header | translate }}\n <p-sortIcon [field]=\"col.field\" [attr.data-cy]=\"'sort-button-' + col.header\"></p-sortIcon>\n </th>\n }\n\n <th class=\"custom-th\"></th>\n </tr>\n </ng-template>\n\n <ng-template #body let-rowData let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr>\n @switch (tableConfiguration.selectionType) {\n @case (selectionTypeEnum.CHECKBOX) {\n <td class=\"w-2rem\">\n <p-tableCheckbox [attr.data-cy]=\"\n 'table-row-' + selectionTypeEnum.CHECKBOX + '-' + rowIndex\n \" [disabled]=\"\n rowData?.canSelect !== undefined\n ? !rowData.canSelect\n : false\n \" [value]=\"rowData\"></p-tableCheckbox>\n </td>\n }\n @case (selectionTypeEnum.RADIO_BTN) {\n <td>\n <p-tableRadioButton [value]=\"rowData\" [attr.data-cy]=\"\n 'table-row-' + selectionTypeEnum.RADIO_BTN + '-' + rowIndex\n \"></p-tableRadioButton>\n </td>\n }\n }\n @for (\n col of columns;\n track col.field ?? col.header ?? $index;\n let i = $index\n ) {\n <td (click)=\"\n isColumnClickable(i) ? onRowClick($event, rowData) : null\n \" [ngClass]=\"{\n 'text-blue-500 underline cursor-pointer': isColumnClickable(i),\n }\">\n @switch (col.columnType) {\n @case (columnTypeEnum.TAG) {\n @if (rowData[col.field]) {\n <div class=\"border-round-md font-semibold\" [style]=\"{\n fontSize: '12px',\n padding: '3px 8px',\n width: 'fit-content',\n 'background-color':\n (rowData[col.field + 'Color'] || '#ccc') + '56',\n color: rowData[col.field + 'Color'],\n }\">\n {{\n rowData[col.field]?.name ||\n (rowData[col.field] | translate)\n }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.LIST_TAG) {\n @if (rowData[col.field]) {\n @for (item of rowData[col.field]; track $index) {\n <p-badge severity=\"warn\" class=\"mr-1\" [value]=\"item\" />\n }\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.OBJ_TAG) {\n @if (rowData[col.field]) {\n <p-tag [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.OBJ_TAG +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" [style]=\"{\n fontSize: '12px',\n padding: '3px 8px',\n width: 'fit-content',\n 'background-color':\n (rowData[col.field].color || '#ccc') + '56',\n color: rowData[col.field].color,\n }\" [value]=\"rowData[col.field]?.value | translate\"></p-tag>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.PERSON) {\n @if (rowData[col.field]) {\n <p-avatar [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.PERSON +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" [label]=\"rowData[col.field]?.name | initials\" class=\"cursor-pointer\" [style]=\"{\n 'background-color': '#9c27b0',\n color: '#ffffff',\n 'font-size': '0.8rem!important',\n }\" shape=\"circle\" (click)=\"personPop.toggle($event)\"></p-avatar>\n\n <p-popover #personPop [dismissable]=\"true\">\n <div>\n <span class=\"text-lg\">{{\n rowData[col.field].name\n }}</span>\n <span class=\"block text-sm\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{ rowData[col.field].email ?? \" --\" }}\n </span>\n <span class=\"block text-sm\">\n <i class=\"pi pi-phone text-500\"></i>\n {{ rowData[col.field].phone ?? \" --\" }}\n </span>\n </div>\n </p-popover>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.LIST) {\n @if (rowData[col.field]?.length) {\n @if (rowData[col.field].length > 1) {\n <div class=\"cursor-pointer\" (click)=\"listPop.toggle($event)\" [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.LIST +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \">\n <span class=\"mr-1\">{{\n rowData[col.field][0].name\n }}</span>\n <p-chip class=\"text-sm font-semibold p-1 m-0\" [label]=\"'+' + (rowData[col.field].length - 1)\" />\n </div>\n } @else {\n <span>{{ rowData[col.field][0].name }}</span>\n }\n\n <p-popover #listPop [dismissable]=\"true\">\n @for (\n item of rowData[col.field];\n track item.name;\n let isFirst = $first\n ) {\n @if (!isFirst) {\n <ul class=\"list-none m-0 p-0\">\n <li>{{ item.name }}</li>\n </ul>\n }\n }\n </p-popover>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.BOOLEAN) {\n @if (rowData[col.field] | isBoolean) {\n <i [pTooltip]=\"rowData?.[col.field + 'Tooltip']\" [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.BOOLEAN +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" class=\"pi\" [ngClass]=\"\n rowData[col.field]\n ? 'text-green-500 pi-check-circle'\n : 'text-red-500 pi-times-circle'\n \"></i>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.TEXT_AREA) {\n @if (rowData[col.field]) {\n <div [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.TEXT_AREA +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" [pTooltip]=\"rowData[col.field]\">\n {{\n rowData[col.field].length > (col.maxLength ?? 50)\n ? (rowData[col.field]\n | slice: 0 : col.maxLength ?? 50) + \"...\"\n : rowData[col.field]\n }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.EMAIL) {\n @if (rowData[col.field]) {\n <div class=\"email-cell\" [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.EMAIL +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \">\n <span>{{ rowData[col.field] }}</span>\n <i class=\"pi pi-copy email-copy-icon\" (click)=\"copyToClipboard($event, rowData[col.field])\"\n [pTooltip]=\"'LABELS.COPY_EMAIL' | translate\">\n </i>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @case (columnTypeEnum.TIMEPERIOD) {\n @if (rowData[col.field]) {\n <div [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.TIMEPERIOD +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" [pTooltip]=\"rowData[col.field] | timePeriod\" style=\"max-width: 200px\">\n {{ rowData[col.field] | timePeriod }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n @default {\n @if (col.flag && getNested(rowData, col.flagCodeField)) {\n <div [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.TEXT +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" class=\"flex align-items-center gap-2\" style=\"max-width: 200px\"\n [pTooltip]=\"rowData | cell: col : dateFormat\">\n <img src=\"https://primefaces.org/cdn/primeng/images/demo/flag/flag_placeholder.png\" [class]=\"\n 'flag flag-' +\n (getNested(rowData, col.flagCodeField) || '')\n .toString()\n .toLowerCase()\n \" style=\"width: 22px\" alt=\"\" />\n <span [innerHTML]=\"rowData | cell: col : dateFormat\"></span>\n </div>\n } @else {\n @if (rowData | cell: col : dateFormat) {\n <div [attr.data-cy]=\"\n 'table-row-' +\n columnTypeEnum.TEXT +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i\n \" [pTooltip]=\"rowData | cell: col : dateFormat\" style=\"max-width: 200px\"\n [innerHTML]=\"rowData | cell: col : dateFormat\"></div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"emptyCell\" [ngTemplateOutletContext]=\"{\n dataCy:\n 'table-row-' +\n col.columnType +\n '-row-index-' +\n rowIndex +\n '-col-index-' +\n i,\n }\" />\n }\n }\n }\n }\n </td>\n }\n\n <td class=\"p-0\">\n @for (\n action of tableConfiguration.rowActions;\n track action?.key ?? $index\n ) {\n <phoenix-data-table-action [actionConfig]=\"action\" [rowData]=\"rowData\"\n (actionClick)=\"handleActionClick($event)\"></phoenix-data-table-action>\n }\n </td>\n </tr>\n </ng-template>\n\n <!-- <ng-template pTemplate=\"loadingbody\" let-columns>\n @for (_ of skeletonRows; track $index; let rowIdx = $index) {\n <tr style=\"height: 40px\">\n @switch (tableConfiguration.selectionType) {\n @case (selectionTypeEnum.CHECKBOX) {\n <td class=\"w-2rem\">\n <p-skeleton width=\"1.2rem\" height=\"1.2rem\"></p-skeleton>\n </td>\n }\n @case (selectionTypeEnum.RADIO_BTN) {\n <td class=\"w-2rem\">\n <p-skeleton width=\"1.2rem\" height=\"1.2rem\"></p-skeleton>\n </td>\n }\n }\n\n @for (col of columns; track col.field ?? col.header ?? $index) {\n <td>\n <p-skeleton\n [ngStyle]=\"{\n width: (60 + (rowIdx % 3) * 10) + '%',\n height: '1rem'\n }\"\n ></p-skeleton>\n </td>\n }\n\n <td>\n <p-skeleton width=\"2rem\" height=\"1rem\"></p-skeleton>\n </td>\n </tr>\n }\n </ng-template> -->\n\n <ng-template #emptyCell let-dataCy=\"dataCy\">\n <span [attr.data-cy]=\"dataCy\">--</span>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <td class=\"p-2\" colspan=\"100\">\n <div class=\"flex align-items-center\">\n <i class=\"pi pi-info-circle mr-2\"></i>\n {{ \"NO_RESULTS_FOUND\" | translate }}\n </div>\n </td>\n </ng-template>\n </p-table>\n\n <div class=\"border-top-1 border-300 pl-2 p-1 text-sm text-500\">\n {{ \"LABELS.TOTAL_RECORDS\" | translate }}: {{ totalRecords }}\n </div>\n </div>\n</div>","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function startDueDateValidator(\n control: AbstractControl,\n): { [key: string]: any } | null {\n const startDate = control.get('startDate')?.value;\n const dueDate = control.get('dueDate')?.value;\n\n return { invalidDate: true };\n}\n","import {\n AbstractControl,\n AsyncValidatorFn,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { debounceTime, map, of, switchMap, timer } from 'rxjs';\n\nconst regexPatternEn =\n /^(?:(\\d+(?:\\.\\d+)?)w\\s*|)(?:(\\d+(?:\\.\\d+)?)d\\s*|)(?:(\\d+(?:\\.\\d+)?)h\\s*|)(?:(\\d+(?:\\.\\d+)?)m\\s*|)$/;\nconst regexPatternDe =\n /^(?:(\\d+(?:\\.\\d+)?)w\\s*|)(?:(\\d+(?:\\.\\d+)?)t\\s*|)(?:(\\d+(?:\\.\\d+)?)s\\s*|)(?:(\\d+(?:\\.\\d+)?)m\\s*|)$/;\n\nconst regexPatternSr =\n /^(?:(\\d+(?:\\.\\d+)?)n\\s*|)(?:(\\d+(?:\\.\\d+)?)d\\s*|)(?:(\\d+(?:\\.\\d+)?)č\\s*|)(?:(\\d+(?:\\.\\d+)?)m\\s*|)$/;\n\nfunction toMS(input: string, regex: RegExp) {\n const match = input?.match(regex);\n if (!match) return 0; // or handle it differently\n\n const weeks = parseFloat(match[1]) || 0;\n const days = parseFloat(match[2]) || 0;\n const hours = parseFloat(match[3]) || 0;\n const minutes = parseFloat(match[4]) || 0;\n\n const milliseconds =\n (weeks * 7 + days) * 24 * 60 * 60 * 1000 +\n hours * 60 * 60 * 1000 +\n minutes * 60 * 1000;\n return milliseconds;\n}\n\nfunction getLangPattern(currentLang: string) {\n switch (currentLang) {\n case 'de':\n return regexPatternDe;\n case 'en':\n return regexPatternEn;\n default:\n return regexPatternSr;\n }\n}\n\nexport function timePeriod(currentLang: string, tpMin: number): ValidatorFn {\n return (control: AbstractControl) => {\n if (!control.pristine) {\n const regValidator = Validators.pattern(getLangPattern(currentLang));\n if (regValidator(control)) {\n return { timeperiod: true };\n }\n\n if (control.status === 'VALID' && control.dirty) {\n if (toMS(control.value, getLangPattern(currentLang)) > 31536000000) {\n return { timeperiod_limit_max: true };\n }\n if (\n tpMin != null &&\n toMS(control.value, getLangPattern(currentLang)) <= tpMin\n ) {\n return { timeperiod_limit_min: true };\n }\n return null;\n }\n return null;\n }\n\n return null;\n };\n}\n","export enum ControlType {\n TEXT = 'TEXT',\n NUMBER = 'NUMBER',\n MS_OPTION = 'MS_OPTION',\n SS_OPTION = 'SS_OPTION',\n TEXT_AREA = 'TEXT_AREA',\n TEXT_EDITOR = 'TEXT_EDITOR',\n DATE = 'DATE',\n START_DUE_DATE = 'START_DUE_DATE',\n CHECKBOX = 'CHECKBOX',\n CHECKBOX_COLOR = 'CHECKBOX_COLOR',\n LINKS_DATA = 'LINKS_DATA',\n PASSWORD = 'PASSWORD',\n SWITCH = 'SWITCH',\n TIMEPERIOD = 'TIMEPERIOD',\n CURRENCY = 'CURRENCY',\n ASSIGN = 'ASSIGN',\n ASSIGN_ASSET = 'ASSIGN_ASSET',\n COLOR = 'COLOR',\n SELECT_BUTTON = 'SELECT_BUTTON',\n UPLOAD = 'UPLOAD',\n UPLOAD_DRAG_DROP = 'UPLOAD_DRAG_DROP',\n SLOT = 'SLOT',\n SS_OPTION_OBJECT_BASED = 'SS_OPTION_OBJECT_BASED',\n}\n","import { ControlType } from './control-type.enum';\n\nexport function getFieldType(control: any) {\n switch (control.configuration.type) {\n case ControlType.TEXT:\n case ControlType.TEXT_AREA:\n case ControlType.TEXT_EDITOR:\n case ControlType.CHECKBOX:\n return control.dataValue;\n case ControlType.SS_OPTION:\n return control.dataOptionValue;\n case ControlType.MS_OPTION:\n return control.dataOptionValues;\n default:\n }\n}\n","import { AbstractControl, UntypedFormControl } from '@angular/forms';\n\nexport class WhiteSpaceValidator {\n static noWhiteSpaceValidator(control: AbstractControl<any, any>) {\n if (typeof control.value === 'object') {\n return { whitespace: false };\n }\n if (control.value === '') {\n return { whitespace: false };\n }\n const isWhitespace = (control.value || '').trim().length === 0;\n const isValid = !isWhitespace;\n return isValid ? null : { whitespace: true };\n }\n static noWhiteSpaceValidatorForEditor(control: UntypedFormControl) {\n const isWhitespace =\n (control.value?.replace(/(<([^>]+)>)/gi, '') || '').trim().length === 0;\n const isValid = !isWhitespace;\n return isValid ? null : { whitespace: true };\n }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function noDangerousCharsValidator(): ValidatorFn {\n const dangerousPatterns = [\n /<\\s*script/i, // <script tags\n /<\\s*\\/\\s*script/i, // </script>\n /javascript\\s*:/i, // javascript: protocol\n /on\\w+\\s*=/i, // event handlers like onerror= onclick=\n /<\\s*iframe/i, // iframes\n /<\\s*img[^>]+onerror/i, // <img onerror=\n /expression\\s*\\(/i, // CSS expression() attacks\n /vbscript\\s*:/i, // vbscript: protocol\n ];\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (!value) return null;\n\n const str = String(value);\n const isdangerous = dangerousPatterns.some(pattern => pattern.test(str));\n\n return isdangerous ? { dangerousChars: true } : null;\n };\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport enum CompareOperatorType {\n LESS_OR_EQUAL = 'LESS_OR_EQUAL',\n LESS = 'LESS',\n EQUAL = 'EQUAL',\n MORE_OR_EQUAL = 'MORE_OR_EQUAL',\n MORE = 'MORE',\n}\n\nexport function dateCompareValidator(\n fieldToCompare: string,\n comparison: CompareOperatorType,\n errMessage?: string,\n): ValidatorFn {\n return (control: AbstractControl) => {\n if (!control.parent) return null; // ako form group ne postoji\n const compareControl = control.parent.get(fieldToCompare);\n if (!compareControl) return null; // polje za poređenje ne postoji\n\n const controlValue = control.value ? new Date(control.value) : null;\n const compareValue = compareControl.value\n ? new Date(compareControl.value)\n : null;\n\n if (!controlValue || !compareValue) return null; // nema vrednosti, ne validira\n\n let valid = true;\n\n switch (comparison) {\n case CompareOperatorType.LESS:\n valid = controlValue < compareValue;\n break;\n case CompareOperatorType.LESS_OR_EQUAL:\n valid = controlValue <= compareValue;\n break;\n case CompareOperatorType.EQUAL:\n valid = controlValue.getTime() === compareValue.getTime();\n break;\n case CompareOperatorType.MORE_OR_EQUAL:\n valid = controlValue >= compareValue;\n break;\n case CompareOperatorType.MORE:\n valid = controlValue > compareValue;\n break;\n }\n\n if (!valid) {\n return {\n dateCompare:\n errMessage ||\n `Datum ne zadovoljava uslov ${comparison} u odnosu na ${fieldToCompare}`,\n };\n }\n\n return null; // validno\n };\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MetaFormService {\n router = inject(Router);\n private formEvent = new Subject<any>();\n private formReadOnlySubject = new BehaviorSubject<boolean>(false);\n private formTabContent = new BehaviorSubject<string>('FORM');\n private formDirtyStatus = new BehaviorSubject<boolean>(false);\n private formBuildCompletedSubject = new BehaviorSubject<boolean>(false);\n\n currentFormState = this.formEvent.asObservable();\n formReadOnlyState = this.formReadOnlySubject.asObservable();\n currentFormTabContent = this.formTabContent.asObservable();\n currentFormDirtyStatus = this.formDirtyStatus.asObservable();\n\n /**\n * Notify when form is completed\n * @description Notifies you about when form bild is completed in meta-form component class. Usefull when you need to attach some listeners on form controls or any other action related to form when all controls are avaiable\n * @returns {boolean}\n */\n formBuildCompleted = this.formBuildCompletedSubject.asObservable();\n\n constructor() {}\n\n setFormEvent(event: any): void {\n this.formEvent.next(event);\n }\n\n setFormReadOnlyState(state: boolean) {\n this.formReadOnlySubject.next(state);\n // this.router.navigate([], {\n // queryParams: {\n // edit: state ? null : !state,\n // },\n // queryParamsHandling: 'merge',\n // });\n }\n\n setFormTabContent(tabContent: string) {\n this.formTabContent.next(tabContent);\n }\n\n setFormDirtyStatus(status: boolean) {\n this.formDirtyStatus.next(status);\n }\n /**\n * Sets the form build completion status to indicate when the form is created.\n *\n * @param {boolean} isCompleted - A boolean value to indicate whether the form build is completed.\n * Set to `true` when the form is fully created.\n *\n * @description This method is used to notify when the form is created and ready for use.\n */\n setFormBuildCompletition(isCompleted: boolean) {\n this.formBuildCompletedSubject.next(isCompleted);\n }\n}\n","import { Directive, EventEmitter, Input, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subscription } from 'rxjs';\n\nimport { HttpClient } from '@angular/common/http';\n// import { EnvService } from '@phoenix/environment';\nimport { startDueDateValidator } from './meta-validators/due-date/start-due-date.validator';\n\nimport { timePeriod } from './meta-validators/timeperiod/timeperiod.validator';\n\nimport { MetaControl } from './meta-form-interface/interfaces';\nimport { MetaFormService } from './services/meta-form.service';\nimport { ControlType } from './utils/control-type.enum';\nimport { getFieldType } from './utils/get-field-type.utils';\nimport { WhiteSpaceValidator } from './meta-validators/white-space-validator';\nimport { noDangerousCharsValidator } from './meta-validators/no-dangerous-chars/do-danerous-chars';\nimport { dateCompareValidator } from './meta-validators/date-compare-validator';\n\n@Directive()\nexport abstract class MetaFormAbstract {\n @Input() metaForm!: FormGroup;\n @Input() metaFormValues: any;\n @Input() metaFormControls: any;\n @Input() loading: boolean = false;\n @Input() disableForm: boolean = false;\n @Input() formButtons: boolean = true;\n @Input() groupForm: boolean = false;\n @Input() formStyle: any;\n @Output() onFormSubmit = new EventEmitter();\n @Output() onFormCancel = new EventEmitter();\n\n formActive$!: Observable<boolean>;\n formSub$!: Subscription;\n\n constructor(\n private fb: FormBuilder,\n public metaService: MetaFormService,\n\n private translateService: TranslateService,\n private http: HttpClient, // private env: EnvService\n ) {\n this.metaForm = this.fb.group({});\n this.formActive$ = this.metaService.formReadOnlyState;\n ///check if this has usecase\n this.formSub$ = this.metaForm.valueChanges.subscribe((ev: any) => {\n this.metaService.setFormEvent(ev);\n });\n }\n\n createForm(controls: MetaControl[] | any) {\n controls?.forEach((control: any) => {\n this.metaForm.addControl(\n control.configuration?.key,\n this.fb.control(\n getFieldType(control),\n ///updateOn: blur only for controls with async validators. If added for all each tab/step toggle removes form value. Check why\n // control.asyncValidators && { updateOn: 'blur' },\n ),\n );\n //add validators\n this.addControlValidators(control);\n\n //disable non editable fields\n if (control.disable) {\n this.metaForm.get(control.configuration.key)?.disable();\n }\n });\n ///patch values in form\n if (this.metaFormValues) {\n this.metaForm.patchValue(this.metaFormValues);\n }\n\n this.metaService.setFormBuildCompletition(true);\n }\n\n activateForm() {\n throw new Error('not implemented');\n }\n\n addControlValidators(control: any) {\n const validators: any[] = [];\n const asyncValidators: any[] = [];\n\n if (control.validators) {\n control.validators.min &&\n validators.push(Validators.min(control.validators.min));\n\n control.validators.max &&\n validators.push(Validators.max(control.validators.max));\n\n control.validators.maxLenght &&\n validators.push(Validators.maxLength(control.validators.maxLenght));\n\n control.validators.minLength &&\n validators.push(Validators.minLength(control.validators.minLength));\n\n control.validators.email && validators.push(Validators.email);\n\n control.validators.regex &&\n validators.push(\n Validators.pattern(control.validators.regex?.regexType),\n );\n control.validators.phone &&\n validators.push(Validators.pattern(/^\\+?[1-9]\\d{7,14}$/));\n\n control.validators.timeperiod &&\n validators.push(\n timePeriod(\n this.translateService.currentLang,\n control.validators.tpMin,\n ),\n );\n\n control.validators.dueDate && validators.push(startDueDateValidator);\n }\n\n if (control.validators?.compare) {\n const compareConfig = control.validators.compare;\n validators.push(\n dateCompareValidator(\n compareConfig.fieldToCompare, // napomena: ispravi typo 'feildToCompare'\n compareConfig.comparisonOperator,\n compareConfig.errMessage,\n ),\n );\n }\n if (control?.mandatory) {\n validators.push(Validators.required);\n }\n\n if (control?.mandatory && control.configuration.type === ControlType.TEXT) {\n validators.push(WhiteSpaceValidator.noWhiteSpaceValidator);\n }\n\n if (\n control?.mandatory &&\n control.configuration.type === ControlType.TEXT_AREA\n ) {\n validators.push(WhiteSpaceValidator.noWhiteSpaceValidator);\n }\n\n if (\n (control.configuration.type === ControlType.TEXT &&\n !control.configuration?.skipValidation) ||\n (control.configuration.type === ControlType.TEXT_AREA &&\n !control.configuration?.skipValidation)\n ) {\n validators.push(noDangerousCharsValidator());\n }\n\n this.metaForm.get(control.configuration.key)?.setValidators(validators);\n }\n\n onSubmit() {\n this.onFormSubmit.emit(this.metaForm);\n }\n\n onCancel() {\n this.metaForm.reset();\n this.onFormCancel.emit();\n }\n\n /**\n * Resets form to initial state\n *\n * @description Useful when user interact with form (edit some inputs) and than clicks CANCEL. This method patch original values to FormGroup again\n *\n */\n resetToInitialValues() {\n this.metaForm.patchValue(this.metaFormValues);\n }\n\n ngOnDestroy(): void {\n if (this.formSub$) this.formSub$.unsubscribe();\n }\n}\n","export function getLanguageParam(\n obj: any,\n langType: string,\n paramName: string,\n): string {\n if (!langType) langType = 'en';\n if (langType && paramName) {\n const param: string =\n paramName + langType.charAt(0).toUpperCase() + langType.slice(1);\n const fallBackParam: string = paramName + 'En';\n if (obj?.[param]) {\n return obj[param];\n } else if (obj?.[fallBackParam]) {\n return obj[fallBackParam];\n } else {\n return param;\n }\n } else {\n return '***NO VALUE***';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { getLanguageParam } from './lang.utils';\n\n@Pipe({\n name: 'fieldLabel',\n standalone: true,\n})\nexport class FieldLabelPipe implements PipeTransform {\n transform(value: any, currentLang: string): string {\n if (value.hasOwnProperty('userFriendlyMessage')) {\n return value?.userFriendlyMessage;\n }\n const metaLabel = getLanguageParam(value, currentLang, 'labelKeyVal');\n return metaLabel;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { FieldLabelPipe } from '../utils/field-label.pipe';\n\n@Component({\n selector: 'phoenix-meta-label',\n standalone: true,\n imports: [CommonModule, TranslateModule, FieldLabelPipe],\n template: `\n <label class=\"mb-1 block\" *ngIf=\"!control?.hidden\">\n {{ control | fieldLabel: currentLang | translate }}\n <span *ngIf=\"control.mandatory\" class=\"red-asterisk\">*</span>\n </label>\n `,\n styles: [],\n})\nexport class MetaLabelComponent {\n @Input() control: any;\n currentLang: string;\n constructor(private translateService: TranslateService) {\n this.currentLang = this.translateService.currentLang;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, ViewChild } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { TableModule } from 'primeng/table';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { map } from 'rxjs';\nimport {\n tableColumnType,\n tableSelectionType,\n} from '../../../data-table/utils/dataTable.enum';\nimport { TableComponent } from '../../../data-table/table/table.component';\nimport { ButtonModule } from 'primeng/button';\nimport { ActionButton } from '../../../../models/status.model';\n\n\n@Component({\n selector: 'phoenix-object-item-dialog',\n standalone: true,\n imports: [\n TranslateModule,\n TableModule,\n TooltipModule,\n CommonModule,\n TableComponent,\n ButtonModule\n ],\n templateUrl: './object-item-dialog.component.html',\n styleUrls: ['./object-item-dialog.component.scss'],\n})\nexport class ObjectItemDialogComponent implements OnInit {\n @ViewChild('table') table!: TableComponent;\n\n columns: any;\n disableButton: boolean = true;\n tableData = [];\n hasSelection = false;\n constructor(\n public ref: DynamicDialogRef,\n public config: DynamicDialogConfig\n ) {}\n\n ngOnInit(): void {\n this.tableData = this.config.data.tableData;\n this.columns = this.config.data.columns;\n }\n\n actions: ActionButton[] = [\n {\n id: 'assign',\n disabled: true,\n label: 'ACTION.ASSIGN',\n icon: 'pi pi-check',\n severity: 'primary',\n },\n {\n id: 'cancel',\n disabled: false,\n label: 'ACTION.CANCEL',\n severity: 'secondary',\n },\n ];\n\n onSelectionChanged(selectedItem: any) {\n this.hasSelection = !!selectedItem;\n }\n\n actionClick(key: any) {\n if (key === 'assign') {\n this.ref.close(this.table.selectedItems());\n } else {\n this.ref.close();\n }\n }\n tableConfiguration = {\n lazy: false,\n scrollHeight: '200px',\n hasSearch: true,\n hasFilter: false,\n key: 'asd',\n rows: 20,\n selectionType: tableSelectionType.RADIO_BTN,\n actions: [],\n exportTable: false,\n filterConfiguration: []\n\n };\n}\n","<div style=\"overflow: hidden; padding-bottom: 50px\">\n <phoenix-table\n #table\n [data]=\"tableData\"\n [columns]=\"columns\"\n [tableConfiguration]=\"tableConfiguration\"\n (checkBoxSelection)=\"onSelectionChanged($event)\"\n >\n </phoenix-table>\n</div>\n<div class=\"absolute bottom-0 right-0 p-4\">\n <div class=\"flex gap-2\">\n <ng-container *ngFor=\"let action of actions\">\n <p-button\n [label]=\"action.label | translate\"\n [icon]=\"action.icon || ''\"\n [severity]=\"action.severity || 'primary'\"\n [disabled]=\"action.id === 'assign' && !hasSelection\"\n [id]=\"action.id\"\n (onClick)=\"actionClick(action.id)\"\n size=\"small\"\n ></p-button>\n </ng-container>\n</div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef, inject } from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroup,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { PopoverModule } from 'primeng/popover';\nimport { PanelModule } from 'primeng/panel';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { ObjectItemDialogComponent } from '../object-item-dialog/object-item-dialog.component';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { Assignee } from '../../../../models/assignee.model';\nimport { tableColumnType } from '../../../data-table/utils/dataTable.enum';\n\n@Component({\n selector: 'phoenix-meta-assign-responsible',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n MetaLabelComponent,\n TranslateModule,\n PopoverModule,\n PanelModule,\n ],\n template: `\n <div [style.display]=\"control.hidden ? 'none' : 'block'\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <div\n [attr.data-cy]=\"'assign-' + control?.id\"\n *ngIf=\"\n parentForm.controls[this.control.configuration.key].value &&\n parentForm.controls[this.control.configuration.key].value.uuid\n \"\n class=\"flex align-items-center\"\n >\n <div>\n <p-button\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"op.toggle($event)\"\n >\n <div class=\"person-wrap\">\n <div class=\"person-avatar\">\n {{\n parentForm.controls[\n this.control.configuration.key\n ].value?.name?.charAt(0)\n }}\n </div>\n <div>\n <p\n class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\"\n >\n {{\n parentForm.controls[this.control.configuration.key].value\n ?.name\n }}\n </p>\n <p\n class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\"\n >\n {{\n parentForm.controls[this.control.configuration.key].value\n ?.function\n }}\n </p>\n </div>\n </div>\n </p-button>\n\n <p-popover #op [dismissable]=\"true\">\n <div class=\"person-details\">\n <span class=\"block mb-2\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{\n parentForm.controls[this.control.configuration.key].value\n ?.email ?? ' --'\n }}\n </span>\n <p>\n <i class=\"pi pi-phone mr-1 text-500\"></i>\n {{\n parentForm.controls[this.control.configuration.key].value\n ?.phone ?? ' --'\n }}\n </p>\n </div>\n </p-popover>\n </div>\n\n <div style=\"paddingBottom:4px\">\n <p-button\n *ngIf=\"\n parentForm.controls[this.control.configuration.key].value &&\n parentForm.controls[this.control.configuration.key].value.uuid\n \"\n styleClass=\"p-button-sm mt-1\"\n type=\"button\"\n [text]=\"true\"\n label=\"{{ 'ACTION.REASSIGN' | translate }}\"\n (click)=\"op.hide(); assignResponsible()\"\n ></p-button>\n\n <p-button\n *ngIf=\"\n parentForm.controls[this.control.configuration.key].value &&\n parentForm.controls[this.control.configuration.key].value.uuid\n \"\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"op.hide(); clear()\"\n [text]=\"true\"\n styleClass=\"p-button-danger p-button-sm mt-1 ml-2\"\n ></p-button>\n </div>\n </div>\n\n <p-button\n *ngIf=\"\n !(\n parentForm.controls[this.control.configuration.key].value &&\n parentForm.controls[this.control.configuration.key].value.uuid\n )\n \"\n type=\"button\"\n icon=\"pi pi-user-plus\"\n styleClass=\"p-button-sm mt-1\"\n label=\"{{ 'ACTION.ASSIGN' | translate }}\"\n (click)=\"assignResponsible()\"\n [text]=\"true\"\n ></p-button>\n </div>\n `,\n styles: [\n `\n ::ng-deep .p-popover-content {\n padding: 0 !important;\n }\n\n .person-wrap {\n display: flex;\n align-items: center;\n margin-left: -6px;\n }\n\n .person-wrap p {\n margin: 0;\n }\n\n .person-avatar {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 28px;\n height: 28px;\n min-width: 28px;\n min-height: 28px;\n margin-right: 5px;\n background-color: rgb(233, 66, 96);\n color: white;\n border-radius: 50%;\n font-size: 1rem;\n }\n\n .person-details {\n border-top: 1px solid #e0e0e0;\n padding: 10px;\n width: 200px;\n }\n\n .person-details p {\n margin: 0;\n display: flex;\n align-items: center;\n }\n\n .person-details i {\n color: #e94260;\n padding-right: 5px;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaAssignResponsibleComponent),\n multi: true,\n },\n ],\n})\nexport class MetaAssignResponsibleComponent implements ControlValueAccessor {\n @Input() control: any;\n @Input() parentForm!: FormGroup;\n @Input() disable?: boolean;\n\n public onChanged!: (value: any) => void;\n public onTouched!: () => void;\n public isDisabled!: boolean;\n\n writeValue(value: any): void {}\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean) {\n this.isDisabled = isDisabled;\n }\n\n private translateService = inject(TranslateService);\n private dialogService = inject(DialogService);\n\n person!: any;\n\n clear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null);\n }\n\n assignResponsible() {\n const ref = this.dialogService.open(ObjectItemDialogComponent, {\n header: this.translateService.instant('LABELS.ASSIGN_RESPONSIBLE'),\n width: '700px',\n modal: true,\n data: {\n tableData: this.control.configuration.items,\n columns: [\n { field: 'name', header: 'LABELS.NAME', columnType: tableColumnType.TEXT },\n { field: 'function', header: 'LABELS.FUNCTION', columnType: tableColumnType.TEXT },\n { field: 'phone', header: 'LABELS.PHONE', columnType: tableColumnType.TEXT },\n { field: 'email', header: 'LABELS.EMAIL', columnType: tableColumnType.TEXT }\n ],\n },\n contentStyle: { overflow: 'auto' },\n draggable: true,\n closable: true,\n });\n\n if (ref) {\n ref.onClose.subscribe((response: Assignee) => {\n if (response) {\n this.person = response;\n this.parentForm.controls[this.control.configuration.key].setValue(response);\n }\n });\n }\n }\n}","export enum ErrorType {\n REQUIRED = 'required',\n MIN_LENGTH = 'minlength',\n MAX_LENGTH = 'maxlength',\n EMAIL = 'email',\n CUSTOM = 'custom',\n PATTERN = 'pattern',\n UIQUE_ENTRY = 'uniqueEntry',\n TIMEPERIOD = 'timeperiod',\n TIMEPERIOD_LIMIT_MAX = 'timeperiod_limit_max',\n TIMEPERIOD_LIMIT_MIN = 'timeperiod_limit_min',\n DUE_DATE = 'dueDate',\n UIQUE = 'unique',\n BOTH_DATES = 'both_dates',\n MAX = 'max',\n MIN = 'min',\n DANGEROUS_CHARS = 'dangerousChars',\n DATE_COMPARE = 'dateCompare',\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { Component, Input, OnChanges, OnDestroy, inject } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MessageModule } from 'primeng/message';\nimport { Subscription, combineLatestWith } from 'rxjs';\nimport { MetaFormService } from '../services/meta-form.service';\nimport { ErrorType } from '../utils/error-type.util';\n\n@Component({\n standalone: true,\n imports: [MessageModule],\n selector: 'phoenix-inline-field-error',\n styles: [``],\n animations: [\n trigger('slideInOut', [\n transition(':enter', [\n style({ transform: 'translateY(-60%)' }),\n animate('100ms ease-out', style({ transform: 'translateY(0%)' })),\n ]),\n transition(':leave', [\n animate(\n '50ms ease-out',\n style({ transform: 'translateY(-100%)', opacity: '0' }),\n ),\n ]),\n ]),\n ],\n template: `\n <div style=\"height: 1px;\">\n @if (note) {\n <div [@slideInOut] class=\"static\">\n <!-- <small class=\"text-blue-700\" *ngIf=\"note.type === 'info'; else warn\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 11px\"></i>\n {{ note.content }}\n </small> -->\n @if (note?.type) {\n <p-message\n [severity]=\"note?.type\"\n variant=\"simple\"\n size=\"small\"\n styleClass=\"small-message\"\n >\n @if (note?.icon) {\n <ng-template #icon>\n <i [class]=\"note?.icon\" style=\"font-size: 11px\"></i>\n </ng-template>\n }\n {{ note.content }}</p-message\n >\n } @else {\n <!-- <small class=\"p-error\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 11px\"></i>\n {{ note }}\n </small> -->\n <p-message\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n styleClass=\"small-message\"\n >\n <ng-template #icon>\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 11px\"></i>\n </ng-template>\n {{ note }}</p-message\n >\n }\n </div>\n }\n </div>\n `,\n})\nexport class InlineFieldError implements OnDestroy, OnChanges {\n @Input() ctrl!: AbstractControl;\n\n note!: any;\n constructor(private translateService: TranslateService) {}\n sub$!: Subscription;\n metaFormService = inject(MetaFormService);\n loaded: Boolean = false;\n\n ngOnChanges(): void {\n if (this.ctrl && !this.loaded) {\n if (this.ctrl?.status === 'PENDING') {\n ///this is only for async validators for name and title. Remove this one, we have this in onChange() method\n this.ctrl.updateValueAndValidity();\n }\n this.sub$ = this.ctrl?.statusChanges\n ?.pipe(combineLatestWith(this.metaFormService.formReadOnlyState))\n .subscribe((arr) => {\n if (arr[0] !== 'VALID') {\n setTimeout(() => {\n this.note = this.getErrorMessage(this.ctrl);\n });\n } else {\n setTimeout(() => {\n this.note = null;\n });\n }\n // if (arr[1]) {\n // setTimeout(() => {\n // this.note = null;\n // });\n // }\n });\n this.loaded = true;\n }\n }\n\n getErrorMessage(control: AbstractControl): any {\n if (control?.status === 'PENDING') {\n return {\n type: 'info',\n content: this.translateService.instant(\n 'VALIDATION_MESSAGE.CHECKING_ENTRY_AVAILABILITY',\n ),\n icon: 'pi pi-spin pi-spinner',\n };\n }\n\n if (control?.errors) {\n console.log('error type', Object.keys(control.errors)[0]);\n switch (Object.keys(control.errors)[0]) {\n case ErrorType.REQUIRED:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.THIS_FIELD_IS_REQUIRED',\n );\n case ErrorType.MIN_LENGTH:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_AT_LEAST',\n { minlength: control.errors['minlength'].requiredLength },\n );\n case ErrorType.MAX_LENGTH:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_NO_MORE',\n { maxlength: control.errors['maxlength'].requiredLength },\n );\n case ErrorType.EMAIL:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.ENTER_VALID_EMAIL',\n );\n case ErrorType.DANGEROUS_CHARS:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.NO_SPECIAL_CHARS_ALLOWED',\n );\n case ErrorType.CUSTOM:\n return this.translateService.instant(control?.errors?.['custom']);\n\n case ErrorType.UIQUE_ENTRY:\n return control.errors['uniqueEntry'];\n\n case ErrorType.TIMEPERIOD:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_SHOULD_MATCH_TIMEPATTERN',\n );\n\n case ErrorType.MAX:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_SHOULD_BE_LESS_THAN_AND_MORE_THAN',\n {\n lowerValue: control.errors['min']?.min ?? 0,\n upperValue: control.errors['max']?.max,\n },\n );\n\n case ErrorType.DUE_DATE:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.INVALID_DATE',\n );\n case ErrorType.UIQUE:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_IS_ALREADY_IN_USE',\n );\n case ErrorType.TIMEPERIOD_LIMIT_MAX:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_SHOULD_MATCH_TIMEPATTERN_LIMIT_MAX',\n );\n\n case ErrorType.TIMEPERIOD_LIMIT_MIN:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_SHOULD_MATCH_TIMEPATTERN_LIMIT_MIN',\n );\n\n case ErrorType.BOTH_DATES:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.BOTH_START_END_DATE_REQUIRED',\n );\n case ErrorType.DATE_COMPARE:\n return this.translateService.instant(control.errors['dateCompare']);\n\n // add more cases for other validators as needed\n case ErrorType.PATTERN:\n const re = '^(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?$';\n\n if (control?.errors?.['pattern']?.requiredPattern === re)\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.VALUE_SHOUL_BE_URL',\n );\n else {\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.INVALID_VALUE',\n );\n }\n // add more cases for other validators as needed\n default:\n return this.translateService.instant(\n 'VALIDATION_MESSAGE.INVALID_VALUE',\n );\n }\n } else return '';\n }\n\n ngOnDestroy(): void {\n this.sub$?.unsubscribe();\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { ControlValueAccessor, FormGroup } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\n\n@Directive()\nexport class BaseMetaField implements ControlValueAccessor {\n @Input() disable: boolean = false;\n @Input() control: any;\n @Input() parentForm!: FormGroup;\n fcs$!: Subscription | undefined;\n cfc$!: Subscription | undefined;\n\n public value!: any;\n public onChanged!: (value: any) => void;\n public onTouched!: () => void;\n ctrl: any;\n\n protected changeSub = new Subject<boolean>();\n protected changeSubs$!: Subscription;\n\n ngOnInit() {\n this.ctrl = this.parentForm.get(this.control.configuration.key);\n }\n\n getInputValue(event: Event | any): any {\n if (event.value) {\n return event.value;\n }\n if (event.target instanceof HTMLInputElement) {\n return event.target.value?.trim();\n }\n if (event.target instanceof HTMLTextAreaElement) {\n return event.target.value;\n }\n return '';\n }\n\n writeValue(value: string): void {\n this.value = value;\n }\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n this.changeSub.next(true);\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disable = isDisabled;\n }\n\n ngOnDestroy(): void {\n this.changeSubs$?.unsubscribe();\n this.fcs$?.unsubscribe();\n this.cfc$?.unsubscribe();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DatePickerModule } from 'primeng/datepicker';\n\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-calendar',\n standalone: true,\n imports: [\n CommonModule,\n MetaLabelComponent,\n FormsModule,\n InlineFieldError,\n DatePickerModule,\n ],\n template: `\n <div [hidden]=\"control?.hidden\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-datepicker\n [attr.data-cy]=\"'calendar-' + control?.id\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onModelChange($event)\"\n [style]=\"{ width: '100%' }\"\n [disabled]=\"disable\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [minDate]=\"control.configuration?.minDate\"\n [maxDate]=\"control.configuration?.maxDate\"\n [showIcon]=\"true\"\n (onClearClick)=\"onDateClear()\"\n [showTime]=\"control.configuration?.showTime\"\n hourFormat=\"24\"\n appendTo=\"body\"\n ></p-datepicker>\n\n <phoenix-inline-field-error [ctrl]=\"ctrl\"></phoenix-inline-field-error>\n </div>\n `,\n styleUrls: ['./meta-calendar.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaCalendarComponent),\n multi: true,\n },\n ],\n})\nexport class MetaCalendarComponent extends BaseMetaField {\n onModelChange(val: Date | null) {\n if (!val) {\n this.onChanged(null);\n return;\n }\n\n const showTime = !!this.control?.configuration?.showTime;\n\n if (!showTime) {\n const normalized = new Date(\n val.getFullYear(),\n val.getMonth(),\n val.getDate(),\n 12, 0, 0, 0\n );\n this.value = normalized;\n\n this.parentForm?.controls?.[this.control.configuration.key]?.setValue(normalized, {\n emitEvent: false,\n });\n\n this.onChanged(normalized);\n return;\n }\n\n this.onChanged(val);\n }\n\n onDateClear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null, { emitEvent: false });\n this.value = null as any;\n this.onChanged(null);\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { PopoverModule } from 'primeng/popover';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-checkbox-color-picker',\n standalone: true,\n imports: [\n CommonModule,\n CheckboxModule,\n FormsModule,\n TranslateModule,\n PopoverModule,\n MetaLabelComponent,\n ],\n template: `\n <p-popover #popover>\n <div class=\"color-picker\">\n @for (row of control.configuration.options; track $index; let last = $last) {\n <div class=\"color-row\" [ngClass]=\"{ 'mb-2': !last }\">\n @for (color of row; track color) {\n <div\n class=\"color-box\"\n [ngStyle]=\"{\n 'background-color': color,\n outline: focusedColor === color ? '3px solid ' + color : 'none',\n 'outline-offset': focusedColor === color ? '3px' : '0'\n }\"\n (click)=\"onChanged(color); changeColor(color); popover.hide()\"\n ></div>\n }\n </div>\n }\n </div>\n </p-popover>\n\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <div\n class=\"selected-color\"\n [ngStyle]=\"{ 'background-color': value, marginTop: '3px' }\"\n [attr.data-cy]=\"'checkbox-' + control?.id\"\n (click)=\"popover.toggle($event)\"\n ></div>\n `,\n styles: [\n `\n ::ng-deep .p-popover-content {\n padding: 0 !important;\n }\n\n .color-picker {\n display: flex;\n flex-direction: column;\n padding: 10px;\n }\n\n .color-row {\n display: flex;\n justify-content: center;\n gap: 8px;\n }\n\n .color-box {\n margin: 2px;\n width: 30px;\n height: 30px;\n cursor: pointer;\n border-radius: 4px;\n }\n\n .color-box:hover {\n transform: scale(1.1);\n opacity: 0.9;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);\n }\n\n .selected-color {\n width: 35px;\n height: 35px;\n border: 2px solid #ccc;\n cursor: pointer;\n border-radius: 6px;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaCheckboxColorPickerComponent),\n multi: true,\n },\n ],\n})\nexport class MetaCheckboxColorPickerComponent extends BaseMetaField {\n private translateService = inject(TranslateService);\n\n currentLang = this.translateService.currentLang;\n focusedColor: string | null = null;\n\n changeColor(color: string): void {\n this.focusedColor = color;\n this.value = color;\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { FieldLabelPipe } from '../../utils/field-label.pipe';\n\n@Component({\n selector: 'phoenix-meta-checkbox',\n standalone: true,\n imports: [\n CommonModule,\n CheckboxModule,\n FormsModule,\n TranslateModule,\n FieldLabelPipe,\n ],\n template: ` <div class=\"ml-3 field-checkbox\">\n <p-checkbox\n [attr.data-cy]=\"'checkbox-' + control?.id\"\n [(ngModel)]=\"value\"\n (onChange)=\"onChanged(value)\"\n [binary]=\"true\"\n inputId=\"binary\"\n [disabled]=\"control.readOnly || disable\"\n ></p-checkbox>\n\n <label for=\"binary\">\n {{ control | fieldLabel: currentLang | translate }}\n <span *ngIf=\"control.mandatory\" class=\"red-asterisk\">*</span></label\n >\n </div>`,\n styles: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaCheckboxComponent),\n multi: true,\n },\n ],\n})\nexport class MetaCheckboxComponent extends BaseMetaField {\n private translateService = inject(TranslateService);\n currentLang = this.translateService.currentLang;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ColorPickerModule } from 'primeng/colorpicker';\n\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-color-picker',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n TranslateModule,\n ColorPickerModule,\n MetaLabelComponent,\n InlineFieldError,\n ],\n template: `\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-colorPicker\n class=\"color-swatch\"\n [attr.data-cy]=\"'color-picker-' + control?.id\"\n [(ngModel)]=\"value\"\n (onChange)=\"onChanged(value)\"\n [disabled]=\"disable\"\n [appendTo]=\"'body'\"\n ></p-colorPicker>\n\n @if (!control?.hidden) {\n <phoenix-inline-field-error [ctrl]=\"ctrl\"></phoenix-inline-field-error>\n }\n `,\n styles: [\n `\n :host ::ng-deep .color-swatch.p-colorpicker {\n width: 35px;\n height: 35px;\n padding: 0 !important;\n border: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n\n :host ::ng-deep .color-swatch .p-colorpicker-preview {\n width: 35px !important;\n height: 35px !important;\n border: none !important; \n border-radius: 6px !important;\n box-shadow: none !important;\n }\n\n :host ::ng-deep .color-swatch .p-colorpicker-preview:focus,\n :host ::ng-deep .color-swatch .p-colorpicker-preview:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaColorPickerComponent),\n multi: true,\n },\n ],\n})\nexport class MetaColorPickerComponent extends BaseMetaField {}","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { KeyFilterModule } from 'primeng/keyfilter';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-currency',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n InputTextModule,\n InlineFieldError,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n InputNumberModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <p-inputNumber\n [attr.data-cy]=\"'currency-' + control?.id\"\n #myInput\n [style.display]=\"control.hidden ? 'none' : 'block'\"\n mode=\"currency\"\n inputId=\"currency-germany\"\n currency=\"EUR\"\n locale=\"de-DE\"\n [min]=\"10\"\n [(ngModel)]=\"value\"\n (input)=\"input($event)\"\n (ngModelChange)=\"changeValue($event)\"\n (blur)=\"onTouched()\"\n [disabled]=\"disable\"\n class=\"w-full\"\n [style]=\"{ width: '100%' }\"\n >\n </p-inputNumber>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [\n `\n :host ::ng-deep p-inputnumber input {\n width: 100% !important;\n box-sizing: border-box;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaCurrencyComponent),\n multi: true,\n },\n ],\n})\nexport class MetaCurrencyComponent extends BaseMetaField {\n changeValue(data: any) {\n this.parentForm.controls[this.control?.configuration?.key].setValue(data);\n }\n input(data: any) {\n const number = this.convertCurrencyStringToNumber(data.target.value);\n this.parentForm.controls[this.control?.configuration?.key].setValue(number);\n }\n\n convertCurrencyStringToNumber(currencyString: string) {\n // Remove dots for thousands separators\n const stringWithoutDots = currencyString.replace(/\\./g, '');\n\n // Replace comma with dot for decimal separator\n const stringWithDotDecimal = stringWithoutDots.replace(',', '.');\n\n // Parse the string into a number\n const numericValue = parseFloat(stringWithDotDecimal);\n\n return numericValue;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'phoenix-meta-multiple-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MultiSelectModule,\n FormsModule,\n MetaLabelComponent,\n InlineFieldError,\n TranslateModule,\n ],\n template: `\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <p-multiSelect\n [attr.data-cy]=\"'multiSelect-' + control?.id\"\n [hidden]=\"control?.hidden\"\n (onChange)=\"onChanged(value)\"\n (onSelectAllChange)=\"onChanged(value)\"\n [(ngModel)]=\"value\"\n [options]=\"control.configuration.options\"\n optionLabel=\"userFriendlyMessage\"\n [filter]=\"control.configuration.options.length > 15\"\n [style]=\"{ width: '100%' }\"\n [disabled]=\"disable\"\n appendTo=\"body\"\n [showHeader]=\"false\"\n ></p-multiSelect>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n `,\n styles: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaMultipleSelectComponent),\n multi: true,\n },\n ],\n})\nexport class MetaMultipleSelectComponent extends BaseMetaField {}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { KeyFilterModule } from 'primeng/keyfilter';\n// import { LanguageParamResolverPipe, Regex } from '@phoenix/util/util-common';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\n\n@Component({\n selector: 'phoenix-meta-number-input',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputNumberModule,\n InlineFieldError,\n FormsModule,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n InputTextModule,\n // LanguageParamResolverPipe,\n ],\n template: `\n <div [hidden]=\"control?.hidden\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <p-inputNumber\n [attr.data-cy]=\"'input-number-' + control?.id\"\n [(ngModel)]=\"value\"\n (onInput)=\"onChanged(getInputValue($event))\"\n (blur)=\"onTouched()\"\n [disabled]=\"disable\"\n [useGrouping]=\"false\"\n [min]=\"1\"\n class=\"w-full\"\n [style]=\"{ width: '100%' }\"\n >\n </p-inputNumber>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [``],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaNumberComponent),\n multi: true,\n },\n ],\n})\nexport class MetaNumberComponent extends BaseMetaField {\n // public regex = Regex;\n lang = inject(TranslateService).currentLang;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { PasswordModule } from 'primeng/password';\n\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-password-feild',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n TranslateModule,\n\n PasswordModule,\n MetaLabelComponent,\n InlineFieldError,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-password\n [attr.data-cy]=\"'password-' + control?.id\"\n [(ngModel)]=\"value\"\n [disabled]=\"disable\"\n [hidden]=\"control?.hidden\"\n [feedback]=\"false\"\n (input)=\"onChanged(getInputValue($event))\"\n class=\"ng-invalid ng-dirty\"\n [autocomplete]=\"'one-time-code'\"\n ></p-password>\n\n @if (!control?.hidden) {\n <phoenix-inline-field-error [ctrl]=\"ctrl\"></phoenix-inline-field-error>\n }\n </div>\n `,\n styles: [\n `\n :host ::ng-deep .p-component {\n width: 100%;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaPasswordFeildComponent),\n multi: true,\n },\n ],\n})\nexport class MetaPasswordFeildComponent extends BaseMetaField {}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { SelectButtonModule } from 'primeng/selectbutton';\n\n@Component({\n selector: 'phoenix-meta-select-button',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InlineFieldError,\n MetaLabelComponent,\n TranslateModule,\n FormsModule,\n SelectButtonModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-selectButton\n [attr.data-cy]=\"'select-button-' + control?.id\"\n [options]=\"control.configuration.options\"\n [hidden]=\"control?.hidden\"\n [(ngModel)]=\"value\"\n [disabled]=\"disable\"\n (onChange)=\"onChanged(value)\"\n optionLabel=\"userFriendlyMessage\"\n optionValue=\"value\"\n ></p-selectButton>\n\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaSelectButtonComponent),\n multi: true,\n },\n ],\n})\nexport class MetaSelectButtonComponent extends BaseMetaField {}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'translateDropdownData',\n standalone: true,\n})\nexport class TranslateDropdownData implements PipeTransform {\n protected translateService = inject(TranslateService);\n transform(data: any, paramName: string): any {\n let arr: any = [];\n paramName\n ? data?.forEach((item: any) => {\n const obj = item;\n obj[paramName] = item[paramName]\n ? this.translateService.instant(item[paramName])\n : paramName;\n arr.push(obj);\n })\n : (arr = data);\n\n return arr;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { ImageModule } from 'primeng/image';\nimport { SelectModule } from 'primeng/select';\nimport { debounceTime, of, switchMap } from 'rxjs';\n\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { TranslateDropdownData } from '../../utils/translate-dropdown-data.pipe';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-single-select-object-based',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n SelectModule,\n MetaLabelComponent,\n FormsModule,\n TranslateModule,\n TranslateDropdownData,\n ImageModule,\n InlineFieldError,\n ],\n template: `\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-select\n [attr.data-cy]=\"'single-select-ob' + control?.id\"\n [hidden]=\"control?.hidden\"\n [optionLabel]=\"oiKey\"\n [options]=\"control.configuration.options | translateDropdownData : 'value'\"\n [showClear]=\"control.configuration?.showClear\"\n [(ngModel)]=\"value\"\n [style]=\"{ width: '100%' }\"\n [disabled]=\"disable || control?.disable\"\n [filter]=\"control.configuration?.filter\"\n filterBy=\"value\"\n [group]=\"control.configuration.group\"\n (onClear)=\"onDateClear()\"\n (onChange)=\"onChanged(value)\"\n [panelStyle]=\"{ width: '100%' }\"\n appendTo=\"body\"\n >\n <ng-template let-option pTemplate=\"group\">\n <div class=\"flex align-items-center\">\n <span class=\"font-bold ml-2\">{{ option.value }}</span>\n </div>\n </ng-template>\n\n <ng-template let-data pTemplate=\"selectedItem\">\n @if (data) {\n <div class=\"flex align-items-center gap-2\">\n <div>{{ data?.[oiKey] }}</div>\n </div>\n }\n </ng-template>\n\n <ng-template let-option pTemplate=\"item\">\n <div class=\"flex\">\n @if (option.icon) {\n <i [ngClass]=\"option.icon\" class=\"mr-1\"></i>\n }\n <div>{{ option?.value }}</div>\n </div>\n </ng-template>\n </p-select>\n\n @if (!control?.hidden) {\n <phoenix-inline-field-error [ctrl]=\"ctrl\"></phoenix-inline-field-error>\n }\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaSingleSelectObjectBasedComponent),\n multi: true,\n },\n ],\n})\nexport class MetaSingleSelectObjectBasedComponent extends BaseMetaField {\n public oiKey: string = 'value';\n\n onDateClear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null);\n }\n\n constructor() {\n super();\n this.changeSubs$ = this.changeSub\n .asObservable()\n .pipe(\n debounceTime(500),\n switchMap((item) => of(item))\n )\n .subscribe((trigg: boolean) => {\n if (trigg) {\n this.changes();\n }\n });\n }\n\n override ngOnInit(): void {\n this.changes();\n }\n\n changes(): void {\n let soi = this.control.configuration.options?.[0];\n\n if (!this.parentForm.get(this.control.configuration.key)?.value) {\n this.control.configuration.options?.forEach((o: any, i: number) => {\n if (o.update?.default || o.default) {\n soi = this.control.configuration.options[i];\n this.parentForm.get(this.control.configuration.key)?.setValue(soi);\n }\n });\n }\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ImageModule } from 'primeng/image';\nimport { SelectModule } from 'primeng/select';\nimport { debounceTime, of, switchMap } from 'rxjs';\n\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { TranslateDropdownData } from '../../utils/translate-dropdown-data.pipe';\n\n@Component({\n selector: 'phoenix-meta-single-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MetaLabelComponent,\n SelectModule,\n FormsModule,\n TranslateModule,\n TranslateDropdownData,\n ImageModule,\n InlineFieldError,\n ],\n template: `\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-select\n [attr.data-cy]=\"'single-select-' + control?.id\"\n [hidden]=\"control?.hidden\"\n [optionLabel]=\"flagMode ? 'viewName' : oiKey ? oiKey : 'labelKeyValEn'\"\n [optionValue]=\"flagMode ? 'original' : undefined\"\n [options]=\"\n flagMode\n ? flagOptions\n : (control.configuration.options\n | translateDropdownData : (oiKey ? oiKey : 'labelKeyValEn'))\n \"\n [dataKey]=\"flagMode ? 'key' : dataKeyProp\"\n [filter]=\"control.configuration.options.length > 15\"\n [filterFields]=\"\n flagMode\n ? [\n 'viewName',\n 'viewCode',\n 'original.userFriendlyMessage',\n 'original.key'\n ]\n : undefined\n \"\n [showClear]=\"control.configuration?.showClear\"\n [(ngModel)]=\"value\"\n [style]=\"{ width: '100%' }\"\n [disabled]=\"disable || control?.disable\"\n [group]=\"control.configuration.group\"\n (onClear)=\"onDateClear()\"\n (onChange)=\"onChanged($event.value)\"\n [panelStyle]=\"{ width: '100%' }\"\n appendTo=\"body\"\n >\n <!-- Optional group header -->\n <ng-template let-option pTemplate=\"group\">\n <div class=\"flex align-items-center\">\n <i [class]=\"option.icon\"></i>\n <span class=\"font-bold ml-2\">{{ option.label }}</span>\n </div>\n </ng-template>\n\n <!-- Selected value (in flag mode 'data' is ORIGINAL object) -->\n <ng-template let-data pTemplate=\"selectedItem\">\n <div class=\"flex align-items-center gap-2\" *ngIf=\"data\">\n <img\n *ngIf=\"flagMode && (data.key || data.code)\"\n src=\"https://primefaces.org/cdn/primeng/images/demo/flag/flag_placeholder.png\"\n [class]=\"'flag flag-' + (data.key || data.code).toLowerCase()\"\n style=\"width:22px\"\n alt=\"\"\n />\n <img\n *ngIf=\"!flagMode && data?.image\"\n [src]=\"data.image\"\n height=\"17\"\n width=\"20\"\n alt=\"\"\n />\n <div>\n {{ flagMode\n ? (data.userFriendlyMessage || data.name || data['labelKeyValEn'])\n : (data?.[oiKey] ? data?.[oiKey] : data?.['labelKeyValEn']) }}\n </div>\n </div>\n </ng-template>\n\n <!-- Dropdown list item (in flag mode 'option' is the VIEW-MODEL) -->\n <ng-template let-option pTemplate=\"item\">\n <div class=\"flex align-items-center gap-2\">\n <img\n *ngIf=\"flagMode && option.viewCode\"\n src=\"https://primefaces.org/cdn/primeng/images/demo/flag/flag_placeholder.png\"\n [class]=\"'flag flag-' + option.viewCode.toLowerCase()\"\n style=\"width:22px\"\n alt=\"\"\n />\n <img\n *ngIf=\"!flagMode && option?.image\"\n [src]=\"option.image\"\n height=\"20\"\n width=\"20\"\n alt=\"\"\n />\n <div>\n {{ flagMode\n ? option.viewName\n : (option?.[oiKey] ? option?.[oiKey] : option?.['labelKeyValEn']) }}\n </div>\n </div>\n </ng-template>\n </p-select>\n\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n `,\n styles: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaSingleSelectComponent),\n multi: true,\n },\n ],\n})\nexport class MetaSingleSelectComponent extends BaseMetaField {\n /** Label key used in legacy mode */\n public oiKey!: string;\n\n /** True = render flags + search; value remains original { key, userFriendlyMessage } */\n public flagMode = false;\n\n /**\n * In flag mode, we feed a VIEW list that merges the original option with view fields:\n * { ...original, viewName, viewCode, original } and select by 'original'.\n */\n public flagOptions: Array<\n { viewName: string; viewCode: string; original: any } & any\n > = [];\n\n private translateService = inject(TranslateService);\n\n onDateClear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null);\n }\n\n constructor() {\n super();\n this.changeSubs$ = this.changeSub\n .asObservable()\n .pipe(\n debounceTime(300),\n switchMap((x) => of(x))\n )\n .subscribe((trigg: boolean) => {\n if (trigg) this.changes();\n });\n }\n\n override ngOnInit(): void {\n this.changes();\n }\n\n /** dataKey for legacy mode; lets PrimeNG match value to option by a stable field */\n get dataKeyProp(): string | undefined {\n const opts = this.control?.configuration?.options ?? [];\n const sample = opts[0] || {};\n if ('key' in sample) return 'key';\n if ('value' in sample) return 'value';\n return undefined;\n }\n\n /** Initialize/normalize options and current value */\n changes(): void {\n this.flagMode = !!this.control?.configuration?.flagMode;\n\n if (this.flagMode) {\n const currentLang = this.translateService.currentLang || 'en';\n const source = this.control.configuration.options || [];\n\n // Merge original option + view fields; keep original shape for the model\n this.flagOptions = source\n .map((o: any) => {\n const viewName =\n o.userFriendlyMessage ?? o.name ?? o['labelKeyValEn'] ?? '';\n const viewCode = (\n o.key ??\n o.code ??\n o.iso2 ??\n o.value ??\n ''\n ).toString();\n return { ...o, viewName, viewCode, original: o };\n })\n .filter(\n (vm: { viewName: any; viewCode: any }) => vm.viewName && vm.viewCode\n )\n .sort((a: { viewName: string }, b: { viewName: any }) =>\n a.viewName.localeCompare(b.viewName, currentLang, {\n sensitivity: 'base',\n })\n );\n\n // Normalize current value so the select can display it:\n // - if backend sent 'DE' (string) → find matching option by key/code and set the ORIGINAL object\n // - if backend sent { code:'DE', name:'Germany' } → map to ORIGINAL, or minimally to {key,userFriendlyMessage}\n const v = this.value;\n if (typeof v === 'string' && v) {\n const found = this.flagOptions.find(\n (o) =>\n (o.key && o.key.toLowerCase() === v.toLowerCase()) ||\n (o.viewCode && o.viewCode.toLowerCase() === v.toLowerCase())\n );\n if (found) {\n this.value = found.original;\n this.onChanged?.(this.value);\n }\n } else if (\n v &&\n typeof v === 'object' &&\n !('key' in v) &&\n ('code' in v || 'value' in v)\n ) {\n const key = (v.key ?? v.code ?? v.value ?? '').toString();\n const found = this.flagOptions.find(\n (o) =>\n (o.key && o.key.toLowerCase() === key.toLowerCase()) ||\n (o.viewCode && o.viewCode.toLowerCase() === key.toLowerCase())\n );\n if (found) {\n this.value = found.original;\n this.onChanged?.(this.value);\n } else {\n // fallback minimal normalization\n this.value = {\n key,\n userFriendlyMessage:\n v.userFriendlyMessage ?? v.name ?? v['labelKeyValEn'] ?? '',\n };\n this.onChanged?.(this.value);\n }\n }\n return;\n }\n\n // Legacy (no flags): keep previous behavior\n this.oiKey = 'userFriendlyMessage';\n const currentLang = this.translateService.currentLang;\n let soi = this.control.configuration.options?.[0];\n\n if (\n this.control.mandatory &&\n this.control.configuration.options?.length === 1\n ) {\n this.parentForm\n .get(this.control.configuration.key)\n ?.setValue(this.control.configuration.options[0]);\n }\n\n if (!this.parentForm.get(this.control.configuration.key)?.value) {\n this.control.configuration.options?.forEach((o: any, i: number) => {\n if (o.update?.default || o.default) {\n soi = this.control.configuration.options[i];\n this.parentForm.get(this.control.configuration.key)?.setValue(soi);\n }\n });\n }\n\n if (soi?.labelKeyValEn) {\n this.oiKey =\n 'labelKeyVal' +\n currentLang.charAt(0).toUpperCase() +\n currentLang.slice(1);\n return;\n }\n if (soi?.userFriendlyMessage) {\n this.oiKey = 'userFriendlyMessage';\n return;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n forwardRef,\n inject,\n Input,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DatePickerModule } from 'primeng/datepicker';\n\n@Component({\n selector: 'phoenix-meta-start-due-date',\n standalone: true,\n imports: [\n DatePickerModule,\n InlineFieldError,\n ReactiveFormsModule,\n FormsModule,\n MetaLabelComponent,\n TranslateModule,\n ],\n template: `\n <div [hidden]=\"control?.hidden\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <div class=\"flex align-items-center gap-2 w-full\">\n <!-- START -->\n <div class=\"flex-1\" style=\"min-width: 0;\">\n <p-datepicker\n class=\"w-full\"\n [inputStyle]=\"{ width: '100%' }\"\n [attr.data-cy]=\"'start-date-' + control?.id\"\n (onSelect)=\"onStartDateSelect($event)\"\n (onClearClick)=\"onStartDateClear()\"\n [(ngModel)]=\"startDate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [showIcon]=\"true\"\n [placeholder]=\"'LABELS.PLANNED_START' | translate\"\n appendTo=\"body\"\n ></p-datepicker>\n </div>\n\n <!-- ARROW -->\n <div class=\"flex align-items-center justify-content-center\" style=\"flex: 0 0 18px;\">\n <i class=\"pi pi-arrow-right text-sm\" style=\"color: var(--surface-600)\"></i>\n </div>\n\n <!-- DUE -->\n <div class=\"flex-1\" style=\"min-width: 0;\">\n <p-datepicker\n class=\"w-full\"\n [inputStyle]=\"{ width: '100%' }\"\n [attr.data-cy]=\"'due-date-' + control?.id\"\n (onSelect)=\"onEndDateSelect($event)\"\n (onClearClick)=\"onEndDateClear()\"\n [(ngModel)]=\"endDate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [showIcon]=\"true\"\n [placeholder]=\"'LABELS.PLANNED_END' | translate\"\n appendTo=\"body\"\n ></p-datepicker>\n </div>\n </div>\n\n <phoenix-inline-field-error [ctrl]=\"ctrl\"></phoenix-inline-field-error>\n </div>\n `,\n styles: [``],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaStartDueDateComponent),\n multi: true,\n },\n ],\n})\nexport class MetaStartDueDateComponent implements ControlValueAccessor {\n @Input() control: any;\n @Input() parentForm!: FormGroup;\n\n ctrl: any;\n private readonly dr = inject(DestroyRef);\n\n startDate: Date | null = null;\n endDate: Date | null = null;\n\n public onChanged: (value: any) => void = () => { };\n public onTouched: () => void = () => { };\n\n ngOnInit() {\n this.ctrl = this.parentForm.get(this.control.configuration.key);\n\n if (this.control.mandatory) this.ctrl?.setValidators(this.ctrl?.validator);\n\n this.parentForm\n .get(this.control.configuration.key)\n ?.valueChanges.pipe(takeUntilDestroyed(this.dr))\n .subscribe(() => this.validateDates());\n\n this.validateDates();\n }\n\n private normalizeDateOnly(v: any): Date | null {\n if (!v) return null;\n const d = v instanceof Date ? v : new Date(v);\n if (isNaN(d.getTime())) return null;\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 12, 0, 0, 0);\n }\n\n writeValue(obj: any): void {\n if (obj) {\n this.startDate = this.normalizeDateOnly(obj.startDate);\n this.endDate = this.normalizeDateOnly(obj.endDate);\n } else {\n this.startDate = null;\n this.endDate = null;\n }\n this.validateDates();\n }\n\n // Handle start date selection\n onStartDateSelect(event: any) {\n this.startDate = this.normalizeDateOnly(event);\n this.onChanged({ startDate: this.startDate, endDate: this.endDate });\n this.validateDates();\n }\n\n // Handle end date selection\n onEndDateSelect(event: any) {\n this.endDate = this.normalizeDateOnly(event);\n this.onChanged({ startDate: this.startDate, endDate: this.endDate });\n this.validateDates();\n }\n\n // Handle start date clear value\n onStartDateClear() {\n this.startDate = null;\n this.onChanged({ startDate: this.startDate, endDate: this.endDate });\n this.validateDates();\n }\n\n // Handle end date clear value\n onEndDateClear() {\n this.endDate = null;\n this.onChanged({ startDate: this.startDate, endDate: this.endDate });\n this.validateDates();\n }\n\n validateDates() {\n const c = this.parentForm.get(this.control.configuration.key);\n if (!c) return;\n\n // clear previous errors\n c.setErrors(null);\n\n // Both dates are mandatory\n if (this.control.mandatory && (!this.startDate || !this.endDate)) {\n c.setErrors({ required: true });\n return;\n }\n\n if (this.startDate && this.endDate) {\n const s = new Date(\n this.startDate.getFullYear(),\n this.startDate.getMonth(),\n this.startDate.getDate(),\n 12, 0, 0, 0\n ).getTime();\n\n const e = new Date(\n this.endDate.getFullYear(),\n this.endDate.getMonth(),\n this.endDate.getDate(),\n 12, 0, 0, 0\n ).getTime();\n\n if (s > e) {\n c.setErrors({ dueDate: true });\n return;\n }\n }\n }\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChanged = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\n\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n selector: 'phoenix-meta-switch',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InlineFieldError,\n MetaLabelComponent,\n TranslateModule,\n ToggleSwitchModule,\n FormsModule,\n MessageModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n <p-toggleSwitch\n [attr.data-cy]=\"'switch-' + control?.id\"\n class=\"ml-1 mr-1\"\n [hidden]=\"control?.hidden\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onChanged($event)\"\n [disabled]=\"disable\"\n ></p-toggleSwitch>\n\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n @if (control?.configuration?.message) {\n <p-message\n [severity]=\"control.configuration.message?.type\"\n variant=\"simple\"\n size=\"small\"\n styleClass=\"small-message\"\n >\n @if (control.configuration.message?.icon) {\n <ng-template #icon>\n <i\n [class]=\"control.configuration.message.icon\"\n style=\"font-size: 11px\"\n ></i>\n </ng-template>\n }\n <span style=\"font-style: italic;\">\n {{ control.configuration.message.content | translate }}\n </span></p-message\n >\n }\n </div>\n `,\n styles: [\n `\n :host ::ng-deep .p-toggleswitch {\n margin-top: 12px;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaSwitchComponent),\n multi: true,\n },\n ],\n})\nexport class MetaSwitchComponent extends BaseMetaField {}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { TextareaModule } from 'primeng/textarea';\n\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-text-area',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n TextareaModule,\n MetaLabelComponent,\n TranslateModule,\n InlineFieldError,\n ],\n template: `\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <textarea\n [attr.data-cy]=\"'text-area-' + control?.id\"\n [hidden]=\"control?.hidden\"\n [(ngModel)]=\"value\"\n (input)=\"onChanged(getInputValue($event))\"\n [disabled]=\"disable\"\n (blur)=\"onTouched()\"\n [rows]=\"5\"\n [cols]=\"30\"\n pTextarea\n class=\"w-full h-10rem\"\n ></textarea>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n `,\n styles: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaTextAreaComponent),\n multi: true,\n },\n ],\n})\nexport class MetaTextAreaComponent extends BaseMetaField {\n lang = inject(TranslateService).currentLang;\n private stripHtmlTags(input: string): string {\n if (!input) return '';\n // Replace <br> tags (and variations) with a temporary placeholder\n const placeholder = '___BR_TAG_PLACEHOLDER___';\n const brPattern = /<br\\s*\\/?>/gi;\n let textWithPlaceholders = input.replace(brPattern, placeholder);\n\n // Replace closing block-level tags with placeholder + newline for better formatting\n const blockTags = ['p', 'div', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n blockTags.forEach((tag) => {\n const closingTagPattern = new RegExp(`</${tag}>`, 'gi');\n textWithPlaceholders = textWithPlaceholders.replace(\n closingTagPattern,\n placeholder,\n );\n });\n\n // Strip all remaining HTML tags\n const textWithoutHtml = textWithPlaceholders.replace(/<\\/?[^>]+(>|$)/g, '');\n\n // Decode HTML entities\n const decodedText = this.decodeHtmlEntities(textWithoutHtml);\n\n // Replace placeholder back with newline characters for textarea\n // Clean up multiple consecutive newlines (max 2)\n return decodedText\n .replace(new RegExp(placeholder, 'g'), '\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n }\n\n private decodeHtmlEntities(text: string): string {\n const textarea = document.createElement('textarea');\n textarea.innerHTML = text;\n return textarea.value;\n }\n\n override writeValue(value: string): void {\n // Clean HTML before assigning\n this.value = this.stripHtmlTags(value);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n forwardRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport {\n NgxEditorComponent,\n NgxEditorMenuComponent,\n Editor,\n toHTML,\n toDoc,\n Toolbar,\n schema,\n} from 'ngx-editor';\nimport { ButtonModule } from 'primeng/button';\nimport { TextareaModule } from 'primeng/textarea';\nimport { Schema } from 'prosemirror-model';\n\n// Create a custom schema that extends the default ngx-editor schema\n// to support the 'type' attribute on ordered lists\nfunction createCustomSchema(): Schema {\n const baseSchema = schema;\n const customNodes = baseSchema.spec.nodes.update('ordered_list', {\n ...baseSchema.spec.nodes.get('ordered_list'),\n attrs: {\n order: { default: 1 },\n type: { default: null }, // Add support for type attribute (1, a, A, i, I)\n },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs: (dom: HTMLElement | string) => {\n if (typeof dom === 'string') return null;\n return {\n order: dom.hasAttribute('start')\n ? parseInt(dom.getAttribute('start') || '1', 10)\n : 1,\n type: dom.getAttribute('type') || null,\n };\n },\n },\n ],\n toDOM: (node: any) => {\n const attrs: any = { order: node.attrs.order };\n if (node.attrs.type) {\n attrs.type = node.attrs.type;\n }\n return ['ol', attrs, 0];\n },\n });\n\n return new Schema({\n nodes: customNodes,\n marks: baseSchema.spec.marks,\n });\n}\n\n@Component({\n selector: 'phoenix-meta-text-editor',\n standalone: true,\n imports: [\n CommonModule,\n MetaLabelComponent,\n ReactiveFormsModule,\n FormsModule,\n InlineFieldError,\n NgxEditorComponent,\n NgxEditorMenuComponent,\n ButtonModule,\n TextareaModule,\n ],\n template: `\n <div [hidden]=\"control?.hidden\">\n <!-- Preview/Display Only Mode -->\n <div *ngIf=\"previewMode\" class=\"preview-mode\">\n <phoenix-meta-label\n *ngIf=\"!hideLabel\"\n [control]=\"control\"\n ></phoenix-meta-label>\n <div class=\"html-preview-content\" [innerHTML]=\"htmlContent\"></div>\n </div>\n\n <!-- Edit Mode -->\n <div *ngIf=\"!previewMode\">\n <div class=\"mb-2\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n </div>\n <div [attr.data-cy]=\"'editor-' + control?.id\">\n <!-- Visual Editor Mode -->\n <div *ngIf=\"!isHtmlMode\">\n <ngx-editor-menu\n [editor]=\"editor\"\n [toolbar]=\"toolbar\"\n ></ngx-editor-menu>\n <ngx-editor\n [editor]=\"editor\"\n [(ngModel)]=\"htmlContent\"\n [disabled]=\"disable\"\n (ngModelChange)=\"onEditorChange($event)\"\n (blur)=\"onTouched()\"\n ></ngx-editor>\n </div>\n\n <!-- HTML Source Mode -->\n <textarea\n *ngIf=\"isHtmlMode\"\n pTextarea\n [(ngModel)]=\"htmlContent\"\n [disabled]=\"disable\"\n (ngModelChange)=\"onHtmlChange($event)\"\n (blur)=\"onTouched()\"\n [rows]=\"10\"\n class=\"w-full font-monospace\"\n ></textarea>\n </div>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n </div>\n `,\n styles: [\n `\n :host::ng-deep {\n .NgxEditor__Wrapper {\n min-height: 120px;\n }\n .NgxEditor__Content {\n min-height: 120px;\n }\n /* remove import image if needed */\n .NgxEditor__MenuItem--IconContainer[title='Insert Image'] {\n display: none !important;\n }\n\n .font-monospace {\n font-family: 'Courier New', Courier, monospace;\n font-size: 13px;\n }\n\n .html-preview-content {\n padding: 0.75rem;\n background: var(--surface-ground);\n border: 1px solid var(--surface-border);\n border-radius: var(--border-radius);\n min-height: 50px;\n\n /* Style the rendered HTML content */\n p {\n margin: 0 0 0.5rem 0;\n }\n\n p:last-child {\n margin-bottom: 0;\n }\n\n ul,\n ol {\n margin: 0.5rem 0;\n padding-left: 1.5rem;\n }\n\n strong {\n font-weight: bold;\n }\n\n em {\n font-style: italic;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin: 0.5rem 0;\n }\n }\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaTextEditorComponent),\n multi: true,\n },\n ],\n})\nexport class MetaTextEditorComponent\n extends BaseMetaField\n implements OnInit, OnDestroy\n{\n @Input() previewMode: boolean = false;\n @Input() hideLabel: boolean = false;\n\n editor!: Editor;\n isHtmlMode = false;\n htmlContent: string = '';\n\n toolbar: Toolbar = [\n ['bold', 'italic'],\n ['underline', 'strike'],\n ['code', 'blockquote'],\n ['ordered_list', 'bullet_list'],\n [{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],\n ['link'],\n ['text_color', 'background_color'],\n ['align_left', 'align_center', 'align_right', 'align_justify'],\n ];\n\n override ngOnInit(): void {\n super.ngOnInit();\n // Only initialize editor if not in preview mode\n if (!this.previewMode) {\n this.editor = new Editor({\n schema: createCustomSchema(),\n keyboardShortcuts: true,\n history: true,\n inputRules: true,\n });\n }\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n // Only destroy editor if it was initialized\n if (this.editor) {\n this.editor.destroy();\n }\n }\n\n override writeValue(value: string): void {\n this.value = value;\n this.htmlContent = this.removeLinks(value || '');\n }\n\n @HostListener('document:keydown', ['$event'])\n handleToggleShortcut(event: KeyboardEvent): void {\n // Hidden shortcut: Ctrl/Cmd + Shift + H\n const usesToggleKey =\n (event.ctrlKey || event.metaKey) &&\n event.shiftKey &&\n event.key.toLowerCase() === 'h';\n\n if (!usesToggleKey || this.previewMode || this.disable) {\n return;\n }\n\n event.preventDefault();\n this.toggleHtmlMode();\n }\n\n onEditorChange(content: any): void {\n // Convert to HTML if the editor outputs a JSON doc object\n if (content && typeof content === 'object') {\n this.htmlContent = toHTML(content);\n } else {\n this.htmlContent = content || '';\n }\n this.htmlContent = this.removeLinks(this.htmlContent);\n this.value = this.htmlContent;\n this.onChanged(this.htmlContent);\n }\n\n onHtmlChange(html: string): void {\n this.htmlContent = this.removeLinks(html);\n this.value = this.htmlContent;\n this.onChanged(this.htmlContent);\n }\n\n toggleHtmlMode(): void {\n this.isHtmlMode = !this.isHtmlMode;\n }\n\n private removeLinks(html: string): string {\n if (!html) {\n return '';\n }\n // Unwrap only anchor links (href starting with '#') while keeping their text\n return html.replace(\n /<a\\b[^>]*href\\s*=\\s*[\"']?#([^\"']*)[\"'][^>]*>(.*?)<\\/a>/gis,\n '$2'\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, inject } from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { InputTextModule } from 'primeng/inputtext';\nimport { KeyFilterModule } from 'primeng/keyfilter';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\n\n@Component({\n selector: 'phoenix-meta-text-input',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextModule,\n InlineFieldError,\n FormsModule,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <input\n [attr.data-cy]=\"'input-' + control?.id\"\n [hidden]=\"control?.hidden\"\n [(ngModel)]=\"value\"\n (input)=\"onChanged(getInputValue($event))\"\n (blur)=\"onTouched()\"\n [disabled]=\"disable\"\n type=\"text\"\n pInputText\n class=\"w-full\"\n [autocomplete]=\"'one-time-code'\"\n />\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [``],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaTextInputComponent),\n multi: true,\n },\n ],\n})\nexport class MetaTextInputComponent extends BaseMetaField {\n lang = inject(TranslateService).currentLang;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef, inject } from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroup,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { InputTextModule } from 'primeng/inputtext';\nimport { KeyFilterModule } from 'primeng/keyfilter';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { timePeriodFromMS } from '../../utils/form-fields.utils';\n\n@Component({\n selector: 'phoenix-meta-timeperiod',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextModule,\n InlineFieldError,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <input\n [attr.data-cy]=\"'time-period-' + control?.id\"\n [hidden]=\"control?.hidden\"\n [value]=\"value\"\n (input)=\"onChanged(getInputValue($event))\"\n (blur)=\"onTouched()\"\n [disabled]=\"isDisabled\"\n type=\"text\"\n pInputText\n class=\"w-full\"\n />\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaTimeperiodComponent),\n multi: true,\n },\n ],\n})\nexport class MetaTimeperiodComponent implements ControlValueAccessor {\n @Input() control: any;\n @Input() parentForm!: FormGroup;\n value!: string;\n ctrl: any;\n\n ngOnInit() {\n this.ctrl = this.parentForm.get(this.control.configuration.key);\n }\n\n public onChanged!: (value: string) => void;\n public onTouched!: () => void;\n public isDisabled!: boolean;\n getInputValue(event: Event): string {\n if (event.target instanceof HTMLInputElement) {\n return event.target.value;\n }\n if (event.target instanceof HTMLTextAreaElement) {\n return event.target.value;\n }\n return '';\n }\n writeValue(value: string | number | null | undefined): void {\n if (value === null || value === undefined || value === '') {\n this.value = '';\n return;\n }\n\n this.value = typeof value === 'string' ? value : timePeriodFromMS(value);\n }\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean) {\n this.isDisabled = isDisabled;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n ViewChild,\n forwardRef,\n inject,\n} from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { KeyFilterModule } from 'primeng/keyfilter';\n\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'phoenix-meta-upload',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextModule,\n InlineFieldError,\n FormsModule,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n\n FileUploadModule,\n ButtonModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <p-button\n [label]=\"\n file?.name\n ? ('LABELS.SELECTED_FILE' | translate) + ': ' + file?.name\n : (control?.configuration?.label | translate)\n \"\n icon=\"pi pi-upload\"\n class=\" white-space-nowrap overflow-hidden text-overflow-ellipsis\"\n (click)=\"triggerFileInput()\"\n [text]=\"true\"\n />\n\n <input\n [attr.data-cy]=\"'upload-' + control?.id\"\n #fileInput\n [accept]=\"control?.configuration?.accept\"\n id=\"file-upload\"\n [hidden]=\"control?.hidden\"\n [(ngModel)]=\"value\"\n (input)=\"onChanged(this.fileChange($event))\"\n (blur)=\"onTouched()\"\n [disabled]=\"disable\"\n [pKeyFilter]=\"\"\n type=\"file\"\n pInputText\n class=\"w-full\"\n />\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [\n `\n input[type='file'] {\n display: none;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaUploadComponent),\n multi: true,\n },\n ],\n})\nexport class MetaUploadComponent extends BaseMetaField {\n @ViewChild('fileInput') fileInput!: ElementRef;\n\n lang = inject(TranslateService).currentLang;\n file: any;\n fileChange(event: any) {\n this.file = event.target.files[0];\n return this.file;\n }\n\n triggerFileInput() {\n this.fileInput.nativeElement.click();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'fieldCol',\n standalone: true,\n})\nexport class FieldColPipe implements PipeTransform {\n transform(value: any, ...args: unknown[]): string {\n if (value.style) {\n return `col-${value.style.colWidth} `;\n } else {\n return 'col-12';\n }\n }\n}\n","export enum GlobalPhase {\n SC_PHASE = 'sc',\n RA_PHASE = 'ra',\n PRA_PHASE = 'pra',\n IA_PHASE = 'ia',\n GAP_PHASE = 'gap',\n ADMINISTRATION_PHASE = 'administration',\n WF_PHASE = 'workflow',\n REPORT_PHASE = 'reporting',\n MY_TASKS = 'my-tasks',\n ALL_TASKS = 'all-tasks',\n TASKBOARD = 'taskboards',\n SPACES = 'spaces',\n CATALOG = 'catalog',\n CATEGORIES = 'categories',\n DASHBOARD = 'dashboard',\n MONITORING = 'monitoring',\n RISK_OVERVIEW = 'RISK_OVERVIEW',\n}\n","export class SoTypes {\n static readonly COMPL_APPLIED_MODULE = 'COMPL_APPLIED_MODULE';\n static readonly COMPL_APPLIED_MEASURE = 'COMPL_APPLIED_MEASURE';\n static readonly COMPL_APPLIED_REQUIREMENT = 'COMPL_APPLIED_REQUIREMENT';\n static readonly COMPL_APPLIED_THREAT = 'COMPL_APPLIED_THREAT';\n static readonly COMPL_APPLIED_RISK = 'COMPL_APPLIED_RISK';\n static readonly COMPL_APPLIED_CONTROL = 'COMPL_APPLIED_CONTROL';\n\n static resolveUrlType(typeLabelKey: SoTypes | string) {\n switch (typeLabelKey) {\n case SoTypes.COMPL_APPLIED_MODULE:\n return SoTypesString.MODULES;\n case SoTypes.COMPL_APPLIED_CONTROL:\n return SoTypesString.CONTROLS;\n case SoTypes.COMPL_APPLIED_REQUIREMENT:\n return SoTypesString.REQUIREMENTS;\n case SoTypes.COMPL_APPLIED_MEASURE:\n return SoTypesString.MEASURES;\n case SoTypes.COMPL_APPLIED_THREAT:\n return SoTypesString.THREATS;\n case SoTypes.COMPL_APPLIED_RISK:\n return SoTypesString.RISKS;\n case 'COMPL_RISK_OBJECT':\n return SoTypesString.RISKS;\n default:\n return SoTypesString.MODULES;\n }\n }\n\n static resolveUrlTypeByString(stringType: SoTypesString | string) {\n switch (stringType) {\n case SoTypesString.MODULES:\n return SoTypes.COMPL_APPLIED_MODULE;\n case SoTypesString.CONTROLS:\n return SoTypes.COMPL_APPLIED_CONTROL;\n case SoTypesString.REQUIREMENTS:\n return SoTypes.COMPL_APPLIED_REQUIREMENT;\n case SoTypesString.MEASURES:\n return SoTypes.COMPL_APPLIED_MEASURE;\n case SoTypesString.THREATS:\n return SoTypes.COMPL_APPLIED_THREAT;\n case SoTypesString.RISKS:\n return SoTypes.COMPL_APPLIED_RISK;\n default:\n return SoTypes.COMPL_APPLIED_MODULE;\n }\n }\n}\n\nexport enum SoTypesString {\n MODULES = 'modules',\n REQUIREMENTS = 'requirements',\n MEASURES = 'measures',\n THREATS = 'threats',\n RISKS = 'risks',\n VULNERABILITIES = 'vulnerabilities',\n DAMAGE_SCENARIO = 'damagescenarios',\n RISK_TREATMENT = 'risktreatments',\n CONTROLS = 'controls',\n ADDITIONAL_MEASURES = 'additionalmeasures',\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'stripHtml',\n standalone: true,\n})\nexport class StripHtmlPipe implements PipeTransform {\n transform(value: string | null | undefined): string {\n if (!value) return '';\n return value.replace(/<\\/?[^>]+(>|$)/g, '');\n }\n}","import {\n AfterViewInit,\n Component,\n DestroyRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { FormGroup, FormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { PasswordModule } from 'primeng/password';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { PopoverModule } from 'primeng/popover';\nimport { PanelModule } from 'primeng/panel';\nimport { ButtonModule } from 'primeng/button';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { distinctUntilChanged } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { GlobalPhase } from '../../utils/global-phase.utils';\nimport { SoTypes } from '../../utils/so-types';\nimport { ControlType } from '../../utils/control-type.enum';\nimport { timePeriodFromMS } from '../../utils/form-fields.utils';\nimport { StripHtmlPipe } from '../../utils/strip-html.pipe';\n\n@Component({\n selector: 'phoenix-read-only-input',\n standalone: true,\n imports: [\n CommonModule,\n MetaLabelComponent,\n FormsModule,\n\n ToggleSwitchModule,\n CheckboxModule,\n PasswordModule,\n SelectButtonModule,\n\n TranslateModule,\n\n PopoverModule,\n PanelModule,\n ButtonModule,\n\n StripHtmlPipe,\n ],\n templateUrl: './read-only-input.component.html',\n styleUrls: ['./read-only-input.component.scss'],\n})\nexport class ReadOnlyInputComponent implements OnInit, AfterViewInit {\n @Input() control: any;\n @Input() metaform!: FormGroup;\n\n value!: any;\n ctrlType = ControlType;\n\n constructor(\n private sanitizer: DomSanitizer,\n private translateService: TranslateService,\n private dr: DestroyRef\n ) {}\n\n ngAfterViewInit(): void {\n this.metaform\n .get(this.control.configuration.key)\n ?.valueChanges.pipe(takeUntilDestroyed(this.dr), distinctUntilChanged())\n .subscribe(() => {\n this.setData();\n });\n }\n\n ngOnInit() {\n this.setData();\n }\n\n resolvePhase(type: string) {\n switch (type) {\n case SoTypes.COMPL_APPLIED_THREAT:\n case SoTypes.COMPL_APPLIED_MEASURE:\n case SoTypes.COMPL_APPLIED_MODULE:\n case SoTypes.COMPL_APPLIED_REQUIREMENT:\n case SoTypes.COMPL_APPLIED_CONTROL:\n return GlobalPhase.SC_PHASE;\n case SoTypes.COMPL_APPLIED_THREAT:\n case 'COMPL_RISK_OBJECT':\n return GlobalPhase.RA_PHASE;\n case 'CVE':\n return 'CVE';\n default:\n return GlobalPhase.IA_PHASE;\n }\n }\n\n setData(): void {\n switch (this.control.configuration.type) {\n case ControlType.CURRENCY:\n this.value = this.metaform.get(this.control.configuration.key)?.value;\n break;\n\n case ControlType.SS_OPTION: {\n const data = this.metaform.get(this.control.configuration.key)?.value;\n if (!data) {\n this.value = null;\n break;\n }\n\n if (this.control.configuration.flagMode) {\n this.value = {\n key: data.key ?? data.code,\n userFriendlyMessage:\n data.userFriendlyMessage ?? data.name ?? data['labelKeyValEn'],\n };\n } else {\n const lang = localStorage.getItem('language') ?? 'en';\n const formattedLang =\n lang.charAt(0).toUpperCase() + lang.slice(1).toLowerCase();\n const val = data?.[`labelKeyVal${formattedLang}`];\n this.value = val ? val : data?.userFriendlyMessage;\n }\n break;\n }\n\n case ControlType.MS_OPTION: {\n const values = this.metaform.get(this.control.configuration.key)?.value;\n const maxItems = 4;\n\n if (values?.length) {\n this.value =\n values.length <= maxItems\n ? values.map((v: any) => v.userFriendlyMessage).join(', ')\n : values\n .slice(0, maxItems)\n .map((v: any) => v.userFriendlyMessage)\n .join(', ') + ' ...';\n } else {\n this.value = '';\n }\n break;\n }\n\n case ControlType.DATE:\n case ControlType.START_DUE_DATE:\n this.value = this.metaform.get(this.control.configuration.key)?.value;\n break;\n\n case ControlType.LINKS_DATA:\n this.value = this.control?.data?.task?.links;\n break;\n\n case ControlType.TIMEPERIOD: {\n const formValue = this.metaform.get(this.control.configuration.key)?.value;\n this.value =\n typeof formValue === 'string' ? formValue : timePeriodFromMS(formValue);\n break;\n }\n\n case ControlType.TEXT_AREA: {\n const textAreaContent = this.metaform.get(this.control.configuration.key)?.value;\n this.value = textAreaContent ? this.stripHtmlTags(textAreaContent) : null;\n break;\n }\n\n case ControlType.SWITCH:\n this.value = {\n isBoolean:\n typeof this.metaform.get(this.control.configuration.key)?.value ===\n 'boolean',\n res: this.metaform.get(this.control.configuration.key)?.value,\n };\n break;\n\n default:\n this.value = this.metaform.get(this.control.configuration.key)?.value;\n break;\n }\n }\n\n private stripHtmlTags(input: string): string {\n if (!input) return '';\n const placeholder = '___BR_TAG_PLACEHOLDER___';\n const brPattern = /<br\\s*\\/?>/gi;\n let textWithPlaceholders = input.replace(brPattern, placeholder);\n\n const blockTags = ['p', 'div', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n blockTags.forEach((tag) => {\n const closingTagPattern = new RegExp(`</${tag}>`, 'gi');\n textWithPlaceholders = textWithPlaceholders.replace(\n closingTagPattern,\n placeholder\n );\n });\n\n const textWithoutHtml = textWithPlaceholders.replace(/<\\/?[^>]+(>|$)/g, '');\n const decodedText = this.decodeHtmlEntities(textWithoutHtml);\n\n return decodedText\n .replace(new RegExp(placeholder, 'g'), '\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n }\n\n private decodeHtmlEntities(text: string): string {\n const textarea = document.createElement('textarea');\n textarea.innerHTML = text;\n return textarea.value;\n }\n}","<phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n@switch (control.configuration.type) {\n @case (ctrlType.TEXT_EDITOR) {\n @if (value) {\n <div\n [attr.data-cy]=\"'editor-' + control?.id\"\n class=\"read-only-editor-content\"\n [innerHTML]=\"value\"\n ></div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.TEXT_AREA) {\n <div\n class=\"w-full mt-3 mb-2 font-semibold text-500 whitespace-pre-line\"\n [attr.data-cy]=\"'textarea-' + control?.id\"\n [hidden]=\"control?.hidden\"\n [innerText]=\"value\"\n ></div>\n }\n\n @case (ctrlType.SWITCH) {\n @if (value?.isBoolean) {\n <p-toggleSwitch\n [attr.data-cy]=\"'switch-' + control?.id\"\n styleClass=\"mt-2 ml-1 mr-1\"\n [disabled]=\"true\"\n [(ngModel)]=\"value.res\"\n ></p-toggleSwitch>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.DATE) {\n @if (value) {\n <div\n [attr.data-cy]=\"'date-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value | date }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.START_DUE_DATE) {\n @if (value?.startDate) {\n <div\n [attr.data-cy]=\"'date-' + control?.id\"\n class=\"flex font-semibold text-500 mt-3 mb-2\"\n >\n <span style=\"padding-top: 3px\">{{ value.startDate | date }}</span>\n <div class=\"flex align-items-center p-2\">\n <i class=\"pi pi-arrow-right text-sm\" style=\"color: 'var(--surface-600)'\"></i>\n </div>\n <span style=\"padding-top: 3px\">{{ value.endDate | date }}</span>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.CHECKBOX) {\n @if (value) {\n <p-checkbox\n [attr.data-cy]=\"'checkbox-' + control?.id\"\n styleClass=\"mt-3\"\n [(ngModel)]=\"value\"\n [binary]=\"true\"\n inputId=\"binary\"\n [disabled]=\"true\"\n ></p-checkbox>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.LINKS_DATA) {\n @if (value) {\n <div\n class=\"font-semibold text-500 mt-3 mb-2 overflow-y-auto\"\n [attr.data-cy]=\"'link-' + control?.id\"\n >\n @for (item of value; track item) {\n <span class=\"m-2 text-sm font-light\">{{ item?.relationLabel }}</span>\n }\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.ASSIGN) {\n @if (value?.name) {\n <div [attr.data-cy]=\"'number-' + control?.id\">\n <div>\n <p-button [rounded]=\"true\" [text]=\"true\" (onClick)=\"op.toggle($event)\">\n <div class=\"person-wrap\">\n <div class=\"person-avatar\">\n {{ value?.name?.toUpperCase().charAt(0) }}\n </div>\n <div>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ value?.name }}\n </p>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ value?.function }}\n </p>\n </div>\n </div>\n </p-button>\n\n <p-popover #op [dismissable]=\"true\">\n <div>\n <span class=\"block mb-2\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{ value.email ?? ' --' }}\n </span>\n <p>\n <i class=\"pi pi-phone mr-1 text-500\"></i>{{ value.phone ?? ' --' }}\n </p>\n </div>\n </p-popover>\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.CURRENCY) {\n @if (value) {\n <div\n [attr.data-cy]=\"'currency-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value }}&nbsp; &#8364;\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.PASSWORD) {\n @if (value) {\n <div\n [attr.data-cy]=\"'password-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n <p-password\n class=\"ng-invalid ng-dirty\"\n [disabled]=\"true\"\n [(ngModel)]=\"value\"\n [feedback]=\"false\"\n ></p-password>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.SS_OPTION_OBJECT_BASED) {\n @if (value) {\n <div\n [attr.data-cy]=\"'SS-OPTION-OBJECT-BASED-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value.value }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.MS_OPTION) {\n @if (value) {\n <div\n [attr.data-cy]=\"'MS-OPTION-OBJECT-BASED-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2 white-space-nowrap overflow-hidden\"\n >\n {{ value }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case (ctrlType.SS_OPTION) {\n @if (control?.configuration?.flagMode) {\n @if (value) {\n <div\n [attr.data-cy]=\"'SS-OPTION-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2 flex align-items-center gap-2\"\n >\n @if (value?.key) {\n <img\n src=\"https://primefaces.org/cdn/primeng/images/demo/flag/flag_placeholder.png\"\n [class]=\"'flag flag-' + value.key.toLowerCase()\"\n style=\"width: 22px\"\n alt=\"\"\n />\n }\n <span>{{ value.userFriendlyMessage }}</span>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n } @else {\n @if (value) {\n <div\n [attr.data-cy]=\"'SS-OPTION-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value | translate }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n }\n\n @case (ctrlType.NUMBER) {\n @if (value != null) {\n <div\n [attr.data-cy]=\"'number-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @default {\n @if (value) {\n <div\n [attr.data-cy]=\"'test-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n {{ value | stripHtml }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n}\n\n<ng-template #fallBack>\n <div\n [attr.data-cy]=\"'test-' + control?.id\"\n class=\"font-semibold text-500 mt-3 mb-2\"\n >\n --\n </div>\n</ng-template>","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef, inject } from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroup,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { PanelModule } from 'primeng/panel';\nimport { PopoverModule } from 'primeng/popover';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { ObjectItemDialogComponent } from '../object-item-dialog/object-item-dialog.component';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { tableColumnType } from '../../../data-table/utils/dataTable.enum';\n\n@Component({\n selector: 'phoenix-meta-assign-asset',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n MetaLabelComponent,\n TranslateModule,\n PopoverModule,\n PanelModule,\n ],\n template: `\n <div [style.display]=\"control?.hidden ? 'none' : 'block'\">\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n\n @if (\n parentForm?.controls?.[control?.configuration?.key]?.value &&\n parentForm?.controls?.[control?.configuration?.key]?.value?.uuid\n ) {\n <div\n class=\"flex align-items-center\"\n [attr.data-cy]=\"'assign-' + control?.id\"\n >\n <div>\n <p-button [rounded]=\"true\" [text]=\"true\" (onClick)=\"op.toggle($event)\">\n <div class=\"person-wrap\">\n <div class=\"person-avatar\">\n {{\n parentForm.controls[control.configuration.key].value?.name\n ?.charAt(0)\n }}\n </div>\n\n <div>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ parentForm.controls[control.configuration.key].value?.name }}\n </p>\n\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ parentForm.controls[control.configuration.key].value?.title }}\n </p>\n </div>\n </div>\n </p-button>\n\n <p-popover #op [dismissable]=\"true\">\n <div class=\"person-details\">\n <span class=\"block mb-2\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{\n parentForm.controls[control.configuration.key].value?.email ??\n ' --'\n }}\n </span>\n\n <p>\n <i class=\"pi pi-phone mr-1 text-500\"></i>\n {{\n parentForm.controls[control.configuration.key].value?.phone ??\n ' --'\n }}\n </p>\n </div>\n </p-popover>\n </div>\n\n <div style=\"padding-bottom: 4px\">\n <p-button\n styleClass=\"p-button-sm mt-1\"\n type=\"button\"\n [text]=\"true\"\n label=\"{{ 'ACTION.REASSIGN' | translate }}\"\n (click)=\"assignAsset()\"\n ></p-button>\n\n <p-button\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"clear()\"\n [text]=\"true\"\n styleClass=\"p-button-danger p-button-sm mt-1 ml-2\"\n ></p-button>\n </div>\n </div>\n } @else {\n <p-button\n type=\"button\"\n icon=\"pi pi-user-plus\"\n styleClass=\"p-button-sm mt-1\"\n label=\"{{ 'ACTION.ASSIGN' | translate }}\"\n (click)=\"assignAsset()\"\n [text]=\"true\"\n ></p-button>\n }\n </div>\n `,\n styles: [\n `\n .person-wrap {\n display: flex;\n align-items: center;\n margin-left: -6px;\n\n & p {\n margin: 0;\n }\n\n .person-avatar {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 28px;\n height: 28px;\n min-width: 28px;\n min-height: 28px;\n margin-right: 5px;\n background-color: rgb(233, 66, 96);\n color: white;\n border-radius: 50%;\n font-size: 1rem;\n }\n\n .person-name :first-child {\n font-size: 1rem;\n }\n }\n\n .person-details {\n border-top: 1px solid #e0e0e0;\n padding: 5px;\n margin-left: -6px;\n width: 150px;\n\n p {\n margin: 0;\n display: flex;\n align-items: center;\n }\n\n i {\n color: #e94260;\n padding-right: 5px;\n }\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaAssignAssetComponent),\n multi: true,\n },\n ],\n})\nexport class MetaAssignAssetComponent implements ControlValueAccessor {\n @Input() control: any;\n @Input() parentForm!: FormGroup;\n @Input() disable?: boolean;\n\n public onChanged!: (value: any) => void;\n public onTouched!: () => void;\n public isDisabled!: boolean;\n\n private translateService = inject(TranslateService);\n private dialogService = inject(DialogService);\n\n person!: any;\n\n writeValue(_value: any): void {}\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean) {\n this.isDisabled = isDisabled;\n }\n\n clear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null);\n this.onChanged?.(null);\n this.onTouched?.();\n }\n\n assignAsset() {\n const ref = this.dialogService.open(ObjectItemDialogComponent, {\n header: this.translateService.instant('LABELS.ASSIGN_ASSET_GROUP'),\n width: '700px',\n height: '400px',\n modal: true,\n data: {\n tableData: this.control.configuration.items,\n columns: [\n {\n field: 'name',\n header: 'LABELS.Name',\n columnType: tableColumnType.TEXT,\n },\n {\n field: 'title',\n header: 'LABELS.TITLE',\n columnType: tableColumnType.TEXT,\n },\n ],\n },\n contentStyle: { overflow: 'auto' },\n draggable: true,\n closable: true,\n });\n\n if (ref) {\n ref.onClose.subscribe((response: any) => {\n if (response) {\n this.person = response;\n this.parentForm.controls[this.control.configuration.key].setValue(response);\n this.onChanged?.(response);\n this.onTouched?.();\n }\n });\n }\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n ViewChild,\n forwardRef,\n inject,\n} from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InlineFieldError } from '../../meta-field-error/inline-field-error.component';\nimport { MetaLabelComponent } from '../../meta-field-label/meta-label.component';\nimport { BaseMetaField } from '../../utils/base-meta-field';\nimport { KeyFilterModule } from 'primeng/keyfilter';\n\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'phoenix-meta-upload-dragdrop',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextModule,\n InlineFieldError,\n FormsModule,\n MetaLabelComponent,\n TranslateModule,\n KeyFilterModule,\n FileUploadModule,\n ButtonModule,\n ],\n template: `\n <div>\n <phoenix-meta-label [control]=\"control\"></phoenix-meta-label>\n <p-fileUpload\n [attr.data-cy]=\"'upload-' + control?.id\"\n #fileInput\n [multiple]=\"false\"\n [accept]=\"control?.configuration?.accept\"\n maxFileSize=\"10485760\"\n styleClass=\"mb-3\"\n [hidden]=\"control?.hidden\"\n [showUploadButton]=\"false\"\n [showCancelButton]=\"false\"\n [disabled]=\"disable\"\n (onSelect)=\"onFileSelect($event)\"\n (onRemove)=\"onFileRemove($event)\"\n (onClear)=\"onFileClear()\"\n [chooseLabel]=\"'LABELS.BROWSE' | translate\"\n chooseIcon=\"pi pi-upload\"\n >\n <ng-template\n #header\n let-files\n let-chooseCallback=\"chooseCallback\"\n let-clearCallback=\"clearCallback\"\n let-uploadCallback=\"uploadCallback\"\n >\n <div class=\"flex justify-content-center w-full\">\n <p-button\n (onClick)=\"choose($event, chooseCallback)\"\n icon=\"pi pi-upload\"\n [label]=\"\n file?.name\n ? ('LABELS.SELECTED_FILE' | translate) + ': ' + file?.name\n : ('LABELS.BROWSE' | translate)\n \"\n severity=\"secondary\"\n />\n </div>\n </ng-template>\n <ng-template #empty>\n @if(ctrl.value){\n <div class=\"flex align-items-center justify-content-between\t w-full\">\n <div>\n <div>{{ ctrl.value['fileName'] }}</div>\n <div>{{ ctrl.value['size'] }} KB</div>\n </div>\n <p-button\n icon=\"pi pi-times\"\n [rounded]=\"true\"\n [text]=\"true\"\n severity=\"danger\"\n (onClick)=\"onFileRemove($event)\"\n />\n </div>\n\n } @else{\n <div class=\"text-center\">\n <div>\n <i\n style=\"font-size: 55px; opacity: 0.2\"\n class=\"pi pi-cloud-upload\"\n ></i>\n <p class=\"\">\n {{ 'PLACEHOLDERS.DRAG_AND_DROP_MESSAGE' | translate }}\n </p>\n </div>\n </div>\n }\n </ng-template>\n </p-fileUpload>\n <phoenix-inline-field-error\n *ngIf=\"!control?.hidden\"\n [ctrl]=\"ctrl\"\n ></phoenix-inline-field-error>\n </div>\n `,\n styles: [\n `\n input[type='file'] {\n display: none;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaUploadComponentDragDrop),\n multi: true,\n },\n ],\n})\nexport class MetaUploadComponentDragDrop extends BaseMetaField {\n @ViewChild('fileInput') fileInput!: ElementRef;\n fakeFile: any;\n\n createFakeFile(\n fileName: string,\n size: number,\n type: string = 'application/pdf'\n ): File {\n const emptyBuffer = new ArrayBuffer(size);\n const blob = new Blob([emptyBuffer], { type });\n\n return new File([blob], fileName, {\n type: type,\n lastModified: Date.now(),\n });\n }\n\n choose(event: any, callback: any) {\n callback();\n }\n\n ngAfterViewInit() {\n const { fileName, size, type } = this.ctrl.value;\n\n this.fakeFile = this.createFakeFile(fileName, size, type);\n\n this.file = this.fakeFile;\n }\n\n onFileSelect(event: any) {\n const selectedFile = event.files?.[0] || event.currentFiles?.[0];\n\n if (selectedFile) {\n this.file = selectedFile;\n\n this.onChanged(selectedFile);\n this.onTouched();\n }\n }\n\n onFileRemove(event: any) {\n this.file = null;\n this.onChanged(null);\n this.onTouched();\n }\n\n onFileClear() {\n this.file = null;\n this.onChanged(null);\n this.onTouched();\n }\n\n lang = inject(TranslateService).currentLang;\n file: any;\n\n // Keep this method for consistency, though it's not directly used in drag-drop\n fileChange(event: any) {\n this.file = event.target.files[0];\n\n return this.file;\n }\n\n triggerFileInput() {\n this.fileInput.nativeElement.click();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n OnChanges,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n///Meta Fields\nimport { MetaFormAbstract } from './meta-form-abstract';\nimport { MetaAssignResponsibleComponent } from './meta-form-fields/meta-assign-responsible/meta-assign-responsible.component';\nimport { MetaCalendarComponent } from './meta-form-fields/meta-calendar/meta-calendar.component';\nimport { MetaCheckboxColorPickerComponent } from './meta-form-fields/meta-checkbox-color-picker/meta-checkbox-color-picker.component';\nimport { MetaCheckboxComponent } from './meta-form-fields/meta-checkbox/meta-checkbox.component';\nimport { MetaColorPickerComponent } from './meta-form-fields/meta-color-picker/meta-color-picker.component';\nimport { MetaCurrencyComponent } from './meta-form-fields/meta-currency/meta-currency.component';\nimport { MetaMultipleSelectComponent } from './meta-form-fields/meta-multiple-select/meta-multiple-select.component';\nimport { MetaNumberComponent } from './meta-form-fields/meta-number-input/meta-number-input.component';\nimport { MetaPasswordFeildComponent } from './meta-form-fields/meta-password-feild/meta-password-feild.component';\nimport { MetaSelectButtonComponent } from './meta-form-fields/meta-select-button/meta-select-button.component';\nimport { MetaSingleSelectObjectBasedComponent } from './meta-form-fields/meta-single-select-object-based/meta-single-select-object_based.component';\nimport { MetaSingleSelectComponent } from './meta-form-fields/meta-single-select/meta-single-select.component';\nimport { MetaStartDueDateComponent } from './meta-form-fields/meta-start-due-date/meta-start-due-date.component';\nimport { MetaSwitchComponent } from './meta-form-fields/meta-switch/meta-switch.component';\nimport { MetaTextAreaComponent } from './meta-form-fields/meta-text-area/meta-text-area.component';\nimport { MetaTextEditorComponent } from './meta-form-fields/meta-text-editor/meta-text-editor.component';\nimport { MetaTextInputComponent } from './meta-form-fields/meta-text-input/meta-text-input.component';\nimport { MetaTimeperiodComponent } from './meta-form-fields/meta-timeperiod/meta-timeperiod.component';\nimport { MetaUploadComponent } from './meta-form-fields/meta-upload/meta-upload.component';\n\nimport { FieldColPipe } from './utils/field-col.pipe';\nimport { MetaFormService } from './services/meta-form.service';\nimport { HttpClient } from '@angular/common/http';\nimport { ControlType } from './utils/control-type.enum';\nimport { ReadOnlyInputComponent } from './meta-form-templates/read-only-input/read-only-input.component';\nimport { MetaAssignAssetComponent } from './meta-form-fields/meta-assign-asset/meta-assign-asset.component';\nimport { MetaUploadComponentDragDrop } from './meta-form-fields/meta-upload-dragdrop/meta-upload-dragdrop.component';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'phoenix-meta-form',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ButtonModule,\n TranslateModule,\n ReactiveFormsModule,\n FieldColPipe,\n //metafields -> to one module and than import here\n MetaTextEditorComponent,\n MetaCheckboxComponent,\n MetaTextInputComponent,\n MetaSingleSelectComponent,\n MetaStartDueDateComponent,\n MetaTextAreaComponent,\n MetaTextEditorComponent,\n MetaMultipleSelectComponent,\n MetaCalendarComponent,\n MetaUploadComponentDragDrop,\n MetaSwitchComponent,\n MetaPasswordFeildComponent,\n MetaTimeperiodComponent,\n MetaCurrencyComponent,\n MetaNumberComponent,\n MetaAssignResponsibleComponent,\n MetaAssignAssetComponent,\n MetaColorPickerComponent,\n ReadOnlyInputComponent,\n MetaSelectButtonComponent,\n MetaUploadComponent,\n MetaSingleSelectObjectBasedComponent,\n MetaCheckboxColorPickerComponent,\n ],\n templateUrl: './meta-form.component.html',\n styleUrls: ['./meta-form.component.scss'],\n //changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MetaFormComponent extends MetaFormAbstract implements OnChanges {\n constructor(\n fb: FormBuilder,\n metaService: MetaFormService,\n\n translateService: TranslateService,\n http: HttpClient\n // env: EnvService\n ) {\n super(fb, metaService, translateService, http);\n }\n\n public ControlType = ControlType;\n optionLabel!: string;\n\n ngOnChanges(simpleChanges: SimpleChanges): void {\n ///set dirty only when metaform changes, not others from simplechanges\n ///optimize this. check what is needed for creating form\n\n if (\n simpleChanges?.['metaFormControls'] ||\n simpleChanges?.['metaFormValues'] ||\n simpleChanges?.['metaForm']\n ) {\n this.createForm(this.metaFormControls);\n this.metaService.setFormDirtyStatus(this.metaForm.dirty);\n }\n }\n}\n","<form autocomplete=\"off\" [formGroup]=\"metaForm\" (ngSubmit)=\"onSubmit()\">\n <div class=\"grid\" [style]=\"formStyle\">\n @for (control of metaFormControls; track control?.id) {\n @switch (control.configuration.type) {\n @case (ControlType.TEXT) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'text-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-text-input\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-input>\n }\n </div>\n }\n\n @case (ControlType.NUMBER) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'number-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-number-input\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-number-input>\n }\n </div>\n }\n\n @case (ControlType.TIMEPERIOD) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'timeperiod-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-timeperiod\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-timeperiod>\n }\n </div>\n }\n\n @case (ControlType.CURRENCY) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'currency-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-currency\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-currency>\n }\n </div>\n }\n\n @case (ControlType.TEXT_AREA) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'text-area-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-text-area\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-area>\n }\n </div>\n }\n\n @case (ControlType.SS_OPTION) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'ss-option-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-single-select\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-single-select>\n }\n </div>\n }\n\n @case (ControlType.SS_OPTION_OBJECT_BASED) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'ss-option-object-based-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-single-select-object-based\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-single-select-object-based>\n }\n </div>\n }\n\n @case (ControlType.MS_OPTION) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'ms-option-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-multiple-select\n [attr.data-cy]=\"'multiSelect-' + control?.id\"\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-multiple-select>\n }\n </div>\n }\n\n @case (ControlType.START_DUE_DATE) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'start-due-date-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-start-due-date\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-start-due-date>\n }\n </div>\n }\n\n @case (ControlType.DATE) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'date-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-calendar\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-calendar>\n }\n </div>\n }\n\n @case (ControlType.TEXT_EDITOR) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'text-editor-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-text-editor\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-editor>\n }\n </div>\n }\n\n @case (ControlType.CHECKBOX) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column justify-content-end\"\n [attr.data-cy]=\"'checkbox-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-checkbox\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-checkbox>\n }\n </div>\n }\n\n @case (ControlType.CHECKBOX_COLOR) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column justify-content-end\"\n [attr.data-cy]=\"'CHECKBOX_COLOR-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-checkbox-color-picker\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-checkbox-color-picker>\n }\n </div>\n }\n\n @case (ControlType.SWITCH) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'switch-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-switch\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-switch>\n }\n </div>\n }\n\n @case (ControlType.SELECT_BUTTON) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'select-button-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-select-button\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-select-button>\n }\n </div>\n }\n\n @case (ControlType.ASSIGN) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'assign-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-assign-responsible\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-assign-responsible>\n }\n </div>\n }\n\n @case (ControlType.ASSIGN_ASSET) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'assign-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-assign-asset\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-assign-asset>\n }\n </div>\n }\n\n @case (ControlType.LINKS_DATA) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control | fieldCol\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'links-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <!-- <phoenix-meta-object-links\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-object-links> -->\n }\n </div>\n }\n\n @case (ControlType.PASSWORD) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'password-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-password-feild\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-password-feild>\n }\n </div>\n }\n\n @case (ControlType.COLOR) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'color-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-color-picker\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-color-picker>\n }\n </div>\n }\n\n @case (ControlType.UPLOAD) {\n <div\n [style]=\"{ order: control.order }\"\n [attr.data-cy]=\"'upload-' + control?.id\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-upload\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-upload>\n }\n </div>\n }\n\n @case (ControlType.UPLOAD_DRAG_DROP) {\n <div\n [style]=\"{ order: control.order }\"\n [attr.data-cy]=\"'upload-' + control?.id\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-upload-dragdrop\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-upload-dragdrop>\n }\n </div>\n }\n\n @case (ControlType.SLOT) {\n <ng-content [select]=\"[control.configuration.key]\"></ng-content>\n }\n }\n }\n </div>\n\n @if (formButtons) {\n <div class=\"flex justify-content-end\">\n <p-button\n class=\"mr-1\"\n [disabled]=\"!metaForm.valid || disableForm\"\n type=\"submit\"\n label=\"{{ 'ACTION.SAVE' | translate }}\"\n [attr.data-cy]=\"'submit-button'\"\n [loading]=\"loading\"\n ></p-button>\n\n <p-button\n [disabled]=\"disableForm\"\n styleClass=\"p-button-link\"\n [text]=\"true\"\n (onClick)=\"onCancel()\"\n label=\"{{ 'ACTION.CANCEL' | translate }}\"\n [attr.data-cy]=\"'cancel-button'\"\n ></p-button>\n </div>\n }\n</form>\n","import {\n Component,\n EventEmitter,\n input,\n Input,\n model,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { FormsModule } from '@angular/forms';\nimport { Observable, combineLatest, Subscription } from 'rxjs';\nimport { MetaFormService } from '../services/meta-form.service';\n\n@Component({\n selector: 'phoenix-meta-form-buttons',\n standalone: true,\n imports: [\n CommonModule,\n ButtonModule,\n TranslateModule,\n CheckboxModule,\n FormsModule,\n ],\n templateUrl: './meta-form-buttons.component.html',\n styleUrls: ['./meta-form-buttons.component.scss'],\n providers: [],\n})\nexport class MetaFormButtonsComponent implements OnInit, OnDestroy {\n isDisabled = input<boolean>();\n isCreateAnother = input<boolean>(false);\n isLoading = input<boolean>(false);\n\n @Output() handleSave = new EventEmitter<any>();\n @Output() handleCancel = new EventEmitter<any>();\n\n display!: boolean;\n formActive$!: Observable<boolean>;\n createAnother!: boolean;\n sub$!: Subscription;\n\n constructor(private metaFormService: MetaFormService) {\n this.formActive$ = this.metaFormService.formReadOnlyState;\n }\n ngOnInit(): void {\n this.sub$ = combineLatest([\n this.metaFormService.currentFormTabContent,\n this.metaFormService.formReadOnlyState,\n ]).subscribe((r) => {\n let [formTabContent, formReadOnlyStatus] = r;\n if (formTabContent === 'FORM' && !formReadOnlyStatus) {\n this.display = true;\n } else {\n this.display = false;\n }\n });\n }\n\n ngOnDestroy(): void {\n this.sub$?.unsubscribe();\n }\n}\n","<!-- <ng-template *ngIf=\"formActive$ | async as formState\" pTemplate=\"footer\">\n <div *ngIf=\"!formState\" class=\"flex justify-content-end p-2\"> -->\n<div *ngIf=\"display\" class=\"flex justify-content-end p-2\">\n <p-checkbox\n *ngIf=\"isCreateAnother()\"\n id=\"dialog-buttons-checkbox\"\n data-cy=\"dialog-buttons-checkbox-cy\"\n [(ngModel)]=\"createAnother\"\n [binary]=\"true\"\n inputId=\"binary\"\n class=\"mr-3\"\n ></p-checkbox>\n\n <button\n class=\"mr-2\"\n pButton\n [disabled]=\"isDisabled()\"\n [loading]=\"isLoading()\"\n (click)=\"handleSave.emit({ isAnother: createAnother })\"\n [attr.data-cy]=\"'submit-button'\"\n >\n <span class=\"mx-1\">{{ \"ACTION.SAVE\" | translate }}</span>\n </button>\n\n <p-button\n [text]=\"true\"\n (click)=\"handleCancel.emit('CANCEL')\"\n [attr.data-cy]=\"'cancel-button'\"\n >\n {{ \"ACTION.CANCEL\" | translate }}\n </p-button>\n</div>\n<!-- </div>\n</ng-template> -->\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { EditorModule } from 'primeng/editor';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { PanelModule } from 'primeng/panel';\nimport { MetaFormAbstract } from '../../meta-form-abstract';\nimport { MetaAssignResponsibleComponent } from '../../meta-form-fields/meta-assign-responsible/meta-assign-responsible.component';\nimport { MetaCalendarComponent } from '../../meta-form-fields/meta-calendar/meta-calendar.component';\nimport { MetaCheckboxComponent } from '../../meta-form-fields/meta-checkbox/meta-checkbox.component';\nimport { MetaCurrencyComponent } from '../../meta-form-fields/meta-currency/meta-currency.component';\nimport { MetaMultipleSelectComponent } from '../../meta-form-fields/meta-multiple-select/meta-multiple-select.component';\nimport { MetaNumberComponent } from '../../meta-form-fields/meta-number-input/meta-number-input.component';\nimport { MetaPasswordFeildComponent } from '../../meta-form-fields/meta-password-feild/meta-password-feild.component';\nimport { MetaSingleSelectObjectBasedComponent } from '../../meta-form-fields/meta-single-select-object-based/meta-single-select-object_based.component';\nimport { MetaSingleSelectComponent } from '../../meta-form-fields/meta-single-select/meta-single-select.component';\nimport { MetaStartDueDateComponent } from '../../meta-form-fields/meta-start-due-date/meta-start-due-date.component';\nimport { MetaSwitchComponent } from '../../meta-form-fields/meta-switch/meta-switch.component';\nimport { MetaTextAreaComponent } from '../../meta-form-fields/meta-text-area/meta-text-area.component';\nimport { MetaTextEditorComponent } from '../../meta-form-fields/meta-text-editor/meta-text-editor.component';\nimport { MetaTextInputComponent } from '../../meta-form-fields/meta-text-input/meta-text-input.component';\nimport { MetaTimeperiodComponent } from '../../meta-form-fields/meta-timeperiod/meta-timeperiod.component';\nimport { FieldColPipe } from '../../utils/field-col.pipe';\nimport { ReadOnlyInputComponent } from '../read-only-input/read-only-input.component';\nimport { ControlType } from '../../utils/control-type.enum';\nimport { AccordionModule } from 'primeng/accordion';\nimport { MetaAssignAssetComponent } from '../../meta-form-fields/meta-assign-asset/meta-assign-asset.component';\nimport { MetaUploadComponentDragDrop } from '../../meta-form-fields/meta-upload-dragdrop/meta-upload-dragdrop.component';\nimport { MetaUploadComponent } from '../../meta-form-fields/meta-upload/meta-upload.component';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { MessageModule } from 'primeng/message';\nimport { SelectModule } from 'primeng/select';\n\n@Component({\n selector: 'phoenix-groups-form',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // InputTextModule,\n // InputTextareaModule,\n // DatePickerModule,\n // SelectModule,\n // ButtonModule,\n // MultiSelectModule,\n TranslateModule,\n // CheckboxModule,\n // EditorModule,\n FieldColPipe,\n MetaTextEditorComponent,\n MetaCheckboxComponent,\n MetaTextInputComponent,\n MetaSingleSelectComponent,\n MetaStartDueDateComponent,\n MetaTextAreaComponent,\n MetaTextEditorComponent,\n MetaMultipleSelectComponent,\n MetaCalendarComponent,\n MetaUploadComponentDragDrop,\n AccordionModule,\n // MetaObjectLinksComponent,\n MetaSwitchComponent,\n MetaPasswordFeildComponent,\n MetaTimeperiodComponent,\n MetaCurrencyComponent,\n MetaNumberComponent,\n MetaAssignResponsibleComponent,\n MetaAssignAssetComponent,\n PanelModule,\n ReadOnlyInputComponent,\n // MessageModule,\n MetaSingleSelectObjectBasedComponent,\n MetaUploadComponent,\n ],\n templateUrl: './groups-form.component.html',\n styleUrls: ['./groups-form.component.css'],\n})\nexport class GroupsFormComponent extends MetaFormAbstract implements OnChanges {\n @Input() activePanelsIndex: number[] = [0, 1, 2, 3];\n public ControlType = ControlType;\n optionLabel!: string;\n notiffication?: any;\n private trans = inject(TranslateService);\n\n ngOnChanges(simpleChanges?: SimpleChanges): void {\n if (\n simpleChanges?.['metaFormControls'] ||\n simpleChanges?.['metaFormValues'] ||\n simpleChanges?.['metaForm']\n ) {\n const mergedArr = this.metaFormControls.flatMap((ob: any) => ob.ctrl);\n this.createForm(mergedArr);\n this.metaService.setFormDirtyStatus(this.metaForm.dirty);\n }\n }\n}\n","<p-accordion [multiple]=\"true\" [(value)]=\"activePanelsIndex\">\n @if (metaFormControls?.length) {\n <form [formGroup]=\"metaForm\" (ngSubmit)=\"onSubmit()\">\n @for (group of metaFormControls; track group.groupName; let idx = $index) {\n <div [style]=\"{ order: group.order }\" class=\"w-full\">\n <p-accordion-panel\n [value]=\"idx\"\n [attr.data-cy]=\"'table-accordion-header-' + group.groupName\"\n >\n <p-accordion-header>\n <ng-template #toggleicon let-active=\"active\">\n @if (active) {\n <i class=\"pi pi-minus-circle\"></i>\n } @else {\n <i class=\"pi pi-plus-circle\"></i>\n }\n </ng-template>\n {{ group.groupName | translate }}\n </p-accordion-header>\n\n <p-accordion-content>\n <div [style]=\"formStyle\" class=\"grid align-items-end\">\n @for (control of group.ctrl; track (control?.id ?? control?.configuration?.key)) {\n @switch (control.configuration.type) {\n\n @case (ControlType.TEXT) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-text-input\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-input>\n }\n </div>\n }\n\n @case (ControlType.NUMBER) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-number-input\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-number-input>\n }\n </div>\n }\n\n @case (ControlType.TIMEPERIOD) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-timeperiod\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-timeperiod>\n }\n </div>\n }\n\n @case (ControlType.CURRENCY) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-currency\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-currency>\n }\n </div>\n }\n\n @case (ControlType.TEXT_AREA) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-text-area\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-area>\n }\n </div>\n }\n\n @case (ControlType.SS_OPTION) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-single-select\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-single-select>\n }\n </div>\n }\n\n @case (ControlType.SS_OPTION_OBJECT_BASED) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-single-select-object-based\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-single-select-object-based>\n }\n </div>\n }\n\n @case (ControlType.MS_OPTION) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-multiple-select\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-multiple-select>\n }\n </div>\n }\n\n @case (ControlType.START_DUE_DATE) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-start-due-date\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-start-due-date>\n }\n </div>\n }\n\n @case (ControlType.DATE) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-calendar\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-calendar>\n }\n </div>\n }\n\n @case (ControlType.TEXT_EDITOR) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-text-editor\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-text-editor>\n }\n </div>\n }\n\n @case (ControlType.CHECKBOX) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n <phoenix-meta-checkbox\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-checkbox>\n </div>\n }\n\n @case (ControlType.SWITCH) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-switch\n [disable]=\"true\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-switch>\n }\n </div>\n }\n\n @case (ControlType.ASSIGN) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n } @else {\n <phoenix-meta-assign-responsible\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-assign-responsible>\n }\n </div>\n }\n\n @case (ControlType.ASSIGN_ASSET) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'assign-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-assign-asset\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-assign-asset>\n }\n </div>\n }\n\n @case (ControlType.UPLOAD) {\n <div\n [style]=\"{ order: control.order }\"\n [attr.data-cy]=\"'upload-' + control?.id\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-upload\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-upload>\n }\n </div>\n }\n\n @case (ControlType.UPLOAD_DRAG_DROP) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n [attr.data-cy]=\"'assign-' + control?.id\"\n >\n @if (control.readOnly) {\n @if (!control?.hidden) {\n <phoenix-read-only-input\n [control]=\"control\"\n [metaform]=\"metaForm\"\n ></phoenix-read-only-input>\n }\n } @else {\n <phoenix-meta-upload-dragdrop\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-upload-dragdrop>\n }\n </div>\n }\n\n @case (ControlType.LINKS_DATA) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control | fieldCol\"\n class=\"flex flex-column\"\n >\n </div>\n }\n\n @case (ControlType.PASSWORD) {\n <div\n [style]=\"{ order: control.order }\"\n [ngClass]=\"control?.hidden ? 'p-0' : (control | fieldCol)\"\n class=\"flex flex-column\"\n >\n <phoenix-meta-password-feild\n [disable]=\"disableForm\"\n [formControlName]=\"control.configuration.key\"\n [control]=\"control\"\n [parentForm]=\"metaForm\"\n ></phoenix-meta-password-feild>\n </div>\n }\n\n @default {\n }\n }\n }\n </div>\n </p-accordion-content>\n </p-accordion-panel>\n </div>\n }\n </form>\n }\n</p-accordion>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'textLength',\n standalone: true,\n})\nexport class TextLength implements PipeTransform {\n /**\n * Transforms the specified text value\n * If the size of the string is greater than the limit, it returns a substring of the desired size, and adds ellipsis \"...\"\n * If the size of the string is less than the limit, it returns the original string\n * @param value\n * @param limit\n */\n\n transform(value: string, limit: number) {\n if (value?.length > limit) {\n return value.substring(0, limit) + ' ...';\n }\n return value;\n }\n}\n","// export type StatusColType = \"LIST\" | \"TAG\" | \"DATE_LIST\" | \"DATE\" | \"STRING\" | \"ACTION\" | \"OWNER\" | \"PERSON\";\n\nexport enum StatusColType {\n TAG = 'TAG',\n STRING = 'STRING',\n PERSON = 'PERSON',\n LINK = 'LINK',\n DATE = 'DATE',\n DATE_ONLY = 'DATE_ONLY',\n LIST = 'LIST',\n COUNTRY = 'COUNTRY',\n COPY_TO_CLIPBOARD = 'COPY_TO_CLIPBOARD',\n}","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { AvatarModule } from 'primeng/avatar';\nimport { PopoverModule } from 'primeng/popover';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TagComponent } from '../tag/tag.component';\nimport {\n StatusAttribute,\n StatusTooltipType,\n} from './models/status-attribute.model';\nimport { TextLength } from './pipes/text-length.pipe';\nimport { MessageService } from 'primeng/api';\n\n@Component({\n selector: 'phoenix-status-attribute-display',\n standalone: true,\n templateUrl: './status-attribute-display.component.html',\n styleUrls: ['./status-bar.component.scss'],\n imports: [\n CommonModule,\n TooltipModule,\n PopoverModule,\n TagComponent,\n TranslateModule,\n AvatarModule,\n TextLength,\n ],\n})\nexport class StatusAttributeDisplayComponent {\n @Input() attr!: StatusAttribute;\n @Input() dateFormat = 'dd.MM.yyyy | HH:mm';\n\n @Output() listItemClick = new EventEmitter<any>();\n private messageService = inject(MessageService);\n private translateService = inject(TranslateService);\n statusTooltipType = StatusTooltipType;\n\n copyToClipboard(\n value: string | undefined,\n value2?: string | undefined,\n ): void {\n if (!value) return;\n\n this.messageService.add({\n severity: 'success',\n summary: this.translateService.instant('TOASTER.SUCCESS'),\n detail: this.translateService.instant(value2 || 'TOASTER.LINK_COPIED'),\n life: 3000,\n });\n navigator.clipboard.writeText(value).catch((err) => {\n console.error('Could not copy text: ', err);\n });\n }\n\n getFullUrl(path: string): string {\n if (path.startsWith('http')) return path;\n return '/' + path.replace(/^\\/+/, '');\n }\n\n isMultiWordLabel(label: string | undefined | null): boolean {\n return label ? label.trim().split(/\\s+/).length > 2 : false;\n }\n\n getPersonName(attr: any): string {\n const first = (attr?.value || '').trim();\n const last = (attr?.value1 || '').trim();\n return [first, last].filter(Boolean).join(' ');\n }\n\n getPersonTooltip(attr: any): string | undefined {\n const fullName = this.getPersonName(attr);\n return fullName.length > 20 ? fullName : undefined;\n }\n\n getPersonDisplayName(attr: any): string {\n const fullName = (attr?.value || '').trim();\n return fullName.length > 20 ? fullName.slice(0, 20) + '…' : fullName;\n }\n\n getPersonInitial(attr: any): string {\n return (attr?.value?.charAt(0) || '-').toUpperCase();\n }\n}\n","<div class=\"attribute flex justify-content-start align-items-start\">\n <div class=\"flex flex-column\">\n <!-- LABEL + ICON -->\n <div class=\"flex align-items-start gap-1\">\n <label\n class=\"font-semibold text-500\"\n [ngClass]=\"{\n 'wrap-label': isMultiWordLabel(attr.label | translate),\n 'nowrap-label': !isMultiWordLabel(attr.label | translate),\n }\"\n >\n {{ attr.label | translate }}\n </label>\n\n @if (attr?.tooltip?.length) {\n <i\n [attr.data-cy]=\"'status-togg-button-item'\"\n class=\"pi pi-info-circle text-blue-500 cursor-pointer\"\n style=\"font-size: 0.875rem; line-height: 1\"\n (mouseenter)=\"popover.toggle($event)\"\n (mouseleave)=\"popover.toggle($event)\"\n ></i>\n }\n </div>\n\n <!-- VALUE -->\n @if (attr?.value) {\n <!-- removed [ngSwitch]=\"attr.type\" because @switch handles it -->\n <div style=\"white-space: nowrap\">\n @switch (attr.type) {\n @case (\"STRING\") {\n @if (attr.url) {\n <a\n [href]=\"attr.url\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-blue-500 underline\"\n [pTooltip]=\"attr.value?.length > 20 ? attr.value : null\"\n >\n {{ attr.value | textLength: 20 }}\n <i class=\"ml-1\" [class]=\"attr.icon\"></i>\n </a>\n } @else {\n <span [pTooltip]=\"attr.value?.length > 20 ? attr.value : null\">\n {{ attr.value | textLength: 20 }}\n </span>\n }\n }\n\n @case (\"DATE\") {\n <span>\n <i class=\"pi pi-calendar text-blue-900\"></i>\n {{\n attr.value\n ? (attr.value | date: attr.dateFormat ?? dateFormat)\n : \"--\"\n }}\n </span>\n }\n\n @case (\"DATE_ONLY\") {\n <span>\n <i class=\"pi pi-calendar text-blue-900\"></i>\n {{ attr.value ? (attr.value | date: \"dd.MM.yyyy\") : \"--\" }}\n </span>\n }\n\n @case (\"LINK\") {\n <a\n [href]=\"attr.url\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-blue-500 underline\"\n >\n {{ attr.value || \"--\" }} <i class=\"ml-1\" [class]=\"attr.icon\"></i>\n </a>\n }\n\n @case (\"PERSON\") {\n <div class=\"person-wrap flex align-items-center gap-2\">\n <div class=\"person-avatar\">\n {{ getPersonInitial(attr) }}\n </div>\n\n <div\n class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\"\n [pTooltip]=\"getPersonTooltip(attr)\"\n >\n {{ getPersonDisplayName(attr) }}\n </div>\n </div>\n }\n\n @case (\"COUNTRY\") {\n <span>\n <span class=\"flex align-items-center gap-2\">\n <img\n src=\"https://primefaces.org/cdn/primeng/images/demo/flag/flag_placeholder.png\"\n [class]=\"'flag flag-' + attr.value?.code.toLowerCase()\"\n style=\"width: 22px\"\n />\n <span\n [pTooltip]=\"\n attr.value?.name?.length > 20 ? attr.value?.name : null\n \"\n >\n {{ attr.value?.name || attr.value?.code || \"--\" }}\n </span>\n </span>\n </span>\n }\n\n @case (\"COPY_TO_CLIPBOARD\") {\n <div class=\"flex align-items-center gap-1\">\n <i\n class=\"pi pi-copy text-blue-900 cursor-pointer\"\n (click)=\"copyToClipboard(attr?.value1,attr?.value2)\"\n ></i>\n <span>{{ attr.value || \"--\" }}</span>\n </div>\n }\n\n @case (\"LIST\") {\n <ul class=\"list overflow-x-hidden\" style=\"margin-top: 0.25rem\">\n @for (item of attr.value; track $index) {\n <li\n [ngClass]=\"item?.disabled ? 'disableLinks' : ''\"\n class=\"white-space-nowrap mb-1 cursor-pointer\"\n (click)=\"!item?.disabled ? listItemClick.emit(item) : null\"\n >\n <span [pTooltip]=\"item?.name?.length > 20 ? item.name : null\">\n {{ item.name | textLength: 20 }}\n </span>\n <i class=\"pi pi-link ml-1 text-sm\"></i>\n </li>\n }\n </ul>\n }\n\n @default {\n <span [style.color]=\"attr.color\" class=\"text-xl\">\n {{ attr.value || \"--\" }}\n </span>\n }\n }\n </div>\n } @else {\n <span>--</span>\n }\n </div>\n</div>\n\n<p-popover #popover [style]=\"{ maxWidth: '400px' }\">\n <div\n style=\"\n display: grid;\n grid-template-columns: max-content 1fr;\n column-gap: 1rem;\n row-gap: 0.5rem;\n align-items: start;\n width: 100%;\n \"\n >\n @for (item of attr?.tooltip; track $index) {\n @if (item.type !== statusTooltipType.DATE_PERSON) {\n <div class=\"text-sm text-600 text-left\">{{ item.label }}:</div>\n\n <div class=\"text-sm text-left break-words\">\n @switch (item?.type || statusTooltipType.TAG) {\n @case (\"LINK\") {\n @if (item.value) {\n <a\n [href]=\"getFullUrl(item.value)\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-blue-500 underline\"\n >\n {{ item.label || \"Open\" }}\n </a>\n } @else {\n <span>--</span>\n }\n }\n\n @case (statusTooltipType.STRING) {\n @if (item.value) {\n <div\n class=\"text-sm\"\n style=\"\n white-space: normal;\n word-break: break-word;\n overflow-wrap: break-word;\n \"\n >\n {{ item.value }}\n </div>\n } @else {\n <span>--</span>\n }\n }\n\n @case (statusTooltipType.DATE) {\n @if (item.value) {\n <span>{{ item.value | date: dateFormat }}</span>\n } @else {\n <span>--</span>\n }\n }\n\n @case (statusTooltipType.COPY_TO_CLIPBOARD) {\n <div class=\"flex\">\n <i\n class=\"pi pi-copy text-blue-900\"\n (click)=\"copyToClipboard(item?.value1)\"\n ></i>\n <span>\n {{ item?.value ? item.value : \"--\" }}\n </span>\n </div>\n }\n\n @case (statusTooltipType.DATE_ONLY) {\n <span>\n <i class=\"pi pi-calendar text-blue-900\"></i>\n {{ item.value ? (item.value | date: \"dd.MM.yyyy\") : \"--\" }}\n </span>\n }\n\n @case (statusTooltipType.PERSON) {\n @if (item.value) {\n <span class=\"person-wrap flex items-center gap-1 truncate\">\n <div\n class=\"person-avatar small\"\n style=\"font-size: 0.875rem; line-height: 1\"\n >\n {{ item?.value?.charAt(0)?.toUpperCase() }}\n </div>\n <span class=\"truncate\">\n {{ item.value }} {{ item.value1 }}\n </span>\n </span>\n } @else {\n <span>--</span>\n }\n }\n\n @default {\n @if (item.value) {\n <div class=\"flex gap-2\">\n <span>{{ item.value }}</span>\n <phoenix-tag\n [customColor]=\"item.value2 || ''\"\n [content]=\"item.value1 || ''\"\n ></phoenix-tag>\n </div>\n } @else {\n <span>--</span>\n }\n }\n }\n </div>\n }\n }\n </div>\n\n @for (item of attr?.tooltip; track $index) {\n @if (item.type === statusTooltipType.DATE_PERSON) {\n @if (item.value) {\n <div>\n <div\n class=\"font-sm text-600 truncate mb-1\"\n [pTooltip]=\"item.label.length > 20 ? item.label : undefined\"\n >\n {{ item.label }}\n </div>\n\n <div class=\"flex items-center gap-2 person-wrap\">\n <div class=\"person-avatar\">\n {{ item?.value?.charAt(0)?.toUpperCase() }}\n </div>\n\n <div>\n <div\n class=\"text-blue-800 font-sm\"\n style=\"\n word-break: break-word;\n white-space: normal;\n overflow-wrap: break-word;\n \"\n >\n {{ item.value }}\n </div>\n <div class=\"text-sm\">{{ item.value1 | date: dateFormat }}</div>\n </div>\n </div>\n </div>\n } @else {\n <div class=\"text-sm\">--</div>\n }\n }\n }\n</p-popover>\n","import { CommonModule, DatePipe } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ImageModule } from 'primeng/image';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TextLength } from './pipes/text-length.pipe';\nimport { FirstLetterPipe } from './pipes/first-letter.pipe';\nimport { AvatarModule } from 'primeng/avatar';\nimport { PopoverModule } from 'primeng/popover';\nimport { TagComponent } from '../tag/tag.component';\nimport { StatusBarConfig } from './models/status-bar-configuration.model';\nimport { StatusColType } from './enums/status-col-type.enum';\nimport { ButtonModule } from 'primeng/button';\nimport { StatusAttributeDisplayComponent } from './status-attribute-display.component';\n\n@Component({\n selector: 'phoenix-status-bar',\n standalone: true,\n templateUrl: './status-bar.component.html',\n styleUrls: ['./status-bar.component.scss'],\n imports: [\n CommonModule,\n TranslateModule,\n TooltipModule,\n ImageModule,\n AvatarModule,\n PopoverModule,\n TextLength,\n ButtonModule,\n StatusAttributeDisplayComponent,\n ],\n})\nexport class StatusBarComponent {\n @Input() statusBarConfig!: StatusBarConfig;\n @Input() iconEnable = true;\n @Input() enableClosing = true;\n @Input() description = true;\n @Input() dateFormat = 'dd.MM.yyyy | HH:mm';\n\n @Output() onListItemClick = new EventEmitter<any>();\n\n StatusColType = StatusColType;\n\n iconStyle = {\n height: 40,\n width: 40,\n };\n}\n","<!-- status-bar.component.html -->\n<div class=\"p-2 pt-0 pb-3\">\n @if (statusBarConfig) {\n <div class=\"flex\">\n @if (description) {\n <div class=\"description flex\">\n @if (statusBarConfig.icon) {\n <div\n class=\"type-icon flex justify-content-center align-items-center mr-3\"\n [style.height]=\"iconStyle.height + 20 + 'px'\"\n [style.width]=\"iconStyle.width + 20 + 'px'\"\n >\n <p-image\n [src]=\"\n 'assets/object_types/white/' +\n (statusBarConfig.icon || 'UNDEFINED') +\n '.svg'\n \"\n [height]=\"iconStyle.height.toString()\"\n [width]=\"iconStyle.width.toString()\"\n ></p-image>\n </div>\n }\n\n <ul>\n @for (attr of statusBarConfig.description; track attr.label) {\n <li class=\"text-sm flex mb-1\">\n <span class=\"mr-1 text-600 font-semibold\"\n >{{ attr.label | translate }}:</span\n >\n @if (attr.value) {\n <span>\n @if (attr.icon) {\n <i\n class=\"{{ attr.icon }} mr-1\"\n style=\"font-size: 0.8em\"\n ></i>\n }\n @switch (attr.type) {\n @case (\"DATE\") {\n <span>{{ attr.value | date: dateFormat }}</span>\n }\n @default {\n <span\n pTooltip=\"{{\n attr?.value?.length > 20 ? attr.value : ''\n }}\"\n >\n {{ attr.value | textLength: 20 }}\n </span>\n }\n }\n </span>\n } @else {\n <span>--</span>\n }\n </li>\n }\n </ul>\n </div>\n }\n <div class=\"status-bar-attributes w-full flex gap-5\">\n @for (attr of statusBarConfig.attributes; track attr.label) {\n <div class=\"status-bar-attribute-item\">\n <phoenix-status-attribute-display\n [attr]=\"attr\"\n [dateFormat]=\"dateFormat\"\n (listItemClick)=\"onListItemClick.emit($event)\"\n ></phoenix-status-attribute-display>\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n computed,\n signal,\n} from '@angular/core';\nimport { DrawerModule, Drawer } from 'primeng/drawer';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { TableComponent } from '../../data-table/table/table.component';\n\n@Component({\n selector: 'phoenix-quick-pick-sidepanel',\n standalone: true,\n imports: [\n CommonModule,\n DrawerModule,\n TableComponent,\n TranslateModule,\n ButtonModule,\n ],\n templateUrl: './quick-pick-sidepanel.component.html',\n styleUrl: './quick-pick-sidepanel.component.css',\n})\nexport class QuickPickSidePanelComponent {\n @ViewChild('drawer') drawer!: Drawer;\n\n @Input() title: string = 'Default Title';\n @Input() data: any[] = [];\n @Input() columns: any[] = [];\n @Input() tableConfiguration: any = {};\n @Input() widthClass: string = 'w-6';\n @Input() isFullScreen: boolean = false;\n\n private _panelVisible = signal(false);\n @Input()\n set panelState(value: boolean) {\n this._panelVisible.set(value);\n }\n @Output() panelStateChange = new EventEmitter<boolean>();\n\n @Output() onRowClick = new EventEmitter<any>();\n @Output() lazyLoadData = new EventEmitter<void>();\n @Output() handlePanelFullScreen = new EventEmitter<void>();\n\n drawerVisible = computed(() => this._panelVisible());\n\n visibleChange(newVal: boolean) {\n this._panelVisible.set(newVal);\n this.panelStateChange.emit(newVal);\n \n if (newVal) {\n this.onDrawerShow(); \n }\n }\n\n onDrawerShow(): void {\n this.lazyLoadData.emit();\n }\n\n onTableRowClick(row: any): void {\n this.onRowClick.emit(row);\n }\n}\n","<p-drawer\n #drawer\n [visible]=\"drawerVisible()\"\n (visibleChange)=\"visibleChange($event)\"\n [header]=\"title | translate\"\n appendTo=\"body\"\n position=\"right\"\n [styleClass]=\"widthClass\"\n>\n <!-- Content -->\n <ng-container *ngIf=\"tableConfiguration\">\n <div class=\"px-2\">\n <phoenix-table\n [data]=\"data\"\n [columns]=\"columns\"\n [tableConfiguration]=\"tableConfiguration\"\n (rowSelection)=\"onTableRowClick($event)\"\n ></phoenix-table>\n </div>\n </ng-container>\n</p-drawer>","export enum SimpleButtonType {\n REGULAR = 'regular',\n SPLIT = 'split'\n}\n\nexport type Severity =\n | 'success'\n | 'info'\n | 'warn'\n | 'danger'\n | 'help'\n | 'primary'\n | 'secondary'\n | 'contrast'\n | null\n | undefined;\n\nexport interface ActionButton {\n id?: number | string;\n label: string;\n icon?: string;\n disabled?: boolean;\n type?: SimpleButtonType;\n severity?: Severity;\n tooltip?: string;\n action?: () => void;\n splitItems?: { label: string; icon?: string; command: () => void }[];\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'stripHtmlSafe', standalone: true })\nexport class StripHtmlSafePipe implements PipeTransform {\n transform(value: unknown): string {\n if (value === null || value === undefined) return '';\n const s = typeof value === 'string' ? value : String(value);\n return s.replace(/<\\/?[^>]+(>|$)/g, '');\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'fileSize', standalone: true })\nexport class FileSizePipe implements PipeTransform {\n transform(bytes: unknown): string {\n const n = typeof bytes === 'number' ? bytes : Number(bytes);\n if (!isFinite(n) || n <= 0) return '';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n let v = n;\n while (v >= 1024 && i < units.length - 1) {\n v = v / 1024;\n i++;\n }\n const fixed = i === 0 ? 0 : v < 10 ? 1 : 0;\n return `${v.toFixed(fixed)} ${units[i]}`;\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Input,\n computed,\n inject,\n signal\n} from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { ButtonModule } from 'primeng/button';\nimport { PopoverModule } from 'primeng/popover';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { MetaFieldConfig, MetaFieldType } from '../../models/meta-field-config.model';\nimport { StripHtmlSafePipe } from '../../pipes/strip-html-safe.pipe';\nimport { FileSizePipe } from '../../pipes/file-size.pipe';\n\n@Component({\n selector: 'phoenix-read-only-input-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n\n ButtonModule,\n PopoverModule,\n\n StripHtmlSafePipe,\n FileSizePipe,\n ],\n templateUrl: './read-only-input-v2.component.html',\n styleUrls: ['./read-only-input-v2.component.scss'],\n})\nexport class ReadOnlyInputV2Component {\n /** Field metadata (type, key, options, labels, etc.) */\n @Input({ required: true }) field!: MetaFieldConfig;\n\n /** Parent FormGroup that contains the control referenced by field.configuration.key */\n @Input({ required: true }) form!: FormGroup;\n\n /** Used to automatically unsubscribe from valueChanges on destroy */\n private dr = inject(DestroyRef);\n\n /**\n * Internal reactive signal holding the current control value.\n * We keep a local signal to optimize OnPush change detection and computed selectors.\n */\n private _v = signal<unknown>(null);\n\n ngOnInit(): void {\n // Initial sync of the control value into the local signal\n this.sync();\n\n // Keep local signal in sync with the form control value\n this.ctrl()?.valueChanges\n .pipe(takeUntilDestroyed(this.dr))\n .subscribe(() => this.sync());\n }\n\n /** Control key resolved from MetaFieldConfig */\n get key(): string {\n return this.field?.configuration?.key ?? '';\n }\n\n /** Meta field type (TEXT, DATE, ASSIGN, UPLOAD, etc.) */\n get type(): MetaFieldType {\n return this.field?.configuration?.type ?? 'TEXT';\n }\n\n /** Shortcut to the underlying FormControl */\n ctrl() {\n return this.form.get(this.key);\n }\n\n /**\n * Synchronizes the FormControl value into the local signal.\n * This keeps computed properties reactive and OnPush-friendly.\n */\n private sync(): void {\n this._v.set(this.ctrl()?.value ?? null);\n }\n\n // ---------- helpers ----------\n\n /**\n * Resolves language suffix used by backend DTOs (labelKeyValEn/De/Sr).\n * This is used to pick the correct localized label for option objects.\n */\n private getLangSuffix(): 'En' | 'De' | 'Sr' {\n const lang = (localStorage.getItem('language') ?? 'en').toLowerCase();\n if (lang.startsWith('de')) return 'De';\n if (lang.startsWith('sr')) return 'Sr';\n return 'En';\n }\n\n /**\n * Boolean renderer (for SWITCH / CHECKBOX).\n * Returns boolean value or null if the value is not a boolean.\n */\n readonly bool = computed(() => {\n const v = this._v();\n return typeof v === 'boolean' ? v : null;\n });\n\n /**\n * DATE renderer.\n * Supports both Date instances and ISO-like string values.\n * Returns a valid Date object or null if parsing fails.\n */\n readonly dateValue = computed(() => {\n const v = this._v();\n if (!v) return null;\n if (v instanceof Date) return v;\n\n const d = new Date(String(v));\n return isNaN(d.getTime()) ? null : d;\n });\n\n /**\n * START_DUE_DATE renderer.\n * Expects shape: { startDate, endDate } (Date or string).\n * Returns normalized Date objects or null if invalid.\n */\n readonly startDue = computed(() => {\n const v: any = this._v();\n if (!v || typeof v !== 'object') return null;\n\n const sdRaw = v?.startDate ?? null;\n const edRaw = v?.endDate ?? null;\n\n const sd = sdRaw ? new Date(sdRaw) : null;\n const ed = edRaw ? new Date(edRaw) : null;\n\n if (!sd || isNaN(sd.getTime())) return null;\n\n return {\n startDate: sd,\n endDate: ed && !isNaN(ed.getTime()) ? ed : null,\n };\n });\n\n /**\n * ASSIGN renderer.\n * Normalizes various backend DTO shapes into a unified view model.\n */\n readonly assign = computed(() => {\n const v: any = this._v();\n if (!v || typeof v !== 'object') return null;\n\n return {\n name: v?.name ?? v?.label ?? null,\n function: v?.function ?? v?.role ?? null,\n email: v?.email ?? null,\n phone: v?.phone ?? null,\n };\n });\n\n /**\n * UPLOAD renderer.\n * Supports common upload DTO shapes (fileName/name, size, type).\n */\n readonly upload = computed(() => {\n const v: any = this._v();\n if (!v || typeof v !== 'object') return null;\n\n return {\n fileName: v?.fileName ?? v?.name ?? null,\n size: v?.size ?? null,\n type: v?.type ?? null,\n };\n });\n\n /**\n * Single-select option label resolver (SS_OPTION / SS_OPTION_OBJECT_BASED).\n * - If value is primitive -> find matching option in configuration.options\n * - If value is object -> resolve best display label using common DTO fields\n */\n readonly ssLabel = computed(() => {\n const v: any = this._v();\n if (v === null || v === undefined || v === '') return null;\n\n // Primitive value: resolve label from options list\n if (typeof v !== 'object') {\n const opt = (this.field.configuration.options ?? []).find((x: any) => x?.value === v);\n return opt?.label ?? String(v);\n }\n\n // Object value: resolve localized label from DTO\n const suffix = this.getLangSuffix();\n const key = `labelKeyVal${suffix}`;\n\n return (\n v?.label ??\n v?.userFriendlyMessage ??\n v?.name ??\n v?.[key] ??\n v?.value ??\n null\n );\n });\n\n /**\n * Multi-select option label resolver (MS_OPTION).\n * Joins multiple labels into a single string with truncation after maxItems.\n */\n readonly msLabel = computed(() => {\n const v: any = this._v();\n if (!Array.isArray(v) || v.length === 0) return null;\n\n const suffix = this.getLangSuffix();\n const key = `labelKeyVal${suffix}`;\n\n const maxItems = 4;\n const labels = v\n .map((x: any) => x?.label ?? x?.userFriendlyMessage ?? x?.name ?? x?.[key] ?? x?.value ?? x)\n .filter((x: any) => x !== null && x !== undefined && String(x).trim() !== '')\n .map((x: any) => String(x));\n\n if (!labels.length) return null;\n\n return labels.length <= maxItems\n ? labels.join(', ')\n : `${labels.slice(0, maxItems).join(', ')} ...`;\n });\n\n /**\n * Generic fallback display value.\n * Ensures that every field type has a safe string representation.\n */\n readonly displayText = computed(() => {\n const v = this._v();\n if (v === null || v === undefined || v === '') return null;\n\n if (this.type === 'SS_OPTION' || this.type === 'SS_OPTION_OBJECT_BASED') return this.ssLabel();\n if (this.type === 'MS_OPTION') return this.msLabel();\n\n if (this.type === 'UPLOAD' || this.type === 'UPLOAD_DRAG_DROP') {\n const u = this.upload();\n return u?.fileName ?? null;\n }\n\n if (this.type === 'ASSIGN' || this.type === 'ASSIGN_ASSET') {\n return this.assign()?.name ?? null;\n }\n\n // Text areas and editors often contain HTML\n if (this.type === 'TEXT_AREA' || this.type === 'TEXT_EDITOR') {\n return typeof v === 'string' ? v : String(v);\n }\n\n if (typeof v === 'object') return JSON.stringify(v);\n return String(v);\n });\n}","@switch (type) {\n\n @case ('TEXT_EDITOR') {\n @if (displayText()) {\n <div class=\"read-only-editor-content\" [innerHTML]=\"displayText()\"></div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('TEXT_AREA') {\n @if (displayText()) {\n <div class=\"w-full mt-2 mb-2 font-semibold text-500 whitespace-pre-line\">\n {{ displayText() | stripHtmlSafe }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('SWITCH') {\n @if (bool() !== null) {\n <div class=\"mt-2 mb-2 font-semibold text-500\">\n {{ bool() ? ('Yes' | translate) : ('No' | translate) }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('CHECKBOX') {\n @if (bool() !== null) {\n <div class=\"mt-2 mb-2 font-semibold text-500\">\n {{ bool() ? ('Yes' | translate) : ('No' | translate) }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('DATE') {\n @if (dateValue()) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ dateValue() | date }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('START_DUE_DATE') {\n @if (startDue()) {\n <div class=\"flex font-semibold text-500 mt-2 mb-2\">\n <span style=\"padding-top: 3px\">{{ startDue()?.startDate | date }}</span>\n <div class=\"flex align-items-center p-2\">\n <i class=\"pi pi-arrow-right text-sm\"></i>\n </div>\n <span style=\"padding-top: 3px\">{{ startDue()?.endDate | date }}</span>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('ASSIGN') {\n @if (assign()?.name) {\n <div>\n <p-button [rounded]=\"true\" [text]=\"true\" (onClick)=\"op.toggle($event)\">\n <div class=\"person-wrap\">\n <div class=\"person-avatar\">\n {{ (assign()?.name ?? '')!.toUpperCase().charAt(0) }}\n </div>\n <div>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ assign()?.name }}\n </p>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ assign()?.function ?? '--' }}\n </p>\n </div>\n </div>\n </p-button>\n\n <p-popover #op [dismissable]=\"true\">\n <div>\n <span class=\"block mb-2\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{ assign()?.email ?? '--' }}\n </span>\n <p>\n <i class=\"pi pi-phone mr-1 text-500\"></i>\n {{ assign()?.phone ?? '--' }}\n </p>\n </div>\n </p-popover>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('UPLOAD') {\n @if (upload()?.fileName) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ upload()?.fileName }}\n @if (upload()?.size) {\n <span class=\"text-600 font-normal\"> • {{ upload()?.size | fileSize }}</span>\n }\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('UPLOAD_DRAG_DROP') {\n @if (upload()?.fileName) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ upload()?.fileName }}\n @if (upload()?.size) {\n <span class=\"text-600 font-normal\"> • {{ upload()?.size | fileSize }}</span>\n }\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('SS_OPTION') {\n @if (ssLabel()) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ ssLabel() | translate }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('SS_OPTION_OBJECT_BASED') {\n @if (ssLabel()) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ ssLabel() | translate }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @case ('MS_OPTION') {\n @if (msLabel()) {\n <div class=\"font-semibold text-500 mt-2 mb-2 white-space-nowrap overflow-hidden\">\n {{ msLabel() }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n @case ('PASSWORD') {\n @if (displayText()) {\n <input\n pInputText\n type=\"password\"\n class=\"w-full p-inputtext\"\n [disabled]=\"true\"\n [value]=\"displayText() ?? ''\"\n autocomplete=\"off\"\n aria-label=\"password\"\n />\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n\n @default {\n @if (displayText()) {\n <div class=\"font-semibold text-500 mt-2 mb-2\">\n {{ displayText() | stripHtmlSafe }}\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"fallBack\"></ng-container>\n }\n }\n}\n\n<ng-template #fallBack>\n <div class=\"font-semibold text-500 mt-2 mb-2\">--</div>\n</ng-template>","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { PopoverModule } from 'primeng/popover';\nimport { DialogService } from 'primeng/dynamicdialog';\n\nimport { Assignee } from '../../../../models/assignee.model';\nimport { tableColumnType } from '../../../data-table/utils/dataTable.enum';\nimport { ObjectItemDialogComponent } from '../../../../../public-api';\n\n@Component({\n selector: 'phoenix-meta-assign-responsible-v2',\n standalone: true,\n imports: [CommonModule, ButtonModule, PopoverModule, TranslateModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaAssignResponsibleV2Component),\n multi: true,\n },\n ],\n template: `\n\n @if (value?.uuid) {\n <div class=\"flex align-items-center\">\n <div>\n <p-button [rounded]=\"true\" [text]=\"true\" (onClick)=\"op.toggle($event)\" [disabled]=\"disabled\">\n <div class=\"person-wrap\">\n <div class=\"person-avatar\">\n {{ (value?.name ?? '').toUpperCase().charAt(0) }}\n </div>\n <div>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ value?.name ?? '--' }}\n </p>\n <p class=\"white-space-nowrap overflow-hidden text-overflow-ellipsis\">\n {{ value?.function ?? '--' }}\n </p>\n </div>\n </div>\n </p-button>\n\n <p-popover #op [dismissable]=\"true\">\n <div class=\"person-details\">\n <span class=\"block mb-2\">\n <i class=\"pi pi-envelope mr-1 text-500\"></i>\n {{ value?.email ?? '--' }}\n </span>\n <p>\n <i class=\"pi pi-phone mr-1 text-500\"></i>\n {{ value?.phone ?? '--' }}\n </p>\n </div>\n </p-popover>\n </div>\n\n <div style=\"padding-bottom:4px\">\n <p-button\n styleClass=\"p-button-sm mt-1\"\n type=\"button\"\n [text]=\"true\"\n [disabled]=\"disabled\"\n [label]=\"'ACTION.REASSIGN' | translate\"\n (click)=\"op.hide(); openDialog()\"\n ></p-button>\n\n <p-button\n type=\"button\"\n icon=\"pi pi-times\"\n [disabled]=\"disabled\"\n (click)=\"op.hide(); clear()\"\n [text]=\"true\"\n styleClass=\"p-button-danger p-button-sm mt-1 ml-2\"\n ></p-button>\n </div>\n </div>\n } @else {\n <p-button\n type=\"button\"\n icon=\"pi pi-user-plus\"\n styleClass=\"p-button-sm mt-1\"\n [label]=\"'ACTION.ASSIGN' | translate\"\n (click)=\"openDialog()\"\n [text]=\"true\"\n [disabled]=\"disabled\"\n ></p-button>\n }\n `,\n styles: [`\n ::ng-deep .p-popover-content { padding: 0 !important; }\n .person-wrap { display:flex; align-items:center; margin-left:-6px; }\n .person-wrap p { margin:0; }\n .person-avatar {\n display:flex; justify-content:center; align-items:center;\n width:28px; height:28px; min-width:28px; min-height:28px;\n margin-right:5px; background-color: rgb(233, 66, 96);\n color:#fff; border-radius:50%; font-size:1rem;\n }\n .person-details { border-top:1px solid #e0e0e0; padding:10px; width:200px; }\n .person-details p { margin:0; display:flex; align-items:center; }\n .person-details i { color:#e94260; padding-right:5px; }\n `],\n})\nexport class MetaAssignResponsibleV2Component implements ControlValueAccessor {\n /**\n * List of available assignees used as table data inside the selection dialog.\n * This replaces legacy `control.configuration.items` access and keeps the CVA independent\n * from meta-form internals.\n */\n @Input() items: Assignee[] = [];\n\n /**\n * Translation key for the dialog header title.\n * Kept as an input so different contexts can reuse this field with a custom title.\n */\n @Input() dialogHeaderKey = 'LABELS.ASSIGN_RESPONSIBLE';\n\n private translate = inject(TranslateService);\n private dialog = inject(DialogService);\n\n /**\n * Currently selected assignee value bound to the parent form control.\n * We store the full object (row) because downstream fields often need more than uuid.\n */\n value: Assignee | null = null;\n\n /**\n * Disabled state propagated from Angular forms via `setDisabledState`.\n * (If you later add a field-level `@Input() disable`, combine them like in other CVAs.)\n */\n disabled = false;\n\n /**\n * CVA callback invoked when the value changes (selection/clear).\n */\n private onChange: (value: Assignee | null) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched (user interaction).\n * Standard: call on meaningful interactions (open dialog, select, clear).\n */\n private onTouched: () => void = () => {};\n\n /**\n * Called by Angular forms when the model value changes programmatically.\n * Keep it side-effect free: do not call `onChange`/`onTouched` from here.\n */\n writeValue(value: Assignee | null): void {\n this.value = value ?? null;\n }\n\n /**\n * Registers the callback that should be called when the component updates the value.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the callback that should be called when the control becomes \"touched\".\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Clears current assignee value.\n * - emits `null`\n * - marks as touched (user action)\n */\n clear(): void {\n if (this.disabled) return;\n\n // prevent redundant emits\n if (this.value === null) {\n this.onTouched();\n return;\n }\n\n this.value = null;\n this.onChange(null);\n this.onTouched();\n }\n\n /**\n * Opens object selection dialog for choosing a new assignee.\n * The dialog renders a generic table and returns the selected row on close.\n *\n * Standard for CVA:\n * - mark as touched when user opens the picker (interaction started)\n * - emit onChange only when a row is actually selected\n */\n openDialog(): void {\n if (this.disabled) return;\n\n this.onTouched();\n\n const ref = this.dialog.open(ObjectItemDialogComponent, {\n header: this.translate.instant(this.dialogHeaderKey),\n width: '700px',\n modal: true,\n data: {\n tableData: this.items,\n columns: [\n { field: 'name', header: 'LABELS.NAME', columnType: tableColumnType.TEXT },\n { field: 'function', header: 'LABELS.FUNCTION', columnType: tableColumnType.TEXT },\n { field: 'phone', header: 'LABELS.PHONE', columnType: tableColumnType.TEXT },\n { field: 'email', header: 'LABELS.EMAIL', columnType: tableColumnType.TEXT },\n ],\n },\n contentStyle: { overflow: 'auto' },\n draggable: true,\n closable: true,\n });\n\n ref?.onClose.subscribe((response: Assignee | null | undefined) => {\n if (!response) return;\n\n // prevent redundant emits (same selection)\n const same =\n (this.value?.uuid ?? null) === (response?.uuid ?? null) &&\n JSON.stringify(this.value ?? null) === JSON.stringify(response ?? null);\n\n this.value = response;\n\n if (!same) {\n this.onChange(response);\n }\n\n this.onTouched();\n });\n }\n}","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ColorPickerModule } from 'primeng/colorpicker';\n\n@Component({\n selector: 'phoenix-meta-color-picker-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, ColorPickerModule],\n template: `\n <p-colorPicker\n class=\"color-swatch\"\n [(ngModel)]=\"value\"\n (onChange)=\"onPickerChange()\"\n (onBlur)=\"handleBlur()\"\n [disabled]=\"disabled\"\n [appendTo]=\"'body'\"\n ></p-colorPicker>\n `,\n styles: [\n `\n :host ::ng-deep .color-swatch.p-colorpicker {\n width: 35px;\n height: 35px;\n padding: 0 !important;\n border: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n\n :host ::ng-deep .color-swatch .p-colorpicker-preview {\n width: 35px !important;\n height: 35px !important;\n border: none !important;\n border-radius: 6px !important;\n box-shadow: none !important;\n }\n\n :host ::ng-deep .color-swatch .p-colorpicker-preview:focus,\n :host ::ng-deep .color-swatch .p-colorpicker-preview:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaColorPickerV2Component),\n multi: true,\n },\n ],\n})\nexport class MetaColorPickerV2Component implements ControlValueAccessor {\n /**\n * Optional external disable flag (field-level disable coming from meta config).\n * This is combined with the disabled state coming from Angular Forms (CVA).\n */\n @Input() disable = false;\n\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Currently selected color value.\n * Expected format: HEX string (e.g. \"#ff00aa\") or null.\n */\n value: string | null = null;\n\n /**\n * CVA callback invoked when the value changes.\n */\n private onChange: (v: string | null) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched.\n * Standard: call on blur / close, not on every value change.\n */\n private onTouched: () => void = () => {};\n\n /**\n * Disabled state coming from Angular Forms (ControlValueAccessor).\n */\n private isDisabled = false;\n\n /**\n * Final disabled state combining:\n * - form-level disabled state (CVA)\n * - field-level disable flag (input)\n */\n get disabled(): boolean {\n return this.disable || this.isDisabled;\n }\n\n /**\n * Writes a new value from the parent form control into the component.\n * Keep it idempotent and UI-safe.\n */\n writeValue(v: any): void {\n this.value = this.normalizeHex(v);\n this.cdr.markForCheck();\n }\n\n /**\n * Registers callback that is triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers callback that is triggered when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular Forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n /**\n * Handler for PrimeNG color picker change event.\n * Propagates the currently selected color value to the parent form control.\n *\n * Note: we intentionally do NOT call onTouched here (our standard is: touched on blur).\n */\n onPickerChange(): void {\n if (this.disabled) return;\n\n const next = this.normalizeHex(this.value);\n\n // prevent redundant emits (useful when PrimeNG fires multiple times)\n if (next === this.value) {\n this.cdr.markForCheck();\n return;\n }\n\n this.value = next;\n this.onChange(next);\n this.cdr.markForCheck();\n }\n\n /**\n * Marks control as touched when user leaves the component.\n * (Matches \"touched on blur\" CVA guideline.)\n */\n handleBlur(): void {\n if (this.disabled) return;\n this.onTouched();\n }\n\n /**\n * Normalizes incoming values to a safe HEX string or null.\n * - accepts \"#RRGGBB\" / \"#RGB\" / \"RRGGBB\"\n * - returns null for empty/invalid inputs\n */\n private normalizeHex(v: any): string | null {\n if (v === null || v === undefined) return null;\n\n const s = String(v).trim();\n if (!s) return null;\n\n const withHash = s.startsWith('#') ? s : `#${s}`;\n const ok = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(withHash);\n\n return ok ? withHash.toLowerCase() : null;\n }\n}","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { PopoverModule } from 'primeng/popover';\n\n@Component({\n selector: 'phoenix-meta-checkbox-color-picker-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, PopoverModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaCheckboxColorPickerV2Component),\n multi: true,\n },\n ],\n template: `\n <p-popover #popover>\n <div class=\"color-picker\">\n @for (row of options; track $index; let last = $last) {\n <div class=\"color-row\" [class.mb-2]=\"!last\">\n @for (color of row; track color) {\n <button\n type=\"button\"\n class=\"color-box\"\n [disabled]=\"disabled\"\n [style.backgroundColor]=\"color\"\n [style.outline]=\"focusedColor === color ? '3px solid ' + color : 'none'\"\n [style.outlineOffset]=\"focusedColor === color ? '3px' : '0'\"\n (click)=\"select(color, popover)\"\n (mouseenter)=\"focusedColor = color\"\n ></button>\n }\n </div>\n }\n </div>\n </p-popover>\n\n <button\n type=\"button\"\n class=\"selected-color\"\n [disabled]=\"disabled\"\n [style.backgroundColor]=\"value || 'transparent'\"\n (click)=\"toggle(popover, $event)\"\n aria-label=\"Select color\"\n ></button>\n `,\n styles: [\n `\n :host ::ng-deep .p-popover-content {\n padding: 0 !important;\n }\n\n .color-picker {\n display: flex;\n flex-direction: column;\n padding: 10px;\n }\n\n .color-row {\n display: flex;\n justify-content: center;\n gap: 8px;\n }\n\n .mb-2 {\n margin-bottom: 8px;\n }\n\n .color-box {\n margin: 2px;\n width: 30px;\n height: 30px;\n cursor: pointer;\n border-radius: 4px;\n border: 0;\n padding: 0;\n background: transparent;\n }\n\n .color-box:hover:not(:disabled) {\n transform: scale(1.1);\n opacity: 0.9;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);\n }\n\n .color-box:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .selected-color {\n width: 35px;\n height: 35px;\n border: 2px solid #ccc;\n cursor: pointer;\n border-radius: 6px;\n padding: 0;\n background: transparent;\n }\n\n .selected-color:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n `,\n ],\n})\nexport class MetaCheckboxColorPickerV2Component implements ControlValueAccessor {\n /**\n * 2D array of color values used to render the color grid in the popover.\n * Example:\n * [\n * ['#ff0000', '#00ff00', '#0000ff'],\n * ['#facc15', '#22c55e', '#0ea5e9']\n * ]\n */\n @Input() options: string[][] = [];\n\n /**\n * External disable flag (e.g. meta-form field-level disable).\n * This is combined with CVA disabled state.\n */\n @Input() disable = false;\n\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Currently selected color value bound to the parent form control.\n */\n value: string | null = null;\n\n /**\n * Color currently focused/hovered in the UI.\n * Used only for visual outline highlight in the picker grid.\n */\n focusedColor: string | null = null;\n\n /**\n * Disabled state coming from Angular Forms (ControlValueAccessor).\n */\n private isDisabled = false;\n\n /**\n * CVA callback invoked when the value changes.\n */\n private onChange: (v: string | null) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched.\n * Standard: touched on \"open/blur/close\" actions, not necessarily on hover.\n */\n private onTouched: () => void = () => {};\n\n /**\n * Final disabled state combining:\n * - form-level disabled state (CVA)\n * - field-level disable flag (input)\n */\n get disabled(): boolean {\n return this.disable || this.isDisabled;\n }\n\n // ----- ControlValueAccessor implementation -----\n\n /**\n * Writes a new value from the parent form into the component.\n * Keeps internal value and focusedColor in sync for correct UI outline.\n */\n writeValue(v: any): void {\n this.value = this.normalizeColor(v);\n this.focusedColor = this.value;\n this.cdr.markForCheck();\n }\n\n /**\n * Registers callback that is triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers callback that is triggered when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular Forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n // ----- UI handlers -----\n\n /**\n * Toggles the popover visibility when the selected-color button is clicked.\n * We mark as touched because user interacted with the control.\n */\n toggle(popover: any, ev: Event): void {\n if (this.disabled) return;\n\n this.onTouched();\n popover.toggle(ev);\n }\n\n /**\n * Handles color selection from the grid:\n * - updates internal value\n * - propagates value to parent form (onChange)\n * - marks control as touched (selection is a meaningful interaction)\n * - closes the popover\n */\n select(color: string, popover: any): void {\n if (this.disabled) return;\n\n const next = this.normalizeColor(color);\n\n // prevent redundant emits\n if (next === this.value) {\n this.focusedColor = next;\n this.onTouched();\n this.cdr.markForCheck();\n popover.hide();\n return;\n }\n\n this.focusedColor = next;\n this.value = next;\n\n this.onChange(next);\n this.onTouched();\n\n this.cdr.markForCheck();\n popover.hide();\n }\n\n /**\n * Normalizes incoming values to a safe CSS color string or null.\n * For this component we keep it permissive:\n * - accepts \"#RRGGBB\" / \"#RGB\"\n * - also allows any non-empty string (in case someone passes \"red\" or \"var(--x)\")\n * - returns null for empty values\n */\n private normalizeColor(v: any): string | null {\n if (v === null || v === undefined) return null;\n\n const s = String(v).trim();\n if (!s) return null;\n\n // normalize common hex values (with/without '#')\n const withHash = s.startsWith('#') ? s : `#${s}`;\n if (/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(withHash)) return withHash.toLowerCase();\n\n // fallback: allow CSS colors (e.g. \"red\") or CSS vars\n return s;\n }\n}","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Input, inject } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { DatePickerModule } from 'primeng/datepicker';\n\n/**\n * Value shape for the START_DUE_DATE field.\n * Represents a date range with optional start/end values.\n * When both values are null/empty, the control emits `null`.\n */\ntype StartDueValue =\n | { startDate: Date | string | null; endDate: Date | string | null }\n | null;\n\n@Component({\n selector: 'phoenix-meta-start-due-date-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, TranslateModule, DatePickerModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaStartDueDateV2Component),\n multi: true,\n },\n ],\n template: `\n <div class=\"start-due\">\n <div class=\"flex\">\n <div class=\"flex-grow-1\">\n <p-datepicker\n [style]=\"{ width: '100%' }\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [showIcon]=\"true\"\n [placeholder]=\"'LABELS.PLANNED_START' | translate\"\n [disabled]=\"disabled\"\n [ngModel]=\"startDate\"\n (ngModelChange)=\"onStartChange($event)\"\n (onBlur)=\"handleBlur()\"\n appendTo=\"body\"\n ></p-datepicker>\n </div>\n\n <div class=\"flex align-items-center p-2\">\n <i class=\"pi pi-arrow-right text-sm\"></i>\n </div>\n\n <div class=\"flex-grow-1\">\n <p-datepicker\n [style]=\"{ width: '100%' }\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [showIcon]=\"true\"\n [placeholder]=\"'LABELS.PLANNED_END' | translate\"\n [disabled]=\"disabled\"\n [ngModel]=\"endDate\"\n (ngModelChange)=\"onEndChange($event)\"\n (onBlur)=\"handleBlur()\"\n appendTo=\"body\"\n ></p-datepicker>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class MetaStartDueDateV2Component implements ControlValueAccessor {\n /**\n * Optional data-cy attribute prefix for e2e testing.\n * Can be used by parent components to uniquely identify this field in tests.\n */\n @Input() dataCy?: string;\n\n /**\n * Optional parent-level disable flag (in addition to reactive-form disable).\n * Use this when the field must be disabled due to page/business logic.\n */\n @Input() disable = false;\n\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Disabled state coming from Angular Forms (ControlValueAccessor).\n * When true, both date pickers are non-interactive.\n */\n private isDisabled = false;\n\n /**\n * Local UI state for the selected start date.\n * Normalized to Date or null for PrimeNG DatePicker compatibility.\n */\n startDate: Date | null = null;\n\n /**\n * Local UI state for the selected end date.\n * Normalized to Date or null for PrimeNG DatePicker compatibility.\n */\n endDate: Date | null = null;\n\n /**\n * CVA callback invoked when the composite value changes.\n */\n private onChange: (v: StartDueValue) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched.\n * IMPORTANT: We call this on blur (not on every change) to match standard CVA behavior.\n */\n private onTouched: () => void = () => {};\n\n /**\n * Effective disabled state used by the template.\n * Combines reactive form disable + parent-level disable.\n */\n get disabled(): boolean {\n return this.disable || this.isDisabled;\n }\n\n /**\n * Writes a new value from the parent form control into the component.\n * Incoming values are normalized to Date instances for the UI layer.\n *\n * NOTE: \"YYYY-MM-DD\" strings are parsed as local dates to avoid timezone day-shifts.\n */\n writeValue(v: StartDueValue): void {\n this.startDate = this.normalizeDateOnly(this.parseToDate(v?.startDate ?? null));\n this.endDate = this.normalizeDateOnly(this.parseToDate(v?.endDate ?? null));\n\n // OnPush: ensure UI reflects external value writes (patchValue/setValue)\n this.cdr.markForCheck();\n }\n\n /**\n * Registers the callback that should be called when the value changes.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the callback that should be called when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular Forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n\n // OnPush: reflect disabled state changes immediately\n this.cdr.markForCheck();\n }\n\n /**\n * Handler used by PrimeNG DatePicker blur events.\n * Marks the control as touched without emitting a value change.\n */\n handleBlur(): void {\n if (this.disabled) return;\n this.onTouched();\n }\n\n /**\n * Handler for start date change coming from the DatePicker.\n * Updates local state and propagates the composite value.\n */\n onStartChange(d: Date | null): void {\n if (this.disabled) return;\n this.startDate = this.normalizeDateOnly(d ?? null);\n this.emitChange();\n }\n\n /**\n * Handler for end date change coming from the DatePicker.\n * Updates local state and propagates the composite value.\n */\n onEndChange(d: Date | null): void {\n if (this.disabled) return;\n this.endDate = this.normalizeDateOnly(d ?? null);\n this.emitChange();\n }\n\n /**\n * Emits the composite value to the parent form control.\n * - Emits `null` when both dates are empty (cleaner semantics for required/bothDates validators).\n * - Otherwise emits the `{ startDate, endDate }` object (partial values allowed; validator decides).\n */\n private emitChange(): void {\n if (!this.startDate && !this.endDate) {\n this.onChange(null);\n this.cdr.markForCheck();\n return;\n }\n\n this.onChange({\n startDate: this.startDate,\n endDate: this.endDate,\n });\n\n this.cdr.markForCheck();\n }\n\n /**\n * Parses Date | string safely into a Date instance for the UI.\n * Important: \"YYYY-MM-DD\" is treated as a local date (prevents timezone day-shift).\n */\n private parseToDate(v: Date | string | null): Date | null {\n if (!v) return null;\n\n if (v instanceof Date) {\n return isNaN(v.getTime()) ? null : v;\n }\n\n const s = String(v).trim();\n if (!s) return null;\n\n // Date-only string -> create LOCAL date (avoid UTC shifting)\n const m = s.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (m) {\n const y = Number(m[1]);\n const mo = Number(m[2]) - 1;\n const d = Number(m[3]);\n const local = new Date(y, mo, d, 12, 0, 0, 0);\n return isNaN(local.getTime()) ? null : local;\n }\n\n // ISO / other -> fallback\n const dt = new Date(s);\n return isNaN(dt.getTime()) ? null : dt;\n }\n\n private normalizeDateOnly(d: Date | null): Date | null {\n if (!d) return null;\n if (isNaN(d.getTime())) return null;\n\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 12, 0, 0, 0);\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\n\n@Component({\n selector: 'phoenix-meta-switch-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, ToggleSwitchModule],\n template: `\n <p-toggleSwitch\n class=\"phoenix-switch-v2\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onSwitchChange($event)\"\n (onBlur)=\"handleBlur()\"\n [disabled]=\"disabled\"\n [hidden]=\"hidden\"\n [attr.data-cy]=\"dataCy ?? null\"\n ></p-toggleSwitch>\n `,\n styles: [\n `\n :host ::ng-deep .p-toggleswitch {\n margin-top: 12px;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaSwitchV2Component),\n multi: true,\n },\n ],\n})\nexport class MetaSwitchV2Component implements ControlValueAccessor {\n /**\n * Optional external disable flag (field-level disable coming from meta config).\n * This is combined with the disabled state coming from Angular Forms (CVA).\n */\n @Input() disable = false;\n\n /**\n * Optional flag to hide the switch from UI (meta hidden).\n * Keep in mind: hidden does not automatically disable the control.\n */\n @Input() hidden = false;\n\n /**\n * Optional data-cy attribute for e2e tests (e.g. \"switch-singleEntity\").\n */\n @Input() dataCy?: string;\n\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Current boolean value stored inside the component.\n * This value is synchronized with the parent FormControl through CVA.\n */\n value = false;\n\n /**\n * CVA callback invoked when the value changes.\n */\n private onChange: (v: boolean) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched.\n * Standard: call on blur, not on every change.\n */\n private onTouched: () => void = () => {};\n\n /**\n * Disabled state coming from Angular Forms (ControlValueAccessor).\n */\n private isDisabled = false;\n\n /**\n * Final disabled state combining:\n * - form-level disabled state (CVA)\n * - field-level disable flag (input)\n */\n get disabled(): boolean {\n return this.disable || this.isDisabled;\n }\n\n /**\n * Writes a new value from the parent form control into the component.\n * Keep it idempotent and UI-safe.\n */\n writeValue(v: any): void {\n this.value = this.normalizeBool(v);\n this.cdr.markForCheck();\n }\n\n /**\n * Registers callback that is triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers callback that is triggered when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular Forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n /**\n * Handler for switch change.\n * Propagates value to the parent form control.\n *\n * Important note:\n * We intentionally use [ngModel] instead of [(ngModel)] in the template.\n * Two-way binding would update the local value BEFORE this handler runs,\n * which would prevent correct change detection and CVA propagation.\n */\n onSwitchChange(next: boolean): void {\n if (this.disabled) return;\n\n const normalized = this.normalizeBool(next);\n\n if (normalized !== this.value) {\n this.value = normalized;\n this.onChange(normalized);\n this.cdr.markForCheck();\n return;\n }\n\n // ensure the form control still receives the value\n this.onChange(normalized);\n this.cdr.markForCheck();\n }\n\n /**\n * Marks control as touched when user leaves the component.\n */\n handleBlur(): void {\n if (this.disabled) return;\n this.onTouched();\n }\n\n /**\n * Normalizes incoming values to strict boolean.\n * Supports: boolean, \"true\"/\"false\", 1/0, \"1\"/\"0\".\n */\n private normalizeBool(v: any): boolean {\n if (v === true || v === false) return v;\n\n if (v === 1 || v === '1') return true;\n if (v === 0 || v === '0') return false;\n\n if (typeof v === 'string') {\n const s = v.trim().toLowerCase();\n if (s === 'true') return true;\n if (s === 'false') return false;\n }\n\n return !!v;\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { PasswordModule } from 'primeng/password';\n\n/**\n * V2 Password meta field component.\n *\n * Goals vs legacy component:\n * - Uses a clean ControlValueAccessor implementation (no BaseMetaField inheritance).\n * - OnPush + explicit markForCheck() for predictable rendering in large dynamic forms.\n * - Supports \"disable\" (meta-level) + Angular Forms disabled state (CVA) combined.\n * - Emits touched on blur (standard), not on every input.\n * - Keeps value as string and normalizes null/undefined to ''.\n *\n * Notes:\n * - PrimeNG <p-password> supports toggleMask, feedback, strength meter, etc.\n * - We keep [feedback]=\"false\" to match old behavior.\n */\n@Component({\n selector: 'phoenix-meta-password-field-v2',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n TranslateModule,\n PasswordModule,\n ],\n template: `\n <div>\n\n <!--\n PrimeNG Password:\n - We use ngModel for simple CVA integration (same pattern as other meta v2 fields).\n - We handle change via (input) to propagate every keystroke to the parent form.\n - We mark touched on blur to match standard UX (touched != changed).\n -->\n <p-password\n class=\"phoenix-password-v2\"\n [(ngModel)]=\"value\"\n (input)=\"onPasswordInput($event)\"\n (onBlur)=\"handleBlur()\"\n [disabled]=\"disabled\"\n [hidden]=\"hidden\"\n [feedback]=\"feedback\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.data-cy]=\"dataCy ?? null\"\n ></p-password>\n </div>\n `,\n styles: [\n `\n :host ::ng-deep .p-component {\n width: 100%;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MetaPasswordFieldV2Component),\n multi: true,\n },\n ],\n})\nexport class MetaPasswordFieldV2Component implements ControlValueAccessor {\n /**\n * Meta control configuration passed from dynamic forms system.\n * Keep it `any` to be compatible with existing meta-form model.\n *\n * If you have a shared type (e.g. MetaFormControl), replace `any`.\n */\n @Input() control: any;\n\n /**\n * Underlying Angular control reference used by InlineFieldError.\n * In your meta system this is typically injected/assigned by parent wrapper.\n *\n * If you have a strict type: AbstractControl | null\n */\n @Input() ctrl: any;\n\n /**\n * Optional external disable flag (field-level disable coming from meta config).\n * This is combined with the disabled state coming from Angular Forms (CVA).\n */\n @Input() disable = false;\n\n /**\n * Optional flag to hide the control from UI (meta hidden).\n * Keep in mind: hidden does not automatically disable the control.\n */\n @Input() hidden = false;\n\n /**\n * Optional data-cy attribute for e2e tests (e.g. \"password-admin\").\n * If not provided, you can still generate it from control.id in template usage.\n */\n @Input() dataCy?: string;\n\n /**\n * PrimeNG feedback (strength meter / hints). Disabled by default to match v1.\n */\n @Input() feedback = false;\n\n /**\n * Autocomplete attribute: by default we set to \"off\" (match old component).\n * For login forms you might want \"current-password\" or \"new-password\".\n */\n @Input() autocomplete: string = 'off';\n\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Current password value.\n * Always keep as string to avoid null/undefined edge cases with ngModel.\n */\n value = '';\n\n /**\n * CVA callback invoked when the value changes.\n */\n private onChange: (v: string) => void = () => {};\n\n /**\n * CVA callback invoked when the control is marked as touched.\n * Standard: call on blur, not on every change.\n */\n private onTouched: () => void = () => {};\n\n /**\n * Disabled state coming from Angular Forms (ControlValueAccessor).\n */\n private isDisabled = false;\n\n /**\n * Final disabled state combining:\n * - form-level disabled state (CVA)\n * - field-level disable flag (input)\n */\n get disabled(): boolean {\n return this.disable || this.isDisabled;\n }\n\n /**\n * Writes a new value from the parent form control into the component.\n * Keep it idempotent and UI-safe.\n */\n writeValue(v: any): void {\n const next = this.normalizeString(v);\n\n // Prevent redundant UI updates.\n if (next === this.value) {\n this.cdr.markForCheck();\n return;\n }\n\n this.value = next;\n this.cdr.markForCheck();\n }\n\n /**\n * Registers callback that is triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers callback that is triggered when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Receives disabled state from Angular Forms and updates local state.\n */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n /**\n * Handler for user typing into the password input.\n * Propagates current value to the parent form control.\n *\n * Note:\n * - PrimeNG (input) gives us an event; we can also just use this.value directly.\n * - We intentionally do NOT call onTouched here (touched on blur).\n */\n onPasswordInput(event: any): void {\n if (this.disabled) return;\n\n const next = this.getInputValue(event);\n\n // Prevent redundant emits.\n if (next === this.value) {\n this.cdr.markForCheck();\n return;\n }\n\n this.value = next;\n this.onChange(next);\n this.cdr.markForCheck();\n }\n\n /**\n * Marks control as touched when user leaves the component.\n */\n handleBlur(): void {\n if (this.disabled) return;\n this.onTouched();\n }\n\n /**\n * PrimeNG input event -> string value.\n * Supports:\n * - native input event: event.target.value\n * - direct string (some wrappers)\n */\n private getInputValue(event: any): string {\n const v = event?.target?.value ?? event;\n return this.normalizeString(v);\n }\n\n /**\n * Normalizes incoming values to a string.\n * - null/undefined -> ''\n * - other -> String(v)\n */\n private normalizeString(v: any): string {\n if (v === null || v === undefined) return '';\n return String(v);\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n Input\n} from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { MetaFieldConfig, MetaFieldType } from '../../models/meta-field-config.model';\n\n// PrimeNG 20\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { SelectModule } from 'primeng/select';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { MessageModule } from 'primeng/message';\nimport { TextareaModule } from 'primeng/textarea';\n\nimport { MetaTimeperiodComponent } from '../../../meta-form/meta-form-fields/meta-timeperiod/meta-timeperiod.component';\nimport { MetaCurrencyComponent } from '../../../meta-form/meta-form-fields/meta-currency/meta-currency.component';\nimport { MetaTextEditorComponent } from '../../../meta-form/meta-form-fields/meta-text-editor/meta-text-editor.component';\nimport { MetaSelectButtonComponent } from '../../../meta-form/meta-form-fields/meta-select-button/meta-select-button.component';\nimport { MetaUploadComponent } from '../../../meta-form/meta-form-fields/meta-upload/meta-upload.component';\nimport { MetaUploadComponentDragDrop } from '../../../meta-form/meta-form-fields/meta-upload-dragdrop/meta-upload-dragdrop.component';\nimport { ReadOnlyInputV2Component } from '../read-only-input-v2/read-only-input-v2.component';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport { MetaAssignResponsibleV2Component } from '../meta-form-custom-fields/meta-assign-responsible-v2.component';\nimport { MetaColorPickerV2Component } from '../meta-form-custom-fields/meta-color-picker-v2.component';\nimport { MetaCheckboxColorPickerV2Component } from '../meta-form-custom-fields/meta-checkbox-color-picker-v2.component';\nimport { MetaStartDueDateV2Component } from '../meta-form-custom-fields/meta-start-due-date-v2.component';\nimport { MetaSwitchV2Component } from '../meta-form-custom-fields/meta-switch-v2.component';\nimport { MetaPasswordFieldV2Component } from '../meta-form-custom-fields/meta-password-field-v2.component';\n\n@Component({\n selector: 'phoenix-meta-form-field-v2',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n\n // PrimeNG 20 base inputs\n InputTextModule,\n TextareaModule,\n InputNumberModule,\n CheckboxModule,\n MultiSelectModule,\n SelectModule,\n DatePickerModule,\n MessageModule,\n\n // Advanced / custom Phoenix fields\n MetaTimeperiodComponent,\n MetaCurrencyComponent,\n MetaStartDueDateV2Component,\n MetaTextEditorComponent,\n MetaCheckboxColorPickerV2Component,\n MetaSwitchV2Component,\n MetaSelectButtonComponent,\n MetaAssignResponsibleV2Component,\n // MetaAssignAssetComponent,\n MetaPasswordFieldV2Component,\n MetaColorPickerV2Component,\n MetaUploadComponent,\n MetaUploadComponentDragDrop,\n\n // Read-only renderer used when page or field is in read-only mode\n ReadOnlyInputV2Component,\n ],\n templateUrl: './meta-form-field-v2.component.html',\n styleUrls: ['./meta-form-field-v2.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MetaFormFieldV2Component {\n /** Metadata definition of the field (type, key, options, styles, flags, etc.) */\n @Input({ required: true }) field!: MetaFieldConfig;\n\n /** Parent FormGroup that contains the FormControl for this field */\n @Input({ required: true }) form!: FormGroup;\n\n /**\n * Page-level read-only flag.\n * When true, the component renders ReadOnlyInputV2Component instead of editable controls.\n */\n @Input() readOnly = false;\n\n /**\n * Global disable flag (e.g. parent dialog toggles entire form disabled).\n * This is merged with field-level disable configuration.\n */\n @Input() disableForm = false;\n\n /** Used to manually trigger change detection for OnPush strategy */\n private cdr = inject(ChangeDetectorRef);\n\n /** Used to automatically unsubscribe from value/status streams on destroy */\n private dr = inject(DestroyRef);\n\n /** Translation service for validation and display labels */\n private translate = inject(TranslateService);\n\n /**\n * Exposed enum-like mapping of MetaFieldType for template usage.\n * Keeps templates readable and avoids magic strings.\n */\n readonly MetaFieldType = Object.freeze({\n TEXT: 'TEXT',\n URL: 'URL',\n NUMBER: 'NUMBER',\n TIMEPERIOD: 'TIMEPERIOD',\n CURRENCY: 'CURRENCY',\n TEXT_AREA: 'TEXT_AREA',\n SS_OPTION: 'SS_OPTION',\n SS_OPTION_OBJECT_BASED: 'SS_OPTION_OBJECT_BASED',\n MS_OPTION: 'MS_OPTION',\n START_DUE_DATE: 'START_DUE_DATE',\n DATE: 'DATE',\n TEXT_EDITOR: 'TEXT_EDITOR',\n CHECKBOX: 'CHECKBOX',\n CHECKBOX_COLOR: 'CHECKBOX_COLOR',\n SWITCH: 'SWITCH',\n SELECT_BUTTON: 'SELECT_BUTTON',\n ASSIGN: 'ASSIGN',\n ASSIGN_ASSET: 'ASSIGN_ASSET',\n PASSWORD: 'PASSWORD',\n COLOR: 'COLOR',\n UPLOAD: 'UPLOAD',\n UPLOAD_DRAG_DROP: 'UPLOAD_DRAG_DROP',\n LINKS_DATA: 'LINKS_DATA',\n SLOT: 'SLOT',\n } satisfies Record<string, MetaFieldType>);\n\n /** Control key resolved from MetaFieldConfig */\n get key(): string {\n return this.field?.configuration?.key ?? '';\n }\n\n /** Field type resolved from MetaFieldConfig */\n get type(): MetaFieldType {\n return this.field?.configuration?.type ?? 'TEXT';\n }\n\n /** Column width class for grid layout (falls back to default if not provided) */\n get colClass(): string {\n return this.field?.hidden\n ? 'p-0'\n : (this.field?.style.colWidth ?? 'col-12 md:col-6');\n }\n\n ngOnInit(): void {\n const ctrl = this.ctrl();\n if (!ctrl) return;\n\n /**\n * Subscribe to both valueChanges and statusChanges so the component:\n * - re-renders when user changes the value\n * - re-renders when validation state changes (touched/dirty/errors)\n */\n merge(ctrl.valueChanges, ctrl.statusChanges)\n .pipe(takeUntilDestroyed(this.dr))\n .subscribe(() => this.cdr.markForCheck());\n }\n\n /** Human-friendly label defined in metadata (already localized key) */\n userFriendlyMessage(): string | null {\n return this.field?.userFriendlyMessage ?? null;\n }\n\n /** Optional placeholder i18n key defined in metadata */\n placeholderKey(): string | null {\n return this.field?.configuration?.placeholderKey ?? null;\n }\n\n /**\n * Resolves final read-only state for this field:\n * - page-level readOnly OR field-level readOnly\n */\n isReadOnly(): boolean {\n return !!this.readOnly || !!this.field?.readOnly;\n }\n\n /**\n * Resolves final disabled state for this field:\n * - page-level disable OR field-level disable\n */\n isDisabled(): boolean {\n return !!this.disableForm || !!this.field?.disable;\n }\n\n /** Shortcut to underlying FormControl */\n ctrl() {\n return this.form.get(this.key);\n }\n\n /**\n * Minimal value formatter for legacy read-only rendering.\n * Kept intentionally simple to match V1 behavior.\n */\n displayValue(): any {\n const v = this.ctrl()?.value;\n if (v === null || v === undefined) return '';\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') return v;\n\n // Common DTO shapes (assign, option objects, uploads, etc.)\n if (typeof v === 'object') {\n return (v as any).label ?? (v as any).name ?? (v as any).fileName ?? JSON.stringify(v);\n }\n\n return String(v);\n }\n\n /**\n * Determines whether validation error should be displayed.\n * Errors are shown only after user interaction (touched or dirty).\n */\n showError(): boolean {\n const c = this.ctrl();\n return !!c && (c.touched || c.dirty) && !!c.errors;\n }\n\n /**\n * Maps control error object to a normalized error key.\n * Supports:\n * - Angular built-in validators\n * - Phoenix custom validators\n * - Submit-only async validators\n */\n errorKey(): string | null {\n const c = this.ctrl();\n if (!c?.errors) return null;\n\n // Angular built-in validators\n if (c.errors['required']) return 'required';\n if (c.errors['minlength']) return 'minlength';\n if (c.errors['maxlength']) return 'maxlength';\n if (c.errors['email']) return 'email';\n if (c.errors['pattern']) return 'pattern';\n if (c.errors['min']) return 'min';\n if (c.errors['max']) return 'max';\n\n // Phoenix custom validators\n if (c.errors['dangerousChars']) return 'dangerousChars';\n if (c.errors['timeperiod']) return 'timeperiod';\n if (c.errors['invalidDate']) return 'invalidDate';\n if (c.errors['dueDate']) return 'dueDate';\n if (c.errors['bothDates']) return 'bothDates';\n\n // Submit-only async validators\n if (c.errors['unique']) return 'unique';\n if (c.errors['uniqueEntry']) return 'uniqueEntry';\n if (c.errors['custom']) return 'custom';\n\n // Fallback: return first error key\n return Object.keys(c.errors)[0] ?? null;\n }\n\n /**\n * Resolves translated error message based on errorKey().\n * This is the single place responsible for validation message UX.\n */\n errorText(): string {\n const c = this.ctrl();\n const k = this.errorKey();\n if (!c || !k) return '';\n\n switch (k) {\n case 'required':\n return this.translate.instant('VALIDATION_MESSAGE.THIS_FIELD_IS_REQUIRED');\n\n case 'minlength':\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_AT_LEAST', {\n minlength: c.errors?.['minlength']?.requiredLength,\n });\n\n case 'maxlength':\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_NO_MORE', {\n maxlength: c.errors?.['maxlength']?.requiredLength,\n });\n\n case 'email':\n return this.translate.instant('VALIDATION_MESSAGE.ENTER_VALID_EMAIL');\n\n case 'dangerousChars':\n return this.translate.instant('VALIDATION_MESSAGE.NO_SPECIAL_CHARS_ALLOWED');\n\n case 'custom':\n // Legacy behavior: custom error can already be a translation key\n return this.translate.instant(c.errors?.['custom']);\n\n case 'uniqueEntry':\n // Legacy behavior: uniqueEntry may already be a translated string\n return (\n c.errors?.['uniqueEntry'] ??\n this.translate.instant('VALIDATION_MESSAGE.VALUE_IS_ALREADY_IN_USE')\n );\n\n case 'unique':\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_IS_ALREADY_IN_USE');\n\n case 'timeperiod':\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_SHOULD_MATCH_TIMEPATTERN');\n\n case 'dueDate':\n return this.translate.instant('VALIDATION_MESSAGE.INVALID_DATE');\n\n case 'bothDates':\n return this.translate.instant('VALIDATION_MESSAGE.BOTH_START_END_DATE_REQUIRED');\n\n case 'max':\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_SHOULD_BE_LESS_THAN_AND_MORE_THAN', {\n lowerValue: c.errors?.['min']?.min ?? 0,\n upperValue: c.errors?.['max']?.max,\n });\n\n case 'pattern': {\n // Special-case URL pattern handling (legacy InlineFieldError behavior)\n const re = '^(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?$';\n const requiredPattern = c.errors?.['pattern']?.requiredPattern;\n\n if (requiredPattern === re) {\n return this.translate.instant('VALIDATION_MESSAGE.VALUE_SHOUL_BE_URL');\n }\n return this.translate.instant('VALIDATION_MESSAGE.INVALID_VALUE');\n }\n\n default:\n return this.translate.instant('VALIDATION_MESSAGE.INVALID_VALUE');\n }\n }\n\n /**\n * Lightweight text formatter for simple read-only display use cases.\n * This is used mainly for inline displays and summary UIs.\n */\n valueText(): string {\n const c = this.ctrl();\n const v = c?.value;\n\n if (v === null || v === undefined || v === '') return '--';\n\n // Single-select option: resolve label from options\n if (this.type === 'SS_OPTION') {\n const opts = (this.field?.configuration as any)?.options ?? [];\n if (typeof v !== 'object') {\n const hit = opts.find((o: any) => o?.value === v);\n const label = hit?.label ?? v;\n return this.translate.instant(label);\n }\n\n // Object value fallback\n const label = (v as any).label ?? (v as any).value;\n return this.translate.instant(label);\n }\n\n // Date formatting\n if (this.type === 'DATE' && v instanceof Date) {\n return v.toLocaleDateString();\n }\n\n // Text editor / textarea: strip basic HTML tags for compact display\n if (this.type === 'TEXT_EDITOR' || this.type === 'TEXT_AREA') {\n return String(v).replace(/<[^>]*>/g, '').trim() || '--';\n }\n\n return String(v);\n }\n\n isCheckbox(): boolean {\n return this.type === this.MetaFieldType.CHECKBOX;\n }\n\n onDateSelected(val: any) {\n const ctrl = this.ctrl();\n if (!ctrl) return;\n\n const d = val instanceof Date ? val : (val ? new Date(val) : null);\n if (!d || isNaN(d.getTime())) return;\n\n const normalized = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 12, 0, 0, 0);\n\n // set without re-triggering loops\n ctrl.setValue(normalized, { emitEvent: false });\n ctrl.markAsDirty();\n ctrl.markAsTouched();\n\n this.cdr.markForCheck();\n }\n\n onDateCleared() {\n const ctrl = this.ctrl();\n if (!ctrl) return;\n ctrl.setValue(null, { emitEvent: false });\n ctrl.markAsDirty();\n ctrl.markAsTouched();\n this.cdr.markForCheck();\n }\n}","<div [formGroup]=\"form\">\n @if (!field.hidden) {\n <div\n class=\"meta-field flex gap-2\"\n [class.flex-column]=\"!isCheckbox()\"\n [class.align-items-center]=\"isCheckbox()\"\n [style.order]=\"field.order ?? null\"\n [attr.data-cy]=\"'meta-field-' + key\"\n >\n\n @if (userFriendlyMessage() && !isCheckbox()) {\n <label class=\"meta-label\" [attr.for]=\"key\">\n {{ userFriendlyMessage()! | translate }}\n @if (field.mandatory) { <span class=\"meta-required\">*</span> }\n </label>\n }\n\n <!-- READ ONLY (page-level ili field-level) -->\n @if (isReadOnly()) {\n <phoenix-read-only-input-v2 [field]=\"field\" [form]=\"form\"></phoenix-read-only-input-v2>\n } @else {\n @switch (type) {\n\n @case (MetaFieldType.TEXT) {\n <input pInputText [id]=\"key\" [formControlName]=\"key\"\n [attr.placeholder]=\"placeholderKey() ? (placeholderKey()! | translate) : null\" [readonly]=\"isReadOnly()\">\n }\n\n @case (MetaFieldType.URL) {\n <input pInputText [id]=\"key\" [formControlName]=\"key\"\n [attr.placeholder]=\"placeholderKey() ? (placeholderKey()! | translate) : null\" [readonly]=\"isReadOnly()\">\n }\n\n @case (MetaFieldType.PASSWORD) {\n <phoenix-meta-password-field-v2 [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\">\n </phoenix-meta-password-field-v2>\n }\n\n @case (MetaFieldType.TEXT_AREA) {\n <textarea pTextarea class=\"meta-textarea\" [id]=\"key\" [formControlName]=\"key\" fluid [autoResize]=\"false\" rows=\"5\"\n [readonly]=\"isReadOnly()\" [attr.placeholder]=\"placeholderKey() ? (placeholderKey()! | translate) : null\">\n </textarea>\n }\n\n @case (MetaFieldType.NUMBER) {\n <p-inputNumber [inputId]=\"key\" [formControlName]=\"key\">\n </p-inputNumber>\n }\n\n @case (MetaFieldType.DATE) {\n <p-datepicker\n [inputId]=\"key\"\n [formControlName]=\"key\"\n [showIcon]=\"true\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n appendTo=\"body\"\n (onSelect)=\"onDateSelected($event)\"\n (onClearClick)=\"onDateCleared()\"\n ></p-datepicker>\n }\n\n @case (MetaFieldType.SS_OPTION) {\n <p-select [inputId]=\"key\" [options]=\"field.configuration.options ?? []\" optionLabel=\"label\" optionValue=\"value\"\n [formControlName]=\"key\" [showClear]=\"false\">\n </p-select>\n }\n\n @case (MetaFieldType.SS_OPTION_OBJECT_BASED) {\n <p-select [inputId]=\"key\" [options]=\"field.configuration.options ?? []\" optionLabel=\"label\" [formControlName]=\"key\"\n [showClear]=\"true\">\n </p-select>\n }\n\n @case (MetaFieldType.MS_OPTION) {\n <p-multiselect [inputId]=\"key\" [options]=\"field.configuration.options ?? []\" optionLabel=\"label\" optionValue=\"value\"\n [formControlName]=\"key\" [showClear]=\"false\" display=\"chip\">\n </p-multiselect>\n }\n\n @case (MetaFieldType.CHECKBOX) {\n <p-checkbox\n [inputId]=\"key\"\n [binary]=\"true\"\n [formControlName]=\"key\"\n [disabled]=\"isDisabled()\"\n ></p-checkbox>\n\n <label class=\"meta-inline-label\" [attr.for]=\"key\">\n {{ (userFriendlyMessage() ?? placeholderKey() ?? '') | translate }}\n @if (field.mandatory) { <span class=\"meta-required\">*</span> }\n </label>\n }\n\n <!-- advanced: preko postojećih komponenti -->\n @case (MetaFieldType.TIMEPERIOD) {\n <phoenix-meta-timeperiod [formControlName]=\"key\" [control]=\"field\" [parentForm]=\"form\"></phoenix-meta-timeperiod>\n }\n\n @case (MetaFieldType.CURRENCY) {\n <phoenix-meta-currency [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-currency>\n }\n\n @case (MetaFieldType.START_DUE_DATE) {\n <phoenix-meta-start-due-date-v2\n [formControlName]=\"key\"\n [attr.data-cy]=\"'start-due-' + key\">\n </phoenix-meta-start-due-date-v2>\n }\n\n @case (MetaFieldType.TEXT_EDITOR) {\n <phoenix-meta-text-editor [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-text-editor>\n }\n\n @case (MetaFieldType.CHECKBOX_COLOR) {\n <phoenix-meta-checkbox-color-picker-v2\n [formControlName]=\"key\"\n [options]=\"(field.configuration.extra?.['colorGrid'] ?? [])\"\n [disable]=\"isDisabled()\">\n </phoenix-meta-checkbox-color-picker-v2>\n }\n\n @case (MetaFieldType.SWITCH) {\n <phoenix-meta-switch-v2 [disable]=\"isDisabled()\" [formControlName]=\"key\" [hidden]=\"field.hidden ?? false\"\n [dataCy]=\"'switch-' + key\"></phoenix-meta-switch-v2>\n }\n\n @case (MetaFieldType.SELECT_BUTTON) {\n <phoenix-meta-select-button [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-select-button>\n }\n\n @case (MetaFieldType.ASSIGN) {\n <phoenix-meta-assign-responsible-v2\n [formControlName]=\"key\"\n [items]=\"(field.configuration.extra?.['items'] ?? [])\"\n [dialogHeaderKey]=\"(field.configuration.extra?.['dialogHeaderKey'] ?? 'LABELS.ASSIGN_RESPONSIBLE')\"\n ></phoenix-meta-assign-responsible-v2>\n }\n\n <!-- @case (MetaFieldType.ASSIGN_ASSET) {\n <phoenix-meta-assign-asset [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-assign-asset>\n } -->\n\n @case (MetaFieldType.COLOR) {\n <phoenix-meta-color-picker-v2\n [formControlName]=\"key\"\n [disable]=\"isDisabled()\">\n </phoenix-meta-color-picker-v2>\n }\n\n @case (MetaFieldType.UPLOAD) {\n <phoenix-meta-upload [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-upload>\n }\n\n @case (MetaFieldType.UPLOAD_DRAG_DROP) {\n <phoenix-meta-upload-dragdrop [disable]=\"isDisabled()\" [formControlName]=\"key\" [control]=\"field\"\n [parentForm]=\"form\"></phoenix-meta-upload-dragdrop>\n }\n\n @case (MetaFieldType.LINKS_DATA) {\n <!-- <input pInputText [id]=\"key\" [formControlName]=\"key\" [readonly]=\"true\"> -->\n }\n\n @case (MetaFieldType.SLOT) { }\n\n @default {\n <input pInputText [id]=\"key\" [formControlName]=\"key\">\n }\n }\n\n @if (field.configuration.extra?.['dividerAfter']) {\n <div\n class=\"meta-divider\"\n [style.margin]=\"field.configuration.extra?.['dividerMargin'] ?? '12px 0'\"\n ></div>\n }\n }\n\n\n @if (!readOnly && showError()) {\n <small class=\"p-error block mt-1\">\n <i class=\"pi pi-info-circle mr-1\"></i>{{ errorText() }}\n </small>\n }\n </div>\n }\n</div>","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { MetaFormGroupConfig } from '../../models/meta-form-config.model';\nimport { MetaFormFieldV2Component } from '../meta-form-field-v2/meta-form-field-v2.component';\n\n@Component({\n selector: 'phoenix-meta-form-group-v2',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MetaFormFieldV2Component],\n templateUrl: './meta-form-group-v2.component.html',\n styleUrls: ['./meta-form-group-v2.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MetaFormGroupV2Component {\n @Input({ required: true }) group!: MetaFormGroupConfig;\n @Input({ required: true }) form!: FormGroup;\n @Input() readOnly = false;\n}","<div class=\"pho-group\" [formGroup]=\"form\">\n <div class=\"grid\">\n @for (f of group.ctrl; track f?.configuration?.key) {\n <div [ngClass]=\"f.style.colWidth || 'col-12 md:col-6'\">\n <phoenix-meta-form-field-v2 [field]=\"f\" [form]=\"form\" [readOnly]=\"readOnly\"></phoenix-meta-form-field-v2>\n </div>\n }\n </div>\n\n</div>","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { UniqueValidationResponse } from '../models/meta-submit-validator.model';\n\nexport type MetaAsyncExecutor = (url: string, body?: any) => Observable<any>;\n\n/**\n * You provide this from app (or phoenix-config) so V2 lib doesn't depend on CrudService directly.\n * Example impl: (url, body) => this.crud.post(url, body)\n */\nexport const META_FORM_ASYNC_EXECUTOR =\n new InjectionToken<MetaAsyncExecutor>('META_FORM_ASYNC_EXECUTOR');","import { Inject, Injectable, Optional, DestroyRef, inject } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { firstValueFrom, Subscription } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { MetaSubmitValidatorConfig, UniqueValidationResponse } from '../models/meta-submit-validator.model';\nimport { META_FORM_ASYNC_EXECUTOR, MetaAsyncExecutor } from '../tokens/meta-form.tokens';\n\n// Symbols used to attach submit-only validators and cleanup subscriptions\n// directly onto the FormGroup instance without polluting its public API.\nconst SUBMIT_VALIDATORS = Symbol('META_FORM_V2_SUBMIT_VALIDATORS');\nconst SUBMIT_CLEAR_SUBS = Symbol('META_FORM_V2_SUBMIT_CLEAR_SUBS');\n\n@Injectable({ providedIn: 'root' })\nexport class MetaSubmitValidatorService {\n /** Used to automatically clean up subscriptions when the service is destroyed */\n private dr = inject(DestroyRef);\n\n constructor(\n /**\n * Optional async executor abstraction used to perform server-side validation\n * (e.g. uniqueness checks).\n *\n * If not provided, submit-only validators will be skipped gracefully.\n */\n @Optional()\n @Inject(META_FORM_ASYNC_EXECUTOR)\n private executor?: MetaAsyncExecutor\n ) {}\n\n /**\n * Registers submit-only validators on the given form.\n *\n * - Attaches validator metadata to the form instance (via Symbols)\n * - Cleans up any previous subscriptions\n * - Subscribes to valueChanges in order to auto-clear submit-only errors\n * when the user modifies the field after a failed submit\n */\n register(form: FormGroup, validators: MetaSubmitValidatorConfig[] | null | undefined): void {\n const list = validators ?? [];\n (form as any)[SUBMIT_VALIDATORS] = list;\n\n // Cleanup old auto-clear subscriptions\n const old: Subscription[] = (form as any)[SUBMIT_CLEAR_SUBS] ?? [];\n old.forEach((s) => s.unsubscribe());\n (form as any)[SUBMIT_CLEAR_SUBS] = [];\n\n // Subscribe to valueChanges in order to remove submit-only errors\n // as soon as the user changes the input.\n const subs: Subscription[] = [];\n\n for (const v of list) {\n const ctrl = form.get(v.controlKey);\n if (!ctrl) continue;\n\n const errorKey = v.errorKey ?? 'unique';\n\n subs.push(\n ctrl.valueChanges\n .pipe(takeUntilDestroyed(this.dr))\n .subscribe(() => {\n // ✅ Only remove submit-only error.\n // ❌ Do NOT trigger updateValueAndValidity here to avoid noisy re-validation.\n this.removeError(ctrl, errorKey);\n })\n );\n }\n\n (form as any)[SUBMIT_CLEAR_SUBS] = subs;\n }\n\n /**\n * Executes submit-only validators.\n *\n * Flow:\n * 1) Mark all controls as touched/dirty so sync validation messages become visible\n * 2) If form is sync-invalid, skip async validation\n * 3) Clear previous submit-only errors\n * 4) Execute async validators sequentially\n * 5) Apply mapped errors back to controls\n *\n * Returns:\n * - true → form is valid (sync + submit-only async)\n * - false → at least one submit-only validator failed\n */\n async run(form: FormGroup): Promise<boolean> {\n const validators: MetaSubmitValidatorConfig[] = (form as any)[SUBMIT_VALIDATORS] ?? [];\n\n // Make sure sync validation errors are visible on submit\n this.markAllTouchedOnSubmit(form);\n\n // Do not emit valueChanges/statusChanges events here\n form.updateValueAndValidity({ emitEvent: false });\n\n if (!validators.length) return form.valid;\n\n // If no async executor is provided, do not block submit\n if (!this.executor) return form.valid;\n\n // Clear previous submit-only errors before re-running validation\n this.clearSubmitErrors(form, validators);\n\n // If sync validation fails, skip async calls\n form.updateValueAndValidity({ emitEvent: false });\n if (form.invalid) return false;\n\n // Execute submit-only validators sequentially\n for (const v of validators) {\n const req = v.buildRequest(form);\n if (!req) continue;\n\n const raw = await firstValueFrom(this.executor(req.url, req.body));\n const mapped: UniqueValidationResponse =\n v.mapResponse?.(raw) ?? (raw as UniqueValidationResponse);\n\n const targetKey = (mapped?.control || v.controlKey) ?? v.controlKey;\n const ctrl = form.get(targetKey);\n if (!ctrl) continue;\n\n if (mapped?.isValid === false) {\n const errorKey = v.errorKey ?? 'unique';\n const msg =\n mapped?.message ??\n 'VALIDATION_MESSAGE.VALUE_IS_ALREADY_IN_USE';\n\n // Attach submit-only error to control\n ctrl.setErrors({ ...(ctrl.errors ?? {}), [errorKey]: msg });\n\n // Force visibility of the error in UI\n ctrl.markAsTouched();\n ctrl.markAsDirty();\n\n return false;\n }\n }\n\n return form.valid;\n }\n\n /**\n * Removes a specific submit-only error from the control without\n * touching other validation errors.\n */\n private removeError(ctrl: AbstractControl, errorKey: string) {\n if (!ctrl.errors?.[errorKey]) return;\n\n const next = { ...(ctrl.errors ?? {}) };\n delete next[errorKey];\n ctrl.setErrors(Object.keys(next).length ? next : null);\n }\n\n /**\n * Clears submit-only errors for all controls involved in submit validators.\n * This does NOT trigger updateValueAndValidity to avoid unnecessary re-validation.\n */\n private clearSubmitErrors(form: FormGroup, validators: MetaSubmitValidatorConfig[]): void {\n const keys = new Set<string>();\n validators.forEach((v) => keys.add(v.controlKey));\n\n const errorKeys = new Set<string>(validators.map((v) => v.errorKey ?? 'unique'));\n\n keys.forEach((k) => {\n const ctrl = form.get(k);\n if (!ctrl?.errors) return;\n\n const nextErrors = { ...(ctrl.errors ?? {}) };\n errorKeys.forEach((ek) => delete nextErrors[ek]);\n\n // ✅ Only update errors object, no re-validation side effects\n ctrl.setErrors(Object.keys(nextErrors).length ? nextErrors : null);\n });\n }\n\n /**\n * Marks all form controls as touched and dirty.\n * This is used on submit to make validation errors visible to the user.\n */\n private markAllTouchedOnSubmit(form: FormGroup): void {\n Object.values(form.controls).forEach((c: AbstractControl) => {\n c.markAsTouched();\n c.markAsDirty();\n });\n }\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Value shape expected by the START_DUE_DATE control.\n * Can be:\n * - null\n * - object with optional startDate / endDate (Date or ISO string)\n */\ntype StartDueValue =\n | { startDate: Date | string | null; endDate: Date | string | null }\n | null;\n\n/**\n * Validator for START_DUE_DATE composite field.\n *\n * Responsibilities:\n * - Optionally enforce that BOTH startDate and endDate are provided (requireBoth)\n * - Validate that provided dates are valid Date values\n * - Ensure startDate is not after endDate\n *\n * This is a synchronous validator and should be attached to the single FormControl\n * that represents the composite START_DUE_DATE value.\n */\nexport function startDueDateV2Validator(opts?: { requireBoth?: boolean }): ValidatorFn {\n const requireBoth = !!opts?.requireBoth;\n\n return (control: AbstractControl): ValidationErrors | null => {\n const v = control.value as StartDueValue;\n\n const sdRaw = v?.startDate ?? null;\n const edRaw = v?.endDate ?? null;\n\n // Case 1: both dates are empty\n // - If both are required -> invalid\n // - Otherwise -> valid (optional date range)\n if (!sdRaw && !edRaw) {\n return requireBoth ? { bothDates: true } : null;\n }\n\n // Case 2: only one date is provided but both are required\n if (requireBoth && (!sdRaw || !edRaw)) {\n return { bothDates: true };\n }\n\n // Case 3: both are optional and one is missing -> valid\n if (!sdRaw || !edRaw) return null;\n\n // Parse raw values into Date instances\n const sd = new Date(sdRaw as any);\n const ed = new Date(edRaw as any);\n\n // Invalid date values (e.g. unparsable strings)\n if (isNaN(sd.getTime()) || isNaN(ed.getTime())) return { dueDate: true };\n\n // Normalize both dates to midnight for date-only comparison (ignore time)\n const s = new Date(sd);\n s.setHours(0, 0, 0, 0);\n\n const e = new Date(ed);\n e.setHours(0, 0, 0, 0);\n\n // Start date must not be after end date\n return s.getTime() > e.getTime() ? { dueDate: true } : null;\n };\n}","import { AbstractControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { MetaFieldConfig, MetaFieldType } from '../models/meta-field-config.model';\nimport { startDueDateV2Validator } from './start-due-date-v2.validator';\nimport { timePeriod } from '../../meta-form/meta-validators/timeperiod/timeperiod.validator';\nimport { WhiteSpaceValidator } from '../../meta-form/meta-validators/white-space-validator';\nimport { noDangerousCharsValidator } from '../../meta-form/meta-validators/no-dangerous-chars/do-danerous-chars';\n\n/**\n * Builds synchronous Angular validators for a single meta-field.\n *\n * This function only returns *sync* validators:\n * - Required, min/max, length\n * - Email\n * - Regex / phone\n * - Timeperiod\n * - Start/Due date cross-field-ish validator (but still sync)\n * - Whitespace rules\n * - Dangerous characters\n *\n * Submit-only async validators (e.g. uniqueness) are handled elsewhere (MetaSubmitValidatorService).\n */\nexport function buildSyncValidators(\n field: MetaFieldConfig,\n ctx?: { lang?: string }\n): ValidatorFn[] {\n const out: ValidatorFn[] = [];\n\n // `field.validators` is a metadata-driven bag of validation rules\n const v: any = field.validators ?? {};\n\n // Field type drives some special-case validators\n const type = field.configuration.type as MetaFieldType;\n\n // ---- numeric constraints ----\n if (v.min != null) out.push(Validators.min(v.min));\n if (v.max != null) out.push(Validators.max(v.max));\n\n // ---- length constraints ----\n if (v.minLength != null) out.push(Validators.minLength(v.minLength));\n if (v.maxLength != null) out.push(Validators.maxLength(v.maxLength));\n\n // ---- email ----\n if (v.email) out.push(Validators.email);\n\n // ---- regex / pattern ----\n // Supports either:\n // - plain pattern string\n // - \"/.../flags\" format which we try to compile into RegExp\n if (v.regex?.regexType) {\n out.push(\n Validators.pattern(\n resolvePattern(v.regex.regexType) ?? v.regex.regexType\n )\n );\n }\n\n // ---- phone ----\n // if (v.phone) out.push(Validators.pattern(/^\\+?[1-9]\\d{7,14}$/));\n if (v.phone) out.push(phoneHumanValidator({ minDigits: 8, maxDigits: 15 }));\n\n // ---- time period ----\n // Localized validator; tpMin can enforce minimal value/length depending on your implementation.\n if (v.timeperiod) out.push(timePeriod(ctx?.lang ?? 'en', v.tpMin));\n\n // ---- start/due date ----\n // Apply the validator if field is of START_DUE_DATE type or if metadata explicitly enables dueDate.\n // requireBoth is driven by field.mandatory\n if (type === 'START_DUE_DATE' || v.dueDate) {\n out.push(startDueDateV2Validator({ requireBoth: !!field.mandatory }));\n }\n\n // ---- required ----\n if (field.mandatory) out.push(Validators.required);\n\n // ---- whitespace guard for required text fields ----\n // Prevent \" \" from passing required validation.\n if (field.mandatory && (type === 'TEXT' || type === 'TEXT_AREA')) {\n out.push(WhiteSpaceValidator.noWhiteSpaceValidator);\n }\n\n // ---- dangerous characters ----\n // Applied to text and textarea only.\n if (type === 'TEXT' || type === 'TEXT_AREA') {\n out.push(noDangerousCharsValidator());\n }\n\n return out;\n}\n\n/**\n * Tries to interpret a regex string in \"/pattern/flags\" format.\n * If parsing fails, returns null and the caller falls back to using the raw string.\n */\nfunction resolvePattern(regexType?: string): string | RegExp | null {\n if (!regexType) return null;\n\n // Support format like: \"/^[0-9]+$/g\"\n const m = regexType.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (m) {\n try {\n return new RegExp(m[1], m[2]);\n } catch {\n return null;\n }\n }\n\n // Otherwise treat it as a plain string pattern\n return regexType;\n}\n\n/**\n * Phone validator that accepts common human formats:\n * - spaces, hyphens, parentheses\n * - local numbers starting with 0 (e.g. 060...)\n * - international numbers with +\n *\n * Strategy:\n * 1) Strip formatting chars\n * 2) Validate the normalized digits\n */\nexport function phoneHumanValidator(opts?: {\n minDigits?: number; // total digits after normalization\n maxDigits?: number;\n}): ValidatorFn {\n const min = opts?.minDigits ?? 8;\n const max = opts?.maxDigits ?? 15;\n\n return (control: AbstractControl): ValidationErrors | null => {\n const raw = (control.value ?? '').toString().trim();\n if (!raw) return null; // let required handle empties\n\n // Keep leading \"+\" if present, remove common separators\n const normalized = raw\n .replace(/[\\s\\-().]/g, '') // remove spaces, dashes, parentheses, dots\n .replace(/(?!^\\+)\\+/g, ''); // remove any \"+\" not at the start\n\n // Allow optional leading \"+\"\n const hasPlus = normalized.startsWith('+');\n const digits = hasPlus ? normalized.slice(1) : normalized;\n\n // Digits only after normalization\n if (!/^\\d+$/.test(digits)) return { phone: true };\n\n // Length constraints (digits only)\n if (digits.length < min || digits.length > max) return { phone: true };\n\n // If it has \"+\", require country code style (first digit not 0)\n if (hasPlus && digits.startsWith('0')) return { phone: true };\n\n // If local, allow leading 0 (e.g. 060...)\n return null;\n };\n}","import { FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { MetaFieldConfig } from '../models/meta-field-config.model';\nimport { buildSyncValidators } from './meta-form-validators.util';\n\n/**\n * Ensures that the FormGroup structure matches the provided metadata (flat field list).\n *\n * Responsibilities:\n * - Create missing FormControls based on MetaFieldConfig\n * - Apply (and re-apply) synchronous validators derived from metadata\n * - Sync disabled/enabled state with metadata\n * - Remove obsolete controls that are no longer present in metadata\n *\n * This function is intentionally idempotent:\n * Calling it multiple times with the same metadata should not break form state.\n */\nexport function ensureControlsV2(\n fb: FormBuilder,\n form: FormGroup,\n flat: MetaFieldConfig[],\n initialValues: any,\n ctx?: { lang?: string }\n): void {\n // Tracks which control keys are allowed by current metadata\n const allowed = new Set<string>();\n\n for (const field of flat) {\n const key = field?.configuration?.key;\n if (!key) continue;\n allowed.add(key);\n\n /**\n * Create control if it does not exist yet.\n * Initial value is taken from initialValues map if provided,\n * otherwise defaults to null.\n */\n if (!form.contains(key)) {\n form.addControl(key, new FormControl(initialValues?.[key] ?? null));\n }\n\n const ctrl = form.get(key);\n if (!ctrl) continue;\n\n /**\n * (1) Sync validators:\n * Rebuild and apply synchronous validators based on current field metadata.\n * This ensures that changes in metadata (e.g. required, min/max, patterns)\n * are reflected on the form control.\n */\n ctrl.setValidators(buildSyncValidators(field, ctx));\n\n // Recalculate validity silently (do not emit events to avoid UI side-effects)\n ctrl.updateValueAndValidity({ emitEvent: false });\n\n /**\n * (2) Sync disabled/enabled state:\n * The control's enabled state must reflect the field metadata.\n * This is symmetric:\n * - If metadata says \"disable\" → disable control\n * - If metadata says \"enable\" → enable control\n */\n const shouldBeDisabled = !!field.disable;\n\n if (shouldBeDisabled && ctrl.enabled) {\n ctrl.disable({ emitEvent: false });\n } else if (!shouldBeDisabled && ctrl.disabled) {\n ctrl.enable({ emitEvent: false });\n }\n }\n\n /**\n * Remove any controls that are present in the FormGroup\n * but no longer exist in the metadata.\n *\n * This keeps the form structure in sync when metadata changes dynamically\n * (e.g. conditional fields, stage-based forms, etc.).\n */\n Object.keys(form.controls).forEach((k) => {\n if (!allowed.has(k)) form.removeControl(k);\n });\n}","import { MetaFieldConfig } from '../models/meta-field-config.model';\nimport { MetaFormControls, MetaFormGroupConfig } from '../models/meta-form-config.model';\n\nexport function isGrouped(input: MetaFormControls): input is MetaFormGroupConfig[] {\n return Array.isArray(input) && !!(input as any[])[0]?.ctrl;\n}\n\nexport function flattenControls(input: MetaFormControls | null | undefined): MetaFieldConfig[] {\n if (!input || !Array.isArray(input)) return [];\n\n if (!isGrouped(input as any)) return input as MetaFieldConfig[];\n\n return (input as any[])\n .flatMap((g: any) => (Array.isArray(g?.ctrl) ? g.ctrl : []))\n .filter((x: any) => !!x?.configuration?.key);\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, AbstractControl } from '@angular/forms';\nimport { AccordionModule } from 'primeng/accordion';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { MetaFormV2Config } from '../../models/meta-form-config.model';\nimport { MetaFormFieldV2Component } from '../meta-form-field-v2/meta-form-field-v2.component';\nimport { MetaFormGroupV2Component } from '../meta-form-group-v2/meta-form-group-v2.component';\n\nimport { MetaSubmitValidatorService } from '../../services/meta-submit-validator.service';\nimport { ensureControlsV2 } from '../../utils/meta-form-builder.util';\nimport { flattenControls } from '../../utils/meta-form-flatten.util';\n\ntype AccordionValue = string | number | string[] | number[] | null | undefined;\n\n@Component({\n selector: 'phoenix-meta-form-v2',\n standalone: true,\n templateUrl: './meta-form-v2.component.html',\n styleUrls: ['./meta-form-v2.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n AccordionModule,\n TranslateModule,\n MetaFormFieldV2Component,\n MetaFormGroupV2Component,\n ],\n})\nexport class MetaFormV2Component implements OnChanges, OnDestroy {\n /** Form instance created/owned by the parent (dialog/page) */\n @Input({ required: true }) form!: FormGroup;\n\n /**\n * V2 metadata/config:\n * - controls (grouped or flat)\n * - initialValues\n * - submitValidators (run on submit only)\n * - setupDependencies (optional runtime bindings)\n */\n @Input({ required: true }) config!: MetaFormV2Config;\n\n /**\n * Page-level readOnly state controlled by parent.\n * Used both for rendering and for \"enter edit mode\" behavior.\n */\n @Input() readOnly = false;\n\n /** Optional layout customization for inner content wrapper */\n @Input() contentStyle: Record<string, any> | null = null;\n\n /** Optional class name(s) applied to inner content wrapper */\n @Input() contentClass: string | null = null;\n\n /** Builds/ensures controls exist (ensures validators & default values are wired) */\n private fb = inject(FormBuilder);\n\n /** Registers and executes submit-only validators (async validation on submit) */\n private submitValidator = inject(MetaSubmitValidatorService);\n\n /** Used for validator localization (lang-dependent validators / messages) */\n private translate = inject(TranslateService);\n\n /**\n * A lightweight signature of the current metadata structure.\n * Used to detect when the form schema changes (and avoid unnecessary resets).\n */\n private lastSignature = '';\n\n /**\n * Cleanup function returned by setupDependencies (if any).\n * Called only when metadata structure changes or on destroy.\n */\n private depCleanup?: () => void;\n\n /**\n * PrimeNG Accordion \"value\" for opened panels.\n * For multiple panels, PrimeNG expects an array of ids.\n */\n expandedGroupIds: string[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.form || !this.config) return;\n\n /**\n * Flatten metadata controls to a single list for:\n * - building/enforcing FormControls\n * - dependency binding\n * - signature calculation\n */\n const flat = flattenControls(this.config.controls);\n\n /**\n * Signature is used to detect real schema changes.\n * We intentionally ignore labels/props and track key+type only.\n */\n const signature = flat.map((f) => `${f.configuration.key}:${f.configuration.type}`).join('|');\n\n /** \"config changed\" includes initialValues, validators, dependencies, etc. */\n const configChanged = !!changes['config'];\n\n /** \"form changed\" means parent passed a different FormGroup instance */\n const formChanged = !!changes['form'];\n\n /** schema changed if the signature differs from the last one */\n const metaChanged = signature !== this.lastSignature;\n\n /**\n * Special case: entering edit mode (readOnly true -> false).\n * Used to selectively show validation for already-filled values.\n */\n const enteringEdit =\n !!changes['readOnly'] &&\n changes['readOnly'].previousValue === true &&\n changes['readOnly'].currentValue === false;\n\n // If nothing relevant changed, exit early to avoid unnecessary work.\n if (!configChanged && !formChanged && !metaChanged && !enteringEdit) return;\n\n /**\n * Dependencies are tied to the metadata structure.\n * If schema changed, cleanup old subscriptions/bindings first.\n */\n if (configChanged || metaChanged) {\n this.depCleanup?.();\n this.depCleanup = undefined;\n }\n\n /**\n * Ensure controls exist on the passed FormGroup and sync validators.\n * This is where missing controls are added and validator wiring is applied.\n */\n const initial = this.config.initialValues ?? {};\n ensureControlsV2(this.fb, this.form, flat, initial, { lang: this.translate.currentLang });\n\n /**\n * Patch initial values without emitting changes:\n * - prevents loops\n * - keeps create/edit initialization silent\n */\n this.form.patchValue(initial, { emitEvent: false });\n this.form.updateValueAndValidity({ emitEvent: false });\n\n /**\n * Initialize accordion open panels ONLY when schema changes.\n * IMPORTANT: do NOT do this on readOnly toggle, otherwise user-collapsed state resets.\n */\n if (metaChanged) {\n if (this.isGrouped) {\n const groups = this.groupedControls ?? [];\n this.expandedGroupIds = groups\n .filter((g: any) => !g?.collapsed)\n .map((g: any) => this.panelValue(g))\n .filter(Boolean);\n } else {\n this.expandedGroupIds = [];\n }\n }\n\n /**\n * Register submit-only validators.\n * Safe to call even if empty; service will attach necessary structures internally.\n */\n this.submitValidator.register(this.form, this.config.submitValidators);\n\n /**\n * Bind dependencies ONLY when schema changes.\n * setupDependencies can subscribe to valueChanges, set options, reset fields, etc.\n * If it returns a function, we store it for cleanup.\n */\n if ((configChanged || metaChanged) && this.config.setupDependencies) {\n const maybeCleanup = this.config.setupDependencies({\n form: this.form,\n flatControls: flat,\n initialValues: initial,\n getControl: (k: string) => this.form.get(k),\n findField: (k: string) => flat.find((f) => f.configuration.key === k) ?? null,\n });\n\n if (typeof maybeCleanup === 'function') this.depCleanup = maybeCleanup;\n }\n\n /**\n * Entering edit mode:\n * - mark controls as touched ONLY if they already have a meaningful value\n * - expand groups that contain \"visible invalid\" controls (invalid + touched/dirty)\n * This prevents CREATE dialogs from showing \"required\" errors immediately.\n */\n if (enteringEdit) {\n queueMicrotask(() => {\n this.touchAndValidateOnlyFilledControls();\n this.expandVisibleInvalidGroupsUnion();\n });\n }\n\n // Store signature for the next change detection pass\n this.lastSignature = signature;\n }\n\n /**\n * PrimeNG Accordion emits value as:\n * - single id (string/number)\n * - array of ids\n * We normalize everything into string[] for stable internal state.\n */\n onAccordionValueChange(v: AccordionValue): void {\n this.expandedGroupIds = this.normalizeAccordionValue(v);\n }\n\n /** Normalizes Accordion value into a stable string[] representation */\n private normalizeAccordionValue(v: AccordionValue): string[] {\n if (Array.isArray(v)) return v.map((x) => `${x}`);\n if (v === null || v === undefined) return [];\n return [`${v}`];\n }\n\n // ---------------- template helpers ----------------\n\n /** True when metadata contains at least one control definition */\n get hasControls(): boolean {\n return Array.isArray(this.config?.controls) && this.config.controls.length > 0;\n }\n\n /**\n * Heuristic: grouped config has \"ctrl\" on first element.\n * (Keeps template simple and avoids extra schema fields.)\n */\n get isGrouped(): boolean {\n const c = (this.config?.controls as any[]) ?? [];\n return !!c[0]?.ctrl;\n }\n\n /** Returns grouped schema structure (accordion groups) */\n get groupedControls(): any[] {\n return (this.config?.controls as any[]) ?? [];\n }\n\n /** Returns flat schema structure (grid mode) */\n get flatControls(): any[] {\n return (this.config?.controls as any[]) ?? [];\n }\n\n /** TrackBy for group rendering */\n groupTrack(g: any, idx: number): any {\n return g?.id ?? idx;\n }\n\n /**\n * PrimeNG accordion panel `value` must match accordion `value` type.\n * We always convert group id to string for consistent behavior.\n */\n panelValue(g: any): string {\n const id = g?.id;\n return id === null || id === undefined ? '' : `${id}`;\n }\n\n // ---------------- core behavior ----------------\n\n /**\n * Marks & validates ONLY controls that already have meaningful values.\n * This is used when switching from readOnly -> edit mode to avoid:\n * - triggering \"required\" errors for empty fields\n * - expanding groups based on empty mandatory fields on CREATE dialogs\n */\n private touchAndValidateOnlyFilledControls(): void {\n const controls = this.form?.controls ?? {};\n for (const [key, ctrl] of Object.entries(controls)) {\n if (!ctrl) continue;\n\n const value = ctrl.value;\n\n // Touch only if this field is already populated (edit case) or prefilled.\n if (this.hasMeaningfulValue(value)) {\n ctrl.markAsTouched();\n ctrl.updateValueAndValidity({ emitEvent: true });\n }\n }\n\n // Optional: keep form status consistent after selective updates\n this.form.updateValueAndValidity({ emitEvent: true });\n }\n\n /**\n * Defines what counts as a \"meaningful\" value:\n * - non-empty strings\n * - numbers / booleans\n * - non-empty arrays\n * - objects with common identifiers (key/uuid/id) or any own keys\n */\n private hasMeaningfulValue(v: any): boolean {\n if (v === null || v === undefined) return false;\n\n if (typeof v === 'string') return v.trim().length > 0;\n if (typeof v === 'number') return true;\n if (typeof v === 'boolean') return true;\n\n if (Array.isArray(v)) return v.length > 0;\n\n if (typeof v === 'object') {\n // Common selection shapes: { key }, { uuid }, { id }, etc.\n if ('key' in v && v.key != null && `${v.key}`.trim() !== '') return true;\n if ('uuid' in v && v.uuid != null && `${v.uuid}`.trim() !== '') return true;\n if ('id' in v && v.id != null && `${v.id}`.trim() !== '') return true;\n\n // Fallback: any own keys\n return Object.keys(v).length > 0;\n }\n\n return false;\n }\n\n /**\n * \"Visible invalid\" means:\n * - invalid\n * - AND user has interacted with it (touched or dirty)\n * This matches typical UI behavior: show errors only after interaction.\n */\n private isVisibleInvalid(ctrl: AbstractControl | null): boolean {\n if (!ctrl) return false;\n return ctrl.invalid && (ctrl.touched || ctrl.dirty);\n }\n\n /**\n * Checks if a group contains at least one visible invalid control.\n * Used to auto-expand groups when entering edit mode.\n */\n private groupHasVisibleInvalid(g: any): boolean {\n const keys = (g?.ctrl ?? [])\n .map((f: any) => f?.configuration?.key)\n .filter(Boolean);\n\n return keys.some((k: string) => this.isVisibleInvalid(this.form.get(k)));\n }\n\n /**\n * Expands all groups that contain visible invalid controls,\n * while preserving any groups already expanded by the user.\n */\n private expandVisibleInvalidGroupsUnion(): void {\n if (!this.isGrouped) return;\n\n const groups = this.groupedControls ?? [];\n const invalidIds = groups\n .filter((g: any) => this.groupHasVisibleInvalid(g))\n .map((g: any) => this.panelValue(g))\n .filter(Boolean);\n\n if (!invalidIds.length) return;\n\n this.expandedGroupIds = Array.from(new Set([...this.expandedGroupIds, ...invalidIds]));\n }\n\n /** Cleanup dependency subscriptions when component is destroyed */\n ngOnDestroy(): void {\n this.depCleanup?.();\n }\n}","<div [formGroup]=\"form\">\n @if (hasControls) {\n\n @if (isGrouped) {\n <p-accordion\n [multiple]=\"true\"\n [value]=\"expandedGroupIds\"\n (valueChange)=\"onAccordionValueChange($event)\"\n >\n @for (g of groupedControls; track groupTrack(g, $index)) {\n <p-accordion-panel [value]=\"panelValue(g)\">\n <p-accordion-header>\n\n <!-- plus/minus toggle icon -->\n <ng-template #toggleicon let-active=\"active\">\n @if (active) {\n <i class=\"pi pi-minus-circle\"></i>\n } @else {\n <i class=\"pi pi-plus-circle\"></i>\n }\n </ng-template>\n\n {{ g?.groupName | translate }}\n </p-accordion-header>\n \n <p-accordion-content>\n <div [ngStyle]=\"contentStyle\" [ngClass]=\"contentClass\">\n <phoenix-meta-form-group-v2 [group]=\"g\" [form]=\"form\" [readOnly]=\"readOnly\"></phoenix-meta-form-group-v2>\n </div>\n </p-accordion-content>\n </p-accordion-panel>\n }\n </p-accordion>\n\n } @else {\n <div class=\"grid\">\n @for (f of flatControls; track f.configuration.key) {\n <div [ngClass]=\"f.style.colWidth ?? 'col-12 md:col-6'\">\n <phoenix-meta-form-field-v2 [field]=\"f\" [form]=\"form\" [readOnly]=\"readOnly\"></phoenix-meta-form-field-v2>\n </div>\n }\n </div>\n }\n\n }\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Output, input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\n\n@Component({\n selector: 'phoenix-meta-form-buttons-v2',\n standalone: true,\n imports: [CommonModule, ButtonModule, TranslateModule, CheckboxModule, FormsModule],\n templateUrl: './meta-form-buttons-v2.component.html',\n styleUrls: ['./meta-form-buttons-v2.component.scss'],\n})\nexport class MetaFormButtonsV2Component {\n /**\n * Disabled state for Save button (usually: form invalid or readOnly or loading)\n */\n isDisabled = input<boolean>(false);\n\n /**\n * Optional feature: \"Create another\" checkbox.\n * If false => checkbox is not rendered.\n */\n isCreateAnother = input<boolean>(false);\n\n /**\n * Loading indicator for Save button.\n */\n isLoading = input<boolean>(false);\n\n /**\n * Emits when user clicks Save.\n * Payload matches existing contract: { isAnother: boolean }\n */\n @Output() handleSave = new EventEmitter<{ isAnother: boolean }>();\n\n /**\n * Emits when user clicks Cancel.\n */\n @Output() handleCancel = new EventEmitter<'CANCEL'>();\n\n /**\n * Local checkbox model (kept only in this component).\n */\n createAnother = false;\n\n onSaveClick(): void {\n this.handleSave.emit({ isAnother: !!this.createAnother });\n }\n\n onCancelClick(): void {\n this.handleCancel.emit('CANCEL');\n }\n}","<div class=\"flex justify-content-end p-2\">\n @if (isCreateAnother()) {\n <p-checkbox\n id=\"dialog-buttons-checkbox\"\n data-cy=\"dialog-buttons-checkbox-cy\"\n [(ngModel)]=\"createAnother\"\n [binary]=\"true\"\n inputId=\"binary\"\n class=\"mr-3\"\n ></p-checkbox>\n }\n\n <button\n class=\"mr-2\"\n pButton\n [disabled]=\"isDisabled()\"\n [loading]=\"isLoading()\"\n (click)=\"onSaveClick()\"\n [attr.data-cy]=\"'submit-button'\"\n >\n <span class=\"mx-1\">{{ 'ACTION.SAVE' | translate }}</span>\n </button>\n\n <p-button\n [text]=\"true\"\n (click)=\"onCancelClick()\"\n [attr.data-cy]=\"'cancel-button'\"\n >\n {{ 'ACTION.CANCEL' | translate }}\n </p-button>\n</div>","/** Public API Surface of phoenix */\nexport * from './lib/components/inner-header/inner-header.component';\nexport * from './lib/components/sidebar/sidebar.component';\nexport * from './lib/components/actions/actions.component';\nexport * from './lib/components/card/card.component';\nexport * from './lib/components/topbar/topbar.component';\nexport * from './lib/components/search-bar/search-bar.component';\nexport * from './lib/components/sidebar-item/sidebar-item.component';\nexport * from './lib/components/user/user.component';\nexport * from './lib/components/status-header/status-header.component';\nexport * from './lib/components/context-object/contex-object.component';\nexport * from './lib/components/shell/shell.component';\nexport * from './lib/components/data-table/table/table.component';\nexport * from './lib/components/meta-form/meta-form.component';\nexport * from './lib/components/meta-form/meta-form-buttons/meta-form-buttons.component';\nexport * from './lib/components/meta-form/meta-form-templates/groups-form/groups-form.component';\nexport * from './lib/components/meta-form/services/meta-form.service';\nexport * from './lib/components/meta-form/meta-form-fields/object-item-dialog/object-item-dialog.component';\n//Status bar\nexport * from './lib/components/quick-pick/quick-pick/quick-pick.component';\nexport * from './lib/components/status-bar/status-bar.component';\nexport * from './lib/components/quick-pick/quick-pick-sidepanel/quick-pick-sidepanel.component';\nexport * from './lib/components/status-bar/models/status-attribute.model';\nexport * from './lib/components/status-bar/enums/status-col-type.enum';\nexport * from './lib/components/status-bar/models/status-bar-configuration.model';\n//model topbar\nexport * from './lib/models/shell-config.model';\nexport * from './lib/models/status.model';\n//data-table utils\nexport * from './lib/components/data-table/utils/dataTable.enum';\nexport * from './lib/components/data-table/utils/dataTable.interface';\n//Context object model\nexport * from './lib/components/context-object/context-object.model';\n//utils\nexport * from './lib/components/meta-form/utils/control-type.enum';\n\n// META FORM V2\nexport * from './lib/components/meta-form-v2/components/meta-form-v2/meta-form-v2.component';\nexport * from './lib/components/meta-form-v2/components/meta-form-field-v2/meta-form-field-v2.component';\nexport * from './lib/components/meta-form-v2/components/meta-form-group-v2/meta-form-group-v2.component';\nexport * from './lib/components/meta-form-v2/components/meta-form-buttons-v2/meta-form-buttons-v2.component';\n\nexport * from './lib/components/meta-form-v2/models/meta-form-config.model';\nexport * from './lib/components/meta-form-v2/models/meta-field-config.model';\nexport * from './lib/components/meta-form-v2/models/meta-submit-validator.model';\n\nexport * from './lib/components/meta-form-v2/services/meta-submit-validator.service';\n\nexport * from './lib/components/meta-form-v2/tokens/meta-form.tokens';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i5","i9","i3","i4","i6","i7","i8","i11","i10","i2.MetaFormService","i1.MetaFormService"],"mappings":"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"}