@winexist/ngp 0.12.2 → 0.12.4
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.
- package/fesm2022/winexist-ngp.mjs +1 -4
- package/fesm2022/winexist-ngp.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"winexist-ngp.mjs","sources":["../../../packages/src/lib/components/empty/empty.component.ts","../../../packages/src/lib/components/empty/empty.component.html","../../../packages/src/lib/components/file-upload/file-upload.component.ts","../../../packages/src/lib/components/file-upload/file-upload.component.html","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.ts","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.html","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.ts","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.html","../../../packages/src/lib/services/address/address.service.ts","../../../packages/src/lib/components/fg-address/fg-address.component.ts","../../../packages/src/lib/components/fg-address/fg-address.component.html","../../../packages/src/lib/components/dataview/table/data-table.component.ts","../../../packages/src/lib/components/dataview/table/data-table.component.html","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.ts","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.html","../../../packages/src/lib/components/drawer/dynamic-drawer.component.ts","../../../packages/src/lib/components/drawer/dynamic-drawer.component.html","../../../packages/src/lib/components/date-clock/date-clock.component.ts","../../../packages/src/lib/components/date-clock/date-clock.component.html","../../../packages/src/lib/components/dynamic-file-upload/dynamic-file-upload.component.ts","../../../packages/src/lib/components/dynamic-file-upload/dynamic-file-upload.component.html","../../../packages/src/lib/components/pdf-viewer/pdf-viewer-modal.component.ts","../../../packages/src/lib/components/pdf-viewer/pdf-viewer-modal.component.html","../../../packages/src/lib/components/file-viewer/file-upload-viewer.component.ts","../../../packages/src/lib/components/file-viewer/file-upload-viewer.component.html","../../../packages/src/lib/models/paginated.model.ts","../../../packages/src/lib/classes/crud-abstract.class.ts","../../../packages/src/lib/services/helper/helper.service.ts","../../../packages/src/index.ts","../../../packages/src/winexist-ngp.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'ngp-empty',\r\n\timports: [],\r\n\ttemplateUrl: './empty.component.html',\r\n\tstyleUrl: './empty.component.css'\r\n})\r\nexport class EmptyComponent {\r\n\ttitle = input<string>('Section is empty.');\r\n\tmessage = input<string>('No data available.');\r\n\timgSrc = input<string>();\r\n\r\n}\r\n","<div class=\"w-full flex justify-center items-center p-5 h-full\">\r\n <div class=\"flex items-center gap-3\">\r\n @if (imgSrc()) {\r\n <img alt=\"Empty\" [src]=\"imgSrc()\" class=\"w-[80px]\" />\r\n } @else {\r\n <div class=\"!rounded-md p-5 !bg-slate-100 mb-6\">\r\n <span class=\"material-icons !text-gray-400 !text-7xl\"> search_off </span>\r\n </div>\r\n }\r\n\r\n <div class=\"flex flex-col\">\r\n <span class=\"!text-gray-900 !text-2xl !font-bold\">{{ title() }}</span>\r\n @if (message()) {\r\n <span class=\"!text-gray-400 !text-base\">{{ message() }}</span>\r\n }\r\n </div>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport {\r\n\tComponent,\r\n\teffect,\r\n\tElementRef,\r\n\tinput,\r\n\tOnDestroy,\r\n\toutput,\r\n\tsignal,\r\n\tViewChild\r\n} from '@angular/core';\r\nimport { FileSelectEvent, FileUploadModule } from 'primeng/fileupload';\r\n\r\n// Add interface for typed files\r\ninterface TypedFile extends File {\r\n\tfileType?: 'image' | 'pdf' | 'other';\r\n}\r\n\r\n@Component({\r\n\tselector: 'ngp-file-upload',\r\n\timports: [FileUploadModule, CommonModule],\r\n\ttemplateUrl: './file-upload.component.html',\r\n\tstyleUrl: './file-upload.component.css'\r\n})\r\nexport class FileUploadComponent implements OnDestroy {\r\n\t@ViewChild('fileUploader') fileUploader!: ElementRef;\r\n\r\n\t// Signal-based inputs with defaults\r\n\tfiles = input<File[]>([]);\r\n\tmultiple = input(true);\r\n\taccept = input('.pdf,.png,.jpg,.jpeg,.doc,.docx,.csv,.xls,.xlsx');\r\n\tmaxFileSize = input(2097152); // 2MB in bytes\r\n\tplaceholder = input('Drag and drop new files here to upload.');\r\n\tshowUploadButton = input<boolean>(false);\r\n\tcancelLabel = input('Clear');\r\n\r\n\t// Signal-based outputs\r\n\tfilesSelected = output<File[]>();\r\n\tfilesCleared = output<void>();\r\n\r\n\t// Internal state\r\n\tuploadedFiles = signal<TypedFile[]>([]);\r\n\r\n\tconstructor() {\r\n\t\teffect(() => {\r\n\t\t\tconst _files = this.files();\r\n\t\t\tif (_files?.length) {\r\n\t\t\t\t// Convert parent's files to typed files\r\n\t\t\t\tconst typedFiles = _files.map((file) => this.addFileType(file));\r\n\t\t\t\tthis.uploadedFiles.set(typedFiles);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tonFileSelect(event: FileSelectEvent) {\r\n\t\tconst validFiles = event.currentFiles.filter(\r\n\t\t\t(file) => file.size <= this.maxFileSize() && this.isValidFileType(file)\r\n\t\t);\r\n\r\n\t\tif (validFiles.length) {\r\n\t\t\t// Add type to files before adding to uploadedFiles\r\n\t\t\tconst typedFiles = validFiles.map((file) => this.addFileType(file));\r\n\r\n\t\t\tlet newFiles: TypedFile[];\r\n\t\t\tif (this.multiple()) {\r\n\t\t\t\t// Combine existing files with new files, avoiding duplicates\r\n\t\t\t\tconst existingFiles = this.uploadedFiles();\r\n\t\t\t\tconst combinedFiles = [...existingFiles, ...typedFiles];\r\n\t\t\t\t// Remove duplicates based on file name and size\r\n\t\t\t\tnewFiles = Array.from(\r\n\t\t\t\t\tnew Map(combinedFiles.map((file) => [`${file.name}-${file.size}`, file])).values()\r\n\t\t\t\t);\r\n\t\t\t\tthis.uploadedFiles.set(newFiles);\r\n\t\t\t} else {\r\n\t\t\t\tnewFiles = typedFiles;\r\n\t\t\t\tthis.uploadedFiles.set(newFiles);\r\n\t\t\t}\r\n\r\n\t\t\t// Emit ALL files (not just new ones)\r\n\t\t\tthis.filesSelected.emit(this.uploadedFiles());\r\n\t\t}\r\n\t}\r\n\r\n\tonClear() {\r\n\t\tthis.uploadedFiles.set([]);\r\n\t\tthis.filesCleared.emit();\r\n\t\t// Also emit empty array to parent\r\n\t\tthis.filesSelected.emit([]);\r\n\t}\r\n\r\n\tremoveFile(index: number) {\r\n\t\tconst currentFiles = this.uploadedFiles();\r\n\t\tconst newFiles = currentFiles.filter((_, i) => i !== index);\r\n\t\tthis.uploadedFiles.set(newFiles);\r\n\t\t// Emit updated files to parent\r\n\t\tthis.filesSelected.emit(newFiles);\r\n\t}\r\n\r\n\tisValidFileType(file: File): boolean {\r\n\t\tconst acceptedTypes = this.accept().split(',');\r\n\t\treturn acceptedTypes.some((type) =>\r\n\t\t\tfile.name.toLowerCase().endsWith(type.trim().toLowerCase())\r\n\t\t);\r\n\t}\r\n\r\n\tformatFileSize(bytes: number): string {\r\n\t\tif (bytes === 0) return '0 Bytes';\r\n\t\tconst k = 1024;\r\n\t\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\t\treturn Number.parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\r\n\t}\r\n\r\n\tclear() {\r\n\t\tthis.uploadedFiles.set([]);\r\n\t\tif (this.fileUploader?.nativeElement?.clear) {\r\n\t\t\tthis.fileUploader.nativeElement.clear();\r\n\t\t}\r\n\t\t// Emit empty array to parent\r\n\t\tthis.filesSelected.emit([]);\r\n\t}\r\n\r\n\t// Function to determine file type based on extension\r\n\tgetFileTypeByExtension(file: File): 'image' | 'pdf' | 'other' {\r\n\t\tconst fileName = file.name.toLowerCase();\r\n\t\tconst imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.svg', '.webp'];\r\n\t\tconst pdfExtension = '.pdf';\r\n\r\n\t\tif (imageExtensions.some((ext) => fileName.endsWith(ext))) {\r\n\t\t\treturn 'image';\r\n\t\t} else if (fileName.endsWith(pdfExtension)) {\r\n\t\t\treturn 'pdf';\r\n\t\t} else {\r\n\t\t\treturn 'other';\r\n\t\t}\r\n\t}\r\n\r\n\t// Function to add type property to file\r\n\taddFileType(file: File): TypedFile {\r\n\t\t// Check if file already has fileType property\r\n\t\tconst typedFile = file as TypedFile;\r\n\t\tif (!typedFile.fileType) {\r\n\t\t\ttypedFile.fileType = this.getFileTypeByExtension(file);\r\n\t\t}\r\n\t\treturn typedFile;\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (this.uploadedFiles().length > 0) {\r\n\t\t\tthis.filesSelected.emit(this.uploadedFiles());\r\n\t\t}\r\n\t}\r\n}\r\n","<p-fileupload\r\n\t#fileUploader\r\n\t[multiple]=\"multiple()\"\r\n\t[showUploadButton]=\"showUploadButton()\"\r\n\t[cancelLabel]=\"cancelLabel()\"\r\n\t[accept]=\"accept()\"\r\n\tauto=\"false\"\r\n\t[maxFileSize]=\"maxFileSize()\"\r\n\tmode=\"advanced\"\r\n\t[customUpload]=\"true\"\r\n\tstyleClass=\"!bg-gray-50\"\r\n\t(onSelect)=\"onFileSelect($event)\"\r\n\t(onClear)=\"onClear()\">\r\n\t<ng-template #content>\r\n\t\t@if (uploadedFiles().length) {\r\n\t\t\t<ul class=\"space-y-2\">\r\n\t\t\t\t@for (file of uploadedFiles(); track $index) {\r\n\t\t\t\t\t<li class=\"flex justify-between gap-4 p-2 bg-gray-100 rounded\">\r\n\t\t\t\t\t\t<div class=\"flex gap-2\">\r\n\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"iconTemplate\"\r\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: file.fileType }\"></ng-container>\r\n\t\t\t\t\t\t\t<span class=\"text-sm\"> {{ file.name }} - {{ formatFileSize(file.size) }} </span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t(click)=\"removeFile($index)\"\r\n\t\t\t\t\t\t\tclass=\"text-red-500 hover:text-red-700 text-sm\">\r\n\t\t\t\t\t\t\t<span class=\"material-icons !text-base\"> cancel </span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t}\r\n\t\t\t</ul>\r\n\t\t} @else {\r\n\t\t\t<div class=\"flex flex-col items-center gap-3\">\r\n\t\t\t\t<div class=\"w-28 mx-auto\">\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\r\n\t\t\t\t\t\tviewBox=\"0 0 855.42518 833.48708\"\r\n\t\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n\t\t\t\t\t\trole=\"img\"\r\n\t\t\t\t\t\tartist=\"Katerina Limpitsouni\"\r\n\t\t\t\t\t\tsource=\"https://undraw.co/\">\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M739.66209,831.96985H93.28238c-26.55003,0-48.15129-21.60126-48.15129-48.15277V219.36774c0-26.55003,21.60126-48.15129,48.15129-48.15129h646.37972c26.55151,0,48.15277,21.60126,48.15277,48.15129v564.44933c0,26.55151-21.60126,48.15277-48.15277,48.15277Z\"\r\n\t\t\t\t\t\t\tfill=\"#fff\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M739.66209,833.48708H93.28238c-27.38718,0-49.66852-22.28134-49.66852-49.67V219.36774c0-27.38718,22.28134-49.66852,49.66852-49.66852h646.37972c27.38866,0,49.67,22.28134,49.67,49.66852v564.44933c0,27.38866-22.28134,49.67-49.67,49.67ZM93.28238,172.73368c-25.71437,0-46.63406,20.91969-46.63406,46.63406v564.44933c0,25.71437,20.91969,46.63554,46.63406,46.63554h646.37972c25.71437,0,46.63554-20.92117,46.63554-46.63554V219.36774c0-25.71437-20.92117-46.63406-46.63554-46.63406H93.28238Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M633.05154,719.69635H199.12394c-11.29477,0-20.4826-9.18783-20.4826-20.4826,0-5.46736,2.13212-10.60875,6.00372-14.47887,3.8553-3.8716,8.99818-6.00372,14.47887-6.00372h433.9276c11.29477,0,20.4826,9.18783,20.4826,20.4826,0,5.46736-2.13212,10.61023-6.00224,14.48035-3.85382,3.87012-8.9967,6.00224-14.48035,6.00224Z\"\r\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M537.46609,699.2145c0,5.44736-2.2151,10.37835-5.77999,13.94325-3.56638,3.56564-8.49737,5.78073-13.94399,5.78073H199.12394c-10.89323,0-19.72398-8.83001-19.72398-19.72398,0-5.44662,2.2151-10.37761,5.78147-13.94325,3.5649-3.58045,8.49589-5.78073,13.94251-5.78073h318.61817c10.89323,0,19.72398,8.83075,19.72398,19.72398Z\"\r\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M502.03197,638.5231h-176.42977c-15.3575,0-27.85242-12.49492-27.85242-27.8539v-231.05003c0-15.3575,12.49492-27.85242,27.85242-27.85242l133.30727.7601,70.9764,76.68824v181.45411c0,15.35898-12.49492,27.8539-27.8539,27.8539Z\"\r\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M414.57644,442.63753h-67.53893c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h67.53893c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M481.04412,483.00709h-134.74301c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.74301c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M481.04412,520.48592h-134.00662c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.00662c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M380.80771,558.65075h-34.5066c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h34.5066c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M529.12726,431.03013h-68.71093c-7.70172,0-13.9677-6.26598-13.9677-13.9677v-64.53707h3.03446v64.53707c0,6.02891,4.90433,10.93324,10.93324,10.93324h68.71093v3.03446Z\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M416.11441,658.24708c-13.64025,0-24.73795-11.0977-24.73795-24.73795v-23.81339h-16.74138c-3.49674,0-6.62751-1.9484-8.17289-5.08509s-1.18089-6.80531.94975-9.57751l42.1283-54.79658c1.71133-2.22399,4.30869-3.50267,7.1046-3.45673,2.8048.02667,5.36957,1.33647,7.03645,3.59305l41.1667,55.72855c2.13805,2.8937,2.45957,6.68826.83862,9.902-1.62243,3.21374-4.8658,5.20955-8.46478,5.20955h-16.36948v22.29616c0,13.64025-11.0977,24.73795-24.73795,24.73795Z\"\r\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t\t<circle cx=\"560.98874\" cy=\"420.8005\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"581.47134\" cy=\"479.21383\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"259.81871\" cy=\"436.73141\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"264.3704\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"259.81871\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"560.23012\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"560.23012\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M37.40122,152.42148c-6.44526,0-12.11265-4.61836-13.35132-11.0088L.24984,18.65638c-.76454-3.9442.24448-7.99953,2.76776-11.12585,2.5218-3.12484,6.27191-4.96804,10.28871-5.05397L128.31645.00364c6.71641-.15261,12.40898,4.50872,13.65062,11.06214l22.55693,119.0462c.72898,3.85234-.23855,7.83062-2.65811,10.91694-2.41808,3.08484-6.04966,4.97693-9.96274,5.18881l-113.76701,6.18301c-.24596.01334-.49191.02074-.73491.02074Z\"\r\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<polygon\r\n\t\t\t\t\t\t\tpoints=\"29.95846 132.52692 54.99274 65.01021 96.71655 96.11341 110.37162 82.45835 158.16434 131.7683 29.95846 132.52692\"\r\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M107.33749,58.94148c-6.27487,0-11.37922-5.10435-11.37922-11.37922s5.10435-11.37922,11.37922-11.37922,11.37922,5.10435,11.37922,11.37922-5.10435,11.37922-11.37922,11.37922Z\"\r\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M41.65954,616.11285c-3.58564,0-7.09275-1.04902-10.16129-3.07891-4.19312-2.77665-7.02163-7.02608-7.96101-11.96596L.5521,480.25267c-1.87135-9.84125,4.31462-19.28244,14.08327-21.49309l102.97009-23.32444c4.88655-1.10384,9.89162-.22077,14.09957,2.48772,4.2109,2.71145,7.08682,6.90606,8.0988,11.8089l25.05355,121.36946c2.04174,9.89014-4.32647,19.67509-14.19439,21.81462l-105.03998,22.76881c-1.31869.28596-2.64626.4282-3.96347.4282Z\"\r\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M33.74594,507.28424c-2.50698,0-4.7369-1.78245-5.21399-4.33685-.53933-2.88333,1.36165-5.65701,4.24498-6.19486l83.24611-15.5516c2.88185-.54674,5.65553,1.36165,6.19486,4.24498s-1.36165,5.65701-4.24498,6.19486l-83.24611,15.5516c-.32893.06223-.65786.09186-.98087.09186Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M41.33357,539.14606c-2.40327,0-4.57984-1.64169-5.16214-4.082-.6786-2.85221,1.0831-5.71628,3.9368-6.39637l78.36253-18.65866c2.85073-.67564,5.7148,1.0831,6.39637,3.9368.6786,2.85221-1.0831,5.71628-3.9368,6.39637l-78.36253,18.65866c-.41339.09779-.82677.1452-1.23423.1452Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M46.64239,569.97367c-2.45513,0-4.65985-1.71281-5.18881-4.2109-.60748-2.86999,1.22534-5.68813,4.09385-6.29561l53.46159-11.32144c2.88481-.606,5.68961,1.22534,6.29561,4.09385.60748,2.86999-1.22534,5.68813-4.09385,6.29561l-53.46159,11.32144c-.3719.07853-.74232.11705-1.10681.11705Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M816.49406,244.42277c-.94382,0-1.89802-.07408-2.85666-.22373l-106.17939-16.65841c-4.96952-.78084-9.30785-3.46859-12.21785-7.57133-2.91-4.10126-4.01384-9.0856-3.10854-14.03141l22.15096-120.97089c1.80764-9.8531,10.97472-16.41097,20.89006-14.96634l104.45028,15.39603c4.95322.73046,9.30488,3.36191,12.25192,7.40983,2.94852,4.04644,4.11756,8.99521,3.29227,13.93362l-20.42185,122.23475c-1.50241,9.00262-9.38341,15.44788-18.2512,15.44788Z\"\r\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M820.66792,138.04188c-.323,0-.65045-.02963-.97938-.09186l-83.25204-15.52938c-2.88333-.53785-4.78431-3.31005-4.24646-6.19338.53636-2.88333,3.30264-4.79616,6.19338-4.24646l83.25204,15.52938c2.88333.53785,4.78431,3.31005,4.24646,6.19338-.47562,2.5544-2.70701,4.33833-5.21399,4.33833Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M812.81507,165.83355c-.24003,0-.48006-.01482-.72454-.0489l-79.81753-10.86953c-2.90555-.39561-4.93989-3.0715-4.54428-5.97854.39709-2.90704,3.08187-4.94285,5.97854-4.54428l79.81753,10.86953c2.90555.39561,4.93989,3.0715,4.54428,5.97854-.36301,2.66256-2.64033,4.59317-5.254,4.59317Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M780.77249,194.36309c-.28152,0-.56748-.02371-.85492-.06964l-53.9461-8.73c-2.89518-.46821-4.86136-3.19596-4.39315-6.09114.46969-2.89518,3.17818-4.85543,6.09114-4.39315l53.9461,8.73c2.89518.46821,4.86136,3.19596,4.39315,6.09114-.42228,2.60774-2.67589,4.46279-5.23622,4.46279Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</div>\r\n\t\t\t\t<span class=\"font-semibold text-center text-gray-400 text-sm\">\r\n\t\t\t\t\tDrag & drop or<br />\r\n\t\t\t\t\tclick the \"Choose\" button to add new files\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t}\r\n\t</ng-template>\r\n\t<ng-template #file></ng-template>\r\n</p-fileupload>\r\n\r\n<ng-template #iconTemplate let-type>\r\n\t@if (type === 'image') {\r\n\t\t<span class=\"material-icons\"> image </span>\r\n\t} @else if (type === 'pdf') {\r\n\t\t<span class=\"material-icons\"> picture_as_pdf </span>\r\n\t} @else {\r\n\t\t<span class=\"material-icons\"> insert_drive_file </span>\r\n\t}\r\n</ng-template>\r\n","// form-field-wrapper.component.ts\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, ContentChild, Input, AfterContentInit, OnDestroy } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { MessageModule } from 'primeng/message';\r\n\r\n@Component({\r\n\tselector: 'ngp-form-field-wrapper',\r\n\tstandalone: true,\r\n\timports: [CommonModule, MessageModule],\r\n\ttemplateUrl: './form-field-wrapper.component.html',\r\n\tstyleUrls: ['./form-field-wrapper.component.scss']\r\n})\r\nexport class FormFieldWrapperComponent implements AfterContentInit, OnDestroy {\r\n\t@Input() validationMessages: { [key: string]: string } = {\r\n\t\trequired: 'This field is required',\r\n\t\temail: 'Please enter a valid email',\r\n\t\tminlength: 'Input does not meet minimum length',\r\n\t\tmaxlength: 'Input exceeds maximum length',\r\n\t\tpattern: 'Input format is invalid',\r\n\t\tendTimeBeforeStartTime: 'End time must not be before start time',\r\n\t\tbreakStartBeforeEarliestStart: 'Break start time cannot be before the earliest start time'\r\n\t};\r\n\r\n\t@ContentChild(NgControl) control?: NgControl;\r\n\r\n\tprivate subscription?: Subscription;\r\n\r\n\tngAfterContentInit(): void {\r\n\t\tif (this.control) {\r\n\t\t\tthis.subscription = this.control.statusChanges?.subscribe(() => { });\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscription?.unsubscribe();\r\n\t}\r\n\r\n\tshouldShowError(): boolean {\r\n\t\treturn (\r\n\t\t\t!!this.control &&\r\n\t\t\tthis.control.invalid === true &&\r\n\t\t\t(this.control.dirty === true || this.control.touched === true)\r\n\t\t);\r\n\t}\r\n\r\n\tgetErrorMessage(): string {\r\n\t\tif (!this.control?.errors) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tconst firstErrorKey = Object.keys(this.control.errors)[0];\r\n\t\tconst error = this.control.errors[firstErrorKey];\r\n\r\n\t\tif (this.control.errors['message']) {\r\n\t\t\treturn this.control.errors['message'];\r\n\t\t}\r\n\t\tif (error?.message) {\r\n\t\t\treturn error.message;\r\n\t\t}\r\n\r\n\t\treturn this.validationMessages[firstErrorKey] || `Invalid input: ${firstErrorKey}`;\r\n\t}\r\n}\r\n","<div class=\"form-field-container\">\r\n <ng-content></ng-content>\r\n @if (shouldShowError()) {\r\n <p-message severity=\"error\" variant=\"simple\" size=\"small\" [text]=\"getErrorMessage()\">\r\n </p-message>\r\n }\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { FormFieldWrapperComponent } from '../../../form-field-wrapper/form-field-wrapper.component';\r\nimport { FloatLabelModule } from 'primeng/floatlabel'\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner'\r\n\r\ntype SelectValue<T> = T | T[];\r\ntype SelectValueOrNull<T> = SelectValue<T> | null;\r\n\r\n@Component({\r\n\tselector: 'ngp-basic-select',\r\n\timports: [NgSelectModule, FormsModule, CommonModule, FormFieldWrapperComponent, FloatLabelModule, ProgressSpinnerModule],\r\n\ttemplateUrl: './basic-ng-select.component.html',\r\n\tstyleUrl: './basic-ng-select.component.scss',\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => BasicNgSelectComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class BasicNgSelectComponent<T = any> implements ControlValueAccessor {\r\n\toptions = input<T[]>([]);\r\n\tbindLabel = input<string>('');\r\n\tbindValue = input<string>('');\r\n\tplaceholder = input<string>('Select an option');\r\n\tclearable = input<boolean>(true);\r\n\tsearchable = input<boolean>(true);\r\n\tloading = input<boolean>(false);\r\n\tlabel = input<string | null>(null);\r\n\trequired = input<boolean>(true);\r\n\r\n\t// Internal state\r\n\tvalue: SelectValueOrNull<T> = null;\r\n\tdisabled = false;\r\n\r\n\t// ControlValueAccessor callbacks\r\n\tprivate onChange: (value: SelectValueOrNull<T>) => void = () => { };\r\n\tonTouched: () => void = () => { };\r\n\r\n\t// Handle value changes from ng-select\r\n\tonValueChange(value: SelectValueOrNull<T>): void {\r\n\t\tthis.value = value;\r\n\t\tthis.onChange(value);\r\n\t}\r\n\r\n\twriteValue(val: SelectValueOrNull<T>): void {\r\n\t\tthis.value = val;\r\n\t}\r\n\r\n\tregisterOnChange(fn: (val: SelectValueOrNull<T>) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState?(isDisabled: boolean): void {\r\n\t\tthis.disabled = isDisabled;\r\n\t}\r\n\r\n\t// Compare function for ng-select\r\n\tcompareWith = (item: any, selected: any) => {\r\n\t\tconst bindValueKey = this.bindValue();\r\n\r\n\t\t// If no bindValue is set, compare entire objects\r\n\t\tif (!bindValueKey) {\r\n\t\t\treturn item === selected;\r\n\t\t}\r\n\r\n\t\t// Handle null/undefined cases\r\n\t\tif (!item || !selected) {\r\n\t\t\treturn item === selected;\r\n\t\t}\r\n\r\n\t\t// If selected is a primitive (just the id), compare with item's property\r\n\t\tif (typeof selected !== 'object') {\r\n\t\t\treturn item[bindValueKey] === selected;\r\n\t\t}\r\n\r\n\t\t// If both are objects, compare the bindValue property\r\n\t\treturn item[bindValueKey] === selected[bindValueKey];\r\n\t};\r\n}\r\n","<ngp-form-field-wrapper>\r\n <p-floatlabel variant=\"in\">\r\n <ng-select [(ngModel)]=\"value\" [bindLabel]=\"bindLabel()\" [bindValue]=\"bindValue()\" [items]=\"options()\"\r\n [compareWith]=\"compareWith\" [clearable]=\"clearable()\" (change)=\"onValueChange($event)\">\r\n <ng-template ng-loadingspinner-tmp>\r\n <ng-container [ngTemplateOutlet]=\"spinner\" />\r\n </ng-template>\r\n </ng-select>\r\n\r\n @if (label()) {\r\n <label class=\"block mb-2\" [ngClass]=\"{'required-label': required() }\">{{ label() }}</label>\r\n }\r\n </p-floatlabel>\r\n</ngp-form-field-wrapper>\r\n\r\n<ng-template #spinner>\r\n <p-progress-spinner ariaLabel=\"loading\" styleClass=\"text-gray-400\" />\r\n</ng-template>","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IdName } from '../../models/common.model';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class AddressService {\r\n\turl = `/api/v1/records/address`;\r\n\thttp = inject(HttpClient);\r\n\r\n\tgetProvinces(): Observable<IdName[]> {\r\n\t\treturn this.http.get<IdName[]>(`${this.url}/provinces`);\r\n\t}\r\n\r\n\tgetMunicipalities(provinceId: number): Observable<any> {\r\n\t\treturn this.http.get<any>(`${this.url}/municipalities/${provinceId}`);\r\n\t}\r\n\r\n\tgetBarangays(muncipalityId: any, params?: any): Observable<any> {\r\n\t\treturn this.http.get<any>(`${this.url}/barangay/${muncipalityId}`, { params });\r\n\t}\r\n}\r\n","import { Component, effect, forwardRef, inject, input, signal } from '@angular/core';\r\nimport {\r\n\tAbstractControl,\r\n\tControlValueAccessor,\r\n\tFormBuilder,\r\n\tFormGroup,\r\n\tNG_VALIDATORS,\r\n\tNG_VALUE_ACCESSOR,\r\n\tReactiveFormsModule,\r\n\tValidationErrors,\r\n\tValidator\r\n} from '@angular/forms';\r\nimport { RxwebValidators } from '@rxweb/reactive-form-validators';\r\nimport { IdName } from '../../models/common.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormFieldWrapperComponent } from '../form-field-wrapper/form-field-wrapper.component';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\nimport { FloatLabelModule } from 'primeng/floatlabel';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { Address, Barangay, City } from '../../models/address.model';\r\nimport { AddressService } from '../../services/address/address.service';\r\n\r\n@Component({\r\n\tselector: 'ngp-fg-address',\r\n\timports: [\r\n\t\tInputTextModule,\r\n\t\tInputNumberModule,\r\n\t\tFloatLabelModule,\r\n\t\tCommonModule,\r\n\t\tReactiveFormsModule,\r\n\t\tFormFieldWrapperComponent,\r\n\t\tNgSelectModule\r\n\t],\r\n\ttemplateUrl: './fg-address.component.html',\r\n\tstyleUrl: './fg-address.component.scss',\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\r\n\t\t\tmulti: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: NG_VALIDATORS,\r\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class FgAddressComponent implements ControlValueAccessor, Validator {\r\n\tshowHeader = input<boolean>(true);\r\n\tisCreateMode = input<boolean>(true);\r\n\tisViewMode = input<boolean>(false);\r\n\r\n\taddressForm!: FormGroup;\r\n\tprovHttp$!: Subscription;\r\n\tcityHttp$!: Subscription;\r\n\tbarangayHttp$!: Subscription;\r\n\tprovinceOptions: IdName[] = [];\r\n\tcityOptions: City[] = [];\r\n\tbarangayOptions: Barangay[] = [];\r\n\r\n\tisDisabled = signal<boolean>(false);\r\n\tprivate pendingAddress: Address | null = null;\r\n\tprivate isInitializing = false;\r\n\tprivate detectedEditMode = false;\r\n\r\n\tprivate onChange: (value: Address | null) => void = () => {};\r\n\tprivate onTouched: () => void = () => {};\r\n\r\n\tprivate readonly addressService = inject(AddressService);\r\n\tprivate readonly fb = inject(FormBuilder);\r\n\r\n\tconstructor() {\r\n\t\tthis.addressForm = this.fb.group({\r\n\t\t\tline1: [null, RxwebValidators.required()],\r\n\t\t\tline2: [null],\r\n\t\t\tbarangay: [null, RxwebValidators.required()],\r\n\t\t\tcity: [null, RxwebValidators.required()],\r\n\t\t\tprovince: [null, RxwebValidators.required()],\r\n\t\t\tcountry: ['Philippines', RxwebValidators.required()],\r\n\t\t\tzipCode: [null, RxwebValidators.required()],\r\n\t\t\tlandmark: [null, RxwebValidators.required()]\r\n\t\t});\r\n\r\n\t\t// Use effect to watch for form value changes\r\n\t\teffect(() => {\r\n\t\t\tif (this.isDisabled()) {\r\n\t\t\t\tthis.addressForm.disable({ emitEvent: false });\r\n\t\t\t} else {\r\n\t\t\t\tthis.addressForm.enable({ emitEvent: false });\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Subscribe to form changes\r\n\t\tthis.addressForm.valueChanges.subscribe((value) => {\r\n\t\t\tthis.onChange(value);\r\n\t\t\tthis.onTouched();\r\n\t\t});\r\n\r\n\t\tthis.loadProvince();\r\n\r\n\t\t// Handle province changes - works for both create and edit mode\r\n\t\tthis.addressForm.get('province')?.valueChanges.subscribe((prov) => {\r\n\t\t\tif (prov && !this.isInitializing) {\r\n\t\t\t\tthis.clearFieldByName('city');\r\n\t\t\t\tthis.clearFieldByName('barangay');\r\n\t\t\t\tthis.cityOptions = [];\r\n\t\t\t\tthis.barangayOptions = [];\r\n\t\t\t\tthis.loadCityByProvinceId(prov.id);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Handle city changes - works for both create and edit mode\r\n\t\tthis.addressForm.get('city')?.valueChanges.subscribe((city) => {\r\n\t\t\tif (city && !this.isInitializing) {\r\n\t\t\t\tthis.clearFieldByName('barangay');\r\n\t\t\t\tthis.barangayOptions = [];\r\n\t\t\t\tthis.loadBarangayByCityId(city.id);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tclearFieldByName(fieldName: string): void {\r\n\t\tthis.addressForm.get(fieldName)?.setValue(null, { emitEvent: false });\r\n\t}\r\n\r\n\tloadProvince(): void {\r\n\t\tthis.provHttp$ = this.addressService.getProvinces().subscribe((res) => {\r\n\t\t\tthis.provinceOptions = res;\r\n\r\n\t\t\t// If we have a pending address to load, process it now\r\n\t\t\tif (this.pendingAddress) {\r\n\t\t\t\tthis.initializeEditMode(this.pendingAddress);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tloadCityByProvinceId(id: number): void {\r\n\t\tthis.cityHttp$ = this.addressService.getMunicipalities(id).subscribe((res) => {\r\n\t\t\tthis.cityOptions = res;\r\n\r\n\t\t\t// Continue initialization if needed\r\n\t\t\tif (this.isInitializing && this.pendingAddress) {\r\n\t\t\t\tthis.setCityFromPending();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tloadBarangayByCityId(id: number): void {\r\n\t\tthis.barangayHttp$ = this.addressService.getBarangays(id).subscribe((res) => {\r\n\t\t\tthis.barangayOptions = res;\r\n\r\n\t\t\t// Continue initialization if needed\r\n\t\t\tif (this.isInitializing && this.pendingAddress) {\r\n\t\t\t\tthis.setBarangayFromPending();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Detects if the address contains data that requires edit mode initialization\r\n\t */\r\n\tprivate isEditModeAddress(address: Address): boolean {\r\n\t\t// Check if any cascading field (province, city, barangay) is a string (name)\r\n\t\t// This indicates data from backend that needs to be matched with dropdown options\r\n\t\treturn (\r\n\t\t\t(typeof address.province === 'string' && address.province !== '') ||\r\n\t\t\t(typeof address.city === 'string' && address.city !== '') ||\r\n\t\t\t(typeof address.barangay === 'string' && address.barangay !== '')\r\n\t\t);\r\n\t}\r\n\r\n\tprivate initializeEditMode(address: Address): void {\r\n\t\t// this.isInitializing = true;\r\n\r\n\t\t// Set non-cascading fields first\r\n\t\tthis.addressForm.patchValue(\r\n\t\t\t{\r\n\t\t\t\tline1: address.line1,\r\n\t\t\t\tline2: address.line2,\r\n\t\t\t\tcountry: address.country || 'Philippines',\r\n\t\t\t\tzipCode: address.zipCode,\r\n\t\t\t\tlandmark: address.landmark\r\n\t\t\t},\r\n\t\t\t{ emitEvent: false }\r\n\t\t);\r\n\r\n\t\t// Find and set province\r\n\t\tif (address.province && typeof address.province === 'string') {\r\n\t\t\tconst provinceItem = this.provinceOptions.find(\r\n\t\t\t\t(p) => p.name.toLowerCase() === address.province?.toLowerCase()\r\n\t\t\t);\r\n\r\n\t\t\tif (provinceItem) {\r\n\t\t\t\tthis.addressForm.get('province')?.setValue(provinceItem, { emitEvent: false });\r\n\t\t\t\tthis.loadCityByProvinceId(provinceItem.id);\r\n\t\t\t} else {\r\n\t\t\t\tthis.completeInitialization();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.completeInitialization();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setCityFromPending(): void {\r\n\t\tif (!this.pendingAddress?.city || typeof this.pendingAddress.city !== 'string') {\r\n\t\t\tthis.completeInitialization();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst cityItem = this.cityOptions.find(\r\n\t\t\t(c) => c.name.toLowerCase() === this.pendingAddress!.city?.toLowerCase()\r\n\t\t);\r\n\r\n\t\tif (cityItem) {\r\n\t\t\tthis.addressForm.get('city')?.setValue(cityItem, { emitEvent: false });\r\n\t\t\tthis.loadBarangayByCityId(cityItem.id);\r\n\t\t} else {\r\n\t\t\tthis.completeInitialization();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setBarangayFromPending(): void {\r\n\t\tif (!this.pendingAddress?.barangay || typeof this.pendingAddress.barangay !== 'string') {\r\n\t\t\tthis.completeInitialization();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst barangayItem = this.barangayOptions.find(\r\n\t\t\t(b) => b.name.toLowerCase() === this.pendingAddress!.barangay?.toLowerCase()\r\n\t\t);\r\n\r\n\t\tif (barangayItem) {\r\n\t\t\tthis.addressForm.get('barangay')?.setValue(barangayItem, { emitEvent: false });\r\n\t\t}\r\n\r\n\t\tthis.completeInitialization();\r\n\t}\r\n\r\n\tprivate completeInitialization(): void {\r\n\t\tthis.isInitializing = false;\r\n\t\tthis.pendingAddress = null;\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.onChange(this.addressForm.value);\r\n\t\t});\r\n\t}\r\n\r\n\t// ControlValueAccessor methods\r\n\twriteValue(value: Address | null): void {\r\n\t\tif (value) {\r\n\t\t\t// Auto-detect if this is edit mode based on the address data structure\r\n\t\t\tthis.detectedEditMode = this.isEditModeAddress(value);\r\n\r\n\t\t\tif (this.detectedEditMode) {\r\n\t\t\t\t// Address contains string values (names) - needs initialization\r\n\t\t\t\tthis.isInitializing = true;\r\n\t\t\t\tthis.pendingAddress = value;\r\n\r\n\t\t\t\t// If provinces are already loaded, start initialization\r\n\t\t\t\tif (this.provinceOptions.length > 0) {\r\n\t\t\t\t\tthis.initializeEditMode(value);\r\n\t\t\t\t}\r\n\t\t\t\t// Otherwise, it will be triggered when provinces load\r\n\t\t\t} else {\r\n\t\t\t\t// Create mode or already has proper objects\r\n\t\t\t\tthis.addressForm.patchValue(value, { emitEvent: false });\r\n\r\n\t\t\t\t// Load cascading data if IDs are present\r\n\t\t\t\tconst province = value.province;\r\n\t\t\t\tif (province && typeof province === 'object' && 'id' in province) {\r\n\t\t\t\t\tthis.loadCityByProvinceId((province as any).id);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst city = value.city;\r\n\t\t\t\tif (city && typeof city === 'object' && 'id' in city) {\r\n\t\t\t\t\tthis.loadBarangayByCityId((city as any).id);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.addressForm.reset({ country: 'Philippines' }, { emitEvent: false });\r\n\t\t}\r\n\t}\r\n\r\n\tregisterOnChange(fn: (value: Address | null) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState(isDisabled: boolean): void {\r\n\t\tthis.isDisabled?.set(isDisabled);\r\n\t\tif (isDisabled) {\r\n\t\t\tthis.addressForm.disable();\r\n\t\t} else {\r\n\t\t\tthis.addressForm.enable();\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(control: AbstractControl): ValidationErrors | null {\r\n\t\tif (this.isInitializing) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.addressForm?.valid ? null : { invalidAddress: true };\r\n\t}\r\n}\r\n","@if (showHeader()) {\r\n\t<h2 class=\"text-xl font-semibold mb-4\" [ngClass]=\"{ 'px-4': isDisabled() }\">Address</h2>\r\n}\r\n\r\n@if (isViewMode()) {\r\n\t@let address = addressForm.value;\r\n\r\n\t<div class=\"grid gap-3 p-4\">\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"country\">Country:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.country || 'Philippines' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"province\">Province:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.province?.name || address.province || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"city\">City/Municipality:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.city?.name || address.city || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"barangay\">Barangay:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.barangay?.name || address.barangay || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line1\">Line 1:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line1 || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line2\">Line 2:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line2 || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"zipCode\">Zip Code:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.zipCode || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"landmark\">Nearest Landmark:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.landmark || '' }}</p>\r\n\t\t</div>\r\n\t</div>\r\n} @else {\r\n\t<form [formGroup]=\"addressForm\">\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"country\" formControlName=\"country\" class=\"w-full\" />\r\n\t\t\t\t\t\t<label for=\"country\" class=\"block mb-2 required-label\">Country</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"province\"\r\n\t\t\t\t\t\t\t[items]=\"provinceOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"provHttp$ && !provHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\t\t\t\t\t\t<label for=\"province\" class=\"block mb-2 required-label\">Province</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"city\"\r\n\t\t\t\t\t\t\t[items]=\"cityOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"cityHttp$ && !cityHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\t\t\t\t\t\t<label for=\"city\" class=\"block mb-2 required-label\">City/Municipality</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"barangay\"\r\n\t\t\t\t\t\t\t[items]=\"barangayOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"barangayHttp$ && !barangayHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\r\n\t\t\t\t\t\t<label for=\"barangay\" class=\"block mb-2 required-label\">Barangay</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div>\r\n\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t<label for=\"line1\" class=\"block mb-2 required-label\">Line 1</label>\r\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line1\" formControlName=\"line1\" class=\"w-full\" />\r\n\t\t\t\t</p-floatlabel>\r\n\t\t\t</ngp-form-field-wrapper>\r\n\t\t</div>\r\n\r\n\t\t<div>\r\n\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t<label for=\"line2\" class=\"block mb-2\">Line 2</label>\r\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line2\" formControlName=\"line2\" class=\"w-full\" />\r\n\t\t\t\t</p-floatlabel>\r\n\t\t\t</ngp-form-field-wrapper>\r\n\t\t</div>\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<p-inputnumber\r\n\t\t\t\t\t\t\t[inputId]=\"'zipCode'\"\r\n\t\t\t\t\t\t\tformControlName=\"zipCode\"\r\n\t\t\t\t\t\t\tstyleClass=\"w-full\"\r\n\t\t\t\t\t\t\t[useGrouping]=\"false\" />\r\n\t\t\t\t\t\t<label for=\"zipCode\" class=\"block mb-2 required-label\">Zip Code</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<label for=\"landmark\" class=\"block mb-2 required-label\">Nearest Landmark</label>\r\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"landmark\" formControlName=\"landmark\" class=\"w-full\" />\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</form>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n\tComponent,\r\n\tcomputed,\r\n\tContentChild,\r\n\teffect,\r\n\tinject,\r\n\tinput,\r\n\toutput,\r\n\tsignal,\r\n\tTemplateRef,\r\n\tViewChild\r\n} from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { Table, TableModule, TablePageEvent } from 'primeng/table';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ToolbarModule } from 'primeng/toolbar';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { TableColumn } from '../../../models/table-column.model';\r\n\r\n@Component({\r\n\tselector: 'ngp-data-table',\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\tTableModule,\r\n\t\tButtonModule,\r\n\t\tInputTextModule,\r\n\t\tConfirmDialogModule,\r\n\t\tDialogModule,\r\n\t\tTooltipModule,\r\n\t\tToastModule,\r\n\t\tToolbarModule,\r\n\t\tSkeletonModule,\r\n\t\tPopoverModule\r\n\t],\r\n\ttemplateUrl: './data-table.component.html',\r\n\tstyleUrl: './data-table.component.scss',\r\n\tproviders: [ConfirmationService, MessageService]\r\n})\r\nexport class DataTableComponent<T extends Record<string, any>> {\r\n\tdataSource = input<T[]>([]);\r\n\tcolumns = input<TableColumn[]>([]);\r\n\tloading = input<boolean>(false);\r\n\tpageSize = input<number>(10);\r\n\ttotalElements = input<number>(0);\r\n\tcurrentPage = input<number>(0);\r\n\tshowDefaultActions = input<boolean>(true);\r\n\temptyMessage = input<string>('No data available.');\r\n\thasDeleteAction = input<boolean>(true);\r\n\thasEditAction = input<boolean>(true);\r\n\tcanEdit = input<(row: unknown) => boolean>(() => true);\r\n\thasViewAction = input<boolean>(true);\r\n\tentityName = input<string>('');\r\n\tisPaginated = input<boolean>(true);\r\n\tshowCustomAction = input<boolean>(false);\r\n\tshowRowNumbers = input<boolean>(false);\r\n\trowNumberHeader = input<string>('');\r\n\tshowCheckboxColumn = input<boolean>(false);\r\n\tnoPadding = input<boolean>(false);\r\n\r\n\t// Internal signals\r\n\tdata = signal<T[]>([]);\r\n\tfilteredData = signal<T[]>([]);\r\n\tdialogVisible = signal<boolean>(false);\r\n\tdialogTitle = signal<string>('Add Item');\r\n\teditingItem = signal<T | null>(null);\r\n\r\n\t// Custom event emitters\r\n\tadd = output<T>();\r\n\tedit = output<T>();\r\n\tdeleteAction = output<T>();\r\n\tview = output<T>();\r\n\tpageChange = output<TablePageEvent>();\r\n\tsortChange = output<{ sort: string; order: string }>();\r\n\r\n\tactions = computed(() => [this.hasViewAction(), this.hasEditAction(), this.hasDeleteAction()]);\r\n\tactionsLength = computed(() => this.actions().filter((action) => !!action).length);\r\n\tactionItems = computed(() => {\r\n\t\treturn [\r\n\t\t\t{\r\n\t\t\t\tlabel: 'View ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasViewAction(),\r\n\t\t\t\ticon: 'pi-search'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tlabel: 'Update ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasEditAction(),\r\n\t\t\t\ticon: 'pi-pen-to-square',\r\n\t\t\t\tshouldShow: (item: unknown) => this.canEdit()(item)\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tlabel: 'Delete ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasDeleteAction(),\r\n\t\t\t\ticon: 'pi-trash'\r\n\t\t\t}\r\n\t\t];\r\n\t});\r\n\r\n\t// Content children for custom templates\r\n\t@ContentChild('formTemplate') formTemplate?: TemplateRef<unknown>;\r\n\t@ViewChild('dt') table?: Table;\r\n\r\n\t// Services\r\n\tprivate readonly http = inject(HttpClient);\r\n\tprivate readonly confirmationService = inject(ConfirmationService);\r\n\tprivate readonly messageService = inject(MessageService);\r\n\r\n\t// Column filters for individual column filtering\r\n\tprivate readonly filterValues: Record<string, string> = {};\r\n\r\n\t// For custom cell templates\r\n\tcustomTemplates = new Map<string, TemplateRef<unknown>>();\r\n\r\n\tconstructor() {\r\n\t\t// Effect to update filtered data when raw data changes\r\n\t\teffect(() => {\r\n\t\t\tconst sourceData = this.dataSource();\r\n\t\t\tthis.data.set([...sourceData]);\r\n\t\t});\r\n\t}\r\n\r\n\t// Register a custom template for a specific column\r\n\tregisterTemplate(field: string, template: TemplateRef<unknown>): void {\r\n\t\tthis.customTemplates.set(field, template);\r\n\t}\r\n\r\n\thandlePageChange(event: TablePageEvent) {\r\n\t\tthis.pageChange.emit(event);\r\n\t}\r\n\r\n\thandleSort(event: { field: string; order: number }) {\r\n\t\tconst column = this.columns().find((col) => col.field === event.field);\r\n\t\tconst actualSortField = column?.sortField ?? event.field;\r\n\t\tconst order = event.order === 1 ? 'ASC' : 'DESC';\r\n\r\n\t\tthis.sortChange.emit({\r\n\t\t\tsort: actualSortField,\r\n\t\t\torder\r\n\t\t});\r\n\t}\r\n\r\n\tresetTableSort(): void {\r\n\t\tif (this.table) {\r\n\t\t\tthis.table.sortOrder = 0;\r\n\t\t\tthis.table.sortField = null;\r\n\t\t\tthis.table.tableService.onSort(null);\r\n\t\t}\r\n\t}\r\n\r\n\t// Helper to safely get nested property values using dot notation\r\n\tgetItemValue(item: T, field: string, column?: TableColumn): unknown {\r\n\t\tif (column && typeof column.render === 'function') {\r\n\t\t\treturn column.render(item);\r\n\t\t}\r\n\t\treturn field\r\n\t\t\t.split('.')\r\n\t\t\t.reduce((obj: unknown, key) => obj?.[key as keyof typeof obj] ?? null, item as unknown);\r\n\t}\r\n\r\n\tperFormActionFromPopover(item: T, actionType: string): void {\r\n\t\tif (actionType.includes('View')) {\r\n\t\t\tthis.view.emit(item);\r\n\t\t} else if (actionType.includes('Update')) {\r\n\t\t\tthis.edit.emit(item);\r\n\t\t} else if (actionType.includes('Delete')) {\r\n\t\t\tthis.deleteAction.emit(item);\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"card\" [ngClass]=\"{ '!p-0': noPadding() }\">\r\n\t<p-table\r\n\t\t#dt\r\n\t\t[value]=\"data()\"\r\n\t\t[paginator]=\"isPaginated()\"\r\n\t\t[rows]=\"pageSize()\"\r\n\t\t[rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n\t\t[rowHover]=\"true\"\r\n\t\t[loading]=\"loading()\"\r\n\t\t[showLoader]=\"false\"\r\n\t\t[scrollable]=\"true\"\r\n\t\tclass=\"p-datatable-sm\"\r\n\t\t[totalRecords]=\"totalElements()\"\r\n\t\t[lazy]=\"isPaginated()\"\r\n\t\t[first]=\"currentPage() * pageSize()\"\r\n\t\tpaginatorDropdownAppendTo=\"body\"\r\n\t\t(onPage)=\"handlePageChange($event)\"\r\n\t\t(onSort)=\"handleSort($event)\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<tr>\r\n\t\t\t\t@if (showCheckboxColumn()) {\r\n\t\t\t\t\t<th style=\"width: 4rem\">\r\n\t\t\t\t\t\t<p-tableHeaderCheckbox />\r\n\t\t\t\t\t</th>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showRowNumbers()) {\r\n\t\t\t\t\t<th class=\"text-left !font-bold !text-gray-500 !w-1\" scope=\"col\">{{\r\n\t\t\t\t\t\trowNumberHeader()\r\n\t\t\t\t\t}}</th>\r\n\t\t\t\t}\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<th\r\n\t\t\t\t\t\t[pSortableColumn]=\"column.sortable ? column.field : undefined\"\r\n\t\t\t\t\t\tclass=\"text-left !font-bold !text-gray-500\"\r\n\t\t\t\t\t\t[ngClass]=\"{ '!text-center': column.align === 'center' }\"\r\n\t\t\t\t\t\tscope=\"col\"\r\n\t\t\t\t\t\t[style]=\"{ width: column.width || 'auto' }\">\r\n\t\t\t\t\t\t{{ column.header }}\r\n\t\t\t\t\t\t@if (column.sortable) {\r\n\t\t\t\t\t\t\t<p-sortIcon [field]=\"column.field\"></p-sortIcon>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</th>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<th class=\"!w-32 !text-center !font-bold !text-gray-500\" scope=\"col\">Actions</th>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template pTemplate=\"body\" let-item let-rowIndex=\"rowIndex\">\r\n\t\t\t@if (showCheckboxColumn()) {\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<p-tableCheckbox [value]=\"item\" />\r\n\t\t\t\t</td>\r\n\t\t\t}\r\n\t\t\t<tr>\r\n\t\t\t\t@if (showRowNumbers()) {\r\n\t\t\t\t\t<td class=\"!w-1 text-center\">\r\n\t\t\t\t\t\t{{ rowIndex + 1 }}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td [ngClass]=\"{ '!text-center': column.align === 'center' }\">\r\n\t\t\t\t\t\t@if (customTemplates && customTemplates.get(column.field)) {\r\n\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get(column.field)!\"\r\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: column.field }\">\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t{{ getItemValue(item, column.field, column) }}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td class=\"\">\r\n\t\t\t\t\t\t<div class=\"flex justify-center gap-2\">\r\n\t\t\t\t\t\t\t@if (showDefaultActions() && actionsLength() < 2 && !showCustomAction()) {\r\n\t\t\t\t\t\t\t\t<!-- Inline buttons for less than 2 standard actions and no custom action -->\r\n\t\t\t\t\t\t\t\t@if (hasViewAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'View'\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"view.emit(item)\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t@if (hasEditAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"edit.emit(item)\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Update'\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t@if (hasDeleteAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-danger\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"deleteAction.emit(item)\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Delete'\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} @else if (!showDefaultActions() && showCustomAction()) {\r\n\t\t\t\t\t\t\t\t<!-- Only custom action, no popover needed -->\r\n\t\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\r\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<!-- Popover menu for 2+ standard actions or when combining with custom action -->\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\ticon=\"pi pi-ellipsis-h\"\r\n\t\t\t\t\t\t\t\t\tclass=\"p-button-outlined p-button-secondary\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"po.toggle($event)\"></button>\r\n\t\t\t\t\t\t\t\t<p-popover #po styleClass=\"!min-w-40\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"!font-semibold !text-gray-500 block mb-2\">Actions</span>\r\n\t\t\t\t\t\t\t\t\t<ul class=\"list-none p-0 m-0 flex flex-col\">\r\n\t\t\t\t\t\t\t\t\t\t@if (showDefaultActions()) {\r\n\t\t\t\t\t\t\t\t\t\t\t@for (actionItem of actionItems(); track $index) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t@if (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tactionItem.visible &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(!actionItem.shouldShow || actionItem.shouldShow(item))\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"flex items-center gap-2 px-2 py-3 hover:bg-emphasis cursor-pointer rounded-border\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"perFormActionFromPopover(item, actionItem.label)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"pi\" [ngClass]=\"actionItem.icon\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"font-medium\">{{ actionItem.label }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- Custom action template in popover -->\r\n\t\t\t\t\t\t\t\t\t\t@if (showCustomAction() && customTemplates.get('customAction')) {\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\r\n\t\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t</p-popover>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template #loadingbody>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template pTemplate=\"emptymessage\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td [attr.colspan]=\"columns().length + 1\" class=\"text-center p-4\">{{ emptyMessage() }}</td>\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\t</p-table>\r\n</div>\r\n","// import { CommonModule } from '@angular/common';\r\n// import {\r\n// \tComponent,\r\n// \tInput,\r\n// \tforwardRef,\r\n// \tsignal,\r\n// \toutput,\r\n// \tcontentChild,\r\n// \tTemplateRef,\r\n// \teffect,\r\n// \tinput\r\n// } from '@angular/core';\r\n// import { NgSelectModule } from '@ng-select/ng-select';\r\n// import { PaginatedRequest, PaginatedResponse } from '../../../../models/paginated.model';\r\n// import { Observable } from 'rxjs';\r\n// import { tap } from 'rxjs/operators';\r\n// import { FloatLabelModule } from 'primeng/floatlabel';\r\n// import {\r\n// \tControlValueAccessor,\r\n// \tFormsModule,\r\n// \tNG_VALUE_ACCESSOR,\r\n// \tNG_VALIDATORS,\r\n// \tAbstractControl,\r\n// \tValidationErrors,\r\n// \tValidators\r\n// } from '@angular/forms';\r\n\r\n// type SelectValue<T> = T | T[];\r\n// type SelectValueOrNull<T> = SelectValue<T> | null;\r\n\r\n// @Component({\r\n// \tselector: 'ngp-dynamic-select',\r\n// \ttemplateUrl: './dynamic-select.component.html',\r\n// \timports: [NgSelectModule, FormsModule, CommonModule, FloatLabelModule],\r\n// \tproviders: [\r\n// \t\t{\r\n// \t\t\tprovide: NG_VALUE_ACCESSOR,\r\n// \t\t\tuseExisting: forwardRef(() => DynamicNgSelectComponent),\r\n// \t\t\tmulti: true\r\n// \t\t},\r\n// \t\t{\r\n// \t\t\tprovide: NG_VALIDATORS,\r\n// \t\t\tuseExisting: forwardRef(() => DynamicNgSelectComponent),\r\n// \t\t\tmulti: true\r\n// \t\t}\r\n// \t]\r\n// })\r\n// export class DynamicNgSelectComponent<T> implements ControlValueAccessor, Validators {\r\n// \t@Input() apiUrl!: (params?: PaginatedRequest) => Observable<PaginatedResponse<T>>;\r\n// \t@Input() formatOptions?: (items: T[]) => T[];\r\n// \t@Input() bindLabel = 'description';\r\n// \t@Input() bindValue: string | null = null;\r\n// \t@Input() placeholder = 'Select';\r\n// \t@Input() isRequired = false;\r\n// \t@Input() isReadonly = false;\r\n// \t@Input() multiple = false;\r\n// \t@Input() maxSelectedItems: number | null = null;\r\n// \t@Input() clearable = true;\r\n\r\n// \t// Use signal input for params to trigger automatic refresh\r\n// \tparams = input<Record<string, any>>({});\r\n\r\n// \t// Static options that can be provided by the user\r\n// \tstaticOptions = input<T[]>([]);\r\n\r\n// \tmodelChange = output<string | number | T | T[] | null>();\r\n\r\n// \tvalue: SelectValueOrNull<T> = null;\r\n// \tdisabled = false;\r\n\r\n// \t// Internal options that combines static + API loaded options\r\n// \toptions = signal<T[]>([]);\r\n\r\n// \ttableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\r\n\r\n// \t// Use new contentChild signal-based API\r\n// \titemTemplate = contentChild<TemplateRef<any>>('itemTemplate');\r\n// \tselectedItemTemplate = contentChild<TemplateRef<any>>('selectedItemTemplate');\r\n\r\n// \tprivate onChange = (_: any) => {}; // eslint-disable-line\r\n// \tprivate onTouched = () => {}; // eslint-disable-line\r\n\r\n// \tconstructor() {\r\n// \t\t// Auto-refresh when params change\r\n// \t\teffect(() => {\r\n// \t\t\tconst currentParams = this.params(); // eslint-disable-line\r\n// \t\t\tthis.refresh();\r\n// \t\t});\r\n\r\n// \t\t// Update options when staticOptions change\r\n// \t\teffect(() => {\r\n// \t\t\tconst static0pts = this.staticOptions();\r\n// \t\t\tif (static0pts.length > 0) {\r\n// \t\t\t\tthis.options.set([...static0pts]);\r\n// \t\t\t}\r\n// \t\t});\r\n// \t}\r\n\r\n// \t// Public method to manually refresh the data\r\n// \trefresh(): void {\r\n// \t\t// Reset to static options only\r\n// \t\tthis.options.set([...this.staticOptions()]);\r\n// \t\tthis.tableParams.set({ page: 0, size: 10 });\r\n// \t\tthis.loadOptions();\r\n// \t}\r\n\r\n// \t// Comparison function for ng-select to match objects\r\n// \tcompareWith = (item: T, selected: T): boolean => {\r\n// \t\tif (!item || !selected) {\r\n// \t\t\treturn item === selected;\r\n// \t\t}\r\n\r\n// \t\t// If bindValue is set, compare using that property\r\n// \t\tif (this.bindValue) {\r\n// \t\t\treturn (item as any)[this.bindValue] === (selected as any)[this.bindValue];\r\n// \t\t}\r\n\r\n// \t\t// Otherwise, compare the entire object\r\n// \t\treturn item === selected;\r\n// \t};\r\n\r\n// \tprivate loadOptions(): void {\r\n// \t\tif (!this.apiUrl) {\r\n// \t\t\treturn;\r\n// \t\t}\r\n\r\n// \t\tthis.getOptions();\r\n// \t}\r\n\r\n// \tgetOptions(): void {\r\n// \t\t// Merge custom params with table params\r\n// \t\tconst mergedParams = { ...this.tableParams(), ...this.params() };\r\n\r\n// \t\tthis.apiUrl(mergedParams)\r\n// \t\t\t.pipe(\r\n// \t\t\t\ttap((items) => {\r\n// \t\t\t\t\tif (items.results) {\r\n// \t\t\t\t\t\tconst values = this.formatOptions ? this.formatOptions(items.results) : items.results;\r\n// \t\t\t\t\t\t// Append to existing options (which may include static options)\r\n// \t\t\t\t\t\tthis.options.update((opts) => [...opts, ...values]);\r\n\r\n// \t\t\t\t\t\tif (items.hasNextPage) {\r\n// \t\t\t\t\t\t\tthis.tableParams.update((param) => ({ ...param, page: param.page + 1 }));\r\n// \t\t\t\t\t\t\tthis.getOptions();\r\n// \t\t\t\t\t\t}\r\n// \t\t\t\t\t} else {\r\n// \t\t\t\t\t\t// For non-paginated responses, merge with static options\r\n// \t\t\t\t\t\tconst apiOptions = items as unknown as T[];\r\n// \t\t\t\t\t\tconst formattedOptions = this.formatOptions\r\n// \t\t\t\t\t\t\t? this.formatOptions(apiOptions)\r\n// \t\t\t\t\t\t\t: apiOptions;\r\n// \t\t\t\t\t\tthis.options.update((opts) => [...this.staticOptions(), ...formattedOptions]);\r\n// \t\t\t\t\t}\r\n// \t\t\t\t})\r\n// \t\t\t)\r\n// \t\t\t.subscribe();\r\n// \t}\r\n\r\n// \twriteValue(value: string | number | T | T[] | null): void {\r\n// \t\tif (value === null || value === undefined) {\r\n// \t\t\tthis.value = null;\r\n// \t\t\treturn;\r\n// \t\t}\r\n\r\n// \t\tconst currentOptions = this.options();\r\n\r\n// \t\t// If bindValue is set and we receive a primitive value,\r\n// \t\t// find the full object from options\r\n// \t\tif (this.bindValue && (typeof value === 'string' || typeof value === 'number')) {\r\n// \t\t\tif (this.multiple && Array.isArray(value)) {\r\n// \t\t\t\tthis.value = currentOptions.filter((option) =>\r\n// \t\t\t\t\tvalue.includes((option as any)[this.bindValue!])\r\n// \t\t\t\t) as T[];\r\n// \t\t\t} else {\r\n// \t\t\t\tconst foundOption = currentOptions.find(\r\n// \t\t\t\t\t(option) => (option as any)[this.bindValue!] === value\r\n// \t\t\t\t);\r\n// \t\t\t\tthis.value = foundOption || (value as any);\r\n// \t\t\t}\r\n// \t\t} else {\r\n// \t\t\t// Store the full object\r\n// \t\t\tthis.value = value as SelectValueOrNull<T>;\r\n// \t\t}\r\n// \t}\r\n\r\n// \tregisterOnChange(fn: (val: any) => void): void {\r\n// \t\tthis.onChange = fn;\r\n// \t}\r\n\r\n// \tregisterOnTouched(fn: () => void): void {\r\n// \t\tthis.onTouched = fn;\r\n// \t}\r\n\r\n// \tsetDisabledState(isDisabled: boolean): void {\r\n// \t\tthis.disabled = isDisabled;\r\n// \t}\r\n\r\n// \tonValueChange(value: any): void {\r\n// \t\tif (value) {\r\n// \t\t\tif (this.multiple && Array.isArray(value)) {\r\n// \t\t\t\t// Handle multiple selection\r\n// \t\t\t\tconst newValue = this.bindValue ? value.map((v) => v[this.bindValue!]) : value;\r\n// \t\t\t\tthis.value = value;\r\n// \t\t\t\tthis.onModelChange(newValue);\r\n// \t\t\t} else {\r\n// \t\t\t\t// Handle single selection\r\n// \t\t\t\tconst newValue = this.bindValue ? value[this.bindValue] : value;\r\n// \t\t\t\tthis.value = value;\r\n// \t\t\t\tthis.onModelChange(newValue);\r\n// \t\t\t}\r\n// \t\t} else {\r\n// \t\t\tthis.value = null;\r\n// \t\t\tthis.onModelChange(null);\r\n// \t\t}\r\n// \t\tthis.onTouched();\r\n// \t}\r\n\r\n// \tonModelChange(value: string | number | T | T[] | null): void {\r\n// \t\tthis.onChange(value);\r\n// \t\tthis.modelChange.emit(value);\r\n// \t}\r\n\r\n// \tvalidate(control: AbstractControl): ValidationErrors | null {\r\n// \t\t// eslint-disable-line\r\n// \t\tconst isEmpty = this.multiple\r\n// \t\t\t? !this.value || (Array.isArray(this.value) && this.value.length === 0)\r\n// \t\t\t: this.value === null || this.value === undefined;\r\n\r\n// \t\tif (this.isRequired && isEmpty) {\r\n// \t\t\treturn { required: true };\r\n// \t\t}\r\n\r\n// \t\treturn null;\r\n// \t}\r\n// }\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n\tComponent,\r\n\tInput,\r\n\tforwardRef,\r\n\tsignal,\r\n\toutput,\r\n\tcontentChild,\r\n\tTemplateRef,\r\n\teffect,\r\n\tinput,\r\n\tuntracked\r\n} from '@angular/core';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { PaginatedRequest, PaginatedResponse } from '../../../../models/paginated.model';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\nimport { FloatLabelModule } from 'primeng/floatlabel';\r\nimport {\r\n\tControlValueAccessor,\r\n\tFormsModule,\r\n\tNG_VALUE_ACCESSOR,\r\n\tNG_VALIDATORS,\r\n\tAbstractControl,\r\n\tValidationErrors,\r\n\tValidators\r\n} from '@angular/forms';\r\n\r\ntype SelectValue<T> = T | T[];\r\ntype SelectValueOrNull<T> = SelectValue<T> | null;\r\n\r\n@Component({\r\n\tselector: 'ngp-dynamic-select',\r\n\ttemplateUrl: './dynamic-select.component.html',\r\n\timports: [NgSelectModule, FormsModule, CommonModule, FloatLabelModule],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => DynamicNgSelectComponent),\r\n\t\t\tmulti: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: NG_VALIDATORS,\r\n\t\t\tuseExisting: forwardRef(() => DynamicNgSelectComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class DynamicNgSelectComponent<T> implements ControlValueAccessor, Validators {\r\n\t@Input() apiUrl!: (params?: PaginatedRequest) => Observable<PaginatedResponse<T>>;\r\n\t@Input() formatOptions?: (items: T[]) => T[];\r\n\t@Input() bindLabel = 'description';\r\n\t@Input() bindValue: string | null = null;\r\n\t@Input() placeholder = 'Select';\r\n\t@Input() isRequired = false;\r\n\t@Input() isReadonly = false;\r\n\t@Input() multiple = false;\r\n\t@Input() maxSelectedItems: number | null = null;\r\n\t@Input() clearable = true;\r\n\r\n\t// Use signal input for params to trigger automatic refresh\r\n\tparams = input<Record<string, any>>({});\r\n\r\n\t// Static options that can be provided by the user\r\n\tstaticOptions = input<T[]>([]);\r\n\r\n\tmodelChange = output<string | number | T | T[] | null>();\r\n\r\n\tvalue: SelectValueOrNull<T> = null;\r\n\tdisabled = false;\r\n\r\n\t// Internal options that combines static + API loaded options\r\n\toptions = signal<T[]>([]);\r\n\r\n\ttableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\r\n\r\n\t// Use new contentChild signal-based API\r\n\titemTemplate = contentChild<TemplateRef<any>>('itemTemplate');\r\n\tselectedItemTemplate = contentChild<TemplateRef<any>>('selectedItemTemplate');\r\n\r\n\t// Track pending values that need to be resolved when options load\r\n\tprivate pendingValue: string | number | (string | number)[] | null = null;\r\n\tprivate isInitializing = false;\r\n\tprivate isFirstLoad = true;\r\n\r\n\tprivate onChange = (_: any) => {}; // eslint-disable-line\r\n\tprivate onTouched = () => {}; // eslint-disable-line\r\n\r\n\tconstructor() {\r\n\t\t// Auto-refresh when params change (but skip the first run)\r\n\t\teffect(() => {\r\n\t\t\tconst currentParams = this.params(); // eslint-disable-line\r\n\r\n\t\t\tif (this.isFirstLoad) {\r\n\t\t\t\tthis.isFirstLoad = false;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Use untracked to prevent infinite loops when refresh modifies signals\r\n\t\t\tuntracked(() => this.refresh());\r\n\t\t});\r\n\r\n\t\t// Update options when staticOptions change\r\n\t\teffect(() => {\r\n\t\t\tconst static0pts = this.staticOptions();\r\n\t\t\tif (static0pts.length > 0) {\r\n\t\t\t\t// Use untracked to prevent triggering other effects\r\n\t\t\t\tuntracked(() => this.options.set([...static0pts]));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Watch for options changes and resolve pending values\r\n\t\teffect(() => {\r\n\t\t\tconst opts = this.options();\r\n\t\t\tconst pending = untracked(() => this.pendingValue);\r\n\r\n\t\t\tif (opts.length > 0 && pending !== null && this.bindValue) {\r\n\t\t\t\tuntracked(() => this.resolvePendingValue(opts, pending));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Initial load of options (only once)\r\n\t\tsetTimeout(() => {\r\n\t\t\tif (this.staticOptions().length === 0) {\r\n\t\t\t\tthis.loadOptions();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// Public method to manually refresh the data\r\n\trefresh(): void {\r\n\t\t// Reset to static options only\r\n\t\tthis.options.set([...this.staticOptions()]);\r\n\t\tthis.tableParams.set({ page: 0, size: 10 });\r\n\t\tthis.loadOptions();\r\n\t}\r\n\r\n\t// Comparison function for ng-select to match objects\r\n\tcompareWith = (item: T, selected: T): boolean => {\r\n\t\tif (!item || !selected) {\r\n\t\t\treturn item === selected;\r\n\t\t}\r\n\r\n\t\t// If bindValue is set, compare using that property\r\n\t\tif (this.bindValue) {\r\n\t\t\tconst itemValue = (item as any)[this.bindValue];\r\n\t\t\tconst selectedValue = (selected as any)[this.bindValue];\r\n\t\t\treturn itemValue === selectedValue;\r\n\t\t}\r\n\r\n\t\t// Otherwise, compare the entire object (reference or deep equality)\r\n\t\treturn item === selected;\r\n\t};\r\n\r\n\tprivate loadOptions(): void {\r\n\t\tif (!this.apiUrl) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.getOptions();\r\n\t}\r\n\r\n\tgetOptions(): void {\r\n\t\t// Merge custom params with table params\r\n\t\tconst mergedParams = { ...this.tableParams(), ...this.params() };\r\n\r\n\t\tthis.apiUrl(mergedParams)\r\n\t\t\t.pipe(\r\n\t\t\t\ttap((items) => {\r\n\t\t\t\t\tif (items.results) {\r\n\t\t\t\t\t\tconst values = this.formatOptions ? this.formatOptions(items.results) : items.results;\r\n\t\t\t\t\t\t// Append to existing options (which may include static options)\r\n\t\t\t\t\t\tthis.options.update((opts) => [...opts, ...values]);\r\n\r\n\t\t\t\t\t\tif (items.hasNextPage) {\r\n\t\t\t\t\t\t\tthis.tableParams.update((param) => ({ ...param, page: param.page + 1 }));\r\n\t\t\t\t\t\t\tthis.getOptions();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// For non-paginated responses, merge with static options\r\n\t\t\t\t\t\tconst apiOptions = items as unknown as T[];\r\n\t\t\t\t\t\tconst formattedOptions = this.formatOptions\r\n\t\t\t\t\t\t\t? this.formatOptions(apiOptions)\r\n\t\t\t\t\t\t\t: apiOptions;\r\n\t\t\t\t\t\tthis.options.update((opts) => [...this.staticOptions(), ...formattedOptions]);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\t}\r\n\r\n\t/**\r\n\t * Detects if the value is a primitive that needs to be resolved to an object\r\n\t * Only relevant when bindValue is set\r\n\t */\r\n\tprivate isPrimitiveValue(value: any): boolean {\r\n\t\t// If bindValue is not set, we work with full objects, so no resolution needed\r\n\t\tif (!this.bindValue) return false;\r\n\r\n\t\tif (Array.isArray(value)) {\r\n\t\t\treturn value.length > 0 && (typeof value[0] === 'string' || typeof value[0] === 'number');\r\n\t\t}\r\n\t\treturn typeof value === 'string' || typeof value === 'number';\r\n\t}\r\n\r\n\t/**\r\n\t * Resolves pending primitive values to full objects from options\r\n\t */\r\n\tprivate resolvePendingValue(opts: T[], pending: string | number | Array<string | number>): void {\r\n\t\tif (!this.bindValue) return;\r\n\r\n\t\tif (Array.isArray(pending)) {\r\n\t\t\tconst pendingArr: Array<string | number> = pending;\r\n\t\t\t// Handle multiple selection - filter ALL matching options\r\n\t\t\tconst foundOptions = opts.filter((option) => {\r\n\t\t\t\tconst optionValue = (option as any)[this.bindValue!];\r\n\t\t\t\treturn pendingArr.includes(optionValue);\r\n\t\t\t});\r\n\r\n\t\t\t// Only clear pending if we found ALL items\r\n\t\t\t// This is important for paginated data where items might be on different pages\r\n\t\t\tif (foundOptions.length === pendingArr.length) {\r\n\t\t\t\tthis.value = foundOptions;\r\n\t\t\t\tthis.pendingValue = null;\r\n\t\t\t\tthis.isInitializing = false;\r\n\t\t\t} else if (foundOptions.length > 0) {\r\n\t\t\t\t// We found some but not all - update value but keep pending\r\n\t\t\t\tthis.value = foundOptions;\r\n\t\t\t\t// Don't clear pendingValue yet - we're still waiting for more options to load\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// Handle single selection\r\n\t\t\tconst foundOption = opts.find((option) => (option as any)[this.bindValue!] === pending);\r\n\r\n\t\t\tif (foundOption) {\r\n\t\t\t\tthis.value = foundOption;\r\n\t\t\t\tthis.pendingValue = null;\r\n\t\t\t\tthis.isInitializing = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twriteValue(value: string | number | T | T[] | null): void {\r\n\t\tif (value === null || value === undefined) {\r\n\t\t\tthis.value = null;\r\n\t\t\tthis.pendingValue = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst currentOptions = this.options();\r\n\r\n\t\t// If bindValue is set, we need to handle primitive-to-object resolution\r\n\t\tif (this.bindValue && this.isPrimitiveValue(value)) {\r\n\t\t\tthis.isInitializing = true;\r\n\r\n\t\t\tif (this.multiple && Array.isArray(value)) {\r\n\t\t\t\t// Store pending array of IDs\r\n\t\t\t\tthis.pendingValue = value as (string | number)[];\r\n\r\n\t\t\t\t// Try to resolve immediately if options are available\r\n\t\t\t\tif (currentOptions.length > 0) {\r\n\t\t\t\t\tthis.resolvePendingValue(currentOptions, value as (string | number)[]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Set temporary value to show something in the UI\r\n\t\t\t\t\tthis.value = value as any;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// Store pending single ID\r\n\t\t\t\tthis.pendingValue = value as string | number;\r\n\r\n\t\t\t\t// Try to resolve immediately if options are available\r\n\t\t\t\tconst foundOption = currentOptions.find(\r\n\t\t\t\t\t(option) => (option as any)[this.bindValue!] === value\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (foundOption) {\r\n\t\t\t\t\tthis.value = foundOption;\r\n\t\t\t\t\tthis.pendingValue = null;\r\n\t\t\t\t\tthis.isInitializing = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Set temporary value to show something in the UI\r\n\t\t\t\t\tthis.value = value as any;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// No bindValue set OR already a full object - just store it directly\r\n\t\t\t// This handles cases where:\r\n\t\t\t// 1. bindValue is null (working with full objects)\r\n\t\t\t// 2. bindValue is set but value is already the full object (not a primitive)\r\n\t\t\tthis.value = value as SelectValueOrNull<T>;\r\n\t\t\tthis.pendingValue = null;\r\n\t\t\tthis.isInitializing = false;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterOnChange(fn: (val: any) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState(isDisabled: boolean): void {\r\n\t\tthis.disabled = isDisabled;\r\n\t}\r\n\r\n\tonValueChange(value: any): void {\r\n\t\tif (value) {\r\n\t\t\tif (this.multiple && Array.isArray(value)) {\r\n\t\t\t\t// Handle multiple selection\r\n\t\t\t\tconst newValue = this.bindValue ? value.map((v) => v[this.bindValue!]) : value;\r\n\t\t\t\tthis.value = value;\r\n\t\t\t\tthis.onModelChange(newValue);\r\n\t\t\t} else {\r\n\t\t\t\t// Handle single selection\r\n\t\t\t\tconst newValue = this.bindValue ? value[this.bindValue] : value;\r\n\t\t\t\tthis.value = value;\r\n\t\t\t\tthis.onModelChange(newValue);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.value = null;\r\n\t\t\tthis.onModelChange(null);\r\n\t\t}\r\n\t\tthis.onTouched();\r\n\t}\r\n\r\n\tonModelChange(value: string | number | T | T[] | null): void {\r\n\t\tthis.onChange(value);\r\n\t\tthis.modelChange.emit(value);\r\n\t}\r\n\r\n\tvalidate(control: AbstractControl): ValidationErrors | null {\r\n\t\t// eslint-disable-line\r\n\t\tconst isEmpty = this.multiple\r\n\t\t\t? !this.value || (Array.isArray(this.value) && this.value.length === 0)\r\n\t\t\t: this.value === null || this.value === undefined;\r\n\r\n\t\tif (this.isRequired && isEmpty) {\r\n\t\t\treturn { required: true };\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n}\r\n","<p-floatlabel variant=\"in\">\r\n\t<ng-select\r\n\t\t[items]=\"options()\"\r\n\t\t[bindLabel]=\"bindLabel\"\r\n\t\t[bindValue]=\"bindValue || ''\"\r\n\t\t[disabled]=\"disabled\"\r\n\t\t[readonly]=\"isReadonly\"\r\n\t\t[(ngModel)]=\"value\"\r\n\t\t[clearable]=\"clearable\"\r\n\t\t[multiple]=\"multiple\"\r\n\t\t[maxSelectedItems]=\"maxSelectedItems\"\r\n\t\t[compareWith]=\"compareWith\"\r\n\t\t(change)=\"onValueChange($event)\">\r\n\t\t<!-- Template for dropdown items -->\r\n\t\t@if (itemTemplate()) {\r\n\t\t\t<ng-template ng-option-tmp let-item=\"item\">\r\n\t\t\t\t<ng-container\r\n\t\t\t\t\t*ngTemplateOutlet=\"itemTemplate(); context: { $implicit: item }\"></ng-container>\r\n\t\t\t</ng-template>\r\n\t\t}\r\n\r\n\t\t<!-- Template for selected item display -->\r\n\t\t@if (selectedItemTemplate()) {\r\n\t\t\t<ng-template ng-label-tmp let-item=\"item\">\r\n\t\t\t\t<ng-container\r\n\t\t\t\t\t*ngTemplateOutlet=\"selectedItemTemplate(); context: { $implicit: item }\"></ng-container>\r\n\t\t\t</ng-template>\r\n\t\t}\r\n\r\n\t\t<!-- Template for multi-label (selected items with x button) -->\r\n\t\t<ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n\t\t\t@for (item of items; track item) {\r\n\t\t\t\t<div class=\"ng-value\">\r\n\t\t\t\t\t<span class=\"ng-value-icon\" (click)=\"clear(item)\" aria-hidden=\"true\">×</span>\r\n\t\t\t\t\t<span class=\"ng-value-label\">\r\n\t\t\t\t\t\t@if (selectedItemTemplate()) {\r\n\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t*ngTemplateOutlet=\"\r\n\t\t\t\t\t\t\t\t\tselectedItemTemplate();\r\n\t\t\t\t\t\t\t\t\tcontext: { $implicit: item }\r\n\t\t\t\t\t\t\t\t\"></ng-container>\r\n\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t{{ item[bindLabel] }}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</ng-template>\r\n\t</ng-select>\r\n\r\n\t<label [class.required-label]=\"isRequired\">{{ placeholder }}</label>\r\n</p-floatlabel>\r\n","import { Component, input, Input, output } from '@angular/core';\r\nimport { DrawerModule } from 'primeng/drawer';\r\n\r\n@Component({\r\n\tselector: 'ngp-dynamic-drawer',\r\n\timports: [DrawerModule],\r\n\ttemplateUrl: './dynamic-drawer.component.html',\r\n\tstyleUrl: './dynamic-drawer.component.scss'\r\n})\r\nexport class DynamicDrawerComponent {\r\n\tposition = input<'left' | 'right'>('right');\r\n\theader = input<string>('Information');\r\n\tstyleClass = input<string>('!w-[90vw] md:!w-[35vw] !p-4');\r\n\r\n\thide = output<boolean>();\r\n\r\n\t@Input() isOpen = false;\r\n}\r\n","<p-drawer\r\n\t[header]=\"header()\"\r\n\t[(visible)]=\"isOpen\"\r\n\tposition=\"right\"\r\n\t[styleClass]=\"styleClass()\"\r\n\t(onHide)=\"hide.emit(false)\"\r\n\t[dismissible]=\"'false'\"\r\n\t[blockScroll]=\"true\">\r\n\t<div class=\"content-wrapper !h-full\">\r\n\t\t<ng-content></ng-content>\r\n\t</div>\r\n</p-drawer>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, input } from '@angular/core';\r\nimport { DividerModule } from 'primeng/divider';\r\nimport { map, share, timer } from 'rxjs';\r\n\r\n@Component({\r\n\tselector: 'ngp-date-clock',\r\n\timports: [CommonModule, DividerModule],\r\n\ttemplateUrl: './date-clock.component.html',\r\n\tstyleUrl: './date-clock.component.scss'\r\n})\r\nexport class DateClockComponent {\r\n\tstyleClass = input<string>('');\r\n\r\n\trxDate = new Date();\r\n\r\n\tconstructor() {\r\n\t\tthis.initClock();\r\n\t}\r\n\r\n\tinitClock(): void {\r\n\t\ttimer(0, 1000)\r\n\t\t\t.pipe(\r\n\t\t\t\tmap(() => new Date()),\r\n\t\t\t\tshare()\r\n\t\t\t)\r\n\t\t\t.subscribe((time) => {\r\n\t\t\t\tthis.rxDate = time;\r\n\t\t\t});\r\n\t}\r\n}\r\n","<div class=\"flex items-center gap-2\">\r\n\t<div\r\n\t\tclass=\"self-start rounded-lg border border-sky-200 px-4 py-1 flex flex-col justify-center items-center bg-sky-50\"\r\n\t\t[ngClass]=\"styleClass()\">\r\n\t\t<span class=\"text-sm text-gray-500\">{{ rxDate | date: 'MMM' }}</span>\r\n\t\t<span class=\"font-bold text-xl\">{{ rxDate | date: 'dd' }}</span>\r\n\t</div>\r\n\t<div class=\"flex flex-col\">\r\n\t\t<div class=\"text-md font-bold\">Today</div>\r\n\t\t<span class=\"text-sm text-gray-400 font-medium\">\r\n\t\t\t{{ rxDate | date: 'hh' }}:{{ rxDate | date: 'mm' }} {{ rxDate | date: 'a' }}\r\n\t\t</span>\r\n\t</div>\r\n</div>\r\n","import { Component, computed, effect, input, output, signal } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\n\r\ninterface TypedFile {\r\n\tfile: File;\r\n\tpreview?: string;\r\n\terror?: string;\r\n}\r\n\r\n@Component({\r\n\tselector: 'ngp-dynamic-file-upload',\r\n\timports: [ButtonModule],\r\n\ttemplateUrl: './dynamic-file-upload.component.html',\r\n\tstyleUrl: './dynamic-file-upload.component.scss'\r\n})\r\nexport class DynamicFileUploadComponent {\r\n\tfiles = input<File[]>([]);\r\n\tmultiple = input(false);\r\n\taccept = input('.pdf,.png,.jpg,.jpeg,.doc,.docx,.csv,.xls,.xlsx');\r\n\tmaxFileSize = input(2097152);\r\n\tmaxFiles = input<number | null>(null); // New: maximum number of files allowed\r\n\tplaceholder = input('Drag and drop new files here to upload.');\r\n\r\n\tfilesSelected = output<File[]>();\r\n\tfilesCleared = output<void>();\r\n\r\n\tuploadedFiles = signal<TypedFile[]>([]);\r\n\r\n\tconstructor() {\r\n\t\t// Initialize with existing files when component is created\r\n\t\teffect(() => {\r\n\t\t\tconst existingFiles = this.files();\r\n\t\t\tif (existingFiles && existingFiles.length > 0 && this.uploadedFiles().length === 0) {\r\n\t\t\t\tthis.initializeFiles(existingFiles);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initializeFiles(existingFiles: File[]): void {\r\n\t\tconst typedFiles: TypedFile[] = existingFiles.map((file) => {\r\n\t\t\tconst typedFile: TypedFile = { file };\r\n\r\n\t\t\t// Generate preview for images\r\n\t\t\t// Generate preview for images (check both MIME type and extension)\r\n\t\t\tif (this.isImageFile(file)) {\r\n\t\t\t\tconst reader = new FileReader();\r\n\t\t\t\treader.onload = (e) => {\r\n\t\t\t\t\ttypedFile.preview = e.target?.result as string;\r\n\t\t\t\t};\r\n\t\t\t\treader.readAsDataURL(file);\r\n\t\t\t}\r\n\r\n\t\t\treturn typedFile;\r\n\t\t});\r\n\r\n\t\tthis.uploadedFiles.set(typedFiles);\r\n\t}\r\n\tisDragging = signal(false);\r\n\r\n\tvalidFiles = computed(() =>\r\n\t\tthis.uploadedFiles()\r\n\t\t\t.filter((tf) => !tf.error)\r\n\t\t\t.map((tf) => tf.file)\r\n\t);\r\n\r\n\t// New: computed property to check if max files limit is reached\r\n\tisMaxFilesReached = computed(() => {\r\n\t\tconst max = this.maxFiles();\r\n\t\tif (max === null) return false;\r\n\t\treturn this.uploadedFiles().length >= max;\r\n\t});\r\n\r\n\tonDragOver(event: DragEvent): void {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\t// Don't allow drag if max files reached\r\n\t\tif (!this.isMaxFilesReached()) {\r\n\t\t\tthis.isDragging.set(true);\r\n\t\t}\r\n\t}\r\n\r\n\tonDragLeave(event: DragEvent): void {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\tthis.isDragging.set(false);\r\n\t}\r\n\r\n\tonDrop(event: DragEvent): void {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\tthis.isDragging.set(false);\r\n\r\n\t\t// Don't process files if max limit reached\r\n\t\tif (this.isMaxFilesReached()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst files = event.dataTransfer?.files;\r\n\t\tif (files) {\r\n\t\t\tthis.handleFiles(Array.from(files));\r\n\t\t}\r\n\t}\r\n\r\n\tonFileSelected(event: Event): void {\r\n\t\tconst input = event.target as HTMLInputElement;\r\n\t\tif (input.files) {\r\n\t\t\tthis.handleFiles(Array.from(input.files));\r\n\t\t\tinput.value = '';\r\n\t\t}\r\n\t}\r\n\r\n\thandleFiles(newFiles: File[]): void {\r\n\t\tif (!this.multiple() && newFiles.length > 0) {\r\n\t\t\tthis.uploadedFiles.set([]);\r\n\t\t\tnewFiles = [newFiles[0]];\r\n\t\t}\r\n\r\n\t\t// New: Check max files limit\r\n\t\tconst maxFiles = this.maxFiles();\r\n\t\tif (maxFiles !== null) {\r\n\t\t\tconst currentCount = this.uploadedFiles().length;\r\n\t\t\tconst availableSlots = maxFiles - currentCount;\r\n\r\n\t\t\tif (availableSlots <= 0) {\r\n\t\t\t\t// Max limit already reached\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Limit new files to available slots\r\n\t\t\tnewFiles = newFiles.slice(0, availableSlots);\r\n\t\t}\r\n\r\n\t\tconst typedFiles: TypedFile[] = newFiles.map((file) => {\r\n\t\t\tconst typedFile: TypedFile = { file };\r\n\r\n\t\t\t// Validate file size\r\n\t\t\tif (file.size > this.maxFileSize()) {\r\n\t\t\t\ttypedFile.error = `File size exceeds ${this.formatFileSize(this.maxFileSize())}`;\r\n\t\t\t}\r\n\r\n\t\t\t// Validate file type\r\n\t\t\tconst acceptedTypes = this.accept()\r\n\t\t\t\t.split(',')\r\n\t\t\t\t.map((t) => t.trim());\r\n\t\t\tconst fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();\r\n\r\n\t\t\tconst isValidExtension = acceptedTypes.some(\r\n\t\t\t\t(type) => type === fileExtension || type === '.' + fileExtension.substring(1)\r\n\t\t\t);\r\n\r\n\t\t\tif (!isValidExtension && !typedFile.error) {\r\n\t\t\t\ttypedFile.error = 'File type not accepted';\r\n\t\t\t}\r\n\r\n\t\t\t// Generate preview for images\r\n\t\t\tif (file.type.startsWith('image/') && !typedFile.error) {\r\n\t\t\t\tconst reader = new FileReader();\r\n\t\t\t\treader.onload = (e) => {\r\n\t\t\t\t\ttypedFile.preview = e.target?.result as string;\r\n\t\t\t\t};\r\n\t\t\t\treader.readAsDataURL(file);\r\n\t\t\t}\r\n\r\n\t\t\treturn typedFile;\r\n\t\t});\r\n\r\n\t\tif (this.multiple()) {\r\n\t\t\tthis.uploadedFiles.update((existing) => [...existing, ...typedFiles]);\r\n\t\t} else {\r\n\t\t\tthis.uploadedFiles.set(typedFiles);\r\n\t\t}\r\n\r\n\t\tthis.emitFiles();\r\n\t}\r\n\r\n\tremoveFile(typedFile: TypedFile): void {\r\n\t\tthis.uploadedFiles.update((files) => files.filter((f) => f.file !== typedFile.file));\r\n\t\tthis.emitFiles();\r\n\t}\r\n\r\n\tclearAll(): void {\r\n\t\tthis.uploadedFiles.set([]);\r\n\t\tthis.filesCleared.emit();\r\n\t}\r\n\r\n\temitFiles(): void {\r\n\t\tthis.filesSelected.emit(this.validFiles());\r\n\t}\r\n\r\n\tformatFileSize(bytes: number): string {\r\n\t\tif (bytes === 0) return '0 Bytes';\r\n\t\tconst k = 1024;\r\n\t\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\t\treturn Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\r\n\t}\r\n\r\n\tprivate isImageFile(file: File): boolean {\r\n\t\t// Check MIME type\r\n\t\tif (file.type.startsWith('image/')) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// Check file extension\r\n\t\tconst fileName = file.name.toLowerCase();\r\n\t\tconst imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'];\r\n\t\treturn imageExtensions.some((ext) => fileName.endsWith(ext));\r\n\t}\r\n}\r\n","<div class=\"w-full h-full flex flex-col\">\r\n\t<!-- Upload Area -->\r\n\t<div\r\n\t\tclass=\"relative border-2 border-dashed rounded-lg transition-colors flex-shrink-0\"\r\n\t\t[class.border-blue-400]=\"isDragging()\"\r\n\t\t[class.bg-blue-50]=\"isDragging()\"\r\n\t\t[class.border-gray-300]=\"!isDragging()\"\r\n\t\t(dragover)=\"onDragOver($event)\"\r\n\t\t(dragleave)=\"onDragLeave($event)\"\r\n\t\t(drop)=\"onDrop($event)\">\r\n\t\t<input\r\n\t\t\t#fileInput\r\n\t\t\ttype=\"file\"\r\n\t\t\tclass=\"hidden\"\r\n\t\t\t[multiple]=\"multiple()\"\r\n\t\t\t[accept]=\"accept()\"\r\n\t\t\t(change)=\"onFileSelected($event)\" />\r\n\r\n\t\t<div class=\"p-8 text-center cursor-pointer\" (click)=\"fileInput.click()\">\r\n\t\t\t<div class=\"w-24 mx-auto\">\r\n\t\t\t\t<svg\r\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\r\n\t\t\t\t\tviewBox=\"0 0 855.42518 833.48708\"\r\n\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n\t\t\t\t\tartist=\"Katerina Limpitsouni\"\r\n\t\t\t\t\tsource=\"https://undraw.co/\">\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M739.66209,831.96985H93.28238c-26.55003,0-48.15129-21.60126-48.15129-48.15277V219.36774c0-26.55003,21.60126-48.15129,48.15129-48.15129h646.37972c26.55151,0,48.15277,21.60126,48.15277,48.15129v564.44933c0,26.55151-21.60126,48.15277-48.15277,48.15277Z\"\r\n\t\t\t\t\t\tfill=\"#fff\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M739.66209,833.48708H93.28238c-27.38718,0-49.66852-22.28134-49.66852-49.67V219.36774c0-27.38718,22.28134-49.66852,49.66852-49.66852h646.37972c27.38866,0,49.67,22.28134,49.67,49.66852v564.44933c0,27.38866-22.28134,49.67-49.67,49.67ZM93.28238,172.73368c-25.71437,0-46.63406,20.91969-46.63406,46.63406v564.44933c0,25.71437,20.91969,46.63554,46.63406,46.63554h646.37972c25.71437,0,46.63554-20.92117,46.63554-46.63554V219.36774c0-25.71437-20.92117-46.63406-46.63554-46.63406H93.28238Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M633.05154,719.69635H199.12394c-11.29477,0-20.4826-9.18783-20.4826-20.4826,0-5.46736,2.13212-10.60875,6.00372-14.47887,3.8553-3.8716,8.99818-6.00372,14.47887-6.00372h433.9276c11.29477,0,20.4826,9.18783,20.4826,20.4826,0,5.46736-2.13212,10.61023-6.00224,14.48035-3.85382,3.87012-8.9967,6.00224-14.48035,6.00224Z\"\r\n\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M537.46609,699.2145c0,5.44736-2.2151,10.37835-5.77999,13.94325-3.56638,3.56564-8.49737,5.78073-13.94399,5.78073H199.12394c-10.89323,0-19.72398-8.83001-19.72398-19.72398,0-5.44662,2.2151-10.37761,5.78147-13.94325,3.5649-3.58045,8.49589-5.78073,13.94251-5.78073h318.61817c10.89323,0,19.72398,8.83075,19.72398,19.72398Z\"\r\n\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M502.03197,638.5231h-176.42977c-15.3575,0-27.85242-12.49492-27.85242-27.8539v-231.05003c0-15.3575,12.49492-27.85242,27.85242-27.85242l133.30727.7601,70.9764,76.68824v181.45411c0,15.35898-12.49492,27.8539-27.8539,27.8539Z\"\r\n\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M414.57644,442.63753h-67.53893c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h67.53893c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M481.04412,483.00709h-134.74301c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.74301c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M481.04412,520.48592h-134.00662c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.00662c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M380.80771,558.65075h-34.5066c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h34.5066c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M529.12726,431.03013h-68.71093c-7.70172,0-13.9677-6.26598-13.9677-13.9677v-64.53707h3.03446v64.53707c0,6.02891,4.90433,10.93324,10.93324,10.93324h68.71093v3.03446Z\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M416.11441,658.24708c-13.64025,0-24.73795-11.0977-24.73795-24.73795v-23.81339h-16.74138c-3.49674,0-6.62751-1.9484-8.17289-5.08509s-1.18089-6.80531.94975-9.57751l42.1283-54.79658c1.71133-2.22399,4.30869-3.50267,7.1046-3.45673,2.8048.02667,5.36957,1.33647,7.03645,3.59305l41.1667,55.72855c2.13805,2.8937,2.45957,6.68826.83862,9.902-1.62243,3.21374-4.8658,5.20955-8.46478,5.20955h-16.36948v22.29616c0,13.64025-11.0977,24.73795-24.73795,24.73795Z\"\r\n\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t<circle cx=\"560.98874\" cy=\"420.8005\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"581.47134\" cy=\"479.21383\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"259.81871\" cy=\"436.73141\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"264.3704\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"259.81871\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"560.23012\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"560.23012\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M37.40122,152.42148c-6.44526,0-12.11265-4.61836-13.35132-11.0088L.24984,18.65638c-.76454-3.9442.24448-7.99953,2.76776-11.12585,2.5218-3.12484,6.27191-4.96804,10.28871-5.05397L128.31645.00364c6.71641-.15261,12.40898,4.50872,13.65062,11.06214l22.55693,119.0462c.72898,3.85234-.23855,7.83062-2.65811,10.91694-2.41808,3.08484-6.04966,4.97693-9.96274,5.18881l-113.76701,6.18301c-.24596.01334-.49191.02074-.73491.02074Z\"\r\n\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t<polygon\r\n\t\t\t\t\t\tpoints=\"29.95846 132.52692 54.99274 65.01021 96.71655 96.11341 110.37162 82.45835 158.16434 131.7683 29.95846 132.52692\"\r\n\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M107.33749,58.94148c-6.27487,0-11.37922-5.10435-11.37922-11.37922s5.10435-11.37922,11.37922-11.37922,11.37922,5.10435,11.37922,11.37922-5.10435,11.37922-11.37922,11.37922Z\"\r\n\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M41.65954,616.11285c-3.58564,0-7.09275-1.04902-10.16129-3.07891-4.19312-2.77665-7.02163-7.02608-7.96101-11.96596L.5521,480.25267c-1.87135-9.84125,4.31462-19.28244,14.08327-21.49309l102.97009-23.32444c4.88655-1.10384,9.89162-.22077,14.09957,2.48772,4.2109,2.71145,7.08682,6.90606,8.0988,11.8089l25.05355,121.36946c2.04174,9.89014-4.32647,19.67509-14.19439,21.81462l-105.03998,22.76881c-1.31869.28596-2.64626.4282-3.96347.4282Z\"\r\n\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M33.74594,507.28424c-2.50698,0-4.7369-1.78245-5.21399-4.33685-.53933-2.88333,1.36165-5.65701,4.24498-6.19486l83.24611-15.5516c2.88185-.54674,5.65553,1.36165,6.19486,4.24498s-1.36165,5.65701-4.24498,6.19486l-83.24611,15.5516c-.32893.06223-.65786.09186-.98087.09186Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M41.33357,539.14606c-2.40327,0-4.57984-1.64169-5.16214-4.082-.6786-2.85221,1.0831-5.71628,3.9368-6.39637l78.36253-18.65866c2.85073-.67564,5.7148,1.0831,6.39637,3.9368.6786,2.85221-1.0831,5.71628-3.9368,6.39637l-78.36253,18.65866c-.41339.09779-.82677.1452-1.23423.1452Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M46.64239,569.97367c-2.45513,0-4.65985-1.71281-5.18881-4.2109-.60748-2.86999,1.22534-5.68813,4.09385-6.29561l53.46159-11.32144c2.88481-.606,5.68961,1.22534,6.29561,4.09385.60748,2.86999-1.22534,5.68813-4.09385,6.29561l-53.46159,11.32144c-.3719.07853-.74232.11705-1.10681.11705Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M816.49406,244.42277c-.94382,0-1.89802-.07408-2.85666-.22373l-106.17939-16.65841c-4.96952-.78084-9.30785-3.46859-12.21785-7.57133-2.91-4.10126-4.01384-9.0856-3.10854-14.03141l22.15096-120.97089c1.80764-9.8531,10.97472-16.41097,20.89006-14.96634l104.45028,15.39603c4.95322.73046,9.30488,3.36191,12.25192,7.40983,2.94852,4.04644,4.11756,8.99521,3.29227,13.93362l-20.42185,122.23475c-1.50241,9.00262-9.38341,15.44788-18.2512,15.44788Z\"\r\n\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M820.66792,138.04188c-.323,0-.65045-.02963-.97938-.09186l-83.25204-15.52938c-2.88333-.53785-4.78431-3.31005-4.24646-6.19338.53636-2.88333,3.30264-4.79616,6.19338-4.24646l83.25204,15.52938c2.88333.53785,4.78431,3.31005,4.24646,6.19338-.47562,2.5544-2.70701,4.33833-5.21399,4.33833Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M812.81507,165.83355c-.24003,0-.48006-.01482-.72454-.0489l-79.81753-10.86953c-2.90555-.39561-4.93989-3.0715-4.54428-5.97854.39709-2.90704,3.08187-4.94285,5.97854-4.54428l79.81753,10.86953c2.90555.39561,4.93989,3.0715,4.54428,5.97854-.36301,2.66256-2.64033,4.59317-5.254,4.59317Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M780.77249,194.36309c-.28152,0-.56748-.02371-.85492-.06964l-53.9461-8.73c-2.89518-.46821-4.86136-3.19596-4.39315-6.09114.46969-2.89518,3.17818-4.85543,6.09114-4.39315l53.9461,8.73c2.89518.46821,4.86136,3.19596,4.39315,6.09114-.42228,2.60774-2.67589,4.46279-5.23622,4.46279Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t</svg>\r\n\t\t\t</div>\r\n\t\t\t<p class=\"mt-2 text-sm text-gray-600\">\r\n\t\t\t\t{{ placeholder() }}\r\n\t\t\t</p>\r\n\t\t\t<p class=\"mt-1 text-xs text-gray-500\"> or click to browse </p>\r\n\t\t\t<p class=\"mt-2 text-xs text-red-600 !mb-0\">\r\n\t\t\t\tMax size per file: <strong>{{ formatFileSize(maxFileSize()) }}</strong>\r\n\t\t\t</p>\r\n\t\t\t@if (maxFiles()) {\r\n\t\t\t\t<p class=\"text-xs text-red-600\">\r\n\t\t\t\t\tMax files: <strong>{{ maxFiles() }}</strong>\r\n\t\t\t\t</p>\r\n\t\t\t}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<!-- Uploaded Files List -->\r\n\t@if (uploadedFiles().length > 0) {\r\n\t\t<div class=\"mt-4 flex-1 flex flex-col min-h-0\">\r\n\t\t\t<div class=\"flex items-center justify-between mb-2 flex-shrink-0\">\r\n\t\t\t\t<h3 class=\"!text-sm font-medium text-gray-700\">\r\n\t\t\t\t\tSelected Files ({{ uploadedFiles().length }})\r\n\t\t\t\t</h3>\r\n\t\t\t\t<button type=\"button\" pButton severity=\"danger\" text size=\"small\" (click)=\"clearAll()\">\r\n\t\t\t\t\tClear All\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"flex-1 overflow-y-auto space-y-2 min-h-0\">\r\n\t\t\t\t@for (typedFile of uploadedFiles(); track typedFile.file.name) {\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass=\"flex items-center justify-between p-3 bg-gray-50 rounded-lg border\"\r\n\t\t\t\t\t\t[class.border-red-300]=\"typedFile.error\"\r\n\t\t\t\t\t\t[class.border-gray-200]=\"!typedFile.error\">\r\n\t\t\t\t\t\t<div class=\"flex items-center flex-1 min-w-0\">\r\n\t\t\t\t\t\t\t<!-- File Icon/Preview -->\r\n\t\t\t\t\t\t\t@if (typedFile.preview) {\r\n\t\t\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\t\t\t[src]=\"typedFile.preview\"\r\n\t\t\t\t\t\t\t\t\talt=\"preview\"\r\n\t\t\t\t\t\t\t\t\tclass=\"h-10 w-10 rounded object-cover flex-shrink-0\" />\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\tclass=\"h-10 w-10 rounded bg-gray-200 flex items-center justify-center flex-shrink-0\">\r\n\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\tclass=\"h-6 w-6 text-gray-500\"\r\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\r\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\r\n\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\">\r\n\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\r\n\t\t\t\t\t\t\t\t\t\t\td=\"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z\" />\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t<!-- File Info -->\r\n\t\t\t\t\t\t\t<div class=\"ml-3 flex-1 min-w-0\">\r\n\t\t\t\t\t\t\t\t<p class=\"text-sm font-medium text-gray-900 truncate\">\r\n\t\t\t\t\t\t\t\t\t{{ typedFile.file.name }}\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">\r\n\t\t\t\t\t\t\t\t\t{{ formatFileSize(typedFile.file.size) }}\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t@if (typedFile.error) {\r\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-red-600 mt-1\">\r\n\t\t\t\t\t\t\t\t\t\t{{ typedFile.error }}\r\n\t\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t<!-- Remove Button -->\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclass=\"ml-3 text-gray-400 hover:text-red-600 flex-shrink-0\"\r\n\t\t\t\t\t\t\t(click)=\"removeFile(typedFile)\">\r\n\t\t\t\t\t\t\t<svg class=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\r\n\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\r\n\t\t\t\t\t\t\t\t\td=\"M6 18L18 6M6 6l12 12\" />\r\n\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t}\r\n</div>\r\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, input, output } from '@angular/core';\nimport { DialogModule } from 'primeng/dialog';\nimport { NgxExtendedPdfViewerModule } from 'ngx-extended-pdf-viewer';\n\n@Component({\n\tselector: 'ngp-pdf-viewer-modal',\n\timports: [CommonModule, DialogModule, NgxExtendedPdfViewerModule],\n\ttemplateUrl: './pdf-viewer-modal.component.html',\n\tstyleUrl: './pdf-viewer-modal.component.scss'\n})\nexport class PdfViewerModalComponent {\n\tpdfFile = input<ArrayBuffer | string | null>(null);\n\n\thide = output<boolean>();\n\n\t@Input() visible = false;\n\t@Input() filename = 'untitled.pdf';\n}\n","<p-dialog\n\t[(visible)]=\"visible\"\n\t[modal]=\"true\"\n\t[maximizable]=\"true\"\n\t[dismissableMask]=\"false\"\n\t[resizable]=\"false\"\n\tstyleClass=\"w-11/12 md:w-3/4 lg:w-8/12 max-h-[80vh]\"\n\tappendTo=\"body\"\n\t(onHide)=\"hide.emit(false)\">\n\t@if (pdfFile()) {\n\t\t<ngx-extended-pdf-viewer\n\t\t\t[src]=\"pdfFile()!\"\n\t\t\tuseBrowserLocale=\"true\"\n\t\t\t[showZoomButtons]=\"true\"\n\t\t\t[showSidebarButton]=\"false\"\n\t\t\t[showPagingButtons]=\"false\"\n\t\t\t[showSecondaryToolbarButton]=\"false\"\n\t\t\t[showOpenFileButton]=\"false\"\n\t\t\t[showTextEditor]=\"false\"\n\t\t\t[showDrawEditor]=\"false\"\n\t\t\t[showHighlightEditor]=\"false\"\n\t\t\t[showTextEditor]=\"false\"\n\t\t\t[showStampEditor]=\"false\"\n\t\t\t[filenameForDownload]=\"filename === '' ? 'untitled.pdf' : filename\"\n\t\t\theight=\"100%\"\n\t\t\twidth=\"100%\"></ngx-extended-pdf-viewer>\n\t} @else {\n\t\t<div class=\"flex items-center justify-center h-full\">\n\t\t\t<p>Loading PDF...</p>\n\t\t</div>\n\t}\n</p-dialog>\n","import {\n\tComponent,\n\tcomputed,\n\teffect,\n\tinject,\n\tinput,\n\tOnDestroy,\n\toutput,\n\tsignal\n} from '@angular/core';\nimport { GalleriaModule } from 'primeng/galleria';\nimport { ButtonModule } from 'primeng/button';\nimport { MessageService } from 'primeng/api';\nimport { ToastModule } from 'primeng/toast';\nimport { SpeedDialModule } from 'primeng/speeddial';\nimport { PdfViewerModalComponent } from '../pdf-viewer/pdf-viewer-modal.component';\nimport { GalleriaItem, TypedFile } from '../../models/file-type.model';\n\n@Component({\n\tselector: 'ngp-file-upload-viewer',\n\timports: [GalleriaModule, ButtonModule, ToastModule, PdfViewerModalComponent, SpeedDialModule],\n\ttemplateUrl: './file-upload-viewer.component.html',\n\tstyleUrl: './file-upload-viewer.component.scss'\n})\nexport class FileUploadViewerComponent implements OnDestroy {\n\tfiles = input<File[]>([]);\n\tmultiple = input(false);\n\taccept = input('.pdf,.png,.jpg,.jpeg,.doc,.docx,.csv,.xls,.xlsx');\n\tmaxFileSize = input(2097152);\n\tmaxFiles = input<number | null>(null);\n\tplaceholder = input('Drag and drop new files here to upload.');\n\tisViewMode = input<boolean>(false);\n\n\tfilesSelected = output<File[]>();\n\tfilesCleared = output<void>();\n\n\tuploadedFiles = signal<TypedFile[]>([]);\n\tisDragging = signal(false);\n\tisVisible = signal(true);\n\n\tvisible = computed(() => this.isVisible());\n\n\tresponsiveOptions = signal([\n\t\t{\n\t\t\tbreakpoint: '1024px',\n\t\t\tnumVisible: 5\n\t\t},\n\t\t{\n\t\t\tbreakpoint: '768px',\n\t\t\tnumVisible: 3\n\t\t},\n\t\t{\n\t\t\tbreakpoint: '560px',\n\t\t\tnumVisible: 1\n\t\t}\n\t]);\n\n\tcontainerStyle = signal({ 'max-width': '850px' });\n\n\tisPdfViewerVisible = false;\n\tcurrentFileUrl: string | null = null;\n\tcurrentFileName: string | null = null;\n\n\tmessageService = inject(MessageService);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst existingFiles = this.files();\n\t\t\tconst currentFiles = this.uploadedFiles();\n\n\t\t\tif (existingFiles && existingFiles.length > 0 && currentFiles.length === 0) {\n\t\t\t\tthis.initializeFiles(existingFiles);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate initializeFiles(existingFiles: File[]): void {\n\t\tconst typedFiles: TypedFile[] = existingFiles.map((file) => {\n\t\t\tconst typedFile: TypedFile = { file };\n\n\t\t\tif (this.isImageFile(file)) {\n\t\t\t\tconst reader = new FileReader();\n\t\t\t\treader.onload = (e) => {\n\t\t\t\t\ttypedFile.preview = e.target?.result as string;\n\t\t\t\t\t// Trigger update to refresh the computed signal\n\t\t\t\t\tthis.uploadedFiles.update((files) => [...files]);\n\t\t\t\t};\n\t\t\t\treader.readAsDataURL(file);\n\t\t\t}\n\n\t\t\treturn typedFile;\n\t\t});\n\n\t\tthis.uploadedFiles.set(typedFiles);\n\t}\n\n\tvalidFiles = computed(() =>\n\t\tthis.uploadedFiles()\n\t\t\t.filter((tf) => !tf.error)\n\t\t\t.map((tf) => tf.file)\n\t);\n\n\tgalleriaItems = computed<GalleriaItem[]>(() => {\n\t\treturn this.uploadedFiles()\n\t\t\t.filter((tf) => tf?.file) // Only check for file existence\n\t\t\t.map((typedFile) => {\n\t\t\t\tconst fileType = this.getFileType(typedFile.file);\n\t\t\t\tconst preview = typedFile.preview || '';\n\t\t\t\t// Create object URL for the file (useful for downloads/previews)\n\t\t\t\tconst fileUrl = URL.createObjectURL(typedFile.file);\n\n\t\t\t\tconst newFile: GalleriaItem = {\n\t\t\t\t\titemImageSrc: preview,\n\t\t\t\t\tthumbnailImageSrc: preview,\n\t\t\t\t\talt: typedFile.file?.name || 'Unknown file',\n\t\t\t\t\ttitle: typedFile.file?.name || 'Unknown file',\n\t\t\t\t\ttype: fileType,\n\t\t\t\t\ttypedFile: typedFile,\n\t\t\t\t\tfileUrl,\n\t\t\t\t\tspeedDialItems: []\n\t\t\t\t};\n\n\t\t\t\t// Set speedDialItems with reference to the item itself\n\t\t\t\tnewFile.speedDialItems = [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'pi pi-trash',\n\t\t\t\t\t\ttitle: 'Remove',\n\t\t\t\t\t\tdisabled: this.isViewMode(),\n\t\t\t\t\t\tcommand: () => this.removeFileFromGalleria(typedFile)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'pi pi-download',\n\t\t\t\t\t\ttitle: 'View / Download',\n\t\t\t\t\t\tdisabled: fileType === 'image',\n\t\t\t\t\t\tcommand: () => this.onFileDownload(newFile)\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\t\treturn newFile;\n\t\t\t});\n\t});\n\n\tprivate isImageFile(file: File): boolean {\n\t\tif (file?.type.startsWith('image/')) {\n\t\t\treturn true;\n\t\t}\n\t\tconst fileName = file.name.toLowerCase();\n\t\tconst imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.svg', '.webp'];\n\t\treturn imageExtensions.some((ext) => fileName.endsWith(ext));\n\t}\n\n\tprivate getFileType(file: File): GalleriaItem['type'] {\n\t\tif (!file?.name) return 'other';\n\n\t\tconst extension = file.name.split('.').pop()?.toLowerCase();\n\n\t\tif (this.isImageFile(file)) return 'image';\n\t\tif (extension === 'pdf') return 'pdf';\n\t\tif (extension === 'doc' || extension === 'docx') return 'docx';\n\t\tif (extension === 'csv') return 'csv';\n\t\tif (extension === 'xls' || extension === 'xlsx') return 'xlsx';\n\n\t\treturn 'other';\n\t}\n\n\tonDragOver(event: DragEvent): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis.isDragging.set(true);\n\t}\n\n\tonDragLeave(event: DragEvent): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis.isDragging.set(false);\n\t}\n\n\tonDrop(event: DragEvent): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis.isDragging.set(false);\n\n\t\tconst files = event.dataTransfer?.files;\n\t\tif (files) {\n\t\t\tthis.handleFiles(Array.from(files));\n\t\t}\n\t}\n\n\tonFileSelected(event: Event): void {\n\t\tconst input = event.target as HTMLInputElement;\n\t\tif (input.files) {\n\t\t\tthis.handleFiles(Array.from(input.files));\n\t\t\tinput.value = '';\n\t\t}\n\t}\n\n\thandleFiles(newFiles: File[]): void {\n\t\t// Check max files limit - count only valid files\n\t\tconst maxFiles = this.maxFiles();\n\t\tif (maxFiles !== null) {\n\t\t\tconst currentFileCount = this.uploadedFiles().length;\n\t\t\tconst remainingSlots = maxFiles - currentFileCount;\n\n\t\t\tif (remainingSlots <= 0) {\n\t\t\t\tthis.messageService.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: 'Upload Limit Reached',\n\t\t\t\t\tdetail: `You can only upload a maximum of ${maxFiles} files.`\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (newFiles.length > remainingSlots) {\n\t\t\t\tthis.messageService.add({\n\t\t\t\t\tseverity: 'warn',\n\t\t\t\t\tsummary: 'File Limit',\n\t\t\t\t\tdetail: `Only ${remainingSlots} file(s) can be added. Remaining files were ignored.`\n\t\t\t\t});\n\t\t\t\tnewFiles = newFiles.slice(0, remainingSlots);\n\t\t\t}\n\t\t}\n\n\t\t// Handle single file mode\n\t\tif (!this.multiple() && newFiles.length > 0) {\n\t\t\tthis.uploadedFiles.set([]);\n\t\t\tnewFiles = [newFiles[0]];\n\t\t}\n\n\t\tconst typedFiles: TypedFile[] = newFiles.map((file) => {\n\t\t\tconst typedFile: TypedFile = { file };\n\n\t\t\t// Validate file size\n\t\t\tif (file.size > this.maxFileSize()) {\n\t\t\t\ttypedFile.error = `File size exceeds ${this.formatFileSize(this.maxFileSize())}`;\n\t\t\t}\n\n\t\t\t// Validate file type\n\t\t\tconst acceptedTypes = this.accept()\n\t\t\t\t.split(',')\n\t\t\t\t.map((t) => t.trim());\n\t\t\tconst fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();\n\n\t\t\tconst isValidExtension = acceptedTypes.some(\n\t\t\t\t(type) => type === fileExtension || type === '.' + fileExtension.substring(1)\n\t\t\t);\n\n\t\t\tif (!isValidExtension && !typedFile.error) {\n\t\t\t\ttypedFile.error = 'File type not accepted';\n\t\t\t}\n\n\t\t\t// Generate preview for images\n\t\t\tif (this.isImageFile(file) && !typedFile.error) {\n\t\t\t\tconst reader = new FileReader();\n\t\t\t\treader.onload = (e) => {\n\t\t\t\t\ttypedFile.preview = e.target?.result as string;\n\t\t\t\t\tthis.uploadedFiles.update((files) => [...files]);\n\t\t\t\t};\n\t\t\t\treader.readAsDataURL(file);\n\t\t\t}\n\n\t\t\treturn typedFile;\n\t\t});\n\n\t\t// Separate valid and invalid files\n\t\tconst validTypedFiles = typedFiles.filter((tf) => !tf.error);\n\t\tconst invalidFiles = typedFiles.filter((tf) => tf.error);\n\n\t\t// Show error messages for invalid files\n\t\tif (invalidFiles.length > 0) {\n\t\t\tif (invalidFiles.length === 1) {\n\t\t\t\tthis.messageService.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: 'Invalid File',\n\t\t\t\t\tdetail: `\"${invalidFiles[0].file.name}\" - ${invalidFiles[0].error}`,\n\t\t\t\t\tlife: 5000\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst errorDetails = invalidFiles.map((tf) => `• ${tf.file.name}: ${tf.error}`).join('\\n');\n\n\t\t\t\tthis.messageService.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: `${invalidFiles.length} Invalid Files`,\n\t\t\t\t\tdetail: `The following files could not be uploaded:\\n${errorDetails}`,\n\t\t\t\t\tlife: 7000\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Only add valid files to uploadedFiles\n\t\tif (validTypedFiles.length > 0) {\n\t\t\tif (this.multiple()) {\n\t\t\t\tthis.uploadedFiles.update((existing) => {\n\t\t\t\t\tconst updated = [...existing, ...validTypedFiles];\n\t\t\t\t\treturn updated;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.uploadedFiles.set(validTypedFiles);\n\t\t\t}\n\t\t}\n\n\t\tthis.emitFiles();\n\t}\n\n\tremoveFileFromGalleria(typedFile: TypedFile): void {\n\t\tthis.uploadedFiles.update((files) => files.filter((f) => f.file !== typedFile.file));\n\t\tthis.emitFiles();\n\t}\n\n\tclearAll(): void {\n\t\tthis.uploadedFiles.set([]);\n\t\tthis.filesCleared.emit();\n\t}\n\n\temitFiles(): void {\n\t\tconst validFiles = this.validFiles();\n\t\tthis.isVisible.set(false);\n\t\tthis.filesSelected.emit(validFiles);\n\t\tsetTimeout(() => {\n\t\t\tthis.isVisible.set(true);\n\t\t}, 100);\n\t}\n\n\tformatFileSize(bytes: number): string {\n\t\tif (bytes === 0) return '0 Bytes';\n\t\tconst k = 1024;\n\t\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\t\treturn Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\n\t}\n\n\tonFileDownload(fileItem: GalleriaItem): void {\n\t\tif (!['image', 'pdf'].includes(fileItem.type)) {\n\t\t\t// Use the provided fileUrl or create a new one\n\t\t\tconst url = fileItem.fileUrl || URL.createObjectURL(fileItem.typedFile.file);\n\n\t\t\tconst link = document.createElement('a');\n\t\t\tlink.href = url;\n\t\t\tlink.download = fileItem.typedFile.file.name;\n\t\t\tdocument.body.appendChild(link); // Required for Firefox\n\t\t\tlink.click();\n\t\t\tlink.remove();\n\n\t\t\t// Clean up if we created a new URL\n\t\t\tif (!fileItem.fileUrl) {\n\t\t\t\tURL.revokeObjectURL(url);\n\t\t\t}\n\t\t} else if (fileItem.type === 'pdf') {\n\t\t\tthis.currentFileUrl = fileItem.fileUrl as string;\n\t\t\tthis.currentFileName = fileItem.title.split('/')?.pop() || fileItem.typedFile.file.name;\n\n\t\t\tthis.isPdfViewerVisible = true;\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\t// Clean up object URLs\n\t\tthis.galleriaItems().forEach((item) => {\n\t\t\tif (item.fileUrl?.startsWith('blob:')) {\n\t\t\t\tURL.revokeObjectURL(item.fileUrl);\n\t\t\t}\n\t\t});\n\t}\n}\n","<div class=\"w-full h-full flex flex-col\">\n\t<!-- Toast for messages -->\n\t<p-toast position=\"top-right\"></p-toast>\n\n\t@if (!isViewMode()) {\n\t\t<!-- Upload Area -->\n\t\t<div\n\t\t\tclass=\"relative border-2 border-dashed rounded-lg transition-colors flex-shrink-0\"\n\t\t\t[class.border-blue-400]=\"isDragging()\"\n\t\t\t[class.bg-blue-50]=\"isDragging()\"\n\t\t\t[class.border-gray-300]=\"!isDragging()\"\n\t\t\t(dragover)=\"onDragOver($event)\"\n\t\t\t(dragleave)=\"onDragLeave($event)\"\n\t\t\t(drop)=\"onDrop($event)\">\n\t\t\t<input\n\t\t\t\t#fileInput\n\t\t\t\ttype=\"file\"\n\t\t\t\tclass=\"hidden\"\n\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t[accept]=\"accept()\"\n\t\t\t\t(change)=\"onFileSelected($event)\" />\n\n\t\t\t<div class=\"p-8 text-center cursor-pointer\" (click)=\"fileInput.click()\">\n\t\t\t\t<div class=\"w-24 mx-auto\">\n\t\t\t\t\t<svg\n\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\tviewBox=\"0 0 855.42518 833.48708\"\n\t\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\t\t\tartist=\"Katerina Limpitsouni\"\n\t\t\t\t\t\tsource=\"https://undraw.co/\">\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M739.66209,831.96985H93.28238c-26.55003,0-48.15129-21.60126-48.15129-48.15277V219.36774c0-26.55003,21.60126-48.15129,48.15129-48.15129h646.37972c26.55151,0,48.15277,21.60126,48.15277,48.15129v564.44933c0,26.55151-21.60126,48.15277-48.15277,48.15277Z\"\n\t\t\t\t\t\t\tfill=\"#fff\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M739.66209,833.48708H93.28238c-27.38718,0-49.66852-22.28134-49.66852-49.67V219.36774c0-27.38718,22.28134-49.66852,49.66852-49.66852h646.37972c27.38866,0,49.67,22.28134,49.67,49.66852v564.44933c0,27.38866-22.28134,49.67-49.67,49.67ZM93.28238,172.73368c-25.71437,0-46.63406,20.91969-46.63406,46.63406v564.44933c0,25.71437,20.91969,46.63554,46.63406,46.63554h646.37972c25.71437,0,46.63554-20.92117,46.63554-46.63554V219.36774c0-25.71437-20.92117-46.63406-46.63554-46.63406H93.28238Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M633.05154,719.69635H199.12394c-11.29477,0-20.4826-9.18783-20.4826-20.4826,0-5.46736,2.13212-10.60875,6.00372-14.47887,3.8553-3.8716,8.99818-6.00372,14.47887-6.00372h433.9276c11.29477,0,20.4826,9.18783,20.4826,20.4826,0,5.46736-2.13212,10.61023-6.00224,14.48035-3.85382,3.87012-8.9967,6.00224-14.48035,6.00224Z\"\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M537.46609,699.2145c0,5.44736-2.2151,10.37835-5.77999,13.94325-3.56638,3.56564-8.49737,5.78073-13.94399,5.78073H199.12394c-10.89323,0-19.72398-8.83001-19.72398-19.72398,0-5.44662,2.2151-10.37761,5.78147-13.94325,3.5649-3.58045,8.49589-5.78073,13.94251-5.78073h318.61817c10.89323,0,19.72398,8.83075,19.72398,19.72398Z\"\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M502.03197,638.5231h-176.42977c-15.3575,0-27.85242-12.49492-27.85242-27.8539v-231.05003c0-15.3575,12.49492-27.85242,27.85242-27.85242l133.30727.7601,70.9764,76.68824v181.45411c0,15.35898-12.49492,27.8539-27.8539,27.8539Z\"\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M414.57644,442.63753h-67.53893c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h67.53893c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M481.04412,483.00709h-134.74301c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.74301c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M481.04412,520.48592h-134.00662c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.00662c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M380.80771,558.65075h-34.5066c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h34.5066c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M529.12726,431.03013h-68.71093c-7.70172,0-13.9677-6.26598-13.9677-13.9677v-64.53707h3.03446v64.53707c0,6.02891,4.90433,10.93324,10.93324,10.93324h68.71093v3.03446Z\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M416.11441,658.24708c-13.64025,0-24.73795-11.0977-24.73795-24.73795v-23.81339h-16.74138c-3.49674,0-6.62751-1.9484-8.17289-5.08509s-1.18089-6.80531.94975-9.57751l42.1283-54.79658c1.71133-2.22399,4.30869-3.50267,7.1046-3.45673,2.8048.02667,5.36957,1.33647,7.03645,3.59305l41.1667,55.72855c2.13805,2.8937,2.45957,6.68826.83862,9.902-1.62243,3.21374-4.8658,5.20955-8.46478,5.20955h-16.36948v22.29616c0,13.64025-11.0977,24.73795-24.73795,24.73795Z\"\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\n\t\t\t\t\t\t<circle cx=\"560.98874\" cy=\"420.8005\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"581.47134\" cy=\"479.21383\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"259.81871\" cy=\"436.73141\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"264.3704\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"259.81871\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"560.23012\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"560.23012\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M37.40122,152.42148c-6.44526,0-12.11265-4.61836-13.35132-11.0088L.24984,18.65638c-.76454-3.9442.24448-7.99953,2.76776-11.12585,2.5218-3.12484,6.27191-4.96804,10.28871-5.05397L128.31645.00364c6.71641-.15261,12.40898,4.50872,13.65062,11.06214l22.55693,119.0462c.72898,3.85234-.23855,7.83062-2.65811,10.91694-2.41808,3.08484-6.04966,4.97693-9.96274,5.18881l-113.76701,6.18301c-.24596.01334-.49191.02074-.73491.02074Z\"\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\n\t\t\t\t\t\t<polygon\n\t\t\t\t\t\t\tpoints=\"29.95846 132.52692 54.99274 65.01021 96.71655 96.11341 110.37162 82.45835 158.16434 131.7683 29.95846 132.52692\"\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M107.33749,58.94148c-6.27487,0-11.37922-5.10435-11.37922-11.37922s5.10435-11.37922,11.37922-11.37922,11.37922,5.10435,11.37922,11.37922-5.10435,11.37922-11.37922,11.37922Z\"\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M41.65954,616.11285c-3.58564,0-7.09275-1.04902-10.16129-3.07891-4.19312-2.77665-7.02163-7.02608-7.96101-11.96596L.5521,480.25267c-1.87135-9.84125,4.31462-19.28244,14.08327-21.49309l102.97009-23.32444c4.88655-1.10384,9.89162-.22077,14.09957,2.48772,4.2109,2.71145,7.08682,6.90606,8.0988,11.8089l25.05355,121.36946c2.04174,9.89014-4.32647,19.67509-14.19439,21.81462l-105.03998,22.76881c-1.31869.28596-2.64626.4282-3.96347.4282Z\"\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M33.74594,507.28424c-2.50698,0-4.7369-1.78245-5.21399-4.33685-.53933-2.88333,1.36165-5.65701,4.24498-6.19486l83.24611-15.5516c2.88185-.54674,5.65553,1.36165,6.19486,4.24498s-1.36165,5.65701-4.24498,6.19486l-83.24611,15.5516c-.32893.06223-.65786.09186-.98087.09186Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M41.33357,539.14606c-2.40327,0-4.57984-1.64169-5.16214-4.082-.6786-2.85221,1.0831-5.71628,3.9368-6.39637l78.36253-18.65866c2.85073-.67564,5.7148,1.0831,6.39637,3.9368.6786,2.85221-1.0831,5.71628-3.9368,6.39637l-78.36253,18.65866c-.41339.09779-.82677.1452-1.23423.1452Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M46.64239,569.97367c-2.45513,0-4.65985-1.71281-5.18881-4.2109-.60748-2.86999,1.22534-5.68813,4.09385-6.29561l53.46159-11.32144c2.88481-.606,5.68961,1.22534,6.29561,4.09385.60748,2.86999-1.22534,5.68813-4.09385,6.29561l-53.46159,11.32144c-.3719.07853-.74232.11705-1.10681.11705Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M816.49406,244.42277c-.94382,0-1.89802-.07408-2.85666-.22373l-106.17939-16.65841c-4.96952-.78084-9.30785-3.46859-12.21785-7.57133-2.91-4.10126-4.01384-9.0856-3.10854-14.03141l22.15096-120.97089c1.80764-9.8531,10.97472-16.41097,20.89006-14.96634l104.45028,15.39603c4.95322.73046,9.30488,3.36191,12.25192,7.40983,2.94852,4.04644,4.11756,8.99521,3.29227,13.93362l-20.42185,122.23475c-1.50241,9.00262-9.38341,15.44788-18.2512,15.44788Z\"\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M820.66792,138.04188c-.323,0-.65045-.02963-.97938-.09186l-83.25204-15.52938c-2.88333-.53785-4.78431-3.31005-4.24646-6.19338.53636-2.88333,3.30264-4.79616,6.19338-4.24646l83.25204,15.52938c2.88333.53785,4.78431,3.31005,4.24646,6.19338-.47562,2.5544-2.70701,4.33833-5.21399,4.33833Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M812.81507,165.83355c-.24003,0-.48006-.01482-.72454-.0489l-79.81753-10.86953c-2.90555-.39561-4.93989-3.0715-4.54428-5.97854.39709-2.90704,3.08187-4.94285,5.97854-4.54428l79.81753,10.86953c2.90555.39561,4.93989,3.0715,4.54428,5.97854-.36301,2.66256-2.64033,4.59317-5.254,4.59317Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M780.77249,194.36309c-.28152,0-.56748-.02371-.85492-.06964l-53.9461-8.73c-2.89518-.46821-4.86136-3.19596-4.39315-6.09114.46969-2.89518,3.17818-4.85543,6.09114-4.39315l53.9461,8.73c2.89518.46821,4.86136,3.19596,4.39315,6.09114-.42228,2.60774-2.67589,4.46279-5.23622,4.46279Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"mt-2 text-sm text-gray-600\">\n\t\t\t\t\t{{ placeholder() }}\n\t\t\t\t</p>\n\t\t\t\t<p class=\"mt-1 text-xs text-gray-500\"> or click to browse </p>\n\t\t\t\t<p class=\"mt-2 text-xs text-gray-400\">\n\t\t\t\t\tMax file size: {{ formatFileSize(maxFileSize()) }}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t}\n\n\t<!-- Galleria Component -->\n\t@if (galleriaItems().length > 0 && visible()) {\n\t\t<p-galleria\n\t\t\t[value]=\"galleriaItems()\"\n\t\t\t[responsiveOptions]=\"responsiveOptions()\"\n\t\t\t[containerStyle]=\"containerStyle()\"\n\t\t\tcontainerClass=\"max-h-2/3 !max-w-full my-5\"\n\t\t\t[circular]=\"true\"\n\t\t\t[fullScreen]=\"false\"\n\t\t\t[showItemNavigators]=\"true\"\n\t\t\t[showThumbnails]=\"true\">\n\t\t\t<ng-template pTemplate=\"item\" let-item>\n\t\t\t\t@if (item && item.type && !item.typedFile.error) {\n\t\t\t\t\t<div class=\"relative flex items-center justify-center w-full\">\n\t\t\t\t\t\t@switch (item.type) {\n\t\t\t\t\t\t\t@case ('image') {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t[src]=\"item.itemImageSrc\"\n\t\t\t\t\t\t\t\t\t\t[alt]=\"item.alt\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"max-width: 100%; max-height: 100%; object-fit: contain\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('pdf') {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-file-pdf text-9xl text-red-500 mb-4\"></i>\n\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\tclass=\"text-sm font-medium text-center text-gray-700 mb-2 whitespace-normal w-2/3 overflow-x-hidden text-ellipsis\"\n\t\t\t\t\t\t\t\t\t\t>{{ item.title }}</p\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">{{\n\t\t\t\t\t\t\t\t\t\tformatFileSize(item.typedFile.file.size)\n\t\t\t\t\t\t\t\t\t}}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('docx') {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-file-word text-9xl text-blue-500 mb-4\"></i>\n\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\tclass=\"text-sm font-medium text-center text-gray-700 mb-2 whitespace-normal w-2/3 overflow-x-hidden text-ellipsis\"\n\t\t\t\t\t\t\t\t\t\t>{{ item.title }}</p\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">{{\n\t\t\t\t\t\t\t\t\t\tformatFileSize(item.typedFile.file.size)\n\t\t\t\t\t\t\t\t\t}}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('csv') {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-file-excel text-9xl text-green-500 mb-4\"></i>\n\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\tclass=\"text-sm font-medium text-center text-gray-700 mb-2 whitespace-normal w-2/3 overflow-x-hidden text-ellipsis\"\n\t\t\t\t\t\t\t\t\t\t>{{ item.title }}</p\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">{{\n\t\t\t\t\t\t\t\t\t\tformatFileSize(item.typedFile.file.size)\n\t\t\t\t\t\t\t\t\t}}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('xlsx') {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-file-excel text-9xl text-green-600 mb-4\"></i>\n\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\tclass=\"text-sm font-medium text-center text-gray-700 mb-2 whitespace-normal w-2/3 overflow-x-hidden text-ellipsis\"\n\t\t\t\t\t\t\t\t\t\t>{{ item.title }}</p\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">{{\n\t\t\t\t\t\t\t\t\t\tformatFileSize(item.typedFile.file.size)\n\t\t\t\t\t\t\t\t\t}}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@default {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-file text-9xl text-gray-500 mb-4\"></i>\n\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\tclass=\"text-sm font-medium text-center text-gray-700 mb-2 whitespace-normal w-2/3 overflow-x-hidden text-ellipsis\"\n\t\t\t\t\t\t\t\t\t\t>{{ item.title }}</p\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">{{\n\t\t\t\t\t\t\t\t\t\tformatFileSize(item.typedFile.file.size)\n\t\t\t\t\t\t\t\t\t}}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t<!-- Error Message Overlay -->\n\t\t\t\t\t\t@if (item.typedFile.error) {\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"absolute top-4 left-1/2 transform -translate-x-1/2 bg-red-500 text-white px-4 py-2 rounded-lg shadow-lg\">\n\t\t\t\t\t\t\t\t<i class=\"pi pi-exclamation-triangle mr-2\"></i>\n\t\t\t\t\t\t\t\t{{ item.typedFile.error }}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t<p-speedDial\n\t\t\t\t\t\t\t[model]=\"item.speedDialItems\"\n\t\t\t\t\t\t\tdirection=\"down\"\n\t\t\t\t\t\t\t[style]=\"{ position: 'absolute', left: '3rem', top: '3rem' }\"\n\t\t\t\t\t\t\tbuttonClassName=\"p-button-primary\"\n\t\t\t\t\t\t\tshowIcon=\"pi pi-ellipsis-v\"\n\t\t\t\t\t\t\thideIcon=\"pi pi-times\" />\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</ng-template>\n\n\t\t\t<ng-template pTemplate=\"thumbnail\" let-item>\n\t\t\t\t@if (item && item.type && !item.typedFile.error) {\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center p-2 border-b border-2 rounded-md\"\n\t\t\t\t\t\tstyle=\"width: 100px; height: 80px\">\n\t\t\t\t\t\t@switch (item.type) {\n\t\t\t\t\t\t\t@case ('image') {\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t[src]=\"item.thumbnailImageSrc\"\n\t\t\t\t\t\t\t\t\t[alt]=\"item.alt\"\n\t\t\t\t\t\t\t\t\tclass=\"max-w-full max-h-full object-cover rounded\" />\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('pdf') {\n\t\t\t\t\t\t\t\t<i class=\"pi pi-file-pdf text-3xl text-red-500\"></i>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('docx') {\n\t\t\t\t\t\t\t\t<i class=\"pi pi-file-word text-3xl text-blue-500\"></i>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('csv') {\n\t\t\t\t\t\t\t\t<i class=\"pi pi-file-excel text-3xl text-green-500\"></i>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('xlsx') {\n\t\t\t\t\t\t\t\t<i class=\"pi pi-file-excel text-3xl text-green-600\"></i>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@default {\n\t\t\t\t\t\t\t\t<i class=\"pi pi-file text-3xl text-gray-500\"></i>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<p class=\"text-xs text-gray-600 mt-1 truncate max-w-full text-center\">{{\n\t\t\t\t\t\t\titem.title\n\t\t\t\t\t\t}}</p>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</ng-template>\n\t\t</p-galleria>\n\t}\n</div>\n\n@if (isPdfViewerVisible) {\n\t<ngp-pdf-viewer-modal\n\t\t[visible]=\"isPdfViewerVisible\"\n\t\t[pdfFile]=\"currentFileUrl\"\n\t\t[filename]=\"currentFileUrl || 'untitled.pdf'\"\n\t\t(hide)=\"isPdfViewerVisible = false\" />\n}\n","export class PaginatedRequest {\r\n\tpage!: number;\r\n\tsize!: number;\r\n\tsort?: string | null;\r\n\t[key: string]: any;\r\n}\r\n\r\nexport interface PaginatedResponse<T> {\r\n\thasNextPage: boolean;\r\n\ttotalElements: number;\r\n\tresults: T[];\r\n\tcurrentPage: number;\r\n\tpageSize: number;\r\n}\r\n","import { computed, effect, inject, Injectable, Injector, signal, untracked } from '@angular/core';\r\nimport { catchError, finalize, Observable, of, shareReplay } from 'rxjs';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { PaginatedRequest, PaginatedResponse } from '../models/paginated.model';\r\nimport { ActionType, ApiOperations } from '../types/api-operations.type';\r\n\r\n@UntilDestroy()\r\n@Injectable()\r\nexport abstract class CrudAbstractComponent<\r\n\tT,\r\n\tCreateDto = Partial<T>,\r\n\tUpdateDto = Partial<T>,\r\n\tIdType = string | number\r\n> {\r\n\t// State signals\r\n\tprivate readonly sourceSignal = signal<Observable<T | T[]> | null>(null);\r\n\tprivate readonly loadingSignal = signal<boolean>(false);\r\n\tprivate readonly errorSignal = signal<Error | null>(null);\r\n\tprivate readonly actionSignal = signal<ActionType | null>(null);\r\n\tprivate readonly firstLoadSignal = signal<boolean>(true);\r\n\tprivate readonly showFormSignal = signal<boolean>(false);\r\n\tprivate readonly formActionSignal = signal<'Create' | 'Update' | 'View' | null>(null);\r\n\tprotected readonly dataSignal = signal<T | T[] | null>(null);\r\n\tprotected readonly entityNameSignal = signal<string>('Item');\r\n\r\n\tpublic filters = signal<Record<string, unknown> | null>(null);\r\n\tpublic tableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\r\n\tpublic requestParams = computed(() => ({\r\n\t\t...this.filters(),\r\n\t\t...this.tableParams()\r\n\t}));\r\n\r\n\t// Injections\r\n\tprivate readonly injector = inject(Injector);\r\n\r\n\t// Public interface\r\n\tpublic readonly data = this.dataSignal.asReadonly();\r\n\tpublic readonly isLoading = this.loadingSignal.asReadonly();\r\n\tpublic readonly error = this.errorSignal.asReadonly();\r\n\tpublic readonly currentAction = this.actionSignal.asReadonly();\r\n\tpublic readonly isFirstLoad = this.firstLoadSignal.asReadonly();\r\n\tpublic readonly formAction = this.formActionSignal.asReadonly();\r\n\r\n\tpublic readonly isFormVisible = computed(() => this.showFormSignal());\r\n\tpublic readonly safeDataSource = computed(() => {\r\n\t\tconst rawData = this.dataSignal();\r\n\t\tconst isLoading = this.loadingSignal();\r\n\r\n\t\tinterface Page<T> {\r\n\t\t\tresults: T[];\r\n\t\t\thasNextPage: boolean;\r\n\t\t\ttotalElements: number;\r\n\t\t\tpageSize: number;\r\n\t\t\tcurrentPage: number;\r\n\t\t}\r\n\r\n\t\t// Default empty response\r\n\t\tconst defaultResponse = {\r\n\t\t\thasNextPage: false,\r\n\t\t\ttotalElements: 0,\r\n\t\t\tresults: [] as T[],\r\n\t\t\tcurrentPage: 0,\r\n\t\t\tpageSize: 10\r\n\t\t};\r\n\r\n\t\tif (!rawData || isLoading) return defaultResponse;\r\n\r\n\t\tconst isPaginatedResponse = (obj: unknown): obj is Page<T> => {\r\n\t\t\treturn (\r\n\t\t\t\tobj !== null &&\r\n\t\t\t\ttypeof obj === 'object' &&\r\n\t\t\t\t'results' in obj &&\r\n\t\t\t\tArray.isArray(obj.results) &&\r\n\t\t\t\t'totalElements' in obj &&\r\n\t\t\t\ttypeof obj.totalElements === 'number'\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\t// Handler for Paginated Response\r\n\t\tif (typeof rawData === 'object' && isPaginatedResponse(rawData)) {\r\n\t\t\treturn {\r\n\t\t\t\tresults: [...rawData.results],\r\n\t\t\t\ttotalElements: rawData.totalElements,\r\n\t\t\t\tcurrentPage: rawData.currentPage,\r\n\t\t\t\tpageSize: rawData.pageSize,\r\n\t\t\t\thasNextPage: rawData.hasNextPage\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Handle array case\r\n\t\tif (Array.isArray(rawData)) {\r\n\t\t\treturn {\r\n\t\t\t\t...defaultResponse,\r\n\t\t\t\ttotalElements: rawData.length,\r\n\t\t\t\tresults: [...rawData],\r\n\t\t\t\tpageSize: rawData.length // For arrays, we typically return all elements\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Handle single object case\r\n\t\treturn {\r\n\t\t\t...defaultResponse,\r\n\t\t\ttotalElements: 1,\r\n\t\t\tresults: [rawData],\r\n\t\t\tpageSize: 1\r\n\t\t};\r\n\t});\r\n\r\n\tpublic readonly entityName = computed(() => this.entityNameSignal());\r\n\r\n\t/**\r\n\t * Provides direct access to raw list data without pagination wrapper\r\n\t * Returns an empty array if data is not available or not an array\r\n\t */\r\n\tpublic readonly rawList = computed<T[]>(() => {\r\n\t\tconst rawData = this.data();\r\n\r\n\t\tif (!rawData || this.isLoading()) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\t// If it's already an array, return it\r\n\t\tif (Array.isArray(rawData)) {\r\n\t\t\treturn [...rawData];\r\n\t\t}\r\n\r\n\t\t// If it's a paginated response with a results property that's an array\r\n\t\tif (typeof rawData === 'object' && 'results' in rawData && Array.isArray(rawData.results)) {\r\n\t\t\treturn [...rawData.results];\r\n\t\t}\r\n\r\n\t\t// If it's a single object, return it as an array with one item\r\n\t\tif (typeof rawData === 'object' && !('results' in rawData)) {\r\n\t\t\treturn [rawData as T];\r\n\t\t}\r\n\r\n\t\t// Default fallback\r\n\t\treturn [];\r\n\t});\r\n\r\n\t// Usage in your component:\r\n\t// const items = this.rawList();\r\n\r\n\t// Current operations state\r\n\tprivate currentOperations?: ApiOperations<T, CreateDto, UpdateDto, IdType>;\r\n\tprivate currentParams?: Record<string, unknown>;\r\n\r\n\t// Effect to handle Observable subscriptions\r\n\tprivate readonly dataEffect = effect(\r\n\t\t() => {\r\n\t\t\tconst obs = this.sourceSignal();\r\n\t\t\tif (!obs) {\r\n\t\t\t\tuntracked(() => this.dataSignal.set(null));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tuntracked(() => {\r\n\t\t\t\tthis.loadingSignal.set(true);\r\n\t\t\t\tthis.errorSignal.set(null);\r\n\r\n\t\t\t\tconst sub = obs\r\n\t\t\t\t\t.pipe(\r\n\t\t\t\t\t\tshareReplay(1),\r\n\t\t\t\t\t\tcatchError((err) => {\r\n\t\t\t\t\t\t\tthis.errorSignal.set(err);\r\n\t\t\t\t\t\t\treturn of(null);\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tfinalize(() => this.loadingSignal.set(false))\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.subscribe((value) => {\r\n\t\t\t\t\t\tthis.dataSignal.set(value);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\treturn () => sub.unsubscribe();\r\n\t\t\t});\r\n\t\t},\r\n\t\t{ injector: this.injector }\r\n\t);\r\n\r\n\t/**\r\n\t * Initialize with dynamic service operations\r\n\t */\r\n\tprotected initService(operations: ApiOperations<T, CreateDto, UpdateDto, IdType>): void {\r\n\t\tthis.currentOperations = operations;\r\n\t}\r\n\r\n\t/**\r\n\t * GET data\r\n\t */\r\n\tprotected loadData(params?: Record<string, unknown>): void {\r\n\t\tif (!this.currentOperations?.get) return;\r\n\r\n\t\tthis.executeOperation('get', () => this.currentOperations!.get!(params), params);\r\n\r\n\t\tthis.firstLoadSignal.set(false);\r\n\t}\r\n\r\n\t/**\r\n\t * GET data by ID\r\n\t */\r\n\tprotected getById(\r\n\t\tid: IdType,\r\n\t\tparams?: Record<string, unknown>\r\n\t): Observable<T | T[] | PaginatedResponse<T> | null> {\r\n\t\tif (!this.currentOperations?.getById) return of(null);\r\n\r\n\t\treturn this.executeOperation('get', () => this.currentOperations!.getById!(id, params));\r\n\t}\r\n\r\n\t/**\r\n\t * CREATE data\r\n\t */\r\n\tprotected createData(data: CreateDto): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.create) return of(null);\r\n\r\n\t\treturn this.executeOperation('create', () => this.currentOperations!.create!(data));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE data\r\n\t */\r\n\tprotected updateData(data: UpdateDto): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.update) return of(null);\r\n\r\n\t\treturn this.executeOperation('update', () => this.currentOperations!.update!(data));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE data by ID\r\n\t */\r\n\tprotected updateById(id: IdType, data: Partial<UpdateDto>): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.updateById) return of(null);\r\n\r\n\t\treturn this.executeOperation('updateById', () => this.currentOperations!.updateById!(id, data));\r\n\t}\r\n\r\n\t/**\r\n\t * DELETE data\r\n\t */\r\n\tprotected deleteData(id: IdType): Observable<void | null> {\r\n\t\tif (!this.currentOperations?.delete) return of(null);\r\n\r\n\t\treturn this.executeOperation('delete', () => this.currentOperations!.delete!(id));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE status\r\n\t */\r\n\tprotected updateStatus(id: IdType, status: boolean): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.updateStatus) return of(null);\r\n\r\n\t\treturn this.executeOperation(\r\n\t\t\t'update', // You can reuse 'update' action or add a new one like 'updateStatus'\r\n\t\t\t() => this.currentOperations!.updateStatus!(id, status)\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * SHOW/HIDE form\r\n\t * @param show Whether to show or hide the form\r\n\t */\r\n\tprotected showForm(show: boolean): void {\r\n\t\tthis.showFormSignal.set(show);\r\n\t}\r\n\r\n\t/**\r\n\t * Update form action (create/edit)\r\n\t * @param action The action to set for the form\r\n\t */\r\n\tprotected updateFormAction(action: string): void {\r\n\t\tthis.formActionSignal.set(action as 'Create' | 'Update' | null);\r\n\t}\r\n\r\n\t/**\r\n\t * Shared operation execution logic\r\n\t */\r\n\tprivate executeOperation<R>(\r\n\t\taction: ActionType,\r\n\t\toperation: () => Observable<R>,\r\n\t\tparams?: Record<string, unknown>\r\n\t): Observable<R | null> {\r\n\t\tthis.errorSignal.set(null);\r\n\t\tthis.loadingSignal.set(true);\r\n\t\tthis.actionSignal.set(action);\r\n\r\n\t\tif (action === 'get') {\r\n\t\t\tthis.currentParams = params;\r\n\t\t}\r\n\r\n\t\tconst operation$ = operation().pipe(\r\n\t\t\tuntilDestroyed(this),\r\n\t\t\tcatchError((err) => {\r\n\t\t\t\tthis.errorSignal.set(err);\r\n\t\t\t\treturn of(null);\r\n\t\t\t}),\r\n\t\t\tfinalize(() => {\r\n\t\t\t\tthis.loadingSignal.set(false);\r\n\t\t\t\tthis.actionSignal.set(null);\r\n\t\t\t}),\r\n\t\t\tshareReplay(1)\r\n\t\t);\r\n\r\n\t\tif (action === 'get') {\r\n\t\t\tthis.sourceSignal.set(operation$ as Observable<T | T[]>);\r\n\t\t} else {\r\n\t\t\toperation$.subscribe(() => {\r\n\t\t\t\tif (this.currentOperations?.get) {\r\n\t\t\t\t\tthis.refresh();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn operation$;\r\n\t}\r\n\r\n\t/**\r\n\t * Refresh current data\r\n\t */\r\n\tprotected refresh(): void {\r\n\t\tif (this.currentOperations?.get && this.currentParams) {\r\n\t\t\tthis.loadData(this.currentParams);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic setEntityName(name: string): void {\r\n\t\tthis.entityNameSignal.set(name);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PaginatedResponse } from '../../models/paginated.model';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class HelperService {\r\n\ttransformEmployeeResponse = (res: PaginatedResponse<any>) => ({\r\n\t\t...res,\r\n\t\tresults: res.results.map((e) => ({\r\n\t\t\t...e,\r\n\t\t\tfullName: [e.name.givenName, e.name.middleName, e.name.familyName]\r\n\t\t\t\t.filter((part) => part)\r\n\t\t\t\t.join(' ')\r\n\t\t\t\t.trim()\r\n\t\t\t\t.concat(e?.company?.name ? ` (${e.company.name})` : '')\r\n\t\t}))\r\n\t});\r\n\r\n\ttransformEmployeeWithJob = (res: PaginatedResponse<any>) => ({\r\n\t\t...res,\r\n\t\tresults: res.results.map((e) => ({\r\n\t\t\t...e,\r\n\t\t\tfullName: [e.name.givenName, e.name.middleName, e.name.familyName]\r\n\t\t\t\t.filter((part) => part)\r\n\t\t\t\t.join(' ')\r\n\t\t\t\t.trim()\r\n\t\t\t\t.concat(e?.jobDesignation?.jobTitle ? ` (${e.jobDesignation.jobTitle})` : '')\r\n\t\t}))\r\n\t});\r\n\r\n\ttransformPayloadWithAddress = <T extends Record<string, any>>(payload: T): T => {\r\n\t\tconst transformedPayload = { ...payload } as Record<string, any>;\r\n\r\n\t\tif (transformedPayload['address']) {\r\n\t\t\tconst address = { ...transformedPayload['address'] };\r\n\r\n\t\t\t// Helper function to extract name from address field\r\n\t\t\tconst extractName = (field: unknown): string | undefined => {\r\n\t\t\t\tif (!field) return undefined;\r\n\t\t\t\tif (typeof field === 'string') return field;\r\n\t\t\t\tif (typeof field === 'object' && field !== null && 'name' in field) {\r\n\t\t\t\t\treturn (field as Record<string, any>)['name'];\r\n\t\t\t\t}\r\n\t\t\t\treturn undefined;\r\n\t\t\t};\r\n\r\n\t\t\taddress.province = extractName(address.province);\r\n\t\t\taddress.city = extractName(address.city);\r\n\t\t\taddress.barangay = extractName(address.barangay);\r\n\r\n\t\t\ttransformedPayload['address'] = address;\r\n\t\t}\r\n\r\n\t\treturn transformedPayload as T;\r\n\t};\r\n\r\n\tgenerateRandomHexColor(): string {\r\n\t\tconst randomInt = Math.floor(Math.random() * 0xffffff);\r\n\t\treturn `#${randomInt.toString(16).padStart(6, '0')}`;\r\n\t}\r\n}\r\n","// Components\r\nexport * from './lib/components/empty/empty.component';\r\nexport * from './lib/components/file-upload/file-upload.component';\r\nexport * from './lib/components/form-field-wrapper/form-field-wrapper.component';\r\nexport * from './lib/components/select/ng-select/basic/basic-ng-select.component';\r\nexport * from './lib/components/fg-address/fg-address.component';\r\nexport * from './lib/components/dataview/table/data-table.component';\r\nexport * from './lib/components/select/ng-select/dynamic/dynamic-select.component';\r\nexport * from './lib/components/drawer/dynamic-drawer.component';\r\nexport * from './lib/components/date-clock/date-clock.component';\r\nexport * from './lib/components/dynamic-file-upload/dynamic-file-upload.component';\r\nexport * from './lib/components/pdf-viewer/pdf-viewer-modal.component';\r\nexport * from './lib/components/file-viewer/file-upload-viewer.component';\r\n\r\n// Models\r\nexport * from './lib/models/common.model';\r\nexport * from './lib/models/address.model';\r\nexport * from './lib/models/table-column.model';\r\nexport * from './lib/models/paginated.model';\r\nexport * from './lib/models/file-type.model';\r\n\r\n// Types\r\nexport * from './lib/types/api-operations.type';\r\n\r\n// Class\r\nexport * from './lib/classes/crud-abstract.class';\r\n\r\n// Services\r\nexport * from './lib/services/helper/helper.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","i5","i4","i6"],"mappings":"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wBACZ,eAAe;wBACf,mBAAmB;wBACnB,YAAY;wBACZ,aAAa;wBACb,WAAW;wBACX,aAAa;wBACb,cAAc;wBACd;AACA,qBAAA,EAAA,SAAA,EAGU,CAAC,mBAAmB,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,gyPAAA,EAAA;;sBA8D/C,YAAY;uBAAC,cAAc;;sBAC3B,SAAS;uBAAC,IAAI;;;AE9GhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;A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"}
|
|
1
|
+
{"version":3,"file":"winexist-ngp.mjs","sources":["../../../packages/src/lib/components/empty/empty.component.ts","../../../packages/src/lib/components/empty/empty.component.html","../../../packages/src/lib/components/file-upload/file-upload.component.ts","../../../packages/src/lib/components/file-upload/file-upload.component.html","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.ts","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.html","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.ts","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.html","../../../packages/src/lib/services/address/address.service.ts","../../../packages/src/lib/components/fg-address/fg-address.component.ts","../../../packages/src/lib/components/fg-address/fg-address.component.html","../../../packages/src/lib/components/dataview/table/data-table.component.ts","../../../packages/src/lib/components/dataview/table/data-table.component.html","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.ts","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.html","../../../packages/src/lib/components/drawer/dynamic-drawer.component.ts","../../../packages/src/lib/components/drawer/dynamic-drawer.component.html","../../../packages/src/lib/components/date-clock/date-clock.component.ts","../../../packages/src/lib/components/date-clock/date-clock.component.html","../../../packages/src/lib/components/dynamic-file-upload/dynamic-file-upload.component.ts","../../../packages/src/lib/components/dynamic-file-upload/dynamic-file-upload.component.html","../../../packages/src/lib/components/pdf-viewer/pdf-viewer-modal.component.ts","../../../packages/src/lib/components/pdf-viewer/pdf-viewer-modal.component.html","../../../packages/src/lib/components/file-viewer/file-upload-viewer.component.ts","../../../packages/src/lib/components/file-viewer/file-upload-viewer.component.html","../../../packages/src/lib/models/paginated.model.ts","../../../packages/src/lib/classes/crud-abstract.class.ts","../../../packages/src/lib/services/helper/helper.service.ts","../../../packages/src/index.ts","../../../packages/src/winexist-ngp.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'ngp-empty',\r\n\timports: [],\r\n\ttemplateUrl: './empty.component.html',\r\n\tstyleUrl: './empty.component.css'\r\n})\r\nexport class EmptyComponent {\r\n\ttitle = input<string>('Section is empty.');\r\n\tmessage = input<string>('No data available.');\r\n\timgSrc = input<string>();\r\n\r\n}\r\n","<div class=\"w-full flex justify-center items-center p-5 h-full\">\r\n <div class=\"flex items-center gap-3\">\r\n @if (imgSrc()) {\r\n <img alt=\"Empty\" [src]=\"imgSrc()\" class=\"w-[80px]\" />\r\n } @else {\r\n <div class=\"!rounded-md p-5 !bg-slate-100 mb-6\">\r\n <span class=\"material-icons !text-gray-400 !text-7xl\"> search_off </span>\r\n </div>\r\n }\r\n\r\n <div class=\"flex flex-col\">\r\n <span class=\"!text-gray-900 !text-2xl !font-bold\">{{ title() }}</span>\r\n @if (message()) {\r\n <span class=\"!text-gray-400 !text-base\">{{ message() }}</span>\r\n }\r\n </div>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport {\r\n\tComponent,\r\n\teffect,\r\n\tElementRef,\r\n\tinput,\r\n\tOnDestroy,\r\n\toutput,\r\n\tsignal,\r\n\tViewChild\r\n} from '@angular/core';\r\nimport { FileSelectEvent, FileUploadModule } from 'primeng/fileupload';\r\n\r\n// Add interface for typed files\r\ninterface TypedFile extends File {\r\n\tfileType?: 'image' | 'pdf' | 'other';\r\n}\r\n\r\n@Component({\r\n\tselector: 'ngp-file-upload',\r\n\timports: [FileUploadModule, CommonModule],\r\n\ttemplateUrl: './file-upload.component.html',\r\n\tstyleUrl: './file-upload.component.css'\r\n})\r\nexport class FileUploadComponent implements OnDestroy {\r\n\t@ViewChild('fileUploader') fileUploader!: ElementRef;\r\n\r\n\t// Signal-based inputs with defaults\r\n\tfiles = input<File[]>([]);\r\n\tmultiple = input(true);\r\n\taccept = input('.pdf,.png,.jpg,.jpeg,.doc,.docx,.csv,.xls,.xlsx');\r\n\tmaxFileSize = input(2097152); // 2MB in bytes\r\n\tplaceholder = input('Drag and drop new files here to upload.');\r\n\tshowUploadButton = input<boolean>(false);\r\n\tcancelLabel = input('Clear');\r\n\r\n\t// Signal-based outputs\r\n\tfilesSelected = output<File[]>();\r\n\tfilesCleared = output<void>();\r\n\r\n\t// Internal state\r\n\tuploadedFiles = signal<TypedFile[]>([]);\r\n\r\n\tconstructor() {\r\n\t\teffect(() => {\r\n\t\t\tconst _files = this.files();\r\n\t\t\tif (_files?.length) {\r\n\t\t\t\t// Convert parent's files to typed files\r\n\t\t\t\tconst typedFiles = _files.map((file) => this.addFileType(file));\r\n\t\t\t\tthis.uploadedFiles.set(typedFiles);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tonFileSelect(event: FileSelectEvent) {\r\n\t\tconst validFiles = event.currentFiles.filter(\r\n\t\t\t(file) => file.size <= this.maxFileSize() && this.isValidFileType(file)\r\n\t\t);\r\n\r\n\t\tif (validFiles.length) {\r\n\t\t\t// Add type to files before adding to uploadedFiles\r\n\t\t\tconst typedFiles = validFiles.map((file) => this.addFileType(file));\r\n\r\n\t\t\tlet newFiles: TypedFile[];\r\n\t\t\tif (this.multiple()) {\r\n\t\t\t\t// Combine existing files with new files, avoiding duplicates\r\n\t\t\t\tconst existingFiles = this.uploadedFiles();\r\n\t\t\t\tconst combinedFiles = [...existingFiles, ...typedFiles];\r\n\t\t\t\t// Remove duplicates based on file name and size\r\n\t\t\t\tnewFiles = Array.from(\r\n\t\t\t\t\tnew Map(combinedFiles.map((file) => [`${file.name}-${file.size}`, file])).values()\r\n\t\t\t\t);\r\n\t\t\t\tthis.uploadedFiles.set(newFiles);\r\n\t\t\t} else {\r\n\t\t\t\tnewFiles = typedFiles;\r\n\t\t\t\tthis.uploadedFiles.set(newFiles);\r\n\t\t\t}\r\n\r\n\t\t\t// Emit ALL files (not just new ones)\r\n\t\t\tthis.filesSelected.emit(this.uploadedFiles());\r\n\t\t}\r\n\t}\r\n\r\n\tonClear() {\r\n\t\tthis.uploadedFiles.set([]);\r\n\t\tthis.filesCleared.emit();\r\n\t\t// Also emit empty array to parent\r\n\t\tthis.filesSelected.emit([]);\r\n\t}\r\n\r\n\tremoveFile(index: number) {\r\n\t\tconst currentFiles = this.uploadedFiles();\r\n\t\tconst newFiles = currentFiles.filter((_, i) => i !== index);\r\n\t\tthis.uploadedFiles.set(newFiles);\r\n\t\t// Emit updated files to parent\r\n\t\tthis.filesSelected.emit(newFiles);\r\n\t}\r\n\r\n\tisValidFileType(file: File): boolean {\r\n\t\tconst acceptedTypes = this.accept().split(',');\r\n\t\treturn acceptedTypes.some((type) =>\r\n\t\t\tfile.name.toLowerCase().endsWith(type.trim().toLowerCase())\r\n\t\t);\r\n\t}\r\n\r\n\tformatFileSize(bytes: number): string {\r\n\t\tif (bytes === 0) return '0 Bytes';\r\n\t\tconst k = 1024;\r\n\t\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\t\treturn Number.parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\r\n\t}\r\n\r\n\tclear() {\r\n\t\tthis.uploadedFiles.set([]);\r\n\t\tif (this.fileUploader?.nativeElement?.clear) {\r\n\t\t\tthis.fileUploader.nativeElement.clear();\r\n\t\t}\r\n\t\t// Emit empty array to parent\r\n\t\tthis.filesSelected.emit([]);\r\n\t}\r\n\r\n\t// Function to determine file type based on extension\r\n\tgetFileTypeByExtension(file: File): 'image' | 'pdf' | 'other' {\r\n\t\tconst fileName = file.name.toLowerCase();\r\n\t\tconst imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.svg', '.webp'];\r\n\t\tconst pdfExtension = '.pdf';\r\n\r\n\t\tif (imageExtensions.some((ext) => fileName.endsWith(ext))) {\r\n\t\t\treturn 'image';\r\n\t\t} else if (fileName.endsWith(pdfExtension)) {\r\n\t\t\treturn 'pdf';\r\n\t\t} else {\r\n\t\t\treturn 'other';\r\n\t\t}\r\n\t}\r\n\r\n\t// Function to add type property to file\r\n\taddFileType(file: File): TypedFile {\r\n\t\t// Check if file already has fileType property\r\n\t\tconst typedFile = file as TypedFile;\r\n\t\tif (!typedFile.fileType) {\r\n\t\t\ttypedFile.fileType = this.getFileTypeByExtension(file);\r\n\t\t}\r\n\t\treturn typedFile;\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (this.uploadedFiles().length > 0) {\r\n\t\t\tthis.filesSelected.emit(this.uploadedFiles());\r\n\t\t}\r\n\t}\r\n}\r\n","<p-fileupload\r\n\t#fileUploader\r\n\t[multiple]=\"multiple()\"\r\n\t[showUploadButton]=\"showUploadButton()\"\r\n\t[cancelLabel]=\"cancelLabel()\"\r\n\t[accept]=\"accept()\"\r\n\tauto=\"false\"\r\n\t[maxFileSize]=\"maxFileSize()\"\r\n\tmode=\"advanced\"\r\n\t[customUpload]=\"true\"\r\n\tstyleClass=\"!bg-gray-50\"\r\n\t(onSelect)=\"onFileSelect($event)\"\r\n\t(onClear)=\"onClear()\">\r\n\t<ng-template #content>\r\n\t\t@if (uploadedFiles().length) {\r\n\t\t\t<ul class=\"space-y-2\">\r\n\t\t\t\t@for (file of uploadedFiles(); track $index) {\r\n\t\t\t\t\t<li class=\"flex justify-between gap-4 p-2 bg-gray-100 rounded\">\r\n\t\t\t\t\t\t<div class=\"flex gap-2\">\r\n\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"iconTemplate\"\r\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: file.fileType }\"></ng-container>\r\n\t\t\t\t\t\t\t<span class=\"text-sm\"> {{ file.name }} - {{ formatFileSize(file.size) }} </span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t(click)=\"removeFile($index)\"\r\n\t\t\t\t\t\t\tclass=\"text-red-500 hover:text-red-700 text-sm\">\r\n\t\t\t\t\t\t\t<span class=\"material-icons !text-base\"> cancel </span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t}\r\n\t\t\t</ul>\r\n\t\t} @else {\r\n\t\t\t<div class=\"flex flex-col items-center gap-3\">\r\n\t\t\t\t<div class=\"w-28 mx-auto\">\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\r\n\t\t\t\t\t\tviewBox=\"0 0 855.42518 833.48708\"\r\n\t\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n\t\t\t\t\t\trole=\"img\"\r\n\t\t\t\t\t\tartist=\"Katerina Limpitsouni\"\r\n\t\t\t\t\t\tsource=\"https://undraw.co/\">\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M739.66209,831.96985H93.28238c-26.55003,0-48.15129-21.60126-48.15129-48.15277V219.36774c0-26.55003,21.60126-48.15129,48.15129-48.15129h646.37972c26.55151,0,48.15277,21.60126,48.15277,48.15129v564.44933c0,26.55151-21.60126,48.15277-48.15277,48.15277Z\"\r\n\t\t\t\t\t\t\tfill=\"#fff\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M739.66209,833.48708H93.28238c-27.38718,0-49.66852-22.28134-49.66852-49.67V219.36774c0-27.38718,22.28134-49.66852,49.66852-49.66852h646.37972c27.38866,0,49.67,22.28134,49.67,49.66852v564.44933c0,27.38866-22.28134,49.67-49.67,49.67ZM93.28238,172.73368c-25.71437,0-46.63406,20.91969-46.63406,46.63406v564.44933c0,25.71437,20.91969,46.63554,46.63406,46.63554h646.37972c25.71437,0,46.63554-20.92117,46.63554-46.63554V219.36774c0-25.71437-20.92117-46.63406-46.63554-46.63406H93.28238Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M633.05154,719.69635H199.12394c-11.29477,0-20.4826-9.18783-20.4826-20.4826,0-5.46736,2.13212-10.60875,6.00372-14.47887,3.8553-3.8716,8.99818-6.00372,14.47887-6.00372h433.9276c11.29477,0,20.4826,9.18783,20.4826,20.4826,0,5.46736-2.13212,10.61023-6.00224,14.48035-3.85382,3.87012-8.9967,6.00224-14.48035,6.00224Z\"\r\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M537.46609,699.2145c0,5.44736-2.2151,10.37835-5.77999,13.94325-3.56638,3.56564-8.49737,5.78073-13.94399,5.78073H199.12394c-10.89323,0-19.72398-8.83001-19.72398-19.72398,0-5.44662,2.2151-10.37761,5.78147-13.94325,3.5649-3.58045,8.49589-5.78073,13.94251-5.78073h318.61817c10.89323,0,19.72398,8.83075,19.72398,19.72398Z\"\r\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M502.03197,638.5231h-176.42977c-15.3575,0-27.85242-12.49492-27.85242-27.8539v-231.05003c0-15.3575,12.49492-27.85242,27.85242-27.85242l133.30727.7601,70.9764,76.68824v181.45411c0,15.35898-12.49492,27.8539-27.8539,27.8539Z\"\r\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M414.57644,442.63753h-67.53893c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h67.53893c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M481.04412,483.00709h-134.74301c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.74301c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M481.04412,520.48592h-134.00662c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.00662c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M380.80771,558.65075h-34.5066c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h34.5066c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M529.12726,431.03013h-68.71093c-7.70172,0-13.9677-6.26598-13.9677-13.9677v-64.53707h3.03446v64.53707c0,6.02891,4.90433,10.93324,10.93324,10.93324h68.71093v3.03446Z\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M416.11441,658.24708c-13.64025,0-24.73795-11.0977-24.73795-24.73795v-23.81339h-16.74138c-3.49674,0-6.62751-1.9484-8.17289-5.08509s-1.18089-6.80531.94975-9.57751l42.1283-54.79658c1.71133-2.22399,4.30869-3.50267,7.1046-3.45673,2.8048.02667,5.36957,1.33647,7.03645,3.59305l41.1667,55.72855c2.13805,2.8937,2.45957,6.68826.83862,9.902-1.62243,3.21374-4.8658,5.20955-8.46478,5.20955h-16.36948v22.29616c0,13.64025-11.0977,24.73795-24.73795,24.73795Z\"\r\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t\t<circle cx=\"560.98874\" cy=\"420.8005\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"581.47134\" cy=\"479.21383\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"259.81871\" cy=\"436.73141\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"264.3704\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"259.81871\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"560.23012\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<circle cx=\"560.23012\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M37.40122,152.42148c-6.44526,0-12.11265-4.61836-13.35132-11.0088L.24984,18.65638c-.76454-3.9442.24448-7.99953,2.76776-11.12585,2.5218-3.12484,6.27191-4.96804,10.28871-5.05397L128.31645.00364c6.71641-.15261,12.40898,4.50872,13.65062,11.06214l22.55693,119.0462c.72898,3.85234-.23855,7.83062-2.65811,10.91694-2.41808,3.08484-6.04966,4.97693-9.96274,5.18881l-113.76701,6.18301c-.24596.01334-.49191.02074-.73491.02074Z\"\r\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<polygon\r\n\t\t\t\t\t\t\tpoints=\"29.95846 132.52692 54.99274 65.01021 96.71655 96.11341 110.37162 82.45835 158.16434 131.7683 29.95846 132.52692\"\r\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M107.33749,58.94148c-6.27487,0-11.37922-5.10435-11.37922-11.37922s5.10435-11.37922,11.37922-11.37922,11.37922,5.10435,11.37922,11.37922-5.10435,11.37922-11.37922,11.37922Z\"\r\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M41.65954,616.11285c-3.58564,0-7.09275-1.04902-10.16129-3.07891-4.19312-2.77665-7.02163-7.02608-7.96101-11.96596L.5521,480.25267c-1.87135-9.84125,4.31462-19.28244,14.08327-21.49309l102.97009-23.32444c4.88655-1.10384,9.89162-.22077,14.09957,2.48772,4.2109,2.71145,7.08682,6.90606,8.0988,11.8089l25.05355,121.36946c2.04174,9.89014-4.32647,19.67509-14.19439,21.81462l-105.03998,22.76881c-1.31869.28596-2.64626.4282-3.96347.4282Z\"\r\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M33.74594,507.28424c-2.50698,0-4.7369-1.78245-5.21399-4.33685-.53933-2.88333,1.36165-5.65701,4.24498-6.19486l83.24611-15.5516c2.88185-.54674,5.65553,1.36165,6.19486,4.24498s-1.36165,5.65701-4.24498,6.19486l-83.24611,15.5516c-.32893.06223-.65786.09186-.98087.09186Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M41.33357,539.14606c-2.40327,0-4.57984-1.64169-5.16214-4.082-.6786-2.85221,1.0831-5.71628,3.9368-6.39637l78.36253-18.65866c2.85073-.67564,5.7148,1.0831,6.39637,3.9368.6786,2.85221-1.0831,5.71628-3.9368,6.39637l-78.36253,18.65866c-.41339.09779-.82677.1452-1.23423.1452Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M46.64239,569.97367c-2.45513,0-4.65985-1.71281-5.18881-4.2109-.60748-2.86999,1.22534-5.68813,4.09385-6.29561l53.46159-11.32144c2.88481-.606,5.68961,1.22534,6.29561,4.09385.60748,2.86999-1.22534,5.68813-4.09385,6.29561l-53.46159,11.32144c-.3719.07853-.74232.11705-1.10681.11705Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M816.49406,244.42277c-.94382,0-1.89802-.07408-2.85666-.22373l-106.17939-16.65841c-4.96952-.78084-9.30785-3.46859-12.21785-7.57133-2.91-4.10126-4.01384-9.0856-3.10854-14.03141l22.15096-120.97089c1.80764-9.8531,10.97472-16.41097,20.89006-14.96634l104.45028,15.39603c4.95322.73046,9.30488,3.36191,12.25192,7.40983,2.94852,4.04644,4.11756,8.99521,3.29227,13.93362l-20.42185,122.23475c-1.50241,9.00262-9.38341,15.44788-18.2512,15.44788Z\"\r\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M820.66792,138.04188c-.323,0-.65045-.02963-.97938-.09186l-83.25204-15.52938c-2.88333-.53785-4.78431-3.31005-4.24646-6.19338.53636-2.88333,3.30264-4.79616,6.19338-4.24646l83.25204,15.52938c2.88333.53785,4.78431,3.31005,4.24646,6.19338-.47562,2.5544-2.70701,4.33833-5.21399,4.33833Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M812.81507,165.83355c-.24003,0-.48006-.01482-.72454-.0489l-79.81753-10.86953c-2.90555-.39561-4.93989-3.0715-4.54428-5.97854.39709-2.90704,3.08187-4.94285,5.97854-4.54428l79.81753,10.86953c2.90555.39561,4.93989,3.0715,4.54428,5.97854-.36301,2.66256-2.64033,4.59317-5.254,4.59317Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\td=\"M780.77249,194.36309c-.28152,0-.56748-.02371-.85492-.06964l-53.9461-8.73c-2.89518-.46821-4.86136-3.19596-4.39315-6.09114.46969-2.89518,3.17818-4.85543,6.09114-4.39315l53.9461,8.73c2.89518.46821,4.86136,3.19596,4.39315,6.09114-.42228,2.60774-2.67589,4.46279-5.23622,4.46279Z\"\r\n\t\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</div>\r\n\t\t\t\t<span class=\"font-semibold text-center text-gray-400 text-sm\">\r\n\t\t\t\t\tDrag & drop or<br />\r\n\t\t\t\t\tclick the \"Choose\" button to add new files\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t}\r\n\t</ng-template>\r\n\t<ng-template #file></ng-template>\r\n</p-fileupload>\r\n\r\n<ng-template #iconTemplate let-type>\r\n\t@if (type === 'image') {\r\n\t\t<span class=\"material-icons\"> image </span>\r\n\t} @else if (type === 'pdf') {\r\n\t\t<span class=\"material-icons\"> picture_as_pdf </span>\r\n\t} @else {\r\n\t\t<span class=\"material-icons\"> insert_drive_file </span>\r\n\t}\r\n</ng-template>\r\n","// form-field-wrapper.component.ts\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, ContentChild, Input, AfterContentInit, OnDestroy } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { MessageModule } from 'primeng/message';\r\n\r\n@Component({\r\n\tselector: 'ngp-form-field-wrapper',\r\n\tstandalone: true,\r\n\timports: [CommonModule, MessageModule],\r\n\ttemplateUrl: './form-field-wrapper.component.html',\r\n\tstyleUrls: ['./form-field-wrapper.component.scss']\r\n})\r\nexport class FormFieldWrapperComponent implements AfterContentInit, OnDestroy {\r\n\t@Input() validationMessages: { [key: string]: string } = {\r\n\t\trequired: 'This field is required',\r\n\t\temail: 'Please enter a valid email',\r\n\t\tminlength: 'Input does not meet minimum length',\r\n\t\tmaxlength: 'Input exceeds maximum length',\r\n\t\tpattern: 'Input format is invalid',\r\n\t\tendTimeBeforeStartTime: 'End time must not be before start time',\r\n\t\tbreakStartBeforeEarliestStart: 'Break start time cannot be before the earliest start time'\r\n\t};\r\n\r\n\t@ContentChild(NgControl) control?: NgControl;\r\n\r\n\tprivate subscription?: Subscription;\r\n\r\n\tngAfterContentInit(): void {\r\n\t\tif (this.control) {\r\n\t\t\tthis.subscription = this.control.statusChanges?.subscribe(() => { });\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscription?.unsubscribe();\r\n\t}\r\n\r\n\tshouldShowError(): boolean {\r\n\t\treturn (\r\n\t\t\t!!this.control &&\r\n\t\t\tthis.control.invalid === true &&\r\n\t\t\t(this.control.dirty === true || this.control.touched === true)\r\n\t\t);\r\n\t}\r\n\r\n\tgetErrorMessage(): string {\r\n\t\tif (!this.control?.errors) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tconst firstErrorKey = Object.keys(this.control.errors)[0];\r\n\t\tconst error = this.control.errors[firstErrorKey];\r\n\r\n\t\tif (this.control.errors['message']) {\r\n\t\t\treturn this.control.errors['message'];\r\n\t\t}\r\n\t\tif (error?.message) {\r\n\t\t\treturn error.message;\r\n\t\t}\r\n\r\n\t\treturn this.validationMessages[firstErrorKey] || `Invalid input: ${firstErrorKey}`;\r\n\t}\r\n}\r\n","<div class=\"form-field-container\">\r\n <ng-content></ng-content>\r\n @if (shouldShowError()) {\r\n <p-message severity=\"error\" variant=\"simple\" size=\"small\" [text]=\"getErrorMessage()\">\r\n </p-message>\r\n }\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { FormFieldWrapperComponent } from '../../../form-field-wrapper/form-field-wrapper.component';\r\nimport { FloatLabelModule } from 'primeng/floatlabel'\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner'\r\n\r\ntype SelectValue<T> = T | T[];\r\ntype SelectValueOrNull<T> = SelectValue<T> | null;\r\n\r\n@Component({\r\n\tselector: 'ngp-basic-select',\r\n\timports: [NgSelectModule, FormsModule, CommonModule, FormFieldWrapperComponent, FloatLabelModule, ProgressSpinnerModule],\r\n\ttemplateUrl: './basic-ng-select.component.html',\r\n\tstyleUrl: './basic-ng-select.component.scss',\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => BasicNgSelectComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class BasicNgSelectComponent<T = any> implements ControlValueAccessor {\r\n\toptions = input<T[]>([]);\r\n\tbindLabel = input<string>('');\r\n\tbindValue = input<string>('');\r\n\tplaceholder = input<string>('Select an option');\r\n\tclearable = input<boolean>(true);\r\n\tsearchable = input<boolean>(true);\r\n\tloading = input<boolean>(false);\r\n\tlabel = input<string | null>(null);\r\n\trequired = input<boolean>(true);\r\n\r\n\t// Internal state\r\n\tvalue: SelectValueOrNull<T> = null;\r\n\tdisabled = false;\r\n\r\n\t// ControlValueAccessor callbacks\r\n\tprivate onChange: (value: SelectValueOrNull<T>) => void = () => { };\r\n\tonTouched: () => void = () => { };\r\n\r\n\t// Handle value changes from ng-select\r\n\tonValueChange(value: SelectValueOrNull<T>): void {\r\n\t\tthis.value = value;\r\n\t\tthis.onChange(value);\r\n\t}\r\n\r\n\twriteValue(val: SelectValueOrNull<T>): void {\r\n\t\tthis.value = val;\r\n\t}\r\n\r\n\tregisterOnChange(fn: (val: SelectValueOrNull<T>) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState?(isDisabled: boolean): void {\r\n\t\tthis.disabled = isDisabled;\r\n\t}\r\n\r\n\t// Compare function for ng-select\r\n\tcompareWith = (item: any, selected: any) => {\r\n\t\tconst bindValueKey = this.bindValue();\r\n\r\n\t\t// If no bindValue is set, compare entire objects\r\n\t\tif (!bindValueKey) {\r\n\t\t\treturn item === selected;\r\n\t\t}\r\n\r\n\t\t// Handle null/undefined cases\r\n\t\tif (!item || !selected) {\r\n\t\t\treturn item === selected;\r\n\t\t}\r\n\r\n\t\t// If selected is a primitive (just the id), compare with item's property\r\n\t\tif (typeof selected !== 'object') {\r\n\t\t\treturn item[bindValueKey] === selected;\r\n\t\t}\r\n\r\n\t\t// If both are objects, compare the bindValue property\r\n\t\treturn item[bindValueKey] === selected[bindValueKey];\r\n\t};\r\n}\r\n","<ngp-form-field-wrapper>\r\n <p-floatlabel variant=\"in\">\r\n <ng-select [(ngModel)]=\"value\" [bindLabel]=\"bindLabel()\" [bindValue]=\"bindValue()\" [items]=\"options()\"\r\n [compareWith]=\"compareWith\" [clearable]=\"clearable()\" (change)=\"onValueChange($event)\">\r\n <ng-template ng-loadingspinner-tmp>\r\n <ng-container [ngTemplateOutlet]=\"spinner\" />\r\n </ng-template>\r\n </ng-select>\r\n\r\n @if (label()) {\r\n <label class=\"block mb-2\" [ngClass]=\"{'required-label': required() }\">{{ label() }}</label>\r\n }\r\n </p-floatlabel>\r\n</ngp-form-field-wrapper>\r\n\r\n<ng-template #spinner>\r\n <p-progress-spinner ariaLabel=\"loading\" styleClass=\"text-gray-400\" />\r\n</ng-template>","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IdName } from '../../models/common.model';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class AddressService {\r\n\turl = `/api/v1/records/address`;\r\n\thttp = inject(HttpClient);\r\n\r\n\tgetProvinces(): Observable<IdName[]> {\r\n\t\treturn this.http.get<IdName[]>(`${this.url}/provinces`);\r\n\t}\r\n\r\n\tgetMunicipalities(provinceId: number): Observable<any> {\r\n\t\treturn this.http.get<any>(`${this.url}/municipalities/${provinceId}`);\r\n\t}\r\n\r\n\tgetBarangays(muncipalityId: any, params?: any): Observable<any> {\r\n\t\treturn this.http.get<any>(`${this.url}/barangay/${muncipalityId}`, { params });\r\n\t}\r\n}\r\n","import { Component, effect, forwardRef, inject, input, signal } from '@angular/core';\r\nimport {\r\n\tAbstractControl,\r\n\tControlValueAccessor,\r\n\tFormBuilder,\r\n\tFormGroup,\r\n\tNG_VALIDATORS,\r\n\tNG_VALUE_ACCESSOR,\r\n\tReactiveFormsModule,\r\n\tValidationErrors,\r\n\tValidator\r\n} from '@angular/forms';\r\nimport { RxwebValidators } from '@rxweb/reactive-form-validators';\r\nimport { IdName } from '../../models/common.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormFieldWrapperComponent } from '../form-field-wrapper/form-field-wrapper.component';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\nimport { FloatLabelModule } from 'primeng/floatlabel';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { Address, Barangay, City } from '../../models/address.model';\r\nimport { AddressService } from '../../services/address/address.service';\r\n\r\n@Component({\r\n\tselector: 'ngp-fg-address',\r\n\timports: [\r\n\t\tInputTextModule,\r\n\t\tInputNumberModule,\r\n\t\tFloatLabelModule,\r\n\t\tCommonModule,\r\n\t\tReactiveFormsModule,\r\n\t\tFormFieldWrapperComponent,\r\n\t\tNgSelectModule\r\n\t],\r\n\ttemplateUrl: './fg-address.component.html',\r\n\tstyleUrl: './fg-address.component.scss',\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\r\n\t\t\tmulti: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: NG_VALIDATORS,\r\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class FgAddressComponent implements ControlValueAccessor, Validator {\r\n\tshowHeader = input<boolean>(true);\r\n\tisCreateMode = input<boolean>(true);\r\n\tisViewMode = input<boolean>(false);\r\n\r\n\taddressForm!: FormGroup;\r\n\tprovHttp$!: Subscription;\r\n\tcityHttp$!: Subscription;\r\n\tbarangayHttp$!: Subscription;\r\n\tprovinceOptions: IdName[] = [];\r\n\tcityOptions: City[] = [];\r\n\tbarangayOptions: Barangay[] = [];\r\n\r\n\tisDisabled = signal<boolean>(false);\r\n\tprivate pendingAddress: Address | null = null;\r\n\tprivate isInitializing = false;\r\n\tprivate detectedEditMode = false;\r\n\r\n\tprivate onChange: (value: Address | null) => void = () => {};\r\n\tprivate onTouched: () => void = () => {};\r\n\r\n\tprivate readonly addressService = inject(AddressService);\r\n\tprivate readonly fb = inject(FormBuilder);\r\n\r\n\tconstructor() {\r\n\t\tthis.addressForm = this.fb.group({\r\n\t\t\tline1: [null, RxwebValidators.required()],\r\n\t\t\tline2: [null],\r\n\t\t\tbarangay: [null, RxwebValidators.required()],\r\n\t\t\tcity: [null, RxwebValidators.required()],\r\n\t\t\tprovince: [null, RxwebValidators.required()],\r\n\t\t\tcountry: ['Philippines', RxwebValidators.required()],\r\n\t\t\tzipCode: [null, RxwebValidators.required()],\r\n\t\t\tlandmark: [null, RxwebValidators.required()]\r\n\t\t});\r\n\r\n\t\t// Use effect to watch for form value changes\r\n\t\teffect(() => {\r\n\t\t\tif (this.isDisabled()) {\r\n\t\t\t\tthis.addressForm.disable({ emitEvent: false });\r\n\t\t\t} else {\r\n\t\t\t\tthis.addressForm.enable({ emitEvent: false });\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Subscribe to form changes\r\n\t\tthis.addressForm.valueChanges.subscribe((value) => {\r\n\t\t\tthis.onChange(value);\r\n\t\t\tthis.onTouched();\r\n\t\t});\r\n\r\n\t\tthis.loadProvince();\r\n\r\n\t\t// Handle province changes - works for both create and edit mode\r\n\t\tthis.addressForm.get('province')?.valueChanges.subscribe((prov) => {\r\n\t\t\tif (prov && !this.isInitializing) {\r\n\t\t\t\tthis.clearFieldByName('city');\r\n\t\t\t\tthis.clearFieldByName('barangay');\r\n\t\t\t\tthis.cityOptions = [];\r\n\t\t\t\tthis.barangayOptions = [];\r\n\t\t\t\tthis.loadCityByProvinceId(prov.id);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Handle city changes - works for both create and edit mode\r\n\t\tthis.addressForm.get('city')?.valueChanges.subscribe((city) => {\r\n\t\t\tif (city && !this.isInitializing) {\r\n\t\t\t\tthis.clearFieldByName('barangay');\r\n\t\t\t\tthis.barangayOptions = [];\r\n\t\t\t\tthis.loadBarangayByCityId(city.id);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tclearFieldByName(fieldName: string): void {\r\n\t\tthis.addressForm.get(fieldName)?.setValue(null, { emitEvent: false });\r\n\t}\r\n\r\n\tloadProvince(): void {\r\n\t\tthis.provHttp$ = this.addressService.getProvinces().subscribe((res) => {\r\n\t\t\tthis.provinceOptions = res;\r\n\r\n\t\t\t// If we have a pending address to load, process it now\r\n\t\t\tif (this.pendingAddress) {\r\n\t\t\t\tthis.initializeEditMode(this.pendingAddress);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tloadCityByProvinceId(id: number): void {\r\n\t\tthis.cityHttp$ = this.addressService.getMunicipalities(id).subscribe((res) => {\r\n\t\t\tthis.cityOptions = res;\r\n\r\n\t\t\t// Continue initialization if needed\r\n\t\t\tif (this.isInitializing && this.pendingAddress) {\r\n\t\t\t\tthis.setCityFromPending();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tloadBarangayByCityId(id: number): void {\r\n\t\tthis.barangayHttp$ = this.addressService.getBarangays(id).subscribe((res) => {\r\n\t\t\tthis.barangayOptions = res;\r\n\r\n\t\t\t// Continue initialization if needed\r\n\t\t\tif (this.isInitializing && this.pendingAddress) {\r\n\t\t\t\tthis.setBarangayFromPending();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Detects if the address contains data that requires edit mode initialization\r\n\t */\r\n\tprivate isEditModeAddress(address: Address): boolean {\r\n\t\t// Check if any cascading field (province, city, barangay) is a string (name)\r\n\t\t// This indicates data from backend that needs to be matched with dropdown options\r\n\t\treturn (\r\n\t\t\t(typeof address.province === 'string' && address.province !== '') ||\r\n\t\t\t(typeof address.city === 'string' && address.city !== '') ||\r\n\t\t\t(typeof address.barangay === 'string' && address.barangay !== '')\r\n\t\t);\r\n\t}\r\n\r\n\tprivate initializeEditMode(address: Address): void {\r\n\t\t// this.isInitializing = true;\r\n\r\n\t\t// Set non-cascading fields first\r\n\t\tthis.addressForm.patchValue(\r\n\t\t\t{\r\n\t\t\t\tline1: address.line1,\r\n\t\t\t\tline2: address.line2,\r\n\t\t\t\tcountry: address.country || 'Philippines',\r\n\t\t\t\tzipCode: address.zipCode,\r\n\t\t\t\tlandmark: address.landmark\r\n\t\t\t},\r\n\t\t\t{ emitEvent: false }\r\n\t\t);\r\n\r\n\t\t// Find and set province\r\n\t\tif (address.province && typeof address.province === 'string') {\r\n\t\t\tconst provinceItem = this.provinceOptions.find(\r\n\t\t\t\t(p) => p.name.toLowerCase() === address.province?.toLowerCase()\r\n\t\t\t);\r\n\r\n\t\t\tif (provinceItem) {\r\n\t\t\t\tthis.addressForm.get('province')?.setValue(provinceItem, { emitEvent: false });\r\n\t\t\t\tthis.loadCityByProvinceId(provinceItem.id);\r\n\t\t\t} else {\r\n\t\t\t\tthis.completeInitialization();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.completeInitialization();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setCityFromPending(): void {\r\n\t\tif (!this.pendingAddress?.city || typeof this.pendingAddress.city !== 'string') {\r\n\t\t\tthis.completeInitialization();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst cityItem = this.cityOptions.find(\r\n\t\t\t(c) => c.name.toLowerCase() === this.pendingAddress!.city?.toLowerCase()\r\n\t\t);\r\n\r\n\t\tif (cityItem) {\r\n\t\t\tthis.addressForm.get('city')?.setValue(cityItem, { emitEvent: false });\r\n\t\t\tthis.loadBarangayByCityId(cityItem.id);\r\n\t\t} else {\r\n\t\t\tthis.completeInitialization();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setBarangayFromPending(): void {\r\n\t\tif (!this.pendingAddress?.barangay || typeof this.pendingAddress.barangay !== 'string') {\r\n\t\t\tthis.completeInitialization();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst barangayItem = this.barangayOptions.find(\r\n\t\t\t(b) => b.name.toLowerCase() === this.pendingAddress!.barangay?.toLowerCase()\r\n\t\t);\r\n\r\n\t\tif (barangayItem) {\r\n\t\t\tthis.addressForm.get('barangay')?.setValue(barangayItem, { emitEvent: false });\r\n\t\t}\r\n\r\n\t\tthis.completeInitialization();\r\n\t}\r\n\r\n\tprivate completeInitialization(): void {\r\n\t\tthis.isInitializing = false;\r\n\t\tthis.pendingAddress = null;\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.onChange(this.addressForm.value);\r\n\t\t});\r\n\t}\r\n\r\n\t// ControlValueAccessor methods\r\n\twriteValue(value: Address | null): void {\r\n\t\tif (value) {\r\n\t\t\t// Auto-detect if this is edit mode based on the address data structure\r\n\t\t\tthis.detectedEditMode = this.isEditModeAddress(value);\r\n\r\n\t\t\tif (this.detectedEditMode) {\r\n\t\t\t\t// Address contains string values (names) - needs initialization\r\n\t\t\t\tthis.isInitializing = true;\r\n\t\t\t\tthis.pendingAddress = value;\r\n\r\n\t\t\t\t// If provinces are already loaded, start initialization\r\n\t\t\t\tif (this.provinceOptions.length > 0) {\r\n\t\t\t\t\tthis.initializeEditMode(value);\r\n\t\t\t\t}\r\n\t\t\t\t// Otherwise, it will be triggered when provinces load\r\n\t\t\t} else {\r\n\t\t\t\t// Create mode or already has proper objects\r\n\t\t\t\tthis.addressForm.patchValue(value, { emitEvent: false });\r\n\r\n\t\t\t\t// Load cascading data if IDs are present\r\n\t\t\t\tconst province = value.province;\r\n\t\t\t\tif (province && typeof province === 'object' && 'id' in province) {\r\n\t\t\t\t\tthis.loadCityByProvinceId((province as any).id);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst city = value.city;\r\n\t\t\t\tif (city && typeof city === 'object' && 'id' in city) {\r\n\t\t\t\t\tthis.loadBarangayByCityId((city as any).id);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.addressForm.reset({ country: 'Philippines' }, { emitEvent: false });\r\n\t\t}\r\n\t}\r\n\r\n\tregisterOnChange(fn: (value: Address | null) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState(isDisabled: boolean): void {\r\n\t\tthis.isDisabled?.set(isDisabled);\r\n\t\tif (isDisabled) {\r\n\t\t\tthis.addressForm.disable();\r\n\t\t} else {\r\n\t\t\tthis.addressForm.enable();\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(control: AbstractControl): ValidationErrors | null {\r\n\t\tif (this.isInitializing) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.addressForm?.valid ? null : { invalidAddress: true };\r\n\t}\r\n}\r\n","@if (showHeader()) {\r\n\t<h2 class=\"text-xl font-semibold mb-4\" [ngClass]=\"{ 'px-4': isDisabled() }\">Address</h2>\r\n}\r\n\r\n@if (isViewMode()) {\r\n\t@let address = addressForm.value;\r\n\r\n\t<div class=\"grid gap-3 p-4\">\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"country\">Country:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.country || 'Philippines' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"province\">Province:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.province?.name || address.province || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"city\">City/Municipality:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.city?.name || address.city || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"barangay\">Barangay:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.barangay?.name || address.barangay || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line1\">Line 1:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line1 || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line2\">Line 2:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line2 || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"zipCode\">Zip Code:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.zipCode || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"landmark\">Nearest Landmark:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.landmark || '' }}</p>\r\n\t\t</div>\r\n\t</div>\r\n} @else {\r\n\t<form [formGroup]=\"addressForm\">\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"country\" formControlName=\"country\" class=\"w-full\" />\r\n\t\t\t\t\t\t<label for=\"country\" class=\"block mb-2 required-label\">Country</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"province\"\r\n\t\t\t\t\t\t\t[items]=\"provinceOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"provHttp$ && !provHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\t\t\t\t\t\t<label for=\"province\" class=\"block mb-2 required-label\">Province</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"city\"\r\n\t\t\t\t\t\t\t[items]=\"cityOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"cityHttp$ && !cityHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\t\t\t\t\t\t<label for=\"city\" class=\"block mb-2 required-label\">City/Municipality</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"barangay\"\r\n\t\t\t\t\t\t\t[items]=\"barangayOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"barangayHttp$ && !barangayHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\r\n\t\t\t\t\t\t<label for=\"barangay\" class=\"block mb-2 required-label\">Barangay</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div>\r\n\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t<label for=\"line1\" class=\"block mb-2 required-label\">Line 1</label>\r\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line1\" formControlName=\"line1\" class=\"w-full\" />\r\n\t\t\t\t</p-floatlabel>\r\n\t\t\t</ngp-form-field-wrapper>\r\n\t\t</div>\r\n\r\n\t\t<div>\r\n\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t<label for=\"line2\" class=\"block mb-2\">Line 2</label>\r\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line2\" formControlName=\"line2\" class=\"w-full\" />\r\n\t\t\t\t</p-floatlabel>\r\n\t\t\t</ngp-form-field-wrapper>\r\n\t\t</div>\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<p-inputnumber\r\n\t\t\t\t\t\t\t[inputId]=\"'zipCode'\"\r\n\t\t\t\t\t\t\tformControlName=\"zipCode\"\r\n\t\t\t\t\t\t\tstyleClass=\"w-full\"\r\n\t\t\t\t\t\t\t[useGrouping]=\"false\" />\r\n\t\t\t\t\t\t<label for=\"zipCode\" class=\"block mb-2 required-label\">Zip Code</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<label for=\"landmark\" class=\"block mb-2 required-label\">Nearest Landmark</label>\r\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"landmark\" formControlName=\"landmark\" class=\"w-full\" />\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</form>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n\tComponent,\r\n\tcomputed,\r\n\tContentChild,\r\n\teffect,\r\n\tinject,\r\n\tinput,\r\n\toutput,\r\n\tsignal,\r\n\tTemplateRef,\r\n\tViewChild\r\n} from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { Table, TableModule, TablePageEvent } from 'primeng/table';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ToolbarModule } from 'primeng/toolbar';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { TableColumn } from '../../../models/table-column.model';\r\n\r\n@Component({\r\n\tselector: 'ngp-data-table',\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\tTableModule,\r\n\t\tButtonModule,\r\n\t\tInputTextModule,\r\n\t\tConfirmDialogModule,\r\n\t\tDialogModule,\r\n\t\tTooltipModule,\r\n\t\tToastModule,\r\n\t\tToolbarModule,\r\n\t\tSkeletonModule,\r\n\t\tPopoverModule\r\n\t],\r\n\ttemplateUrl: './data-table.component.html',\r\n\tstyleUrl: './data-table.component.scss',\r\n\tproviders: [ConfirmationService, MessageService]\r\n})\r\nexport class DataTableComponent<T extends Record<string, any>> {\r\n\tdataSource = input<T[]>([]);\r\n\tcolumns = input<TableColumn[]>([]);\r\n\tloading = input<boolean>(false);\r\n\tpageSize = input<number>(10);\r\n\ttotalElements = input<number>(0);\r\n\tcurrentPage = input<number>(0);\r\n\tshowDefaultActions = input<boolean>(true);\r\n\temptyMessage = input<string>('No data available.');\r\n\thasDeleteAction = input<boolean>(true);\r\n\thasEditAction = input<boolean>(true);\r\n\tcanEdit = input<(row: unknown) => boolean>(() => true);\r\n\thasViewAction = input<boolean>(true);\r\n\tentityName = input<string>('');\r\n\tisPaginated = input<boolean>(true);\r\n\tshowCustomAction = input<boolean>(false);\r\n\tshowRowNumbers = input<boolean>(false);\r\n\trowNumberHeader = input<string>('');\r\n\tshowCheckboxColumn = input<boolean>(false);\r\n\tnoPadding = input<boolean>(false);\r\n\r\n\t// Internal signals\r\n\tdata = signal<T[]>([]);\r\n\tfilteredData = signal<T[]>([]);\r\n\tdialogVisible = signal<boolean>(false);\r\n\tdialogTitle = signal<string>('Add Item');\r\n\teditingItem = signal<T | null>(null);\r\n\r\n\t// Custom event emitters\r\n\tadd = output<T>();\r\n\tedit = output<T>();\r\n\tdeleteAction = output<T>();\r\n\tview = output<T>();\r\n\tpageChange = output<TablePageEvent>();\r\n\tsortChange = output<{ sort: string; order: string }>();\r\n\r\n\tactions = computed(() => [this.hasViewAction(), this.hasEditAction(), this.hasDeleteAction()]);\r\n\tactionsLength = computed(() => this.actions().filter((action) => !!action).length);\r\n\tactionItems = computed(() => {\r\n\t\treturn [\r\n\t\t\t{\r\n\t\t\t\tlabel: 'View ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasViewAction(),\r\n\t\t\t\ticon: 'pi-search'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tlabel: 'Update ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasEditAction(),\r\n\t\t\t\ticon: 'pi-pen-to-square',\r\n\t\t\t\tshouldShow: (item: unknown) => this.canEdit()(item)\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tlabel: 'Delete ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasDeleteAction(),\r\n\t\t\t\ticon: 'pi-trash'\r\n\t\t\t}\r\n\t\t];\r\n\t});\r\n\r\n\t// Content children for custom templates\r\n\t@ContentChild('formTemplate') formTemplate?: TemplateRef<unknown>;\r\n\t@ViewChild('dt') table?: Table;\r\n\r\n\t// Services\r\n\tprivate readonly http = inject(HttpClient);\r\n\tprivate readonly confirmationService = inject(ConfirmationService);\r\n\tprivate readonly messageService = inject(MessageService);\r\n\r\n\t// Column filters for individual column filtering\r\n\tprivate readonly filterValues: Record<string, string> = {};\r\n\r\n\t// For custom cell templates\r\n\tcustomTemplates = new Map<string, TemplateRef<unknown>>();\r\n\r\n\tconstructor() {\r\n\t\t// Effect to update filtered data when raw data changes\r\n\t\teffect(() => {\r\n\t\t\tconst sourceData = this.dataSource();\r\n\t\t\tthis.data.set([...sourceData]);\r\n\t\t});\r\n\t}\r\n\r\n\t// Register a custom template for a specific column\r\n\tregisterTemplate(field: string, template: TemplateRef<unknown>): void {\r\n\t\tthis.customTemplates.set(field, template);\r\n\t}\r\n\r\n\thandlePageChange(event: TablePageEvent) {\r\n\t\tthis.pageChange.emit(event);\r\n\t}\r\n\r\n\thandleSort(event: { field: string; order: number }) {\r\n\t\tconst column = this.columns().find((col) => col.field === event.field);\r\n\t\tconst actualSortField = column?.sortField ?? event.field;\r\n\t\tconst order = event.order === 1 ? 'ASC' : 'DESC';\r\n\r\n\t\tthis.sortChange.emit({\r\n\t\t\tsort: actualSortField,\r\n\t\t\torder\r\n\t\t});\r\n\t}\r\n\r\n\tresetTableSort(): void {\r\n\t\tif (this.table) {\r\n\t\t\tthis.table.sortOrder = 0;\r\n\t\t\tthis.table.sortField = null;\r\n\t\t\tthis.table.tableService.onSort(null);\r\n\t\t}\r\n\t}\r\n\r\n\t// Helper to safely get nested property values using dot notation\r\n\tgetItemValue(item: T, field: string, column?: TableColumn): unknown {\r\n\t\tif (column && typeof column.render === 'function') {\r\n\t\t\treturn column.render(item);\r\n\t\t}\r\n\t\treturn field\r\n\t\t\t.split('.')\r\n\t\t\t.reduce((obj: unknown, key) => obj?.[key as keyof typeof obj] ?? null, item as unknown);\r\n\t}\r\n\r\n\tperFormActionFromPopover(item: T, actionType: string): void {\r\n\t\tif (actionType.includes('View')) {\r\n\t\t\tthis.view.emit(item);\r\n\t\t} else if (actionType.includes('Update')) {\r\n\t\t\tthis.edit.emit(item);\r\n\t\t} else if (actionType.includes('Delete')) {\r\n\t\t\tthis.deleteAction.emit(item);\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"card\" [ngClass]=\"{ '!p-0': noPadding() }\">\r\n\t<p-table\r\n\t\t#dt\r\n\t\t[value]=\"data()\"\r\n\t\t[paginator]=\"isPaginated()\"\r\n\t\t[rows]=\"pageSize()\"\r\n\t\t[rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n\t\t[rowHover]=\"true\"\r\n\t\t[loading]=\"loading()\"\r\n\t\t[showLoader]=\"false\"\r\n\t\t[scrollable]=\"true\"\r\n\t\tclass=\"p-datatable-sm\"\r\n\t\t[totalRecords]=\"totalElements()\"\r\n\t\t[lazy]=\"isPaginated()\"\r\n\t\t[first]=\"currentPage() * pageSize()\"\r\n\t\tpaginatorDropdownAppendTo=\"body\"\r\n\t\t(onPage)=\"handlePageChange($event)\"\r\n\t\t(onSort)=\"handleSort($event)\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<tr>\r\n\t\t\t\t@if (showCheckboxColumn()) {\r\n\t\t\t\t\t<th style=\"width: 4rem\">\r\n\t\t\t\t\t\t<p-tableHeaderCheckbox />\r\n\t\t\t\t\t</th>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showRowNumbers()) {\r\n\t\t\t\t\t<th class=\"text-left !font-bold !text-gray-500 !w-1\" scope=\"col\">{{\r\n\t\t\t\t\t\trowNumberHeader()\r\n\t\t\t\t\t}}</th>\r\n\t\t\t\t}\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<th\r\n\t\t\t\t\t\t[pSortableColumn]=\"column.sortable ? column.field : undefined\"\r\n\t\t\t\t\t\tclass=\"text-left !font-bold !text-gray-500\"\r\n\t\t\t\t\t\t[ngClass]=\"{ '!text-center': column.align === 'center' }\"\r\n\t\t\t\t\t\tscope=\"col\"\r\n\t\t\t\t\t\t[style]=\"{ width: column.width || 'auto' }\">\r\n\t\t\t\t\t\t{{ column.header }}\r\n\t\t\t\t\t\t@if (column.sortable) {\r\n\t\t\t\t\t\t\t<p-sortIcon [field]=\"column.field\"></p-sortIcon>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</th>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<th class=\"!w-32 !text-center !font-bold !text-gray-500\" scope=\"col\">Actions</th>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template pTemplate=\"body\" let-item let-rowIndex=\"rowIndex\">\r\n\t\t\t@if (showCheckboxColumn()) {\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<p-tableCheckbox [value]=\"item\" />\r\n\t\t\t\t</td>\r\n\t\t\t}\r\n\t\t\t<tr>\r\n\t\t\t\t@if (showRowNumbers()) {\r\n\t\t\t\t\t<td class=\"!w-1 text-center\">\r\n\t\t\t\t\t\t{{ rowIndex + 1 }}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td [ngClass]=\"{ '!text-center': column.align === 'center' }\">\r\n\t\t\t\t\t\t@if (customTemplates && customTemplates.get(column.field)) {\r\n\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get(column.field)!\"\r\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: column.field }\">\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t{{ getItemValue(item, column.field, column) }}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td class=\"\">\r\n\t\t\t\t\t\t<div class=\"flex justify-center gap-2\">\r\n\t\t\t\t\t\t\t@if (showDefaultActions() && actionsLength() < 2 && !showCustomAction()) {\r\n\t\t\t\t\t\t\t\t<!-- Inline buttons for less than 2 standard actions and no custom action -->\r\n\t\t\t\t\t\t\t\t@if (hasViewAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'View'\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"view.emit(item)\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t@if (hasEditAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"edit.emit(item)\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Update'\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t@if (hasDeleteAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-danger\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"deleteAction.emit(item)\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Delete'\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} @else if (!showDefaultActions() && showCustomAction()) {\r\n\t\t\t\t\t\t\t\t<!-- Only custom action, no popover needed -->\r\n\t\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\r\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<!-- Popover menu for 2+ standard actions or when combining with custom action -->\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\ticon=\"pi pi-ellipsis-h\"\r\n\t\t\t\t\t\t\t\t\tclass=\"p-button-outlined p-button-secondary\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"po.toggle($event)\"></button>\r\n\t\t\t\t\t\t\t\t<p-popover #po styleClass=\"!min-w-40\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"!font-semibold !text-gray-500 block mb-2\">Actions</span>\r\n\t\t\t\t\t\t\t\t\t<ul class=\"list-none p-0 m-0 flex flex-col\">\r\n\t\t\t\t\t\t\t\t\t\t@if (showDefaultActions()) {\r\n\t\t\t\t\t\t\t\t\t\t\t@for (actionItem of actionItems(); track $index) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t@if (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tactionItem.visible &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(!actionItem.shouldShow || actionItem.shouldShow(item))\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"flex items-center gap-2 px-2 py-3 hover:bg-emphasis cursor-pointer rounded-border\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"perFormActionFromPopover(item, actionItem.label)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"pi\" [ngClass]=\"actionItem.icon\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"font-medium\">{{ actionItem.label }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- Custom action template in popover -->\r\n\t\t\t\t\t\t\t\t\t\t@if (showCustomAction() && customTemplates.get('customAction')) {\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\r\n\t\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t</p-popover>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template #loadingbody>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template pTemplate=\"emptymessage\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td [attr.colspan]=\"columns().length + 1\" class=\"text-center p-4\">{{ emptyMessage() }}</td>\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\t</p-table>\r\n</div>\r\n","// import { CommonModule } from '@angular/common';\r\n// import {\r\n// \tComponent,\r\n// \tInput,\r\n// \tforwardRef,\r\n// \tsignal,\r\n// \toutput,\r\n// \tcontentChild,\r\n// \tTemplateRef,\r\n// \teffect,\r\n// \tinput\r\n// } from '@angular/core';\r\n// import { NgSelectModule } from '@ng-select/ng-select';\r\n// import { PaginatedRequest, PaginatedResponse } from '../../../../models/paginated.model';\r\n// import { Observable } from 'rxjs';\r\n// import { tap } from 'rxjs/operators';\r\n// import { FloatLabelModule } from 'primeng/floatlabel';\r\n// import {\r\n// \tControlValueAccessor,\r\n// \tFormsModule,\r\n// \tNG_VALUE_ACCESSOR,\r\n// \tNG_VALIDATORS,\r\n// \tAbstractControl,\r\n// \tValidationErrors,\r\n// \tValidators\r\n// } from '@angular/forms';\r\n\r\n// type SelectValue<T> = T | T[];\r\n// type SelectValueOrNull<T> = SelectValue<T> | null;\r\n\r\n// @Component({\r\n// \tselector: 'ngp-dynamic-select',\r\n// \ttemplateUrl: './dynamic-select.component.html',\r\n// \timports: [NgSelectModule, FormsModule, CommonModule, FloatLabelModule],\r\n// \tproviders: [\r\n// \t\t{\r\n// \t\t\tprovide: NG_VALUE_ACCESSOR,\r\n// \t\t\tuseExisting: forwardRef(() => DynamicNgSelectComponent),\r\n// \t\t\tmulti: true\r\n// \t\t},\r\n// \t\t{\r\n// \t\t\tprovide: NG_VALIDATORS,\r\n// \t\t\tuseExisting: forwardRef(() => DynamicNgSelectComponent),\r\n// \t\t\tmulti: true\r\n// \t\t}\r\n// \t]\r\n// })\r\n// export class DynamicNgSelectComponent<T> implements ControlValueAccessor, Validators {\r\n// \t@Input() apiUrl!: (params?: PaginatedRequest) => Observable<PaginatedResponse<T>>;\r\n// \t@Input() formatOptions?: (items: T[]) => T[];\r\n// \t@Input() bindLabel = 'description';\r\n// \t@Input() bindValue: string | null = null;\r\n// \t@Input() placeholder = 'Select';\r\n// \t@Input() isRequired = false;\r\n// \t@Input() isReadonly = false;\r\n// \t@Input() multiple = false;\r\n// \t@Input() maxSelectedItems: number | null = null;\r\n// \t@Input() clearable = true;\r\n\r\n// \t// Use signal input for params to trigger automatic refresh\r\n// \tparams = input<Record<string, any>>({});\r\n\r\n// \t// Static options that can be provided by the user\r\n// \tstaticOptions = input<T[]>([]);\r\n\r\n// \tmodelChange = output<string | number | T | T[] | null>();\r\n\r\n// \tvalue: SelectValueOrNull<T> = null;\r\n// \tdisabled = false;\r\n\r\n// \t// Internal options that combines static + API loaded options\r\n// \toptions = signal<T[]>([]);\r\n\r\n// \ttableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\r\n\r\n// \t// Use new contentChild signal-based API\r\n// \titemTemplate = contentChild<TemplateRef<any>>('itemTemplate');\r\n// \tselectedItemTemplate = contentChild<TemplateRef<any>>('selectedItemTemplate');\r\n\r\n// \tprivate onChange = (_: any) => {}; // eslint-disable-line\r\n// \tprivate onTouched = () => {}; // eslint-disable-line\r\n\r\n// \tconstructor() {\r\n// \t\t// Auto-refresh when params change\r\n// \t\teffect(() => {\r\n// \t\t\tconst currentParams = this.params(); // eslint-disable-line\r\n// \t\t\tthis.refresh();\r\n// \t\t});\r\n\r\n// \t\t// Update options when staticOptions change\r\n// \t\teffect(() => {\r\n// \t\t\tconst static0pts = this.staticOptions();\r\n// \t\t\tif (static0pts.length > 0) {\r\n// \t\t\t\tthis.options.set([...static0pts]);\r\n// \t\t\t}\r\n// \t\t});\r\n// \t}\r\n\r\n// \t// Public method to manually refresh the data\r\n// \trefresh(): void {\r\n// \t\t// Reset to static options only\r\n// \t\tthis.options.set([...this.staticOptions()]);\r\n// \t\tthis.tableParams.set({ page: 0, size: 10 });\r\n// \t\tthis.loadOptions();\r\n// \t}\r\n\r\n// \t// Comparison function for ng-select to match objects\r\n// \tcompareWith = (item: T, selected: T): boolean => {\r\n// \t\tif (!item || !selected) {\r\n// \t\t\treturn item === selected;\r\n// \t\t}\r\n\r\n// \t\t// If bindValue is set, compare using that property\r\n// \t\tif (this.bindValue) {\r\n// \t\t\treturn (item as any)[this.bindValue] === (selected as any)[this.bindValue];\r\n// \t\t}\r\n\r\n// \t\t// Otherwise, compare the entire object\r\n// \t\treturn item === selected;\r\n// \t};\r\n\r\n// \tprivate loadOptions(): void {\r\n// \t\tif (!this.apiUrl) {\r\n// \t\t\treturn;\r\n// \t\t}\r\n\r\n// \t\tthis.getOptions();\r\n// \t}\r\n\r\n// \tgetOptions(): void {\r\n// \t\t// Merge custom params with table params\r\n// \t\tconst mergedParams = { ...this.tableParams(), ...this.params() };\r\n\r\n// \t\tthis.apiUrl(mergedParams)\r\n// \t\t\t.pipe(\r\n// \t\t\t\ttap((items) => {\r\n// \t\t\t\t\tif (items.results) {\r\n// \t\t\t\t\t\tconst values = this.formatOptions ? this.formatOptions(items.results) : items.results;\r\n// \t\t\t\t\t\t// Append to existing options (which may include static options)\r\n// \t\t\t\t\t\tthis.options.update((opts) => [...opts, ...values]);\r\n\r\n// \t\t\t\t\t\tif (items.hasNextPage) {\r\n// \t\t\t\t\t\t\tthis.tableParams.update((param) => ({ ...param, page: param.page + 1 }));\r\n// \t\t\t\t\t\t\tthis.getOptions();\r\n// \t\t\t\t\t\t}\r\n// \t\t\t\t\t} else {\r\n// \t\t\t\t\t\t// For non-paginated responses, merge with static options\r\n// \t\t\t\t\t\tconst apiOptions = items as unknown as T[];\r\n// \t\t\t\t\t\tconst formattedOptions = this.formatOptions\r\n// \t\t\t\t\t\t\t? this.formatOptions(apiOptions)\r\n// \t\t\t\t\t\t\t: apiOptions;\r\n// \t\t\t\t\t\tthis.options.update((opts) => [...this.staticOptions(), ...formattedOptions]);\r\n// \t\t\t\t\t}\r\n// \t\t\t\t})\r\n// \t\t\t)\r\n// \t\t\t.subscribe();\r\n// \t}\r\n\r\n// \twriteValue(value: string | number | T | T[] | null): void {\r\n// \t\tif (value === null || value === undefined) {\r\n// \t\t\tthis.value = null;\r\n// \t\t\treturn;\r\n// \t\t}\r\n\r\n// \t\tconst currentOptions = this.options();\r\n\r\n// \t\t// If bindValue is set and we receive a primitive value,\r\n// \t\t// find the full object from options\r\n// \t\tif (this.bindValue && (typeof value === 'string' || typeof value === 'number')) {\r\n// \t\t\tif (this.multiple && Array.isArray(value)) {\r\n// \t\t\t\tthis.value = currentOptions.filter((option) =>\r\n// \t\t\t\t\tvalue.includes((option as any)[this.bindValue!])\r\n// \t\t\t\t) as T[];\r\n// \t\t\t} else {\r\n// \t\t\t\tconst foundOption = currentOptions.find(\r\n// \t\t\t\t\t(option) => (option as any)[this.bindValue!] === value\r\n// \t\t\t\t);\r\n// \t\t\t\tthis.value = foundOption || (value as any);\r\n// \t\t\t}\r\n// \t\t} else {\r\n// \t\t\t// Store the full object\r\n// \t\t\tthis.value = value as SelectValueOrNull<T>;\r\n// \t\t}\r\n// \t}\r\n\r\n// \tregisterOnChange(fn: (val: any) => void): void {\r\n// \t\tthis.onChange = fn;\r\n// \t}\r\n\r\n// \tregisterOnTouched(fn: () => void): void {\r\n// \t\tthis.onTouched = fn;\r\n// \t}\r\n\r\n// \tsetDisabledState(isDisabled: boolean): void {\r\n// \t\tthis.disabled = isDisabled;\r\n// \t}\r\n\r\n// \tonValueChange(value: any): void {\r\n// \t\tif (value) {\r\n// \t\t\tif (this.multiple && Array.isArray(value)) {\r\n// \t\t\t\t// Handle multiple selection\r\n// \t\t\t\tconst newValue = this.bindValue ? value.map((v) => v[this.bindValue!]) : value;\r\n// \t\t\t\tthis.value = value;\r\n// \t\t\t\tthis.onModelChange(newValue);\r\n// \t\t\t} else {\r\n// \t\t\t\t// Handle single selection\r\n// \t\t\t\tconst newValue = this.bindValue ? value[this.bindValue] : value;\r\n// \t\t\t\tthis.value = value;\r\n// \t\t\t\tthis.onModelChange(newValue);\r\n// \t\t\t}\r\n// \t\t} else {\r\n// \t\t\tthis.value = null;\r\n// \t\t\tthis.onModelChange(null);\r\n// \t\t}\r\n// \t\tthis.onTouched();\r\n// \t}\r\n\r\n// \tonModelChange(value: string | number | T | T[] | null): void {\r\n// \t\tthis.onChange(value);\r\n// \t\tthis.modelChange.emit(value);\r\n// \t}\r\n\r\n// \tvalidate(control: AbstractControl): ValidationErrors | null {\r\n// \t\t// eslint-disable-line\r\n// \t\tconst isEmpty = this.multiple\r\n// \t\t\t? !this.value || (Array.isArray(this.value) && this.value.length === 0)\r\n// \t\t\t: this.value === null || this.value === undefined;\r\n\r\n// \t\tif (this.isRequired && isEmpty) {\r\n// \t\t\treturn { required: true };\r\n// \t\t}\r\n\r\n// \t\treturn null;\r\n// \t}\r\n// }\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n\tComponent,\r\n\tInput,\r\n\tforwardRef,\r\n\tsignal,\r\n\toutput,\r\n\tcontentChild,\r\n\tTemplateRef,\r\n\teffect,\r\n\tinput,\r\n\tuntracked\r\n} from '@angular/core';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { PaginatedRequest, PaginatedResponse } from '../../../../models/paginated.model';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\nimport { FloatLabelModule } from 'primeng/floatlabel';\r\nimport {\r\n\tControlValueAccessor,\r\n\tFormsModule,\r\n\tNG_VALUE_ACCESSOR,\r\n\tNG_VALIDATORS,\r\n\tAbstractControl,\r\n\tValidationErrors,\r\n\tValidators\r\n} from '@angular/forms';\r\n\r\ntype SelectValue<T> = T | T[];\r\ntype SelectValueOrNull<T> = SelectValue<T> | null;\r\n\r\n@Component({\r\n\tselector: 'ngp-dynamic-select',\r\n\ttemplateUrl: './dynamic-select.component.html',\r\n\timports: [NgSelectModule, FormsModule, CommonModule, FloatLabelModule],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => DynamicNgSelectComponent),\r\n\t\t\tmulti: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: NG_VALIDATORS,\r\n\t\t\tuseExisting: forwardRef(() => DynamicNgSelectComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class DynamicNgSelectComponent<T> implements ControlValueAccessor, Validators {\r\n\t@Input() apiUrl!: (params?: PaginatedRequest) => Observable<PaginatedResponse<T>>;\r\n\t@Input() formatOptions?: (items: T[]) => T[];\r\n\t@Input() bindLabel = 'description';\r\n\t@Input() bindValue: string | null = null;\r\n\t@Input() placeholder = 'Select';\r\n\t@Input() isRequired = false;\r\n\t@Input() isReadonly = false;\r\n\t@Input() multiple = false;\r\n\t@Input() maxSelectedItems: number | null = null;\r\n\t@Input() clearable = true;\r\n\r\n\t// Use signal input for params to trigger automatic refresh\r\n\tparams = input<Record<string, any>>({});\r\n\r\n\t// Static options that can be provided by the user\r\n\tstaticOptions = input<T[]>([]);\r\n\r\n\tmodelChange = output<string | number | T | T[] | null>();\r\n\r\n\tvalue: SelectValueOrNull<T> = null;\r\n\tdisabled = false;\r\n\r\n\t// Internal options that combines static + API loaded options\r\n\toptions = signal<T[]>([]);\r\n\r\n\ttableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\r\n\r\n\t// Use new contentChild signal-based API\r\n\titemTemplate = contentChild<TemplateRef<any>>('itemTemplate');\r\n\tselectedItemTemplate = contentChild<TemplateRef<any>>('selectedItemTemplate');\r\n\r\n\t// Track pending values that need to be resolved when options load\r\n\tprivate pendingValue: string | number | (string | number)[] | null = null;\r\n\tprivate isInitializing = false;\r\n\tprivate isFirstLoad = true;\r\n\r\n\tprivate onChange = (_: any) => {}; // eslint-disable-line\r\n\tprivate onTouched = () => {}; // eslint-disable-line\r\n\r\n\tconstructor() {\r\n\t\t// Auto-refresh when params change (but skip the first run)\r\n\t\teffect(() => {\r\n\t\t\tconst currentParams = this.params(); // eslint-disable-line\r\n\r\n\t\t\tif (this.isFirstLoad) {\r\n\t\t\t\tthis.isFirstLoad = false;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Use untracked to prevent infinite loops when refresh modifies signals\r\n\t\t\tuntracked(() => this.refresh());\r\n\t\t});\r\n\r\n\t\t// Update options when staticOptions change\r\n\t\teffect(() => {\r\n\t\t\tconst static0pts = this.staticOptions();\r\n\t\t\tuntracked(() => this.options.set([...static0pts]));\r\n\t\t});\r\n\r\n\t\t// Watch for options changes and resolve pending values\r\n\t\teffect(() => {\r\n\t\t\tconst opts = this.options();\r\n\t\t\tconst pending = untracked(() => this.pendingValue);\r\n\r\n\t\t\tif (opts.length > 0 && pending !== null && this.bindValue) {\r\n\t\t\t\tuntracked(() => this.resolvePendingValue(opts, pending));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Initial load of options (only once)\r\n\t\tsetTimeout(() => {\r\n\t\t\tif (this.staticOptions().length === 0) {\r\n\t\t\t\tthis.loadOptions();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// Public method to manually refresh the data\r\n\trefresh(): void {\r\n\t\t// Reset to static options only\r\n\t\tthis.options.set([...this.staticOptions()]);\r\n\t\tthis.tableParams.set({ page: 0, size: 10 });\r\n\t\tthis.loadOptions();\r\n\t}\r\n\r\n\t// Comparison function for ng-select to match objects\r\n\tcompareWith = (item: T, selected: T): boolean => {\r\n\t\tif (!item || !selected) {\r\n\t\t\treturn item === selected;\r\n\t\t}\r\n\r\n\t\t// If bindValue is set, compare using that property\r\n\t\tif (this.bindValue) {\r\n\t\t\tconst itemValue = (item as any)[this.bindValue];\r\n\t\t\tconst selectedValue = (selected as any)[this.bindValue];\r\n\t\t\treturn itemValue === selectedValue;\r\n\t\t}\r\n\r\n\t\t// Otherwise, compare the entire object (reference or deep equality)\r\n\t\treturn item === selected;\r\n\t};\r\n\r\n\tprivate loadOptions(): void {\r\n\t\tif (!this.apiUrl) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.getOptions();\r\n\t}\r\n\r\n\tgetOptions(): void {\r\n\t\t// Merge custom params with table params\r\n\t\tconst mergedParams = { ...this.tableParams(), ...this.params() };\r\n\r\n\t\tthis.apiUrl(mergedParams)\r\n\t\t\t.pipe(\r\n\t\t\t\ttap((items) => {\r\n\t\t\t\t\tif (items.results) {\r\n\t\t\t\t\t\tconst values = this.formatOptions ? this.formatOptions(items.results) : items.results;\r\n\t\t\t\t\t\t// Append to existing options (which may include static options)\r\n\t\t\t\t\t\tthis.options.update((opts) => [...opts, ...values]);\r\n\r\n\t\t\t\t\t\tif (items.hasNextPage) {\r\n\t\t\t\t\t\t\tthis.tableParams.update((param) => ({ ...param, page: param.page + 1 }));\r\n\t\t\t\t\t\t\tthis.getOptions();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// For non-paginated responses, merge with static options\r\n\t\t\t\t\t\tconst apiOptions = items as unknown as T[];\r\n\t\t\t\t\t\tconst formattedOptions = this.formatOptions\r\n\t\t\t\t\t\t\t? this.formatOptions(apiOptions)\r\n\t\t\t\t\t\t\t: apiOptions;\r\n\t\t\t\t\t\tthis.options.update((opts) => [...this.staticOptions(), ...formattedOptions]);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\t}\r\n\r\n\t/**\r\n\t * Detects if the value is a primitive that needs to be resolved to an object\r\n\t * Only relevant when bindValue is set\r\n\t */\r\n\tprivate isPrimitiveValue(value: any): boolean {\r\n\t\t// If bindValue is not set, we work with full objects, so no resolution needed\r\n\t\tif (!this.bindValue) return false;\r\n\r\n\t\tif (Array.isArray(value)) {\r\n\t\t\treturn value.length > 0 && (typeof value[0] === 'string' || typeof value[0] === 'number');\r\n\t\t}\r\n\t\treturn typeof value === 'string' || typeof value === 'number';\r\n\t}\r\n\r\n\t/**\r\n\t * Resolves pending primitive values to full objects from options\r\n\t */\r\n\tprivate resolvePendingValue(opts: T[], pending: string | number | Array<string | number>): void {\r\n\t\tif (!this.bindValue) return;\r\n\r\n\t\tif (Array.isArray(pending)) {\r\n\t\t\tconst pendingArr: Array<string | number> = pending;\r\n\t\t\t// Handle multiple selection - filter ALL matching options\r\n\t\t\tconst foundOptions = opts.filter((option) => {\r\n\t\t\t\tconst optionValue = (option as any)[this.bindValue!];\r\n\t\t\t\treturn pendingArr.includes(optionValue);\r\n\t\t\t});\r\n\r\n\t\t\t// Only clear pending if we found ALL items\r\n\t\t\t// This is important for paginated data where items might be on different pages\r\n\t\t\tif (foundOptions.length === pendingArr.length) {\r\n\t\t\t\tthis.value = foundOptions;\r\n\t\t\t\tthis.pendingValue = null;\r\n\t\t\t\tthis.isInitializing = false;\r\n\t\t\t} else if (foundOptions.length > 0) {\r\n\t\t\t\t// We found some but not all - update value but keep pending\r\n\t\t\t\tthis.value = foundOptions;\r\n\t\t\t\t// Don't clear pendingValue yet - we're still waiting for more options to load\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// Handle single selection\r\n\t\t\tconst foundOption = opts.find((option) => (option as any)[this.bindValue!] === pending);\r\n\r\n\t\t\tif (foundOption) {\r\n\t\t\t\tthis.value = foundOption;\r\n\t\t\t\tthis.pendingValue = null;\r\n\t\t\t\tthis.isInitializing = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twriteValue(value: string | number | T | T[] | null): void {\r\n\t\tif (value === null || value === undefined) {\r\n\t\t\tthis.value = null;\r\n\t\t\tthis.pendingValue = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst currentOptions = this.options();\r\n\r\n\t\t// If bindValue is set, we need to handle primitive-to-object resolution\r\n\t\tif (this.bindValue && this.isPrimitiveValue(value)) {\r\n\t\t\tthis.isInitializing = true;\r\n\r\n\t\t\tif (this.multiple && Array.isArray(value)) {\r\n\t\t\t\t// Store pending array of IDs\r\n\t\t\t\tthis.pendingValue = value as (string | number)[];\r\n\r\n\t\t\t\t// Try to resolve immediately if options are available\r\n\t\t\t\tif (currentOptions.length > 0) {\r\n\t\t\t\t\tthis.resolvePendingValue(currentOptions, value as (string | number)[]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Set temporary value to show something in the UI\r\n\t\t\t\t\tthis.value = value as any;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// Store pending single ID\r\n\t\t\t\tthis.pendingValue = value as string | number;\r\n\r\n\t\t\t\t// Try to resolve immediately if options are available\r\n\t\t\t\tconst foundOption = currentOptions.find(\r\n\t\t\t\t\t(option) => (option as any)[this.bindValue!] === value\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (foundOption) {\r\n\t\t\t\t\tthis.value = foundOption;\r\n\t\t\t\t\tthis.pendingValue = null;\r\n\t\t\t\t\tthis.isInitializing = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Set temporary value to show something in the UI\r\n\t\t\t\t\tthis.value = value as any;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// No bindValue set OR already a full object - just store it directly\r\n\t\t\t// This handles cases where:\r\n\t\t\t// 1. bindValue is null (working with full objects)\r\n\t\t\t// 2. bindValue is set but value is already the full object (not a primitive)\r\n\t\t\tthis.value = value as SelectValueOrNull<T>;\r\n\t\t\tthis.pendingValue = null;\r\n\t\t\tthis.isInitializing = false;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterOnChange(fn: (val: any) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState(isDisabled: boolean): void {\r\n\t\tthis.disabled = isDisabled;\r\n\t}\r\n\r\n\tonValueChange(value: any): void {\r\n\t\tif (value) {\r\n\t\t\tif (this.multiple && Array.isArray(value)) {\r\n\t\t\t\t// Handle multiple selection\r\n\t\t\t\tconst newValue = this.bindValue ? value.map((v) => v[this.bindValue!]) : value;\r\n\t\t\t\tthis.value = value;\r\n\t\t\t\tthis.onModelChange(newValue);\r\n\t\t\t} else {\r\n\t\t\t\t// Handle single selection\r\n\t\t\t\tconst newValue = this.bindValue ? value[this.bindValue] : value;\r\n\t\t\t\tthis.value = value;\r\n\t\t\t\tthis.onModelChange(newValue);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.value = null;\r\n\t\t\tthis.onModelChange(null);\r\n\t\t}\r\n\t\tthis.onTouched();\r\n\t}\r\n\r\n\tonModelChange(value: string | number | T | T[] | null): void {\r\n\t\tthis.onChange(value);\r\n\t\tthis.modelChange.emit(value);\r\n\t}\r\n\r\n\tvalidate(control: AbstractControl): ValidationErrors | null {\r\n\t\t// eslint-disable-line\r\n\t\tconst isEmpty = this.multiple\r\n\t\t\t? !this.value || (Array.isArray(this.value) && this.value.length === 0)\r\n\t\t\t: this.value === null || this.value === undefined;\r\n\r\n\t\tif (this.isRequired && isEmpty) {\r\n\t\t\treturn { required: true };\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n}\r\n","<p-floatlabel variant=\"in\">\r\n\t<ng-select\r\n\t\t[items]=\"options()\"\r\n\t\t[bindLabel]=\"bindLabel\"\r\n\t\t[bindValue]=\"bindValue || ''\"\r\n\t\t[disabled]=\"disabled\"\r\n\t\t[readonly]=\"isReadonly\"\r\n\t\t[(ngModel)]=\"value\"\r\n\t\t[clearable]=\"clearable\"\r\n\t\t[multiple]=\"multiple\"\r\n\t\t[maxSelectedItems]=\"maxSelectedItems\"\r\n\t\t[compareWith]=\"compareWith\"\r\n\t\t(change)=\"onValueChange($event)\">\r\n\t\t<!-- Template for dropdown items -->\r\n\t\t@if (itemTemplate()) {\r\n\t\t\t<ng-template ng-option-tmp let-item=\"item\">\r\n\t\t\t\t<ng-container\r\n\t\t\t\t\t*ngTemplateOutlet=\"itemTemplate(); context: { $implicit: item }\"></ng-container>\r\n\t\t\t</ng-template>\r\n\t\t}\r\n\r\n\t\t<!-- Template for selected item display -->\r\n\t\t@if (selectedItemTemplate()) {\r\n\t\t\t<ng-template ng-label-tmp let-item=\"item\">\r\n\t\t\t\t<ng-container\r\n\t\t\t\t\t*ngTemplateOutlet=\"selectedItemTemplate(); context: { $implicit: item }\"></ng-container>\r\n\t\t\t</ng-template>\r\n\t\t}\r\n\r\n\t\t<!-- Template for multi-label (selected items with x button) -->\r\n\t\t<ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n\t\t\t@for (item of items; track item) {\r\n\t\t\t\t<div class=\"ng-value\">\r\n\t\t\t\t\t<span class=\"ng-value-icon\" (click)=\"clear(item)\" aria-hidden=\"true\">×</span>\r\n\t\t\t\t\t<span class=\"ng-value-label\">\r\n\t\t\t\t\t\t@if (selectedItemTemplate()) {\r\n\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t*ngTemplateOutlet=\"\r\n\t\t\t\t\t\t\t\t\tselectedItemTemplate();\r\n\t\t\t\t\t\t\t\t\tcontext: { $implicit: item }\r\n\t\t\t\t\t\t\t\t\"></ng-container>\r\n\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t{{ item[bindLabel] }}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</ng-template>\r\n\t</ng-select>\r\n\r\n\t<label [class.required-label]=\"isRequired\">{{ placeholder }}</label>\r\n</p-floatlabel>\r\n","import { Component, input, Input, output } from '@angular/core';\r\nimport { DrawerModule } from 'primeng/drawer';\r\n\r\n@Component({\r\n\tselector: 'ngp-dynamic-drawer',\r\n\timports: [DrawerModule],\r\n\ttemplateUrl: './dynamic-drawer.component.html',\r\n\tstyleUrl: './dynamic-drawer.component.scss'\r\n})\r\nexport class DynamicDrawerComponent {\r\n\tposition = input<'left' | 'right'>('right');\r\n\theader = input<string>('Information');\r\n\tstyleClass = input<string>('!w-[90vw] md:!w-[35vw] !p-4');\r\n\r\n\thide = output<boolean>();\r\n\r\n\t@Input() isOpen = false;\r\n}\r\n","<p-drawer\r\n\t[header]=\"header()\"\r\n\t[(visible)]=\"isOpen\"\r\n\tposition=\"right\"\r\n\t[styleClass]=\"styleClass()\"\r\n\t(onHide)=\"hide.emit(false)\"\r\n\t[dismissible]=\"'false'\"\r\n\t[blockScroll]=\"true\">\r\n\t<div class=\"content-wrapper !h-full\">\r\n\t\t<ng-content></ng-content>\r\n\t</div>\r\n</p-drawer>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, input } from '@angular/core';\r\nimport { DividerModule } from 'primeng/divider';\r\nimport { map, share, timer } from 'rxjs';\r\n\r\n@Component({\r\n\tselector: 'ngp-date-clock',\r\n\timports: [CommonModule, DividerModule],\r\n\ttemplateUrl: './date-clock.component.html',\r\n\tstyleUrl: './date-clock.component.scss'\r\n})\r\nexport class DateClockComponent {\r\n\tstyleClass = input<string>('');\r\n\r\n\trxDate = new Date();\r\n\r\n\tconstructor() {\r\n\t\tthis.initClock();\r\n\t}\r\n\r\n\tinitClock(): void {\r\n\t\ttimer(0, 1000)\r\n\t\t\t.pipe(\r\n\t\t\t\tmap(() => new Date()),\r\n\t\t\t\tshare()\r\n\t\t\t)\r\n\t\t\t.subscribe((time) => {\r\n\t\t\t\tthis.rxDate = time;\r\n\t\t\t});\r\n\t}\r\n}\r\n","<div class=\"flex items-center gap-2\">\r\n\t<div\r\n\t\tclass=\"self-start rounded-lg border border-sky-200 px-4 py-1 flex flex-col justify-center items-center bg-sky-50\"\r\n\t\t[ngClass]=\"styleClass()\">\r\n\t\t<span class=\"text-sm text-gray-500\">{{ rxDate | date: 'MMM' }}</span>\r\n\t\t<span class=\"font-bold text-xl\">{{ rxDate | date: 'dd' }}</span>\r\n\t</div>\r\n\t<div class=\"flex flex-col\">\r\n\t\t<div class=\"text-md font-bold\">Today</div>\r\n\t\t<span class=\"text-sm text-gray-400 font-medium\">\r\n\t\t\t{{ rxDate | date: 'hh' }}:{{ rxDate | date: 'mm' }} {{ rxDate | date: 'a' }}\r\n\t\t</span>\r\n\t</div>\r\n</div>\r\n","import { Component, computed, effect, input, output, signal } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\n\r\ninterface TypedFile {\r\n\tfile: File;\r\n\tpreview?: string;\r\n\terror?: string;\r\n}\r\n\r\n@Component({\r\n\tselector: 'ngp-dynamic-file-upload',\r\n\timports: [ButtonModule],\r\n\ttemplateUrl: './dynamic-file-upload.component.html',\r\n\tstyleUrl: './dynamic-file-upload.component.scss'\r\n})\r\nexport class DynamicFileUploadComponent {\r\n\tfiles = input<File[]>([]);\r\n\tmultiple = input(false);\r\n\taccept = input('.pdf,.png,.jpg,.jpeg,.doc,.docx,.csv,.xls,.xlsx');\r\n\tmaxFileSize = input(2097152);\r\n\tmaxFiles = input<number | null>(null); // New: maximum number of files allowed\r\n\tplaceholder = input('Drag and drop new files here to upload.');\r\n\r\n\tfilesSelected = output<File[]>();\r\n\tfilesCleared = output<void>();\r\n\r\n\tuploadedFiles = signal<TypedFile[]>([]);\r\n\r\n\tconstructor() {\r\n\t\t// Initialize with existing files when component is created\r\n\t\teffect(() => {\r\n\t\t\tconst existingFiles = this.files();\r\n\t\t\tif (existingFiles && existingFiles.length > 0 && this.uploadedFiles().length === 0) {\r\n\t\t\t\tthis.initializeFiles(existingFiles);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initializeFiles(existingFiles: File[]): void {\r\n\t\tconst typedFiles: TypedFile[] = existingFiles.map((file) => {\r\n\t\t\tconst typedFile: TypedFile = { file };\r\n\r\n\t\t\t// Generate preview for images\r\n\t\t\t// Generate preview for images (check both MIME type and extension)\r\n\t\t\tif (this.isImageFile(file)) {\r\n\t\t\t\tconst reader = new FileReader();\r\n\t\t\t\treader.onload = (e) => {\r\n\t\t\t\t\ttypedFile.preview = e.target?.result as string;\r\n\t\t\t\t};\r\n\t\t\t\treader.readAsDataURL(file);\r\n\t\t\t}\r\n\r\n\t\t\treturn typedFile;\r\n\t\t});\r\n\r\n\t\tthis.uploadedFiles.set(typedFiles);\r\n\t}\r\n\tisDragging = signal(false);\r\n\r\n\tvalidFiles = computed(() =>\r\n\t\tthis.uploadedFiles()\r\n\t\t\t.filter((tf) => !tf.error)\r\n\t\t\t.map((tf) => tf.file)\r\n\t);\r\n\r\n\t// New: computed property to check if max files limit is reached\r\n\tisMaxFilesReached = computed(() => {\r\n\t\tconst max = this.maxFiles();\r\n\t\tif (max === null) return false;\r\n\t\treturn this.uploadedFiles().length >= max;\r\n\t});\r\n\r\n\tonDragOver(event: DragEvent): void {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\t// Don't allow drag if max files reached\r\n\t\tif (!this.isMaxFilesReached()) {\r\n\t\t\tthis.isDragging.set(true);\r\n\t\t}\r\n\t}\r\n\r\n\tonDragLeave(event: DragEvent): void {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\tthis.isDragging.set(false);\r\n\t}\r\n\r\n\tonDrop(event: DragEvent): void {\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\tthis.isDragging.set(false);\r\n\r\n\t\t// Don't process files if max limit reached\r\n\t\tif (this.isMaxFilesReached()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst files = event.dataTransfer?.files;\r\n\t\tif (files) {\r\n\t\t\tthis.handleFiles(Array.from(files));\r\n\t\t}\r\n\t}\r\n\r\n\tonFileSelected(event: Event): void {\r\n\t\tconst input = event.target as HTMLInputElement;\r\n\t\tif (input.files) {\r\n\t\t\tthis.handleFiles(Array.from(input.files));\r\n\t\t\tinput.value = '';\r\n\t\t}\r\n\t}\r\n\r\n\thandleFiles(newFiles: File[]): void {\r\n\t\tif (!this.multiple() && newFiles.length > 0) {\r\n\t\t\tthis.uploadedFiles.set([]);\r\n\t\t\tnewFiles = [newFiles[0]];\r\n\t\t}\r\n\r\n\t\t// New: Check max files limit\r\n\t\tconst maxFiles = this.maxFiles();\r\n\t\tif (maxFiles !== null) {\r\n\t\t\tconst currentCount = this.uploadedFiles().length;\r\n\t\t\tconst availableSlots = maxFiles - currentCount;\r\n\r\n\t\t\tif (availableSlots <= 0) {\r\n\t\t\t\t// Max limit already reached\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Limit new files to available slots\r\n\t\t\tnewFiles = newFiles.slice(0, availableSlots);\r\n\t\t}\r\n\r\n\t\tconst typedFiles: TypedFile[] = newFiles.map((file) => {\r\n\t\t\tconst typedFile: TypedFile = { file };\r\n\r\n\t\t\t// Validate file size\r\n\t\t\tif (file.size > this.maxFileSize()) {\r\n\t\t\t\ttypedFile.error = `File size exceeds ${this.formatFileSize(this.maxFileSize())}`;\r\n\t\t\t}\r\n\r\n\t\t\t// Validate file type\r\n\t\t\tconst acceptedTypes = this.accept()\r\n\t\t\t\t.split(',')\r\n\t\t\t\t.map((t) => t.trim());\r\n\t\t\tconst fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();\r\n\r\n\t\t\tconst isValidExtension = acceptedTypes.some(\r\n\t\t\t\t(type) => type === fileExtension || type === '.' + fileExtension.substring(1)\r\n\t\t\t);\r\n\r\n\t\t\tif (!isValidExtension && !typedFile.error) {\r\n\t\t\t\ttypedFile.error = 'File type not accepted';\r\n\t\t\t}\r\n\r\n\t\t\t// Generate preview for images\r\n\t\t\tif (file.type.startsWith('image/') && !typedFile.error) {\r\n\t\t\t\tconst reader = new FileReader();\r\n\t\t\t\treader.onload = (e) => {\r\n\t\t\t\t\ttypedFile.preview = e.target?.result as string;\r\n\t\t\t\t};\r\n\t\t\t\treader.readAsDataURL(file);\r\n\t\t\t}\r\n\r\n\t\t\treturn typedFile;\r\n\t\t});\r\n\r\n\t\tif (this.multiple()) {\r\n\t\t\tthis.uploadedFiles.update((existing) => [...existing, ...typedFiles]);\r\n\t\t} else {\r\n\t\t\tthis.uploadedFiles.set(typedFiles);\r\n\t\t}\r\n\r\n\t\tthis.emitFiles();\r\n\t}\r\n\r\n\tremoveFile(typedFile: TypedFile): void {\r\n\t\tthis.uploadedFiles.update((files) => files.filter((f) => f.file !== typedFile.file));\r\n\t\tthis.emitFiles();\r\n\t}\r\n\r\n\tclearAll(): void {\r\n\t\tthis.uploadedFiles.set([]);\r\n\t\tthis.filesCleared.emit();\r\n\t}\r\n\r\n\temitFiles(): void {\r\n\t\tthis.filesSelected.emit(this.validFiles());\r\n\t}\r\n\r\n\tformatFileSize(bytes: number): string {\r\n\t\tif (bytes === 0) return '0 Bytes';\r\n\t\tconst k = 1024;\r\n\t\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\t\treturn Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\r\n\t}\r\n\r\n\tprivate isImageFile(file: File): boolean {\r\n\t\t// Check MIME type\r\n\t\tif (file.type.startsWith('image/')) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// Check file extension\r\n\t\tconst fileName = file.name.toLowerCase();\r\n\t\tconst imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'];\r\n\t\treturn imageExtensions.some((ext) => fileName.endsWith(ext));\r\n\t}\r\n}\r\n","<div class=\"w-full h-full flex flex-col\">\r\n\t<!-- Upload Area -->\r\n\t<div\r\n\t\tclass=\"relative border-2 border-dashed rounded-lg transition-colors flex-shrink-0\"\r\n\t\t[class.border-blue-400]=\"isDragging()\"\r\n\t\t[class.bg-blue-50]=\"isDragging()\"\r\n\t\t[class.border-gray-300]=\"!isDragging()\"\r\n\t\t(dragover)=\"onDragOver($event)\"\r\n\t\t(dragleave)=\"onDragLeave($event)\"\r\n\t\t(drop)=\"onDrop($event)\">\r\n\t\t<input\r\n\t\t\t#fileInput\r\n\t\t\ttype=\"file\"\r\n\t\t\tclass=\"hidden\"\r\n\t\t\t[multiple]=\"multiple()\"\r\n\t\t\t[accept]=\"accept()\"\r\n\t\t\t(change)=\"onFileSelected($event)\" />\r\n\r\n\t\t<div class=\"p-8 text-center cursor-pointer\" (click)=\"fileInput.click()\">\r\n\t\t\t<div class=\"w-24 mx-auto\">\r\n\t\t\t\t<svg\r\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\r\n\t\t\t\t\tviewBox=\"0 0 855.42518 833.48708\"\r\n\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n\t\t\t\t\tartist=\"Katerina Limpitsouni\"\r\n\t\t\t\t\tsource=\"https://undraw.co/\">\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M739.66209,831.96985H93.28238c-26.55003,0-48.15129-21.60126-48.15129-48.15277V219.36774c0-26.55003,21.60126-48.15129,48.15129-48.15129h646.37972c26.55151,0,48.15277,21.60126,48.15277,48.15129v564.44933c0,26.55151-21.60126,48.15277-48.15277,48.15277Z\"\r\n\t\t\t\t\t\tfill=\"#fff\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M739.66209,833.48708H93.28238c-27.38718,0-49.66852-22.28134-49.66852-49.67V219.36774c0-27.38718,22.28134-49.66852,49.66852-49.66852h646.37972c27.38866,0,49.67,22.28134,49.67,49.66852v564.44933c0,27.38866-22.28134,49.67-49.67,49.67ZM93.28238,172.73368c-25.71437,0-46.63406,20.91969-46.63406,46.63406v564.44933c0,25.71437,20.91969,46.63554,46.63406,46.63554h646.37972c25.71437,0,46.63554-20.92117,46.63554-46.63554V219.36774c0-25.71437-20.92117-46.63406-46.63554-46.63406H93.28238Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M633.05154,719.69635H199.12394c-11.29477,0-20.4826-9.18783-20.4826-20.4826,0-5.46736,2.13212-10.60875,6.00372-14.47887,3.8553-3.8716,8.99818-6.00372,14.47887-6.00372h433.9276c11.29477,0,20.4826,9.18783,20.4826,20.4826,0,5.46736-2.13212,10.61023-6.00224,14.48035-3.85382,3.87012-8.9967,6.00224-14.48035,6.00224Z\"\r\n\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M537.46609,699.2145c0,5.44736-2.2151,10.37835-5.77999,13.94325-3.56638,3.56564-8.49737,5.78073-13.94399,5.78073H199.12394c-10.89323,0-19.72398-8.83001-19.72398-19.72398,0-5.44662,2.2151-10.37761,5.78147-13.94325,3.5649-3.58045,8.49589-5.78073,13.94251-5.78073h318.61817c10.89323,0,19.72398,8.83075,19.72398,19.72398Z\"\r\n\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M502.03197,638.5231h-176.42977c-15.3575,0-27.85242-12.49492-27.85242-27.8539v-231.05003c0-15.3575,12.49492-27.85242,27.85242-27.85242l133.30727.7601,70.9764,76.68824v181.45411c0,15.35898-12.49492,27.8539-27.8539,27.8539Z\"\r\n\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M414.57644,442.63753h-67.53893c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h67.53893c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M481.04412,483.00709h-134.74301c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.74301c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M481.04412,520.48592h-134.00662c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.00662c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M380.80771,558.65075h-34.5066c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h34.5066c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M529.12726,431.03013h-68.71093c-7.70172,0-13.9677-6.26598-13.9677-13.9677v-64.53707h3.03446v64.53707c0,6.02891,4.90433,10.93324,10.93324,10.93324h68.71093v3.03446Z\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M416.11441,658.24708c-13.64025,0-24.73795-11.0977-24.73795-24.73795v-23.81339h-16.74138c-3.49674,0-6.62751-1.9484-8.17289-5.08509s-1.18089-6.80531.94975-9.57751l42.1283-54.79658c1.71133-2.22399,4.30869-3.50267,7.1046-3.45673,2.8048.02667,5.36957,1.33647,7.03645,3.59305l41.1667,55.72855c2.13805,2.8937,2.45957,6.68826.83862,9.902-1.62243,3.21374-4.8658,5.20955-8.46478,5.20955h-16.36948v22.29616c0,13.64025-11.0977,24.73795-24.73795,24.73795Z\"\r\n\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t<circle cx=\"560.98874\" cy=\"420.8005\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"581.47134\" cy=\"479.21383\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"259.81871\" cy=\"436.73141\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"264.3704\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"259.81871\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"560.23012\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<circle cx=\"560.23012\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M37.40122,152.42148c-6.44526,0-12.11265-4.61836-13.35132-11.0088L.24984,18.65638c-.76454-3.9442.24448-7.99953,2.76776-11.12585,2.5218-3.12484,6.27191-4.96804,10.28871-5.05397L128.31645.00364c6.71641-.15261,12.40898,4.50872,13.65062,11.06214l22.55693,119.0462c.72898,3.85234-.23855,7.83062-2.65811,10.91694-2.41808,3.08484-6.04966,4.97693-9.96274,5.18881l-113.76701,6.18301c-.24596.01334-.49191.02074-.73491.02074Z\"\r\n\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t<polygon\r\n\t\t\t\t\t\tpoints=\"29.95846 132.52692 54.99274 65.01021 96.71655 96.11341 110.37162 82.45835 158.16434 131.7683 29.95846 132.52692\"\r\n\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M107.33749,58.94148c-6.27487,0-11.37922-5.10435-11.37922-11.37922s5.10435-11.37922,11.37922-11.37922,11.37922,5.10435,11.37922,11.37922-5.10435,11.37922-11.37922,11.37922Z\"\r\n\t\t\t\t\t\tfill=\"#08BBD3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M41.65954,616.11285c-3.58564,0-7.09275-1.04902-10.16129-3.07891-4.19312-2.77665-7.02163-7.02608-7.96101-11.96596L.5521,480.25267c-1.87135-9.84125,4.31462-19.28244,14.08327-21.49309l102.97009-23.32444c4.88655-1.10384,9.89162-.22077,14.09957,2.48772,4.2109,2.71145,7.08682,6.90606,8.0988,11.8089l25.05355,121.36946c2.04174,9.89014-4.32647,19.67509-14.19439,21.81462l-105.03998,22.76881c-1.31869.28596-2.64626.4282-3.96347.4282Z\"\r\n\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M33.74594,507.28424c-2.50698,0-4.7369-1.78245-5.21399-4.33685-.53933-2.88333,1.36165-5.65701,4.24498-6.19486l83.24611-15.5516c2.88185-.54674,5.65553,1.36165,6.19486,4.24498s-1.36165,5.65701-4.24498,6.19486l-83.24611,15.5516c-.32893.06223-.65786.09186-.98087.09186Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M41.33357,539.14606c-2.40327,0-4.57984-1.64169-5.16214-4.082-.6786-2.85221,1.0831-5.71628,3.9368-6.39637l78.36253-18.65866c2.85073-.67564,5.7148,1.0831,6.39637,3.9368.6786,2.85221-1.0831,5.71628-3.9368,6.39637l-78.36253,18.65866c-.41339.09779-.82677.1452-1.23423.1452Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M46.64239,569.97367c-2.45513,0-4.65985-1.71281-5.18881-4.2109-.60748-2.86999,1.22534-5.68813,4.09385-6.29561l53.46159-11.32144c2.88481-.606,5.68961,1.22534,6.29561,4.09385.60748,2.86999-1.22534,5.68813-4.09385,6.29561l-53.46159,11.32144c-.3719.07853-.74232.11705-1.10681.11705Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M816.49406,244.42277c-.94382,0-1.89802-.07408-2.85666-.22373l-106.17939-16.65841c-4.96952-.78084-9.30785-3.46859-12.21785-7.57133-2.91-4.10126-4.01384-9.0856-3.10854-14.03141l22.15096-120.97089c1.80764-9.8531,10.97472-16.41097,20.89006-14.96634l104.45028,15.39603c4.95322.73046,9.30488,3.36191,12.25192,7.40983,2.94852,4.04644,4.11756,8.99521,3.29227,13.93362l-20.42185,122.23475c-1.50241,9.00262-9.38341,15.44788-18.2512,15.44788Z\"\r\n\t\t\t\t\t\tfill=\"#d6d6e3\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M820.66792,138.04188c-.323,0-.65045-.02963-.97938-.09186l-83.25204-15.52938c-2.88333-.53785-4.78431-3.31005-4.24646-6.19338.53636-2.88333,3.30264-4.79616,6.19338-4.24646l83.25204,15.52938c2.88333.53785,4.78431,3.31005,4.24646,6.19338-.47562,2.5544-2.70701,4.33833-5.21399,4.33833Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M812.81507,165.83355c-.24003,0-.48006-.01482-.72454-.0489l-79.81753-10.86953c-2.90555-.39561-4.93989-3.0715-4.54428-5.97854.39709-2.90704,3.08187-4.94285,5.97854-4.54428l79.81753,10.86953c2.90555.39561,4.93989,3.0715,4.54428,5.97854-.36301,2.66256-2.64033,4.59317-5.254,4.59317Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M780.77249,194.36309c-.28152,0-.56748-.02371-.85492-.06964l-53.9461-8.73c-2.89518-.46821-4.86136-3.19596-4.39315-6.09114.46969-2.89518,3.17818-4.85543,6.09114-4.39315l53.9461,8.73c2.89518.46821,4.86136,3.19596,4.39315,6.09114-.42228,2.60774-2.67589,4.46279-5.23622,4.46279Z\"\r\n\t\t\t\t\t\tfill=\"#090814\" />\r\n\t\t\t\t</svg>\r\n\t\t\t</div>\r\n\t\t\t<p class=\"mt-2 text-sm text-gray-600\">\r\n\t\t\t\t{{ placeholder() }}\r\n\t\t\t</p>\r\n\t\t\t<p class=\"mt-1 text-xs text-gray-500\"> or click to browse </p>\r\n\t\t\t<p class=\"mt-2 text-xs text-red-600 !mb-0\">\r\n\t\t\t\tMax size per file: <strong>{{ formatFileSize(maxFileSize()) }}</strong>\r\n\t\t\t</p>\r\n\t\t\t@if (maxFiles()) {\r\n\t\t\t\t<p class=\"text-xs text-red-600\">\r\n\t\t\t\t\tMax files: <strong>{{ maxFiles() }}</strong>\r\n\t\t\t\t</p>\r\n\t\t\t}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<!-- Uploaded Files List -->\r\n\t@if (uploadedFiles().length > 0) {\r\n\t\t<div class=\"mt-4 flex-1 flex flex-col min-h-0\">\r\n\t\t\t<div class=\"flex items-center justify-between mb-2 flex-shrink-0\">\r\n\t\t\t\t<h3 class=\"!text-sm font-medium text-gray-700\">\r\n\t\t\t\t\tSelected Files ({{ uploadedFiles().length }})\r\n\t\t\t\t</h3>\r\n\t\t\t\t<button type=\"button\" pButton severity=\"danger\" text size=\"small\" (click)=\"clearAll()\">\r\n\t\t\t\t\tClear All\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"flex-1 overflow-y-auto space-y-2 min-h-0\">\r\n\t\t\t\t@for (typedFile of uploadedFiles(); track typedFile.file.name) {\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass=\"flex items-center justify-between p-3 bg-gray-50 rounded-lg border\"\r\n\t\t\t\t\t\t[class.border-red-300]=\"typedFile.error\"\r\n\t\t\t\t\t\t[class.border-gray-200]=\"!typedFile.error\">\r\n\t\t\t\t\t\t<div class=\"flex items-center flex-1 min-w-0\">\r\n\t\t\t\t\t\t\t<!-- File Icon/Preview -->\r\n\t\t\t\t\t\t\t@if (typedFile.preview) {\r\n\t\t\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\t\t\t[src]=\"typedFile.preview\"\r\n\t\t\t\t\t\t\t\t\talt=\"preview\"\r\n\t\t\t\t\t\t\t\t\tclass=\"h-10 w-10 rounded object-cover flex-shrink-0\" />\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\tclass=\"h-10 w-10 rounded bg-gray-200 flex items-center justify-center flex-shrink-0\">\r\n\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\tclass=\"h-6 w-6 text-gray-500\"\r\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\r\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\r\n\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\">\r\n\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\r\n\t\t\t\t\t\t\t\t\t\t\td=\"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z\" />\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t<!-- File Info -->\r\n\t\t\t\t\t\t\t<div class=\"ml-3 flex-1 min-w-0\">\r\n\t\t\t\t\t\t\t\t<p class=\"text-sm font-medium text-gray-900 truncate\">\r\n\t\t\t\t\t\t\t\t\t{{ typedFile.file.name }}\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">\r\n\t\t\t\t\t\t\t\t\t{{ formatFileSize(typedFile.file.size) }}\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t@if (typedFile.error) {\r\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-red-600 mt-1\">\r\n\t\t\t\t\t\t\t\t\t\t{{ typedFile.error }}\r\n\t\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t<!-- Remove Button -->\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclass=\"ml-3 text-gray-400 hover:text-red-600 flex-shrink-0\"\r\n\t\t\t\t\t\t\t(click)=\"removeFile(typedFile)\">\r\n\t\t\t\t\t\t\t<svg class=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\r\n\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\r\n\t\t\t\t\t\t\t\t\td=\"M6 18L18 6M6 6l12 12\" />\r\n\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t}\r\n</div>\r\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, input, output } from '@angular/core';\nimport { DialogModule } from 'primeng/dialog';\nimport { NgxExtendedPdfViewerModule } from 'ngx-extended-pdf-viewer';\n\n@Component({\n\tselector: 'ngp-pdf-viewer-modal',\n\timports: [CommonModule, DialogModule, NgxExtendedPdfViewerModule],\n\ttemplateUrl: './pdf-viewer-modal.component.html',\n\tstyleUrl: './pdf-viewer-modal.component.scss'\n})\nexport class PdfViewerModalComponent {\n\tpdfFile = input<ArrayBuffer | string | null>(null);\n\n\thide = output<boolean>();\n\n\t@Input() visible = false;\n\t@Input() filename = 'untitled.pdf';\n}\n","<p-dialog\n\t[(visible)]=\"visible\"\n\t[modal]=\"true\"\n\t[maximizable]=\"true\"\n\t[dismissableMask]=\"false\"\n\t[resizable]=\"false\"\n\tstyleClass=\"w-11/12 md:w-3/4 lg:w-8/12 max-h-[80vh]\"\n\tappendTo=\"body\"\n\t(onHide)=\"hide.emit(false)\">\n\t@if (pdfFile()) {\n\t\t<ngx-extended-pdf-viewer\n\t\t\t[src]=\"pdfFile()!\"\n\t\t\tuseBrowserLocale=\"true\"\n\t\t\t[showZoomButtons]=\"true\"\n\t\t\t[showSidebarButton]=\"false\"\n\t\t\t[showPagingButtons]=\"false\"\n\t\t\t[showSecondaryToolbarButton]=\"false\"\n\t\t\t[showOpenFileButton]=\"false\"\n\t\t\t[showTextEditor]=\"false\"\n\t\t\t[showDrawEditor]=\"false\"\n\t\t\t[showHighlightEditor]=\"false\"\n\t\t\t[showTextEditor]=\"false\"\n\t\t\t[showStampEditor]=\"false\"\n\t\t\t[filenameForDownload]=\"filename === '' ? 'untitled.pdf' : filename\"\n\t\t\theight=\"100%\"\n\t\t\twidth=\"100%\"></ngx-extended-pdf-viewer>\n\t} @else {\n\t\t<div class=\"flex items-center justify-center h-full\">\n\t\t\t<p>Loading PDF...</p>\n\t\t</div>\n\t}\n</p-dialog>\n","import {\n\tComponent,\n\tcomputed,\n\teffect,\n\tinject,\n\tinput,\n\tOnDestroy,\n\toutput,\n\tsignal\n} from '@angular/core';\nimport { GalleriaModule } from 'primeng/galleria';\nimport { ButtonModule } from 'primeng/button';\nimport { MessageService } from 'primeng/api';\nimport { ToastModule } from 'primeng/toast';\nimport { SpeedDialModule } from 'primeng/speeddial';\nimport { PdfViewerModalComponent } from '../pdf-viewer/pdf-viewer-modal.component';\nimport { GalleriaItem, TypedFile } from '../../models/file-type.model';\n\n@Component({\n\tselector: 'ngp-file-upload-viewer',\n\timports: [GalleriaModule, ButtonModule, ToastModule, PdfViewerModalComponent, SpeedDialModule],\n\ttemplateUrl: './file-upload-viewer.component.html',\n\tstyleUrl: './file-upload-viewer.component.scss'\n})\nexport class FileUploadViewerComponent implements OnDestroy {\n\tfiles = input<File[]>([]);\n\tmultiple = input(false);\n\taccept = input('.pdf,.png,.jpg,.jpeg,.doc,.docx,.csv,.xls,.xlsx');\n\tmaxFileSize = input(2097152);\n\tmaxFiles = input<number | null>(null);\n\tplaceholder = input('Drag and drop new files here to upload.');\n\tisViewMode = input<boolean>(false);\n\n\tfilesSelected = output<File[]>();\n\tfilesCleared = output<void>();\n\n\tuploadedFiles = signal<TypedFile[]>([]);\n\tisDragging = signal(false);\n\tisVisible = signal(true);\n\n\tvisible = computed(() => this.isVisible());\n\n\tresponsiveOptions = signal([\n\t\t{\n\t\t\tbreakpoint: '1024px',\n\t\t\tnumVisible: 5\n\t\t},\n\t\t{\n\t\t\tbreakpoint: '768px',\n\t\t\tnumVisible: 3\n\t\t},\n\t\t{\n\t\t\tbreakpoint: '560px',\n\t\t\tnumVisible: 1\n\t\t}\n\t]);\n\n\tcontainerStyle = signal({ 'max-width': '850px' });\n\n\tisPdfViewerVisible = false;\n\tcurrentFileUrl: string | null = null;\n\tcurrentFileName: string | null = null;\n\n\tmessageService = inject(MessageService);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst existingFiles = this.files();\n\t\t\tconst currentFiles = this.uploadedFiles();\n\n\t\t\tif (existingFiles && existingFiles.length > 0 && currentFiles.length === 0) {\n\t\t\t\tthis.initializeFiles(existingFiles);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate initializeFiles(existingFiles: File[]): void {\n\t\tconst typedFiles: TypedFile[] = existingFiles.map((file) => {\n\t\t\tconst typedFile: TypedFile = { file };\n\n\t\t\tif (this.isImageFile(file)) {\n\t\t\t\tconst reader = new FileReader();\n\t\t\t\treader.onload = (e) => {\n\t\t\t\t\ttypedFile.preview = e.target?.result as string;\n\t\t\t\t\t// Trigger update to refresh the computed signal\n\t\t\t\t\tthis.uploadedFiles.update((files) => [...files]);\n\t\t\t\t};\n\t\t\t\treader.readAsDataURL(file);\n\t\t\t}\n\n\t\t\treturn typedFile;\n\t\t});\n\n\t\tthis.uploadedFiles.set(typedFiles);\n\t}\n\n\tvalidFiles = computed(() =>\n\t\tthis.uploadedFiles()\n\t\t\t.filter((tf) => !tf.error)\n\t\t\t.map((tf) => tf.file)\n\t);\n\n\tgalleriaItems = computed<GalleriaItem[]>(() => {\n\t\treturn this.uploadedFiles()\n\t\t\t.filter((tf) => tf?.file) // Only check for file existence\n\t\t\t.map((typedFile) => {\n\t\t\t\tconst fileType = this.getFileType(typedFile.file);\n\t\t\t\tconst preview = typedFile.preview || '';\n\t\t\t\t// Create object URL for the file (useful for downloads/previews)\n\t\t\t\tconst fileUrl = URL.createObjectURL(typedFile.file);\n\n\t\t\t\tconst newFile: GalleriaItem = {\n\t\t\t\t\titemImageSrc: preview,\n\t\t\t\t\tthumbnailImageSrc: preview,\n\t\t\t\t\talt: typedFile.file?.name || 'Unknown file',\n\t\t\t\t\ttitle: typedFile.file?.name || 'Unknown file',\n\t\t\t\t\ttype: fileType,\n\t\t\t\t\ttypedFile: typedFile,\n\t\t\t\t\tfileUrl,\n\t\t\t\t\tspeedDialItems: []\n\t\t\t\t};\n\n\t\t\t\t// Set speedDialItems with reference to the item itself\n\t\t\t\tnewFile.speedDialItems = [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'pi pi-trash',\n\t\t\t\t\t\ttitle: 'Remove',\n\t\t\t\t\t\tdisabled: this.isViewMode(),\n\t\t\t\t\t\tcommand: () => this.removeFileFromGalleria(typedFile)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'pi pi-download',\n\t\t\t\t\t\ttitle: 'View / Download',\n\t\t\t\t\t\tdisabled: fileType === 'image',\n\t\t\t\t\t\tcommand: () => this.onFileDownload(newFile)\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\t\treturn newFile;\n\t\t\t});\n\t});\n\n\tprivate isImageFile(file: File): boolean {\n\t\tif (file?.type.startsWith('image/')) {\n\t\t\treturn true;\n\t\t}\n\t\tconst fileName = file.name.toLowerCase();\n\t\tconst imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.svg', '.webp'];\n\t\treturn imageExtensions.some((ext) => fileName.endsWith(ext));\n\t}\n\n\tprivate getFileType(file: File): GalleriaItem['type'] {\n\t\tif (!file?.name) return 'other';\n\n\t\tconst extension = file.name.split('.').pop()?.toLowerCase();\n\n\t\tif (this.isImageFile(file)) return 'image';\n\t\tif (extension === 'pdf') return 'pdf';\n\t\tif (extension === 'doc' || extension === 'docx') return 'docx';\n\t\tif (extension === 'csv') return 'csv';\n\t\tif (extension === 'xls' || extension === 'xlsx') return 'xlsx';\n\n\t\treturn 'other';\n\t}\n\n\tonDragOver(event: DragEvent): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis.isDragging.set(true);\n\t}\n\n\tonDragLeave(event: DragEvent): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis.isDragging.set(false);\n\t}\n\n\tonDrop(event: DragEvent): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis.isDragging.set(false);\n\n\t\tconst files = event.dataTransfer?.files;\n\t\tif (files) {\n\t\t\tthis.handleFiles(Array.from(files));\n\t\t}\n\t}\n\n\tonFileSelected(event: Event): void {\n\t\tconst input = event.target as HTMLInputElement;\n\t\tif (input.files) {\n\t\t\tthis.handleFiles(Array.from(input.files));\n\t\t\tinput.value = '';\n\t\t}\n\t}\n\n\thandleFiles(newFiles: File[]): void {\n\t\t// Check max files limit - count only valid files\n\t\tconst maxFiles = this.maxFiles();\n\t\tif (maxFiles !== null) {\n\t\t\tconst currentFileCount = this.uploadedFiles().length;\n\t\t\tconst remainingSlots = maxFiles - currentFileCount;\n\n\t\t\tif (remainingSlots <= 0) {\n\t\t\t\tthis.messageService.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: 'Upload Limit Reached',\n\t\t\t\t\tdetail: `You can only upload a maximum of ${maxFiles} files.`\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (newFiles.length > remainingSlots) {\n\t\t\t\tthis.messageService.add({\n\t\t\t\t\tseverity: 'warn',\n\t\t\t\t\tsummary: 'File Limit',\n\t\t\t\t\tdetail: `Only ${remainingSlots} file(s) can be added. Remaining files were ignored.`\n\t\t\t\t});\n\t\t\t\tnewFiles = newFiles.slice(0, remainingSlots);\n\t\t\t}\n\t\t}\n\n\t\t// Handle single file mode\n\t\tif (!this.multiple() && newFiles.length > 0) {\n\t\t\tthis.uploadedFiles.set([]);\n\t\t\tnewFiles = [newFiles[0]];\n\t\t}\n\n\t\tconst typedFiles: TypedFile[] = newFiles.map((file) => {\n\t\t\tconst typedFile: TypedFile = { file };\n\n\t\t\t// Validate file size\n\t\t\tif (file.size > this.maxFileSize()) {\n\t\t\t\ttypedFile.error = `File size exceeds ${this.formatFileSize(this.maxFileSize())}`;\n\t\t\t}\n\n\t\t\t// Validate file type\n\t\t\tconst acceptedTypes = this.accept()\n\t\t\t\t.split(',')\n\t\t\t\t.map((t) => t.trim());\n\t\t\tconst fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();\n\n\t\t\tconst isValidExtension = acceptedTypes.some(\n\t\t\t\t(type) => type === fileExtension || type === '.' + fileExtension.substring(1)\n\t\t\t);\n\n\t\t\tif (!isValidExtension && !typedFile.error) {\n\t\t\t\ttypedFile.error = 'File type not accepted';\n\t\t\t}\n\n\t\t\t// Generate preview for images\n\t\t\tif (this.isImageFile(file) && !typedFile.error) {\n\t\t\t\tconst reader = new FileReader();\n\t\t\t\treader.onload = (e) => {\n\t\t\t\t\ttypedFile.preview = e.target?.result as string;\n\t\t\t\t\tthis.uploadedFiles.update((files) => [...files]);\n\t\t\t\t};\n\t\t\t\treader.readAsDataURL(file);\n\t\t\t}\n\n\t\t\treturn typedFile;\n\t\t});\n\n\t\t// Separate valid and invalid files\n\t\tconst validTypedFiles = typedFiles.filter((tf) => !tf.error);\n\t\tconst invalidFiles = typedFiles.filter((tf) => tf.error);\n\n\t\t// Show error messages for invalid files\n\t\tif (invalidFiles.length > 0) {\n\t\t\tif (invalidFiles.length === 1) {\n\t\t\t\tthis.messageService.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: 'Invalid File',\n\t\t\t\t\tdetail: `\"${invalidFiles[0].file.name}\" - ${invalidFiles[0].error}`,\n\t\t\t\t\tlife: 5000\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst errorDetails = invalidFiles.map((tf) => `• ${tf.file.name}: ${tf.error}`).join('\\n');\n\n\t\t\t\tthis.messageService.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: `${invalidFiles.length} Invalid Files`,\n\t\t\t\t\tdetail: `The following files could not be uploaded:\\n${errorDetails}`,\n\t\t\t\t\tlife: 7000\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Only add valid files to uploadedFiles\n\t\tif (validTypedFiles.length > 0) {\n\t\t\tif (this.multiple()) {\n\t\t\t\tthis.uploadedFiles.update((existing) => {\n\t\t\t\t\tconst updated = [...existing, ...validTypedFiles];\n\t\t\t\t\treturn updated;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.uploadedFiles.set(validTypedFiles);\n\t\t\t}\n\t\t}\n\n\t\tthis.emitFiles();\n\t}\n\n\tremoveFileFromGalleria(typedFile: TypedFile): void {\n\t\tthis.uploadedFiles.update((files) => files.filter((f) => f.file !== typedFile.file));\n\t\tthis.emitFiles();\n\t}\n\n\tclearAll(): void {\n\t\tthis.uploadedFiles.set([]);\n\t\tthis.filesCleared.emit();\n\t}\n\n\temitFiles(): void {\n\t\tconst validFiles = this.validFiles();\n\t\tthis.isVisible.set(false);\n\t\tthis.filesSelected.emit(validFiles);\n\t\tsetTimeout(() => {\n\t\t\tthis.isVisible.set(true);\n\t\t}, 100);\n\t}\n\n\tformatFileSize(bytes: number): string {\n\t\tif (bytes === 0) return '0 Bytes';\n\t\tconst k = 1024;\n\t\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\t\treturn Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\n\t}\n\n\tonFileDownload(fileItem: GalleriaItem): void {\n\t\tif (!['image', 'pdf'].includes(fileItem.type)) {\n\t\t\t// Use the provided fileUrl or create a new one\n\t\t\tconst url = fileItem.fileUrl || URL.createObjectURL(fileItem.typedFile.file);\n\n\t\t\tconst link = document.createElement('a');\n\t\t\tlink.href = url;\n\t\t\tlink.download = fileItem.typedFile.file.name;\n\t\t\tdocument.body.appendChild(link); // Required for Firefox\n\t\t\tlink.click();\n\t\t\tlink.remove();\n\n\t\t\t// Clean up if we created a new URL\n\t\t\tif (!fileItem.fileUrl) {\n\t\t\t\tURL.revokeObjectURL(url);\n\t\t\t}\n\t\t} else if (fileItem.type === 'pdf') {\n\t\t\tthis.currentFileUrl = fileItem.fileUrl as string;\n\t\t\tthis.currentFileName = fileItem.title.split('/')?.pop() || fileItem.typedFile.file.name;\n\n\t\t\tthis.isPdfViewerVisible = true;\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\t// Clean up object URLs\n\t\tthis.galleriaItems().forEach((item) => {\n\t\t\tif (item.fileUrl?.startsWith('blob:')) {\n\t\t\t\tURL.revokeObjectURL(item.fileUrl);\n\t\t\t}\n\t\t});\n\t}\n}\n","<div class=\"w-full h-full flex flex-col\">\n\t<!-- Toast for messages -->\n\t<p-toast position=\"top-right\"></p-toast>\n\n\t@if (!isViewMode()) {\n\t\t<!-- Upload Area -->\n\t\t<div\n\t\t\tclass=\"relative border-2 border-dashed rounded-lg transition-colors flex-shrink-0\"\n\t\t\t[class.border-blue-400]=\"isDragging()\"\n\t\t\t[class.bg-blue-50]=\"isDragging()\"\n\t\t\t[class.border-gray-300]=\"!isDragging()\"\n\t\t\t(dragover)=\"onDragOver($event)\"\n\t\t\t(dragleave)=\"onDragLeave($event)\"\n\t\t\t(drop)=\"onDrop($event)\">\n\t\t\t<input\n\t\t\t\t#fileInput\n\t\t\t\ttype=\"file\"\n\t\t\t\tclass=\"hidden\"\n\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t[accept]=\"accept()\"\n\t\t\t\t(change)=\"onFileSelected($event)\" />\n\n\t\t\t<div class=\"p-8 text-center cursor-pointer\" (click)=\"fileInput.click()\">\n\t\t\t\t<div class=\"w-24 mx-auto\">\n\t\t\t\t\t<svg\n\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\tviewBox=\"0 0 855.42518 833.48708\"\n\t\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\t\t\tartist=\"Katerina Limpitsouni\"\n\t\t\t\t\t\tsource=\"https://undraw.co/\">\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M739.66209,831.96985H93.28238c-26.55003,0-48.15129-21.60126-48.15129-48.15277V219.36774c0-26.55003,21.60126-48.15129,48.15129-48.15129h646.37972c26.55151,0,48.15277,21.60126,48.15277,48.15129v564.44933c0,26.55151-21.60126,48.15277-48.15277,48.15277Z\"\n\t\t\t\t\t\t\tfill=\"#fff\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M739.66209,833.48708H93.28238c-27.38718,0-49.66852-22.28134-49.66852-49.67V219.36774c0-27.38718,22.28134-49.66852,49.66852-49.66852h646.37972c27.38866,0,49.67,22.28134,49.67,49.66852v564.44933c0,27.38866-22.28134,49.67-49.67,49.67ZM93.28238,172.73368c-25.71437,0-46.63406,20.91969-46.63406,46.63406v564.44933c0,25.71437,20.91969,46.63554,46.63406,46.63554h646.37972c25.71437,0,46.63554-20.92117,46.63554-46.63554V219.36774c0-25.71437-20.92117-46.63406-46.63554-46.63406H93.28238Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M633.05154,719.69635H199.12394c-11.29477,0-20.4826-9.18783-20.4826-20.4826,0-5.46736,2.13212-10.60875,6.00372-14.47887,3.8553-3.8716,8.99818-6.00372,14.47887-6.00372h433.9276c11.29477,0,20.4826,9.18783,20.4826,20.4826,0,5.46736-2.13212,10.61023-6.00224,14.48035-3.85382,3.87012-8.9967,6.00224-14.48035,6.00224Z\"\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M537.46609,699.2145c0,5.44736-2.2151,10.37835-5.77999,13.94325-3.56638,3.56564-8.49737,5.78073-13.94399,5.78073H199.12394c-10.89323,0-19.72398-8.83001-19.72398-19.72398,0-5.44662,2.2151-10.37761,5.78147-13.94325,3.5649-3.58045,8.49589-5.78073,13.94251-5.78073h318.61817c10.89323,0,19.72398,8.83075,19.72398,19.72398Z\"\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M502.03197,638.5231h-176.42977c-15.3575,0-27.85242-12.49492-27.85242-27.8539v-231.05003c0-15.3575,12.49492-27.85242,27.85242-27.85242l133.30727.7601,70.9764,76.68824v181.45411c0,15.35898-12.49492,27.8539-27.8539,27.8539Z\"\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M414.57644,442.63753h-67.53893c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h67.53893c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M481.04412,483.00709h-134.74301c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.74301c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M481.04412,520.48592h-134.00662c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h134.00662c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M380.80771,558.65075h-34.5066c-2.93222,0-5.3103-2.37808-5.3103-5.3103s2.37808-5.3103,5.3103-5.3103h34.5066c2.93222,0,5.3103,2.37808,5.3103,5.3103s-2.37808,5.3103-5.3103,5.3103Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M529.12726,431.03013h-68.71093c-7.70172,0-13.9677-6.26598-13.9677-13.9677v-64.53707h3.03446v64.53707c0,6.02891,4.90433,10.93324,10.93324,10.93324h68.71093v3.03446Z\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M416.11441,658.24708c-13.64025,0-24.73795-11.0977-24.73795-24.73795v-23.81339h-16.74138c-3.49674,0-6.62751-1.9484-8.17289-5.08509s-1.18089-6.80531.94975-9.57751l42.1283-54.79658c1.71133-2.22399,4.30869-3.50267,7.1046-3.45673,2.8048.02667,5.36957,1.33647,7.03645,3.59305l41.1667,55.72855c2.13805,2.8937,2.45957,6.68826.83862,9.902-1.62243,3.21374-4.8658,5.20955-8.46478,5.20955h-16.36948v22.29616c0,13.64025-11.0977,24.73795-24.73795,24.73795Z\"\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\n\t\t\t\t\t\t<circle cx=\"560.98874\" cy=\"420.8005\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"581.47134\" cy=\"479.21383\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"259.81871\" cy=\"436.73141\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"264.3704\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"259.81871\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"560.23012\" cy=\"593.00603\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<circle cx=\"560.23012\" cy=\"524.73071\" r=\"4.55169\" fill=\"#d6d6e3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M37.40122,152.42148c-6.44526,0-12.11265-4.61836-13.35132-11.0088L.24984,18.65638c-.76454-3.9442.24448-7.99953,2.76776-11.12585,2.5218-3.12484,6.27191-4.96804,10.28871-5.05397L128.31645.00364c6.71641-.15261,12.40898,4.50872,13.65062,11.06214l22.55693,119.0462c.72898,3.85234-.23855,7.83062-2.65811,10.91694-2.41808,3.08484-6.04966,4.97693-9.96274,5.18881l-113.76701,6.18301c-.24596.01334-.49191.02074-.73491.02074Z\"\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\n\t\t\t\t\t\t<polygon\n\t\t\t\t\t\t\tpoints=\"29.95846 132.52692 54.99274 65.01021 96.71655 96.11341 110.37162 82.45835 158.16434 131.7683 29.95846 132.52692\"\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M107.33749,58.94148c-6.27487,0-11.37922-5.10435-11.37922-11.37922s5.10435-11.37922,11.37922-11.37922,11.37922,5.10435,11.37922,11.37922-5.10435,11.37922-11.37922,11.37922Z\"\n\t\t\t\t\t\t\tfill=\"#08BBD3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M41.65954,616.11285c-3.58564,0-7.09275-1.04902-10.16129-3.07891-4.19312-2.77665-7.02163-7.02608-7.96101-11.96596L.5521,480.25267c-1.87135-9.84125,4.31462-19.28244,14.08327-21.49309l102.97009-23.32444c4.88655-1.10384,9.89162-.22077,14.09957,2.48772,4.2109,2.71145,7.08682,6.90606,8.0988,11.8089l25.05355,121.36946c2.04174,9.89014-4.32647,19.67509-14.19439,21.81462l-105.03998,22.76881c-1.31869.28596-2.64626.4282-3.96347.4282Z\"\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M33.74594,507.28424c-2.50698,0-4.7369-1.78245-5.21399-4.33685-.53933-2.88333,1.36165-5.65701,4.24498-6.19486l83.24611-15.5516c2.88185-.54674,5.65553,1.36165,6.19486,4.24498s-1.36165,5.65701-4.24498,6.19486l-83.24611,15.5516c-.32893.06223-.65786.09186-.98087.09186Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M41.33357,539.14606c-2.40327,0-4.57984-1.64169-5.16214-4.082-.6786-2.85221,1.0831-5.71628,3.9368-6.39637l78.36253-18.65866c2.85073-.67564,5.7148,1.0831,6.39637,3.9368.6786,2.85221-1.0831,5.71628-3.9368,6.39637l-78.36253,18.65866c-.41339.09779-.82677.1452-1.23423.1452Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M46.64239,569.97367c-2.45513,0-4.65985-1.71281-5.18881-4.2109-.60748-2.86999,1.22534-5.68813,4.09385-6.29561l53.46159-11.32144c2.88481-.606,5.68961,1.22534,6.29561,4.09385.60748,2.86999-1.22534,5.68813-4.09385,6.29561l-53.46159,11.32144c-.3719.07853-.74232.11705-1.10681.11705Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M816.49406,244.42277c-.94382,0-1.89802-.07408-2.85666-.22373l-106.17939-16.65841c-4.96952-.78084-9.30785-3.46859-12.21785-7.57133-2.91-4.10126-4.01384-9.0856-3.10854-14.03141l22.15096-120.97089c1.80764-9.8531,10.97472-16.41097,20.89006-14.96634l104.45028,15.39603c4.95322.73046,9.30488,3.36191,12.25192,7.40983,2.94852,4.04644,4.11756,8.99521,3.29227,13.93362l-20.42185,122.23475c-1.50241,9.00262-9.38341,15.44788-18.2512,15.44788Z\"\n\t\t\t\t\t\t\tfill=\"#d6d6e3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M820.66792,138.04188c-.323,0-.65045-.02963-.97938-.09186l-83.25204-15.52938c-2.88333-.53785-4.78431-3.31005-4.24646-6.19338.53636-2.88333,3.30264-4.79616,6.19338-4.24646l83.25204,15.52938c2.88333.53785,4.78431,3.31005,4.24646,6.19338-.47562,2.5544-2.70701,4.33833-5.21399,4.33833Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M812.81507,165.83355c-.24003,0-.48006-.01482-.72454-.0489l-79.81753-10.86953c-2.90555-.39561-4.93989-3.0715-4.54428-5.97854.39709-2.90704,3.08187-4.94285,5.97854-4.54428l79.81753,10.86953c2.90555.39561,4.93989,3.0715,4.54428,5.97854-.36301,2.66256-2.64033,4.59317-5.254,4.59317Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M780.77249,194.36309c-.28152,0-.56748-.02371-.85492-.06964l-53.9461-8.73c-2.89518-.46821-4.86136-3.19596-4.39315-6.09114.46969-2.89518,3.17818-4.85543,6.09114-4.39315l53.9461,8.73c2.89518.46821,4.86136,3.19596,4.39315,6.09114-.42228,2.60774-2.67589,4.46279-5.23622,4.46279Z\"\n\t\t\t\t\t\t\tfill=\"#090814\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"mt-2 text-sm text-gray-600\">\n\t\t\t\t\t{{ placeholder() }}\n\t\t\t\t</p>\n\t\t\t\t<p class=\"mt-1 text-xs text-gray-500\"> or click to browse </p>\n\t\t\t\t<p class=\"mt-2 text-xs text-gray-400\">\n\t\t\t\t\tMax file size: {{ formatFileSize(maxFileSize()) }}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t}\n\n\t<!-- Galleria Component -->\n\t@if (galleriaItems().length > 0 && visible()) {\n\t\t<p-galleria\n\t\t\t[value]=\"galleriaItems()\"\n\t\t\t[responsiveOptions]=\"responsiveOptions()\"\n\t\t\t[containerStyle]=\"containerStyle()\"\n\t\t\tcontainerClass=\"max-h-2/3 !max-w-full my-5\"\n\t\t\t[circular]=\"true\"\n\t\t\t[fullScreen]=\"false\"\n\t\t\t[showItemNavigators]=\"true\"\n\t\t\t[showThumbnails]=\"true\">\n\t\t\t<ng-template pTemplate=\"item\" let-item>\n\t\t\t\t@if (item && item.type && !item.typedFile.error) {\n\t\t\t\t\t<div class=\"relative flex items-center justify-center w-full\">\n\t\t\t\t\t\t@switch (item.type) {\n\t\t\t\t\t\t\t@case ('image') {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t[src]=\"item.itemImageSrc\"\n\t\t\t\t\t\t\t\t\t\t[alt]=\"item.alt\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"max-width: 100%; max-height: 100%; object-fit: contain\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('pdf') {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-file-pdf text-9xl text-red-500 mb-4\"></i>\n\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\tclass=\"text-sm font-medium text-center text-gray-700 mb-2 whitespace-normal w-2/3 overflow-x-hidden text-ellipsis\"\n\t\t\t\t\t\t\t\t\t\t>{{ item.title }}</p\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">{{\n\t\t\t\t\t\t\t\t\t\tformatFileSize(item.typedFile.file.size)\n\t\t\t\t\t\t\t\t\t}}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('docx') {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-file-word text-9xl text-blue-500 mb-4\"></i>\n\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\tclass=\"text-sm font-medium text-center text-gray-700 mb-2 whitespace-normal w-2/3 overflow-x-hidden text-ellipsis\"\n\t\t\t\t\t\t\t\t\t\t>{{ item.title }}</p\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">{{\n\t\t\t\t\t\t\t\t\t\tformatFileSize(item.typedFile.file.size)\n\t\t\t\t\t\t\t\t\t}}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('csv') {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-file-excel text-9xl text-green-500 mb-4\"></i>\n\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\tclass=\"text-sm font-medium text-center text-gray-700 mb-2 whitespace-normal w-2/3 overflow-x-hidden text-ellipsis\"\n\t\t\t\t\t\t\t\t\t\t>{{ item.title }}</p\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">{{\n\t\t\t\t\t\t\t\t\t\tformatFileSize(item.typedFile.file.size)\n\t\t\t\t\t\t\t\t\t}}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('xlsx') {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-file-excel text-9xl text-green-600 mb-4\"></i>\n\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\tclass=\"text-sm font-medium text-center text-gray-700 mb-2 whitespace-normal w-2/3 overflow-x-hidden text-ellipsis\"\n\t\t\t\t\t\t\t\t\t\t>{{ item.title }}</p\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">{{\n\t\t\t\t\t\t\t\t\t\tformatFileSize(item.typedFile.file.size)\n\t\t\t\t\t\t\t\t\t}}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@default {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center w-full !min-h-[350px] py-5 bg-gray-100\">\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-file text-9xl text-gray-500 mb-4\"></i>\n\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\tclass=\"text-sm font-medium text-center text-gray-700 mb-2 whitespace-normal w-2/3 overflow-x-hidden text-ellipsis\"\n\t\t\t\t\t\t\t\t\t\t>{{ item.title }}</p\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-gray-500\">{{\n\t\t\t\t\t\t\t\t\t\tformatFileSize(item.typedFile.file.size)\n\t\t\t\t\t\t\t\t\t}}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t<!-- Error Message Overlay -->\n\t\t\t\t\t\t@if (item.typedFile.error) {\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"absolute top-4 left-1/2 transform -translate-x-1/2 bg-red-500 text-white px-4 py-2 rounded-lg shadow-lg\">\n\t\t\t\t\t\t\t\t<i class=\"pi pi-exclamation-triangle mr-2\"></i>\n\t\t\t\t\t\t\t\t{{ item.typedFile.error }}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t<p-speedDial\n\t\t\t\t\t\t\t[model]=\"item.speedDialItems\"\n\t\t\t\t\t\t\tdirection=\"down\"\n\t\t\t\t\t\t\t[style]=\"{ position: 'absolute', left: '3rem', top: '3rem' }\"\n\t\t\t\t\t\t\tbuttonClassName=\"p-button-primary\"\n\t\t\t\t\t\t\tshowIcon=\"pi pi-ellipsis-v\"\n\t\t\t\t\t\t\thideIcon=\"pi pi-times\" />\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</ng-template>\n\n\t\t\t<ng-template pTemplate=\"thumbnail\" let-item>\n\t\t\t\t@if (item && item.type && !item.typedFile.error) {\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"flex flex-col items-center justify-center p-2 border-b border-2 rounded-md\"\n\t\t\t\t\t\tstyle=\"width: 100px; height: 80px\">\n\t\t\t\t\t\t@switch (item.type) {\n\t\t\t\t\t\t\t@case ('image') {\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t[src]=\"item.thumbnailImageSrc\"\n\t\t\t\t\t\t\t\t\t[alt]=\"item.alt\"\n\t\t\t\t\t\t\t\t\tclass=\"max-w-full max-h-full object-cover rounded\" />\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('pdf') {\n\t\t\t\t\t\t\t\t<i class=\"pi pi-file-pdf text-3xl text-red-500\"></i>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('docx') {\n\t\t\t\t\t\t\t\t<i class=\"pi pi-file-word text-3xl text-blue-500\"></i>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('csv') {\n\t\t\t\t\t\t\t\t<i class=\"pi pi-file-excel text-3xl text-green-500\"></i>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@case ('xlsx') {\n\t\t\t\t\t\t\t\t<i class=\"pi pi-file-excel text-3xl text-green-600\"></i>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@default {\n\t\t\t\t\t\t\t\t<i class=\"pi pi-file text-3xl text-gray-500\"></i>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<p class=\"text-xs text-gray-600 mt-1 truncate max-w-full text-center\">{{\n\t\t\t\t\t\t\titem.title\n\t\t\t\t\t\t}}</p>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</ng-template>\n\t\t</p-galleria>\n\t}\n</div>\n\n@if (isPdfViewerVisible) {\n\t<ngp-pdf-viewer-modal\n\t\t[visible]=\"isPdfViewerVisible\"\n\t\t[pdfFile]=\"currentFileUrl\"\n\t\t[filename]=\"currentFileUrl || 'untitled.pdf'\"\n\t\t(hide)=\"isPdfViewerVisible = false\" />\n}\n","export class PaginatedRequest {\r\n\tpage!: number;\r\n\tsize!: number;\r\n\tsort?: string | null;\r\n\t[key: string]: any;\r\n}\r\n\r\nexport interface PaginatedResponse<T> {\r\n\thasNextPage: boolean;\r\n\ttotalElements: number;\r\n\tresults: T[];\r\n\tcurrentPage: number;\r\n\tpageSize: number;\r\n}\r\n","import { computed, effect, inject, Injectable, Injector, signal, untracked } from '@angular/core';\r\nimport { catchError, finalize, Observable, of, shareReplay } from 'rxjs';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { PaginatedRequest, PaginatedResponse } from '../models/paginated.model';\r\nimport { ActionType, ApiOperations } from '../types/api-operations.type';\r\n\r\n@UntilDestroy()\r\n@Injectable()\r\nexport abstract class CrudAbstractComponent<\r\n\tT,\r\n\tCreateDto = Partial<T>,\r\n\tUpdateDto = Partial<T>,\r\n\tIdType = string | number\r\n> {\r\n\t// State signals\r\n\tprivate readonly sourceSignal = signal<Observable<T | T[]> | null>(null);\r\n\tprivate readonly loadingSignal = signal<boolean>(false);\r\n\tprivate readonly errorSignal = signal<Error | null>(null);\r\n\tprivate readonly actionSignal = signal<ActionType | null>(null);\r\n\tprivate readonly firstLoadSignal = signal<boolean>(true);\r\n\tprivate readonly showFormSignal = signal<boolean>(false);\r\n\tprivate readonly formActionSignal = signal<'Create' | 'Update' | 'View' | null>(null);\r\n\tprotected readonly dataSignal = signal<T | T[] | null>(null);\r\n\tprotected readonly entityNameSignal = signal<string>('Item');\r\n\r\n\tpublic filters = signal<Record<string, unknown> | null>(null);\r\n\tpublic tableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\r\n\tpublic requestParams = computed(() => ({\r\n\t\t...this.filters(),\r\n\t\t...this.tableParams()\r\n\t}));\r\n\r\n\t// Injections\r\n\tprivate readonly injector = inject(Injector);\r\n\r\n\t// Public interface\r\n\tpublic readonly data = this.dataSignal.asReadonly();\r\n\tpublic readonly isLoading = this.loadingSignal.asReadonly();\r\n\tpublic readonly error = this.errorSignal.asReadonly();\r\n\tpublic readonly currentAction = this.actionSignal.asReadonly();\r\n\tpublic readonly isFirstLoad = this.firstLoadSignal.asReadonly();\r\n\tpublic readonly formAction = this.formActionSignal.asReadonly();\r\n\r\n\tpublic readonly isFormVisible = computed(() => this.showFormSignal());\r\n\tpublic readonly safeDataSource = computed(() => {\r\n\t\tconst rawData = this.dataSignal();\r\n\t\tconst isLoading = this.loadingSignal();\r\n\r\n\t\tinterface Page<T> {\r\n\t\t\tresults: T[];\r\n\t\t\thasNextPage: boolean;\r\n\t\t\ttotalElements: number;\r\n\t\t\tpageSize: number;\r\n\t\t\tcurrentPage: number;\r\n\t\t}\r\n\r\n\t\t// Default empty response\r\n\t\tconst defaultResponse = {\r\n\t\t\thasNextPage: false,\r\n\t\t\ttotalElements: 0,\r\n\t\t\tresults: [] as T[],\r\n\t\t\tcurrentPage: 0,\r\n\t\t\tpageSize: 10\r\n\t\t};\r\n\r\n\t\tif (!rawData || isLoading) return defaultResponse;\r\n\r\n\t\tconst isPaginatedResponse = (obj: unknown): obj is Page<T> => {\r\n\t\t\treturn (\r\n\t\t\t\tobj !== null &&\r\n\t\t\t\ttypeof obj === 'object' &&\r\n\t\t\t\t'results' in obj &&\r\n\t\t\t\tArray.isArray(obj.results) &&\r\n\t\t\t\t'totalElements' in obj &&\r\n\t\t\t\ttypeof obj.totalElements === 'number'\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\t// Handler for Paginated Response\r\n\t\tif (typeof rawData === 'object' && isPaginatedResponse(rawData)) {\r\n\t\t\treturn {\r\n\t\t\t\tresults: [...rawData.results],\r\n\t\t\t\ttotalElements: rawData.totalElements,\r\n\t\t\t\tcurrentPage: rawData.currentPage,\r\n\t\t\t\tpageSize: rawData.pageSize,\r\n\t\t\t\thasNextPage: rawData.hasNextPage\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Handle array case\r\n\t\tif (Array.isArray(rawData)) {\r\n\t\t\treturn {\r\n\t\t\t\t...defaultResponse,\r\n\t\t\t\ttotalElements: rawData.length,\r\n\t\t\t\tresults: [...rawData],\r\n\t\t\t\tpageSize: rawData.length // For arrays, we typically return all elements\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Handle single object case\r\n\t\treturn {\r\n\t\t\t...defaultResponse,\r\n\t\t\ttotalElements: 1,\r\n\t\t\tresults: [rawData],\r\n\t\t\tpageSize: 1\r\n\t\t};\r\n\t});\r\n\r\n\tpublic readonly entityName = computed(() => this.entityNameSignal());\r\n\r\n\t/**\r\n\t * Provides direct access to raw list data without pagination wrapper\r\n\t * Returns an empty array if data is not available or not an array\r\n\t */\r\n\tpublic readonly rawList = computed<T[]>(() => {\r\n\t\tconst rawData = this.data();\r\n\r\n\t\tif (!rawData || this.isLoading()) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\t// If it's already an array, return it\r\n\t\tif (Array.isArray(rawData)) {\r\n\t\t\treturn [...rawData];\r\n\t\t}\r\n\r\n\t\t// If it's a paginated response with a results property that's an array\r\n\t\tif (typeof rawData === 'object' && 'results' in rawData && Array.isArray(rawData.results)) {\r\n\t\t\treturn [...rawData.results];\r\n\t\t}\r\n\r\n\t\t// If it's a single object, return it as an array with one item\r\n\t\tif (typeof rawData === 'object' && !('results' in rawData)) {\r\n\t\t\treturn [rawData as T];\r\n\t\t}\r\n\r\n\t\t// Default fallback\r\n\t\treturn [];\r\n\t});\r\n\r\n\t// Usage in your component:\r\n\t// const items = this.rawList();\r\n\r\n\t// Current operations state\r\n\tprivate currentOperations?: ApiOperations<T, CreateDto, UpdateDto, IdType>;\r\n\tprivate currentParams?: Record<string, unknown>;\r\n\r\n\t// Effect to handle Observable subscriptions\r\n\tprivate readonly dataEffect = effect(\r\n\t\t() => {\r\n\t\t\tconst obs = this.sourceSignal();\r\n\t\t\tif (!obs) {\r\n\t\t\t\tuntracked(() => this.dataSignal.set(null));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tuntracked(() => {\r\n\t\t\t\tthis.loadingSignal.set(true);\r\n\t\t\t\tthis.errorSignal.set(null);\r\n\r\n\t\t\t\tconst sub = obs\r\n\t\t\t\t\t.pipe(\r\n\t\t\t\t\t\tshareReplay(1),\r\n\t\t\t\t\t\tcatchError((err) => {\r\n\t\t\t\t\t\t\tthis.errorSignal.set(err);\r\n\t\t\t\t\t\t\treturn of(null);\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tfinalize(() => this.loadingSignal.set(false))\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.subscribe((value) => {\r\n\t\t\t\t\t\tthis.dataSignal.set(value);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\treturn () => sub.unsubscribe();\r\n\t\t\t});\r\n\t\t},\r\n\t\t{ injector: this.injector }\r\n\t);\r\n\r\n\t/**\r\n\t * Initialize with dynamic service operations\r\n\t */\r\n\tprotected initService(operations: ApiOperations<T, CreateDto, UpdateDto, IdType>): void {\r\n\t\tthis.currentOperations = operations;\r\n\t}\r\n\r\n\t/**\r\n\t * GET data\r\n\t */\r\n\tprotected loadData(params?: Record<string, unknown>): void {\r\n\t\tif (!this.currentOperations?.get) return;\r\n\r\n\t\tthis.executeOperation('get', () => this.currentOperations!.get!(params), params);\r\n\r\n\t\tthis.firstLoadSignal.set(false);\r\n\t}\r\n\r\n\t/**\r\n\t * GET data by ID\r\n\t */\r\n\tprotected getById(\r\n\t\tid: IdType,\r\n\t\tparams?: Record<string, unknown>\r\n\t): Observable<T | T[] | PaginatedResponse<T> | null> {\r\n\t\tif (!this.currentOperations?.getById) return of(null);\r\n\r\n\t\treturn this.executeOperation('get', () => this.currentOperations!.getById!(id, params));\r\n\t}\r\n\r\n\t/**\r\n\t * CREATE data\r\n\t */\r\n\tprotected createData(data: CreateDto): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.create) return of(null);\r\n\r\n\t\treturn this.executeOperation('create', () => this.currentOperations!.create!(data));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE data\r\n\t */\r\n\tprotected updateData(data: UpdateDto): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.update) return of(null);\r\n\r\n\t\treturn this.executeOperation('update', () => this.currentOperations!.update!(data));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE data by ID\r\n\t */\r\n\tprotected updateById(id: IdType, data: Partial<UpdateDto>): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.updateById) return of(null);\r\n\r\n\t\treturn this.executeOperation('updateById', () => this.currentOperations!.updateById!(id, data));\r\n\t}\r\n\r\n\t/**\r\n\t * DELETE data\r\n\t */\r\n\tprotected deleteData(id: IdType): Observable<void | null> {\r\n\t\tif (!this.currentOperations?.delete) return of(null);\r\n\r\n\t\treturn this.executeOperation('delete', () => this.currentOperations!.delete!(id));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE status\r\n\t */\r\n\tprotected updateStatus(id: IdType, status: boolean): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.updateStatus) return of(null);\r\n\r\n\t\treturn this.executeOperation(\r\n\t\t\t'update', // You can reuse 'update' action or add a new one like 'updateStatus'\r\n\t\t\t() => this.currentOperations!.updateStatus!(id, status)\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * SHOW/HIDE form\r\n\t * @param show Whether to show or hide the form\r\n\t */\r\n\tprotected showForm(show: boolean): void {\r\n\t\tthis.showFormSignal.set(show);\r\n\t}\r\n\r\n\t/**\r\n\t * Update form action (create/edit)\r\n\t * @param action The action to set for the form\r\n\t */\r\n\tprotected updateFormAction(action: string): void {\r\n\t\tthis.formActionSignal.set(action as 'Create' | 'Update' | null);\r\n\t}\r\n\r\n\t/**\r\n\t * Shared operation execution logic\r\n\t */\r\n\tprivate executeOperation<R>(\r\n\t\taction: ActionType,\r\n\t\toperation: () => Observable<R>,\r\n\t\tparams?: Record<string, unknown>\r\n\t): Observable<R | null> {\r\n\t\tthis.errorSignal.set(null);\r\n\t\tthis.loadingSignal.set(true);\r\n\t\tthis.actionSignal.set(action);\r\n\r\n\t\tif (action === 'get') {\r\n\t\t\tthis.currentParams = params;\r\n\t\t}\r\n\r\n\t\tconst operation$ = operation().pipe(\r\n\t\t\tuntilDestroyed(this),\r\n\t\t\tcatchError((err) => {\r\n\t\t\t\tthis.errorSignal.set(err);\r\n\t\t\t\treturn of(null);\r\n\t\t\t}),\r\n\t\t\tfinalize(() => {\r\n\t\t\t\tthis.loadingSignal.set(false);\r\n\t\t\t\tthis.actionSignal.set(null);\r\n\t\t\t}),\r\n\t\t\tshareReplay(1)\r\n\t\t);\r\n\r\n\t\tif (action === 'get') {\r\n\t\t\tthis.sourceSignal.set(operation$ as Observable<T | T[]>);\r\n\t\t} else {\r\n\t\t\toperation$.subscribe(() => {\r\n\t\t\t\tif (this.currentOperations?.get) {\r\n\t\t\t\t\tthis.refresh();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn operation$;\r\n\t}\r\n\r\n\t/**\r\n\t * Refresh current data\r\n\t */\r\n\tprotected refresh(): void {\r\n\t\tif (this.currentOperations?.get && this.currentParams) {\r\n\t\t\tthis.loadData(this.currentParams);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic setEntityName(name: string): void {\r\n\t\tthis.entityNameSignal.set(name);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PaginatedResponse } from '../../models/paginated.model';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class HelperService {\r\n\ttransformEmployeeResponse = (res: PaginatedResponse<any>) => ({\r\n\t\t...res,\r\n\t\tresults: res.results.map((e) => ({\r\n\t\t\t...e,\r\n\t\t\tfullName: [e.name.givenName, e.name.middleName, e.name.familyName]\r\n\t\t\t\t.filter((part) => part)\r\n\t\t\t\t.join(' ')\r\n\t\t\t\t.trim()\r\n\t\t\t\t.concat(e?.company?.name ? ` (${e.company.name})` : '')\r\n\t\t}))\r\n\t});\r\n\r\n\ttransformEmployeeWithJob = (res: PaginatedResponse<any>) => ({\r\n\t\t...res,\r\n\t\tresults: res.results.map((e) => ({\r\n\t\t\t...e,\r\n\t\t\tfullName: [e.name.givenName, e.name.middleName, e.name.familyName]\r\n\t\t\t\t.filter((part) => part)\r\n\t\t\t\t.join(' ')\r\n\t\t\t\t.trim()\r\n\t\t\t\t.concat(e?.jobDesignation?.jobTitle ? ` (${e.jobDesignation.jobTitle})` : '')\r\n\t\t}))\r\n\t});\r\n\r\n\ttransformPayloadWithAddress = <T extends Record<string, any>>(payload: T): T => {\r\n\t\tconst transformedPayload = { ...payload } as Record<string, any>;\r\n\r\n\t\tif (transformedPayload['address']) {\r\n\t\t\tconst address = { ...transformedPayload['address'] };\r\n\r\n\t\t\t// Helper function to extract name from address field\r\n\t\t\tconst extractName = (field: unknown): string | undefined => {\r\n\t\t\t\tif (!field) return undefined;\r\n\t\t\t\tif (typeof field === 'string') return field;\r\n\t\t\t\tif (typeof field === 'object' && field !== null && 'name' in field) {\r\n\t\t\t\t\treturn (field as Record<string, any>)['name'];\r\n\t\t\t\t}\r\n\t\t\t\treturn undefined;\r\n\t\t\t};\r\n\r\n\t\t\taddress.province = extractName(address.province);\r\n\t\t\taddress.city = extractName(address.city);\r\n\t\t\taddress.barangay = extractName(address.barangay);\r\n\r\n\t\t\ttransformedPayload['address'] = address;\r\n\t\t}\r\n\r\n\t\treturn transformedPayload as T;\r\n\t};\r\n\r\n\tgenerateRandomHexColor(): string {\r\n\t\tconst randomInt = Math.floor(Math.random() * 0xffffff);\r\n\t\treturn `#${randomInt.toString(16).padStart(6, '0')}`;\r\n\t}\r\n}\r\n","// Components\r\nexport * from './lib/components/empty/empty.component';\r\nexport * from './lib/components/file-upload/file-upload.component';\r\nexport * from './lib/components/form-field-wrapper/form-field-wrapper.component';\r\nexport * from './lib/components/select/ng-select/basic/basic-ng-select.component';\r\nexport * from './lib/components/fg-address/fg-address.component';\r\nexport * from './lib/components/dataview/table/data-table.component';\r\nexport * from './lib/components/select/ng-select/dynamic/dynamic-select.component';\r\nexport * from './lib/components/drawer/dynamic-drawer.component';\r\nexport * from './lib/components/date-clock/date-clock.component';\r\nexport * from './lib/components/dynamic-file-upload/dynamic-file-upload.component';\r\nexport * from './lib/components/pdf-viewer/pdf-viewer-modal.component';\r\nexport * from './lib/components/file-viewer/file-upload-viewer.component';\r\n\r\n// Models\r\nexport * from './lib/models/common.model';\r\nexport * from './lib/models/address.model';\r\nexport * from './lib/models/table-column.model';\r\nexport * from './lib/models/paginated.model';\r\nexport * from './lib/models/file-type.model';\r\n\r\n// Types\r\nexport * from './lib/types/api-operations.type';\r\n\r\n// Class\r\nexport * from './lib/classes/crud-abstract.class';\r\n\r\n// Services\r\nexport * from './lib/services/helper/helper.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","i5","i4","i6"],"mappings":"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wBACZ,eAAe;wBACf,mBAAmB;wBACnB,YAAY;wBACZ,aAAa;wBACb,WAAW;wBACX,aAAa;wBACb,cAAc;wBACd;AACA,qBAAA,EAAA,SAAA,EAGU,CAAC,mBAAmB,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,gyPAAA,EAAA;;sBA8D/C,YAAY;uBAAC,cAAc;;sBAC3B,SAAS;uBAAC,IAAI;;;AE9GhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;A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"}
|