ud-components 0.2.2 → 0.2.3

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":"ud-components.mjs","sources":["../../../projects/ud-components/src/lib/carousel/carousel.component.ts","../../../projects/ud-components/src/lib/carousel/carousel.component.html","../../../projects/ud-components/src/lib/custom-input/custom-input.component.ts","../../../projects/ud-components/src/lib/custom-input/custom-input.component.html","../../../projects/ud-components/src/enums/snackbar-type.enum.ts","../../../projects/ud-components/src/lib/custom-snackbar/custom-snackbar.component.ts","../../../projects/ud-components/src/lib/custom-snackbar/custom-snackbar.component.html","../../../projects/ud-components/src/enums/application-status.enum.ts","../../../projects/ud-components/src/enums/custom-table.enum.ts","../../../projects/ud-components/src/enums/role.enum.ts","../../../projects/ud-components/src/enums/table-display-column-type.ts","../../../projects/ud-components/src/utils/common-utils.ts","../../../projects/ud-components/src/pipes/capitalize/capitalize.pipe.ts","../../../projects/ud-components/src/pipes/pluralize/pluralize.pipe.ts","../../../projects/ud-components/src/services/translate-wrapper/translate-wrapper.service.ts","../../../projects/ud-components/src/lib/custom-table/custom-table.component.ts","../../../projects/ud-components/src/lib/custom-table/custom-table.component.html","../../../projects/ud-components/src/lib/dynamic-component/dynamic-component.component.ts","../../../projects/ud-components/src/lib/dynamic-component/dynamic-component.component.html","../../../projects/ud-components/src/lib/edit-view/edit-view-section.directive.ts","../../../projects/ud-components/src/lib/edit-view/edit-view.component.ts","../../../projects/ud-components/src/lib/edit-view/edit-view.component.html","../../../projects/ud-components/src/enums/modal-input-type.enum.ts","../../../projects/ud-components/src/pipes/singular/singular.pipe.ts","../../../projects/ud-components/src/utils/time-options.utils.ts","../../../projects/ud-components/src/lib/tel-input/tel-input.component.ts","../../../projects/ud-components/src/lib/tel-input/tel-input.component.html","../../../projects/ud-components/src/lib/modal/modal.component.ts","../../../projects/ud-components/src/lib/modal/modal.component.html","../../../projects/ud-components/src/pipes/safe/safe.pipe.ts","../../../projects/ud-components/src/lib/file-input/file-input.component.ts","../../../projects/ud-components/src/lib/file-input/file-input.component.html","../../../projects/ud-components/src/lib/kpi/kpi.enum.ts","../../../projects/ud-components/src/lib/pill/pill.component.ts","../../../projects/ud-components/src/lib/pill/pill.component.html","../../../projects/ud-components/src/lib/progress-bar/progress-bar.component.ts","../../../projects/ud-components/src/lib/progress-bar/progress-bar.component.html","../../../projects/ud-components/src/lib/kpi/kpi.component.ts","../../../projects/ud-components/src/lib/kpi/kpi.component.html","../../../projects/ud-components/src/lib/summary-view/summary-view.component.ts","../../../projects/ud-components/src/lib/summary-view/summary-view.component.html","../../../projects/ud-components/src/lib/tabs/tabs.component.ts","../../../projects/ud-components/src/lib/tabs/tabs.component.html","../../../projects/ud-components/src/lib/form-fields/text-input/text-input.component.ts","../../../projects/ud-components/src/lib/form-fields/text-input/text-input.component.html","../../../projects/ud-components/src/lib/form-fields/date-input/date-input.component.ts","../../../projects/ud-components/src/lib/form-fields/date-input/date-input.component.html","../../../projects/ud-components/src/lib/form-fields/multi-select/multi-select.component.ts","../../../projects/ud-components/src/lib/form-fields/multi-select/multi-select.component.html","../../../projects/ud-components/src/lib/form-fields/pill-toggle/pill-toggle.component.ts","../../../projects/ud-components/src/lib/form-fields/pill-toggle/pill-toggle.component.html","../../../projects/ud-components/src/lib/button/button.component.ts","../../../projects/ud-components/src/lib/button/button.component.html","../../../projects/ud-components/src/lib/toggle/toggle.component.ts","../../../projects/ud-components/src/lib/toggle/toggle.component.html","../../../projects/ud-components/src/public-api.ts","../../../projects/ud-components/src/ud-components.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n ElementRef,\n Input,\n ViewChild,\n} from '@angular/core';\nimport { SwiperContainer } from 'swiper/element/bundle';\n\n@Component({\n selector: 'ud-carousel',\n templateUrl: './carousel.component.html',\n styleUrls: ['./carousel.component.scss'],\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class CarouselComponent {\n @Input() pictures: string[] = [];\n @Input() height = 300;\n @Input() direction = 'horizontal';\n @Input() autoplay = true;\n\n @ViewChild('swiperRef') swiperRef!: ElementRef<SwiperContainer>;\n}\n","<swiper-container\n [slidesPerView]=\"1\"\n [pagination]=\"true\"\n [direction]=\"direction\"\n [autoplay]=\"autoplay\"\n [style.height.px]=\"height\">\n @for (picture of pictures; track $index) {\n <swiper-slide>\n <img [src]=\"picture\" alt=\"Slide {{ $index + 1 }}\" />\n </swiper-slide>\n }\n</swiper-container>\n","import { Component, Input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'ud-input',\n templateUrl: './custom-input.component.html',\n styleUrls: ['./custom-input.component.scss'],\n imports: [FormsModule],\n})\nexport class CustomInputComponent {\n @Input() type!: string;\n @Input() placeholder?: string;\n @Input() required!: boolean;\n @Input() name!: string;\n @Input() inputValue!: string;\n\n constructor() {}\n}\n","<div class=\"inputBox\">\n <input\n [type]=\"type\"\n [required]=\"required\"\n [placeholder]=\"placeholder ?? ''\"\n [(ngModel)]=\"inputValue\" />\n <span>{{ name }}</span>\n</div>\n","export enum SnackbarType {\n SUCCESS = 'success',\n ERROR = 'error',\n WARNING = 'warning',\n INFO = 'info',\n}\n","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n MAT_SNACK_BAR_DATA,\n MatSnackBarRef,\n} from '@angular/material/snack-bar';\nimport { interval, Subscription } from 'rxjs';\nimport { SnackbarType } from '../../enums/snackbar-type.enum';\n\nexport interface SnackbarData {\n message: string;\n type: SnackbarType;\n duration: number;\n action?: string;\n}\n\n@Component({\n selector: 'ud-custom-snackbar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './custom-snackbar.component.html',\n styleUrls: ['./custom-snackbar.component.scss'],\n})\nexport class CustomSnackbarComponent implements OnInit, OnDestroy {\n progress = 100;\n private subscription?: Subscription;\n private isPaused = false;\n private elapsedTime = 0;\n\n constructor(\n @Inject(MAT_SNACK_BAR_DATA) public data: SnackbarData,\n private snackBarRef: MatSnackBarRef<CustomSnackbarComponent>\n ) {}\n\n ngOnInit() {\n this.startTimer();\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n\n private startTimer() {\n const tickInterval = 100;\n\n this.subscription?.unsubscribe();\n\n this.subscription = interval(tickInterval).subscribe(() => {\n // Only count time when NOT paused\n if (!this.isPaused) {\n this.elapsedTime += tickInterval;\n\n // Calculate progress\n this.progress = 100 - (this.elapsedTime / this.data.duration) * 100;\n\n // Dismiss when time runs out\n if (this.elapsedTime >= this.data.duration) {\n this.subscription?.unsubscribe();\n this.snackBarRef.dismiss();\n }\n }\n });\n }\n\n pauseTimer() {\n this.isPaused = true;\n }\n\n resumeTimer() {\n this.isPaused = false;\n }\n\n dismiss() {\n this.subscription?.unsubscribe();\n this.snackBarRef.dismiss();\n }\n\n protected readonly SnackbarType = SnackbarType;\n}\n","<div\n class=\"custom-snackbar\"\n [attr.data-type]=\"data.type\"\n (mouseenter)=\"pauseTimer()\"\n (mouseleave)=\"resumeTimer()\">\n <div class=\"snackbar-content\">\n <div class=\"snackbar-icon\">\n @switch (data.type) {\n @case (SnackbarType.SUCCESS) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M7.5 10L9.16667 11.6667L12.5 8.33333M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n @case (SnackbarType.ERROR) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M12.5 7.5L7.5 12.5M7.5 7.5L12.5 12.5M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n @case (SnackbarType.WARNING) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M10 6.66667V10M10 13.3333H10.0083M8.57465 3.21517L2.51132 13.3333C1.92535 14.3618 2.67592 15.6667 3.9368 15.6667H16.0632C17.3241 15.6667 18.0747 14.3618 17.4887 13.3333L11.4254 3.21517C10.8486 2.20371 9.15144 2.20371 8.57465 3.21517Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n @case (SnackbarType.INFO) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M10 13.3333V10M10 6.66667H10.0083M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n }\n </div>\n\n <span class=\"snackbar-message\">{{ data.message }}</span>\n\n @if (data.action) {\n <button class=\"snackbar-action\" (click)=\"dismiss()\">\n {{ data.action }}\n </button>\n }\n\n <button class=\"snackbar-close\" (click)=\"dismiss()\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M12 4L4 12M4 4L12 12\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"progress\"></div>\n </div>\n</div>\n","export enum ApplicationStatus {\n FINALIZED = 'finalized',\n PRE_APPROVED = 'pre-approved',\n SUBMITTED = 'submitted',\n}\n","export enum FilterType {\n NONE = 'none', // No filter is shown\n ALL = 'all', // One input box that filter on all columns\n COLUMN = 'column', // Add a filter for each column\n}\n\nexport enum NumberOperator {\n EQUAL = 'EQUAL',\n NOT_EQUAL = 'NOT_EQUAL',\n GREATER_THAN = 'GREATER_THAN',\n GREATER_THAN_OR_EQUAL = 'GREATER_THAN_OR_EQUAL',\n LESS_THAN = 'LESS_THAN',\n LESS_THAN_OR_EQUAL = 'LESS_THAN_OR_EQUAL',\n BETWEEN = 'BETWEEN',\n}\n\nexport enum StringOperator {\n CONTAINS = 'CONTAINS',\n EXACT = 'EXACT',\n STARTS_WITH = 'STARTS_WITH',\n ENDS_WITH = 'ENDS_WITH',\n NOT_CONTAINS = 'NOT_CONTAINS',\n NOT_EXACT = 'NOT_EXACT',\n}\n\nexport enum DateOperator {\n BEFORE = 'BEFORE',\n AFTER = 'AFTER',\n DATE_RANGE = 'DATE_RANGE',\n}\n","export enum Role {\n SUPER_USER = 'super_user',\n ADMIN = 'admin',\n FRONT_DESK = 'front_desk',\n STUDENT_DEAN = 'student_dean',\n RESIDENCE_ASSISTANT = 'residence_assistant',\n STUDENT = 'student',\n GUEST = 'guest',\n}\n","export enum TableDisplayColumnType {\n ARRAY = 'ARRAY',\n BOOLEAN = 'BOOLEAN',\n CLICK = 'CLICK',\n DATE = 'DATE',\n DATETIME = 'DATETIME',\n HYPERLINK = 'HYPERLINK',\n ICON = 'ICON',\n MONEY = 'MONEY',\n PHONE = 'PHONE',\n TEXT = 'TEXT',\n TEXT_OBSERVABLES = 'TEXT_OBSERVABLES',\n SELECT = 'SELECT',\n NUMBER = 'NUMBER',\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { formatDate } from '@angular/common';\n\nexport const capitalize = (word: string) =>\n word ? word.charAt(0).toUpperCase() + word.slice(1) : word;\n\nexport const pluralize = (word: string) =>\n /(?<!e)y\\b/.test(word) ? word.replace(/(?<!e)y\\b/, 'ies') : `${word}s`;\n\nexport const spaceCase = (word: string) => word.replace(/[-_]+/g, ' ');\n\nexport const inListValidator = (list: string[]): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = String(control.value);\n return list.includes(value) ? { inList: true } : null;\n };\n};\n\nexport const updateArray = (\n items: any[],\n item: any,\n propertyId = 'id',\n addToEnd = true\n) =>\n items.some(i => i[propertyId] === item[propertyId])\n ? items.map(i => (i[propertyId] === item[propertyId] ? item : i))\n : addToEnd\n ? [...items, item]\n : [item, ...items];\n\nexport const formatPhoneNumber = (value: string): string => {\n // Remove all non-digits\n const digitsOnly = value.replace(/\\D/g, '');\n\n // Format based on length\n let formattedValue = '';\n\n if (digitsOnly.length >= 10) {\n // Format as (XXX) XXX-XXXX for 10+ digits\n const match = digitsOnly.match(/^(\\d{3})(\\d{3})(\\d{4})(\\d*)$/);\n if (match) {\n formattedValue = `(${match[1]}) ${match[2]}-${match[3]}`;\n if (match[4]) {\n formattedValue += ` ext. ${match[4]}`;\n }\n } else {\n // Fallback for different lengths\n formattedValue = digitsOnly.replace(\n /^(\\d{3})(\\d{3})(\\d{0,4}).*/,\n '($1) $2-$3'\n );\n }\n } else if (digitsOnly.length >= 7) {\n // Format as XXX-XXXX for 7-9 digits\n formattedValue = digitsOnly.replace(/^(\\d{3})(\\d{0,4})/, '$1-$2');\n } else if (digitsOnly.length >= 4) {\n // Format as XXX-X for 4-6 digits\n formattedValue = digitsOnly.replace(/^(\\d{3})(\\d{0,3})/, '$1-$2');\n } else {\n // Keep as is for less than 4 digits\n formattedValue = digitsOnly;\n }\n\n return formattedValue;\n};\n\n// Parse local date string to Date object without time zone offset\nexport function parseLocalDate(dateString: string): Date {\n const [year, month, day] = dateString.split('-');\n return new Date(Number(year), Number(month) - 1, Number(day));\n}\n\n// Format Date to Day Month Year HH:mm (LocalDateTime)\n// Example: Tue Feb 12 2022 12:00 without commas\nexport function formatLocalDateTimeLongForm(date: Date): string {\n return date\n .toLocaleString('en-US', {\n weekday: 'short',\n month: 'short',\n day: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n })\n .replace(',', '');\n}\n\n// Format Date to YYYY-MM-DDTHH:mm:ss (LocalDateTime)\nexport function formatLocalDateTime(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\n}\n\n// Format Date to HH:mm:ss (LocalTime)\nexport function formatLocalTime(date: Date): string {\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${hours}:${minutes}:${seconds}`;\n}\n\n// Format Date to HH:mm (LocalTime)\nexport function formatLocalTimeWithMinutes(date: Date): string {\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n return `${hours}:${minutes}`;\n}\n\n// Format Date to HH:mm with AM/PM format (LocalTime)\nexport function formatLocalTimeWithMinutesAmPm(date: Date): string {\n const hours = Number.parseInt(String(date.getHours()));\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const ampm = hours >= 12 ? 'PM' : 'AM';\n const normalizedHour = hours % 12 === 0 ? 12 : hours % 12;\n return `${normalizedHour.toString().padStart(2, '0')}:${minutes} ${ampm}`;\n}\n\n// Format Date to YYYY-MM-DD (LocalDate)\nexport function formatLocalDate(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0'); // Months are 0-based\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Formats an ISO date string to a readable format\n * @param isoString - Date string in ISO format (e.g., \"2025-09-12T21:30:00\")\n * @returns Formatted date string (e.g., \"September 12, 2025, 9:30 PM\")\n */\nexport function formatStringDateTime(isoString: string): string {\n const date = new Date(isoString);\n\n // Check if date is valid\n if (isNaN(date.getTime())) {\n throw new Error('Invalid date string provided');\n }\n\n const options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n };\n\n return date.toLocaleDateString('en-US', options);\n}\n\n/**\n * Formats an ISO date string to a readable format\n * @param isoString - Date string in ISO format (e.g., \"2025-09-12\")\n * @returns Formatted date string (e.g., \"September 12, 2025\")\n */\nexport function formatStringDate(isoString: string): string {\n const date = new Date(isoString);\n\n // Check if date is valid\n if (isNaN(date.getTime())) {\n throw new Error('Invalid date string provided');\n }\n\n const options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n };\n\n return date.toLocaleDateString('en-US', options);\n}\n\n/**\n * Format YYYY-MM to localized month year format\n * @param dateStr Format: \"2025-11\"\n * @param locale Language indicator\n * @returns Format: \"Nov 2025\" (or localized equivalent)\n */\nexport function formatMonthYear(dateStr: string, locale: string): string {\n const [year, month] = dateStr.split('-');\n // Create date as first day of the month\n const date = new Date(parseInt(year), parseInt(month) - 1, 1);\n\n // Use Angular's formatDate with current locale\n // 'MMM yyyy' format gives \"Nov 2025\", \"déc. 2025\" for French, etc.\n return formatDate(date, 'MMM yyyy', locale);\n}\n","import { capitalize } from '../../utils/common-utils';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'capitalize',\n})\nexport class CapitalizePipe implements PipeTransform {\n transform(value: string | null | undefined): string {\n return value ? capitalize(value) : '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'pluralize',\n})\nexport class PluralizePipe implements PipeTransform {\n transform(value: string | null): string {\n return value\n ? value.includes('|')\n ? value.split('|')[1].trim()\n : value\n : '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, map } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslateWrapperService {\n constructor(private translateService: TranslateService) {}\n\n get(translation: string, count?: number, params?: any): Observable<string> {\n return this.translateService.stream(translation, params).pipe(\n map(v => {\n if (v.includes('|')) {\n return v.split('|')[count && count > 1 ? 1 : 0].trim();\n }\n return v;\n })\n );\n }\n\n translate(translation: string, count?: number, params?: any): string {\n const value = this.translateService.instant(translation, params);\n if (value.includes('|')) {\n return value.split('|')[count && count > 1 ? 1 : 0].trim();\n }\n return value;\n }\n}\n","import {\n CustomAction,\n TableQuery,\n TableQueryChange,\n} from './custom-table.interface';\nimport { ApplicationStatus } from '../../enums/application-status.enum';\nimport {\n DateOperator,\n NumberOperator,\n StringOperator,\n} from '../../enums/custom-table.enum';\nimport { Role } from '../../enums/role.enum';\nimport { TableDisplayColumnType } from '../../enums/table-display-column-type';\nimport { FloorInterface } from '../../interfaces/floor.interface';\nimport { TableDisplayColumn } from '../../interfaces/table-display-column.interface';\nimport { FilterCriteria } from '../../interfaces/table.interface';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport { PluralizePipe } from '../../pipes/pluralize/pluralize.pipe';\nimport { TranslateWrapperService } from '../../services/translate-wrapper/translate-wrapper.service';\nimport { capitalize } from '../../utils/common-utils';\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n AsyncPipe,\n DatePipe,\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n} from '@angular/common';\nimport {\n Component,\n ContentChild,\n DestroyRef,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatCard, MatCardContent, MatCardHeader } from '@angular/material/card';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport {\n MatDatepickerModule,\n MatDatepickerToggle,\n MatDateRangeInput,\n MatDateRangePicker,\n} from '@angular/material/datepicker';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n MatFormField,\n MatHint,\n MatInput,\n MatLabel,\n MatSuffix,\n} from '@angular/material/input';\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatOption, MatSelect } from '@angular/material/select';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { MatSort } from '@angular/material/sort';\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable,\n MatTableDataSource,\n} from '@angular/material/table';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { isEqual } from 'lodash-es';\nimport {\n debounceTime,\n distinctUntilChanged,\n iif,\n Observable,\n of,\n switchMap,\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport enum ActionType {\n ADD = 'add',\n APPROVE = 'approve',\n DELETE = 'delete',\n EXTEND = 'extend',\n REJECT = 'reject',\n}\n\n@Component({\n selector: 'ud-table',\n templateUrl: './custom-table.component.html',\n styleUrls: ['./custom-table.component.scss'],\n animations: [\n trigger('detailExpand', [\n state('collapsed, void', style({ height: '0px', minHeight: '0' })),\n state('expanded', style({ height: '*' })),\n transition('* <=> *', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n ]),\n ],\n imports: [\n MatPaginator,\n NgClass,\n MatProgressSpinner,\n CapitalizePipe,\n TranslatePipe,\n MatIcon,\n AsyncPipe,\n MatRow,\n MatHeaderRow,\n MatCell,\n MatColumnDef,\n MatIconButton,\n MatHeaderCell,\n MatMenu,\n MatCellDef,\n NgStyle,\n DatePipe,\n MatTooltip,\n MatHeaderCellDef,\n MatCheckbox,\n MatTable,\n MatSort,\n MatDatepickerToggle,\n MatDateRangePicker,\n MatHint,\n MatDateRangeInput,\n MatLabel,\n MatSlideToggle,\n ReactiveFormsModule,\n MatButton,\n MatMenuTrigger,\n MatSelect,\n MatFormField,\n MatInput,\n MatSuffix,\n MatCardContent,\n MatCardHeader,\n MatCard,\n MatOption,\n NgTemplateOutlet,\n RouterLink,\n MatHeaderRowDef,\n MatRowDef,\n MatDatepickerModule,\n PluralizePipe,\n ],\n})\nexport class CustomTableComponent implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * ID of the table, if present, we can use it to the table's pagination and filtering\n */\n @Input() id?: string;\n /**\n * Title of the table\n */\n @Input() title: Observable<string> = of('');\n /**\n * Icon of the table\n */\n @Input() icon!: string;\n /**\n * Actions\n */\n @Input() actions: ActionType[] = [];\n /**\n * Custom actions\n */\n @Input() customActions: CustomAction[] = [];\n /**\n * Allowed roles\n */\n @Input() allowedRoles: Role[] = [Role.ADMIN];\n /**\n * Should have checkbox or not\n */\n @Input() haveCheckbox!: boolean;\n /**\n * Columns of the table\n */\n @Input() displayedColumns!: TableDisplayColumn[];\n /**\n * Data source / rows\n */\n @Input() dataSource!: MatTableDataSource<any>;\n /**\n * Page size options\n */\n @Input() paginationSizeOptions: number[] = [10, 20, 50, 100];\n /**\n * First page size\n */\n @Input() initialPageSize?: number = 10;\n @Input() specificSelectRow: boolean = false;\n /**\n * If filters are enabled\n */\n @Input() hasFilter: boolean = true;\n /**\n * If rows can be expandable\n */\n @Input() expandableRows: boolean = false;\n /**\n * Expanded rows\n */\n @Input() expandedItem!: { type: string; property: string };\n @Input() emptyMessage?: Observable<string>;\n /**\n * Table loading status\n */\n @Input() isLoading?: boolean = false;\n /**\n * Whether to have one filter for all columns or one filter per column\n */\n @Input() separateFilters?: boolean = true;\n /**\n * Show paginator or not\n */\n @Input() showPaginator?: boolean = true;\n /**\n * Display message if there's no data\n */\n @Input() noTableDataMessage?: string;\n /**\n * Actions button shown or not\n */\n @Input() actionsMenuEnabled?: boolean = false;\n /**\n * Number of rows\n */\n @Input() totalElements?: number;\n /**\n * Use server side filtering or client side filtering\n * Should only use client side if there aren't a lot of rows\n */\n @Input() serverSideFiltering?: boolean = false;\n /**\n * Remove header\n */\n @Input() disableHeader?: boolean = false;\n\n /**\n * Emits delete\n */\n @Output() delete = new EventEmitter<SelectionModel<any>>();\n /**\n * Emits approve\n */\n @Output() approve = new EventEmitter<SelectionModel<any>>();\n /**\n * Emits reject\n */\n @Output() reject = new EventEmitter<SelectionModel<any>>();\n /**\n * Emits extend\n */\n @Output() extend = new EventEmitter<SelectionModel<any>>();\n /**\n * Emits add\n */\n @Output() add = new EventEmitter<void>();\n /**\n * Emits clicked\n */\n @Output() clicked = new EventEmitter<any>();\n /**\n * Emits combined query change (filters + pagination)\n */\n @Output() queryChange = new EventEmitter<TableQueryChange>();\n\n @ContentChild(TemplateRef) actionsTemplate!: TemplateRef<any>;\n\n selection = new SelectionModel<any>(true, []);\n selectedFilters: TableDisplayColumn[] = [];\n\n expandedElement: FloorInterface | null = null;\n columnsToDisplayWithExpand: string[] = [];\n\n tableDisplayColumnType = TableDisplayColumnType;\n initSortedCol: TableDisplayColumn | null = null;\n\n filterByColumnFormGroup: FormGroup = new FormGroup({});\n\n /**\n * Related to filtering and pagination on localStorage\n */\n private isRestoringState = false;\n private currentFilters: FilterCriteria[] = [];\n\n /**\n * Operators\n *\n * - Number\n */\n numberOperations: { label: Observable<string>; value: NumberOperator }[] = [];\n\n @ViewChild(MatPaginator, { static: false }) paginatorRef!: MatPaginator;\n\n @ViewChild(MatPaginator, { static: false }) set paginator(val: MatPaginator) {\n if (val && !this.serverSideFiltering) {\n this.dataSource.paginator = val;\n }\n }\n\n @ViewChild(MatSort, { static: false }) set sort(val: MatSort) {\n if (val) {\n this.dataSource.sort = val;\n }\n }\n\n @ViewChild('allFilterInput', { static: true })\n allFilterInput!: ElementRef<HTMLInputElement>;\n\n constructor(\n private translateService: TranslateWrapperService,\n ) {}\n\n ngOnInit(): void {\n this.numberOperations = Object.values(NumberOperator).map(operator => ({\n label: this.translateService.get(`operators.numbers.${operator}`),\n value: operator,\n }));\n this.setInitSort();\n this.setInitFilter();\n this.setEmptyMessage();\n\n // Wait for filter controls to be built before restoring\n if (this.id !== undefined) {\n this.isRestoringState = true;\n\n // Use a longer timeout to ensure controls are ready\n setTimeout(() => {\n this.restoreTableQuery();\n }, 100); // Wait for controls to be built\n }\n\n if (this.hasFilter && this.separateFilters) {\n if (!this.serverSideFiltering) {\n this.applyFilterByColumn();\n }\n\n this.filterByColumnFormGroup.valueChanges\n .pipe(\n debounceTime(400),\n map(formValue => {\n return Object.entries(formValue)\n .filter(([_key, value]) => value !== null && value !== '')\n .reduce((acc: { [key: string]: any }, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {});\n }),\n distinctUntilChanged((prev, curr) => isEqual(prev, curr)),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((formValue: any) => {\n // Skip if we're still restoring\n if (this.isRestoringState) {\n return;\n }\n\n if (this.serverSideFiltering) {\n const filterCriteria = this.buildFilterCriteria(formValue);\n this.queryChange.emit({\n filters: filterCriteria,\n pageIndex: 0,\n pageSize:\n this.paginatorRef?.pageSize || this.initialPageSize || 10,\n });\n if (this.paginatorRef) {\n this.paginatorRef.firstPage();\n }\n } else {\n // Client-side filtering - save to localStorage if id exists\n this.buildFilterCriteria(formValue); // Saves to localStorage as a side effect\n\n this.dataSource.filter = JSON.stringify(formValue);\n if (this.dataSource.paginator) {\n this.dataSource.paginator.firstPage();\n }\n }\n });\n\n // Reset the flag after a delay that's longer than debounceTime\n if (this.id !== undefined) {\n setTimeout(() => {\n this.isRestoringState = false;\n }, 600); // 600ms to account for 100ms + 400ms debounce + buffer\n }\n }\n }\n\n applyFilterToAllColumns(event: Event) {\n const filterValue = (event.target as HTMLInputElement).value;\n // Apply the transformFn so that if the user filters based on that value we still keep the transformValue not the original one\n const transformedDataSource = this.dataSource;\n this.displayedColumns.forEach((column: TableDisplayColumn) => {\n if (column.transformFn) {\n transformedDataSource.data = transformedDataSource.data.map(data => ({\n ...data,\n [column.property]: column.transformFn(data[column.property]),\n }));\n }\n });\n this.dataSource.filter = filterValue.trim().toLowerCase();\n\n if (this.dataSource.paginator) {\n this.dataSource.paginator.firstPage();\n }\n }\n\n applyFilterByColumn(): void {\n this.dataSource.filterPredicate = (data: any, filter: string): boolean => {\n const filterObj = JSON.parse(filter) as Record<string, any>;\n return Object.entries(filterObj).every(([key, value]) => {\n const column = this.displayedColumns.find(col => col.property === key);\n if (!column) return true;\n\n const dataValue = data[key];\n\n // TEXTS\n if (\n [\n TableDisplayColumnType.TEXT,\n TableDisplayColumnType.HYPERLINK,\n TableDisplayColumnType.CLICK,\n ].includes(column.type)\n ) {\n const dataStr = dataValue?.toString().toLowerCase() || '';\n const searchStr = (value as string)?.toLowerCase() || '';\n return dataStr.includes(searchStr);\n } else if (\n [\n TableDisplayColumnType.NUMBER,\n TableDisplayColumnType.MONEY,\n ].includes(column.type)\n ) {\n // Number filtering (handle exact value or range)\n const filterValue = value as {\n operation?: NumberOperator;\n min?: number;\n max?: number;\n value?: number;\n };\n const numValue = Number(dataValue);\n\n if (isNaN(numValue)) return false;\n\n if (filterValue.value != null) {\n switch (filterValue.operation) {\n case NumberOperator.EQUAL:\n return numValue === filterValue.value;\n case NumberOperator.NOT_EQUAL:\n return numValue !== filterValue.value;\n case NumberOperator.GREATER_THAN:\n return numValue > filterValue.value;\n case NumberOperator.GREATER_THAN_OR_EQUAL:\n return numValue >= filterValue.value;\n case NumberOperator.LESS_THAN:\n return numValue < filterValue.value;\n case NumberOperator.LESS_THAN_OR_EQUAL:\n return numValue <= filterValue.value;\n default:\n console.warn(`Unknown operator: ${filterValue.operation}`);\n return true;\n }\n } else if (filterValue.min != null && filterValue.max != null) {\n // Range filtering\n return numValue >= filterValue.min && numValue <= filterValue.max;\n } else if (filterValue.min != null) {\n return numValue >= filterValue.min;\n } else if (filterValue.max != null) {\n return numValue <= filterValue.max;\n }\n return true;\n } else if (column.type === TableDisplayColumnType.BOOLEAN) {\n return dataValue === value;\n } else if (column.type === TableDisplayColumnType.PHONE) {\n if (dataValue.phoneNumber.length === 10) {\n return dataValue.phoneNumber.includes(value.toString());\n }\n return dataValue.phoneNumber\n .replace('(', '')\n .replace(')', '')\n .replace('-', '')\n .includes(value.toString());\n } else if (\n [\n TableDisplayColumnType.DATETIME,\n TableDisplayColumnType.DATE,\n ].includes(column.type)\n ) {\n const filterValue = value as {\n start?: string | Date | null;\n end?: string | Date | null;\n };\n const dataDate =\n dataValue instanceof Date ? dataValue : new Date(dataValue);\n if (isNaN(dataDate.getTime())) return false;\n\n const startDate =\n filterValue.start instanceof Date\n ? filterValue.start\n : filterValue.start\n ? new Date(filterValue.start)\n : null;\n const endDate =\n filterValue.end instanceof Date\n ? filterValue.end\n : filterValue.end\n ? new Date(filterValue.end)\n : null;\n\n if (startDate && isNaN(startDate.getTime())) return true;\n if (endDate && isNaN(endDate.getTime())) return true;\n\n if (startDate && endDate) {\n return dataDate >= startDate && dataDate <= endDate;\n } else if (startDate) {\n return dataDate >= startDate;\n } else if (endDate) {\n return dataDate <= endDate;\n }\n return true;\n }\n return true;\n });\n };\n }\n\n private buildFilterCriteria(formValue: any): FilterCriteria[] {\n const filterCriteria: FilterCriteria[] = [];\n\n Object.entries(formValue).forEach(([field, value]) => {\n if (value === null || value === '') return;\n\n const column = this.displayedColumns.find(col => col.property === field);\n if (!column) return;\n\n const filterField = column.filterProperty || column.property;\n\n switch (column.type) {\n case TableDisplayColumnType.TEXT:\n case TableDisplayColumnType.HYPERLINK:\n case TableDisplayColumnType.CLICK:\n case TableDisplayColumnType.PHONE:\n filterCriteria.push({\n field: filterField,\n operator: StringOperator.CONTAINS,\n value: value,\n });\n break;\n\n case TableDisplayColumnType.NUMBER:\n case TableDisplayColumnType.MONEY:\n // eslint-disable-next-line no-case-declarations\n const numFilter = value as {\n operation?: NumberOperator;\n min?: number;\n max?: number;\n value?: number;\n };\n\n if (numFilter.value != null && numFilter.operation) {\n filterCriteria.push({\n field: filterField,\n operator: numFilter.operation,\n value: numFilter.value,\n });\n } else if (numFilter.min != null || numFilter.max != null) {\n if (numFilter.min != null) {\n filterCriteria.push({\n field: filterField,\n operator: NumberOperator.GREATER_THAN_OR_EQUAL,\n value: numFilter.min,\n });\n }\n if (numFilter.max != null) {\n filterCriteria.push({\n field: filterField,\n operator: NumberOperator.LESS_THAN_OR_EQUAL,\n value: numFilter.max,\n });\n }\n }\n break;\n\n case TableDisplayColumnType.BOOLEAN:\n if (value !== null) {\n filterCriteria.push({\n field: filterField,\n operator: StringOperator.EXACT,\n value: value,\n });\n }\n break;\n\n case TableDisplayColumnType.DATE:\n case TableDisplayColumnType.DATETIME:\n // eslint-disable-next-line no-case-declarations\n const dateFilter = value as {\n start?: Date | null;\n end?: Date | null;\n };\n\n if (dateFilter.start && dateFilter.end) {\n filterCriteria.push({\n field: filterField,\n operator: DateOperator.DATE_RANGE,\n value: JSON.stringify({\n start: dateFilter.start.toISOString(),\n end: dateFilter.end.toISOString(),\n }),\n });\n } else if (dateFilter.start) {\n filterCriteria.push({\n field: filterField,\n operator: DateOperator.AFTER,\n value: dateFilter.start.toISOString(),\n });\n } else if (dateFilter.end) {\n filterCriteria.push({\n field: filterField,\n operator: DateOperator.BEFORE,\n value: dateFilter.end.toISOString(),\n });\n }\n break;\n }\n });\n\n if (this.id) {\n this.setTableQuery(this.id, { filters: filterCriteria });\n }\n\n // Store current filters\n this.currentFilters = filterCriteria;\n\n return filterCriteria;\n }\n\n filterSelectionChanged(selectedFilters: string[]) {\n this.selectedFilters = this.displayedColumns.filter(col =>\n selectedFilters.includes(col.property)\n );\n\n if (this.hasFilter && this.separateFilters) {\n const currentControls = Object.keys(\n this.filterByColumnFormGroup.controls\n );\n\n // Add new controls for selected filters\n this.selectedFilters.forEach(filter => {\n if (!currentControls.includes(filter.property)) {\n switch (filter.type) {\n case TableDisplayColumnType.HYPERLINK:\n case TableDisplayColumnType.TEXT:\n case TableDisplayColumnType.PHONE:\n case TableDisplayColumnType.CLICK:\n case TableDisplayColumnType.ARRAY:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormGroup({\n operator: new FormControl<StringOperator>(\n StringOperator.CONTAINS\n ),\n value: new FormControl<string | null>(null),\n }),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.BOOLEAN:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormControl<boolean | null>(null),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.MONEY:\n case TableDisplayColumnType.NUMBER:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormGroup({\n operation: new FormControl<string | null>(null),\n min: new FormControl<number | null>(null),\n max: new FormControl<number | null>(null),\n value: new FormControl<number | null>(null),\n }),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.DATE:\n case TableDisplayColumnType.DATETIME:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormGroup({\n start: new FormControl<Date | null>(null),\n end: new FormControl<Date | null>(null),\n }),\n { emitEvent: false }\n );\n break;\n }\n }\n });\n\n currentControls.forEach(controlName => {\n if (\n !this.selectedFilters.some(filter => filter.property === controlName)\n ) {\n this.filterByColumnFormGroup.removeControl(controlName, {\n emitEvent: false,\n });\n }\n });\n }\n }\n\n deleteAction() {\n this.delete.emit(this.selection);\n }\n\n approveAction() {\n this.approve.emit(this.selection);\n }\n\n rejectAction() {\n this.reject.emit(this.selection);\n }\n\n extendAction() {\n this.extend.emit(this.selection);\n }\n\n addAction() {\n this.add.emit();\n }\n\n clickedAction(item: any) {\n this.clicked.emit(item);\n if (this.haveCheckbox) {\n this.selection.toggle(item);\n }\n }\n\n onPageChange(event: PageEvent) {\n if (this.id) {\n this.setTableQuery(this.id, {\n pageSize: event.pageSize,\n pageNumber: event.pageIndex,\n });\n }\n\n // Only emit for server-side filtering\n if (this.serverSideFiltering) {\n this.queryChange.emit({\n filters: this.currentFilters,\n pageIndex: event.pageIndex,\n pageSize: event.pageSize,\n });\n }\n }\n\n /** Whether the number of selected elements matches the total number of rows. */\n isAllSelected() {\n const numSelected = this.selection.selected.length;\n const dataSourceLength = this.specificSelectRow\n ? this.dataSource.data.filter(row => this.isApplicationSubmitted(row))\n .length\n : this.dataSource.data.length;\n return numSelected === dataSourceLength;\n }\n\n /** Selects all rows if they are not all selected; otherwise clear selection. */\n toggleAllRows() {\n if (this.isAllSelected()) {\n this.selection.clear();\n return;\n }\n\n this.selection.select(...this.dataSource.data);\n }\n\n /** The label for the checkbox on the passed row */\n checkboxLabel(row?: any): string {\n if (!row) {\n return `${this.isAllSelected() ? 'deselect' : 'select'} all`;\n }\n return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${\n row.id\n }`;\n }\n\n selectRow(row?: any): void {\n if (!this.specificSelectRow) {\n this.selection.toggle(row);\n }\n }\n\n setInitSort(): void {\n this.initSortedCol = this.displayedColumns.find(\n (col: TableDisplayColumn) => col.initSort!\n )!;\n }\n\n setInitFilter(): void {\n if (this.hasFilter && this.separateFilters) {\n setTimeout(() => {\n this.buildColumnFilterControls();\n });\n }\n }\n\n private restoreTableQuery(): void {\n if (!this.id) return;\n\n const savedQuery = localStorage.getItem(this.id);\n if (!savedQuery) {\n if (this.serverSideFiltering) {\n this.queryChange.emit({\n filters: [],\n pageIndex: 0,\n pageSize: this.initialPageSize || 10,\n });\n }\n return;\n }\n\n try {\n const tableQuery: TableQuery = JSON.parse(savedQuery);\n\n if (tableQuery.pageSize && this.paginatorRef) {\n this.paginatorRef.pageSize = tableQuery.pageSize;\n }\n if (tableQuery.pageNumber !== undefined && this.paginatorRef) {\n this.paginatorRef.pageIndex = tableQuery.pageNumber;\n }\n\n if (tableQuery.filters && tableQuery.filters.length > 0) {\n this.restoreFiltersFromCriteria(tableQuery.filters);\n this.currentFilters = tableQuery.filters;\n }\n\n if (this.serverSideFiltering) {\n this.queryChange.emit({\n filters: tableQuery.filters || [],\n pageIndex: tableQuery.pageNumber || 0,\n pageSize: tableQuery.pageSize || this.initialPageSize || 10,\n });\n }\n } catch (error) {\n console.error('Failed to restore table query:', error);\n localStorage.removeItem(this.id);\n\n if (this.serverSideFiltering) {\n this.queryChange.emit({\n filters: [],\n pageIndex: 0,\n pageSize: this.initialPageSize || 10,\n });\n }\n }\n }\n\n private restoreFiltersFromCriteria(filterCriteria: FilterCriteria[]): void {\n const formValue: any = {};\n\n filterCriteria.forEach(criteria => {\n const column = this.displayedColumns.find(\n col => (col.filterProperty || col.property) === criteria.field\n );\n\n if (!column) return;\n\n const property = column.property;\n\n switch (column.type) {\n case TableDisplayColumnType.TEXT:\n case TableDisplayColumnType.HYPERLINK:\n case TableDisplayColumnType.CLICK:\n case TableDisplayColumnType.PHONE:\n formValue[property] = criteria.value;\n break;\n\n case TableDisplayColumnType.BOOLEAN:\n formValue[property] = criteria.value;\n break;\n\n case TableDisplayColumnType.NUMBER:\n case TableDisplayColumnType.MONEY:\n if (!formValue[property]) {\n formValue[property] = {\n operation: null,\n min: null,\n max: null,\n value: null,\n };\n }\n\n if (criteria.operator === NumberOperator.GREATER_THAN_OR_EQUAL) {\n formValue[property].min = criteria.value;\n } else if (criteria.operator === NumberOperator.LESS_THAN_OR_EQUAL) {\n formValue[property].max = criteria.value;\n } else {\n formValue[property].operation = criteria.operator;\n formValue[property].value = criteria.value;\n }\n break;\n\n case TableDisplayColumnType.DATE:\n case TableDisplayColumnType.DATETIME:\n if (criteria.operator === DateOperator.DATE_RANGE) {\n const range = JSON.parse(criteria.value as string);\n formValue[property] = {\n start: new Date(range.start),\n end: new Date(range.end),\n };\n } else if (criteria.operator === DateOperator.AFTER) {\n formValue[property] = {\n start: new Date(criteria.value as string),\n end: null,\n };\n } else if (criteria.operator === DateOperator.BEFORE) {\n formValue[property] = {\n start: null,\n end: new Date(criteria.value as string),\n };\n }\n break;\n }\n });\n\n // Patch with emitEvent: false to prevent duplicate emissions during restoration\n this.filterByColumnFormGroup.patchValue(formValue, { emitEvent: false });\n\n // For client-side filtering, manually apply filter\n if (!this.serverSideFiltering && Object.keys(formValue).length > 0) {\n this.dataSource.filter = JSON.stringify(formValue);\n\n if (this.dataSource.paginator) {\n this.dataSource.paginator.firstPage();\n }\n }\n }\n\n private setTableQuery(\n id: string,\n tableQueryParams: Partial<TableQuery>\n ): void {\n let tableQuery: TableQuery;\n\n const existingQuery = localStorage.getItem(id);\n if (existingQuery) {\n tableQuery = JSON.parse(existingQuery);\n\n // If filters are being updated, reset page number to 0\n if (tableQueryParams.filters !== undefined) {\n tableQuery = {\n ...tableQuery,\n ...tableQueryParams,\n pageNumber: 0, // Reset to first page when filters change\n };\n } else {\n tableQuery = { ...tableQuery, ...tableQueryParams };\n }\n } else {\n tableQuery = {\n filters: tableQueryParams.filters || [],\n pageSize: tableQueryParams.pageSize || this.initialPageSize || 10,\n pageNumber: tableQueryParams.pageNumber || 0,\n };\n }\n\n localStorage.setItem(id, JSON.stringify(tableQuery));\n }\n\n buildColumnFilterControls() {\n this.selectedFilters = this.displayedColumns.filter(\n col =>\n !col.disableFiltering &&\n this.displayedColumnsWithoutSelect\n .map(c => c.property)\n .includes(col.property)\n );\n\n if (this.hasFilter && this.separateFilters) {\n const currentControls = Object.keys(\n this.filterByColumnFormGroup.controls\n );\n\n // Add new controls for selected filters\n this.selectedFilters.forEach(filter => {\n if (!currentControls.includes(filter.property)) {\n switch (filter.type) {\n case TableDisplayColumnType.HYPERLINK:\n case TableDisplayColumnType.TEXT:\n case TableDisplayColumnType.PHONE:\n case TableDisplayColumnType.CLICK:\n case TableDisplayColumnType.ARRAY:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormControl<string | null>(null),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.BOOLEAN:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormControl<boolean | null>(null),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.MONEY:\n case TableDisplayColumnType.NUMBER:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormGroup({\n operation: new FormControl<string | null>(null),\n min: new FormControl<number | null>(null),\n max: new FormControl<number | null>(null),\n value: new FormControl<number | null>(null),\n }),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.DATE:\n case TableDisplayColumnType.DATETIME:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormGroup({\n start: new FormControl<Date | null>(null),\n end: new FormControl<Date | null>(null),\n }),\n { emitEvent: false }\n );\n break;\n }\n }\n });\n }\n }\n\n setEmptyMessage(): void {\n this.emptyMessage = this.title.pipe(\n switchMap(title =>\n iif(\n () => this.actions.includes(ActionType.ADD),\n this.translateService.get('messages.emptyMessageTableAdd', 1, {\n value: title,\n }),\n this.translateService.get('messages.emptyMessageTable')\n )\n )\n );\n }\n\n formatPhoneNumber(value: string): string {\n if (value && value.length === 10 && /^\\d{10}$/.test(value)) {\n return `(${value.slice(0, 3)}) ${value.slice(3, 6)}-${value.slice(\n 6,\n 10\n )}`;\n }\n return value;\n }\n\n getRowBackgroundColor(index: number) {\n return index % 2 == 1 ? 'bg-accent' : 'bg-white';\n }\n\n getHyperlinkRoute(row: any, column: TableDisplayColumn): string {\n return column.route + (column.routeId ? row[column.routeId] : row.id);\n }\n\n private isApplicationSubmitted(row: any): boolean {\n return row.status === ApplicationStatus.SUBMITTED;\n }\n\n get hasSelectedRow(): boolean {\n return this.selection.hasValue();\n }\n\n get actionColumnStyleWidth() {\n return '5%';\n }\n\n get generalColumnStyleWidth() {\n const availableWidths =\n 100 - (this.haveCheckbox ? 5 : 0) - (this.expandableRows ? 5 : 0);\n const widthPerColumn = availableWidths / this.displayedColumns.length;\n return `${widthPerColumn}%`;\n }\n\n get displayedColumnsProperty() {\n return this.displayedColumns\n .filter(x => this.displayCheckbox || x.property !== 'select')\n .map(col => col.property);\n }\n\n get displayedColumnsWithoutSelect() {\n return this.displayedColumns.filter(x => x.property !== 'select');\n }\n\n get displayCheckbox() {\n return this.haveCheckbox;\n }\n\n protected readonly capitalize = capitalize;\n protected readonly TableDisplayColumnType = TableDisplayColumnType;\n protected readonly NumberOperator = NumberOperator;\n protected readonly ActionType = ActionType;\n}\n","<div class=\"table-div px-4 mx-4\">\n <mat-card\n appearance=\"outlined\"\n class=\"px-0 table-card\"\n [ngClass]=\"[actions.length === 0 ? 'pt-2' : 'pb-0']\"\n style=\"border-color: var(--accent-darker-color)\">\n @if (!disableHeader) {\n <mat-card-header\n class=\"d-flex justify-content-between align-items-center table-header\"\n [ngClass]=\"[actions.length === 0 ? 'pb-3' : 'pb-0']\">\n <div class=\"d-flex align-items-center\">\n @if (icon) {\n <mat-icon fontSet=\"material-icons-outlined\" class=\"table-header-icon ml-3\">\n {{ icon }}\n </mat-icon>\n }\n <h6 class=\"ml-2 table-title\">{{ title | async | capitalize }}</h6>\n </div>\n <div class=\"d-flex align-items-center action-buttons-group pr-2\">\n @if (actions.includes(ActionType.ADD)) {\n <button\n mat-flat-button\n color=\"primary\"\n class=\"action-btn action-btn--add\"\n (click)=\"addAction()\">\n <mat-icon class=\"btn-icon\">add</mat-icon>\n <span>{{ 'actions.add' | translate | capitalize }}</span>\n </button>\n }\n @if (displayCheckbox) {\n @if (actions.includes(ActionType.APPROVE)) {\n <button\n mat-stroked-button\n class=\"action-btn action-btn--approve\"\n [disabled]=\"!hasSelectedRow\"\n (click)=\"approveAction()\">\n <mat-icon class=\"btn-icon\">check_circle_outline</mat-icon>\n <span>{{ 'actions.approve' | translate | capitalize }}</span>\n </button>\n }\n @if (actions.includes(ActionType.REJECT)) {\n <button\n mat-stroked-button\n class=\"action-btn action-btn--reject\"\n [disabled]=\"!hasSelectedRow\"\n (click)=\"rejectAction()\">\n <mat-icon class=\"btn-icon\">cancel</mat-icon>\n <span>{{ 'actions.reject' | translate | capitalize }}</span>\n </button>\n }\n @if (actions.includes(ActionType.EXTEND)) {\n <button\n mat-stroked-button\n color=\"primary\"\n class=\"action-btn\"\n [disabled]=\"!hasSelectedRow\"\n (click)=\"extendAction()\">\n <mat-icon class=\"btn-icon extend-icon\">call_missed</mat-icon>\n <span>{{ 'actions.extend' | translate | capitalize }}</span>\n </button>\n }\n @if (actions.includes(ActionType.DELETE)) {\n <button\n mat-stroked-button\n class=\"action-btn action-btn--delete\"\n [disabled]=\"!hasSelectedRow\"\n (click)=\"deleteAction()\">\n <mat-icon class=\"btn-icon\">delete_outline</mat-icon>\n <span>{{ 'actions.delete' | translate | capitalize }}</span>\n </button>\n }\n @for (custom of customActions; track custom) {\n <button\n mat-stroked-button\n color=\"primary\"\n class=\"action-btn\"\n [disabled]=\"!hasSelectedRow || custom.disabled?.(selection)\"\n (click)=\"custom.clickFn(selection)\">\n <mat-icon class=\"btn-icon\">{{ custom.icon }}</mat-icon>\n <span>{{ custom.tooltipText | translate | capitalize }}</span>\n </button>\n }\n }\n @if (actionsMenuEnabled) {\n <button\n mat-stroked-button\n color=\"primary\"\n class=\"action-btn\"\n [matMenuTriggerFor]=\"menu\">\n <span>{{\n 'names.action' | translate | pluralize | capitalize\n }}</span>\n <mat-icon class=\"btn-icon\">keyboard_arrow_down</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-container\n *ngTemplateOutlet=\"\n actionsTemplate;\n context: {\n selection: selection,\n data: dataSource.data,\n selectedRows: selection.selected,\n }\n \"></ng-container>\n </mat-menu>\n }\n </div>\n </mat-card-header>\n }\n <mat-card-content>\n @if (!separateFilters) {\n <mat-form-field\n class=\"ml-4\"\n appearance=\"outline\"\n [ngStyle]=\"{ display: hasFilter ? '' : 'none' }\">\n <mat-icon class=\"filter p-0\" matSuffix>filter_alt</mat-icon>\n <mat-label>Filter</mat-label>\n <input\n #allFilterInput\n matInput\n (keyup)=\"applyFilterToAllColumns($event)\"\n placeholder=\"Sort On Any Field\" />\n </mat-form-field>\n } @else {\n <div class=\"separate-filters\">\n <form [formGroup]=\"filterByColumnFormGroup\" class=\"filters\">\n @for (filter of selectedFilters; track filter) {\n <div class=\"filter\">\n @if (\n filter.type === TableDisplayColumnType.HYPERLINK ||\n filter.type === TableDisplayColumnType.TEXT ||\n filter.type === TableDisplayColumnType.PHONE ||\n filter.type === TableDisplayColumnType.CLICK ||\n filter.type === TableDisplayColumnType.ARRAY\n ) {\n <mat-form-field\n subscriptSizing=\"dynamic\"\n class=\"custom-input\"\n appearance=\"outline\">\n <mat-label>\n {{ filter.name | async | capitalize }}\n </mat-label>\n <input\n matInput\n type=\"text\"\n [formControlName]=\"filter.property\" />\n </mat-form-field>\n } @else {\n <button\n class=\"filter-button-trigger\"\n mat-stroked-button\n [matMenuTriggerFor]=\"dropdownMenu\">\n {{ filter.name | async | capitalize }}\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <mat-menu #dropdownMenu=\"matMenu\" class=\"custom-dropdown\">\n <div\n class=\"dropdown-content\"\n (click)=\"$event.stopPropagation()\">\n @if (filter.type === TableDisplayColumnType.BOOLEAN) {\n <mat-slide-toggle [formControlName]=\"filter.property\" />\n } @else if (\n filter.type === TableDisplayColumnType.NUMBER ||\n filter.type === TableDisplayColumnType.MONEY\n ) {\n <div\n class=\"number-content\"\n [formGroupName]=\"filter.property\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\">\n <mat-label>Operation type</mat-label>\n <mat-select formControlName=\"operation\">\n @for (\n operator of numberOperations;\n track operator\n ) {\n <mat-option [value]=\"operator.value\">\n {{ operator.label | async | capitalize }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (\n filterByColumnFormGroup.controls[filter.property]\n .value.operation &&\n filterByColumnFormGroup.controls[filter.property]\n .value.operation !== NumberOperator.BETWEEN\n ) {\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\">\n <mat-label\n >{{\n 'operators.' +\n filterByColumnFormGroup.controls[\n filter.property\n ].value.operation\n | translate\n | capitalize\n }}\n </mat-label>\n <input\n formControlName=\"value\"\n matInput\n type=\"number\" />\n </mat-form-field>\n } @else if (\n filterByColumnFormGroup.controls[filter.property]\n .value.operation\n ) {\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\">\n <mat-label\n >{{\n 'operators.minimum' | translate | capitalize\n }}\n </mat-label>\n <input\n formControlName=\"min\"\n matInput\n type=\"number\" />\n </mat-form-field>\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\">\n <mat-label\n >{{\n 'operators.maximum' | translate | capitalize\n }}\n </mat-label>\n <input\n formControlName=\"max\"\n matInput\n type=\"number\" />\n </mat-form-field>\n }\n </div>\n } @else if (\n filter.type === TableDisplayColumnType.DATETIME ||\n filter.type === TableDisplayColumnType.DATE\n ) {\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\">\n <mat-label>Enter a date range</mat-label>\n <mat-date-range-input\n [formGroupName]=\"filter.property\"\n [rangePicker]=\"picker\">\n <input\n matStartDate\n formControlName=\"start\"\n placeholder=\"Start date\" />\n <input\n matEndDate\n formControlName=\"end\"\n placeholder=\"End date\" />\n </mat-date-range-input>\n <mat-hint>MM/DD/YYYY – MM/DD/YYYY</mat-hint>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\" />\n <mat-date-range-picker #picker />\n </mat-form-field>\n }\n </div>\n </mat-menu>\n }\n </div>\n }\n </form>\n </div>\n }\n @if (!isLoading) {\n @if (dataSource.filteredData.length > 0) {\n <table\n mat-table\n matSort\n [matSortActive]=\"initSortedCol?.property!\"\n [matSortDirection]=\"initSortedCol?.initSort!\"\n [multiTemplateDataRows]=\"expandableRows\"\n [dataSource]=\"dataSource\">\n <!-- Checkbox Column -->\n @if (displayCheckbox) {\n <ng-container matColumnDef=\"select\">\n <th\n [ngStyle]=\"{ width: actionColumnStyleWidth }\"\n class=\"checkbox-header\"\n mat-header-cell\n *matHeaderCellDef>\n <mat-checkbox\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n color=\"primary\">\n </mat-checkbox>\n </th>\n <td\n [ngStyle]=\"{ width: actionColumnStyleWidth }\"\n class=\"checkbox-cell\"\n mat-cell\n *matCellDef=\"let row\">\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\"\n [aria-label]=\"checkboxLabel(row)\"\n class=\"mt-2 mr-2\"\n color=\"primary\">\n </mat-checkbox>\n </td>\n </ng-container>\n }\n @for (column of displayedColumnsWithoutSelect; track column) {\n <ng-container matColumnDef=\"{{ column.property }}\">\n <th\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-header-cell\n *matHeaderCellDef>\n {{ column.name | async | capitalize }}\n </th>\n @if (column.dataCellTemplate !== undefined) {\n <td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n (click)=\"$event.stopPropagation()\">\n <ng-container\n *ngTemplateOutlet=\"\n column.dataCellTemplate;\n context: { $implicit: row, index }\n \" />\n </td>\n } @else if (column.type) {\n <ng-container>\n @switch (column.type) {\n @case (tableDisplayColumnType.ARRAY) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <span>\n {{\n column.transformFn?.(row[column.property]) ??\n row[column.property].join(', ')\n }}\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.TEXT) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <span\n [innerHTML]=\"\n column.transformFn?.(row[column.property]) ??\n row[column.property]\n \">\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.NUMBER) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <span\n [innerHTML]=\"\n column.transformFn?.(row[column.property]) ??\n row[column.property]\n \">\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.TEXT_OBSERVABLES) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <span>\n {{ row[column.property] | async | capitalize }}\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.BOOLEAN) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <mat-icon\n class=\"mt-2\"\n [matTooltip]=\"\n (row[column.property]\n ? 'names.active'\n : 'names.inactive'\n )\n | translate\n | capitalize\n \"\n matTooltipPosition=\"right\">\n {{ row[column.property] ? 'check' : 'close' }}\n </mat-icon>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.CLICK) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <span (click)=\"clickedAction(row)\" class=\"link\">\n {{ row[column.property] }}\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.DATE) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n {{ row[column.property] | date: 'MMMM dd, yyyy' }}\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.DATETIME) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n {{\n row[column.property]\n | date: 'MMMM dd, yyyy h:mm a'\n }}\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.HYPERLINK) {\n <ng-container>\n <td\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-cell\n *matCellDef=\"let row\">\n <span\n class=\"link\"\n [routerLink]=\"getHyperlinkRoute(row, column)\"\n (click)=\"$event.stopPropagation()\">\n {{ row[column.property] }}\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.ICON) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <mat-icon\n [ngStyle]=\"{\n color:\n column.icons![row[column.property]].color,\n }\">\n {{ column.icons![row[column.property]].name }}\n </mat-icon>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.MONEY) {\n <ng-container>\n <td\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-cell\n *matCellDef=\"let row\">\n ${{ row[column.property] }}\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.PHONE) {\n <ng-container>\n <td\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-cell\n *matCellDef=\"let row\">\n @if (row[column.property].countryCode?.code) {\n <span>\n (+{{\n row[column.property].countryCode.code || ''\n }})\n </span>\n }\n {{\n formatPhoneNumber(\n row[column.property].phoneNumber\n )\n }}\n </td>\n </ng-container>\n }\n }\n </ng-container>\n } @else {\n <ng-container>\n <td\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-cell\n *matCellDef=\"let row\">\n {{ row[column.property] }}\n </td>\n </ng-container>\n }\n </ng-container>\n }\n <ng-container matColumnDef=\"expand\">\n <th\n [ngStyle]=\"{ width: actionColumnStyleWidth }\"\n mat-header-cell\n *matHeaderCellDef\n aria-label=\"row actions\">\n &nbsp;\n </th>\n <td\n [ngStyle]=\"{ width: actionColumnStyleWidth }\"\n mat-cell\n *matCellDef=\"let element\">\n <button\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"\n expandedElement =\n expandedElement === element ? null : element;\n $event.stopPropagation()\n \">\n @if (expandedElement !== element) {\n <mat-icon> keyboard_arrow_down</mat-icon>\n } @else {\n <mat-icon> keyboard_arrow_up</mat-icon>\n }\n </button>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-cell\n class=\"ml-auto\"\n *matCellDef=\"let element\"\n [attr.colspan]=\"columnsToDisplayWithExpand.length\">\n <div\n class=\"element-detail justify-content-center\"\n [@detailExpand]=\"\n element === expandedElement ? 'expanded' : 'collapsed'\n \">\n @if (expandedItem.type === 'image') {\n <img\n class=\"pb-4\"\n [src]=\"element[expandedItem.property]\"\n alt=\"\" />\n }\n </div>\n </td>\n </ng-container>\n\n @if (!expandableRows) {\n <ng-container>\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumnsProperty\"></tr>\n <tr\n mat-row\n *matRowDef=\"\n let row;\n columns: displayedColumnsProperty;\n let i = index\n \"\n (click)=\"selectRow(row)\"\n [ngClass]=\"getRowBackgroundColor(i)\"></tr>\n </ng-container>\n } @else {\n <ng-container>\n <tr\n mat-header-row\n *matHeaderRowDef=\"columnsToDisplayWithExpand\"></tr>\n <tr\n mat-row\n *matRowDef=\"\n let row;\n columns: columnsToDisplayWithExpand;\n let i = dataIndex\n \"\n [id]=\"i\"\n class=\"element-row\"\n [class.expanded-row]=\"expandedElement === row\"\n [ngClass]=\"getRowBackgroundColor(i)\"></tr>\n <tr\n mat-row\n *matRowDef=\"\n let row;\n columns: ['expandedDetail'];\n let i = dataIndex\n \"\n [id]=\"i\"\n [ngClass]=\"getRowBackgroundColor(i)\"\n [ngStyle]=\"{\n display: expandedElement === row ? 'contents' : 'none',\n }\"\n class=\"detail-row\"></tr>\n </ng-container>\n }\n\n <!-- Row shown when there is no matching data. -->\n @if (separateFilters && allFilterInput) {\n <div>\n <tr\n class=\"mat-row\"\n *matNoDataRow\n style=\"background: var(--accent-color)\">\n @if (separateFilters && allFilterInput) {\n <td\n class=\"mat-cell\"\n [attr.colspan]=\"columnsToDisplayWithExpand.length\">\n No data matching the filter \"{{\n allFilterInput.nativeElement.value\n }}\"\n </td>\n } @else {\n <td\n class=\"mat-cell\"\n [attr.colspan]=\"columnsToDisplayWithExpand.length\">\n {{ emptyMessage | async }}\n </td>\n }\n </tr>\n </div>\n }\n </table>\n } @else {\n <div class=\"no-data-found\">\n <mat-icon class=\"no-data-icon\">\n {{ dataSource.data.length > 0 ? 'search_off' : 'inbox' }}\n </mat-icon>\n <p class=\"no-data-text\">\n {{\n dataSource.data.length > 0\n ? ('messages.modifyFilter' | translate | capitalize)\n : noTableDataMessage\n }}\n </p>\n </div>\n }\n } @else {\n <div class=\"loading-container\">\n <mat-progress-spinner\n class=\"mx-auto\"\n [diameter]=\"32\"\n color=\"primary\"\n mode=\"indeterminate\" />\n </div>\n }\n @if (showPaginator) {\n <mat-paginator\n aria-label=\"Select page of users\"\n [ngClass]=\"getRowBackgroundColor(dataSource.data.length)\"\n [length]=\"totalElements ?? dataSource.data.length\"\n [pageSize]=\"initialPageSize\"\n [pageSizeOptions]=\"paginationSizeOptions\"\n (page)=\"onPageChange($event)\"\n showFirstLastButtons />\n }\n </mat-card-content>\n </mat-card>\n</div>\n","import {\n AfterViewInit,\n Component,\n Input,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\n@Component({\n selector: 'ud-dynamic-component',\n templateUrl: './dynamic-component.component.html',\n styleUrls: ['./dynamic-component.component.scss'],\n})\nexport class DynamicComponentComponent implements AfterViewInit {\n @Input() component!: any;\n @Input() properties: { [key: string]: any } = {};\n\n @ViewChild('container', { read: ViewContainerRef })\n container!: ViewContainerRef;\n componentRef: any;\n\n constructor() {}\n\n ngAfterViewInit(): void {\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n\n this.componentRef = this.container.createComponent(this.component);\n Object.keys(this.properties).forEach(key => {\n this.componentRef.instance[key] = this.properties[key];\n });\n }\n}\n","<div #container></div>\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Directive({\n selector: '[editViewSection]',\n standalone: true,\n})\nexport class EditViewSectionDirective {\n @Input() label: string | Observable<string> = '';\n @Input() icon: string = '';\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","import { AsyncPipe, CommonModule } from '@angular/common';\nimport { Component, ContentChildren, Input, QueryList } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { isObservable, Observable, of } from 'rxjs';\nimport { EditViewSectionDirective } from './edit-view-section.directive';\n\n@Component({\n selector: 'ud-edit-view',\n templateUrl: './edit-view.component.html',\n styleUrl: './edit-view.component.scss',\n standalone: true,\n imports: [\n CommonModule,\n AsyncPipe,\n NgxSkeletonLoaderModule,\n MatIconModule,\n MatButtonModule,\n ],\n})\nexport class EditViewComponent {\n @Input() title: string = '';\n @Input() loading: boolean = false;\n @Input() skeletonTitleHeight: string = '20px';\n @Input() skeletonBodyHeight: string = '150px';\n\n @ContentChildren(EditViewSectionDirective)\n sections!: QueryList<EditViewSectionDirective>;\n\n get sectionsArray(): EditViewSectionDirective[] {\n return this.sections?.toArray() ?? [];\n }\n\n get hasSections(): boolean {\n return (this.sections?.length ?? 0) > 0;\n }\n\n resolveLabel(label: string | Observable<string>): Observable<string> {\n return isObservable(label) ? label : of(label);\n }\n}\n","<div class=\"container\">\n <div class=\"header\">\n @if (loading) {\n <ngx-skeleton-loader\n class=\"loading col-6\"\n [count]=\"1\"\n [theme]=\"{ height: skeletonTitleHeight }\" />\n } @else {\n <h4>{{ title }}</h4>\n }\n <ng-content select=\"[header-actions]\"></ng-content>\n </div>\n <div class=\"content\" [ngClass]=\"{ loading: loading }\">\n @if (loading) {\n <ngx-skeleton-loader\n class=\"col\"\n [count]=\"1\"\n [theme]=\"{ height: skeletonBodyHeight }\" />\n } @else {\n @if (hasSections) {\n @for (sec of sectionsArray; track sec) {\n <div class=\"section\">\n @if (resolveLabel(sec.label) | async; as label) {\n <div class=\"section-header\">\n @if (sec.icon) {\n <mat-icon class=\"section-icon\">{{ sec.icon }}</mat-icon>\n }\n <span class=\"section-label\">{{ label }}</span>\n </div>\n }\n <ng-container [ngTemplateOutlet]=\"sec.templateRef\"></ng-container>\n </div>\n }\n }\n <ng-content select=\"[main]\"></ng-content>\n }\n </div>\n @if (!loading) {\n <ng-content select=\"[footer]\"></ng-content>\n }\n</div>\n","export enum ModalInputType {\n DATERANGE = 'daterange',\n DATETIME = 'datetime',\n TIME = 'time',\n FILE = 'file',\n INPUT = 'input',\n OPTIONS = 'options',\n MULTI_SELECT = 'multiselect',\n AUTOCOMPLETE = 'autocomplete',\n PHONE = 'phone',\n TEXT_AREA = 'text_area',\n CHIPS = 'chips',\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'singular',\n})\nexport class SingularPipe implements PipeTransform {\n transform(value: string): string {\n return value.includes('|') ? value.split('|')[0].trim() : value;\n }\n}\n","import { formatLocalTimeWithMinutesAmPm } from './common-utils';\n\nexport const generateTimeOptions = (\n start: Date,\n end: Date,\n intervalMinutes: number = 5\n): { label: string; value: Date }[] => {\n const options: { label: string; value: Date }[] = [];\n const cursor = new Date(start);\n\n cursor.setSeconds(0, 0);\n\n while (cursor <= end) {\n options.push({\n label: formatLocalTimeWithMinutesAmPm(cursor),\n value: new Date(cursor),\n });\n cursor.setMinutes(cursor.getMinutes() + intervalMinutes, 0, 0);\n }\n\n return options;\n};\n","import { CountryCode } from '../../interfaces/phone.interface';\nimport { Component, Input, OnInit } from '@angular/core';\nimport {\n AbstractControl,\n FormGroup,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport {\n MatFormField,\n MatFormFieldAppearance,\n} from '@angular/material/form-field';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport {\n MatOption,\n MatSelect,\n MatSelectTrigger,\n} from '@angular/material/select';\nimport { NgStyle } from '@angular/common';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatError, MatInput, MatLabel } from '@angular/material/input';\n\n@Component({\n selector: 'ud-tel-input',\n templateUrl: './tel-input.component.html',\n styleUrls: ['./tel-input.component.scss'],\n imports: [\n MatFormField,\n MatSelect,\n MatSelectTrigger,\n TranslatePipe,\n CapitalizePipe,\n ReactiveFormsModule,\n NgStyle,\n MatOption,\n MatIcon,\n MatInput,\n MatError,\n MatLabel,\n ],\n})\nexport class TelInputComponent implements OnInit {\n @Input() group!: AbstractControl;\n @Input() appearance: MatFormFieldAppearance = 'fill';\n @Input() width: number = 400;\n @Input() showIcon: boolean = true;\n\n protected static COUNTRIES: CountryCode[] = [\n { country: 'Canada', flag: '🇨🇦', code: 1 },\n { country: 'US', flag: '🇺🇸', code: 1 },\n // { country: 'Moldova', flag: '🇲🇩', code: 373 },\n // { country: 'Armenia', flag: '🇦🇲', code: 374 },\n ];\n protected countries = TelInputComponent.COUNTRIES;\n protected selectedCountry = TelInputComponent.COUNTRIES[0];\n\n ngOnInit() {\n const countryCodeValue = this.countryCode.value;\n\n if (!countryCodeValue) {\n this.countryCode.setValue(this.countries[0]);\n } else {\n // this seems redundant, but mat-select-trigger for\n // some reason doesn't show the initial value, so this\n // operation kind of jumpstarts it\n this.countryCode.setValue(\n this.countries.find(c => countryCodeValue.country === c.country)\n );\n }\n }\n\n get countryCode(): AbstractControl {\n return (this.group as FormGroup).controls['countryCode'];\n }\n\n get phoneNumber(): AbstractControl {\n return (this.group as FormGroup).controls['phoneNumber'];\n }\n}\n","<div class=\"d-flex\">\n <mat-form-field class=\"select\" [ngStyle]=\"{ width: (2 * width) / 7 + 'px' }\">\n <mat-select [formControl]=\"$any(countryCode)\">\n <mat-select-trigger>\n {{ countryCode.value.flag }} +{{ countryCode.value.code }}\n </mat-select-trigger>\n @for (country of countries; track country) {\n <mat-option [value]=\"country\">\n <b>\n {{ country.flag }} {{ country.country }}\n <span class=\"text-secondary\">+{{ country.code }}</span>\n </b>\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field\n [appearance]=\"appearance\"\n [ngStyle]=\"{ width: (5 * width) / 7 + 'px' }\">\n @if (showIcon) {\n <mat-icon matPrefix fontSet=\"material-icons-outlined\" class=\"mr-2\">\n phone\n </mat-icon>\n }\n <mat-label>{{ 'names.phone' | translate | capitalize }}</mat-label>\n <input\n matInput\n type=\"number\"\n [formControl]=\"$any(phoneNumber)\"\n placeholder=\"{{ 'names.phone' | translate | capitalize }}\" />\n @if (!phoneNumber.valid && phoneNumber.value !== '') {\n <mat-error class=\"text-break text-wrap\">\n {{ 'messages.validation.validPhoneNumber' | translate }}\n </mat-error>\n }\n </mat-form-field>\n</div>\n","import { ModalInputType } from '../../enums/modal-input-type.enum';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport { SingularPipe } from '../../pipes/singular/singular.pipe';\nimport { generateTimeOptions } from '../../utils/time-options.utils';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { Component, Inject } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport {\n MatAutocomplete,\n MatAutocompleteTrigger,\n} from '@angular/material/autocomplete';\nimport { MatButton } from '@angular/material/button';\nimport {\n MatChipGrid,\n MatChipInput,\n MatChipRemove,\n MatChipRow,\n} from '@angular/material/chips';\nimport {\n MatDatepicker,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatDateRangeInput,\n MatDateRangePicker,\n MatEndDate,\n MatStartDate,\n} from '@angular/material/datepicker';\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n MatFormField,\n MatHint,\n MatInput,\n MatLabel,\n MatSuffix,\n} from '@angular/material/input';\nimport { MatOption, MatSelect } from '@angular/material/select';\nimport {\n MatTimepicker,\n MatTimepickerInput,\n MatTimepickerToggle,\n} from '@angular/material/timepicker';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { TelInputComponent } from '../tel-input/tel-input.component';\n\n@Component({\n selector: 'ud-modal',\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.scss'],\n imports: [\n CapitalizePipe,\n TranslatePipe,\n MatButton,\n MatDialogClose,\n MatDialogActions,\n MatChipInput,\n MatChipRow,\n MatIcon,\n ReactiveFormsModule,\n MatChipGrid,\n SingularPipe,\n MatFormField,\n MatFormField,\n MatHint,\n MatFormField,\n MatDateRangePicker,\n MatDatepickerToggle,\n MatSuffix,\n MatEndDate,\n MatStartDate,\n MatDateRangeInput,\n MatFormField,\n MatLabel,\n MatOption,\n MatSelect,\n MatLabel,\n MatFormField,\n CdkTextareaAutosize,\n MatInput,\n MatLabel,\n MatFormField,\n MatDialogContent,\n MatDialogTitle,\n MatDatepickerInput,\n MatDatepicker,\n MatTimepickerInput,\n MatTimepicker,\n MatTimepickerToggle,\n MatChipRemove,\n MatAutocomplete,\n MatAutocompleteTrigger,\n CapitalizePipe,\n SingularPipe,\n TelInputComponent,\n ],\n})\nexport class ModalComponent {\n protected form?: FormGroup;\n protected modalInputType = ModalInputType;\n protected showClose = true;\n\n // Picture related\n protected pictureUrls?: string;\n protected currentPictureIndex?: number;\n\n // Autocomplete\n protected autocompleteFilteredOptions: any[] = [];\n\n // Timepicker\n protected defaultMinTime = '00:00';\n protected defaultMaxTime = '23:59';\n\n DEFAULT_TIME_OPTIONS = generateTimeOptions(\n new Date(new Date().setHours(0, 0, 0, 0)),\n new Date(new Date().setHours(23, 55, 0, 0))\n );\n\n constructor(@Inject(MAT_DIALOG_DATA) public data: any) {\n if (this.data.formGroup) {\n this.form = this.data.formGroup;\n }\n if (this.data.pictureUrls && this.data.index != undefined) {\n this.pictureUrls = this.data.pictureUrls;\n this.currentPictureIndex = this.data.index;\n }\n if (this.data.showClose != undefined) {\n this.showClose = this.data.showClose;\n }\n }\n\n previous() {\n if (this.currentPictureIndex != undefined && this.currentPictureIndex > 0) {\n this.currentPictureIndex -= 1;\n }\n }\n\n next() {\n if (\n this.currentPictureIndex != undefined &&\n this.currentPictureIndex < (this.pictureUrls || []).length - 1\n ) {\n this.currentPictureIndex += 1;\n }\n }\n\n getMinimumDate(): Date {\n return new Date();\n }\n\n getDefaultTime(): number[] {\n const date = new Date();\n return [date.getHours(), Math.ceil(date.getMinutes() / 5) * 5, 0];\n }\n\n onAutocompleteInputChange(\n event: Event,\n options: { label: string; value: any }[]\n ) {\n const input = event.target as HTMLInputElement;\n this.autocompleteFilteredOptions = options.filter(o =>\n o.label.toLowerCase().includes(input.value.toLowerCase())\n );\n }\n\n autocompleteDisplayFn(option: any): string {\n return option?.label || '';\n }\n}\n","<div class=\"m-4\">\n <h3 mat-dialog-title>{{ data.title | translate | capitalize }}</h3>\n <div mat-dialog-content>\n @if (pictureUrls && currentPictureIndex != undefined) {\n <div class=\"image-container\">\n <mat-icon class=\"arrow-picture-icon\" (click)=\"previous()\"\n >keyboard_arrow_left\n </mat-icon>\n <img [src]=\"pictureUrls[currentPictureIndex]\" alt=\"Picture\" />\n <mat-icon class=\"arrow-picture-icon\" (click)=\"next()\"\n >keyboard_arrow_right\n </mat-icon>\n </div>\n <div class=\"footer\">\n {{ currentPictureIndex + 1 }} {{ 'names.of' | translate }}\n {{ pictureUrls.length }}\n </div>\n }\n @if (form) {\n <form [formGroup]=\"form\">\n <div class=\"d-flex flex-column pt-2\">\n @for (formType of data.forms; track formType) {\n @switch (formType.type) {\n @case (modalInputType.INPUT) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <input\n matInput\n [type]=\"formType.inputType ?? 'text'\"\n [formControlName]=\"formType.property\" />\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.PHONE) {\n <ng-container>\n <ud-tel-input\n [group]=\"form.controls[formType.property]\"\n [width]=\"300\"\n [showIcon]=\"false\"></ud-tel-input>\n </ng-container>\n }\n @case (modalInputType.TEXT_AREA) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <textarea\n matInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"2\"\n cdkAutosizeMaxRows=\"6\"\n maxlength=\"150\"\n [formControlName]=\"formType.property\"></textarea>\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.OPTIONS) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <mat-select [formControlName]=\"formType.property\">\n @for (type of formType.availableOptions; track type) {\n @if (type.value) {\n <mat-option [value]=\"type.value\">\n {{ type.label | translate | capitalize }}\n </mat-option>\n } @else {\n <mat-option [value]=\"type\">\n {{ type }}\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.MULTI_SELECT) {\n <ng-container>\n <mat-form-field class=\"large\" appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <mat-select [formControlName]=\"formType.property\" multiple>\n @for (type of formType.availableOptions; track type) {\n @if (type.value) {\n <mat-option [value]=\"type.value\">\n {{ type.label | translate | capitalize }}\n </mat-option>\n } @else {\n <mat-option [value]=\"type\">\n {{ type }}\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.AUTOCOMPLETE) {\n <mat-form-field appearance=\"outline\">\n <mat-icon matPrefix fontSet=\"material-icons-outlined\">\n person\n </mat-icon>\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <input\n type=\"text\"\n matInput\n [formControlName]=\"formType.property\"\n (input)=\"\n onAutocompleteInputChange(\n $event,\n formType.availableOptions\n )\n \"\n [matAutocomplete]=\"autoComplete\" />\n <mat-autocomplete\n #autoComplete=\"matAutocomplete\"\n [displayWith]=\"autocompleteDisplayFn\">\n @for (\n option of autocompleteFilteredOptions.length > 0\n ? autocompleteFilteredOptions\n : formType.availableOptions;\n track option\n ) {\n <mat-option [value]=\"option\">\n {{ option.label }}\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n }\n @case (modalInputType.DATERANGE) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <mat-date-range-input [rangePicker]=\"picker\">\n <input\n matStartDate\n [formControlName]=\"'start' + formType.property\"\n placeholder=\"{{\n 'names.startDate' | translate | capitalize\n }}\" />\n <input\n matEndDate\n [formControlName]=\"'end' + formType.property\"\n placeholder=\"{{\n 'names.endDate' | translate | capitalize\n }}\" />\n </mat-date-range-input>\n <mat-hint>MM/DD/YYYY - MM/DD/YYYY</mat-hint>\n <mat-datepicker-toggle matSuffix [for]=\"picker\" />\n <mat-date-range-picker #picker></mat-date-range-picker>\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.DATETIME) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <input\n matInput\n [formControlName]=\"formType.property\"\n [matDatepicker]=\"picker\" />\n <mat-hint>MM/DD/YYYY</mat-hint>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\" />\n <mat-datepicker #picker />\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.TIME) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <input\n matInput\n [matTimepicker]=\"timepicker\"\n [matTimepickerMin]=\"formType.minTime || defaultMinTime\"\n [matTimepickerMax]=\"formType.maxTime || defaultMaxTime\"\n [formControlName]=\"formType.property\" />\n <mat-timepicker-toggle matIconSuffix [for]=\"timepicker\" />\n <mat-timepicker\n #timepicker\n [options]=\"\n formType.availableOptions || DEFAULT_TIME_OPTIONS\n \"\n [interval]=\"formType.dateTimeInterval || '30m'\" />\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.CHIPS) {\n <ng-container>\n <mat-form-field\n class=\"example-form-field\"\n appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <mat-chip-grid\n #chipGrid\n aria-label=\"Enter options\"\n [formControlName]=\"formType.property\">\n @for (option of formType.availableOptions; track option) {\n <mat-chip-row (removed)=\"formType.removeOption(option)\">\n {{ option }}\n <button matChipRemove aria-label=\"'remove ' + option\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input\n placeholder=\"New option...\"\n [matChipInputFor]=\"chipGrid\"\n (matChipInputTokenEnd)=\"formType.addOption($event)\" />\n </mat-form-field>\n </ng-container>\n }\n }\n }\n </div>\n </form>\n } @else {\n <p>\n {{ data.bodyText }}\n </p>\n }\n </div>\n <div class=\"d-flex justify-content-end\">\n <div mat-dialog-actions>\n @if (showClose) {\n <button mat-button mat-dialog-close>\n {{ 'actions.close' | translate | capitalize }}\n </button>\n }\n <button\n [disabled]=\"form && form.invalid\"\n mat-raised-button\n color=\"primary\"\n mat-dialog-close\n (click)=\"form ? data.save(form.getRawValue()) : data.confirm()\">\n {{ (form ? 'actions.save' : 'actions.ok') | translate | capitalize }}\n </button>\n </div>\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safe',\n})\nexport class SafePipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(url: string): SafeResourceUrl {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n}\n","import {\n Component,\n effect,\n EventEmitter,\n input,\n Input,\n Output,\n} from '@angular/core';\nimport { NgxFileDropEntry, NgxFileDropModule } from 'ngx-file-drop';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { ModalComponent } from '../modal/modal.component';\nimport { StorageSignedResponse } from '../../interfaces/supabase.interface';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatPrefix } from '@angular/material/input';\nimport { SafePipe } from '../../pipes/safe/safe.pipe';\n\n@Component({\n selector: 'ud-file-input',\n templateUrl: './file-input.component.html',\n styleUrls: ['./file-input.component.scss'],\n imports: [\n NgxFileDropModule,\n MatButton,\n MatIcon,\n MatPrefix,\n CapitalizePipe,\n TranslatePipe,\n MatIconButton,\n SafePipe,\n ],\n})\nexport class FileInputComponent {\n @Input() accept = '.jpg,.png';\n @Input() label = 'actions.uploadImage';\n @Input() multiple = true;\n @Input() icon?: string;\n initialFiles = input<StorageSignedResponse[] | StorageSignedResponse>();\n\n @Output() filesSelected = new EventEmitter<File[]>();\n\n protected files: File[] = [];\n protected previewUrls: string[] = [];\n protected uploadStatus: string | null = null;\n\n constructor(private dialog: MatDialog) {\n effect(() => {\n if (this.initialFiles() && Array.isArray(this.initialFiles())) {\n const response = this.initialFiles() as StorageSignedResponse[];\n this.files = response.map(file => file.file);\n this.previewUrls = response.map(file => file.signedUrl);\n } else {\n const response = this.initialFiles() as StorageSignedResponse;\n if (response) {\n this.files = [response.file];\n this.previewUrls = [response.signedUrl];\n } else {\n this.files = [];\n this.previewUrls = [];\n }\n }\n });\n }\n\n async dropped(droppedFiles: NgxFileDropEntry[]): Promise<void> {\n const newFiles: File[] = [];\n\n for (const droppedFile of droppedFiles) {\n if (droppedFile.fileEntry.isFile) {\n const fileEntry = droppedFile.fileEntry as FileSystemFileEntry;\n\n // Use Promise to handle the file callback\n await new Promise<void>(resolve => {\n fileEntry.file((file: File) => {\n newFiles.push(file);\n\n // Create preview URL\n const previewUrl = URL.createObjectURL(file);\n this.previewUrls.push(previewUrl);\n\n this.uploadStatus = `Added ${file.name}`;\n resolve();\n });\n });\n }\n }\n\n if (!this.multiple) {\n // Replace existing files\n this.files = newFiles;\n } else {\n // Add to existing files\n this.files = [...this.files, ...newFiles];\n }\n\n // Emit the files to parent component\n this.filesSelected.emit(this.files);\n }\n\n removeFile(index: number): void {\n // Revoke the object URL to prevent memory leaks\n URL.revokeObjectURL(this.previewUrls[index]);\n\n // Remove the file and its preview\n this.files.splice(index, 1);\n this.previewUrls.splice(index, 1);\n\n // Emit the updated files array\n this.filesSelected.emit(this.files);\n }\n\n clearFiles(): void {\n // Revoke all object URLs\n this.previewUrls.forEach(url => URL.revokeObjectURL(url));\n\n this.files = [];\n this.previewUrls = [];\n this.filesSelected.emit([]);\n }\n\n openImageDialog(index: number) {\n const dialogConfig = new MatDialogConfig();\n dialogConfig.data = {\n pictureUrls: this.previewUrls,\n index,\n showClose: false,\n confirm: () => {},\n };\n dialogConfig.width = '50vw';\n this.dialog.open(ModalComponent, dialogConfig);\n }\n}\n","<div class=\"mt-3\">\n <ngx-file-drop\n dropZoneLabel=\"Drop files here\"\n (onFileDrop)=\"dropped($event)\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n [directory]=\"false\">\n <ng-template\n ngx-file-drop-content-tmp\n let-openFileSelector=\"openFileSelector\">\n <button mat-button color=\"primary\" (click)=\"openFileSelector()\">\n @if (icon) {\n <mat-icon matPrefix>\n {{ icon }}\n </mat-icon>\n }\n <span class=\"text-wrap\">{{ label | translate | capitalize }}</span>\n </button>\n </ng-template>\n </ngx-file-drop>\n <div class=\"mt-3\">\n @for (image of previewUrls; track $index) {\n <div\n class=\"d-flex justify-content-between align-items-center mb-2 p-1 file\">\n @if (image) {\n <div class=\"d-flex\">\n @if (image.substring(0, 30).includes('pdf')) {\n <iframe\n [src]=\"image | safe\"\n class=\"mr-3 border\"\n allowFullscreen></iframe>\n } @else {\n <img\n [src]=\"image\"\n alt=\"\"\n class=\"mr-3 border\"\n (click)=\"openImageDialog($index)\" />\n }\n </div>\n }\n <button mat-icon-button (click)=\"removeFile($index)\">\n <mat-icon fontSet=\"material-icons-outlined\"> cancel</mat-icon>\n </button>\n </div>\n }\n </div>\n</div>\n","export enum KpiDataType {\n PROGRESS_BAR = 'PROGRESS_BAR',\n PILLS = 'PILLS',\n TEXT = 'TEXT',\n}\n\nexport enum KpiProgressBarType {\n PERCENTAGE = 'PERCENTAGE',\n DIVISION = 'DIVISION',\n}\n\nexport enum KpiPillType {\n SUCCESS = 'success',\n WARNING = 'warning',\n DANGER = 'danger',\n INFO = 'info',\n}\n\nexport enum IconColor {\n PURPLE = 'purple',\n AMBER = 'amber',\n GREEN = 'green',\n BLUE = 'blue',\n RED = 'red',\n}\n","import { KpiPillType } from '../kpi/kpi.enum';\nimport { Component, Input } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\n\n@Component({\n selector: 'ud-pill',\n templateUrl: './pill.component.html',\n styleUrls: ['./pill.component.scss'],\n imports: [NgClass, AsyncPipe, CapitalizePipe],\n})\nexport class PillComponent {\n @Input() text!: string | Observable<string>;\n @Input() type!: KpiPillType;\n\n get observableText() {\n return typeof this.text === 'string' ? of(this.text) : this.text;\n }\n}\n","<span class=\"pill\" [ngClass]=\"type\">\n {{ (observableText | async) ?? '' | capitalize }}\n</span>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'ud-progress-bar',\n templateUrl: './progress-bar.component.html',\n styleUrls: ['./progress-bar.component.scss'],\n})\nexport class ProgressBarComponent {\n @Input() value: number = 0;\n\n @Input() height: string = '20px';\n\n @Input() borderRadius: string = '10px';\n\n @Input() backgroundColor: string = '#e0e0e0';\n}\n","<div\n class=\"progress-container\"\n [style.height]=\"height\"\n [style.borderRadius]=\"borderRadius\"\n [style.backgroundColor]=\"backgroundColor\">\n <div\n class=\"progress-fill\"\n [style.width.%]=\"value\"\n [style.borderRadius]=\"borderRadius\"></div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport {\n IconColor,\n KpiDataType,\n KpiProgressBarType,\n} from './kpi.enum';\nimport {\n KpiData,\n PillData,\n ProgressBarData,\n TextData,\n} from './kpi.interface';\nimport { PillComponent } from '../pill/pill.component';\nimport { AsyncPipe, NgClass, NgSwitch } from '@angular/common';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport { ProgressBarComponent } from '../progress-bar/progress-bar.component';\nimport { RouterLink } from '@angular/router';\nimport { MatCard } from '@angular/material/card';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'ud-kpi',\n templateUrl: './kpi.component.html',\n styleUrls: ['./kpi.component.scss'],\n imports: [\n AsyncPipe,\n CapitalizePipe,\n NgSwitch,\n MatIcon,\n RouterLink,\n MatCard,\n NgClass,\n ProgressBarComponent,\n PillComponent,\n ],\n})\nexport class KpiComponent {\n @Input() title!: string;\n\n @Input() subtitle?: string;\n\n @Input() dataType!: KpiDataType;\n\n @Input() data!: KpiData;\n\n @Input() icon!: string;\n\n @Input() iconColor!: IconColor;\n\n @Input() titleRef?: string;\n\n getProgressData(): ProgressBarData {\n return this.data as ProgressBarData;\n }\n\n getProgressBarValue(): number {\n const { value, max } = this.getProgressData().data;\n return (value / max) * 100;\n }\n\n getPillData(): PillData {\n return this.data as PillData;\n }\n\n getTextData(): TextData {\n return this.data as TextData;\n }\n\n protected readonly KpiDataType = KpiDataType;\n protected readonly KpiProgressBarType = KpiProgressBarType;\n}\n","<mat-card class=\"kpi-card\" [ngClass]=\"iconColor\" appearance=\"outlined\">\n <div class=\"kpi-header\">\n <div class=\"kpi-icon\">\n <mat-icon>{{ icon }}</mat-icon>\n </div>\n <div class=\"kpi-title-section\">\n <span class=\"kpi-label\">\n @if (titleRef) {\n <a [routerLink]=\"titleRef\">{{ title }}</a>\n } @else {\n {{ title }}\n }\n </span>\n @if (subtitle) {\n <span class=\"kpi-subtitle\">{{ subtitle }}</span>\n }\n </div>\n </div>\n\n <div class=\"kpi-content\">\n <div [ngSwitch]=\"dataType\">\n @switch (dataType) {\n @case (KpiDataType.PROGRESS_BAR) {\n <div class=\"progress-section\">\n @if (getProgressData().type === KpiProgressBarType.PERCENTAGE) {\n <div class=\"value-display\">\n <span class=\"kpi-value\">{{\n getProgressData().data.value\n }}</span>\n <span class=\"value-unit\">%</span>\n </div>\n } @else if (\n getProgressData().type === KpiProgressBarType.DIVISION\n ) {\n <div class=\"value-display\">\n <span class=\"kpi-value\">{{\n getProgressData().data.value\n }}</span>\n <span class=\"value-separator\">/</span>\n <span class=\"value-max\">{{ getProgressData().data.max }}</span>\n </div>\n }\n <ud-progress-bar\n [value]=\"getProgressBarValue()\"></ud-progress-bar>\n </div>\n }\n @case (KpiDataType.PILLS) {\n <div class=\"pills-section\">\n <span class=\"kpi-value\">{{ getPillData().value }}</span>\n <div class=\"pills-container\">\n @for (pill of getPillData().pills; track pill) {\n <ud-pill\n [text]=\"pill.value + ' ' + (pill.label | async | capitalize)\"\n [type]=\"pill.type\"></ud-pill>\n }\n </div>\n </div>\n }\n @case (KpiDataType.TEXT) {\n <div class=\"text-section\">\n <span class=\"kpi-value\">{{ getTextData().value }}</span>\n @if (getTextData().unit) {\n <span class=\"value-unit\">{{ getTextData().unit }}</span>\n }\n <ng-content></ng-content>\n </div>\n }\n }\n </div>\n </div>\n</mat-card>\n","import { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatLabel, MatPrefix } from '@angular/material/input';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { EditOptions, SummaryField } from './summary-view.interface';\n\n// TODO: implement text-all layout\ntype LAYOUTS = 'text-left' | 'text-right' | 'text-all' | 'text-none' | 'text-top';\n\n@Component({\n selector: 'ud-summary-view',\n templateUrl: './summary-view.component.html',\n styleUrl: './summary-view.component.scss',\n standalone: true,\n imports: [\n CommonModule,\n CapitalizePipe,\n TranslatePipe,\n NgxSkeletonLoaderModule,\n MatIconModule,\n MatButtonModule,\n MatLabel,\n RouterLink,\n MatTooltip,\n CapitalizePipe,\n MatPrefix,\n ],\n})\nexport class SummaryViewComponent {\n @Input() title: string | null = '';\n @Input() editOptions: EditOptions | null = null;\n @Input() summaryFields: SummaryField[] = [];\n @Input() loading = false;\n @Input() layout: LAYOUTS = 'text-left';\n @Input() skeletonTitleHeight = '20px';\n @Input() skeletonBodyHeight = '150px';\n}\n","<div class=\"summary-view-container\">\n <div class=\"header\">\n @if (loading) {\n <ngx-skeleton-loader\n class=\"loading col-6\"\n [count]=\"1\"\n [theme]=\"{ height: skeletonTitleHeight }\" />\n } @else {\n <h5 class=\"header-title\">{{ title }}</h5>\n }\n <ng-content select=\"[header-actions]\">\n @if (editOptions) {\n <button\n mat-stroked-button\n class=\"header-edit-btn\"\n [matTooltip]=\"\n editOptions.tooltip ?? 'actions.edit' | translate | capitalize\n \"\n color=\"primary\"\n [routerLink]=\"editOptions.routerLink\"\n [disabled]=\"editOptions.disabled\">\n <mat-icon class=\"btn-icon\">edit</mat-icon>\n <span>{{ 'actions.edit' | translate | capitalize }}</span>\n </button>\n }\n </ng-content>\n </div>\n <div\n class=\"content\"\n [ngClass]=\"{\n reverse: layout === 'text-right',\n 'flex-column': layout === 'text-top',\n }\">\n @if (loading) {\n <ngx-skeleton-loader\n class=\"col\"\n [count]=\"1\"\n [theme]=\"{ height: skeletonBodyHeight }\" />\n } @else {\n @if (layout !== 'text-none') {\n <div [ngClass]=\"layout === 'text-top' ? 'col-12' : 'col-6'\">\n <div class=\"summary\" [ngClass]=\"{ 'summary-row-wrap': layout === 'text-top' }\">\n @for (summaryField of summaryFields; track $index) {\n <div class=\"summary-field\">\n @if (summaryField.label) {\n <span>{{ summaryField.label | capitalize }}</span>\n }\n <div class=\"summary-row\">\n <mat-icon matPrefix fontSet=\"material-icons-outlined\">\n {{ summaryField.icon }}\n </mat-icon>\n <mat-label>{{ summaryField.value }}</mat-label>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <div\n class=\"px-0\"\n [ngClass]=\"{\n 'col-12': layout === 'text-none' || layout === 'text-top',\n 'col-6': layout !== 'text-none' && layout !== 'text-top',\n }\">\n <ng-content></ng-content>\n </div>\n }\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewChildren,\n QueryList,\n ElementRef,\n AfterViewInit,\n OnInit,\n inject,\n} from '@angular/core';\nimport { Tab } from '../../interfaces/tab.interface';\nimport { AsyncPipe, NgStyle } from '@angular/common';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\n\n@Component({\n selector: 'ud-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n imports: [NgStyle, AsyncPipe, CapitalizePipe],\n})\nexport class TabsComponent implements OnInit, AfterViewInit {\n @Input() tabs: Tab[] = [];\n @Output() tabChange = new EventEmitter<Tab>();\n @ViewChildren('tabItem') tabItems!: QueryList<ElementRef>;\n\n activeTab!: Tab;\n sliderStyle: any = { width: '0px', transform: 'translateX(0px)' };\n\n ngOnInit() {\n if (this.tabs.length > 0) {\n this.activeTab = this.tabs[0];\n this.tabChange.emit(this.activeTab);\n }\n }\n\n ngAfterViewInit() {\n this.updateSliderPosition();\n this.tabItems.changes.subscribe(() => this.updateSliderPosition());\n }\n\n setActiveTab(tab: Tab) {\n this.activeTab = tab;\n this.tabChange.emit(this.activeTab);\n this.updateSliderPosition();\n }\n\n updateSliderPosition() {\n const activeTabIndex = this.tabs.indexOf(this.activeTab);\n const tabElement = this.tabItems.toArray()[activeTabIndex]?.nativeElement;\n\n if (tabElement) {\n const width = tabElement.offsetWidth;\n const offsetLeft = tabElement.offsetLeft - 3;\n this.sliderStyle = {\n width: `${width}px`,\n transform: `translateX(${offsetLeft}px)`,\n };\n }\n }\n}\n","<div class=\"tabs-container\">\n <div class=\"tab-list\">\n <div class=\"slider\" [ngStyle]=\"sliderStyle\"></div>\n @for (tab of tabs; track tab) {\n <div\n #tabItem\n [class.active]=\"tab.value === activeTab.value\"\n class=\"tab-item\"\n (click)=\"setActiveTab(tab)\">\n {{ tab.label | async | capitalize }}\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport {\n ControlContainer,\n FormControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatFormField, MatInput, MatLabel, MatPrefix } from '@angular/material/input';\n\n/**\n * Styled text input that participates in the parent FormGroup.\n *\n * Usage:\n * <ud-text-input\n * controlName=\"name\"\n * label=\"Full name\"\n * icon=\"account_circle\"\n * placeholder=\"Enter name\" />\n */\n@Component({\n selector: 'ud-text-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatFormField, MatInput, MatLabel, MatIcon, MatPrefix],\n templateUrl: './text-input.component.html',\n styleUrls: ['./text-input.component.scss'],\n // Inherit the parent FormGroup so [formControlName] works inside this component\n viewProviders: [{ provide: ControlContainer, useFactory: () => inject(ControlContainer, { skipSelf: true }) }],\n})\nexport class TextInputComponent {\n /** Key of the control inside the parent FormGroup */\n @Input({ required: true }) controlName!: string;\n @Input() label = '';\n @Input() placeholder = '';\n @Input() type: 'text' | 'email' | 'password' | 'number' = 'text';\n /** Material icon name. Leave empty to show no icon. */\n @Input() icon?: string;\n @Input() iconFontSet = 'material-icons-outlined';\n}\n","<mat-form-field appearance=\"outline\" class=\"ud-custom-field\">\n @if (icon) {\n <mat-icon matPrefix [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n <mat-label>{{ label }}</mat-label>\n <input\n matInput\n [formControlName]=\"controlName\"\n [type]=\"type\"\n [placeholder]=\"placeholder\" />\n</mat-form-field>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport { ControlContainer, ReactiveFormsModule } from '@angular/forms';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatFormField, MatInput, MatLabel, MatPrefix, MatSuffix } from '@angular/material/input';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\n\n/**\n * Styled date picker that participates in the parent FormGroup.\n *\n * Usage:\n * <ud-date-input\n * controlName=\"birthDate\"\n * label=\"Date of birth\"\n * icon=\"calendar_today\" />\n */\n@Component({\n selector: 'ud-date-input',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormField,\n MatInput,\n MatLabel,\n MatIcon,\n MatPrefix,\n MatSuffix,\n MatDatepickerModule,\n ],\n templateUrl: './date-input.component.html',\n styleUrls: ['./date-input.component.scss'],\n viewProviders: [{ provide: ControlContainer, useFactory: () => inject(ControlContainer, { skipSelf: true }) }],\n})\nexport class DateInputComponent {\n @Input({ required: true }) controlName!: string;\n @Input() label = '';\n @Input() placeholder = '';\n @Input() icon?: string;\n @Input() iconFontSet = 'material-icons-outlined';\n @Input() min?: Date;\n @Input() max?: Date;\n}\n","<mat-form-field appearance=\"outline\" class=\"ud-custom-field\">\n @if (icon) {\n <mat-icon matPrefix [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n <mat-label>{{ label }}</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker\"\n [formControlName]=\"controlName\"\n [placeholder]=\"placeholder\"\n [min]=\"min ?? null\"\n [max]=\"max ?? null\" />\n <mat-datepicker-toggle matSuffix [for]=\"picker\" />\n <mat-datepicker #picker />\n</mat-form-field>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit, inject } from '@angular/core';\nimport {\n ControlContainer,\n FormControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { MatChip, MatChipSet } from '@angular/material/chips';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatFormField, MatLabel, MatPrefix } from '@angular/material/input';\nimport { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';\nimport { Subject, startWith, takeUntil } from 'rxjs';\n\nexport interface UdSelectOption {\n /** The value stored in the form control */\n value: any;\n /** Already-translated, human-readable label */\n label: string;\n}\n\n/**\n * Styled multi-select with a chip trigger that participates in the parent FormGroup.\n *\n * Usage:\n * <ud-multi-select\n * controlName=\"roles\"\n * label=\"Roles\"\n * icon=\"sell\"\n * [options]=\"rolesOptions\"\n * [maxChipsVisible]=\"2\"\n * moreText=\"+{n} more\" />\n *\n * Pass options with already-resolved labels (translate before passing in):\n * rolesOptions = roles.map(r => ({ value: r.key, label: translate(r.translationKey) }));\n */\n@Component({\n selector: 'ud-multi-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatPrefix,\n MatIcon,\n MatSelect,\n MatSelectTrigger,\n MatOption,\n MatChip,\n MatChipSet,\n ],\n templateUrl: './multi-select.component.html',\n styleUrls: ['./multi-select.component.scss'],\n viewProviders: [{ provide: ControlContainer, useFactory: () => inject(ControlContainer, { skipSelf: true }) }],\n})\nexport class MultiSelectComponent implements OnInit, OnDestroy {\n @Input({ required: true }) controlName!: string;\n @Input() label = '';\n @Input() icon?: string;\n @Input() iconFontSet = 'material-icons-outlined';\n @Input() options: UdSelectOption[] = [];\n /** How many chips to show before collapsing into \"+N more\" */\n @Input() maxChipsVisible = 2;\n /**\n * Template for the overflow chip. Use `{n}` as the placeholder for the count.\n * Default: \"+{n} more\"\n */\n @Input() moreText = '+{n} more';\n\n selectedValues: any[] = [];\n\n private controlContainer = inject(ControlContainer);\n private destroy$ = new Subject<void>();\n private labelMap = new Map<any, string>();\n\n get control(): FormControl {\n return this.controlContainer.control!.get(this.controlName) as FormControl;\n }\n\n ngOnInit(): void {\n this.buildLabelMap();\n this.control.valueChanges\n .pipe(startWith(this.control.value), takeUntil(this.destroy$))\n .subscribe((values: any[]) => {\n this.selectedValues = values ?? [];\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n getLabelFor(value: any): string {\n return this.labelMap.get(value) ?? String(value);\n }\n\n getMoreText(count: number): string {\n return this.moreText.replace('{n}', String(count));\n }\n\n private buildLabelMap(): void {\n this.labelMap.clear();\n this.options.forEach(o => this.labelMap.set(o.value, o.label));\n }\n}\n","<mat-form-field class=\"ud-custom-field ud-chip-select\" appearance=\"outline\">\n @if (icon) {\n <mat-icon matPrefix [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n <mat-label>{{ label }}</mat-label>\n\n <mat-select [formControlName]=\"controlName\" multiple panelClass=\"ud-select-panel\">\n <mat-select-trigger>\n <mat-chip-set class=\"ud-chip-trigger\" aria-label=\"Selected options\">\n @for (val of selectedValues.slice(0, maxChipsVisible); track val) {\n <mat-chip color=\"primary\" selected>{{ getLabelFor(val) }}</mat-chip>\n }\n @if (selectedValues.length > maxChipsVisible) {\n <mat-chip color=\"primary\">{{ getMoreText(selectedValues.length - maxChipsVisible) }}</mat-chip>\n }\n </mat-chip-set>\n </mat-select-trigger>\n\n @for (option of options; track option.value) {\n <mat-option [value]=\"option.value\">{{ option.label }}</mat-option>\n }\n </mat-select>\n</mat-form-field>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport {\n ControlContainer,\n FormControl,\n ReactiveFormsModule,\n} from '@angular/forms';\n\nexport interface PillToggleOption {\n value: string;\n label: string;\n}\n\n/**\n * Segmented pill toggle that participates in the parent FormGroup.\n * Visually mimics a mat-form-field outline field so it aligns perfectly\n * alongside real mat-form-fields in a form grid.\n *\n * Usage:\n * <ud-pill-toggle\n * controlName=\"gender\"\n * label=\"Gender\"\n * [options]=\"[{ value: 'male', label: 'Male' }, { value: 'female', label: 'Female' }]\" />\n */\n@Component({\n selector: 'ud-pill-toggle',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './pill-toggle.component.html',\n styleUrls: ['./pill-toggle.component.scss'],\n viewProviders: [{ provide: ControlContainer, useFactory: () => inject(ControlContainer, { skipSelf: true }) }],\n})\nexport class PillToggleComponent {\n @Input({ required: true }) controlName!: string;\n @Input() label = '';\n @Input() options: PillToggleOption[] = [];\n\n private controlContainer = inject(ControlContainer);\n\n get control(): FormControl {\n return this.controlContainer.control!.get(this.controlName) as FormControl;\n }\n\n select(value: string): void {\n if (this.control.disabled) return;\n this.control.setValue(value);\n this.control.markAsTouched();\n }\n}\n","<div class=\"ud-pill-toggle-field\" [class.is-disabled]=\"control.disabled\">\n @if (label) {\n <span class=\"ud-pill-toggle-label\">{{ label }}</span>\n }\n <div class=\"ud-pill-toggle-track\">\n @for (option of options; track option.value) {\n <button\n type=\"button\"\n class=\"ud-pill-toggle-option\"\n [class.selected]=\"control.value === option.value\"\n [disabled]=\"control.disabled\"\n (click)=\"select(option.value)\">\n {{ option.label }}\n </button>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nexport type UdButtonVariant = 'flat' | 'stroked' | 'icon-only';\nexport type UdButtonColor = 'primary' | 'secondary' | 'danger' | 'success';\nexport type UdButtonSize = 'sm' | 'md' | 'lg';\nexport type UdButtonIconPosition = 'left' | 'right';\n\n/**\n * Styled button that wraps Angular Material with the library's design tokens.\n *\n * Usage:\n * <ud-button>Save</ud-button>\n * <ud-button variant=\"stroked\" color=\"secondary\">Cancel</ud-button>\n * <ud-button [loading]=\"isSaving\" icon=\"save\">Save</ud-button>\n * <ud-button color=\"danger\" variant=\"stroked\">Delete</ud-button>\n */\n@Component({\n selector: 'ud-button',\n standalone: true,\n imports: [CommonModule, MatButtonModule, MatIconModule, MatProgressSpinnerModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n})\nexport class UdButtonComponent {\n /** Visual style of the button */\n @Input() variant: UdButtonVariant = 'flat';\n\n /** Colour role */\n @Input() color: UdButtonColor = 'primary';\n\n /** Size preset */\n @Input() size: UdButtonSize = 'md';\n\n /** Native button type */\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n /** Material icon name. Shows a spinner when loading is true instead. */\n @Input() icon?: string;\n\n /** Which side the icon appears on */\n @Input() iconPosition: UdButtonIconPosition = 'left';\n\n /** Font set for the icon (default: material-icons-outlined) */\n @Input() iconFontSet = 'material-icons-outlined';\n\n /** Shows a spinner and disables the button */\n @Input() loading = false;\n\n /** Explicitly disable the button */\n @Input() disabled = false;\n\n /** Stretch to fill the container width */\n @Input() fullWidth = false;\n\n get isDisabled(): boolean {\n return this.disabled || this.loading;\n }\n}\n","@if (variant === 'flat') {\n <button\n mat-flat-button\n [type]=\"type\"\n [disabled]=\"isDisabled\"\n [class]=\"'ud-btn ud-btn--flat ud-btn--' + color + ' ud-btn--' + size\"\n [class.ud-btn--full-width]=\"fullWidth\"\n [class.ud-btn--loading]=\"loading\">\n <ng-container *ngTemplateOutlet=\"btnContent\" />\n </button>\n}\n\n@if (variant === 'stroked') {\n <button\n mat-stroked-button\n [type]=\"type\"\n [disabled]=\"isDisabled\"\n [class]=\"'ud-btn ud-btn--stroked ud-btn--' + color + ' ud-btn--' + size\"\n [class.ud-btn--full-width]=\"fullWidth\"\n [class.ud-btn--loading]=\"loading\">\n <ng-container *ngTemplateOutlet=\"btnContent\" />\n </button>\n}\n\n@if (variant === 'icon-only') {\n <button\n mat-icon-button\n [type]=\"type\"\n [disabled]=\"isDisabled\"\n [class]=\"'ud-btn ud-btn--icon-only ud-btn--' + color + ' ud-btn--' + size\"\n [class.ud-btn--loading]=\"loading\">\n @if (loading) {\n <mat-spinner diameter=\"16\" />\n } @else if (icon) {\n <mat-icon class=\"ud-btn__icon\" [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n </button>\n}\n\n<ng-template #btnContent>\n @if (loading) {\n <mat-spinner class=\"ud-btn__spinner\" diameter=\"16\" />\n } @else if (icon && iconPosition === 'left') {\n <mat-icon class=\"ud-btn__icon ud-btn__icon--left\" [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n <span class=\"ud-btn__label\"><ng-content /></span>\n @if (!loading && icon && iconPosition === 'right') {\n <mat-icon class=\"ud-btn__icon ud-btn__icon--right\" [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Output, forwardRef, HostBinding, Input, OnDestroy, OnInit, inject } from '@angular/core';\nimport {\n ControlContainer,\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { Subject, startWith, takeUntil } from 'rxjs';\n\n@Component({\n selector: 'ud-toggle',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './toggle.component.html',\n styleUrls: ['./toggle.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToggleComponent),\n multi: true,\n },\n ],\n viewProviders: [\n {\n provide: ControlContainer,\n useFactory: () => inject(ControlContainer, { optional: true, skipSelf: true }),\n },\n ],\n})\nexport class ToggleComponent implements ControlValueAccessor, OnInit, OnDestroy {\n /** Key of the control inside the parent FormGroup (alternative to ngModel/formControl) */\n @Input() controlName?: string;\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() label?: string;\n @Input() labelPosition: 'left' | 'right' = 'right';\n @Input() ariaLabel?: string;\n\n @HostBinding('class.size-sm') get isSm() { return this.size === 'sm'; }\n @HostBinding('class.size-md') get isMd() { return this.size === 'md'; }\n @HostBinding('class.size-lg') get isLg() { return this.size === 'lg'; }\n\n checked = false;\n isDisabled = false;\n\n private controlContainer = inject(ControlContainer, { optional: true, skipSelf: true });\n private destroy$ = new Subject<void>();\n\n @Output() onChange = new EventEmitter<boolean>();\n\n private _onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n private get formControl(): FormControl | null {\n if (!this.controlName || !this.controlContainer?.control) return null;\n return this.controlContainer.control.get(this.controlName) as FormControl ?? null;\n }\n\n ngOnInit(): void {\n const ctrl = this.formControl;\n if (!ctrl) return;\n\n ctrl.valueChanges\n .pipe(startWith(ctrl.value), takeUntil(this.destroy$))\n .subscribe((val: boolean) => {\n this.checked = !!val;\n this.isDisabled = ctrl.disabled;\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n toggle(): void {\n if (this.isDisabled) return;\n const ctrl = this.formControl;\n const newValue = !this.checked;\n if (ctrl) {\n ctrl.setValue(newValue);\n ctrl.markAsTouched();\n } else {\n this.checked = newValue;\n this._onChange(newValue);\n this.onTouched();\n }\n this.onChange.emit(newValue);\n }\n\n writeValue(value: boolean): void {\n this.checked = !!value;\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n}\n","<button\n type=\"button\"\n class=\"ud-toggle\"\n [class.checked]=\"checked\"\n [class.disabled]=\"isDisabled\"\n [class.label-left]=\"labelPosition === 'left'\"\n role=\"switch\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-label]=\"ariaLabel || label\"\n [disabled]=\"isDisabled || null\"\n (click)=\"toggle()\">\n @if (label && labelPosition === 'left') {\n <span class=\"toggle-label\">{{ label }}</span>\n }\n <span class=\"track\" aria-hidden=\"true\">\n <span class=\"thumb\">\n <span class=\"thumb-core\"></span>\n </span>\n </span>\n @if (label && labelPosition === 'right') {\n <span class=\"toggle-label\">{{ label }}</span>\n }\n</button>\n","/*\n * Public API Surface of ud-components\n */\n\n// Components\nexport * from './lib/carousel/carousel.component';\nexport * from './lib/custom-input/custom-input.component';\nexport * from './lib/custom-snackbar/custom-snackbar.component';\nexport * from './lib/custom-table/custom-table.component';\nexport * from './lib/dynamic-component/dynamic-component.component';\nexport * from './lib/edit-view/edit-view.component';\nexport * from './lib/edit-view/edit-view-section.directive';\nexport * from './lib/file-input/file-input.component';\nexport * from './lib/kpi/kpi.component';\nexport * from './lib/modal/modal.component';\nexport * from './lib/pill/pill.component';\nexport * from './lib/progress-bar/progress-bar.component';\nexport * from './lib/summary-view/summary-view.component';\nexport * from './lib/tabs/tabs.component';\nexport * from './lib/tel-input/tel-input.component';\nexport * from './lib/form-fields/text-input/text-input.component';\nexport * from './lib/form-fields/date-input/date-input.component';\nexport * from './lib/form-fields/multi-select/multi-select.component';\nexport * from './lib/form-fields/pill-toggle/pill-toggle.component';\nexport * from './lib/button/button.component';\nexport * from './lib/toggle/toggle.component';\n\n// Enums\nexport * from './enums/application-status.enum';\nexport * from './enums/custom-table.enum';\nexport * from './enums/modal-input-type.enum';\nexport * from './enums/role.enum';\nexport * from './enums/snackbar-type.enum';\nexport * from './enums/table-display-column-type';\nexport * from './lib/kpi/kpi.enum';\n\n// Interfaces\nexport * from './interfaces/floor.interface';\nexport * from './interfaces/page-request.interface';\nexport * from './interfaces/phone.interface';\nexport * from './interfaces/supabase.interface';\nexport * from './interfaces/tab.interface';\nexport * from './interfaces/table-display-column.interface';\nexport * from './interfaces/table.interface';\nexport * from './lib/custom-table/custom-table.interface';\nexport * from './lib/kpi/kpi.interface';\nexport * from './lib/summary-view/summary-view.interface';\n\n// Pipes\nexport * from './pipes/capitalize/capitalize.pipe';\nexport * from './pipes/pluralize/pluralize.pipe';\nexport * from './pipes/safe/safe.pipe';\nexport * from './pipes/singular/singular.pipe';\n\n// Services\nexport * from './services/translate-wrapper/translate-wrapper.service';\n\n// Utils\nexport * from './utils/common-utils';\nexport * from './utils/time-options.utils';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","map","i1.TranslateWrapperService","i2","i3","MatFormField","i4"],"mappings":"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"}
1
+ {"version":3,"file":"ud-components.mjs","sources":["../../../projects/ud-components/src/lib/carousel/carousel.component.ts","../../../projects/ud-components/src/lib/carousel/carousel.component.html","../../../projects/ud-components/src/lib/custom-input/custom-input.component.ts","../../../projects/ud-components/src/lib/custom-input/custom-input.component.html","../../../projects/ud-components/src/enums/snackbar-type.enum.ts","../../../projects/ud-components/src/lib/custom-snackbar/custom-snackbar.component.ts","../../../projects/ud-components/src/lib/custom-snackbar/custom-snackbar.component.html","../../../projects/ud-components/src/enums/application-status.enum.ts","../../../projects/ud-components/src/enums/custom-table.enum.ts","../../../projects/ud-components/src/enums/role.enum.ts","../../../projects/ud-components/src/enums/table-display-column-type.ts","../../../projects/ud-components/src/utils/common-utils.ts","../../../projects/ud-components/src/pipes/capitalize/capitalize.pipe.ts","../../../projects/ud-components/src/pipes/pluralize/pluralize.pipe.ts","../../../projects/ud-components/src/services/translate-wrapper/translate-wrapper.service.ts","../../../projects/ud-components/src/lib/custom-table/custom-table.component.ts","../../../projects/ud-components/src/lib/custom-table/custom-table.component.html","../../../projects/ud-components/src/lib/dynamic-component/dynamic-component.component.ts","../../../projects/ud-components/src/lib/dynamic-component/dynamic-component.component.html","../../../projects/ud-components/src/lib/edit-view/edit-view-section.directive.ts","../../../projects/ud-components/src/lib/edit-view/edit-view.component.ts","../../../projects/ud-components/src/lib/edit-view/edit-view.component.html","../../../projects/ud-components/src/enums/modal-input-type.enum.ts","../../../projects/ud-components/src/pipes/singular/singular.pipe.ts","../../../projects/ud-components/src/utils/time-options.utils.ts","../../../projects/ud-components/src/lib/tel-input/tel-input.component.ts","../../../projects/ud-components/src/lib/tel-input/tel-input.component.html","../../../projects/ud-components/src/lib/modal/modal.component.ts","../../../projects/ud-components/src/lib/modal/modal.component.html","../../../projects/ud-components/src/pipes/safe/safe.pipe.ts","../../../projects/ud-components/src/lib/file-input/file-input.component.ts","../../../projects/ud-components/src/lib/file-input/file-input.component.html","../../../projects/ud-components/src/lib/kpi/kpi.enum.ts","../../../projects/ud-components/src/lib/pill/pill.component.ts","../../../projects/ud-components/src/lib/pill/pill.component.html","../../../projects/ud-components/src/lib/progress-bar/progress-bar.component.ts","../../../projects/ud-components/src/lib/progress-bar/progress-bar.component.html","../../../projects/ud-components/src/lib/kpi/kpi.component.ts","../../../projects/ud-components/src/lib/kpi/kpi.component.html","../../../projects/ud-components/src/lib/summary-view/summary-view.component.ts","../../../projects/ud-components/src/lib/summary-view/summary-view.component.html","../../../projects/ud-components/src/lib/tabs/tabs.component.ts","../../../projects/ud-components/src/lib/tabs/tabs.component.html","../../../projects/ud-components/src/lib/form-fields/text-input/text-input.component.ts","../../../projects/ud-components/src/lib/form-fields/text-input/text-input.component.html","../../../projects/ud-components/src/lib/form-fields/date-input/date-input.component.ts","../../../projects/ud-components/src/lib/form-fields/date-input/date-input.component.html","../../../projects/ud-components/src/lib/form-fields/multi-select/multi-select.component.ts","../../../projects/ud-components/src/lib/form-fields/multi-select/multi-select.component.html","../../../projects/ud-components/src/lib/form-fields/pill-toggle/pill-toggle.component.ts","../../../projects/ud-components/src/lib/form-fields/pill-toggle/pill-toggle.component.html","../../../projects/ud-components/src/lib/button/button.component.ts","../../../projects/ud-components/src/lib/button/button.component.html","../../../projects/ud-components/src/lib/toggle/toggle.component.ts","../../../projects/ud-components/src/lib/toggle/toggle.component.html","../../../projects/ud-components/src/public-api.ts","../../../projects/ud-components/src/ud-components.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n ElementRef,\n Input,\n ViewChild,\n} from '@angular/core';\nimport { SwiperContainer } from 'swiper/element/bundle';\n\n@Component({\n selector: 'ud-carousel',\n templateUrl: './carousel.component.html',\n styleUrls: ['./carousel.component.scss'],\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class CarouselComponent {\n @Input() pictures: string[] = [];\n @Input() height = 300;\n @Input() direction = 'horizontal';\n @Input() autoplay = true;\n\n @ViewChild('swiperRef') swiperRef!: ElementRef<SwiperContainer>;\n}\n","<swiper-container\n [slidesPerView]=\"1\"\n [pagination]=\"true\"\n [direction]=\"direction\"\n [autoplay]=\"autoplay\"\n [style.height.px]=\"height\">\n @for (picture of pictures; track $index) {\n <swiper-slide>\n <img [src]=\"picture\" alt=\"Slide {{ $index + 1 }}\" />\n </swiper-slide>\n }\n</swiper-container>\n","import { Component, Input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'ud-input',\n templateUrl: './custom-input.component.html',\n styleUrls: ['./custom-input.component.scss'],\n imports: [FormsModule],\n})\nexport class CustomInputComponent {\n @Input() type!: string;\n @Input() placeholder?: string;\n @Input() required!: boolean;\n @Input() name!: string;\n @Input() inputValue!: string;\n\n constructor() {}\n}\n","<div class=\"inputBox\">\n <input\n [type]=\"type\"\n [required]=\"required\"\n [placeholder]=\"placeholder ?? ''\"\n [(ngModel)]=\"inputValue\" />\n <span>{{ name }}</span>\n</div>\n","export enum SnackbarType {\n SUCCESS = 'success',\n ERROR = 'error',\n WARNING = 'warning',\n INFO = 'info',\n}\n","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n MAT_SNACK_BAR_DATA,\n MatSnackBarRef,\n} from '@angular/material/snack-bar';\nimport { interval, Subscription } from 'rxjs';\nimport { SnackbarType } from '../../enums/snackbar-type.enum';\n\nexport interface SnackbarData {\n message: string;\n type: SnackbarType;\n duration: number;\n action?: string;\n}\n\n@Component({\n selector: 'ud-custom-snackbar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './custom-snackbar.component.html',\n styleUrls: ['./custom-snackbar.component.scss'],\n})\nexport class CustomSnackbarComponent implements OnInit, OnDestroy {\n progress = 100;\n private subscription?: Subscription;\n private isPaused = false;\n private elapsedTime = 0;\n\n constructor(\n @Inject(MAT_SNACK_BAR_DATA) public data: SnackbarData,\n private snackBarRef: MatSnackBarRef<CustomSnackbarComponent>\n ) {}\n\n ngOnInit() {\n this.startTimer();\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n\n private startTimer() {\n const tickInterval = 100;\n\n this.subscription?.unsubscribe();\n\n this.subscription = interval(tickInterval).subscribe(() => {\n // Only count time when NOT paused\n if (!this.isPaused) {\n this.elapsedTime += tickInterval;\n\n // Calculate progress\n this.progress = 100 - (this.elapsedTime / this.data.duration) * 100;\n\n // Dismiss when time runs out\n if (this.elapsedTime >= this.data.duration) {\n this.subscription?.unsubscribe();\n this.snackBarRef.dismiss();\n }\n }\n });\n }\n\n pauseTimer() {\n this.isPaused = true;\n }\n\n resumeTimer() {\n this.isPaused = false;\n }\n\n dismiss() {\n this.subscription?.unsubscribe();\n this.snackBarRef.dismiss();\n }\n\n protected readonly SnackbarType = SnackbarType;\n}\n","<div\n class=\"custom-snackbar\"\n [attr.data-type]=\"data.type\"\n (mouseenter)=\"pauseTimer()\"\n (mouseleave)=\"resumeTimer()\">\n <div class=\"snackbar-content\">\n <div class=\"snackbar-icon\">\n @switch (data.type) {\n @case (SnackbarType.SUCCESS) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M7.5 10L9.16667 11.6667L12.5 8.33333M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n @case (SnackbarType.ERROR) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M12.5 7.5L7.5 12.5M7.5 7.5L12.5 12.5M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n @case (SnackbarType.WARNING) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M10 6.66667V10M10 13.3333H10.0083M8.57465 3.21517L2.51132 13.3333C1.92535 14.3618 2.67592 15.6667 3.9368 15.6667H16.0632C17.3241 15.6667 18.0747 14.3618 17.4887 13.3333L11.4254 3.21517C10.8486 2.20371 9.15144 2.20371 8.57465 3.21517Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n @case (SnackbarType.INFO) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M10 13.3333V10M10 6.66667H10.0083M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n }\n </div>\n\n <span class=\"snackbar-message\">{{ data.message }}</span>\n\n @if (data.action) {\n <button class=\"snackbar-action\" (click)=\"dismiss()\">\n {{ data.action }}\n </button>\n }\n\n <button class=\"snackbar-close\" (click)=\"dismiss()\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M12 4L4 12M4 4L12 12\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"progress\"></div>\n </div>\n</div>\n","export enum ApplicationStatus {\n FINALIZED = 'finalized',\n PRE_APPROVED = 'pre-approved',\n SUBMITTED = 'submitted',\n}\n","export enum FilterType {\n NONE = 'none', // No filter is shown\n ALL = 'all', // One input box that filter on all columns\n COLUMN = 'column', // Add a filter for each column\n}\n\nexport enum NumberOperator {\n EQUAL = 'EQUAL',\n NOT_EQUAL = 'NOT_EQUAL',\n GREATER_THAN = 'GREATER_THAN',\n GREATER_THAN_OR_EQUAL = 'GREATER_THAN_OR_EQUAL',\n LESS_THAN = 'LESS_THAN',\n LESS_THAN_OR_EQUAL = 'LESS_THAN_OR_EQUAL',\n BETWEEN = 'BETWEEN',\n}\n\nexport enum StringOperator {\n CONTAINS = 'CONTAINS',\n EXACT = 'EXACT',\n STARTS_WITH = 'STARTS_WITH',\n ENDS_WITH = 'ENDS_WITH',\n NOT_CONTAINS = 'NOT_CONTAINS',\n NOT_EXACT = 'NOT_EXACT',\n}\n\nexport enum DateOperator {\n BEFORE = 'BEFORE',\n AFTER = 'AFTER',\n DATE_RANGE = 'DATE_RANGE',\n}\n","export enum Role {\n SUPER_USER = 'super_user',\n ADMIN = 'admin',\n FRONT_DESK = 'front_desk',\n STUDENT_DEAN = 'student_dean',\n RESIDENCE_ASSISTANT = 'residence_assistant',\n STUDENT = 'student',\n GUEST = 'guest',\n}\n","export enum TableDisplayColumnType {\n ARRAY = 'ARRAY',\n BOOLEAN = 'BOOLEAN',\n CLICK = 'CLICK',\n DATE = 'DATE',\n DATETIME = 'DATETIME',\n HYPERLINK = 'HYPERLINK',\n ICON = 'ICON',\n MONEY = 'MONEY',\n PHONE = 'PHONE',\n TEXT = 'TEXT',\n TEXT_OBSERVABLES = 'TEXT_OBSERVABLES',\n SELECT = 'SELECT',\n NUMBER = 'NUMBER',\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { formatDate } from '@angular/common';\n\nexport const capitalize = (word: string) =>\n word ? word.charAt(0).toUpperCase() + word.slice(1) : word;\n\nexport const pluralize = (word: string) =>\n /(?<!e)y\\b/.test(word) ? word.replace(/(?<!e)y\\b/, 'ies') : `${word}s`;\n\nexport const spaceCase = (word: string) => word.replace(/[-_]+/g, ' ');\n\nexport const inListValidator = (list: string[]): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = String(control.value);\n return list.includes(value) ? { inList: true } : null;\n };\n};\n\nexport const updateArray = (\n items: any[],\n item: any,\n propertyId = 'id',\n addToEnd = true\n) =>\n items.some(i => i[propertyId] === item[propertyId])\n ? items.map(i => (i[propertyId] === item[propertyId] ? item : i))\n : addToEnd\n ? [...items, item]\n : [item, ...items];\n\nexport const formatPhoneNumber = (value: string): string => {\n // Remove all non-digits\n const digitsOnly = value.replace(/\\D/g, '');\n\n // Format based on length\n let formattedValue = '';\n\n if (digitsOnly.length >= 10) {\n // Format as (XXX) XXX-XXXX for 10+ digits\n const match = digitsOnly.match(/^(\\d{3})(\\d{3})(\\d{4})(\\d*)$/);\n if (match) {\n formattedValue = `(${match[1]}) ${match[2]}-${match[3]}`;\n if (match[4]) {\n formattedValue += ` ext. ${match[4]}`;\n }\n } else {\n // Fallback for different lengths\n formattedValue = digitsOnly.replace(\n /^(\\d{3})(\\d{3})(\\d{0,4}).*/,\n '($1) $2-$3'\n );\n }\n } else if (digitsOnly.length >= 7) {\n // Format as XXX-XXXX for 7-9 digits\n formattedValue = digitsOnly.replace(/^(\\d{3})(\\d{0,4})/, '$1-$2');\n } else if (digitsOnly.length >= 4) {\n // Format as XXX-X for 4-6 digits\n formattedValue = digitsOnly.replace(/^(\\d{3})(\\d{0,3})/, '$1-$2');\n } else {\n // Keep as is for less than 4 digits\n formattedValue = digitsOnly;\n }\n\n return formattedValue;\n};\n\n// Parse local date string to Date object without time zone offset\nexport function parseLocalDate(dateString: string): Date {\n const [year, month, day] = dateString.split('-');\n return new Date(Number(year), Number(month) - 1, Number(day));\n}\n\n// Format Date to Day Month Year HH:mm (LocalDateTime)\n// Example: Tue Feb 12 2022 12:00 without commas\nexport function formatLocalDateTimeLongForm(date: Date): string {\n return date\n .toLocaleString('en-US', {\n weekday: 'short',\n month: 'short',\n day: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n })\n .replace(',', '');\n}\n\n// Format Date to YYYY-MM-DDTHH:mm:ss (LocalDateTime)\nexport function formatLocalDateTime(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\n}\n\n// Format Date to HH:mm:ss (LocalTime)\nexport function formatLocalTime(date: Date): string {\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${hours}:${minutes}:${seconds}`;\n}\n\n// Format Date to HH:mm (LocalTime)\nexport function formatLocalTimeWithMinutes(date: Date): string {\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n return `${hours}:${minutes}`;\n}\n\n// Format Date to HH:mm with AM/PM format (LocalTime)\nexport function formatLocalTimeWithMinutesAmPm(date: Date): string {\n const hours = Number.parseInt(String(date.getHours()));\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const ampm = hours >= 12 ? 'PM' : 'AM';\n const normalizedHour = hours % 12 === 0 ? 12 : hours % 12;\n return `${normalizedHour.toString().padStart(2, '0')}:${minutes} ${ampm}`;\n}\n\n// Format Date to YYYY-MM-DD (LocalDate)\nexport function formatLocalDate(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0'); // Months are 0-based\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Formats an ISO date string to a readable format\n * @param isoString - Date string in ISO format (e.g., \"2025-09-12T21:30:00\")\n * @returns Formatted date string (e.g., \"September 12, 2025, 9:30 PM\")\n */\nexport function formatStringDateTime(isoString: string): string {\n const date = new Date(isoString);\n\n // Check if date is valid\n if (isNaN(date.getTime())) {\n throw new Error('Invalid date string provided');\n }\n\n const options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n };\n\n return date.toLocaleDateString('en-US', options);\n}\n\n/**\n * Formats an ISO date string to a readable format\n * @param isoString - Date string in ISO format (e.g., \"2025-09-12\")\n * @returns Formatted date string (e.g., \"September 12, 2025\")\n */\nexport function formatStringDate(isoString: string): string {\n const date = new Date(isoString);\n\n // Check if date is valid\n if (isNaN(date.getTime())) {\n throw new Error('Invalid date string provided');\n }\n\n const options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n };\n\n return date.toLocaleDateString('en-US', options);\n}\n\n/**\n * Format YYYY-MM to localized month year format\n * @param dateStr Format: \"2025-11\"\n * @param locale Language indicator\n * @returns Format: \"Nov 2025\" (or localized equivalent)\n */\nexport function formatMonthYear(dateStr: string, locale: string): string {\n const [year, month] = dateStr.split('-');\n // Create date as first day of the month\n const date = new Date(parseInt(year), parseInt(month) - 1, 1);\n\n // Use Angular's formatDate with current locale\n // 'MMM yyyy' format gives \"Nov 2025\", \"déc. 2025\" for French, etc.\n return formatDate(date, 'MMM yyyy', locale);\n}\n","import { capitalize } from '../../utils/common-utils';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'capitalize',\n})\nexport class CapitalizePipe implements PipeTransform {\n transform(value: string | null | undefined): string {\n return value ? capitalize(value) : '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'pluralize',\n})\nexport class PluralizePipe implements PipeTransform {\n transform(value: string | null): string {\n return value\n ? value.includes('|')\n ? value.split('|')[1].trim()\n : value\n : '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, map } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslateWrapperService {\n constructor(private translateService: TranslateService) {}\n\n get(translation: string, count?: number, params?: any): Observable<string> {\n return this.translateService.stream(translation, params).pipe(\n map(v => {\n if (v.includes('|')) {\n return v.split('|')[count && count > 1 ? 1 : 0].trim();\n }\n return v;\n })\n );\n }\n\n translate(translation: string, count?: number, params?: any): string {\n const value = this.translateService.instant(translation, params);\n if (value.includes('|')) {\n return value.split('|')[count && count > 1 ? 1 : 0].trim();\n }\n return value;\n }\n}\n","import {\n CustomAction,\n TableQuery,\n TableQueryChange,\n} from './custom-table.interface';\nimport { ApplicationStatus } from '../../enums/application-status.enum';\nimport {\n DateOperator,\n NumberOperator,\n StringOperator,\n} from '../../enums/custom-table.enum';\nimport { Role } from '../../enums/role.enum';\nimport { TableDisplayColumnType } from '../../enums/table-display-column-type';\nimport { FloorInterface } from '../../interfaces/floor.interface';\nimport { TableDisplayColumn } from '../../interfaces/table-display-column.interface';\nimport { FilterCriteria } from '../../interfaces/table.interface';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport { PluralizePipe } from '../../pipes/pluralize/pluralize.pipe';\nimport { TranslateWrapperService } from '../../services/translate-wrapper/translate-wrapper.service';\nimport { capitalize } from '../../utils/common-utils';\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n AsyncPipe,\n DatePipe,\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n} from '@angular/common';\nimport {\n Component,\n ContentChild,\n DestroyRef,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatCard, MatCardContent, MatCardHeader } from '@angular/material/card';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport {\n MatDatepickerModule,\n MatDatepickerToggle,\n MatDateRangeInput,\n MatDateRangePicker,\n} from '@angular/material/datepicker';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n MatFormField,\n MatHint,\n MatInput,\n MatLabel,\n MatSuffix,\n} from '@angular/material/input';\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatOption, MatSelect } from '@angular/material/select';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { MatSort } from '@angular/material/sort';\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable,\n MatTableDataSource,\n} from '@angular/material/table';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { isEqual } from 'lodash-es';\nimport {\n debounceTime,\n distinctUntilChanged,\n iif,\n Observable,\n of,\n switchMap,\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport enum ActionType {\n ADD = 'add',\n APPROVE = 'approve',\n DELETE = 'delete',\n EXTEND = 'extend',\n REJECT = 'reject',\n}\n\n@Component({\n selector: 'ud-table',\n templateUrl: './custom-table.component.html',\n styleUrls: ['./custom-table.component.scss'],\n animations: [\n trigger('detailExpand', [\n state('collapsed, void', style({ height: '0px', minHeight: '0' })),\n state('expanded', style({ height: '*' })),\n transition('* <=> *', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n ]),\n ],\n imports: [\n MatPaginator,\n NgClass,\n MatProgressSpinner,\n CapitalizePipe,\n TranslatePipe,\n MatIcon,\n AsyncPipe,\n MatRow,\n MatHeaderRow,\n MatCell,\n MatColumnDef,\n MatIconButton,\n MatHeaderCell,\n MatMenu,\n MatCellDef,\n NgStyle,\n DatePipe,\n MatTooltip,\n MatHeaderCellDef,\n MatCheckbox,\n MatTable,\n MatSort,\n MatDatepickerToggle,\n MatDateRangePicker,\n MatHint,\n MatDateRangeInput,\n MatLabel,\n MatSlideToggle,\n ReactiveFormsModule,\n MatButton,\n MatMenuTrigger,\n MatSelect,\n MatFormField,\n MatInput,\n MatSuffix,\n MatCardContent,\n MatCardHeader,\n MatCard,\n MatOption,\n NgTemplateOutlet,\n RouterLink,\n MatHeaderRowDef,\n MatRowDef,\n MatDatepickerModule,\n PluralizePipe,\n ],\n})\nexport class CustomTableComponent implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * ID of the table, if present, we can use it to the table's pagination and filtering\n */\n @Input() id?: string;\n /**\n * Title of the table\n */\n @Input() title: Observable<string> = of('');\n /**\n * Icon of the table\n */\n @Input() icon!: string;\n /**\n * Actions\n */\n @Input() actions: ActionType[] = [];\n /**\n * Custom actions\n */\n @Input() customActions: CustomAction[] = [];\n /**\n * Allowed roles\n */\n @Input() allowedRoles: Role[] = [Role.ADMIN];\n /**\n * Should have checkbox or not\n */\n @Input() haveCheckbox!: boolean;\n /**\n * Columns of the table\n */\n @Input() displayedColumns!: TableDisplayColumn[];\n /**\n * Data source / rows\n */\n @Input() dataSource!: MatTableDataSource<any>;\n /**\n * Page size options\n */\n @Input() paginationSizeOptions: number[] = [10, 20, 50, 100];\n /**\n * First page size\n */\n @Input() initialPageSize?: number = 10;\n @Input() specificSelectRow: boolean = false;\n /**\n * If filters are enabled\n */\n @Input() hasFilter: boolean = true;\n /**\n * If rows can be expandable\n */\n @Input() expandableRows: boolean = false;\n /**\n * Expanded rows\n */\n @Input() expandedItem!: { type: string; property: string };\n @Input() emptyMessage?: Observable<string>;\n /**\n * Table loading status\n */\n @Input() isLoading?: boolean = false;\n /**\n * Whether to have one filter for all columns or one filter per column\n */\n @Input() separateFilters?: boolean = true;\n /**\n * Show paginator or not\n */\n @Input() showPaginator?: boolean = true;\n /**\n * Display message if there's no data\n */\n @Input() noTableDataMessage?: string;\n /**\n * Actions button shown or not\n */\n @Input() actionsMenuEnabled?: boolean = false;\n /**\n * Number of rows\n */\n @Input() totalElements?: number;\n /**\n * Use server side filtering or client side filtering\n * Should only use client side if there aren't a lot of rows\n */\n @Input() serverSideFiltering?: boolean = false;\n /**\n * Remove header\n */\n @Input() disableHeader?: boolean = false;\n\n /**\n * Emits delete\n */\n @Output() delete = new EventEmitter<SelectionModel<any>>();\n /**\n * Emits approve\n */\n @Output() approve = new EventEmitter<SelectionModel<any>>();\n /**\n * Emits reject\n */\n @Output() reject = new EventEmitter<SelectionModel<any>>();\n /**\n * Emits extend\n */\n @Output() extend = new EventEmitter<SelectionModel<any>>();\n /**\n * Emits add\n */\n @Output() add = new EventEmitter<void>();\n /**\n * Emits clicked\n */\n @Output() clicked = new EventEmitter<any>();\n /**\n * Emits combined query change (filters + pagination)\n */\n @Output() queryChange = new EventEmitter<TableQueryChange>();\n\n @ContentChild(TemplateRef) actionsTemplate!: TemplateRef<any>;\n\n selection = new SelectionModel<any>(true, []);\n selectedFilters: TableDisplayColumn[] = [];\n\n expandedElement: FloorInterface | null = null;\n columnsToDisplayWithExpand: string[] = [];\n\n tableDisplayColumnType = TableDisplayColumnType;\n initSortedCol: TableDisplayColumn | null = null;\n\n filterByColumnFormGroup: FormGroup = new FormGroup({});\n\n /**\n * Related to filtering and pagination on localStorage\n */\n private isRestoringState = false;\n private currentFilters: FilterCriteria[] = [];\n\n /**\n * Operators\n *\n * - Number\n */\n numberOperations: { label: Observable<string>; value: NumberOperator }[] = [];\n\n @ViewChild(MatPaginator, { static: false }) paginatorRef!: MatPaginator;\n\n @ViewChild(MatPaginator, { static: false }) set paginator(val: MatPaginator) {\n if (val && !this.serverSideFiltering) {\n this.dataSource.paginator = val;\n }\n }\n\n @ViewChild(MatSort, { static: false }) set sort(val: MatSort) {\n if (val) {\n this.dataSource.sort = val;\n }\n }\n\n @ViewChild('allFilterInput', { static: true })\n allFilterInput!: ElementRef<HTMLInputElement>;\n\n constructor(\n private translateService: TranslateWrapperService,\n ) {}\n\n ngOnInit(): void {\n this.numberOperations = Object.values(NumberOperator).map(operator => ({\n label: this.translateService.get(`operators.numbers.${operator}`),\n value: operator,\n }));\n this.setInitSort();\n this.setInitFilter();\n this.setEmptyMessage();\n\n // Wait for filter controls to be built before restoring\n if (this.id !== undefined) {\n this.isRestoringState = true;\n\n // Use a longer timeout to ensure controls are ready\n setTimeout(() => {\n this.restoreTableQuery();\n }, 100); // Wait for controls to be built\n }\n\n if (this.hasFilter && this.separateFilters) {\n if (!this.serverSideFiltering) {\n this.applyFilterByColumn();\n }\n\n this.filterByColumnFormGroup.valueChanges\n .pipe(\n debounceTime(400),\n map(formValue => {\n return Object.entries(formValue)\n .filter(([_key, value]) => value !== null && value !== '')\n .reduce((acc: { [key: string]: any }, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {});\n }),\n distinctUntilChanged((prev, curr) => isEqual(prev, curr)),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((formValue: any) => {\n // Skip if we're still restoring\n if (this.isRestoringState) {\n return;\n }\n\n if (this.serverSideFiltering) {\n const filterCriteria = this.buildFilterCriteria(formValue);\n this.queryChange.emit({\n filters: filterCriteria,\n pageIndex: 0,\n pageSize:\n this.paginatorRef?.pageSize || this.initialPageSize || 10,\n });\n if (this.paginatorRef) {\n this.paginatorRef.firstPage();\n }\n } else {\n // Client-side filtering - save to localStorage if id exists\n this.buildFilterCriteria(formValue); // Saves to localStorage as a side effect\n\n this.dataSource.filter = JSON.stringify(formValue);\n if (this.dataSource.paginator) {\n this.dataSource.paginator.firstPage();\n }\n }\n });\n\n // Reset the flag after a delay that's longer than debounceTime\n if (this.id !== undefined) {\n setTimeout(() => {\n this.isRestoringState = false;\n }, 600); // 600ms to account for 100ms + 400ms debounce + buffer\n }\n }\n }\n\n applyFilterToAllColumns(event: Event) {\n const filterValue = (event.target as HTMLInputElement).value;\n // Apply the transformFn so that if the user filters based on that value we still keep the transformValue not the original one\n const transformedDataSource = this.dataSource;\n this.displayedColumns.forEach((column: TableDisplayColumn) => {\n if (column.transformFn) {\n transformedDataSource.data = transformedDataSource.data.map(data => ({\n ...data,\n [column.property]: column.transformFn(data[column.property]),\n }));\n }\n });\n this.dataSource.filter = filterValue.trim().toLowerCase();\n\n if (this.dataSource.paginator) {\n this.dataSource.paginator.firstPage();\n }\n }\n\n applyFilterByColumn(): void {\n this.dataSource.filterPredicate = (data: any, filter: string): boolean => {\n const filterObj = JSON.parse(filter) as Record<string, any>;\n return Object.entries(filterObj).every(([key, value]) => {\n const column = this.displayedColumns.find(col => col.property === key);\n if (!column) return true;\n\n const dataValue = data[key];\n\n // TEXTS\n if (\n [\n TableDisplayColumnType.TEXT,\n TableDisplayColumnType.HYPERLINK,\n TableDisplayColumnType.CLICK,\n ].includes(column.type)\n ) {\n const dataStr = dataValue?.toString().toLowerCase() || '';\n const searchStr = (value as string)?.toLowerCase() || '';\n return dataStr.includes(searchStr);\n } else if (\n [\n TableDisplayColumnType.NUMBER,\n TableDisplayColumnType.MONEY,\n ].includes(column.type)\n ) {\n // Number filtering (handle exact value or range)\n const filterValue = value as {\n operation?: NumberOperator;\n min?: number;\n max?: number;\n value?: number;\n };\n const numValue = Number(dataValue);\n\n if (isNaN(numValue)) return false;\n\n if (filterValue.value != null) {\n switch (filterValue.operation) {\n case NumberOperator.EQUAL:\n return numValue === filterValue.value;\n case NumberOperator.NOT_EQUAL:\n return numValue !== filterValue.value;\n case NumberOperator.GREATER_THAN:\n return numValue > filterValue.value;\n case NumberOperator.GREATER_THAN_OR_EQUAL:\n return numValue >= filterValue.value;\n case NumberOperator.LESS_THAN:\n return numValue < filterValue.value;\n case NumberOperator.LESS_THAN_OR_EQUAL:\n return numValue <= filterValue.value;\n default:\n console.warn(`Unknown operator: ${filterValue.operation}`);\n return true;\n }\n } else if (filterValue.min != null && filterValue.max != null) {\n // Range filtering\n return numValue >= filterValue.min && numValue <= filterValue.max;\n } else if (filterValue.min != null) {\n return numValue >= filterValue.min;\n } else if (filterValue.max != null) {\n return numValue <= filterValue.max;\n }\n return true;\n } else if (column.type === TableDisplayColumnType.BOOLEAN) {\n return dataValue === value;\n } else if (column.type === TableDisplayColumnType.PHONE) {\n if (dataValue.phoneNumber.length === 10) {\n return dataValue.phoneNumber.includes(value.toString());\n }\n return dataValue.phoneNumber\n .replace('(', '')\n .replace(')', '')\n .replace('-', '')\n .includes(value.toString());\n } else if (\n [\n TableDisplayColumnType.DATETIME,\n TableDisplayColumnType.DATE,\n ].includes(column.type)\n ) {\n const filterValue = value as {\n start?: string | Date | null;\n end?: string | Date | null;\n };\n const dataDate =\n dataValue instanceof Date ? dataValue : new Date(dataValue);\n if (isNaN(dataDate.getTime())) return false;\n\n const startDate =\n filterValue.start instanceof Date\n ? filterValue.start\n : filterValue.start\n ? new Date(filterValue.start)\n : null;\n const endDate =\n filterValue.end instanceof Date\n ? filterValue.end\n : filterValue.end\n ? new Date(filterValue.end)\n : null;\n\n if (startDate && isNaN(startDate.getTime())) return true;\n if (endDate && isNaN(endDate.getTime())) return true;\n\n if (startDate && endDate) {\n return dataDate >= startDate && dataDate <= endDate;\n } else if (startDate) {\n return dataDate >= startDate;\n } else if (endDate) {\n return dataDate <= endDate;\n }\n return true;\n }\n return true;\n });\n };\n }\n\n private buildFilterCriteria(formValue: any): FilterCriteria[] {\n const filterCriteria: FilterCriteria[] = [];\n\n Object.entries(formValue).forEach(([field, value]) => {\n if (value === null || value === '') return;\n\n const column = this.displayedColumns.find(col => col.property === field);\n if (!column) return;\n\n const filterField = column.filterProperty || column.property;\n\n switch (column.type) {\n case TableDisplayColumnType.TEXT:\n case TableDisplayColumnType.HYPERLINK:\n case TableDisplayColumnType.CLICK:\n case TableDisplayColumnType.PHONE:\n filterCriteria.push({\n field: filterField,\n operator: StringOperator.CONTAINS,\n value: value,\n });\n break;\n\n case TableDisplayColumnType.NUMBER:\n case TableDisplayColumnType.MONEY:\n // eslint-disable-next-line no-case-declarations\n const numFilter = value as {\n operation?: NumberOperator;\n min?: number;\n max?: number;\n value?: number;\n };\n\n if (numFilter.value != null && numFilter.operation) {\n filterCriteria.push({\n field: filterField,\n operator: numFilter.operation,\n value: numFilter.value,\n });\n } else if (numFilter.min != null || numFilter.max != null) {\n if (numFilter.min != null) {\n filterCriteria.push({\n field: filterField,\n operator: NumberOperator.GREATER_THAN_OR_EQUAL,\n value: numFilter.min,\n });\n }\n if (numFilter.max != null) {\n filterCriteria.push({\n field: filterField,\n operator: NumberOperator.LESS_THAN_OR_EQUAL,\n value: numFilter.max,\n });\n }\n }\n break;\n\n case TableDisplayColumnType.BOOLEAN:\n if (value !== null) {\n filterCriteria.push({\n field: filterField,\n operator: StringOperator.EXACT,\n value: value,\n });\n }\n break;\n\n case TableDisplayColumnType.DATE:\n case TableDisplayColumnType.DATETIME:\n // eslint-disable-next-line no-case-declarations\n const dateFilter = value as {\n start?: Date | null;\n end?: Date | null;\n };\n\n if (dateFilter.start && dateFilter.end) {\n filterCriteria.push({\n field: filterField,\n operator: DateOperator.DATE_RANGE,\n value: JSON.stringify({\n start: dateFilter.start.toISOString(),\n end: dateFilter.end.toISOString(),\n }),\n });\n } else if (dateFilter.start) {\n filterCriteria.push({\n field: filterField,\n operator: DateOperator.AFTER,\n value: dateFilter.start.toISOString(),\n });\n } else if (dateFilter.end) {\n filterCriteria.push({\n field: filterField,\n operator: DateOperator.BEFORE,\n value: dateFilter.end.toISOString(),\n });\n }\n break;\n }\n });\n\n if (this.id) {\n this.setTableQuery(this.id, { filters: filterCriteria });\n }\n\n // Store current filters\n this.currentFilters = filterCriteria;\n\n return filterCriteria;\n }\n\n filterSelectionChanged(selectedFilters: string[]) {\n this.selectedFilters = this.displayedColumns.filter(col =>\n selectedFilters.includes(col.property)\n );\n\n if (this.hasFilter && this.separateFilters) {\n const currentControls = Object.keys(\n this.filterByColumnFormGroup.controls\n );\n\n // Add new controls for selected filters\n this.selectedFilters.forEach(filter => {\n if (!currentControls.includes(filter.property)) {\n switch (filter.type) {\n case TableDisplayColumnType.HYPERLINK:\n case TableDisplayColumnType.TEXT:\n case TableDisplayColumnType.PHONE:\n case TableDisplayColumnType.CLICK:\n case TableDisplayColumnType.ARRAY:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormGroup({\n operator: new FormControl<StringOperator>(\n StringOperator.CONTAINS\n ),\n value: new FormControl<string | null>(null),\n }),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.BOOLEAN:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormControl<boolean | null>(null),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.MONEY:\n case TableDisplayColumnType.NUMBER:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormGroup({\n operation: new FormControl<string | null>(null),\n min: new FormControl<number | null>(null),\n max: new FormControl<number | null>(null),\n value: new FormControl<number | null>(null),\n }),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.DATE:\n case TableDisplayColumnType.DATETIME:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormGroup({\n start: new FormControl<Date | null>(null),\n end: new FormControl<Date | null>(null),\n }),\n { emitEvent: false }\n );\n break;\n }\n }\n });\n\n currentControls.forEach(controlName => {\n if (\n !this.selectedFilters.some(filter => filter.property === controlName)\n ) {\n this.filterByColumnFormGroup.removeControl(controlName, {\n emitEvent: false,\n });\n }\n });\n }\n }\n\n deleteAction() {\n this.delete.emit(this.selection);\n }\n\n approveAction() {\n this.approve.emit(this.selection);\n }\n\n rejectAction() {\n this.reject.emit(this.selection);\n }\n\n extendAction() {\n this.extend.emit(this.selection);\n }\n\n addAction() {\n this.add.emit();\n }\n\n clickedAction(item: any) {\n this.clicked.emit(item);\n if (this.haveCheckbox) {\n this.selection.toggle(item);\n }\n }\n\n onPageChange(event: PageEvent) {\n if (this.id) {\n this.setTableQuery(this.id, {\n pageSize: event.pageSize,\n pageNumber: event.pageIndex,\n });\n }\n\n // Only emit for server-side filtering\n if (this.serverSideFiltering) {\n this.queryChange.emit({\n filters: this.currentFilters,\n pageIndex: event.pageIndex,\n pageSize: event.pageSize,\n });\n }\n }\n\n /** Whether the number of selected elements matches the total number of rows. */\n isAllSelected() {\n const numSelected = this.selection.selected.length;\n const dataSourceLength = this.specificSelectRow\n ? this.dataSource.data.filter(row => this.isApplicationSubmitted(row))\n .length\n : this.dataSource.data.length;\n return numSelected === dataSourceLength;\n }\n\n /** Selects all rows if they are not all selected; otherwise clear selection. */\n toggleAllRows() {\n if (this.isAllSelected()) {\n this.selection.clear();\n return;\n }\n\n this.selection.select(...this.dataSource.data);\n }\n\n /** The label for the checkbox on the passed row */\n checkboxLabel(row?: any): string {\n if (!row) {\n return `${this.isAllSelected() ? 'deselect' : 'select'} all`;\n }\n return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${\n row.id\n }`;\n }\n\n selectRow(row?: any): void {\n if (!this.specificSelectRow) {\n this.selection.toggle(row);\n }\n }\n\n setInitSort(): void {\n this.initSortedCol = this.displayedColumns.find(\n (col: TableDisplayColumn) => col.initSort!\n )!;\n }\n\n setInitFilter(): void {\n if (this.hasFilter && this.separateFilters) {\n setTimeout(() => {\n this.buildColumnFilterControls();\n });\n }\n }\n\n private restoreTableQuery(): void {\n if (!this.id) return;\n\n const savedQuery = localStorage.getItem(this.id);\n if (!savedQuery) {\n if (this.serverSideFiltering) {\n this.queryChange.emit({\n filters: [],\n pageIndex: 0,\n pageSize: this.initialPageSize || 10,\n });\n }\n return;\n }\n\n try {\n const tableQuery: TableQuery = JSON.parse(savedQuery);\n\n if (tableQuery.pageSize && this.paginatorRef) {\n this.paginatorRef.pageSize = tableQuery.pageSize;\n }\n if (tableQuery.pageNumber !== undefined && this.paginatorRef) {\n this.paginatorRef.pageIndex = tableQuery.pageNumber;\n }\n\n if (tableQuery.filters && tableQuery.filters.length > 0) {\n this.restoreFiltersFromCriteria(tableQuery.filters);\n this.currentFilters = tableQuery.filters;\n }\n\n if (this.serverSideFiltering) {\n this.queryChange.emit({\n filters: tableQuery.filters || [],\n pageIndex: tableQuery.pageNumber || 0,\n pageSize: tableQuery.pageSize || this.initialPageSize || 10,\n });\n }\n } catch (error) {\n console.error('Failed to restore table query:', error);\n localStorage.removeItem(this.id);\n\n if (this.serverSideFiltering) {\n this.queryChange.emit({\n filters: [],\n pageIndex: 0,\n pageSize: this.initialPageSize || 10,\n });\n }\n }\n }\n\n private restoreFiltersFromCriteria(filterCriteria: FilterCriteria[]): void {\n const formValue: any = {};\n\n filterCriteria.forEach(criteria => {\n const column = this.displayedColumns.find(\n col => (col.filterProperty || col.property) === criteria.field\n );\n\n if (!column) return;\n\n const property = column.property;\n\n switch (column.type) {\n case TableDisplayColumnType.TEXT:\n case TableDisplayColumnType.HYPERLINK:\n case TableDisplayColumnType.CLICK:\n case TableDisplayColumnType.PHONE:\n formValue[property] = criteria.value;\n break;\n\n case TableDisplayColumnType.BOOLEAN:\n formValue[property] = criteria.value;\n break;\n\n case TableDisplayColumnType.NUMBER:\n case TableDisplayColumnType.MONEY:\n if (!formValue[property]) {\n formValue[property] = {\n operation: null,\n min: null,\n max: null,\n value: null,\n };\n }\n\n if (criteria.operator === NumberOperator.GREATER_THAN_OR_EQUAL) {\n formValue[property].min = criteria.value;\n } else if (criteria.operator === NumberOperator.LESS_THAN_OR_EQUAL) {\n formValue[property].max = criteria.value;\n } else {\n formValue[property].operation = criteria.operator;\n formValue[property].value = criteria.value;\n }\n break;\n\n case TableDisplayColumnType.DATE:\n case TableDisplayColumnType.DATETIME:\n if (criteria.operator === DateOperator.DATE_RANGE) {\n const range = JSON.parse(criteria.value as string);\n formValue[property] = {\n start: new Date(range.start),\n end: new Date(range.end),\n };\n } else if (criteria.operator === DateOperator.AFTER) {\n formValue[property] = {\n start: new Date(criteria.value as string),\n end: null,\n };\n } else if (criteria.operator === DateOperator.BEFORE) {\n formValue[property] = {\n start: null,\n end: new Date(criteria.value as string),\n };\n }\n break;\n }\n });\n\n // Patch with emitEvent: false to prevent duplicate emissions during restoration\n this.filterByColumnFormGroup.patchValue(formValue, { emitEvent: false });\n\n // For client-side filtering, manually apply filter\n if (!this.serverSideFiltering && Object.keys(formValue).length > 0) {\n this.dataSource.filter = JSON.stringify(formValue);\n\n if (this.dataSource.paginator) {\n this.dataSource.paginator.firstPage();\n }\n }\n }\n\n private setTableQuery(\n id: string,\n tableQueryParams: Partial<TableQuery>\n ): void {\n let tableQuery: TableQuery;\n\n const existingQuery = localStorage.getItem(id);\n if (existingQuery) {\n tableQuery = JSON.parse(existingQuery);\n\n // If filters are being updated, reset page number to 0\n if (tableQueryParams.filters !== undefined) {\n tableQuery = {\n ...tableQuery,\n ...tableQueryParams,\n pageNumber: 0, // Reset to first page when filters change\n };\n } else {\n tableQuery = { ...tableQuery, ...tableQueryParams };\n }\n } else {\n tableQuery = {\n filters: tableQueryParams.filters || [],\n pageSize: tableQueryParams.pageSize || this.initialPageSize || 10,\n pageNumber: tableQueryParams.pageNumber || 0,\n };\n }\n\n localStorage.setItem(id, JSON.stringify(tableQuery));\n }\n\n buildColumnFilterControls() {\n this.selectedFilters = this.displayedColumns.filter(\n col =>\n !col.disableFiltering &&\n this.displayedColumnsWithoutSelect\n .map(c => c.property)\n .includes(col.property)\n );\n\n if (this.hasFilter && this.separateFilters) {\n const currentControls = Object.keys(\n this.filterByColumnFormGroup.controls\n );\n\n // Add new controls for selected filters\n this.selectedFilters.forEach(filter => {\n if (!currentControls.includes(filter.property)) {\n switch (filter.type) {\n case TableDisplayColumnType.HYPERLINK:\n case TableDisplayColumnType.TEXT:\n case TableDisplayColumnType.PHONE:\n case TableDisplayColumnType.CLICK:\n case TableDisplayColumnType.ARRAY:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormControl<string | null>(null),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.BOOLEAN:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormControl<boolean | null>(null),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.MONEY:\n case TableDisplayColumnType.NUMBER:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormGroup({\n operation: new FormControl<string | null>(null),\n min: new FormControl<number | null>(null),\n max: new FormControl<number | null>(null),\n value: new FormControl<number | null>(null),\n }),\n { emitEvent: false }\n );\n break;\n case TableDisplayColumnType.DATE:\n case TableDisplayColumnType.DATETIME:\n this.filterByColumnFormGroup.addControl(\n filter.property,\n new FormGroup({\n start: new FormControl<Date | null>(null),\n end: new FormControl<Date | null>(null),\n }),\n { emitEvent: false }\n );\n break;\n }\n }\n });\n }\n }\n\n setEmptyMessage(): void {\n this.emptyMessage = this.title.pipe(\n switchMap(title =>\n iif(\n () => this.actions.includes(ActionType.ADD),\n this.translateService.get('messages.emptyMessageTableAdd', 1, {\n value: title,\n }),\n this.translateService.get('messages.emptyMessageTable')\n )\n )\n );\n }\n\n formatPhoneNumber(value: string): string {\n if (value && value.length === 10 && /^\\d{10}$/.test(value)) {\n return `(${value.slice(0, 3)}) ${value.slice(3, 6)}-${value.slice(\n 6,\n 10\n )}`;\n }\n return value;\n }\n\n getRowBackgroundColor(index: number) {\n return index % 2 == 1 ? 'bg-accent' : 'bg-white';\n }\n\n getHyperlinkRoute(row: any, column: TableDisplayColumn): string {\n return column.route + (column.routeId ? row[column.routeId] : row.id);\n }\n\n private isApplicationSubmitted(row: any): boolean {\n return row.status === ApplicationStatus.SUBMITTED;\n }\n\n get hasSelectedRow(): boolean {\n return this.selection.hasValue();\n }\n\n get actionColumnStyleWidth() {\n return '5%';\n }\n\n get generalColumnStyleWidth() {\n const availableWidths =\n 100 - (this.haveCheckbox ? 5 : 0) - (this.expandableRows ? 5 : 0);\n const widthPerColumn = availableWidths / this.displayedColumns.length;\n return `${widthPerColumn}%`;\n }\n\n get displayedColumnsProperty() {\n return this.displayedColumns\n .filter(x => this.displayCheckbox || x.property !== 'select')\n .map(col => col.property);\n }\n\n get displayedColumnsWithoutSelect() {\n return this.displayedColumns.filter(x => x.property !== 'select');\n }\n\n get displayCheckbox() {\n return this.haveCheckbox;\n }\n\n protected readonly capitalize = capitalize;\n protected readonly TableDisplayColumnType = TableDisplayColumnType;\n protected readonly NumberOperator = NumberOperator;\n protected readonly ActionType = ActionType;\n}\n","<div class=\"table-div px-4 mx-4\">\n <mat-card\n appearance=\"outlined\"\n class=\"px-0 table-card\"\n [ngClass]=\"[actions.length === 0 ? 'pt-2' : 'pb-0']\"\n style=\"border-color: var(--accent-darker-color)\">\n @if (!disableHeader) {\n <mat-card-header\n class=\"d-flex justify-content-between align-items-center table-header\"\n [ngClass]=\"[actions.length === 0 ? 'pb-3' : 'pb-0']\">\n <div class=\"d-flex align-items-center\">\n @if (icon) {\n <mat-icon fontSet=\"material-icons-outlined\" class=\"table-header-icon ml-3\">\n {{ icon }}\n </mat-icon>\n }\n <h6 class=\"ml-2 table-title\">{{ title | async | capitalize }}</h6>\n </div>\n <div class=\"d-flex align-items-center action-buttons-group pr-2\">\n @if (actions.includes(ActionType.ADD)) {\n <button\n mat-flat-button\n color=\"primary\"\n class=\"action-btn action-btn--add\"\n (click)=\"addAction()\">\n <mat-icon class=\"btn-icon\">add</mat-icon>\n <span>{{ 'actions.add' | translate | capitalize }}</span>\n </button>\n }\n @if (displayCheckbox) {\n @if (actions.includes(ActionType.APPROVE)) {\n <button\n mat-stroked-button\n class=\"action-btn action-btn--approve\"\n [disabled]=\"!hasSelectedRow\"\n (click)=\"approveAction()\">\n <mat-icon class=\"btn-icon\">check_circle_outline</mat-icon>\n <span>{{ 'actions.approve' | translate | capitalize }}</span>\n </button>\n }\n @if (actions.includes(ActionType.REJECT)) {\n <button\n mat-stroked-button\n class=\"action-btn action-btn--reject\"\n [disabled]=\"!hasSelectedRow\"\n (click)=\"rejectAction()\">\n <mat-icon class=\"btn-icon\">cancel</mat-icon>\n <span>{{ 'actions.reject' | translate | capitalize }}</span>\n </button>\n }\n @if (actions.includes(ActionType.EXTEND)) {\n <button\n mat-stroked-button\n color=\"primary\"\n class=\"action-btn\"\n [disabled]=\"!hasSelectedRow\"\n (click)=\"extendAction()\">\n <mat-icon class=\"btn-icon extend-icon\">call_missed</mat-icon>\n <span>{{ 'actions.extend' | translate | capitalize }}</span>\n </button>\n }\n @if (actions.includes(ActionType.DELETE)) {\n <button\n mat-stroked-button\n class=\"action-btn action-btn--delete\"\n [disabled]=\"!hasSelectedRow\"\n (click)=\"deleteAction()\">\n <mat-icon class=\"btn-icon\">delete_outline</mat-icon>\n <span>{{ 'actions.delete' | translate | capitalize }}</span>\n </button>\n }\n @for (custom of customActions; track custom) {\n <button\n mat-stroked-button\n color=\"primary\"\n class=\"action-btn\"\n [disabled]=\"!hasSelectedRow || custom.disabled?.(selection)\"\n (click)=\"custom.clickFn(selection)\">\n <mat-icon class=\"btn-icon\">{{ custom.icon }}</mat-icon>\n <span>{{ custom.tooltipText | translate | capitalize }}</span>\n </button>\n }\n }\n @if (actionsMenuEnabled) {\n <button\n mat-stroked-button\n color=\"primary\"\n class=\"action-btn\"\n [matMenuTriggerFor]=\"menu\">\n <span>{{\n 'names.action' | translate | pluralize | capitalize\n }}</span>\n <mat-icon class=\"btn-icon\">keyboard_arrow_down</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-container\n *ngTemplateOutlet=\"\n actionsTemplate;\n context: {\n selection: selection,\n data: dataSource.data,\n selectedRows: selection.selected,\n }\n \"></ng-container>\n </mat-menu>\n }\n </div>\n </mat-card-header>\n }\n <mat-card-content>\n @if (!separateFilters) {\n <mat-form-field\n class=\"ml-4\"\n appearance=\"outline\"\n [ngStyle]=\"{ display: hasFilter ? '' : 'none' }\">\n <mat-icon class=\"filter p-0\" matSuffix>filter_alt</mat-icon>\n <mat-label>Filter</mat-label>\n <input\n #allFilterInput\n matInput\n (keyup)=\"applyFilterToAllColumns($event)\"\n placeholder=\"Sort On Any Field\" />\n </mat-form-field>\n } @else {\n <div class=\"separate-filters\">\n <form [formGroup]=\"filterByColumnFormGroup\" class=\"filters\">\n @for (filter of selectedFilters; track filter) {\n <div class=\"filter\">\n @if (\n filter.type === TableDisplayColumnType.HYPERLINK ||\n filter.type === TableDisplayColumnType.TEXT ||\n filter.type === TableDisplayColumnType.PHONE ||\n filter.type === TableDisplayColumnType.CLICK ||\n filter.type === TableDisplayColumnType.ARRAY\n ) {\n <mat-form-field\n subscriptSizing=\"dynamic\"\n class=\"custom-input\"\n appearance=\"outline\">\n <mat-label>\n {{ filter.name | async | capitalize }}\n </mat-label>\n <input\n matInput\n type=\"text\"\n [formControlName]=\"filter.property\" />\n </mat-form-field>\n } @else {\n <button\n class=\"filter-button-trigger\"\n mat-stroked-button\n [matMenuTriggerFor]=\"dropdownMenu\">\n {{ filter.name | async | capitalize }}\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <mat-menu #dropdownMenu=\"matMenu\" class=\"custom-dropdown\">\n <div\n class=\"dropdown-content\"\n (click)=\"$event.stopPropagation()\">\n @if (filter.type === TableDisplayColumnType.BOOLEAN) {\n <mat-slide-toggle [formControlName]=\"filter.property\" />\n } @else if (\n filter.type === TableDisplayColumnType.NUMBER ||\n filter.type === TableDisplayColumnType.MONEY\n ) {\n <div\n class=\"number-content\"\n [formGroupName]=\"filter.property\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\">\n <mat-label>Operation type</mat-label>\n <mat-select formControlName=\"operation\">\n @for (\n operator of numberOperations;\n track operator\n ) {\n <mat-option [value]=\"operator.value\">\n {{ operator.label | async | capitalize }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (\n filterByColumnFormGroup.controls[filter.property]\n .value.operation &&\n filterByColumnFormGroup.controls[filter.property]\n .value.operation !== NumberOperator.BETWEEN\n ) {\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\">\n <mat-label\n >{{\n 'operators.' +\n filterByColumnFormGroup.controls[\n filter.property\n ].value.operation\n | translate\n | capitalize\n }}\n </mat-label>\n <input\n formControlName=\"value\"\n matInput\n type=\"number\" />\n </mat-form-field>\n } @else if (\n filterByColumnFormGroup.controls[filter.property]\n .value.operation\n ) {\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\">\n <mat-label\n >{{\n 'operators.minimum' | translate | capitalize\n }}\n </mat-label>\n <input\n formControlName=\"min\"\n matInput\n type=\"number\" />\n </mat-form-field>\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\">\n <mat-label\n >{{\n 'operators.maximum' | translate | capitalize\n }}\n </mat-label>\n <input\n formControlName=\"max\"\n matInput\n type=\"number\" />\n </mat-form-field>\n }\n </div>\n } @else if (\n filter.type === TableDisplayColumnType.DATETIME ||\n filter.type === TableDisplayColumnType.DATE\n ) {\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\">\n <mat-label>Enter a date range</mat-label>\n <mat-date-range-input\n [formGroupName]=\"filter.property\"\n [rangePicker]=\"picker\">\n <input\n matStartDate\n formControlName=\"start\"\n placeholder=\"Start date\" />\n <input\n matEndDate\n formControlName=\"end\"\n placeholder=\"End date\" />\n </mat-date-range-input>\n <mat-hint>MM/DD/YYYY – MM/DD/YYYY</mat-hint>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\" />\n <mat-date-range-picker #picker />\n </mat-form-field>\n }\n </div>\n </mat-menu>\n }\n </div>\n }\n </form>\n </div>\n }\n @if (!isLoading) {\n @if (dataSource.filteredData.length > 0) {\n <table\n mat-table\n matSort\n [matSortActive]=\"initSortedCol?.property!\"\n [matSortDirection]=\"initSortedCol?.initSort!\"\n [multiTemplateDataRows]=\"expandableRows\"\n [dataSource]=\"dataSource\">\n <!-- Checkbox Column -->\n @if (displayCheckbox) {\n <ng-container matColumnDef=\"select\">\n <th\n [ngStyle]=\"{ width: actionColumnStyleWidth }\"\n class=\"checkbox-header\"\n mat-header-cell\n *matHeaderCellDef>\n <mat-checkbox\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n color=\"primary\">\n </mat-checkbox>\n </th>\n <td\n [ngStyle]=\"{ width: actionColumnStyleWidth }\"\n class=\"checkbox-cell\"\n mat-cell\n *matCellDef=\"let row\">\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\"\n [aria-label]=\"checkboxLabel(row)\"\n class=\"mt-2 mr-2\"\n color=\"primary\">\n </mat-checkbox>\n </td>\n </ng-container>\n }\n @for (column of displayedColumnsWithoutSelect; track column) {\n <ng-container matColumnDef=\"{{ column.property }}\">\n <th\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-header-cell\n *matHeaderCellDef>\n {{ column.name | async | capitalize }}\n </th>\n @if (column.dataCellTemplate !== undefined) {\n <td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n (click)=\"$event.stopPropagation()\">\n <ng-container\n *ngTemplateOutlet=\"\n column.dataCellTemplate;\n context: { $implicit: row, index }\n \" />\n </td>\n } @else if (column.type) {\n <ng-container>\n @switch (column.type) {\n @case (tableDisplayColumnType.ARRAY) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <span>\n {{\n column.transformFn?.(row[column.property]) ??\n row[column.property].join(', ')\n }}\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.TEXT) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <span\n [innerHTML]=\"\n column.transformFn?.(row[column.property]) ??\n row[column.property]\n \">\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.NUMBER) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <span\n [innerHTML]=\"\n column.transformFn?.(row[column.property]) ??\n row[column.property]\n \">\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.TEXT_OBSERVABLES) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <span>\n {{ row[column.property] | async | capitalize }}\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.BOOLEAN) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <mat-icon\n class=\"mt-2\"\n [matTooltip]=\"\n (row[column.property]\n ? 'names.active'\n : 'names.inactive'\n )\n | translate\n | capitalize\n \"\n matTooltipPosition=\"right\">\n {{ row[column.property] ? 'check' : 'close' }}\n </mat-icon>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.CLICK) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <span (click)=\"clickedAction(row)\" class=\"link\">\n {{ row[column.property] }}\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.DATE) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n {{ row[column.property] | date: 'MMMM dd, yyyy' }}\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.DATETIME) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n {{\n row[column.property]\n | date: 'MMMM dd, yyyy h:mm a'\n }}\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.HYPERLINK) {\n <ng-container>\n <td\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-cell\n *matCellDef=\"let row\">\n <span\n class=\"link\"\n [routerLink]=\"getHyperlinkRoute(row, column)\"\n (click)=\"$event.stopPropagation()\">\n {{ row[column.property] }}\n </span>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.ICON) {\n <ng-container>\n <td mat-cell *matCellDef=\"let row\">\n <mat-icon\n [ngStyle]=\"{\n color:\n column.icons![row[column.property]].color,\n }\">\n {{ column.icons![row[column.property]].name }}\n </mat-icon>\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.MONEY) {\n <ng-container>\n <td\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-cell\n *matCellDef=\"let row\">\n ${{ row[column.property] }}\n </td>\n </ng-container>\n }\n @case (tableDisplayColumnType.PHONE) {\n <ng-container>\n <td\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-cell\n *matCellDef=\"let row\">\n @if (row[column.property].countryCode?.code) {\n <span>\n (+{{\n row[column.property].countryCode.code || ''\n }})\n </span>\n }\n {{\n formatPhoneNumber(\n row[column.property].phoneNumber\n )\n }}\n </td>\n </ng-container>\n }\n }\n </ng-container>\n } @else {\n <ng-container>\n <td\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-cell\n *matCellDef=\"let row\">\n {{ row[column.property] }}\n </td>\n </ng-container>\n }\n </ng-container>\n }\n <ng-container matColumnDef=\"expand\">\n <th\n [ngStyle]=\"{ width: actionColumnStyleWidth }\"\n mat-header-cell\n *matHeaderCellDef\n aria-label=\"row actions\">\n &nbsp;\n </th>\n <td\n [ngStyle]=\"{ width: actionColumnStyleWidth }\"\n mat-cell\n *matCellDef=\"let element\">\n <button\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"\n expandedElement =\n expandedElement === element ? null : element;\n $event.stopPropagation()\n \">\n @if (expandedElement !== element) {\n <mat-icon> keyboard_arrow_down</mat-icon>\n } @else {\n <mat-icon> keyboard_arrow_up</mat-icon>\n }\n </button>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td\n [ngStyle]=\"{ width: generalColumnStyleWidth }\"\n mat-cell\n class=\"ml-auto\"\n *matCellDef=\"let element\"\n [attr.colspan]=\"columnsToDisplayWithExpand.length\">\n <div\n class=\"element-detail justify-content-center\"\n [@detailExpand]=\"\n element === expandedElement ? 'expanded' : 'collapsed'\n \">\n @if (expandedItem.type === 'image') {\n <img\n class=\"pb-4\"\n [src]=\"element[expandedItem.property]\"\n alt=\"\" />\n }\n </div>\n </td>\n </ng-container>\n\n @if (!expandableRows) {\n <ng-container>\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumnsProperty\"></tr>\n <tr\n mat-row\n *matRowDef=\"\n let row;\n columns: displayedColumnsProperty;\n let i = index\n \"\n (click)=\"selectRow(row)\"\n [ngClass]=\"getRowBackgroundColor(i)\"></tr>\n </ng-container>\n } @else {\n <ng-container>\n <tr\n mat-header-row\n *matHeaderRowDef=\"columnsToDisplayWithExpand\"></tr>\n <tr\n mat-row\n *matRowDef=\"\n let row;\n columns: columnsToDisplayWithExpand;\n let i = dataIndex\n \"\n [id]=\"i\"\n class=\"element-row\"\n [class.expanded-row]=\"expandedElement === row\"\n [ngClass]=\"getRowBackgroundColor(i)\"></tr>\n <tr\n mat-row\n *matRowDef=\"\n let row;\n columns: ['expandedDetail'];\n let i = dataIndex\n \"\n [id]=\"i\"\n [ngClass]=\"getRowBackgroundColor(i)\"\n [ngStyle]=\"{\n display: expandedElement === row ? 'contents' : 'none',\n }\"\n class=\"detail-row\"></tr>\n </ng-container>\n }\n\n <!-- Row shown when there is no matching data. -->\n @if (separateFilters && allFilterInput) {\n <div>\n <tr\n class=\"mat-row\"\n *matNoDataRow\n style=\"background: var(--accent-color)\">\n @if (separateFilters && allFilterInput) {\n <td\n class=\"mat-cell\"\n [attr.colspan]=\"columnsToDisplayWithExpand.length\">\n No data matching the filter \"{{\n allFilterInput.nativeElement.value\n }}\"\n </td>\n } @else {\n <td\n class=\"mat-cell\"\n [attr.colspan]=\"columnsToDisplayWithExpand.length\">\n {{ emptyMessage | async }}\n </td>\n }\n </tr>\n </div>\n }\n </table>\n } @else {\n <div class=\"no-data-found\">\n <mat-icon class=\"no-data-icon\">\n {{ dataSource.data.length > 0 ? 'search_off' : 'inbox' }}\n </mat-icon>\n <p class=\"no-data-text\">\n {{\n dataSource.data.length > 0\n ? ('messages.modifyFilter' | translate | capitalize)\n : noTableDataMessage\n }}\n </p>\n </div>\n }\n } @else {\n <div class=\"loading-container\">\n <mat-progress-spinner\n class=\"mx-auto\"\n [diameter]=\"32\"\n color=\"primary\"\n mode=\"indeterminate\" />\n </div>\n }\n @if (showPaginator) {\n <mat-paginator\n aria-label=\"Select page of users\"\n [ngClass]=\"getRowBackgroundColor(dataSource.data.length)\"\n [length]=\"totalElements ?? dataSource.data.length\"\n [pageSize]=\"initialPageSize\"\n [pageSizeOptions]=\"paginationSizeOptions\"\n (page)=\"onPageChange($event)\"\n showFirstLastButtons />\n }\n </mat-card-content>\n </mat-card>\n</div>\n","import {\n AfterViewInit,\n Component,\n Input,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\n@Component({\n selector: 'ud-dynamic-component',\n templateUrl: './dynamic-component.component.html',\n styleUrls: ['./dynamic-component.component.scss'],\n})\nexport class DynamicComponentComponent implements AfterViewInit {\n @Input() component!: any;\n @Input() properties: { [key: string]: any } = {};\n\n @ViewChild('container', { read: ViewContainerRef })\n container!: ViewContainerRef;\n componentRef: any;\n\n constructor() {}\n\n ngAfterViewInit(): void {\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n\n this.componentRef = this.container.createComponent(this.component);\n Object.keys(this.properties).forEach(key => {\n this.componentRef.instance[key] = this.properties[key];\n });\n }\n}\n","<div #container></div>\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Directive({\n selector: '[editViewSection]',\n standalone: true,\n})\nexport class EditViewSectionDirective {\n @Input() label: string | Observable<string> = '';\n @Input() icon: string = '';\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","import { AsyncPipe, CommonModule } from '@angular/common';\nimport { Component, ContentChildren, Input, QueryList } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { isObservable, Observable, of } from 'rxjs';\nimport { EditViewSectionDirective } from './edit-view-section.directive';\n\n@Component({\n selector: 'ud-edit-view',\n templateUrl: './edit-view.component.html',\n styleUrl: './edit-view.component.scss',\n standalone: true,\n imports: [\n CommonModule,\n AsyncPipe,\n NgxSkeletonLoaderModule,\n MatIconModule,\n MatButtonModule,\n ],\n})\nexport class EditViewComponent {\n @Input() title: string = '';\n @Input() loading: boolean = false;\n @Input() skeletonTitleHeight: string = '20px';\n @Input() skeletonBodyHeight: string = '150px';\n\n @ContentChildren(EditViewSectionDirective)\n sections!: QueryList<EditViewSectionDirective>;\n\n get sectionsArray(): EditViewSectionDirective[] {\n return this.sections?.toArray() ?? [];\n }\n\n get hasSections(): boolean {\n return (this.sections?.length ?? 0) > 0;\n }\n\n resolveLabel(label: string | Observable<string>): Observable<string> {\n return isObservable(label) ? label : of(label);\n }\n}\n","<div class=\"container\">\n <div class=\"header\">\n @if (loading) {\n <ngx-skeleton-loader\n class=\"loading col-6\"\n [count]=\"1\"\n [theme]=\"{ height: skeletonTitleHeight }\" />\n } @else {\n <h4>{{ title }}</h4>\n }\n <ng-content select=\"[header-actions]\"></ng-content>\n </div>\n <div class=\"content\" [ngClass]=\"{ loading: loading }\">\n @if (loading) {\n <ngx-skeleton-loader\n class=\"col\"\n [count]=\"1\"\n [theme]=\"{ height: skeletonBodyHeight }\" />\n } @else {\n @if (hasSections) {\n @for (sec of sectionsArray; track sec) {\n <div class=\"section\">\n @if (resolveLabel(sec.label) | async; as label) {\n <div class=\"section-header\">\n @if (sec.icon) {\n <mat-icon class=\"section-icon\">{{ sec.icon }}</mat-icon>\n }\n <span class=\"section-label\">{{ label }}</span>\n </div>\n }\n <ng-container [ngTemplateOutlet]=\"sec.templateRef\"></ng-container>\n </div>\n }\n }\n <ng-content select=\"[main]\"></ng-content>\n }\n </div>\n @if (!loading) {\n <ng-content select=\"[footer]\"></ng-content>\n }\n</div>\n","export enum ModalInputType {\n DATERANGE = 'daterange',\n DATETIME = 'datetime',\n TIME = 'time',\n FILE = 'file',\n INPUT = 'input',\n OPTIONS = 'options',\n MULTI_SELECT = 'multiselect',\n AUTOCOMPLETE = 'autocomplete',\n PHONE = 'phone',\n TEXT_AREA = 'text_area',\n CHIPS = 'chips',\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'singular',\n})\nexport class SingularPipe implements PipeTransform {\n transform(value: string): string {\n return value.includes('|') ? value.split('|')[0].trim() : value;\n }\n}\n","import { formatLocalTimeWithMinutesAmPm } from './common-utils';\n\nexport const generateTimeOptions = (\n start: Date,\n end: Date,\n intervalMinutes: number = 5\n): { label: string; value: Date }[] => {\n const options: { label: string; value: Date }[] = [];\n const cursor = new Date(start);\n\n cursor.setSeconds(0, 0);\n\n while (cursor <= end) {\n options.push({\n label: formatLocalTimeWithMinutesAmPm(cursor),\n value: new Date(cursor),\n });\n cursor.setMinutes(cursor.getMinutes() + intervalMinutes, 0, 0);\n }\n\n return options;\n};\n","import { CountryCode } from '../../interfaces/phone.interface';\nimport { Component, Input, OnInit } from '@angular/core';\nimport {\n AbstractControl,\n FormGroup,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport {\n MatFormField,\n MatFormFieldAppearance,\n} from '@angular/material/form-field';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport {\n MatOption,\n MatSelect,\n MatSelectTrigger,\n} from '@angular/material/select';\nimport { NgStyle } from '@angular/common';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatError, MatInput, MatLabel } from '@angular/material/input';\n\n@Component({\n selector: 'ud-tel-input',\n templateUrl: './tel-input.component.html',\n styleUrls: ['./tel-input.component.scss'],\n imports: [\n MatFormField,\n MatSelect,\n MatSelectTrigger,\n TranslatePipe,\n CapitalizePipe,\n ReactiveFormsModule,\n NgStyle,\n MatOption,\n MatIcon,\n MatInput,\n MatError,\n MatLabel,\n ],\n})\nexport class TelInputComponent implements OnInit {\n @Input() group!: AbstractControl;\n @Input() appearance: MatFormFieldAppearance = 'fill';\n @Input() width: number = 400;\n @Input() showIcon: boolean = true;\n\n protected static COUNTRIES: CountryCode[] = [\n { country: 'Canada', flag: '🇨🇦', code: 1 },\n { country: 'US', flag: '🇺🇸', code: 1 },\n // { country: 'Moldova', flag: '🇲🇩', code: 373 },\n // { country: 'Armenia', flag: '🇦🇲', code: 374 },\n ];\n protected countries = TelInputComponent.COUNTRIES;\n protected selectedCountry = TelInputComponent.COUNTRIES[0];\n\n ngOnInit() {\n const countryCodeValue = this.countryCode.value;\n\n if (!countryCodeValue) {\n this.countryCode.setValue(this.countries[0]);\n } else {\n // this seems redundant, but mat-select-trigger for\n // some reason doesn't show the initial value, so this\n // operation kind of jumpstarts it\n this.countryCode.setValue(\n this.countries.find(c => countryCodeValue.country === c.country)\n );\n }\n }\n\n get countryCode(): AbstractControl {\n return (this.group as FormGroup).controls['countryCode'];\n }\n\n get phoneNumber(): AbstractControl {\n return (this.group as FormGroup).controls['phoneNumber'];\n }\n}\n","<div class=\"d-flex\">\n <mat-form-field class=\"select\" [ngStyle]=\"{ width: (2 * width) / 7 + 'px' }\">\n <mat-select [formControl]=\"$any(countryCode)\">\n <mat-select-trigger>\n {{ countryCode.value.flag }} +{{ countryCode.value.code }}\n </mat-select-trigger>\n @for (country of countries; track country) {\n <mat-option [value]=\"country\">\n <b>\n {{ country.flag }} {{ country.country }}\n <span class=\"text-secondary\">+{{ country.code }}</span>\n </b>\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field\n [appearance]=\"appearance\"\n [ngStyle]=\"{ width: (5 * width) / 7 + 'px' }\">\n @if (showIcon) {\n <mat-icon matPrefix fontSet=\"material-icons-outlined\" class=\"mr-2\">\n phone\n </mat-icon>\n }\n <mat-label>{{ 'names.phone' | translate | capitalize }}</mat-label>\n <input\n matInput\n type=\"number\"\n [formControl]=\"$any(phoneNumber)\"\n placeholder=\"{{ 'names.phone' | translate | capitalize }}\" />\n @if (!phoneNumber.valid && phoneNumber.value !== '') {\n <mat-error class=\"text-break text-wrap\">\n {{ 'messages.validation.validPhoneNumber' | translate }}\n </mat-error>\n }\n </mat-form-field>\n</div>\n","import { ModalInputType } from '../../enums/modal-input-type.enum';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport { SingularPipe } from '../../pipes/singular/singular.pipe';\nimport { generateTimeOptions } from '../../utils/time-options.utils';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { Component, Inject } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport {\n MatAutocomplete,\n MatAutocompleteTrigger,\n} from '@angular/material/autocomplete';\nimport { MatButton } from '@angular/material/button';\nimport {\n MatChipGrid,\n MatChipInput,\n MatChipRemove,\n MatChipRow,\n} from '@angular/material/chips';\nimport {\n MatDatepicker,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatDateRangeInput,\n MatDateRangePicker,\n MatEndDate,\n MatStartDate,\n} from '@angular/material/datepicker';\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n MatFormField,\n MatHint,\n MatInput,\n MatLabel,\n MatSuffix,\n} from '@angular/material/input';\nimport { MatOption, MatSelect } from '@angular/material/select';\nimport {\n MatTimepicker,\n MatTimepickerInput,\n MatTimepickerToggle,\n} from '@angular/material/timepicker';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { TelInputComponent } from '../tel-input/tel-input.component';\n\n@Component({\n selector: 'ud-modal',\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.scss'],\n imports: [\n CapitalizePipe,\n TranslatePipe,\n MatButton,\n MatDialogClose,\n MatDialogActions,\n MatChipInput,\n MatChipRow,\n MatIcon,\n ReactiveFormsModule,\n MatChipGrid,\n SingularPipe,\n MatFormField,\n MatFormField,\n MatHint,\n MatFormField,\n MatDateRangePicker,\n MatDatepickerToggle,\n MatSuffix,\n MatEndDate,\n MatStartDate,\n MatDateRangeInput,\n MatFormField,\n MatLabel,\n MatOption,\n MatSelect,\n MatLabel,\n MatFormField,\n CdkTextareaAutosize,\n MatInput,\n MatLabel,\n MatFormField,\n MatDialogContent,\n MatDialogTitle,\n MatDatepickerInput,\n MatDatepicker,\n MatTimepickerInput,\n MatTimepicker,\n MatTimepickerToggle,\n MatChipRemove,\n MatAutocomplete,\n MatAutocompleteTrigger,\n CapitalizePipe,\n SingularPipe,\n TelInputComponent,\n ],\n})\nexport class ModalComponent {\n protected form?: FormGroup;\n protected modalInputType = ModalInputType;\n protected showClose = true;\n\n // Picture related\n protected pictureUrls?: string;\n protected currentPictureIndex?: number;\n\n // Autocomplete\n protected autocompleteFilteredOptions: any[] = [];\n\n // Timepicker\n protected defaultMinTime = '00:00';\n protected defaultMaxTime = '23:59';\n\n DEFAULT_TIME_OPTIONS = generateTimeOptions(\n new Date(new Date().setHours(0, 0, 0, 0)),\n new Date(new Date().setHours(23, 55, 0, 0))\n );\n\n constructor(@Inject(MAT_DIALOG_DATA) public data: any) {\n if (this.data.formGroup) {\n this.form = this.data.formGroup;\n }\n if (this.data.pictureUrls && this.data.index != undefined) {\n this.pictureUrls = this.data.pictureUrls;\n this.currentPictureIndex = this.data.index;\n }\n if (this.data.showClose != undefined) {\n this.showClose = this.data.showClose;\n }\n }\n\n previous() {\n if (this.currentPictureIndex != undefined && this.currentPictureIndex > 0) {\n this.currentPictureIndex -= 1;\n }\n }\n\n next() {\n if (\n this.currentPictureIndex != undefined &&\n this.currentPictureIndex < (this.pictureUrls || []).length - 1\n ) {\n this.currentPictureIndex += 1;\n }\n }\n\n getMinimumDate(): Date {\n return new Date();\n }\n\n getDefaultTime(): number[] {\n const date = new Date();\n return [date.getHours(), Math.ceil(date.getMinutes() / 5) * 5, 0];\n }\n\n onAutocompleteInputChange(\n event: Event,\n options: { label: string; value: any }[]\n ) {\n const input = event.target as HTMLInputElement;\n this.autocompleteFilteredOptions = options.filter(o =>\n o.label.toLowerCase().includes(input.value.toLowerCase())\n );\n }\n\n autocompleteDisplayFn(option: any): string {\n return option?.label || '';\n }\n}\n","<div class=\"m-4\">\n <h3 mat-dialog-title>{{ data.title | translate | capitalize }}</h3>\n <div mat-dialog-content>\n @if (pictureUrls && currentPictureIndex != undefined) {\n <div class=\"image-container\">\n <mat-icon class=\"arrow-picture-icon\" (click)=\"previous()\"\n >keyboard_arrow_left\n </mat-icon>\n <img [src]=\"pictureUrls[currentPictureIndex]\" alt=\"Picture\" />\n <mat-icon class=\"arrow-picture-icon\" (click)=\"next()\"\n >keyboard_arrow_right\n </mat-icon>\n </div>\n <div class=\"footer\">\n {{ currentPictureIndex + 1 }} {{ 'names.of' | translate }}\n {{ pictureUrls.length }}\n </div>\n }\n @if (form) {\n <form [formGroup]=\"form\">\n <div class=\"d-flex flex-column pt-2\">\n @for (formType of data.forms; track formType) {\n @switch (formType.type) {\n @case (modalInputType.INPUT) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <input\n matInput\n [type]=\"formType.inputType ?? 'text'\"\n [formControlName]=\"formType.property\" />\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.PHONE) {\n <ng-container>\n <ud-tel-input\n [group]=\"form.controls[formType.property]\"\n [width]=\"300\"\n [showIcon]=\"false\"></ud-tel-input>\n </ng-container>\n }\n @case (modalInputType.TEXT_AREA) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <textarea\n matInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"2\"\n cdkAutosizeMaxRows=\"6\"\n maxlength=\"150\"\n [formControlName]=\"formType.property\"></textarea>\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.OPTIONS) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <mat-select [formControlName]=\"formType.property\">\n @for (type of formType.availableOptions; track type) {\n @if (type.value) {\n <mat-option [value]=\"type.value\">\n {{ type.label | translate | capitalize }}\n </mat-option>\n } @else {\n <mat-option [value]=\"type\">\n {{ type }}\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.MULTI_SELECT) {\n <ng-container>\n <mat-form-field class=\"large\" appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <mat-select [formControlName]=\"formType.property\" multiple>\n @for (type of formType.availableOptions; track type) {\n @if (type.value) {\n <mat-option [value]=\"type.value\">\n {{ type.label | translate | capitalize }}\n </mat-option>\n } @else {\n <mat-option [value]=\"type\">\n {{ type }}\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.AUTOCOMPLETE) {\n <mat-form-field appearance=\"outline\">\n <mat-icon matPrefix fontSet=\"material-icons-outlined\">\n person\n </mat-icon>\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <input\n type=\"text\"\n matInput\n [formControlName]=\"formType.property\"\n (input)=\"\n onAutocompleteInputChange(\n $event,\n formType.availableOptions\n )\n \"\n [matAutocomplete]=\"autoComplete\" />\n <mat-autocomplete\n #autoComplete=\"matAutocomplete\"\n [displayWith]=\"autocompleteDisplayFn\">\n @for (\n option of autocompleteFilteredOptions.length > 0\n ? autocompleteFilteredOptions\n : formType.availableOptions;\n track option\n ) {\n <mat-option [value]=\"option\">\n {{ option.label }}\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n }\n @case (modalInputType.DATERANGE) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <mat-date-range-input [rangePicker]=\"picker\">\n <input\n matStartDate\n [formControlName]=\"'start' + formType.property\"\n placeholder=\"{{\n 'names.startDate' | translate | capitalize\n }}\" />\n <input\n matEndDate\n [formControlName]=\"'end' + formType.property\"\n placeholder=\"{{\n 'names.endDate' | translate | capitalize\n }}\" />\n </mat-date-range-input>\n <mat-hint>MM/DD/YYYY - MM/DD/YYYY</mat-hint>\n <mat-datepicker-toggle matSuffix [for]=\"picker\" />\n <mat-date-range-picker #picker></mat-date-range-picker>\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.DATETIME) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <input\n matInput\n [formControlName]=\"formType.property\"\n [matDatepicker]=\"picker\" />\n <mat-hint>MM/DD/YYYY</mat-hint>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\" />\n <mat-datepicker #picker />\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.TIME) {\n <ng-container>\n <mat-form-field appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <input\n matInput\n [matTimepicker]=\"timepicker\"\n [matTimepickerMin]=\"formType.minTime || defaultMinTime\"\n [matTimepickerMax]=\"formType.maxTime || defaultMaxTime\"\n [formControlName]=\"formType.property\" />\n <mat-timepicker-toggle matIconSuffix [for]=\"timepicker\" />\n <mat-timepicker\n #timepicker\n [options]=\"\n formType.availableOptions || DEFAULT_TIME_OPTIONS\n \"\n [interval]=\"formType.dateTimeInterval || '30m'\" />\n </mat-form-field>\n </ng-container>\n }\n @case (modalInputType.CHIPS) {\n <ng-container>\n <mat-form-field\n class=\"example-form-field\"\n appearance=\"outline\">\n <mat-label>\n {{ formType.title | translate | singular | capitalize }}\n </mat-label>\n <mat-chip-grid\n #chipGrid\n aria-label=\"Enter options\"\n [formControlName]=\"formType.property\">\n @for (option of formType.availableOptions; track option) {\n <mat-chip-row (removed)=\"formType.removeOption(option)\">\n {{ option }}\n <button matChipRemove aria-label=\"'remove ' + option\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input\n placeholder=\"New option...\"\n [matChipInputFor]=\"chipGrid\"\n (matChipInputTokenEnd)=\"formType.addOption($event)\" />\n </mat-form-field>\n </ng-container>\n }\n }\n }\n </div>\n </form>\n } @else {\n <p>\n {{ data.bodyText }}\n </p>\n }\n </div>\n <div class=\"d-flex justify-content-end\">\n <div mat-dialog-actions>\n @if (showClose) {\n <button mat-button mat-dialog-close>\n {{ 'actions.close' | translate | capitalize }}\n </button>\n }\n <button\n [disabled]=\"form && form.invalid\"\n mat-raised-button\n color=\"primary\"\n mat-dialog-close\n (click)=\"form ? data.save(form.getRawValue()) : data.confirm()\">\n {{ (form ? 'actions.save' : 'actions.ok') | translate | capitalize }}\n </button>\n </div>\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safe',\n})\nexport class SafePipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(url: string): SafeResourceUrl {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n}\n","import {\n Component,\n effect,\n EventEmitter,\n input,\n Input,\n Output,\n} from '@angular/core';\nimport { NgxFileDropEntry, NgxFileDropModule } from 'ngx-file-drop';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { ModalComponent } from '../modal/modal.component';\nimport { StorageSignedResponse } from '../../interfaces/supabase.interface';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatPrefix } from '@angular/material/input';\nimport { SafePipe } from '../../pipes/safe/safe.pipe';\n\n@Component({\n selector: 'ud-file-input',\n templateUrl: './file-input.component.html',\n styleUrls: ['./file-input.component.scss'],\n imports: [\n NgxFileDropModule,\n MatButton,\n MatIcon,\n MatPrefix,\n CapitalizePipe,\n TranslatePipe,\n MatIconButton,\n SafePipe,\n ],\n})\nexport class FileInputComponent {\n @Input() accept = '.jpg,.png';\n @Input() label = 'actions.uploadImage';\n @Input() multiple = true;\n @Input() icon?: string;\n initialFiles = input<StorageSignedResponse[] | StorageSignedResponse>();\n\n @Output() filesSelected = new EventEmitter<File[]>();\n\n protected files: File[] = [];\n protected previewUrls: string[] = [];\n protected uploadStatus: string | null = null;\n\n constructor(private dialog: MatDialog) {\n effect(() => {\n if (this.initialFiles() && Array.isArray(this.initialFiles())) {\n const response = this.initialFiles() as StorageSignedResponse[];\n this.files = response.map(file => file.file);\n this.previewUrls = response.map(file => file.signedUrl);\n } else {\n const response = this.initialFiles() as StorageSignedResponse;\n if (response) {\n this.files = [response.file];\n this.previewUrls = [response.signedUrl];\n } else {\n this.files = [];\n this.previewUrls = [];\n }\n }\n });\n }\n\n async dropped(droppedFiles: NgxFileDropEntry[]): Promise<void> {\n const newFiles: File[] = [];\n\n for (const droppedFile of droppedFiles) {\n if (droppedFile.fileEntry.isFile) {\n const fileEntry = droppedFile.fileEntry as FileSystemFileEntry;\n\n // Use Promise to handle the file callback\n await new Promise<void>(resolve => {\n fileEntry.file((file: File) => {\n newFiles.push(file);\n\n // Create preview URL\n const previewUrl = URL.createObjectURL(file);\n this.previewUrls.push(previewUrl);\n\n this.uploadStatus = `Added ${file.name}`;\n resolve();\n });\n });\n }\n }\n\n if (!this.multiple) {\n // Replace existing files\n this.files = newFiles;\n } else {\n // Add to existing files\n this.files = [...this.files, ...newFiles];\n }\n\n // Emit the files to parent component\n this.filesSelected.emit(this.files);\n }\n\n removeFile(index: number): void {\n // Revoke the object URL to prevent memory leaks\n URL.revokeObjectURL(this.previewUrls[index]);\n\n // Remove the file and its preview\n this.files.splice(index, 1);\n this.previewUrls.splice(index, 1);\n\n // Emit the updated files array\n this.filesSelected.emit(this.files);\n }\n\n clearFiles(): void {\n // Revoke all object URLs\n this.previewUrls.forEach(url => URL.revokeObjectURL(url));\n\n this.files = [];\n this.previewUrls = [];\n this.filesSelected.emit([]);\n }\n\n openImageDialog(index: number) {\n const dialogConfig = new MatDialogConfig();\n dialogConfig.data = {\n pictureUrls: this.previewUrls,\n index,\n showClose: false,\n confirm: () => {},\n };\n dialogConfig.width = '50vw';\n this.dialog.open(ModalComponent, dialogConfig);\n }\n}\n","<div class=\"mt-3\">\n <ngx-file-drop\n dropZoneLabel=\"Drop files here\"\n (onFileDrop)=\"dropped($event)\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n [directory]=\"false\">\n <ng-template\n ngx-file-drop-content-tmp\n let-openFileSelector=\"openFileSelector\">\n <button mat-button color=\"primary\" (click)=\"openFileSelector()\">\n @if (icon) {\n <mat-icon matPrefix>\n {{ icon }}\n </mat-icon>\n }\n <span class=\"text-wrap\">{{ label | translate | capitalize }}</span>\n </button>\n </ng-template>\n </ngx-file-drop>\n <div class=\"mt-3\">\n @for (image of previewUrls; track $index) {\n <div\n class=\"d-flex justify-content-between align-items-center mb-2 p-1 file\">\n @if (image) {\n <div class=\"d-flex\">\n @if (image.substring(0, 30).includes('pdf')) {\n <iframe\n [src]=\"image | safe\"\n class=\"mr-3 border\"\n allowFullscreen></iframe>\n } @else {\n <img\n [src]=\"image\"\n alt=\"\"\n class=\"mr-3 border\"\n (click)=\"openImageDialog($index)\" />\n }\n </div>\n }\n <button mat-icon-button (click)=\"removeFile($index)\">\n <mat-icon fontSet=\"material-icons-outlined\"> cancel</mat-icon>\n </button>\n </div>\n }\n </div>\n</div>\n","export enum KpiDataType {\n PROGRESS_BAR = 'PROGRESS_BAR',\n PILLS = 'PILLS',\n TEXT = 'TEXT',\n}\n\nexport enum KpiProgressBarType {\n PERCENTAGE = 'PERCENTAGE',\n DIVISION = 'DIVISION',\n}\n\nexport enum KpiPillType {\n SUCCESS = 'success',\n WARNING = 'warning',\n DANGER = 'danger',\n INFO = 'info',\n}\n\nexport enum IconColor {\n PURPLE = 'purple',\n AMBER = 'amber',\n GREEN = 'green',\n BLUE = 'blue',\n RED = 'red',\n}\n","import { KpiPillType } from '../kpi/kpi.enum';\nimport { Component, Input } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\n\n@Component({\n selector: 'ud-pill',\n templateUrl: './pill.component.html',\n styleUrls: ['./pill.component.scss'],\n imports: [NgClass, AsyncPipe, CapitalizePipe],\n})\nexport class PillComponent {\n @Input() text!: string | Observable<string>;\n @Input() type!: KpiPillType;\n\n get observableText() {\n return typeof this.text === 'string' ? of(this.text) : this.text;\n }\n}\n","<span class=\"pill\" [ngClass]=\"type\">\n {{ (observableText | async) ?? '' | capitalize }}\n</span>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'ud-progress-bar',\n templateUrl: './progress-bar.component.html',\n styleUrls: ['./progress-bar.component.scss'],\n})\nexport class ProgressBarComponent {\n @Input() value: number = 0;\n\n @Input() height: string = '20px';\n\n @Input() borderRadius: string = '10px';\n\n @Input() backgroundColor: string = '#e0e0e0';\n}\n","<div\n class=\"progress-container\"\n [style.height]=\"height\"\n [style.borderRadius]=\"borderRadius\"\n [style.backgroundColor]=\"backgroundColor\">\n <div\n class=\"progress-fill\"\n [style.width.%]=\"value\"\n [style.borderRadius]=\"borderRadius\"></div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport {\n IconColor,\n KpiDataType,\n KpiProgressBarType,\n} from './kpi.enum';\nimport {\n KpiData,\n PillData,\n ProgressBarData,\n TextData,\n} from './kpi.interface';\nimport { PillComponent } from '../pill/pill.component';\nimport { AsyncPipe, NgClass, NgSwitch } from '@angular/common';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport { ProgressBarComponent } from '../progress-bar/progress-bar.component';\nimport { RouterLink } from '@angular/router';\nimport { MatCard } from '@angular/material/card';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'ud-kpi',\n templateUrl: './kpi.component.html',\n styleUrls: ['./kpi.component.scss'],\n imports: [\n AsyncPipe,\n CapitalizePipe,\n NgSwitch,\n MatIcon,\n RouterLink,\n MatCard,\n NgClass,\n ProgressBarComponent,\n PillComponent,\n ],\n})\nexport class KpiComponent {\n @Input() title!: string;\n\n @Input() subtitle?: string;\n\n @Input() dataType!: KpiDataType;\n\n @Input() data!: KpiData;\n\n @Input() icon!: string;\n\n @Input() iconColor!: IconColor;\n\n @Input() titleRef?: string;\n\n getProgressData(): ProgressBarData {\n return this.data as ProgressBarData;\n }\n\n getProgressBarValue(): number {\n const { value, max } = this.getProgressData().data;\n return (value / max) * 100;\n }\n\n getPillData(): PillData {\n return this.data as PillData;\n }\n\n getTextData(): TextData {\n return this.data as TextData;\n }\n\n protected readonly KpiDataType = KpiDataType;\n protected readonly KpiProgressBarType = KpiProgressBarType;\n}\n","<mat-card class=\"kpi-card\" [ngClass]=\"iconColor\" appearance=\"outlined\">\n <div class=\"kpi-header\">\n <div class=\"kpi-icon\">\n <mat-icon>{{ icon }}</mat-icon>\n </div>\n <div class=\"kpi-title-section\">\n <span class=\"kpi-label\">\n @if (titleRef) {\n <a [routerLink]=\"titleRef\">{{ title }}</a>\n } @else {\n {{ title }}\n }\n </span>\n @if (subtitle) {\n <span class=\"kpi-subtitle\">{{ subtitle }}</span>\n }\n </div>\n </div>\n\n <div class=\"kpi-content\">\n <div [ngSwitch]=\"dataType\">\n @switch (dataType) {\n @case (KpiDataType.PROGRESS_BAR) {\n <div class=\"progress-section\">\n @if (getProgressData().type === KpiProgressBarType.PERCENTAGE) {\n <div class=\"value-display\">\n <span class=\"kpi-value\">{{\n getProgressData().data.value\n }}</span>\n <span class=\"value-unit\">%</span>\n </div>\n } @else if (\n getProgressData().type === KpiProgressBarType.DIVISION\n ) {\n <div class=\"value-display\">\n <span class=\"kpi-value\">{{\n getProgressData().data.value\n }}</span>\n <span class=\"value-separator\">/</span>\n <span class=\"value-max\">{{ getProgressData().data.max }}</span>\n </div>\n }\n <ud-progress-bar\n [value]=\"getProgressBarValue()\"></ud-progress-bar>\n </div>\n }\n @case (KpiDataType.PILLS) {\n <div class=\"pills-section\">\n <span class=\"kpi-value\">{{ getPillData().value }}</span>\n <div class=\"pills-container\">\n @for (pill of getPillData().pills; track pill) {\n <ud-pill\n [text]=\"pill.value + ' ' + (pill.label | async | capitalize)\"\n [type]=\"pill.type\"></ud-pill>\n }\n </div>\n </div>\n }\n @case (KpiDataType.TEXT) {\n <div class=\"text-section\">\n <span class=\"kpi-value\">{{ getTextData().value }}</span>\n @if (getTextData().unit) {\n <span class=\"value-unit\">{{ getTextData().unit }}</span>\n }\n <ng-content></ng-content>\n </div>\n }\n }\n </div>\n </div>\n</mat-card>\n","import { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\nimport { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatLabel, MatPrefix } from '@angular/material/input';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { EditOptions, SummaryField } from './summary-view.interface';\n\n// TODO: implement text-all layout\ntype LAYOUTS = 'text-left' | 'text-right' | 'text-all' | 'text-none' | 'text-top';\n\n@Component({\n selector: 'ud-summary-view',\n templateUrl: './summary-view.component.html',\n styleUrl: './summary-view.component.scss',\n standalone: true,\n imports: [\n CommonModule,\n CapitalizePipe,\n TranslatePipe,\n NgxSkeletonLoaderModule,\n MatIconModule,\n MatButtonModule,\n MatLabel,\n RouterLink,\n MatTooltip,\n CapitalizePipe,\n MatPrefix,\n ],\n})\nexport class SummaryViewComponent {\n @Input() title: string | null = '';\n @Input() editOptions: EditOptions | null = null;\n @Input() summaryFields: SummaryField[] = [];\n @Input() loading = false;\n @Input() layout: LAYOUTS = 'text-left';\n @Input() skeletonTitleHeight = '20px';\n @Input() skeletonBodyHeight = '150px';\n}\n","<div class=\"summary-view-container\">\n <div class=\"header\">\n @if (loading) {\n <ngx-skeleton-loader\n class=\"loading col-6\"\n [count]=\"1\"\n [theme]=\"{ height: skeletonTitleHeight }\" />\n } @else {\n <h5 class=\"header-title\">{{ title }}</h5>\n }\n <ng-content select=\"[header-actions]\">\n @if (editOptions) {\n <button\n mat-stroked-button\n class=\"header-edit-btn\"\n [matTooltip]=\"\n editOptions.tooltip ?? 'actions.edit' | translate | capitalize\n \"\n color=\"primary\"\n [routerLink]=\"editOptions.routerLink\"\n [disabled]=\"editOptions.disabled\">\n <mat-icon class=\"btn-icon\">edit</mat-icon>\n <span>{{ 'actions.edit' | translate | capitalize }}</span>\n </button>\n }\n </ng-content>\n </div>\n <div\n class=\"content\"\n [ngClass]=\"{\n reverse: layout === 'text-right',\n 'flex-column': layout === 'text-top',\n }\">\n @if (loading) {\n <ngx-skeleton-loader\n class=\"col\"\n [count]=\"1\"\n [theme]=\"{ height: skeletonBodyHeight }\" />\n } @else {\n @if (layout !== 'text-none') {\n <div [ngClass]=\"layout === 'text-top' ? 'col-12' : 'col-6'\">\n <div class=\"summary\" [ngClass]=\"{ 'summary-row-wrap': layout === 'text-top' }\">\n @for (summaryField of summaryFields; track $index) {\n <div class=\"summary-field\">\n @if (summaryField.label) {\n <span>{{ summaryField.label | capitalize }}</span>\n }\n <div class=\"summary-row\">\n <mat-icon matPrefix fontSet=\"material-icons-outlined\">\n {{ summaryField.icon }}\n </mat-icon>\n <mat-label>{{ summaryField.value }}</mat-label>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <div\n class=\"px-0\"\n [ngClass]=\"{\n 'col-12': layout === 'text-none' || layout === 'text-top',\n 'col-6': layout !== 'text-none' && layout !== 'text-top',\n }\">\n <ng-content></ng-content>\n </div>\n }\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewChildren,\n QueryList,\n ElementRef,\n AfterViewInit,\n OnInit,\n inject,\n} from '@angular/core';\nimport { Tab } from '../../interfaces/tab.interface';\nimport { AsyncPipe, NgStyle } from '@angular/common';\nimport { CapitalizePipe } from '../../pipes/capitalize/capitalize.pipe';\n\n@Component({\n selector: 'ud-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n imports: [NgStyle, AsyncPipe, CapitalizePipe],\n})\nexport class TabsComponent implements OnInit, AfterViewInit {\n @Input() tabs: Tab[] = [];\n @Output() tabChange = new EventEmitter<Tab>();\n @ViewChildren('tabItem') tabItems!: QueryList<ElementRef>;\n\n activeTab!: Tab;\n sliderStyle: any = { width: '0px', transform: 'translateX(0px)' };\n\n ngOnInit() {\n if (this.tabs.length > 0) {\n this.activeTab = this.tabs[0];\n this.tabChange.emit(this.activeTab);\n }\n }\n\n ngAfterViewInit() {\n this.updateSliderPosition();\n this.tabItems.changes.subscribe(() => this.updateSliderPosition());\n }\n\n setActiveTab(tab: Tab) {\n this.activeTab = tab;\n this.tabChange.emit(this.activeTab);\n this.updateSliderPosition();\n }\n\n updateSliderPosition() {\n const activeTabIndex = this.tabs.indexOf(this.activeTab);\n const tabElement = this.tabItems.toArray()[activeTabIndex]?.nativeElement;\n\n if (tabElement) {\n const width = tabElement.offsetWidth;\n const offsetLeft = tabElement.offsetLeft - 3;\n this.sliderStyle = {\n width: `${width}px`,\n transform: `translateX(${offsetLeft}px)`,\n };\n }\n }\n}\n","<div class=\"tabs-container\">\n <div class=\"tab-list\">\n <div class=\"slider\" [ngStyle]=\"sliderStyle\"></div>\n @for (tab of tabs; track tab) {\n <div\n #tabItem\n [class.active]=\"tab.value === activeTab.value\"\n class=\"tab-item\"\n (click)=\"setActiveTab(tab)\">\n {{ tab.label | async | capitalize }}\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport {\n ControlContainer,\n FormControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatFormField, MatInput, MatLabel, MatPrefix } from '@angular/material/input';\n\n/**\n * Styled text input that participates in the parent FormGroup.\n *\n * Usage:\n * <ud-text-input\n * controlName=\"name\"\n * label=\"Full name\"\n * icon=\"account_circle\"\n * placeholder=\"Enter name\" />\n */\n@Component({\n selector: 'ud-text-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatFormField, MatInput, MatLabel, MatIcon, MatPrefix],\n templateUrl: './text-input.component.html',\n styleUrls: ['./text-input.component.scss'],\n // Inherit the parent FormGroup so [formControlName] works inside this component\n viewProviders: [{ provide: ControlContainer, useFactory: () => inject(ControlContainer, { skipSelf: true }) }],\n})\nexport class TextInputComponent {\n /** Key of the control inside the parent FormGroup */\n @Input({ required: true }) controlName!: string;\n @Input() label = '';\n @Input() placeholder = '';\n @Input() type: 'text' | 'email' | 'password' | 'number' = 'text';\n /** Material icon name. Leave empty to show no icon. */\n @Input() icon?: string;\n @Input() iconFontSet = 'material-icons-outlined';\n}\n","<mat-form-field appearance=\"outline\" class=\"ud-custom-field\">\n @if (icon) {\n <mat-icon matPrefix [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n <mat-label>{{ label }}</mat-label>\n <input\n matInput\n [formControlName]=\"controlName\"\n [type]=\"type\"\n [placeholder]=\"placeholder\" />\n</mat-form-field>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport { ControlContainer, ReactiveFormsModule } from '@angular/forms';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatFormField, MatInput, MatLabel, MatPrefix, MatSuffix } from '@angular/material/input';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\n\n/**\n * Styled date picker that participates in the parent FormGroup.\n *\n * Usage:\n * <ud-date-input\n * controlName=\"birthDate\"\n * label=\"Date of birth\"\n * icon=\"calendar_today\" />\n */\n@Component({\n selector: 'ud-date-input',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormField,\n MatInput,\n MatLabel,\n MatIcon,\n MatPrefix,\n MatSuffix,\n MatDatepickerModule,\n ],\n templateUrl: './date-input.component.html',\n styleUrls: ['./date-input.component.scss'],\n viewProviders: [{ provide: ControlContainer, useFactory: () => inject(ControlContainer, { skipSelf: true }) }],\n})\nexport class DateInputComponent {\n @Input({ required: true }) controlName!: string;\n @Input() label = '';\n @Input() placeholder = '';\n @Input() icon?: string;\n @Input() iconFontSet = 'material-icons-outlined';\n @Input() min?: Date;\n @Input() max?: Date;\n}\n","<mat-form-field appearance=\"outline\" class=\"ud-custom-field\">\n @if (icon) {\n <mat-icon matPrefix [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n <mat-label>{{ label }}</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker\"\n [formControlName]=\"controlName\"\n [placeholder]=\"placeholder\"\n [min]=\"min ?? null\"\n [max]=\"max ?? null\" />\n <mat-datepicker-toggle matSuffix [for]=\"picker\" />\n <mat-datepicker #picker />\n</mat-form-field>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit, inject } from '@angular/core';\nimport {\n ControlContainer,\n FormControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { MatChip, MatChipSet } from '@angular/material/chips';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatFormField, MatLabel, MatPrefix } from '@angular/material/input';\nimport { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';\nimport { Subject, startWith, takeUntil } from 'rxjs';\n\nexport interface UdSelectOption {\n /** The value stored in the form control */\n value: any;\n /** Already-translated, human-readable label */\n label: string;\n}\n\n/**\n * Styled multi-select with a chip trigger that participates in the parent FormGroup.\n *\n * Usage:\n * <ud-multi-select\n * controlName=\"roles\"\n * label=\"Roles\"\n * icon=\"sell\"\n * [options]=\"rolesOptions\"\n * [maxChipsVisible]=\"2\"\n * moreText=\"+{n} more\" />\n *\n * Pass options with already-resolved labels (translate before passing in):\n * rolesOptions = roles.map(r => ({ value: r.key, label: translate(r.translationKey) }));\n */\n@Component({\n selector: 'ud-multi-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatPrefix,\n MatIcon,\n MatSelect,\n MatSelectTrigger,\n MatOption,\n MatChip,\n MatChipSet,\n ],\n templateUrl: './multi-select.component.html',\n styleUrls: ['./multi-select.component.scss'],\n viewProviders: [{ provide: ControlContainer, useFactory: () => inject(ControlContainer, { skipSelf: true }) }],\n})\nexport class MultiSelectComponent implements OnInit, OnDestroy {\n @Input({ required: true }) controlName!: string;\n @Input() label = '';\n @Input() icon?: string;\n @Input() iconFontSet = 'material-icons-outlined';\n @Input() options: UdSelectOption[] = [];\n /** Set to false for single-select mode — value will be a scalar instead of an array */\n @Input() multiple = true;\n /** How many chips to show before collapsing into \"+N more\" */\n @Input() maxChipsVisible = 2;\n /**\n * Template for the overflow chip. Use `{n}` as the placeholder for the count.\n * Default: \"+{n} more\"\n */\n @Input() moreText = '+{n} more';\n\n selectedValues: any[] = [];\n\n private controlContainer = inject(ControlContainer);\n private destroy$ = new Subject<void>();\n private labelMap = new Map<any, string>();\n\n get control(): FormControl {\n return this.controlContainer.control!.get(this.controlName) as FormControl;\n }\n\n ngOnInit(): void {\n this.buildLabelMap();\n this.control.valueChanges\n .pipe(startWith(this.control.value), takeUntil(this.destroy$))\n .subscribe((values: any) => {\n this.selectedValues = this.multiple ? (values ?? []) : (values != null ? [values] : []);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n getLabelFor(value: any): string {\n return this.labelMap.get(value) ?? String(value);\n }\n\n getMoreText(count: number): string {\n return this.moreText.replace('{n}', String(count));\n }\n\n private buildLabelMap(): void {\n this.labelMap.clear();\n this.options.forEach(o => this.labelMap.set(o.value, o.label));\n }\n}\n","<mat-form-field class=\"ud-custom-field ud-chip-select\" appearance=\"outline\">\n @if (icon) {\n <mat-icon matPrefix [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n <mat-label>{{ label }}</mat-label>\n\n <mat-select [formControlName]=\"controlName\" [multiple]=\"multiple\" panelClass=\"ud-select-panel\">\n @if (multiple) {\n <mat-select-trigger>\n <mat-chip-set class=\"ud-chip-trigger\" aria-label=\"Selected options\">\n @for (val of selectedValues.slice(0, maxChipsVisible); track val) {\n <mat-chip color=\"primary\" selected>{{ getLabelFor(val) }}</mat-chip>\n }\n @if (selectedValues.length > maxChipsVisible) {\n <mat-chip color=\"primary\">{{ getMoreText(selectedValues.length - maxChipsVisible) }}</mat-chip>\n }\n </mat-chip-set>\n </mat-select-trigger>\n }\n\n @for (option of options; track option.value) {\n <mat-option [value]=\"option.value\">{{ option.label }}</mat-option>\n }\n </mat-select>\n</mat-form-field>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport {\n ControlContainer,\n FormControl,\n ReactiveFormsModule,\n} from '@angular/forms';\n\nexport interface PillToggleOption {\n value: string;\n label: string;\n}\n\n/**\n * Segmented pill toggle that participates in the parent FormGroup.\n * Visually mimics a mat-form-field outline field so it aligns perfectly\n * alongside real mat-form-fields in a form grid.\n *\n * Usage:\n * <ud-pill-toggle\n * controlName=\"gender\"\n * label=\"Gender\"\n * [options]=\"[{ value: 'male', label: 'Male' }, { value: 'female', label: 'Female' }]\" />\n */\n@Component({\n selector: 'ud-pill-toggle',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './pill-toggle.component.html',\n styleUrls: ['./pill-toggle.component.scss'],\n viewProviders: [{ provide: ControlContainer, useFactory: () => inject(ControlContainer, { skipSelf: true }) }],\n})\nexport class PillToggleComponent {\n @Input({ required: true }) controlName!: string;\n @Input() label = '';\n @Input() options: PillToggleOption[] = [];\n\n private controlContainer = inject(ControlContainer);\n\n get control(): FormControl {\n return this.controlContainer.control!.get(this.controlName) as FormControl;\n }\n\n select(value: string): void {\n if (this.control.disabled) return;\n this.control.setValue(value);\n this.control.markAsTouched();\n }\n}\n","<div class=\"ud-pill-toggle-field\" [class.is-disabled]=\"control.disabled\">\n @if (label) {\n <span class=\"ud-pill-toggle-label\">{{ label }}</span>\n }\n <div class=\"ud-pill-toggle-track\">\n @for (option of options; track option.value) {\n <button\n type=\"button\"\n class=\"ud-pill-toggle-option\"\n [class.selected]=\"control.value === option.value\"\n [disabled]=\"control.disabled\"\n (click)=\"select(option.value)\">\n {{ option.label }}\n </button>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nexport type UdButtonVariant = 'flat' | 'stroked' | 'icon-only';\nexport type UdButtonColor = 'primary' | 'secondary' | 'danger' | 'success';\nexport type UdButtonSize = 'sm' | 'md' | 'lg';\nexport type UdButtonIconPosition = 'left' | 'right';\n\n/**\n * Styled button that wraps Angular Material with the library's design tokens.\n *\n * Usage:\n * <ud-button>Save</ud-button>\n * <ud-button variant=\"stroked\" color=\"secondary\">Cancel</ud-button>\n * <ud-button [loading]=\"isSaving\" icon=\"save\">Save</ud-button>\n * <ud-button color=\"danger\" variant=\"stroked\">Delete</ud-button>\n */\n@Component({\n selector: 'ud-button',\n standalone: true,\n imports: [CommonModule, MatButtonModule, MatIconModule, MatProgressSpinnerModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n})\nexport class UdButtonComponent {\n /** Visual style of the button */\n @Input() variant: UdButtonVariant = 'flat';\n\n /** Colour role */\n @Input() color: UdButtonColor = 'primary';\n\n /** Size preset */\n @Input() size: UdButtonSize = 'md';\n\n /** Native button type */\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n /** Material icon name. Shows a spinner when loading is true instead. */\n @Input() icon?: string;\n\n /** Which side the icon appears on */\n @Input() iconPosition: UdButtonIconPosition = 'left';\n\n /** Font set for the icon (default: material-icons-outlined) */\n @Input() iconFontSet = 'material-icons-outlined';\n\n /** Shows a spinner and disables the button */\n @Input() loading = false;\n\n /** Explicitly disable the button */\n @Input() disabled = false;\n\n /** Stretch to fill the container width */\n @Input() fullWidth = false;\n\n get isDisabled(): boolean {\n return this.disabled || this.loading;\n }\n}\n","@if (variant === 'flat') {\n <button\n mat-flat-button\n [type]=\"type\"\n [disabled]=\"isDisabled\"\n [class]=\"'ud-btn ud-btn--flat ud-btn--' + color + ' ud-btn--' + size\"\n [class.ud-btn--full-width]=\"fullWidth\"\n [class.ud-btn--loading]=\"loading\">\n <ng-container *ngTemplateOutlet=\"btnContent\" />\n </button>\n}\n\n@if (variant === 'stroked') {\n <button\n mat-stroked-button\n [type]=\"type\"\n [disabled]=\"isDisabled\"\n [class]=\"'ud-btn ud-btn--stroked ud-btn--' + color + ' ud-btn--' + size\"\n [class.ud-btn--full-width]=\"fullWidth\"\n [class.ud-btn--loading]=\"loading\">\n <ng-container *ngTemplateOutlet=\"btnContent\" />\n </button>\n}\n\n@if (variant === 'icon-only') {\n <button\n mat-icon-button\n [type]=\"type\"\n [disabled]=\"isDisabled\"\n [class]=\"'ud-btn ud-btn--icon-only ud-btn--' + color + ' ud-btn--' + size\"\n [class.ud-btn--loading]=\"loading\">\n @if (loading) {\n <mat-spinner diameter=\"16\" />\n } @else if (icon) {\n <mat-icon class=\"ud-btn__icon\" [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n </button>\n}\n\n<ng-template #btnContent>\n @if (loading) {\n <mat-spinner class=\"ud-btn__spinner\" diameter=\"16\" />\n } @else if (icon && iconPosition === 'left') {\n <mat-icon class=\"ud-btn__icon ud-btn__icon--left\" [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n <span class=\"ud-btn__label\"><ng-content /></span>\n @if (!loading && icon && iconPosition === 'right') {\n <mat-icon class=\"ud-btn__icon ud-btn__icon--right\" [fontSet]=\"iconFontSet\">{{ icon }}</mat-icon>\n }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Output, forwardRef, HostBinding, Input, OnDestroy, OnInit, inject } from '@angular/core';\nimport {\n ControlContainer,\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { Subject, startWith, takeUntil } from 'rxjs';\n\n@Component({\n selector: 'ud-toggle',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './toggle.component.html',\n styleUrls: ['./toggle.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToggleComponent),\n multi: true,\n },\n ],\n viewProviders: [\n {\n provide: ControlContainer,\n useFactory: () => inject(ControlContainer, { optional: true, skipSelf: true }),\n },\n ],\n})\nexport class ToggleComponent implements ControlValueAccessor, OnInit, OnDestroy {\n /** Key of the control inside the parent FormGroup (alternative to ngModel/formControl) */\n @Input() controlName?: string;\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() label?: string;\n @Input() labelPosition: 'left' | 'right' = 'right';\n @Input() ariaLabel?: string;\n\n @HostBinding('class.size-sm') get isSm() { return this.size === 'sm'; }\n @HostBinding('class.size-md') get isMd() { return this.size === 'md'; }\n @HostBinding('class.size-lg') get isLg() { return this.size === 'lg'; }\n\n checked = false;\n isDisabled = false;\n\n private controlContainer = inject(ControlContainer, { optional: true, skipSelf: true });\n private destroy$ = new Subject<void>();\n\n @Output() onChange = new EventEmitter<boolean>();\n\n private _onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n private get formControl(): FormControl | null {\n if (!this.controlName || !this.controlContainer?.control) return null;\n return this.controlContainer.control.get(this.controlName) as FormControl ?? null;\n }\n\n ngOnInit(): void {\n const ctrl = this.formControl;\n if (!ctrl) return;\n\n ctrl.valueChanges\n .pipe(startWith(ctrl.value), takeUntil(this.destroy$))\n .subscribe((val: boolean) => {\n this.checked = !!val;\n this.isDisabled = ctrl.disabled;\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n toggle(): void {\n if (this.isDisabled) return;\n const ctrl = this.formControl;\n const newValue = !this.checked;\n if (ctrl) {\n ctrl.setValue(newValue);\n ctrl.markAsTouched();\n } else {\n this.checked = newValue;\n this._onChange(newValue);\n this.onTouched();\n }\n this.onChange.emit(newValue);\n }\n\n writeValue(value: boolean): void {\n this.checked = !!value;\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n}\n","<button\n type=\"button\"\n class=\"ud-toggle\"\n [class.checked]=\"checked\"\n [class.disabled]=\"isDisabled\"\n [class.label-left]=\"labelPosition === 'left'\"\n role=\"switch\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-label]=\"ariaLabel || label\"\n [disabled]=\"isDisabled || null\"\n (click)=\"toggle()\">\n @if (label && labelPosition === 'left') {\n <span class=\"toggle-label\">{{ label }}</span>\n }\n <span class=\"track\" aria-hidden=\"true\">\n <span class=\"thumb\">\n <span class=\"thumb-core\"></span>\n </span>\n </span>\n @if (label && labelPosition === 'right') {\n <span class=\"toggle-label\">{{ label }}</span>\n }\n</button>\n","/*\n * Public API Surface of ud-components\n */\n\n// Components\nexport * from './lib/carousel/carousel.component';\nexport * from './lib/custom-input/custom-input.component';\nexport * from './lib/custom-snackbar/custom-snackbar.component';\nexport * from './lib/custom-table/custom-table.component';\nexport * from './lib/dynamic-component/dynamic-component.component';\nexport * from './lib/edit-view/edit-view.component';\nexport * from './lib/edit-view/edit-view-section.directive';\nexport * from './lib/file-input/file-input.component';\nexport * from './lib/kpi/kpi.component';\nexport * from './lib/modal/modal.component';\nexport * from './lib/pill/pill.component';\nexport * from './lib/progress-bar/progress-bar.component';\nexport * from './lib/summary-view/summary-view.component';\nexport * from './lib/tabs/tabs.component';\nexport * from './lib/tel-input/tel-input.component';\nexport * from './lib/form-fields/text-input/text-input.component';\nexport * from './lib/form-fields/date-input/date-input.component';\nexport * from './lib/form-fields/multi-select/multi-select.component';\nexport * from './lib/form-fields/pill-toggle/pill-toggle.component';\nexport * from './lib/button/button.component';\nexport * from './lib/toggle/toggle.component';\n\n// Enums\nexport * from './enums/application-status.enum';\nexport * from './enums/custom-table.enum';\nexport * from './enums/modal-input-type.enum';\nexport * from './enums/role.enum';\nexport * from './enums/snackbar-type.enum';\nexport * from './enums/table-display-column-type';\nexport * from './lib/kpi/kpi.enum';\n\n// Interfaces\nexport * from './interfaces/floor.interface';\nexport * from './interfaces/page-request.interface';\nexport * from './interfaces/phone.interface';\nexport * from './interfaces/supabase.interface';\nexport * from './interfaces/tab.interface';\nexport * from './interfaces/table-display-column.interface';\nexport * from './interfaces/table.interface';\nexport * from './lib/custom-table/custom-table.interface';\nexport * from './lib/kpi/kpi.interface';\nexport * from './lib/summary-view/summary-view.interface';\n\n// Pipes\nexport * from './pipes/capitalize/capitalize.pipe';\nexport * from './pipes/pluralize/pluralize.pipe';\nexport * from './pipes/safe/safe.pipe';\nexport * from './pipes/singular/singular.pipe';\n\n// Services\nexport * from './services/translate-wrapper/translate-wrapper.service';\n\n// Utils\nexport * from './utils/common-utils';\nexport * from './utils/time-options.utils';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","map","i1.TranslateWrapperService","i2","i3","MatFormField","i4"],"mappings":"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"}