@fuentis/phoenix-ui 0.0.9-alpha.573 → 0.0.9-alpha.574

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/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\">\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 />}@else { <span>--</span> } }\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-3\">\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 [ngClass]=\"{ 'ml-3': !enableQuickPick && !type }\"\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_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 = 'text' | 'dropdown' | 'multiselect' | 'checkbox' | 'person-dropdown';\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'\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 for (const f of filtersCfg) {\n const t = f.type ?? 'text';\n\n // We DO NOT store null for multiselect (we store []),\n // because null is the common cause of \"everything selected\" / broken filtering.\n const initialValue =\n t === 'multiselect' ? this.normalizeMultiInitial(f.selected) :\n t === 'checkbox' ? !!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 =\n 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 * Emit only meaningful values:\n * - text: '' removed\n * - dropdown: '' / null removed\n * - multiselect: [] removed\n * - checkbox: always included only if true (optional: keep false too if you prefer)\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 === 'multiselect') {\n const arr = Array.isArray(v) ? v.filter((x) => x != null && x !== '') : [];\n if (arr.length) out[key] = arr; // keep array of optionValue(s)\n continue;\n }\n\n if (t === 'checkbox') {\n if (!!v) out[key] = true; // keep only true (fast + clean)\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 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 // allow only known keys\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 // ensure multiselect never becomes null\n for (const f of cfg) {\n if (f.type === '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 }\n if (f.type === 'checkbox') patch[f.key] = !!patch[f.key];\n }\n\n this.filtersForm.patchValue(patch, { emitEvent: false });\n } catch {\n // ignore invalid state\n }\n }\n\n // ---------------------------------------------------------------------------\n // Columns\n // ---------------------------------------------------------------------------\n\n /** Called from listbox selection */\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) => (this.columns ?? []).some((c) => c.field === sc.field));\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 /**\n * Used by badge indicator to show \"filters active\".\n * It checks raw form value, not normalized payload.\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 // Important: multiselect must be [] not null (prevents \"selects everything\" bugs)\n this.filtersForm.get(key)?.setValue([], { emitEvent: true });\n }\n\n resetFilters(): void {\n // Reset form -> then also clear persisted state\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}","<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 @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 @case ('checkbox') {\n <p-checkbox\n binary=\"true\"\n [formControl]=\"$any(filtersForm.get(control.key))\"\n />\n }\n @default {\n <!-- text -->\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 @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 @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 @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 = /[\\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 const locale = options.locale || 'en-US';\n\n // Prepare headers\n const headers = columns.map((c) => sanitizeText(t(c.header)));\n\n // Prepare body rows\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 // make each item its own line; keep items intact (no bullets)\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')); // hard break after commas\n }\n\n const raw = String(\n getDisplayValue(row, col, columnTypeMap, columnTypeEnum, t, locale),\n );\n return sanitizeText(collapseInlineSpaces(raw));\n }),\n );\n\n // Set up pdfmake fonts - pdfmake has built-in support for Unicode characters\n // pdfFonts contains the vfs object directly\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 // Fallback: try to access vfs directly\n (pdfMake as any).vfs = (pdfFonts as any) || {};\n }\n\n // Try to load Noto Sans font which has better emoji support\n // This is optional - if it fails, we'll use Roboto\n try {\n const notoSansFont = await loadNotoSansFont();\n if (notoSansFont) {\n // Add Noto Sans to pdfmake fonts\n if (!(pdfMake as any).fonts) {\n (pdfMake as any).fonts = {};\n }\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 // Add font file to vfs\n (pdfMake as any).vfs['NotoSans-Regular.ttf'] = notoSansFont;\n (pdfMake as any).vfs['NotoSans-Bold.ttf'] = notoSansFont; // Use same font for bold\n }\n } catch (error) {\n console.warn('Failed to load Noto Sans font, using default Roboto:', error);\n }\n\n // Use 'auto' widths for pdfmake - it will automatically fit columns to page width\n // pdfmake works well with Serbian characters and handles auto-sizing better\n const columnWidths = columns.map((col) => {\n const type = columnTypeMap[col.field] || col.columnType;\n if (type === columnTypeEnum.LIST || type === columnTypeEnum.LIST_TAG) {\n return 100; // Fixed width for LIST columns\n }\n return 'auto'; // Auto width for other columns - pdfmake will fit them\n });\n\n // Build table body for pdfmake\n const tableBody = [\n // Header row\n headers.map((header) => ({\n text: header,\n style: 'tableHeader',\n bold: true,\n })),\n // Data rows\n ...bodyRows.map((row) =>\n row.map((cell, cellIdx) => {\n const col = columns[cellIdx];\n const type = columnTypeMap[col?.field] || col?.columnType;\n return {\n text: cell || '',\n style: 'tableCell',\n // Enable text wrapping for all cells\n noWrap: false,\n };\n }),\n ),\n ];\n\n // PDF document definition\n const docDefinition: any = {\n pageOrientation: 'landscape',\n pageSize: 'A4',\n content: [\n {\n table: {\n headerRows: 1,\n widths: columnWidths,\n body: tableBody,\n },\n layout: {\n hLineWidth: () => 0, // Remove horizontal lines between rows\n vLineWidth: () => 0, // Remove vertical lines between columns\n paddingLeft: () => 3,\n paddingRight: () => 3,\n paddingTop: () => 3,\n paddingBottom: () => 3,\n // Alternating row colors: grey, white, grey, white...\n fillColor: (rowIndex: number, node: any, columnIndex: number) => {\n // Header row stays blue RGB(41, 128, 186)\n if (rowIndex === 0) {\n return [41, 128, 186];\n }\n // Data rows alternate: grey for odd rows (1, 3, 5...), white for even rows (2, 4, 6...)\n return (rowIndex - 1) % 2 === 0 ? '#f5f5f5' : null; // grey for odd rows, white (null) for even rows\n },\n },\n },\n ],\n styles: {\n tableHeader: {\n fontSize: 11,\n bold: true,\n color: '#ffffff',\n fillColor: [41, 128, 186], // RGB(41, 128, 186)\n alignment: 'left',\n margin: [0, 5, 0, 5],\n },\n tableCell: {\n fontSize: 9,\n alignment: 'left',\n margin: [0, 5, 0, 5],\n // Enable text wrapping\n noWrap: false,\n },\n },\n defaultStyle: {\n // Use NotoSans if loaded, otherwise fallback to Roboto\n font: (pdfMake as any).fonts?.NotoSans ? 'NotoSans' : 'Roboto',\n // NotoSans has better Unicode and emoji support than Roboto\n },\n pageMargins: [15, 30, 15, 30], // Reduced margins to give more space\n };\n\n // Generate and download PDF\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 { buildFileName, exportRowsToExcel, exportRowsToPdf } from '../utils/table.utils';\nimport { InitialSortMeta, SortOrder, TableAction, TableConfiguration } 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 { key: 'EXPORT_EXCEL', label: 'ACTION.EXPORT_EXCEL', icon: 'pi pi-file-excel' },\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 { this.dt?.scrollToVirtualIndex?.(0); } catch { }\n this.cdr.markForCheck();\n };\n\n this.sortWorker.onerror = (err) => 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) this.columnTypeMap[col.field] = col.columnType;\n\n const nextSelected = this.selectedColumnsInput?.length ? this.selectedColumnsInput : 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(cfg: TableConfiguration | undefined | null): 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) return [s as InitialSortMeta];\n\n // LEGACY fallback\n if (cfg?.initialSortField) {\n return [{\n field: cfg.initialSortField,\n order: (cfg.initialSortOrder ?? 1) as SortOrder,\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 = (this.selectedColumns?.length ? this.selectedColumns : this.columns) ?? [];\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 = (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 => cols.some((c: any) => c?.field === m.field));\n const finalMeta = validMeta.length ? validMeta : [{ 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 { if (this.dt) this.dt.multiSortMeta = finalMeta as any; } 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 ? this.getFilteredData() : 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.split('.').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') return value.toString().toLowerCase().includes(query);\n if (Array.isArray(value)) return value.some((item) => this.matchesQuery(item, query));\n if (typeof value === 'object') 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 (!filterValue || (Array.isArray(filterValue) && filterValue.length === 0)) return true;\n\n const itemValue = this.getNestedValue(item, key);\n\n if (Array.isArray(filterValue)) {\n return filterValue.some((option) => {\n const optionKey = option?.key || option;\n return itemValue?.toString().toLowerCase() === optionKey?.toString().toLowerCase();\n });\n }\n\n const singleFilterValue = filterValue?.key || filterValue;\n return singleFilterValue\n ? itemValue?.toString().toLowerCase() === 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)) 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) 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) 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') 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, { numeric: true, sensitivity: 'base' });\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 =\n 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 =\n 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' ? event.data.canSelect : 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.split('.').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}","<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 // Blocks only specific dangerous characters: < > \" = $ /\n //[<>\"=$/]/ This was before but some catalog name or description contains \"/\"\" so when field is desibled we cannot save form\n const dangerousCharsPattern = /[<>\"=$]/;\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (!value) return null;\n\n return dangerousCharsPattern.test(String(value))\n ? { dangerousChars: true }\n : null;\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';\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 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.type === ControlType.TEXT_AREA\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}\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges, OnDestroy, inject } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\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: [CommonModule],\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 <div *ngIf=\"note\" [@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 <ng-template #warn>\n <small class=\"p-error\">\n <i style=\"font-size: 11px\" class=\"pi pi-exclamation-circle\"></i>\n {{ note }}\n </small>\n </ng-template>\n </div>\n </div>\n `,\n})\nexport class InlineFieldError implements OnDestroy, OnChanges {\n @Input() ctrl!: AbstractControl;\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 };\n }\n // if (control?.status === 'VALID') {\n // return 'ENTRY OK';\n // }\n\n if (control?.errors) {\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\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)=\"onChanged($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 onDateClear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null);\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 ></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 {}","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 <div class=\"flex\">\n <div class=\"flex-grow-1\">\n <p-datepicker\n [attr.data-cy]=\"'start-date-' + control?.id\"\n (onSelect)=\"onStartDateSelect($event)\"\n (onClearClick)=\"onStartDateClear()\"\n [style]=\"{ width: '100%' }\"\n [(ngModel)]=\"startDate\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [showIcon]=\"true\"\n [placeholder]=\"'LABELS.PLANNED_START' | translate\"\n appendTo=\"body\"\n ></p-datepicker>\n </div>\n <div class=\" flex align-items-center p-2 \">\n <i\n class=\"pi pi-arrow-right text-sm\"\n style=\"color: 'var(--surface-600)'\"\n ></i>\n </div>\n <div class=\"flex-grow-1\">\n <p-datepicker\n [attr.data-cy]=\"'due-date-' + control?.id\"\n (onSelect)=\"onEndDateSelect($event)\"\n (onClearClick)=\"onEndDateClear()\"\n [style]=\"{ width: '100%' }\"\n [(ngModel)]=\"endDate\"\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 <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 ctrl: any;\n private readonly dr = inject(DestroyRef);\n startDate?: any;\n endDate?: any;\n public onChanged!: (value: any) => void;\n public onTouched!: () => void;\n\n constructor() {}\n\n ngOnInit() {\n this.ctrl = this.parentForm.get(this.control.configuration.key);\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((r) => {\n this.validateDates();\n });\n\n this.validateDates();\n }\n\n writeValue(obj: any): void {\n if (obj) {\n this.startDate = obj.startDate;\n this.endDate = obj.endDate;\n } else {\n this.startDate = null;\n this.endDate = null;\n }\n }\n\n // Handle start date selection\n onStartDateSelect(event: any) {\n this.startDate = 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 = 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 //Both dates are mandatory\n if (this.control.mandatory && (!this.startDate || !this.endDate)) {\n this.parentForm\n .get(this.control.configuration.key)\n ?.setErrors({ required: true });\n } else {\n this.parentForm.get(this.control.configuration.key)?.setErrors(null);\n }\n\n // End date must be after start date\n if (\n this.startDate &&\n this.endDate &&\n this.startDate.setHours(0, 0, 0, 0) > this.endDate.setHours(0, 0, 0, 0)\n ) {\n this.parentForm\n .get(this.control.configuration.key)\n ?.setErrors({ dueDate: true });\n }\n\n //TBD: Scenario if only one date is mandatory\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';\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 ],\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 </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 {}","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 />\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 [formGroup]=\"metaForm\" (ngSubmit)=\"onSubmit()\">\n <div class=\"grid\">\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\n [select]=\"[control.configuration.key]\"\n ></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>","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 LIST = 'LIST',\n COUNTRY = 'COUNTRY',\n}","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TranslateModule } 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';\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\n statusTooltipType = StatusTooltipType;\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 <i\n [attr.data-cy]=\"'status-togg-button-item'\"\n *ngIf=\"attr?.tooltip?.length\"\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 >\n </i>\n </div>\n\n <!-- VALUE -->\n <div\n *ngIf=\"attr?.value; else empty\"\n [ngSwitch]=\"attr.type\"\n style=\"white-space: nowrap\"\n >\n <!-- STRING -->\n <ng-container *ngSwitchCase=\"'STRING'\">\n <!-- If URL exist, render as link -->\n <a\n *ngIf=\"attr.url; else plainText\"\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 <!-- Pnly text if url doesn't exist -->\n <ng-template #plainText>\n <span [pTooltip]=\"attr.value?.length > 20 ? attr.value : null\">\n {{ attr.value | textLength : 20 }}\n </span>\n </ng-template>\n </ng-container>\n\n <!-- DATE -->\n <span *ngSwitchCase=\"'DATE'\">\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 <!-- LINK -->\n\n <a\n *ngSwitchCase=\"'LINK'\"\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 <!-- PERSON -->\n <div\n class=\"person-wrap flex align-items-center gap-2\"\n *ngSwitchCase=\"'PERSON'\"\n >\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 <!-- COUNTRY -->\n <span *ngSwitchCase=\"'COUNTRY'\">\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]=\"attr.value?.name?.length > 20 ? attr.value?.name : null\"\n >\n {{ attr.value?.name || attr.value?.code || \"--\" }}\n </span>\n </span>\n </span>\n\n <!-- LIST -->\n <ul\n *ngSwitchCase=\"'LIST'\"\n class=\"list overflow-x-hidden\"\n style=\"margin-top: 0.25rem\"\n >\n <li\n *ngFor=\"let item of attr.value\"\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 </ul>\n\n <!-- DEFAULT -->\n <span *ngSwitchDefault [style.color]=\"attr.color\" class=\"text-xl\">\n {{ attr.value || \"--\" }}\n </span>\n </div>\n\n <ng-template #empty>\n <span>--</span>\n </ng-template>\n </div>\n</div>\n\n<p-popover #popover [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\">{{ item.value1 | date : dateFormat }}</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\n<ng-template #empty><span>--</span></ng-template>\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.parseToDate(v?.startDate ?? null);\n this.endDate = 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 = 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 = 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);\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}","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.\n * We keep it strictly boolean to avoid \"true\"/\"false\" string issues.\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 * Note: we intentionally do NOT call onTouched here (our standard is: touched on blur).\n */\n onSwitchChange(next: boolean): void {\n if (this.disabled) return;\n\n const normalized = this.normalizeBool(next);\n\n // prevent redundant emits\n if (normalized === this.value) {\n this.cdr.markForCheck();\n return;\n }\n\n this.value = normalized;\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}","<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 [inputId]=\"key\" [formControlName]=\"key\" [showIcon]=\"true\">\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/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\">\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 />}@else { <span>--</span> } }\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-3\">\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 [ngClass]=\"{ 'ml-3': !enableQuickPick && !type }\"\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_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 = 'text' | 'dropdown' | 'multiselect' | 'checkbox' | 'person-dropdown';\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'\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 for (const f of filtersCfg) {\n const t = f.type ?? 'text';\n\n // We DO NOT store null for multiselect (we store []),\n // because null is the common cause of \"everything selected\" / broken filtering.\n const initialValue =\n t === 'multiselect' ? this.normalizeMultiInitial(f.selected) :\n t === 'checkbox' ? !!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 =\n 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 * Emit only meaningful values:\n * - text: '' removed\n * - dropdown: '' / null removed\n * - multiselect: [] removed\n * - checkbox: always included only if true (optional: keep false too if you prefer)\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 === 'multiselect') {\n const arr = Array.isArray(v) ? v.filter((x) => x != null && x !== '') : [];\n if (arr.length) out[key] = arr; // keep array of optionValue(s)\n continue;\n }\n\n if (t === 'checkbox') {\n if (!!v) out[key] = true; // keep only true (fast + clean)\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 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 // allow only known keys\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 // ensure multiselect never becomes null\n for (const f of cfg) {\n if (f.type === '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 }\n if (f.type === 'checkbox') patch[f.key] = !!patch[f.key];\n }\n\n this.filtersForm.patchValue(patch, { emitEvent: false });\n } catch {\n // ignore invalid state\n }\n }\n\n // ---------------------------------------------------------------------------\n // Columns\n // ---------------------------------------------------------------------------\n\n /** Called from listbox selection */\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) => (this.columns ?? []).some((c) => c.field === sc.field));\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 /**\n * Used by badge indicator to show \"filters active\".\n * It checks raw form value, not normalized payload.\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 // Important: multiselect must be [] not null (prevents \"selects everything\" bugs)\n this.filtersForm.get(key)?.setValue([], { emitEvent: true });\n }\n\n resetFilters(): void {\n // Reset form -> then also clear persisted state\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}","<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 @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 @case ('checkbox') {\n <p-checkbox\n binary=\"true\"\n [formControl]=\"$any(filtersForm.get(control.key))\"\n />\n }\n @default {\n <!-- text -->\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 @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 @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 @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 { buildFileName, exportRowsToExcel, exportRowsToPdf } from '../utils/table.utils';\nimport { InitialSortMeta, SortOrder, TableAction, TableConfiguration } 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 { key: 'EXPORT_EXCEL', label: 'ACTION.EXPORT_EXCEL', icon: 'pi pi-file-excel' },\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 { this.dt?.scrollToVirtualIndex?.(0); } catch { }\n this.cdr.markForCheck();\n };\n\n this.sortWorker.onerror = (err) => 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) this.columnTypeMap[col.field] = col.columnType;\n\n const nextSelected = this.selectedColumnsInput?.length ? this.selectedColumnsInput : 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(cfg: TableConfiguration | undefined | null): 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) return [s as InitialSortMeta];\n\n // LEGACY fallback\n if (cfg?.initialSortField) {\n return [{\n field: cfg.initialSortField,\n order: (cfg.initialSortOrder ?? 1) as SortOrder,\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 = (this.selectedColumns?.length ? this.selectedColumns : this.columns) ?? [];\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 = (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 => cols.some((c: any) => c?.field === m.field));\n const finalMeta = validMeta.length ? validMeta : [{ 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 { if (this.dt) this.dt.multiSortMeta = finalMeta as any; } 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 ? this.getFilteredData() : 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.split('.').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') return value.toString().toLowerCase().includes(query);\n if (Array.isArray(value)) return value.some((item) => this.matchesQuery(item, query));\n if (typeof value === 'object') 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 (!filterValue || (Array.isArray(filterValue) && filterValue.length === 0)) return true;\n\n const itemValue = this.getNestedValue(item, key);\n\n if (Array.isArray(filterValue)) {\n return filterValue.some((option) => {\n const optionKey = option?.key || option;\n return itemValue?.toString().toLowerCase() === optionKey?.toString().toLowerCase();\n });\n }\n\n const singleFilterValue = filterValue?.key || filterValue;\n return singleFilterValue\n ? itemValue?.toString().toLowerCase() === 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)) 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) 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) 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') 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, { numeric: true, sensitivity: 'base' });\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 =\n 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 =\n 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' ? event.data.canSelect : 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.split('.').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}","<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 // Blocks only specific dangerous characters: < > \" = $ /\n //[<>\"=$/]/ This was before but some catalog name or description contains \"/\"\" so when field is desibled we cannot save form\n const dangerousCharsPattern = /[<>\"=$]/;\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (!value) return null;\n\n return dangerousCharsPattern.test(String(value))\n ? { dangerousChars: true }\n : null;\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';\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 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.type === ControlType.TEXT_AREA\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}\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges, OnDestroy, inject } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\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: [CommonModule],\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 <div *ngIf=\"note\" [@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 <ng-template #warn>\n <small class=\"p-error\">\n <i style=\"font-size: 11px\" class=\"pi pi-exclamation-circle\"></i>\n {{ note }}\n </small>\n </ng-template>\n </div>\n </div>\n `,\n})\nexport class InlineFieldError implements OnDestroy, OnChanges {\n @Input() ctrl!: AbstractControl;\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 };\n }\n // if (control?.status === 'VALID') {\n // return 'ENTRY OK';\n // }\n\n if (control?.errors) {\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\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)=\"onChanged($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 onDateClear() {\n this.parentForm.controls[this.control.configuration.key].setValue(null);\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 ></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 {}","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 <div class=\"flex\">\n <div class=\"flex-grow-1\">\n <p-datepicker\n [attr.data-cy]=\"'start-date-' + control?.id\"\n (onSelect)=\"onStartDateSelect($event)\"\n (onClearClick)=\"onStartDateClear()\"\n [style]=\"{ width: '100%' }\"\n [(ngModel)]=\"startDate\"\n [readonlyInput]=\"true\"\n [showButtonBar]=\"true\"\n [showIcon]=\"true\"\n [placeholder]=\"'LABELS.PLANNED_START' | translate\"\n appendTo=\"body\"\n ></p-datepicker>\n </div>\n <div class=\" flex align-items-center p-2 \">\n <i\n class=\"pi pi-arrow-right text-sm\"\n style=\"color: 'var(--surface-600)'\"\n ></i>\n </div>\n <div class=\"flex-grow-1\">\n <p-datepicker\n [attr.data-cy]=\"'due-date-' + control?.id\"\n (onSelect)=\"onEndDateSelect($event)\"\n (onClearClick)=\"onEndDateClear()\"\n [style]=\"{ width: '100%' }\"\n [(ngModel)]=\"endDate\"\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 <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 ctrl: any;\n private readonly dr = inject(DestroyRef);\n startDate?: any;\n endDate?: any;\n public onChanged!: (value: any) => void;\n public onTouched!: () => void;\n\n constructor() {}\n\n ngOnInit() {\n this.ctrl = this.parentForm.get(this.control.configuration.key);\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((r) => {\n this.validateDates();\n });\n\n this.validateDates();\n }\n\n writeValue(obj: any): void {\n if (obj) {\n this.startDate = obj.startDate;\n this.endDate = obj.endDate;\n } else {\n this.startDate = null;\n this.endDate = null;\n }\n }\n\n // Handle start date selection\n onStartDateSelect(event: any) {\n this.startDate = 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 = 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 //Both dates are mandatory\n if (this.control.mandatory && (!this.startDate || !this.endDate)) {\n this.parentForm\n .get(this.control.configuration.key)\n ?.setErrors({ required: true });\n } else {\n this.parentForm.get(this.control.configuration.key)?.setErrors(null);\n }\n\n // End date must be after start date\n if (\n this.startDate &&\n this.endDate &&\n this.startDate.setHours(0, 0, 0, 0) > this.endDate.setHours(0, 0, 0, 0)\n ) {\n this.parentForm\n .get(this.control.configuration.key)\n ?.setErrors({ dueDate: true });\n }\n\n //TBD: Scenario if only one date is mandatory\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';\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 ],\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 </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 {}","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 />\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 [formGroup]=\"metaForm\" (ngSubmit)=\"onSubmit()\">\n <div class=\"grid\">\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\n [select]=\"[control.configuration.key]\"\n ></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>","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 LIST = 'LIST',\n COUNTRY = 'COUNTRY',\n}","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TranslateModule } 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';\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\n statusTooltipType = StatusTooltipType;\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 <i\n [attr.data-cy]=\"'status-togg-button-item'\"\n *ngIf=\"attr?.tooltip?.length\"\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 >\n </i>\n </div>\n\n <!-- VALUE -->\n <div\n *ngIf=\"attr?.value; else empty\"\n [ngSwitch]=\"attr.type\"\n style=\"white-space: nowrap\"\n >\n <!-- STRING -->\n <ng-container *ngSwitchCase=\"'STRING'\">\n <!-- If URL exist, render as link -->\n <a\n *ngIf=\"attr.url; else plainText\"\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 <!-- Pnly text if url doesn't exist -->\n <ng-template #plainText>\n <span [pTooltip]=\"attr.value?.length > 20 ? attr.value : null\">\n {{ attr.value | textLength : 20 }}\n </span>\n </ng-template>\n </ng-container>\n\n <!-- DATE -->\n <span *ngSwitchCase=\"'DATE'\">\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 <!-- LINK -->\n\n <a\n *ngSwitchCase=\"'LINK'\"\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 <!-- PERSON -->\n <div\n class=\"person-wrap flex align-items-center gap-2\"\n *ngSwitchCase=\"'PERSON'\"\n >\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 <!-- COUNTRY -->\n <span *ngSwitchCase=\"'COUNTRY'\">\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]=\"attr.value?.name?.length > 20 ? attr.value?.name : null\"\n >\n {{ attr.value?.name || attr.value?.code || \"--\" }}\n </span>\n </span>\n </span>\n\n <!-- LIST -->\n <ul\n *ngSwitchCase=\"'LIST'\"\n class=\"list overflow-x-hidden\"\n style=\"margin-top: 0.25rem\"\n >\n <li\n *ngFor=\"let item of attr.value\"\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 </ul>\n\n <!-- DEFAULT -->\n <span *ngSwitchDefault [style.color]=\"attr.color\" class=\"text-xl\">\n {{ attr.value || \"--\" }}\n </span>\n </div>\n\n <ng-template #empty>\n <span>--</span>\n </ng-template>\n </div>\n</div>\n\n<p-popover #popover [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\">{{ item.value1 | date : dateFormat }}</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\n<ng-template #empty><span>--</span></ng-template>\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.parseToDate(v?.startDate ?? null);\n this.endDate = 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 = 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 = 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);\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}","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.\n * We keep it strictly boolean to avoid \"true\"/\"false\" string issues.\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 * Note: we intentionally do NOT call onTouched here (our standard is: touched on blur).\n */\n onSwitchChange(next: boolean): void {\n if (this.disabled) return;\n\n const normalized = this.normalizeBool(next);\n\n // prevent redundant emits\n if (normalized === this.value) {\n this.cdr.markForCheck();\n return;\n }\n\n this.value = normalized;\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}","<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 [inputId]=\"key\" [formControlName]=\"key\" [showIcon]=\"true\">\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAaa,oBAAoB,CAAA;IACtB,KAAK,GAAW,EAAE;IAClB,cAAc,GAAW,EAAE;wGAFzB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbjC,2aAcA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJY,YAAY,8BAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAG1B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,2aAAA,EAAA;;sBAIrC;;sBACA;;;ME+JU,oBAAoB,CAAA;AAKX,IAAA,MAAA;AAJX,IAAA,IAAI;IACJ,SAAS,GAAW,EAAE;AACrB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAO;AAE/C,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAA,CAAA,MAAM,GAAN,MAAM;IAAW;IAErC,aAAa,CAAC,MAAW,EAAE,IAAS,EAAA;QAClC,MAAM,CAAC,eAAe,EAAE;QACxB,MAAM,CAAC,cAAc,EAAE;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACrB;AAEA,IAAA,kBAAkB,CAAC,KAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;IAEA,WAAW,CAAC,CAAgB,EAAA,EAAS;wGAjB1B,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5IrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0IT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,w1mqCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApJC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,UAAU,oOACV,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,SAAS,wJACT,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FA8IJ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA5JhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,IAAI,EAAA,aAAA,EAED,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACP,YAAY;wBACZ,YAAY;wBACZ,UAAU;wBACV,gBAAgB;wBAChB,aAAa;wBACb,eAAe;wBACf,UAAU;wBACV,SAAS;wBACT,aAAa;qBACd,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0IT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,w1mqCAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBACA;;;MC1HU,gBAAgB,CAAA;AACjB,IAAA,aAAa,GAAG,IAAI,YAAY,EAAW;AAC3C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAO;IACtC,SAAS,GAAW,EAAE;AAEtB,IAAA,SAAS;AACT,IAAA,UAAU;IAEnB,SAAS,GAAG,KAAK;IACjB,MAAM,GAAG,KAAK;AAEd,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS;IAC/C;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACvB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;QAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACtC;wGA1BW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,sOCvD7B,6qNAuMC,EAAA,MAAA,EAAA,CAAA,mMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5KG,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,YAAY,+QACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,UAAA,EAIH;YACV,OAAO,CAAC,YAAY,EAAE;AACpB,gBAAA,KAAK,CACH,SAAS,EACT,KAAK,CAAC;AACJ,oBAAA,KAAK,EAAE,MAAM;AACd,iBAAA,CAAC,CACH;AACD,gBAAA,KAAK,CACH,SAAS,EACT,KAAK,CAAC;AACJ,oBAAA,KAAK,EAAE,OAAO;AACf,iBAAA,CAAC,CACH;AACD,gBAAA,UAAU,CAAC,qBAAqB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;aAChE,CAAC;AACH,SAAA,EAAA,CAAA;;4FAEU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAhC5B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,YAAY;wBACZ,oBAAoB;wBACpB,YAAY;wBACZ,eAAe;wBACf,eAAe;wBACf,aAAa;qBACd,EAAA,UAAA,EAGW;wBACV,OAAO,CAAC,YAAY,EAAE;AACpB,4BAAA,KAAK,CACH,SAAS,EACT,KAAK,CAAC;AACJ,gCAAA,KAAK,EAAE,MAAM;AACd,6BAAA,CAAC,CACH;AACD,4BAAA,KAAK,CACH,SAAS,EACT,KAAK,CAAC;AACJ,gCAAA,KAAK,EAAE,OAAO;AACf,6BAAA,CAAC,CACH;AACD,4BAAA,UAAU,CAAC,qBAAqB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;yBAChE,CAAC;AACH,qBAAA,EAAA,QAAA,EAAA,6qNAAA,EAAA,MAAA,EAAA,CAAA,mMAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBACA;;sBAEA;;sBACA;;;ME1DU,kBAAkB,CAAA;AACrB,IAAA,gBAAgB,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,4DAAC;AAEzD,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;IAC3C;AAEA,IAAA,aAAa,CAAC,EAAU,EAAA;QACtB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAChD,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;IACpC;AAEA,IAAA,YAAY,CAAC,EAAU,EAAA;QACrB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAChD,QAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;IACpC;AAEA,IAAA,UAAU,CAAC,EAAU,EAAA;QACnB,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC;wGArBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA;;4FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ICOtB;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAHW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;MA0DV,gBAAgB,CAAA;AACpB,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAE7C,IAAA,OAAO;AACN,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AAElD,IAAA,aAAa,CAAC,MAAW,EAAE,MAAc,EAAE,OAAiB,EAAA;QAC1D,MAAM,CAAC,eAAe,EAAE;QACxB,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,MAAM,IAAI,OAAO,EAAE;AACjD,YAAA,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACxB;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B;IACF;wGAbW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnE7B,48EA+DA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDNI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,+BACf,OAAO,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAKE,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAb5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,OAAA,EACd;wBACP,YAAY;wBACZ,YAAY;wBACZ,UAAU;wBACV,aAAa;wBACb,eAAe;wBACf,OAAO;AACR,qBAAA,EAAA,QAAA,EAAA,48EAAA,EAAA;;sBAOA;;sBACA;;;AEvEH,IAAY,WAcX;AAdD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,WAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAdW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;MCkCV,aAAa,CAAA;AACxB,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAK;IAC1B,gBAAgB,GAAG,MAAM,EAA+B;IACxD,UAAU,GAAG,WAAW;IACxB,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAO;IAE1B,mBAAmB,CAAC,GAAQ,EAAE,GAAW,EAAA;AACvC,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC;IACjB;AAEqB,IAAA,MAAM;IAC3B,WAAW,GAAG,KAAK;IAEnB,eAAe,GAAA;AACb,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa;AACrC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY;IAC9D;IAEA,WAAW,CAAC,KAAU,EAAE,UAAmB,EAAA;AACzC,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;SACtB;AAED,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,GAAG,KAAK;YACR,IAAI;SACL;QAED,IAAI,UAAU,EAAE;AACd,YAAA,UAAU,CAAC,QAAQ,GAAG,UAAU;QAClC;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;IACxC;IAEA,sBAAsB,GAAA;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC;AAClC,QAAA,OAAO,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;IACnC;wGAtCW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,ueClC1B,ojDA+CA,EAAA,MAAA,EAAA,CAAA,mNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1BI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,YAAY,8BACZ,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,SAAS,wJACT,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAMJ,aAAa,EAAA,UAAA,EAAA,CAAA;kBAhBzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,OAAA,EACf;wBACP,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,YAAY;wBACZ,UAAU;wBACV,gBAAgB;wBAChB,SAAS;wBACT,aAAa;wBACb,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,ojDAAA,EAAA,MAAA,EAAA,CAAA,mNAAA,CAAA,EAAA;;sBAcA,SAAS;uBAAC,QAAQ;;;MErCR,WAAW,CAAA;AACF,IAAA,IAAA;AAApB,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAe;AAEvC,IAAA,aAAa,CAAI,GAAW,EAAE,MAAc,EAAE,IAAY,EAAA;AACxD,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AACvE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC;IAC5C;IAEA,MAAM,CAAO,GAAW,EAAE,IAAO,EAAA;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,CAAC;IACpC;wGAVW,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCgCY,mBAAmB,CAAA;AACvB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,UAAU;AACV,IAAA,GAAG;AAEH,IAAA,cAAc;AAEd,IAAA,UAAU;AACT,IAAA,aAAa,GAAG,IAAI,YAAY,EAAS;AACzC,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAgB;AACpD,IAAA,mBAAmB,GAAG,IAAI,YAAY,EAG5C;AAEJ,IAAA,QAAQ,CAAC,SAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IACpC;AAEA,IAAA,UAAU,CAAC,IAAkB,EAAA;AAC3B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;IAEA,OAAO,CAAC,KAA0B,EAAE,IAAY,EAAA;AAC9C,QAAA,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE;AACvC,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;AACjC,YAAA,IAAI,EAAE,IAAI;SACX;AACD,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IACrC;wGA/BW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,GAAA,EAAA,KAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtChC,oxHAoGA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzEI,YAAY,mQACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,kWACX,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAKF,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAf/B,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb,aAAa;wBACb,cAAc;wBACd,WAAW;wBACX,WAAW;AACZ,qBAAA,EAAA,QAAA,EAAA,oxHAAA,EAAA;;sBAMA;;sBACA;;sBAEA;;sBAEA;;sBACA;;sBACA;;sBACA;;;AEhDH,IAAY,UAqBX;AArBD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,UAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,UAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,UAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,UAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,UAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,UAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,UAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,UAAA,CAAA,oBAAA,CAAA,GAAA,4BAAiD;AACjD,IAAA,UAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,UAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC3C,IAAA,UAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,UAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,UAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACrD,IAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,UAAA,CAAA,6BAAA,CAAA,GAAA,6BAA2D;AAC3D,IAAA,UAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EArBW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;SCAN,oBAAoB,CAClC,OAAe,EACf,kBAA0B,EAC1B,IAAY,EAAA;AAEZ,IAAA,MAAM,QAAQ,GAAG,sBAAsB,CAAC,kBAAkB,CAAC;AAC3D,IAAA,MAAM,OAAO,GAAG,qBAAqB,CAAC,kBAAkB,CAAC;IAEzD,OAAO,CAAA,EAAG,OAAO,CAAA,eAAA,EAAkB,QAAQ,IAAI,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,QAAA,CAAU;AAC1E;AAEO,MAAM,sBAAsB,GAA2B;;AAE5D,IAAA,aAAa,EAAE,WAAW;AAC1B,IAAA,kBAAkB,EAAE,WAAW;AAC/B,IAAA,kBAAkB,EAAE,WAAW;AAC/B,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,kBAAkB,EAAE,WAAW;AAC/B,IAAA,YAAY,EAAE,WAAW;AACzB,IAAA,UAAU,EAAE,WAAW;;AAGvB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,kBAAkB,EAAE,YAAY;AAChC,IAAA,kBAAkB,EAAE,YAAY;;AAGhC,IAAA,sBAAsB,EAAE,kBAAkB;AAC1C,IAAA,gBAAgB,EAAE,kBAAkB;AACpC,IAAA,WAAW,EAAE,kBAAkB;CAChC;AAEM,MAAM,qBAAqB,GAA2B;;AAE3D,IAAA,aAAa,EAAE,WAAW;AAC1B,IAAA,kBAAkB,EAAE,gBAAgB;AACpC,IAAA,kBAAkB,EAAE,gBAAgB;AACpC,IAAA,WAAW,EAAE,SAAS;AACtB,IAAA,kBAAkB,EAAE,gBAAgB;AACpC,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,UAAU,EAAE,QAAQ;;AAGpB,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,kBAAkB,EAAE,gBAAgB;AACpC,IAAA,kBAAkB,EAAE,gBAAgB;;AAGpC,IAAA,gBAAgB,EAAE,cAAc;AAChC,IAAA,sBAAsB,EAAE,oBAAoB;AAC5C,IAAA,WAAW,EAAE,SAAS;CACvB;;MCoBY,kBAAkB,CAAA;AAgCV,IAAA,SAAA;IA/BF,EAAE,CAAO;AACU,IAAA,GAAG;AAE/B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAEzC,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgB;IAE5B,MAAM,GAAG,KAAK;AAEd,IAAA,YAAY,GAAG,IAAI,OAAO,EAAS;AACnC,IAAA,UAAU;AAEV,IAAA,UAAU;AACV,IAAA,UAAU;IAEV,IAAI,GAAG,EAAE;IACT,QAAQ,GAAG,CAAC;IACZ,KAAK,GAAG,IAAI;AAEZ,IAAA,SAAS;AACT,IAAA,SAAS;IAET,UAAU,GAA+B,EAAE;AAE3C,IAAA,SAAS;AACT,IAAA,mBAAmB;AAEnB,IAAA,cAAc,GAAkB;AAC9B,QAAA,EAAE,KAAK,EAAE,uBAAuB,EAAE,UAAU,EAAE,EAAE,EAAE;KACnD;AAED,IAAA,WAAA,CAAmB,SAA2B,EAAA;QAA3B,IAAA,CAAA,SAAS,GAAT,SAAS;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACnB,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,CAAC,EAAE,KAAI;AACf,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,YAAA,MAAM,MAAM,GAAG,EAAE,EAAE,MAA0B;AAE7C,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,KAAK;YAE9B,IAAI,CAAC,MAAM,EAAE,KAAK;AAAE,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AAEnC,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK;AAE7B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM;AAChD,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;YAEzB,OAAO,IAAI,CAAC;iBACT,aAAa,CAAe,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI;AACxD,iBAAA,IAAI,CACH,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC;AACzC,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;YACjB,CAAC,CAAC,CACH;AACL,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,CAAC,CAAC,GAAG,KAAI;AACjB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,GAAG,CAAC;AAC1B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,GAAG,CAAC;AAC1B,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACzB,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;gBACjB,IAAI,CAAC,UAAU,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;IACN;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;AAEA,IAAA,aAAa,CAAC,KAAY,EAAA;QACxB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;QAC9C,CAAC,EAAE,GAAG,CAAC;IACT;AAEA,IAAA,UAAU,CAAC,EAAU,EAAA;AACnB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACpB,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAElB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;YAC3B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QACzC;IACF;AAEA,IAAA,QAAQ,CAAC,SAAgB,EAAA;AACvB,QAAA,MAAM,EAAE,GAAG,SAAS,CAAC,MAAqB;AAC1C,QAAA,IAAI,CAAC,EAAE;YAAE;AAET,QAAA,IAAI,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,YAAY,EAAE;AACrD,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE;AACpB,gBAAA,IAAI,CAAC,IAAI,IAAI,EAAE;gBACf,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YACzC;QACF;IACF;AAEA,IAAA,eAAe,CAAC,IAAqB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACpB,YAAA,MAAM,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ;AAChC,YAAA,IAAI,GAAG;AAAE,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK;AACvC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,CAAC,IAAmD,EAAA;AACzD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;AAC/C,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;IAEA,UAAU,CAAC,iBAA0B,IAAI,EAAA;QACvC,IAAI,QAAQ,GAAa,EAAE;AAE3B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,gBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAE5C,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AAC1C,gBAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;AACzB,oBAAA,UAAU,CAAC,kBAAkB;AAC7B,oBAAA,UAAU,CAAC,gBAAgB;AAC3B,oBAAA,UAAU,CAAC,qBAAqB;AAChC,oBAAA,UAAU,CAAC,kBAAkB;AAC7B,oBAAA,UAAU,CAAC,qBAAqB;AAChC,oBAAA,UAAU,CAAC,mBAAmB;AAC9B,oBAAA,UAAU,CAAC,iBAAiB;AAC5B,oBAAA,UAAU,CAAC,kBAAkB;AAC7B,oBAAA,UAAU,CAAC,wBAAwB;AACnC,oBAAA,UAAU,CAAC,oBAAoB;AAC/B,oBAAA,UAAU,CAAC,2BAA2B;AACtC,oBAAA,UAAU,CAAC,cAAc;AAC1B,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;QACnC;aAAO;YACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAS,KAClD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CACxC;QACH;AAEA,QAAA,IAAI,cAAc;YAAE,IAAI,CAAC,aAAa,EAAE;IAC1C;IAEA,aAAa,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;QAEjB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE;QACtC,MAAM,IAAI,GAAa,EAAE;QAEzB,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAS,KAAI;AACrC,YAAA,MAAM,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ;YAChC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE;YAEhC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;AACrC,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW;AAC5B,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,KAAK,EAAE,KAAK;AACb,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAChB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,IAAU,EAAA;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO;AACrD,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;YACvB,IAAI,IAAI,EAAE,GAAG;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;YAC9C;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE;AACjB,YAAA,MAAM,GAAG,GAAG,CAAA,qBAAA,EAAwB,IAAI,CAAC,IAAI,UAAU;AACvD,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC5B;aAAO;AACL,YAAA,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,aAAc,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;AAC7B,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;IACzC;wGAlMW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,IAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvE/B,muEAwEY,EAAA,MAAA,EAAA,CAAA,oGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpCR,YAAY,oIACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,mLACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,UAAU,gkBACV,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEb,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,mBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,UAAA,EAIT;YACV,OAAO,CAAC,WAAW,EAAE;AACnB,gBAAA,KAAK,CACH,MAAM,EACN,KAAK,CAAC;AACJ,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,OAAO,EAAE,CAAC;AACX,iBAAA,CAAC,CACH;AACD,gBAAA,KAAK,CACH,QAAQ,EACR,KAAK,CAAC;AACJ,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,OAAO,EAAE,GAAG;AACb,iBAAA,CAAC,CACH;gBACD,UAAU,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;aACrD,CAAC;AACH,SAAA,EAAA,CAAA;;4FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAvC9B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,eAAe;wBAEf,eAAe;wBACf,eAAe;wBACf,eAAe;wBAEf,aAAa;wBACb,UAAU;wBACV,aAAa;wBAEb,mBAAmB;qBACpB,EAAA,UAAA,EAGW;wBACV,OAAO,CAAC,WAAW,EAAE;AACnB,4BAAA,KAAK,CACH,MAAM,EACN,KAAK,CAAC;AACJ,gCAAA,KAAK,EAAE,MAAM;AACb,gCAAA,OAAO,EAAE,CAAC;AACX,6BAAA,CAAC,CACH;AACD,4BAAA,KAAK,CACH,QAAQ,EACR,KAAK,CAAC;AACJ,gCAAA,KAAK,EAAE,MAAM;AACb,gCAAA,OAAO,EAAE,GAAG;AACb,6BAAA,CAAC,CACH;4BACD,UAAU,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;yBACrD,CAAC;AACH,qBAAA,EAAA,QAAA,EAAA,muEAAA,EAAA,MAAA,EAAA,CAAA,oGAAA,CAAA,EAAA;;sBAGA,SAAS;uBAAC,IAAI;;sBACd,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MEkDvB,aAAa,CAAA;AACf,IAAA,IAAI;AACH,IAAA,aAAa,GAAG,IAAI,YAAY,EAAU;wGAFzC,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjHd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0SAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1FS,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,8BAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAkH9C,aAAa,EAAA,UAAA,EAAA,CAAA;kBApHzB,SAAS;+BACE,UAAU,EAAA,OAAA,EACX,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,QAAA,EAChD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyFT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0SAAA,CAAA,EAAA;;sBAyBA;;sBACA;;;MC1CU,eAAe,CAAA;IAC1B,aAAa,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;AAC5C,IAAA,WAAW,GAAW,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAC9C,gBAAgB,GAAY,KAAK;IAExB,OAAO,GAAW,GAAG;AACrB,IAAA,IAAI;IACJ,eAAe,GAAY,MAAM;IACjC,QAAQ,GAAa,KAAK;IAC1B,iBAAiB,GAAU,EAAE;AAC7B,IAAA,gBAAgB;AAChB,IAAA,SAAS;AACT,IAAA,YAAY,GAAuB;AAC1C,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,UAAU,EAAE,sBAAsB;AAClC,QAAA,UAAU,EAAE,OAAO;AACnB,QAAA,QAAQ,EAAE,iCAAiC;QAC3C,aAAa,EACX,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,gCAAgC;KACrE;AAES,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;AAC3C,IAAA,mBAAmB,GAAG,IAAI,YAAY,EAAU;IAC1D,aAAa,CAAC,KAAU,EAAA,EAAG;IAC3B,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgB;IACpC,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;IAC9B;AACQ,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;;IAGnD,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;IAC/B;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;IACtD;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;IAC9B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO;QACrC;IACF;IAEA,gBAAgB,GAAA;AACd,QAAA,MAAM,CAAC,IAAI,CACT,6DAA6D,EAC7D,QAAQ,CACT;IACH;IAEA,eAAe,CAAC,MAAW,EAAE,OAAY,EAAA;QACvC,MAAM,CAAC,eAAe,EAAE;QACxB,MAAM,CAAC,cAAc,EAAE;QAEvB,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC;YAChD;QACF;AACA,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;AAEtC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACzD,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAC5D,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE;AAChB,cAAE,CAAA,IAAA,EAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAA,CAAA;cACzB,gCAAgC;IACtC;wGAhFW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,SAAA,EAFf,CAAC,cAAc,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjF7B,+nVAuUA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxQI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,aAAa,kGACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEb,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,SAAS,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACT,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,WAAW,gWACX,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAMJ,eAAe,EAAA,UAAA,EAAA,CAAA;kBAxB3B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,kBAAkB;wBAClB,aAAa;wBACb,eAAe;wBACf,YAAY;wBACZ,YAAY;wBACZ,MAAM;wBACN,aAAa;wBACb,aAAa;wBACb,YAAY;wBACZ,WAAW;wBACX,SAAS;wBACT,aAAa;wBACb,WAAW;wBACX,aAAa;AACd,qBAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B,CAAC,cAAc,CAAC,EAAA,QAAA,EAAA,+nVAAA,EAAA;;sBAO1B;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBASA;;sBACA;;;MEhGU,kBAAkB,CAAA;AACnB,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AACjC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;AACtC,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;wGAHnC,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECT/B,osBAuBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlBY,YAAY,EAAA,CAAA,EAAA,CAAA;;4FAIX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;+BACE,oBAAoB,EAAA,OAAA,EACrB,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,osBAAA,EAAA;;sBAKtB;;sBACA;;sBACA;;;MEqBU,qBAAqB,CAAA;AACtB,IAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ;AACjD,IAAA,oBAAoB,GAAG,IAAI,YAAY,EAAsB;AAC7D,IAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;AACxC,IAAA,IAAI;AACJ,IAAA,KAAK;IACL,IAAI,GAAW,EAAE;IACjB,KAAK,GAAW,EAAE;AAClB,IAAA,GAAG;IACH,IAAI,GAMR,EAAE;IACE,eAAe,GAAY,KAAK;IAChC,OAAO,GAAU,EAAE;IACnB,UAAU,GAAY,KAAK;IAC3B,WAAW,GAAY,IAAI;AAEpC,IAAA,eAAe,GAAa;QAC1B,SAAS;QACT,MAAM;QACN,MAAM;QACN,QAAQ;QACR,MAAM;QACN,SAAS;QACT,WAAW;QACX,UAAU;KACX;AAED,IAAA,aAAa,CAAC,SAA6B,EAAA;AACzC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;IAC3C;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;IACpC;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;wGA1CW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,4aCjClC,8hEA0EA,EAAA,MAAA,EAAA,CAAA,miBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtDI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,8BACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,kBAAkB,+GAClB,SAAS,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAMA,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAjBjC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,YAAY;wBACZ,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,gBAAgB;wBAChB,kBAAkB;wBAClB,SAAS;qBACV,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8hEAAA,EAAA,MAAA,EAAA,CAAA,miBAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAOA;;sBACA;;sBACA;;sBACA;;;IElDS;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,iBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC7B,CAAC,EAPW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;;MCShB,YAAY,CAAA;AACd,IAAA,GAAG;AACH,IAAA,OAAO;AACP,IAAA,WAAW;AAEpB,IAAA,KAAK;AACL,IAAA,WAAW;IAMX,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,GAAG;gBACjB,kBAAkB,EAAE,IAAI,CAAC,WAAW;gBACpC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AACxC,gBAAA,KAAK,EAAE,OAAO;;aAEf;QACH;IACF;AAEA,IAAA,SAAS,CAAC,GAAW,EAAA;QACnB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC1B,YAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACpB;AAEA,QAAA,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC;YAC5D,OAAO,GAAG,GAAG,GAAG;QAClB;AAEA,QAAA,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE;QACvB,MAAM,QAAQ,GAAQ,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,IAAI,SAAS,GAAG,EAAE;QAClB,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;AACxC,QAAA,MAAM,UAAU,GAAQ;AACtB,YAAA,CAAC,EAAE,GAAG;AACN,YAAA,CAAC,EAAE,GAAG;AACN,YAAA,CAAC,EAAE,GAAG;AACN,YAAA,CAAC,EAAE,GAAG;AACN,YAAA,CAAC,EAAE,GAAG;AACN,YAAA,CAAC,EAAE,GAAG;SACP;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC/B,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrC;iBAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;gBAClC,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtC;iBAAO;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC;gBACrE,OAAO,GAAG,GAAG,GAAG;YAClB;QACF;QAEA,OAAO,GAAG,GAAG,SAAS;IACxB;wGA1DW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXzB,iOAOA,EAAA,MAAA,EAAA,CAAA,uxEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDAY,YAAY,qHAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAI5B,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,uxEAAA,CAAA,EAAA;;sBAKvC;;sBACA;;sBACA;;;ME2BU,qBAAqB,CAAA;AACvB,IAAA,MAAM;IACN,UAAU,GAAG,oBAAoB;IACjC,cAAc,GAAG,YAAY;AAEtC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAEvB,iBAAiB,GAAG,iBAAiB;AAErC,IAAA,eAAe,GAAa;QAC1B,SAAS;QACT,MAAM;QACN,MAAM;QACN,QAAQ;QACR,MAAM;QACN,SAAS;QACT,WAAW;QACX,UAAU;KACX;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;IAChC;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;IAChC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;IACjC;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;IAChC;AAEA;;;;AAIG;AACH,IAAA,IAAI,WAAW,GAAA;AAKb,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;QACzB,MAAM,MAAM,GAIN,EAAE;AACR,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU;AAEpC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;;AAEd,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;YAC7D;iBAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;;AAErC,gBAAA,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG;AACH,oBAAA,WAAW,EAAE,UAAU;AACvB,oBAAA,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;AACtC,iBAAA,CAAC;YACJ;;QAEF;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE;IAClC;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE;IACrC;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE;IACrC;AAEwB,IAAA,WAAW;IAEnC,iBAAiB,CAAC,KAAY,EAAE,cAAuB,EAAA;QACrD,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,KAAI;YAC9B,IAAI,CAAC,KAAK,cAAc;gBAAE,CAAC,CAAC,IAAI,EAAE;AACpC,QAAA,CAAC,CAAC;AACF,QAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;IAEA,iBAAiB,CAAC,KAAY,EAAE,cAAuB,EAAA;QACrD,cAAc,CAAC,IAAI,EAAE;IACvB;IAEA,WAAW,GAAA;AACT,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY;AAC/B,QAAA,IAAI,KAAK,EAAE,MAAM,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC7B;IACF;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI;QACxC,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACvC;wGA5GW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,qQCzClC,4vSA+PA,EAAA,MAAA,EAAA,CAAA,iuCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnOI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,kYACb,SAAS,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,GAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACT,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,0UACb,YAAY,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAMH,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAjBjC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb,SAAS;wBACT,YAAY;wBACZ,aAAa;wBACb,YAAY;qBACb,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4vSAAA,EAAA,MAAA,EAAA,CAAA,iuCAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBAkFA,YAAY;uBAAC,QAAQ;;;MElGX,cAAc,CAAA;AAChB,IAAA,MAAM;AAkBN,IAAA,gBAAgB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;AACnC,IAAA,KAAK,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE;AACrC,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAO;AAC1C,IAAA,cAAc,GAAG,IAAI,YAAY,EAAO;AACxC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AACzC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAO;AACrC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAc;AAEtD,IAAA,MAAM;IAEG,mBAAmB,GAAG,UAAU;;AAGzC,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,GAAG,iBAAiB,GAAG,YAAY;IAClF;AAEA,IAAA,aAAa,CAAC,MAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACvC;AAEA,IAAA,aAAa,CAAC,IAAwB,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI;QACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;IAEA,cAAc,GAAA;QACZ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACnD;wGAhDW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5B3B,8iDAiDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7BI,gBAAgB,qJAChB,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,qBAAqB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAKZ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAX1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,OAAA,EACZ;wBACP,gBAAgB;wBAChB,eAAe;wBACf,YAAY;wBACZ,qBAAqB;qBACtB,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,8iDAAA,EAAA;;sBAGpC;;sBAkBA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;SErDa,gBAAgB,CAAC,YAAoB,EAAE,OAAe,IAAI,EAAA;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAClE,YAAY,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAEvC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7D,YAAY,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAEnC,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACzD,IAAA,YAAY,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;AAE9B,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IAEtD,IAAI,MAAM,GAAG,EAAE;IAEf,QAAQ,IAAI;AACV,QAAA,KAAK,IAAI;YACP,IAAI,KAAK,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;YACrC,IAAI,IAAI,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI;YACnC,IAAI,KAAK,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;YACrC,IAAI,OAAO,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,OAAO,CAAA,CAAA,CAAG;YACxC;AAEF,QAAA,KAAK,IAAI;YACP,IAAI,KAAK,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;YACrC,IAAI,IAAI,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI;YACnC,IAAI,KAAK,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;YACrC,IAAI,OAAO,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,OAAO,CAAA,CAAA,CAAG;YACxC;AAEF,QAAA;YACE,IAAI,KAAK,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;YACrC,IAAI,IAAI,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI;YACnC,IAAI,KAAK,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;YACrC,IAAI,OAAO,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,CAAA,EAAG,OAAO,CAAA,CAAA,CAAG;YACxC;;AAGJ,IAAA,OAAO,MAAM,CAAC,IAAI,EAAE;AACtB;;MChCW,cAAc,CAAA;AACzB,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,OAAO,gBAAgB,CAAC,KAAK,CAAC;IAChC;wGAHW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCFY,YAAY,CAAA;AACvB,IAAA,SAAS,CAAC,IAAY,EAAA;AACpB,QAAA,QACE;cACI,KAAK,CAAC,GAAG;AACV,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAC1C,aAAA,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;IAErB;wGARW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,IAAI;mBAAC,EAAE,IAAI,EAAE,UAAU,EAAE;;;ICFd;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,aAAuB;AACvB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAW;;AAEX,IAAA,eAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC3C,IAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,eAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACvD,CAAC,EA9BW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;IAgCf;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,iBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC/B,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;IAOjB;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACb,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;IAOlB;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,eAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,eAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAjBW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;IAmBf;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACzB,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;IAKlB;AAAZ,CAAA,UAAY,eAAe,EAAA;;;AAGzB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;;AAEb,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,eAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;;AAE7B,CAAC,EATW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;;ACpC3B,IAAK,GAuBJ;AAvBD,CAAA,UAAK,GAAG,EAAA;AACN,IAAA,GAAA,CAAA,QAAA,CAAA,GAAA,mBAA4B;AAC5B,IAAA,GAAA,CAAA,QAAA,CAAA,GAAA,YAAqB;AACrB,IAAA,GAAA,CAAA,kBAAA,CAAA,GAAA,qBAAwC;AACxC,IAAA,GAAA,CAAA,WAAA,CAAA,GAAA,cAA0B;AAC1B,IAAA,GAAA,CAAA,MAAA,CAAA,GAAA,cAAqB;AACrB,IAAA,GAAA,CAAA,QAAA,CAAA,GAAA,aAAsB;AACtB,IAAA,GAAA,CAAA,QAAA,CAAA,GAAA,iBAA0B;AAC1B,IAAA,GAAA,CAAA,OAAA,CAAA,GAAA,oBAA4B;AAC5B,IAAA,GAAA,CAAA,iBAAA,CAAA,GAAA,qBAAuC;AACvC,IAAA,GAAA,CAAA,UAAA,CAAA,GAAA,YAAuB;AACvB,IAAA,GAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,GAAA,CAAA,QAAA,CAAA,GAAA,aAAsB;AACtB,IAAA,GAAA,CAAA,MAAA,CAAA,GAAA,YAAmB;AACnB,IAAA,GAAA,CAAA,MAAA,CAAA,GAAA,kBAAyB;AACzB,IAAA,GAAA,CAAA,MAAA,CAAA,GAAA,kBAAyB;AACzB,IAAA,GAAA,CAAA,UAAA,CAAA,GAAA,eAA0B;AAC1B,IAAA,GAAA,CAAA,aAAA,CAAA,GAAA,eAA6B;AAC7B,IAAA,GAAA,CAAA,UAAA,CAAA,GAAA,gBAA2B;AAC3B,IAAA,GAAA,CAAA,QAAA,CAAA,GAAA,iBAA0B;AAC1B,IAAA,GAAA,CAAA,SAAA,CAAA,GAAA,mBAA6B;AAC7B,IAAA,GAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,GAAA,CAAA,KAAA,CAAA,GAAA,YAAkB;AACpB,CAAC,EAvBI,GAAG,KAAH,GAAG,GAAA,EAAA,CAAA,CAAA;AAuCR;AACA;AACA;AAEA;AACA;MACa,+BAA+B,CAAA;AACf,IAAA,YAAY;AAC9B,IAAA,OAAO;;AAGN,IAAA,WAAW,GAAG,IAAI,YAAY,EAAO;AAE/C,IAAA,IAAI;AACJ,IAAA,QAAQ;AACR,IAAA,SAAS;IAET,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAwB,CAAC;;QAG3D,IAAI,CAAC,SAAS,GAAG;AACf,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AAC9B,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU;AAClC,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AAC9B,YAAA,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC;AACrC,kBAAE,IAAI,CAAC,YAAY,CAAC;AACpB,kBAAE,KAAK;SACV;AACD,QAAA,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO;YAC/B,KAAK,kBAAkB,CAAC,MAAM;;gBAG5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;gBAC1C;YACF,KAAK,kBAAkB,CAAC,IAAI;AAC1B,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI;AAC9B,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM;;gBAE7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;;gBAG1C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,eAAe,CAAC,MAAM,EAAE;AACrD,oBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,MAAM;gBAClC;gBAEA;YACF,KAAK,kBAAkB,CAAC,GAAG;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE;;;gBAGzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;AAC1C,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB;gBACF;AACA,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE;AAChE,oBAAA,IAAI,CAAC,QAAQ;wBACX,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,SAAS;4BACjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI;8BACpC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI;8BACpC,KAAK;gBACb;;AAEA,gBAAA,IACE,IAAI,CAAC,OAAO,EAAE,QAAQ;oBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,eAAe,CAAC,MAAM,EACjD;AACA,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACtB;;AAEA,gBAAA,IACE,IAAI,CAAC,OAAO,EAAE,YAAY,KAAK,QAAQ;oBACvC,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,eAAe,CAAC,eAAe,EAC1D;AACA,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACtB;gBAEA;;IAEN;AAEA,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1D;wGAjFW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/E5C,0iCAiCA,EAAA,MAAA,EAAA,CAAA,2OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED8BI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAYJ,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBApB3C,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,0iCAAA,EAAA,MAAA,EAAA,CAAA,2OAAA,CAAA,EAAA;;sBAYA,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB;;sBAGA;;;MEpDU,6BAA6B,CAAA;AACb,IAAA,OAAO;AACxB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAO;AAEvC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,KAAK;IAEG,mBAAmB,GAAA;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;AAChC,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACxD,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAEzD,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,WAAW,CAAC;AAC/D,YAAA,QAAQ,KAAK,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG;QAC3C;AACA,QAAA,OAAO,EAAE;IACX;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACvE,YAAA,IAAI,KAAK,YAAY,aAAa,EAAE;AAClC,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACzC;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE;QACzC;IACF;AAEA,IAAA,aAAa,CAAC,KAAU,EAAA;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,KAAK,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACxC;wGArCW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChC1C,iiBAuBA,EAAA,MAAA,EAAA,CAAA,oKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDAI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAKF,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAbzC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,kBAAkB;wBAClB,WAAW;wBACX,eAAe;wBACf,WAAW;AACZ,qBAAA,EAAA,QAAA,EAAA,iiBAAA,EAAA,MAAA,EAAA,CAAA,oKAAA,CAAA,EAAA;;sBAKA,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB;;;ME5BU,cAAc,CAAA;IACzB,SAAS,CAAC,IAAS,EAAE,eAAsB,EAAA;AACzC,QAAA,OAAO,eAAe,CAAC,IAAI,CACzB,YAAY,IAAI,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CACjD;IACH;wGALW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;MCoFY,qBAAqB,CAAA;AACH,IAAA,cAAc;AACd,IAAA,cAAc;;AAGlC,IAAA,kBAAkB;;IAGlB,OAAO,GAAkB,EAAE;;IAG3B,aAAa,GAAU,EAAE;AAElC;;;;AAIG;IACM,OAAO,GAAoB,EAAE;;AAG5B,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAuB;;AAG3D,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAY;;AAGhD,IAAA,YAAY,GAAG,IAAI,YAAY,EAAU;;AAGzC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAO;AAEvC,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;;IAGpC,WAAW,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;;IAG1C,gBAAgB,GAAkB,EAAE;AAEpC,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC;IAC7E;;IAGQ,UAAU,GAAG,EAAE;IACf,UAAU,GAAG,EAAE;AAEvB;;;;;AAKG;IACK,aAAa,GAAG,EAAE;AAE1B,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE;AAE9B,QAAA,IAAI,CAAC,UAAU,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,OAAO,CAAA,CAAE;AACrE,QAAA,IAAI,CAAC,UAAU,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,OAAO,CAAA,CAAE;;QAGrE,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;;AAG3E,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE;YACvC,IAAI,CAAC,kBAAkB,EAAE;QAC3B;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACzC;;QAGA,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;AAE7D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,CAAC;AACrF,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,EAAE;AACpC,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC;QAC1C;IACF;;;;AAMA;;;AAGG;AACK,IAAA,gBAAgB,CAAC,UAA2B,EAAA;QAClD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5B,QAAA,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;AAC1B,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM;;;AAI1B,YAAA,MAAM,YAAY,GAChB,CAAC,KAAK,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC5D,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ;AAC/B,oBAAA,CAAC,CAAC,QAAQ,IAAI,EAAE;AAElB,YAAA,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACrD;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;;AAGrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;;QAGnC,IAAI,CAAC,WAAW,CAAC;AACd,aAAA,IAAI,CACH,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAC3B,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAE7D,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;AAC7C,QAAA,CAAC,CAAC;;QAGJ,cAAc,CAAC,MAAK;YAClB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,UAAU,CAAC;AAC9D,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;AAC7C,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;AAKG;AACK,IAAA,gBAAgB,CAAC,OAAwB,EAAA;AAC/C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE;AAEjD,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACnB,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;;;;AAKnE,YAAA,MAAM,IAAI,GACR,CAAC,CAAC,IAAI,KAAK,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;YAE9C,OAAO;AACL,gBAAA,GAAG,CAAC;gBACJ,IAAI;AACJ,gBAAA,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,OAAO;AACrC,gBAAA,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,KAAK;aACpC;AACH,QAAA,CAAC,CAAC;IACJ;IAEQ,cAAc,CAAC,QAAa,EAAE,UAA2B,EAAA;QAC/D,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3D,QAAA,OAAO,GAAG,QAAQ,IAAI,OAAO,CAAA,EAAA,EAAK,IAAI,EAAE;IAC1C;AAEQ,IAAA,qBAAqB,CAAC,QAAa,EAAA;QACzC,IAAI,QAAQ,IAAI,IAAI;AAAE,YAAA,OAAO,EAAE;AAC/B,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;IACxD;AAEA;;;;;;AAMG;IACK,wBAAwB,CAAC,GAAQ,EAAE,GAAoB,EAAA;QAC7D,MAAM,GAAG,GAAwB,EAAE;QACnC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAElD,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;YACxC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACzB,YAAA,IAAI,CAAC,CAAC;gBAAE;AAER,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM;AAC1B,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AAElB,YAAA,IAAI,CAAC,KAAK,aAAa,EAAE;AACvB,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE;gBAC1E,IAAI,GAAG,CAAC,MAAM;AAAE,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBAC/B;YACF;AAEA,YAAA,IAAI,CAAC,KAAK,UAAU,EAAE;gBACpB,IAAI,CAAC,CAAC,CAAC;AAAE,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACzB;YACF;;AAGA,YAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QACzC;AAEA,QAAA,OAAO,GAAG;IACZ;AAEA;;;AAGG;AACK,IAAA,kBAAkB,CAAC,GAAoB,EAAA;QAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AACpD,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACjC,YAAA,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE;;AAG3C,YAAA,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAQ,EAAE;YACrB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACnC,gBAAA,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YACxC;;AAGA,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE;oBAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;oBACxB,IAAI,GAAG,IAAI,IAAI;AAAE,wBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AAC7B,yBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;wBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;gBACpD;AACA,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;AAAE,oBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1D;AAEA,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC1D;AAAE,QAAA,MAAM;;QAER;IACF;;;;;AAOA,IAAA,uBAAuB,CAAC,YAA2B,EAAA;AACjD,QAAA,IAAI,CAAC,eAAe,GAAG,YAAY;QACnC,IAAI,CAAC,YAAY,EAAE;IACrB;;AAGA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;IAC9B;IACA,IAAI,eAAe,CAAC,GAAkB,EAAA;QACpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjF;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC;IAC3D;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,EAAE;IACrB;AAEQ,IAAA,WAAW,CAAC,IAAmB,EAAA;QACrC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/D;IAEQ,kBAAkB,GAAA;QACxB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACvC;QACF;AAEA,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC1B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBACvC;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAO,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;AAChG,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBACvC;YACF;AAEA,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACzC;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACzC;IACF;;;;AAMA,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IACrC;AAEA,IAAA,iBAAiB,CAAC,aAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;IACtC;;;;AAMA;;;AAGG;IACH,aAAa,GAAA;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;AACvC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;AACjC,YAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,gBAAA,OAAO,KAAK;AACvC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;YACzC,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;AAC3D,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,iBAAiB,CAAC,GAAW,EAAA;;AAE3B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC9D;IAEA,YAAY,GAAA;;AAEV,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC/C,QAAA,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,QAAA,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE;IAC7B;IAEQ,YAAY,CAAC,KAAU,EAAE,GAAW,EAAA;AAC1C,QAAA,MAAM,OAAO,GACX,KAAK,IAAI,IAAI;AACb,aAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;aAC3C,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAEzF,QAAA,IAAI,OAAO;AAAE,YAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;;AACpC,YAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvD;wGA/VW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,wkBCzFlC,ghQAiOY,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/JR,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,0/BACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,WAAW,63BACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,2gCACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,eAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,gBAAgB,uJAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,+BAA+B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC/B,6BAA6B,6KAC7B,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,CAAA;;4FAKL,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA3BjC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,aAAa;wBACb,YAAY;wBACZ,YAAY;wBACZ,iBAAiB;wBACjB,eAAe;wBACf,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,eAAe;wBACf,aAAa;wBACb,cAAc;wBACd,kBAAkB;wBAClB,YAAY;wBACZ,gBAAgB;wBAChB,eAAe;wBACf,+BAA+B;wBAC/B,6BAA6B;wBAC7B,cAAc;AACf,qBAAA,EAAA,QAAA,EAAA,ghQAAA,EAAA;;sBAKA,SAAS;uBAAC,gBAAgB;;sBAC1B,SAAS;uBAAC,gBAAgB;;sBAG1B;;sBAGA;;sBAGA;;sBAOA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;;MEhHU,aAAa,CAAA;AACxB,IAAA,SAAS,CAAC,KAAgC,EAAA;AACxC,QAAA,OAAO,OAAO,KAAK,KAAK,SAAS;IACnC;wGAHW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,KAAK;AACZ,iBAAA;;;MCEY,aAAa,CAAA;AACJ,IAAA,QAAA;AAApB,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAa;AAEzC,IAAA,SAAS,CAAC,GAAQ,EAAE,GAAQ,EAAE,aAAqB,YAAY,EAAA;AAC7D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;AACjD,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;AAEvB,QAAA,QAAQ,GAAG,CAAC,UAAU;AACpB,YAAA,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC;AAEnD,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC;AAEhE,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,KAAK;AAEd,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK;AAE/D,YAAA;AACE,gBAAA,OAAO,KAAK,EAAE,QAAQ,EAAE;;IAE9B;IAEA,cAAc,CAAC,GAAQ,EAAE,IAAY,EAAA;AACnC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;AAE5B,QAAA,IAAI,KAAU;QAEd,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACvB,YAAA,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;QACnB;aAAO;YACL,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;QACjE;AAEA,QAAA,OAAO,KAAK,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC9C;wGArCW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAT,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,KAAK;AACZ,iBAAA;;;ACSD;AAEA;;;AAGG;AACH,SAAS,cAAc,CAAC,GAAQ,EAAE,IAAY,EAAA;AAC5C,IAAA,IAAI;AACF,QAAA,IAAI,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;YAC1D,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;QACpC;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAC5B,IAAI,OAAO,GAAG,GAAG;AACjB,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,GAAG,IAAI,OAAO,EAAE;AAC5D,gBAAA,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;YACxB;iBAAO;AACL,gBAAA,OAAO,SAAS;YAClB;QACF;AACA,QAAA,OAAO,OAAO,EAAE,GAAG,IAAI,OAAO;IAChC;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,SAAS;IAClB;AACF;AAEA;;;;;;AAMG;AACH,SAAS,YAAY,CAAC,CAAM,EAAA;IAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE;IAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;;;IAIxC,MAAM,UAAU,GACd,kHAAkH;IACpH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;AAE9C,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,SAAS,EAAE,GAAG;AACtB,SAAA,OAAO,CAAC,SAAS,EAAE,GAAG;SACtB,SAAS,CAAC,MAAM;AAChB,SAAA,IAAI,EAAE;AACX;AAEA;;AAEG;AACH,SAAS,cAAc,CAAC,KAAa,EAAE,SAAiB,EAAA;AACtD,IAAA,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,CAAA,MAAA,EAAS,SAAS,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA,CAAA,CAAG,CAAC;AACrE,IAAA,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B;AAEA;;AAEG;AACH,SAAS,eAAe,CAAC,GAAQ,EAAE,OAAe,EAAE,MAAc,EAAA;AAChE,IAAA,IAAI;AACF,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE;YACvB,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC;YAC1C,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE;QACvC;IACF;IAAE,MAAM,EAAC;AACT,IAAA,OAAO,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;AAC1B;AAEA;AAEA;;;AAGG;AACH,SAAS,eAAe,CACtB,GAAQ,EACR,GAAiB,EACjB,aAAqC,EACrC,cAAmB,EACnB,CAAyB,EACzB,SAAiB,OAAO,EAAA;AAExB,IAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK;IACvB,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU;IACnD,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC;AAEtC,IAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;AAAE,QAAA,OAAO,EAAE;IAEhD,QAAQ,IAAI;QACV,KAAK,cAAc,CAAC,IAAI;YACtB,OAAO,eAAe,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,CAAC;QAEzD,KAAK,cAAc,CAAC,iBAAiB;YACnC,OAAO,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC;QAEnD,KAAK,cAAc,CAAC,GAAG;YACrB,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,GAAG,GAAG,QAAQ,EAAE;QAEvC,KAAK,cAAc,CAAC,QAAQ;QAC5B,KAAK,cAAc,CAAC,IAAI;AACtB,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG;kBACpB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;AAC7C,kBAAE,MAAM,CAAC,GAAG,CAAC;QAEjB,KAAK,cAAc,CAAC,OAAO;YACzB,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE;AAExC,QAAA,KAAK,cAAc,CAAC,OAAO,EAAE;;AAE3B,YAAA,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,KAAK;AACvC,YAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,IAAI;AACpC,YAAA,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;QAClD;QAEA,KAAK,cAAc,CAAC,SAAS;QAC7B,KAAK,cAAc,CAAC,IAAI;QACxB,KAAK,cAAc,CAAC,UAAU;AAC9B,QAAA;AACE,YAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAClD,gBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE;AAClE,gBAAA,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACtD;AACA,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC;;AAExB;AAWA,SAAS,mBAAmB,CAAC,CAAS,EAAA;AACpC,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;AACvB,SAAA,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;AACvB,SAAA,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AACnC;AAEA,SAAS,oBAAoB,CAAC,CAAS,EAAA;AACrC,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,EAAE;AACjB,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,SAAS,EAAE,GAAG;AACtB,SAAA,OAAO,CAAC,aAAa,EAAE,GAAG;AAC1B,SAAA,IAAI,EAAE;AACX;AAEA;;AAEG;AACH,eAAe,gBAAgB,GAAA;AAC7B,IAAA,IAAI;;;AAGF,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,iFAAiF,CAClF;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE;AAChD,QAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;QACzC,IAAI,MAAM,GAAG,EAAE;QACf,MAAM,SAAS,GAAG,IAAI;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE;AAChD,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;AAC9C,YAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC;AAC9D,QAAA,OAAO,IAAI;IACb;AACF;AAEA;;;;;;AAMG;AACI,eAAe,eAAe,CACnC,OAAuB,EACvB,IAAW,EACX,aAAqC,EACrC,cAAmB,EACnB,CAA0B,EAC1B,QAAQ,GAAG,WAAW,EACtB,UAAyB,EAAE,EAAA;IAE3B,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE;AAEtB,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO;AAExC;;AAE4B;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE7D;;AAE4B;IAC5B,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,KACpC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAClB,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU;AAEvD,QAAA,IAAI,IAAI,KAAK,cAAc,CAAC,IAAI,IAAI,IAAI,KAAK,cAAc,CAAC,QAAQ,EAAE;YACpE,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;AAC7C,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM;AAChC,kBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC;kBACnC,MAAM,CACJ,eAAe,CACb,GAAG,EACH,GAAG,EACH,aAAa,EACb,cAAc,EACd,CAAC,EACD,MAAM,CACP,CACF,CAAC,KAAK,CAAC,MAAM,CAAC;YAEnB,MAAM,OAAO,GAAG;AACb,iBAAA,GAAG,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;iBAC5C,MAAM,CAAC,OAAO,CAAC;YAElB,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C;AAEA,QAAA,MAAM,GAAG,GAAG,MAAM,CAChB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,CAAC,CACpE;AAED,QAAA,OAAO,YAAY,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC,CAAC,CACH;AAED;;AAE4B;AAC5B,IAAA,IAAI,QAAQ,IAAK,QAAgB,CAAC,OAAO,EAAE;QACxC,OAAe,CAAC,GAAG,GAAI,QAAgB,CAAC,OAAO,CAAC,GAAG;IACtD;AAAO,SAAA,IAAI,QAAQ,IAAK,QAAgB,CAAC,GAAG,EAAE;AAC3C,QAAA,OAAe,CAAC,GAAG,GAAI,QAAgB,CAAC,GAAG;IAC9C;SAAO;AACJ,QAAA,OAAe,CAAC,GAAG,GAAI,QAAgB,IAAI,EAAE;IAChD;AAEA,IAAA,IAAI;AACF,QAAA,MAAM,YAAY,GAAG,MAAM,gBAAgB,EAAE;QAC7C,IAAI,YAAY,EAAE;AACf,YAAA,OAAe,CAAC,KAAK,KAAK,EAAE;AAC5B,YAAA,OAAe,CAAC,KAAK,CAAC,QAAQ,GAAG;AAChC,gBAAA,MAAM,EAAE,sBAAsB;AAC9B,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE,yBAAyB;aACvC;AACA,YAAA,OAAe,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,YAAY;AAC1D,YAAA,OAAe,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,YAAY;QAC1D;IACF;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC;IACzD;AAEA;;AAE4B;IAC5B,MAAM,eAAe,GAAG,GAAG;IAC3B,MAAM,eAAe,GAAG,EAAE;IAC1B,MAAM,cAAc,GAAG,EAAE;IAEzB,MAAM,WAAW,GAAa,EAAE;IAChC,MAAM,cAAc,GAAa,EAAE;IAEnC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AACzB,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU;AACvD,QAAA,IAAI,IAAI,KAAK,cAAc,CAAC,IAAI,IAAI,IAAI,KAAK,cAAc,CAAC,QAAQ,EAAE;AACpE,YAAA,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QACrB;aAAO;AACL,YAAA,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QACxB;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,GAAG,eAAe;AAC1D,IAAA,MAAM,cAAc,GAAG,eAAe,GAAG,aAAa;AAEtD,IAAA,MAAM,gBAAgB,GACpB,cAAc,CAAC,MAAM,GAAG;AACtB,UAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,GAAG,cAAc,CAAC,MAAM;UAC/D,cAAc;AAEpB,IAAA,IAAI,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAClC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,eAAe,GAAG,gBAAgB,CAC7D;;IAGD,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,EACjC,CAAC,CACF;AAED,IAAA,IAAI,UAAU,GAAG,CAAC,EAAE;AAClB,QAAA,MAAM,WAAW,GAAG,cAAc,GAAG,UAAU;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;;AAExB,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC3B,YAAA,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;AAC7D,QAAA,CAAC,CAAC;;QAGF,IAAI,IAAI,GAAG,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;QAExE,IAAI,GAAG,GAAG,CAAC;QACX,OAAO,IAAI,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE;YAC1C,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC;AACrD,YAAA,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,YAAA,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACzB,YAAA,GAAG,EAAE;QACP;IACF;AAEA;;AAE4B;AAC5B,IAAA,MAAM,SAAS,GAAG;QAChB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;AACvB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,aAAa;AACrB,SAAA,CAAC,CAAC;AACH,QAAA,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAClB,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;YACjB,IAAI,EAAE,IAAI,IAAI,EAAE;AAChB,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,MAAM,EAAE,KAAK;AACd,SAAA,CAAC,CAAC,CACJ;KACF;AACD,IAAA,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AACzB;;AAE4B;AAC5B,IAAA,MAAM,aAAa,GAAQ;AACzB,QAAA,eAAe,EAAE,WAAW;AAC5B,QAAA,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAE7B,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,KAAK,EAAE,eAAe;AACtB,wBAAA,KAAK,EAAE;AACL,4BAAA,UAAU,EAAE,CAAC;AACb,4BAAA,MAAM,EAAE,YAAY;AACpB,4BAAA,IAAI,EAAE,SAAS;AAChB,yBAAA;AACD,wBAAA,MAAM,EAAE;AACN,4BAAA,UAAU,EAAE,MAAM,CAAC;AACnB,4BAAA,UAAU,EAAE,MAAM,CAAC;AACnB,4BAAA,WAAW,EAAE,MAAM,CAAC;AACpB,4BAAA,YAAY,EAAE,MAAM,CAAC;AACrB,4BAAA,UAAU,EAAE,MAAM,CAAC;AACnB,4BAAA,aAAa,EAAE,MAAM,CAAC;4BACtB,SAAS,EAAE,CAAC,QAAgB,KAC1B,QAAQ,KAAK;AACX,kCAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG;kCACb,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK;AACvB,sCAAE;AACF,sCAAE,IAAI;AACb,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,MAAM,EAAE;AACN,YAAA,WAAW,EAAE;AACX,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACrB,aAAA;AACD,YAAA,SAAS,EAAE;AACT,gBAAA,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACrB,aAAA;AACF,SAAA;AAED,QAAA,YAAY,EAAE;AACZ,YAAA,IAAI,EAAG,OAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ;AAC/D,SAAA;KACF;IAED,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACrD;AAEA;AAEA;;;;;;AAMG;SACa,iBAAiB,CAC/B,OAAuB,EACvB,IAAW,EACX,aAAqC,EACrC,cAAmB,EACnB,CAA0B,EAC1B,QAAQ,GAAG,YAAY,EACvB,UAAyB,EAAE,EAAA;IAE3B,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE;AAEtB,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO;AACxC,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,QAAQ;IAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC;;IAG9C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;;IAG7D,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,KAChC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAClB,QAAA,MAAM,GAAG,GAAG,eAAe,CACzB,GAAG,EACH,GAAG,EACH,aAAa,EACb,cAAc,EACd,CAAC,EACD,MAAM,CACP;;QAED,IAAI,SAAS,GACX,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;;QAGnE,MAAM,UAAU,GAAG,eAAe;QAClC,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC1D,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC;;AAE1C,QAAA,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC;AAEhE,QAAA,OAAO,SAAS;IAClB,CAAC,CAAC,CACH;;IAGD,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;;IAGxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC;;AAGxD,IAAA,KAAK,MAAM,WAAW,IAAI,SAAS,EAAE;AACnC,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE;AAChE,YAAA,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG;AAAE,gBAAA,SAAS;AACrC,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAE,gBAAA,IAAI,CAAC,CAAC,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;AAAE,gBAAA,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE;YAC5C,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI;QAClC;IACF;;IAGA,IAAI,SAAS,EAAE;QACb,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAC3C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,EAC3B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAC3D;YACD,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC5D,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS;IAChC;;IAGA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;;AAG5D,IAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACpC;AAEA;AAEA;;;;;AAKG;SACa,eAAe,CAC7B,OAAuB,EACvB,IAAW,EACX,aAAqC,EACrC,cAAmB,EACnB,CAA0B,EAC1B,QAAQ,GAAG,WAAW,EACtB,UAAyB,EAAE,EAAA;IAE3B,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE;AAEtB,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO;AACxC,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG;IAE1C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,IAAA,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,KACjC;AACG,SAAA,GAAG,CAAC,CAAC,GAAG,KAAI;AACX,QAAA,MAAM,GAAG,GAAG,eAAe,CACzB,GAAG,EACH,GAAG,EACH,aAAa,EACb,cAAc,EACd,CAAC,EACD,MAAM,CACP;;QAED,MAAM,CAAC,GAAG,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAChD,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACnC,QAAA,OAAO,cAAc,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,GAAG,IAAI;AAC1D,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,SAAS,CAAC,CACnB;AAED,IAAA,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;IAG1D,MAAM,GAAG,GAAG,QAAQ;AACpB,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;IAEvE,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;IACrC,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AACrC,IAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AACZ,IAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;AACrB,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,KAAK,EAAE;AACT,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5B,IAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAC1B;AAEA;AAEA;;;AAGG;SACa,aAAa,CAAC,OAAe,EAAE,MAAc,MAAM,EAAA;AACjE,IAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE;AAC9B,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACtD,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACjD,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAClD,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACpD,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,IAAI,IAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,GAAG,EAAE;AAC5D;;AC9hBA;;;AAGG;AACH,MAAM,oBAAoB,GAAgB;IACxC,OAAO,EAAE,kBAAkB,CAAC,IAAI;IAChC,IAAI,EAAE,eAAe,CAAC,IAAI;AAC1B,IAAA,UAAU,EAAE,aAAa;AACzB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,KAAK,EAAE;QACL,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACzE,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,kBAAkB,EAAE;AAChF,KAAA;CACF;MAyCY,cAAc,CAAA;;AAER,IAAA,EAAE;AAEnB,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACnC,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;;;;AAKvC;;;;AAIG;IACH,YAAY,GAAU,EAAE;AAExB;;;;AAIG;IACH,OAAO,GAAU,EAAE;AAEnB;;;;AAIG;IACH,SAAS,GAAU,EAAE;;IAGrB,YAAY,GAAG,CAAC;;;;;AAMhB,IAAA,aAAa,GAAG,MAAM,CAAQ,EAAE,yDAAC;;IAGjC,eAAe,GAAU,EAAE;IAE3B,WAAW,GAAG,EAAE;IAChB,QAAQ,GAAG,KAAK;IAEhB,iBAAiB,GAAG,kBAAkB;IACtC,cAAc,GAAG,eAAe;;IAGxB,cAAc,GAAwB,EAAE;AAEhD;;;;AAIG;IACH,aAAa,GAA2B,EAAE;IAE1C,UAAU,GAAG,YAAY;;;;IAKhB,OAAO,GAAU,EAAE;IACnB,oBAAoB,GAAU,EAAE;AAChC,IAAA,kBAAkB;AAClB,IAAA,OAAO;;;;AAKN,IAAA,WAAW,GAAG,IAAI,YAAY,EAAO;AACrC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAO;AACtC,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAO;AAC3C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAY;;;;IAK5C,UAAU,GAAkB,IAAI;AAExC;;;AAGG;IACK,WAAW,GAAG,CAAC;IACf,iBAAiB,GAAG,CAAC;AAE7B;;AAEG;IACK,WAAW,GAAG,EAAE;;IAGhB,kBAAkB,GAAG,KAAK;;IAG1B,uBAAuB,GAAkB,IAAI;;IAGrD,kBAAkB,GAAG,KAAK;;;;;IAQlB,sBAAsB,GAAA;AAC5B,QAAA,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGd;AAEC,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AACrC,QAAA,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB;AAEA,IAAA,WAAA,GAAA;AACE;;;AAGG;AACH,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE;YAE/C,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,CAA6B,KAAI;gBAC5D,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,IAAK,EAAU;AAC/C,gBAAA,IAAI,KAAK,KAAK,IAAI,CAAC,iBAAiB;oBAAE;AAEtC,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,EAAE;gBACpD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;;AAGzC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAE/B,gBAAA,IAAI;oBAAE,IAAI,CAAC,EAAE,EAAE,oBAAoB,GAAG,CAAC,CAAC;gBAAE;gBAAE,MAAM,EAAE;AACpD,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,YAAA,CAAC;AAED,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC;QAC7E;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;;;;AAKA;;AAEG;IACH,IAAa,IAAI,CAAC,KAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,IAAI,EAAE;QAC/B,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;AAErC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;;AAGrB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;;;AAInC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;QACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;;AAGvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAE9B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;QAGvB,IAAI,CAAC,wBAAwB,EAAE;IACjC;;;;AAKA,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;;QAG1B,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,UAAU;AAE9E,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO;;AAGjG,YAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AAC1B,gBAAA,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,YAAY,CAAC;AACxC,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;gBAGvB,IAAI,CAAC,wBAAwB,EAAE;AACjC,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;AACzC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB;AACnC,YAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;gBAC1B,IAAI,CAAC,kBAAkB,GAAG,EAAE,GAAG,GAAG,EAAE,WAAW,EAAE,oBAAoB,EAAE;AACvE,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,YAAA,CAAC,CAAC;QACJ;IACF;;;;AAKA;;;AAGG;AACH,IAAA,YAAY,CAAC,KAAU,EAAA;QACrB,MAAM,IAAI,IAAI,KAAK,CAAC,aAAa,IAAI,EAAE,CAAU;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;;AAG1C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;YAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;AACzC,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;;AAGA,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW;YAAE;AAClC,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;AAE1B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IAC1B;AAEA;;AAEG;AACK,IAAA,aAAa,CAAC,aAAoB,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;YAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;AACzC,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,MAAM,IAAI,GAAe,CAAC,aAAa,IAAI,EAAE;aAC1C,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK;aAC7B,GAAG,CAAC,CAAC,CAAM,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAW,EAAE,CAAC,CAAC;AAEzE,QAAA,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,WAAW;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAE9B,QAAA,MAAM,OAAO,GAAgB;YAC3B,KAAK;YACL,IAAI,EAAE,IAAI,CAAC,OAAO;AAClB,YAAA,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,YAAA,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;SACtC;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC;IACtC;AAEA;;;AAGG;IACK,QAAQ,CAAC,IAAW,EAAE,aAAoB,EAAA;AAChD,QAAA,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,MAAM;AAAE,YAAA,OAAO,MAAM;QAEzC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACnB,YAAA,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE;AAC7B,gBAAA,MAAM,KAAK,GAAG,CAAC,CAAC,KAAM;AACtB,gBAAA,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;AAE1B,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;AACvE,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;gBAEvE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;oBAClD,MAAM,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC1C,IAAI,CAAC,KAAK,CAAC;wBAAE,OAAO,CAAC,GAAG,KAAK;gBAC/B;qBAAO;oBACL,IAAK,CAAS,GAAI,CAAS;AAAE,wBAAA,OAAO,CAAC,CAAC,GAAG,KAAK;oBAC9C,IAAK,CAAS,GAAI,CAAS;wBAAE,OAAO,CAAC,GAAG,KAAK;gBAC/C;YACF;AACA,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,oBAAoB,CAAC,GAA0C,EAAA;AACrE,QAAA,MAAM,CAAC,GAAG,GAAG,EAAE,WAAW;;AAG1B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;QACtD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAK,CAAS,CAAC,KAAK;YAAE,OAAO,CAAC,CAAoB,CAAC;;AAGjF,QAAA,IAAI,GAAG,EAAE,gBAAgB,EAAE;AACzB,YAAA,OAAO,CAAC;oBACN,KAAK,EAAE,GAAG,CAAC,gBAAgB;AAC3B,oBAAA,KAAK,GAAG,GAAG,CAAC,gBAAgB,IAAI,CAAC,CAAc;AAChD,iBAAA,CAAC;QACJ;AAEA,QAAA,OAAO,EAAE;IACX;AAEA;;;;;;;;;;AAUC;IACO,wBAAwB,GAAA;QAC9B,IAAI,IAAI,CAAC,kBAAkB;YAAE;AAE7B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAC9B;QACF;QAEA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,KAAK,EAAE;QACvF,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;;QAGlB,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC;;QAGlE,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK;QACpC,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAU,EAAE,CAAC;aACzF,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;;AAG1B,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QACrF,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAU,EAAE,CAAC;QAE9F,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;YAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;AACzC,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAC9B;QACF;AAEA,QAAA,IAAI;YAAE,IAAI,IAAI,CAAC,EAAE;AAAE,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,GAAG,SAAgB;QAAE;QAAE,MAAM,EAAE;QAEvE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AAC5C,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAC9B,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK;AAEjD,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;IAC/B;;;;AAKA;;;AAGG;AACH,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE;AAClD,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;QAE1B,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,YAAY;QAE1F,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;AACzC,aAAA,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;aACvC,MAAM,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,CAAC,CAAC;QAE7B,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC;QAC9B;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAQ,KACtC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAa,KAClC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAC5D,CACF;QACH;QAEA,IAAI,CAAC,uBAAuB,EAAE;IAChC;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,OAA4B,EAAA;AACvC,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,OAAO,EAAE;AACpC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,IAAI,CAAC,uBAAuB,EAAE;IAChC;AAEA;;;AAGG;IACK,uBAAuB,GAAA;QAC7B,MAAM,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,aAAa,IAAI,EAAE,CAAU;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;AAE1C,QAAA,IAAI,IAAI,EAAE,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACxB;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;QAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;;;IAKQ,cAAc,CAAC,GAAQ,EAAE,IAAY,EAAA;AAC3C,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,GAAG,CAAC,IAAI,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;IACxF;IAEQ,YAAY,CAAC,KAAU,EAAE,KAAa,EAAA;AAC5C,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;QACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;AACjH,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrF,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvG,QAAA,OAAO,KAAK;IACd;;;;AAKA;;;;;;AAMG;IACK,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AACvC,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;gBACpD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAC5C,gBAAA,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;AAAE,oBAAA,OAAO,IAAI;gBAEzF,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC;AAEhD,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC9B,oBAAA,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACjC,wBAAA,MAAM,SAAS,GAAG,MAAM,EAAE,GAAG,IAAI,MAAM;AACvC,wBAAA,OAAO,SAAS,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,SAAS,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE;AACpF,oBAAA,CAAC,CAAC;gBACJ;AAEA,gBAAA,MAAM,iBAAiB,GAAG,WAAW,EAAE,GAAG,IAAI,WAAW;AACzD,gBAAA,OAAO;AACL,sBAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,iBAAiB,CAAC,QAAQ,EAAE,CAAC,WAAW;sBAChF,IAAI;AACV,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,cAAc,CAAC,GAAQ,EAAE,IAAY,EAAA;AAC3C,QAAA,IAAI;AACF,YAAA,IAAI,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;gBAAE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;YAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAC5B,IAAI,OAAO,GAAG,GAAG;AACjB,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACtB,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,GAAG,IAAI,OAAO;AAAE,oBAAA,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;;AAC/E,oBAAA,OAAO,SAAS;YACvB;AACA,YAAA,OAAQ,OAAe,EAAE,GAAG,IAAI,OAAO;QACzC;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,SAAS;QAClB;IACF;AAEA;;;AAGG;IACK,kBAAkB,CAAC,GAAQ,EAAE,KAAc,EAAA;AACjD,QAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;AAEhD,QAAA,MAAM,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI;QAE3D,IAAI,OAAO,GAAG,KAAK,QAAQ;AAAE,YAAA,OAAO,GAAG;AAEvC,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,IAAI,UAAU,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;gBAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAClC,gBAAA,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,GAAG,UAAU;YAC3D;AACA,YAAA,OAAO,GAAG,CAAC,WAAW,EAAE;QAC1B;QAEA,IAAI,GAAG,YAAY,IAAI;AAAE,YAAA,OAAO,GAAG,CAAC,OAAO,EAAE;AAE7C,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,IAAK,GAAW,CAAC,IAAI,IAAK,GAAW,CAAC,EAAE,EAAE;gBACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,GAAW,CAAC,IAAI,CAAC;gBAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAE,GAAW,CAAC,EAAE,CAAC;AACtC,gBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE;YAClD;YAEA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAEvF,YAAA,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;AAChE,YAAA,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE;AAChC,gBAAA,IAAK,GAAW,CAAC,GAAG,CAAC,KAAK,SAAS,IAAK,GAAW,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;oBACjE,OAAO,IAAI,CAAC,kBAAkB,CAAE,GAAW,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;gBAC1D;YACF;YAEA,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBAClC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC;YAC9F;QACF;AAEA,QAAA,OAAO,EAAE;IACX;IAEQ,qBAAqB,CAAC,CAAS,EAAE,CAAS,EAAA;AAChD,QAAA,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAC9E;;;;AAKA,IAAA,iBAAiB,CAAC,QAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AAC3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;IACvC;IAEA,UAAU,CAAC,KAAY,EAAE,OAAY,EAAA;QACnC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;IACjC;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAU,EAAA;QAC1B,IAAI,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,YAAY,EAAE;AACvC,YAAA,MAAM,IAAI,GACR,IAAI,CAAC,kBAAkB,EAAE;kBACrB,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK;AAClD,kBAAE,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC;AAEnC,YAAA,eAAe,CACb,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,cAAc,EACnB,CAAC,CAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAC/C,IAAI,CACL,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AAChB,gBAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAC/C,YAAA,CAAC,CAAC;YACF;QACF;QAEA,IAAI,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,cAAc,EAAE;AACzC,YAAA,MAAM,IAAI,GACR,IAAI,CAAC,kBAAkB,EAAE;kBACrB,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM;AACnD,kBAAE,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;AAEpC,YAAA,iBAAiB,CACf,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,cAAc,EACnB,CAAC,CAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAC/C,IAAI,CACL;YACD;QACF;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEA;;AAEG;AACH,IAAA,eAAe,CAAC,KAAU,EAAA;QACxB,OAAO,OAAO,KAAK,CAAC,IAAI,EAAE,SAAS,KAAK,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI;IACjF;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,WAAmB,EAAA;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,oBAAoB,IAAI,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,YAAY,IAAI,KAAK;AAE9D,QAAA,OAAO,WAAW,GAAG,GAAG,IAAI,OAAO;IACrC;AAEA;;AAEG;IACH,eAAe,CAAC,KAAY,EAAE,IAAY,EAAA;QACxC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;IACrC;AAEA;;AAEG;IACH,SAAS,CAAC,GAAQ,EAAE,IAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,GAAI,CAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;IAClF;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,QAAe,EAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvE,QAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AAC1B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,QAAA,CAAC,CAAC;IACJ;wGA9uBW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,IAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9F3B,kymBAqeM,EAAA,MAAA,EAAA,CAAA,k4BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5ZF,YAAY,uSACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,4BAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,+BAA+B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAC/B,SAAS,wJACT,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,aAAa,yUACb,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,KAAA,EAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAIV,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAU,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EARX,aAAa,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAKb,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,cAAc,8CACd,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAMJ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAzB1B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,qBAAqB;wBACrB,eAAe;wBACf,+BAA+B;wBAC/B,SAAS;wBACT,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb,cAAc;wBACd,WAAW;wBACX,aAAa;wBACb,UAAU;wBACV,YAAY;wBACZ,cAAc;wBACd,aAAa;wBACb,WAAW;AACZ,qBAAA,EAAA,QAAA,EAAA,kymBAAA,EAAA,MAAA,EAAA,CAAA,k4BAAA,CAAA,EAAA;;sBAMA,SAAS;uBAAC,IAAI;;sBA8Dd;;sBACA;;sBACA;;sBACA;;sBAKA;;sBACA;;sBACA;;sBACA;;sBAgLA;;;AEvVG,SAAU,qBAAqB,CACnC,OAAwB,EAAA;IAExB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK;AAE7C,IAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE;AAC9B;;ACDA,MAAM,cAAc,GAClB,oGAAoG;AACtG,MAAM,cAAc,GAClB,oGAAoG;AAEtG,MAAM,cAAc,GAClB,oGAAoG;AAEtG,SAAS,IAAI,CAAC,KAAa,EAAE,KAAa,EAAA;IACxC,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AACjC,IAAA,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IAErB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAEzC,IAAA,MAAM,YAAY,GAChB,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AACxC,QAAA,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AACtB,QAAA,OAAO,GAAG,EAAE,GAAG,IAAI;AACrB,IAAA,OAAO,YAAY;AACrB;AAEA,SAAS,cAAc,CAAC,WAAmB,EAAA;IACzC,QAAQ,WAAW;AACjB,QAAA,KAAK,IAAI;AACP,YAAA,OAAO,cAAc;AACvB,QAAA,KAAK,IAAI;AACP,YAAA,OAAO,cAAc;AACvB,QAAA;AACE,YAAA,OAAO,cAAc;;AAE3B;AAEM,SAAU,UAAU,CAAC,WAAmB,EAAE,KAAa,EAAA;IAC3D,OAAO,CAAC,OAAwB,KAAI;AAClC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACrB,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACpE,YAAA,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE;AACzB,gBAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE;YAC7B;YAEA,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE;AAC/C,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,GAAG,WAAW,EAAE;AAClE,oBAAA,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE;gBACvC;gBACA,IACE,KAAK,IAAI,IAAI;AACb,oBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,EACzD;AACA,oBAAA,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE;gBACvC;AACA,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH;;ICpEY;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACnD,CAAC,EAxBW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;ACEjB,SAAU,YAAY,CAAC,OAAY,EAAA;AACvC,IAAA,QAAQ,OAAO,CAAC,aAAa,CAAC,IAAI;QAChC,KAAK,WAAW,CAAC,IAAI;QACrB,KAAK,WAAW,CAAC,SAAS;QAC1B,KAAK,WAAW,CAAC,WAAW;QAC5B,KAAK,WAAW,CAAC,QAAQ;YACvB,OAAO,OAAO,CAAC,SAAS;QAC1B,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,OAAO,CAAC,eAAe;QAChC,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,OAAO,CAAC,gBAAgB;QACjC;;AAEJ;;MCba,mBAAmB,CAAA;IAC9B,OAAO,qBAAqB,CAAC,OAAkC,EAAA;AAC7D,QAAA,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;AACrC,YAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE;QAC9B;AACA,QAAA,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;AACxB,YAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE;QAC9B;AACA,QAAA,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AAC9D,QAAA,MAAM,OAAO,GAAG,CAAC,YAAY;AAC7B,QAAA,OAAO,OAAO,GAAG,IAAI,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE;IAC9C;IACA,OAAO,8BAA8B,CAAC,OAA2B,EAAA;QAC/D,MAAM,YAAY,GAChB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AACzE,QAAA,MAAM,OAAO,GAAG,CAAC,YAAY;AAC7B,QAAA,OAAO,OAAO,GAAG,IAAI,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE;IAC9C;AACD;;SClBe,yBAAyB,GAAA;;;IAGvC,MAAM,qBAAqB,GAAG,SAAS;IAEvC,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;AAC3B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;QAEvB,OAAO,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC7C,cAAE,EAAE,cAAc,EAAE,IAAI;cACtB,IAAI;AACV,IAAA,CAAC;AACH;;MCRa,eAAe,CAAA;AAC1B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACf,IAAA,SAAS,GAAG,IAAI,OAAO,EAAO;AAC9B,IAAA,mBAAmB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACzD,IAAA,cAAc,GAAG,IAAI,eAAe,CAAS,MAAM,CAAC;AACpD,IAAA,eAAe,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACrD,IAAA,yBAAyB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAEvE,IAAA,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AAChD,IAAA,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;AAC3D,IAAA,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAC1D,IAAA,sBAAsB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AAE5D;;;;AAIG;AACH,IAAA,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,CAAC,YAAY,EAAE;AAElE,IAAA,WAAA,GAAA,EAAe;AAEf,IAAA,YAAY,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,oBAAoB,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;IAOtC;AAEA,IAAA,iBAAiB,CAAC,UAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;IACtC;AAEA,IAAA,kBAAkB,CAAC,MAAe,EAAA;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;AACA;;;;;;;AAOG;AACH,IAAA,wBAAwB,CAAC,WAAoB,EAAA;AAC3C,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC;IAClD;wGArDW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCaqB,gBAAgB,CAAA;AAgB1B,IAAA,EAAA;AACD,IAAA,WAAA;AAEC,IAAA,gBAAA;AACA,IAAA,IAAA;AAnBD,IAAA,QAAQ;AACR,IAAA,cAAc;AACd,IAAA,gBAAgB;IAChB,OAAO,GAAY,KAAK;IACxB,WAAW,GAAY,KAAK;IAC5B,WAAW,GAAY,IAAI;IAC3B,SAAS,GAAY,KAAK;AAC1B,IAAA,SAAS;AACR,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AACjC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAE3C,IAAA,WAAW;AACX,IAAA,QAAQ;IAER,WAAA,CACU,EAAe,EAChB,WAA4B,EAE3B,gBAAkC,EAClC,IAAgB;;QAJhB,IAAA,CAAA,EAAE,GAAF,EAAE;QACH,IAAA,CAAA,WAAW,GAAX,WAAW;QAEV,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,IAAI,GAAJ,IAAI;QAEZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB;;AAErD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAO,KAAI;AAC/D,YAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;AACnC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,QAA6B,EAAA;AACtC,QAAA,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAY,KAAI;YACjC,IAAI,CAAC,QAAQ,CAAC,UAAU,CACtB,OAAO,CAAC,aAAa,EAAE,GAAG,EAC1B,IAAI,CAAC,EAAE,CAAC,OAAO,CACb,YAAY,CAAC,OAAO;;;AAGrB,aAAA,CACF;;AAED,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;;AAGlC,YAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE;YACzD;AACF,QAAA,CAAC,CAAC;;AAEF,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;QAC/C;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC;IACjD;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;IACpC;AAEA,IAAA,oBAAoB,CAAC,OAAY,EAAA;QAC/B,MAAM,UAAU,GAAU,EAAE;QAC5B,MAAM,eAAe,GAAU,EAAE;AAEjC,QAAA,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,OAAO,CAAC,UAAU,CAAC,GAAG;AACpB,gBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAEzD,OAAO,CAAC,UAAU,CAAC,GAAG;AACpB,gBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAEzD,OAAO,CAAC,UAAU,CAAC,SAAS;AAC1B,gBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAErE,OAAO,CAAC,UAAU,CAAC,SAAS;AAC1B,gBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAErE,YAAA,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAE7D,OAAO,CAAC,UAAU,CAAC,KAAK;AACtB,gBAAA,UAAU,CAAC,IAAI,CACb,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CACxD;YACH,OAAO,CAAC,UAAU,CAAC,KAAK;gBACtB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAE3D,OAAO,CAAC,UAAU,CAAC,UAAU;AAC3B,gBAAA,UAAU,CAAC,IAAI,CACb,UAAU,CACR,IAAI,CAAC,gBAAgB,CAAC,WAAW,EACjC,OAAO,CAAC,UAAU,CAAC,KAAK,CACzB,CACF;YAEH,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC;QACtE;AACA,QAAA,IAAI,OAAO,EAAE,SAAS,EAAE;AACtB,YAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACtC;AAEA,QAAA,IAAI,OAAO,EAAE,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EAAE;AACzE,YAAA,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC;QAC5D;QAEA,IACE,OAAO,EAAE,SAAS;YAClB,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,WAAW,CAAC,SAAS,EACpD;AACA,YAAA,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC;QAC5D;QAEA,IACE,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI;YAC/C,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,WAAW,CAAC,SAAS,EACpD;AACA,YAAA,UAAU,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC9C;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC;IACzE;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IACvC;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEA;;;;;AAKG;IACH,oBAAoB,GAAA;QAClB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;IAC/C;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;IAChD;wGA9IoB,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAV,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBADrC;;sBAEE;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;SC7Ba,gBAAgB,CAC9B,GAAQ,EACR,QAAgB,EAChB,SAAiB,EAAA;AAEjB,IAAA,IAAI,CAAC,QAAQ;QAAE,QAAQ,GAAG,IAAI;AAC9B,IAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;QACzB,MAAM,KAAK,GACT,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAClE,QAAA,MAAM,aAAa,GAAW,SAAS,GAAG,IAAI;AAC9C,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE;AAChB,YAAA,OAAO,GAAG,CAAC,KAAK,CAAC;QACnB;AAAO,aAAA,IAAI,GAAG,GAAG,aAAa,CAAC,EAAE;AAC/B,YAAA,OAAO,GAAG,CAAC,aAAa,CAAC;QAC3B;aAAO;AACL,YAAA,OAAO,KAAK;QACd;IACF;SAAO;AACL,QAAA,OAAO,gBAAgB;IACzB;AACF;;MCba,cAAc,CAAA;IACzB,SAAS,CAAC,KAAU,EAAE,WAAmB,EAAA;AACvC,QAAA,IAAI,KAAK,CAAC,cAAc,CAAC,qBAAqB,CAAC,EAAE;YAC/C,OAAO,KAAK,EAAE,mBAAmB;QACnC;QACA,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC;AACrE,QAAA,OAAO,SAAS;IAClB;wGAPW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;MCWY,kBAAkB,CAAA;AAGT,IAAA,gBAAA;AAFX,IAAA,OAAO;AAChB,IAAA,WAAW;AACX,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW;IACtD;wGALW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARnB;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EANS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,CAAA;;4FAS5C,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,eAAe,EAAE,cAAc,CAAC,EAAA,QAAA,EAC9C;;;;;AAKT,EAAA,CAAA,EAAA;;sBAIA;;;MCaU,yBAAyB,CAAA;AAQ3B,IAAA,GAAA;AACA,IAAA,MAAA;AARW,IAAA,KAAK;AAEzB,IAAA,OAAO;IACP,aAAa,GAAY,IAAI;IAC7B,SAAS,GAAG,EAAE;IACd,YAAY,GAAG,KAAK;IACpB,WAAA,CACS,GAAqB,EACrB,MAA2B,EAAA;QAD3B,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,MAAM,GAAN,MAAM;IACZ;IAEH,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;IACzC;AAEA,IAAA,OAAO,GAAmB;AACxB,QAAA;AACE,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,QAAQ,EAAE,SAAS;AACpB,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,QAAQ,EAAE,WAAW;AACtB,SAAA;KACF;AAED,IAAA,kBAAkB,CAAC,YAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY;IACpC;AAEA,IAAA,WAAW,CAAC,GAAQ,EAAA;AAClB,QAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC5C;aAAO;AACL,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;QAClB;IACF;AACA,IAAA,kBAAkB,GAAG;AACnB,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,YAAY,EAAE,OAAO;AACrB,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,IAAI,EAAE,EAAE;QACR,aAAa,EAAE,kBAAkB,CAAC,SAAS;AAC3C,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,mBAAmB,EAAE;KAEtB;wGAxDU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BtC,6wBAyBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJI,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,cAAc,6NACd,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAKH,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAdrC,SAAS;+BACE,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,OAAA,EACP;wBACP,eAAe;wBACf,WAAW;wBACX,aAAa;wBACb,YAAY;wBACZ,cAAc;wBACd;AACD,qBAAA,EAAA,QAAA,EAAA,6wBAAA,EAAA;;sBAKA,SAAS;uBAAC,OAAO;;;MEmKP,8BAA8B,CAAA;AAChC,IAAA,OAAO;AACP,IAAA,UAAU;AACV,IAAA,OAAO;AAET,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,UAAU;IAEjB,UAAU,CAAC,KAAU,EAAA,EAAS;AAC9B,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAC9B;AAEQ,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAE7C,IAAA,MAAM;IAEN,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACzE;IAEA,iBAAiB,GAAA;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAyB,EAAE;YAC7D,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,2BAA2B,CAAC;AAClE,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,IAAI,EAAE;AACJ,gBAAA,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK;AAC3C,gBAAA,OAAO,EAAE;AACP,oBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,EAAE;AAC1E,oBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,EAAE;AAClF,oBAAA,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,EAAE;AAC5E,oBAAA,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI;AAC3E,iBAAA;AACF,aAAA;AACD,YAAA,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;AAClC,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;QAEF,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAkB,KAAI;gBAC3C,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;AACtB,oBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC7E;AACF,YAAA,CAAC,CAAC;QACJ;IACF;wGAxDW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAR9B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,8BAA8B,CAAC;AAC7D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArKS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6GT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ghBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApHC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,kBAAkB,mFAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAyKF,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAlL1C,SAAS;+BACE,iCAAiC,EAAA,UAAA,EAC/B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,YAAY;wBACZ,kBAAkB;wBAClB,eAAe;wBACf,aAAa;wBACb,WAAW;qBACZ,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6GT,EAAA,SAAA,EAkDU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,oCAAoC,CAAC;AAC7D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,ghBAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBACA;;;ACtMH,IAAY,SAiBX;AAjBD,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,WAAwB;AACxB,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,WAAwB;AACxB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,SAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,SAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,SAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,SAAoB;AACpB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,QAAgB;AAChB,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,SAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,SAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,SAAA,CAAA,iBAAA,CAAA,GAAA,gBAAkC;AACpC,CAAC,EAjBW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;;MC6CR,gBAAgB,CAAA;AAGP,IAAA,gBAAA;AAFX,IAAA,IAAI;AACb,IAAA,IAAI;AACJ,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAAqB;AACzD,IAAA,IAAI;AACJ,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IACzC,MAAM,GAAY,KAAK;IAEvB,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC7B,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE;;AAEnC,gBAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACpC;AACA,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;kBACnB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;AAC/D,iBAAA,SAAS,CAAC,CAAC,GAAG,KAAI;AACjB,gBAAA,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;oBACtB,UAAU,CAAC,MAAK;wBACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,oBAAA,CAAC,CAAC;gBACJ;qBAAO;oBACL,UAAU,CAAC,MAAK;AACd,wBAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAClB,oBAAA,CAAC,CAAC;gBACJ;;;;;;AAMF,YAAA,CAAC,CAAC;AACJ,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACpB;IACF;AAEA,IAAA,eAAe,CAAC,OAAwB,EAAA;AACtC,QAAA,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE;YACjC,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACpC,gDAAgD,CACjD;aACF;QACH;;;;AAKA,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,YAAA,QAAQ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpC,KAAK,SAAS,CAAC,QAAQ;oBACrB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,2CAA2C,CAC5C;gBACH,KAAK,SAAS,CAAC,UAAU;oBACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,mCAAmC,EACnC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,CAC1D;gBACH,KAAK,SAAS,CAAC,UAAU;oBACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,kCAAkC,EAClC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,CAC1D;gBACH,KAAK,SAAS,CAAC,KAAK;oBAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,sCAAsC,CACvC;gBACH,KAAK,SAAS,CAAC,eAAe;oBAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,6CAA6C,CAC9C;gBACH,KAAK,SAAS,CAAC,MAAM;AACnB,oBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;gBAEnE,KAAK,SAAS,CAAC,WAAW;AACxB,oBAAA,OAAO,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;gBAEtC,KAAK,SAAS,CAAC,UAAU;oBACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,mDAAmD,CACpD;gBAEH,KAAK,SAAS,CAAC,GAAG;AAChB,oBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,4DAA4D,EAC5D;wBACE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;wBAC3C,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG;AACvC,qBAAA,CACF;gBAEH,KAAK,SAAS,CAAC,QAAQ;oBACrB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,iCAAiC,CAClC;gBACH,KAAK,SAAS,CAAC,KAAK;oBAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,4CAA4C,CAC7C;gBACH,KAAK,SAAS,CAAC,oBAAoB;oBACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,6DAA6D,CAC9D;gBAEH,KAAK,SAAS,CAAC,oBAAoB;oBACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,6DAA6D,CAC9D;gBAEH,KAAK,SAAS,CAAC,UAAU;oBACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,iDAAiD,CAClD;;gBAGH,KAAK,SAAS,CAAC,OAAO;oBACpB,MAAM,EAAE,GAAG,yDAAyD;oBAEpE,IAAI,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,eAAe,KAAK,EAAE;wBACtD,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,uCAAuC,CACxC;yBACE;wBACH,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,kCAAkC,CACnC;oBACH;;AAEF,gBAAA;oBACE,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,kCAAkC,CACnC;;QAEP;;AAAO,YAAA,OAAO,EAAE;IAClB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;IAC1B;wGA5IW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBjB;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhCS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAGV;YACV,OAAO,CAAC,YAAY,EAAE;gBACpB,UAAU,CAAC,QAAQ,EAAE;AACnB,oBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;oBACxC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;iBAClE,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE;AACnB,oBAAA,OAAO,CACL,eAAe,EACf,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CACxD;iBACF,CAAC;aACH,CAAC;AACH,SAAA,EAAA,CAAA;;4FAkBU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBApC5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,WACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb,4BAA4B,EAAA,UAAA,EAE1B;wBACV,OAAO,CAAC,YAAY,EAAE;4BACpB,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;gCACxC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;6BAClE,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,OAAO,CACL,eAAe,EACf,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CACxD;6BACF,CAAC;yBACH,CAAC;qBACH,EAAA,QAAA,EACS;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA;;sBAGA;;;MCzCU,aAAa,CAAA;IACf,OAAO,GAAY,KAAK;AACxB,IAAA,OAAO;AACP,IAAA,UAAU;AACnB,IAAA,IAAI;AACJ,IAAA,IAAI;AAEG,IAAA,KAAK;AACL,IAAA,SAAS;AACT,IAAA,SAAS;AAChB,IAAA,IAAI;AAEM,IAAA,SAAS,GAAG,IAAI,OAAO,EAAW;AAClC,IAAA,WAAW;IAErB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;IACjE;AAEA,IAAA,aAAa,CAAC,KAAkB,EAAA;AAC9B,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,OAAO,KAAK,CAAC,KAAK;QACpB;AACA,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,gBAAgB,EAAE;YAC5C,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE;QACnC;AACA,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,mBAAmB,EAAE;AAC/C,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK;QAC3B;AACA,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AACA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU;IAC3B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;AACxB,QAAA,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;IAC1B;wGAnDW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;sBAEE;;sBACA;;sBACA;;;AC4CG,MAAO,qBAAsB,SAAQ,aAAa,CAAA;IACtD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvE,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACtB;wGAJW,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EARrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/BS;;;;;;;;;;;;;;;;;;;;;;;GAuBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA7BC,YAAY,+BACZ,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,gBAAgB,wFAChB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAmCP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA3CjC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,kBAAkB;wBAClB,WAAW;wBACX,gBAAgB;wBAChB,gBAAgB;qBACjB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;GAuBT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA;;;ACiDG,MAAO,gCAAiC,SAAQ,aAAa,CAAA;AACzD,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEnD,IAAA,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW;IAC/C,YAAY,GAAkB,IAAI;AAElC,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;wGATW,gCAAgC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,SAAA,EARhC;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gCAAgC,CAAC;AAC/D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7ES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gaAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApCC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,8BACX,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAiFT,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBA1F5C,SAAS;+BACE,oCAAoC,EAAA,UAAA,EAClC,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,cAAc;wBACd,WAAW;wBACX,eAAe;wBACf,aAAa;wBACb,kBAAkB;qBACnB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BT,EAAA,SAAA,EA0CU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,sCAAsC,CAAC;AAC/D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,gaAAA,CAAA,EAAA;;;ACvDG,MAAO,qBAAsB,SAAQ,aAAa,CAAA;AAC9C,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACnD,IAAA,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW;wGAFpC,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EARrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtBS,CAAA;;;;;;;;;;;;;;SAcH,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApBL,YAAY,oIACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,eAAe,yFACf,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,CAAA;;4FA0BL,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAlCjC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,cAAc;wBACd,WAAW;wBACX,eAAe;wBACf,cAAc;qBACf,EAAA,QAAA,EACS,CAAA;;;;;;;;;;;;;;SAcH,EAAA,SAAA,EAEI;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA;;;AC+BG,MAAO,wBAAyB,SAAQ,aAAa,CAAA;wGAA9C,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,SAAA,EARxB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhDS;;;;;;;;;;;;;;;GAeT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ugBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAtBC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,eAAe,8BACf,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAoDP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA7DpC,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,eAAe;wBACf,iBAAiB;wBACjB,kBAAkB;wBAClB,gBAAgB;qBACjB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;GAeT,EAAA,SAAA,EA2BU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,ugBAAA,CAAA,EAAA;;;ACGG,MAAO,qBAAsB,SAAQ,aAAa,CAAA;AACtD,IAAA,WAAW,CAAC,IAAS,EAAA;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3E;AACA,IAAA,KAAK,CAAC,IAAS,EAAA;AACb,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACpE,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC7E;AAEA,IAAA,6BAA6B,CAAC,cAAsB,EAAA;;QAElD,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;;QAG3D,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;;AAGhE,QAAA,MAAM,YAAY,GAAG,UAAU,CAAC,oBAAoB,CAAC;AAErD,QAAA,OAAO,YAAY;IACrB;wGApBW,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EARrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzCS;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApCC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,wPACX,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,8BACf,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FA6CR,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAzDjC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,eAAe;wBACf,gBAAgB;wBAChB,kBAAkB;wBAClB,eAAe;wBACf,eAAe;wBACf,iBAAiB;qBAClB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BT,EAAA,SAAA,EASU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA;;;ACfG,MAAO,2BAA4B,SAAQ,aAAa,CAAA;wGAAjD,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,SAAA,EAR3B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5BS;;;;;;;;;;;;;;;;;;;;AAoBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5BC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,eAAe,EAAA,CAAA,EAAA,CAAA;;4FAgCN,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA1CvC,SAAS;+BACE,8BAA8B,EAAA,UAAA,EAC5B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,iBAAiB;wBACjB,WAAW;wBACX,kBAAkB;wBAClB,gBAAgB;wBAChB,eAAe;qBAChB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;GAoBT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA;;;ACQG,MAAO,mBAAoB,SAAQ,aAAa,CAAA;;AAEpD,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW;wGAFhC,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,SAAA,EARnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5BS;;;;;;;;;;;;;;;;;;;;AAoBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA/BC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,iBAAiB,+sBACjB,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,8BACf,eAAe,EAAA,CAAA,EAAA,CAAA;;4FAiCN,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA7C/B,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,iBAAiB;wBACjB,gBAAgB;wBAChB,WAAW;wBACX,kBAAkB;wBAClB,eAAe;wBACf,eAAe;wBACf,eAAe;;qBAEhB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;GAoBT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA;;;ACEG,MAAO,0BAA2B,SAAQ,aAAa,CAAA;wGAAhD,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,SAAA,EAR1B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,0BAA0B,CAAC;AACzD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhCS;;;;;;;;;;;;;;;;;;AAkBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA3BC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAoCP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA/CtC,SAAS;+BACE,6BAA6B,EAAA,UAAA,EAC3B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,eAAe;wBAEf,cAAc;wBACd,kBAAkB;wBAClB,gBAAgB;qBACjB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;GAkBT,EAAA,SAAA,EAQU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,gCAAgC,CAAC;AACzD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,4CAAA,CAAA,EAAA;;;ACLG,MAAO,yBAA0B,SAAQ,aAAa,CAAA;wGAA/C,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,SAAA,EARzB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3BS;;;;;;;;;;;;;;;;;;;;AAoBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5BC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FA+BT,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAzCrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,gBAAgB;wBAChB,kBAAkB;wBAClB,eAAe;wBACf,WAAW;wBACX,kBAAkB;AACnB,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;AAoBT,EAAA,CAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC;AACxD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;;;MC9CY,qBAAqB,CAAA;AACtB,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACrD,SAAS,CAAC,IAAS,EAAE,SAAiB,EAAA;QACpC,IAAI,GAAG,GAAQ,EAAE;QACjB;cACI,IAAI,EAAE,OAAO,CAAC,CAAC,IAAS,KAAI;gBAC1B,MAAM,GAAG,GAAG,IAAI;AAChB,gBAAA,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS;sBAC3B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;sBAC7C,SAAS;AACb,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACf,YAAA,CAAC;AACH,eAAG,GAAG,GAAG,IAAI,CAAC;AAEhB,QAAA,OAAO,GAAG;IACZ;wGAfW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,uBAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,uBAAuB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACkFK,MAAO,oCAAqC,SAAQ,aAAa,CAAA;IAC9D,KAAK,GAAW,OAAO;IAE9B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACzE;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACrB,aAAA,YAAY;AACZ,aAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;AAE9B,aAAA,SAAS,CAAC,CAAC,KAAc,KAAI;YAC5B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,OAAO,EAAE;YAChB;AACF,QAAA,CAAC,CAAC;IACN;IAES,QAAQ,GAAA;QACf,IAAI,CAAC,OAAO,EAAE;IAChB;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC;AAEjD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE;AAC/D,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAM,EAAE,CAAS,KAAI;gBAChE,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE;oBAClC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3C,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;gBACpE;AACF,YAAA,CAAC,CAAC;QACJ;IACF;wGArCW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,SAAA,EARpC;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oCAAoC,CAAC;AACnE,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtDS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAzDC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,YAAY,kmCACZ,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEf,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,gBAAgB,oFAFhB,qBAAqB,EAAA,IAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,CAAA;;4FA4DZ,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAtEhD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yCAAyC;AACnD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,YAAY;wBACZ,kBAAkB;wBAClB,WAAW;wBACX,eAAe;wBACf,qBAAqB;wBACrB,WAAW;wBACX,gBAAgB;AACjB,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CT,EAAA,CAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,0CAA0C,CAAC;AACnE,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;;;ACqDK,MAAO,yBAA0B,SAAQ,aAAa,CAAA;;AAEnD,IAAA,KAAK;;IAGL,QAAQ,GAAG,KAAK;AAEvB;;;AAGG;IACI,WAAW,GAEd,EAAE;AAEE,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAEnD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACzE;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACrB,aAAA,YAAY;AACZ,aAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAExB,aAAA,SAAS,CAAC,CAAC,KAAc,KAAI;AAC5B,YAAA,IAAI,KAAK;gBAAE,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,CAAC,CAAC;IACN;IAES,QAAQ,GAAA;QACf,IAAI,CAAC,OAAO,EAAE;IAChB;;AAGA,IAAA,IAAI,WAAW,GAAA;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,EAAE;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;QAC5B,IAAI,KAAK,IAAI,MAAM;AAAE,YAAA,OAAO,KAAK;QACjC,IAAI,OAAO,IAAI,MAAM;AAAE,YAAA,OAAO,OAAO;AACrC,QAAA,OAAO,SAAS;IAClB;;IAGA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ;AAEvD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,IAAI;YAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE;;YAGvD,IAAI,CAAC,WAAW,GAAG;AAChB,iBAAA,GAAG,CAAC,CAAC,CAAM,KAAI;AACd,gBAAA,MAAM,QAAQ,GACZ,CAAC,CAAC,mBAAmB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE;AAC7D,gBAAA,MAAM,QAAQ,GAAG,CACf,CAAC,CAAC,GAAG;AACL,oBAAA,CAAC,CAAC,IAAI;AACN,oBAAA,CAAC,CAAC,IAAI;AACN,oBAAA,CAAC,CAAC,KAAK;AACP,oBAAA,EAAE,EACF,QAAQ,EAAE;AACZ,gBAAA,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE;AAClD,YAAA,CAAC;AACA,iBAAA,MAAM,CACL,CAAC,EAAoC,KAAK,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ;AAErE,iBAAA,IAAI,CAAC,CAAC,CAAuB,EAAE,CAAoB,KAClD,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE;AAChD,gBAAA,WAAW,EAAE,MAAM;AACpB,aAAA,CAAC,CACH;;;;AAKH,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK;AACpB,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE;AAC9B,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACjC,CAAC,CAAC,KACA,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;AACjD,qBAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAC/D;gBACD,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ;oBAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC9B;YACF;AAAO,iBAAA,IACL,CAAC;gBACD,OAAO,CAAC,KAAK,QAAQ;AACrB,gBAAA,EAAE,KAAK,IAAI,CAAC,CAAC;iBACZ,MAAM,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,EAC7B;gBACA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE;AACzD,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACjC,CAAC,CAAC,KACA,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE;AACnD,qBAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CACjE;gBACD,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ;oBAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC9B;qBAAO;;oBAEL,IAAI,CAAC,KAAK,GAAG;wBACX,GAAG;AACH,wBAAA,mBAAmB,EACjB,CAAC,CAAC,mBAAmB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE;qBAC9D;oBACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC9B;YACF;YACA;QACF;;AAGA,QAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW;AACrD,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC;AAEjD,QAAA,IACE,IAAI,CAAC,OAAO,CAAC,SAAS;YACtB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,EAChD;AACA,YAAA,IAAI,CAAC;iBACF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG;AACnC,kBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrD;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE;AAC/D,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAM,EAAE,CAAS,KAAI;gBAChE,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE;oBAClC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3C,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;gBACpE;AACF,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,IAAI,GAAG,EAAE,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,KAAK;gBACR,aAAa;AACb,oBAAA,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACnC,oBAAA,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACtB;QACF;AACA,QAAA,IAAI,GAAG,EAAE,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB;YAClC;QACF;IACF;wGA1JW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,SAAA,EARzB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3GS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA7GC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,mFAClB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEf,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,gBAAgB,oFAFhB,qBAAqB,EAAA,IAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,CAAA;;4FAiHZ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA3HrC,SAAS;+BACE,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,kBAAkB;wBAClB,YAAY;wBACZ,WAAW;wBACX,eAAe;wBACf,qBAAqB;wBACrB,WAAW;wBACX,gBAAgB;qBACjB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmGT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC;AACxD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA;;;MCrDU,yBAAyB,CAAA;AAC3B,IAAA,OAAO;AACP,IAAA,UAAU;AACnB,IAAA,IAAI;AACa,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACxC,IAAA,SAAS;AACT,IAAA,OAAO;AACA,IAAA,SAAS;AACT,IAAA,SAAS;AAEhB,IAAA,WAAA,GAAA,EAAe;IAEf,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;AAC/D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;AAE/D,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAExE,QAAA,IAAI,CAAC;aACF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG;cACjC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9C,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;YACf,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC,CAAC;QAEJ,IAAI,CAAC,aAAa,EAAE;IACtB;AAEA,IAAA,UAAU,CAAC,GAAQ,EAAA;QACjB,IAAI,GAAG,EAAE;AACP,YAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS;AAC9B,YAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;QAC5B;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;IACF;;AAGA,IAAA,iBAAiB,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpE,IAAI,CAAC,aAAa,EAAE;IACtB;;AAGA,IAAA,eAAe,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpE,IAAI,CAAC,aAAa,EAAE;IACtB;;IAGA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpE,IAAI,CAAC,aAAa,EAAE;IACtB;;IAGA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpE,IAAI,CAAC,aAAa,EAAE;IACtB;IAEA,aAAa,GAAA;;AAEX,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAChE,YAAA,IAAI,CAAC;iBACF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG;kBACjC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnC;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC;QACtE;;QAGA,IACE,IAAI,CAAC,SAAS;AACd,YAAA,IAAI,CAAC,OAAO;AACZ,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACvE;AACA,YAAA,IAAI,CAAC;iBACF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG;kBACjC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAClC;;IAGF;AAEA,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;wGAhGW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EARzB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjDS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhDC,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,mBAAmB,wIACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAqDN,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA9DrC,SAAS;+BACE,6BAA6B,EAAA,UAAA,EAC3B,IAAI,EAAA,OAAA,EACP;wBACP,gBAAgB;wBAChB,gBAAgB;wBAChB,mBAAmB;wBACnB,WAAW;wBACX,kBAAkB;wBAClB,eAAe;qBAChB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC;AACxD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA;;sBAGA;;sBACA;;;AC1BG,MAAO,mBAAoB,SAAQ,aAAa,CAAA;wGAAzC,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,SAAA,EARnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhCS;;;;;;;;;;;;;;;;;;AAkBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,oDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1BC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAoCF,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA9C/B,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,gBAAgB;wBAChB,kBAAkB;wBAClB,eAAe;wBACf,kBAAkB;wBAClB,WAAW;qBACZ,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;GAkBT,EAAA,SAAA,EAQU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,oDAAA,CAAA,EAAA;;;ACVG,MAAO,qBAAsB,SAAQ,aAAa,CAAA;AACtD,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW;AACnC,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;;QAErB,MAAM,WAAW,GAAG,0BAA0B;QAC9C,MAAM,SAAS,GAAG,cAAc;QAChC,IAAI,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;;QAGhE,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACxE,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACxB,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC;YACvD,oBAAoB,GAAG,oBAAoB,CAAC,OAAO,CACjD,iBAAiB,EACjB,WAAW,CACZ;AACH,QAAA,CAAC,CAAC;;QAGF,MAAM,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;;QAG3E,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC;;;AAI5D,QAAA,OAAO;aACJ,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,IAAI;AAC1C,aAAA,OAAO,CAAC,SAAS,EAAE,MAAM;AACzB,aAAA,IAAI,EAAE;IACX;AAEQ,IAAA,kBAAkB,CAAC,IAAY,EAAA;QACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AACnD,QAAA,QAAQ,CAAC,SAAS,GAAG,IAAI;QACzB,OAAO,QAAQ,CAAC,KAAK;IACvB;AAES,IAAA,UAAU,CAAC,KAAa,EAAA;;QAE/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IACxC;wGA1CW,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,SAAA,EARrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1BS;;;;;;;;;;;;;;;;;;GAkBT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAzBC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,cAAc,6MACd,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FA8BP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAvCjC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,kBAAkB;wBAClB,eAAe;wBACf,gBAAgB;qBACjB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;GAkBT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA;;;ACjBH;AACA;AACA,SAAS,kBAAkB,GAAA;IACzB,MAAM,UAAU,GAAG,MAAM;IACzB,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE;QAC/D,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;AAC5C,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AACrB,YAAA,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACxB,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,GAAG,EAAE,IAAI;AACT,gBAAA,QAAQ,EAAE,CAAC,GAAyB,KAAI;oBACtC,IAAI,OAAO,GAAG,KAAK,QAAQ;AAAE,wBAAA,OAAO,IAAI;oBACxC,OAAO;AACL,wBAAA,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,OAAO;AAC7B,8BAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE;AAC/C,8BAAE,CAAC;wBACL,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI;qBACvC;gBACH,CAAC;AACF,aAAA;AACF,SAAA;AACD,QAAA,KAAK,EAAE,CAAC,IAAS,KAAI;YACnB,MAAM,KAAK,GAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAC9C,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBACnB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;YAC9B;AACA,YAAA,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzB,CAAC;AACF,KAAA,CAAC;IAEF,OAAO,IAAI,MAAM,CAAC;AAChB,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK;AAC7B,KAAA,CAAC;AACJ;AAwIM,MAAO,uBACX,SAAQ,aAAa,CAAA;IAGZ,WAAW,GAAY,KAAK;IAC5B,SAAS,GAAY,KAAK;AAEnC,IAAA,MAAM;IACN,UAAU,GAAG,KAAK;IAClB,WAAW,GAAW,EAAE;AAExB,IAAA,OAAO,GAAY;QACjB,CAAC,MAAM,EAAE,QAAQ,CAAC;QAClB,CAAC,WAAW,EAAE,QAAQ,CAAC;QACvB,CAAC,MAAM,EAAE,YAAY,CAAC;QACtB,CAAC,cAAc,EAAE,aAAa,CAAC;AAC/B,QAAA,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;AACnD,QAAA,CAAC,MAAM,CAAC;QACR,CAAC,YAAY,EAAE,kBAAkB,CAAC;AAClC,QAAA,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,CAAC;KAC/D;IAEQ,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;gBACvB,MAAM,EAAE,kBAAkB,EAAE;AAC5B,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,UAAU,EAAE,IAAI;AACjB,aAAA,CAAC;QACJ;IACF;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;;AAEnB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;QACvB;IACF;AAES,IAAA,UAAU,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;IAClD;AAGA,IAAA,oBAAoB,CAAC,KAAoB,EAAA;;QAEvC,MAAM,aAAa,GACjB,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;AAC/B,YAAA,KAAK,CAAC,QAAQ;AACd,YAAA,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG;QAEjC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE;YACtD;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEA,IAAA,cAAc,CAAC,OAAY,EAAA;;AAEzB,QAAA,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;QACpC;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,EAAE;QAClC;QACA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACrD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;IAClC;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACzC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;IAClC;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU;IACpC;AAEQ,IAAA,WAAW,CAAC,IAAY,EAAA;QAC9B,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE;QACX;;QAEA,OAAO,IAAI,CAAC,OAAO,CACjB,2DAA2D,EAC3D,IAAI,CACL;IACH;wGA/FW,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,8BAAA,EAAA,EAAA,EAAA,SAAA,EARvB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtHS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,64BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5DC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,mBAAmB,0ZACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,UAAA,EAAA,QAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACtB,YAAY,8BACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FA0HL,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAtInC,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,kBAAkB;wBAClB,mBAAmB;wBACnB,WAAW;wBACX,gBAAgB;wBAChB,kBAAkB;wBAClB,sBAAsB;wBACtB,YAAY;wBACZ,cAAc;qBACf,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDT,EAAA,SAAA,EA8DU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,64BAAA,CAAA,EAAA;;sBAMA;;sBACA;;sBA2CA,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;AClMxC,MAAO,sBAAuB,SAAQ,aAAa,CAAA;AACvD,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW;wGADhC,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,SAAA,EARtB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC;AACrD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3BS;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5BC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,eAAe,8BACf,eAAe,EAAA,CAAA,EAAA,CAAA;;4FA+BN,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA1ClC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;wBACf,gBAAgB;wBAChB,WAAW;wBACX,kBAAkB;wBAClB,eAAe;wBACf,eAAe;qBAChB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;GAmBT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,4BAA4B,CAAC;AACrD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA;;;MCEU,uBAAuB,CAAA;AACzB,IAAA,OAAO;AACP,IAAA,UAAU;AACnB,IAAA,KAAK;AACL,IAAA,IAAI;IAEJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;IACjE;AAEO,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,UAAU;AACjB,IAAA,aAAa,CAAC,KAAY,EAAA;AACxB,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,gBAAgB,EAAE;AAC5C,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK;QAC3B;AACA,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,mBAAmB,EAAE;AAC/C,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK;QAC3B;AACA,QAAA,OAAO,EAAE;IACX;AACA,IAAA,UAAU,CAAC,KAAyC,EAAA;AAClD,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;AACzD,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACf;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC;IAC1E;AACA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAC9B;wGAtCW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EARvB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3BS;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA3BC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,CAAA,EAAA,CAAA;;4FA+BN,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAzCnC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;wBACf,gBAAgB;wBAChB,kBAAkB;wBAClB,eAAe;wBACf,eAAe;qBAChB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;GAmBT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA;;sBAGA;;sBACA;;;AC+BG,MAAO,mBAAoB,SAAQ,aAAa,CAAA;AAC5B,IAAA,SAAS;AAEjC,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW;AAC3C,IAAA,IAAI;AACJ,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI;IAClB;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE;IACtC;wGAZW,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,SAAA,EARnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjDS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA/CC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,0ZACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,mFAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEf,gBAAgB,8BAChB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAqDH,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnE/B,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;wBACf,gBAAgB;wBAChB,WAAW;wBACX,kBAAkB;wBAClB,eAAe;wBACf,eAAe;wBAEf,gBAAgB;wBAChB,YAAY;qBACb,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCT,EAAA,SAAA,EAQU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,kCAAA,CAAA,EAAA;;sBAGA,SAAS;uBAAC,WAAW;;;MCrFX,YAAY,CAAA;AACvB,IAAA,SAAS,CAAC,KAAU,EAAE,GAAG,IAAe,EAAA;AACtC,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE;AACf,YAAA,OAAO,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG;QACvC;aAAO;AACL,YAAA,OAAO,QAAQ;QACjB;IACF;wGAPW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACLD,IAAY,WAkBX;AAlBD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,IAAe;AACf,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,IAAe;AACf,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,KAAiB;AACjB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,IAAe;AACf,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,KAAiB;AACjB,IAAA,WAAA,CAAA,sBAAA,CAAA,GAAA,gBAAuC;AACvC,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,WAA0B;AAC1B,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AACxB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AACjC,CAAC,EAlBW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;MCAV,OAAO,CAAA;AAClB,IAAA,OAAgB,oBAAoB,GAAG,sBAAsB;AAC7D,IAAA,OAAgB,qBAAqB,GAAG,uBAAuB;AAC/D,IAAA,OAAgB,yBAAyB,GAAG,2BAA2B;AACvE,IAAA,OAAgB,oBAAoB,GAAG,sBAAsB;AAC7D,IAAA,OAAgB,kBAAkB,GAAG,oBAAoB;AACzD,IAAA,OAAgB,qBAAqB,GAAG,uBAAuB;IAE/D,OAAO,cAAc,CAAC,YAA8B,EAAA;QAClD,QAAQ,YAAY;YAClB,KAAK,OAAO,CAAC,oBAAoB;gBAC/B,OAAO,aAAa,CAAC,OAAO;YAC9B,KAAK,OAAO,CAAC,qBAAqB;gBAChC,OAAO,aAAa,CAAC,QAAQ;YAC/B,KAAK,OAAO,CAAC,yBAAyB;gBACpC,OAAO,aAAa,CAAC,YAAY;YACnC,KAAK,OAAO,CAAC,qBAAqB;gBAChC,OAAO,aAAa,CAAC,QAAQ;YAC/B,KAAK,OAAO,CAAC,oBAAoB;gBAC/B,OAAO,aAAa,CAAC,OAAO;YAC9B,KAAK,OAAO,CAAC,kBAAkB;gBAC7B,OAAO,aAAa,CAAC,KAAK;AAC5B,YAAA,KAAK,mBAAmB;gBACtB,OAAO,aAAa,CAAC,KAAK;AAC5B,YAAA;gBACE,OAAO,aAAa,CAAC,OAAO;;IAElC;IAEA,OAAO,sBAAsB,CAAC,UAAkC,EAAA;QAC9D,QAAQ,UAAU;YAChB,KAAK,aAAa,CAAC,OAAO;gBACxB,OAAO,OAAO,CAAC,oBAAoB;YACrC,KAAK,aAAa,CAAC,QAAQ;gBACzB,OAAO,OAAO,CAAC,qBAAqB;YACtC,KAAK,aAAa,CAAC,YAAY;gBAC7B,OAAO,OAAO,CAAC,yBAAyB;YAC1C,KAAK,aAAa,CAAC,QAAQ;gBACzB,OAAO,OAAO,CAAC,qBAAqB;YACtC,KAAK,aAAa,CAAC,OAAO;gBACxB,OAAO,OAAO,CAAC,oBAAoB;YACrC,KAAK,aAAa,CAAC,KAAK;gBACtB,OAAO,OAAO,CAAC,kBAAkB;AACnC,YAAA;gBACE,OAAO,OAAO,CAAC,oBAAoB;;IAEzC;;AAGF,IAAY,aAWX;AAXD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,oBAA0C;AAC5C,CAAC,EAXW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;;MC3CZ,aAAa,CAAA;AACxB,IAAA,SAAS,CAAC,KAAgC,EAAA;AACxC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;IAC7C;wGAJW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;MCiDY,sBAAsB,CAAA;AAQvB,IAAA,SAAA;AACA,IAAA,gBAAA;AACA,IAAA,EAAA;AATD,IAAA,OAAO;AACP,IAAA,QAAQ;AAEjB,IAAA,KAAK;IACL,QAAQ,GAAG,WAAW;AAEtB,IAAA,WAAA,CACU,SAAuB,EACvB,gBAAkC,EAClC,EAAc,EAAA;QAFd,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,EAAE,GAAF,EAAE;IACT;IAEH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC;aACF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG;AACnC,cAAE,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,oBAAoB,EAAE;aACtE,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,OAAO,EAAE;AAChB,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,EAAE;IAChB;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACvB,QAAQ,IAAI;YACV,KAAK,OAAO,CAAC,oBAAoB;YACjC,KAAK,OAAO,CAAC,qBAAqB;YAClC,KAAK,OAAO,CAAC,oBAAoB;YACjC,KAAK,OAAO,CAAC,yBAAyB;YACtC,KAAK,OAAO,CAAC,qBAAqB;gBAChC,OAAO,WAAW,CAAC,QAAQ;YAC7B,KAAK,OAAO,CAAC,oBAAoB;AACjC,YAAA,KAAK,mBAAmB;gBACtB,OAAO,WAAW,CAAC,QAAQ;AAC7B,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,KAAK;AACd,YAAA;gBACE,OAAO,WAAW,CAAC,QAAQ;;IAEjC;IAEA,OAAO,GAAA;QACL,QAAQ,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI;YACrC,KAAK,WAAW,CAAC,QAAQ;AACvB,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK;gBACrE;AAEF,YAAA,KAAK,WAAW,CAAC,SAAS,EAAE;AAC1B,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK;gBACrE,IAAI,CAAC,IAAI,EAAE;AACT,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;oBACjB;gBACF;gBAEA,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;oBACvC,IAAI,CAAC,KAAK,GAAG;AACX,wBAAA,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI;AAC1B,wBAAA,mBAAmB,EACjB,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC;qBACjE;gBACH;qBAAO;oBACL,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI;oBACrD,MAAM,aAAa,GACjB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;oBAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAA,WAAA,EAAc,aAAa,CAAA,CAAE,CAAC;AACjD,oBAAA,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,mBAAmB;gBACpD;gBACA;YACF;AAEA,YAAA,KAAK,WAAW,CAAC,SAAS,EAAE;AAC1B,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK;gBACvE,MAAM,QAAQ,GAAG,CAAC;AAElB,gBAAA,IAAI,MAAM,EAAE,MAAM,EAAE;AAClB,oBAAA,IAAI,CAAC,KAAK;wBACR,MAAM,CAAC,MAAM,IAAI;AACf,8BAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI;AACzD,8BAAE;AACG,iCAAA,KAAK,CAAC,CAAC,EAAE,QAAQ;iCACjB,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,mBAAmB;AACrC,iCAAA,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM;gBAC9B;qBAAO;AACL,oBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;gBACjB;gBACA;YACF;YAEA,KAAK,WAAW,CAAC,IAAI;YACrB,KAAK,WAAW,CAAC,cAAc;AAC7B,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK;gBACrE;YAEF,KAAK,WAAW,CAAC,UAAU;AACzB,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK;gBAC5C;AAEF,YAAA,KAAK,WAAW,CAAC,UAAU,EAAE;AAC3B,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK;AAC1E,gBAAA,IAAI,CAAC,KAAK;AACR,oBAAA,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC;gBACzE;YACF;AAEA,YAAA,KAAK,WAAW,CAAC,SAAS,EAAE;AAC1B,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK;AAChF,gBAAA,IAAI,CAAC,KAAK,GAAG,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,IAAI;gBACzE;YACF;YAEA,KAAK,WAAW,CAAC,MAAM;gBACrB,IAAI,CAAC,KAAK,GAAG;AACX,oBAAA,SAAS,EACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK;wBAC/D,SAAS;AACX,oBAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK;iBAC9D;gBACD;AAEF,YAAA;AACE,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK;gBACrE;;IAEN;AAEQ,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;QACrB,MAAM,WAAW,GAAG,0BAA0B;QAC9C,MAAM,SAAS,GAAG,cAAc;QAChC,IAAI,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;QAEhE,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACxE,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACxB,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC;YACvD,oBAAoB,GAAG,oBAAoB,CAAC,OAAO,CACjD,iBAAiB,EACjB,WAAW,CACZ;AACH,QAAA,CAAC,CAAC;QAEF,MAAM,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC;AAE5D,QAAA,OAAO;aACJ,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,IAAI;AAC1C,aAAA,OAAO,CAAC,SAAS,EAAE,MAAM;AACzB,aAAA,IAAI,EAAE;IACX;AAEQ,IAAA,kBAAkB,CAAC,IAAY,EAAA;QACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AACnD,QAAA,QAAQ,CAAC,SAAS,GAAG,IAAI;QACzB,OAAO,QAAQ,CAAC,KAAK;IACvB;wGA5JW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtDnC,6xOAoQc,EAAA,MAAA,EAAA,CAAA,qzBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlOV,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEX,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,uaACd,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAElB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAEZ,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAKJ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAxBlC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,kBAAkB;wBAClB,WAAW;wBAEX,kBAAkB;wBAClB,cAAc;wBACd,cAAc;wBACd,kBAAkB;wBAElB,eAAe;wBAEf,aAAa;wBACb,WAAW;wBACX,YAAY;wBAEZ,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,6xOAAA,EAAA,MAAA,EAAA,CAAA,qzBAAA,CAAA,EAAA;;sBAKA;;sBACA;;;MEkHU,wBAAwB,CAAA;AAC1B,IAAA,OAAO;AACP,IAAA,UAAU;AACV,IAAA,OAAO;AAET,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,UAAU;AAET,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAE7C,IAAA,MAAM;IAEN,UAAU,CAAC,MAAW,EAAA,EAAS;AAC/B,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAC9B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,IAAI;IACpB;IAEA,WAAW,GAAA;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAyB,EAAE;YAC7D,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,2BAA2B,CAAC;AAClE,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,IAAI,EAAE;AACJ,gBAAA,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK;AAC3C,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,MAAM,EAAE,aAAa;wBACrB,UAAU,EAAE,eAAe,CAAC,IAAI;AACjC,qBAAA;AACD,oBAAA;AACE,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,MAAM,EAAE,cAAc;wBACtB,UAAU,EAAE,eAAe,CAAC,IAAI;AACjC,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;AAClC,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;QAEF,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;gBACtC,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;AACtB,oBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC3E,oBAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,oBAAA,IAAI,CAAC,SAAS,IAAI;gBACpB;AACF,YAAA,CAAC,CAAC;QACJ;IACF;wGAnEW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EARxB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7IS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kjBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA3FC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,kBAAkB,mFAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAiJF,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA1JpC,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,YAAY;wBACZ,kBAAkB;wBAClB,eAAe;wBACf,aAAa;wBACb,WAAW;qBACZ,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFT,EAAA,SAAA,EAmDU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,kjBAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBACA;;;AC3CG,MAAO,2BAA4B,SAAQ,aAAa,CAAA;AACpC,IAAA,SAAS;AACjC,IAAA,QAAQ;AAER,IAAA,cAAc,CACZ,QAAgB,EAChB,IAAY,EACZ,OAAe,iBAAiB,EAAA;AAEhC,QAAA,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;QAE9C,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE;AAChC,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;AACzB,SAAA,CAAC;IACJ;IAEA,MAAM,CAAC,KAAU,EAAE,QAAa,EAAA;AAC9B,QAAA,QAAQ,EAAE;IACZ;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;AAEhD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC;AAEzD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ;IAC3B;AAEA,IAAA,YAAY,CAAC,KAAU,EAAA;AACrB,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;QAEhE,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,GAAG,YAAY;AAExB,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YAC5B,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;AAEA,IAAA,YAAY,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,SAAS,EAAE;IAClB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW;AAC3C,IAAA,IAAI;;AAGJ,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAEjC,OAAO,IAAI,CAAC,IAAI;IAClB;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE;IACtC;wGAjEW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,SAAA,EAR3B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1FS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4ET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAvFC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,8BACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,mFAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,87BAChB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FA8FH,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA3GvC,SAAS;+BACE,8BAA8B,EAAA,UAAA,EAC5B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;wBACf,gBAAgB;wBAChB,WAAW;wBACX,kBAAkB;wBAClB,eAAe;wBACf,eAAe;wBACf,gBAAgB;wBAChB,YAAY;qBACb,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4ET,EAAA,SAAA,EAQU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,kCAAA,CAAA,EAAA;;sBAGA,SAAS;uBAAC,WAAW;;;ACnDlB,MAAO,iBAAkB,SAAQ,gBAAgB,CAAA;AACrD,IAAA,WAAA,CACE,EAAe,EACf,WAA4B,EAE5B,gBAAkC,EAClC;;;QAGA,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,IAAI,CAAC;IAChD;IAEO,WAAW,GAAG,WAAW;AAChC,IAAA,WAAW;AAEX,IAAA,WAAW,CAAC,aAA4B,EAAA;;;AAItC,QAAA,IACE,aAAa,GAAG,kBAAkB,CAAC;YACnC,aAAa,GAAG,gBAAgB,CAAC;AACjC,YAAA,aAAa,GAAG,UAAU,CAAC,EAC3B;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1D;IACF;wGA3BW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChF9B,u5oBAskBO,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1hBH,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAGnB,gBAAA,uBAAuB,2GACvB,qBAAqB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,sBAAsB,EAAA,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,yBAAyB,uEACzB,yBAAyB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,qBAAqB,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAErB,2BAA2B,yEAC3B,qBAAqB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,2BAA2B,EAAA,QAAA,EAAA,8BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,mBAAmB,gEACnB,0BAA0B,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,uBAAuB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,qBAAqB,kEACrB,mBAAmB,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,8BAA8B,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,wBAAwB,oHACxB,wBAAwB,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,sBAAsB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,yBAAyB,uEACzB,mBAAmB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oCAAoC,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpC,gCAAgC,yIAxBhC,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FA+BH,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAxC7B,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,YAAY;wBACZ,eAAe;wBACf,mBAAmB;wBACnB,YAAY;;wBAEZ,uBAAuB;wBACvB,qBAAqB;wBACrB,sBAAsB;wBACtB,yBAAyB;wBACzB,yBAAyB;wBACzB,qBAAqB;wBACrB,uBAAuB;wBACvB,2BAA2B;wBAC3B,qBAAqB;wBACrB,2BAA2B;wBAC3B,mBAAmB;wBACnB,0BAA0B;wBAC1B,uBAAuB;wBACvB,qBAAqB;wBACrB,mBAAmB;wBACnB,8BAA8B;wBAC9B,wBAAwB;wBACxB,wBAAwB;wBACxB,sBAAsB;wBACtB,yBAAyB;wBACzB,mBAAmB;wBACnB,oCAAoC;wBACpC,gCAAgC;qBACjC,EAAA,aAAA,EAIc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,u5oBAAA,EAAA;;;ME9C1B,wBAAwB,CAAA;AAaf,IAAA,eAAA;IAZpB,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAW;AAC7B,IAAA,eAAe,GAAG,KAAK,CAAU,KAAK,2DAAC;AACvC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,qDAAC;AAEvB,IAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAO;AAEhD,IAAA,OAAO;AACP,IAAA,WAAW;AACX,IAAA,aAAa;AACb,IAAA,IAAI;AAEJ,IAAA,WAAA,CAAoB,eAAgC,EAAA;QAAhC,IAAA,CAAA,eAAe,GAAf,eAAe;QACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB;IAC3D;IACA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;YACxB,IAAI,CAAC,eAAe,CAAC,qBAAqB;YAC1C,IAAI,CAAC,eAAe,CAAC,iBAAiB;AACvC,SAAA,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACjB,YAAA,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC,GAAG,CAAC;AAC5C,YAAA,IAAI,cAAc,KAAK,MAAM,IAAI,CAAC,kBAAkB,EAAE;AACpD,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACrB;iBAAO;AACL,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACtB;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;IAC1B;wGAhCW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAY,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAFxB,EAAE,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9Bf,g+BAkCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDZI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAX,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,cAAc,uaACd,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAMF,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAdpC,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,YAAY;wBACZ,eAAe;wBACf,cAAc;wBACd,WAAW;AACZ,qBAAA,EAAA,SAAA,EAGU,EAAE,EAAA,QAAA,EAAA,g+BAAA,EAAA;;sBAOZ;;sBACA;;;AEoDG,MAAO,mBAAoB,SAAQ,gBAAgB,CAAA;IAC9C,iBAAiB,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5C,WAAW,GAAG,WAAW;AAChC,IAAA,WAAW;AACX,IAAA,aAAa;AACL,IAAA,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAExC,IAAA,WAAW,CAAC,aAA6B,EAAA;AACvC,QAAA,IACE,aAAa,GAAG,kBAAkB,CAAC;YACnC,aAAa,GAAG,gBAAgB,CAAC;AACjC,YAAA,aAAa,GAAG,UAAU,CAAC,EAC3B;AACA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAO,KAAK,EAAE,CAAC,IAAI,CAAC;AACrE,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1D;IACF;wGAjBW,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,+KC1FhC,6snBAsbc,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrYV,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,iZACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;;;;;;AAOnB,gBAAA,eAAe,+BAIf,uBAAuB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,qBAAqB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,sBAAsB,oEACtB,yBAAyB,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,yBAAyB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,qBAAqB,mEAErB,2BAA2B,EAAA,QAAA,EAAA,8BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,qBAAqB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,2BAA2B,wEAC3B,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAEf,gBAAA,mBAAmB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,0BAA0B,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,uBAAuB,uGACvB,qBAAqB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,mBAAmB,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,8BAA8B,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,wBAAwB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,WAAW,+BACX,sBAAsB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAEtB,gBAAA,oCAAoC,oFACpC,mBAAmB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA;;;gBAxBnB,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,CAAA;;4FA6BH,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA7C/B,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;;;;;;;wBAOnB,eAAe;;;wBAGf,YAAY;wBACZ,uBAAuB;wBACvB,qBAAqB;wBACrB,sBAAsB;wBACtB,yBAAyB;wBACzB,yBAAyB;wBACzB,qBAAqB;wBACrB,uBAAuB;wBACvB,2BAA2B;wBAC3B,qBAAqB;wBACrB,2BAA2B;wBAC3B,eAAe;;wBAEf,mBAAmB;wBACnB,0BAA0B;wBAC1B,uBAAuB;wBACvB,qBAAqB;wBACrB,mBAAmB;wBACnB,8BAA8B;wBAC9B,wBAAwB;wBACxB,WAAW;wBACX,sBAAsB;;wBAEtB,oCAAoC;wBACpC,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,6snBAAA,EAAA;;sBAKA;;;MErFU,UAAU,CAAA;AACrB;;;;;;AAMG;IAEH,SAAS,CAAC,KAAa,EAAE,KAAa,EAAA;AACpC,QAAA,IAAI,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE;YACzB,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM;QAC3C;AACA,QAAA,OAAO,KAAK;IACd;wGAdW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA;;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAJtB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACLD;IAEY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACvB,CAAC,EARW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;;MC0BZ,+BAA+B,CAAA;AACjC,IAAA,IAAI;IACJ,UAAU,GAAG,oBAAoB;AAEhC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAO;IAEjD,iBAAiB,GAAG,iBAAiB;AAErC,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI;QACxC,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACvC;AAEA,IAAA,gBAAgB,CAAC,KAAgC,EAAA;QAC/C,OAAO,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK;IAC7D;AAEA,IAAA,aAAa,CAAC,IAAS,EAAA;AACrB,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;AACxC,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE;AACxC,QAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAChD;AAEA,IAAA,gBAAgB,CAAC,IAAS,EAAA;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACzC,QAAA,OAAO,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ,GAAG,SAAS;IACpD;AAEA,IAAA,oBAAoB,CAAC,IAAS,EAAA;AAC5B,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;QAC3C,OAAO,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,QAAQ;IACtE;AAEA,IAAA,gBAAgB,CAAC,IAAS,EAAA;AACxB,QAAA,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,WAAW,EAAE;IACtD;wGAnCW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5B5C,+qSAoRA,EAAA,MAAA,EAAA,CAAA,q7DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjQI,YAAY,qnBACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,YAAY,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,YAAY,8IACZ,UAAU,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,CAAA;;4FAGD,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAf3C,SAAS;+BACE,kCAAkC,EAAA,UAAA,EAChC,IAAI,EAAA,OAAA,EAGP;wBACP,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb,YAAY;wBACZ,eAAe;wBACf,YAAY;wBACZ,UAAU;AACX,qBAAA,EAAA,QAAA,EAAA,+qSAAA,EAAA,MAAA,EAAA,CAAA,q7DAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBAEA;;;MEAU,kBAAkB,CAAA;AACpB,IAAA,eAAe;IACf,UAAU,GAAG,IAAI;IACjB,aAAa,GAAG,IAAI;IACpB,WAAW,GAAG,IAAI;IAClB,UAAU,GAAG,oBAAoB;AAEhC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAO;IAEnD,aAAa,GAAG,aAAa;AAE7B,IAAA,SAAS,GAAG;AACV,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,KAAK,EAAE,EAAE;KACV;wGAdU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,+RChC/B,kmFA2EA,EAAA,MAAA,EAAA,CAAA,q7DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtDI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,8BACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,YAAY,8BACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEb,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,+BAA+B,wPAF/B,UAAU,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,CAAA;;4FAKD,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAjB9B,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EAGP;wBACP,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb,WAAW;wBACX,YAAY;wBACZ,aAAa;wBACb,UAAU;wBACV,YAAY;wBACZ,+BAA+B;AAChC,qBAAA,EAAA,QAAA,EAAA,kmFAAA,EAAA,MAAA,EAAA,CAAA,q7DAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;;MEXU,2BAA2B,CAAA;AACjB,IAAA,MAAM;IAElB,KAAK,GAAW,eAAe;IAC/B,IAAI,GAAU,EAAE;IAChB,OAAO,GAAU,EAAE;IACnB,kBAAkB,GAAQ,EAAE;IAC5B,UAAU,GAAW,KAAK;IAC1B,YAAY,GAAY,KAAK;AAE9B,IAAA,aAAa,GAAG,MAAM,CAAC,KAAK,yDAAC;IACrC,IACI,UAAU,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;AACU,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAW;AAE9C,IAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;AACvC,IAAA,qBAAqB,GAAG,IAAI,YAAY,EAAQ;IAE1D,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEpD,IAAA,aAAa,CAAC,MAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;QAElC,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEA,IAAA,eAAe,CAAC,GAAQ,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;IAC3B;wGAtCW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5BxC,4iBAoBW,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDDP,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,cAAc,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAKH,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAbvC,SAAS;+BACE,8BAA8B,EAAA,UAAA,EAC5B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,YAAY;wBACZ,cAAc;wBACd,eAAe;wBACf,YAAY;AACb,qBAAA,EAAA,QAAA,EAAA,4iBAAA,EAAA;;sBAKA,SAAS;uBAAC,QAAQ;;sBAElB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBAIA;;sBAEA;;sBACA;;sBACA;;;IE/CS;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AACxB,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACnB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;;MCGf,iBAAiB,CAAA;AAC5B,IAAA,SAAS,CAAC,KAAc,EAAA;AACtB,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;AACpD,QAAA,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3D,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;IACzC;wGALW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE;;;MCCpC,YAAY,CAAA;AACvB,IAAA,SAAS,CAAC,KAAc,EAAA;AACtB,QAAA,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE;AACrC,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC;QACT,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,YAAA,CAAC,GAAG,CAAC,GAAG,IAAI;AACZ,YAAA,CAAC,EAAE;QACL;QACA,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;AAC1C,QAAA,OAAO,CAAA,EAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,EAAE;IAC1C;wGAbW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE;;;MCsC/B,wBAAwB,CAAA;;AAER,IAAA,KAAK;;AAGL,IAAA,IAAI;;AAGvB,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B;;;AAGG;AACK,IAAA,EAAE,GAAG,MAAM,CAAU,IAAI,8CAAC;IAElC,QAAQ,GAAA;;QAEN,IAAI,CAAC,IAAI,EAAE;;AAGX,QAAA,IAAI,CAAC,IAAI,EAAE,EAAE;AACV,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;aAChC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC;;AAGA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE;IAC7C;;AAGA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,IAAI,MAAM;IAClD;;IAGA,IAAI,GAAA;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC;AAEA;;;AAGG;IACK,IAAI,GAAA;AACV,QAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,IAAI,CAAC;IACzC;;AAIA;;;AAGG;IACK,aAAa,GAAA;AACnB,QAAA,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,WAAW,EAAE;AACrE,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;AACtC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;AACtC,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;AACM,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;AACnB,QAAA,OAAO,OAAO,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,IAAI;AAC1C,IAAA,CAAC,gDAAC;AAEF;;;;AAIG;AACM,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;AACnB,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;QACnB,IAAI,CAAC,YAAY,IAAI;AAAE,YAAA,OAAO,CAAC;QAE/B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAA,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC;AACtC,IAAA,CAAC,qDAAC;AAEF;;;;AAIG;AACM,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAChC,QAAA,MAAM,CAAC,GAAQ,IAAI,CAAC,EAAE,EAAE;AACxB,QAAA,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;AAE5C,QAAA,MAAM,KAAK,GAAG,CAAC,EAAE,SAAS,IAAI,IAAI;AAClC,QAAA,MAAM,KAAK,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI;AAEhC,QAAA,MAAM,EAAE,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;AACzC,QAAA,MAAM,EAAE,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;QAEzC,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;AAAE,YAAA,OAAO,IAAI;QAE3C,OAAO;AACL,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;SAChD;AACH,IAAA,CAAC,oDAAC;AAEF;;;AAGG;AACM,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,CAAC,GAAQ,IAAI,CAAC,EAAE,EAAE;AACxB,QAAA,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;QAE5C,OAAO;YACL,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI;YACjC,QAAQ,EAAE,CAAC,EAAE,QAAQ,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI;AACxC,YAAA,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,IAAI;AACvB,YAAA,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,IAAI;SACxB;AACH,IAAA,CAAC,kDAAC;AAEF;;;AAGG;AACM,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,CAAC,GAAQ,IAAI,CAAC,EAAE,EAAE;AACxB,QAAA,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;QAE5C,OAAO;YACL,QAAQ,EAAE,CAAC,EAAE,QAAQ,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI;AACxC,YAAA,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI;AACrB,YAAA,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI;SACtB;AACH,IAAA,CAAC,kDAAC;AAEF;;;;AAIG;AACM,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,CAAC,GAAQ,IAAI,CAAC,EAAE,EAAE;QACxB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI;;AAG1D,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACzB,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;YACrF,OAAO,GAAG,EAAE,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC;QAChC;;AAGA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AACnC,QAAA,MAAM,GAAG,GAAG,CAAA,WAAA,EAAc,MAAM,EAAE;QAElC,QACE,CAAC,EAAE,KAAK;AACR,YAAA,CAAC,EAAE,mBAAmB;AACtB,YAAA,CAAC,EAAE,IAAI;YACP,CAAC,GAAG,GAAG,CAAC;AACR,YAAA,CAAC,EAAE,KAAK;AACR,YAAA,IAAI;AAER,IAAA,CAAC,mDAAC;AAEF;;;AAGG;AACM,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,CAAC,GAAQ,IAAI,CAAC,EAAE,EAAE;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAEpD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AACnC,QAAA,MAAM,GAAG,GAAG,CAAA,WAAA,EAAc,MAAM,EAAE;QAElC,MAAM,QAAQ,GAAG,CAAC;QAClB,MAAM,MAAM,GAAG;AACZ,aAAA,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,mBAAmB,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;aAC1F,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;aAC3E,GAAG,CAAC,CAAC,CAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;QAE7B,IAAI,CAAC,MAAM,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AAE/B,QAAA,OAAO,MAAM,CAAC,MAAM,IAAI;AACtB,cAAE,MAAM,CAAC,IAAI,CAAC,IAAI;AAClB,cAAE,CAAA,EAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACnD,IAAA,CAAC,mDAAC;AAEF;;;AAGG;AACM,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;QACnB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI;QAE1D,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;AAC9F,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;AAEpD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE;AAC9D,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,OAAO,CAAC,EAAE,QAAQ,IAAI,IAAI;QAC5B;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE;YAC1D,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,IAAI;QACpC;;AAGA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC5D,YAAA,OAAO,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC9C;QAEA,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACnD,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC;AAClB,IAAA,CAAC,uDAAC;wGA3NS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxCrC,00KAyLc,EAAA,MAAA,EAAA,CAAA,qzBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9JV,YAAY,uMACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEf,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAEb,iBAAiB,iDACjB,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAKH,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlBpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,cAC1B,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;wBAEf,YAAY;wBACZ,aAAa;wBAEb,iBAAiB;wBACjB,YAAY;AACb,qBAAA,EAAA,QAAA,EAAA,00KAAA,EAAA,MAAA,EAAA,CAAA,qzBAAA,CAAA,EAAA;;sBAMA,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAGxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;ME4Dd,gCAAgC,CAAA;AAC3C;;;;AAIG;IACM,KAAK,GAAe,EAAE;AAE/B;;;AAGG;IACM,eAAe,GAAG,2BAA2B;AAE9C,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpC,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAEtC;;;AAGG;IACH,KAAK,GAAoB,IAAI;AAE7B;;;AAGG;IACH,QAAQ,GAAG,KAAK;AAEhB;;AAEG;AACK,IAAA,QAAQ,GAAqC,MAAK,EAAE,CAAC;AAE7D;;;AAGG;AACK,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAExC;;;AAGG;AACH,IAAA,UAAU,CAAC,KAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI;IAC5B;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5B;AAEA;;;;AAIG;IACH,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,QAAQ;YAAE;;AAGnB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;YACvB,IAAI,CAAC,SAAS,EAAE;YAChB;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA;;;;;;;AAOG;IACH,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,QAAQ;YAAE;QAEnB,IAAI,CAAC,SAAS,EAAE;QAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACtD,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;AACpD,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,IAAI,EAAE;gBACJ,SAAS,EAAE,IAAI,CAAC,KAAK;AACrB,gBAAA,OAAO,EAAE;AACP,oBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,EAAE;AAC1E,oBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,EAAE;AAClF,oBAAA,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,EAAE;AAC5E,oBAAA,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,EAAE;AAC7E,iBAAA;AACF,aAAA;AACD,YAAA,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;AAClC,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;QAEF,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,QAAqC,KAAI;AAC/D,YAAA,IAAI,CAAC,QAAQ;gBAAE;;AAGf,YAAA,MAAM,IAAI,GACR,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,OAAO,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;AACvD,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC;AAEzE,YAAA,IAAI,CAAC,KAAK,GAAG,QAAQ;YAErB,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACzB;YAEA,IAAI,CAAC,SAAS,EAAE;AAClB,QAAA,CAAC,CAAC;IACJ;wGAvIW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAzFhC;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gCAAgC,CAAC;AAC/D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ghBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1ES,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,yUAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FA0FzD,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBA7F5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oCAAoC,EAAA,UAAA,EAClC,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC,EAAA,SAAA,EAC1D;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,sCAAsC,CAAC;AAC/D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ghBAAA,CAAA,EAAA;;sBAsBA;;sBAMA;;;MC/DU,0BAA0B,CAAA;AACrC;;;AAGG;IACM,OAAO,GAAG,KAAK;AAEhB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC;;;AAGG;IACH,KAAK,GAAkB,IAAI;AAE3B;;AAEG;AACK,IAAA,QAAQ,GAA+B,MAAK,EAAE,CAAC;AAEvD;;;AAGG;AACK,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAExC;;AAEG;IACK,UAAU,GAAG,KAAK;AAE1B;;;;AAIG;AACH,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU;IACxC;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,CAAM,EAAA;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;;;;AAKG;IACH,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,QAAQ;YAAE;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;AAG1C,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;;AAGG;IACH,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA;;;;AAIG;AACK,IAAA,YAAY,CAAC,CAAM,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;QAE9C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AAEnB,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,EAAE;QAChD,MAAM,EAAE,GAAG,oCAAoC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAE9D,QAAA,OAAO,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,IAAI;IAC3C;wGArHW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAR1B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,0BAA0B,CAAC;AACzD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1CS;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ugBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAVS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FA6C3C,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAjDtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,UAAA,EAC5B,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAC7C;;;;;;;;;GAST,EAAA,SAAA,EA2BU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,gCAAgC,CAAC;AACzD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,ugBAAA,CAAA,EAAA;;sBAOA;;;MCkDU,kCAAkC,CAAA;AAC7C;;;;;;;AAOG;IACM,OAAO,GAAe,EAAE;AAEjC;;;AAGG;IACM,OAAO,GAAG,KAAK;AAEhB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC;;AAEG;IACH,KAAK,GAAkB,IAAI;AAE3B;;;AAGG;IACH,YAAY,GAAkB,IAAI;AAElC;;AAEG;IACK,UAAU,GAAG,KAAK;AAE1B;;AAEG;AACK,IAAA,QAAQ,GAA+B,MAAK,EAAE,CAAC;AAEvD;;;AAGG;AACK,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAExC;;;;AAIG;AACH,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU;IACxC;;AAIA;;;AAGG;AACH,IAAA,UAAU,CAAC,CAAM,EAAA;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;AAIA;;;AAGG;IACH,MAAM,CAAC,OAAY,EAAE,EAAS,EAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ;YAAE;QAEnB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB;AAEA;;;;;;AAMG;IACH,MAAM,CAAC,KAAa,EAAE,OAAY,EAAA;QAChC,IAAI,IAAI,CAAC,QAAQ;YAAE;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;;AAGvC,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB,OAAO,CAAC,IAAI,EAAE;YACd;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAEjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACvB,OAAO,CAAC,IAAI,EAAE;IAChB;AAEA;;;;;;AAMG;AACK,IAAA,cAAc,CAAC,CAAM,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;QAE9C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;;AAGnB,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,EAAE;AAChD,QAAA,IAAI,oCAAoC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,QAAQ,CAAC,WAAW,EAAE;;AAGtF,QAAA,OAAO,CAAC;IACV;wGAxJW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAnGlC;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kCAAkC,CAAC;AACjE,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ioBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAtCS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAoGvC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAxG9C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uCAAuC,EAAA,UAAA,EACrC,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,YAAY,EAAE,WAAW,EAAE,aAAa,CAAC,EAAA,SAAA,EACxC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wCAAwC,CAAC;AACjE,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ioBAAA,CAAA,EAAA;;sBAuEA;;sBAMA;;;MClDU,2BAA2B,CAAA;AACtC;;;AAGG;AACM,IAAA,MAAM;AAEf;;;AAGG;IACM,OAAO,GAAG,KAAK;AAEhB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC;;;AAGG;IACK,UAAU,GAAG,KAAK;AAE1B;;;AAGG;IACH,SAAS,GAAgB,IAAI;AAE7B;;;AAGG;IACH,OAAO,GAAgB,IAAI;AAE3B;;AAEG;AACK,IAAA,QAAQ,GAA+B,MAAK,EAAE,CAAC;AAEvD;;;AAGG;AACK,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAExC;;;AAGG;AACH,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU;IACxC;AAEA;;;;;AAKG;AACH,IAAA,UAAU,CAAC,CAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC;AACvD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;;AAGnD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;;AAG5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;;AAGG;IACH,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA;;;AAGG;AACH,IAAA,aAAa,CAAC,CAAc,EAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI;QAC1B,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA;;;AAGG;AACH,IAAA,WAAW,CAAC,CAAc,EAAA;QACxB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI;QACxB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA;;;;AAIG;IACK,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;QAEA,IAAI,CAAC,QAAQ,CAAC;YACZ,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;;AAGG;AACK,IAAA,WAAW,CAAC,CAAuB,EAAA;AACzC,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AAEnB,QAAA,IAAI,CAAC,YAAY,IAAI,EAAE;AACrB,YAAA,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC;QACtC;QAEA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;;QAGnB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC;QAC9C,IAAI,CAAC,EAAE;YACL,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAChC,YAAA,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK;QAC9C;;AAGA,QAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;AACtB,QAAA,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE;IACxC;wGAtKW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAtD3B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA9CS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,8BAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAuD3D,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA3DvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,cAC9B,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,CAAC,EAAA,SAAA,EAC5D;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;sBAcA;;sBAMA;;;MC1CU,qBAAqB,CAAA;AAChC;;;AAGG;IACM,OAAO,GAAG,KAAK;AAExB;;;AAGG;IACM,MAAM,GAAG,KAAK;AAEvB;;AAEG;AACM,IAAA,MAAM;AAEP,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC;;;AAGG;IACH,KAAK,GAAG,KAAK;AAEb;;AAEG;AACK,IAAA,QAAQ,GAAyB,MAAK,EAAE,CAAC;AAEjD;;;AAGG;AACK,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAExC;;AAEG;IACK,UAAU,GAAG,KAAK;AAE1B;;;;AAIG;AACH,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU;IACxC;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,CAAM,EAAA;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;;;;AAKG;AACH,IAAA,cAAc,CAAC,IAAa,EAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ;YAAE;QAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;;AAG3C,QAAA,IAAI,UAAU,KAAK,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;AAEG;IACH,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA;;;AAGG;AACK,IAAA,aAAa,CAAC,CAAM,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK;AAAE,YAAA,OAAO,CAAC;AAEvC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG;AAAE,YAAA,OAAO,IAAI;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG;AAAE,YAAA,OAAO,KAAK;AAEtC,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACzB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YAChC,IAAI,CAAC,KAAK,MAAM;AAAE,gBAAA,OAAO,IAAI;YAC7B,IAAI,CAAC,KAAK,OAAO;AAAE,gBAAA,OAAO,KAAK;QACjC;QAEA,OAAO,CAAC,CAAC,CAAC;IACZ;wGAjIW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EARrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxBS;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,oDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAXS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FA2B5C,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA/BjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,YAAY,EAAE,WAAW,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAC9C;;;;;;;;;;GAUT,EAAA,SAAA,EAQU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,oDAAA,CAAA,EAAA;;sBAOA;;sBAMA;;sBAKA;;;AC9CH;;;;;;;;;;;;;AAaG;MAgDU,4BAA4B,CAAA;AACvC;;;;;AAKG;AACM,IAAA,OAAO;AAEhB;;;;;AAKG;AACM,IAAA,IAAI;AAEb;;;AAGG;IACM,OAAO,GAAG,KAAK;AAExB;;;AAGG;IACM,MAAM,GAAG,KAAK;AAEvB;;;AAGG;AACM,IAAA,MAAM;AAEf;;AAEG;IACM,QAAQ,GAAG,KAAK;AAEzB;;;AAGG;IACM,YAAY,GAAW,KAAK;AAE7B,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC;;;AAGG;IACH,KAAK,GAAG,EAAE;AAEV;;AAEG;AACK,IAAA,QAAQ,GAAwB,MAAK,EAAE,CAAC;AAEhD;;;AAGG;AACK,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAExC;;AAEG;IACK,UAAU,GAAG,KAAK;AAE1B;;;;AAIG;AACH,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU;IACxC;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,CAAM,EAAA;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;;AAGpC,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;;;;;;AAOG;AACH,IAAA,eAAe,CAAC,KAAU,EAAA;QACxB,IAAI,IAAI,CAAC,QAAQ;YAAE;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;;AAGtC,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;AAEG;IACH,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA;;;;;AAKG;AACK,IAAA,aAAa,CAAC,KAAU,EAAA;QAC9B,MAAM,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,KAAK;AACvC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAChC;AAEA;;;;AAIG;AACK,IAAA,eAAe,CAAC,CAAM,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;AAC5C,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC;IAClB;wGAzKW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAR5B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,4BAA4B,CAAC;AAC3D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnCS;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1BC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,eAAe,8BACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAuCL,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBA/CxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,cAC9B,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,YAAY;wBACZ,WAAW;wBACX,eAAe;wBACf,cAAc;qBACf,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;GAqBT,EAAA,SAAA,EAQU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kCAAkC,CAAC;AAC3D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,4CAAA,CAAA,EAAA;;sBASA;;sBAQA;;sBAMA;;sBAMA;;sBAMA;;sBAKA;;sBAMA;;;MCrCU,wBAAwB,CAAA;;AAER,IAAA,KAAK;;AAGL,IAAA,IAAI;AAE/B;;;AAGG;IACM,QAAQ,GAAG,KAAK;AAEzB;;;AAGG;IACM,WAAW,GAAG,KAAK;;AAGpB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG/B,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGvB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5C;;;AAGG;AACM,IAAA,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;AACrC,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,UAAU,EAAE,YAAY;AACxB,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,sBAAsB,EAAE,wBAAwB;AAChD,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,cAAc,EAAE,gBAAgB;AAChC,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,WAAW,EAAE,aAAa;AAC1B,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,cAAc,EAAE,gBAAgB;AAChC,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,aAAa,EAAE,eAAe;AAC9B,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,gBAAgB,EAAE,kBAAkB;AACpC,QAAA,UAAU,EAAE,YAAY;AACxB,QAAA,IAAI,EAAE,MAAM;AAC2B,KAAA,CAAC;;AAG1C,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE;IAC7C;;AAGA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,IAAI,MAAM;IAClD;;AAGA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE;AACjB,cAAE;AACF,eAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACvD;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX;;;;AAIG;QACH,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa;AACxC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;aAChC,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC7C;;IAGA,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,mBAAmB,IAAI,IAAI;IAChD;;IAGA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,IAAI,IAAI;IAC1D;AAEA;;;AAGG;IACH,UAAU,GAAA;AACR,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ;IAClD;AAEA;;;AAGG;IACH,UAAU,GAAA;AACR,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO;IACpD;;IAGA,IAAI,GAAA;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC;AAEA;;;AAGG;IACH,YAAY,GAAA;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK;AAC5B,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;AAC5C,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC;;AAGtF,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACzB,YAAA,OAAQ,CAAS,CAAC,KAAK,IAAK,CAAS,CAAC,IAAI,IAAK,CAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACxF;AAEA,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC;IAClB;AAEA;;;AAGG;IACH,SAAS,GAAA;AACP,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,QAAA,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;IACpD;AAEA;;;;;;AAMG;IACH,QAAQ,GAAA;AACN,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,CAAC,EAAE,MAAM;AAAE,YAAA,OAAO,IAAI;;AAG3B,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,UAAU;AAC3C,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;AAAE,YAAA,OAAO,WAAW;AAC7C,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;AAAE,YAAA,OAAO,WAAW;AAC7C,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,OAAO;AACrC,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,SAAS;AACzC,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACjC,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;;AAGjC,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;AAAE,YAAA,OAAO,gBAAgB;AACvD,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;AAAE,YAAA,OAAO,YAAY;AAC/C,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;AAAE,YAAA,OAAO,aAAa;AACjD,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,SAAS;AACzC,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;AAAE,YAAA,OAAO,WAAW;;AAG7C,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,QAAQ;AACvC,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;AAAE,YAAA,OAAO,aAAa;AACjD,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,QAAQ;;AAGvC,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;IACzC;AAEA;;;AAGG;IACH,SAAS,GAAA;AACP,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzB,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE;QAEvB,QAAQ,CAAC;AACP,YAAA,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,2CAA2C,CAAC;AAE5E,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mCAAmC,EAAE;oBACjE,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,cAAc;AACnD,iBAAA,CAAC;AAEJ,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kCAAkC,EAAE;oBAChE,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,cAAc;AACnD,iBAAA,CAAC;AAEJ,YAAA,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sCAAsC,CAAC;AAEvE,YAAA,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,6CAA6C,CAAC;AAE9E,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;AAErD,YAAA,KAAK,aAAa;;AAEhB,gBAAA,QACE,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC;oBACzB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4CAA4C,CAAC;AAGxE,YAAA,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4CAA4C,CAAC;AAE7E,YAAA,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mDAAmD,CAAC;AAEpF,YAAA,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iCAAiC,CAAC;AAElE,YAAA,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iDAAiD,CAAC;AAElF,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4DAA4D,EAAE;oBAC1F,UAAU,EAAE,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;oBACvC,UAAU,EAAE,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,GAAG;AACnC,iBAAA,CAAC;YAEJ,KAAK,SAAS,EAAE;;gBAEd,MAAM,EAAE,GAAG,yDAAyD;gBACpE,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,eAAe;AAE9D,gBAAA,IAAI,eAAe,KAAK,EAAE,EAAE;oBAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,uCAAuC,CAAC;gBACxE;gBACA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kCAAkC,CAAC;YACnE;AAEA,YAAA;gBACE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kCAAkC,CAAC;;IAEvE;AAEA;;;AAGG;IACH,SAAS,GAAA;AACP,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,QAAA,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK;QAElB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI;;AAG1D,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;YAC7B,MAAM,IAAI,GAAI,IAAI,CAAC,KAAK,EAAE,aAAqB,EAAE,OAAO,IAAI,EAAE;AAC9D,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACzB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;AACjD,gBAAA,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,CAAC;gBAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;YACtC;;YAGA,MAAM,KAAK,GAAI,CAAS,CAAC,KAAK,IAAK,CAAS,CAAC,KAAK;YAClD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC;;QAGA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,YAAY,IAAI,EAAE;AAC7C,YAAA,OAAO,CAAC,CAAC,kBAAkB,EAAE;QAC/B;;AAGA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;AAC5D,YAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI;QACzD;AAEA,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC;IAClB;IAEA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ;IAClD;wGAxSW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,kLCjFrC,48NAuLM,EAAA,MAAA,EAAA,CAAA,ocAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1IF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,62BACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;AAGf,gBAAA,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,gBAAgB,6tCAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAGb,gBAAA,uBAAuB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,qBAAqB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,2BAA2B,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,uBAAuB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,kCAAkC,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClC,qBAAqB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,yBAAyB,uEACzB,gCAAgC,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAEhC,gBAAA,4BAA4B,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,0BAA0B,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,mBAAmB,gEACnB,2BAA2B,EAAA,QAAA,EAAA,8BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;gBAG3B,wBAAwB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAMf,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAxCpC,SAAS;+BACE,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;;wBAGf,eAAe;wBACf,cAAc;wBACd,iBAAiB;wBACjB,cAAc;wBACd,iBAAiB;wBACjB,YAAY;wBACZ,gBAAgB;wBAChB,aAAa;;wBAGb,uBAAuB;wBACvB,qBAAqB;wBACrB,2BAA2B;wBAC3B,uBAAuB;wBACvB,kCAAkC;wBAClC,qBAAqB;wBACrB,yBAAyB;wBACzB,gCAAgC;;wBAEhC,4BAA4B;wBAC5B,0BAA0B;wBAC1B,mBAAmB;wBACnB,2BAA2B;;wBAG3B,wBAAwB;qBACzB,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,48NAAA,EAAA,MAAA,EAAA,CAAA,ocAAA,CAAA,EAAA;;sBAI9C,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAGxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAMxB;;sBAMA;;;MEnFU,wBAAwB,CAAA;AACR,IAAA,KAAK;AACL,IAAA,IAAI;IACtB,QAAQ,GAAG,KAAK;wGAHd,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,sJCfrC,sWASM,EAAA,MAAA,EAAA,CAAA,sFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDCM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,gVAAE,wBAAwB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAK1D,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,EAAE,wBAAwB,CAAC,EAAA,eAAA,EAGrD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,sWAAA,EAAA,MAAA,EAAA,CAAA,sFAAA,CAAA,EAAA;;sBAG9C,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB;;;AEZH;;;AAGG;MACU,wBAAwB,GACnC,IAAI,cAAc,CAAoB,0BAA0B;;ACHlE;AACA;AACA,MAAM,iBAAiB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AAClE,MAAM,iBAAiB,GAAG,MAAM,CAAC,gCAAgC,CAAC;MAGrD,0BAA0B,CAAA;AAa3B,IAAA,QAAA;;AAXF,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B,IAAA,WAAA;AACE;;;;;AAKG;IAGK,QAA4B,EAAA;QAA5B,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACf;AAEH;;;;;;;AAOG;IACH,QAAQ,CAAC,IAAe,EAAE,UAA0D,EAAA;AAClF,QAAA,MAAM,IAAI,GAAG,UAAU,IAAI,EAAE;AAC5B,QAAA,IAAY,CAAC,iBAAiB,CAAC,GAAG,IAAI;;QAGvC,MAAM,GAAG,GAAoB,IAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE;AAClE,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAClC,QAAA,IAAY,CAAC,iBAAiB,CAAC,GAAG,EAAE;;;QAIrC,MAAM,IAAI,GAAmB,EAAE;AAE/B,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;AACnC,YAAA,IAAI,CAAC,IAAI;gBAAE;AAEX,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,QAAQ;AAEvC,YAAA,IAAI,CAAC,IAAI,CACP,IAAI,CAAC;AACF,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;iBAChC,SAAS,CAAC,MAAK;;;AAGd,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;YAClC,CAAC,CAAC,CACL;QACH;AAEC,QAAA,IAAY,CAAC,iBAAiB,CAAC,GAAG,IAAI;IACzC;AAEA;;;;;;;;;;;;;AAaG;IACH,MAAM,GAAG,CAAC,IAAe,EAAA;QACvB,MAAM,UAAU,GAAiC,IAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE;;AAGtF,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;;QAGjC,IAAI,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAEjD,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,KAAK;;QAGzC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,KAAK;;AAGrC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC;;QAGxC,IAAI,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;;AAG9B,QAAA,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;YAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;AAChC,YAAA,IAAI,CAAC,GAAG;gBAAE;AAEV,YAAA,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAClE,MAAM,MAAM,GACV,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,IAAK,GAAgC;AAE3D,YAAA,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AAChC,YAAA,IAAI,CAAC,IAAI;gBAAE;AAEX,YAAA,IAAI,MAAM,EAAE,OAAO,KAAK,KAAK,EAAE;AAC7B,gBAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,QAAQ;AACvC,gBAAA,MAAM,GAAG,GACP,MAAM,EAAE,OAAO;AACf,oBAAA,4CAA4C;;gBAG9C,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC;;gBAG3D,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,CAAC,WAAW,EAAE;AAElB,gBAAA,OAAO,KAAK;YACd;QACF;QAEA,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA;;;AAGG;IACK,WAAW,CAAC,IAAqB,EAAE,QAAgB,EAAA;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YAAE;AAE9B,QAAA,MAAM,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;AACvC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACxD;AAEA;;;AAGG;IACK,iBAAiB,CAAC,IAAe,EAAE,UAAuC,EAAA;AAChF,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC;AAEhF,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE,MAAM;gBAAE;AAEnB,YAAA,MAAM,UAAU,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;AAC7C,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;;YAGhD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;AACpE,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;AACK,IAAA,sBAAsB,CAAC,IAAe,EAAA;AAC5C,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAkB,KAAI;YAC1D,CAAC,CAAC,aAAa,EAAE;YACjB,CAAC,CAAC,WAAW,EAAE;AACjB,QAAA,CAAC,CAAC;IACJ;AAxKW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,kBAY3B,wBAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAZvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA;;4FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAY7B;;0BACA,MAAM;2BAAC,wBAAwB;;;ACdpC;;;;;;;;;;AAUG;AACG,SAAU,uBAAuB,CAAC,IAAgC,EAAA;AACtE,IAAA,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW;IAEvC,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,KAAsB;AAExC,QAAA,MAAM,KAAK,GAAG,CAAC,EAAE,SAAS,IAAI,IAAI;AAClC,QAAA,MAAM,KAAK,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI;;;;AAKhC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;AACpB,YAAA,OAAO,WAAW,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI;QACjD;;QAGA,IAAI,WAAW,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;QAC5B;;AAGA,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;;AAGjC,QAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAY,CAAC;AACjC,QAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAY,CAAC;;AAGjC,QAAA,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAGxE,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;QACtB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEtB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;QACtB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;QAGtB,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI;AAC7D,IAAA,CAAC;AACH;;ACzDA;;;;;;;;;;;;;AAaG;AACG,SAAU,mBAAmB,CACjC,KAAsB,EACtB,GAAuB,EAAA;IAEvB,MAAM,GAAG,GAAkB,EAAE;;AAG7B,IAAA,MAAM,CAAC,GAAQ,KAAK,CAAC,UAAU,IAAI,EAAE;;AAGrC,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,IAAqB;;AAGtD,IAAA,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI;AAAE,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAClD,IAAA,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI;AAAE,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;AAGlD,IAAA,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI;AAAE,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACpE,IAAA,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI;AAAE,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;;IAGpE,IAAI,CAAC,CAAC,KAAK;AAAE,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;;;;AAMvC,IAAA,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE;QACtB,GAAG,CAAC,IAAI,CACN,UAAU,CAAC,OAAO,CAChB,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CACvD,CACF;IACH;;;IAIA,IAAI,CAAC,CAAC,KAAK;AAAE,QAAA,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;;;IAI3E,IAAI,CAAC,CAAC,UAAU;AAAE,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;;;;IAKlE,IAAI,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,OAAO,EAAE;AAC1C,QAAA,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACvE;;IAGA,IAAI,KAAK,CAAC,SAAS;AAAE,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;;;AAIlD,IAAA,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,CAAC,EAAE;AAChE,QAAA,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC;IACrD;;;IAIA,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,EAAE;AAC3C,QAAA,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACvC;AAEA,IAAA,OAAO,GAAG;AACZ;AAEA;;;AAGG;AACH,SAAS,cAAc,CAAC,SAAkB,EAAA;AACxC,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,IAAI;;IAG3B,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAClD,IAAI,CAAC,EAAE;AACL,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;;AAGA,IAAA,OAAO,SAAS;AAClB;AAEA;;;;;;;;;AASG;AACG,SAAU,mBAAmB,CAAC,IAGnC,EAAA;AACC,IAAA,MAAM,GAAG,GAAG,IAAI,EAAE,SAAS,IAAI,CAAC;AAChC,IAAA,MAAM,GAAG,GAAG,IAAI,EAAE,SAAS,IAAI,EAAE;IAEjC,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE;AACnD,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;;QAGtB,MAAM,UAAU,GAAG;AAChB,aAAA,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;AACzB,aAAA,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;;QAG7B,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU;;AAGzD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;;QAGjD,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG;AAAE,YAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;;AAGtE,QAAA,IAAI,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;;AAG7D,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH;;ACpJA;;;;;;;;;;;AAWG;AACG,SAAU,gBAAgB,CAC9B,EAAe,EACf,IAAe,EACf,IAAuB,EACvB,aAAkB,EAClB,GAAuB,EAAA;;AAGvB,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AAEjC,IAAA,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE;AACxB,QAAA,MAAM,GAAG,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG;AACrC,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAEhB;;;;AAIG;QACH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;QACrE;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX;;;;;AAKG;QACH,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;;QAGnD,IAAI,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAEjD;;;;;;AAMG;AACH,QAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO;AAExC,QAAA,IAAI,gBAAgB,IAAI,IAAI,CAAC,OAAO,EAAE;YACpC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACpC;AAAO,aAAA,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACnC;IACF;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACvC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC5C,IAAA,CAAC,CAAC;AACJ;;AC7EM,SAAU,SAAS,CAAC,KAAuB,EAAA;AAC/C,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAE,KAAe,CAAC,CAAC,CAAC,EAAE,IAAI;AAC5D;AAEM,SAAU,eAAe,CAAC,KAA0C,EAAA;IACxE,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,EAAE;AAE9C,IAAA,IAAI,CAAC,SAAS,CAAC,KAAY,CAAC;AAAE,QAAA,OAAO,KAA0B;AAE/D,IAAA,OAAQ;SACL,OAAO,CAAC,CAAC,CAAM,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1D,SAAA,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC;AAChD;;MCwBa,mBAAmB,CAAA;;AAEH,IAAA,IAAI;AAE/B;;;;;;AAMG;AACwB,IAAA,MAAM;AAEjC;;;AAGG;IACM,QAAQ,GAAG,KAAK;;IAGhB,YAAY,GAA+B,IAAI;;IAG/C,YAAY,GAAkB,IAAI;;AAGnC,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;;AAGxB,IAAA,eAAe,GAAG,MAAM,CAAC,0BAA0B,CAAC;;AAGpD,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5C;;;AAGG;IACK,aAAa,GAAG,EAAE;AAE1B;;;AAGG;AACK,IAAA,UAAU;AAElB;;;AAGG;IACH,gBAAgB,GAAa,EAAE;AAE/B,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAEhC;;;;;AAKG;QACH,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAElD;;;AAGG;AACH,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAC,aAAa,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;QAG7F,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;;QAGzC,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;;AAGrC,QAAA,MAAM,WAAW,GAAG,SAAS,KAAK,IAAI,CAAC,aAAa;AAEpD;;;AAGG;AACH,QAAA,MAAM,YAAY,GAChB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;AACrB,YAAA,OAAO,CAAC,UAAU,CAAC,CAAC,aAAa,KAAK,IAAI;AAC1C,YAAA,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,KAAK,KAAK;;QAG5C,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY;YAAE;AAErE;;;AAGG;AACH,QAAA,IAAI,aAAa,IAAI,WAAW,EAAE;AAChC,YAAA,IAAI,CAAC,UAAU,IAAI;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC7B;AAEA;;;AAGG;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE;QAC/C,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAEzF;;;;AAIG;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAEtD;;;AAGG;QACH,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,IAAI,EAAE;gBACzC,IAAI,CAAC,gBAAgB,GAAG;qBACrB,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,SAAS;AAChC,qBAAA,GAAG,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;qBAClC,MAAM,CAAC,OAAO,CAAC;YACpB;iBAAO;AACL,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;YAC5B;QACF;AAEA;;;AAGG;AACH,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;AAEtE;;;;AAIG;AACH,QAAA,IAAI,CAAC,aAAa,IAAI,WAAW,KAAK,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;AACnE,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;gBACjD,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,aAAa,EAAE,OAAO;AACtB,gBAAA,UAAU,EAAE,CAAC,CAAS,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3C,SAAS,EAAE,CAAC,CAAS,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI;AAC9E,aAAA,CAAC;YAEF,IAAI,OAAO,YAAY,KAAK,UAAU;AAAE,gBAAA,IAAI,CAAC,UAAU,GAAG,YAAY;QACxE;AAEA;;;;;AAKG;QACH,IAAI,YAAY,EAAE;YAChB,cAAc,CAAC,MAAK;gBAClB,IAAI,CAAC,kCAAkC,EAAE;gBACzC,IAAI,CAAC,+BAA+B,EAAE;AACxC,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;IAChC;AAEA;;;;;AAKG;AACH,IAAA,sBAAsB,CAAC,CAAiB,EAAA;QACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACzD;;AAGQ,IAAA,uBAAuB,CAAC,CAAiB,EAAA;AAC/C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAA,CAAE,CAAC;AACjD,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;AAC5C,QAAA,OAAO,CAAC,CAAA,EAAG,CAAC,CAAA,CAAE,CAAC;IACjB;;;AAKA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;IAChF;AAEA;;;AAGG;AACH,IAAA,IAAI,SAAS,GAAA;QACX,MAAM,CAAC,GAAI,IAAI,CAAC,MAAM,EAAE,QAAkB,IAAI,EAAE;QAChD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI;IACrB;;AAGA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAQ,IAAI,CAAC,MAAM,EAAE,QAAkB,IAAI,EAAE;IAC/C;;AAGA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAQ,IAAI,CAAC,MAAM,EAAE,QAAkB,IAAI,EAAE;IAC/C;;IAGA,UAAU,CAAC,CAAM,EAAE,GAAW,EAAA;AAC5B,QAAA,OAAO,CAAC,EAAE,EAAE,IAAI,GAAG;IACrB;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,CAAM,EAAA;AACf,QAAA,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE;AAChB,QAAA,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,GAAG,EAAE,GAAG,CAAA,EAAG,EAAE,EAAE;IACvD;;AAIA;;;;;AAKG;IACK,kCAAkC,GAAA;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE;AAC1C,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,IAAI;gBAAE;AAEX,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;;AAGxB,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBAClC,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAClD;QACF;;QAGA,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACvD;AAEA;;;;;;AAMG;AACK,IAAA,kBAAkB,CAAC,CAAM,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;QAE/C,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACrD,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;QACtC,IAAI,OAAO,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;AAEvC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;AAEzC,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;;AAEzB,YAAA,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAA,EAAG,CAAC,CAAC,GAAG,CAAA,CAAE,CAAC,IAAI,EAAE,KAAK,EAAE;AAAE,gBAAA,OAAO,IAAI;AACxE,YAAA,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAA,EAAG,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC,IAAI,EAAE,KAAK,EAAE;AAAE,gBAAA,OAAO,IAAI;AAC3E,YAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAA,EAAG,CAAC,CAAC,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,KAAK,EAAE;AAAE,gBAAA,OAAO,IAAI;;YAGrE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QAClC;AAEA,QAAA,OAAO,KAAK;IACd;AAEA;;;;;AAKG;AACK,IAAA,gBAAgB,CAAC,IAA4B,EAAA;AACnD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC;IACrD;AAEA;;;AAGG;AACK,IAAA,sBAAsB,CAAC,CAAM,EAAA;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;aACxB,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,aAAa,EAAE,GAAG;aACrC,MAAM,CAAC,OAAO,CAAC;QAElB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E;AAEA;;;AAGG;IACK,+BAA+B,GAAA;QACrC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AAErB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,IAAI,EAAE;QACzC,MAAM,UAAU,GAAG;AAChB,aAAA,MAAM,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACjD,aAAA,GAAG,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;aAClC,MAAM,CAAC,OAAO,CAAC;QAElB,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE;QAExB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;IACxF;;IAGA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,IAAI;IACrB;wGAtUW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvChC,kmDA6CM,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDdF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,wBAAwB,6HACxB,wBAAwB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAGf,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAf/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cACpB,IAAI,EAAA,eAAA,EAGC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;wBACf,eAAe;wBACf,wBAAwB;wBACxB,wBAAwB;AACzB,qBAAA,EAAA,QAAA,EAAA,kmDAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;sBAIA,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBASxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAMxB;;sBAGA;;sBAGA;;;ME/CU,0BAA0B,CAAA;AACrC;;AAEG;AACH,IAAA,UAAU,GAAG,KAAK,CAAU,KAAK,sDAAC;AAElC;;;AAGG;AACH,IAAA,eAAe,GAAG,KAAK,CAAU,KAAK,2DAAC;AAEvC;;AAEG;AACH,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,qDAAC;AAEjC;;;AAGG;AACO,IAAA,UAAU,GAAG,IAAI,YAAY,EAA0B;AAEjE;;AAEG;AACO,IAAA,YAAY,GAAG,IAAI,YAAY,EAAY;AAErD;;AAEG;IACH,aAAa,GAAG,KAAK;IAErB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC3D;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClC;wGAvCW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfvC,+uBA8BM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnBM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAIvE,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,UAAA,EAC5B,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,+uBAAA,EAAA;;sBAyBlF;;sBAKA;;;AEzCH;;ACAA;;AAEG;;;;"}