cat-documents-ng 0.2.90 → 0.2.92
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/README.md +0 -99
- package/Shared/constant/SHARED.d.ts +2 -0
- package/fesm2022/cat-documents-ng.mjs +65 -86
- package/fesm2022/cat-documents-ng.mjs.map +1 -1
- package/lib/document/components/document-upload/document-upload.component.d.ts +5 -0
- package/lib/document/services/file-format.service.d.ts +11 -0
- package/package.json +1 -1
- package/src/lib/styles.scss +0 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cat-documents-ng.mjs","sources":["../../../projects/cat-document-lib/src/Shared/constant/SHARED.ts","../../../projects/cat-document-lib/src/Shared/constant/ERROR.ts","../../../projects/cat-document-lib/src/lib/document/state/document.state.ts","../../../projects/cat-document-lib/src/lib/document/state/document.store.ts","../../../projects/cat-document-lib/src/Shared/constant/URLS.ts","../../../projects/cat-document-lib/src/Shared/services/app-config.service.ts","../../../projects/cat-document-lib/src/lib/document/state/document.service.ts","../../../projects/cat-document-lib/src/lib/document/state/document.query.ts","../../../projects/cat-document-lib/src/lib/document/services/document-http.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload.service.ts","../../../projects/cat-document-lib/src/lib/document/services/file-format.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-business.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-form.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-data.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-upload/document-upload.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-upload/document-upload.component.html","../../../projects/cat-document-lib/src/Shared/components/confirmation-dialog/confirmation-dialog.component.ts","../../../projects/cat-document-lib/src/lib/document/components/sidebar/sidebar.component.ts","../../../projects/cat-document-lib/src/lib/document/components/sidebar/sidebar.component.html","../../../projects/cat-document-lib/src/lib/document/services/user-list.service.ts","../../../projects/cat-document-lib/src/lib/document/components/user-list/user-list.component.ts","../../../projects/cat-document-lib/src/lib/document/components/user-list/user-list.component.html","../../../projects/cat-document-lib/src/lib/document/services/status-calculator.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-status/document-status.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-status/document-status.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-search/document-search.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-search/document-search.component.html","../../../projects/cat-document-lib/src/lib/document/components/folder-container/folder-container.component.ts","../../../projects/cat-document-lib/src/lib/document/components/folder-container/folder-container.component.html","../../../projects/cat-document-lib/src/Shared/constant/PERMISSIONS.ts","../../../projects/cat-document-lib/src/Shared/services/session.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-table-builder.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-list.service.ts","../../../projects/cat-document-lib/src/lib/document/directives/permission.directive.ts","../../../projects/cat-document-lib/src/Shared/components/table-primary/table-primary.component.ts","../../../projects/cat-document-lib/src/Shared/components/table-primary/table-primary.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-viewer.service.ts","../../../projects/cat-document-lib/src/lib/document/constant/DOCUMENT_HISTORY.ts","../../../projects/cat-document-lib/src/lib/document/services/document-history-style.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-history.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-history/document-history.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-history/document-history.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-actions.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-actions/document-actions.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-actions/document-actions.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-viewer/document-viewer.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-viewer/document-viewer.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-list/document-list.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-list/document-list.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-menu.service.ts","../../../projects/cat-document-lib/src/lib/document/components/documents-menu/documents-menu.component.ts","../../../projects/cat-document-lib/src/lib/document/components/documents-menu/documents-menu.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-container/document-container.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-container/document-container.component.html","../../../projects/cat-document-lib/src/lib/document/components/folder-block/folder-block.component.ts","../../../projects/cat-document-lib/src/lib/document/components/folder-block/folder-block.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-list-item/document-list-item.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-list-item/document-list-item.component.html","../../../projects/cat-document-lib/src/Shared/services/global-error.handler.ts","../../../projects/cat-document-lib/src/lib/document/directives/document.directive.ts","../../../projects/cat-document-lib/src/lib/document/components/linked-document/linked-document.component.ts","../../../projects/cat-document-lib/src/lib/document/components/linked-document/linked-document.component.html","../../../projects/cat-document-lib/src/Shared/shared.module.ts","../../../projects/cat-document-lib/src/lib/document/document.module.ts","../../../projects/cat-document-lib/src/public-api.ts","../../../projects/cat-document-lib/src/cat-documents-ng.ts"],"sourcesContent":["/**\r\n * The `SHARED` class contains shared constants used across the application.\r\n * These constants are related to document statuses and other shared data.\r\n */\r\nexport class SHARED {\r\n \r\n /**\r\n * Represents the info.\r\n */\r\n static UNKNOWN_USER = 'Unknown User'\r\n /**\r\n * Represents the info.\r\n */\r\n static ACTIONS = 'actions'\r\n /**\r\n * Represents the info.\r\n */\r\n static VISIBLE = 'visible'\r\n /**\r\n * Represents the info.\r\n */\r\n static HIDDEN = 'hidden'\r\n\r\n static NO_DOCUMENTS_FOUND = 'No documents found'\r\n static DOCUMENT_TYPES_DELETE = 'DocumentTypes-DELETE'\r\n static SUCCESS_MESSAGE = 'Document Saved Successfully'\r\n /**\r\n * Represents the info.\r\n */\r\n static APPLICATION_DOCS = 'Application Docs'\r\n /**\r\n * Represents the info.\r\n */\r\n static INFO = 'info'\r\n /**\r\n * Represents the success.\r\n */\r\n static SUCCESS = 'success'\r\n /**\r\n * Represents the warning.\r\n */\r\n static WARNING = 'warning'\r\n /**\r\n * Represents the warning.\r\n */\r\n static DANGER = 'danger'\r\n /**\r\n * Represents the stores userData.\r\n */\r\n static SESSIONKEY = 'userData';\r\n /**\r\n * Represents the count of missing files.\r\n */\r\n static MISSINGCOUNT = 2;\r\n\r\n /**\r\n * Represents the count of pending files.\r\n */\r\n static PENDINGCOUNT = 3;\r\n\r\n /**\r\n * Represents an empty string.\r\n */\r\n static EMPTY = \"\";\r\n /**\r\n * Represents an empty string.\r\n */\r\n static STRING = \"string\";\r\n\r\n /**\r\n * Represents an true.\r\n * @static\r\n * @type {boolean}\r\n */\r\n static TRUE: boolean = true;\r\n\r\n\r\n /**\r\n * Represents an false.\r\n * @static\r\n * @type {boolean}\r\n */\r\n static FALSE: boolean = false;\r\n\r\n /**\r\n * Represents an INITIAL_COUNT.\r\n */\r\n static INITIAL_COUNT = 0\r\n /**\r\n * Represents an INITIAL_VALUE.\r\n */\r\n static INITIAL_VALUE = 0\r\n\r\n /**\r\n * Represents the constant value for one (1).\r\n * @static\r\n * @type {number}\r\n */\r\n static ONE: number = 1\r\n\r\n /**\r\n * Represents the constant value for two (2).\r\n * @static\r\n * @type {number}\r\n */\r\n static TWO: number = 2\r\n\r\n /**\r\n * Represents the constant value for ten (10).\r\n * @static\r\n * @type {number}\r\n */\r\n static TEN: number = 10\r\n\r\n /**\r\n * Represents the constant string value 'files' used for file-related operations.\r\n * @static\r\n * @type {string}\r\n */\r\n static FILE: string = 'file';\r\n\r\n /**\r\n * Query parameter for menu item filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static MENU_ITEM_PARAM: string = 'menuItem';\r\n\r\n /**\r\n * Query parameter for user ID filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static USER_ID_PARAM: string = 'userId';\r\n\r\n /**\r\n * Query parameter for status filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static STATUS_PARAM: string = 'status';\r\n\r\n /**\r\n * Represents the array of file size units ('B', 'KB', 'MB') used for file size formatting.\r\n * @static\r\n * @type {string[]}\r\n */\r\n static FILE_SIZE_UNITS: string[] = ['B', 'KB', 'MB'];\r\n\r\n /**\r\n * Show SEVERITY value.\r\n * @static\r\n * @type {'error'}\r\n */\r\n static SEVERITY: string = 'error'\r\n /**\r\n * Show SEVERITY value.\r\n * @static\r\n * @type {'error'}\r\n */\r\n static SUCCESS_SEVERITY: string = 'success'\r\n\r\n /**\r\n * Show upload summery if it's failed.\r\n * @static\r\n * @type {'Upload Failed'}\r\n */\r\n static UPLOAD_SUMMERY: string = 'Upload Failed'\r\n\r\n /**\r\n * Show upload summery if it's success.\r\n * @static\r\n * @type {'Document uploaded successfully.'}\r\n */\r\n static UPLOAD_SUCCESS: string = 'Document uploaded successfully.'\r\n\r\n /**\r\n * Represent empty array.\r\n * @static\r\n * @type {{}}\r\n */\r\n static EMPTY_ARRAY = []\r\n\r\n /**\r\n * Represent contextId.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONTEXT_ID: string = 'contextId'\r\n\r\n /**\r\n * Represent contextId.\r\n * @static\r\n * @type {string}\r\n */\r\n static CATEGORY: string = 'category'\r\n\r\n /**\r\n * Represent fileSize.\r\n * @static\r\n * @type {string}\r\n */\r\n static FILE_SIZE: string = 'fileSize'\r\n /**\r\n * Represent documentName.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_NAME: string = 'documentName'\r\n /**\r\n * Represent documentTypeId.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_TYPE_ID: string = 'documentTypeId'\r\n /**\r\n * Represent blob.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT: string = 'document';\r\n /**\r\n * Represent none.\r\n * @static\r\n * @type {string}\r\n */\r\n static NONE: string = 'none';\r\n\r\n /**\r\n * Represent upload summery.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPLOAD_ERROR_SUMMERY: string = 'Form Data Missing'\r\n\r\n /**\r\n * Represent upload error details.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPLOAD_ERROR_DETAILS: string = 'Required form data is missing. Please ensure the document and all required fields are provided.'\r\n\r\n /**\r\n * Represents the message prefix for a successful document name update.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPDATE_DOCUMENT_NAME: string = 'Document name updated for ID:'\r\n static WIDTH = '500px'\r\n static BASEZINDEX = 1000\r\n static CLOSE_ICON = 'pi pi-times'\r\n static SAVE = 'Save'\r\n static UPLOAD_PROGRESS_100 = 100\r\n static UPLOAD_PROGRESS_10 = 10\r\n static APPLICANT = 'Applicant'\r\n static CATAGORIES = 'catagories'\r\n static DOCUMENTS = 'Documents'\r\n static UPLOAD_FAILED = 'Upload failed'\r\n static USER_LIST = 'userList'\r\n static CATEGORIES = 'categories'\r\n static UNSAVED_CHANGES_MESSAGE = 'You will loose all the data that was filled in the respective fields.'\r\n static UNSAVED_CHANGES_HEADER = 'Unsaved Changes'\r\n static DOCUMENT_DELETED_SUCCESSFULLY = 'Document deleted successfully'\r\n static UNSAVED_CHANGES_ICON = 'pi pi-exclamation-triangle'\r\n static REMOVE = 'Remove'\r\n static CANCEL = 'Cancel'\r\n static ACCEPT_ICON = 'pi pi-times'\r\n static REJECT_ICON = 'pi pi-check'\r\n static ACCEPT_BUTTON_STYLE_CLASS = 'p-button-danger'\r\n static REJECT_BUTTON_STYLE_CLASS = 'p-button-secondary'\r\n\r\n static Menu = [\r\n {\r\n label: 'Applicant',\r\n // expanded: true,\r\n // disabled: true,\r\n // separator: true,\r\n items: [\r\n {\r\n label: 'Identity',\r\n icon: 'ri-id-card-line',\r\n badge: \"2/5\"\r\n },\r\n {\r\n label: 'Income',\r\n icon: 'ri-money-pound-circle-line',\r\n badge: \"2/5\"\r\n },\r\n {\r\n label: 'Affordability',\r\n icon: 'ri-calculator-line',\r\n badge: \"2/8\"\r\n },\r\n {\r\n label: 'Cradit conduct',\r\n icon: 'ri-calendar-event-fill',\r\n badge: \"2/4\"\r\n },\r\n {\r\n label: 'KYC',\r\n icon: 'ri-calendar-event-fill',\r\n badge: \"2/4\"\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Welcome Call',\r\n icon: 'ri-calendar-event-fill'\r\n },\r\n {\r\n label: 'Gatehouse Bank Exposure',\r\n badge: \"2/4\",\r\n icon: 'ri-calendar-event-fill'\r\n }\r\n ]\r\n },\r\n {\r\n label: 'Application',\r\n // expanded: true,\r\n // disabled: true,\r\n // separator: true,\r\n items: [\r\n {\r\n badge: \"2/4\",\r\n label: 'Deposit',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Direct Debit',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n label: 'Property',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Completions',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Summary',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'System Documents',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Ad Hoc',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Miscellaneous',\r\n icon: 'ri-mail-open-line'\r\n }\r\n ]\r\n }\r\n ];\r\n static APPLICATION = 'Application'\r\n static APPLICANTS = 'Applicants'\r\n static EMPTY_SPACE = ' '\r\n\r\n static COLORS = ['orange', 'blue', 'green', 'grey', 'purple']\r\n\r\n static COLOR_MAP = {\r\n 'orange': '#f97316',\r\n 'blue': '#3b82f6',\r\n 'green': '#10b981',\r\n 'grey': '#6b7280',\r\n 'purple': '#8b5cf6'\r\n }\r\n static DEFAULT_COLOR = '#3b82f6'\r\n static STATUS_WITH_DASH = 'status-'\r\n static ICON_WITH_DASH = 'icon-'\r\n static SEARCH_KEY = 'searchKey'\r\n static APPROVED = 'approved'\r\n static UPLOADED = 'uploaded'\r\n static PENDING = 'Pending'\r\n static DOT = '.'\r\n static PDF = 'PDF'\r\n static PENDING_STATUS = 'pending'\r\n \r\n // File extension constants\r\n static JPG = 'JPG'\r\n static PNG = 'PNG'\r\n static XLSX = 'XLSX'\r\n \r\n // Status constants\r\n static APPROVED_STATUS = 'approved'\r\n static ALERT_STATUS = 'alert'\r\n static UPLOADED_STATUS = 'uploaded'\r\n static REVIEWING_STATUS = 'reviewing'\r\n static REJECTED_STATUS = 'rejected'\r\n static REQUESTED_STATUS = 'document requested'\r\n \r\n // Status class constants\r\n static STATUS_PENDING_CLASS = 'status-pending'\r\n static STATUS_APPROVED_CLASS = 'status-approved'\r\n static STATUS_ALERT_CLASS = 'status-alert'\r\n static STATUS_UPLOADED_CLASS = 'status-uploaded'\r\n static STATUS_REVIEWING_CLASS = 'status-reviewing'\r\n static STATUS_REJECTED_CLASS = 'status-rejected'\r\n \r\n // Icon constants\r\n static ICON_CHECK = 'pi pi-check'\r\n static ICON_EXCLAMATION_TRIANGLE = 'pi pi-exclamation-triangle'\r\n static ICON_CLOUD_UPLOAD = 'pi pi-cloud-upload'\r\n static ICON_EYE = 'pi pi-eye'\r\n static ICON_TIMES = 'pi pi-times'\r\n static ICON_CLOCK = 'pi pi-clock'\r\n \r\n // File type icons\r\n static ICON_FILE_PDF = 'pi pi-file-pdf'\r\n static ICON_IMAGE = 'pi pi-image'\r\n static ICON_FILE_EXCEL = 'pi pi-file-excel'\r\n static ICON_FILE = 'pi pi-file'\r\n static ICON_DELETE = 'ri-delete-bin-6-line'\r\n \r\n // Cell type constants\r\n static CELL_TYPE_DOCUMENT = 'document'\r\n static CELL_TYPE_STATUS = 'status'\r\n static CELL_TYPE_ACTIONS = 'actions'\r\n static CELL_TYPE_TEXT = 'text'\r\n \r\n /**\r\n * Document table columns configuration\r\n * @static\r\n * @type {Array<{field: string, header: string, type: 'text' | 'status' | 'document' | 'actions', width: string}>}\r\n */\r\n static DOCUMENT_TABLE_COLUMNS: Array<{\r\n field: string;\r\n header: string;\r\n type: 'text' | 'status' | 'document' | 'actions';\r\n width: string;\r\n }> = [\r\n {\r\n field: 'docName',\r\n header: 'Document',\r\n type: 'document',\r\n width: '35%'\r\n },\r\n {\r\n field: 'status',\r\n header: 'Status',\r\n type: 'status',\r\n width: '15%'\r\n },\r\n {\r\n field: 'ownerName',\r\n header: 'Owner',\r\n type: 'text',\r\n width: '20%'\r\n },\r\n {\r\n field: 'uploadedOn',\r\n header: 'Uploaded',\r\n type: 'text',\r\n width: '15%'\r\n },\r\n {\r\n field: 'actions',\r\n header: 'Actions',\r\n type: 'actions',\r\n width: '15%'\r\n }\r\n ];\r\n\r\n static DOCUMENT_REQUESTED = 'document-requested';\r\n static DOCUMENT_UPLOADED = 'document-uploaded';\r\n static DOCUMENT_REJECTED = 'document-rejected';\r\n static DOCUMENT_ACCEPTED = 'document-accepted';\r\n\r\n // Document Actions Constants\r\n static ACCEPT_ACTION = 'accept';\r\n static REJECT_ACTION = 'reject';\r\n static DELETE_ACTION = 'delete';\r\n \r\n static ACCEPT_CONFIRM_HEADER = 'Accept confirm';\r\n static REJECT_CONFIRM_HEADER = 'Reject Confirm';\r\n \r\n static ACCEPT_NOTE_LABEL = 'Write a note for Acceptance';\r\n static REJECT_NOTE_LABEL = 'Write a note for rejection';\r\n \r\n static ACCEPT_NOTE_PLACEHOLDER = 'Write a note for Acceptance';\r\n static REJECT_NOTE_PLACEHOLDER = 'Write a note for rejection';\r\n \r\n static CANCEL_BUTTON_LABEL = 'Cancel';\r\n static ACCEPT_BUTTON_LABEL = 'Accept';\r\n static REJECT_BUTTON_LABEL = 'Reject';\r\n \r\n static DOCUMENT_ACCEPTED_MESSAGE = 'Document accepted successfully';\r\n static DOCUMENT_REJECTED_MESSAGE = 'Document rejected successfully';\r\n static DOCUMENT_UPDATE_ERROR_MESSAGE = 'Failed to update document. Please try again.';\r\n \r\n static STATUS_APPROVED = 'Approved';\r\n static STATUS_REJECTED = 'Rejected';\r\n \r\n // Document Status Constants\r\n static STATUS_PENDING = 'pending';\r\n static STATUS_ACCEPTED = 'accepted';\r\n static STATUS_REJECTED_LOWERCASE = 'rejected';\r\n static STATUS_DECLINED = 'declined';\r\n \r\n // Document Card CSS Classes\r\n static CARD_PENDING = 'pending-card';\r\n static CARD_ACCEPTED = 'accepted-card';\r\n static CARD_REJECTED = 'rejected-card';\r\n \r\n // Document Button CSS Classes\r\n static BUTTON_SECONDARY_REJECT = 'secondary-reject';\r\n static BUTTON_PRIMARY_REJECT = 'primary-reject';\r\n static BUTTON_DEFAULT_REJECT = 'default-reject';\r\n static BUTTON_PRIMARY_ACCEPT = 'primary-accept';\r\n static BUTTON_SECONDARY_ACCEPT = 'secondary-accept';\r\n static BUTTON_DEFAULT_ACCEPT = 'default-accept';\r\n \r\n // Document Action Button Labels\r\n static BUTTON_LABEL_REJECT = 'Reject';\r\n static BUTTON_LABEL_REJECTED = 'Rejected';\r\n static BUTTON_LABEL_ACCEPT = 'Accept';\r\n static BUTTON_LABEL_ACCEPTED = 'Accepted';\r\n \r\n // Document Upload Validation Messages\r\n static VALIDATION_NO_APPLICANT_SELECTED = 'No Applicant Selected';\r\n static VALIDATION_NO_APPLICANT_DETAIL = 'Please select an applicant.';\r\n static VALIDATION_NO_CATEGORY_SELECTED = 'No Category Selected';\r\n static VALIDATION_NO_CATEGORY_DETAIL = 'Please select a category.';\r\n static VALIDATION_NO_DOCUMENT_TYPE_SELECTED = 'No Document Type Selected';\r\n static VALIDATION_NO_DOCUMENT_TYPE_DETAIL = 'Please select a document type.';\r\n static VALIDATION_NO_DOCUMENTS_UPLOADED = 'No Documents Uploaded';\r\n static VALIDATION_NO_DOCUMENTS_DETAIL = 'Please upload at least one document.';\r\n static VALIDATION_FORM_INCOMPLETE = 'Form Incomplete';\r\n static VALIDATION_FORM_INCOMPLETE_DETAIL = 'Please complete all required fields and upload at least one document.';\r\n static VALIDATION_MISSING_REQUIRED_DATA = 'Missing Required Data';\r\n \r\n // Document Upload Assignment Type Messages\r\n static VALIDATION_SELECT_ASSIGNMENT_TYPE = 'Please select an assignment type (Applicant or Application)';\r\n static VALIDATION_SELECT_CATEGORY = 'Please select a document category';\r\n static VALIDATION_SELECT_DOCUMENT_TYPE = 'Please select a document type';\r\n static VALIDATION_UPLOAD_AT_LEAST_ONE = 'Please upload at least one document';\r\n static VALIDATION_WAIT_FOR_UPLOAD = 'Please wait for all files to finish uploading';\r\n static VALIDATION_SELECT_APPLICANT = 'Please select an applicant';\r\n static VALIDATION_ALL_FIELDS_COMPLETED = 'All required fields are completed';\r\n static VALIDATION_OPTIONS_NOT_LOADED = 'Document options are not loaded yet';\r\n\r\n}\r\n\r\n/**\r\n * `DUMMYDOCUMENTLIST` is a mock list of document objects used for testing and development purposes.\r\n * Each document includes an ID, file name, status, and document URL.\r\n */\r\nexport const DUMMYDOCUMENTLIST = [\r\n {\r\n _id: 1,\r\n fileName: 'Document 1',\r\n status: 'pending',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 2,\r\n fileName: 'Document 2',\r\n status: 'verified',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 3,\r\n fileName: 'Document 3',\r\n status: 'sentReminder',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 4,\r\n fileName: 'Document 4',\r\n status: 'pending',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n];\r\n\r\n/**\r\n * `FOLDERPANEL` is a mock list of folder data representing various folders in the application.\r\n * Each folder contains an ID, file count, text description, missing files count, and pending files count.\r\n */\r\nexport const USERLIST = [\r\n {\r\n _id : \"1\",\r\n username: \"John Smith\",\r\n approveDocumentCount: 15,\r\n pendingDocumentCount: 3\r\n },\r\n {\r\n _id : \"2\",\r\n username: \"Sarah Johnson\",\r\n approveDocumentCount: 8,\r\n pendingDocumentCount: 7\r\n },\r\n {\r\n _id : \"3\",\r\n username: \"Michael Brown\",\r\n approveDocumentCount: 22,\r\n pendingDocumentCount: 1\r\n },\r\n {\r\n _id : \"4\",\r\n username: \"Emily Davis\",\r\n approveDocumentCount: 12,\r\n pendingDocumentCount: 5\r\n }\r\n];\r\n\r\nexport const SAMPLE_STATUS_DATA = [\r\n {\r\n status: \"Approved\",\r\n count: 4,\r\n color: \"#10b981\",\r\n icon: \"pi pi-check\"\r\n },\r\n {\r\n status: \"Pending\",\r\n count: 5,\r\n color: \"#6b7280\",\r\n icon: \"pi pi-clock\"\r\n },\r\n {\r\n status: \"Reviewing\",\r\n count: 1,\r\n color: \"#f59e0b\",\r\n icon: \"pi pi-search\"\r\n },\r\n {\r\n status: \"Rejected\",\r\n count: 2,\r\n color: \"#ef4444\",\r\n icon: \"pi pi-times\"\r\n },\r\n {\r\n status: \"Alert\",\r\n count: 12,\r\n color: \"#dc2626\",\r\n icon: \"pi pi-exclamation-circle\"\r\n }\r\n]; \r\n\r\n/**\r\n * Dummy data for sumaery.\r\n * @type {{}}\r\n */\r\nexport const DUMMYSUMMARY = [\r\n {\r\n status: 'Valuation report requested on 10th Oct 2024',\r\n date: '15/10/2020 10:30',\r\n icon: 'pi pi-shopping-cart',\r\n color: '#9C27B0',\r\n image: 'game-controller.jpg',\r\n },\r\n {\r\n status: 'Valuation report received on 13th Oct 2024',\r\n date: '15/10/2020 14:00',\r\n icon: 'pi pi-cog',\r\n color: '#673AB7',\r\n },\r\n {\r\n status: 'Waiting for Valuation Report to be accepted',\r\n date: '15/10/2020 16:15',\r\n icon: 'pi pi-shopping-cart',\r\n color: '#FF9800',\r\n },\r\n];\r\n\r\n/**\r\n * Dummy data for list box.\r\n * @type {{}}\r\n */\r\nexport const COUNTRIES = [\r\n { name: 'Any Word', code: 'NY', checked: false },\r\n { name: 'Case Sensitive', code: 'RM', checked: false },\r\n { name: 'Wildcard Search', code: 'LDN', checked: false },\r\n { name: 'Whole Word Only', code: 'IST', checked: false },\r\n];\r\n\r\n/**\r\n * Default supported image types.\r\n * @type {{}}\r\n */\r\nexport const SUPPORTED_IMAGE_TYPES = [\r\n 'image/PNG', \r\n 'image/png', \r\n 'image/jpeg',\r\n 'image/jpg',\r\n 'image/gif',\r\n 'image/bmp',\r\n 'image/tiff',\r\n 'image/webp',\r\n];\r\n\r\n/**\r\n * @constant {Array<{label: string, value: string, files: string[]}>} DOCUMENTTYPES\r\n * An array of document type objects containing labels, values, and associated files.\r\n */\r\n\r\nexport const DOCUMENTTYPES = [\r\n {\r\n label: \"BankStatement\",\r\n value: \"bank_statement\",\r\n },\r\n {\r\n label: \"Payslip\",\r\n value: \"payslip\",\r\n },\r\n {\r\n label: \"Selfie\",\r\n value: \"selfie\",\r\n },\r\n {\r\n label: \"Other\",\r\n value: \"other\",\r\n }\r\n];\r\n\r\nexport const DocumentAlertList = [\r\n { status: 'Pending', isAlert: true, alertMessage: 'The name on the payslip does not match either the driver name or the policyholder name.' },\r\n { status: 'Verified', isAlert: false, alertMessage: 'Document is verified successfully.' },\r\n];\r\n\r\n/**\r\n * Dummy data for document sections with detailed document lists.\r\n * Based on the document management interface structure.\r\n * @type {Array<{header: string, description: string, pendingDocument: number, approvedDocument: number, list: Array<{documentName: string, documentType: string, documentUrl: string, status: string, applicantName: string, uploadedTime: string}>}>}\r\n */\r\nexport const DUMMY_DOCUMENT_SECTIONS = [\r\n {\r\n header: \"Identity\",\r\n description: \"Personal identification documents required for verification\",\r\n pendingDocument: 1,\r\n approvedDocument: 1,\r\n list: [\r\n {\r\n documentName: \"passport_emilia_wilson_2025.pdf\",\r\n documentType: \"Passport\",\r\n documentUrl: \"https://example.com/documents/passport_emilia_wilson_2025.pdf\",\r\n status: \"Pending\",\r\n applicantName: \"Charlotte Anderson\",\r\n uploadedTime: \"28 May 2025\"\r\n },\r\n {\r\n documentName: \"driving_license_benjamin_mitchell_2025.jpg\",\r\n documentType: \"Driving License\",\r\n documentUrl: \"https://example.com/documents/driving_license_benjamin_mitchell_2025.jpg\",\r\n status: \"Approved\",\r\n applicantName: \"Benjamin Mitchell\",\r\n uploadedTime: \"27 May 2025\"\r\n },\r\n {\r\n documentName: \"british_gas_bill_may_2025.pdf\",\r\n documentType: \"Utility Bill\",\r\n documentUrl: \"https://example.com/documents/british_gas_bill_may_2025.pdf\",\r\n status: \"Alert\",\r\n applicantName: \"Sophia Reynolds\",\r\n uploadedTime: \"26 May 2025\"\r\n },\r\n {\r\n documentName: \"council_tax_oliver_thompson_2025_2026.pdf\",\r\n documentType: \"Council Tax Bill\",\r\n documentUrl: \"https://example.com/documents/council_tax_oliver_thompson_2025_2026.pdf\",\r\n status: \"Uploaded\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"30 May 2025\"\r\n },\r\n {\r\n documentName: \"certified_id_oliver_thompson_2025.pdf\",\r\n documentType: \"Certified ID\",\r\n documentUrl: \"https://example.com/documents/certified_id_oliver_thompson_2025.pdf\",\r\n status: \"Reviewing\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n },\r\n {\r\n documentName: \"proof_of_address_oliver_thompson_2025.pdf\",\r\n documentType: \"Proof of Address\",\r\n documentUrl: \"https://example.com/documents/proof_of_address_oliver_thompson_2025.pdf\",\r\n status: \"Rejected\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n }\r\n ]\r\n },\r\n {\r\n header: \"Income\",\r\n description: \"Personal Income documents required for verification\",\r\n pendingDocument: 1,\r\n approvedDocument: 1,\r\n list: [\r\n {\r\n documentName: \"passport_emilia_wilson_2025.pdf\",\r\n documentType: \"Passport\",\r\n documentUrl: \"https://example.com/documents/passport_emilia_wilson_2025.pdf\",\r\n status: \"Pending\",\r\n applicantName: \"Charlotte Anderson\",\r\n uploadedTime: \"28 May 2025\"\r\n },\r\n {\r\n documentName: \"driving_license_benjamin_mitchell_2025.jpg\",\r\n documentType: \"Driving License\",\r\n documentUrl: \"https://example.com/documents/driving_license_benjamin_mitchell_2025.jpg\",\r\n status: \"Approved\",\r\n applicantName: \"Benjamin Mitchell\",\r\n uploadedTime: \"27 May 2025\"\r\n },\r\n {\r\n documentName: \"british_gas_bill_may_2025.pdf\",\r\n documentType: \"Utility Bill\",\r\n documentUrl: \"https://example.com/documents/british_gas_bill_may_2025.pdf\",\r\n status: \"Alert\",\r\n applicantName: \"Sophia Reynolds\",\r\n uploadedTime: \"26 May 2025\"\r\n },\r\n {\r\n documentName: \"council_tax_oliver_thompson_2025_2026.pdf\",\r\n documentType: \"Council Tax Bill\",\r\n documentUrl: \"https://example.com/documents/council_tax_oliver_thompson_2025_2026.pdf\",\r\n status: \"Uploaded\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"30 May 2025\"\r\n },\r\n {\r\n documentName: \"certified_id_oliver_thompson_2025.pdf\",\r\n documentType: \"Certified ID\",\r\n documentUrl: \"https://example.com/documents/certified_id_oliver_thompson_2025.pdf\",\r\n status: \"Reviewing\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n },\r\n {\r\n documentName: \"proof_of_address_oliver_thompson_2025.pdf\",\r\n documentType: \"Proof of Address\",\r\n documentUrl: \"https://example.com/documents/proof_of_address_oliver_thompson_2025.pdf\",\r\n status: \"Rejected\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n }\r\n ]\r\n }\r\n];\r\n","/**\r\n * A utility class containing common error messages.\r\n * @class ERRORS\r\n */\r\nexport class ERRORS {\r\n /**\r\n * Error message for invalid recipient.\r\n * @static\r\n * @type {string}\r\n */\r\n static INVALID_RECIPIENT = \"Invalid recipient: The recipient cannot be empty.\";\r\n \r\n static NO_VALUE_FOUND = \"No value found\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_FETCHING_DOCUMENTS = \"Error fetching documents:\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_FETCHING_FOLDERS = \"Error fetching folders:\";\r\n \r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_ALLDOCUMENT_MISSING = \"allDocumentTypes is missing in the response:\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_DOCUMENT_TYPES = \"Error fetching document types:\";\r\n\r\n static ERROR_DOCUMENT_CATAGORY = 'Error fetching document categories:'\r\n static NO_DOCUMENT_URL = 'No document URL provided for download'\r\n static DOWNLOAD_FAIL = 'Download failed:'\r\n static ERROR_DELETING_DOCUMENT = 'Error deleting document:'\r\n static ERROR_RECEIVING_DOCUMENT_LIST = 'Error receiving document list response:'\r\n static CONTEXT_ID_REQUIRED = 'Context ID is required to fetch status data'\r\n static ERROR_FETCHING_STATUS_DATA = 'Error fetching status data:'\r\n static ERROR_FETCHING_USER_LIST = 'Error fetching user list with filters:'\r\n static ERROR_FETCHING_DOCUMENT_LIST = 'Error fetching document list:'\r\n static ERROR_FETCHING_DOCUMENT_CATEGORIES = 'Error fetching document categories:'\r\n static ERROR_FETCHING_DOCUMENTS_BY_STATUS = 'Error fetching documents by status:'\r\n static ERROR_FETCHING_DOCUMENTS_BY_CATEGORY = 'Error fetching documents by category:'\r\n static ERROR_CALLING_API_WITH_SELECTION = 'Error calling API with selection:'\r\n}\r\n","import { EntityState } from '@datorama/akita';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentAlertModel } from '../models/document-alert.model';\r\nimport { FolderBlockModel } from '../models/folder.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { Message } from 'primeng/api';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Represents the state of the documents in the application.\r\n * This interface extends Akita's `EntityState` to include additional properties\r\n * for managing document-specific data, such as `records`, `filteredRecords` and `folderId`.\r\n * @interface DocumentState\r\n * @property {any[]} records - A collection of records related to documents.\r\n * @property {any[]} filteredRecords - A collection of filteredRecords related to documents.\r\n * @property {string | null} folderId - The ID of the currently selected folder, or `null` if no folder is selected.\r\n * @property {boolean} isDialogOpen - A flag indicating whether a dialog is open.\r\n */\r\nexport interface DocumentState extends EntityState<DocumentModel, string> {\r\n records: DocumentModel[];\r\n folderId: string | null;\r\n isDialogOpen: boolean;\r\n filteredRecords:DocumentModel[];\r\n dropdownOptions: DocumentTypeModel[];\r\n uploadedDocumentFiles: DocumentModel[];\r\n parentDocumentTypeId: string | null;\r\n documentAlert:DocumentAlertModel\r\n folders:FolderBlockModel[]\r\n messages: Message[]\r\n documentList : DocumentModel[]\r\n documentCategories: DocumentCategory[];\r\n selectedMenuItem: string | null; // Stores the _id of the selected menu item, not the label\r\n selectedUserId: string | null;\r\n selectedStatus: string | null;\r\n searchKey: string | null; // Search term for filtering documents\r\n showUserList: boolean;\r\n currentDocument: DocumentModel | null;\r\n userList: UserListModel[];\r\n statusData: StatusDataModel[];\r\n documentListResponse: DocumentListResponse[] | null;\r\n \r\n // Document Viewer State\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n}\r\n\r\n/**\r\n * Creates the initial state for the `DocumentState` store.\r\n * This function provides default values for all properties in the `DocumentState` interface,\r\n * ensuring the store starts with a consistent initial structure.\r\n * @returns {DocumentState} The initial state of the document store.\r\n */\r\nexport function createInitialState(): DocumentState {\r\n return {\r\n records: [],\r\n filteredRecords: [],\r\n folderId: null,\r\n isDialogOpen: false,\r\n dropdownOptions: [], \r\n uploadedDocumentFiles: [],\r\n parentDocumentTypeId: null,\r\n documentAlert: {_id:''},\r\n folders:[],\r\n messages:[],\r\n documentList : [],\r\n documentCategories: [],\r\n selectedMenuItem: null,\r\n selectedUserId: null,\r\n selectedStatus: null,\r\n searchKey: null,\r\n showUserList: true,\r\n currentDocument: null,\r\n userList: [],\r\n statusData: [],\r\n documentListResponse: null,\r\n \r\n // Document Viewer State\r\n selectedDocument: undefined,\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: 'pending' as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EntityStore, StoreConfig } from '@datorama/akita';\r\nimport { createInitialState, DocumentState } from './document.state';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { Message } from 'primeng/api';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Store that manages the state of documents in the application.\r\n * The `DocumentStore` class extends Akita's `EntityStore` to manage the entity state for documents.\r\n * It uses the `createInitialState` function to initialize the store with default values and \r\n * is configured with the name `'documents'`.\r\n * @augments EntityStore<DocumentState>\r\n */\r\n@Injectable({ providedIn: 'root' })\r\n@StoreConfig({ name: 'documents' })\r\nexport class DocumentStore extends EntityStore<DocumentState> {\r\n /**\r\n * Creates an instance of `DocumentStore` with the initial state of the documents.\r\n */\r\n constructor() {\r\n super(createInitialState());\r\n }\r\n \r\n setUploadedDocumentFiles(files: any[]) {\r\n this.update({ uploadedDocumentFiles: files });\r\n }\r\n\r\n setFolders(folders: any) {\r\n this.update({ folders: folders });\r\n }\r\n \r\n setDocumentTypes(documentType: any) {\r\n this.update({ uploadedDocumentFiles: documentType });\r\n }\r\n\r\n setDocumentAlert(documentAlert: any) { \r\n this.update({ documentAlert : documentAlert });\r\n }\r\n\r\n setParentDocumentTypeId(parentDocumentTypeId: string) {\r\n this.update({ parentDocumentTypeId });\r\n }\r\n \r\n setMessage(message: Message[]) {\r\n this.update({ messages : message });\r\n }\r\n\r\n setDocumentList(documents: DocumentModel[]) {\r\n this.update({ documents : documents });\r\n }\r\n\r\n setDocumentCategories(categories: DocumentCategory[]) {\r\n this.update({ documentCategories: categories });\r\n }\r\n\r\n // New methods for selection state management\r\n setSelectedMenuItem(menuItem: string | null) {\r\n this.update({ selectedMenuItem: menuItem });\r\n }\r\n\r\n setSelectedUserId(userId: string | null) {\r\n this.update({ selectedUserId: userId });\r\n }\r\n\r\n setSelectedStatus(status: string | null) {\r\n this.update({ selectedStatus: status });\r\n }\r\n\r\n setSearchKey(searchKey: string | null) {\r\n this.update({ searchKey: searchKey });\r\n }\r\n\r\n // Method to update all selection properties at once\r\n setSelectionState(menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null) {\r\n this.update({ \r\n selectedMenuItem: menuItem,\r\n selectedUserId: userId,\r\n selectedStatus: status,\r\n searchKey: searchKey\r\n });\r\n }\r\n\r\n // Method to clear all selection state\r\n clearSelectionState() {\r\n this.update({\r\n selectedMenuItem: null,\r\n selectedUserId: null,\r\n selectedStatus: null,\r\n searchKey: null,\r\n showUserList: true\r\n });\r\n }\r\n\r\n // Method to control user list visibility\r\n setShowUserList(show: boolean) {\r\n this.update({ showUserList: show });\r\n }\r\n\r\n // Method to set the current document\r\n setCurrentDocument(document: DocumentModel | null) {\r\n this.update({ currentDocument: document });\r\n }\r\n\r\n // Method to set the user list\r\n setUserList(userList: UserListModel[]) {\r\n this.update({ userList: userList });\r\n }\r\n\r\n // Method to set the status data\r\n setStatusData(statusData: StatusDataModel[]) {\r\n this.update({ statusData: statusData });\r\n }\r\n\r\n // Method to set the document list response\r\n setDocumentListResponse(response: DocumentListResponse[] | null) {\r\n this.update({ documentListResponse: response });\r\n }\r\n\r\n // Document Viewer State Management Methods\r\n setSelectedDocument(document: DocumentListItem | undefined) {\r\n this.update({ selectedDocument: document });\r\n }\r\n\r\n setDocumentHistory(history: DocumentHistorySection[]) {\r\n this.update({ documentHistory: history });\r\n }\r\n\r\n setShowDocumentHistory(show: boolean) {\r\n this.update({ showDocumentHistory: show });\r\n }\r\n\r\n setIsActionLoading(loading: boolean) {\r\n this.update({ isActionLoading: loading });\r\n }\r\n\r\n setDocumentStatus(status: 'pending' | 'accepted' | 'rejected') {\r\n this.update({ documentStatus: status });\r\n }\r\n\r\n setDocumentIsUploaded(uploaded: boolean) {\r\n this.update({ documentIsUploaded: uploaded });\r\n }\r\n\r\n setAlertData(alertData: any) {\r\n this.update({ alertData: alertData });\r\n }\r\n\r\n // Method to update all document viewer state at once\r\n updateDocumentViewerState(\r\n document?: DocumentListItem,\r\n history?: DocumentHistorySection[],\r\n showHistory?: boolean,\r\n loading?: boolean,\r\n status?: 'pending' | 'accepted' | 'rejected',\r\n uploaded?: boolean,\r\n alertData?: any\r\n ) {\r\n const updates: Partial<DocumentState> = {};\r\n \r\n if (document !== undefined) updates.selectedDocument = document;\r\n if (history !== undefined) updates.documentHistory = history;\r\n if (showHistory !== undefined) updates.showDocumentHistory = showHistory;\r\n if (loading !== undefined) updates.isActionLoading = loading;\r\n if (status !== undefined) updates.documentStatus = status;\r\n if (uploaded !== undefined) updates.documentIsUploaded = uploaded;\r\n if (alertData !== undefined) updates.alertData = alertData;\r\n \r\n this.update(updates);\r\n }\r\n\r\n // Method to clear document viewer state\r\n clearDocumentViewerState() {\r\n this.update({\r\n selectedDocument: undefined,\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: 'pending' as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n });\r\n }\r\n}\r\n","/**\r\n * Class that holds the URLs used throughout the application.\r\n * These URLs are typically used for making API requests and accessing various resources.\r\n * @class URLS\r\n * @typedef {URLS}\r\n */\r\nexport class URLS {\r\n /**\r\n * The URL to fetch the application configuration file.\r\n * This JSON file typically contains settings and options for the application.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONFIGFILEURL = \"assets/config/api.config.json\";\r\n\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_UPLOAD_FILE = \"documents/uploadFile\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_UPLOAD = \"Documents\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENTS = \"documents\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENTS_CATAGORIES = \"documents/getAllCategoriesByApplicationId\";\r\n\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * Used to specify the context for certain API calls, such as filtering or scoping the request.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONTEXT = \"?contextId=\";\r\n\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_TYPES = \"documentTypes\";\r\n /**\r\n * The URL endpoint for getting categories by source (Applicant/Application).\r\n * Used to fetch document categories based on the selected source.\r\n * @static\r\n * @type {string}\r\n */\r\n static GET_CATEGORIES_BY_SOURCE = \"documentTypes/getAllCategoriesBySource/\";\r\n /**\r\n * The URL endpoint for getting document types by category ID.\r\n * Used to fetch document types based on the selected category.\r\n * @static\r\n * @type {string}\r\n */\r\n static GET_DOCUMENT_TYPES_BY_CATEGORY = \"documentTypes/getAllDocumentTypesByCategoryId/\";\r\n /**\r\n * The URL endpoint for saving document upload data.\r\n * Used to save the complete document upload information.\r\n * @static\r\n * @type {string}\r\n */\r\n static SAVE_DOCUMENT_UPLOAD = \"documents/create\";\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static FOLDERS = \"/folders?contextId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static ALERT_BY_DOCUMENT_ID = \"alerts?documentId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static PARENT_DOCUMENT_TYPE_ID = \"parentDocumentType?parentDocumentTypeId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static USERLIST = \"documents/getContextIdListByApplicationId/\";\r\n\r\n /**\r\n * The URL endpoint for getting document status count by context ID.\r\n * Used to fetch status data with applicationId, contextId, and category parameters.\r\n * @static\r\n * @type {string}\r\n */\r\n static STATUS_DOCUMENT_COUNT = \"documents/getStatusDocumentCountByContextId/\";\r\n\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * Used to specify the context for certain API calls, such as filtering or scoping the request.\r\n * @static\r\n * @type {string}\r\n */\r\n \r\n static CONTEXT_ID = \"&contextId=\";\r\n static GETALL = \"documents/getAllByContextId\";\r\n static DOCUMENT_LIST = \"list\";\r\n static DOCUMENT_HISTORY = \"documents/getDocumentHistoryByDocumentId/\";\r\n static DELETE_DOCUMENT = \"documents/deleteDocumentByDocumentId/\";\r\n static UPDATE_DOCUMENT_STATUS = \"documents/updateDocumentStatusByDocumentId/\";\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { URLS } from '../constant/URLS';\r\n\r\n/**\r\n * Service that handles loading and providing configuration settings for the application.\r\n * It fetches configuration data from a remote server and exposes various configuration options.\r\n * @class AppConfigService\r\n * @typedef {AppConfigService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppConfigService {\r\n\r\n /**\r\n * Holds the configuration data loaded from the server.\r\n * @private\r\n * @type {*}\r\n */\r\n private appConfig: any;\r\n\r\n /**\r\n * Creates an instance of AppConfigService.\r\n * Initializes the HttpClient for making HTTP requests.\r\n * @class\r\n * @param {HttpClient} http - The HttpClient service used for making HTTP requests.\r\n */\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Loads the application configuration from the server by making an HTTP request to the configuration URL.\r\n * This method retrieves the configuration data and assigns it to the appConfig property.\r\n * @async\r\n * @returns {*}\r\n */\r\n async loadAppConfig() {\r\n try {\r\n this.appConfig = await firstValueFrom(this.http.get(URLS.CONFIGFILEURL));\r\n } catch (error) {\r\n throw new Error(\"Api url is missing.\")\r\n }\r\n }\r\n \r\n\r\n /**\r\n * Returns the base URL for the API from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get apiBaseUrl() {\r\n return this.appConfig?.documentApiUrl;\r\n }\r\n\r\n /**\r\n * Returns the local server API URL from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get localServerApi() {\r\n return this.appConfig?.localServerApi;\r\n }\r\n\r\n /**\r\n * Returns the visibility options from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get visibilityOptions() {\r\n return this.appConfig?.visibilityOption;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { DocumentStore } from './document.store';\r\nimport { Observable, tap } from 'rxjs';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\nimport { URLS } from '../../../Shared/constant/URLS';\r\nimport { DocumentModel } from '../models/document.model';\r\n\r\n/**\r\n * Service for managing document-related operations.\r\n * The `DocumentService` acts as a bridge between the application and the backend API for handling document-related data.\r\n * It interacts with the `DocumentStore` for state management and uses `HttpClient` for making HTTP requests.\r\n * Creates an instance of `DocumentService`.\r\n * @param {DocumentStore} documentStore - The store that manages the state of documents.\r\n * @param {HttpClient} http - The Angular HTTP client for making API requests.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class DocumentService {\r\n\r\n /**\r\n * Creates an instance of DocumentService.\r\n * @param {DocumentStore} documentStore - Store managing the state of documents.\r\n * @param {HttpClient} http - Angular HTTP client for making API requests.\r\n * @param {AppConfigService} appConfigService - Service for retrieving application configuration, such as API base URL.\r\n */\r\n constructor(\r\n public documentStore: DocumentStore,\r\n private http: HttpClient,\r\n public appConfigService: AppConfigService\r\n ) { }\r\n\r\n /**\r\n * Get api url from appConfigService.\r\n * @readonly\r\n * @type {string}\r\n */\r\n get apiUrl(): string {\r\n return this.appConfigService.apiBaseUrl;\r\n }\r\n\r\n /**\r\n * Sends a request to create a new document.\r\n * @param {*} entity - The data of the document to be created.\r\n * @returns {Observable<any>} Observable that emits the newly created document.\r\n */\r\n create(entity: any): Observable<any> {\r\n const headers = { 'Authorization': 'Bearer a79cbca8-164c-4ec3-991d-0efb441ff126' };\r\n return this.http.post<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, entity, { headers }).pipe(\r\n tap((newEntity: any) => this.documentStore.add(newEntity))\r\n );\r\n }\r\n\r\n /**\r\n * Fetches all documents from the backend.\r\n * @returns {Observable<DocumentModel[]>} Observable that emits an array of documents.\r\n */\r\n getAll(): Observable<DocumentModel[]> {\r\n return this.http.get<DocumentModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}`).pipe(\r\n tap((entities: DocumentModel[]) => this.documentStore.set(entities))\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document by its ID.\r\n * @param {string} id - The unique identifier of the document.\r\n * @returns {Observable<any>} Observable that emits the retrieved document.\r\n */\r\n getById(id: string): Observable<any> {\r\n return this.http.get<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${id}`).pipe(\r\n tap((entity: any) => this.documentStore.upsert(id, entity))\r\n );\r\n }\r\n\r\n /**\r\n * Updates an existing document by its ID.\r\n * @param {string} id - The unique identifier of the document.\r\n * @param {DocumentModel} entity - The updated data of the document.\r\n * @returns {Observable<DocumentModel>} Observable that emits the updated document.\r\n */\r\n update(id: string, entity: DocumentModel): Observable<DocumentModel> {\r\n return this.http.put<DocumentModel>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${id}`, entity).pipe(\r\n tap((updatedEntity: DocumentModel) => this.documentStore.update(id, updatedEntity))\r\n );\r\n }\r\n\r\n /**\r\n * Deletes a document by its ID.\r\n * @param {string} id - The unique identifier of the document to be deleted.\r\n * @returns {Observable<void>} Observable that completes when the document is deleted.\r\n */\r\n delete(id: string): Observable<void> {\r\n return this.http.delete<void>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}/${id}`).pipe(\r\n tap(() => this.documentStore.remove(id))\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { QueryEntity } from '@datorama/akita';\r\nimport { DocumentStore } from './document.store';\r\nimport { DocumentState } from './document.state';\r\nimport { Observable } from 'rxjs';\r\nimport { Message } from 'primeng/api';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n\r\n/**\r\n * Query service for managing document state.\r\n * This class extends Akita's `QueryEntity` to provide additional functionality for querying document data.\r\n * @class DocumentQuery\r\n * @typedef {DocumentQuery}\r\n * @augments {QueryEntity<DocumentState>}\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class DocumentQuery extends QueryEntity<DocumentState> {\r\n constructor(protected override store: DocumentStore) {\r\n super(store);\r\n }\r\n\r\n /**\r\n * Selects the currently selected folder ID from the document state.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected folder ID.\r\n */\r\n getParentDocumentTypeId() : string | null {\r\n return this.getValue()['parentDocumentTypeId'];\r\n }\r\n\r\n /**\r\n * Selects the currently selected folder ID from the document state.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected folder ID.\r\n */\r\n selectParentDocumentTypeId():Observable<string | null> {\r\n return this.select((state) => state['parentDocumentTypeId']);\r\n }\r\n /**\r\n * Selects the set messages.\r\n * @returns {Observable<Message>} Observable that emits the current Message.\r\n */\r\n selectMessages():Observable<Message[]> {\r\n return this.select((state) => state.messages);\r\n }\r\n /**\r\n * Selects the set documents.\r\n * @returns {Observable<DocumentModel[]>} Observable that emits the documets.\r\n */\r\n selectDocumets():Observable<DocumentModel[]> {\r\n return this.select((state) => state.documentList);\r\n }\r\n\r\n /**\r\n * Selects the document categories.\r\n * @returns {Observable<DocumentCategory[]>} Observable that emits the document categories.\r\n */\r\n selectDocumentCategories(): Observable<DocumentCategory[]> {\r\n return this.select((state) => state.documentCategories);\r\n }\r\n\r\n // New query methods for selection state\r\n /**\r\n * Selects the currently selected menu item.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected menu item _id (not the label).\r\n */\r\n selectSelectedMenuItem(): Observable<string | null> {\r\n return this.select((state) => state.selectedMenuItem);\r\n }\r\n\r\n /**\r\n * Selects the currently selected user ID.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected user ID.\r\n */\r\n selectSelectedUserId(): Observable<string | null> {\r\n return this.select((state) => state.selectedUserId);\r\n }\r\n\r\n /**\r\n * Selects the currently selected status.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected status.\r\n */\r\n selectSelectedStatus(): Observable<string | null> {\r\n return this.select((state) => state.selectedStatus);\r\n }\r\n\r\n /**\r\n * Selects the current search key.\r\n * @returns {Observable<string | null>} Observable that emits the current search key.\r\n */\r\n selectSearchKey(): Observable<string | null> {\r\n return this.select((state) => state.searchKey);\r\n }\r\n\r\n /**\r\n * Selects all selection state properties (menu item, user ID, status, search key).\r\n * @returns {Observable<{menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null}>} Observable that emits the current selection state.\r\n * Note: menuItem is the _id of the selected menu item, not the label.\r\n */\r\n selectSelectionState(): Observable<{menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null}> {\r\n return this.select((state) => ({\r\n menuItem: state.selectedMenuItem,\r\n userId: state.selectedUserId,\r\n status: state.selectedStatus,\r\n searchKey: state.searchKey\r\n }));\r\n }\r\n\r\n /**\r\n * Gets the current selection state values (synchronous).\r\n * @returns {Object} The current selection state values.\r\n * Note: menuItem is the _id of the selected menu item, not the label.\r\n */\r\n getSelectionState(): {menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null} {\r\n const state = this.getValue();\r\n return {\r\n menuItem: state.selectedMenuItem,\r\n userId: state.selectedUserId,\r\n status: state.selectedStatus,\r\n searchKey: state.searchKey\r\n };\r\n }\r\n\r\n /**\r\n * Selects the user list visibility state.\r\n * @returns {Observable<boolean>} Observable that emits the current user list visibility.\r\n */\r\n selectShowUserList(): Observable<boolean> {\r\n return this.select((state) => state.showUserList);\r\n }\r\n\r\n /**\r\n * Gets the current user list visibility value (synchronous).\r\n * @returns {boolean} The current user list visibility.\r\n */\r\n getShowUserList(): boolean {\r\n return this.getValue().showUserList;\r\n }\r\n\r\n /**\r\n * Selects the current document.\r\n * @returns {Observable<DocumentModel | null>} Observable that emits the current document.\r\n */\r\n selectCurrentDocument(): Observable<DocumentModel | null> {\r\n return this.select((state) => state.currentDocument);\r\n }\r\n\r\n /**\r\n * Gets the current document value (synchronous).\r\n * @returns {DocumentModel | null} The current document.\r\n */\r\n getCurrentDocument(): DocumentModel | null {\r\n return this.getValue().currentDocument;\r\n }\r\n\r\n /**\r\n * Selects the user list.\r\n * @returns {Observable<UserListModel[]>} Observable that emits the user list.\r\n */\r\n selectUserList(): Observable<UserListModel[]> {\r\n return this.select((state) => state.userList);\r\n }\r\n\r\n /**\r\n * Gets the current user list value (synchronous).\r\n * @returns {UserListModel[]} The current user list.\r\n */\r\n getUserList(): UserListModel[] {\r\n return this.getValue().userList;\r\n }\r\n\r\n /**\r\n * Selects the status data.\r\n * @returns {Observable<StatusDataModel[]>} Observable that emits the status data.\r\n */\r\n selectStatusData(): Observable<StatusDataModel[]> {\r\n return this.select((state) => state.statusData);\r\n }\r\n\r\n /**\r\n * Gets the current status data value (synchronous).\r\n * @returns {StatusDataModel[]} The current status data.\r\n */\r\n getStatusData(): StatusDataModel[] {\r\n return this.getValue().statusData;\r\n }\r\n\r\n /**\r\n * Selects the document list response.\r\n * @returns {Observable<DocumentListResponse[] | null>} Observable that emits the document list response.\r\n */\r\n selectDocumentListResponse(): Observable<DocumentListResponse[] | null> {\r\n return this.select((state) => state.documentListResponse);\r\n }\r\n\r\n /**\r\n * Gets the current document list response value (synchronous).\r\n * @returns {DocumentListResponse[] | null} The current document list response.\r\n */\r\n getDocumentListResponse(): DocumentListResponse[] | null {\r\n return this.getValue().documentListResponse;\r\n }\r\n\r\n // Document Viewer State Query Methods\r\n /**\r\n * Selects the selected document for viewing.\r\n * @returns {Observable<DocumentListItem | undefined>} Observable that emits the selected document.\r\n */\r\n selectSelectedDocument(): Observable<DocumentListItem | undefined> {\r\n return this.select((state) => state.selectedDocument);\r\n }\r\n\r\n /**\r\n * Gets the current selected document value (synchronous).\r\n * @returns {DocumentListItem | undefined} The current selected document.\r\n */\r\n getSelectedDocument(): DocumentListItem | undefined {\r\n return this.getValue().selectedDocument;\r\n }\r\n\r\n /**\r\n * Selects the document history.\r\n * @returns {Observable<DocumentHistorySection[]>} Observable that emits the document history.\r\n */\r\n selectDocumentHistory(): Observable<DocumentHistorySection[]> {\r\n return this.select((state) => state.documentHistory);\r\n }\r\n\r\n /**\r\n * Gets the current document history value (synchronous).\r\n * @returns {DocumentHistorySection[]} The current document history.\r\n */\r\n getDocumentHistory(): DocumentHistorySection[] {\r\n return this.getValue().documentHistory;\r\n }\r\n\r\n /**\r\n * Selects the document history visibility state.\r\n * @returns {Observable<boolean>} Observable that emits the current document history visibility.\r\n */\r\n selectShowDocumentHistory(): Observable<boolean> {\r\n return this.select((state) => state.showDocumentHistory);\r\n }\r\n\r\n /**\r\n * Gets the current document history visibility value (synchronous).\r\n * @returns {boolean} The current document history visibility.\r\n */\r\n getShowDocumentHistory(): boolean {\r\n return this.getValue().showDocumentHistory;\r\n }\r\n\r\n /**\r\n * Selects the action loading state.\r\n * @returns {Observable<boolean>} Observable that emits the current action loading state.\r\n */\r\n selectIsActionLoading(): Observable<boolean> {\r\n return this.select((state) => state.isActionLoading);\r\n }\r\n\r\n /**\r\n * Gets the current action loading value (synchronous).\r\n * @returns {boolean} The current action loading state.\r\n */\r\n getIsActionLoading(): boolean {\r\n return this.getValue().isActionLoading;\r\n }\r\n\r\n /**\r\n * Selects the document status.\r\n * @returns {Observable<'pending' | 'accepted' | 'rejected'>} Observable that emits the current document status.\r\n */\r\n selectDocumentStatus(): Observable<'pending' | 'accepted' | 'rejected'> {\r\n return this.select((state) => state.documentStatus);\r\n }\r\n\r\n /**\r\n * Gets the current document status value (synchronous).\r\n * @returns {'pending' | 'accepted' | 'rejected'} The current document status.\r\n */\r\n getDocumentStatus(): 'pending' | 'accepted' | 'rejected' {\r\n return this.getValue().documentStatus;\r\n }\r\n\r\n /**\r\n * Selects the document uploaded state.\r\n * @returns {Observable<boolean>} Observable that emits the current document uploaded state.\r\n */\r\n selectDocumentIsUploaded(): Observable<boolean> {\r\n return this.select((state) => state.documentIsUploaded);\r\n }\r\n\r\n /**\r\n * Gets the current document uploaded value (synchronous).\r\n * @returns {boolean} The current document uploaded state.\r\n */\r\n getDocumentIsUploaded(): boolean {\r\n return this.getValue().documentIsUploaded;\r\n }\r\n\r\n /**\r\n * Selects the alert data.\r\n * @returns {Observable<any>} Observable that emits the current alert data.\r\n */\r\n selectAlertData(): Observable<any> {\r\n return this.select((state) => state.alertData);\r\n }\r\n\r\n /**\r\n * Gets the current alert data value (synchronous).\r\n * @returns {any} The current alert data.\r\n */\r\n getAlertData(): any {\r\n return this.getValue().alertData;\r\n }\r\n\r\n /**\r\n * Selects all document viewer state properties.\r\n * @returns {Observable<{selectedDocument?: DocumentListItem, documentHistory: DocumentHistorySection[], showDocumentHistory: boolean, isActionLoading: boolean, documentStatus: 'pending' | 'accepted' | 'rejected', documentIsUploaded: boolean, alertData: any}>} Observable that emits the current document viewer state.\r\n */\r\n selectDocumentViewerState(): Observable<{\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n }> {\r\n return this.select((state) => ({\r\n selectedDocument: state.selectedDocument,\r\n documentHistory: state.documentHistory,\r\n showDocumentHistory: state.showDocumentHistory,\r\n isActionLoading: state.isActionLoading,\r\n documentStatus: state.documentStatus,\r\n documentIsUploaded: state.documentIsUploaded,\r\n alertData: state.alertData\r\n }));\r\n }\r\n\r\n /**\r\n * Gets the current document viewer state values (synchronous).\r\n * @returns {Object} The current document viewer state values.\r\n */\r\n getDocumentViewerState(): {\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n } {\r\n const state = this.getValue();\r\n return {\r\n selectedDocument: state.selectedDocument,\r\n documentHistory: state.documentHistory,\r\n showDocumentHistory: state.showDocumentHistory,\r\n isActionLoading: state.isActionLoading,\r\n documentStatus: state.documentStatus,\r\n documentIsUploaded: state.documentIsUploaded,\r\n alertData: state.alertData\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { catchError, EMPTY, Observable, of, tap, throwError } from 'rxjs';\r\nimport { URLS } from '../../../Shared/constant/URLS';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentAlertModel } from '../models/document-alert.model';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { FolderBlockModel } from '../models/folder.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Service for making HTTP requests related to documents.\r\n * @class DocumentHttpService\r\n * @typedef {DocumentHttpService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class DocumentHttpService {\r\n\r\n /**\r\n * Creates an instance of DocumentService.\r\n * @param {DocumentStore} documentStore - Store managing the state of documents.\r\n * @param {HttpClient} http - Angular HTTP client for making API requests.\r\n * @param {AppConfigService} appConfigService - Service for retrieving application configuration, such as API base URL.\r\n */\r\n constructor(\r\n public documentStore: DocumentStore,\r\n private http: HttpClient,\r\n public appConfigService: AppConfigService\r\n ) { }\r\n\r\n /**\r\n * Get api url from appConfigService.\r\n * @readonly\r\n * @type {string}\r\n */\r\n get apiUrl(): string {\r\n return this.appConfigService.apiBaseUrl;\r\n }\r\n\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * Includes error handling for failed API requests.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getFoldersData(contextId:string | undefined): Observable<FolderBlockModel[]> {\r\n if(!contextId) return EMPTY;\r\n return this.http.get<FolderBlockModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}${URLS.FOLDERS}${contextId}`).pipe(\r\n tap((folders: FolderBlockModel[]) => {\r\n this.documentStore.setFolders(folders);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document catagories by its path name.\r\n * Includes error handling for failed API requests.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getDocumentCatagories(contextId:string): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.get<any>(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`, { headers }).pipe(\r\n tap((response: any) => {\r\n // Store only the categories array, not the entire response\r\n if (response && response.categories) {\r\n this.documentStore.setDocumentCategories(response.categories);\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * Includes error handling for failed API requests.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n // getDocumentTypes(): Observable<DocumentTypeModel[]> {\r\n // return this.http.get<DocumentTypeModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.DOCUMENT_TYPES}`).pipe(\r\n // tap((documentTypes: DocumentTypeModel[]) => {\r\n // this.documentStore.setDocumentTypes(documentTypes);\r\n // }),\r\n // catchError((error) => {\r\n // return throwError(() => new Error(error));\r\n // })\r\n // );\r\n // }\r\n\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * @param {string} documentId - The document ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getAlertsByDocumentID(documentId:string): Observable<DocumentAlertModel> {\r\n return this.http.get<DocumentAlertModel>(`${this.apiUrl}${URLS.ALERT_BY_DOCUMENT_ID}${documentId}`).pipe(\r\n tap((documentAlert: DocumentAlertModel) => {\r\n this.documentStore.setDocumentAlert(documentAlert);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document by its folder ID and transforms the response for dropdown options.\r\n * @param {string} folderId - The folder ID to fetch the document.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getDocumentByFolderID(folderId:string, contextId:string): Observable<DocumentModel[]> {\r\n return this.http.get<DocumentModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.PARENT_DOCUMENT_TYPE_ID}${folderId}${URLS.CONTEXT_ID}${contextId}`).pipe(\r\n tap((records: DocumentModel[]) => {\r\n this.documentStore.set(records);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Updates the name of a document.\r\n * This method sends an HTTP PUT request to update the document's file name using the provided document ID and payload.\r\n * In case of an error, it will return an observable that throws an Error.\r\n * @param {string} documentId - The unique identifier of the document to update.\r\n * @param {any} payload - The payload containing the updated document data (e.g., fileName).\r\n * @returns {Observable<DocumentModel>} An observable that emits the updated DocumentModel.\r\n */\r\n updateDocumentName(documentId: string, payload: any): Observable<DocumentModel> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.put<DocumentModel>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${documentId}`, payload, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a userlist by its path name.\r\n * @param {string} contextId - The document ID to fetch the document.\r\n * @returns {Observable<UserListModel[]>} Observable that emits the user list data.\r\n */\r\n getUserListByContextId(contextId : string): Observable<UserListModel[]> {\r\n if(!contextId) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.get<UserListModel[]>(`${this.apiUrl}${URLS.USERLIST}${contextId}`, { headers }).pipe(\r\n tap((userList: UserListModel[]) => {\r\n this.documentStore.setUserList(userList);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches document status count data by application ID with optional context ID and category parameters.\r\n * @param {string} applicationId - The application ID to fetch status data.\r\n * @param {string | null} contextId - The context ID (applicant ID) to filter by. If null, uses applicationId.\r\n * @param {string | null} categoryId - The category ID to filter by.\r\n * @returns {Observable<StatusDataModel[]>} Observable that emits the status data.\r\n */\r\n getStatusDocumentCount(applicationId: string, contextId: string | null = null, categoryId: string | null = null): Observable<StatusDataModel[]> {\r\n if(!applicationId) return EMPTY;\r\n let url = `${this.apiUrl}${URLS.STATUS_DOCUMENT_COUNT}${applicationId}`;\r\n let params = new HttpParams();\r\n const contextParam = contextId || null;\r\n if (contextParam) {\r\n params = params.set(SHARED.CONTEXT_ID, contextParam);\r\n } \r\n if (categoryId) {\r\n params = params.set(SHARED.CATEGORY, categoryId);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.get<StatusDataModel[]>(url, { params, headers }).pipe(\r\n tap((statusData: StatusDataModel[]) => {\r\n this.documentStore.setStatusData(statusData);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Fetches documents based on selection criteria (menu item, user ID, status, and search key).\r\n * This method sends an HTTP GET request with query parameters for the selected filters.\r\n * @param {string} contextId - The context ID (applicationId or applicantId).\r\n * @param {string | null} menuItem - The selected menu item filter.\r\n * @param {string | null} userId - The selected user ID filter.\r\n * @param {string | null} status - The selected status filter.\r\n * @param {string | null} searchKey - The search key filter.\r\n * @returns {Observable<any>} An observable that emits the filtered document data.\r\n */\r\n getDocumentsBySelection(contextId: string, menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null): Observable<any> {\r\n let params = new HttpParams();\r\n \r\n if (menuItem) {\r\n params = params.set(SHARED.CATEGORY, menuItem);\r\n }\r\n \r\n if (userId) {\r\n params = params.set(SHARED.CONTEXT_ID, userId);\r\n }\r\n \r\n if (status) {\r\n params = params.set(SHARED.STATUS_PARAM, status);\r\n }\r\n\r\n if (searchKey) {\r\n params = params.set(SHARED.SEARCH_KEY, searchKey);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.get<any>(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params, headers }).pipe(\r\n tap((response: any) => {\r\n if (response.documents) {\r\n this.documentStore.setDocumentList(response.documents);\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n getDocumentHistory(documentId: string): Observable<DocumentHistorySection[]> {\r\n if (!documentId) {\r\n return of([]);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.get<DocumentHistorySection[]>(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`, { headers });\r\n }\r\n\r\n /**\r\n * Fetches document categories by source (Applicant/Application).\r\n * @param {string} source - The source type (Applicant or Application).\r\n * @returns {Observable<DocumentCategory[]>} Observable that emits the categories.\r\n */\r\n getCategoriesBySource(source: string): Observable<DocumentCategory[]> {\r\n if (!source) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.get<DocumentCategory[]>(`${this.apiUrl}${URLS.GET_CATEGORIES_BY_SOURCE}${source}`, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches document types by category ID.\r\n * @param {string} categoryId - The category ID to fetch document types for.\r\n * @returns {Observable<DocumentTypeModel[]>} Observable that emits the document types.\r\n */\r\n getDocumentTypesByCategory(categoryId: string): Observable<DocumentTypeModel[]> {\r\n if (!categoryId) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.get<DocumentTypeModel[]>(`${this.apiUrl}${URLS.GET_DOCUMENT_TYPES_BY_CATEGORY}${categoryId}`, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Uploads a single file using the uploadFile API.\r\n * @param {FormData} formData - The form data containing the file and metadata.\r\n * @returns {Observable<any>} Observable that emits the upload response.\r\n */\r\n uploadFile(formData: FormData): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.post<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, formData, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Saves the complete document upload data.\r\n * @param {any} payload - The document upload payload containing all necessary data.\r\n * @returns {Observable<any>} Observable that emits the save response.\r\n */\r\n saveDocumentUpload(payload: any): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.post<any>(`${this.apiUrl}${URLS.SAVE_DOCUMENT_UPLOAD}`, payload, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Updates the status of a document by document ID\r\n * @param {string} documentId - The ID of the document to update\r\n * @param {string} status - The new status (Approved, Rejected, etc.)\r\n * @param {string} statusUpdateDescription - The description/note for the status update\r\n * @returns {Observable<any>} Observable that emits the updated document data with normalized status\r\n */\r\n updateDocumentStatus(documentId: string, status: string, statusUpdateDescription: string): Observable<any> {\r\n const payload = {\r\n statusUpdateDescription: statusUpdateDescription\r\n };\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.put<any>(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload, { headers }).pipe(\r\n tap((response) => {\r\n if (response && response.status) {\r\n const normalizedStatus = this.normalizeStatus(response.status);\r\n response.normalizedStatus = normalizedStatus;\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Normalizes the status from API response to match component expectations\r\n * @param {string} status - The status from API response (Approved, Rejected, etc.)\r\n * @returns {string} Normalized status value\r\n */\r\n private normalizeStatus(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.APPROVED:\r\n return SHARED.STATUS_ACCEPTED;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.STATUS_REJECTED_LOWERCASE;\r\n case SHARED.STATUS_PENDING:\r\n return SHARED.STATUS_PENDING;\r\n default:\r\n return status.toLowerCase();\r\n }\r\n }\r\n\r\n /**\r\n * Deletes a document by its ID and refreshes all data (categories, userlist, status, and document list)\r\n * @param {string} documentId - The ID of the document to delete\r\n * @param {string} contextId - The context ID to refresh all data\r\n * @returns {Observable<any>} Observable that emits the delete response\r\n */\r\n deleteDocument(documentId: string, contextId: string): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer a79cbca8-164c-4ec3-991d-0efb441ff126` });\r\n return this.http.delete<any>(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`, { headers }).pipe(\r\n tap(() => {\r\n this.getDocumentCatagories(contextId).subscribe();\r\n this.getUserListByContextId(contextId).subscribe();\r\n this.getStatusDocumentCount(contextId).subscribe();\r\n this.getDocumentsBySelection(contextId, null, null, null, null).subscribe();\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, combineLatest, Subscription } from \"rxjs\";\r\nimport { DocumentModel } from \"../models/document.model\";\r\nimport { DocumentStore } from \"../state/document.store\";\r\nimport { DocumentQuery } from \"../state/document.query\";\r\nimport { DocumentHttpService } from \"./document-http.service\";\r\nimport { switchMap, debounceTime, distinctUntilChanged } from \"rxjs/operators\";\r\nimport { ERRORS } from \"../../../Shared/constant/ERROR\";\r\n\r\n/**\r\n * Service to manage the document data and selection state\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DocumentHelperService {\r\n\r\n private selectionWatcherSubscription: Subscription | null = null;\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private documentHttpService: DocumentHttpService\r\n ) {\r\n // Note: initializeSelectionWatcher now requires contextId\r\n // This should be called from the component that has access to contextId\r\n }\r\n\r\n /**\r\n * Initialize watcher for selection state changes\r\n * @param contextId - The context ID to use for API calls\r\n */\r\n initializeSelectionWatcher(contextId: string): void {\r\n // Clean up any existing subscription\r\n this.cleanupSelectionWatcher();\r\n \r\n this.selectionWatcherSubscription = combineLatest([\r\n this.documentQuery.selectSelectedMenuItem(),\r\n this.documentQuery.selectSelectedUserId(),\r\n this.documentQuery.selectSelectedStatus(),\r\n this.documentQuery.selectSearchKey()\r\n ]).pipe(\r\n debounceTime(300),\r\n distinctUntilChanged((prev, curr) => {\r\n const isSame = prev[0] === curr[0] && prev[1] === curr[1] && prev[2] === curr[2] && prev[3] === curr[3];\r\n return isSame;\r\n }),\r\n switchMap(([menuItem, userId, status, searchKey]) => {\r\n return this.documentHttpService.getDocumentsBySelection(contextId, menuItem, userId, status, searchKey);\r\n })\r\n ).subscribe({\r\n next: (response) => {\r\n const currentState = this.documentQuery.getSelectionState();\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_CALLING_API_WITH_SELECTION, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialize watcher for selection state changes with initial load\r\n * @param contextId - The context ID to use for API calls\r\n */\r\n initializeSelectionWatcherWithInitialLoad(contextId: string): void {\r\n // Clean up any existing subscription\r\n this.cleanupSelectionWatcher();\r\n \r\n // Make initial API call to load documents\r\n this.documentHttpService.getDocumentsBySelection(contextId, null, null, null, null).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_CALLING_API_WITH_SELECTION, error);\r\n }\r\n });\r\n \r\n // Initialize the selection watcher for future updates\r\n this.initializeSelectionWatcher(contextId);\r\n }\r\n\r\n /**\r\n * Clean up the selection watcher subscription\r\n */\r\n cleanupSelectionWatcher(): void {\r\n if (this.selectionWatcherSubscription) {\r\n this.selectionWatcherSubscription.unsubscribe();\r\n this.selectionWatcherSubscription = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set the document data\r\n * @param document the document data\r\n */\r\n set(document: DocumentModel | null) {\r\n this.documentStore.setCurrentDocument(document);\r\n }\r\n\r\n /**\r\n * Get the document data\r\n * @returns the document data\r\n */\r\n get(): Observable<DocumentModel | null> {\r\n return this.documentQuery.selectCurrentDocument();\r\n }\r\n\r\n /**\r\n * Get the current document value synchronously\r\n * @returns the current document value\r\n */\r\n getValue(): DocumentModel | null {\r\n return this.documentQuery.getCurrentDocument();\r\n }\r\n\r\n /**\r\n * Set the selected menu item\r\n * @param menuItem the selected menu item _id (not the label)\r\n */\r\n setSelectedMenuItem(menuItem: string | null): void {\r\n this.documentStore.setSelectedMenuItem(menuItem);\r\n }\r\n\r\n /**\r\n * Set the selected user ID\r\n * @param userId the selected user ID\r\n */\r\n setSelectedUserId(userId: string | null): void {\r\n this.documentStore.setSelectedUserId(userId);\r\n }\r\n\r\n /**\r\n * Set the selected status\r\n * @param status the selected status\r\n */\r\n setSelectedStatus(status: string | null): void {\r\n this.documentStore.setSelectedStatus(status);\r\n }\r\n\r\n /**\r\n * Set the search key\r\n * @param searchKey the search term\r\n */\r\n setSearchKey(searchKey: string | null): void {\r\n this.documentStore.setSearchKey(searchKey);\r\n }\r\n\r\n /**\r\n * Set all selection state at once\r\n * @param menuItem the selected menu item _id (not the label)\r\n * @param userId the selected user ID\r\n * @param status the selected status\r\n * @param searchKey the search term\r\n */\r\n setSelectionState(menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null): void {\r\n this.documentStore.setSelectionState(menuItem, userId, status, searchKey);\r\n }\r\n\r\n /**\r\n * Clear all selection state\r\n */\r\n clearSelectionState(): void {\r\n this.documentStore.clearSelectionState();\r\n }\r\n\r\n /**\r\n * Set user list visibility\r\n * @param show whether to show the user list\r\n */\r\n setShowUserList(show: boolean): void {\r\n this.documentStore.setShowUserList(show);\r\n }\r\n\r\n /**\r\n * Get the current selection state\r\n * @returns observable of the current selection state\r\n */\r\n getSelectionState(): Observable<{menuItem: string | null, userId: string | null, status: string | null}> {\r\n return this.documentQuery.selectSelectionState();\r\n }\r\n\r\n /**\r\n * Get the current selection state value synchronously\r\n * @returns the current selection state value\r\n */\r\n getSelectionStateValue(): {menuItem: string | null, userId: string | null, status: string | null} {\r\n return this.documentQuery.getSelectionState();\r\n }\r\n\r\n /**\r\n * Set status data in the store\r\n * @param statusData the status data to set\r\n */\r\n setStatusData(statusData: any[]): void {\r\n this.documentStore.setStatusData(statusData);\r\n }\r\n\r\n /**\r\n * Set user list in the store\r\n * @param userList the user list to set\r\n */\r\n setUserList(userList: any[]): void {\r\n this.documentStore.setUserList(userList);\r\n }\r\n\r\n /**\r\n * Get observable for filtered documents\r\n * @returns Observable that emits filtered document responses\r\n */\r\n getFilteredDocuments(): Observable<any> {\r\n return this.documentQuery.selectDocumentListResponse();\r\n }\r\n\r\n /**\r\n * Manually trigger API call with current selection state\r\n * @param contextId - The context ID to use for the API call\r\n */\r\n refreshDocumentsWithCurrentSelection(contextId: string): void {\r\n const currentState = this.documentQuery.getSelectionState();\r\n this.documentHttpService.getDocumentsBySelection(\r\n contextId,\r\n currentState.menuItem,\r\n currentState.userId,\r\n currentState.status\r\n ).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n throw new Error(error)\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Force refresh documents with no filters\r\n * @param contextId - The context ID to use for the API call\r\n */\r\n refreshDocumentsWithoutFilters(contextId: string): void {\r\n this.documentHttpService.getDocumentsBySelection(\r\n contextId,\r\n null,\r\n null,\r\n null\r\n ).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error('Error in force refresh:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refresh status data for a specific context\r\n * @param contextId - The context ID to use for the API call\r\n * @param statusContextId - The status context ID (usually userId)\r\n * @param categoryId - The category ID (usually menuItem)\r\n */\r\n refreshStatusData(contextId: string, statusContextId: string | null, categoryId: string | null): void {\r\n this.documentHttpService.getStatusDocumentCount(contextId, statusContextId, categoryId).subscribe({\r\n next: (statusData) => {\r\n this.documentStore.setStatusData(statusData);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing status data:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refresh all data with current filters after accept/reject/delete operations\r\n * This includes document categories, status data, user list, and document list\r\n * \r\n * This method ensures that after a document action (accept/reject/delete):\r\n * 1. Document categories are refreshed\r\n * 2. Status counts are refreshed with current menu item and user filters\r\n * 3. User list is refreshed with current filters (if applicable)\r\n * 4. Document list is refreshed with all current filters (menu item, user, status, search)\r\n * \r\n * Filter application:\r\n * - Document categories: Uses base contextId\r\n * - Status data: Uses userId as contextId and menuItem as categoryId\r\n * - User list: Uses base contextId (can be enhanced with additional filters if API supports)\r\n * - Document list: Uses all current filters (menuItem, userId, status, searchKey)\r\n * \r\n * @param contextId - The context ID to use for the API calls\r\n */\r\n refreshAllDataWithCurrentFilters(contextId: string): void {\r\n const currentState = this.documentQuery.getSelectionState();\r\n const statusContextId = currentState.userId || null;\r\n const categoryId = currentState.menuItem || null;\r\n \r\n // Refresh document categories\r\n this.documentHttpService.getDocumentCatagories(contextId).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentCategories(response);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing document categories after action:', error);\r\n }\r\n });\r\n \r\n // Refresh status data\r\n this.documentHttpService.getStatusDocumentCount(contextId, statusContextId, categoryId).subscribe({\r\n next: (statusData) => {\r\n this.documentStore.setStatusData(statusData);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing status data after action:', error);\r\n }\r\n });\r\n \r\n // Refresh user list\r\n this.documentHttpService.getUserListByContextId(contextId).subscribe({\r\n next: (userList) => {\r\n this.documentStore.setUserList(userList);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing user list after action:', error);\r\n }\r\n });\r\n this.refreshDocumentsWithCurrentSelection(contextId);\r\n }\r\n}","import { Injectable, EventEmitter } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { DocumentService } from '../state/document.service';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { MessageService } from 'primeng/api';\r\n\r\n/**\r\n * Service for handling document uploads.\r\n * @class DocumentUploadService\r\n * @typedef {DocumentUploadService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadService {\r\n\r\n /**\r\n * Event emitter for upload completion\r\n */\r\n uploadCompleted = new EventEmitter<{file: File, response: any}>();\r\n\r\n /**\r\n * The file to upload.\r\n * @type {*}\r\n */\r\n uploadedFile: any;\r\n\r\n /**\r\n * Represent contextId\r\n * @type {string}\r\n */\r\n contextId: string = SHARED.EMPTY;\r\n\r\n /**\r\n * Represent document name\r\n * @type {string}\r\n */\r\n docName: string = SHARED.EMPTY\r\n\r\n /**\r\n * Represent document id\r\n * @type {string}\r\n */\r\n docTypeId: string = SHARED.EMPTY\r\n\r\n /**\r\n * Creates an instance of DocumentUploadService.\r\n * @param {DocumentService} documentService - Service for handling document uploads.\r\n * @param {DocumentStore} documentUploadStore - Store for managing uploaded documents.\r\n * @param {MessageService} messageService - Service for displaying messages.\r\n * @returns {void}\r\n */\r\n constructor(public documentService: DocumentService, public documentUploadStore: DocumentStore, public messageService: MessageService) { }\r\n\r\n /**\r\n * Prepares the files for upload by creating a FormData object.\r\n * This method appends each file to the FormData for submission.\r\n * @returns {Promise<any>} Promise that resolves when upload completes\r\n */\r\n handleTemplatedUpload(file: File, contextId: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n let formsData = this.handleCreateFormData(file, contextId)\r\n if (!formsData) {\r\n const error = new Error('Failed to create form data');\r\n this.messageService.add({severity: SHARED.SEVERITY,summary: SHARED.UPLOAD_ERROR_SUMMERY,detail: SHARED.UPLOAD_ERROR_DETAILS});\r\n reject(error);\r\n return;\r\n }\r\n this.documentService.create(formsData)\r\n .subscribe({\r\n /**\r\n * Handles the successful upload event.\r\n * Updates the list of uploaded files and emits the file ID.\r\n * @returns {void}\r\n */\r\n next: (event) => {\r\n this.documentUploadStore.setUploadedDocumentFiles(event)\r\n this.documentUploadStore.setMessage([{severity: SHARED.SUCCESS_SEVERITY,detail : SHARED.UPLOAD_SUCCESS}]);\r\n this.uploadCompleted.emit({file: file, response: event});\r\n resolve(event);\r\n },\r\n /**\r\n * Handles the error event during file upload.\r\n * Updates the progress of the file to indicate failure.\r\n * @param {any} error - The error object returned by the upload service.\r\n */\r\n error: (error) => {\r\n this.messageService.add({severity: SHARED.SEVERITY,summary: SHARED.UPLOAD_SUMMERY,detail: error?.message});\r\n reject(error);\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Uploads multiple files sequentially using promises\r\n * @param files - Array of files to upload\r\n * @param contextId - The context ID for upload\r\n * @returns {Promise<any[]>} Promise that resolves with all upload responses\r\n */\r\n async uploadFilesSequentially(files: File[], contextId: string): Promise<any[]> {\r\n const results: any[] = [];\r\n \r\n for (const file of files) {\r\n try {\r\n const result = await this.handleTemplatedUpload(file, contextId);\r\n results.push(result);\r\n } catch (error) {\r\n console.error(`Failed to upload file ${file.name}:`, error);\r\n results.push({ error: true, fileName: file.name, errorMessage: error });\r\n }\r\n }\r\n \r\n return results;\r\n }\r\n\r\n /**\r\n * Alternative method to upload files sequentially with progress tracking\r\n * @param files - Array of files to upload\r\n * @param contextId - The context ID for upload\r\n * @param onProgress - Optional callback for progress updates\r\n * @returns {Promise<any[]>} Promise that resolves with all upload responses\r\n */\r\n async uploadFilesSequentiallyWithProgress(\r\n files: File[], \r\n contextId: string, \r\n onProgress?: (currentFile: File, currentIndex: number, totalFiles: number) => void\r\n ): Promise<any[]> {\r\n const results: any[] = [];\r\n for (let i = 0; i < files.length; i++) {\r\n const file = files[i];\r\n if (onProgress) {\r\n onProgress(file, i, files.length);\r\n }\r\n \r\n try {\r\n const result = await this.handleTemplatedUpload(file, contextId);\r\n results.push(result);\r\n } catch (error) {\r\n console.error(`Failed to upload file ${file.name}:`, error);\r\n results.push({ error: true, fileName: file.name, errorMessage: error });\r\n }\r\n }\r\n \r\n return results;\r\n }\r\n\r\n /**\r\n * Get the file and contextId\r\n * @param file - The file to upload.\r\n * @param contextId - The contextId to upload.\r\n */\r\n getUploadFileData(file: File, contextId: string) {\r\n if (file && contextId) {\r\n this.uploadedFile = file;\r\n this.contextId = contextId;\r\n }\r\n }\r\n\r\n /**\r\n * Get the document name and document type id\r\n * @param documentName - The document name to upload.\r\n * @param documentTypeId - The document type id to upload.\r\n */\r\n getDocumentNameAndType(documentTypeId: string) {\r\n if (documentTypeId && documentTypeId !== SHARED.EMPTY) {\r\n this.docTypeId = documentTypeId\r\n }\r\n }\r\n\r\n /**\r\n * Handle the creation of formdata.\r\n * @returns {*} - The formdata object.\r\n */\r\n handleCreateFormData(uploadedFile?: File, contextId?: string) {\r\n \r\n if (uploadedFile) {\r\n let formData = new FormData();\r\n formData.append(SHARED.FILE, uploadedFile, uploadedFile.name);\r\n formData.append(SHARED.CONTEXT_ID, this.contextId)\r\n return formData;\r\n }else{\r\n return null;\r\n }\r\n \r\n }\r\n\r\n /**\r\n * Generic method to sort any list of objects by a specified property.\r\n * Supports fallback properties if the primary property is undefined.\r\n * @param list - Array of objects to sort\r\n * @param primaryProperty - Primary property to sort by\r\n * @param fallbackProperty - Optional fallback property if primary is undefined\r\n * @returns Sorted array\r\n */\r\n sortListByProperty<T>(list: T[], primaryProperty: keyof T, fallbackProperty?: keyof T): T[] {\r\n return list.sort((a, b) => {\r\n const valueA = a[primaryProperty] || (fallbackProperty ? a[fallbackProperty] : SHARED.EMPTY);\r\n const valueB = b[primaryProperty] || (fallbackProperty ? b[fallbackProperty] : SHARED.EMPTY);\r\n \r\n if (typeof valueA === 'string' && typeof valueB === 'string') {\r\n return valueA.localeCompare(valueB);\r\n }\r\n if (valueA < valueB) return -1;\r\n if (valueA > valueB) return 1;\r\n return 0;\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { PrimeNGConfig } from 'primeng/api';\r\n\r\n/**\r\n * Description placeholder\r\n * @class FileFormatService\r\n * @typedef {FileFormatService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FileFormatService {\r\n\r\n /**\r\n * Creates an instance of FileFormatService.\r\n * @constructor\r\n */\r\n constructor() { }\r\n\r\n /**\r\n * Description placeholder\r\n * @param {number} bytes\r\n * @param {PrimeNGConfig} config\r\n * @returns {string}\r\n */\r\n formatFileSize(bytes: number, config:PrimeNGConfig): string {\r\n const kilobyte = 1024;\r\n const decimalPlaces = SHARED.ONE;\r\n const sizes = config.translation.fileSizeTypes || SHARED.FILE_SIZE_UNITS;\r\n if (bytes < kilobyte) {\r\n return `${bytes} ${sizes[SHARED.INITIAL_COUNT]}`;\r\n } else if (bytes < kilobyte * kilobyte) {\r\n const kbSize = bytes / kilobyte;\r\n return `${parseFloat(kbSize.toFixed(decimalPlaces))} ${sizes[SHARED.ONE]}`;\r\n } else {\r\n const mbSize = bytes / (kilobyte * kilobyte);\r\n return `${parseFloat(mbSize.toFixed(decimalPlaces))} ${sizes[SHARED.TWO]}`;\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject, takeUntil } from 'rxjs';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { FileFormatService } from './file-format.service';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { UploadedFileResponse } from '../models/uploaded-file-response.model';\r\n\r\nexport interface UploadedFile {\r\n file: File;\r\n formattedSize?: string;\r\n progress?: number;\r\n uploadResponse?: UploadedFileResponse; // Store the upload response for later use\r\n url?: string; // Store the file URL from upload response\r\n contentType?: string;\r\n fileName?: string; // Store the file name from upload response\r\n size?: string; // Store the formatted size from upload response\r\n}\r\n\r\nexport interface DocumentUploadPayload {\r\n source: 'Applicant' | 'Application';\r\n categoryId: string;\r\n documentTypeId: string;\r\n applicantId?: string;\r\n contextId: string;\r\n documents: {\r\n fileName: string;\r\n fileSize: number;\r\n uploadedFileId?: string;\r\n url?: string; // Store the file URL from upload response\r\n contentType?: string;\r\n size?: string; // Store the formatted size from upload response\r\n }[];\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadBusinessService {\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private documentHttpService: DocumentHttpService,\r\n private fileFormatService: FileFormatService\r\n ) {}\r\n\r\n /**\r\n * Loads applicants for a given context ID\r\n */\r\n loadApplicants(contextId: string): Observable<UserListModel[]> {\r\n return this.documentHttpService.getUserListByContextId(contextId);\r\n }\r\n\r\n /**\r\n * Loads categories based on assignment type\r\n */\r\n loadCategories(assignmentType: string): Observable<DocumentCategory[]> {\r\n return this.documentHttpService.getCategoriesBySource(assignmentType);\r\n }\r\n\r\n /**\r\n * Loads document types based on category\r\n */\r\n loadDocumentTypes(categoryId: string): Observable<DocumentTypeModel[]> {\r\n return this.documentHttpService.getDocumentTypesByCategory(categoryId);\r\n }\r\n\r\n /**\r\n * Filters applicants based on assignment type\r\n */\r\n filterApplicants(applicantList: UserListModel[], assignmentType: 'Applicant' | 'Application'): UserListModel[] {\r\n if (assignmentType === SHARED.APPLICANT) {\r\n return applicantList.filter(applicant => applicant.name !== SHARED.APPLICATION_DOCS);\r\n } else {\r\n return applicantList.filter(applicant => applicant.name === SHARED.APPLICATION_DOCS);\r\n }\r\n }\r\n\r\n /**\r\n * Helper method to validate form data and return validation result\r\n */\r\n private validateFormData(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n categoryOptions: DocumentCategory[],\r\n documentTypeOptions: DocumentTypeModel[]\r\n ): { isValid: boolean; message: string } {\r\n // Check assignment type\r\n if (!assignmentType) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_ASSIGNMENT_TYPE };\r\n }\r\n\r\n // Check if options are loaded\r\n if (!categoryOptions.length || !documentTypeOptions.length) {\r\n return { isValid: false, message: SHARED.VALIDATION_OPTIONS_NOT_LOADED };\r\n }\r\n\r\n // Check category\r\n if (!selectedCategory) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_CATEGORY };\r\n }\r\n\r\n // Check document type\r\n if (!selectedDocumentType) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_DOCUMENT_TYPE };\r\n }\r\n\r\n // Check files\r\n if (uploadedFiles.length === 0) {\r\n return { isValid: false, message: SHARED.VALIDATION_UPLOAD_AT_LEAST_ONE };\r\n }\r\n\r\n // Check if all files are uploaded\r\n const incompleteFiles = uploadedFiles.filter(file => file.progress !== 100);\r\n if (incompleteFiles.length > 0) {\r\n return { isValid: false, message: SHARED.VALIDATION_WAIT_FOR_UPLOAD };\r\n }\r\n\r\n // For Applicant type, check applicant selection\r\n if (assignmentType === SHARED.APPLICANT && !selectedApplicant) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_APPLICANT };\r\n }\r\n\r\n return { isValid: true, message: SHARED.VALIDATION_ALL_FIELDS_COMPLETED };\r\n }\r\n\r\n /**\r\n * Validates form data\r\n */\r\n validateForm(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n categoryOptions: DocumentCategory[],\r\n documentTypeOptions: DocumentTypeModel[]\r\n ): boolean {\r\n return this.validateFormData(\r\n assignmentType,\r\n selectedCategory,\r\n selectedDocumentType,\r\n selectedApplicant,\r\n uploadedFiles,\r\n categoryOptions,\r\n documentTypeOptions\r\n ).isValid;\r\n }\r\n\r\n /**\r\n * Checks if save button should be disabled\r\n */\r\n isSaveButtonDisabled(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n isSaving: boolean\r\n ): boolean {\r\n if (isSaving) {\r\n return true;\r\n }\r\n\r\n // For button state, we only need to check if required fields are filled\r\n // We don't need to validate if options are loaded\r\n if (!assignmentType) {\r\n return true;\r\n }\r\n\r\n if (!selectedCategory) {\r\n return true;\r\n }\r\n\r\n if (!selectedDocumentType) {\r\n return true;\r\n }\r\n\r\n if (uploadedFiles.length === 0) {\r\n return true;\r\n }\r\n\r\n // Check if all files are uploaded\r\n const incompleteFiles = uploadedFiles.filter(file => file.progress !== 100);\r\n if (incompleteFiles.length > 0) {\r\n return true;\r\n }\r\n\r\n // For Applicant type, check applicant selection\r\n if (assignmentType === SHARED.APPLICANT && !selectedApplicant) {\r\n return true;\r\n }\r\n\r\n return false; // Button should be enabled\r\n }\r\n\r\n /**\r\n * Validates the complete payload before save\r\n */\r\n validatePayload(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[]\r\n ): { isValid: boolean; message: string } {\r\n // Check assignment type\r\n if (!assignmentType) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_ASSIGNMENT_TYPE };\r\n }\r\n\r\n // Check category\r\n if (!selectedCategory) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_CATEGORY };\r\n }\r\n\r\n // Check document type\r\n if (!selectedDocumentType) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_DOCUMENT_TYPE };\r\n }\r\n\r\n // Check files\r\n if (uploadedFiles.length === 0) {\r\n return { isValid: false, message: SHARED.VALIDATION_UPLOAD_AT_LEAST_ONE };\r\n }\r\n\r\n // Check if all files are uploaded\r\n const incompleteFiles = uploadedFiles.filter(file => file.progress !== 100);\r\n if (incompleteFiles.length > 0) {\r\n return { isValid: false, message: SHARED.VALIDATION_WAIT_FOR_UPLOAD };\r\n }\r\n\r\n // For Applicant type, check applicant selection\r\n if (assignmentType === SHARED.APPLICANT && !selectedApplicant) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_APPLICANT };\r\n }\r\n\r\n return { isValid: true, message: SHARED.VALIDATION_ALL_FIELDS_COMPLETED };\r\n }\r\n\r\n /**\r\n * Prepares upload payload\r\n */\r\n prepareUploadPayload(\r\n assignmentType: 'Applicant' | 'Application',\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n contextId: string\r\n ): DocumentUploadPayload {\r\n const payload: DocumentUploadPayload = {\r\n source: assignmentType,\r\n categoryId: selectedCategory,\r\n documentTypeId: selectedDocumentType,\r\n contextId,\r\n documents: uploadedFiles.map(file => ({\r\n fileName: file.file.name,\r\n fileSize: file.file.size,\r\n url: file.url,\r\n contentType: file.contentType,\r\n size: file.size,\r\n uploadedFileId: file.uploadResponse?.id || file.uploadResponse?.fileName\r\n }))\r\n };\r\n\r\n // For Applicant type, include the applicant ID\r\n if (assignmentType === SHARED.APPLICANT && selectedApplicant) {\r\n payload.applicantId = selectedApplicant;\r\n }\r\n\r\n return payload;\r\n }\r\n\r\n /**\r\n * Saves document upload\r\n */\r\n saveDocumentUpload(payload: DocumentUploadPayload): Observable<any> {\r\n return this.documentHttpService.saveDocumentUpload(payload);\r\n }\r\n\r\n /**\r\n * Formats file size\r\n */\r\n formatFileSize(fileSize: number, config: any): string {\r\n return this.fileFormatService.formatFileSize(fileSize, config);\r\n }\r\n\r\n /**\r\n * Creates uploaded file object\r\n */\r\n createUploadedFile(file: File, formattedSize: string): UploadedFile {\r\n return {\r\n file,\r\n formattedSize,\r\n progress: SHARED.UPLOAD_PROGRESS_10 \r\n };\r\n }\r\n\r\n /**\r\n * Resets form data to initial state\r\n */\r\n getInitialFormState() {\r\n return {\r\n selectedAssignmentType: null,\r\n selectedApplicant: null,\r\n selectedCategory: null,\r\n selectedDocumentType: null,\r\n uploadedFiles: [] as UploadedFile[],\r\n isFormValid: false\r\n };\r\n }\r\n\r\n /**\r\n * Destroys the service\r\n */\r\n destroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\nimport { UploadedFile } from './document-upload-business.service';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadFormService {\r\n constructor(private messageService: MessageService) {}\r\n\r\n /**\r\n * Shows error message\r\n */\r\n showErrorMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Shows warning message\r\n */\r\n showWarningMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'warn',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Shows success message\r\n */\r\n showSuccessMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'success',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Helper method to validate required fields and show appropriate messages\r\n */\r\n private validateRequiredFieldsWithMessages(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedApplicant: string,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n uploadedFiles: UploadedFile[]\r\n ): { isValid: boolean; field: string | null } {\r\n if (assignmentType === 'Applicant' && !selectedApplicant) {\r\n return { isValid: false, field: 'applicant' };\r\n }\r\n\r\n if (!selectedCategory) {\r\n return { isValid: false, field: 'category' };\r\n }\r\n\r\n if (!selectedDocumentType) {\r\n return { isValid: false, field: 'documentType' };\r\n }\r\n\r\n if (uploadedFiles.length === 0) {\r\n return { isValid: false, field: 'documents' };\r\n }\r\n\r\n return { isValid: true, field: null };\r\n }\r\n\r\n /**\r\n * Validates required fields for upload\r\n */\r\n validateRequiredFields(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedApplicant: string,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n uploadedFiles: UploadedFile[]\r\n ): boolean {\r\n const validation = this.validateRequiredFieldsWithMessages(\r\n assignmentType,\r\n selectedApplicant,\r\n selectedCategory,\r\n selectedDocumentType,\r\n uploadedFiles\r\n );\r\n\r\n if (!validation.isValid) {\r\n this.showValidationMessage(validation.field!);\r\n }\r\n\r\n return validation.isValid;\r\n }\r\n\r\n /**\r\n * Shows appropriate validation message based on the field that failed\r\n */\r\n private showValidationMessage(field: string): void {\r\n const messages: Record<string, { summary: string; detail: string }> = {\r\n applicant: { \r\n summary: SHARED.VALIDATION_NO_APPLICANT_SELECTED, \r\n detail: SHARED.VALIDATION_NO_APPLICANT_DETAIL \r\n },\r\n category: { \r\n summary: SHARED.VALIDATION_NO_CATEGORY_SELECTED, \r\n detail: SHARED.VALIDATION_NO_CATEGORY_DETAIL \r\n },\r\n documentType: { \r\n summary: SHARED.VALIDATION_NO_DOCUMENT_TYPE_SELECTED, \r\n detail: SHARED.VALIDATION_NO_DOCUMENT_TYPE_DETAIL \r\n },\r\n documents: { \r\n summary: SHARED.VALIDATION_NO_DOCUMENTS_UPLOADED, \r\n detail: SHARED.VALIDATION_NO_DOCUMENTS_DETAIL \r\n }\r\n };\r\n\r\n const message = messages[field];\r\n if (message) {\r\n this.showWarningMessage(message.summary, message.detail);\r\n }\r\n }\r\n\r\n /**\r\n * Validates form completeness\r\n */\r\n validateFormCompleteness(): boolean {\r\n this.showWarningMessage(\r\n SHARED.VALIDATION_FORM_INCOMPLETE, \r\n SHARED.VALIDATION_FORM_INCOMPLETE_DETAIL\r\n );\r\n return false;\r\n }\r\n\r\n /**\r\n * Validates context ID presence\r\n */\r\n validateContextId(contextId: string, message: string): boolean {\r\n if (!contextId) {\r\n this.showErrorMessage(SHARED.VALIDATION_MISSING_REQUIRED_DATA, message);\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject, takeUntil } from 'rxjs';\r\nimport { DocumentUploadBusinessService } from './document-upload-business.service';\r\nimport { DocumentUploadFormService } from './document-upload-form.service';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\n\r\nexport interface DataLoadingState {\r\n isLoadingApplicants: boolean;\r\n isLoadingCategories: boolean;\r\n isLoadingDocumentTypes: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadDataService {\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private businessService: DocumentUploadBusinessService,\r\n private formService: DocumentUploadFormService\r\n ) {}\r\n\r\n /**\r\n * Loads applicants and handles the response\r\n */\r\n loadApplicants(\r\n contextId: string,\r\n onSuccess: (applicants: UserListModel[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<UserListModel[]> {\r\n if (!this.formService.validateContextId(contextId, 'Context ID is required to load applicants.')) {\r\n return new Observable();\r\n }\r\n return this.businessService.loadApplicants(contextId);\r\n }\r\n\r\n /**\r\n * Loads categories and handles the response\r\n */\r\n loadCategories(\r\n assignmentType: string,\r\n onSuccess: (categories: DocumentCategory[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<DocumentCategory[]> {\r\n if (!assignmentType) {\r\n return new Observable();\r\n }\r\n return this.businessService.loadCategories(assignmentType);\r\n }\r\n\r\n /**\r\n * Loads document types and handles the response\r\n */\r\n loadDocumentTypes(\r\n categoryId: string,\r\n onSuccess: (documentTypes: DocumentTypeModel[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<DocumentTypeModel[]> {\r\n return this.businessService.loadDocumentTypes(categoryId);\r\n }\r\n\r\n /**\r\n * Handles applicants loaded successfully\r\n */\r\n handleApplicantsLoaded(\r\n applicants: UserListModel[],\r\n assignmentType: 'Applicant' | 'Application' | null\r\n ): UserListModel[] {\r\n return this.businessService.filterApplicants(applicants, assignmentType!);\r\n }\r\n\r\n /**\r\n * Destroys the service\r\n */\r\n destroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, Input, ViewChild, ViewEncapsulation, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { FileUpload } from 'primeng/fileupload';\r\nimport { MessageService } from 'primeng/api';\r\nimport { PrimeNGConfig } from 'primeng/api';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { FileFormatService } from '../../services/file-format.service';\r\nimport { DocumentService } from '../../state/document.service';\r\nimport { DocumentUploadService } from '../../services/document-upload.service';\r\nimport { DocumentUploadBusinessService, UploadedFile } from '../../services/document-upload-business.service';\r\nimport { DocumentUploadFormService } from '../../services/document-upload-form.service';\r\nimport { DocumentUploadDataService } from '../../services/document-upload-data.service';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentTypeModel } from '../../models/document-type.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n/**\r\n * Component responsible for handling document uploads with templated metadata.\r\n * Provides a comprehensive interface for uploading documents with assignment types,\r\n * categories, document types, and applicant selection.\r\n */\r\n@Component({\r\n selector: 'lib-document-upload',\r\n templateUrl: './document-upload.component.html',\r\n styleUrls: ['./document-upload.component.scss'],\r\n standalone: false,\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class DocumentUploadComponent implements OnDestroy {\r\n /** The context ID for the document upload operation */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n \r\n /** Reference to the file upload component */\r\n @ViewChild('fileUploader') fileUploader!: FileUpload;\r\n \r\n /** Event emitted when form validation state changes */\r\n @Output() onFormValidationChange = new EventEmitter<void>();\r\n \r\n /** Event emitted when upload is successful */\r\n @Output() onUploadSuccess = new EventEmitter<void>();\r\n \r\n /** Currently selected assignment type (Applicant or Application) */\r\n selectedAssignmentType: 'Applicant' | 'Application' | null = null;\r\n \r\n /** Currently selected applicant ID */\r\n selectedApplicant: string = SHARED.EMPTY;\r\n \r\n /** Currently selected document category */\r\n selectedCategory: string = SHARED.EMPTY;\r\n \r\n /** Currently selected document type */\r\n selectedDocumentType: string = SHARED.EMPTY;\r\n \r\n /** List of available applicants */\r\n applicantList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Filtered list of applicants based on current selection */\r\n filteredApplicantList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Available document categories for the selected assignment type */\r\n categoryOptions: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Available document types for the selected category */\r\n documentTypeOptions: DocumentTypeModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Array of files that have been uploaded */\r\n uploadedFiles: UploadedFile[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Map tracking upload progress for each file */\r\n fileProgress: Map<File, number> = new Map();\r\n \r\n /** Loading state for applicants data */\r\n isLoadingApplicants: boolean = false;\r\n \r\n /** Loading state for categories data */\r\n isLoadingCategories: boolean = false;\r\n \r\n /** Loading state for document types data */\r\n isLoadingDocumentTypes: boolean = false;\r\n \r\n /** Loading state for save operation */\r\n isSaving: boolean = false;\r\n \r\n /** Current form validation state */\r\n isFormValid: boolean = false;\r\n\r\n /** File size property for testing */\r\n fileSize: string = '';\r\n\r\n /** Subject for managing component lifecycle and unsubscribing from observables */\r\n private destroy$ = new Subject<void>();\r\n\r\n /**\r\n * Creates an instance of DocumentUploadComponent.\r\n * @param documentUpload - Service for handling document upload operations\r\n * @param uploadService - Service for document-related operations\r\n * @param config - PrimeNG configuration service\r\n * @param fileFormatService - Service for file format validation\r\n * @param messageService - Service for displaying messages\r\n * @param cdr - Change detector reference for manual change detection\r\n * @param businessService - Service for business logic operations\r\n * @param formService - Service for form validation and handling\r\n * @param dataService - Service for data loading operations\r\n */\r\n constructor(\r\n public documentUpload: DocumentUploadService, \r\n public uploadService: DocumentService, \r\n private config: PrimeNGConfig, \r\n public fileFormatService: FileFormatService, \r\n public messageService: MessageService, \r\n public cdr: ChangeDetectorRef,\r\n private businessService: DocumentUploadBusinessService,\r\n private formService: DocumentUploadFormService,\r\n private dataService: DocumentUploadDataService\r\n ) { }\r\n\r\n /**\r\n * Handles changes in assignment type selection.\r\n * Resets form selections, loads categories, and handles applicant loading.\r\n */\r\n onAssignmentTypeChange(): void {\r\n this.resetSelections();\r\n this.loadCategories();\r\n this.handleApplicantLoading();\r\n this.validateForm(); // Validate form after assignment type change\r\n this.emitFormValidationChange();\r\n }\r\n\r\n /**\r\n * Handles changes in category selection.\r\n * Resets document type and loads available document types if category is selected.\r\n */\r\n onCategoryChange(): void {\r\n this.resetDocumentType();\r\n if (this.selectedCategory) this.loadDocumentTypes();\r\n this.validateForm(); // Validate form after category change\r\n this.validateAndEmit();\r\n }\r\n\r\n /**\r\n * Handles changes in document type selection.\r\n * Validates form and emits validation change event.\r\n */\r\n onDocumentTypeChange(): void { this.validateAndEmit(); }\r\n \r\n /**\r\n * Handles changes in applicant selection.\r\n * Validates form and emits validation change event.\r\n */\r\n onApplicantSelectionChange(): void { this.validateAndEmit(); }\r\n\r\n /**\r\n * Handles file selection from the file upload component.\r\n * Processes each selected file for templated upload sequentially.\r\n * @param event - Event containing the selected files\r\n */\r\n async onSelectedFiles(event: { currentFiles: File[] }): Promise<void> {\r\n await this.processFilesSequentially(event.currentFiles);\r\n this.fileUploader.clear();\r\n }\r\n\r\n /**\r\n * Processes files sequentially for upload\r\n * @param files - Array of files to process\r\n */\r\n private async processFilesSequentially(files: File[]): Promise<void> {\r\n if (!this.formService.validateContextId(this.contextId, 'Context ID is required for upload.')) {\r\n return;\r\n }\r\n await this.documentUpload.uploadFilesSequentiallyWithProgress(\r\n files, \r\n this.contextId,\r\n (currentFile, currentIndex, totalFiles) => {\r\n this.fileProgress.set(currentFile, SHARED.UPLOAD_PROGRESS_10);\r\n this.setupFileUploadListener(currentFile);\r\n const formattedSize = this.businessService.formatFileSize(currentFile.size, this.config);\r\n const uploadedFile = this.businessService.createUploadedFile(currentFile, formattedSize);\r\n uploadedFile.progress = SHARED.UPLOAD_PROGRESS_10;\r\n this.uploadedFiles.push(uploadedFile);\r\n this.validateForm();\r\n this.cdr.detectChanges();\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Loads the list of applicants for the current context.\r\n * Sets loading state and handles success/error responses.\r\n */\r\n loadApplicants(): void {\r\n this.isLoadingApplicants = true;\r\n this.dataService.loadApplicants(\r\n this.contextId,\r\n (applicants) => this.handleApplicantsLoaded(applicants),\r\n (error) => this.handleError('Failed to Load Applicants', error, () => this.isLoadingApplicants = false)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (applicants) => this.handleApplicantsLoaded(applicants),\r\n error: (error) => this.handleError('Failed to Load Applicants', error, () => this.isLoadingApplicants = false)\r\n });\r\n }\r\n\r\n /**\r\n * Loads document categories based on the selected assignment type.\r\n * Sets loading state and handles success/error responses.\r\n */\r\n loadCategories(): void {\r\n this.isLoadingCategories = true;\r\n this.dataService.loadCategories(\r\n this.selectedAssignmentType!,\r\n (categories) => this.handleCategoriesLoaded(categories),\r\n (error) => this.handleError('Failed to Load Categories', error, () => this.isLoadingCategories = false)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (categories) => this.handleCategoriesLoaded(categories),\r\n error: (error) => this.handleError('Failed to Load Categories', error, () => this.isLoadingCategories = false)\r\n });\r\n }\r\n\r\n /**\r\n * Loads document types based on the selected category.\r\n * Sets loading state and handles success/error responses.\r\n */\r\n loadDocumentTypes(): void {\r\n this.isLoadingDocumentTypes = true;\r\n this.dataService.loadDocumentTypes(\r\n this.selectedCategory,\r\n (documentTypes) => this.handleDocumentTypesLoaded(documentTypes),\r\n (error) => this.handleError('Failed to Load Document Types', error, () => this.isLoadingDocumentTypes = false)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (documentTypes) => this.handleDocumentTypesLoaded(documentTypes),\r\n error: (error) => this.handleError('Failed to Load Document Types', error, () => this.isLoadingDocumentTypes = false)\r\n });\r\n }\r\n\r\n /**\r\n * Saves the document upload with all metadata.\r\n * Validates payload and required fields before proceeding with upload.\r\n */\r\n saveDocumentUpload(): void {\r\n const payloadValidation = this.businessService.validatePayload(\r\n this.selectedAssignmentType, this.selectedCategory, this.selectedDocumentType, \r\n this.selectedApplicant, this.uploadedFiles\r\n );\r\n \r\n if (!payloadValidation.isValid) {\r\n this.formService.showWarningMessage('Incomplete Form', payloadValidation.message);\r\n return;\r\n }\r\n \r\n if (!this.formService.validateRequiredFields(\r\n this.selectedAssignmentType, this.selectedApplicant, this.selectedCategory, \r\n this.selectedDocumentType, this.uploadedFiles\r\n )) return;\r\n \r\n this.isSaving = true;\r\n this.saveDocumentMetadata();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Removes a document from the uploaded files list.\r\n * Updates progress tracking and validates form.\r\n * @param file - The file to be removed\r\n * @param index - The index of the file in the uploaded files array\r\n */\r\n handleDocumentRemove(file: File, index: number): void {\r\n this.uploadedFiles.splice(index, 1);\r\n this.fileProgress.delete(file);\r\n this.validateAndEmit();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Utility method for file upload component integration.\r\n * @param event - The file upload event\r\n * @param callback - Callback function to execute\r\n */\r\n choose(event: any, callback: () => void): void { callback(); }\r\n \r\n /**\r\n * Triggers the file upload dialog.\r\n */\r\n triggerFileUpload(): void { this.fileUploader.choose(); }\r\n \r\n /**\r\n * Determines if the save button should be disabled.\r\n * @returns True if the save button should be disabled, false otherwise\r\n */\r\n getSaveButtonDisabled(): boolean {\r\n const isDisabled = this.businessService.isSaveButtonDisabled(\r\n this.selectedAssignmentType, this.selectedCategory, this.selectedDocumentType,\r\n this.selectedApplicant, this.uploadedFiles, this.isSaving\r\n )\r\n return isDisabled;\r\n }\r\n\r\n /**\r\n * Gets the upload progress for a specific file.\r\n * @param file - The file to get progress for\r\n * @returns The upload progress percentage (0-100)\r\n */\r\n getProgress(file: File): number { return this.fileProgress.get(file) || 0; }\r\n\r\n /**\r\n * Checks if a file is currently uploading.\r\n * @param file - The file to check\r\n * @returns True if the file is uploading, false otherwise\r\n */\r\n isFileUploading(file: File): boolean { \r\n const progress = this.fileProgress.get(file);\r\n return progress !== undefined && progress > 0 && progress < SHARED.UPLOAD_PROGRESS_100;\r\n }\r\n \r\n /**\r\n * Checks if a file has been successfully uploaded.\r\n * @param file - The file to check\r\n * @returns True if the file is uploaded, false otherwise\r\n */\r\n isFileUploaded(file: File): boolean { return this.fileProgress.get(file) === SHARED.UPLOAD_PROGRESS_100; }\r\n \r\n /**\r\n * Checks if a file upload encountered an error.\r\n * @param file - The file to check\r\n * @returns True if the file has an error, false otherwise\r\n */\r\n isFileError(file: File): boolean { return this.fileProgress.get(file) === -1; }\r\n\r\n /**\r\n * Resets the form to its initial state.\r\n * Clears all selections, uploaded files, and progress tracking.\r\n */\r\n resetForm(): void {\r\n const initialState = this.businessService.getInitialFormState();\r\n Object.assign(this, initialState);\r\n this.fileProgress.clear();\r\n this.filteredApplicantList = [];\r\n this.categoryOptions = [];\r\n this.documentTypeOptions = [];\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Resets form selections (applicant, category, document type).\r\n * Clears document type options.\r\n */\r\n resetSelections(): void {\r\n this.selectedApplicant = this.selectedCategory = this.selectedDocumentType = SHARED.EMPTY;\r\n this.documentTypeOptions = SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n /**\r\n * Resets document type selection and clears document type options.\r\n */\r\n resetDocumentType(): void {\r\n this.selectedDocumentType = SHARED.EMPTY;\r\n this.documentTypeOptions = SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n /**\r\n * Handles applicant loading based on assignment type.\r\n * Loads applicants if type is 'Applicant', otherwise filters existing list.\r\n */\r\n handleApplicantLoading(): void {\r\n if (this.selectedAssignmentType === SHARED.APPLICANT) {\r\n this.loadApplicants();\r\n } else {\r\n this.filterApplicants();\r\n }\r\n }\r\n\r\n /**\r\n * Handles successful loading of applicants data.\r\n * Updates applicant list, filters applicants, and validates form.\r\n * @param applicants - Array of loaded applicants\r\n */\r\n handleApplicantsLoaded(applicants: UserListModel[]): void {\r\n this.applicantList = this.documentUpload.sortListByProperty(applicants, 'name');\r\n this.filterApplicants();\r\n this.isLoadingApplicants = false;\r\n this.validateForm();\r\n }\r\n\r\n /**\r\n * Handles successful loading of categories data.\r\n * Updates category options and validates form.\r\n * @param categories - Array of loaded categories\r\n */\r\n handleCategoriesLoaded(categories: DocumentCategory[]): void {\r\n this.categoryOptions = this.documentUpload.sortListByProperty(categories, 'label');\r\n this.isLoadingCategories = false;\r\n this.validateForm();\r\n }\r\n\r\n /**\r\n * Handles successful loading of document types data.\r\n * Updates document type options and validates form.\r\n * @param documentTypes - Array of loaded document types\r\n */\r\n handleDocumentTypesLoaded(documentTypes: DocumentTypeModel[]): void {\r\n this.documentTypeOptions = this.documentUpload.sortListByProperty(documentTypes, 'label', 'name');\r\n this.isLoadingDocumentTypes = false;\r\n this.validateForm();\r\n }\r\n\r\n /**\r\n * Handles successful upload completion.\r\n * Resets form and emits upload success event.\r\n * @param response - The upload response from the server\r\n */\r\n handleUploadSuccess(response: any): void {\r\n this.isSaving = false;\r\n this.resetForm();\r\n this.onUploadSuccess.emit();\r\n }\r\n\r\n /**\r\n * Handles upload error.\r\n * Resets saving state.\r\n * @param error - The error that occurred during upload\r\n */\r\n handleUploadError(error: any): void {\r\n this.isSaving = false;\r\n }\r\n\r\n /**\r\n * Filters applicants based on the selected assignment type.\r\n * Updates the filtered applicant list.\r\n */\r\n filterApplicants(): void {\r\n this.filteredApplicantList = this.dataService.handleApplicantsLoaded(\r\n this.applicantList, this.selectedAssignmentType\r\n );\r\n }\r\n\r\n /**\r\n * Validates the current form state.\r\n * Checks payload validation and emits form validation change if state changed.\r\n */\r\n validateForm(): void {\r\n const payloadValidation = this.businessService.validatePayload(\r\n this.selectedAssignmentType, this.selectedCategory, this.selectedDocumentType,\r\n this.selectedApplicant, this.uploadedFiles\r\n );\r\n \r\n const previousValidationState = this.isFormValid;\r\n this.isFormValid = payloadValidation.isValid;\r\n if (previousValidationState !== this.isFormValid) {\r\n this.onFormValidationChange.emit();\r\n }\r\n }\r\n\r\n /**\r\n * Saves document metadata to the server.\r\n * Prepares upload payload and calls business service to save.\r\n */\r\n saveDocumentMetadata(): void {\r\n const contextId = this.selectedApplicant || this.contextId;\r\n const payload = this.businessService.prepareUploadPayload(\r\n this.selectedAssignmentType!, this.selectedCategory, this.selectedDocumentType,\r\n this.selectedApplicant, this.uploadedFiles, contextId\r\n );\r\n\r\n this.businessService.saveDocumentUpload(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => this.handleUploadSuccess(response),\r\n error: (error) => this.handleUploadError(error)\r\n });\r\n }\r\n\r\n /**\r\n * Sets up a listener for file upload completion.\r\n * Updates progress tracking and emits validation change when upload completes.\r\n * @param file - The file to monitor for upload completion\r\n */\r\n setupFileUploadListener(file: File): void {\r\n this.documentUpload.uploadCompleted.pipe(takeUntil(this.destroy$)).subscribe(({file: uploadedFile, response}) => {\r\n if (uploadedFile === file) {\r\n this.fileProgress.set(file, SHARED.UPLOAD_PROGRESS_100);\r\n const uploadedFileObj = this.uploadedFiles.find(uf => uf.file === file);\r\n if (uploadedFileObj) {\r\n uploadedFileObj.uploadResponse = response;\r\n uploadedFileObj.progress = SHARED.UPLOAD_PROGRESS_100;\r\n uploadedFileObj.url = response?.url;\r\n uploadedFileObj.contentType = response?.contentType;\r\n }\r\n this.cdr.detectChanges();\r\n this.onFormValidationChange.emit();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handles errors during data loading operations.\r\n * Resets loading state and can be extended for error logging.\r\n * @param title - Error title for display\r\n * @param error - The error object\r\n * @param resetLoading - Callback to reset loading state\r\n */\r\n handleError(title: string, error: any, resetLoading: () => void): void {\r\n resetLoading();\r\n }\r\n\r\n /**\r\n * Validates form and emits validation change event.\r\n */\r\n validateAndEmit(): void {\r\n this.validateForm();\r\n this.onFormValidationChange.emit();\r\n }\r\n\r\n /**\r\n * Emits form validation change event.\r\n */\r\n emitFormValidationChange(): void {\r\n this.onFormValidationChange.emit();\r\n }\r\n\r\n /**\r\n * Formats file size for testing purposes.\r\n * @param size - The file size in bytes\r\n */\r\n formatSize(size: number): void {\r\n this.fileSize = this.businessService.formatFileSize(size, this.config);\r\n }\r\n\r\n /**\r\n * Lifecycle hook that is called when component is destroyed.\r\n * Cleans up subscriptions and destroys services.\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.businessService.destroy();\r\n this.dataService.destroy();\r\n }\r\n}\r\n\r\n","<div class=\"document-upload-container\">\r\n <!-- Assignment Section -->\r\n <div class=\"assignment-section\">\r\n <h4>Assign to Applicant(s) or Application <span class=\"text-red-500\">*</span> </h4>\r\n <div class=\"radio-group\">\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Applicant\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'applicant'\"\r\n ></p-radioButton>\r\n <label [for]=\"'applicant'\" class=\"radio-label\">Applicant(s) </label>\r\n </div>\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Application\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'application'\"\r\n ></p-radioButton>\r\n <label [for]=\"'application'\" class=\"radio-label\">Application</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Applicant Selection (only shown when Applicant is selected) -->\r\n <div class=\"applicant-section\" *ngIf=\"selectedAssignmentType === 'Applicant'\">\r\n <h4>Select Applicant(s) <span class=\"text-red-500\">*</span></h4>\r\n <div class=\"grid\">\r\n <div \r\n *ngFor=\"let applicant of filteredApplicantList\" \r\n class=\"applicant-item col-12 md:col-6\"\r\n >\r\n <p-radioButton \r\n name=\"selectedApplicant\"\r\n [value]=\"applicant._id\"\r\n [(ngModel)]=\"selectedApplicant\"\r\n [inputId]=\"'applicant-' + applicant._id\"\r\n (onClick)=\"onApplicantSelectionChange()\"\r\n ></p-radioButton>\r\n <label [for]=\"'applicant-' + applicant._id\" class=\"applicant-label\">\r\n {{ applicant.name }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Category Selection -->\r\n <div class=\"category-section\">\r\n <h4>Category <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"categoryOptions\"\r\n [(ngModel)]=\"selectedCategory\"\r\n placeholder=\"Select Category type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onCategoryChange()\"\r\n [disabled]=\"!categoryOptions.length\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- Document Type Selection -->\r\n <div class=\"document-type-section\">\r\n <h4>Document Type <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"documentTypeOptions\"\r\n [(ngModel)]=\"selectedDocumentType\"\r\n placeholder=\"Select Document type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onDocumentTypeChange()\"\r\n [disabled]=\"!documentTypeOptions.length || !selectedCategory\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- File Upload Section -->\r\n <div class=\"file-upload-section\">\r\n <h4>Upload Documents <span class=\"text-red-500\">*</span></h4>\r\n <div class=\"grid\">\r\n <div class=\"col-12 md:col-12\">\r\n <p-fileUpload \r\n #fileUploader \r\n [multiple]=\"true\" \r\n auto=\"true\" \r\n accept=\"image/png,application/pdf\" \r\n maxFileSize=\"26214400\"\r\n (onSelect)=\"onSelectedFiles($event)\"\r\n >\r\n <ng-template pTemplate=\"header\" let-chooseCallback=\"chooseCallback\" let-clearCallback=\"clearCallback\">\r\n <div class=\"docHeader p-2 flex flex-wrap justify-content-between align-items-center flex-1 gap-2\">\r\n <div class=\"flex gap-2\">\r\n <p-button \r\n (onClick)=\"choose($event, chooseCallback)\" \r\n icon=\"pi pi-images\" \r\n [rounded]=\"true\"\r\n [outlined]=\"true\" \r\n />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"content\" let-removeFileCallback=\"removeFileCallback\"\r\n let-removeUploadedFileCallback=\"removeUploadedFileCallback\">\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <div class=\"col-12 md:col-12 p-0\" *ngIf=\"uploadedFiles.length > 0\">\r\n <div *ngFor=\"let uploadedFile of uploadedFiles; let i = index\"\r\n class=\"m-0 flex flex-column align-items-center gap-1 mt-3\">\r\n <div class=\"col-12 md:col-12 p-0 flex documentInfo\">\r\n <div class=\"documentImage\">\r\n <img src=\"../../../../assets/images/document.png\" [alt]=\"uploadedFile.file.name\" width=\"45\" height=\"50\"\r\n class=\"object-contain\" />\r\n </div>\r\n <div class=\"flex w-full flex-column mt-2 ml-2\">\r\n <div class=\"flex justify-content-between\">\r\n <div style=\"font-weight: bold;font-size: 14px\">\r\n {{ uploadedFile.file.name }}\r\n </div>\r\n <i class=\"pi pi-times cursor-pointer\" (click)=\"handleDocumentRemove(uploadedFile.file,i)\"></i>\r\n </div>\r\n <div class=\"flex justify-content-between mt-1\">\r\n <div style=\"color: #676B89; font-size: 12px; color: green;\" class=\"pi pi-verified\"> \r\n {{ uploadedFile.formattedSize }}\r\n </div>\r\n <div class=\"white-space-nowrap\" style=\"color: #0F8BFD; font-family: 14px;\"> \r\n {{ uploadedFile.progress }} % \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <p-progressBar \r\n [value]=\"uploadedFile.progress ?? 0\" \r\n [showValue]=\"false\" \r\n styleClass=\"h-1/2rem md:ml-auto relative\"\r\n [ngClass]=\"{ 'exceeded-progress-bar': (uploadedFile.progress ?? 0) > 100 }\"\r\n >\r\n </p-progressBar>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"empty\" let-chooseCallback=\"chooseCallback\">\r\n <div *ngIf=\"!uploadedFiles.length\" class=\"flex align-items-center justify-content-center flex-column\"\r\n (click)=\"triggerFileUpload()\">\r\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-8xl text-400 border-400\"></i>\r\n <p class=\"mt-4 mb-0\">Drag and drop files here to upload.</p>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"file\"> </ng-template>\r\n </p-fileUpload>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\nexport interface ConfirmationOptions {\r\n message: string;\r\n header?: string;\r\n icon?: string;\r\n acceptLabel?: string;\r\n rejectLabel?: string;\r\n acceptIcon?: string;\r\n rejectIcon?: string;\r\n acceptButtonClass?: string;\r\n rejectButtonClass?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-confirmation-dialog',\r\n template: `\r\n <div *ngIf=\"isVisible\" class=\"custom-confirmation-overlay\">\r\n <div class=\"custom-confirmation-dialog\">\r\n <div class=\"dialog-header\">\r\n <i *ngIf=\"currentOptions.icon\" [class]=\"currentOptions.icon\"></i>\r\n <h3>{{ currentOptions.header }}</h3>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <p>{{ currentOptions.message }}</p>\r\n </div>\r\n <div class=\"dialog-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-secondary\"\r\n (click)=\"onReject()\">\r\n <i *ngIf=\"currentOptions.rejectIcon\" [class]=\"currentOptions.rejectIcon\"></i>\r\n {{ currentOptions.rejectLabel }}\r\n </button>\r\n <button \r\n type=\"button\" \r\n [class]=\"'btn ' + currentOptions.acceptButtonClass\"\r\n (click)=\"onAccept()\">\r\n <i *ngIf=\"currentOptions.acceptIcon\" [class]=\"currentOptions.acceptIcon\"></i>\r\n {{ currentOptions.acceptLabel }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n standalone: false,\r\n styles: [`\r\n .custom-confirmation-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 10001;\r\n }\r\n \r\n .custom-confirmation-dialog {\r\n background: white;\r\n border-radius: 8px;\r\n padding: 1.5rem;\r\n max-width: 400px;\r\n width: 90%;\r\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\r\n }\r\n \r\n .dialog-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n margin-bottom: 1rem;\r\n padding-bottom: 1rem;\r\n border-bottom: 1px solid #e9ecef;\r\n }\r\n \r\n .dialog-header h3 {\r\n margin: 0;\r\n font-size: 1.25rem;\r\n font-weight: 600;\r\n }\r\n \r\n .dialog-content {\r\n margin-bottom: 1.5rem;\r\n }\r\n \r\n .dialog-content p {\r\n margin: 0;\r\n color: #495057;\r\n line-height: 1.5;\r\n }\r\n \r\n .dialog-actions {\r\n display: flex;\r\n gap: 0.75rem;\r\n justify-content: flex-end;\r\n }\r\n \r\n .btn {\r\n padding: 0.5rem 1rem;\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 0.875rem;\r\n font-weight: 500;\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n transition: all 0.2s ease;\r\n }\r\n \r\n .btn:hover {\r\n transform: translateY(-1px);\r\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\r\n }\r\n \r\n .btn-secondary {\r\n background-color: #6c757d;\r\n color: white;\r\n }\r\n \r\n .btn-secondary:hover {\r\n background-color: #5a6268;\r\n }\r\n \r\n .btn-success {\r\n background-color: #28a745;\r\n color: white;\r\n }\r\n \r\n .btn-success:hover {\r\n background-color: #218838;\r\n }\r\n \r\n .btn-danger {\r\n background-color: #dc3545;\r\n color: white;\r\n }\r\n \r\n .btn-danger:hover {\r\n background-color: #c82333;\r\n }\r\n `]\r\n})\r\nexport class ConfirmationDialogComponent {\r\n @Input() confirmationOptions: ConfirmationOptions = {\r\n message: 'Are you sure that you want to proceed?',\r\n header: 'Confirmation',\r\n icon: 'pi pi-exclamation-triangle',\r\n acceptLabel: 'Yes',\r\n rejectLabel: 'No',\r\n acceptIcon: 'pi pi-check',\r\n rejectIcon: 'pi pi-times',\r\n acceptButtonClass: 'btn-success',\r\n rejectButtonClass: 'btn-secondary'\r\n };\r\n\r\n isVisible: boolean = false;\r\n currentOptions: ConfirmationOptions = this.confirmationOptions;\r\n private acceptCallback?: () => void;\r\n private rejectCallback?: () => void;\r\n\r\n /**\r\n * Shows the confirmation dialog with the specified options\r\n * @param options - Configuration options for the confirmation dialog\r\n * @param acceptCallback - Function to execute when user accepts\r\n * @param rejectCallback - Function to execute when user rejects\r\n */\r\n confirm(\r\n options: Partial<ConfirmationOptions>,\r\n acceptCallback: () => void,\r\n rejectCallback?: () => void\r\n ): void {\r\n this.currentOptions = { ...this.confirmationOptions, ...options };\r\n this.acceptCallback = acceptCallback;\r\n this.rejectCallback = rejectCallback;\r\n this.isVisible = true;\r\n }\r\n\r\n /**\r\n * Shows a delete confirmation dialog\r\n * @param itemName - Name of the item to be deleted\r\n * @param acceptCallback - Function to execute when user accepts deletion\r\n * @param rejectCallback - Function to execute when user rejects deletion\r\n */\r\n confirmDelete(\r\n itemName: string,\r\n acceptCallback: () => void,\r\n rejectCallback?: () => void\r\n ): void {\r\n this.confirm({\r\n message: `Are you sure you want to delete \"${itemName}\"?`,\r\n header: 'Delete Confirmation',\r\n acceptLabel: 'Delete',\r\n rejectLabel: 'Cancel',\r\n acceptButtonClass: 'btn-danger'\r\n }, acceptCallback, rejectCallback);\r\n }\r\n\r\n onAccept(): void {\r\n this.isVisible = false;\r\n if (this.acceptCallback) {\r\n this.acceptCallback();\r\n }\r\n }\r\n\r\n onReject(): void {\r\n this.isVisible = false;\r\n if (this.rejectCallback) {\r\n this.rejectCallback();\r\n }\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnDestroy, HostListener, ViewChild } from '@angular/core';\nimport { SHARED } from '../../../../Shared/constant/SHARED';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ConfirmationDialogComponent, ConfirmationOptions } from '../../../../Shared/components/confirmation-dialog/confirmation-dialog.component';\n\n@Component({\n selector: 'lib-sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n standalone: false\n})\nexport class SidebarComponent implements OnDestroy {\n @ViewChild('confirmationDialog') confirmationDialog!: ConfirmationDialogComponent;\n \n // Add setter to log visible changes\n @Input() set visible(value: boolean) {\n this._visible = value;\n }\n \n get visible(): boolean {\n return this._visible;\n }\n \n private _visible: boolean = false;\n \n // Flag to prevent double event emission\n private isProgrammaticallyClosing: boolean = false;\n \n @Input() position: 'left' | 'right' = 'right';\n @Input() width: string = SHARED.WIDTH;\n @Input() title: string = SHARED.EMPTY;\n @Input() showCloseButton: boolean = true;\n @Input() modal: boolean = true;\n @Input() dismissible: boolean = true;\n @Input() closeOnEscape: boolean = true;\n @Input() baseZIndex: number = 10000;\n @Input() autoZIndex: boolean = false;\n @Input() styleClass: string = SHARED.EMPTY;\n @Input() appendTo: string = 'body';\n @Input() blockScroll: boolean = true;\n @Input() closeIcon: string = SHARED.CLOSE_ICON;\n @Input() showSaveButton: boolean = false;\n @Input() saveButtonText: string = SHARED.SAVE;\n @Input() saveButtonDisabled: boolean = false;\n @Input() successMessage: string = SHARED.SUCCESS_MESSAGE;\n @Input() errorMessage: string = SHARED.EMPTY;\n @Input() hasUnsavedChanges: boolean = false;\n\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() onShow = new EventEmitter<void>();\n @Output() onHide = new EventEmitter<void>();\n @Output() onSave = new EventEmitter<void>();\n @Output() onDiscardChanges = new EventEmitter<void>();\n \n showSuccessMessage: boolean = false;\n showErrorMessage: boolean = false;\n private destroy$ = new Subject<void>();\n\n // Confirmation options for unsaved changes\n unsavedChangesConfirmationOptions: ConfirmationOptions = {\n message: SHARED.UNSAVED_CHANGES_MESSAGE,\n header: SHARED.UNSAVED_CHANGES_HEADER,\n icon: SHARED.UNSAVED_CHANGES_ICON,\n acceptLabel: SHARED.REMOVE,\n rejectLabel: SHARED.CANCEL,\n acceptIcon: SHARED.ACCEPT_ICON,\n rejectIcon: SHARED.REJECT_ICON,\n acceptButtonClass: SHARED.ACCEPT_BUTTON_STYLE_CLASS,\n rejectButtonClass: SHARED.REJECT_BUTTON_STYLE_CLASS\n };\n\n constructor() {\n }\n\n /**\n * Handles the onHide event from PrimeNG sidebar\n */\n onSidebarHide(): void {\n if (!this.isProgrammaticallyClosing) {\n this.onHide.emit();\n }\n }\n\n /**\n * Handles the visibleChange event from PrimeNG sidebar\n */\n onVisibleChange(value: boolean): void {\n if (!this.isProgrammaticallyClosing) {\n this.visibleChange.emit(value);\n }\n }\n\n /**\n * Opens the sidebar\n */\n open(): void {\n this._visible = true;\n this.clearMessages();\n this.visibleChange.emit(this._visible);\n this.onShow.emit();\n }\n\n /**\n * Closes the sidebar\n */\n close(): void {\n this.isProgrammaticallyClosing = true;\n this._visible = false;\n this.clearMessages();\n this.visibleChange.emit(this._visible);\n this.onHide.emit();\n this.isProgrammaticallyClosing = false;\n }\n\n /**\n * Closes the sidebar and discards all changes\n */\n closeAndDiscardChanges(): void {\n this.isProgrammaticallyClosing = true;\n this._visible = false;\n this.clearMessages();\n this.visibleChange.emit(this._visible);\n this.onDiscardChanges.emit();\n this.onHide.emit();\n this.isProgrammaticallyClosing = false;\n }\n\n /**\n * Toggles the sidebar visibility\n */\n toggle(): void {\n this._visible = !this._visible;\n if (this._visible) {\n this.clearMessages();\n this.onShow.emit();\n } else {\n this.clearMessages();\n this.onHide.emit();\n }\n this.visibleChange.emit(this._visible);\n }\n\n /**\n * Handles the close button click with unsaved changes check\n */\n onCloseClick(): void {\n if (this.hasUnsavedChanges) {\n this.showUnsavedChangesConfirmation();\n } else {\n this.close();\n }\n }\n\n /**\n * Handles the mask click (when dismissible is true) with unsaved changes check\n */\n onMaskClick(): void {\n if (this.dismissible) {\n if (this.hasUnsavedChanges) {\n this.showUnsavedChangesConfirmation();\n } else {\n this.close();\n }\n }\n }\n\n /**\n * Handles the escape key press with unsaved changes check\n */\n @HostListener('document:keydown.escape', ['$event'])\n onEscapeKey(event: KeyboardEvent): void {\n if (this._visible && this.closeOnEscape) {\n if (this.hasUnsavedChanges) {\n event.preventDefault();\n this.showUnsavedChangesConfirmation();\n } else {\n this.close();\n }\n }\n }\n\n /**\n * Handles backdrop click with unsaved changes check\n */\n onBackdropClick(event: Event): void {\n \n if (this.hasUnsavedChanges) {\n this.showUnsavedChangesConfirmation();\n } else {\n this.close();\n }\n }\n\n /**\n * Handles close button click with unsaved changes check\n */\n onCloseButtonClick(): void {\n if (this.hasUnsavedChanges) {\n this.showUnsavedChangesConfirmation();\n } else {\n this.close();\n }\n }\n\n /**\n * Shows confirmation dialog for unsaved changes\n */\n private showUnsavedChangesConfirmation(): void {\n this.confirmationDialog.confirm(\n this.unsavedChangesConfirmationOptions,\n () => {\n this.closeAndDiscardChanges();\n },\n () => {}\n );\n }\n\n /**\n * Shows success message and closes sidebar after delay\n */\n showSuccess(): void {\n this.showSuccessMessage = true;\n this.showErrorMessage = false;\n setTimeout(() => {\n this.close();\n }, 2000);\n }\n\n /**\n * Shows error message\n */\n showError(message?: string): void {\n this.showErrorMessage = true;\n this.showSuccessMessage = false;\n this.errorMessage = message || SHARED.EMPTY;\n }\n\n /**\n * Clears all messages\n */\n clearMessages(): void {\n this.showSuccessMessage = false;\n this.showErrorMessage = false;\n }\n\n /**\n * Checks if there are unsaved changes\n * @returns True if there are unsaved changes, false otherwise\n */\n checkForUnsavedChanges(): boolean {\n return this.hasUnsavedChanges;\n }\n\n /**\n * Lifecycle hook that is called when component is destroyed.\n * Cleans up subscriptions.\n */\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<!-- Custom backdrop for better control over outside clicks -->\n<div \n *ngIf=\"visible\" \n class=\"custom-sidebar-backdrop\" \n (click)=\"onBackdropClick($event)\"\n></div>\n\n<p-sidebar \n [(visible)]=\"visible\"\n [position]=\"position\"\n [style]=\"{width: width}\"\n [modal]=\"false\"\n [dismissible]=\"false\"\n [closeOnEscape]=\"false\"\n [showCloseIcon]=\"false\"\n [baseZIndex]=\"baseZIndex\"\n [autoZIndex]=\"autoZIndex\"\n [styleClass]=\"styleClass\"\n [appendTo]=\"appendTo\"\n [blockScroll]=\"blockScroll\"\n (visibleChange)=\"onVisibleChange($event)\"\n (onShow)=\"onShow.emit()\"\n (onHide)=\"onSidebarHide()\"\n>\n <ng-template pTemplate=\"header\" *ngIf=\"title || showCloseButton || showSaveButton\">\n <div class=\"sidebar-header\">\n <h3 *ngIf=\"title\" class=\"sidebar-title\">{{ title }}</h3>\n <div class=\"header-content\">\n <ng-content select=\"[header]\"></ng-content>\n \n <p-messages \n *ngIf=\"showSuccessMessage\"\n severity=\"success\"\n [closable]=\"false\"\n [style]=\"{'margin-bottom': '0.5rem'}\"\n class=\"ml-3\"\n >\n <ng-template pTemplate=\"message\">\n <span>{{ successMessage }}</span>\n </ng-template>\n </p-messages>\n <p-messages \n *ngIf=\"showErrorMessage\"\n severity=\"error\"\n [closable]=\"false\"\n [style]=\"{'margin-bottom': '0.5rem'}\"\n class=\"ml-3\"\n >\n <ng-template pTemplate=\"message\">\n <span>{{ errorMessage }}</span>\n </ng-template>\n </p-messages>\n\n <div class=\"header-actions mr-3\">\n <button \n *ngIf=\"showSaveButton\"\n pButton \n type=\"button\" \n [label]=\"saveButtonText\"\n [disabled]=\"saveButtonDisabled\"\n class=\"p-button-primary\"\n (click)=\"onSave.emit()\"\n ></button>\n\n <button \n *ngIf=\"showCloseButton\"\n pButton \n type=\"button\" \n icon=\"pi pi-times\"\n class=\"p-button-text p-button-rounded\"\n (click)=\"onCloseButtonClick()\"\n ></button>\n \n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"content\">\n <div class=\"sidebar-content\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n</p-sidebar>\n\n<!-- Custom confirmation dialog for unsaved changes -->\n<app-confirmation-dialog \n #confirmationDialog\n [confirmationOptions]=\"unsavedChangesConfirmationOptions\">\n</app-confirmation-dialog>\n","import { Injectable } from '@angular/core';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED'\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentQuery } from '../state/document.query';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserListService {\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery\r\n ) { }\r\n\r\n getInitials(name: string): string {\r\n if (!name || name.trim() === SHARED.EMPTY) {\r\n return SHARED.EMPTY;\r\n }\r\n const words = name.trim().split(SHARED.EMPTY_SPACE).filter(word => word.length > SHARED.INITIAL_COUNT);\r\n if (words.length === 1) {\r\n return words[0].substring(0, 2).toUpperCase();\r\n } else if (words.length >= 2) {\r\n const firstWord = words[0];\r\n const lastWord = words[words.length - 1];\r\n return (firstWord.charAt(0) + lastWord.charAt(0)).toUpperCase();\r\n }\r\n return SHARED.EMPTY;\r\n }\r\n\r\n getColorByIndex(index: number): string {\r\n const colors = SHARED.COLORS;\r\n return colors[index % colors.length];\r\n }\r\n\r\n getColorValue(colorName: string): string {\r\n const colorMap: { [key: string]: string } = SHARED.COLOR_MAP;\r\n return colorMap[colorName] || SHARED.DEFAULT_COLOR;\r\n }\r\n\r\n processUserData(userList: UserListModel[]): UserListModel[] {\r\n return userList.map((user, index) => ({\r\n ...user,\r\n initials: this.getInitials(user.name),\r\n color: this.getColorByIndex(index)\r\n }));\r\n }\r\n\r\n /**\r\n * Finds the selected menu item from categories\r\n * @param selectedMenuItemId - The ID of the selected menu item\r\n * @param categories - The document categories\r\n * @returns The selected menu item or null\r\n */\r\n private findSelectedMenuItem(selectedMenuItemId: string, categories: DocumentCategory[]): any {\r\n for (const category of categories) {\r\n if (category.items) {\r\n const item = category.items.find(item => item._id === selectedMenuItemId);\r\n if (item) {\r\n return item;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Filters user list based on selected menu item category\r\n * @param userList - The complete user list\r\n * @param categories - The document categories\r\n * @returns Filtered user list\r\n */\r\n filterUsersByCategory(userList: UserListModel[], categories: DocumentCategory[]): UserListModel[] {\r\n const selectedMenuItemId = this.documentQuery.getSelectionState().menuItem;\r\n if (!selectedMenuItemId) {\r\n return userList;\r\n }\r\n\r\n const selectedMenuItem = this.findSelectedMenuItem(selectedMenuItemId, categories);\r\n if (!selectedMenuItem) {\r\n return userList;\r\n }\r\n\r\n const selectedCategory = categories.find(category => \r\n category.items?.some(item => item._id === selectedMenuItemId)\r\n );\r\n \r\n if (!selectedCategory) {\r\n return userList;\r\n }\r\n\r\n if (selectedCategory.label === SHARED.APPLICATION) {\r\n return userList.filter(user => user.name === SHARED.APPLICATION_DOCS);\r\n }\r\n\r\n return userList;\r\n }\r\n\r\n selectUser(userId: string, userData: UserListModel[]): { selectedUser: string | undefined; name: string | undefined } {\r\n const user = userData.find(u => u._id === userId);\r\n if (user) {\r\n this.documentStore.setSelectedUserId(userId);\r\n return { selectedUser: user.name, name: user.name };\r\n }\r\n return { selectedUser: undefined, name: undefined };\r\n }\r\n\r\n unselectUser(): void {\r\n this.documentStore.setSelectedUserId(null);\r\n }\r\n\r\n isUserSelected(userId: string, userData: UserListModel[], selectedUser: string | undefined): boolean {\r\n return selectedUser === userData.find(u => u._id === userId)?.name;\r\n }\r\n} ","\r\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport { SHARED, USERLIST } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { UserListService } from '../../services/user-list.service';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-user-list',\r\n standalone : false,\r\n templateUrl: './user-list.component.html',\r\n styleUrls: ['./user-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [\r\n trigger('slideInFromTop', [\r\n state('void', style({\r\n opacity: 0,\r\n transform: 'translateY(-10px)'\r\n })),\r\n state('*', style({\r\n opacity: 1,\r\n transform: 'translateY(0)'\r\n })),\r\n transition('void => *', [\r\n animate('300ms ease-out')\r\n ])\r\n ]),\r\n trigger('fadeIn', [\r\n state('void', style({\r\n opacity: 0,\r\n transform: 'scale(0.8)'\r\n })),\r\n state('*', style({\r\n opacity: 1,\r\n transform: 'scale(1)'\r\n })),\r\n transition('void => *', [\r\n animate('200ms ease-in-out')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class UserListComponent implements OnInit, OnChanges {\r\n \r\n @Input() userList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n @Input() categories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n @Output() userSelected = new EventEmitter<string>();\r\n \r\n userData: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n filteredUserData: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n selectedUser: string | undefined;\r\n shouldShowContainer: boolean = true;\r\n \r\n private userListSubscription: Subscription = new Subscription();\r\n private categoriesSubscription: Subscription = new Subscription();\r\n \r\n constructor(\r\n public documentService : DocumentHelperService,\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private userListService: UserListService,\r\n private cdr: ChangeDetectorRef\r\n ){\r\n\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[SHARED.USER_LIST] && !changes[SHARED.USER_LIST].firstChange) {\r\n this.initializeUserData();\r\n }\r\n if (changes[SHARED.CATEGORIES] && !changes[SHARED.CATEGORIES].firstChange) {\r\n this.updateFilteredUserData();\r\n }\r\n }\r\n\r\n initializeUserData(): void {\r\n if (this.userList && this.userList.length > 0) {\r\n this.userData = this.userListService.processUserData(this.userList);\r\n this.updateFilteredUserData();\r\n }\r\n }\r\n\r\n updateFilteredUserData(): void {\r\n if (this.userData.length > 0 && this.categories.length > 0) {\r\n this.filteredUserData = this.userListService.filterUsersByCategory(this.userData, this.categories);\r\n this.shouldShowContainer = true;\r\n if (this.selectedUser) {\r\n const selectedUserInFiltered = this.filteredUserData.find(user => user.name === this.selectedUser);\r\n if (!selectedUserInFiltered) {\r\n this.selectedUser = undefined;\r\n this.documentStore.setSelectedUserId(null);\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n }\r\n } else {\r\n this.filteredUserData = this.userData;\r\n this.shouldShowContainer = true;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeUserData();\r\n this.userListSubscription.add(\r\n this.documentQuery.selectUserList().subscribe(userList => {\r\n if (userList && userList.length > 0) {\r\n this.userList = userList;\r\n this.initializeUserData();\r\n this.cdr.markForCheck();\r\n }\r\n })\r\n );\r\n\r\n this.categoriesSubscription.add(\r\n this.documentQuery.selectDocumentCategories().subscribe(categories => {\r\n if (categories && categories.length > 0) {\r\n this.categories = categories;\r\n this.updateFilteredUserData();\r\n this.cdr.markForCheck();\r\n }\r\n })\r\n );\r\n\r\n this.userListSubscription.add(\r\n this.documentQuery.selectDocumentListResponse().subscribe(() => {\r\n const currentUserList = this.documentQuery.getUserList();\r\n if (currentUserList && currentUserList.length > 0) {\r\n this.userList = currentUserList;\r\n this.initializeUserData();\r\n this.cdr.markForCheck();\r\n }\r\n })\r\n );\r\n\r\n this.documentQuery.selectSelectedUserId().subscribe(userId => {\r\n if (userId) {\r\n const user = this.userData.find(u => u._id === userId);\r\n this.selectedUser = user ? user.name : undefined;\r\n } else {\r\n this.selectedUser = undefined;\r\n }\r\n this.cdr.markForCheck();\r\n });\r\n\r\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItemId => {\r\n this.updateFilteredUserData();\r\n if (this.selectedUser) {\r\n const selectedUserInFiltered = this.filteredUserData.find(user => user.name === this.selectedUser);\r\n if (!selectedUserInFiltered) {\r\n this.selectedUser = undefined;\r\n this.documentStore.setSelectedUserId(null);\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n }\r\n this.cdr.markForCheck();\r\n });\r\n\r\n this.documentQuery.selectShowUserList().subscribe(show => {\r\n if (!show && this.selectedUser) {\r\n this.selectedUser = undefined;\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n });\r\n }\r\n\r\n onUserSelect(username: string, id: string): void {\r\n if (this.selectedUser === username) {\r\n this.selectedUser = undefined;\r\n this.userListService.unselectUser();\r\n this.userSelected.emit(SHARED.EMPTY);\r\n } else {\r\n this.selectedUser = username;\r\n this.documentStore.setSelectedUserId(id);\r\n this.userSelected.emit(username);\r\n }\r\n }\r\n\r\n\r\n ngOnDestroy(): void {\r\n this.userListSubscription.unsubscribe();\r\n this.categoriesSubscription.unsubscribe();\r\n }\r\n}","<div class=\"user-list-container\" [@slideInFromTop]>\r\n <div class=\"user-cards\">\r\n <div \r\n *ngFor=\"let user of filteredUserData\" \r\n class=\"user-card\"\r\n [class.selected]=\"selectedUser === user.name\"\r\n [style.border-color]=\"selectedUser === user.name ? '#f97316' : 'transparent'\"\r\n (click)=\"onUserSelect(user.name, user._id)\"\r\n >\r\n @if(user.name === \"Application Docs\"){\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\"><i class=\"pi pi-user\"></i></span>\r\n </div>\r\n }@else {\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\">{{ user.initials }}</span>\r\n </div>\r\n }\r\n <div class=\"user-info\">\r\n <div class=\"username\">{{ user.name }}</div>\r\n <div class=\"document-counts\">\r\n <span style=\"color : #16A34A;\"> {{ user.approved }} approved </span><span>/ {{ user.pending }} pending</span>\r\n </div>\r\n </div>\r\n <div class=\"selection-indicator\" *ngIf=\"selectedUser === user.name\" [@fadeIn]>\r\n <i class=\"ri-check-line\"></i>\r\n </div>\r\n </div>\r\n \r\n <!-- Show message when filtered list is empty -->\r\n <div *ngIf=\"filteredUserData.length === 0 && shouldShowContainer\" class=\"no-users-message\" [@slideInFromTop]>\r\n <p>No users available for this category.</p>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\nexport interface StatusData {\r\n status: string;\r\n count: number;\r\n color?: string;\r\n icon?: string;\r\n _id?: string;\r\n}\r\n\r\nexport interface CalculatedStatusData extends StatusData {\r\n percentage: number;\r\n isSelected: boolean;\r\n statusClass: string;\r\n iconClass: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StatusCalculatorService {\r\n\r\n calculateTotalCount(statusData: StatusData[]): number {\r\n return statusData?.reduce((total, status) => total + (status.count ?? 0), 0) || 0;\r\n }\r\n\r\n calculateStatusDataWithPercentages(\r\n statusData: StatusData[], \r\n selectedStatus: string | null\r\n ): CalculatedStatusData[] {\r\n if (!statusData) return [];\r\n \r\n const totalCount = this.calculateTotalCount(statusData);\r\n \r\n return statusData.map((status) => ({\r\n ...status,\r\n percentage: totalCount > 0 ? (status.count ?? 0) / totalCount * 100 : 0,\r\n isSelected: selectedStatus === status.status,\r\n statusClass: status.status ? SHARED.STATUS_WITH_DASH + status.status.toLowerCase() : SHARED.EMPTY,\r\n iconClass: SHARED.ICON_WITH_DASH + (status?.status?.toLowerCase() || SHARED.EMPTY)\r\n }));\r\n }\r\n} ","import { Component, OnInit, OnDestroy, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { StatusDataModel } from '../../models/status-data.model';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { StatusCalculatorService, CalculatedStatusData } from '../../services/status-calculator.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\n\r\n@Component({\r\n selector: 'lib-document-status',\r\n standalone: false,\r\n templateUrl: './document-status.component.html',\r\n styleUrl: './document-status.component.scss'\r\n})\r\nexport class DocumentStatusComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() contextId: string = SHARED.EMPTY;\r\n @Input() statusData: any;\r\n \r\n selectedStatus: string | null = null;\r\n statusDataWithPercentages: CalculatedStatusData[] = [];\r\n\r\n \r\n private subscription = new Subscription();\r\n\r\n constructor(\r\n private documentQuery: DocumentQuery,\r\n private documentService: DocumentHelperService,\r\n private statusCalculatorService: StatusCalculatorService\r\n ) {}\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['contextId'] && !changes['contextId'].firstChange) {\r\n // When contextId changes, refetch status data for the new context\r\n this.refetchStatusData();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedStatus().subscribe(status => {\r\n this.selectedStatus= status;\r\n this.updateCalculatedStatusData();\r\n })\r\n );\r\n\r\n this.subscription.add(\r\n this.documentQuery.selectStatusData().subscribe(statusData => {\r\n if (statusData && statusData.length > 0) {\r\n this.statusData = statusData;\r\n this.updateCalculatedStatusData();\r\n }\r\n })\r\n );\r\n\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.refetchStatusData();\r\n }\r\n }\r\n\r\n private refetchStatusData(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n const currentState = this.documentQuery.getSelectionState();\r\n const statusContextId = currentState.userId || null;\r\n const categoryId = currentState.menuItem || null;\r\n \r\n // Use the document service to refresh status data for the new context\r\n this.documentService.refreshStatusData(this.contextId, statusContextId, categoryId);\r\n }\r\n }\r\n\r\n \r\n selectStatus(status: string): void {\r\n const newStatus = this.selectedStatus === status ? null : status;\r\n this.documentService.setSelectedStatus(newStatus);\r\n }\r\n\r\n private updateCalculatedStatusData(): void {\r\n this.statusDataWithPercentages = this.statusCalculatorService.calculateStatusDataWithPercentages(\r\n this.statusData,\r\n this.selectedStatus\r\n );\r\n }\r\n \r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"status-summary-container\">\r\n <div class=\"status-cards\">\r\n \r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"status-card {{ status.statusClass }}\"\r\n [class.selected]=\"status.isSelected\"\r\n (click)=\"selectStatus(status.status || '')\"\r\n >\r\n <div class=\"status-icon {{ status.iconClass }}\">\r\n <i [class]=\"status.icon\"></i>\r\n </div>\r\n <div class=\"status-info\">\r\n <div class=\"status-count\">{{ status.count }}</div>\r\n <div class=\"status-name\">{{ status.status }}</div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"progress-bar-container\">\r\n <div class=\"progress-bar\">\r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"progress-segment\"\r\n [style.width.%]=\"status.percentage\"\r\n [style.background-color]=\"status.color\"\r\n ></div>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { Subject, takeUntil, debounceTime, distinctUntilChanged } from 'rxjs';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\n\r\n@Component({\r\n selector: 'document-search',\r\n templateUrl: './document-search.component.html',\r\n styleUrls: ['./document-search.component.scss'],\r\n standalone: false\r\n})\r\nexport class DocumentSearchComponent implements OnInit, OnDestroy {\r\n readonly SHARED = SHARED;\r\n \r\n @Input() contextId: string = SHARED.EMPTY;\r\n @Output() onActionClick = new EventEmitter<void>();\r\n \r\n searchTerm: string = SHARED.EMPTY;\r\n private destroy$ = new Subject<void>();\r\n private searchSubject = new Subject<string>();\r\n\r\n constructor(private documentHelperService: DocumentHelperService) {}\r\n\r\n ngOnInit(): void {\r\n this.setupSearchSubscription();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n /**\r\n * Sets up the search input subscription with debouncing\r\n */\r\n private setupSearchSubscription(): void {\r\n const searchSubject = new Subject<string>();\r\n searchSubject.pipe(\r\n takeUntil(this.destroy$),\r\n debounceTime(500),\r\n distinctUntilChanged()\r\n ).subscribe(searchTerm => {\r\n this.onSearchChange(searchTerm);\r\n });\r\n\r\n this.searchSubject = searchSubject;\r\n }\r\n\r\n /**\r\n * Handles search term changes from ngModel\r\n * @param searchTerm - The search term entered by the user\r\n */\r\n onSearchInputChange(searchTerm: string): void {\r\n this.searchSubject.next(searchTerm);\r\n }\r\n\r\n /**\r\n * Handles search term changes\r\n * @param searchTerm - The search term entered by the user\r\n */\r\n private onSearchChange(searchTerm: string): void {\r\n const normalizedSearchTerm = searchTerm?.trim() || null;\r\n this.documentHelperService.setSearchKey(normalizedSearchTerm);\r\n }\r\n\r\n /**\r\n * Clears the search input\r\n */\r\n onClearSearch(): void {\r\n this.searchTerm = SHARED.EMPTY;\r\n this.documentHelperService.setSearchKey(null);\r\n }\r\n\r\n /**\r\n * Clears all filters including search, menu item, user, and status selections\r\n */\r\n onClearAllFilters(): void {\r\n this.searchTerm = SHARED.EMPTY;\r\n this.documentHelperService.clearSelectionState();\r\n }\r\n\r\n} ","<div class=\"search-container\">\r\n <div class=\"search-input-wrapper\">\r\n <i class=\"pi pi-search search-icon\"></i>\r\n <input \r\n type=\"text\" \r\n [(ngModel)]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchInputChange($event)\"\r\n class=\"search-input\"\r\n placeholder=\"Search by document name, category, type, status or applicant name...\"\r\n [attr.aria-label]=\"'Search documents'\"\r\n />\r\n <button \r\n *ngIf=\"searchTerm\"\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"onClearSearch()\"\r\n [attr.aria-label]=\"'Clear search'\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <button \r\n type=\"button\"\r\n class=\"clear-all-filters-link\"\r\n (click)=\"onClearAllFilters()\"\r\n [attr.aria-label]=\"'Clear all'\"\r\n >\r\n Clear All\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n\r\n <div class=\"filters-section\">\r\n <button \r\n type=\"button\"\r\n class=\"action-button\"\r\n (click)=\"onActionClick.emit()\"\r\n [attr.aria-label]=\"'Open actions menu'\"\r\n >\r\n Upload Document\r\n </button>\r\n </div>\r\n</div> ","import { Component, Input, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport {SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { FolderBlockModel } from '../../models/folder.model';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { StatusDataModel } from '../../models/status-data.model';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentUploadComponent } from '../document-upload/document-upload.component';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { SidebarComponent } from '../sidebar/sidebar.component';\r\n\r\n/**\r\n * The `FolderContainerComponent` is responsible for rendering a container \r\n * that displays a list of documents and associated folder panel data.\r\n * This component utilizes the `FOLDERPANEL` constant for folder panel data\r\n * and accepts a document list input of type `DocumentModel`.\r\n */\r\n@Component({\r\n selector: 'lib-folder-container',\r\n standalone: false,\r\n templateUrl: './folder-container.component.html',\r\n styleUrl: './folder-container.component.scss',\r\n animations: [\r\n trigger('slideInOut', [\r\n state('visible', style({\r\n height: '*',\r\n opacity: 1,\r\n transform: 'translateY(0)',\r\n overflow: 'hidden',\r\n marginBottom: '1rem',\r\n visibility: 'visible'\r\n })),\r\n state('hidden', style({\r\n height: '0px',\r\n opacity: 0,\r\n transform: 'translateY(-20px)',\r\n overflow: 'hidden',\r\n marginBottom: '0px',\r\n visibility: 'hidden'\r\n })),\r\n transition('visible => hidden', [\r\n animate('250ms cubic-bezier(0.4, 0.0, 0.2, 1)')\r\n ]),\r\n transition('hidden => visible', [\r\n animate('300ms cubic-bezier(0.0, 0.0, 0.2, 1)')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class FolderContainerComponent implements OnInit {\r\n /**\r\n * A list of documents passed as input to the component.\r\n * Represents the document data to be displayed in the folder container.\r\n */\r\n @Input() documentList?: DocumentModel[];\r\n /**\r\n * A list of documents passed as input to the component.\r\n * Represents the document data to be displayed in the folder container.\r\n */\r\n @Input() folderList: FolderBlockModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The context ID for the folder container.\r\n * @type {string}\r\n */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n\r\n /**\r\n * The list of users passed as input to the component.\r\n * @type {UserListModel[]}\r\n */\r\n @Input() userList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The status data passed as input to the component.\r\n * @type {StatusDataModel[]}\r\n */\r\n @Input() statusData: StatusDataModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The document categories passed as input to the component.\r\n * @type {DocumentCategory[]}\r\n */\r\n @Input() categories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Flag to control user list visibility\r\n */\r\n showUserList: boolean = true;\r\n \r\n /**\r\n * Animation state for user list visibility\r\n */\r\n userListAnimationState: string = SHARED.VISIBLE;\r\n\r\n /**\r\n * Controls the visibility of the document upload sidebar\r\n */\r\n isDocumentUploadSidebarOpen: boolean = false;\r\n\r\n /**\r\n * Reference to the document upload component\r\n */\r\n @ViewChild(DocumentUploadComponent) documentUploadComponent!: DocumentUploadComponent;\r\n \r\n /**\r\n * Reference to the sidebar component\r\n */\r\n @ViewChild(SidebarComponent) sidebarComponent!: SidebarComponent;\r\n \r\n /**\r\n * Tracks whether the save button should be disabled\r\n */\r\n isSaveButtonDisabled: boolean = false;\r\n \r\n /**\r\n * Tracks whether there are unsaved changes in the document upload form\r\n */\r\n hasUnsavedChanges: boolean = false;\r\n \r\n constructor(private documentQuery: DocumentQuery, private documentHelperService: DocumentHelperService) {}\r\n\r\n ngOnInit(): void {\r\n this.documentQuery.selectShowUserList().subscribe(show => {\r\n this.showUserList = show;\r\n this.userListAnimationState = show ? SHARED.VISIBLE : SHARED.HIDDEN;\r\n });\r\n }\r\n\r\n /**\r\n * Called when the view is initialized to set up the save button state\r\n */\r\n ngAfterViewInit(): void {\r\n this.updateSaveButtonState();\r\n }\r\n\r\n /**\r\n * Updates the save button disabled state based on the document upload component\r\n */\r\n updateSaveButtonState(): void {\r\n if (this.documentUploadComponent) {\r\n this.isSaveButtonDisabled = this.documentUploadComponent.getSaveButtonDisabled();\r\n }\r\n }\r\n\r\n /**\r\n * Handles form validation changes from the document upload component\r\n */\r\n onFormValidationChange(): void {\r\n this.updateSaveButtonState();\r\n // Check if there are actual unsaved changes\r\n this.checkForUnsavedChanges();\r\n }\r\n\r\n /**\r\n * Checks if there are unsaved changes in the document upload form\r\n */\r\n private checkForUnsavedChanges(): void {\r\n if (this.documentUploadComponent) {\r\n // Check if files are uploaded or form has changes\r\n const hasFiles = Boolean(this.documentUploadComponent.uploadedFiles && this.documentUploadComponent.uploadedFiles.length > 0);\r\n const hasFormChanges = Boolean(\r\n (this.documentUploadComponent.selectedAssignmentType && this.documentUploadComponent.selectedAssignmentType !== SHARED.EMPTY) || \r\n (this.documentUploadComponent.selectedApplicant && this.documentUploadComponent.selectedApplicant !== SHARED.EMPTY) || \r\n (this.documentUploadComponent.selectedCategory && this.documentUploadComponent.selectedCategory !== SHARED.EMPTY) || \r\n (this.documentUploadComponent.selectedDocumentType && this.documentUploadComponent.selectedDocumentType !== SHARED.EMPTY)\r\n );\r\n \r\n this.hasUnsavedChanges = hasFiles || hasFormChanges;\r\n }\r\n }\r\n\r\n /**\r\n * Opens the document upload sidebar\r\n */\r\n openDocumentUploadSidebar(): void {\r\n this.isDocumentUploadSidebarOpen = true;\r\n this.hasUnsavedChanges = false; // Reset when opening\r\n }\r\n\r\n /**\r\n * Handles the document upload sidebar hide event\r\n */\r\n onDocumentUploadSidebarHide(): void {\r\n this.isDocumentUploadSidebarOpen = false;\r\n this.hasUnsavedChanges = false;\r\n if (this.documentUploadComponent) {\r\n this.documentUploadComponent.resetForm();\r\n }\r\n }\r\n\r\n /**\r\n * Handles the document upload sidebar close event (when close button is clicked or sidebar is dismissed)\r\n */\r\n onDocumentUploadSidebarClose(): void {\r\n this.isDocumentUploadSidebarOpen = false;\r\n this.hasUnsavedChanges = false;\r\n if (this.documentUploadComponent) {\r\n this.documentUploadComponent.resetForm();\r\n }\r\n }\r\n\r\n /**\r\n * Handles the document upload sidebar close with unsaved changes event\r\n */\r\n onDocumentUploadSidebarCloseWithUnsavedChanges(): void {\r\n this.isDocumentUploadSidebarOpen = false;\r\n this.hasUnsavedChanges = false;\r\n if (this.documentUploadComponent) {\r\n this.documentUploadComponent.resetForm();\r\n }\r\n }\r\n\r\n /**\r\n * Handles the document upload save event\r\n */\r\n onDocumentUploadSave(): void {\r\n if (this.documentUploadComponent) {\r\n this.documentUploadComponent.saveDocumentUpload();\r\n this.updateSaveButtonState();\r\n }\r\n }\r\n\r\n /**\r\n * Handles successful document upload and refreshes data\r\n */\r\n onDocumentUploadSuccess(): void {\r\n this.documentHelperService.refreshAllDataWithCurrentFilters(this.contextId);\r\n this.hasUnsavedChanges = false; // Reset after successful upload\r\n if (this.sidebarComponent) {\r\n this.sidebarComponent.showSuccess();\r\n }\r\n }\r\n\r\n /**\r\n * Handles document upload error\r\n */\r\n onDocumentUploadError(error: any): void {\r\n if (this.sidebarComponent) {\r\n const errorMessage = error?.message || SHARED.UPLOAD_FAILED;\r\n this.sidebarComponent.showError(errorMessage);\r\n }\r\n }\r\n\r\n \r\n}\r\n","\r\n<document-search [contextId]=\"contextId\" (onActionClick)=\"openDocumentUploadSidebar()\"></document-search>\r\n<div class=\"user-list-wrapper\" [@slideInOut]=\"userListAnimationState\">\r\n <lib-user-list [userList]=\"userList\" [categories]=\"categories\"></lib-user-list>\r\n</div>\r\n<lib-document-status [contextId]=\"contextId\" [statusData]=\"statusData\"></lib-document-status>\r\n\r\n<!-- Document Upload Sidebar -->\r\n<lib-sidebar\r\n [(visible)]=\"isDocumentUploadSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Upload Documents\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isSaveButtonDisabled\"\r\n [successMessage]=\"'Document Saved Successfully'\"\r\n [hasUnsavedChanges]=\"hasUnsavedChanges\"\r\n (onHide)=\"onDocumentUploadSidebarHide()\"\r\n (onSave)=\"onDocumentUploadSave()\"\r\n (onDiscardChanges)=\"onDocumentUploadSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-document-upload \r\n [contextId]=\"contextId\" \r\n (onFormValidationChange)=\"onFormValidationChange()\" \r\n (onUploadSuccess)=\"onDocumentUploadSuccess()\"\r\n (onUploadError)=\"onDocumentUploadError($event)\"\r\n ></lib-document-upload>\r\n</lib-sidebar>","\r\n/**\r\n * Storing all permission properties.\r\n * @export\r\n * @class PERMISSIONS\r\n * @typedef {PERMISSIONS}\r\n */\r\nexport class PERMISSIONS{\r\n \r\n/**\r\n * Access permission.\r\n * @static\r\n * @type {string}\r\n */\r\nstatic DOCUMENT_POST = 'Documents-POST'\r\nstatic DOCUMENT_DELETE = 'documents-deleteDocumentByDocumentId'\r\n}","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { SHARED } from '../constant/SHARED';\r\n\r\n/**\r\n * Service for managing user session details.\r\n * @class SessionService\r\n * @typedef {SessionService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SessionService {\r\n\r\n /**\r\n * Creates an instance of SessionService.\r\n * @param {Router} router - Angular Router for navigation.\r\n */\r\n constructor(public router: Router) {}\r\n\r\n /**\r\n * Retrieves the current user's role from local storage.\r\n * @returns {string | null} The user's role, or null if not found.\r\n */\r\n getUserRole(): string | null {\r\n return localStorage.getItem('role');\r\n }\r\n\r\n /**\r\n * Stores the user session data in local storage.\r\n * @param {any} data - The session data to store.\r\n */\r\n setUserSession(data: any): void {\r\n localStorage.setItem(SHARED.SESSIONKEY, JSON.stringify(data));\r\n }\r\n\r\n /**\r\n * Retrieves the stored user session data.\r\n * @returns {any | null} The parsed session data, or null if not found.\r\n */\r\n getUserSession(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n return sessionData ? JSON.parse(sessionData) : null;\r\n }\r\n\r\n /**\r\n * Retrieves the user's permissions from the stored session data.\r\n * @returns {any | null} The user's permissions, or null if not found.\r\n */\r\n getUserPermissions(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n return sessionData ? JSON.parse(sessionData).permissions : null;\r\n }\r\n\r\n /**\r\n * Retrieves the session ID from the stored session data.\r\n * @returns {any | null} The session ID, or null if not found.\r\n */\r\n getSessionID(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n console.log(sessionData);\r\n if (sessionData) {\r\n const sessionId = JSON.parse(sessionData);\r\n console.log(sessionId);\r\n return sessionId;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Clears all stored session data from local storage.\r\n */\r\n clearSession(): void {\r\n localStorage.clear();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DocumentListResponse, DocumentListItem } from '../models/document-list-response.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { PERMISSIONS } from '../../../Shared/constant/PERMISSIONS';\r\nimport { TableData } from '../../../Shared/components/table-primary/table-primary.model';\r\nimport { SessionService } from '../../../Shared/services/session.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentTableBuilderService {\r\n\r\n constructor(private sessionService: SessionService) { }\r\n\r\n /**\r\n * Builds a single table from document list items\r\n * @param documents Array of document list items\r\n * @returns TableData object\r\n */\r\n buildDocumentTable(documents: DocumentListItem[]): TableData {\r\n const userPermissionsObjects = this.sessionService.getUserPermissions();\r\n const userPermissionNames = userPermissionsObjects?.map((perm: any) => perm.name) || [];\r\n const hasDeletePermission = userPermissionNames.includes(PERMISSIONS.DOCUMENT_DELETE);\r\n const columns = SHARED.DOCUMENT_TABLE_COLUMNS.filter(col => {\r\n // Always include non-action columns\r\n if (col.type !== SHARED.ACTIONS) {\r\n return true;\r\n }\r\n // Only include action column if user has delete permission\r\n return hasDeletePermission;\r\n });\r\n\r\n return {\r\n columns: columns,\r\n data: documents\r\n };\r\n }\r\n\r\n /**\r\n * Gets completion count for a category\r\n * @param category Document category\r\n * @returns Completion string (e.g., \"2/4\")\r\n */\r\n getCompletionCount(category: DocumentListResponse): string {\r\n const total = category.list.length;\r\n const completed = category.list.filter(doc => \r\n doc.status.toLowerCase() === SHARED.APPROVED || \r\n doc.status.toLowerCase() === SHARED.UPLOADED\r\n ).length;\r\n return `${completed}/${total}`;\r\n }\r\n\r\n /**\r\n * Gets pending document count for a category\r\n * @param category Document category\r\n * @returns Number of pending documents\r\n */\r\n getPendingDocumentCount(category: DocumentListResponse): number {\r\n return category.totalDocs - category.acceptedDocs;\r\n }\r\n\r\n /**\r\n * Gets approved document count for a category\r\n * @param category Document category\r\n * @returns Number of approved documents\r\n */\r\n getApprovedDocumentCount(category: DocumentListResponse): number {\r\n return category.acceptedDocs;\r\n }\r\n\r\n /**\r\n * Transforms document model to document list item\r\n * @param documents Array of DocumentModel\r\n * @returns Array of DocumentListItem\r\n */\r\n transformDocumentModelToListItem(documents: any[]): DocumentListItem[] {\r\n return documents.map(doc => ({\r\n _id: doc._id || SHARED.EMPTY,\r\n fileName: doc.fileName || SHARED.EMPTY,\r\n docName: doc.docName || doc.documentName || SHARED.EMPTY,\r\n fileSize: doc.fileSize || SHARED.EMPTY,\r\n documentUrl: doc.documentUrl || doc.url || SHARED.EMPTY,\r\n status: doc.status || SHARED.PENDING,\r\n uploadedOn: doc.uploadedOn || doc.uploadDate || SHARED.EMPTY,\r\n ownerName: doc.ownerName || doc.applicantName || SHARED.EMPTY,\r\n contentType: doc.contentType || SHARED.EMPTY,\r\n isUploaded: doc.isUploaded || false\r\n }));\r\n }\r\n} ","import { Injectable } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { DocumentUploadService } from './document-upload.service';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { DocumentQuery } from '../state/document.query';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentTableBuilderService } from './document-table-builder.service';\r\nimport { DocumentHelperService } from './document.service';\r\nimport { DocumentListItem, DocumentListResponse } from '../models/document-list-response.model';\r\nimport { TableData } from '../../../Shared/components/table-primary/table-primary.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { ERRORS } from '../../../Shared/constant/ERROR';\r\nimport { Message } from 'primeng/api';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentListService {\r\n\r\n constructor(\r\n private documentUploadService: DocumentUploadService,\r\n private documentHttpService: DocumentHttpService,\r\n private documentQuery: DocumentQuery,\r\n private documentStore: DocumentStore,\r\n private documentTableBuilder: DocumentTableBuilderService,\r\n private documentHelperService: DocumentHelperService\r\n ) {}\r\n\r\n /**\r\n * Handle file upload click event\r\n */\r\n handleFileUploadClick(): void {\r\n this.documentStore.setMessage(SHARED.EMPTY_ARRAY);\r\n }\r\n\r\n /**\r\n * Handle save click to update document name\r\n */\r\n handleSaveClick(fileName: string, selectedDocument: DocumentListItem): Observable<any> {\r\n const payload = { fileName };\r\n return this.documentHttpService.updateDocumentName(selectedDocument._id, payload);\r\n }\r\n\r\n\r\n /**\r\n * Get completion count for a category\r\n */\r\n getCompletionCount(category: DocumentListResponse): string {\r\n return this.documentTableBuilder.getCompletionCount(category);\r\n }\r\n\r\n /**\r\n * Get pending document count for a category\r\n */\r\n getPendingDocumentCount(category: DocumentListResponse): number {\r\n return this.documentTableBuilder.getPendingDocumentCount(category);\r\n }\r\n\r\n /**\r\n * Get approved document count for a category\r\n */\r\n getApprovedDocumentCount(category: DocumentListResponse): number {\r\n return this.documentTableBuilder.getApprovedDocumentCount(category);\r\n }\r\n\r\n /**\r\n * Build document categories from API response\r\n */\r\n buildDocumentCategories(documentListResponse: DocumentListResponse[] | null): {\r\n documentCategories: DocumentListResponse[];\r\n categoryTables: TableData[];\r\n categoryCompletionCounts: string[];\r\n } {\r\n if (!documentListResponse) {\r\n return {\r\n documentCategories: SHARED.EMPTY_ARRAY,\r\n categoryTables: SHARED.EMPTY_ARRAY,\r\n categoryCompletionCounts: SHARED.EMPTY_ARRAY\r\n };\r\n }\r\n\r\n // Handle empty response - create a default category to show \"No records found\"\r\n if (documentListResponse.length === 0) {\r\n const defaultCategory = {\r\n label: SHARED.EMPTY,\r\n categoryDescription: SHARED.NO_DOCUMENTS_FOUND,\r\n list: SHARED.EMPTY_ARRAY,\r\n totalDocs: 0,\r\n acceptedDocs: 0,\r\n completed: '0/0'\r\n };\r\n \r\n return {\r\n documentCategories: [defaultCategory],\r\n categoryTables: [this.documentTableBuilder.buildDocumentTable([])],\r\n categoryCompletionCounts: ['0/0']\r\n };\r\n }\r\n\r\n const documentCategories = [...documentListResponse];\r\n const categoryTables = documentListResponse.map(category => \r\n this.documentTableBuilder.buildDocumentTable(category.list)\r\n );\r\n const categoryCompletionCounts = documentListResponse.map(category => \r\n this.getCompletionCount(category)\r\n );\r\n\r\n return {\r\n documentCategories,\r\n categoryTables,\r\n categoryCompletionCounts\r\n };\r\n }\r\n\r\n /**\r\n * Handle table row click\r\n */\r\n handleTableRowClick(rowData: any): DocumentListItem {\r\n return rowData;\r\n }\r\n\r\n /**\r\n * Handle delete action\r\n */\r\n handleDeleteAction(rowData: any, contextId: string): Observable<any> {\r\n if (!rowData._id || !contextId) {\r\n return throwError(() => new Error('Missing required parameters for delete'));\r\n }\r\n\r\n return this.documentHttpService.deleteDocument(rowData._id, contextId);\r\n }\r\n\r\n /**\r\n * Refresh document list for new context\r\n */\r\n refreshDocumentListForNewContext(contextId: string): void {\r\n if (contextId && contextId !== SHARED.EMPTY) {\r\n // Clear current document list response\r\n this.documentStore.setDocumentListResponse(null);\r\n \r\n // Refresh documents for the new context\r\n this.documentHelperService.refreshDocumentsWithoutFilters(contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Refresh document list after status update\r\n */\r\n refreshDocumentList(contextId: string): void {\r\n if (contextId) {\r\n this.documentHelperService.refreshDocumentsWithCurrentSelection(contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Setup subscription to document list response\r\n */\r\n setupDocumentListSubscription(): Observable<DocumentListResponse[] | null> {\r\n return this.documentQuery.selectDocumentListResponse();\r\n }\r\n\r\n /**\r\n * Refresh all data with current filters\r\n */\r\n refreshAllDataWithCurrentFilters(contextId: string): void {\r\n this.documentHelperService.refreshAllDataWithCurrentFilters(contextId);\r\n }\r\n} ","import { Directive, Input, ElementRef, Renderer2, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { SessionService } from '../../../Shared/services/session.service';\r\n\r\n/**\r\n * Directive to conditionally show or hide elements based on user permissions.\r\n * @class HasPermissionDirective\r\n * @typedef {HasPermissionDirective}\r\n */\r\n@Directive({\r\n selector: '[permission]',\r\n standalone: false\r\n})\r\nexport class HasPermissionDirective implements OnChanges {\r\n \r\n /**\r\n * The required permission(s) to display the element.\r\n * Accepts a single string or an array of strings.\r\n * @type {string | string[]}\r\n */\r\n @Input() permission?: string | string[];\r\n\r\n /**\r\n * Creates an instance of HasPermissionDirective.\r\n * @param {ElementRef} el - Reference to the host element.\r\n * @param {Renderer2} renderer - Angular Renderer for DOM manipulation.\r\n * @param {SessionService} sessionService - Service to retrieve user permissions.\r\n */\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n public sessionService: SessionService\r\n ) {}\r\n\r\n /**\r\n * Lifecycle hook that is called when input properties change.\r\n * @param {SimpleChanges} changes - The changes in input properties.\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['permission']) {\r\n this.checkPermission();\r\n }\r\n }\r\n\r\n /**\r\n * Checks if the user has the required permission(s).\r\n * Hides the element if the permission is not found.\r\n */\r\n private checkPermission() {\r\n // If no permission is required (empty string, null, or undefined), show the element\r\n if (!this.permission || this.permission === '' || (Array.isArray(this.permission) && this.permission.length === 0)) {\r\n this.renderer.removeStyle(this.el.nativeElement, 'display');\r\n return;\r\n }\r\n\r\n const userPermissionsObjects = this.sessionService.getUserPermissions();\r\n const userPermissionNames = userPermissionsObjects?.map((perm: any) => perm.name) || [];\r\n\r\n const requiredPermissions = Array.isArray(this.permission)\r\n ? this.permission\r\n : [this.permission];\r\n\r\n const hasPermission = requiredPermissions.some(permission =>\r\n userPermissionNames.includes(permission)\r\n );\r\n\r\n if (!hasPermission) {\r\n this.renderer.setStyle(this.el.nativeElement, 'display', 'none');\r\n } else {\r\n this.renderer.removeStyle(this.el.nativeElement, 'display');\r\n }\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { SHARED } from '../../constant/SHARED';\r\nimport { ProcessedRowData, TableData } from './table-primary.model';\r\n\r\n@Component({\r\n selector: 'lib-table-primary',\r\n standalone: false,\r\n templateUrl: './table-primary.component.html',\r\n styleUrl: './table-primary.component.scss'\r\n})\r\nexport class TablePrimaryComponent implements OnChanges {\r\n @Input() tableData: TableData = { columns: [], data: [] };\r\n @Input() showHeader: boolean = true;\r\n @Input() tableStyle: any = { 'min-width': '100%' };\r\n @Output() rowClick = new EventEmitter<any>();\r\n @Output() deleteAction = new EventEmitter<any>();\r\n\r\n processedData: ProcessedRowData[] = [];\r\n \r\n // Expose SHARED constants for template use\r\n readonly SHARED = SHARED;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['tableData'] && this.tableData) {\r\n this.processTableData();\r\n }\r\n }\r\n\r\n private processTableData(): void {\r\n this.processedData = this.tableData.data.map(rowData => {\r\n const processedRow: ProcessedRowData = { ...rowData };\r\n if (rowData.fileName) {\r\n processedRow._fileExtension = this.getFileExtension(rowData.fileName);\r\n processedRow._isPdfFile = processedRow._fileExtension === SHARED.PDF;\r\n processedRow._isImageFile = processedRow._fileExtension === SHARED.JPG || processedRow._fileExtension === SHARED.PNG;\r\n processedRow._isExcelFile = processedRow._fileExtension === SHARED.XLSX;\r\n processedRow._isOtherFile = !processedRow._isPdfFile && !processedRow._isImageFile && !processedRow._isExcelFile;\r\n }\r\n\r\n this.tableData.columns.forEach(col => {\r\n if (col.type === SHARED.STATUS_PARAM && rowData[col.field]) {\r\n const status = rowData[col.field];\r\n processedRow._statusClass = this.getStatusClass(status);\r\n processedRow._statusIcon = this.getStatusIcon(status);\r\n }\r\n });\r\n\r\n return processedRow;\r\n });\r\n }\r\n\r\n getStatusClass(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.PENDING_STATUS:\r\n return SHARED.STATUS_PENDING_CLASS;\r\n case SHARED.APPROVED_STATUS:\r\n return SHARED.STATUS_APPROVED_CLASS;\r\n case SHARED.ALERT_STATUS:\r\n return SHARED.STATUS_ALERT_CLASS;\r\n case SHARED.UPLOADED_STATUS:\r\n return SHARED.STATUS_UPLOADED_CLASS;\r\n case SHARED.REVIEWING_STATUS:\r\n return SHARED.STATUS_REVIEWING_CLASS;\r\n case SHARED.REJECTED_STATUS:\r\n return SHARED.STATUS_REJECTED_CLASS;\r\n default:\r\n return SHARED.STATUS_PENDING_CLASS;\r\n }\r\n }\r\n\r\n getStatusIcon(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.PENDING_STATUS:\r\n return SHARED.ICON_CLOCK;\r\n case SHARED.APPROVED_STATUS:\r\n return SHARED.ICON_CHECK;\r\n case SHARED.ALERT_STATUS:\r\n return SHARED.ICON_EXCLAMATION_TRIANGLE;\r\n case SHARED.UPLOADED_STATUS:\r\n return SHARED.ICON_CLOUD_UPLOAD;\r\n case SHARED.REVIEWING_STATUS:\r\n return SHARED.ICON_EYE;\r\n case SHARED.REJECTED_STATUS:\r\n return SHARED.ICON_TIMES;\r\n default:\r\n return SHARED.ICON_CLOCK;\r\n }\r\n }\r\n\r\n getFileExtension(fileName: string): string {\r\n return fileName.split(SHARED.DOT).pop()?.toUpperCase() || SHARED.PDF;\r\n }\r\n\r\n onActionClick(event: Event, rowData: any): void {\r\n event.stopPropagation();\r\n this.deleteAction.emit(rowData);\r\n }\r\n\r\n onRowClick(rowData: any): void {\r\n this.rowClick.emit(rowData);\r\n }\r\n}\r\n","<div class=\"card\">\r\n <p-table [value]=\"processedData\" [tableStyle]=\"tableStyle\">\r\n <ng-template pTemplate=\"header\" *ngIf=\"showHeader\">\r\n <tr>\r\n <th *ngFor=\"let col of tableData.columns\" [style.width]=\"col.width\">\r\n {{ col.header }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr (click)=\"onRowClick(rowData)\" class=\"clickable-row\">\r\n <td *ngFor=\"let col of tableData.columns\" [style.width]=\"col.width\">\r\n <!-- Document Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_DOCUMENT\" class=\"document-cell\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i [class]=\"SHARED.ICON_FILE_PDF\" *ngIf=\"rowData._isPdfFile\"></i>\r\n <i [class]=\"SHARED.ICON_IMAGE\" *ngIf=\"rowData._isImageFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE_EXCEL\" *ngIf=\"rowData._isExcelFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE\" *ngIf=\"rowData._isOtherFile\"></i>\r\n </div>\r\n <div class=\"document-details\">\r\n <div class=\"document-name\">{{ rowData.docName }}</div>\r\n <div class=\"file-info\">{{ rowData.fileName }} - {{ rowData.fileSize }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Status Cell -->\r\n \r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_STATUS\" class=\"status-cell\">\r\n <span class=\"status-pill\" [ngClass]=\"rowData._statusClass\">\r\n <i [class]=\"rowData._statusIcon\"></i>\r\n {{ rowData[col.field] }}\r\n </span>\r\n </div>\r\n\r\n <!-- Actions Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_ACTIONS\" class=\"actions-cell\">\r\n @if(rowData.isUploaded){\r\n <button pButton pRipple type=\"button\" [icon]=\"SHARED.ICON_DELETE\" \r\n class=\"p-button-text p-button-rounded\" \r\n [permission]=\"'documents-deleteDocumentByDocumentId'\"\r\n (click)=\"onActionClick($event, rowData)\">\r\n </button>\r\n } \r\n </div>\r\n\r\n <!-- Default Text Cell -->\r\n <div *ngIf=\"!col.type || col.type === SHARED.CELL_TYPE_TEXT\" class=\"text-cell\">\r\n {{ rowData[col.field] }}\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n \r\n <!-- No Records Template -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"tableData.columns.length\" class=\"no-records-cell\">\r\n <div class=\"no-records-content\">\r\n <i class=\"pi pi-inbox\" style=\"font-size: 2rem; color: #6c757d;\"></i>\r\n <p class=\"no-records-text\">No records found</p>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { DocumentHelperService } from './document.service';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\nimport { DocumentAction } from './document-actions.service';\r\nimport { DocumentAlertList, SHARED, SUPPORTED_IMAGE_TYPES } from '../../../Shared/constant/SHARED';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentQuery } from '../state/document.query';\r\n\r\nexport interface DocumentViewerState {\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentViewerService {\r\n constructor(\r\n private documentHttpService: DocumentHttpService,\r\n private documentService: DocumentHelperService,\r\n private messageService: MessageService,\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery\r\n ) {}\r\n\r\n /**\r\n * Gets the current document viewer state as an observable\r\n */\r\n get state$(): Observable<DocumentViewerState> {\r\n return this.documentQuery.selectDocumentViewerState();\r\n }\r\n\r\n /**\r\n * Gets the current document viewer state synchronously\r\n */\r\n getCurrentState(): DocumentViewerState {\r\n return this.documentQuery.getDocumentViewerState();\r\n }\r\n\r\n /**\r\n * Updates the selected document and recalculates all computed properties\r\n * @param document The selected document\r\n */\r\n updateSelectedDocument(document: DocumentListItem): void {\r\n this.documentService.set(document);\r\n const alertData = this.getAlertData(document);\r\n const documentStatus = this.calculateDocumentStatus(document);\r\n const documentIsUploaded = this.calculateIsDocumentUploaded(document);\r\n\r\n this.documentStore.updateDocumentViewerState(\r\n document,\r\n undefined, \r\n undefined,\r\n undefined,\r\n documentStatus,\r\n documentIsUploaded,\r\n alertData\r\n );\r\n\r\n this.loadDocumentHistory(document._id);\r\n }\r\n\r\n /**\r\n * Loads document history data\r\n * @param documentId The document ID\r\n */\r\n loadDocumentHistory(documentId: string): void {\r\n if (documentId) {\r\n this.documentHttpService.getDocumentHistory(documentId)\r\n .subscribe({\r\n next: (history) => {\r\n this.documentStore.updateDocumentViewerState(\r\n undefined,\r\n history,\r\n true\r\n );\r\n },\r\n error: (error) => {\r\n this.documentStore.updateDocumentViewerState(\r\n undefined,\r\n undefined,\r\n false\r\n );\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Determines if the given content type is an image\r\n * @param contentType The MIME type of the content\r\n * @returns True if the content type is an image\r\n */\r\n isImage(contentType?: string): boolean {\r\n return contentType ? SUPPORTED_IMAGE_TYPES.includes(contentType) : false;\r\n }\r\n\r\n /**\r\n * Handles document actions and updates status\r\n * @param action The action performed\r\n * @param contextId The context ID for API calls\r\n */\r\n handleDocumentAction(action: DocumentAction, contextId?: string): void {\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (!currentState.selectedDocument?._id) {\r\n console.error('No document ID available');\r\n return;\r\n }\r\n\r\n switch (action.type) {\r\n case SHARED.ACCEPT_ACTION:\r\n this.updateDocumentStatus(SHARED.STATUS_APPROVED, action.note || SHARED.DOCUMENT_ACCEPTED_MESSAGE, contextId);\r\n break;\r\n case SHARED.REJECT_ACTION:\r\n this.updateDocumentStatus(SHARED.STATUS_REJECTED, action.note || SHARED.DOCUMENT_REJECTED_MESSAGE, contextId);\r\n break;\r\n case SHARED.DELETE_ACTION:\r\n this.deleteDocument(currentState.selectedDocument._id, contextId);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the document status via API call and refreshes all related data\r\n * @param status The new status (Approved, Rejected)\r\n * @param description The status update description\r\n * @param contextId The context ID for API calls\r\n */\r\n private updateDocumentStatus(status: string, description: string, contextId?: string): void {\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (!currentState.selectedDocument?._id) {\r\n console.error('No document ID available');\r\n return;\r\n }\r\n\r\n this.documentStore.setIsActionLoading(true);\r\n\r\n this.documentHttpService.updateDocumentStatus(\r\n currentState.selectedDocument._id,\r\n status,\r\n description\r\n ).subscribe({\r\n next: (response) => {\r\n if (currentState.selectedDocument && response.status) {\r\n const normalizedStatus = response.normalizedStatus || response.status.toLowerCase();\r\n const updatedDocument = {\r\n ...currentState.selectedDocument,\r\n status: normalizedStatus\r\n };\r\n \r\n this.updateSelectedDocument(updatedDocument);\r\n }\r\n this.refreshAllData(contextId);\r\n },\r\n error: (error) => {\r\n console.error('Error updating document status:', error);\r\n },\r\n complete: () => {\r\n this.documentStore.setIsActionLoading(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Deletes a document and refreshes all data while preserving current filters\r\n * @param documentId The ID of the document to delete\r\n * @param contextId The context ID for API calls\r\n */\r\n private deleteDocument(documentId: string, contextId?: string): void {\r\n if (!contextId) {\r\n console.error('No context ID available for delete operation');\r\n return;\r\n }\r\n\r\n this.documentStore.setIsActionLoading(true);\r\n\r\n this.documentHttpService.deleteDocument(documentId, contextId).subscribe({\r\n next: (res:any) => {\r\n if(res){\r\n this.documentService.refreshAllDataWithCurrentFilters(contextId);\r\n this.documentStore.clearDocumentViewerState();\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Error deleting document:', error);\r\n this.documentStore.setIsActionLoading(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refreshes all related data after document status update\r\n * @param contextId The context ID for API calls\r\n */\r\n private refreshAllData(contextId?: string): void {\r\n if (!contextId) {\r\n console.error('No context ID available for data refresh');\r\n return;\r\n }\r\n\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (currentState.selectedDocument?._id) {\r\n this.loadDocumentHistory(currentState.selectedDocument._id);\r\n }\r\n\r\n // Use the same refresh method as other components for consistency\r\n this.documentService.refreshAllDataWithCurrentFilters(contextId);\r\n }\r\n\r\n /**\r\n * Gets alert data for the document\r\n * @param document The document\r\n * @returns Alert data\r\n */\r\n private getAlertData(document: DocumentListItem): any {\r\n return DocumentAlertList.find((res: any) => res.status === document?.status);\r\n }\r\n\r\n /**\r\n * Calculates the current status of the document for the actions component\r\n * @param document The document\r\n * @returns The current document status\r\n */\r\n private calculateDocumentStatus(document: DocumentListItem): 'pending' | 'accepted' | 'rejected' {\r\n if (!document) return SHARED.STATUS_PENDING as 'pending';\r\n \r\n // First check statusId from API response if available\r\n if (document.statusId) {\r\n switch (document.statusId.toLowerCase()) {\r\n case SHARED.STATUS_APPROVED.toLowerCase():\r\n return SHARED.STATUS_ACCEPTED as 'accepted';\r\n case SHARED.STATUS_REJECTED.toLowerCase():\r\n return SHARED.STATUS_REJECTED_LOWERCASE as 'rejected';\r\n case SHARED.STATUS_PENDING:\r\n return SHARED.STATUS_PENDING as 'pending';\r\n }\r\n }\r\n \r\n // Fall back to status field mapping\r\n switch (document.status?.toLowerCase()) {\r\n case SHARED.STATUS_APPROVED.toLowerCase():\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.STATUS_ACCEPTED as 'accepted';\r\n case SHARED.STATUS_REJECTED.toLowerCase():\r\n case SHARED.STATUS_DECLINED:\r\n return SHARED.STATUS_REJECTED_LOWERCASE as 'rejected';\r\n default:\r\n return SHARED.STATUS_PENDING as 'pending';\r\n }\r\n }\r\n\r\n /**\r\n * Calculates if the document is uploaded and ready for actions\r\n * @param document The document\r\n * @returns True if document is uploaded\r\n */\r\n private calculateIsDocumentUploaded(document: DocumentListItem): boolean {\r\n if (!document) return false;\r\n \r\n // Check if document has a URL and is not in a pending state\r\n const isPending = document.statusId?.toLowerCase() === SHARED.STATUS_PENDING || \r\n document.status?.toLowerCase() === SHARED.STATUS_PENDING;\r\n \r\n return !!(document.documentUrl && !isPending);\r\n }\r\n} ","/**\r\n * Constants for Document History labels and styling\r\n */\r\nexport const DOCUMENT_HISTORY = {\r\n // Document History Labels\r\n LABELS: {\r\n DOCUMENT_REQUESTED: 'Document Requested',\r\n DOCUMENT_UPLOADED: 'Document Uploaded',\r\n DOCUMENT_REJECTED: 'Document Rejected',\r\n DOCUMENT_ACCEPTED: 'Document Accepted'\r\n },\r\n\r\n // Icon classes for different actions\r\n ICONS: {\r\n DOCUMENT_REQUESTED: 'pi pi-file',\r\n DOCUMENT_UPLOADED: 'pi pi-cloud-upload',\r\n DOCUMENT_REJECTED: 'pi pi-times',\r\n DOCUMENT_ACCEPTED: 'pi pi-check'\r\n },\r\n\r\n // Text color classes - matching the design in the image\r\n TEXT_COLORS: {\r\n DOCUMENT_REQUESTED: 'text-gray-700', // Dark gray for better readability\r\n DOCUMENT_UPLOADED: 'text-green-700', // Dark green for uploaded\r\n DOCUMENT_REJECTED: 'text-red-700', // Dark red for rejected\r\n DOCUMENT_ACCEPTED: 'text-green-700' // Dark green for accepted\r\n },\r\n\r\n // Background color classes - matching the light gray design from image\r\n BG_COLORS: {\r\n DOCUMENT_REQUESTED: 'bg-gray-100', // Light gray like in the image\r\n DOCUMENT_UPLOADED: 'bg-green-50', // Very light green\r\n DOCUMENT_REJECTED: 'bg-red-50', // Very light red\r\n DOCUMENT_ACCEPTED: 'bg-green-50' // Very light green\r\n },\r\n\r\n // Border color classes - subtle borders\r\n BORDER_COLORS: {\r\n DOCUMENT_REQUESTED: 'border-gray-300', // Medium gray border\r\n DOCUMENT_UPLOADED: 'border-green-300', // Light green border\r\n DOCUMENT_REJECTED: 'border-red-300', // Light red border\r\n DOCUMENT_ACCEPTED: 'border-green-300' // Light green border\r\n },\r\n\r\n // Icon background color classes - matching the circular icon design\r\n ICON_BG_COLORS: {\r\n DOCUMENT_REQUESTED: 'icon-bg-blue', // Blue for requested (as shown in image)\r\n DOCUMENT_UPLOADED: 'icon-bg-green', // Green for uploaded\r\n DOCUMENT_REJECTED: 'icon-bg-red', // Red for rejected\r\n DOCUMENT_ACCEPTED: 'icon-bg-green' // Green for accepted\r\n }\r\n}; ","import { Injectable } from '@angular/core';\r\nimport { DOCUMENT_HISTORY } from '../constant/DOCUMENT_HISTORY';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\n/**\r\n * Service for handling document history styling logic\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentHistoryStyleService {\r\n\r\n constructor() {}\r\n\r\n /**\r\n * Get the appropriate icon class based on the action label\r\n */\r\n getActionIcon(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate color class based on the action label\r\n */\r\n getActionColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate background color class based on the action label\r\n */\r\n getActionBgColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate border color class based on the action label\r\n */\r\n getActionBorderColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate icon background color class based on the action label\r\n */\r\n getActionIconBgColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Check if a section has valid content to display\r\n */\r\n checkValidContent(section: any): boolean {\r\n return section.list && section.list.length > 0 && \r\n section.list.some((item:any) => \r\n item.label || \r\n item.requestDescription || \r\n item.documentUrl || \r\n item.userName\r\n );\r\n }\r\n\r\n getAccordionClass(section: any): string {\r\n if (!section.list || section.list.length === 0) {\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n\r\n const firstItem = section.list[0];\r\n const label = firstItem.label;\r\n\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return SHARED.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return SHARED.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return SHARED.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n default:\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n} ","import { Injectable } from '@angular/core';\r\nimport { DocumentHistoryItem, DocumentHistorySection } from '../models/document-history.model';\r\nimport { DocumentHistoryStyleService } from './document-history-style.service';\r\nimport { DOCUMENT_HISTORY } from '../constant/DOCUMENT_HISTORY';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { ERRORS } from '../../../Shared/constant/ERROR';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n// Extended interface for processed items with computed properties\r\ninterface ProcessedDocumentHistoryItem extends DocumentHistoryItem {\r\n actionIcon: string;\r\n actionColor: string;\r\n actionBgColor: string;\r\n actionBorderColor: string;\r\n actionIconBgColor: string;\r\n}\r\n\r\ninterface ProcessedDocumentHistorySection extends DocumentHistorySection {\r\n list: ProcessedDocumentHistoryItem[];\r\n accordionClass?: string;\r\n hasValidContent?: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentHistoryService {\r\n\r\n constructor(private documentHistoryStyleService: DocumentHistoryStyleService, private http : HttpClient) {}\r\n\r\n /**\r\n * Get the CSS class for accordion styling based on the section's label\r\n */\r\n private getAccordionClass(section: ProcessedDocumentHistorySection): string {\r\n if (!section.list || section.list.length === 0) {\r\n return SHARED.DOCUMENT_REQUESTED; // Default class\r\n }\r\n\r\n const firstItem = section.list[0];\r\n const label = firstItem.label;\r\n\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return SHARED.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return SHARED.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return SHARED.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n default:\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Check if a section has valid content to display\r\n */\r\n private checkValidContent(section: ProcessedDocumentHistorySection): boolean {\r\n return section.list && section.list.length > 0 && \r\n section.list.some(item => \r\n item.requestDescription !== SHARED.EMPTY && \r\n item.documentUrl !== SHARED.EMPTY && \r\n (item.userName !== SHARED.EMPTY && item.userName !== SHARED.UNKNOWN_USER)\r\n );\r\n }\r\n\r\n /**\r\n * Process history data to add computed properties\r\n */\r\n processHistoryData(historyData: DocumentHistorySection[]): ProcessedDocumentHistorySection[] {\r\n if (!historyData) {\r\n return SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n return historyData.map(section => {\r\n const processedSection: ProcessedDocumentHistorySection = {\r\n ...section,\r\n list: section.list.map(item => ({\r\n ...item,\r\n dateTime: item.dateTime || ERRORS.NO_VALUE_FOUND,\r\n actionIcon: this.documentHistoryStyleService.getActionIcon(item.label),\r\n actionColor: this.documentHistoryStyleService.getActionColor(item.label),\r\n actionBgColor: this.documentHistoryStyleService.getActionBgColor(item.label),\r\n actionBorderColor: this.documentHistoryStyleService.getActionBorderColor(item.label),\r\n actionIconBgColor: this.documentHistoryStyleService.getActionIconBgColor(item.label)\r\n }))\r\n };\r\n\r\n // Add accordion class based on the first item's label\r\n processedSection.accordionClass = this.getAccordionClass(processedSection);\r\n \r\n // Add hasValidContent property\r\n processedSection.hasValidContent = this.checkValidContent(processedSection);\r\n\r\n return processedSection;\r\n });\r\n }\r\n\r\n /**\r\n * Downloads a document when clicked\r\n * @param documentUrl - The URL of the document to download\r\n * @param docName - The name of the document\r\n */\r\n downloadDocument(documentUrl: string, docName?: string): void {\r\n if (!documentUrl) {\r\n console.warn(ERRORS.NO_DOCUMENT_URL);\r\n return;\r\n }\r\n this.http.get(documentUrl, { responseType: 'blob' }).subscribe({\r\n next: (blob) => {\r\n const blobUrl = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = blobUrl;\r\n a.download = docName ?? SHARED.DOCUMENT;\r\n a.style.display = SHARED.NONE;\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n window.URL.revokeObjectURL(blobUrl);\r\n },\r\n error: (err) => {\r\n console.error(ERRORS.DOWNLOAD_FAIL, err);\r\n }\r\n });\r\n }\r\n} ","import { Component, Input } from '@angular/core';\nimport { DocumentHistorySection } from '../../models/document-history.model';\nimport { SHARED } from '../../../../Shared/constant/SHARED';\nimport { DocumentHistoryService } from '../../services/document-history.service';\n\n// Extended interface for processed items with computed properties\ninterface ProcessedDocumentHistoryItem {\n label: string;\n dateTime: string;\n requestDescription: string;\n userName: string;\n userRole: string;\n documentUrl?: string;\n docName?: string;\n actionIcon: string;\n actionColor: string;\n actionBgColor: string;\n actionBorderColor: string;\n actionIconBgColor: string;\n}\n\ninterface ProcessedDocumentHistorySection extends DocumentHistorySection {\n list: ProcessedDocumentHistoryItem[];\n accordionClass?: string;\n hasValidContent?: boolean;\n}\n\n/**\n * Component for displaying document history in a timeline format.\n */\n@Component({\n selector: 'document-history',\n standalone: false,\n templateUrl: './document-history.component.html',\n styleUrls: ['./document-history.component.scss']\n})\nexport class DocumentHistoryComponent {\n \n /**\n * Input data for document history sections\n */\n @Input() historyData: DocumentHistorySection[] = SHARED.EMPTY_ARRAY;\n \n /**\n * Whether to show the history component\n */\n @Input() showHistory: boolean = false;\n\n /**\n * Active accordion index for controlling expand/collapse\n */\n activeAccordionIndex: number = 0;\n\n /**\n * Whether the accordion is expanded\n */\n isAccordionExpanded: boolean = true;\n\n constructor(private documentHistoryService: DocumentHistoryService) {}\n\n /**\n * Handle accordion open event\n */\n onAccordionOpen(): void {\n this.isAccordionExpanded = true;\n this.activeAccordionIndex = 0;\n }\n\n /**\n * Handle accordion close event\n */\n onAccordionClose(): void {\n this.isAccordionExpanded = false;\n this.activeAccordionIndex = -1;\n }\n\n /**\n * Toggle accordion state\n */\n toggleAccordion(): void {\n if (this.isAccordionExpanded) {\n this.onAccordionClose();\n } else {\n this.onAccordionOpen();\n }\n }\n\n /**\n * Process history data to add computed properties\n */\n get processedHistoryData(): ProcessedDocumentHistorySection[] {\n return this.documentHistoryService.processHistoryData(this.historyData);\n }\n\n /**\n * Downloads a document when clicked\n * @param documentUrl - The URL of the document to download\n * @param docName - The name of the document\n */\n downloadDocument(documentUrl: string, docName?: string): void {\n this.documentHistoryService.downloadDocument(documentUrl, docName);\n }\n} ","<div class=\"document-history-container\" *ngIf=\"showHistory && historyData.length > 0\">\r\n <div class=\"history-sections\">\r\n <div class=\"history-section\" *ngFor=\"let section of processedHistoryData\">\r\n <div *ngIf=\"section.header === 'Initial Request' && section.hasValidContent\" \r\n class=\"initial-request-section\"\r\n [ngClass]=\"section.accordionClass\">\r\n <p-accordion [activeIndex]=\"activeAccordionIndex\" \r\n (onOpen)=\"onAccordionOpen()\" \r\n (onClose)=\"onAccordionClose()\">\r\n <p-accordionTab [header]=\"section.header\">\r\n <div class=\"history-timeline\" *ngIf=\"section.hasValidContent\">\r\n <div class=\"timeline-item\" *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-card\" [ngClass]=\"item.actionBgColor\">\r\n <div class=\"card-header\">\r\n <div class=\"action-info\">\r\n <div class=\"action-icon\" [ngClass]=\"item.actionIconBgColor\">\r\n <i [class]=\"item.actionIcon\"></i>\r\n </div>\r\n <span class=\"action-label\" [ngClass]=\"item.actionColor\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n <div class=\"timestamp\">\r\n {{ item.dateTime }}\r\n </div>\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"card-description\" *ngIf=\"item.requestDescription\">\r\n <p class=\"description-text\">{{ item.requestDescription ?? 'No Request' }}</p>\r\n </div>\r\n \r\n <!-- Document details if URL exists -->\r\n <div class=\"document-details\" *ngIf=\"item.documentUrl\">\r\n <div class=\"document-card\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <div class=\"document-text\">\r\n <div class=\"document-title\">Document</div>\r\n <div class=\"document-filename clickable\" \r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\"\r\n title=\"Click to download\">\r\n {{ item.docName || 'Document' }}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button class=\"action-btn download-btn\" \r\n title=\"Download\"\r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\">\r\n <i class=\"pi pi-download\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- User information -->\r\n <div class=\"user-info\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Show message if no valid content -->\r\n <div class=\"no-content-message\" *ngIf=\"!section.hasValidContent\">\r\n <p>No initial request details available.</p>\r\n </div>\r\n </p-accordionTab>\r\n </p-accordion>\r\n </div>\r\n \r\n <!-- Document History as regular timeline -->\r\n <div *ngIf=\"section.header !== 'Initial Request'\" class=\"document-history-section\">\r\n <div class=\"section-header\" *ngIf=\"section.header\">\r\n <h4 class=\"section-title\">{{ section.header }}</h4>\r\n </div>\r\n \r\n <div class=\"history-timeline\">\r\n <div class=\"timeline-item\" *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-card\" [ngClass]=\"item.actionBgColor\">\r\n <!-- Header with icon and timestamp -->\r\n <div class=\"card-header\">\r\n <div class=\"action-info\">\r\n <div class=\"action-icon\" [ngClass]=\"item.actionIconBgColor\">\r\n <i [class]=\"item.actionIcon\"></i>\r\n </div>\r\n <span class=\"action-label\" [ngClass]=\"item.actionColor\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n <div class=\"timestamp\">\r\n {{ item.dateTime }}\r\n </div>\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"card-description\" *ngIf=\"item.requestDescription\">\r\n <p class=\"description-text\">{{ item.requestDescription }}</p>\r\n </div>\r\n \r\n <!-- Document details if URL exists -->\r\n <div class=\"document-details\" *ngIf=\"item.documentUrl\">\r\n <div class=\"document-card\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <div class=\"document-text\">\r\n <div class=\"document-title\">Document</div>\r\n <div class=\"document-filename clickable\" \r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\"\r\n title=\"Click to download\">\r\n {{ item.docName || 'Document' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- User information -->\r\n <div class=\"user-info\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\nexport interface DocumentAction {\r\n type: typeof SHARED.REJECT_ACTION | typeof SHARED.ACCEPT_ACTION | typeof SHARED.DELETE_ACTION;\r\n note?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentActionsService {\r\n\r\n /**\r\n * Calculates the card class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the card\r\n */\r\n calculateCardClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-card`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.CARD_ACCEPTED;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.CARD_REJECTED;\r\n default:\r\n return SHARED.CARD_PENDING;\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the reject button class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the reject button\r\n */\r\n calculateRejectButtonClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-reject`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.BUTTON_SECONDARY_REJECT;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.BUTTON_PRIMARY_REJECT;\r\n default:\r\n return SHARED.BUTTON_DEFAULT_REJECT;\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the accept button class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the accept button\r\n */\r\n calculateAcceptButtonClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-accept`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.BUTTON_PRIMARY_ACCEPT;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.BUTTON_SECONDARY_ACCEPT;\r\n default:\r\n return SHARED.BUTTON_DEFAULT_ACCEPT;\r\n }\r\n }\r\n\r\n /**\r\n * Creates an accept action\r\n * @param note - The acceptance note\r\n * @returns {DocumentAction} The accept action\r\n */\r\n createAcceptAction(note: string): DocumentAction {\r\n return {\r\n type: SHARED.ACCEPT_ACTION as 'accept',\r\n note: note\r\n };\r\n }\r\n\r\n /**\r\n * Creates a reject action\r\n * @param note - The rejection note\r\n * @returns {DocumentAction} The reject action\r\n */\r\n createRejectAction(note: string): DocumentAction {\r\n return {\r\n type: SHARED.REJECT_ACTION as 'reject',\r\n note: note\r\n };\r\n }\r\n\r\n /**\r\n * Creates a delete action\r\n * @returns {DocumentAction} The delete action\r\n */\r\n createDeleteAction(): DocumentAction {\r\n return {\r\n type: SHARED.DELETE_ACTION as 'delete'\r\n };\r\n }\r\n} ","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentActionsService, DocumentAction } from '../../services/document-actions.service';\r\nimport { ConfirmationDialogComponent } from '../../../../Shared/components/confirmation-dialog/confirmation-dialog.component';\r\n\r\n@Component({\r\n selector: 'document-actions',\r\n templateUrl: './document-actions.component.html',\r\n styleUrls: ['./document-actions.component.scss'],\r\n standalone: false\r\n})\r\nexport class DocumentActionsComponent implements OnChanges {\r\n readonly SHARED = SHARED;\r\n \r\n @Input() document?: any;\r\n @Input() documentId?: string;\r\n @Input() currentStatus?: typeof SHARED.STATUS_PENDING | typeof SHARED.STATUS_ACCEPTED | typeof SHARED.STATUS_REJECTED_LOWERCASE;\r\n @Input() isLoading?: boolean = false;\r\n @Input() isUploaded?: boolean = false;\r\n @Input() statusId?: string;\r\n @Output() actionPerformed = new EventEmitter<DocumentAction>();\r\n\r\n showAcceptDialog = false;\r\n showRejectDialog = false;\r\n acceptNote = SHARED.EMPTY;\r\n private _rejectNote = SHARED.EMPTY;\r\n\r\n // Action processing flags\r\n isAccepting = false;\r\n isRejecting = false;\r\n\r\n // Computed properties for template\r\n cardClass: string = SHARED.CARD_PENDING;\r\n rejectButtonClass: string = SHARED.BUTTON_DEFAULT_REJECT;\r\n acceptButtonClass: string = SHARED.BUTTON_DEFAULT_ACCEPT;\r\n isRejectNoteEmpty: boolean = true;\r\n\r\n @ViewChild(ConfirmationDialogComponent) confirmationDialog!: ConfirmationDialogComponent;\r\n\r\n constructor(\r\n private documentActionsService: DocumentActionsService\r\n ) {}\r\n\r\n get rejectNote(): string {\r\n return this._rejectNote;\r\n }\r\n\r\n set rejectNote(value: string) {\r\n this._rejectNote = value;\r\n this.updateRejectNoteEmpty();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.updateComputedProperties();\r\n \r\n // Reset action flags when isLoading changes to false\r\n if (changes['isLoading'] && !this.isLoading) {\r\n this.resetActionFlags();\r\n }\r\n }\r\n\r\n /**\r\n * Updates computed properties based on currentStatus and statusId\r\n */\r\n private updateComputedProperties(): void {\r\n this.cardClass = this.documentActionsService.calculateCardClass(this.currentStatus, this.statusId);\r\n this.rejectButtonClass = this.documentActionsService.calculateRejectButtonClass(this.currentStatus, this.statusId);\r\n this.acceptButtonClass = this.documentActionsService.calculateAcceptButtonClass(this.currentStatus, this.statusId);\r\n this.updateRejectNoteEmpty();\r\n }\r\n\r\n /**\r\n * Updates the isRejectNoteEmpty property based on current rejectNote value\r\n */\r\n private updateRejectNoteEmpty(): void {\r\n this.isRejectNoteEmpty = !this.rejectNote || this.rejectNote.trim() === SHARED.EMPTY;\r\n }\r\n\r\n /**\r\n * Resets the action processing flags\r\n */\r\n private resetActionFlags(): void {\r\n this.isAccepting = false;\r\n this.isRejecting = false;\r\n }\r\n\r\n onAcceptClick(): void {\r\n this.showAcceptDialog = true;\r\n }\r\n\r\n onRejectClick(): void {\r\n this.showRejectDialog = true;\r\n }\r\n\r\n onDeleteClick(): void {\r\n const documentName = this.document?.name || this.document?.fileName || 'this document';\r\n this.confirmationDialog.confirmDelete(\r\n documentName,\r\n () => {\r\n this.actionPerformed.emit(this.documentActionsService.createDeleteAction());\r\n },\r\n () => {}\r\n );\r\n }\r\n\r\n onAcceptConfirm(): void {\r\n this.isAccepting = true;\r\n this.actionPerformed.emit(this.documentActionsService.createAcceptAction(this.acceptNote));\r\n this.acceptNote = SHARED.EMPTY;\r\n this.showAcceptDialog = false;\r\n }\r\n\r\n onRejectConfirm(): void {\r\n this.isRejecting = true;\r\n this.actionPerformed.emit(this.documentActionsService.createRejectAction(this.rejectNote));\r\n this.rejectNote = SHARED.EMPTY;\r\n this.showRejectDialog = false;\r\n }\r\n\r\n onCancel(): void {\r\n this.showAcceptDialog = false;\r\n this.showRejectDialog = false;\r\n this.acceptNote = SHARED.EMPTY;\r\n this.rejectNote = SHARED.EMPTY;\r\n }\r\n\r\n} ","<div class=\"document-actions-container\" *ngIf=\"!document?.isUploaded\">\r\n <div class=\"actions-card\" [ngClass]=\"cardClass\">\r\n <div class=\"actions-buttons\">\r\n <!-- Reject Button -->\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn reject-btn\" [ngClass]=\"rejectButtonClass\" (click)=\"onRejectClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE || isRejecting\">\r\n <i class=\"pi pi-times\" *ngIf=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isRejecting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_REJECTED_LOWERCASE ? SHARED.BUTTON_LABEL_REJECTED :\r\n SHARED.BUTTON_LABEL_REJECT }}</span>\r\n </button>\r\n\r\n <!-- Accept Button -->\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn accept-btn\" [ngClass]=\"acceptButtonClass\" (click)=\"onAcceptClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_ACCEPTED || isAccepting\">\r\n <i class=\"pi pi-check\" *ngIf=\"currentStatus === SHARED.STATUS_ACCEPTED\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isAccepting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_ACCEPTED ? SHARED.BUTTON_LABEL_ACCEPTED : SHARED.BUTTON_LABEL_ACCEPT\r\n }}</span>\r\n </button>\r\n\r\n <!-- Delete Button -->\r\n @if(document?.isUploaded){\r\n <button class=\"action-btn delete-btn\" (click)=\"onDeleteClick()\" [disabled]=\"isLoading\"\r\n [permission]=\"'documents-deleteDocumentByDocumentId'\" pTooltip=\"Delete Document\" tooltipPosition=\"top\">\r\n <i class=\"pi pi-trash\"></i>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-confirmation-dialog></app-confirmation-dialog>\r\n\r\n<p-dialog [(visible)]=\"showAcceptDialog\" [header]=\"SHARED.ACCEPT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"acceptNote\" class=\"note-label\">{{ SHARED.ACCEPT_NOTE_LABEL }}</label>\r\n <textarea id=\"acceptNote\" pInputTextarea [(ngModel)]=\"acceptNote\" [placeholder]=\"SHARED.ACCEPT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.ACCEPT_BUTTON_LABEL\" class=\"p-button-success\" (click)=\"onAcceptConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [(visible)]=\"showRejectDialog\" [header]=\"SHARED.REJECT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"rejectNote\" class=\"note-label\">{{ SHARED.REJECT_NOTE_LABEL }}</label>\r\n <textarea id=\"rejectNote\" pInputTextarea [(ngModel)]=\"rejectNote\" [placeholder]=\"SHARED.REJECT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.REJECT_BUTTON_LABEL\" class=\"p-button-danger\" [disabled]=\"isRejectNoteEmpty\"\r\n (click)=\"onRejectConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnChanges,\r\n OnDestroy,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { SHARED, SUPPORTED_IMAGE_TYPES } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHttpService } from '../../services/document-http.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { DocumentListItem } from '../../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../../models/document-history.model';\r\nimport { DocumentAction } from '../../services/document-actions.service';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DocumentViewerService, DocumentViewerState } from '../../services/document-viewer.service';\r\n\r\n/**\r\n * Component for viewing and managing document details.\r\n * @class DocumentViewerComponent\r\n * @typedef {DocumentViewerComponent}\r\n */\r\n@Component({\r\n selector: 'document-viewer',\r\n templateUrl: './document-viewer.component.html',\r\n standalone : false,\r\n styleUrl: './document-viewer.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DocumentViewerComponent implements OnChanges, OnDestroy {\r\n /**\r\n * Get the selected document by user.\r\n * @type {*}\r\n */\r\n @Input() selectedDocument?: DocumentListItem; // <-- Made optional to prevent undefined issues\r\n /**\r\n * Get the selected document by user.\r\n * @type {*}\r\n */\r\n @Input() documentList?: DocumentListItem[]; // <-- Made optional to prevent undefined issues\r\n /**\r\n * The context ID for API calls\r\n * @type {string}\r\n */\r\n @Input() contextId?: string;\r\n\r\n /**\r\n * Event emitted when document status is updated to refresh the document list\r\n * @type {EventEmitter<void>}\r\n */\r\n @Output() documentStatusUpdated = new EventEmitter<{ actionType?: string }>();\r\n\r\n /**\r\n * Indicates whether a checkbox is selected.\r\n * @type {boolean}\r\n */\r\n checked: boolean = false;\r\n\r\n /**\r\n * Reference to the dynamic dialog used for displaying additional details.\r\n * @type {(DynamicDialogRef | undefined)}\r\n */\r\n ref: DynamicDialogRef | undefined;\r\n\r\n /**\r\n * Indicates whether the document has been verified.\r\n * @type {boolean}\r\n */\r\n isVerified: boolean = false;\r\n\r\n /**\r\n * Messages for user feedback\r\n * @type {any[]}\r\n */\r\n messages: any[] = [];\r\n\r\n /**\r\n * Current state from the service\r\n * @type {DocumentViewerState}\r\n */\r\n currentState: DocumentViewerState = {\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: SHARED.STATUS_PENDING as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n };\r\n\r\n /**\r\n * Computed property to determine if the selected document is an image\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentImage(): boolean {\r\n return this.documentViewerService.isImage(this.selectedDocument?.contentType);\r\n }\r\n\r\n /**\r\n * Computed property to determine if the selected document is a PDF\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentPdf(): boolean {\r\n return this.selectedDocument?.contentType === 'application/pdf';\r\n }\r\n\r\n /**\r\n * Computed property to determine if the selected document has an unsupported content type\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentUnsupported(): boolean {\r\n return !this.isSelectedDocumentImage && !this.isSelectedDocumentPdf;\r\n }\r\n\r\n /**\r\n * Holds the subscription to manage observable cleanup.\r\n * @private\r\n * @type {Subscription}\r\n */\r\n private subscription: Subscription = new Subscription();\r\n\r\n /**\r\n * Initializes a new instance of the DocumentViewerComponent.\r\n * @param {DocumentHttpService} documentHttpService - Handle the http service.\r\n * @param {DocumentService} documentService - Handle the states.\r\n * @param {DocumentViewerService} documentViewerService - Handle the viewer business logic.\r\n */\r\n constructor(\r\n public documentHttpService : DocumentHttpService, \r\n private documentService: DocumentHelperService,\r\n private messageService: MessageService,\r\n private documentViewerService: DocumentViewerService,\r\n ) {\r\n // Subscribe to state changes from the service\r\n this.subscription.add(\r\n this.documentViewerService.state$.subscribe(state => {\r\n this.currentState = state;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches the alerts for the selected document.\r\n * @returns {void}\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['selectedDocument'] && this.selectedDocument) {\r\n this.documentViewerService.updateSelectedDocument(this.selectedDocument);\r\n }\r\n }\r\n\r\n /**\r\n * Handles document selection from template\r\n * @param document The selected document\r\n */\r\n handleSelectedDocument(document: DocumentListItem): void {\r\n this.selectedDocument = document;\r\n this.documentViewerService.updateSelectedDocument(document);\r\n }\r\n\r\n /**\r\n * Determines if the given content type is an image.\r\n * @param {string | undefined} contentType - The MIME type of the content.\r\n * @returns {boolean} `true` if the content type is an image; otherwise, `false`.\r\n */\r\n isImage(contentType?: string): boolean {\r\n return this.documentViewerService.isImage(contentType);\r\n }\r\n\r\n /**\r\n * Handles document actions from the actions component\r\n * @param {DocumentAction} action - The action performed\r\n */\r\n handleDocumentAction(action: DocumentAction): void {\r\n this.documentViewerService.handleDocumentAction(action, this.contextId);\r\n this.documentStatusUpdated.emit({ actionType: action.type });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"document-viewer-container\">\r\n <div class=\"main-content\">\r\n <p-messages [(value)]=\"messages\" [enableService]=\"false\"></p-messages>\r\n \r\n <div class=\"content-grid\">\r\n @if(selectedDocument){\r\n <div class=\"document-preview\">\r\n @if(isSelectedDocumentImage){\r\n <div class=\"img-container\">\r\n <img\r\n [src]=\"selectedDocument?.documentUrl || ''\"\r\n class=\"uploadedImages\"\r\n alt=\"Document Image\"\r\n />\r\n </div>\r\n }@else if(isSelectedDocumentPdf){\r\n <div class=\"pdf-container\">\r\n <pdf-viewer\r\n [src]=\"selectedDocument?.documentUrl || ''\"\r\n [rotation]=\"0\"\r\n [original-size]=\"false\"\r\n [show-all]=\"true\"\r\n [fit-to-page]=\"false\"\r\n [zoom]=\"0.7\"\r\n [zoom-scale]=\"'page-width'\"\r\n [stick-to-page]=\"false\"\r\n [render-text]=\"true\"\r\n [external-link-target]=\"'blank'\"\r\n [autoresize]=\"true\"\r\n [show-borders]=\"false\"\r\n style=\"width: 100%; height: 100%\"\r\n ></pdf-viewer>\r\n </div>\r\n }@else if(isSelectedDocumentUnsupported){\r\n <div class=\"incorrect-docType\">\r\n ContentType is incorrect.\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"left-part col-12 md:col-12 pt-0\">\r\n \r\n <!-- <div class=\"alerts mb-4 pb-1\">\r\n <button\r\n type=\"button\"\r\n *ngIf=\"\r\n (alertData?.status !== 'Pending' && !!alertData?.status) ||\r\n alertData?.isAlert === false\r\n \"\r\n class=\"bg-green-500 border-none border-round-md flex align-items-center mb-3 p-2 px-3\"\r\n >\r\n <i\r\n class=\"pi pi-verified mr-2 cursor-pointer\"\r\n [ngStyle]=\"{\r\n color:\r\n alertData?.status === 'Pending' &&\r\n alertData?.isAlert !== false\r\n ? '#FFFFFF'\r\n : '#8A8EA6'\r\n }\"\r\n style=\"font-size: 20px\"\r\n ></i>\r\n <span class=\"font-semibold text-white\">Verified</span>\r\n </button>\r\n <div\r\n class=\"card mb-0\"\r\n [ngClass]=\"\r\n (alertData?.status === 'Pending' || !alertData?.status) &&\r\n alertData?.isAlert !== false\r\n ? 'alert-card'\r\n : 'success-alert'\r\n \"\r\n >\r\n <div class=\"flex align-items-center mb-2 pb-1\" *ngIf=\"alertData?.status !== 'Verified'\">\r\n <h4 class=\"mr-3 mt-0 mb-0 text-color font-bold\" style=\"font-size: 21px; font-weight: bold; border-color: rgba(68, 72, 109, 0.2) ;\" >Alerts</h4>\r\n <i\r\n class=\"pi pi-exclamation-triangle\"\r\n style=\"font-size: 20px\"\r\n [ngStyle]=\"{\r\n color:\r\n (alertData?.status === 'Pending' || !alertData?.status) &&\r\n alertData?.isAlert !== false\r\n ? '#FB392D'\r\n : '#8A8EA6'\r\n }\"\r\n ></i>\r\n </div>\r\n <p class=\"text-color mb-0\">{{ alertData?.alertMessage }}</p>\r\n </div>\r\n </div>\r\n -->\r\n \r\n <div class=\"sidebar\">\r\n <document-actions\r\n [document]=\"selectedDocument\"\r\n [documentId]=\"selectedDocument?._id\"\r\n [currentStatus]=\"currentState.documentStatus\"\r\n [isLoading]=\"currentState.isActionLoading\"\r\n [isUploaded]=\"currentState.documentIsUploaded\"\r\n [statusId]=\"selectedDocument?.statusId\"\r\n (actionPerformed)=\"handleDocumentAction($event)\">\r\n </document-actions>\r\n \r\n <document-history \r\n [historyData]=\"currentState.documentHistory\" \r\n [showHistory]=\"currentState.showDocumentHistory\">\r\n </document-history>\r\n \r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentListItem, DocumentListResponse } from '../../models/document-list-response.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { TableData } from '../../../../Shared/components/table-primary/table-primary.model';\r\nimport { DocumentListService } from '../../services/document-list.service';\r\nimport { Message } from 'primeng/api';\r\nimport { ERRORS } from '../../../../Shared/constant/ERROR';\r\n\r\n/**\r\n * This component is responsible for displaying and managing a list of documents.\r\n * Provides functionality for file upload, document selection, and dialog management.\r\n * @class DocumentListComponent\r\n */\r\n@Component({\r\n selector: 'lib-document-list',\r\n standalone: false,\r\n templateUrl: './document-list.component.html',\r\n styleUrls: ['./document-list.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class DocumentListComponent implements OnInit, OnDestroy, OnChanges {\r\n\r\n /**\r\n * Represents the context ID for the document list.\r\n * This value is passed from the parent component.\r\n * @type {string}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n\r\n /**\r\n * The document list response data passed from the parent component.\r\n * @type {DocumentListResponse[] | null}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() documentListResponse: DocumentListResponse[] | null = null;\r\n\r\n /**\r\n * Subscription to document list response from store\r\n */\r\n private documentListSubscription: Subscription = new Subscription();\r\n\r\n /**\r\n * The currently selected document.\r\n * @type {DocumentModel}\r\n * @memberof DocumentListComponent\r\n */\r\n selectedDocument!: DocumentListItem;\r\n\r\n /**\r\n * Default visibility of the sidebar.\r\n * @type {boolean}\r\n * @memberof DocumentListComponent\r\n */\r\n isSidebarVisible: boolean = SHARED.FALSE;\r\n\r\n /**\r\n * Default visibility of the messages.\r\n * @type {Message[]}\r\n * @memberof DocumentListComponent\r\n */\r\n messages: Message[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Default visibility of the dialog.\r\n * @type {boolean}\r\n * @memberof DocumentListComponent\r\n */\r\n isdialogVisible: boolean = SHARED.FALSE;\r\n\r\n /**\r\n * The list of documents to display.\r\n * This value is passed from the parent component.\r\n * @type {DocumentModel[]}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() documentList: DocumentListItem[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Available document types for selection.\r\n * @type {string[]}\r\n * @memberof DocumentListComponent\r\n */\r\n options: any[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The selected option for the document type.\r\n * @type {(string | null)}\r\n * @memberof DocumentListComponent\r\n */\r\n selectedOption: string | null = null;\r\n \r\n /**\r\n * The file name associated with the document.\r\n * It may be undefined until a file is selected or loaded.\r\n * @type {string | undefined}\r\n */\r\n fileName!: string | undefined;\r\n \r\n /**\r\n * Table data for each category\r\n */\r\n categoryTables: TableData[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Document categories from the response\r\n */\r\n documentCategories: DocumentListResponse[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Completion counts for each category\r\n */\r\n categoryCompletionCounts: string[] = SHARED.EMPTY_ARRAY;\r\n deleteMessage: Message[] = SHARED.EMPTY_ARRAY;\r\n /**\r\n * Getter to format category labels with proper suffix\r\n */\r\n get formattedCategoryLabels(): string[] {\r\n return this.documentCategories.map(category => {\r\n return category.label.endsWith(SHARED.DOCUMENTS) ? category.label : `${category.label} ${SHARED.DOCUMENTS}`;\r\n });\r\n }\r\n\r\n /**\r\n * Creates an instance of DocumentListComponent.\r\n * @class\r\n * @param {DocumentListService} documentListService - The service responsible for document list operations.\r\n */\r\n constructor(\r\n private documentListService: DocumentListService\r\n ) {}\r\n\r\n /**\r\n * Handles changes to input properties\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\r\n this.documentListService.refreshDocumentListForNewContext(this.contextId);\r\n }\r\n }\r\n\r\n /** \r\n * Initializes the component by setting up document list subscription.\r\n */\r\n ngOnInit(): void {\r\n this.setupDocumentListSubscription();\r\n }\r\n\r\n\r\n /**\r\n * Handles the visibility of the sidebar.\r\n * @param {boolean} isVisible - Indicates whether the sidebar should be visible or not.\r\n * @memberof DocumentListComponent\r\n */\r\n handleOpenSideBar(isVisible: boolean): void {\r\n this.isSidebarVisible = isVisible;\r\n }\r\n\r\n /**\r\n * Builds document categories from the API response\r\n */\r\n buildDocumentCategories(): void {\r\n const result = this.documentListService.buildDocumentCategories(this.documentListResponse);\r\n this.documentCategories = result.documentCategories;\r\n this.categoryTables = result.categoryTables;\r\n this.categoryCompletionCounts = result.categoryCompletionCounts;\r\n }\r\n\r\n /**\r\n * Sets up subscription to document list response from store\r\n */\r\n setupDocumentListSubscription(): void {\r\n this.documentListSubscription.add(\r\n this.documentListService.setupDocumentListSubscription().subscribe({\r\n next: (response: any) => {\r\n this.documentListResponse = response;\r\n this.buildDocumentCategories();\r\n },\r\n error: (error: any) => {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENTS, error);\r\n }\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Handles table row click event\r\n */\r\n handleTableRowClick(rowData: any): void {\r\n this.isdialogVisible = SHARED.TRUE;\r\n this.selectedDocument = this.documentListService.handleTableRowClick(rowData);\r\n }\r\n\r\n /**\r\n * Handles the delete action from the table component\r\n * @param {any} rowData - The row data containing the document to delete\r\n */\r\n handleDeleteAction(rowData: any): void {\r\n this.documentListService.handleDeleteAction(rowData, this.contextId)\r\n .subscribe({\r\n next: (response) => {\r\n if (this.selectedDocument && this.selectedDocument._id === rowData._id) {\r\n this.handleCloseModal();\r\n }\r\n this.documentListService.refreshAllDataWithCurrentFilters(this.contextId);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENTS, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Closes the document viewer dialog and resets the selected document\r\n */\r\n handleCloseModal(): void {\r\n this.isdialogVisible = SHARED.FALSE;\r\n this.selectedDocument = {} as DocumentListItem;\r\n this.fileName = SHARED.EMPTY;\r\n }\r\n\r\n /**\r\n * Refreshes the document list after a status update\r\n * @param {boolean} isDeleteAction - Optional flag indicating if this refresh is due to a delete action\r\n */\r\n refreshDocumentList(isDeleteAction: boolean = false): void {\r\n this.documentListService.refreshDocumentList(this.contextId);\r\n if (isDeleteAction) {\r\n this.deleteMessage = [{severity: SHARED.SUCCESS_SEVERITY, detail: SHARED.DOCUMENT_DELETED_SUCCESSFULLY}];\r\n setTimeout(() => {\r\n this.deleteMessage = SHARED.EMPTY_ARRAY;\r\n this.handleCloseModal();\r\n }, 2000);\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup subscriptions on component destroy\r\n */\r\n ngOnDestroy(): void {\r\n this.documentListSubscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"document-viewer\">\r\n <p-dialog [header]=\"selectedDocument?.docName\" [(visible)]=\"isdialogVisible\" [modal]=\"true\" \r\n class=\"w-full h-full document-dailog-wrapper\" [draggable]=\"false\" [closable]=\"true\"\r\n (onHide)=\"handleCloseModal()\">\r\n <p-messages \r\n[(value)]=\"deleteMessage\" \r\n[enableService]=\"false\" \r\n[closable]=\"false\" />\r\n <document-viewer \r\n [selectedDocument]=\"selectedDocument\" \r\n [documentList]=\"documentList\" \r\n [contextId]=\"contextId\" \r\n (documentStatusUpdated)=\"refreshDocumentList($event.actionType === 'delete')\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"w-full flex align-items-center justify-content-between\">\r\n <input type=\"text\" class=\"w-full border-none bg-white h-3rem file-input-wrapper\" pInputText\r\n [(ngModel)]=\"fileName\" />\r\n \r\n </div>\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </document-viewer>\r\n </p-dialog>\r\n</div>\r\n\r\n<div class=\"document-categories-container\">\r\n <div class=\"category\" *ngFor=\"let category of documentCategories; let i = index\">\r\n <div class=\"category-header\">\r\n <div class=\"category-title\">\r\n <h3>{{ formattedCategoryLabels[i] }}</h3>\r\n <p class=\"category-description\">{{ category.categoryDescription }}</p>\r\n </div>\r\n <div class=\"completion-status\">\r\n <span class=\"status-badge\">{{ categoryCompletionCounts[i] }} Complete</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-container\">\r\n <lib-table-primary \r\n [tableData]=\"categoryTables[i]\" \r\n [tableStyle]=\"{ 'min-width': '100%' }\"\r\n (rowClick)=\"handleTableRowClick($event)\"\r\n (deleteAction)=\"handleDeleteAction($event)\">\r\n </lib-table-primary>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { DocumentCategory, DocumentCategoryItem } from '../models/document-category.model';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentMenuService {\r\n\r\n constructor(private documentStore: DocumentStore) {}\r\n\r\n /**\r\n * Gets the category name for a given menu item _id\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n * @returns The category name or null if not found\r\n */\r\n getMenuItemCategory(menuItemId: string, categories: DocumentCategory[]): string | null {\r\n for (const category of categories) {\r\n if (category.items?.some((menuItem: DocumentCategoryItem) => menuItem._id === menuItemId)) {\r\n return category.label;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the menu item by its _id\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n * @returns The menu item or null if not found\r\n */\r\n getMenuItemById(menuItemId: string, categories: DocumentCategory[]): DocumentCategoryItem | null {\r\n for (const category of categories) {\r\n if (category.items) {\r\n const item = category.items.find((menuItem: DocumentCategoryItem) => menuItem._id === menuItemId);\r\n if (item) {\r\n return item;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Handles user list visibility based on menu item category\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n */\r\n handleUserListVisibility(menuItemId: string, categories: DocumentCategory[]): void {\r\n const category = this.getMenuItemCategory(menuItemId, categories);\r\n const menuItem = this.getMenuItemById(menuItemId, categories);\r\n \r\n if (category === SHARED.APPLICATION) {\r\n this.documentStore.setShowUserList(true);\r\n } else if (category === SHARED.APPLICANTS) {\r\n this.documentStore.setShowUserList(true);\r\n } else {\r\n this.documentStore.setShowUserList(false);\r\n this.documentStore.setSelectedUserId(null);\r\n this.documentStore.setSelectedStatus(null);\r\n }\r\n }\r\n\r\n /**\r\n * Handles document status based on selected menu item\r\n * @param menuItemId - The _id of the selected menu item\r\n * @param categories - The list of document categories\r\n */\r\n handleDocumentStatus(menuItemId: string, categories: DocumentCategory[]): void {\r\n const menuItem = this.getMenuItemById(menuItemId, categories);\r\n if (menuItem) {\r\n // You can add logic here to handle document status based on the selected menu item\r\n // For example, filtering documents by status, updating status counts, etc.\r\n console.log('Selected menu item:', menuItem.label, 'with status:', menuItem.status);\r\n }\r\n }\r\n\r\n /**\r\n * Calculates total documents for a menu item\r\n * @param item - The menu item\r\n * @returns Total number of documents\r\n */\r\n getTotalDocuments(item: DocumentCategoryItem): number {\r\n const status = item.status;\r\n // Handle both uppercase and lowercase keys\r\n const pending = status.Pending || status.pending || 0;\r\n const reviewing = status.Reviewing || status.reviewing || 0;\r\n const accepted = status.Accepted || status.approved || 0; // Note: approved maps to Accepted\r\n const rejected = status.Rejected || status.rejected || 0;\r\n \r\n return pending + reviewing + accepted + rejected;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Gets badge value for a menu item\r\n * @param item - The menu item\r\n * @returns Badge value string (e.g., \"2/3\")\r\n */\r\n getBadgeValue(item: DocumentCategoryItem): string {\r\n const approved = this.getApprovedDocuments(item);\r\n const total = this.getTotalDocuments(item);\r\n return `${approved}/${total}`;\r\n }\r\n\r\n /**\r\n * Gets badge severity based on status\r\n * @param item - The menu item\r\n * @returns Badge severity for PrimeNG\r\n */\r\n getBadgeSeverity(item: DocumentCategoryItem): 'success' | 'info' | 'warning' | 'danger' {\r\n const status = item.status;\r\n const total = this.getTotalDocuments(item);\r\n const approved = this.getApprovedDocuments(item);\r\n const rejected = status.Rejected || status.rejected || 0;\r\n \r\n if (total === 0) return 'info';\r\n \r\n // If any docs are rejected, show red\r\n if (rejected > 0) return 'danger';\r\n \r\n // If all docs are approved, show green\r\n if (approved === total && total > 0) return 'success';\r\n \r\n // Otherwise show amber\r\n return 'warning';\r\n }\r\n\r\n /**\r\n * Checks if badge should be shown for a menu item\r\n * @param item - The menu item\r\n * @returns True if badge should be shown\r\n */\r\n shouldShowBadge(item: DocumentCategoryItem): boolean {\r\n return this.getTotalDocuments(item) > 0;\r\n }\r\n\r\n /**\r\n * Calculates approved documents for a menu item\r\n * @param item - The menu item\r\n * @returns Number of approved documents\r\n */\r\n getApprovedDocuments(item: DocumentCategoryItem): number {\r\n const status = item.status;\r\n // Handle both uppercase and lowercase keys, with approved mapping to Accepted\r\n return status.Accepted || status.approved || 0;\r\n }\r\n} ","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentCategory, DocumentCategoryItem } from '../../models/document-category.model';\r\nimport { DocumentMenuService } from '../../services/document-menu.service';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\ninterface MenuItemData {\r\n totalDocuments: number;\r\n approvedDocuments: number;\r\n badgeValue: string;\r\n badgeSeverity: 'success' | 'info' | 'warning' | 'danger';\r\n shouldShowBadge: boolean;\r\n}\r\n@Component({\r\n selector: 'lib-documents-menu',\r\n standalone: false,\r\n templateUrl: './documents-menu.component.html',\r\n styleUrl: './documents-menu.component.scss'\r\n})\r\nexport class DocumentsMenuComponent implements OnInit, OnChanges {\r\n @Input() catagories: DocumentCategory[] = SHARED.EMPTY_ARRAY\r\n @Input() applicationNumber : string = SHARED.EMPTY\r\n @Input() contextId: string = SHARED.EMPTY;\r\n selectedMenuItem: string | null = null;\r\n selectedMenuItemId: string | null = null;\r\n\r\n // Store the categories from the store\r\n private storeCategories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private documentMenuService: DocumentMenuService,\r\n private documentHelperService: DocumentHelperService\r\n ) {}\r\n /**\r\n * Initialize the component\r\n * @returns {void}\r\n * @memberof DocumentsMenuComponent\r\n */\r\n ngOnInit(): void {\r\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItemId => {\r\n this.selectedMenuItemId = menuItemId;\r\n this.selectedMenuItem = this.findMenuItemLabelById(menuItemId);\r\n });\r\n\r\n // Subscribe to document categories from the store\r\n this.documentQuery.selectDocumentCategories().subscribe(categories => {\r\n if (categories && categories.length > 0) {\r\n this.storeCategories = categories;\r\n this.updateMenuItemsData();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle changes to input properties\r\n * @param {SimpleChanges} changes - The changes to the input properties\r\n * @returns {void}\r\n * @memberof DocumentsMenuComponent\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[SHARED.CATAGORIES] && this.catagories) {\r\n this.updateMenuItemsData();\r\n }\r\n \r\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\r\n this.handleContextIdChange();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the categories to use for the menu\r\n * Priority: Store categories > Input categories\r\n */\r\n get categories(): DocumentCategory[] {\r\n const result = this.storeCategories.length > 0 ? this.storeCategories : this.catagories;\r\n return result;\r\n }\r\n\r\n /**\r\n * Finds the label of a menu item by its _id\r\n * @param id The _id to search for\r\n * @returns The label of the menu item or null if not found\r\n */\r\n private findMenuItemLabelById(id: string | null): string | null {\r\n if (!id) return null;\r\n \r\n for (const category of this.categories) {\r\n if (category.items) {\r\n const item = category.items.find(item => item._id === id);\r\n if (item) {\r\n return item.label;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n \r\n /**\r\n * Update menu use catagories\r\n */\r\n private updateMenuItemsData(): void {\r\n this.categories.forEach(category => {\r\n if (category.items) {\r\n category.items.forEach(item => {\r\n const menuData = {\r\n totalDocuments: this.documentMenuService.getTotalDocuments(item),\r\n approvedDocuments: this.documentMenuService.getApprovedDocuments(item),\r\n badgeValue: this.documentMenuService.getBadgeValue(item),\r\n badgeSeverity: this.documentMenuService.getBadgeSeverity(item),\r\n shouldShowBadge: this.documentMenuService.shouldShowBadge(item)\r\n };\r\n (item as any).menuData = menuData;\r\n });\r\n }\r\n });\r\n }\r\n\r\n \r\n /**\r\n * Handle the menu item click\r\n * @param {*} event - Event \r\n * @param {DocumentCategoryItem} item - catagory item\r\n */\r\n onMenuItemClick(event: any, item: DocumentCategoryItem): void {\r\n if (this.selectedMenuItemId === item._id) {\r\n // Immediately clear the selection state\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n \r\n // Update the store\r\n this.documentStore.setSelectedMenuItem(null);\r\n \r\n // Refresh documents\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n \r\n // Force change detection by updating the component state\r\n this.handleDeselection();\r\n } else {\r\n this.selectedMenuItem = item.label;\r\n this.selectedMenuItemId = item._id;\r\n this.documentStore.setSelectedMenuItem(item._id);\r\n this.documentMenuService.handleUserListVisibility(item._id, this.categories);\r\n }\r\n }\r\n\r\n /**\r\n * Handle deselection to ensure immediate visual feedback\r\n */\r\n private handleDeselection(): void {\r\n this.selectedMenuItemId = null;\r\n this.selectedMenuItem = null;\r\n setTimeout(() => {\r\n }, 0);\r\n }\r\n\r\n /**\r\n * Handle the menu item selection\r\n * @param {string} menuItemId - The ID of the menu item to select\r\n */\r\n onSelectMenuItem(menuItemId: string): void {\r\n const label = this.findMenuItemLabelById(menuItemId);\r\n if (label) {\r\n this.selectedMenuItem = label;\r\n this.selectedMenuItemId = menuItemId;\r\n this.documentStore.setSelectedMenuItem(menuItemId);\r\n this.documentMenuService.handleUserListVisibility(menuItemId, this.categories);\r\n }\r\n }\r\n /**\r\n * Handle the menu item unselection\r\n */\r\n onUnselectMenuItem(): void {\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n this.documentStore.setSelectedMenuItem(null);\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n }\r\n\r\n /**\r\n * Get the selected menu item\r\n * @returns {string | null} - The selected menu item\r\n */\r\n getSelectedMenuItem(): string | null {\r\n return this.selectedMenuItem;\r\n }\r\n\r\n /**\r\n * Handles contextId changes by clearing current selection and refreshing data\r\n */\r\n private handleContextIdChange(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n this.documentStore.setSelectedMenuItem(null);\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Get the selected menu item id\r\n * @returns {string | null} - The selected menu item id\r\n */\r\n getSelectedMenuItemId(): string | null {\r\n return this.selectedMenuItemId;\r\n }\r\n}\r\n","<div class=\"document-sidebar-container h-full\">\r\n <p-card class=\"widget-menu-wrapper h-full\">\r\n @if(applicationNumber){\r\n <div class=\"flex align-items-center justify-content-between widget-menu-header-wrapper\">\r\n <p class=\"mb-0 application-title-wrapper\">ID - {{applicationNumber}}</p>\r\n <div class=\"expand-icon-wrapper\">\r\n <i class=\"ri-arrow-left-s-line text-primary flex align-items-center justify-content-center w-full h-full\"></i>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"widget-menu-container\" >\r\n <div class=\"widget-menu-wrapper h-ful l custom-scroll\">\r\n <p-menu [model]=\"categories\" styleClass=\"w-full md:w-15rem\">\r\n <ng-template pTemplate=\"submenuheader\" let-item>\r\n <span [style]=\"{\r\n color : '#9EA0B3'\r\n }\">{{ item.label === 'Application' ? 'Application Documents' : item.label }}</span>\r\n </ng-template>\r\n <ng-template pTemplate=\"item\" let-item>\r\n <a pRipple \r\n class=\"flex align-items-center p-menuitem-link\"\r\n [class.selected-menu-item]=\"selectedMenuItemId === item._id\"\r\n (click)=\"onMenuItemClick($event, item)\">\r\n <span [class]=\"item.icon\" class=\"text-xl\"></span>\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n <p-badge *ngIf=\"item.menuData?.shouldShowBadge\" \r\n class=\"ml-auto\" \r\n [severity]=\"item.menuData?.badgeSeverity\" \r\n [value]=\"item.menuData?.badgeValue\" />\r\n </a>\r\n </ng-template>\r\n </p-menu>\r\n </div>\r\n </div>\r\n </p-card>\r\n</div>\r\n\r\n ","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\nimport { SHARED } from '../../../../Shared/constant/SHARED';\nimport { DocumentService } from '../../state/document.service';\nimport { Subscription } from 'rxjs';\nimport { ERRORS } from '../../../../Shared/constant/ERROR';\nimport { DocumentHttpService } from '../../services/document-http.service';\nimport { DocumentQuery } from '../../state/document.query';\nimport { DocumentStore } from '../../state/document.store';\nimport { DocumentCategory } from '../../models/document-category.model';\nimport { UserListModel } from '../../models/user-list.model';\nimport { StatusDataModel } from '../../models/status-data.model';\nimport { DocumentListResponse } from '../../models/document-list-response.model';\nimport { DocumentHelperService } from '../../services/document.service';\n\n/**\n *This component is responsible for managing and displaying a list of documents.\n * @class DocumentContainerComponent\n * @typedef {DocumentContainerComponent}\n */\n@Component({\n selector: 'lib-document-container',\n standalone: false,\n templateUrl: './document-container.component.html',\n styleUrl: './document-container.component.scss'\n})\nexport class DocumentContainerComponent implements OnInit, OnDestroy, OnChanges {\n\n /**\n * Creates an instance of DocumentContainerComponent.\n * @param {DocumentStore} documentStore - Query Store service to manage store document-related state.\n * @param {DocumentService} documentService - Service to manage document-related operations.\n * @param {DocumentQuery} documentQuery - Query service to manage document-related state.\n * @param {DocumentHttpService} documentHttpService - Service to make HTTP requests related to documents.\n */\n constructor(public documentStore: DocumentStore, public documentService: DocumentService, public documentQuery: DocumentQuery, public documentHttpService: DocumentHttpService, public documentHelperService : DocumentHelperService) {\n // Note: initializeSelectionWatcher now requires contextId\n // This should be called from the component that has access to contextId\n\n }\n /**\n * Get contextId in input.\n * @type {string}\n */\n @Input() contextId: string = SHARED.EMPTY;\n \n \n /**\n * The list of folders.\n * @type {Array}\n */\n applicationNumber: string = SHARED.EMPTY\n catagories: DocumentCategory[] = SHARED.EMPTY_ARRAY\n userList: UserListModel[] = SHARED.EMPTY_ARRAY\n /**\n * Status data for the current selection\n * @type {StatusDataModel[]}\n */\n statusData: StatusDataModel[] = []\n\n /**\n * Document list response from API\n * @type {DocumentListResponse | null}\n */\n documentListResponse: DocumentListResponse[] | null = null;\n /**\n * Holds the subscription to manage observable cleanup.\n * @\n * @type {Subscription}\n */\n subscription: Subscription = new Subscription();\n\n /**\n * Handles changes to input properties\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\n // When contextId changes, clear all state and refetch data for the new context\n this.handleContextIdChange();\n }\n }\n\n /**\n * Fetches the folder and document data on initialization.\n * @returns {void}\n */\n ngOnInit(): void {\n this.clearAllState();\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\n this.initializeData();\n }\n }\n\n /**\n * Initialize all data with proper sequencing to avoid duplicate API calls\n */\n initializeData(): void {\n this.fetchDocumentCatagories();\n this.fetchUserListWithFilters();\n this.setupStatusDataSubscriptions();\n this.setupFilteredDocumentSubscription();\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\n }\n\n /**\n * Clears all state (store and component) comprehensively\n */\n clearAllState(): void {\n this.documentStore.clearSelectionState();\n this.documentStore.clearDocumentViewerState();\n this.documentStore.setDocumentListResponse(null);\n this.documentStore.setDocumentList([]); \n this.documentStore.setDocumentCategories([]);\n this.documentStore.setUserList([]);\n this.documentStore.setStatusData([]);\n this.documentStore.setCurrentDocument(null); \n this.documentStore.setFolders([]);\n this.documentStore.setDocumentAlert(null);\n this.catagories = SHARED.EMPTY_ARRAY;\n this.userList = SHARED.EMPTY_ARRAY;\n this.statusData = [];\n this.documentListResponse = null;\n this.applicationNumber = SHARED.EMPTY;\n }\n\n /**\n * Handles contextId change by clearing all state and refetching data\n */\n handleContextIdChange(): void {\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\n this.subscription.unsubscribe();\n this.subscription = new Subscription();\n this.documentHelperService.cleanupSelectionWatcher();\n this.clearAllState();\n this.initializeData();\n }\n }\n\n /**\n * Sets up subscriptions to monitor menu item and user selection changes\n * to trigger status data fetching and user list refreshing\n */\n setupStatusDataSubscriptions(): void {\n this.subscription.add(\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItem => {\n this.fetchStatusData();\n if (this.catagories.length > 0) {\n this.fetchUserListWithFilters();\n }\n })\n );\n this.subscription.add(\n this.documentQuery.selectSelectedUserId().subscribe(userId => {\n this.fetchStatusData();\n if (this.catagories.length > 0) {\n this.fetchUserListWithFilters();\n }\n })\n );\n this.subscription.add(\n this.documentQuery.selectSelectedStatus().subscribe(status => {\n this.fetchStatusData();\n if (this.catagories.length > 0) {\n this.fetchUserListWithFilters();\n }\n })\n );\n this.fetchStatusData();\n }\n\n /**\n * Fetches status data based on current selections\n */\n fetchStatusData(): void {\n if (!this.contextId) {\n console.warn(ERRORS.CONTEXT_ID_REQUIRED);\n return;\n }\n\n const currentState = this.documentQuery.getSelectionState();\n const contextId = currentState.userId || null\n const categoryId = currentState.menuItem || null; \n this.documentHttpService.getStatusDocumentCount(this.contextId,contextId,categoryId).subscribe({\n next: (statusData) => {\n this.statusData = statusData;\n this.documentStore.setStatusData(statusData);\n },\n error: (error) => {\n console.error(ERRORS.ERROR_FETCHING_STATUS_DATA, error);\n }\n });\n }\n\n /**\n * Fetches userlist data with current filters applied\n */\n fetchUserListWithFilters(): void {\n if (!this.contextId) {\n console.warn(ERRORS.CONTEXT_ID_REQUIRED);\n return;\n }\n\n const currentState = this.documentQuery.getSelectionState();\n // For user list, we use the contextId but the API might need additional parameters\n // based on current filters. For now, we'll use the base contextId\n // If the API supports filtering by menu item or status, we can add those parameters\n this.documentHttpService.getUserListByContextId(this.contextId).subscribe({\n next: (res: UserListModel[]) => {\n this.userList = res;\n this.documentStore.setUserList(res);\n },\n error: (err: any) => {\n console.error(ERRORS.ERROR_FETCHING_USER_LIST, err);\n }\n });\n }\n /**\n * Fetches document catagory data.\n */\n fetchDocumentCatagories(): void {\n const categoriesSubscription = this.documentHttpService.getDocumentCatagories(this.contextId).subscribe({\n next: (categories: any) => {\n if (categories) {\n this.catagories = categories.categories;\n this.applicationNumber = categories.applicationNumber;\n this.documentStore.setDocumentCategories(categories.categories);\n }\n },\n error: (err: any) => {\n console.error(ERRORS.ERROR_FETCHING_DOCUMENT_CATEGORIES, err);\n }\n });\n this.subscription.add(categoriesSubscription);\n }\n \n /**\n * Refetches all data when contextId changes\n */\n refetchAllDataForNewContext(): void {\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\n this.documentStore.clearSelectionState();\n this.documentStore.clearDocumentViewerState();\n this.fetchDocumentCatagories();\n this.fetchUserListWithFilters();\n this.fetchStatusData();\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\n }\n }\n\n /**\n * Sets up subscription to listen for filtered document responses\n */\n setupFilteredDocumentSubscription(): void {\n this.subscription.add(\n this.documentQuery.selectDocumentListResponse().subscribe({\n next: (response: any) => {\n this.documentListResponse = response;\n },\n error: (error: any) => {\n console.error(ERRORS.ERROR_RECEIVING_DOCUMENT_LIST, error);\n }\n })\n );\n }\n\n /** \n * Unsubscribe subscription on destroy of component and clean up state.\n */\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n this.documentHelperService.cleanupSelectionWatcher();\n this.clearAllState();\n }\n}\n","<div class=\"grid m-0 h-full flex\">\r\n <div class=\"col-12 md:col-2 lg:col-2\">\r\n <lib-documents-menu [catagories]=\"catagories\" [applicationNumber]=\"applicationNumber\" [contextId]=\"contextId\"></lib-documents-menu>\r\n </div>\r\n <div class=\"col-12 md:col-10 lg:col-10 p-0 h-full\" [ngClass]=\"{'custom-scroll': true}\">\r\n <div class=\"card\">\r\n <lib-folder-container [contextId]=\"contextId\" [userList]=\"userList\" [statusData]=\"statusData\" [categories]=\"catagories\"></lib-folder-container>\r\n </div>\r\n <div >\r\n <lib-document-list [contextId]=\"contextId\" [documentListResponse]=\"documentListResponse\">\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { FolderBlockModel } from '../../models/folder.model';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\n/**\r\n * The `FolderBlockComponent` is responsible for displaying a block of folders and\r\n * providing filtering functionality based on folder IDs.\r\n *\r\n * It uses data from the `DocumentStore` and constants from the `SHARED` configuration \r\n * to display missing and pending file counts.\r\n */\r\n@Component({\r\n selector: 'lib-folder-block',\r\n standalone: false,\r\n templateUrl: './folder-block.component.html',\r\n styleUrl: './folder-block.component.scss'\r\n})\r\nexport class FolderBlockComponent {\r\n /**\r\n * Array of folder blocks data to display.\r\n * Each folder is represented as a `FolderBlockModel`.\r\n */\r\n @Input() folderList : FolderBlockModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Number of missing files, sourced from the `SHARED` constants. */\r\n missingFileCount = SHARED.MISSINGCOUNT;\r\n\r\n /** Number of pending files, sourced from the `SHARED` constants. */\r\n pendingFileCount = SHARED.PENDINGCOUNT;\r\n\r\n /**\r\n * Injects the `DocumentStore` service to manage and access document-related state.\r\n * @param {DocumentStore} documentStore - The state management store for documents.\r\n */\r\n constructor(public documentStore: DocumentStore) {}\r\n\r\n /**\r\n * Handles the click event for filtering based on the provided folder ID.\r\n * This method validates the folder ID and returns it for further processing. \r\n * If the folder ID is not provided, an empty string is returned.\r\n * @param {string} folderBlockId - The unique identifier of the folder to filter by.\r\n * @returns {string} The validated folder ID, or an empty string if the input is invalid.\r\n */\r\n handleClickForFilter(folderBlockId: string): string {\r\n if (!folderBlockId) {\r\n return SHARED.EMPTY;\r\n }\r\n this.documentStore.setParentDocumentTypeId(folderBlockId);\r\n return folderBlockId;\r\n }\r\n \r\n}\r\n","<div class=\"card p-0 folder-info\">\r\n <div class=\"text-900 text-xl font-semibold ml-2 mb-1\">Folders</div>\r\n <div class=\"grid m-0\">\r\n <div *ngFor=\"let folder of folderList\" class=\"col-12 md:col-6 xl:col-4 container-wrapper\">\r\n <div\r\n class=\"p-3 border-1 h-full surface-border flex flex-column justify-content-between hover:surface-100 cursor-pointer border-round\"\r\n (click)=\"handleClickForFilter(folder._id)\"\r\n >\r\n <div class=\"icon\">\r\n <img src=\"../../../../assets/images/FolderImg.png\" alt=\"\" />\r\n </div>\r\n <div class=\"flex flex-column\">\r\n <span class=\"text-600 mt-2\"> {{ folder.documentCount }} Files </span>\r\n <span class=\"text-900 text-lg mt-2 mb-2 font-semibold font-medium\">\r\n {{ folder.folderName }}\r\n </span>\r\n </div>\r\n <hr />\r\n <div class=\"flex justify-content-between\">\r\n <div class=\"flex flex-column\">\r\n <span>Missing</span>\r\n <span\r\n [ngClass]=\"{\r\n 'text-pink-500': missingFileCount > 0,\r\n 'text-green-500': missingFileCount === 0\r\n }\"\r\n >\r\n {{ missingFileCount }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-column\">\r\n <span>Pending</span>\r\n <span\r\n [ngClass]=\"{\r\n 'text-yellow-500': pendingFileCount > 0,\r\n 'text-green-500': pendingFileCount === 0\r\n }\"\r\n >\r\n {{ pendingFileCount }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DocumentModel } from '../../models/document.model';\r\n\r\n/**\r\n * DocumentListItemComponent\r\n *\r\n * This component displays individual document items within a list. \r\n * It accepts a list of documents as input and handles interactions with documents.\r\n */\r\n@Component({\r\n selector: 'lib-document-list-item',\r\n standalone: false,\r\n templateUrl: './document-list-item.component.html',\r\n styleUrls: ['./document-list-item.component.scss']\r\n})\r\nexport class DocumentListItemComponent {\r\n /**\r\n * Emit the selected document.\r\n * @type {EventEmitter<DocumentModel>}\r\n */\r\n @Output() documentClick = new EventEmitter<DocumentModel>();\r\n \r\n /**\r\n * The document to display.\r\n * @type {DocumentModel[]}\r\n */\r\n @Input() document!: DocumentModel;\r\n\r\n /**\r\n * Handles interactions with a document.\r\n * @param {DocumentModel} document - The document to be opened or interacted with.\r\n */\r\n handleOpenDocument(document: DocumentModel): void {\r\n if (!document) {\r\n console.error('Error: Document is null or undefined:', document);\r\n return;\r\n }\r\n this.documentClick.emit(document);\r\n }\r\n}\r\n","<div class=\"grid m-0\">\r\n <div\r\n class=\"col-12 flex align-items-center justify-content-between md:col-12 xl:col-12\"\r\n >\r\n <div\r\n class=\"col-5 flex cursor-pointer align-items-center pl-0\"\r\n (click)=\"handleOpenDocument(document)\"\r\n >\r\n <img src=\"../../../../assets/images/Frame.png\" alt=\"\" />\r\n <span class=\"ml-4 file-name-wrapper document-text-wrapper\">{{ document.fileName }}</span>\r\n </div>\r\n <div class=\"col-4 flex align-items-center justify-content-center\">\r\n <span\r\n [class]=\"'product-badge status-' + document.status?.toLowerCase()\"\r\n class=\"flex align-items-center justify-content-center pl-2 pr-2 pt-1 pb-1\"\r\n >\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'pending'\">\r\n <i class=\"pi pi-clock pr-1\" style=\"font-size: 12px;\"></i>\r\n Pending\r\n </ng-container>\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'verified'\">\r\n <i class=\"pi pi-check-circle pr-1\" style=\"font-size: 12px;\"></i>\r\n Verified\r\n </ng-container>\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'alert'\">\r\n <i class=\"pi pi-bell pr-1\" style=\"font-size: 12px;\"></i>\r\n Alert\r\n </ng-container>\r\n </span>\r\n </div>\r\n <div class=\"document-type file-name-wrapper document-text-wrapper\">\r\n {{document.documentTypeName}}\r\n </div>\r\n </div>\r\n </div>\r\n ","import { ErrorHandler, Injectable, Injector } from '@angular/core';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/**\r\n * GlobalErrorHandler is a custom error handler that implements the ErrorHandler interface.\r\n * It is used to handle both HTTP errors and other types of errors globally in the application.\r\n * @class\r\n * @implements {ErrorHandler}\r\n * @decorator {Injectable}\r\n */\r\n@Injectable()\r\nexport class GlobalErrorHandler implements ErrorHandler {\r\n /**\r\n * Creates an instance of GlobalErrorHandler.\r\n * @constructor\r\n * @param {Injector} injector - The Angular injector used to get instances of services.\r\n */\r\n constructor(private injector: Injector) { }\r\n\r\n /**\r\n * Handles errors globally in the application.\r\n * \r\n * @param {any} error - The error object that needs to be handled.\r\n * @returns {void}\r\n */\r\n handleError(error: any): void {\r\n console.error('GlobalErrorHandler:', error);\r\n }\r\n}\r\n","import { Directive, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\nimport { DocumentModel } from \"../models/document.model\";\r\nimport { DocumentHelperService } from \"../services/document.service\";\r\n\r\n/**\r\n * Directive to display the document data\r\n */\r\n@Directive({\r\n selector: '[doc]',\r\n standalone: false\r\n})\r\nexport class DocumentDirective {\r\n\r\n /**\r\n * Creates an instance of DocumentDirective.\r\n * @param documentService Service to get the document data.\r\n * @param templateRef Reference to the template.\r\n * @param vcr View container reference to manage the view.\r\n */\r\n constructor(\r\n private documentService: DocumentHelperService,\r\n private templateRef: TemplateRef<any>,\r\n private vcr: ViewContainerRef\r\n ) {\r\n this.documentService.get().subscribe((document: DocumentModel | null) => {\r\n this.vcr.clear();\r\n if (document) {\r\n this.vcr.createEmbeddedView(this.templateRef, { $implicit: document });\r\n }\r\n });\r\n }\r\n}","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { DocumentListItem } from '../../models/document-list-response.model';\r\n/**\r\n * Description placeholder\r\n * @class LinkedDocumentComponent\r\n * @typedef {LinkedDocumentComponent}\r\n * @implements {OnChanges}\r\n */\r\n@Component({\r\n selector: 'app-linked-document',\r\n templateUrl: './linked-document.component.html',\r\n styleUrl: './linked-document.component.scss',\r\n standalone : false\r\n})\r\nexport class LinkedDocumentComponent {\r\n /**\r\n * Selected document for view.\r\n * @type {?DocumentModel}\r\n */\r\n @Input() selectedDocument?: DocumentListItem;\r\n /**\r\n * Whole document list.\r\n * @type {?DocumentModel[]}\r\n */\r\n @Input() documentList?: DocumentListItem[];\r\n /**\r\n * Changed selected document.\r\n * @type {*}\r\n */\r\n @Output() selectedDocumentChange = new EventEmitter<DocumentListItem>();\r\n\r\n /**\r\n * Filtered documents.\r\n * @type {DocumentModel[]}\r\n */\r\n filteredDocuments: DocumentModel[] = [];\r\n\r\n /**\r\n * Handle the click on the document.\r\n * @param {DocumentModel} document - Clicked document.\r\n */\r\n handleDocumentClick(document: DocumentListItem): void {\r\n this.selectedDocument = document;\r\n this.selectedDocumentChange.emit(this.selectedDocument);\r\n }\r\n\r\n}\r\n","<div class=\"summary-card mb-4 pb-1\">\r\n <div class=\"card p-0 mb-0\"\r\n style=\"border-bottom: 1px solid;border-color: rgba(68, 72, 109, 0.2); border-bottom-right-radius: 0px;border-bottom-left-radius: 0px; background-color: #F9fafb;\">\r\n <div class=\"p-0\">\r\n <h4 class=\"m-0 pt-3 pl-3 mb-3\" style=\"font-size: 21px; font-weight: bold; \">Linked Documents</h4>\r\n </div>\r\n </div>\r\n <div class=\"card mb-0\" style=\"border-top-right-radius: 0px;border-top-left-radius: 0px;\">\r\n @for(document of documentList; track document){\r\n <div class=\"linkedDocument documentName m-2\">\r\n <div class=\"documentName\" [class.selected]=\"document._id === selectedDocument?._id\"\r\n (click)=\"handleDocumentClick(document)\">\r\n <span class=\"pi pi-link\"></span>\r\n {{document.fileName}}\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n \r\n \r\n </div>\r\n ","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TablePrimaryComponent } from './components/table-primary/table-primary.component';\r\nimport { TableModule } from 'primeng/table';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { HasPermissionDirective } from '../lib/document/directives/permission.directive';\r\nimport { ConfirmationDialogComponent } from './components/confirmation-dialog/confirmation-dialog.component';\r\nimport { ConfirmationService } from 'primeng/api';\r\n\r\n\r\n@NgModule({\r\n declarations: [TablePrimaryComponent, HasPermissionDirective, ConfirmationDialogComponent],\r\n imports: [\r\n CommonModule,\r\n TableModule,\r\n ButtonModule,\r\n RippleModule\r\n ],\r\n providers: [ConfirmationService],\r\n exports : [TablePrimaryComponent, HasPermissionDirective, ConfirmationDialogComponent]\r\n})\r\nexport class SharedModule { }\r\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DocumentContainerComponent } from './components/document-container/document-container.component';\r\nimport { FolderContainerComponent } from './components/folder-container/folder-container.component';\r\nimport { FolderBlockComponent } from './components/folder-block/folder-block.component';\r\nimport { DocumentListComponent } from './components/document-list/document-list.component';\r\nimport { AccordionModule } from 'primeng/accordion';\r\nimport { DocumentListItemComponent } from './components/document-list-item/document-list-item.component';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { SidebarModule } from 'primeng/sidebar';\r\nimport { FileUploadModule } from 'primeng/fileupload';\r\nimport { DocumentUploadComponent } from './components/document-upload/document-upload.component';\r\nimport { MessageService } from 'primeng/api';\r\nimport { ConfirmationService } from 'primeng/api';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { BadgeModule } from 'primeng/badge';\r\nimport { ListboxModule } from 'primeng/listbox';\r\nimport { TimelineModule } from 'primeng/timeline';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { InputTextareaModule } from 'primeng/inputtextarea';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DocumentViewerComponent } from './components/document-viewer/document-viewer.component';\r\nimport { DocumentHistoryComponent } from './components/document-history/document-history.component';\r\nimport { PdfViewerModule } from 'ng2-pdf-viewer';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { AppConfigService } from '../../Shared/services/app-config.service';\r\nimport { GlobalErrorHandler } from '../../Shared/services/global-error.handler';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DocumentDirective } from './directives/document.directive';\r\nimport { LinkedDocumentComponent } from './components/linked-document/linked-document.component';\r\nimport { DocumentsMenuComponent } from './components/documents-menu/documents-menu.component';\r\nimport { MenuModule } from 'primeng/menu';\r\nimport { PanelMenuModule } from 'primeng/panelmenu';\r\nimport { CardModule } from 'primeng/card';\r\nimport { TableModule } from 'primeng/table';\r\nimport { UserListComponent } from './components/user-list/user-list.component';\r\nimport { DocumentStatusComponent } from './components/document-status/document-status.component';\r\nimport { DocumentActionsComponent } from './components/document-actions/document-actions.component';\r\nimport { DocumentSearchComponent } from './components/document-search/document-search.component';\r\nimport { SharedModule } from '../../Shared/shared.module';\r\nimport { DocumentActionsService } from './services/document-actions.service';\r\nimport { SidebarComponent } from './components/sidebar/sidebar.component';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { MessagesModule } from 'primeng/messages';\r\nimport { MessageModule } from 'primeng/message';\r\n\r\n/**\r\n * @module DocumentModule\r\n * \r\n * The `DocumentModule` handles the organization and display of document and folder components \r\n * in the application. This module is designed to support features like folder containers, \r\n * document lists, and individual document items.\r\n */\r\n@NgModule({\r\n declarations: [\r\n /**\r\n * The main container for managing documents.\r\n * DocumentContainerComponent\r\n */\r\n DocumentContainerComponent,\r\n\r\n /**\r\n * A container component to manage folders.\r\n * FolderContainerComponent\r\n */\r\n FolderContainerComponent,\r\n\r\n /**\r\n * A block component that represents an individual folder.\r\n * FolderBlockComponent\r\n */\r\n FolderBlockComponent,\r\n\r\n /**\r\n * A component to display a list of documents.\r\n * DocumentListComponent\r\n */\r\n DocumentListComponent,\r\n\r\n /**\r\n * A component representing an individual item in the document list.\r\n * DocumentListItemComponent\r\n */\r\n DocumentListItemComponent,\r\n\r\n /** \r\n * A component representing to upload a file.\r\n */\r\n DocumentUploadComponent,\r\n\r\n /**\r\n * A component representing and allow you to view the document.\r\n */\r\n DocumentViewerComponent,\r\n\r\n /**\r\n * A component representing document history timeline.\r\n */\r\n DocumentHistoryComponent,\r\n\r\n /**\r\n * A directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n /**\r\n * A component which have linked documents.\r\n */\r\n LinkedDocumentComponent,\r\n DocumentsMenuComponent,\r\n UserListComponent,\r\n DocumentStatusComponent,\r\n DocumentActionsComponent,\r\n DocumentSearchComponent,\r\n /**\r\n * A sidebar component for content projection.\r\n */\r\n SidebarComponent,\r\n\r\n ],\r\n imports: [\r\n /**\r\n * Angular's CommonModule is imported to access common directives like `ngIf` and `ngFor`.\r\n */\r\n CommonModule,\r\n\r\n /**\r\n * PrimeNG AccordionModule is used for creating collapsible sections in the UI.\r\n */\r\n AccordionModule,\r\n\r\n /**\r\n * HttpClienModule for the http calls\r\n */\r\n HttpClientModule,\r\n\r\n /**\r\n * PrimeNG ButtonModule is used for creating buttons in the UI.\r\n */\r\n ButtonModule,\r\n\r\n /**\r\n * PrimeNG SidebarModule is used for creating sidebars.\r\n */\r\n SidebarModule,\r\n\r\n /**\r\n * PrimeNG FileUploadModule is used for uploading file.\r\n */\r\n FileUploadModule,\r\n\r\n /**\r\n * PrimeNG ProgressBarModule is used for showing progress.\r\n */\r\n ProgressBarModule,\r\n\r\n /**\r\n * PrimeNG BadgeModule is used for showing badge value.\r\n */\r\n BadgeModule,\r\n\r\n /**\r\n * PrimeNG ListboxModule is used for showing listbox value.\r\n */\r\n ListboxModule,\r\n\r\n /**\r\n * PrimeNG CheckboxModule is used for showing checkbox value.\r\n */\r\n CheckboxModule,\r\n\r\n /**\r\n * PrimeNG RadioButtonModule is used for showing radio button values.\r\n */\r\n RadioButtonModule,\r\n\r\n /**\r\n * PrimeNG TimelineModule is used for showing timeline value.\r\n */\r\n TimelineModule,\r\n /**\r\n * PrimeNG InputTextareaModule is used for showing textarea value.\r\n */\r\n InputTextareaModule,\r\n /**\r\n * FormsModule to handle the forms.\r\n */\r\n FormsModule,\r\n /**\r\n * PdfViewerModule to handle and make visible the pdf.\r\n */\r\n PdfViewerModule,\r\n /**\r\n * PrimeNG DialogModule is used for showing dialog.\r\n */\r\n DialogModule,\r\n /**\r\n * PrimeNG DropdownModule is used for creating dropdown menus, allowing users to select options from a list.\r\n */\r\n DropdownModule,\r\n /**\r\n * PrimeNG InputTextModule is used for creating InputTextFeilds, allowing users to enter name for a document.\r\n */\r\n InputTextModule,\r\n\r\n MenuModule,\r\n PanelMenuModule,\r\n CardModule,\r\n TableModule,\r\n SharedModule,\r\n InputTextareaModule,\r\n ToastModule,\r\n TooltipModule,\r\n MessagesModule,\r\n MessageModule\r\n \r\n ],\r\n exports: [\r\n /**\r\n * Exports the `DocumentContainerComponent` to be used in other modules.\r\n */\r\n DocumentContainerComponent,\r\n /**\r\n * Exports the `DocumentViewerComponent` to be used in other modules.\r\n */\r\n DocumentViewerComponent,\r\n /**\r\n * Exports the `DocumentActionsComponent` to be used in other modules.\r\n */\r\n DocumentActionsComponent,\r\n /**\r\n * A component to display a list of documents.\r\n * DocumentListComponent\r\n */\r\n DocumentListComponent,\r\n\r\n /**\r\n * A directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n /**\r\n * A component for searching documents.\r\n */\r\n DocumentSearchComponent,\r\n\r\n /**\r\n * A sidebar component for content projection.\r\n */\r\n SidebarComponent,\r\n\r\n\r\n ],\r\n providers: [\r\n /**\r\n * Provide the messageservice to be used in other components.\r\n */\r\n MessageService,\r\n\r\n /**\r\n * Provide the DocumentActionsService to be used in other components.\r\n */\r\n DocumentActionsService,\r\n\r\n /**\r\n * Provide the ConfirmationService to be used in other components.\r\n */\r\n ConfirmationService,\r\n\r\n /**\r\n * Provide the messageservice to be used in other components.\r\n */\r\n { provide: GlobalErrorHandler, useClass: GlobalErrorHandler },\r\n /**\r\n * Initializes the application configuration by loading it from the AppConfigService\r\n * before the application starts.\r\n * This ensures that the configuration is available for the rest of the app when needed.\r\n * The configuration is loaded asynchronously using the APP_INITIALIZER.\r\n * @returns {Function} - A function that loads the configuration from the AppConfigService.\r\n */\r\n {\r\n provide: APP_INITIALIZER,\r\n /**\r\n * This useFactory is executed when the app initializes.\r\n * It calls the AppConfigService to load the configuration.\r\n * If an error occurs, it throws an error.\r\n * @param {AppConfigService} configService - The service responsible for loading the application configuration.\r\n * @returns {Function} - A function that loads the configuration from the AppConfigService.\r\n */\r\n useFactory: (configService: AppConfigService) => () =>\r\n configService.loadAppConfig().catch((error) => {\r\n throw new Error(error);\r\n }),\r\n deps: [AppConfigService],\r\n multi: true,\r\n },\r\n \r\n ]\r\n})\r\nexport class DocumentModule { }\r\n","/*\r\n * Public API Surface of cat-document-lib\r\n * \r\n * IMPORTANT: To ensure proper z-index values and prevent confirmation dialog visibility issues,\r\n * import the global styles in your host project:\r\n * \r\n * Option 1: In your styles.scss\r\n * @import '~cat-document-lib/lib/styles.scss';\r\n * \r\n * Option 2: In your angular.json\r\n * \"styles\": [\"node_modules/cat-document-lib/lib/styles.scss\"]\r\n */\r\n\r\nexport * from './lib/document/document.module';\r\nexport * from './lib/document/components/document-container/document-container.component';\r\nexport * from './lib/document/components/document-viewer/document-viewer.component';\r\nexport * from './lib/document/components/document-actions/document-actions.component';\r\nexport * from './lib/document/components/document-history/document-history.component';\r\nexport * from './lib/document/components/document-list/document-list.component';\r\nexport * from './lib/document/components/document-search/document-search.component';\r\nexport * from './lib/document/components/sidebar/sidebar.component';\r\nexport * from './lib/document/models/document-history.model';\r\nexport * from './lib/document/models/uploaded-file-response.model';\r\nexport * from './lib/document/services/document-table-builder.service';\r\nexport * from './lib/document/directives/document.directive';\r\nexport * from './lib/document/directives/permission.directive';\r\nexport * from './Shared/components/confirmation-dialog/confirmation-dialog.component';\r\nexport * from './Shared/components/table-primary/table-primary.component';\r\nexport * from './Shared/components/table-primary/table-primary.model';\r\nexport * from './Shared/constant/SHARED';\r\nexport * from './Shared/shared.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.DocumentStore","i3.AppConfigService","i2.DocumentQuery","i3.DocumentHttpService","i1.DocumentService","i2.DocumentStore","i1.DocumentHttpService","i2.FileFormatService","i1.DocumentUploadBusinessService","i2.DocumentUploadFormService","i1.DocumentUploadService","i2.DocumentService","i4.FileFormatService","i5.DocumentUploadBusinessService","i6.DocumentUploadFormService","i7.DocumentUploadDataService","i8","i9","i13","i2","i3","i4","i6.ConfirmationDialogComponent","i1.DocumentHelperService","i3.DocumentQuery","i4.UserListService","i5","i1.DocumentQuery","i2.DocumentHelperService","i3.StatusCalculatorService","debounceTime","distinctUntilChanged","i3.DocumentUploadComponent","i4.UserListComponent","i5.DocumentStatusComponent","i6.DocumentSearchComponent","i7.SidebarComponent","i1.SessionService","i2.DocumentHttpService","i4.DocumentStore","i5.DocumentTableBuilderService","i6.DocumentHelperService","i6.HasPermissionDirective","i5.DocumentQuery","i1.DocumentHistoryStyleService","i1.DocumentHistoryService","i1.DocumentActionsService","i6","i9.HasPermissionDirective","i10.ConfirmationDialogComponent","i4.DocumentViewerService","i7.DocumentHistoryComponent","i8.DocumentActionsComponent","i1.DocumentListService","i7","i8.TablePrimaryComponent","i9.DocumentViewerComponent","i3.DocumentMenuService","i4.DocumentHelperService","i4.DocumentHttpService","i5.DocumentHelperService","i7.FolderContainerComponent","i8.DocumentListComponent","i9.DocumentsMenuComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAGG;MACU,MAAM,CAAA;AAEjB;;AAEG;AACH,IAAA,OAAO,YAAY,GAAG,cAAc;AACpC;;AAEG;AACH,IAAA,OAAO,OAAO,GAAG,SAAS;AAC1B;;AAEG;AACH,IAAA,OAAO,OAAO,GAAG,SAAS;AAC1B;;AAEG;AACH,IAAA,OAAO,MAAM,GAAG,QAAQ;AAExB,IAAA,OAAO,kBAAkB,GAAG,oBAAoB;AAChD,IAAA,OAAO,qBAAqB,GAAG,sBAAsB;AACrD,IAAA,OAAO,eAAe,GAAG,6BAA6B;AACtD;;AAEG;AACH,IAAA,OAAO,gBAAgB,GAAI,kBAAkB;AAC7C;;AAEG;AACH,IAAA,OAAO,IAAI,GAAI,MAAM;AACrB;;AAEG;AACH,IAAA,OAAO,OAAO,GAAI,SAAS;AAC3B;;AAEG;AACH,IAAA,OAAO,OAAO,GAAI,SAAS;AAC3B;;AAEG;AACH,IAAA,OAAO,MAAM,GAAI,QAAQ;AACzB;;AAEG;AACH,IAAA,OAAO,UAAU,GAAG,UAAU;AAC9B;;AAEG;AACH,IAAA,OAAO,YAAY,GAAG,CAAC;AAEvB;;AAEG;AACH,IAAA,OAAO,YAAY,GAAG,CAAC;AAEvB;;AAEG;AACH,IAAA,OAAO,KAAK,GAAG,EAAE;AACjB;;AAEG;AACH,IAAA,OAAO,MAAM,GAAG,QAAQ;AAExB;;;;AAIG;AACH,IAAA,OAAO,IAAI,GAAY,IAAI;AAG3B;;;;AAIG;AACH,IAAA,OAAO,KAAK,GAAY,KAAK;AAE7B;;AAEG;AACH,IAAA,OAAO,aAAa,GAAG,CAAC;AACxB;;AAEG;AACH,IAAA,OAAO,aAAa,GAAG,CAAC;AAExB;;;;AAIG;AACH,IAAA,OAAO,GAAG,GAAW,CAAC;AAEtB;;;;AAIG;AACH,IAAA,OAAO,GAAG,GAAW,CAAC;AAEtB;;;;AAIG;AACH,IAAA,OAAO,GAAG,GAAW,EAAE;AAEvB;;;;AAIG;AACH,IAAA,OAAO,IAAI,GAAW,MAAM;AAE5B;;;;AAIG;AACH,IAAA,OAAO,eAAe,GAAW,UAAU;AAE3C;;;;AAIG;AACH,IAAA,OAAO,aAAa,GAAW,QAAQ;AAEvC;;;;AAIG;AACH,IAAA,OAAO,YAAY,GAAW,QAAQ;AAEtC;;;;AAIG;IACH,OAAO,eAAe,GAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;AAEpD;;;;AAIG;AACH,IAAA,OAAO,QAAQ,GAAW,OAAO;AACjC;;;;AAIG;AACH,IAAA,OAAO,gBAAgB,GAAW,SAAS;AAE3C;;;;AAIG;AACH,IAAA,OAAO,cAAc,GAAW,eAAe;AAE/C;;;;AAIG;AACH,IAAA,OAAO,cAAc,GAAW,iCAAiC;AAEjE;;;;AAIG;AACH,IAAA,OAAO,WAAW,GAAG,EAAE;AAEvB;;;;AAIG;AACH,IAAA,OAAO,UAAU,GAAW,WAAW;AAEvC;;;;AAIG;AACH,IAAA,OAAO,QAAQ,GAAW,UAAU;AAEpC;;;;AAIG;AACH,IAAA,OAAO,SAAS,GAAW,UAAU;AACrC;;;;AAIG;AACH,IAAA,OAAO,aAAa,GAAW,cAAc;AAC7C;;;;AAIG;AACH,IAAA,OAAO,gBAAgB,GAAW,gBAAgB;AAClD;;;;AAIG;AACH,IAAA,OAAO,QAAQ,GAAW,UAAU;AACpC;;;;AAIG;AACH,IAAA,OAAO,IAAI,GAAW,MAAM;AAE5B;;;;AAIG;AACH,IAAA,OAAO,oBAAoB,GAAW,mBAAmB;AAEzD;;;;AAIG;AACH,IAAA,OAAO,oBAAoB,GAAW,iGAAiG;AAEvI;;;;AAIG;AACH,IAAA,OAAO,oBAAoB,GAAW,+BAA+B;AACrE,IAAA,OAAO,KAAK,GAAG,OAAO;AACtB,IAAA,OAAO,UAAU,GAAG,IAAI;AACxB,IAAA,OAAO,UAAU,GAAG,aAAa;AACjC,IAAA,OAAO,IAAI,GAAG,MAAM;AACpB,IAAA,OAAO,mBAAmB,GAAG,GAAG;AAChC,IAAA,OAAO,kBAAkB,GAAG,EAAE;AAC9B,IAAA,OAAO,SAAS,GAAG,WAAW;AAC9B,IAAA,OAAO,UAAU,GAAG,YAAY;AAChC,IAAA,OAAO,SAAS,GAAG,WAAW;AAC9B,IAAA,OAAO,aAAa,GAAG,eAAe;AACtC,IAAA,OAAO,SAAS,GAAI,UAAU;AAC9B,IAAA,OAAO,UAAU,GAAI,YAAY;AACjC,IAAA,OAAO,uBAAuB,GAAG,uEAAuE;AACxG,IAAA,OAAO,sBAAsB,GAAG,iBAAiB;AACjD,IAAA,OAAO,6BAA6B,GAAG,+BAA+B;AACtE,IAAA,OAAO,oBAAoB,GAAG,4BAA4B;AAC1D,IAAA,OAAO,MAAM,GAAG,QAAQ;AACxB,IAAA,OAAO,MAAM,GAAG,QAAQ;AACxB,IAAA,OAAO,WAAW,GAAG,aAAa;AAClC,IAAA,OAAO,WAAW,GAAG,aAAa;AAClC,IAAA,OAAO,yBAAyB,GAAG,iBAAiB;AACpD,IAAA,OAAO,yBAAyB,GAAG,oBAAoB;IAEvD,OAAO,IAAI,GAAG;AACZ,QAAA;AACE,YAAA,KAAK,EAAE,WAAW;;;;AAIlB,YAAA,KAAK,EAAE;AACL,gBAAA;AACE,oBAAA,KAAK,EAAE,UAAU;AACjB,oBAAA,IAAI,EAAE,iBAAiB;AACvB,oBAAA,KAAK,EAAE;AACR,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,IAAI,EAAE,4BAA4B;AAClC,oBAAA,KAAK,EAAE;AACR,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,eAAe;AACtB,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,KAAK,EAAE;AACR,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,gBAAgB;AACvB,oBAAA,IAAI,EAAE,wBAAwB;AAC9B,oBAAA,KAAK,EAAE;AACR,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,IAAI,EAAE,wBAAwB;AAC9B,oBAAA,KAAK,EAAE;AACR,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,cAAc;AACrB,oBAAA,IAAI,EAAE;AACP,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,yBAAyB;AAChC,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,IAAI,EAAE;AACP;AACF;AACF,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,aAAa;;;;AAIpB,YAAA,KAAK,EAAE;AACL,gBAAA;AACE,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,cAAc;AACrB,oBAAA,IAAI,EAAE;AACP,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,UAAU;AACjB,oBAAA,IAAI,EAAE;AACP,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,aAAa;AACpB,oBAAA,IAAI,EAAE;AACP,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,kBAAkB;AACzB,oBAAA,IAAI,EAAE;AACP,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,IAAI,EAAE;AACP,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,eAAe;AACtB,oBAAA,IAAI,EAAE;AACP;AACF;AACF;KACF;AACD,IAAA,OAAO,WAAW,GAAG,aAAa;AAClC,IAAA,OAAO,UAAU,GAAG,YAAY;AAChC,IAAA,OAAO,WAAW,GAAG,GAAG;AAExB,IAAA,OAAO,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC;IAE7D,OAAO,SAAS,GAAG;AACf,QAAA,QAAQ,EAAE,SAAS;AACnB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,QAAQ,EAAE;KACX;AACD,IAAA,OAAO,aAAa,GAAG,SAAS;AAChC,IAAA,OAAO,gBAAgB,GAAG,SAAS;AACnC,IAAA,OAAO,cAAc,GAAG,OAAO;AAC/B,IAAA,OAAO,UAAU,GAAG,WAAW;AAC/B,IAAA,OAAO,QAAQ,GAAG,UAAU;AAC5B,IAAA,OAAO,QAAQ,GAAG,UAAU;AAC5B,IAAA,OAAO,OAAO,GAAG,SAAS;AAC1B,IAAA,OAAO,GAAG,GAAG,GAAG;AAChB,IAAA,OAAO,GAAG,GAAG,KAAK;AAClB,IAAA,OAAO,cAAc,GAAG,SAAS;;AAGnC,IAAA,OAAO,GAAG,GAAG,KAAK;AAClB,IAAA,OAAO,GAAG,GAAG,KAAK;AAClB,IAAA,OAAO,IAAI,GAAG,MAAM;;AAGpB,IAAA,OAAO,eAAe,GAAG,UAAU;AACnC,IAAA,OAAO,YAAY,GAAG,OAAO;AAC7B,IAAA,OAAO,eAAe,GAAG,UAAU;AACnC,IAAA,OAAO,gBAAgB,GAAG,WAAW;AACrC,IAAA,OAAO,eAAe,GAAG,UAAU;AACnC,IAAA,OAAO,gBAAgB,GAAG,oBAAoB;;AAG9C,IAAA,OAAO,oBAAoB,GAAG,gBAAgB;AAC9C,IAAA,OAAO,qBAAqB,GAAG,iBAAiB;AAChD,IAAA,OAAO,kBAAkB,GAAG,cAAc;AAC1C,IAAA,OAAO,qBAAqB,GAAG,iBAAiB;AAChD,IAAA,OAAO,sBAAsB,GAAG,kBAAkB;AAClD,IAAA,OAAO,qBAAqB,GAAG,iBAAiB;;AAGhD,IAAA,OAAO,UAAU,GAAG,aAAa;AACjC,IAAA,OAAO,yBAAyB,GAAG,4BAA4B;AAC/D,IAAA,OAAO,iBAAiB,GAAG,oBAAoB;AAC/C,IAAA,OAAO,QAAQ,GAAG,WAAW;AAC7B,IAAA,OAAO,UAAU,GAAG,aAAa;AACjC,IAAA,OAAO,UAAU,GAAG,aAAa;;AAGjC,IAAA,OAAO,aAAa,GAAG,gBAAgB;AACvC,IAAA,OAAO,UAAU,GAAG,aAAa;AACjC,IAAA,OAAO,eAAe,GAAG,kBAAkB;AAC3C,IAAA,OAAO,SAAS,GAAG,YAAY;AAC/B,IAAA,OAAO,WAAW,GAAG,sBAAsB;;AAG3C,IAAA,OAAO,kBAAkB,GAAG,UAAU;AACtC,IAAA,OAAO,gBAAgB,GAAG,QAAQ;AAClC,IAAA,OAAO,iBAAiB,GAAG,SAAS;AACpC,IAAA,OAAO,cAAc,GAAG,MAAM;AAE9B;;;;AAIG;IACH,OAAO,sBAAsB,GAKxB;AACH,QAAA;AACE,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE;AACR,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE;AACR,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;AACR,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE;AACR,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE;AACR;KACF;AAEF,IAAA,OAAO,kBAAkB,GAAG,oBAAoB;AAChD,IAAA,OAAO,iBAAiB,GAAG,mBAAmB;AAC7C,IAAA,OAAO,iBAAiB,GAAG,mBAAmB;AAC9C,IAAA,OAAO,iBAAiB,GAAG,mBAAmB;;AAG9C,IAAA,OAAO,aAAa,GAAG,QAAQ;AAC/B,IAAA,OAAO,aAAa,GAAG,QAAQ;AAC/B,IAAA,OAAO,aAAa,GAAG,QAAQ;AAE/B,IAAA,OAAO,qBAAqB,GAAG,gBAAgB;AAC/C,IAAA,OAAO,qBAAqB,GAAG,gBAAgB;AAE/C,IAAA,OAAO,iBAAiB,GAAG,6BAA6B;AACxD,IAAA,OAAO,iBAAiB,GAAG,4BAA4B;AAEvD,IAAA,OAAO,uBAAuB,GAAG,6BAA6B;AAC9D,IAAA,OAAO,uBAAuB,GAAG,4BAA4B;AAE7D,IAAA,OAAO,mBAAmB,GAAG,QAAQ;AACrC,IAAA,OAAO,mBAAmB,GAAG,QAAQ;AACrC,IAAA,OAAO,mBAAmB,GAAG,QAAQ;AAErC,IAAA,OAAO,yBAAyB,GAAG,gCAAgC;AACnE,IAAA,OAAO,yBAAyB,GAAG,gCAAgC;AACnE,IAAA,OAAO,6BAA6B,GAAG,8CAA8C;AAErF,IAAA,OAAO,eAAe,GAAG,UAAU;AACnC,IAAA,OAAO,eAAe,GAAG,UAAU;;AAGnC,IAAA,OAAO,cAAc,GAAG,SAAS;AACjC,IAAA,OAAO,eAAe,GAAG,UAAU;AACnC,IAAA,OAAO,yBAAyB,GAAG,UAAU;AAC7C,IAAA,OAAO,eAAe,GAAG,UAAU;;AAGnC,IAAA,OAAO,YAAY,GAAG,cAAc;AACpC,IAAA,OAAO,aAAa,GAAG,eAAe;AACtC,IAAA,OAAO,aAAa,GAAG,eAAe;;AAGtC,IAAA,OAAO,uBAAuB,GAAG,kBAAkB;AACnD,IAAA,OAAO,qBAAqB,GAAG,gBAAgB;AAC/C,IAAA,OAAO,qBAAqB,GAAG,gBAAgB;AAC/C,IAAA,OAAO,qBAAqB,GAAG,gBAAgB;AAC/C,IAAA,OAAO,uBAAuB,GAAG,kBAAkB;AACnD,IAAA,OAAO,qBAAqB,GAAG,gBAAgB;;AAG/C,IAAA,OAAO,mBAAmB,GAAG,QAAQ;AACrC,IAAA,OAAO,qBAAqB,GAAG,UAAU;AACzC,IAAA,OAAO,mBAAmB,GAAG,QAAQ;AACrC,IAAA,OAAO,qBAAqB,GAAG,UAAU;;AAGzC,IAAA,OAAO,gCAAgC,GAAG,uBAAuB;AACjE,IAAA,OAAO,8BAA8B,GAAG,6BAA6B;AACrE,IAAA,OAAO,+BAA+B,GAAG,sBAAsB;AAC/D,IAAA,OAAO,6BAA6B,GAAG,2BAA2B;AAClE,IAAA,OAAO,oCAAoC,GAAG,2BAA2B;AACzE,IAAA,OAAO,kCAAkC,GAAG,gCAAgC;AAC5E,IAAA,OAAO,gCAAgC,GAAG,uBAAuB;AACjE,IAAA,OAAO,8BAA8B,GAAG,sCAAsC;AAC9E,IAAA,OAAO,0BAA0B,GAAG,iBAAiB;AACrD,IAAA,OAAO,iCAAiC,GAAG,uEAAuE;AAClH,IAAA,OAAO,gCAAgC,GAAG,uBAAuB;;AAGjE,IAAA,OAAO,iCAAiC,GAAG,6DAA6D;AACxG,IAAA,OAAO,0BAA0B,GAAG,mCAAmC;AACvE,IAAA,OAAO,+BAA+B,GAAG,+BAA+B;AACxE,IAAA,OAAO,8BAA8B,GAAG,qCAAqC;AAC7E,IAAA,OAAO,0BAA0B,GAAG,+CAA+C;AACnF,IAAA,OAAO,2BAA2B,GAAG,4BAA4B;AACjE,IAAA,OAAO,+BAA+B,GAAG,mCAAmC;AAC5E,IAAA,OAAO,6BAA6B,GAAG,qCAAqC;;AAI9E;;;AAGG;AACU,MAAA,iBAAiB,GAAG;AAC/B,IAAA;AACE,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,WAAW,EAAE,+DAA+D;AAC7E,KAAA;AACD,IAAA;AACE,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,MAAM,EAAE,UAAU;AAClB,QAAA,WAAW,EAAE,+DAA+D;AAC7E,KAAA;AACD,IAAA;AACE,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,MAAM,EAAE,cAAc;AACtB,QAAA,WAAW,EAAE,+DAA+D;AAC7E,KAAA;AACD,IAAA;AACE,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,WAAW,EAAE,+DAA+D;AAC7E,KAAA;;AAGH;;;AAGG;AACU,MAAA,QAAQ,GAAG;AACtB,IAAA;AACE,QAAA,GAAG,EAAG,GAAG;AACT,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,oBAAoB,EAAE,EAAE;AACxB,QAAA,oBAAoB,EAAE;AACvB,KAAA;AACD,IAAA;AACE,QAAA,GAAG,EAAG,GAAG;AACT,QAAA,QAAQ,EAAE,eAAe;AACzB,QAAA,oBAAoB,EAAE,CAAC;AACvB,QAAA,oBAAoB,EAAE;AACvB,KAAA;AACD,IAAA;AACE,QAAA,GAAG,EAAG,GAAG;AACT,QAAA,QAAQ,EAAE,eAAe;AACzB,QAAA,oBAAoB,EAAE,EAAE;AACxB,QAAA,oBAAoB,EAAE;AACvB,KAAA;AACD,IAAA;AACE,QAAA,GAAG,EAAG,GAAG;AACT,QAAA,QAAQ,EAAE,aAAa;AACvB,QAAA,oBAAoB,EAAE,EAAE;AACxB,QAAA,oBAAoB,EAAE;AACvB;;AAGU,MAAA,kBAAkB,GAAG;AAChC,IAAA;AACE,QAAA,MAAM,EAAE,UAAU;AAClB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE;AACP,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE;AACP,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,WAAW;AACnB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE;AACP,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,UAAU;AAClB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE;AACP,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE;AACP;;AAGH;;;AAGG;AACU,MAAA,YAAY,GAAG;AAC1B,IAAA;AACE,QAAA,MAAM,EAAE,6CAA6C;AACrD,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,IAAI,EAAE,qBAAqB;AAC3B,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,KAAK,EAAE,qBAAqB;AAC7B,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,4CAA4C;AACpD,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,6CAA6C;AACrD,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,IAAI,EAAE,qBAAqB;AAC3B,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;;AAGH;;;AAGG;AACU,MAAA,SAAS,GAAG;IACvB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IAChD,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IACtD,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACxD,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;;AAG1D;;;AAGG;AACU,MAAA,qBAAqB,GAAG;IACnC,WAAW;IACX,WAAW;IACX,YAAY;IACZ,WAAW;IACX,WAAW;IACX,WAAW;IACX,YAAY;IACZ,YAAY;;AAGd;;;AAGG;AAEU,MAAA,aAAa,GAAG;AAC3B,IAAA;AACE,QAAA,KAAK,EAAE,eAAe;AACtB,QAAA,KAAK,EAAE,gBAAgB;AACxB,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,KAAK,EAAE,QAAQ;AAChB,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,KAAK,EAAE,OAAO;AACf;;AAGU,MAAA,iBAAiB,GAAG;IAC/B,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,yFAAyF,EAAE;IAC7I,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,oCAAoC,EAAE;;AAG5F;;;;AAIG;AACU,MAAA,uBAAuB,GAAG;AACrC,IAAA;AACE,QAAA,MAAM,EAAE,UAAU;AAClB,QAAA,WAAW,EAAE,6DAA6D;AAC1E,QAAA,eAAe,EAAE,CAAC;AAClB,QAAA,gBAAgB,EAAE,CAAC;AACnB,QAAA,IAAI,EAAE;AACJ,YAAA;AACE,gBAAA,YAAY,EAAE,iCAAiC;AAC/C,gBAAA,YAAY,EAAE,UAAU;AACxB,gBAAA,WAAW,EAAE,+DAA+D;AAC5E,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,aAAa,EAAE,oBAAoB;AACnC,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,YAAY,EAAE,4CAA4C;AAC1D,gBAAA,YAAY,EAAE,iBAAiB;AAC/B,gBAAA,WAAW,EAAE,0EAA0E;AACvF,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,aAAa,EAAE,mBAAmB;AAClC,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,YAAY,EAAE,+BAA+B;AAC7C,gBAAA,YAAY,EAAE,cAAc;AAC5B,gBAAA,WAAW,EAAE,6DAA6D;AAC1E,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,YAAY,EAAE,2CAA2C;AACzD,gBAAA,YAAY,EAAE,kBAAkB;AAChC,gBAAA,WAAW,EAAE,yEAAyE;AACtF,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,YAAY,EAAE,uCAAuC;AACrD,gBAAA,YAAY,EAAE,cAAc;AAC5B,gBAAA,WAAW,EAAE,qEAAqE;AAClF,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,YAAY,EAAE,2CAA2C;AACzD,gBAAA,YAAY,EAAE,kBAAkB;AAChC,gBAAA,WAAW,EAAE,yEAAyE;AACtF,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,YAAY,EAAE;AACf;AACF;AACF,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,WAAW,EAAE,qDAAqD;AAClE,QAAA,eAAe,EAAE,CAAC;AAClB,QAAA,gBAAgB,EAAE,CAAC;AACnB,QAAA,IAAI,EAAE;AACJ,YAAA;AACE,gBAAA,YAAY,EAAE,iCAAiC;AAC/C,gBAAA,YAAY,EAAE,UAAU;AACxB,gBAAA,WAAW,EAAE,+DAA+D;AAC5E,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,aAAa,EAAE,oBAAoB;AACnC,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,YAAY,EAAE,4CAA4C;AAC1D,gBAAA,YAAY,EAAE,iBAAiB;AAC/B,gBAAA,WAAW,EAAE,0EAA0E;AACvF,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,aAAa,EAAE,mBAAmB;AAClC,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,YAAY,EAAE,+BAA+B;AAC7C,gBAAA,YAAY,EAAE,cAAc;AAC5B,gBAAA,WAAW,EAAE,6DAA6D;AAC1E,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,YAAY,EAAE,2CAA2C;AACzD,gBAAA,YAAY,EAAE,kBAAkB;AAChC,gBAAA,WAAW,EAAE,yEAAyE;AACtF,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,YAAY,EAAE,uCAAuC;AACrD,gBAAA,YAAY,EAAE,cAAc;AAC5B,gBAAA,WAAW,EAAE,qEAAqE;AAClF,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,YAAY,EAAE,2CAA2C;AACzD,gBAAA,YAAY,EAAE,kBAAkB;AAChC,gBAAA,WAAW,EAAE,yEAAyE;AACtF,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,aAAa,EAAE,iBAAiB;AAChC,gBAAA,YAAY,EAAE;AACf;AACF;AACF;;;AC70BH;;;AAGG;MACU,MAAM,CAAA;AACf;;;;AAIG;AACH,IAAA,OAAO,iBAAiB,GAAG,mDAAmD;AAE9E,IAAA,OAAO,cAAc,GAAG,gBAAgB;AACxC;;;;AAIG;AACH,IAAA,OAAO,wBAAwB,GAAG,2BAA2B;AAC7D;;;;AAIG;AACH,IAAA,OAAO,sBAAsB,GAAG,yBAAyB;AAEzD;;;;AAIG;AACH,IAAA,OAAO,yBAAyB,GAAG,8CAA8C;AACjF;;;;AAIG;AACH,IAAA,OAAO,oBAAoB,GAAG,gCAAgC;AAE9D,IAAA,OAAO,uBAAuB,GAAG,qCAAqC;AACtE,IAAA,OAAO,eAAe,GAAG,uCAAuC;AAChE,IAAA,OAAO,aAAa,GAAG,kBAAkB;AACzC,IAAA,OAAO,uBAAuB,GAAG,0BAA0B;AAC3D,IAAA,OAAO,6BAA6B,GAAG,yCAAyC;AAChF,IAAA,OAAO,mBAAmB,GAAG,6CAA6C;AAC1E,IAAA,OAAO,0BAA0B,GAAG,6BAA6B;AACjE,IAAA,OAAO,wBAAwB,GAAG,wCAAwC;AAC1E,IAAA,OAAO,4BAA4B,GAAG,+BAA+B;AACrE,IAAA,OAAO,kCAAkC,GAAG,qCAAqC;AACjF,IAAA,OAAO,kCAAkC,GAAG,qCAAqC;AACjF,IAAA,OAAO,oCAAoC,GAAG,uCAAuC;AACrF,IAAA,OAAO,gCAAgC,GAAG,mCAAmC;;;ACKjF;;;;;AAKG;SACa,kBAAkB,GAAA;IAChC,OAAO;AACL,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,eAAe,EAAE,EAAE;AACnB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,eAAe,EAAE,EAAE;AACnB,QAAA,qBAAqB,EAAE,EAAE;AACzB,QAAA,oBAAoB,EAAE,IAAI;AAC1B,QAAA,aAAa,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC;AACvB,QAAA,OAAO,EAAC,EAAE;AACV,QAAA,QAAQ,EAAC,EAAE;AACX,QAAA,YAAY,EAAG,EAAE;AACjB,QAAA,kBAAkB,EAAE,EAAE;AACtB,QAAA,gBAAgB,EAAE,IAAI;AACtB,QAAA,cAAc,EAAE,IAAI;AACpB,QAAA,cAAc,EAAE,IAAI;AACpB,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,oBAAoB,EAAE,IAAI;;AAG1B,QAAA,gBAAgB,EAAE,SAAS;AAC3B,QAAA,eAAe,EAAE,EAAE;AACnB,QAAA,mBAAmB,EAAE,KAAK;AAC1B,QAAA,eAAe,EAAE,KAAK;AACtB,QAAA,cAAc,EAAE,SAAsB;AACtC,QAAA,kBAAkB,EAAE,KAAK;AACzB,QAAA,SAAS,EAAE;KACZ;AACH;;AClFA;;;;;;AAMG;AAGI,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,WAA0B,CAAA;AAC3D;;AAEG;AACH,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,CAAC,kBAAkB,EAAE,CAAC;;AAG7B,IAAA,wBAAwB,CAAC,KAAY,EAAA;QACnC,IAAI,CAAC,MAAM,CAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC;;AAG/C,IAAA,UAAU,CAAC,OAAY,EAAA;QACrB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;;AAGnC,IAAA,gBAAgB,CAAC,YAAiB,EAAA;QAChC,IAAI,CAAC,MAAM,CAAC,EAAE,qBAAqB,EAAE,YAAY,EAAE,CAAC;;AAGtD,IAAA,gBAAgB,CAAC,aAAkB,EAAA;QACjC,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,EAAG,aAAa,EAAE,CAAC;;AAGhD,IAAA,uBAAuB,CAAC,oBAA4B,EAAA;AAClD,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,oBAAoB,EAAE,CAAC;;AAGvC,IAAA,UAAU,CAAC,OAAkB,EAAA;QAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAG,OAAO,EAAE,CAAC;;AAGrC,IAAA,eAAe,CAAC,SAA0B,EAAA;QACxC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAG,SAAS,EAAE,CAAC;;AAGxC,IAAA,qBAAqB,CAAC,UAA8B,EAAA;QAClD,IAAI,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;;;AAIjD,IAAA,mBAAmB,CAAC,QAAuB,EAAA;QACzC,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;;AAG7C,IAAA,iBAAiB,CAAC,MAAqB,EAAA;QACrC,IAAI,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;;AAGzC,IAAA,iBAAiB,CAAC,MAAqB,EAAA;QACrC,IAAI,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;;AAGzC,IAAA,YAAY,CAAC,SAAwB,EAAA;QACnC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;;;IAIvC,iBAAiB,CAAC,QAAuB,EAAE,MAAqB,EAAE,MAAqB,EAAE,YAA2B,IAAI,EAAA;QACtH,IAAI,CAAC,MAAM,CAAC;AACV,YAAA,gBAAgB,EAAE,QAAQ;AAC1B,YAAA,cAAc,EAAE,MAAM;AACtB,YAAA,cAAc,EAAE,MAAM;AACtB,YAAA,SAAS,EAAE;AACZ,SAAA,CAAC;;;IAIJ,mBAAmB,GAAA;QACjB,IAAI,CAAC,MAAM,CAAC;AACV,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;;;AAIJ,IAAA,eAAe,CAAC,IAAa,EAAA;QAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;;;AAIrC,IAAA,kBAAkB,CAAC,QAA8B,EAAA;QAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;;;AAI5C,IAAA,WAAW,CAAC,QAAyB,EAAA;QACnC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;;;AAIrC,IAAA,aAAa,CAAC,UAA6B,EAAA;QACzC,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;;;AAIzC,IAAA,uBAAuB,CAAC,QAAuC,EAAA;QAC7D,IAAI,CAAC,MAAM,CAAC,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC;;;AAIjD,IAAA,mBAAmB,CAAC,QAAsC,EAAA;QACxD,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;;AAG7C,IAAA,kBAAkB,CAAC,OAAiC,EAAA;QAClD,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;;AAG3C,IAAA,sBAAsB,CAAC,IAAa,EAAA;QAClC,IAAI,CAAC,MAAM,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;;AAG5C,IAAA,kBAAkB,CAAC,OAAgB,EAAA;QACjC,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;;AAG3C,IAAA,iBAAiB,CAAC,MAA2C,EAAA;QAC3D,IAAI,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;;AAGzC,IAAA,qBAAqB,CAAC,QAAiB,EAAA;QACrC,IAAI,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC;;AAG/C,IAAA,YAAY,CAAC,SAAc,EAAA;QACzB,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;;;AAIvC,IAAA,yBAAyB,CACvB,QAA2B,EAC3B,OAAkC,EAClC,WAAqB,EACrB,OAAiB,EACjB,MAA4C,EAC5C,QAAkB,EAClB,SAAe,EAAA;QAEf,MAAM,OAAO,GAA2B,EAAE;QAE1C,IAAI,QAAQ,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC,gBAAgB,GAAG,QAAQ;QAC/D,IAAI,OAAO,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC,eAAe,GAAG,OAAO;QAC5D,IAAI,WAAW,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC,mBAAmB,GAAG,WAAW;QACxE,IAAI,OAAO,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC,eAAe,GAAG,OAAO;QAC5D,IAAI,MAAM,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC,cAAc,GAAG,MAAM;QACzD,IAAI,QAAQ,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC,kBAAkB,GAAG,QAAQ;QACjE,IAAI,SAAS,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC,SAAS,GAAG,SAAS;AAE1D,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;;;IAItB,wBAAwB,GAAA;QACtB,IAAI,CAAC,MAAM,CAAC;AACV,YAAA,gBAAgB,EAAE,SAAS;AAC3B,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,mBAAmB,EAAE,KAAK;AAC1B,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,cAAc,EAAE,SAAsB;AACtC,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,SAAS,EAAE;AACZ,SAAA,CAAC;;wGArKO,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFA,MAAM,EAAA,CAAA;;AAEnB,aAAa,GAAA,UAAA,CAAA;AADzB,IAAA,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;AACrB,CAAA,EAAA,aAAa,CAuKzB;4FAvKY,aAAa,EAAA,UAAA,EAAA,CAAA;kBAFzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACpBlC;;;;;AAKG;MACU,IAAI,CAAA;AACb;;;;;AAKG;AACH,IAAA,OAAO,aAAa,GAAG,+BAA+B;AAEtD;;;;;AAKG;AACH,IAAA,OAAO,oBAAoB,GAAG,sBAAsB;AACpD;;;;;AAKG;AACH,IAAA,OAAO,eAAe,GAAG,WAAW;AACpC;;;;;AAKG;AACH,IAAA,OAAO,SAAS,GAAG,WAAW;AAC9B;;;;;AAKG;AACH,IAAA,OAAO,oBAAoB,GAAG,2CAA2C;AAEzE;;;;;AAKG;AACH,IAAA,OAAO,OAAO,GAAG,aAAa;AAE9B;;;;AAIG;AACH,IAAA,OAAO,cAAc,GAAG,eAAe;AACvC;;;;;AAKG;AACH,IAAA,OAAO,wBAAwB,GAAG,yCAAyC;AAC3E;;;;;AAKG;AACH,IAAA,OAAO,8BAA8B,GAAG,gDAAgD;AACxF;;;;;AAKG;AACH,IAAA,OAAO,oBAAoB,GAAG,kBAAkB;AAChD;;;;AAIG;AACH,IAAA,OAAO,OAAO,GAAG,qBAAqB;AACtC;;;;AAIG;AACH,IAAA,OAAO,oBAAoB,GAAG,oBAAoB;AAClD;;;;AAIG;AACH,IAAA,OAAO,uBAAuB,GAAG,0CAA0C;AAC3E;;;;AAIG;AACH,IAAA,OAAO,QAAQ,GAAG,4CAA4C;AAE9D;;;;;AAKG;AACH,IAAA,OAAO,qBAAqB,GAAG,8CAA8C;AAE7E;;;;;AAKG;AAEH,IAAA,OAAO,UAAU,GAAG,aAAa;AACjC,IAAA,OAAO,MAAM,GAAG,6BAA6B;AAC7C,IAAA,OAAO,aAAa,GAAG,MAAM;AAC7B,IAAA,OAAO,gBAAgB,GAAG,2CAA2C;AACrE,IAAA,OAAO,eAAe,GAAG,uCAAuC;AAChE,IAAA,OAAO,sBAAsB,GAAG,6CAA6C;;;ACvHjF;;;;;AAKG;MAIU,gBAAgB,CAAA;AAeP,IAAA,IAAA;AAbpB;;;;AAIG;AACK,IAAA,SAAS;AAEjB;;;;;AAKG;AACH,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI;;AAExB;;;;;AAKG;AACH,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;QACxE,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;;;AAK1C;;;;AAIG;AACH,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,cAAc;;AAGvC;;;;AAIG;AACH,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,cAAc;;AAGvC;;;;AAIG;AACH,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,gBAAgB;;wGAxD9B,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACLD;;;;;;;AAOG;MAEU,eAAe,CAAA;AASb,IAAA,aAAA;AACC,IAAA,IAAA;AACD,IAAA,gBAAA;AATX;;;;;AAKG;AACH,IAAA,WAAA,CACW,aAA4B,EAC3B,IAAgB,EACjB,gBAAkC,EAAA;QAFlC,IAAa,CAAA,aAAA,GAAb,aAAa;QACZ,IAAI,CAAA,IAAA,GAAJ,IAAI;QACL,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;;AAG3B;;;;AAIG;AACH,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU;;AAG3C;;;;AAIG;AACH,IAAA,MAAM,CAAC,MAAW,EAAA;AACd,QAAA,MAAM,OAAO,GAAG,EAAE,eAAe,EAAE,6CAA6C,EAAE;AAClF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,GAAG,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAA,CAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAC9F,GAAG,CAAC,CAAC,SAAc,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAC7D;;AAGL;;;AAGG;IACH,MAAM,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAkB,CAAG,EAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAA,CAAE,CAAC,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,QAAyB,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CACvE;;AAGL;;;;AAIG;AACH,IAAA,OAAO,CAAC,EAAU,EAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,GAAG,IAAI,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,eAAe,IAAI,EAAE,CAAA,CAAE,CAAC,CAAC,IAAI,CACzE,GAAG,CAAC,CAAC,MAAW,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAC9D;;AAGL;;;;;AAKG;IACH,MAAM,CAAC,EAAU,EAAE,MAAqB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,GAAG,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,eAAe,CAAA,CAAA,EAAI,EAAE,CAAE,CAAA,EAAE,MAAM,CAAC,CAAC,IAAI,CAC3F,GAAG,CAAC,CAAC,aAA4B,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CACtF;;AAGL;;;;AAIG;AACH,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAO,CAAG,EAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAA,CAAA,EAAI,EAAE,CAAE,CAAA,CAAC,CAAC,IAAI,CAClF,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAC3C;;wGA5EI,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA;;4FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACDlC;;;;;;AAMG;AAEG,MAAO,aAAc,SAAQ,WAA0B,CAAA;AAC5B,IAAA,KAAA;AAA/B,IAAA,WAAA,CAA+B,KAAoB,EAAA;QACjD,KAAK,CAAC,KAAK,CAAC;QADiB,IAAK,CAAA,KAAA,GAAL,KAAK;;AAIpC;;;AAGG;IACH,uBAAuB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,sBAAsB,CAAC;;AAGhD;;;AAGG;IACH,0BAA0B,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,sBAAsB,CAAC,CAAC;;AAE9D;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC;;AAE/C;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,YAAY,CAAC;;AAGnD;;;AAGG;IACH,wBAAwB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,kBAAkB,CAAC;;;AAIzD;;;AAGG;IACH,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,gBAAgB,CAAC;;AAGvD;;;AAGG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAAC;;AAGrD;;;AAGG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAAC;;AAGrD;;;AAGG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,CAAC;;AAGhD;;;;AAIG;IACH,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;YAC7B,QAAQ,EAAE,KAAK,CAAC,gBAAgB;YAChC,MAAM,EAAE,KAAK,CAAC,cAAc;YAC5B,MAAM,EAAE,KAAK,CAAC,cAAc;YAC5B,SAAS,EAAE,KAAK,CAAC;AAClB,SAAA,CAAC,CAAC;;AAGL;;;;AAIG;IACH,iBAAiB,GAAA;AACf,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC7B,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,gBAAgB;YAChC,MAAM,EAAE,KAAK,CAAC,cAAc;YAC5B,MAAM,EAAE,KAAK,CAAC,cAAc;YAC5B,SAAS,EAAE,KAAK,CAAC;SAClB;;AAGH;;;AAGG;IACH,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,YAAY,CAAC;;AAGnD;;;AAGG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,YAAY;;AAGrC;;;AAGG;IACH,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,eAAe,CAAC;;AAGtD;;;AAGG;IACH,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,eAAe;;AAGxC;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC;;AAG/C;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ;;AAGjC;;;AAGG;IACH,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC;;AAGjD;;;AAGG;IACH,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU;;AAGnC;;;AAGG;IACH,0BAA0B,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,oBAAoB,CAAC;;AAG3D;;;AAGG;IACH,uBAAuB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,oBAAoB;;;AAI7C;;;AAGG;IACH,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,gBAAgB,CAAC;;AAGvD;;;AAGG;IACH,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,gBAAgB;;AAGzC;;;AAGG;IACH,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,eAAe,CAAC;;AAGtD;;;AAGG;IACH,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,eAAe;;AAGxC;;;AAGG;IACH,yBAAyB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,mBAAmB,CAAC;;AAG1D;;;AAGG;IACH,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,mBAAmB;;AAG5C;;;AAGG;IACH,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,eAAe,CAAC;;AAGtD;;;AAGG;IACH,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,eAAe;;AAGxC;;;AAGG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAAC;;AAGrD;;;AAGG;IACH,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc;;AAGvC;;;AAGG;IACH,wBAAwB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,kBAAkB,CAAC;;AAGzD;;;AAGG;IACH,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,kBAAkB;;AAG3C;;;AAGG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,CAAC;;AAGhD;;;AAGG;IACH,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS;;AAGlC;;;AAGG;IACH,yBAAyB,GAAA;QASvB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;YAC7B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;YAC9C,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,SAAS,EAAE,KAAK,CAAC;AAClB,SAAA,CAAC,CAAC;;AAGL;;;AAGG;IACH,sBAAsB,GAAA;AASpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC7B,OAAO;YACL,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;YAC9C,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,SAAS,EAAE,KAAK,CAAC;SAClB;;wGAxVQ,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA;;4FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACLlC;;;;AAIG;MAKU,mBAAmB,CAAA;AASrB,IAAA,aAAA;AACC,IAAA,IAAA;AACD,IAAA,gBAAA;AATT;;;;;AAKG;AACH,IAAA,WAAA,CACS,aAA4B,EAC3B,IAAgB,EACjB,gBAAkC,EAAA;QAFlC,IAAa,CAAA,aAAA,GAAb,aAAa;QACZ,IAAI,CAAA,IAAA,GAAJ,IAAI;QACL,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;;AAGzB;;;;AAIG;AACH,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU;;AAGxC;;;;;AAKG;AACJ,IAAA,cAAc,CAAC,SAA4B,EAAA;AACzC,QAAA,IAAG,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAqB,CAAG,EAAA,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,eAAe,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,EAAG,SAAS,CAAA,CAAE,CAAC,CAAC,IAAI,CAC/G,GAAG,CAAC,CAAC,OAA2B,KAAI;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;AACxC,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAGF;;;;;AAKG;AACJ,IAAA,qBAAqB,CAAC,SAAgB,EAAA;QACpC,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;AAC/F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,CAAG,EAAA,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACpG,GAAG,CAAC,CAAC,QAAa,KAAI;;AAEpB,YAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE;gBACnC,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,QAAQ,CAAC,UAAU,CAAC;;AAEjE,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAEF;;;;AAIG;;;;;;;;;;;AAYJ;;;;AAIG;AACH,IAAA,qBAAqB,CAAC,UAAiB,EAAA;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAqB,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAG,EAAA,UAAU,CAAE,CAAA,CAAC,CAAC,IAAI,CACtG,GAAG,CAAC,CAAC,aAAiC,KAAI;AACxC,YAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACpD,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAGH;;;;;AAKG;IACF,qBAAqB,CAAC,QAAe,EAAE,SAAgB,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAkB,CAAG,EAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAA,CAAA,EAAI,IAAI,CAAC,uBAAuB,CAAG,EAAA,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAA,EAAG,SAAS,CAAE,CAAA,CAAC,CAAC,IAAI,CAC1J,GAAG,CAAC,CAAC,OAAwB,KAAI;AAC/B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAGH;;;;;;;AAOG;IACH,kBAAkB,CAAC,UAAkB,EAAE,OAAY,EAAA;QACjD,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;AAC/F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,eAAe,CAAI,CAAA,EAAA,UAAU,CAAE,CAAA,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACnH,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAGF;;;;AAIE;AACH,IAAA,sBAAsB,CAAC,SAAkB,EAAA;AACvC,QAAA,IAAG,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;QAC3B,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;AAC/F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAkB,CAAG,EAAA,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,QAAQ,CAAA,EAAG,SAAS,CAAA,CAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACnG,GAAG,CAAC,CAAC,QAAyB,KAAI;AAChC,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC1C,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAGH;;;;;;AAMG;AACH,IAAA,sBAAsB,CAAC,aAAqB,EAAE,YAA2B,IAAI,EAAE,aAA4B,IAAI,EAAA;AAC7G,QAAA,IAAG,CAAC,aAAa;AAAE,YAAA,OAAO,KAAK;AAC/B,QAAA,IAAI,GAAG,GAAG,CAAG,EAAA,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,qBAAqB,CAAG,EAAA,aAAa,EAAE;AACvE,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;AAC7B,QAAA,MAAM,YAAY,GAAG,SAAS,IAAI,IAAI;QACtC,IAAI,YAAY,EAAE;YAChB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC;;QAEtD,IAAI,UAAU,EAAE;YACd,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC;;QAElD,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;QAC/F,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAoB,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACpE,GAAG,CAAC,CAAC,UAA6B,KAAI;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9C,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAIH;;;;;;;;;AASG;IACH,uBAAuB,CAAC,SAAiB,EAAE,QAAuB,EAAE,MAAqB,EAAE,MAAqB,EAAE,SAAA,GAA2B,IAAI,EAAA;AAC/I,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;QAE7B,IAAI,QAAQ,EAAE;YACZ,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;;QAGhD,IAAI,MAAM,EAAE;YACV,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC;;QAGhD,IAAI,MAAM,EAAE;YACV,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC;;QAGlD,IAAI,SAAS,EAAE;YACb,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;;QAEnD,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;AAC/F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,MAAM,CAAI,CAAA,EAAA,SAAS,CAAE,CAAA,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAC9F,GAAG,CAAC,CAAC,QAAa,KAAI;AACpB,YAAA,IAAI,QAAQ,CAAC,SAAS,EAAE;gBACtB,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC;;AAE1D,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAGJ,IAAA,kBAAkB,CAAC,UAAkB,EAAA;QAClC,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;;QAEf,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;QAC/F,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAA,CAAE,EAAE,EAAE,OAAO,EAAE,CAAC;;AAGpH;;;;AAIG;AACH,IAAA,qBAAqB,CAAC,MAAc,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;QACzB,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;AAC/F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAqB,CAAG,EAAA,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,wBAAwB,CAAA,EAAG,MAAM,CAAA,CAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACnH,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAGH;;;;AAIG;AACH,IAAA,0BAA0B,CAAC,UAAkB,EAAA;AAC3C,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;QAC7B,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;AAC/F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAsB,CAAG,EAAA,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,8BAA8B,CAAA,EAAG,UAAU,CAAA,CAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAC9H,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAGH;;;;AAIG;AACH,IAAA,UAAU,CAAC,QAAkB,EAAA;QAC3B,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;AAC/F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAG,EAAA,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAA,CAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAClG,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAGH;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,OAAY,EAAA;QAC7B,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;AAC/F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAG,EAAA,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAA,CAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACjG,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAGH;;;;;;AAMG;AACH,IAAA,oBAAoB,CAAC,UAAkB,EAAE,MAAc,EAAE,uBAA+B,EAAA;AACtF,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,uBAAuB,EAAE;SAC1B;QACD,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;AAC/F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,CAAA,EAAG,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACzH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;gBAC/B,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9D,gBAAA,QAAQ,CAAC,gBAAgB,GAAG,gBAAgB;;AAEhD,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;AAGH;;;;AAIG;AACK,IAAA,eAAe,CAAC,MAAc,EAAA;AACpC,QAAA,QAAQ,MAAM,CAAC,WAAW,EAAE;YAC1B,KAAK,MAAM,CAAC,QAAQ;gBAClB,OAAO,MAAM,CAAC,eAAe;YAC/B,KAAK,MAAM,CAAC,yBAAyB;gBACnC,OAAO,MAAM,CAAC,yBAAyB;YACzC,KAAK,MAAM,CAAC,cAAc;gBACxB,OAAO,MAAM,CAAC,cAAc;AAC9B,YAAA;AACE,gBAAA,OAAO,MAAM,CAAC,WAAW,EAAE;;;AAIjC;;;;;AAKG;IACH,cAAc,CAAC,UAAkB,EAAE,SAAiB,EAAA;QAClD,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA,2CAAA,CAA6C,EAAE,CAAC;AAC/F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAM,CAAG,EAAA,IAAI,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,eAAe,CAAG,EAAA,UAAU,CAAE,CAAA,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAClG,GAAG,CAAC,MAAK;YACP,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE;YACjD,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE;YAClD,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE;AAClD,YAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE;AAC7E,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH;;wGAvVQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAHlB,MAAM,EAAA,CAAA;;4FAGP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACfD;;AAEG;MAIU,qBAAqB,CAAA;AAKlB,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,mBAAA;IALJ,4BAA4B,GAAwB,IAAI;AAEhE,IAAA,WAAA,CACY,aAA4B,EAC5B,aAA4B,EAC5B,mBAAwC,EAAA;QAFxC,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;;;;AAM/B;;;AAGG;AACH,IAAA,0BAA0B,CAAC,SAAiB,EAAA;;QAExC,IAAI,CAAC,uBAAuB,EAAE;AAE9B,QAAA,IAAI,CAAC,4BAA4B,GAAG,aAAa,CAAC;AAC9C,YAAA,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE;AAC3C,YAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE;AACzC,YAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE;AACzC,YAAA,IAAI,CAAC,aAAa,CAAC,eAAe;AACrC,SAAA,CAAC,CAAC,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;AAChC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AACvG,YAAA,OAAO,MAAM;AACjB,SAAC,CAAC,EACF,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,KAAI;AAChD,YAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;AAC3G,SAAC,CAAC,CACL,CAAC,SAAS,CAAC;AACR,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACf,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;AAC3D,gBAAA,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,QAAQ,CAAC;aACvD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACb,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,EAAE,KAAK,CAAC;;AAEpE,SAAA,CAAC;;AAGN;;;AAGG;AACH,IAAA,yCAAyC,CAAC,SAAiB,EAAA;;QAEvD,IAAI,CAAC,uBAAuB,EAAE;;AAG9B,QAAA,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;AAC1F,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACf,gBAAA,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,QAAQ,CAAC;aACvD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACb,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,EAAE,KAAK,CAAC;;AAEpE,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC;;AAG9C;;AAEG;IACH,uBAAuB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACnC,YAAA,IAAI,CAAC,4BAA4B,CAAC,WAAW,EAAE;AAC/C,YAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI;;;AAIhD;;;AAGG;AACH,IAAA,GAAG,CAAC,QAA8B,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC;;AAGnD;;;AAGG;IACH,GAAG,GAAA;AACC,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;;AAGrD;;;AAGG;IACH,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;;AAGlD;;;AAGG;AACH,IAAA,mBAAmB,CAAC,QAAuB,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,CAAC;;AAGpD;;;AAGG;AACH,IAAA,iBAAiB,CAAC,MAAqB,EAAA;AACnC,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC;;AAGhD;;;AAGG;AACH,IAAA,iBAAiB,CAAC,MAAqB,EAAA;AACnC,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC;;AAGhD;;;AAGG;AACH,IAAA,YAAY,CAAC,SAAwB,EAAA;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC;;AAG9C;;;;;;AAMG;IACH,iBAAiB,CAAC,QAAuB,EAAE,MAAqB,EAAE,MAAqB,EAAE,YAA2B,IAAI,EAAA;AACpH,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;;AAG7E;;AAEG;IACH,mBAAmB,GAAA;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE;;AAG5C;;;AAGG;AACH,IAAA,eAAe,CAAC,IAAa,EAAA;AACzB,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC;;AAG5C;;;AAGG;IACH,iBAAiB,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE;;AAGpD;;;AAGG;IACH,sBAAsB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;;AAGjD;;;AAGG;AACH,IAAA,aAAa,CAAC,UAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC;;AAGhD;;;AAGG;AACH,IAAA,WAAW,CAAC,QAAe,EAAA;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC;;AAG5C;;;AAGG;IACH,oBAAoB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,0BAA0B,EAAE;;AAG1D;;;AAGG;AACH,IAAA,oCAAoC,CAAC,SAAiB,EAAA;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;QAC3D,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAC5C,SAAS,EACT,YAAY,CAAC,QAAQ,EACrB,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,MAAM,CACtB,CAAC,SAAS,CAAC;AACR,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACf,gBAAA,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,QAAQ,CAAC;aACvD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;;AAE5B,SAAA,CAAC;;AAGN;;;AAGG;AACH,IAAA,8BAA8B,CAAC,SAAiB,EAAA;AAC5C,QAAA,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAC5C,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,IAAI,CACP,CAAC,SAAS,CAAC;AACR,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACf,gBAAA,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,QAAQ,CAAC;aACvD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;;AAEtD,SAAA,CAAC;;AAGN;;;;;AAKG;AACH,IAAA,iBAAiB,CAAC,SAAiB,EAAE,eAA8B,EAAE,UAAyB,EAAA;AAC1F,QAAA,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,SAAS,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC;AAC9F,YAAA,IAAI,EAAE,CAAC,UAAU,KAAI;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC;aAC/C;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;;AAE5D,SAAA,CAAC;;AAGN;;;;;;;;;;;;;;;;;AAiBG;AACH,IAAA,gCAAgC,CAAC,SAAiB,EAAA;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;AAC3D,QAAA,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,IAAI,IAAI;AACnD,QAAA,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,IAAI,IAAI;;QAGhD,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;AAChE,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACf,gBAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,QAAQ,CAAC;aACrD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,KAAK,CAAC;;AAEjF,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,SAAS,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC;AAC9F,YAAA,IAAI,EAAE,CAAC,UAAU,KAAI;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC;aAC/C;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;;AAEzE,SAAA,CAAC;;QAGF,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;AACjE,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACf,gBAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC;aAC3C;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;;AAEvE,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,oCAAoC,CAAC,SAAS,CAAC;;wGAtT/C,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFlB,MAAM,EAAA,CAAA;;4FAET,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACRD;;;;AAIG;MAIU,qBAAqB,CAAA;AAsCb,IAAA,eAAA;AAAyC,IAAA,mBAAA;AAA2C,IAAA,cAAA;AApCvG;;AAEG;AACH,IAAA,eAAe,GAAG,IAAI,YAAY,EAA+B;AAEjE;;;AAGG;AACH,IAAA,YAAY;AAEZ;;;AAGG;AACH,IAAA,SAAS,GAAW,MAAM,CAAC,KAAK;AAEhC;;;AAGG;AACH,IAAA,OAAO,GAAW,MAAM,CAAC,KAAK;AAE9B;;;AAGG;AACH,IAAA,SAAS,GAAW,MAAM,CAAC,KAAK;AAEhC;;;;;;AAMG;AACH,IAAA,WAAA,CAAmB,eAAgC,EAAS,mBAAkC,EAAS,cAA8B,EAAA;QAAlH,IAAe,CAAA,eAAA,GAAf,eAAe;QAA0B,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QAAwB,IAAc,CAAA,cAAA,GAAd,cAAc;;AAErH;;;;AAIG;IACH,qBAAqB,CAAC,IAAU,EAAE,SAAiB,EAAA;QACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,IAAI,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC;YAC1D,IAAI,CAAC,SAAS,EAAE;AACd,gBAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,4BAA4B,CAAC;gBACrD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAC,OAAO,EAAE,MAAM,CAAC,oBAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,oBAAoB,EAAC,CAAC;gBAC7H,MAAM,CAAC,KAAK,CAAC;gBACb;;AAEF,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS;AAClC,iBAAA,SAAS,CAAC;AACT;;;;AAIG;AACH,gBAAA,IAAI,EAAE,CAAC,KAAK,KAAI;AACd,oBAAA,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,KAAK,CAAC;oBACxD,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,gBAAgB,EAAC,MAAM,EAAG,MAAM,CAAC,cAAc,EAAC,CAAC,CAAC;AACzG,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;oBACxD,OAAO,CAAC,KAAK,CAAC;iBACf;AACD;;;;AAIG;AACH,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;oBACf,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAC,OAAO,EAAE,MAAM,CAAC,cAAc,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;oBAC1G,MAAM,CAAC,KAAK,CAAC;iBACd;AACF,aAAA,CAAC;AACN,SAAC,CAAC;;AAGJ;;;;;AAKG;AACH,IAAA,MAAM,uBAAuB,CAAC,KAAa,EAAE,SAAiB,EAAA;QAC5D,MAAM,OAAO,GAAU,EAAE;AAEzB,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC;AAChE,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;;YACpB,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,CAAyB,sBAAA,EAAA,IAAI,CAAC,IAAI,CAAG,CAAA,CAAA,EAAE,KAAK,CAAC;AAC3D,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;;;AAI3E,QAAA,OAAO,OAAO;;AAGhB;;;;;;AAMG;AACH,IAAA,MAAM,mCAAmC,CACvC,KAAa,EACb,SAAiB,EACjB,UAAkF,EAAA;QAElF,MAAM,OAAO,GAAU,EAAE;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;YACrB,IAAI,UAAU,EAAE;gBACd,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;;AAGnC,YAAA,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC;AAChE,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;;YACpB,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,CAAyB,sBAAA,EAAA,IAAI,CAAC,IAAI,CAAG,CAAA,CAAA,EAAE,KAAK,CAAC;AAC3D,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;;;AAI3E,QAAA,OAAO,OAAO;;AAGhB;;;;AAIG;IACH,iBAAiB,CAAC,IAAU,EAAE,SAAiB,EAAA;AAC7C,QAAA,IAAI,IAAI,IAAI,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;;AAI9B;;;;AAIG;AACH,IAAA,sBAAsB,CAAC,cAAsB,EAAA;QAC3C,IAAI,cAAc,IAAI,cAAc,KAAK,MAAM,CAAC,KAAK,EAAE;AACrD,YAAA,IAAI,CAAC,SAAS,GAAG,cAAc;;;AAInC;;;AAGG;IACH,oBAAoB,CAAC,YAAmB,EAAE,SAAkB,EAAA;QAE1D,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC7B,YAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC;YAC7D,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;AAClD,YAAA,OAAO,QAAQ;;aACZ;AACH,YAAA,OAAO,IAAI;;;AAKf;;;;;;;AAOG;AACH,IAAA,kBAAkB,CAAI,IAAS,EAAE,eAAwB,EAAE,gBAA0B,EAAA;QACnF,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACxB,MAAM,MAAM,GAAG,CAAC,CAAC,eAAe,CAAC,KAAK,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5F,MAAM,MAAM,GAAG,CAAC,CAAC,eAAe,CAAC,KAAK,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YAE5F,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC5D,gBAAA,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;;YAErC,IAAI,MAAM,GAAG,MAAM;gBAAE,OAAO,CAAC,CAAC;YAC9B,IAAI,MAAM,GAAG,MAAM;AAAE,gBAAA,OAAO,CAAC;AAC7B,YAAA,OAAO,CAAC;AACV,SAAC,CAAC;;wGAhMO,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACTD;;;;AAIG;MAIU,iBAAiB,CAAA;AAE5B;;;AAGG;AACH,IAAA,WAAA,GAAA;AAEE;;;;;AAKG;IACH,cAAc,CAAC,KAAa,EAAE,MAAoB,EAAA;QAChD,MAAM,QAAQ,GAAG,IAAI;AACrB,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,IAAI,MAAM,CAAC,eAAe;AACxE,QAAA,IAAI,KAAK,GAAG,QAAQ,EAAE;YACpB,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA,CAAE;;AAC3C,aAAA,IAAI,KAAK,GAAG,QAAQ,GAAG,QAAQ,EAAE;AACtC,YAAA,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ;AAC/B,YAAA,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;;aACrE;YACL,MAAM,MAAM,GAAG,KAAK,IAAI,QAAQ,GAAG,QAAQ,CAAC;AAC5C,YAAA,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;;;wGAzBrE,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MC6BY,6BAA6B,CAAA;AAI9B,IAAA,mBAAA;AACA,IAAA,iBAAA;AAJF,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IAEtC,WACU,CAAA,mBAAwC,EACxC,iBAAoC,EAAA;QADpC,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;;AAG3B;;AAEG;AACH,IAAA,cAAc,CAAC,SAAiB,EAAA;QAC9B,OAAO,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,SAAS,CAAC;;AAGnE;;AAEG;AACH,IAAA,cAAc,CAAC,cAAsB,EAAA;QACnC,OAAO,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,cAAc,CAAC;;AAGvE;;AAEG;AACH,IAAA,iBAAiB,CAAC,UAAkB,EAAA;QAClC,OAAO,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,UAAU,CAAC;;AAGxE;;AAEG;IACH,gBAAgB,CAAC,aAA8B,EAAE,cAA2C,EAAA;AAC1F,QAAA,IAAI,cAAc,KAAK,MAAM,CAAC,SAAS,EAAE;AACvC,YAAA,OAAO,aAAa,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,gBAAgB,CAAC;;aAC/E;AACL,YAAA,OAAO,aAAa,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,gBAAgB,CAAC;;;AAIxF;;AAEG;AACK,IAAA,gBAAgB,CACtB,cAAkD,EAClD,gBAAwB,EACxB,oBAA4B,EAC5B,iBAAyB,EACzB,aAA6B,EAC7B,eAAmC,EACnC,mBAAwC,EAAA;;QAGxC,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,iCAAiC,EAAE;;;QAI9E,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;YAC1D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,6BAA6B,EAAE;;;QAI1E,IAAI,CAAC,gBAAgB,EAAE;YACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,0BAA0B,EAAE;;;QAIvE,IAAI,CAAC,oBAAoB,EAAE;YACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,+BAA+B,EAAE;;;AAI5E,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,8BAA8B,EAAE;;;AAI3E,QAAA,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC;AAC3E,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,0BAA0B,EAAE;;;QAIvE,IAAI,cAAc,KAAK,MAAM,CAAC,SAAS,IAAI,CAAC,iBAAiB,EAAE;YAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,2BAA2B,EAAE;;QAGxE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,+BAA+B,EAAE;;AAG3E;;AAEG;AACH,IAAA,YAAY,CACV,cAAkD,EAClD,gBAAwB,EACxB,oBAA4B,EAC5B,iBAAyB,EACzB,aAA6B,EAC7B,eAAmC,EACnC,mBAAwC,EAAA;QAExC,OAAO,IAAI,CAAC,gBAAgB,CAC1B,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,mBAAmB,CACpB,CAAC,OAAO;;AAGX;;AAEG;IACH,oBAAoB,CAClB,cAAkD,EAClD,gBAAwB,EACxB,oBAA4B,EAC5B,iBAAyB,EACzB,aAA6B,EAC7B,QAAiB,EAAA;QAEjB,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,IAAI;;;;QAKb,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,IAAI;;QAGb,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,OAAO,IAAI;;QAGb,IAAI,CAAC,oBAAoB,EAAE;AACzB,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI;;;AAIb,QAAA,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC;AAC3E,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI;;;QAIb,IAAI,cAAc,KAAK,MAAM,CAAC,SAAS,IAAI,CAAC,iBAAiB,EAAE;AAC7D,YAAA,OAAO,IAAI;;QAGb,OAAO,KAAK,CAAC;;AAGf;;AAEG;IACH,eAAe,CACb,cAAkD,EAClD,gBAAwB,EACxB,oBAA4B,EAC5B,iBAAyB,EACzB,aAA6B,EAAA;;QAG7B,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,iCAAiC,EAAE;;;QAI9E,IAAI,CAAC,gBAAgB,EAAE;YACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,0BAA0B,EAAE;;;QAIvE,IAAI,CAAC,oBAAoB,EAAE;YACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,+BAA+B,EAAE;;;AAI5E,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,8BAA8B,EAAE;;;AAI3E,QAAA,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC;AAC3E,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,0BAA0B,EAAE;;;QAIvE,IAAI,cAAc,KAAK,MAAM,CAAC,SAAS,IAAI,CAAC,iBAAiB,EAAE;YAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,2BAA2B,EAAE;;QAGxE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,+BAA+B,EAAE;;AAG3E;;AAEG;IACH,oBAAoB,CAClB,cAA2C,EAC3C,gBAAwB,EACxB,oBAA4B,EAC5B,iBAAyB,EACzB,aAA6B,EAC7B,SAAiB,EAAA;AAEjB,QAAA,MAAM,OAAO,GAA0B;AACrC,YAAA,MAAM,EAAE,cAAc;AACtB,YAAA,UAAU,EAAE,gBAAgB;AAC5B,YAAA,cAAc,EAAE,oBAAoB;YACpC,SAAS;YACT,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,KAAK;AACpC,gBAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AACxB,gBAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;gBACxB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;AACjE,aAAA,CAAC;SACH;;QAGD,IAAI,cAAc,KAAK,MAAM,CAAC,SAAS,IAAI,iBAAiB,EAAE;AAC5D,YAAA,OAAO,CAAC,WAAW,GAAG,iBAAiB;;AAGzC,QAAA,OAAO,OAAO;;AAGhB;;AAEG;AACH,IAAA,kBAAkB,CAAC,OAA8B,EAAA;QAC/C,OAAO,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,CAAC;;AAG7D;;AAEG;IACH,cAAc,CAAC,QAAgB,EAAE,MAAW,EAAA;QAC1C,OAAO,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC;;AAGhE;;AAEG;IACH,kBAAkB,CAAC,IAAU,EAAE,aAAqB,EAAA;QAClD,OAAO;YACL,IAAI;YACJ,aAAa;YACb,QAAQ,EAAE,MAAM,CAAC;SAClB;;AAGH;;AAEG;IACH,mBAAmB,GAAA;QACjB,OAAO;AACL,YAAA,sBAAsB,EAAE,IAAI;AAC5B,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,oBAAoB,EAAE,IAAI;AAC1B,YAAA,aAAa,EAAE,EAAoB;AACnC,YAAA,WAAW,EAAE;SACd;;AAGH;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;wGA3Rf,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cAF5B,MAAM,EAAA,CAAA;;4FAEP,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MC/BY,yBAAyB,CAAA;AAChB,IAAA,cAAA;AAApB,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAc,CAAA,cAAA,GAAd,cAAc;;AAElC;;AAEG;IACH,gBAAgB,CAAC,OAAe,EAAE,MAAc,EAAA;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,OAAO;YACjB,OAAO;YACP;AACD,SAAA,CAAC;;AAGJ;;AAEG;IACH,kBAAkB,CAAC,OAAe,EAAE,MAAc,EAAA;AAChD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,MAAM;YAChB,OAAO;YACP;AACD,SAAA,CAAC;;AAGJ;;AAEG;IACH,kBAAkB,CAAC,OAAe,EAAE,MAAc,EAAA;AAChD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,SAAS;YACnB,OAAO;YACP;AACD,SAAA,CAAC;;AAGJ;;AAEG;IACK,kCAAkC,CACxC,cAAkD,EAClD,iBAAyB,EACzB,gBAAwB,EACxB,oBAA4B,EAC5B,aAA6B,EAAA;AAE7B,QAAA,IAAI,cAAc,KAAK,WAAW,IAAI,CAAC,iBAAiB,EAAE;YACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;;QAG/C,IAAI,CAAC,gBAAgB,EAAE;YACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;;QAG9C,IAAI,CAAC,oBAAoB,EAAE;YACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE;;AAGlD,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;;QAG/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;;AAGvC;;AAEG;IACH,sBAAsB,CACpB,cAAkD,EAClD,iBAAyB,EACzB,gBAAwB,EACxB,oBAA4B,EAC5B,aAA6B,EAAA;AAE7B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kCAAkC,CACxD,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,CACd;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,KAAM,CAAC;;QAG/C,OAAO,UAAU,CAAC,OAAO;;AAG3B;;AAEG;AACK,IAAA,qBAAqB,CAAC,KAAa,EAAA;AACzC,QAAA,MAAM,QAAQ,GAAwD;AACpE,YAAA,SAAS,EAAE;gBACT,OAAO,EAAE,MAAM,CAAC,gCAAgC;gBAChD,MAAM,EAAE,MAAM,CAAC;AAChB,aAAA;AACD,YAAA,QAAQ,EAAE;gBACR,OAAO,EAAE,MAAM,CAAC,+BAA+B;gBAC/C,MAAM,EAAE,MAAM,CAAC;AAChB,aAAA;AACD,YAAA,YAAY,EAAE;gBACZ,OAAO,EAAE,MAAM,CAAC,oCAAoC;gBACpD,MAAM,EAAE,MAAM,CAAC;AAChB,aAAA;AACD,YAAA,SAAS,EAAE;gBACT,OAAO,EAAE,MAAM,CAAC,gCAAgC;gBAChD,MAAM,EAAE,MAAM,CAAC;AAChB;SACF;AAED,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC/B,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;;;AAI5D;;AAEG;IACH,wBAAwB,GAAA;QACtB,IAAI,CAAC,kBAAkB,CACrB,MAAM,CAAC,0BAA0B,EACjC,MAAM,CAAC,iCAAiC,CACzC;AACD,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,iBAAiB,CAAC,SAAiB,EAAE,OAAe,EAAA;QAClD,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,gCAAgC,EAAE,OAAO,CAAC;AACvE,YAAA,OAAO,KAAK;;AAEd,QAAA,OAAO,IAAI;;wGA1IF,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCUY,yBAAyB,CAAA;AAI1B,IAAA,eAAA;AACA,IAAA,WAAA;AAJF,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IAEtC,WACU,CAAA,eAA8C,EAC9C,WAAsC,EAAA;QADtC,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAW,CAAA,WAAA,GAAX,WAAW;;AAGrB;;AAEG;AACH,IAAA,cAAc,CACZ,SAAiB,EACjB,SAAgD,EAChD,OAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,SAAS,EAAE,4CAA4C,CAAC,EAAE;YAChG,OAAO,IAAI,UAAU,EAAE;;QAEzB,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC;;AAGvD;;AAEG;AACH,IAAA,cAAc,CACZ,cAAsB,EACtB,SAAmD,EACnD,OAA6B,EAAA;QAE7B,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,IAAI,UAAU,EAAE;;QAEzB,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,cAAc,CAAC;;AAG5D;;AAEG;AACH,IAAA,iBAAiB,CACf,UAAkB,EAClB,SAAuD,EACvD,OAA6B,EAAA;QAE7B,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,UAAU,CAAC;;AAG3D;;AAEG;IACH,sBAAsB,CACpB,UAA2B,EAC3B,cAAkD,EAAA;QAElD,OAAO,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAe,CAAC;;AAG3E;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;wGA9Df,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAS,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACAD;;;;AAIG;MAQU,uBAAuB,CAAA;AA6EzB,IAAA,cAAA;AACA,IAAA,aAAA;AACC,IAAA,MAAA;AACD,IAAA,iBAAA;AACA,IAAA,cAAA;AACA,IAAA,GAAA;AACC,IAAA,eAAA;AACA,IAAA,WAAA;AACA,IAAA,WAAA;;AAnFD,IAAA,SAAS,GAAW,MAAM,CAAC,KAAK;;AAGd,IAAA,YAAY;;AAG7B,IAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ;;AAGjD,IAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;;IAGpD,sBAAsB,GAAuC,IAAI;;AAGjE,IAAA,iBAAiB,GAAW,MAAM,CAAC,KAAK;;AAGxC,IAAA,gBAAgB,GAAW,MAAM,CAAC,KAAK;;AAGvC,IAAA,oBAAoB,GAAW,MAAM,CAAC,KAAK;;AAG3C,IAAA,aAAa,GAAoB,MAAM,CAAC,WAAW;;AAGnD,IAAA,qBAAqB,GAAoB,MAAM,CAAC,WAAW;;AAG3D,IAAA,eAAe,GAAuB,MAAM,CAAC,WAAW;;AAGxD,IAAA,mBAAmB,GAAwB,MAAM,CAAC,WAAW;;AAG7D,IAAA,aAAa,GAAmB,MAAM,CAAC,WAAW;;AAGlD,IAAA,YAAY,GAAsB,IAAI,GAAG,EAAE;;IAG3C,mBAAmB,GAAY,KAAK;;IAGpC,mBAAmB,GAAY,KAAK;;IAGpC,sBAAsB,GAAY,KAAK;;IAGvC,QAAQ,GAAY,KAAK;;IAGzB,WAAW,GAAY,KAAK;;IAG5B,QAAQ,GAAW,EAAE;;AAGb,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAEtC;;;;;;;;;;;AAWG;AACH,IAAA,WAAA,CACS,cAAqC,EACrC,aAA8B,EAC7B,MAAqB,EACtB,iBAAoC,EACpC,cAA8B,EAC9B,GAAsB,EACrB,eAA8C,EAC9C,WAAsC,EACtC,WAAsC,EAAA;QARvC,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAa,CAAA,aAAA,GAAb,aAAa;QACZ,IAAM,CAAA,MAAA,GAAN,MAAM;QACP,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAG,CAAA,GAAA,GAAH,GAAG;QACF,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAW,CAAA,WAAA,GAAX,WAAW;;AAGrB;;;AAGG;IACH,sBAAsB,GAAA;QACpB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,wBAAwB,EAAE;;AAGjC;;;AAGG;IACH,gBAAgB,GAAA;QACd,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,IAAI,CAAC,gBAAgB;YAAE,IAAI,CAAC,iBAAiB,EAAE;AACnD,QAAA,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,eAAe,EAAE;;AAGxB;;;AAGG;AACH,IAAA,oBAAoB,KAAW,IAAI,CAAC,eAAe,EAAE,CAAC;AAEtD;;;AAGG;AACH,IAAA,0BAA0B,KAAW,IAAI,CAAC,eAAe,EAAE,CAAC;AAE5D;;;;AAIG;IACH,MAAM,eAAe,CAAC,KAA+B,EAAA;QACnD,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,YAAY,CAAC;AACvD,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;;AAG3B;;;AAGG;IACK,MAAM,wBAAwB,CAAC,KAAa,EAAA;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,oCAAoC,CAAC,EAAE;YAC7F;;AAEF,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,mCAAmC,CAC3D,KAAK,EACL,IAAI,CAAC,SAAS,EACd,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,KAAI;YACxC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,kBAAkB,CAAC;AAC7D,YAAA,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC;AACzC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AACxF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,WAAW,EAAE,aAAa,CAAC;AACxF,YAAA,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,kBAAkB;AACjD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;YACrC,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,SAAC,CACF;;AAGH;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;QAC/B,IAAI,CAAC,WAAW,CAAC,cAAc,CAC7B,IAAI,CAAC,SAAS,EACd,CAAC,UAAU,KAAK,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EACvD,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,2BAA2B,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,CACxG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YACzC,IAAI,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC;YAC7D,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,2BAA2B,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAC9G,SAAA,CAAC;;AAGJ;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;QAC/B,IAAI,CAAC,WAAW,CAAC,cAAc,CAC7B,IAAI,CAAC,sBAAuB,EAC5B,CAAC,UAAU,KAAK,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EACvD,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,2BAA2B,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,CACxG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YACzC,IAAI,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC;YAC7D,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,2BAA2B,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAC9G,SAAA,CAAC;;AAGJ;;;AAGG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;QAClC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAChC,IAAI,CAAC,gBAAgB,EACrB,CAAC,aAAa,KAAK,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,EAChE,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,+BAA+B,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,CAC/G,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YACzC,IAAI,EAAE,CAAC,aAAa,KAAK,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC;YACtE,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,+BAA+B,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACrH,SAAA,CAAC;;AAGJ;;;AAGG;IACH,kBAAkB,GAAA;AAChB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAC5D,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,EAC7E,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAC3C;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,CAAC;YACjF;;QAGF,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAC1C,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,EAC1E,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAC9C;YAAE;AAEH,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,oBAAoB,EAAE;;AAK7B;;;;;AAKG;IACH,oBAAoB,CAAC,IAAU,EAAE,KAAa,EAAA;QAC5C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;AAG1B;;;;AAIG;IACH,MAAM,CAAC,KAAU,EAAE,QAAoB,IAAU,QAAQ,EAAE,CAAC;AAE5D;;AAEG;IACH,iBAAiB,GAAA,EAAW,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;AAEvD;;;AAGG;IACH,qBAAqB,GAAA;AACnB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAC1D,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,EAC7E,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAC1D;AACD,QAAA,OAAO,UAAU;;AAGnB;;;;AAIG;AACH,IAAA,WAAW,CAAC,IAAU,EAAA,EAAY,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE1E;;;;AAIG;AACH,IAAA,eAAe,CAAC,IAAU,EAAA;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5C,QAAA,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,MAAM,CAAC,mBAAmB;;AAGxF;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAU,EAAA,EAAa,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,mBAAmB,CAAC;AAExG;;;;AAIG;AACH,IAAA,WAAW,CAAC,IAAU,EAAA,EAAa,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAE7E;;;AAGG;IACH,SAAS,GAAA;QACP,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;AAC/D,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,QAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;AAG1B;;;AAGG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,KAAK;AACzF,QAAA,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,WAAW;;AAG/C;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,KAAK;AACxC,QAAA,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,WAAW;;AAG/C;;;AAGG;IACH,sBAAsB,GAAA;QACpB,IAAI,IAAI,CAAC,sBAAsB,KAAK,MAAM,CAAC,SAAS,EAAE;YACpD,IAAI,CAAC,cAAc,EAAE;;aAChB;YACL,IAAI,CAAC,gBAAgB,EAAE;;;AAI3B;;;;AAIG;AACH,IAAA,sBAAsB,CAAC,UAA2B,EAAA;AAChD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC;QAC/E,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QAChC,IAAI,CAAC,YAAY,EAAE;;AAGrB;;;;AAIG;AACH,IAAA,sBAAsB,CAAC,UAA8B,EAAA;AACnD,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC;AAClF,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QAChC,IAAI,CAAC,YAAY,EAAE;;AAGrB;;;;AAIG;AACH,IAAA,yBAAyB,CAAC,aAAkC,EAAA;AAC1D,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC;AACjG,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;QACnC,IAAI,CAAC,YAAY,EAAE;;AAGrB;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,QAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;;AAG7B;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAGvB;;;AAGG;IACH,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAClE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,CAChD;;AAGH;;;AAGG;IACH,YAAY,GAAA;AACV,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAC5D,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,EAC7E,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAC3C;AAED,QAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW;AAChD,QAAA,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,OAAO;AAC5C,QAAA,IAAI,uBAAuB,KAAK,IAAI,CAAC,WAAW,EAAE;AAChD,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;;;AAItC;;;AAGG;IACH,oBAAoB,GAAA;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,SAAS;AAC1D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB,CACvD,IAAI,CAAC,sBAAuB,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,EAC9E,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CACtD;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,OAAO;AAC5C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;YACtD,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK;AAC/C,SAAA,CAAC;;AAGN;;;;AAIG;AACH,IAAA,uBAAuB,CAAC,IAAU,EAAA;QAChC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAC,KAAI;AAC9G,YAAA,IAAI,YAAY,KAAK,IAAI,EAAE;gBACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,mBAAmB,CAAC;AACvD,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;gBACvE,IAAI,eAAe,EAAE;AACnB,oBAAA,eAAe,CAAC,cAAc,GAAG,QAAQ;AACzC,oBAAA,eAAe,CAAC,QAAQ,GAAG,MAAM,CAAC,mBAAmB;AACrD,oBAAA,eAAe,CAAC,GAAG,GAAG,QAAQ,EAAE,GAAG;AACnC,oBAAA,eAAe,CAAC,WAAW,GAAG,QAAQ,EAAE,WAAW;;AAErD,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,gBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;;AAEtC,SAAC,CAAC;;AAGJ;;;;;;AAMG;AACH,IAAA,WAAW,CAAC,KAAa,EAAE,KAAU,EAAE,YAAwB,EAAA;AAC7D,QAAA,YAAY,EAAE;;AAGhB;;AAEG;IACH,eAAe,GAAA;QACb,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;;AAGpC;;AAEG;IACH,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;;AAGpC;;;AAGG;AACH,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;;AAGxE;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;;wGA1fjB,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,qUC5BpC,0hOA8JM,EAAA,MAAA,EAAA,CAAA,g4FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,gCAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,YAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,0CAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FDlIO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAGnB,UAAA,EAAA,KAAK,EACF,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,0hOAAA,EAAA,MAAA,EAAA,CAAA,g4FAAA,CAAA,EAAA;2VAI5B,SAAS,EAAA,CAAA;sBAAjB;gBAG0B,YAAY,EAAA,CAAA;sBAAtC,SAAS;uBAAC,cAAc;gBAGf,sBAAsB,EAAA,CAAA;sBAA/B;gBAGS,eAAe,EAAA,CAAA;sBAAxB;;;ME2GU,2BAA2B,CAAA;AAC7B,IAAA,mBAAmB,GAAwB;AAClD,QAAA,OAAO,EAAE,wCAAwC;AACjD,QAAA,MAAM,EAAE,cAAc;AACtB,QAAA,IAAI,EAAE,4BAA4B;AAClC,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,iBAAiB,EAAE,aAAa;AAChC,QAAA,iBAAiB,EAAE;KACpB;IAED,SAAS,GAAY,KAAK;AAC1B,IAAA,cAAc,GAAwB,IAAI,CAAC,mBAAmB;AACtD,IAAA,cAAc;AACd,IAAA,cAAc;AAEtB;;;;;AAKG;AACH,IAAA,OAAO,CACL,OAAqC,EACrC,cAA0B,EAC1B,cAA2B,EAAA;AAE3B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,OAAO,EAAE;AACjE,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;AAGvB;;;;;AAKG;AACH,IAAA,aAAa,CACX,QAAgB,EAChB,cAA0B,EAC1B,cAA2B,EAAA;QAE3B,IAAI,CAAC,OAAO,CAAC;YACX,OAAO,EAAE,CAAoC,iCAAA,EAAA,QAAQ,CAAI,EAAA,CAAA;AACzD,YAAA,MAAM,EAAE,qBAAqB;AAC7B,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,iBAAiB,EAAE;AACpB,SAAA,EAAE,cAAc,EAAE,cAAc,CAAC;;IAGpC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,cAAc,EAAE;;;IAIzB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,cAAc,EAAE;;;wGAjEd,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAlI5B,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gqCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAnB,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAsGU,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBApIvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EACzB,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,EAAA,CAAA,EAAA,UAAA,EACW,KAAK,EAAA,MAAA,EAAA,CAAA,gqCAAA,CAAA,EAAA;8BAsGR,mBAAmB,EAAA,CAAA;sBAA3B;;;MCxIU,gBAAgB,CAAA;AACM,IAAA,kBAAkB;;IAGnD,IAAa,OAAO,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAGvB,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAGd,QAAQ,GAAY,KAAK;;IAGzB,yBAAyB,GAAY,KAAK;IAEzC,QAAQ,GAAqB,OAAO;AACpC,IAAA,KAAK,GAAW,MAAM,CAAC,KAAK;AAC5B,IAAA,KAAK,GAAW,MAAM,CAAC,KAAK;IAC5B,eAAe,GAAY,IAAI;IAC/B,KAAK,GAAY,IAAI;IACrB,WAAW,GAAY,IAAI;IAC3B,aAAa,GAAY,IAAI;IAC7B,UAAU,GAAW,KAAK;IAC1B,UAAU,GAAY,KAAK;AAC3B,IAAA,UAAU,GAAW,MAAM,CAAC,KAAK;IACjC,QAAQ,GAAW,MAAM;IACzB,WAAW,GAAY,IAAI;AAC3B,IAAA,SAAS,GAAW,MAAM,CAAC,UAAU;IACrC,cAAc,GAAY,KAAK;AAC/B,IAAA,cAAc,GAAW,MAAM,CAAC,IAAI;IACpC,kBAAkB,GAAY,KAAK;AACnC,IAAA,cAAc,GAAW,MAAM,CAAC,eAAe;AAC/C,IAAA,YAAY,GAAW,MAAM,CAAC,KAAK;IACnC,iBAAiB,GAAY,KAAK;AAEjC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAW;AAC3C,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AACjC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AACjC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AACjC,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;IAErD,kBAAkB,GAAY,KAAK;IACnC,gBAAgB,GAAY,KAAK;AACzB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;;AAGtC,IAAA,iCAAiC,GAAwB;QACvD,OAAO,EAAE,MAAM,CAAC,uBAAuB;QACvC,MAAM,EAAE,MAAM,CAAC,sBAAsB;QACrC,IAAI,EAAE,MAAM,CAAC,oBAAoB;QACjC,WAAW,EAAE,MAAM,CAAC,MAAM;QAC1B,WAAW,EAAE,MAAM,CAAC,MAAM;QAC1B,UAAU,EAAE,MAAM,CAAC,WAAW;QAC9B,UAAU,EAAE,MAAM,CAAC,WAAW;QAC9B,iBAAiB,EAAE,MAAM,CAAC,yBAAyB;QACnD,iBAAiB,EAAE,MAAM,CAAC;KAC3B;AAED,IAAA,WAAA,GAAA;;AAGA;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;AACnC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;;AAItB;;AAEG;AACH,IAAA,eAAe,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIlC;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;AAGpB;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAClB,QAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;;AAGxC;;AAEG;IACH,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAClB,QAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;;AAGxC;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;AAC9B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;aACb;YACL,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;QAEpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAGxC;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,8BAA8B,EAAE;;aAChC;YACL,IAAI,CAAC,KAAK,EAAE;;;AAIhB;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC1B,IAAI,CAAC,8BAA8B,EAAE;;iBAChC;gBACL,IAAI,CAAC,KAAK,EAAE;;;;AAKlB;;AAEG;AAEH,IAAA,WAAW,CAAC,KAAoB,EAAA;QAC9B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;AACvC,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC1B,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,8BAA8B,EAAE;;iBAChC;gBACL,IAAI,CAAC,KAAK,EAAE;;;;AAKlB;;AAEG;AACH,IAAA,eAAe,CAAC,KAAY,EAAA;AAE1B,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,8BAA8B,EAAE;;aAChC;YACL,IAAI,CAAC,KAAK,EAAE;;;AAIhB;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,8BAA8B,EAAE;;aAChC;YACL,IAAI,CAAC,KAAK,EAAE;;;AAIhB;;AAEG;IACK,8BAA8B,GAAA;QACpC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAC7B,IAAI,CAAC,iCAAiC,EACtC,MAAK;YACH,IAAI,CAAC,sBAAsB,EAAE;AAC/B,SAAC,EACD,MAAO,GAAC,CACT;;AAGH;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC7B,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,KAAK,EAAE;SACb,EAAE,IAAI,CAAC;;AAGV;;AAEG;AACH,IAAA,SAAS,CAAC,OAAgB,EAAA;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;QAC/B,IAAI,CAAC,YAAY,GAAG,OAAO,IAAI,MAAM,CAAC,KAAK;;AAG7C;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;AAG/B;;;AAGG;IACH,sBAAsB,GAAA;QACpB,OAAO,IAAI,CAAC,iBAAiB;;AAG/B;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;wGAxPf,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,08BCX7B,6oFA0FA,EAAA,MAAA,EAAA,CAAA,46DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAoB,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD/Ea,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,6oFAAA,EAAA,MAAA,EAAA,CAAA,46DAAA,CAAA,EAAA;wDAGgB,kBAAkB,EAAA,CAAA;sBAAlD,SAAS;uBAAC,oBAAoB;gBAGlB,OAAO,EAAA,CAAA;sBAAnB;gBAaQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBACS,MAAM,EAAA,CAAA;sBAAf;gBACS,MAAM,EAAA,CAAA;sBAAf;gBACS,MAAM,EAAA,CAAA;sBAAf;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBAsHD,WAAW,EAAA,CAAA;sBADV,YAAY;uBAAC,yBAAyB,EAAE,CAAC,QAAQ,CAAC;;;ME/JxC,eAAe,CAAA;AAGhB,IAAA,aAAA;AACA,IAAA,aAAA;IAFV,WACU,CAAA,aAA4B,EAC5B,aAA4B,EAAA;QAD5B,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAa,CAAA,aAAA,GAAb,aAAa;;AAGvB,IAAA,WAAW,CAAC,IAAY,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,KAAK,EAAE;YACzC,OAAO,MAAM,CAAC,KAAK;;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AACtG,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE;;AACxC,aAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AAC5B,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,YAAA,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;;QAEjE,OAAO,MAAM,CAAC,KAAK;;AAGrB,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;QAC5B,OAAO,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;;AAGtC,IAAA,aAAa,CAAC,SAAiB,EAAA;AAC7B,QAAA,MAAM,QAAQ,GAA8B,MAAM,CAAC,SAAS;QAC5D,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,aAAa;;AAGpD,IAAA,eAAe,CAAC,QAAyB,EAAA;QACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;AACpC,YAAA,GAAG,IAAI;YACP,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,YAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AAClC,SAAA,CAAC,CAAC;;AAGL;;;;;AAKG;IACK,oBAAoB,CAAC,kBAA0B,EAAE,UAA8B,EAAA;AACrF,QAAA,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;AACjC,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,kBAAkB,CAAC;gBACzE,IAAI,IAAI,EAAE;AACR,oBAAA,OAAO,IAAI;;;;AAIjB,QAAA,OAAO,IAAI;;AAGb;;;;;AAKG;IACH,qBAAqB,CAAC,QAAyB,EAAE,UAA8B,EAAA;QAC7E,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC,QAAQ;QAC1E,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,OAAO,QAAQ;;QAGjB,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,UAAU,CAAC;QAClF,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,OAAO,QAAQ;;QAGjB,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,IAC/C,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,kBAAkB,CAAC,CAC9D;QAED,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,OAAO,QAAQ;;QAGjB,IAAI,gBAAgB,CAAC,KAAK,KAAK,MAAM,CAAC,WAAW,EAAE;AACjD,YAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,gBAAgB,CAAC;;AAGvE,QAAA,OAAO,QAAQ;;IAGjB,UAAU,CAAC,MAAc,EAAE,QAAyB,EAAA;AAClD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC;QACjD,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC5C,YAAA,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;;QAErD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;;IAGrD,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC;;AAG5C,IAAA,cAAc,CAAC,MAAc,EAAE,QAAyB,EAAE,YAAgC,EAAA;AACxF,QAAA,OAAO,YAAY,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,EAAE,IAAI;;wGAxGzD,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAtB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCsCY,iBAAiB,CAAA;AAenB,IAAA,eAAA;AACC,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,eAAA;AACA,IAAA,GAAA;AAjBD,IAAA,QAAQ,GAAoB,MAAM,CAAC,WAAW;AAC9C,IAAA,UAAU,GAAuB,MAAM,CAAC,WAAW;AAClD,IAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AAEnD,IAAA,QAAQ,GAAoB,MAAM,CAAC,WAAW;AAC9C,IAAA,gBAAgB,GAAoB,MAAM,CAAC,WAAW;AACtD,IAAA,YAAY;IACZ,mBAAmB,GAAY,IAAI;AAE3B,IAAA,oBAAoB,GAAiB,IAAI,YAAY,EAAE;AACvD,IAAA,sBAAsB,GAAiB,IAAI,YAAY,EAAE;IAEjE,WACS,CAAA,eAAuC,EACtC,aAA4B,EAC5B,aAA4B,EAC5B,eAAgC,EAChC,GAAsB,EAAA;QAJvB,IAAe,CAAA,eAAA,GAAf,eAAe;QACd,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAG,CAAA,GAAA,GAAH,GAAG;;AAKb,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YACvE,IAAI,CAAC,kBAAkB,EAAE;;AAE3B,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;YACzE,IAAI,CAAC,sBAAsB,EAAE;;;IAIjC,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnE,IAAI,CAAC,sBAAsB,EAAE;;;IAIjC,sBAAsB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1D,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;AAClG,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC;gBAClG,IAAI,CAAC,sBAAsB,EAAE;AAC3B,oBAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAC7B,oBAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;;;aAGnC;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ;AACrC,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;;;IAInC,QAAQ,GAAA;QACN,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAC3B,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,QAAQ,IAAG;YACvD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;gBACxB,IAAI,CAAC,kBAAkB,EAAE;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;SAE1B,CAAC,CACH;AAED,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAC7B,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAC,SAAS,CAAC,UAAU,IAAG;YACnE,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,gBAAA,IAAI,CAAC,UAAU,GAAG,UAAU;gBAC5B,IAAI,CAAC,sBAAsB,EAAE;AAC7B,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;SAE1B,CAAC,CACH;AAED,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAC3B,IAAI,CAAC,aAAa,CAAC,0BAA0B,EAAE,CAAC,SAAS,CAAC,MAAK;YAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YACxD,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,gBAAA,IAAI,CAAC,QAAQ,GAAG,eAAe;gBAC/B,IAAI,CAAC,kBAAkB,EAAE;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;SAE1B,CAAC,CACH;QAED,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;YAC3D,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC;AACtD,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS;;iBAC3C;AACL,gBAAA,IAAI,CAAC,YAAY,GAAG,SAAS;;AAE/B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,SAAC,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC,SAAS,CAAC,UAAU,IAAG;YACjE,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC;gBAClG,IAAI,CAAC,sBAAsB,EAAE;AAC3B,oBAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAC7B,oBAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;;AAGxC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,SAAC,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC,SAAS,CAAC,IAAI,IAAG;AACvD,YAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAC9B,gBAAA,IAAI,CAAC,YAAY,GAAG,SAAS;gBAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;AAExC,SAAC,CAAC;;IAGJ,YAAY,CAAC,QAAgB,EAAE,EAAU,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;AAClC,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAC7B,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;YACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;aAC/B;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC;AACxC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;;;IAKpC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;AACvC,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;;wGAzIhC,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAqB,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAlB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAmB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/C9B,4/CAmCA,EDjBc,MAAA,EAAA,CAAA,2oDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACV,OAAO,CAAC,gBAAgB,EAAE;AACxB,gBAAA,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;AAClB,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE;AACZ,iBAAA,CAAC,CAAC;AACH,gBAAA,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AACf,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE;AACZ,iBAAA,CAAC,CAAC;gBACH,UAAU,CAAC,WAAW,EAAE;oBACtB,OAAO,CAAC,gBAAgB;iBACzB;aACF,CAAC;YACF,OAAO,CAAC,QAAQ,EAAE;AAChB,gBAAA,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;AAClB,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE;AACZ,iBAAA,CAAC,CAAC;AACH,gBAAA,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AACf,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE;AACZ,iBAAA,CAAC,CAAC;gBACH,UAAU,CAAC,WAAW,EAAE;oBACtB,OAAO,CAAC,mBAAmB;iBAC5B;aACF;AACF,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAnC7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cACZ,KAAK,EAAA,eAAA,EAGD,uBAAuB,CAAC,MAAM,EACnC,UAAA,EAAA;wBACV,OAAO,CAAC,gBAAgB,EAAE;AACxB,4BAAA,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;AAClB,gCAAA,OAAO,EAAE,CAAC;AACV,gCAAA,SAAS,EAAE;AACZ,6BAAA,CAAC,CAAC;AACH,4BAAA,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AACf,gCAAA,OAAO,EAAE,CAAC;AACV,gCAAA,SAAS,EAAE;AACZ,6BAAA,CAAC,CAAC;4BACH,UAAU,CAAC,WAAW,EAAE;gCACtB,OAAO,CAAC,gBAAgB;6BACzB;yBACF,CAAC;wBACF,OAAO,CAAC,QAAQ,EAAE;AAChB,4BAAA,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;AAClB,gCAAA,OAAO,EAAE,CAAC;AACV,gCAAA,SAAS,EAAE;AACZ,6BAAA,CAAC,CAAC;AACH,4BAAA,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AACf,gCAAA,OAAO,EAAE,CAAC;AACV,gCAAA,SAAS,EAAE;AACZ,6BAAA,CAAC,CAAC;4BACH,UAAU,CAAC,WAAW,EAAE;gCACtB,OAAO,CAAC,mBAAmB;6BAC5B;yBACF;AACF,qBAAA,EAAA,QAAA,EAAA,4/CAAA,EAAA,MAAA,EAAA,CAAA,2oDAAA,CAAA,EAAA;oMAIQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACS,YAAY,EAAA,CAAA;sBAArB;;;ME9BU,uBAAuB,CAAA;AAElC,IAAA,mBAAmB,CAAC,UAAwB,EAAA;QAC1C,OAAO,UAAU,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;;IAGnF,kCAAkC,CAChC,UAAwB,EACxB,cAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,EAAE;QAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;QAEvD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;AACjC,YAAA,GAAG,MAAM;YACT,UAAU,EAAE,UAAU,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,UAAU,GAAG,GAAG,GAAG,CAAC;AACvE,YAAA,UAAU,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM;YAC5C,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK;AACjG,YAAA,SAAS,EAAE,MAAM,CAAC,cAAc,IAAI,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,MAAM,CAAC,KAAK;AAClF,SAAA,CAAC,CAAC;;wGApBM,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCNY,uBAAuB,CAAA;AAWxB,IAAA,aAAA;AACA,IAAA,eAAA;AACA,IAAA,uBAAA;AAZD,IAAA,SAAS,GAAW,MAAM,CAAC,KAAK;AAChC,IAAA,UAAU;IAEnB,cAAc,GAAkB,IAAI;IACpC,yBAAyB,GAA2B,EAAE;AAG9C,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAEzC,IAAA,WAAA,CACU,aAA4B,EAC5B,eAAsC,EACtC,uBAAgD,EAAA;QAFhD,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;;AAGjC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;;YAE7D,IAAI,CAAC,iBAAiB,EAAE;;;IAI5B,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;AAC3D,YAAA,IAAI,CAAC,cAAc,GAAE,MAAM;YAC3B,IAAI,CAAC,0BAA0B,EAAE;SAClC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,UAAU,IAAG;YAC3D,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,gBAAA,IAAI,CAAC,UAAU,GAAG,UAAU;gBAC5B,IAAI,CAAC,0BAA0B,EAAE;;SAEpC,CAAC,CACH;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,KAAK,EAAE;YACrD,IAAI,CAAC,iBAAiB,EAAE;;;IAIpB,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,KAAK,EAAE;YACrD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;AAC3D,YAAA,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,IAAI,IAAI;AACnD,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,IAAI,IAAI;;AAGhD,YAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,UAAU,CAAC;;;AAKvF,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,KAAK,MAAM,GAAG,IAAI,GAAG,MAAM;AAChE,QAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,SAAS,CAAC;;IAG3C,0BAA0B,GAAA;AAChC,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,uBAAuB,CAAC,kCAAkC,CAC9F,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,cAAc,CACpB;;IAGH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;wGAtEtB,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,mKCdpC,mgCA8BM,EAAA,MAAA,EAAA,CAAA,gpDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDhBO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,KAAK,EAAA,QAAA,EAAA,mgCAAA,EAAA,MAAA,EAAA,CAAA,gpDAAA,CAAA,EAAA;mJAKR,SAAS,EAAA,CAAA;sBAAjB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;;;MELU,uBAAuB,CAAA;AAUd,IAAA,qBAAA;IATX,MAAM,GAAG,MAAM;AAEf,IAAA,SAAS,GAAW,MAAM,CAAC,KAAK;AAC/B,IAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;AAElD,IAAA,UAAU,GAAW,MAAM,CAAC,KAAK;AACzB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAC9B,IAAA,aAAa,GAAG,IAAI,OAAO,EAAU;AAE7C,IAAA,WAAA,CAAoB,qBAA4C,EAAA;QAA5C,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;;IAEzC,QAAQ,GAAA;QACN,IAAI,CAAC,uBAAuB,EAAE;;IAGhC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;AAG1B;;AAEG;IACK,uBAAuB,GAAA;AAC7B,QAAA,MAAM,aAAa,GAAG,IAAI,OAAO,EAAU;QAC3C,aAAa,CAAC,IAAI,CAChB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxBS,cAAY,CAAC,GAAG,CAAC,EACjBC,sBAAoB,EAAE,CACvB,CAAC,SAAS,CAAC,UAAU,IAAG;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;AACjC,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;;AAGpC;;;AAGG;AACH,IAAA,mBAAmB,CAAC,UAAkB,EAAA;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;;AAGrC;;;AAGG;AACK,IAAA,cAAc,CAAC,UAAkB,EAAA;QACvC,MAAM,oBAAoB,GAAG,UAAU,EAAE,IAAI,EAAE,IAAI,IAAI;AACvD,QAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,oBAAoB,CAAC;;AAG/D;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK;AAC9B,QAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC;;AAG/C;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK;AAC9B,QAAA,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE;;wGAnEvC,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,6JCXpC,ssCA0CO,EAAA,MAAA,EAAA,CAAA,6zDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD/BM,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,ssCAAA,EAAA,MAAA,EAAA,CAAA,6zDAAA,CAAA,EAAA;uFAKR,SAAS,EAAA,CAAA;sBAAjB;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;AEFH;;;;;AAKG;MAiCU,wBAAwB,CAAA;AAuEf,IAAA,aAAA;AAAsC,IAAA,qBAAA;AAtE1D;;;AAGG;AACM,IAAA,YAAY;AACrB;;;AAGG;AACM,IAAA,UAAU,GAAuB,MAAM,CAAC,WAAW;AAE5D;;;AAGG;AACM,IAAA,SAAS,GAAW,MAAM,CAAC,KAAK;AAEzC;;;AAGG;AACM,IAAA,QAAQ,GAAoB,MAAM,CAAC,WAAW;AAEvD;;;AAGG;AACM,IAAA,UAAU,GAAsB,MAAM,CAAC,WAAW;AAE3D;;;AAGG;AACM,IAAA,UAAU,GAAuB,MAAM,CAAC,WAAW;AAE5D;;AAEG;IACH,YAAY,GAAY,IAAI;AAE5B;;AAEG;AACH,IAAA,sBAAsB,GAAW,MAAM,CAAC,OAAO;AAE/C;;AAEG;IACH,2BAA2B,GAAY,KAAK;AAE5C;;AAEG;AACiC,IAAA,uBAAuB;AAE3D;;AAEG;AAC0B,IAAA,gBAAgB;AAE7C;;AAEG;IACH,oBAAoB,GAAY,KAAK;AAErC;;AAEG;IACH,iBAAiB,GAAY,KAAK;IAElC,WAAoB,CAAA,aAA4B,EAAU,qBAA4C,EAAA;QAAlF,IAAa,CAAA,aAAA,GAAb,aAAa;QAAyB,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;;IAE/E,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC,SAAS,CAAC,IAAI,IAAG;AACvD,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM;AACrE,SAAC,CAAC;;AAGJ;;AAEG;IACH,eAAe,GAAA;QACb,IAAI,CAAC,qBAAqB,EAAE;;AAG9B;;AAEG;IACH,qBAAqB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE;;;AAIpF;;AAEG;IACH,sBAAsB,GAAA;QACpB,IAAI,CAAC,qBAAqB,EAAE;;QAE5B,IAAI,CAAC,sBAAsB,EAAE;;AAG/B;;AAEG;IACK,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;;YAEhC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,aAAa,IAAI,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7H,MAAM,cAAc,GAAG,OAAO,CAC5B,CAAC,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,IAAI,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,KAAK,MAAM,CAAC,KAAK;AAC5H,iBAAC,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,IAAI,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,KAAK,MAAM,CAAC,KAAK,CAAC;AACnH,iBAAC,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,IAAI,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,KAAK,MAAM,CAAC,KAAK,CAAC;AACjH,iBAAC,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,IAAI,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,KAAK,MAAM,CAAC,KAAK,CAAC,CAC1H;AAED,YAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,IAAI,cAAc;;;AAIvD;;AAEG;IACH,yBAAyB,GAAA;AACvB,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI;AACvC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;;AAGjC;;AAEG;IACH,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,2BAA2B,GAAG,KAAK;AACxC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE;;;AAI5C;;AAEG;IACH,4BAA4B,GAAA;AAC1B,QAAA,IAAI,CAAC,2BAA2B,GAAG,KAAK;AACxC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE;;;AAI5C;;AAEG;IACH,8CAA8C,GAAA;AAC5C,QAAA,IAAI,CAAC,2BAA2B,GAAG,KAAK;AACxC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE;;;AAI5C;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,EAAE;YACjD,IAAI,CAAC,qBAAqB,EAAE;;;AAIhC;;AAEG;IACH,uBAAuB,GAAA;QACrB,IAAI,CAAC,qBAAqB,CAAC,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC;AAC3E,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;;;AAIvC;;AAEG;AACH,IAAA,qBAAqB,CAAC,KAAU,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,MAAM,YAAY,GAAG,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,aAAa;AAC3D,YAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,YAAY,CAAC;;;wGA/LtC,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAO,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,gTAsDxB,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAKvB,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9G7B,8vCA6Bc,EDLA,MAAA,EAAA,CAAA,iOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACV,OAAO,CAAC,YAAY,EAAE;AACpB,gBAAA,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AACrB,oBAAA,MAAM,EAAE,GAAG;AACX,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE,eAAe;AAC1B,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,YAAY,EAAE,MAAM;AACpB,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC,CAAC;AACH,gBAAA,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;AACpB,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE,mBAAmB;AAC9B,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,YAAY,EAAE,KAAK;AACnB,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC,CAAC;gBACH,UAAU,CAAC,mBAAmB,EAAE;oBAC9B,OAAO,CAAC,sCAAsC;iBAC/C,CAAC;gBACF,UAAU,CAAC,mBAAmB,EAAE;oBAC9B,OAAO,CAAC,sCAAsC;iBAC/C;aACF;AACF,SAAA,EAAA,CAAA;;4FAEU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAhCpC,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,KAAK,EAGL,UAAA,EAAA;wBACV,OAAO,CAAC,YAAY,EAAE;AACpB,4BAAA,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AACrB,gCAAA,MAAM,EAAE,GAAG;AACX,gCAAA,OAAO,EAAE,CAAC;AACV,gCAAA,SAAS,EAAE,eAAe;AAC1B,gCAAA,QAAQ,EAAE,QAAQ;AAClB,gCAAA,YAAY,EAAE,MAAM;AACpB,gCAAA,UAAU,EAAE;AACb,6BAAA,CAAC,CAAC;AACH,4BAAA,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;AACpB,gCAAA,MAAM,EAAE,KAAK;AACb,gCAAA,OAAO,EAAE,CAAC;AACV,gCAAA,SAAS,EAAE,mBAAmB;AAC9B,gCAAA,QAAQ,EAAE,QAAQ;AAClB,gCAAA,YAAY,EAAE,KAAK;AACnB,gCAAA,UAAU,EAAE;AACb,6BAAA,CAAC,CAAC;4BACH,UAAU,CAAC,mBAAmB,EAAE;gCAC9B,OAAO,CAAC,sCAAsC;6BAC/C,CAAC;4BACF,UAAU,CAAC,mBAAmB,EAAE;gCAC9B,OAAO,CAAC,sCAAsC;6BAC/C;yBACF;AACF,qBAAA,EAAA,QAAA,EAAA,8vCAAA,EAAA,MAAA,EAAA,CAAA,iOAAA,CAAA,EAAA;gHAOQ,YAAY,EAAA,CAAA;sBAApB;gBAKQ,UAAU,EAAA,CAAA;sBAAlB;gBAMQ,SAAS,EAAA,CAAA;sBAAjB;gBAMQ,QAAQ,EAAA,CAAA;sBAAhB;gBAMQ,UAAU,EAAA,CAAA;sBAAlB;gBAMQ,UAAU,EAAA,CAAA;sBAAlB;gBAoBmC,uBAAuB,EAAA,CAAA;sBAA1D,SAAS;uBAAC,uBAAuB;gBAKL,gBAAgB,EAAA,CAAA;sBAA5C,SAAS;uBAAC,gBAAgB;;;AE7G7B;;;;;AAKG;MACU,WAAW,CAAA;AAExB;;;;AAIG;AACH,IAAA,OAAO,aAAa,GAAG,gBAAgB;AACvC,IAAA,OAAO,eAAe,GAAG,sCAAsC;;;ACX/D;;;;AAIG;MAIU,cAAc,CAAA;AAMN,IAAA,MAAA;AAJnB;;;AAGG;AACH,IAAA,WAAA,CAAmB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM;;AAEzB;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;;AAGrC;;;AAGG;AACH,IAAA,cAAc,CAAC,IAAS,EAAA;AACtB,QAAA,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;AAG/D;;;AAGG;IACH,cAAc,GAAA;QACZ,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;AAC3D,QAAA,OAAO,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI;;AAGrD;;;AAGG;IACH,kBAAkB,GAAA;QAChB,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;AAC3D,QAAA,OAAO,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,WAAW,GAAG,IAAI;;AAGjE;;;AAGG;IACH,YAAY,GAAA;QACV,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;AAC3D,QAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACxB,IAAI,WAAW,EAAE;YACf,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AACzC,YAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AACtB,YAAA,OAAO,SAAS;;AAElB,QAAA,OAAO,IAAI;;AAGb;;AAEG;IACH,YAAY,GAAA;QACV,YAAY,CAAC,KAAK,EAAE;;wGA7DX,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCDY,2BAA2B,CAAA;AAElB,IAAA,cAAA;AAApB,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAc,CAAA,cAAA,GAAd,cAAc;;AAElC;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,SAA6B,EAAA;QAC9C,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE;AACvE,QAAA,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACvF,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;QACrF,MAAM,OAAO,GAAG,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,IAAG;;YAEzD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE;AAC/B,gBAAA,OAAO,IAAI;;;AAGb,YAAA,OAAO,mBAAmB;AAC5B,SAAC,CAAC;QAEF,OAAO;AACL,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,IAAI,EAAE;SACP;;AAGH;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,QAA8B,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM;QAClC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IACxC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,QAAQ;AAC5C,YAAA,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,QAAQ,CAC7C,CAAC,MAAM;AACR,QAAA,OAAO,CAAG,EAAA,SAAS,CAAI,CAAA,EAAA,KAAK,EAAE;;AAGhC;;;;AAIG;AACH,IAAA,uBAAuB,CAAC,QAA8B,EAAA;AACpD,QAAA,OAAO,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY;;AAGnD;;;;AAIG;AACH,IAAA,wBAAwB,CAAC,QAA8B,EAAA;QACrD,OAAO,QAAQ,CAAC,YAAY;;AAG9B;;;;AAIG;AACH,IAAA,gCAAgC,CAAC,SAAgB,EAAA;QAC/C,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;AAC3B,YAAA,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK;AAC5B,YAAA,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK;YACtC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK;AACxD,YAAA,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK;YACtC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK;AACvD,YAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO;YACpC,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK;YAC5D,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK;AAC7D,YAAA,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK;AAC5C,YAAA,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI;AAC/B,SAAA,CAAC,CAAC;;wGA7EM,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cAF1B,MAAM,EAAA,CAAA;;4FAEP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCQY,mBAAmB,CAAA;AAGpB,IAAA,qBAAA;AACA,IAAA,mBAAA;AACA,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,oBAAA;AACA,IAAA,qBAAA;IANV,WACU,CAAA,qBAA4C,EAC5C,mBAAwC,EACxC,aAA4B,EAC5B,aAA4B,EAC5B,oBAAiD,EACjD,qBAA4C,EAAA;QAL5C,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;;AAG/B;;AAEG;IACH,qBAAqB,GAAA;QACnB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;;AAGnD;;AAEG;IACH,eAAe,CAAC,QAAgB,EAAE,gBAAkC,EAAA;AAClE,QAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE;AAC5B,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC;;AAInF;;AAEG;AACH,IAAA,kBAAkB,CAAC,QAA8B,EAAA;QAC/C,OAAO,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,QAAQ,CAAC;;AAG/D;;AAEG;AACH,IAAA,uBAAuB,CAAC,QAA8B,EAAA;QACpD,OAAO,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,QAAQ,CAAC;;AAGpE;;AAEG;AACH,IAAA,wBAAwB,CAAC,QAA8B,EAAA;QACrD,OAAO,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,QAAQ,CAAC;;AAGrE;;AAEG;AACH,IAAA,uBAAuB,CAAC,oBAAmD,EAAA;QAKzE,IAAI,CAAC,oBAAoB,EAAE;YACzB,OAAO;gBACL,kBAAkB,EAAE,MAAM,CAAC,WAAW;gBACtC,cAAc,EAAE,MAAM,CAAC,WAAW;gBAClC,wBAAwB,EAAE,MAAM,CAAC;aAClC;;;AAIH,QAAA,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,MAAM,eAAe,GAAG;gBACtB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,mBAAmB,EAAE,MAAM,CAAC,kBAAkB;gBAC9C,IAAI,EAAE,MAAM,CAAC,WAAW;AACxB,gBAAA,SAAS,EAAE,CAAC;AACZ,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,SAAS,EAAE;aACZ;YAED,OAAO;gBACL,kBAAkB,EAAE,CAAC,eAAe,CAAC;gBACrC,cAAc,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAClE,wBAAwB,EAAE,CAAC,KAAK;aACjC;;AAGH,QAAA,MAAM,kBAAkB,GAAG,CAAC,GAAG,oBAAoB,CAAC;QACpD,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,IACtD,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC5D;AACD,QAAA,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,IAChE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAClC;QAED,OAAO;YACL,kBAAkB;YAClB,cAAc;YACd;SACD;;AAGH;;AAEG;AACH,IAAA,mBAAmB,CAAC,OAAY,EAAA;AAC9B,QAAA,OAAO,OAAO;;AAGhB;;AAEG;IACH,kBAAkB,CAAC,OAAY,EAAE,SAAiB,EAAA;QAChD,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;YAC9B,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;;AAG9E,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;;AAGxE;;AAEG;AACH,IAAA,gCAAgC,CAAC,SAAiB,EAAA;QAChD,IAAI,SAAS,IAAI,SAAS,KAAK,MAAM,CAAC,KAAK,EAAE;;AAE3C,YAAA,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC;;AAGhD,YAAA,IAAI,CAAC,qBAAqB,CAAC,8BAA8B,CAAC,SAAS,CAAC;;;AAIxE;;AAEG;AACH,IAAA,mBAAmB,CAAC,SAAiB,EAAA;QACnC,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,qBAAqB,CAAC,oCAAoC,CAAC,SAAS,CAAC;;;AAI9E;;AAEG;IACH,6BAA6B,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,0BAA0B,EAAE;;AAGxD;;AAEG;AACH,IAAA,gCAAgC,CAAC,SAAiB,EAAA;AAChD,QAAA,IAAI,CAAC,qBAAqB,CAAC,gCAAgC,CAAC,SAAS,CAAC;;wGApJ7D,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA3B,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA4B,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAd,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAe,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACbD;;;;AAIG;MAKU,sBAAsB,CAAA;AAgBvB,IAAA,EAAA;AACA,IAAA,QAAA;AACD,IAAA,cAAA;AAhBT;;;;AAIG;AACM,IAAA,UAAU;AAEnB;;;;;AAKG;AACH,IAAA,WAAA,CACU,EAAc,EACd,QAAmB,EACpB,cAA8B,EAAA;QAF7B,IAAE,CAAA,EAAA,GAAF,EAAE;QACF,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACT,IAAc,CAAA,cAAA,GAAd,cAAc;;AAGvB;;;AAGG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;YACzB,IAAI,CAAC,eAAe,EAAE;;;AAI1B;;;AAGG;IACK,eAAe,GAAA;;AAErB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AAClH,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;YAC3D;;QAGF,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE;AACvE,QAAA,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAEvF,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU;cACrD,IAAI,CAAC;AACP,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC;AAErB,QAAA,MAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,IACvD,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,CACzC;QAED,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC;;aAC3D;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;;;wGAxDpD,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAtB,sBAAsB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE;AACb,iBAAA;iIAQU,UAAU,EAAA,CAAA;sBAAlB;;;MCTU,qBAAqB,CAAA;IACvB,SAAS,GAAc,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAChD,UAAU,GAAY,IAAI;AAC1B,IAAA,UAAU,GAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;AACxC,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAO;AAClC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAO;IAEhD,aAAa,GAAuB,EAAE;;IAG7B,MAAM,GAAG,MAAM;AAExB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YAC1C,IAAI,CAAC,gBAAgB,EAAE;;;IAInB,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAG;AACrD,YAAA,MAAM,YAAY,GAAqB,EAAE,GAAG,OAAO,EAAE;AACrD,YAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACpB,YAAY,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACrE,YAAY,CAAC,UAAU,GAAG,YAAY,CAAC,cAAc,KAAK,MAAM,CAAC,GAAG;AACpE,gBAAA,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,cAAc,KAAK,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,cAAc,KAAK,MAAM,CAAC,GAAG;gBACpH,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,cAAc,KAAK,MAAM,CAAC,IAAI;AACvE,gBAAA,YAAY,CAAC,YAAY,GAAG,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,YAAY;;YAGlH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAG;AACnC,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;oBACjC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;oBACvD,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;;AAEzD,aAAC,CAAC;AAEF,YAAA,OAAO,YAAY;AACrB,SAAC,CAAC;;AAGJ,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,QAAQ,MAAM,CAAC,WAAW,EAAE;YAC1B,KAAK,MAAM,CAAC,cAAc;gBACxB,OAAO,MAAM,CAAC,oBAAoB;YACpC,KAAK,MAAM,CAAC,eAAe;gBACzB,OAAO,MAAM,CAAC,qBAAqB;YACrC,KAAK,MAAM,CAAC,YAAY;gBACtB,OAAO,MAAM,CAAC,kBAAkB;YAClC,KAAK,MAAM,CAAC,eAAe;gBACzB,OAAO,MAAM,CAAC,qBAAqB;YACrC,KAAK,MAAM,CAAC,gBAAgB;gBAC1B,OAAO,MAAM,CAAC,sBAAsB;YACtC,KAAK,MAAM,CAAC,eAAe;gBACzB,OAAO,MAAM,CAAC,qBAAqB;AACrC,YAAA;gBACE,OAAO,MAAM,CAAC,oBAAoB;;;AAIxC,IAAA,aAAa,CAAC,MAAc,EAAA;AAC1B,QAAA,QAAQ,MAAM,CAAC,WAAW,EAAE;YAC1B,KAAK,MAAM,CAAC,cAAc;gBACxB,OAAO,MAAM,CAAC,UAAU;YAC1B,KAAK,MAAM,CAAC,eAAe;gBACzB,OAAO,MAAM,CAAC,UAAU;YAC1B,KAAK,MAAM,CAAC,YAAY;gBACtB,OAAO,MAAM,CAAC,yBAAyB;YACzC,KAAK,MAAM,CAAC,eAAe;gBACzB,OAAO,MAAM,CAAC,iBAAiB;YACjC,KAAK,MAAM,CAAC,gBAAgB;gBAC1B,OAAO,MAAM,CAAC,QAAQ;YACxB,KAAK,MAAM,CAAC,eAAe;gBACzB,OAAO,MAAM,CAAC,UAAU;AAC1B,YAAA;gBACE,OAAO,MAAM,CAAC,UAAU;;;AAI9B,IAAA,gBAAgB,CAAC,QAAgB,EAAA;AAC/B,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,MAAM,CAAC,GAAG;;IAGtE,aAAa,CAAC,KAAY,EAAE,OAAY,EAAA;QACtC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;;AAGjC,IAAA,UAAU,CAAC,OAAY,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;;wGAzFlB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,4PCVlC,umHAoEM,EAAA,MAAA,EAAA,CAAA,ooGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAoB,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,4BAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD1DO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cACjB,KAAK,EAAA,QAAA,EAAA,umHAAA,EAAA,MAAA,EAAA,CAAA,ooGAAA,CAAA,EAAA;8BAKR,SAAS,EAAA,CAAA;sBAAjB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACS,QAAQ,EAAA,CAAA;sBAAjB;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MEUU,qBAAqB,CAAA;AAEtB,IAAA,mBAAA;AACA,IAAA,eAAA;AACA,IAAA,cAAA;AACA,IAAA,aAAA;AACA,IAAA,aAAA;IALV,WACU,CAAA,mBAAwC,EACxC,eAAsC,EACtC,cAA8B,EAC9B,aAA4B,EAC5B,aAA4B,EAAA;QAJ5B,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAa,CAAA,aAAA,GAAb,aAAa;;AAGvB;;AAEG;AACH,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,yBAAyB,EAAE;;AAGvD;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE;;AAGpD;;;AAGG;AACH,IAAA,sBAAsB,CAAC,QAA0B,EAAA;AAC/C,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;QAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;QAC7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC;AAErE,QAAA,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAC1C,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,SAAS,CACV;AAED,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC;;AAGxC;;;AAGG;AACH,IAAA,mBAAmB,CAAC,UAAkB,EAAA;QACpC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,UAAU;AACnD,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,OAAO,KAAI;oBAChB,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAC1C,SAAS,EACT,OAAO,EACP,IAAI,CACL;iBACF;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;oBACf,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAC1C,SAAS,EACT,SAAS,EACT,KAAK,CACN;;AAEJ,aAAA,CAAC;;;AAIR;;;;AAIG;AACH,IAAA,OAAO,CAAC,WAAoB,EAAA;AAC1B,QAAA,OAAO,WAAW,GAAG,qBAAqB,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,KAAK;;AAG1E;;;;AAIG;IACH,oBAAoB,CAAC,MAAsB,EAAE,SAAkB,EAAA;QAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE;AAChE,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,GAAG,EAAE;AACvC,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC;YACzC;;AAGF,QAAA,QAAQ,MAAM,CAAC,IAAI;YACjB,KAAK,MAAM,CAAC,aAAa;AACvB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,yBAAyB,EAAE,SAAS,CAAC;gBAC7G;YACF,KAAK,MAAM,CAAC,aAAa;AACvB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,yBAAyB,EAAE,SAAS,CAAC;gBAC7G;YACF,KAAK,MAAM,CAAC,aAAa;gBACvB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC;gBACjE;;;AAIN;;;;;AAKG;AACK,IAAA,oBAAoB,CAAC,MAAc,EAAE,WAAmB,EAAE,SAAkB,EAAA;QAClF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE;AAChE,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,GAAG,EAAE;AACvC,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC;YACzC;;AAGF,QAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAE3C,QAAA,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAC3C,YAAY,CAAC,gBAAgB,CAAC,GAAG,EACjC,MAAM,EACN,WAAW,CACZ,CAAC,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,YAAY,CAAC,gBAAgB,IAAI,QAAQ,CAAC,MAAM,EAAE;AACpD,oBAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE;AACnF,oBAAA,MAAM,eAAe,GAAG;wBACtB,GAAG,YAAY,CAAC,gBAAgB;AAChC,wBAAA,MAAM,EAAE;qBACT;AAED,oBAAA,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC;;AAE9C,gBAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;aAC/B;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;aACxD;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC;;AAE/C,SAAA,CAAC;;AAGJ;;;;AAIG;IACK,cAAc,CAAC,UAAkB,EAAE,SAAkB,EAAA;QAC3D,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC;YAC7D;;AAGF,QAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAE3C,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC;AACvE,YAAA,IAAI,EAAE,CAAC,GAAO,KAAI;gBAChB,IAAG,GAAG,EAAC;AACL,oBAAA,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,SAAS,CAAC;AAChE,oBAAA,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE;;aAEhD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAChD,gBAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC;;AAE/C,SAAA,CAAC;;AAGJ;;;AAGG;AACK,IAAA,cAAc,CAAC,SAAkB,EAAA;QACvC,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC;YACzD;;QAGF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE;AAChE,QAAA,IAAI,YAAY,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACtC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC;;;AAI7D,QAAA,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,SAAS,CAAC;;AAGlE;;;;AAIG;AACK,IAAA,YAAY,CAAC,QAA0B,EAAA;AAC7C,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,MAAM,CAAC;;AAG9E;;;;AAIG;AACK,IAAA,uBAAuB,CAAC,QAA0B,EAAA;AACxD,QAAA,IAAI,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC,cAA2B;;AAGxD,QAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;AACrB,YAAA,QAAQ,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE;AACrC,gBAAA,KAAK,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE;oBACvC,OAAO,MAAM,CAAC,eAA6B;AAC7C,gBAAA,KAAK,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE;oBACvC,OAAO,MAAM,CAAC,yBAAuC;gBACvD,KAAK,MAAM,CAAC,cAAc;oBACxB,OAAO,MAAM,CAAC,cAA2B;;;;AAK/C,QAAA,QAAQ,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE;AACpC,YAAA,KAAK,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE;YACzC,KAAK,MAAM,CAAC,eAAe;gBACzB,OAAO,MAAM,CAAC,eAA6B;AAC7C,YAAA,KAAK,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE;YACzC,KAAK,MAAM,CAAC,eAAe;gBACzB,OAAO,MAAM,CAAC,yBAAuC;AACvD,YAAA;gBACE,OAAO,MAAM,CAAC,cAA2B;;;AAI/C;;;;AAIG;AACK,IAAA,2BAA2B,CAAC,QAA0B,EAAA;AAC5D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;;QAG3B,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC,cAAc;YAC3D,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC,cAAc;QAEzE,OAAO,CAAC,EAAE,QAAQ,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC;;wGAvPpC,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAApC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAsB,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACxBD;;AAEG;AACI,MAAM,gBAAgB,GAAG;;AAE9B,IAAA,MAAM,EAAE;AACN,QAAA,kBAAkB,EAAE,oBAAoB;AACxC,QAAA,iBAAiB,EAAE,mBAAmB;AACtC,QAAA,iBAAiB,EAAE,mBAAmB;AACtC,QAAA,iBAAiB,EAAE;AACpB,KAAA;;AAGD,IAAA,KAAK,EAAE;AACL,QAAA,kBAAkB,EAAE,YAAY;AAChC,QAAA,iBAAiB,EAAE,oBAAoB;AACvC,QAAA,iBAAiB,EAAE,aAAa;AAChC,QAAA,iBAAiB,EAAE;AACpB,KAAA;;AAGD,IAAA,WAAW,EAAE;QACX,kBAAkB,EAAE,eAAe;QACnC,iBAAiB,EAAE,gBAAgB;QACnC,iBAAiB,EAAE,cAAc;QACjC,iBAAiB,EAAE,gBAAgB;AACpC,KAAA;;AAGD,IAAA,SAAS,EAAE;QACT,kBAAkB,EAAE,aAAa;QACjC,iBAAiB,EAAE,aAAa;QAChC,iBAAiB,EAAE,WAAW;QAC9B,iBAAiB,EAAE,aAAa;AACjC,KAAA;;AAGD,IAAA,aAAa,EAAE;QACb,kBAAkB,EAAE,iBAAiB;QACrC,iBAAiB,EAAE,kBAAkB;QACrC,iBAAiB,EAAE,gBAAgB;QACnC,iBAAiB,EAAE,kBAAkB;AACtC,KAAA;;AAGD,IAAA,cAAc,EAAE;QACd,kBAAkB,EAAE,cAAc;QAClC,iBAAiB,EAAE,eAAe;QAClC,iBAAiB,EAAE,aAAa;QAChC,iBAAiB,EAAE,eAAe;AACnC;CACF;;AC/CD;;AAEG;MAIU,2BAA2B,CAAA;AAEtC,IAAA,WAAA,GAAA;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,KAAa,EAAA;QACzB,QAAQ,KAAK;AACX,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,KAAK,CAAC,iBAAiB;AACjD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,KAAK,CAAC,iBAAiB;AACjD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,KAAK,CAAC,iBAAiB;AACjD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,kBAAkB;AAC7C,gBAAA,OAAO,gBAAgB,CAAC,KAAK,CAAC,kBAAkB;AAClD,YAAA;AACE,gBAAA,OAAO,gBAAgB,CAAC,KAAK,CAAC,kBAAkB;;;AAItD;;AAEG;AACH,IAAA,cAAc,CAAC,KAAa,EAAA;QAC1B,QAAQ,KAAK;AACX,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,WAAW,CAAC,iBAAiB;AACvD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,WAAW,CAAC,iBAAiB;AACvD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,WAAW,CAAC,iBAAiB;AACvD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,kBAAkB;AAC7C,gBAAA,OAAO,gBAAgB,CAAC,WAAW,CAAC,kBAAkB;AACxD,YAAA;AACE,gBAAA,OAAO,gBAAgB,CAAC,WAAW,CAAC,kBAAkB;;;AAI5D;;AAEG;AACH,IAAA,gBAAgB,CAAC,KAAa,EAAA;QAC5B,QAAQ,KAAK;AACX,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,SAAS,CAAC,iBAAiB;AACrD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,SAAS,CAAC,iBAAiB;AACrD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,SAAS,CAAC,iBAAiB;AACrD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,kBAAkB;AAC7C,gBAAA,OAAO,gBAAgB,CAAC,SAAS,CAAC,kBAAkB;AACtD,YAAA;AACE,gBAAA,OAAO,gBAAgB,CAAC,SAAS,CAAC,kBAAkB;;;AAI1D;;AAEG;AACH,IAAA,oBAAoB,CAAC,KAAa,EAAA;QAChC,QAAQ,KAAK;AACX,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,aAAa,CAAC,iBAAiB;AACzD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,aAAa,CAAC,iBAAiB;AACzD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,aAAa,CAAC,iBAAiB;AACzD,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,kBAAkB;AAC7C,gBAAA,OAAO,gBAAgB,CAAC,aAAa,CAAC,kBAAkB;AAC1D,YAAA;AACE,gBAAA,OAAO,gBAAgB,CAAC,aAAa,CAAC,kBAAkB;;;AAI9D;;AAEG;AACH,IAAA,oBAAoB,CAAC,KAAa,EAAA;QAChC,QAAQ,KAAK;AACX,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,cAAc,CAAC,iBAAiB;AAC1D,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,cAAc,CAAC,iBAAiB;AAC1D,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;AAC5C,gBAAA,OAAO,gBAAgB,CAAC,cAAc,CAAC,iBAAiB;AAC1D,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,kBAAkB;AAC7C,gBAAA,OAAO,gBAAgB,CAAC,cAAc,CAAC,kBAAkB;AAC3D,YAAA;AACE,gBAAA,OAAO,gBAAgB,CAAC,cAAc,CAAC,kBAAkB;;;AAI7D;;AAEC;AACH,IAAA,iBAAiB,CAAC,OAAY,EAAA;QAC5B,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AACvC,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAQ,KACzB,IAAI,CAAC,KAAK;AACV,gBAAA,IAAI,CAAC,kBAAkB;AACvB,gBAAA,IAAI,CAAC,WAAW;gBAChB,IAAI,CAAC,QAAQ,CACd;;AAGV,IAAA,iBAAiB,CAAC,OAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9C,OAAO,MAAM,CAAC,kBAAkB;;QAGlC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK;QAE7B,QAAQ,KAAK;AACX,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;gBAC5C,OAAO,MAAM,CAAC,iBAAiB;AACjC,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;gBAC5C,OAAO,MAAM,CAAC,iBAAiB;AACjC,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;gBAC5C,OAAO,MAAM,CAAC,iBAAiB;AACjC,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,kBAAkB;AAC/C,YAAA;gBACE,OAAO,MAAM,CAAC,kBAAkB;;;wGA5H3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cAF1B,MAAM,EAAA,CAAA;;4FAEP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCiBY,sBAAsB,CAAA;AAEb,IAAA,2BAAA;AAAkE,IAAA,IAAA;IAAtF,WAAoB,CAAA,2BAAwD,EAAU,IAAiB,EAAA;QAAnF,IAA2B,CAAA,2BAAA,GAA3B,2BAA2B;QAAuC,IAAI,CAAA,IAAA,GAAJ,IAAI;;AAE1F;;AAEG;AACK,IAAA,iBAAiB,CAAC,OAAwC,EAAA;AAChE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,YAAA,OAAO,MAAM,CAAC,kBAAkB,CAAC;;QAGnC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK;QAE7B,QAAQ,KAAK;AACX,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;gBAC5C,OAAO,MAAM,CAAC,iBAAiB;AACjC,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;gBAC5C,OAAO,MAAM,CAAC,iBAAiB;AACjC,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,iBAAiB;gBAC5C,OAAO,MAAM,CAAC,iBAAiB;AACjC,YAAA,KAAK,gBAAgB,CAAC,MAAM,CAAC,kBAAkB;AAC/C,YAAA;gBACE,OAAO,MAAM,CAAC,kBAAkB;;;AAItC;;AAEG;AACK,IAAA,iBAAiB,CAAC,OAAwC,EAAA;QAChE,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AACvC,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IACpB,IAAI,CAAC,kBAAkB,KAAK,MAAM,CAAC,KAAK;AACxC,gBAAA,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,KAAK;AACjC,iBAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,YAAY,CAAC,CAC1E;;AAGV;;AAEG;AACH,IAAA,kBAAkB,CAAC,WAAqC,EAAA;QACtD,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,MAAM,CAAC,WAAW;;AAG3B,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,OAAO,IAAG;AAC/B,YAAA,MAAM,gBAAgB,GAAoC;AACxD,gBAAA,GAAG,OAAO;gBACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK;AAC9B,oBAAA,GAAG,IAAI;AACP,oBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,cAAc;oBAChD,UAAU,EAAE,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;oBACtE,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;oBACxE,aAAa,EAAE,IAAI,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC5E,iBAAiB,EAAE,IAAI,CAAC,2BAA2B,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;oBACpF,iBAAiB,EAAE,IAAI,CAAC,2BAA2B,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK;AACpF,iBAAA,CAAC;aACH;;YAGD,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;;YAG1E,gBAAgB,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AAE3E,YAAA,OAAO,gBAAgB;AACzB,SAAC,CAAC;;AAGJ;;;;AAIG;IACH,gBAAgB,CAAC,WAAmB,EAAE,OAAgB,EAAA;QACpD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACpC;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC;AAC7D,YAAA,IAAI,EAAE,CAAC,IAAI,KAAI;gBACb,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;gBAChD,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,gBAAA,CAAC,CAAC,IAAI,GAAG,OAAO;gBAChB,CAAC,CAAC,QAAQ,GAAG,OAAO,IAAI,MAAM,CAAC,QAAQ;gBACvC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI;AAC7B,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC5B,CAAC,CAAC,KAAK,EAAE;gBACT,CAAC,CAAC,MAAM,EAAE;AACV,gBAAA,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;aACpC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;gBACb,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC;;AAE3C,SAAA,CAAC;;wGAjGO,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACED;;AAEG;MAOU,wBAAwB,CAAA;AAsBf,IAAA,sBAAA;AApBpB;;AAEG;AACM,IAAA,WAAW,GAA6B,MAAM,CAAC,WAAW;AAEnE;;AAEG;IACM,WAAW,GAAY,KAAK;AAErC;;AAEG;IACH,oBAAoB,GAAW,CAAC;AAEhC;;AAEG;IACH,mBAAmB,GAAY,IAAI;AAEnC,IAAA,WAAA,CAAoB,sBAA8C,EAAA;QAA9C,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;;AAE1C;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC;;AAG/B;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;;AAGhC;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,gBAAgB,EAAE;;aAClB;YACL,IAAI,CAAC,eAAe,EAAE;;;AAI1B;;AAEG;AACH,IAAA,IAAI,oBAAoB,GAAA;QACtB,OAAO,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGzE;;;;AAIG;IACH,gBAAgB,CAAC,WAAmB,EAAE,OAAgB,EAAA;QACpD,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC;;wGAhEzD,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,iJCpCrC,4+MAoIQ,EAAA,MAAA,EAAA,CAAA,qsZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1B,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDhGK,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,KAAK,EAAA,QAAA,EAAA,4+MAAA,EAAA,MAAA,EAAA,CAAA,qsZAAA,CAAA,EAAA;wFASR,WAAW,EAAA,CAAA;sBAAnB;gBAKQ,WAAW,EAAA,CAAA;sBAAnB;;;MEnCU,sBAAsB,CAAA;AAEjC;;;;;AAKG;IACH,kBAAkB,CAAC,aAAsB,EAAE,QAAiB,EAAA;;QAE1D,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAA,OAAA,EAAU,QAAQ,CAAA,KAAA,CAAO;;QAGlC,QAAQ,aAAa;YACnB,KAAK,MAAM,CAAC,eAAe;gBACzB,OAAO,MAAM,CAAC,aAAa;YAC7B,KAAK,MAAM,CAAC,yBAAyB;gBACnC,OAAO,MAAM,CAAC,aAAa;AAC7B,YAAA;gBACE,OAAO,MAAM,CAAC,YAAY;;;AAIhC;;;;;AAKG;IACH,0BAA0B,CAAC,aAAsB,EAAE,QAAiB,EAAA;;QAElE,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAA,OAAA,EAAU,QAAQ,CAAA,OAAA,CAAS;;QAGpC,QAAQ,aAAa;YACnB,KAAK,MAAM,CAAC,eAAe;gBACzB,OAAO,MAAM,CAAC,uBAAuB;YACvC,KAAK,MAAM,CAAC,yBAAyB;gBACnC,OAAO,MAAM,CAAC,qBAAqB;AACrC,YAAA;gBACE,OAAO,MAAM,CAAC,qBAAqB;;;AAIzC;;;;;AAKG;IACH,0BAA0B,CAAC,aAAsB,EAAE,QAAiB,EAAA;;QAElE,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAA,OAAA,EAAU,QAAQ,CAAA,OAAA,CAAS;;QAGpC,QAAQ,aAAa;YACnB,KAAK,MAAM,CAAC,eAAe;gBACzB,OAAO,MAAM,CAAC,qBAAqB;YACrC,KAAK,MAAM,CAAC,yBAAyB;gBACnC,OAAO,MAAM,CAAC,uBAAuB;AACvC,YAAA;gBACE,OAAO,MAAM,CAAC,qBAAqB;;;AAIzC;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,IAAY,EAAA;QAC7B,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,aAAyB;AACtC,YAAA,IAAI,EAAE;SACP;;AAGH;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,IAAY,EAAA;QAC7B,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,aAAyB;AACtC,YAAA,IAAI,EAAE;SACP;;AAGH;;;AAGG;IACH,kBAAkB,GAAA;QAChB,OAAO;YACL,IAAI,EAAE,MAAM,CAAC;SACd;;wGAnGQ,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCCY,wBAAwB,CAAA;AA6BzB,IAAA,sBAAA;IA5BD,MAAM,GAAG,MAAM;AAEf,IAAA,QAAQ;AACR,IAAA,UAAU;AACV,IAAA,aAAa;IACb,SAAS,GAAa,KAAK;IAC3B,UAAU,GAAa,KAAK;AAC5B,IAAA,QAAQ;AACP,IAAA,eAAe,GAAG,IAAI,YAAY,EAAkB;IAE9D,gBAAgB,GAAG,KAAK;IACxB,gBAAgB,GAAG,KAAK;AACxB,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK;AACjB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK;;IAGlC,WAAW,GAAG,KAAK;IACnB,WAAW,GAAG,KAAK;;AAGnB,IAAA,SAAS,GAAW,MAAM,CAAC,YAAY;AACvC,IAAA,iBAAiB,GAAW,MAAM,CAAC,qBAAqB;AACxD,IAAA,iBAAiB,GAAW,MAAM,CAAC,qBAAqB;IACxD,iBAAiB,GAAY,IAAI;AAEO,IAAA,kBAAkB;AAE1D,IAAA,WAAA,CACU,sBAA8C,EAAA;QAA9C,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;;AAGhC,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;;IAGzB,IAAI,UAAU,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QACxB,IAAI,CAAC,qBAAqB,EAAE;;AAG9B,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,wBAAwB,EAAE;;QAG/B,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAC3C,IAAI,CAAC,gBAAgB,EAAE;;;AAI3B;;AAEG;IACK,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC;AAClG,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC;AAClH,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC;QAClH,IAAI,CAAC,qBAAqB,EAAE;;AAG9B;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,KAAK;;AAGtF;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;IAG1B,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;IAG9B,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;IAG9B,aAAa,GAAA;AACX,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,eAAe;QACtF,IAAI,CAAC,kBAAkB,CAAC,aAAa,CACnC,YAAY,EACZ,MAAK;AACH,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,CAAC;AAC7E,SAAC,EACD,MAAO,GAAC,CACT;;IAGH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;IAG/B,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;IAG/B,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK;;wGAhHrB,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA0B,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAxB,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA0BxB,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrCxC,mvHAqEW,EAAA,MAAA,EAAA,CAAA,svLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA3B,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD1DE,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,KAAK,EAAA,QAAA,EAAA,mvHAAA,EAAA,MAAA,EAAA,CAAA,svLAAA,CAAA,EAAA;wFAKR,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,eAAe,EAAA,CAAA;sBAAxB;gBAiBuC,kBAAkB,EAAA,CAAA;sBAAzD,SAAS;uBAAC,2BAA2B;;;AEfxC;;;;AAIG;MAQU,uBAAuB,CAAA;AAkGzB,IAAA,mBAAA;AACC,IAAA,eAAA;AACA,IAAA,cAAA;AACA,IAAA,qBAAA;AApGV;;;AAGG;IACM,gBAAgB,CAAoB;AAC7C;;;AAGG;IACM,YAAY,CAAsB;AAC3C;;;AAGG;AACM,IAAA,SAAS;AAElB;;;AAGG;AACO,IAAA,qBAAqB,GAAG,IAAI,YAAY,EAA2B;AAE7E;;;AAGG;IACH,OAAO,GAAY,KAAK;AAExB;;;AAGG;AACH,IAAA,GAAG;AAEH;;;AAGG;IACH,UAAU,GAAY,KAAK;AAE3B;;;AAGG;IACH,QAAQ,GAAU,EAAE;AAEpB;;;AAGG;AACH,IAAA,YAAY,GAAwB;AAClC,QAAA,eAAe,EAAE,EAAE;AACnB,QAAA,mBAAmB,EAAE,KAAK;AAC1B,QAAA,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,MAAM,CAAC,cAA2B;AAClD,QAAA,kBAAkB,EAAE,KAAK;AACzB,QAAA,SAAS,EAAE;KACZ;AAED;;;AAGG;AACH,IAAA,IAAI,uBAAuB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC;;AAG/E;;;AAGG;AACH,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,WAAW,KAAK,iBAAiB;;AAGjE;;;AAGG;AACH,IAAA,IAAI,6BAA6B,GAAA;QAC/B,OAAO,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,IAAI,CAAC,qBAAqB;;AAGrE;;;;AAIG;AACK,IAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;AAEvD;;;;;AAKG;AACH,IAAA,WAAA,CACS,mBAAyC,EACxC,eAAsC,EACtC,cAA8B,EAC9B,qBAA4C,EAAA;QAH7C,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QAClB,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;;AAG7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;AAClD,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;SAC1B,CAAC,CACH;;AAGH;;;AAGG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACxD,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,CAAC;;;AAI5E;;;AAGG;AACH,IAAA,sBAAsB,CAAC,QAA0B,EAAA;AAC/C,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AAChC,QAAA,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,QAAQ,CAAC;;AAG7D;;;;AAIG;AACH,IAAA,OAAO,CAAC,WAAoB,EAAA;QAC1B,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC;;AAGxD;;;AAGG;AACH,IAAA,oBAAoB,CAAC,MAAsB,EAAA;QACzC,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC;AACvE,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;;IAG9D,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;wGArJtB,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA3C,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAsB,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAsB,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,sQClCpC,g4IAkHA,EAAA,MAAA,EAAA,CAAA,69EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FDhFa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAEd,UAAA,EAAA,KAAK,EAEH,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,g4IAAA,EAAA,MAAA,EAAA,CAAA,69EAAA,CAAA,EAAA;oLAO5B,gBAAgB,EAAA,CAAA;sBAAxB;gBAKQ,YAAY,EAAA,CAAA;sBAApB;gBAKQ,SAAS,EAAA,CAAA;sBAAjB;gBAMS,qBAAqB,EAAA,CAAA;sBAA9B;;;AE7CH;;;;AAIG;MAQU,qBAAqB,CAAA;AA6GtB,IAAA,mBAAA;AA3GV;;;;;AAKG;AACM,IAAA,SAAS,GAAW,MAAM,CAAC,KAAK;AAEzC;;;;AAIG;IACM,oBAAoB,GAAkC,IAAI;AAEnE;;AAEG;AACK,IAAA,wBAAwB,GAAiB,IAAI,YAAY,EAAE;AAEnE;;;;AAIG;AACH,IAAA,gBAAgB;AAEhB;;;;AAIG;AACH,IAAA,gBAAgB,GAAY,MAAM,CAAC,KAAK;AAExC;;;;AAIG;AACH,IAAA,QAAQ,GAAc,MAAM,CAAC,WAAW;AAExC;;;;AAIG;AACH,IAAA,eAAe,GAAY,MAAM,CAAC,KAAK;AAEvC;;;;;AAKG;AACM,IAAA,YAAY,GAAuB,MAAM,CAAC,WAAW;AAE9D;;;;AAIG;AACH,IAAA,OAAO,GAAU,MAAM,CAAC,WAAW;AAEnC;;;;AAIG;IACH,cAAc,GAAkB,IAAI;AAEpC;;;;AAIG;AACH,IAAA,QAAQ;AAER;;AAEG;AACH,IAAA,cAAc,GAAgB,MAAM,CAAC,WAAW;AAEhD;;AAEG;AACH,IAAA,kBAAkB,GAA2B,MAAM,CAAC,WAAW;AAE/D;;AAEG;AACH,IAAA,wBAAwB,GAAa,MAAM,CAAC,WAAW;AACvD,IAAA,aAAa,GAAc,MAAM,CAAC,WAAW;AAC7C;;AAEG;AACH,IAAA,IAAI,uBAAuB,GAAA;QACzB,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,IAAG;AAC5C,YAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAA,EAAG,QAAQ,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,SAAS,CAAA,CAAE;AAC7G,SAAC,CAAC;;AAGJ;;;;AAIG;AACH,IAAA,WAAA,CACU,mBAAwC,EAAA;QAAxC,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;;AAG7B;;AAEG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;YACzE,IAAI,CAAC,mBAAmB,CAAC,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC;;;AAI7E;;AAEG;IACH,QAAQ,GAAA;QACN,IAAI,CAAC,6BAA6B,EAAE;;AAItC;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,SAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;;AAGnC;;AAEG;IACH,uBAAuB,GAAA;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC1F,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB;AACnD,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc;AAC3C,QAAA,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,wBAAwB;;AAGjE;;AAEG;IACH,6BAA6B,GAAA;AAC3B,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAC/B,IAAI,CAAC,mBAAmB,CAAC,6BAA6B,EAAE,CAAC,SAAS,CAAC;AACjE,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;AACtB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,QAAQ;gBACpC,IAAI,CAAC,uBAAuB,EAAE;aAC/B;AACD,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;gBACpB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,EAAE,KAAK,CAAC;;AAExD,SAAA,CAAC,CACH;;AAGH;;AAEG;AACH,IAAA,mBAAmB,CAAC,OAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI;QAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,OAAO,CAAC;;AAG/E;;;AAGG;AACH,IAAA,kBAAkB,CAAC,OAAY,EAAA;QAC7B,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS;AAChE,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE;oBACtE,IAAI,CAAC,gBAAgB,EAAE;;gBAEzB,IAAI,CAAC,mBAAmB,CAAC,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC;aAC1E;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,EAAE,KAAK,CAAC;;AAExD,SAAA,CAAC;;AAGN;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK;AACnC,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAsB;AAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK;;AAG9B;;;AAGG;IACH,mBAAmB,CAAC,iBAA0B,KAAK,EAAA;QACjD,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;QAC5D,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,6BAA6B,EAAC,CAAC;YACxG,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,WAAW;gBACvC,IAAI,CAAC,gBAAgB,EAAE;aACxB,EAAE,IAAI,CAAC;;;AAIZ;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;;wGA5NlC,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,mNCtBlC,i5DA+CA,EAAA,MAAA,EAAA,CAAA,skIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FDzBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EACjB,UAAA,EAAA,KAAK,EAGF,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,i5DAAA,EAAA,MAAA,EAAA,CAAA,skIAAA,CAAA,EAAA;qFAU5B,SAAS,EAAA,CAAA;sBAAjB;gBAOQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAyCQ,YAAY,EAAA,CAAA;sBAApB;;;MEtEU,mBAAmB,CAAA;AAEV,IAAA,aAAA;AAApB,IAAA,WAAA,CAAoB,aAA4B,EAAA;QAA5B,IAAa,CAAA,aAAA,GAAb,aAAa;;AAEjC;;;;;AAKG;IACH,mBAAmB,CAAC,UAAkB,EAAE,UAA8B,EAAA;AACpE,QAAA,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;AACjC,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,QAA8B,KAAK,QAAQ,CAAC,GAAG,KAAK,UAAU,CAAC,EAAE;gBACzF,OAAO,QAAQ,CAAC,KAAK;;;AAGzB,QAAA,OAAO,IAAI;;AAGb;;;;;AAKG;IACH,eAAe,CAAC,UAAkB,EAAE,UAA8B,EAAA;AAChE,QAAA,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;AACjC,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAA8B,KAAK,QAAQ,CAAC,GAAG,KAAK,UAAU,CAAC;gBACjG,IAAI,IAAI,EAAE;AACR,oBAAA,OAAO,IAAI;;;;AAIjB,QAAA,OAAO,IAAI;;AAGb;;;;AAIG;IACH,wBAAwB,CAAC,UAAkB,EAAE,UAA8B,EAAA;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC;AAE7D,QAAA,IAAI,QAAQ,KAAK,MAAM,CAAC,WAAW,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC;;AACnC,aAAA,IAAI,QAAQ,KAAK,MAAM,CAAC,UAAU,EAAE;AACzC,YAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC;;aACnC;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC;;;AAI9C;;;;AAIG;IACH,oBAAoB,CAAC,UAAkB,EAAE,UAA8B,EAAA;QACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC;QAC7D,IAAI,QAAQ,EAAE;;;AAGZ,YAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC;;;AAIvF;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,IAA0B,EAAA;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;;QAE1B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC;QACrD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC;AAC3D,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC;AAExD,QAAA,OAAO,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ;;AAKlD;;;;AAIG;AACH,IAAA,aAAa,CAAC,IAA0B,EAAA;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1C,QAAA,OAAO,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,KAAK,EAAE;;AAG/B;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,IAA0B,EAAA;AACzC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC;QAExD,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,MAAM;;QAG9B,IAAI,QAAQ,GAAG,CAAC;AAAE,YAAA,OAAO,QAAQ;;AAGjC,QAAA,IAAI,QAAQ,KAAK,KAAK,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,OAAO,SAAS;;AAGrD,QAAA,OAAO,SAAS;;AAGlB;;;;AAIG;AACH,IAAA,eAAe,CAAC,IAA0B,EAAA;QACxC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;;AAGzC;;;;AAIG;AACH,IAAA,oBAAoB,CAAC,IAA0B,EAAA;AAC7C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;;QAE1B,OAAO,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC;;wGA5IrC,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAxD,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCcY,sBAAsB,CAAA;AAWvB,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,mBAAA;AACA,IAAA,qBAAA;AAbD,IAAA,UAAU,GAAuB,MAAM,CAAC,WAAW;AACnD,IAAA,iBAAiB,GAAY,MAAM,CAAC,KAAK;AACzC,IAAA,SAAS,GAAW,MAAM,CAAC,KAAK;IACzC,gBAAgB,GAAkB,IAAI;IACtC,kBAAkB,GAAkB,IAAI;;AAGhC,IAAA,eAAe,GAAuB,MAAM,CAAC,WAAW;AAEhE,IAAA,WAAA,CACU,aAA4B,EAC5B,aAA4B,EAC5B,mBAAwC,EACxC,qBAA4C,EAAA;QAH5C,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;;AAE/B;;;;AAIG;IACH,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC,SAAS,CAAC,UAAU,IAAG;AACjE,YAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU;YACpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;AAChE,SAAC,CAAC;;QAGF,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAC,SAAS,CAAC,UAAU,IAAG;YACnE,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,gBAAA,IAAI,CAAC,eAAe,GAAG,UAAU;gBACjC,IAAI,CAAC,mBAAmB,EAAE;;AAE9B,SAAC,CAAC;;AAGJ;;;;;AAKG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;YACjD,IAAI,CAAC,mBAAmB,EAAE;;AAG5B,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;YACzE,IAAI,CAAC,qBAAqB,EAAE;;;AAIhC;;;AAGG;AACH,IAAA,IAAI,UAAU,GAAA;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU;AACvF,QAAA,OAAO,MAAM;;AAGf;;;;AAIG;AACK,IAAA,qBAAqB,CAAC,EAAiB,EAAA;AAC7C,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;AAEpB,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;gBACzD,IAAI,IAAI,EAAE;oBACR,OAAO,IAAI,CAAC,KAAK;;;;AAIvB,QAAA,OAAO,IAAI;;AAIb;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,IAAG;AACjC,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,gBAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AAC5B,oBAAA,MAAM,QAAQ,GAAG;wBACf,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,CAAC;wBAChE,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,IAAI,CAAC;wBACtE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC;wBACxD,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,CAAC;wBAC9D,eAAe,EAAE,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI;qBAC/D;AACA,oBAAA,IAAY,CAAC,QAAQ,GAAG,QAAQ;AACnC,iBAAC,CAAC;;AAEN,SAAC,CAAC;;AAIJ;;;;AAIG;IACH,eAAe,CAAC,KAAU,EAAE,IAA0B,EAAA;QACpD,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,GAAG,EAAE;;AAExC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;;AAG9B,YAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC;;YAG5C,IAAI,CAAC,qBAAqB,CAAC,8BAA8B,CAAC,IAAI,CAAC,SAAS,CAAC;;YAGzE,IAAI,CAAC,iBAAiB,EAAE;;aACnB;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK;AAClC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG;YAClC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;AAChD,YAAA,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;;;AAIhF;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,UAAU,CAAC,MAAK;SACf,EAAE,CAAC,CAAC;;AAGP;;;AAGG;AACH,IAAA,gBAAgB,CAAC,UAAkB,EAAA;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;QACpD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,YAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,UAAU,CAAC;YAClD,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;;;AAGlF;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC5C,IAAI,CAAC,qBAAqB,CAAC,8BAA8B,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG3E;;;AAGG;IACH,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;;AAG9B;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,KAAK,EAAE;AACrD,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAC5C,IAAI,CAAC,qBAAqB,CAAC,8BAA8B,CAAC,IAAI,CAAC,SAAS,CAAC;;;AAI7E;;;AAGG;IACH,qBAAqB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB;;wGA3LrB,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAuD,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,0MCrBnC,80DAsCE,EAAA,MAAA,EAAA,CAAA,0nOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqB,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,eAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDjBW,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAClB,KAAK,EAAA,QAAA,EAAA,80DAAA,EAAA,MAAA,EAAA,CAAA,0nOAAA,CAAA,EAAA;wKAKR,UAAU,EAAA,CAAA;sBAAlB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;;;AEVH;;;;AAIG;MAOU,0BAA0B,CAAA;AASlB,IAAA,aAAA;AAAqC,IAAA,eAAA;AAAyC,IAAA,aAAA;AAAqC,IAAA,mBAAA;AAAiD,IAAA,qBAAA;AAPvL;;;;;;AAMG;IACH,WAAmB,CAAA,aAA4B,EAAS,eAAgC,EAAS,aAA4B,EAAS,mBAAwC,EAAS,qBAA6C,EAAA;;;QAAjN,IAAa,CAAA,aAAA,GAAb,aAAa;QAAwB,IAAe,CAAA,eAAA,GAAf,eAAe;QAA0B,IAAa,CAAA,aAAA,GAAb,aAAa;QAAwB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QAA8B,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;;AAK5M;;;AAGG;AACM,IAAA,SAAS,GAAW,MAAM,CAAC,KAAK;AAGzC;;;AAGG;AACH,IAAA,iBAAiB,GAAW,MAAM,CAAC,KAAK;AACxC,IAAA,UAAU,GAAuB,MAAM,CAAC,WAAW;AACnD,IAAA,QAAQ,GAAoB,MAAM,CAAC,WAAW;AAC9C;;;AAGG;IACH,UAAU,GAAsB,EAAE;AAElC;;;AAGG;IACH,oBAAoB,GAAkC,IAAI;AAC1D;;;;AAIG;AACF,IAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;AAEhD;;AAEG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;;YAEzE,IAAI,CAAC,qBAAqB,EAAE;;;AAIhC;;;AAGG;IACH,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,KAAK,EAAE;YACrD,IAAI,CAAC,cAAc,EAAE;;;AAIzB;;AAEG;IACF,cAAc,GAAA;QACb,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,4BAA4B,EAAE;QACnC,IAAI,CAAC,iCAAiC,EAAE;QACxC,IAAI,CAAC,qBAAqB,CAAC,yCAAyC,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGtF;;AAEG;IACF,aAAa,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE;AAC7C,QAAA,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACzC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW;AACpC,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,KAAK;;AAGvC;;AAEG;IACF,qBAAqB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,KAAK,EAAE;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE;AACtC,YAAA,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,EAAE;YACpD,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,cAAc,EAAE;;;AAIzB;;;AAGG;IACF,4BAA4B,GAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC,SAAS,CAAC,QAAQ,IAAG;YAC/D,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,IAAI,CAAC,wBAAwB,EAAE;;SAElC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;YAC3D,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,IAAI,CAAC,wBAAwB,EAAE;;SAElC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;YAC3D,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,IAAI,CAAC,wBAAwB,EAAE;;SAElC,CAAC,CACH;QACD,IAAI,CAAC,eAAe,EAAE;;AAGxB;;AAEG;IACF,eAAe,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC;YACxC;;QAGF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;AAC3D,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,IAAI,IAAI;AAC7C,QAAA,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,IAAI,IAAI;AAChD,QAAA,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAC,SAAS,EAAC,UAAU,CAAC,CAAC,SAAS,CAAC;AAC7F,YAAA,IAAI,EAAE,CAAC,UAAU,KAAI;AACnB,gBAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC;aAC7C;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,EAAE,KAAK,CAAC;;AAE1D,SAAA,CAAC;;AAGJ;;AAEG;IACH,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC;YACxC;;QAGF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;;;;QAI3D,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;AACxE,YAAA,IAAI,EAAE,CAAC,GAAoB,KAAI;AAC7B,gBAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC;aACpC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;gBAClB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,EAAE,GAAG,CAAC;;AAEtD,SAAA,CAAC;;AAEJ;;AAEG;IACH,uBAAuB,GAAA;AACrB,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;AACtG,YAAA,IAAI,EAAE,CAAC,UAAe,KAAI;gBACxB,IAAI,UAAU,EAAE;AACd,oBAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU;AACvC,oBAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,iBAAiB;oBACrD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,UAAU,CAAC,UAAU,CAAC;;aAElE;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;gBAClB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,EAAE,GAAG,CAAC;;AAEhE,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,sBAAsB,CAAC;;AAG/C;;AAEG;IACF,2BAA2B,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,KAAK,EAAE;AACrD,YAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE;AACxC,YAAA,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE;YAC7C,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,qBAAqB,CAAC,yCAAyC,CAAC,IAAI,CAAC,SAAS,CAAC;;;AAIxF;;AAEG;IACF,iCAAiC,GAAA;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,aAAa,CAAC,0BAA0B,EAAE,CAAC,SAAS,CAAC;AACxD,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;AACtB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,QAAQ;aACrC;AACD,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;gBACpB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,EAAE,KAAK,CAAC;;AAE7D,SAAA,CAAC,CACH;;AAGH;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;AAEjC,QAAA,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,EAAE;QACpD,IAAI,CAAC,aAAa,EAAE;;wGAvPX,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAhB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAa,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAmC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,4ICzBvC,iwBAcM,EAAA,MAAA,EAAA,CAAA,kGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,sBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,mBAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDWO,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,cACtB,KAAK,EAAA,QAAA,EAAA,iwBAAA,EAAA,MAAA,EAAA,CAAA,kGAAA,CAAA,EAAA;mMAsBR,SAAS,EAAA,CAAA;sBAAjB;;;AEtCH;;;;;;AAMG;MAOU,oBAAoB,CAAA;AAiBV,IAAA,aAAA;AAhBnB;;;AAGG;AACM,IAAA,UAAU,GAAwB,MAAM,CAAC,WAAW;;AAG7D,IAAA,gBAAgB,GAAG,MAAM,CAAC,YAAY;;AAGtC,IAAA,gBAAgB,GAAG,MAAM,CAAC,YAAY;AAEtC;;;AAGG;AACH,IAAA,WAAA,CAAmB,aAA4B,EAAA;QAA5B,IAAa,CAAA,aAAA,GAAb,aAAa;;AAEhC;;;;;;AAMG;AACH,IAAA,oBAAoB,CAAC,aAAqB,EAAA;QACtC,IAAI,CAAC,aAAa,EAAE;YAChB,OAAO,MAAM,CAAC,KAAK;;AAEvB,QAAA,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,aAAa,CAAC;AACzD,QAAA,OAAO,aAAa;;wGA/Bf,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA/D,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,mHClBjC,uvDA8CA,EAAA,MAAA,EAAA,CAAA,uGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAmB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD5Ba,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,KAAK,EAAA,QAAA,EAAA,uvDAAA,EAAA,MAAA,EAAA,CAAA,uGAAA,CAAA,EAAA;+EASR,UAAU,EAAA,CAAA;sBAAlB;;;AEpBL;;;;;AAKG;MAOU,yBAAyB,CAAA;AACrC;;;AAGG;AACQ,IAAA,aAAa,GAAG,IAAI,YAAY,EAAiB;AAE3D;;;AAGG;AACM,IAAA,QAAQ;AAEjB;;;AAGG;AACD,IAAA,kBAAkB,CAAC,QAAuB,EAAA;QACxC,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,QAAQ,CAAC;YAChE;;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;;wGAtB1B,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,kKCftC,ikDAmCE,EAAA,MAAA,EAAA,CAAA,oeAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAApB,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDpBW,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,cACtB,KAAK,EAAA,QAAA,EAAA,ikDAAA,EAAA,MAAA,EAAA,CAAA,oeAAA,CAAA,EAAA;8BASP,aAAa,EAAA,CAAA;sBAAtB;gBAMQ,QAAQ,EAAA,CAAA;sBAAhB;;;AEvBH;;;;;;AAMG;MAEU,kBAAkB,CAAA;AAMP,IAAA,QAAA;AALpB;;;;AAIG;AACH,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAQ,CAAA,QAAA,GAAR,QAAQ;;AAE5B;;;;;AAKG;AACH,IAAA,WAAW,CAAC,KAAU,EAAA;AAClB,QAAA,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC;;wGAftC,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAlB,kBAAkB,EAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;ACND;;AAEG;MAKU,iBAAiB,CAAA;AASd,IAAA,eAAA;AACA,IAAA,WAAA;AACA,IAAA,GAAA;AATZ;;;;;AAKG;AACH,IAAA,WAAA,CACY,eAAsC,EACtC,WAA6B,EAC7B,GAAqB,EAAA;QAFrB,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAG,CAAA,GAAA,GAAH,GAAG;QAEX,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,QAA8B,KAAI;AACpE,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;YAChB,IAAI,QAAQ,EAAE;AACV,gBAAA,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;;AAE9E,SAAC,CAAC;;wGAlBG,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAwB,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACND;;;;;AAKG;MAOU,uBAAuB,CAAA;AAClC;;;AAGG;AACM,IAAA,gBAAgB;AACzB;;;AAGG;AACM,IAAA,YAAY;AACrB;;;AAGG;AACO,IAAA,sBAAsB,GAAG,IAAI,YAAY,EAAoB;AAEvE;;;AAGG;IACH,iBAAiB,GAAoB,EAAE;AAEvC;;;AAGG;AACH,IAAA,mBAAmB,CAAC,QAA0B,EAAA;AAC5C,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;QAChC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;;wGA7B9C,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,+NChBpC,49BAsBE,EAAA,MAAA,EAAA,CAAA,sIAAA,CAAA,EAAA,CAAA;;4FDNW,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cAGlB,KAAK,EAAA,QAAA,EAAA,49BAAA,EAAA,MAAA,EAAA,CAAA,sIAAA,CAAA,EAAA;8BAOT,gBAAgB,EAAA,CAAA;sBAAxB;gBAKQ,YAAY,EAAA,CAAA;sBAApB;gBAKS,sBAAsB,EAAA,CAAA;sBAA/B;;;METU,YAAY,CAAA;wGAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,iBAVR,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,aAEvF,YAAY;YACZ,WAAW;YACX,YAAY;AACZ,YAAA,YAAY,CAGH,EAAA,OAAA,EAAA,CAAA,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,CAAA,EAAA,CAAA;AAE1E,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,EAHZ,SAAA,EAAA,CAAC,mBAAmB,CAAC,YAL9B,YAAY;YACZ,WAAW;YACX,YAAY;YACZ,YAAY,CAAA,EAAA,CAAA;;4FAKH,YAAY,EAAA,UAAA,EAAA,CAAA;kBAXxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,CAAC;AAC1F,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,YAAY;wBACZ;AACD,qBAAA;oBACD,SAAS,EAAE,CAAC,mBAAmB,CAAC;AAChC,oBAAA,OAAO,EAAG,CAAC,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B;AACtF,iBAAA;;;AC6BD;;;;;;AAMG;MAuPU,cAAc,CAAA;wGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAd,cAAc,EAAA,YAAA,EAAA;AApPvB;;;AAGG;YACH,0BAA0B;AAE1B;;;AAGG;YACH,wBAAwB;AAExB;;;AAGG;YACH,oBAAoB;AAEpB;;;AAGG;YACH,qBAAqB;AAErB;;;AAGG;YACH,yBAAyB;AAEzB;;AAEG;YACH,uBAAuB;AAEvB;;AAEG;YACH,uBAAuB;AAEvB;;AAEG;YACH,wBAAwB;AAExB;;AAEG;YACH,iBAAiB;AAEjB;;AAEG;YACH,uBAAuB;YACvB,sBAAsB;YACtB,iBAAiB;YACjB,uBAAuB;YACvB,wBAAwB;YACxB,uBAAuB;AACvB;;AAEG;YACH,gBAAgB,CAAA,EAAA,OAAA,EAAA;AAIhB;;AAEG;YACH,YAAY;AAEZ;;AAEG;YACH,eAAe;AAEf;;AAEG;YACH,gBAAgB;AAEhB;;AAEG;YACH,YAAY;AAEZ;;AAEG;YACH,aAAa;AAEb;;AAEG;YACH,gBAAgB;AAEhB;;AAEG;YACH,iBAAiB;AAEjB;;AAEG;YACH,WAAW;AAEX;;AAEG;YACH,aAAa;AAEb;;AAEG;YACH,cAAc;AAEd;;AAEG;YACH,iBAAiB;AAEjB;;AAEG;YACH,cAAc;AACd;;AAEG;YACH,mBAAmB;AACnB;;AAEG;YACH,WAAW;AACX;;AAEG;YACH,eAAe;AACf;;AAEG;YACH,YAAY;AACZ;;AAEG;YACH,cAAc;AACd;;AAEG;YACH,eAAe;YAEf,UAAU;YACV,eAAe;YACf,UAAU;YACV,WAAW;YACX,YAAY;YACZ,mBAAmB;YACnB,WAAW;YACX,aAAa;YACb,cAAc;YACd,aAAa,CAAA,EAAA,OAAA,EAAA;AAIf;;AAEG;YACD,0BAA0B;AAC1B;;AAEG;YACH,uBAAuB;AACvB;;AAEG;YACH,wBAAwB;AACxB;;;AAGG;YACH,qBAAqB;AAErB;;AAEG;YACH,iBAAiB;AAEjB;;AAEG;YACH,uBAAuB;AAEvB;;AAEG;YACH,gBAAgB,CAAA,EAAA,CAAA;AAkDP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EA9Cd,SAAA,EAAA;AACT;;AAEG;YACH,cAAc;AAEd;;AAEG;YACH,sBAAsB;AAEtB;;AAEG;YACH,mBAAmB;AAEnB;;AAEG;AACH,YAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE;AAC7D;;;;;;AAMG;AACH,YAAA;AACE,gBAAA,OAAO,EAAE,eAAe;AACxB;;;;;;AAMG;AACH,gBAAA,UAAU,EAAE,CAAC,aAA+B,KAAK,MAC/C,aAAa,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AAC5C,oBAAA,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;AACxB,iBAAC,CAAC;gBACJ,IAAI,EAAE,CAAC,gBAAgB,CAAC;AACxB,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AAEF,SAAA,EAAA,OAAA,EAAA;AAhLC;;AAEG;YACH,YAAY;AAEZ;;AAEG;YACH,eAAe;AAEf;;AAEG;YACH,gBAAgB;AAEhB;;AAEG;YACH,YAAY;AAEZ;;AAEG;YACH,aAAa;AAEb;;AAEG;YACH,gBAAgB;AAEhB;;AAEG;YACH,iBAAiB;AAEjB;;AAEG;YACH,WAAW;AAEX;;AAEG;YACH,aAAa;AAEb;;AAEG;YACH,cAAc;AAEd;;AAEG;YACH,iBAAiB;AAEjB;;AAEG;YACH,cAAc;AACd;;AAEG;YACH,mBAAmB;AACnB;;AAEG;YACH,WAAW;AACX;;AAEG;YACH,eAAe;AACf;;AAEG;YACH,YAAY;AACZ;;AAEG;YACH,cAAc;AACd;;AAEG;YACH,eAAe;YAEf,UAAU;YACV,eAAe;YACf,UAAU;YACV,WAAW;YACX,YAAY;YACZ,mBAAmB;YACnB,WAAW;YACX,aAAa;YACb,cAAc;YACd,aAAa,CAAA,EAAA,CAAA;;4FAqFJ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAtP1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;AACZ;;;AAGG;wBACH,0BAA0B;AAE1B;;;AAGG;wBACH,wBAAwB;AAExB;;;AAGG;wBACH,oBAAoB;AAEpB;;;AAGG;wBACH,qBAAqB;AAErB;;;AAGG;wBACH,yBAAyB;AAEzB;;AAEG;wBACH,uBAAuB;AAEvB;;AAEG;wBACH,uBAAuB;AAEvB;;AAEG;wBACH,wBAAwB;AAExB;;AAEG;wBACH,iBAAiB;AAEjB;;AAEG;wBACH,uBAAuB;wBACvB,sBAAsB;wBACtB,iBAAiB;wBACjB,uBAAuB;wBACvB,wBAAwB;wBACxB,uBAAuB;AACvB;;AAEG;wBACH,gBAAgB;AAEjB,qBAAA;AACD,oBAAA,OAAO,EAAE;AACP;;AAEG;wBACH,YAAY;AAEZ;;AAEG;wBACH,eAAe;AAEf;;AAEG;wBACH,gBAAgB;AAEhB;;AAEG;wBACH,YAAY;AAEZ;;AAEG;wBACH,aAAa;AAEb;;AAEG;wBACH,gBAAgB;AAEhB;;AAEG;wBACH,iBAAiB;AAEjB;;AAEG;wBACH,WAAW;AAEX;;AAEG;wBACH,aAAa;AAEb;;AAEG;wBACH,cAAc;AAEd;;AAEG;wBACH,iBAAiB;AAEjB;;AAEG;wBACH,cAAc;AACd;;AAEG;wBACH,mBAAmB;AACnB;;AAEG;wBACH,WAAW;AACX;;AAEG;wBACH,eAAe;AACf;;AAEG;wBACH,YAAY;AACZ;;AAEG;wBACH,cAAc;AACd;;AAEG;wBACH,eAAe;wBAEf,UAAU;wBACV,eAAe;wBACf,UAAU;wBACV,WAAW;wBACX,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,aAAa;wBACb,cAAc;wBACd;AAED,qBAAA;AACD,oBAAA,OAAO,EAAE;AACT;;AAEG;wBACD,0BAA0B;AAC1B;;AAEG;wBACH,uBAAuB;AACvB;;AAEG;wBACH,wBAAwB;AACxB;;;AAGG;wBACH,qBAAqB;AAErB;;AAEG;wBACH,iBAAiB;AAEjB;;AAEG;wBACH,uBAAuB;AAEvB;;AAEG;wBACH,gBAAgB;AAGjB,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT;;AAEG;wBACH,cAAc;AAEd;;AAEG;wBACH,sBAAsB;AAEtB;;AAEG;wBACH,mBAAmB;AAEnB;;AAEG;AACH,wBAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE;AAC7D;;;;;;AAMG;AACH,wBAAA;AACE,4BAAA,OAAO,EAAE,eAAe;AACxB;;;;;;AAMG;AACH,4BAAA,UAAU,EAAE,CAAC,aAA+B,KAAK,MAC/C,aAAa,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AAC5C,gCAAA,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;AACxB,6BAAC,CAAC;4BACJ,IAAI,EAAE,CAAC,gBAAgB,CAAC;AACxB,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AAEF;AACF,iBAAA;;;AC9SD;;;;;;;;;;;AAWG;;ACXH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"cat-documents-ng.mjs","sources":["../../../projects/cat-document-lib/src/Shared/constant/SHARED.ts","../../../projects/cat-document-lib/src/Shared/constant/ERROR.ts","../../../projects/cat-document-lib/src/lib/document/state/document.state.ts","../../../projects/cat-document-lib/src/lib/document/state/document.store.ts","../../../projects/cat-document-lib/src/Shared/constant/URLS.ts","../../../projects/cat-document-lib/src/Shared/services/app-config.service.ts","../../../projects/cat-document-lib/src/lib/document/state/document.service.ts","../../../projects/cat-document-lib/src/lib/document/state/document.query.ts","../../../projects/cat-document-lib/src/lib/document/services/document-http.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload.service.ts","../../../projects/cat-document-lib/src/lib/document/services/file-format.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-business.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-form.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-upload-data.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-upload/document-upload.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-upload/document-upload.component.html","../../../projects/cat-document-lib/src/Shared/components/confirmation-dialog/confirmation-dialog.component.ts","../../../projects/cat-document-lib/src/Shared/components/confirmation-dialog/confirmation-dialog.component.html","../../../projects/cat-document-lib/src/lib/document/components/sidebar/sidebar.component.ts","../../../projects/cat-document-lib/src/lib/document/components/sidebar/sidebar.component.html","../../../projects/cat-document-lib/src/lib/document/services/user-list.service.ts","../../../projects/cat-document-lib/src/lib/document/components/user-list/user-list.component.ts","../../../projects/cat-document-lib/src/lib/document/components/user-list/user-list.component.html","../../../projects/cat-document-lib/src/lib/document/services/status-calculator.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-status/document-status.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-status/document-status.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-search/document-search.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-search/document-search.component.html","../../../projects/cat-document-lib/src/lib/document/components/folder-container/folder-container.component.ts","../../../projects/cat-document-lib/src/lib/document/components/folder-container/folder-container.component.html","../../../projects/cat-document-lib/src/Shared/constant/PERMISSIONS.ts","../../../projects/cat-document-lib/src/Shared/services/session.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-table-builder.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-list.service.ts","../../../projects/cat-document-lib/src/lib/document/directives/permission.directive.ts","../../../projects/cat-document-lib/src/Shared/components/table-primary/table-primary.component.ts","../../../projects/cat-document-lib/src/Shared/components/table-primary/table-primary.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-viewer.service.ts","../../../projects/cat-document-lib/src/lib/document/constant/DOCUMENT_HISTORY.ts","../../../projects/cat-document-lib/src/lib/document/services/document-history-style.service.ts","../../../projects/cat-document-lib/src/lib/document/services/document-history.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-history/document-history.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-history/document-history.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-actions.service.ts","../../../projects/cat-document-lib/src/lib/document/components/document-actions/document-actions.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-actions/document-actions.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-viewer/document-viewer.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-viewer/document-viewer.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-list/document-list.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-list/document-list.component.html","../../../projects/cat-document-lib/src/lib/document/services/document-menu.service.ts","../../../projects/cat-document-lib/src/lib/document/components/documents-menu/documents-menu.component.ts","../../../projects/cat-document-lib/src/lib/document/components/documents-menu/documents-menu.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-container/document-container.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-container/document-container.component.html","../../../projects/cat-document-lib/src/lib/document/components/folder-block/folder-block.component.ts","../../../projects/cat-document-lib/src/lib/document/components/folder-block/folder-block.component.html","../../../projects/cat-document-lib/src/lib/document/components/document-list-item/document-list-item.component.ts","../../../projects/cat-document-lib/src/lib/document/components/document-list-item/document-list-item.component.html","../../../projects/cat-document-lib/src/Shared/services/global-error.handler.ts","../../../projects/cat-document-lib/src/lib/document/directives/document.directive.ts","../../../projects/cat-document-lib/src/lib/document/components/linked-document/linked-document.component.ts","../../../projects/cat-document-lib/src/lib/document/components/linked-document/linked-document.component.html","../../../projects/cat-document-lib/src/Shared/shared.module.ts","../../../projects/cat-document-lib/src/lib/document/document.module.ts","../../../projects/cat-document-lib/src/public-api.ts","../../../projects/cat-document-lib/src/cat-documents-ng.ts"],"sourcesContent":["/**\r\n * The `SHARED` class contains shared constants used across the application.\r\n * These constants are related to document statuses and other shared data.\r\n */\r\nexport class SHARED {\r\n \r\n /**\r\n * Represents the info.\r\n */\r\n static UNKNOWN_USER = 'Unknown User'\r\n /**\r\n * Represents the info.\r\n */\r\n static ACTIONS = 'actions'\r\n /**\r\n * Represents the info.\r\n */\r\n static VISIBLE = 'visible'\r\n /**\r\n * Represents the info.\r\n */\r\n static HIDDEN = 'hidden'\r\n\r\n static NO_DOCUMENTS_FOUND = 'No documents found'\r\n static DOCUMENT_TYPES_DELETE = 'DocumentTypes-DELETE'\r\n static SUCCESS_MESSAGE = 'Document Saved Successfully'\r\n /**\r\n * Represents the info.\r\n */\r\n static APPLICATION_DOCS = 'Application Docs'\r\n /**\r\n * Represents the info.\r\n */\r\n static INFO = 'info'\r\n /**\r\n * Represents the success.\r\n */\r\n static SUCCESS = 'success'\r\n /**\r\n * Represents the warning.\r\n */\r\n static WARNING = 'warning'\r\n /**\r\n * Represents the warning.\r\n */\r\n static DANGER = 'danger'\r\n /**\r\n * Represents the stores userData.\r\n */\r\n static SESSIONKEY = 'userData';\r\n /**\r\n * Represents the count of missing files.\r\n */\r\n static MISSINGCOUNT = 2;\r\n\r\n /**\r\n * Represents the count of pending files.\r\n */\r\n static PENDINGCOUNT = 3;\r\n\r\n /**\r\n * Represents an empty string.\r\n */\r\n static EMPTY = \"\";\r\n /**\r\n * Represents an empty string.\r\n */\r\n static STRING = \"string\";\r\n\r\n /**\r\n * Represents an true.\r\n * @static\r\n * @type {boolean}\r\n */\r\n static TRUE: boolean = true;\r\n\r\n\r\n /**\r\n * Represents an false.\r\n * @static\r\n * @type {boolean}\r\n */\r\n static FALSE: boolean = false;\r\n\r\n /**\r\n * Represents an INITIAL_COUNT.\r\n */\r\n static INITIAL_COUNT = 0\r\n /**\r\n * Represents an INITIAL_VALUE.\r\n */\r\n static INITIAL_VALUE = 0\r\n\r\n /**\r\n * Represents the constant value for one (1).\r\n * @static\r\n * @type {number}\r\n */\r\n static ONE: number = 1\r\n\r\n /**\r\n * Represents the constant value for two (2).\r\n * @static\r\n * @type {number}\r\n */\r\n static TWO: number = 2\r\n\r\n /**\r\n * Represents the constant value for ten (10).\r\n * @static\r\n * @type {number}\r\n */\r\n static TEN: number = 10\r\n\r\n /**\r\n * Represents the constant string value 'files' used for file-related operations.\r\n * @static\r\n * @type {string}\r\n */\r\n static FILE: string = 'file';\r\n\r\n /**\r\n * Query parameter for menu item filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static MENU_ITEM_PARAM: string = 'menuItem';\r\n\r\n /**\r\n * Query parameter for user ID filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static USER_ID_PARAM: string = 'userId';\r\n\r\n /**\r\n * Query parameter for status filter.\r\n * @static\r\n * @type {string}\r\n */\r\n static STATUS_PARAM: string = 'status';\r\n\r\n /**\r\n * Represents the array of file size units ('B', 'KB', 'MB') used for file size formatting.\r\n * @static\r\n * @type {string[]}\r\n */\r\n static FILE_SIZE_UNITS: string[] = ['B', 'KB', 'MB'];\r\n\r\n /**\r\n * Show SEVERITY value.\r\n * @static\r\n * @type {'error'}\r\n */\r\n static SEVERITY: string = 'error'\r\n /**\r\n * Show SEVERITY value.\r\n * @static\r\n * @type {'error'}\r\n */\r\n static SUCCESS_SEVERITY: string = 'success'\r\n\r\n /**\r\n * Show upload summery if it's failed.\r\n * @static\r\n * @type {'Upload Failed'}\r\n */\r\n static UPLOAD_SUMMERY: string = 'Upload Failed'\r\n\r\n /**\r\n * Show upload summery if it's success.\r\n * @static\r\n * @type {'Document uploaded successfully.'}\r\n */\r\n static UPLOAD_SUCCESS: string = 'Document uploaded successfully.'\r\n\r\n /**\r\n * Represent empty array.\r\n * @static\r\n * @type {{}}\r\n */\r\n static EMPTY_ARRAY = []\r\n\r\n /**\r\n * Represent contextId.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONTEXT_ID: string = 'contextId'\r\n\r\n /**\r\n * Represent contextId.\r\n * @static\r\n * @type {string}\r\n */\r\n static CATEGORY: string = 'category'\r\n\r\n /**\r\n * Represent fileSize.\r\n * @static\r\n * @type {string}\r\n */\r\n static FILE_SIZE: string = 'fileSize'\r\n /**\r\n * Represent documentName.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_NAME: string = 'documentName'\r\n /**\r\n * Represent documentTypeId.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_TYPE_ID: string = 'documentTypeId'\r\n /**\r\n * Represent blob.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT: string = 'document';\r\n /**\r\n * Represent none.\r\n * @static\r\n * @type {string}\r\n */\r\n static NONE: string = 'none';\r\n\r\n /**\r\n * Represent upload summery.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPLOAD_ERROR_SUMMERY: string = 'Form Data Missing'\r\n\r\n /**\r\n * Represent upload error details.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPLOAD_ERROR_DETAILS: string = 'Required form data is missing. Please ensure the document and all required fields are provided.'\r\n\r\n /**\r\n * Represents the message prefix for a successful document name update.\r\n * @static\r\n * @type {string}\r\n */\r\n static UPDATE_DOCUMENT_NAME: string = 'Document name updated for ID:'\r\n static WIDTH = '500px'\r\n static BASEZINDEX = 1000\r\n static CLOSE_ICON = 'pi pi-times'\r\n static SAVE = 'Save'\r\n static UPLOAD_PROGRESS_100 = 100\r\n static UPLOAD_PROGRESS_10 = 10\r\n static APPLICANT = 'Applicant'\r\n static CATAGORIES = 'catagories'\r\n static DOCUMENTS = 'Documents'\r\n static UPLOAD_FAILED = 'Upload failed'\r\n static USER_LIST = 'userList'\r\n static CATEGORIES = 'categories'\r\n static UNSAVED_CHANGES_MESSAGE = 'You will loose all the data that was filled in the respective fields.'\r\n static UNSAVED_CHANGES_HEADER = 'Unsaved Changes'\r\n static DOCUMENT_DELETED_SUCCESSFULLY = 'Document deleted successfully'\r\n static UNSAVED_CHANGES_ICON = 'pi pi-exclamation-triangle'\r\n static REMOVE = 'Remove'\r\n static CANCEL = 'Cancel'\r\n static ACCEPT_ICON = 'pi pi-times'\r\n static REJECT_ICON = 'pi pi-check'\r\n static ACCEPT_BUTTON_STYLE_CLASS = 'p-button-danger'\r\n static REJECT_BUTTON_STYLE_CLASS = 'p-button-secondary'\r\n static FILE_TYPES = [\r\n 'xlsx', 'xls', 'doc', 'docx', 'pdf', 'jpg', 'jpeg', \r\n 'odt', 'csv', 'png', 'msg', 'eml'\r\n ];\r\n static COMMA = ',';\r\n static Menu = [\r\n {\r\n label: 'Applicant',\r\n // expanded: true,\r\n // disabled: true,\r\n // separator: true,\r\n items: [\r\n {\r\n label: 'Identity',\r\n icon: 'ri-id-card-line',\r\n badge: \"2/5\"\r\n },\r\n {\r\n label: 'Income',\r\n icon: 'ri-money-pound-circle-line',\r\n badge: \"2/5\"\r\n },\r\n {\r\n label: 'Affordability',\r\n icon: 'ri-calculator-line',\r\n badge: \"2/8\"\r\n },\r\n {\r\n label: 'Cradit conduct',\r\n icon: 'ri-calendar-event-fill',\r\n badge: \"2/4\"\r\n },\r\n {\r\n label: 'KYC',\r\n icon: 'ri-calendar-event-fill',\r\n badge: \"2/4\"\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Welcome Call',\r\n icon: 'ri-calendar-event-fill'\r\n },\r\n {\r\n label: 'Gatehouse Bank Exposure',\r\n badge: \"2/4\",\r\n icon: 'ri-calendar-event-fill'\r\n }\r\n ]\r\n },\r\n {\r\n label: 'Application',\r\n // expanded: true,\r\n // disabled: true,\r\n // separator: true,\r\n items: [\r\n {\r\n badge: \"2/4\",\r\n label: 'Deposit',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Direct Debit',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n label: 'Property',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Completions',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Summary',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'System Documents',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Ad Hoc',\r\n icon: 'ri-mail-open-line'\r\n },\r\n {\r\n badge: \"2/4\",\r\n label: 'Miscellaneous',\r\n icon: 'ri-mail-open-line'\r\n }\r\n ]\r\n }\r\n ];\r\n static APPLICATION = 'Application'\r\n static APPLICANTS = 'Applicants'\r\n static EMPTY_SPACE = ' '\r\n\r\n static COLORS = ['orange', 'blue', 'green', 'grey', 'purple']\r\n\r\n static COLOR_MAP = {\r\n 'orange': '#f97316',\r\n 'blue': '#3b82f6',\r\n 'green': '#10b981',\r\n 'grey': '#6b7280',\r\n 'purple': '#8b5cf6'\r\n }\r\n static DEFAULT_COLOR = '#3b82f6'\r\n static STATUS_WITH_DASH = 'status-'\r\n static ICON_WITH_DASH = 'icon-'\r\n static SEARCH_KEY = 'searchKey'\r\n static APPROVED = 'approved'\r\n static UPLOADED = 'uploaded'\r\n static PENDING = 'Pending'\r\n static DOT = '.'\r\n static PDF = 'PDF'\r\n static PENDING_STATUS = 'pending'\r\n \r\n // File extension constants\r\n static JPG = 'JPG'\r\n static PNG = 'PNG'\r\n static XLSX = 'XLSX'\r\n \r\n // Status constants\r\n static APPROVED_STATUS = 'approved'\r\n static ALERT_STATUS = 'alert'\r\n static UPLOADED_STATUS = 'uploaded'\r\n static REVIEWING_STATUS = 'reviewing'\r\n static REJECTED_STATUS = 'rejected'\r\n static REQUESTED_STATUS = 'document requested'\r\n \r\n // Status class constants\r\n static STATUS_PENDING_CLASS = 'status-pending'\r\n static STATUS_APPROVED_CLASS = 'status-approved'\r\n static STATUS_ALERT_CLASS = 'status-alert'\r\n static STATUS_UPLOADED_CLASS = 'status-uploaded'\r\n static STATUS_REVIEWING_CLASS = 'status-reviewing'\r\n static STATUS_REJECTED_CLASS = 'status-rejected'\r\n \r\n // Icon constants\r\n static ICON_CHECK = 'pi pi-check'\r\n static ICON_EXCLAMATION_TRIANGLE = 'pi pi-exclamation-triangle'\r\n static ICON_CLOUD_UPLOAD = 'pi pi-cloud-upload'\r\n static ICON_EYE = 'pi pi-eye'\r\n static ICON_TIMES = 'pi pi-times'\r\n static ICON_CLOCK = 'pi pi-clock'\r\n \r\n // File type icons\r\n static ICON_FILE_PDF = 'pi pi-file-pdf'\r\n static ICON_IMAGE = 'pi pi-image'\r\n static ICON_FILE_EXCEL = 'pi pi-file-excel'\r\n static ICON_FILE = 'pi pi-file'\r\n static ICON_DELETE = 'ri-delete-bin-6-line'\r\n \r\n // Cell type constants\r\n static CELL_TYPE_DOCUMENT = 'document'\r\n static CELL_TYPE_STATUS = 'status'\r\n static CELL_TYPE_ACTIONS = 'actions'\r\n static CELL_TYPE_TEXT = 'text'\r\n \r\n /**\r\n * Document table columns configuration\r\n * @static\r\n * @type {Array<{field: string, header: string, type: 'text' | 'status' | 'document' | 'actions', width: string}>}\r\n */\r\n static DOCUMENT_TABLE_COLUMNS: Array<{\r\n field: string;\r\n header: string;\r\n type: 'text' | 'status' | 'document' | 'actions';\r\n width: string;\r\n }> = [\r\n {\r\n field: 'docName',\r\n header: 'Document',\r\n type: 'document',\r\n width: '35%'\r\n },\r\n {\r\n field: 'status',\r\n header: 'Status',\r\n type: 'status',\r\n width: '15%'\r\n },\r\n {\r\n field: 'ownerName',\r\n header: 'Owner',\r\n type: 'text',\r\n width: '20%'\r\n },\r\n {\r\n field: 'uploadedOn',\r\n header: 'Uploaded',\r\n type: 'text',\r\n width: '15%'\r\n },\r\n {\r\n field: 'actions',\r\n header: 'Actions',\r\n type: 'actions',\r\n width: '15%'\r\n }\r\n ];\r\n\r\n static DOCUMENT_REQUESTED = 'document-requested';\r\n static DOCUMENT_UPLOADED = 'document-uploaded';\r\n static DOCUMENT_REJECTED = 'document-rejected';\r\n static DOCUMENT_ACCEPTED = 'document-accepted';\r\n\r\n // Document Actions Constants\r\n static ACCEPT_ACTION = 'accept';\r\n static REJECT_ACTION = 'reject';\r\n static DELETE_ACTION = 'delete';\r\n \r\n static ACCEPT_CONFIRM_HEADER = 'Accept confirm';\r\n static REJECT_CONFIRM_HEADER = 'Reject Confirm';\r\n \r\n static ACCEPT_NOTE_LABEL = 'Write a note for Acceptance';\r\n static REJECT_NOTE_LABEL = 'Write a note for rejection';\r\n \r\n static ACCEPT_NOTE_PLACEHOLDER = 'Write a note for Acceptance';\r\n static REJECT_NOTE_PLACEHOLDER = 'Write a note for rejection';\r\n \r\n static CANCEL_BUTTON_LABEL = 'Cancel';\r\n static ACCEPT_BUTTON_LABEL = 'Accept';\r\n static REJECT_BUTTON_LABEL = 'Reject';\r\n \r\n static DOCUMENT_ACCEPTED_MESSAGE = 'Document accepted successfully';\r\n static DOCUMENT_REJECTED_MESSAGE = 'Document rejected successfully';\r\n static DOCUMENT_UPDATE_ERROR_MESSAGE = 'Failed to update document. Please try again.';\r\n \r\n static STATUS_APPROVED = 'Approved';\r\n static STATUS_REJECTED = 'Rejected';\r\n \r\n // Document Status Constants\r\n static STATUS_PENDING = 'pending';\r\n static STATUS_ACCEPTED = 'accepted';\r\n static STATUS_REJECTED_LOWERCASE = 'rejected';\r\n static STATUS_DECLINED = 'declined';\r\n \r\n // Document Card CSS Classes\r\n static CARD_PENDING = 'pending-card';\r\n static CARD_ACCEPTED = 'accepted-card';\r\n static CARD_REJECTED = 'rejected-card';\r\n \r\n // Document Button CSS Classes\r\n static BUTTON_SECONDARY_REJECT = 'secondary-reject';\r\n static BUTTON_PRIMARY_REJECT = 'primary-reject';\r\n static BUTTON_DEFAULT_REJECT = 'default-reject';\r\n static BUTTON_PRIMARY_ACCEPT = 'primary-accept';\r\n static BUTTON_SECONDARY_ACCEPT = 'secondary-accept';\r\n static BUTTON_DEFAULT_ACCEPT = 'default-accept';\r\n \r\n // Document Action Button Labels\r\n static BUTTON_LABEL_REJECT = 'Reject';\r\n static BUTTON_LABEL_REJECTED = 'Rejected';\r\n static BUTTON_LABEL_ACCEPT = 'Accept';\r\n static BUTTON_LABEL_ACCEPTED = 'Accepted';\r\n \r\n // Document Upload Validation Messages\r\n static VALIDATION_NO_APPLICANT_SELECTED = 'No Applicant Selected';\r\n static VALIDATION_NO_APPLICANT_DETAIL = 'Please select an applicant.';\r\n static VALIDATION_NO_CATEGORY_SELECTED = 'No Category Selected';\r\n static VALIDATION_NO_CATEGORY_DETAIL = 'Please select a category.';\r\n static VALIDATION_NO_DOCUMENT_TYPE_SELECTED = 'No Document Type Selected';\r\n static VALIDATION_NO_DOCUMENT_TYPE_DETAIL = 'Please select a document type.';\r\n static VALIDATION_NO_DOCUMENTS_UPLOADED = 'No Documents Uploaded';\r\n static VALIDATION_NO_DOCUMENTS_DETAIL = 'Please upload at least one document.';\r\n static VALIDATION_FORM_INCOMPLETE = 'Form Incomplete';\r\n static VALIDATION_FORM_INCOMPLETE_DETAIL = 'Please complete all required fields and upload at least one document.';\r\n static VALIDATION_MISSING_REQUIRED_DATA = 'Missing Required Data';\r\n \r\n // Document Upload Assignment Type Messages\r\n static VALIDATION_SELECT_ASSIGNMENT_TYPE = 'Please select an assignment type (Applicant or Application)';\r\n static VALIDATION_SELECT_CATEGORY = 'Please select a document category';\r\n static VALIDATION_SELECT_DOCUMENT_TYPE = 'Please select a document type';\r\n static VALIDATION_UPLOAD_AT_LEAST_ONE = 'Please upload at least one document';\r\n static VALIDATION_WAIT_FOR_UPLOAD = 'Please wait for all files to finish uploading';\r\n static VALIDATION_SELECT_APPLICANT = 'Please select an applicant';\r\n static VALIDATION_ALL_FIELDS_COMPLETED = 'All required fields are completed';\r\n static VALIDATION_OPTIONS_NOT_LOADED = 'Document options are not loaded yet';\r\n\r\n}\r\n\r\n/**\r\n * `DUMMYDOCUMENTLIST` is a mock list of document objects used for testing and development purposes.\r\n * Each document includes an ID, file name, status, and document URL.\r\n */\r\nexport const DUMMYDOCUMENTLIST = [\r\n {\r\n _id: 1,\r\n fileName: 'Document 1',\r\n status: 'pending',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 2,\r\n fileName: 'Document 2',\r\n status: 'verified',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 3,\r\n fileName: 'Document 3',\r\n status: 'sentReminder',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n {\r\n _id: 4,\r\n fileName: 'Document 4',\r\n status: 'pending',\r\n documentUrl: 'https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf',\r\n },\r\n];\r\n\r\n/**\r\n * `FOLDERPANEL` is a mock list of folder data representing various folders in the application.\r\n * Each folder contains an ID, file count, text description, missing files count, and pending files count.\r\n */\r\nexport const USERLIST = [\r\n {\r\n _id : \"1\",\r\n username: \"John Smith\",\r\n approveDocumentCount: 15,\r\n pendingDocumentCount: 3\r\n },\r\n {\r\n _id : \"2\",\r\n username: \"Sarah Johnson\",\r\n approveDocumentCount: 8,\r\n pendingDocumentCount: 7\r\n },\r\n {\r\n _id : \"3\",\r\n username: \"Michael Brown\",\r\n approveDocumentCount: 22,\r\n pendingDocumentCount: 1\r\n },\r\n {\r\n _id : \"4\",\r\n username: \"Emily Davis\",\r\n approveDocumentCount: 12,\r\n pendingDocumentCount: 5\r\n }\r\n];\r\n\r\nexport const SAMPLE_STATUS_DATA = [\r\n {\r\n status: \"Approved\",\r\n count: 4,\r\n color: \"#10b981\",\r\n icon: \"pi pi-check\"\r\n },\r\n {\r\n status: \"Pending\",\r\n count: 5,\r\n color: \"#6b7280\",\r\n icon: \"pi pi-clock\"\r\n },\r\n {\r\n status: \"Reviewing\",\r\n count: 1,\r\n color: \"#f59e0b\",\r\n icon: \"pi pi-search\"\r\n },\r\n {\r\n status: \"Rejected\",\r\n count: 2,\r\n color: \"#ef4444\",\r\n icon: \"pi pi-times\"\r\n },\r\n {\r\n status: \"Alert\",\r\n count: 12,\r\n color: \"#dc2626\",\r\n icon: \"pi pi-exclamation-circle\"\r\n }\r\n]; \r\n\r\n/**\r\n * Dummy data for sumaery.\r\n * @type {{}}\r\n */\r\nexport const DUMMYSUMMARY = [\r\n {\r\n status: 'Valuation report requested on 10th Oct 2024',\r\n date: '15/10/2020 10:30',\r\n icon: 'pi pi-shopping-cart',\r\n color: '#9C27B0',\r\n image: 'game-controller.jpg',\r\n },\r\n {\r\n status: 'Valuation report received on 13th Oct 2024',\r\n date: '15/10/2020 14:00',\r\n icon: 'pi pi-cog',\r\n color: '#673AB7',\r\n },\r\n {\r\n status: 'Waiting for Valuation Report to be accepted',\r\n date: '15/10/2020 16:15',\r\n icon: 'pi pi-shopping-cart',\r\n color: '#FF9800',\r\n },\r\n];\r\n\r\n/**\r\n * Dummy data for list box.\r\n * @type {{}}\r\n */\r\nexport const COUNTRIES = [\r\n { name: 'Any Word', code: 'NY', checked: false },\r\n { name: 'Case Sensitive', code: 'RM', checked: false },\r\n { name: 'Wildcard Search', code: 'LDN', checked: false },\r\n { name: 'Whole Word Only', code: 'IST', checked: false },\r\n];\r\n\r\n/**\r\n * Default supported image types.\r\n * @type {{}}\r\n */\r\nexport const SUPPORTED_IMAGE_TYPES = [\r\n 'image/PNG', \r\n 'image/png', \r\n 'image/jpeg',\r\n 'image/jpg',\r\n 'image/gif',\r\n 'image/bmp',\r\n 'image/tiff',\r\n 'image/webp',\r\n];\r\n\r\n/**\r\n * @constant {Array<{label: string, value: string, files: string[]}>} DOCUMENTTYPES\r\n * An array of document type objects containing labels, values, and associated files.\r\n */\r\n\r\nexport const DOCUMENTTYPES = [\r\n {\r\n label: \"BankStatement\",\r\n value: \"bank_statement\",\r\n },\r\n {\r\n label: \"Payslip\",\r\n value: \"payslip\",\r\n },\r\n {\r\n label: \"Selfie\",\r\n value: \"selfie\",\r\n },\r\n {\r\n label: \"Other\",\r\n value: \"other\",\r\n }\r\n];\r\n\r\nexport const DocumentAlertList = [\r\n { status: 'Pending', isAlert: true, alertMessage: 'The name on the payslip does not match either the driver name or the policyholder name.' },\r\n { status: 'Verified', isAlert: false, alertMessage: 'Document is verified successfully.' },\r\n];\r\n\r\n/**\r\n * Dummy data for document sections with detailed document lists.\r\n * Based on the document management interface structure.\r\n * @type {Array<{header: string, description: string, pendingDocument: number, approvedDocument: number, list: Array<{documentName: string, documentType: string, documentUrl: string, status: string, applicantName: string, uploadedTime: string}>}>}\r\n */\r\nexport const DUMMY_DOCUMENT_SECTIONS = [\r\n {\r\n header: \"Identity\",\r\n description: \"Personal identification documents required for verification\",\r\n pendingDocument: 1,\r\n approvedDocument: 1,\r\n list: [\r\n {\r\n documentName: \"passport_emilia_wilson_2025.pdf\",\r\n documentType: \"Passport\",\r\n documentUrl: \"https://example.com/documents/passport_emilia_wilson_2025.pdf\",\r\n status: \"Pending\",\r\n applicantName: \"Charlotte Anderson\",\r\n uploadedTime: \"28 May 2025\"\r\n },\r\n {\r\n documentName: \"driving_license_benjamin_mitchell_2025.jpg\",\r\n documentType: \"Driving License\",\r\n documentUrl: \"https://example.com/documents/driving_license_benjamin_mitchell_2025.jpg\",\r\n status: \"Approved\",\r\n applicantName: \"Benjamin Mitchell\",\r\n uploadedTime: \"27 May 2025\"\r\n },\r\n {\r\n documentName: \"british_gas_bill_may_2025.pdf\",\r\n documentType: \"Utility Bill\",\r\n documentUrl: \"https://example.com/documents/british_gas_bill_may_2025.pdf\",\r\n status: \"Alert\",\r\n applicantName: \"Sophia Reynolds\",\r\n uploadedTime: \"26 May 2025\"\r\n },\r\n {\r\n documentName: \"council_tax_oliver_thompson_2025_2026.pdf\",\r\n documentType: \"Council Tax Bill\",\r\n documentUrl: \"https://example.com/documents/council_tax_oliver_thompson_2025_2026.pdf\",\r\n status: \"Uploaded\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"30 May 2025\"\r\n },\r\n {\r\n documentName: \"certified_id_oliver_thompson_2025.pdf\",\r\n documentType: \"Certified ID\",\r\n documentUrl: \"https://example.com/documents/certified_id_oliver_thompson_2025.pdf\",\r\n status: \"Reviewing\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n },\r\n {\r\n documentName: \"proof_of_address_oliver_thompson_2025.pdf\",\r\n documentType: \"Proof of Address\",\r\n documentUrl: \"https://example.com/documents/proof_of_address_oliver_thompson_2025.pdf\",\r\n status: \"Rejected\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n }\r\n ]\r\n },\r\n {\r\n header: \"Income\",\r\n description: \"Personal Income documents required for verification\",\r\n pendingDocument: 1,\r\n approvedDocument: 1,\r\n list: [\r\n {\r\n documentName: \"passport_emilia_wilson_2025.pdf\",\r\n documentType: \"Passport\",\r\n documentUrl: \"https://example.com/documents/passport_emilia_wilson_2025.pdf\",\r\n status: \"Pending\",\r\n applicantName: \"Charlotte Anderson\",\r\n uploadedTime: \"28 May 2025\"\r\n },\r\n {\r\n documentName: \"driving_license_benjamin_mitchell_2025.jpg\",\r\n documentType: \"Driving License\",\r\n documentUrl: \"https://example.com/documents/driving_license_benjamin_mitchell_2025.jpg\",\r\n status: \"Approved\",\r\n applicantName: \"Benjamin Mitchell\",\r\n uploadedTime: \"27 May 2025\"\r\n },\r\n {\r\n documentName: \"british_gas_bill_may_2025.pdf\",\r\n documentType: \"Utility Bill\",\r\n documentUrl: \"https://example.com/documents/british_gas_bill_may_2025.pdf\",\r\n status: \"Alert\",\r\n applicantName: \"Sophia Reynolds\",\r\n uploadedTime: \"26 May 2025\"\r\n },\r\n {\r\n documentName: \"council_tax_oliver_thompson_2025_2026.pdf\",\r\n documentType: \"Council Tax Bill\",\r\n documentUrl: \"https://example.com/documents/council_tax_oliver_thompson_2025_2026.pdf\",\r\n status: \"Uploaded\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"30 May 2025\"\r\n },\r\n {\r\n documentName: \"certified_id_oliver_thompson_2025.pdf\",\r\n documentType: \"Certified ID\",\r\n documentUrl: \"https://example.com/documents/certified_id_oliver_thompson_2025.pdf\",\r\n status: \"Reviewing\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n },\r\n {\r\n documentName: \"proof_of_address_oliver_thompson_2025.pdf\",\r\n documentType: \"Proof of Address\",\r\n documentUrl: \"https://example.com/documents/proof_of_address_oliver_thompson_2025.pdf\",\r\n status: \"Rejected\",\r\n applicantName: \"Oliver Thompson\",\r\n uploadedTime: \"02 Jun 2025\"\r\n }\r\n ]\r\n }\r\n];\r\n","/**\r\n * A utility class containing common error messages.\r\n * @class ERRORS\r\n */\r\nexport class ERRORS {\r\n /**\r\n * Error message for invalid recipient.\r\n * @static\r\n * @type {string}\r\n */\r\n static INVALID_RECIPIENT = \"Invalid recipient: The recipient cannot be empty.\";\r\n \r\n static NO_VALUE_FOUND = \"No value found\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_FETCHING_DOCUMENTS = \"Error fetching documents:\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_FETCHING_FOLDERS = \"Error fetching folders:\";\r\n \r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_ALLDOCUMENT_MISSING = \"allDocumentTypes is missing in the response:\";\r\n /**\r\n * Error message for invalid document.\r\n * @static\r\n * @type {string}\r\n */\r\n static ERROR_DOCUMENT_TYPES = \"Error fetching document types:\";\r\n\r\n static ERROR_DOCUMENT_CATAGORY = 'Error fetching document categories:'\r\n static NO_DOCUMENT_URL = 'No document URL provided for download'\r\n static DOWNLOAD_FAIL = 'Download failed:'\r\n static ERROR_DELETING_DOCUMENT = 'Error deleting document:'\r\n static ERROR_RECEIVING_DOCUMENT_LIST = 'Error receiving document list response:'\r\n static CONTEXT_ID_REQUIRED = 'Context ID is required to fetch status data'\r\n static ERROR_FETCHING_STATUS_DATA = 'Error fetching status data:'\r\n static ERROR_FETCHING_USER_LIST = 'Error fetching user list with filters:'\r\n static ERROR_FETCHING_DOCUMENT_LIST = 'Error fetching document list:'\r\n static ERROR_FETCHING_DOCUMENT_CATEGORIES = 'Error fetching document categories:'\r\n static ERROR_FETCHING_DOCUMENTS_BY_STATUS = 'Error fetching documents by status:'\r\n static ERROR_FETCHING_DOCUMENTS_BY_CATEGORY = 'Error fetching documents by category:'\r\n static ERROR_CALLING_API_WITH_SELECTION = 'Error calling API with selection:'\r\n}\r\n","import { EntityState } from '@datorama/akita';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentAlertModel } from '../models/document-alert.model';\r\nimport { FolderBlockModel } from '../models/folder.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { Message } from 'primeng/api';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Represents the state of the documents in the application.\r\n * This interface extends Akita's `EntityState` to include additional properties\r\n * for managing document-specific data, such as `records`, `filteredRecords` and `folderId`.\r\n * @interface DocumentState\r\n * @property {any[]} records - A collection of records related to documents.\r\n * @property {any[]} filteredRecords - A collection of filteredRecords related to documents.\r\n * @property {string | null} folderId - The ID of the currently selected folder, or `null` if no folder is selected.\r\n * @property {boolean} isDialogOpen - A flag indicating whether a dialog is open.\r\n */\r\nexport interface DocumentState extends EntityState<DocumentModel, string> {\r\n records: DocumentModel[];\r\n folderId: string | null;\r\n isDialogOpen: boolean;\r\n filteredRecords:DocumentModel[];\r\n dropdownOptions: DocumentTypeModel[];\r\n uploadedDocumentFiles: DocumentModel[];\r\n parentDocumentTypeId: string | null;\r\n documentAlert:DocumentAlertModel\r\n folders:FolderBlockModel[]\r\n messages: Message[]\r\n documentList : DocumentModel[]\r\n documentCategories: DocumentCategory[];\r\n selectedMenuItem: string | null; // Stores the _id of the selected menu item, not the label\r\n selectedUserId: string | null;\r\n selectedStatus: string | null;\r\n searchKey: string | null; // Search term for filtering documents\r\n showUserList: boolean;\r\n currentDocument: DocumentModel | null;\r\n userList: UserListModel[];\r\n statusData: StatusDataModel[];\r\n documentListResponse: DocumentListResponse[] | null;\r\n \r\n // Document Viewer State\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n}\r\n\r\n/**\r\n * Creates the initial state for the `DocumentState` store.\r\n * This function provides default values for all properties in the `DocumentState` interface,\r\n * ensuring the store starts with a consistent initial structure.\r\n * @returns {DocumentState} The initial state of the document store.\r\n */\r\nexport function createInitialState(): DocumentState {\r\n return {\r\n records: [],\r\n filteredRecords: [],\r\n folderId: null,\r\n isDialogOpen: false,\r\n dropdownOptions: [], \r\n uploadedDocumentFiles: [],\r\n parentDocumentTypeId: null,\r\n documentAlert: {_id:''},\r\n folders:[],\r\n messages:[],\r\n documentList : [],\r\n documentCategories: [],\r\n selectedMenuItem: null,\r\n selectedUserId: null,\r\n selectedStatus: null,\r\n searchKey: null,\r\n showUserList: true,\r\n currentDocument: null,\r\n userList: [],\r\n statusData: [],\r\n documentListResponse: null,\r\n \r\n // Document Viewer State\r\n selectedDocument: undefined,\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: 'pending' as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EntityStore, StoreConfig } from '@datorama/akita';\r\nimport { createInitialState, DocumentState } from './document.state';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { Message } from 'primeng/api';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Store that manages the state of documents in the application.\r\n * The `DocumentStore` class extends Akita's `EntityStore` to manage the entity state for documents.\r\n * It uses the `createInitialState` function to initialize the store with default values and \r\n * is configured with the name `'documents'`.\r\n * @augments EntityStore<DocumentState>\r\n */\r\n@Injectable({ providedIn: 'root' })\r\n@StoreConfig({ name: 'documents' })\r\nexport class DocumentStore extends EntityStore<DocumentState> {\r\n /**\r\n * Creates an instance of `DocumentStore` with the initial state of the documents.\r\n */\r\n constructor() {\r\n super(createInitialState());\r\n }\r\n \r\n setUploadedDocumentFiles(files: any[]) {\r\n this.update({ uploadedDocumentFiles: files });\r\n }\r\n\r\n setFolders(folders: any) {\r\n this.update({ folders: folders });\r\n }\r\n \r\n setDocumentTypes(documentType: any) {\r\n this.update({ uploadedDocumentFiles: documentType });\r\n }\r\n\r\n setDocumentAlert(documentAlert: any) { \r\n this.update({ documentAlert : documentAlert });\r\n }\r\n\r\n setParentDocumentTypeId(parentDocumentTypeId: string) {\r\n this.update({ parentDocumentTypeId });\r\n }\r\n \r\n setMessage(message: Message[]) {\r\n this.update({ messages : message });\r\n }\r\n\r\n setDocumentList(documents: DocumentModel[]) {\r\n this.update({ documents : documents });\r\n }\r\n\r\n setDocumentCategories(categories: DocumentCategory[]) {\r\n this.update({ documentCategories: categories });\r\n }\r\n\r\n // New methods for selection state management\r\n setSelectedMenuItem(menuItem: string | null) {\r\n this.update({ selectedMenuItem: menuItem });\r\n }\r\n\r\n setSelectedUserId(userId: string | null) {\r\n this.update({ selectedUserId: userId });\r\n }\r\n\r\n setSelectedStatus(status: string | null) {\r\n this.update({ selectedStatus: status });\r\n }\r\n\r\n setSearchKey(searchKey: string | null) {\r\n this.update({ searchKey: searchKey });\r\n }\r\n\r\n // Method to update all selection properties at once\r\n setSelectionState(menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null) {\r\n this.update({ \r\n selectedMenuItem: menuItem,\r\n selectedUserId: userId,\r\n selectedStatus: status,\r\n searchKey: searchKey\r\n });\r\n }\r\n\r\n // Method to clear all selection state\r\n clearSelectionState() {\r\n this.update({\r\n selectedMenuItem: null,\r\n selectedUserId: null,\r\n selectedStatus: null,\r\n searchKey: null,\r\n showUserList: true\r\n });\r\n }\r\n\r\n // Method to control user list visibility\r\n setShowUserList(show: boolean) {\r\n this.update({ showUserList: show });\r\n }\r\n\r\n // Method to set the current document\r\n setCurrentDocument(document: DocumentModel | null) {\r\n this.update({ currentDocument: document });\r\n }\r\n\r\n // Method to set the user list\r\n setUserList(userList: UserListModel[]) {\r\n this.update({ userList: userList });\r\n }\r\n\r\n // Method to set the status data\r\n setStatusData(statusData: StatusDataModel[]) {\r\n this.update({ statusData: statusData });\r\n }\r\n\r\n // Method to set the document list response\r\n setDocumentListResponse(response: DocumentListResponse[] | null) {\r\n this.update({ documentListResponse: response });\r\n }\r\n\r\n // Document Viewer State Management Methods\r\n setSelectedDocument(document: DocumentListItem | undefined) {\r\n this.update({ selectedDocument: document });\r\n }\r\n\r\n setDocumentHistory(history: DocumentHistorySection[]) {\r\n this.update({ documentHistory: history });\r\n }\r\n\r\n setShowDocumentHistory(show: boolean) {\r\n this.update({ showDocumentHistory: show });\r\n }\r\n\r\n setIsActionLoading(loading: boolean) {\r\n this.update({ isActionLoading: loading });\r\n }\r\n\r\n setDocumentStatus(status: 'pending' | 'accepted' | 'rejected') {\r\n this.update({ documentStatus: status });\r\n }\r\n\r\n setDocumentIsUploaded(uploaded: boolean) {\r\n this.update({ documentIsUploaded: uploaded });\r\n }\r\n\r\n setAlertData(alertData: any) {\r\n this.update({ alertData: alertData });\r\n }\r\n\r\n // Method to update all document viewer state at once\r\n updateDocumentViewerState(\r\n document?: DocumentListItem,\r\n history?: DocumentHistorySection[],\r\n showHistory?: boolean,\r\n loading?: boolean,\r\n status?: 'pending' | 'accepted' | 'rejected',\r\n uploaded?: boolean,\r\n alertData?: any\r\n ) {\r\n const updates: Partial<DocumentState> = {};\r\n \r\n if (document !== undefined) updates.selectedDocument = document;\r\n if (history !== undefined) updates.documentHistory = history;\r\n if (showHistory !== undefined) updates.showDocumentHistory = showHistory;\r\n if (loading !== undefined) updates.isActionLoading = loading;\r\n if (status !== undefined) updates.documentStatus = status;\r\n if (uploaded !== undefined) updates.documentIsUploaded = uploaded;\r\n if (alertData !== undefined) updates.alertData = alertData;\r\n \r\n this.update(updates);\r\n }\r\n\r\n // Method to clear document viewer state\r\n clearDocumentViewerState() {\r\n this.update({\r\n selectedDocument: undefined,\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: 'pending' as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n });\r\n }\r\n}\r\n","/**\r\n * Class that holds the URLs used throughout the application.\r\n * These URLs are typically used for making API requests and accessing various resources.\r\n * @class URLS\r\n * @typedef {URLS}\r\n */\r\nexport class URLS {\r\n /**\r\n * The URL to fetch the application configuration file.\r\n * This JSON file typically contains settings and options for the application.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONFIGFILEURL = \"assets/config/api.config.json\";\r\n\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_UPLOAD_FILE = \"documents/uploadFile\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_UPLOAD = \"Documents\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENTS = \"documents\";\r\n /**\r\n * The URL endpoint for document uploads.\r\n * Used to send documents to the server for storage or processing.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENTS_CATAGORIES = \"documents/getAllCategoriesByApplicationId\";\r\n\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * Used to specify the context for certain API calls, such as filtering or scoping the request.\r\n * @static\r\n * @type {string}\r\n */\r\n static CONTEXT = \"?contextId=\";\r\n\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static DOCUMENT_TYPES = \"documentTypes\";\r\n /**\r\n * The URL endpoint for getting categories by source (Applicant/Application).\r\n * Used to fetch document categories based on the selected source.\r\n * @static\r\n * @type {string}\r\n */\r\n static GET_CATEGORIES_BY_SOURCE = \"documentTypes/getAllCategoriesBySource/\";\r\n /**\r\n * The URL endpoint for getting document types by category ID.\r\n * Used to fetch document types based on the selected category.\r\n * @static\r\n * @type {string}\r\n */\r\n static GET_DOCUMENT_TYPES_BY_CATEGORY = \"documentTypes/getAllDocumentTypesByCategoryId/\";\r\n /**\r\n * The URL endpoint for saving document upload data.\r\n * Used to save the complete document upload information.\r\n * @static\r\n * @type {string}\r\n */\r\n static SAVE_DOCUMENT_UPLOAD = \"documents/create\";\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static FOLDERS = \"/folders?contextId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static ALERT_BY_DOCUMENT_ID = \"alerts?documentId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static PARENT_DOCUMENT_TYPE_ID = \"parentDocumentType?parentDocumentTypeId=\";\r\n /**\r\n * The query parameter to pass a document ID in API requests.\r\n * @static\r\n * @type {string}\r\n */\r\n static USERLIST = \"documents/getContextIdListByApplicationId/\";\r\n\r\n /**\r\n * The URL endpoint for getting document status count by context ID.\r\n * Used to fetch status data with applicationId, contextId, and category parameters.\r\n * @static\r\n * @type {string}\r\n */\r\n static STATUS_DOCUMENT_COUNT = \"documents/getStatusDocumentCountByContextId/\";\r\n\r\n /**\r\n * The query parameter to pass a context ID in API requests.\r\n * Used to specify the context for certain API calls, such as filtering or scoping the request.\r\n * @static\r\n * @type {string}\r\n */\r\n \r\n static CONTEXT_ID = \"&contextId=\";\r\n static GETALL = \"documents/getAllByContextId\";\r\n static DOCUMENT_LIST = \"list\";\r\n static DOCUMENT_HISTORY = \"documents/getDocumentHistoryByDocumentId/\";\r\n static DELETE_DOCUMENT = \"documents/deleteDocumentByDocumentId/\";\r\n static UPDATE_DOCUMENT_STATUS = \"documents/updateDocumentStatusByDocumentId/\";\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { URLS } from '../constant/URLS';\r\n\r\n/**\r\n * Service that handles loading and providing configuration settings for the application.\r\n * It fetches configuration data from a remote server and exposes various configuration options.\r\n * @class AppConfigService\r\n * @typedef {AppConfigService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppConfigService {\r\n\r\n /**\r\n * Holds the configuration data loaded from the server.\r\n * @private\r\n * @type {*}\r\n */\r\n private appConfig: any;\r\n\r\n /**\r\n * Creates an instance of AppConfigService.\r\n * Initializes the HttpClient for making HTTP requests.\r\n * @class\r\n * @param {HttpClient} http - The HttpClient service used for making HTTP requests.\r\n */\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Loads the application configuration from the server by making an HTTP request to the configuration URL.\r\n * This method retrieves the configuration data and assigns it to the appConfig property.\r\n * @async\r\n * @returns {*}\r\n */\r\n async loadAppConfig() {\r\n try {\r\n this.appConfig = await firstValueFrom(this.http.get(URLS.CONFIGFILEURL));\r\n } catch (error) {\r\n throw new Error(\"Api url is missing.\")\r\n }\r\n }\r\n \r\n\r\n /**\r\n * Returns the base URL for the API from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get apiBaseUrl() {\r\n return this.appConfig?.documentApiUrl;\r\n }\r\n\r\n /**\r\n * Returns the local server API URL from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get localServerApi() {\r\n return this.appConfig?.localServerApi;\r\n }\r\n\r\n /**\r\n * Returns the visibility options from the loaded configuration.\r\n * @readonly\r\n * @type {*}\r\n */\r\n get visibilityOptions() {\r\n return this.appConfig?.visibilityOption;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { DocumentStore } from './document.store';\r\nimport { Observable, tap } from 'rxjs';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\nimport { URLS } from '../../../Shared/constant/URLS';\r\nimport { DocumentModel } from '../models/document.model';\r\n\r\n/**\r\n * Service for managing document-related operations.\r\n * The `DocumentService` acts as a bridge between the application and the backend API for handling document-related data.\r\n * It interacts with the `DocumentStore` for state management and uses `HttpClient` for making HTTP requests.\r\n * Creates an instance of `DocumentService`.\r\n * @param {DocumentStore} documentStore - The store that manages the state of documents.\r\n * @param {HttpClient} http - The Angular HTTP client for making API requests.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class DocumentService {\r\n\r\n /**\r\n * Creates an instance of DocumentService.\r\n * @param {DocumentStore} documentStore - Store managing the state of documents.\r\n * @param {HttpClient} http - Angular HTTP client for making API requests.\r\n * @param {AppConfigService} appConfigService - Service for retrieving application configuration, such as API base URL.\r\n */\r\n constructor(\r\n public documentStore: DocumentStore,\r\n private http: HttpClient,\r\n public appConfigService: AppConfigService\r\n ) { }\r\n\r\n /**\r\n * Get api url from appConfigService.\r\n * @readonly\r\n * @type {string}\r\n */\r\n get apiUrl(): string {\r\n return this.appConfigService.apiBaseUrl;\r\n }\r\n\r\n /**\r\n * Sends a request to create a new document.\r\n * @param {*} entity - The data of the document to be created.\r\n * @returns {Observable<any>} Observable that emits the newly created document.\r\n */\r\n create(entity: any): Observable<any> {\r\n const headers = { 'Authorization': 'Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d' };\r\n return this.http.post<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, entity, { headers }).pipe(\r\n tap((newEntity: any) => this.documentStore.add(newEntity))\r\n );\r\n }\r\n\r\n /**\r\n * Fetches all documents from the backend.\r\n * @returns {Observable<DocumentModel[]>} Observable that emits an array of documents.\r\n */\r\n getAll(): Observable<DocumentModel[]> {\r\n return this.http.get<DocumentModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}`).pipe(\r\n tap((entities: DocumentModel[]) => this.documentStore.set(entities))\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document by its ID.\r\n * @param {string} id - The unique identifier of the document.\r\n * @returns {Observable<any>} Observable that emits the retrieved document.\r\n */\r\n getById(id: string): Observable<any> {\r\n return this.http.get<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${id}`).pipe(\r\n tap((entity: any) => this.documentStore.upsert(id, entity))\r\n );\r\n }\r\n\r\n /**\r\n * Updates an existing document by its ID.\r\n * @param {string} id - The unique identifier of the document.\r\n * @param {DocumentModel} entity - The updated data of the document.\r\n * @returns {Observable<DocumentModel>} Observable that emits the updated document.\r\n */\r\n update(id: string, entity: DocumentModel): Observable<DocumentModel> {\r\n return this.http.put<DocumentModel>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${id}`, entity).pipe(\r\n tap((updatedEntity: DocumentModel) => this.documentStore.update(id, updatedEntity))\r\n );\r\n }\r\n\r\n /**\r\n * Deletes a document by its ID.\r\n * @param {string} id - The unique identifier of the document to be deleted.\r\n * @returns {Observable<void>} Observable that completes when the document is deleted.\r\n */\r\n delete(id: string): Observable<void> {\r\n return this.http.delete<void>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}/${id}`).pipe(\r\n tap(() => this.documentStore.remove(id))\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { QueryEntity } from '@datorama/akita';\r\nimport { DocumentStore } from './document.store';\r\nimport { DocumentState } from './document.state';\r\nimport { Observable } from 'rxjs';\r\nimport { Message } from 'primeng/api';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n\r\n/**\r\n * Query service for managing document state.\r\n * This class extends Akita's `QueryEntity` to provide additional functionality for querying document data.\r\n * @class DocumentQuery\r\n * @typedef {DocumentQuery}\r\n * @augments {QueryEntity<DocumentState>}\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class DocumentQuery extends QueryEntity<DocumentState> {\r\n constructor(protected override store: DocumentStore) {\r\n super(store);\r\n }\r\n\r\n /**\r\n * Selects the currently selected folder ID from the document state.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected folder ID.\r\n */\r\n getParentDocumentTypeId() : string | null {\r\n return this.getValue()['parentDocumentTypeId'];\r\n }\r\n\r\n /**\r\n * Selects the currently selected folder ID from the document state.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected folder ID.\r\n */\r\n selectParentDocumentTypeId():Observable<string | null> {\r\n return this.select((state) => state['parentDocumentTypeId']);\r\n }\r\n /**\r\n * Selects the set messages.\r\n * @returns {Observable<Message>} Observable that emits the current Message.\r\n */\r\n selectMessages():Observable<Message[]> {\r\n return this.select((state) => state.messages);\r\n }\r\n /**\r\n * Selects the set documents.\r\n * @returns {Observable<DocumentModel[]>} Observable that emits the documets.\r\n */\r\n selectDocumets():Observable<DocumentModel[]> {\r\n return this.select((state) => state.documentList);\r\n }\r\n\r\n /**\r\n * Selects the document categories.\r\n * @returns {Observable<DocumentCategory[]>} Observable that emits the document categories.\r\n */\r\n selectDocumentCategories(): Observable<DocumentCategory[]> {\r\n return this.select((state) => state.documentCategories);\r\n }\r\n\r\n // New query methods for selection state\r\n /**\r\n * Selects the currently selected menu item.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected menu item _id (not the label).\r\n */\r\n selectSelectedMenuItem(): Observable<string | null> {\r\n return this.select((state) => state.selectedMenuItem);\r\n }\r\n\r\n /**\r\n * Selects the currently selected user ID.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected user ID.\r\n */\r\n selectSelectedUserId(): Observable<string | null> {\r\n return this.select((state) => state.selectedUserId);\r\n }\r\n\r\n /**\r\n * Selects the currently selected status.\r\n * @returns {Observable<string | null>} Observable that emits the currently selected status.\r\n */\r\n selectSelectedStatus(): Observable<string | null> {\r\n return this.select((state) => state.selectedStatus);\r\n }\r\n\r\n /**\r\n * Selects the current search key.\r\n * @returns {Observable<string | null>} Observable that emits the current search key.\r\n */\r\n selectSearchKey(): Observable<string | null> {\r\n return this.select((state) => state.searchKey);\r\n }\r\n\r\n /**\r\n * Selects all selection state properties (menu item, user ID, status, search key).\r\n * @returns {Observable<{menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null}>} Observable that emits the current selection state.\r\n * Note: menuItem is the _id of the selected menu item, not the label.\r\n */\r\n selectSelectionState(): Observable<{menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null}> {\r\n return this.select((state) => ({\r\n menuItem: state.selectedMenuItem,\r\n userId: state.selectedUserId,\r\n status: state.selectedStatus,\r\n searchKey: state.searchKey\r\n }));\r\n }\r\n\r\n /**\r\n * Gets the current selection state values (synchronous).\r\n * @returns {Object} The current selection state values.\r\n * Note: menuItem is the _id of the selected menu item, not the label.\r\n */\r\n getSelectionState(): {menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null} {\r\n const state = this.getValue();\r\n return {\r\n menuItem: state.selectedMenuItem,\r\n userId: state.selectedUserId,\r\n status: state.selectedStatus,\r\n searchKey: state.searchKey\r\n };\r\n }\r\n\r\n /**\r\n * Selects the user list visibility state.\r\n * @returns {Observable<boolean>} Observable that emits the current user list visibility.\r\n */\r\n selectShowUserList(): Observable<boolean> {\r\n return this.select((state) => state.showUserList);\r\n }\r\n\r\n /**\r\n * Gets the current user list visibility value (synchronous).\r\n * @returns {boolean} The current user list visibility.\r\n */\r\n getShowUserList(): boolean {\r\n return this.getValue().showUserList;\r\n }\r\n\r\n /**\r\n * Selects the current document.\r\n * @returns {Observable<DocumentModel | null>} Observable that emits the current document.\r\n */\r\n selectCurrentDocument(): Observable<DocumentModel | null> {\r\n return this.select((state) => state.currentDocument);\r\n }\r\n\r\n /**\r\n * Gets the current document value (synchronous).\r\n * @returns {DocumentModel | null} The current document.\r\n */\r\n getCurrentDocument(): DocumentModel | null {\r\n return this.getValue().currentDocument;\r\n }\r\n\r\n /**\r\n * Selects the user list.\r\n * @returns {Observable<UserListModel[]>} Observable that emits the user list.\r\n */\r\n selectUserList(): Observable<UserListModel[]> {\r\n return this.select((state) => state.userList);\r\n }\r\n\r\n /**\r\n * Gets the current user list value (synchronous).\r\n * @returns {UserListModel[]} The current user list.\r\n */\r\n getUserList(): UserListModel[] {\r\n return this.getValue().userList;\r\n }\r\n\r\n /**\r\n * Selects the status data.\r\n * @returns {Observable<StatusDataModel[]>} Observable that emits the status data.\r\n */\r\n selectStatusData(): Observable<StatusDataModel[]> {\r\n return this.select((state) => state.statusData);\r\n }\r\n\r\n /**\r\n * Gets the current status data value (synchronous).\r\n * @returns {StatusDataModel[]} The current status data.\r\n */\r\n getStatusData(): StatusDataModel[] {\r\n return this.getValue().statusData;\r\n }\r\n\r\n /**\r\n * Selects the document list response.\r\n * @returns {Observable<DocumentListResponse[] | null>} Observable that emits the document list response.\r\n */\r\n selectDocumentListResponse(): Observable<DocumentListResponse[] | null> {\r\n return this.select((state) => state.documentListResponse);\r\n }\r\n\r\n /**\r\n * Gets the current document list response value (synchronous).\r\n * @returns {DocumentListResponse[] | null} The current document list response.\r\n */\r\n getDocumentListResponse(): DocumentListResponse[] | null {\r\n return this.getValue().documentListResponse;\r\n }\r\n\r\n // Document Viewer State Query Methods\r\n /**\r\n * Selects the selected document for viewing.\r\n * @returns {Observable<DocumentListItem | undefined>} Observable that emits the selected document.\r\n */\r\n selectSelectedDocument(): Observable<DocumentListItem | undefined> {\r\n return this.select((state) => state.selectedDocument);\r\n }\r\n\r\n /**\r\n * Gets the current selected document value (synchronous).\r\n * @returns {DocumentListItem | undefined} The current selected document.\r\n */\r\n getSelectedDocument(): DocumentListItem | undefined {\r\n return this.getValue().selectedDocument;\r\n }\r\n\r\n /**\r\n * Selects the document history.\r\n * @returns {Observable<DocumentHistorySection[]>} Observable that emits the document history.\r\n */\r\n selectDocumentHistory(): Observable<DocumentHistorySection[]> {\r\n return this.select((state) => state.documentHistory);\r\n }\r\n\r\n /**\r\n * Gets the current document history value (synchronous).\r\n * @returns {DocumentHistorySection[]} The current document history.\r\n */\r\n getDocumentHistory(): DocumentHistorySection[] {\r\n return this.getValue().documentHistory;\r\n }\r\n\r\n /**\r\n * Selects the document history visibility state.\r\n * @returns {Observable<boolean>} Observable that emits the current document history visibility.\r\n */\r\n selectShowDocumentHistory(): Observable<boolean> {\r\n return this.select((state) => state.showDocumentHistory);\r\n }\r\n\r\n /**\r\n * Gets the current document history visibility value (synchronous).\r\n * @returns {boolean} The current document history visibility.\r\n */\r\n getShowDocumentHistory(): boolean {\r\n return this.getValue().showDocumentHistory;\r\n }\r\n\r\n /**\r\n * Selects the action loading state.\r\n * @returns {Observable<boolean>} Observable that emits the current action loading state.\r\n */\r\n selectIsActionLoading(): Observable<boolean> {\r\n return this.select((state) => state.isActionLoading);\r\n }\r\n\r\n /**\r\n * Gets the current action loading value (synchronous).\r\n * @returns {boolean} The current action loading state.\r\n */\r\n getIsActionLoading(): boolean {\r\n return this.getValue().isActionLoading;\r\n }\r\n\r\n /**\r\n * Selects the document status.\r\n * @returns {Observable<'pending' | 'accepted' | 'rejected'>} Observable that emits the current document status.\r\n */\r\n selectDocumentStatus(): Observable<'pending' | 'accepted' | 'rejected'> {\r\n return this.select((state) => state.documentStatus);\r\n }\r\n\r\n /**\r\n * Gets the current document status value (synchronous).\r\n * @returns {'pending' | 'accepted' | 'rejected'} The current document status.\r\n */\r\n getDocumentStatus(): 'pending' | 'accepted' | 'rejected' {\r\n return this.getValue().documentStatus;\r\n }\r\n\r\n /**\r\n * Selects the document uploaded state.\r\n * @returns {Observable<boolean>} Observable that emits the current document uploaded state.\r\n */\r\n selectDocumentIsUploaded(): Observable<boolean> {\r\n return this.select((state) => state.documentIsUploaded);\r\n }\r\n\r\n /**\r\n * Gets the current document uploaded value (synchronous).\r\n * @returns {boolean} The current document uploaded state.\r\n */\r\n getDocumentIsUploaded(): boolean {\r\n return this.getValue().documentIsUploaded;\r\n }\r\n\r\n /**\r\n * Selects the alert data.\r\n * @returns {Observable<any>} Observable that emits the current alert data.\r\n */\r\n selectAlertData(): Observable<any> {\r\n return this.select((state) => state.alertData);\r\n }\r\n\r\n /**\r\n * Gets the current alert data value (synchronous).\r\n * @returns {any} The current alert data.\r\n */\r\n getAlertData(): any {\r\n return this.getValue().alertData;\r\n }\r\n\r\n /**\r\n * Selects all document viewer state properties.\r\n * @returns {Observable<{selectedDocument?: DocumentListItem, documentHistory: DocumentHistorySection[], showDocumentHistory: boolean, isActionLoading: boolean, documentStatus: 'pending' | 'accepted' | 'rejected', documentIsUploaded: boolean, alertData: any}>} Observable that emits the current document viewer state.\r\n */\r\n selectDocumentViewerState(): Observable<{\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n }> {\r\n return this.select((state) => ({\r\n selectedDocument: state.selectedDocument,\r\n documentHistory: state.documentHistory,\r\n showDocumentHistory: state.showDocumentHistory,\r\n isActionLoading: state.isActionLoading,\r\n documentStatus: state.documentStatus,\r\n documentIsUploaded: state.documentIsUploaded,\r\n alertData: state.alertData\r\n }));\r\n }\r\n\r\n /**\r\n * Gets the current document viewer state values (synchronous).\r\n * @returns {Object} The current document viewer state values.\r\n */\r\n getDocumentViewerState(): {\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n } {\r\n const state = this.getValue();\r\n return {\r\n selectedDocument: state.selectedDocument,\r\n documentHistory: state.documentHistory,\r\n showDocumentHistory: state.showDocumentHistory,\r\n isActionLoading: state.isActionLoading,\r\n documentStatus: state.documentStatus,\r\n documentIsUploaded: state.documentIsUploaded,\r\n alertData: state.alertData\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { catchError, EMPTY, Observable, of, tap, throwError } from 'rxjs';\r\nimport { URLS } from '../../../Shared/constant/URLS';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { AppConfigService } from '../../../Shared/services/app-config.service';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { DocumentAlertModel } from '../models/document-alert.model';\r\nimport { DocumentModel } from '../models/document.model';\r\nimport { FolderBlockModel } from '../models/folder.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { StatusDataModel } from '../models/status-data.model';\r\nimport { DocumentListResponse } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\n\r\n/**\r\n * Service for making HTTP requests related to documents.\r\n * @class DocumentHttpService\r\n * @typedef {DocumentHttpService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class DocumentHttpService {\r\n\r\n /**\r\n * Creates an instance of DocumentService.\r\n * @param {DocumentStore} documentStore - Store managing the state of documents.\r\n * @param {HttpClient} http - Angular HTTP client for making API requests.\r\n * @param {AppConfigService} appConfigService - Service for retrieving application configuration, such as API base URL.\r\n */\r\n constructor(\r\n public documentStore: DocumentStore,\r\n private http: HttpClient,\r\n public appConfigService: AppConfigService\r\n ) { }\r\n\r\n /**\r\n * Get api url from appConfigService.\r\n * @readonly\r\n * @type {string}\r\n */\r\n get apiUrl(): string {\r\n return this.appConfigService.apiBaseUrl;\r\n }\r\n\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * Includes error handling for failed API requests.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getFoldersData(contextId:string | undefined): Observable<FolderBlockModel[]> {\r\n if(!contextId) return EMPTY;\r\n return this.http.get<FolderBlockModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}${URLS.FOLDERS}${contextId}`).pipe(\r\n tap((folders: FolderBlockModel[]) => {\r\n this.documentStore.setFolders(folders);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document catagories by its path name.\r\n * Includes error handling for failed API requests.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getDocumentCatagories(contextId:string): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.get<any>(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`, { headers }).pipe(\r\n tap((response: any) => {\r\n // Store only the categories array, not the entire response\r\n if (response && response.categories) {\r\n this.documentStore.setDocumentCategories(response.categories);\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * Includes error handling for failed API requests.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n // getDocumentTypes(): Observable<DocumentTypeModel[]> {\r\n // return this.http.get<DocumentTypeModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.DOCUMENT_TYPES}`).pipe(\r\n // tap((documentTypes: DocumentTypeModel[]) => {\r\n // this.documentStore.setDocumentTypes(documentTypes);\r\n // }),\r\n // catchError((error) => {\r\n // return throwError(() => new Error(error));\r\n // })\r\n // );\r\n // }\r\n\r\n /**\r\n * Fetches a document by its path name and transforms the response for dropdown options.\r\n * @param {string} documentId - The document ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getAlertsByDocumentID(documentId:string): Observable<DocumentAlertModel> {\r\n return this.http.get<DocumentAlertModel>(`${this.apiUrl}${URLS.ALERT_BY_DOCUMENT_ID}${documentId}`).pipe(\r\n tap((documentAlert: DocumentAlertModel) => {\r\n this.documentStore.setDocumentAlert(documentAlert);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a document by its folder ID and transforms the response for dropdown options.\r\n * @param {string} folderId - The folder ID to fetch the document.\r\n * @param {string} contextId - The context ID to fetch the document.\r\n * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.\r\n */\r\n getDocumentByFolderID(folderId:string, contextId:string): Observable<DocumentModel[]> {\r\n return this.http.get<DocumentModel[]>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.PARENT_DOCUMENT_TYPE_ID}${folderId}${URLS.CONTEXT_ID}${contextId}`).pipe(\r\n tap((records: DocumentModel[]) => {\r\n this.documentStore.set(records);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Updates the name of a document.\r\n * This method sends an HTTP PUT request to update the document's file name using the provided document ID and payload.\r\n * In case of an error, it will return an observable that throws an Error.\r\n * @param {string} documentId - The unique identifier of the document to update.\r\n * @param {any} payload - The payload containing the updated document data (e.g., fileName).\r\n * @returns {Observable<DocumentModel>} An observable that emits the updated DocumentModel.\r\n */\r\n updateDocumentName(documentId: string, payload: any): Observable<DocumentModel> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.put<DocumentModel>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${documentId}`, payload, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches a userlist by its path name.\r\n * @param {string} contextId - The document ID to fetch the document.\r\n * @returns {Observable<UserListModel[]>} Observable that emits the user list data.\r\n */\r\n getUserListByContextId(contextId : string): Observable<UserListModel[]> {\r\n if(!contextId) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.get<UserListModel[]>(`${this.apiUrl}${URLS.USERLIST}${contextId}`, { headers }).pipe(\r\n tap((userList: UserListModel[]) => {\r\n this.documentStore.setUserList(userList);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches document status count data by application ID with optional context ID and category parameters.\r\n * @param {string} applicationId - The application ID to fetch status data.\r\n * @param {string | null} contextId - The context ID (applicant ID) to filter by. If null, uses applicationId.\r\n * @param {string | null} categoryId - The category ID to filter by.\r\n * @returns {Observable<StatusDataModel[]>} Observable that emits the status data.\r\n */\r\n getStatusDocumentCount(applicationId: string, contextId: string | null = null, categoryId: string | null = null): Observable<StatusDataModel[]> {\r\n if(!applicationId) return EMPTY;\r\n let url = `${this.apiUrl}${URLS.STATUS_DOCUMENT_COUNT}${applicationId}`;\r\n let params = new HttpParams();\r\n const contextParam = contextId || null;\r\n if (contextParam) {\r\n params = params.set(SHARED.CONTEXT_ID, contextParam);\r\n } \r\n if (categoryId) {\r\n params = params.set(SHARED.CATEGORY, categoryId);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.get<StatusDataModel[]>(url, { params, headers }).pipe(\r\n tap((statusData: StatusDataModel[]) => {\r\n this.documentStore.setStatusData(statusData);\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Fetches documents based on selection criteria (menu item, user ID, status, and search key).\r\n * This method sends an HTTP GET request with query parameters for the selected filters.\r\n * @param {string} contextId - The context ID (applicationId or applicantId).\r\n * @param {string | null} menuItem - The selected menu item filter.\r\n * @param {string | null} userId - The selected user ID filter.\r\n * @param {string | null} status - The selected status filter.\r\n * @param {string | null} searchKey - The search key filter.\r\n * @returns {Observable<any>} An observable that emits the filtered document data.\r\n */\r\n getDocumentsBySelection(contextId: string, menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null): Observable<any> {\r\n let params = new HttpParams();\r\n \r\n if (menuItem) {\r\n params = params.set(SHARED.CATEGORY, menuItem);\r\n }\r\n \r\n if (userId) {\r\n params = params.set(SHARED.CONTEXT_ID, userId);\r\n }\r\n \r\n if (status) {\r\n params = params.set(SHARED.STATUS_PARAM, status);\r\n }\r\n\r\n if (searchKey) {\r\n params = params.set(SHARED.SEARCH_KEY, searchKey);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.get<any>(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params, headers }).pipe(\r\n tap((response: any) => {\r\n if (response.documents) {\r\n this.documentStore.setDocumentList(response.documents);\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n getDocumentHistory(documentId: string): Observable<DocumentHistorySection[]> {\r\n if (!documentId) {\r\n return of([]);\r\n }\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.get<DocumentHistorySection[]>(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`, { headers });\r\n }\r\n\r\n /**\r\n * Fetches document categories by source (Applicant/Application).\r\n * @param {string} source - The source type (Applicant or Application).\r\n * @returns {Observable<DocumentCategory[]>} Observable that emits the categories.\r\n */\r\n getCategoriesBySource(source: string): Observable<DocumentCategory[]> {\r\n if (!source) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.get<DocumentCategory[]>(`${this.apiUrl}${URLS.GET_CATEGORIES_BY_SOURCE}${source}`, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches document types by category ID.\r\n * @param {string} categoryId - The category ID to fetch document types for.\r\n * @returns {Observable<DocumentTypeModel[]>} Observable that emits the document types.\r\n */\r\n getDocumentTypesByCategory(categoryId: string): Observable<DocumentTypeModel[]> {\r\n if (!categoryId) return EMPTY;\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.get<DocumentTypeModel[]>(`${this.apiUrl}${URLS.GET_DOCUMENT_TYPES_BY_CATEGORY}${categoryId}`, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Uploads a single file using the uploadFile API.\r\n * @param {FormData} formData - The form data containing the file and metadata.\r\n * @returns {Observable<any>} Observable that emits the upload response.\r\n */\r\n uploadFile(formData: FormData): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.post<any>(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, formData, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Saves the complete document upload data.\r\n * @param {any} payload - The document upload payload containing all necessary data.\r\n * @returns {Observable<any>} Observable that emits the save response.\r\n */\r\n saveDocumentUpload(payload: any): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.post<any>(`${this.apiUrl}${URLS.SAVE_DOCUMENT_UPLOAD}`, payload, { headers }).pipe(\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Updates the status of a document by document ID\r\n * @param {string} documentId - The ID of the document to update\r\n * @param {string} status - The new status (Approved, Rejected, etc.)\r\n * @param {string} statusUpdateDescription - The description/note for the status update\r\n * @returns {Observable<any>} Observable that emits the updated document data with normalized status\r\n */\r\n updateDocumentStatus(documentId: string, status: string, statusUpdateDescription: string): Observable<any> {\r\n const payload = {\r\n statusUpdateDescription: statusUpdateDescription\r\n };\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.put<any>(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload, { headers }).pipe(\r\n tap((response) => {\r\n if (response && response.status) {\r\n const normalizedStatus = this.normalizeStatus(response.status);\r\n response.normalizedStatus = normalizedStatus;\r\n }\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Normalizes the status from API response to match component expectations\r\n * @param {string} status - The status from API response (Approved, Rejected, etc.)\r\n * @returns {string} Normalized status value\r\n */\r\n private normalizeStatus(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.APPROVED:\r\n return SHARED.STATUS_ACCEPTED;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.STATUS_REJECTED_LOWERCASE;\r\n case SHARED.STATUS_PENDING:\r\n return SHARED.STATUS_PENDING;\r\n default:\r\n return status.toLowerCase();\r\n }\r\n }\r\n\r\n /**\r\n * Deletes a document by its ID and refreshes all data (categories, userlist, status, and document list)\r\n * @param {string} documentId - The ID of the document to delete\r\n * @param {string} contextId - The context ID to refresh all data\r\n * @returns {Observable<any>} Observable that emits the delete response\r\n */\r\n deleteDocument(documentId: string, contextId: string): Observable<any> {\r\n let headers = new HttpHeaders({ Authorization: `Bearer 514330f0-41d4-4c03-8d2e-f248a1340e8d` });\r\n return this.http.delete<any>(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`, { headers }).pipe(\r\n tap(() => {\r\n this.getDocumentCatagories(contextId).subscribe();\r\n this.getUserListByContextId(contextId).subscribe();\r\n this.getStatusDocumentCount(contextId).subscribe();\r\n this.getDocumentsBySelection(contextId, null, null, null, null).subscribe();\r\n }),\r\n catchError((error) => {\r\n return throwError(() => new Error(error));\r\n })\r\n );\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, combineLatest, Subscription } from \"rxjs\";\r\nimport { DocumentModel } from \"../models/document.model\";\r\nimport { DocumentStore } from \"../state/document.store\";\r\nimport { DocumentQuery } from \"../state/document.query\";\r\nimport { DocumentHttpService } from \"./document-http.service\";\r\nimport { switchMap, debounceTime, distinctUntilChanged } from \"rxjs/operators\";\r\nimport { ERRORS } from \"../../../Shared/constant/ERROR\";\r\n\r\n/**\r\n * Service to manage the document data and selection state\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DocumentHelperService {\r\n\r\n private selectionWatcherSubscription: Subscription | null = null;\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private documentHttpService: DocumentHttpService\r\n ) {\r\n // Note: initializeSelectionWatcher now requires contextId\r\n // This should be called from the component that has access to contextId\r\n }\r\n\r\n /**\r\n * Initialize watcher for selection state changes\r\n * @param contextId - The context ID to use for API calls\r\n */\r\n initializeSelectionWatcher(contextId: string): void {\r\n // Clean up any existing subscription\r\n this.cleanupSelectionWatcher();\r\n \r\n this.selectionWatcherSubscription = combineLatest([\r\n this.documentQuery.selectSelectedMenuItem(),\r\n this.documentQuery.selectSelectedUserId(),\r\n this.documentQuery.selectSelectedStatus(),\r\n this.documentQuery.selectSearchKey()\r\n ]).pipe(\r\n debounceTime(300),\r\n distinctUntilChanged((prev, curr) => {\r\n const isSame = prev[0] === curr[0] && prev[1] === curr[1] && prev[2] === curr[2] && prev[3] === curr[3];\r\n return isSame;\r\n }),\r\n switchMap(([menuItem, userId, status, searchKey]) => {\r\n return this.documentHttpService.getDocumentsBySelection(contextId, menuItem, userId, status, searchKey);\r\n })\r\n ).subscribe({\r\n next: (response) => {\r\n const currentState = this.documentQuery.getSelectionState();\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_CALLING_API_WITH_SELECTION, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialize watcher for selection state changes with initial load\r\n * @param contextId - The context ID to use for API calls\r\n */\r\n initializeSelectionWatcherWithInitialLoad(contextId: string): void {\r\n // Clean up any existing subscription\r\n this.cleanupSelectionWatcher();\r\n \r\n // Make initial API call to load documents\r\n this.documentHttpService.getDocumentsBySelection(contextId, null, null, null, null).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_CALLING_API_WITH_SELECTION, error);\r\n }\r\n });\r\n \r\n // Initialize the selection watcher for future updates\r\n this.initializeSelectionWatcher(contextId);\r\n }\r\n\r\n /**\r\n * Clean up the selection watcher subscription\r\n */\r\n cleanupSelectionWatcher(): void {\r\n if (this.selectionWatcherSubscription) {\r\n this.selectionWatcherSubscription.unsubscribe();\r\n this.selectionWatcherSubscription = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set the document data\r\n * @param document the document data\r\n */\r\n set(document: DocumentModel | null) {\r\n this.documentStore.setCurrentDocument(document);\r\n }\r\n\r\n /**\r\n * Get the document data\r\n * @returns the document data\r\n */\r\n get(): Observable<DocumentModel | null> {\r\n return this.documentQuery.selectCurrentDocument();\r\n }\r\n\r\n /**\r\n * Get the current document value synchronously\r\n * @returns the current document value\r\n */\r\n getValue(): DocumentModel | null {\r\n return this.documentQuery.getCurrentDocument();\r\n }\r\n\r\n /**\r\n * Set the selected menu item\r\n * @param menuItem the selected menu item _id (not the label)\r\n */\r\n setSelectedMenuItem(menuItem: string | null): void {\r\n this.documentStore.setSelectedMenuItem(menuItem);\r\n }\r\n\r\n /**\r\n * Set the selected user ID\r\n * @param userId the selected user ID\r\n */\r\n setSelectedUserId(userId: string | null): void {\r\n this.documentStore.setSelectedUserId(userId);\r\n }\r\n\r\n /**\r\n * Set the selected status\r\n * @param status the selected status\r\n */\r\n setSelectedStatus(status: string | null): void {\r\n this.documentStore.setSelectedStatus(status);\r\n }\r\n\r\n /**\r\n * Set the search key\r\n * @param searchKey the search term\r\n */\r\n setSearchKey(searchKey: string | null): void {\r\n this.documentStore.setSearchKey(searchKey);\r\n }\r\n\r\n /**\r\n * Set all selection state at once\r\n * @param menuItem the selected menu item _id (not the label)\r\n * @param userId the selected user ID\r\n * @param status the selected status\r\n * @param searchKey the search term\r\n */\r\n setSelectionState(menuItem: string | null, userId: string | null, status: string | null, searchKey: string | null = null): void {\r\n this.documentStore.setSelectionState(menuItem, userId, status, searchKey);\r\n }\r\n\r\n /**\r\n * Clear all selection state\r\n */\r\n clearSelectionState(): void {\r\n this.documentStore.clearSelectionState();\r\n }\r\n\r\n /**\r\n * Set user list visibility\r\n * @param show whether to show the user list\r\n */\r\n setShowUserList(show: boolean): void {\r\n this.documentStore.setShowUserList(show);\r\n }\r\n\r\n /**\r\n * Get the current selection state\r\n * @returns observable of the current selection state\r\n */\r\n getSelectionState(): Observable<{menuItem: string | null, userId: string | null, status: string | null}> {\r\n return this.documentQuery.selectSelectionState();\r\n }\r\n\r\n /**\r\n * Get the current selection state value synchronously\r\n * @returns the current selection state value\r\n */\r\n getSelectionStateValue(): {menuItem: string | null, userId: string | null, status: string | null} {\r\n return this.documentQuery.getSelectionState();\r\n }\r\n\r\n /**\r\n * Set status data in the store\r\n * @param statusData the status data to set\r\n */\r\n setStatusData(statusData: any[]): void {\r\n this.documentStore.setStatusData(statusData);\r\n }\r\n\r\n /**\r\n * Set user list in the store\r\n * @param userList the user list to set\r\n */\r\n setUserList(userList: any[]): void {\r\n this.documentStore.setUserList(userList);\r\n }\r\n\r\n /**\r\n * Get observable for filtered documents\r\n * @returns Observable that emits filtered document responses\r\n */\r\n getFilteredDocuments(): Observable<any> {\r\n return this.documentQuery.selectDocumentListResponse();\r\n }\r\n\r\n /**\r\n * Manually trigger API call with current selection state\r\n * @param contextId - The context ID to use for the API call\r\n */\r\n refreshDocumentsWithCurrentSelection(contextId: string): void {\r\n const currentState = this.documentQuery.getSelectionState();\r\n this.documentHttpService.getDocumentsBySelection(\r\n contextId,\r\n currentState.menuItem,\r\n currentState.userId,\r\n currentState.status\r\n ).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n throw new Error(error)\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Force refresh documents with no filters\r\n * @param contextId - The context ID to use for the API call\r\n */\r\n refreshDocumentsWithoutFilters(contextId: string): void {\r\n this.documentHttpService.getDocumentsBySelection(\r\n contextId,\r\n null,\r\n null,\r\n null\r\n ).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentListResponse(response);\r\n },\r\n error: (error) => {\r\n console.error('Error in force refresh:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refresh status data for a specific context\r\n * @param contextId - The context ID to use for the API call\r\n * @param statusContextId - The status context ID (usually userId)\r\n * @param categoryId - The category ID (usually menuItem)\r\n */\r\n refreshStatusData(contextId: string, statusContextId: string | null, categoryId: string | null): void {\r\n this.documentHttpService.getStatusDocumentCount(contextId, statusContextId, categoryId).subscribe({\r\n next: (statusData) => {\r\n this.documentStore.setStatusData(statusData);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing status data:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refresh all data with current filters after accept/reject/delete operations\r\n * This includes document categories, status data, user list, and document list\r\n * \r\n * This method ensures that after a document action (accept/reject/delete):\r\n * 1. Document categories are refreshed\r\n * 2. Status counts are refreshed with current menu item and user filters\r\n * 3. User list is refreshed with current filters (if applicable)\r\n * 4. Document list is refreshed with all current filters (menu item, user, status, search)\r\n * \r\n * Filter application:\r\n * - Document categories: Uses base contextId\r\n * - Status data: Uses userId as contextId and menuItem as categoryId\r\n * - User list: Uses base contextId (can be enhanced with additional filters if API supports)\r\n * - Document list: Uses all current filters (menuItem, userId, status, searchKey)\r\n * \r\n * @param contextId - The context ID to use for the API calls\r\n */\r\n refreshAllDataWithCurrentFilters(contextId: string): void {\r\n const currentState = this.documentQuery.getSelectionState();\r\n const statusContextId = currentState.userId || null;\r\n const categoryId = currentState.menuItem || null;\r\n \r\n // Refresh document categories\r\n this.documentHttpService.getDocumentCatagories(contextId).subscribe({\r\n next: (response) => {\r\n this.documentStore.setDocumentCategories(response);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing document categories after action:', error);\r\n }\r\n });\r\n \r\n // Refresh status data\r\n this.documentHttpService.getStatusDocumentCount(contextId, statusContextId, categoryId).subscribe({\r\n next: (statusData) => {\r\n this.documentStore.setStatusData(statusData);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing status data after action:', error);\r\n }\r\n });\r\n \r\n // Refresh user list\r\n this.documentHttpService.getUserListByContextId(contextId).subscribe({\r\n next: (userList) => {\r\n this.documentStore.setUserList(userList);\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing user list after action:', error);\r\n }\r\n });\r\n this.refreshDocumentsWithCurrentSelection(contextId);\r\n }\r\n}","import { Injectable, EventEmitter } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { DocumentService } from '../state/document.service';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { MessageService } from 'primeng/api';\r\n\r\n/**\r\n * Service for handling document uploads.\r\n * @class DocumentUploadService\r\n * @typedef {DocumentUploadService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadService {\r\n\r\n /**\r\n * Event emitter for upload completion\r\n */\r\n uploadCompleted = new EventEmitter<{file: File, response: any}>();\r\n\r\n /**\r\n * The file to upload.\r\n * @type {*}\r\n */\r\n uploadedFile: any;\r\n\r\n /**\r\n * Represent contextId\r\n * @type {string}\r\n */\r\n contextId: string = SHARED.EMPTY;\r\n\r\n /**\r\n * Represent document name\r\n * @type {string}\r\n */\r\n docName: string = SHARED.EMPTY\r\n\r\n /**\r\n * Represent document id\r\n * @type {string}\r\n */\r\n docTypeId: string = SHARED.EMPTY\r\n\r\n /**\r\n * Creates an instance of DocumentUploadService.\r\n * @param {DocumentService} documentService - Service for handling document uploads.\r\n * @param {DocumentStore} documentUploadStore - Store for managing uploaded documents.\r\n * @param {MessageService} messageService - Service for displaying messages.\r\n * @returns {void}\r\n */\r\n constructor(public documentService: DocumentService, public documentUploadStore: DocumentStore, public messageService: MessageService) { }\r\n\r\n /**\r\n * Prepares the files for upload by creating a FormData object.\r\n * This method appends each file to the FormData for submission.\r\n * @returns {Promise<any>} Promise that resolves when upload completes\r\n */\r\n handleTemplatedUpload(file: File, contextId: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n let formsData = this.handleCreateFormData(file, contextId)\r\n if (!formsData) {\r\n const error = new Error('Failed to create form data');\r\n this.messageService.add({severity: SHARED.SEVERITY,summary: SHARED.UPLOAD_ERROR_SUMMERY,detail: SHARED.UPLOAD_ERROR_DETAILS});\r\n reject(error);\r\n return;\r\n }\r\n this.documentService.create(formsData)\r\n .subscribe({\r\n /**\r\n * Handles the successful upload event.\r\n * Updates the list of uploaded files and emits the file ID.\r\n * @returns {void}\r\n */\r\n next: (event) => {\r\n this.documentUploadStore.setUploadedDocumentFiles(event)\r\n this.documentUploadStore.setMessage([{severity: SHARED.SUCCESS_SEVERITY,detail : SHARED.UPLOAD_SUCCESS}]);\r\n this.uploadCompleted.emit({file: file, response: event});\r\n resolve(event);\r\n },\r\n /**\r\n * Handles the error event during file upload.\r\n * Updates the progress of the file to indicate failure.\r\n * @param {any} error - The error object returned by the upload service.\r\n */\r\n error: (error) => {\r\n this.messageService.add({severity: SHARED.SEVERITY,summary: SHARED.UPLOAD_SUMMERY,detail: error?.message});\r\n reject(error);\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Uploads multiple files sequentially using promises\r\n * @param files - Array of files to upload\r\n * @param contextId - The context ID for upload\r\n * @returns {Promise<any[]>} Promise that resolves with all upload responses\r\n */\r\n async uploadFilesSequentially(files: File[], contextId: string): Promise<any[]> {\r\n const results: any[] = [];\r\n \r\n for (const file of files) {\r\n try {\r\n const result = await this.handleTemplatedUpload(file, contextId);\r\n results.push(result);\r\n } catch (error) {\r\n console.error(`Failed to upload file ${file.name}:`, error);\r\n results.push({ error: true, fileName: file.name, errorMessage: error });\r\n }\r\n }\r\n \r\n return results;\r\n }\r\n\r\n /**\r\n * Alternative method to upload files sequentially with progress tracking\r\n * @param files - Array of files to upload\r\n * @param contextId - The context ID for upload\r\n * @param onProgress - Optional callback for progress updates\r\n * @returns {Promise<any[]>} Promise that resolves with all upload responses\r\n */\r\n async uploadFilesSequentiallyWithProgress(\r\n files: File[], \r\n contextId: string, \r\n onProgress?: (currentFile: File, currentIndex: number, totalFiles: number) => void\r\n ): Promise<any[]> {\r\n const results: any[] = [];\r\n for (let i = 0; i < files.length; i++) {\r\n const file = files[i];\r\n if (onProgress) {\r\n onProgress(file, i, files.length);\r\n }\r\n \r\n try {\r\n const result = await this.handleTemplatedUpload(file, contextId);\r\n results.push(result);\r\n } catch (error) {\r\n console.error(`Failed to upload file ${file.name}:`, error);\r\n results.push({ error: true, fileName: file.name, errorMessage: error });\r\n }\r\n }\r\n \r\n return results;\r\n }\r\n\r\n /**\r\n * Get the file and contextId\r\n * @param file - The file to upload.\r\n * @param contextId - The contextId to upload.\r\n */\r\n getUploadFileData(file: File, contextId: string) {\r\n if (file && contextId) {\r\n this.uploadedFile = file;\r\n this.contextId = contextId;\r\n }\r\n }\r\n\r\n /**\r\n * Get the document name and document type id\r\n * @param documentName - The document name to upload.\r\n * @param documentTypeId - The document type id to upload.\r\n */\r\n getDocumentNameAndType(documentTypeId: string) {\r\n if (documentTypeId && documentTypeId !== SHARED.EMPTY) {\r\n this.docTypeId = documentTypeId\r\n }\r\n }\r\n\r\n /**\r\n * Handle the creation of formdata.\r\n * @returns {*} - The formdata object.\r\n */\r\n handleCreateFormData(uploadedFile?: File, contextId?: string) {\r\n \r\n if (uploadedFile) {\r\n let formData = new FormData();\r\n formData.append(SHARED.FILE, uploadedFile, uploadedFile.name);\r\n formData.append(SHARED.CONTEXT_ID, this.contextId || contextId || SHARED.EMPTY)\r\n return formData;\r\n }else{\r\n return null;\r\n }\r\n \r\n }\r\n\r\n /**\r\n * Generic method to sort any list of objects by a specified property.\r\n * Supports fallback properties if the primary property is undefined.\r\n * @param list - Array of objects to sort\r\n * @param primaryProperty - Primary property to sort by\r\n * @param fallbackProperty - Optional fallback property if primary is undefined\r\n * @returns Sorted array\r\n */\r\n sortListByProperty<T>(list: T[], primaryProperty: keyof T, fallbackProperty?: keyof T): T[] {\r\n return list.sort((a, b) => {\r\n const valueA = a[primaryProperty] || (fallbackProperty ? a[fallbackProperty] : SHARED.EMPTY);\r\n const valueB = b[primaryProperty] || (fallbackProperty ? b[fallbackProperty] : SHARED.EMPTY);\r\n \r\n if (typeof valueA === 'string' && typeof valueB === 'string') {\r\n return valueA.localeCompare(valueB);\r\n }\r\n if (valueA < valueB) return -1;\r\n if (valueA > valueB) return 1;\r\n return 0;\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { PrimeNGConfig } from 'primeng/api';\r\n\r\n/**\r\n * Description placeholder\r\n * @class FileFormatService\r\n * @typedef {FileFormatService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FileFormatService {\r\n\r\n /**\r\n * Creates an instance of FileFormatService.\r\n * @constructor\r\n */\r\n constructor() { }\r\n\r\n /**\r\n * Description placeholder\r\n * @param {number} bytes\r\n * @param {PrimeNGConfig} config\r\n * @returns {string}\r\n */\r\n formatFileSize(bytes: number, config:PrimeNGConfig): string {\r\n const kilobyte = 1024;\r\n const decimalPlaces = SHARED.ONE;\r\n const sizes = config.translation.fileSizeTypes || SHARED.FILE_SIZE_UNITS;\r\n if (bytes < kilobyte) {\r\n return `${bytes} ${sizes[SHARED.INITIAL_COUNT]}`;\r\n } else if (bytes < kilobyte * kilobyte) {\r\n const kbSize = bytes / kilobyte;\r\n return `${parseFloat(kbSize.toFixed(decimalPlaces))} ${sizes[SHARED.ONE]}`;\r\n } else {\r\n const mbSize = bytes / (kilobyte * kilobyte);\r\n return `${parseFloat(mbSize.toFixed(decimalPlaces))} ${sizes[SHARED.TWO]}`;\r\n }\r\n }\r\n\r\n /**\r\n * Validates if a file has an allowed extension\r\n * @param fileName - The name of the file to validate\r\n * @returns True if the file extension is allowed, false otherwise\r\n */\r\n isAllowedFileType(fileName: string): boolean {\r\n const allowedExtensions = SHARED.FILE_TYPES;\r\n \r\n const fileExtension = fileName.toLowerCase().split('.').pop();\r\n return fileExtension ? allowedExtensions.includes(fileExtension) : false;\r\n }\r\n\r\n /**\r\n * Gets the list of allowed file extensions\r\n * @returns Array of allowed file extensions\r\n */\r\n getAllowedFileExtensions(): string[] {\r\n return SHARED.FILE_TYPES;\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject, takeUntil } from 'rxjs';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { FileFormatService } from './file-format.service';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { UploadedFileResponse } from '../models/uploaded-file-response.model';\r\n\r\nexport interface UploadedFile {\r\n file: File;\r\n formattedSize?: string;\r\n progress?: number;\r\n uploadResponse?: UploadedFileResponse; // Store the upload response for later use\r\n url?: string; // Store the file URL from upload response\r\n contentType?: string;\r\n fileName?: string; // Store the file name from upload response\r\n size?: string; // Store the formatted size from upload response\r\n}\r\n\r\nexport interface DocumentUploadPayload {\r\n source: 'Applicant' | 'Application';\r\n categoryId: string;\r\n documentTypeId: string;\r\n applicantId?: string;\r\n contextId: string;\r\n documents: {\r\n fileName: string;\r\n fileSize: number;\r\n uploadedFileId?: string;\r\n url?: string; // Store the file URL from upload response\r\n contentType?: string;\r\n size?: string; // Store the formatted size from upload response\r\n }[];\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadBusinessService {\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private documentHttpService: DocumentHttpService,\r\n private fileFormatService: FileFormatService\r\n ) {}\r\n\r\n /**\r\n * Loads applicants for a given context ID\r\n */\r\n loadApplicants(contextId: string): Observable<UserListModel[]> {\r\n return this.documentHttpService.getUserListByContextId(contextId);\r\n }\r\n\r\n /**\r\n * Loads categories based on assignment type\r\n */\r\n loadCategories(assignmentType: string): Observable<DocumentCategory[]> {\r\n return this.documentHttpService.getCategoriesBySource(assignmentType);\r\n }\r\n\r\n /**\r\n * Loads document types based on category\r\n */\r\n loadDocumentTypes(categoryId: string): Observable<DocumentTypeModel[]> {\r\n return this.documentHttpService.getDocumentTypesByCategory(categoryId);\r\n }\r\n\r\n /**\r\n * Filters applicants based on assignment type\r\n */\r\n filterApplicants(applicantList: UserListModel[], assignmentType: 'Applicant' | 'Application'): UserListModel[] {\r\n if (assignmentType === SHARED.APPLICANT) {\r\n return applicantList.filter(applicant => applicant.name !== SHARED.APPLICATION_DOCS);\r\n } else {\r\n return applicantList.filter(applicant => applicant.name === SHARED.APPLICATION_DOCS);\r\n }\r\n }\r\n\r\n /**\r\n * Helper method to validate form data and return validation result\r\n */\r\n private validateFormData(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n categoryOptions: DocumentCategory[],\r\n documentTypeOptions: DocumentTypeModel[]\r\n ): { isValid: boolean; message: string } {\r\n // Check assignment type\r\n if (!assignmentType) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_ASSIGNMENT_TYPE };\r\n }\r\n\r\n // Check if options are loaded\r\n if (!categoryOptions.length || !documentTypeOptions.length) {\r\n return { isValid: false, message: SHARED.VALIDATION_OPTIONS_NOT_LOADED };\r\n }\r\n\r\n // Check category\r\n if (!selectedCategory) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_CATEGORY };\r\n }\r\n\r\n // Check document type\r\n if (!selectedDocumentType) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_DOCUMENT_TYPE };\r\n }\r\n\r\n // Check files\r\n if (uploadedFiles.length === 0) {\r\n return { isValid: false, message: SHARED.VALIDATION_UPLOAD_AT_LEAST_ONE };\r\n }\r\n\r\n // Check if all files are uploaded\r\n const incompleteFiles = uploadedFiles.filter(file => file.progress !== 100);\r\n if (incompleteFiles.length > 0) {\r\n return { isValid: false, message: SHARED.VALIDATION_WAIT_FOR_UPLOAD };\r\n }\r\n\r\n // For Applicant type, check applicant selection\r\n if (assignmentType === SHARED.APPLICANT && !selectedApplicant) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_APPLICANT };\r\n }\r\n\r\n return { isValid: true, message: SHARED.VALIDATION_ALL_FIELDS_COMPLETED };\r\n }\r\n\r\n /**\r\n * Validates form data\r\n */\r\n validateForm(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n categoryOptions: DocumentCategory[],\r\n documentTypeOptions: DocumentTypeModel[]\r\n ): boolean {\r\n return this.validateFormData(\r\n assignmentType,\r\n selectedCategory,\r\n selectedDocumentType,\r\n selectedApplicant,\r\n uploadedFiles,\r\n categoryOptions,\r\n documentTypeOptions\r\n ).isValid;\r\n }\r\n\r\n /**\r\n * Checks if save button should be disabled\r\n */\r\n isSaveButtonDisabled(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n isSaving: boolean\r\n ): boolean {\r\n if (isSaving) {\r\n return true;\r\n }\r\n\r\n // For button state, we only need to check if required fields are filled\r\n // We don't need to validate if options are loaded\r\n if (!assignmentType) {\r\n return true;\r\n }\r\n\r\n if (!selectedCategory) {\r\n return true;\r\n }\r\n\r\n if (!selectedDocumentType) {\r\n return true;\r\n }\r\n\r\n if (uploadedFiles.length === 0) {\r\n return true;\r\n }\r\n\r\n // Check if all files are uploaded\r\n const incompleteFiles = uploadedFiles.filter(file => file.progress !== 100);\r\n if (incompleteFiles.length > 0) {\r\n return true;\r\n }\r\n\r\n // For Applicant type, check applicant selection\r\n if (assignmentType === SHARED.APPLICANT && !selectedApplicant) {\r\n return true;\r\n }\r\n\r\n return false; // Button should be enabled\r\n }\r\n\r\n /**\r\n * Validates the complete payload before save\r\n */\r\n validatePayload(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[]\r\n ): { isValid: boolean; message: string } {\r\n // Check assignment type\r\n if (!assignmentType) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_ASSIGNMENT_TYPE };\r\n }\r\n\r\n // Check category\r\n if (!selectedCategory) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_CATEGORY };\r\n }\r\n\r\n // Check document type\r\n if (!selectedDocumentType) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_DOCUMENT_TYPE };\r\n }\r\n\r\n // Check files\r\n if (uploadedFiles.length === 0) {\r\n return { isValid: false, message: SHARED.VALIDATION_UPLOAD_AT_LEAST_ONE };\r\n }\r\n\r\n // Check if all files are uploaded\r\n const incompleteFiles = uploadedFiles.filter(file => file.progress !== 100);\r\n if (incompleteFiles.length > 0) {\r\n return { isValid: false, message: SHARED.VALIDATION_WAIT_FOR_UPLOAD };\r\n }\r\n\r\n // For Applicant type, check applicant selection\r\n if (assignmentType === SHARED.APPLICANT && !selectedApplicant) {\r\n return { isValid: false, message: SHARED.VALIDATION_SELECT_APPLICANT };\r\n }\r\n\r\n return { isValid: true, message: SHARED.VALIDATION_ALL_FIELDS_COMPLETED };\r\n }\r\n\r\n /**\r\n * Prepares upload payload\r\n */\r\n prepareUploadPayload(\r\n assignmentType: 'Applicant' | 'Application',\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n selectedApplicant: string,\r\n uploadedFiles: UploadedFile[],\r\n contextId: string\r\n ): DocumentUploadPayload {\r\n const payload: DocumentUploadPayload = {\r\n source: assignmentType,\r\n categoryId: selectedCategory,\r\n documentTypeId: selectedDocumentType,\r\n contextId,\r\n documents: uploadedFiles.map(file => ({\r\n fileName: file.file.name,\r\n fileSize: file.file.size,\r\n url: file.url,\r\n contentType: file.contentType,\r\n size: file.size,\r\n uploadedFileId: file.uploadResponse?.id || file.uploadResponse?.fileName\r\n }))\r\n };\r\n\r\n // For Applicant type, include the applicant ID\r\n if (assignmentType === SHARED.APPLICANT && selectedApplicant) {\r\n payload.applicantId = selectedApplicant;\r\n }\r\n\r\n return payload;\r\n }\r\n\r\n /**\r\n * Saves document upload\r\n */\r\n saveDocumentUpload(payload: DocumentUploadPayload): Observable<any> {\r\n return this.documentHttpService.saveDocumentUpload(payload);\r\n }\r\n\r\n /**\r\n * Formats file size\r\n */\r\n formatFileSize(fileSize: number, config: any): string {\r\n return this.fileFormatService.formatFileSize(fileSize, config);\r\n }\r\n\r\n /**\r\n * Creates uploaded file object\r\n */\r\n createUploadedFile(file: File, formattedSize: string): UploadedFile {\r\n return {\r\n file,\r\n formattedSize,\r\n progress: SHARED.UPLOAD_PROGRESS_10 \r\n };\r\n }\r\n\r\n /**\r\n * Resets form data to initial state\r\n */\r\n getInitialFormState() {\r\n return {\r\n selectedAssignmentType: null,\r\n selectedApplicant: null,\r\n selectedCategory: null,\r\n selectedDocumentType: null,\r\n uploadedFiles: [] as UploadedFile[],\r\n isFormValid: false\r\n };\r\n }\r\n\r\n /**\r\n * Destroys the service\r\n */\r\n destroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\nimport { UploadedFile } from './document-upload-business.service';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadFormService {\r\n constructor(private messageService: MessageService) {}\r\n\r\n /**\r\n * Shows error message\r\n */\r\n showErrorMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Shows warning message\r\n */\r\n showWarningMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'warn',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Shows success message\r\n */\r\n showSuccessMessage(summary: string, detail: string): void {\r\n this.messageService.add({\r\n severity: 'success',\r\n summary,\r\n detail\r\n });\r\n }\r\n\r\n /**\r\n * Helper method to validate required fields and show appropriate messages\r\n */\r\n private validateRequiredFieldsWithMessages(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedApplicant: string,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n uploadedFiles: UploadedFile[]\r\n ): { isValid: boolean; field: string | null } {\r\n if (assignmentType === 'Applicant' && !selectedApplicant) {\r\n return { isValid: false, field: 'applicant' };\r\n }\r\n\r\n if (!selectedCategory) {\r\n return { isValid: false, field: 'category' };\r\n }\r\n\r\n if (!selectedDocumentType) {\r\n return { isValid: false, field: 'documentType' };\r\n }\r\n\r\n if (uploadedFiles.length === 0) {\r\n return { isValid: false, field: 'documents' };\r\n }\r\n\r\n return { isValid: true, field: null };\r\n }\r\n\r\n /**\r\n * Validates required fields for upload\r\n */\r\n validateRequiredFields(\r\n assignmentType: 'Applicant' | 'Application' | null,\r\n selectedApplicant: string,\r\n selectedCategory: string,\r\n selectedDocumentType: string,\r\n uploadedFiles: UploadedFile[]\r\n ): boolean {\r\n const validation = this.validateRequiredFieldsWithMessages(\r\n assignmentType,\r\n selectedApplicant,\r\n selectedCategory,\r\n selectedDocumentType,\r\n uploadedFiles\r\n );\r\n\r\n if (!validation.isValid) {\r\n this.showValidationMessage(validation.field!);\r\n }\r\n\r\n return validation.isValid;\r\n }\r\n\r\n /**\r\n * Shows appropriate validation message based on the field that failed\r\n */\r\n private showValidationMessage(field: string): void {\r\n const messages: Record<string, { summary: string; detail: string }> = {\r\n applicant: { \r\n summary: SHARED.VALIDATION_NO_APPLICANT_SELECTED, \r\n detail: SHARED.VALIDATION_NO_APPLICANT_DETAIL \r\n },\r\n category: { \r\n summary: SHARED.VALIDATION_NO_CATEGORY_SELECTED, \r\n detail: SHARED.VALIDATION_NO_CATEGORY_DETAIL \r\n },\r\n documentType: { \r\n summary: SHARED.VALIDATION_NO_DOCUMENT_TYPE_SELECTED, \r\n detail: SHARED.VALIDATION_NO_DOCUMENT_TYPE_DETAIL \r\n },\r\n documents: { \r\n summary: SHARED.VALIDATION_NO_DOCUMENTS_UPLOADED, \r\n detail: SHARED.VALIDATION_NO_DOCUMENTS_DETAIL \r\n }\r\n };\r\n\r\n const message = messages[field];\r\n if (message) {\r\n this.showWarningMessage(message.summary, message.detail);\r\n }\r\n }\r\n\r\n /**\r\n * Validates form completeness\r\n */\r\n validateFormCompleteness(): boolean {\r\n this.showWarningMessage(\r\n SHARED.VALIDATION_FORM_INCOMPLETE, \r\n SHARED.VALIDATION_FORM_INCOMPLETE_DETAIL\r\n );\r\n return false;\r\n }\r\n\r\n /**\r\n * Validates context ID presence\r\n */\r\n validateContextId(contextId: string, message: string): boolean {\r\n if (!contextId) {\r\n this.showErrorMessage(SHARED.VALIDATION_MISSING_REQUIRED_DATA, message);\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject, takeUntil } from 'rxjs';\r\nimport { DocumentUploadBusinessService } from './document-upload-business.service';\r\nimport { DocumentUploadFormService } from './document-upload-form.service';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\nimport { DocumentTypeModel } from '../models/document-type.model';\r\n\r\nexport interface DataLoadingState {\r\n isLoadingApplicants: boolean;\r\n isLoadingCategories: boolean;\r\n isLoadingDocumentTypes: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentUploadDataService {\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private businessService: DocumentUploadBusinessService,\r\n private formService: DocumentUploadFormService\r\n ) {}\r\n\r\n /**\r\n * Loads applicants and handles the response\r\n */\r\n loadApplicants(\r\n contextId: string,\r\n onSuccess: (applicants: UserListModel[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<UserListModel[]> {\r\n if (!this.formService.validateContextId(contextId, 'Context ID is required to load applicants.')) {\r\n return new Observable();\r\n }\r\n return this.businessService.loadApplicants(contextId);\r\n }\r\n\r\n /**\r\n * Loads categories and handles the response\r\n */\r\n loadCategories(\r\n assignmentType: string,\r\n onSuccess: (categories: DocumentCategory[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<DocumentCategory[]> {\r\n if (!assignmentType) {\r\n return new Observable();\r\n }\r\n return this.businessService.loadCategories(assignmentType);\r\n }\r\n\r\n /**\r\n * Loads document types and handles the response\r\n */\r\n loadDocumentTypes(\r\n categoryId: string,\r\n onSuccess: (documentTypes: DocumentTypeModel[]) => void,\r\n onError: (error: any) => void\r\n ): Observable<DocumentTypeModel[]> {\r\n return this.businessService.loadDocumentTypes(categoryId);\r\n }\r\n\r\n /**\r\n * Handles applicants loaded successfully\r\n */\r\n handleApplicantsLoaded(\r\n applicants: UserListModel[],\r\n assignmentType: 'Applicant' | 'Application' | null\r\n ): UserListModel[] {\r\n return this.businessService.filterApplicants(applicants, assignmentType!);\r\n }\r\n\r\n /**\r\n * Destroys the service\r\n */\r\n destroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, Input, ViewChild, ViewEncapsulation, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { FileUpload } from 'primeng/fileupload';\r\nimport { MessageService } from 'primeng/api';\r\nimport { PrimeNGConfig } from 'primeng/api';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { FileFormatService } from '../../services/file-format.service';\r\nimport { DocumentService } from '../../state/document.service';\r\nimport { DocumentUploadService } from '../../services/document-upload.service';\r\nimport { DocumentUploadBusinessService, UploadedFile } from '../../services/document-upload-business.service';\r\nimport { DocumentUploadFormService } from '../../services/document-upload-form.service';\r\nimport { DocumentUploadDataService } from '../../services/document-upload-data.service';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentTypeModel } from '../../models/document-type.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n/**\r\n * Component responsible for handling document uploads with templated metadata.\r\n * Provides a comprehensive interface for uploading documents with assignment types,\r\n * categories, document types, and applicant selection.\r\n */\r\n@Component({\r\n selector: 'lib-document-upload',\r\n templateUrl: './document-upload.component.html',\r\n styleUrls: ['./document-upload.component.scss'],\r\n standalone: false,\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class DocumentUploadComponent implements OnDestroy {\r\n /** The context ID for the document upload operation */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n \r\n /** Reference to the file upload component */\r\n @ViewChild('fileUploader') fileUploader!: FileUpload;\r\n \r\n /** Event emitted when form validation state changes */\r\n @Output() onFormValidationChange = new EventEmitter<void>();\r\n \r\n /** Event emitted when upload is successful */\r\n @Output() onUploadSuccess = new EventEmitter<void>();\r\n \r\n /** Currently selected assignment type (Applicant or Application) */\r\n selectedAssignmentType: 'Applicant' | 'Application' | null = null;\r\n \r\n /** Currently selected applicant ID */\r\n selectedApplicant: string = SHARED.EMPTY;\r\n \r\n /** Currently selected document category */\r\n selectedCategory: string = SHARED.EMPTY;\r\n \r\n /** Currently selected document type */\r\n selectedDocumentType: string = SHARED.EMPTY;\r\n \r\n /** List of available applicants */\r\n applicantList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Filtered list of applicants based on current selection */\r\n filteredApplicantList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Available document categories for the selected assignment type */\r\n categoryOptions: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Available document types for the selected category */\r\n documentTypeOptions: DocumentTypeModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Array of files that have been uploaded */\r\n uploadedFiles: UploadedFile[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Map tracking upload progress for each file */\r\n fileProgress: Map<File, number> = new Map();\r\n \r\n /** Loading state for applicants data */\r\n isLoadingApplicants: boolean = false;\r\n \r\n /** Loading state for categories data */\r\n isLoadingCategories: boolean = false;\r\n \r\n /** Loading state for document types data */\r\n isLoadingDocumentTypes: boolean = false;\r\n \r\n /** Loading state for save operation */\r\n isSaving: boolean = false;\r\n \r\n /** Current form validation state */\r\n isFormValid: boolean = false;\r\n\r\n /** File size property for testing */\r\n fileSize: string = '';\r\n\r\n /** Subject for managing component lifecycle and unsubscribing from observables */\r\n private destroy$ = new Subject<void>();\r\n\r\n /**\r\n * Creates an instance of DocumentUploadComponent.\r\n * @param documentUpload - Service for handling document upload operations\r\n * @param uploadService - Service for document-related operations\r\n * @param config - PrimeNG configuration service\r\n * @param fileFormatService - Service for file format validation\r\n * @param messageService - Service for displaying messages\r\n * @param cdr - Change detector reference for manual change detection\r\n * @param businessService - Service for business logic operations\r\n * @param formService - Service for form validation and handling\r\n * @param dataService - Service for data loading operations\r\n */\r\n constructor(\r\n public documentUpload: DocumentUploadService, \r\n public uploadService: DocumentService, \r\n private config: PrimeNGConfig, \r\n public fileFormatService: FileFormatService, \r\n public messageService: MessageService, \r\n public cdr: ChangeDetectorRef,\r\n private businessService: DocumentUploadBusinessService,\r\n private formService: DocumentUploadFormService,\r\n private dataService: DocumentUploadDataService\r\n ) { }\r\n\r\n /**\r\n * Handles changes in assignment type selection.\r\n * Resets form selections, loads categories, and handles applicant loading.\r\n */\r\n onAssignmentTypeChange(): void {\r\n this.resetSelections();\r\n this.loadCategories();\r\n this.handleApplicantLoading();\r\n this.validateForm(); // Validate form after assignment type change\r\n this.emitFormValidationChange();\r\n }\r\n\r\n /**\r\n * Handles changes in category selection.\r\n * Resets document type and loads available document types if category is selected.\r\n */\r\n onCategoryChange(): void {\r\n this.resetDocumentType();\r\n if (this.selectedCategory) this.loadDocumentTypes();\r\n this.validateForm(); // Validate form after category change\r\n this.validateAndEmit();\r\n }\r\n\r\n /**\r\n * Handles changes in document type selection.\r\n * Validates form and emits validation change event.\r\n */\r\n onDocumentTypeChange(): void { this.validateAndEmit(); }\r\n \r\n /**\r\n * Handles changes in applicant selection.\r\n * Validates form and emits validation change event.\r\n */\r\n onApplicantSelectionChange(): void { this.validateAndEmit(); }\r\n\r\n /**\r\n * Handles file selection from the file upload component.\r\n * Processes each selected file for templated upload sequentially.\r\n * @param event - Event containing the selected files\r\n */\r\n async onSelectedFiles(event: { currentFiles: File[] }): Promise<void> {\r\n // Filter out files with unsupported extensions\r\n const validFiles = event.currentFiles.filter(file => \r\n this.fileFormatService.isAllowedFileType(file.name)\r\n );\r\n \r\n if (validFiles.length !== event.currentFiles.length) {\r\n const invalidFiles = event.currentFiles.filter(file => \r\n !this.fileFormatService.isAllowedFileType(file.name)\r\n );\r\n const invalidFileNames = invalidFiles.map(file => file.name).join(', ');\r\n this.messageService.add({\r\n severity: 'warn',\r\n summary: 'Invalid File Type',\r\n detail: `The following files have unsupported formats and will be skipped: ${invalidFileNames}`\r\n });\r\n }\r\n \r\n if (validFiles.length > 0) {\r\n await this.processFilesSequentially(validFiles);\r\n }\r\n \r\n this.fileUploader.clear();\r\n }\r\n\r\n /**\r\n * Processes files sequentially for upload\r\n * @param files - Array of files to process\r\n */\r\n private async processFilesSequentially(files: File[]): Promise<void> {\r\n if (!this.formService.validateContextId(this.contextId, 'Context ID is required for upload.')) {\r\n return;\r\n }\r\n await this.documentUpload.uploadFilesSequentiallyWithProgress(\r\n files, \r\n this.contextId,\r\n (currentFile, currentIndex, totalFiles) => {\r\n this.fileProgress.set(currentFile, SHARED.UPLOAD_PROGRESS_10);\r\n this.setupFileUploadListener(currentFile);\r\n const formattedSize = this.businessService.formatFileSize(currentFile.size, this.config);\r\n const uploadedFile = this.businessService.createUploadedFile(currentFile, formattedSize);\r\n uploadedFile.progress = SHARED.UPLOAD_PROGRESS_10;\r\n this.uploadedFiles.push(uploadedFile);\r\n this.validateForm();\r\n this.cdr.detectChanges();\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Loads the list of applicants for the current context.\r\n * Sets loading state and handles success/error responses.\r\n */\r\n loadApplicants(): void {\r\n this.isLoadingApplicants = true;\r\n this.dataService.loadApplicants(\r\n this.contextId,\r\n (applicants) => this.handleApplicantsLoaded(applicants),\r\n (error) => this.handleError('Failed to Load Applicants', error, () => this.isLoadingApplicants = false)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (applicants) => this.handleApplicantsLoaded(applicants),\r\n error: (error) => this.handleError('Failed to Load Applicants', error, () => this.isLoadingApplicants = false)\r\n });\r\n }\r\n\r\n /**\r\n * Loads document categories based on the selected assignment type.\r\n * Sets loading state and handles success/error responses.\r\n */\r\n loadCategories(): void {\r\n this.isLoadingCategories = true;\r\n this.dataService.loadCategories(\r\n this.selectedAssignmentType!,\r\n (categories) => this.handleCategoriesLoaded(categories),\r\n (error) => this.handleError('Failed to Load Categories', error, () => this.isLoadingCategories = false)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (categories) => this.handleCategoriesLoaded(categories),\r\n error: (error) => this.handleError('Failed to Load Categories', error, () => this.isLoadingCategories = false)\r\n });\r\n }\r\n\r\n /**\r\n * Loads document types based on the selected category.\r\n * Sets loading state and handles success/error responses.\r\n */\r\n loadDocumentTypes(): void {\r\n this.isLoadingDocumentTypes = true;\r\n this.dataService.loadDocumentTypes(\r\n this.selectedCategory,\r\n (documentTypes) => this.handleDocumentTypesLoaded(documentTypes),\r\n (error) => this.handleError('Failed to Load Document Types', error, () => this.isLoadingDocumentTypes = false)\r\n ).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (documentTypes) => this.handleDocumentTypesLoaded(documentTypes),\r\n error: (error) => this.handleError('Failed to Load Document Types', error, () => this.isLoadingDocumentTypes = false)\r\n });\r\n }\r\n\r\n /**\r\n * Saves the document upload with all metadata.\r\n * Validates payload and required fields before proceeding with upload.\r\n */\r\n saveDocumentUpload(): void {\r\n const payloadValidation = this.businessService.validatePayload(\r\n this.selectedAssignmentType, this.selectedCategory, this.selectedDocumentType, \r\n this.selectedApplicant, this.uploadedFiles\r\n );\r\n \r\n if (!payloadValidation.isValid) {\r\n this.formService.showWarningMessage('Incomplete Form', payloadValidation.message);\r\n return;\r\n }\r\n \r\n if (!this.formService.validateRequiredFields(\r\n this.selectedAssignmentType, this.selectedApplicant, this.selectedCategory, \r\n this.selectedDocumentType, this.uploadedFiles\r\n )) return;\r\n \r\n this.isSaving = true;\r\n this.saveDocumentMetadata();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Removes a document from the uploaded files list.\r\n * Updates progress tracking and validates form.\r\n * @param file - The file to be removed\r\n * @param index - The index of the file in the uploaded files array\r\n */\r\n handleDocumentRemove(file: File, index: number): void {\r\n this.uploadedFiles.splice(index, 1);\r\n this.fileProgress.delete(file);\r\n this.validateAndEmit();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Utility method for file upload component integration.\r\n * @param event - The file upload event\r\n * @param callback - Callback function to execute\r\n */\r\n choose(event: any, callback: () => void): void { callback(); }\r\n \r\n /**\r\n * Triggers the file upload dialog.\r\n */\r\n triggerFileUpload(): void { this.fileUploader.choose(); }\r\n \r\n /**\r\n * Determines if the save button should be disabled.\r\n * @returns True if the save button should be disabled, false otherwise\r\n */\r\n getSaveButtonDisabled(): boolean {\r\n const isDisabled = this.businessService.isSaveButtonDisabled(\r\n this.selectedAssignmentType, this.selectedCategory, this.selectedDocumentType,\r\n this.selectedApplicant, this.uploadedFiles, this.isSaving\r\n )\r\n return isDisabled;\r\n }\r\n\r\n /**\r\n * Gets the upload progress for a specific file.\r\n * @param file - The file to get progress for\r\n * @returns The upload progress percentage (0-100)\r\n */\r\n getProgress(file: File): number { return this.fileProgress.get(file) || 0; }\r\n\r\n /**\r\n * Checks if a file is currently uploading.\r\n * @param file - The file to check\r\n * @returns True if the file is uploading, false otherwise\r\n */\r\n isFileUploading(file: File): boolean { \r\n const progress = this.fileProgress.get(file);\r\n return progress !== undefined && progress > 0 && progress < SHARED.UPLOAD_PROGRESS_100;\r\n }\r\n \r\n /**\r\n * Checks if a file has been successfully uploaded.\r\n * @param file - The file to check\r\n * @returns True if the file is uploaded, false otherwise\r\n */\r\n isFileUploaded(file: File): boolean { return this.fileProgress.get(file) === SHARED.UPLOAD_PROGRESS_100; }\r\n \r\n /**\r\n * Checks if a file upload encountered an error.\r\n * @param file - The file to check\r\n * @returns True if the file has an error, false otherwise\r\n */\r\n isFileError(file: File): boolean { return this.fileProgress.get(file) === -1; }\r\n\r\n /**\r\n * Resets the form to its initial state.\r\n * Clears all selections, uploaded files, and progress tracking.\r\n */\r\n resetForm(): void {\r\n const initialState = this.businessService.getInitialFormState();\r\n Object.assign(this, initialState);\r\n this.fileProgress.clear();\r\n this.filteredApplicantList = [];\r\n this.categoryOptions = [];\r\n this.documentTypeOptions = [];\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Resets form selections (applicant, category, document type).\r\n * Clears document type options.\r\n */\r\n resetSelections(): void {\r\n this.selectedApplicant = this.selectedCategory = this.selectedDocumentType = SHARED.EMPTY;\r\n this.documentTypeOptions = SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n /**\r\n * Resets document type selection and clears document type options.\r\n */\r\n resetDocumentType(): void {\r\n this.selectedDocumentType = SHARED.EMPTY;\r\n this.documentTypeOptions = SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n /**\r\n * Handles applicant loading based on assignment type.\r\n * Loads applicants if type is 'Applicant', otherwise filters existing list.\r\n */\r\n handleApplicantLoading(): void {\r\n if (this.selectedAssignmentType === SHARED.APPLICANT) {\r\n this.loadApplicants();\r\n } else {\r\n this.filterApplicants();\r\n }\r\n }\r\n\r\n /**\r\n * Handles successful loading of applicants data.\r\n * Updates applicant list, filters applicants, and validates form.\r\n * @param applicants - Array of loaded applicants\r\n */\r\n handleApplicantsLoaded(applicants: UserListModel[]): void {\r\n this.applicantList = this.documentUpload.sortListByProperty(applicants, 'name');\r\n this.filterApplicants();\r\n this.isLoadingApplicants = false;\r\n this.validateForm();\r\n }\r\n\r\n /**\r\n * Handles successful loading of categories data.\r\n * Updates category options and validates form.\r\n * @param categories - Array of loaded categories\r\n */\r\n handleCategoriesLoaded(categories: DocumentCategory[]): void {\r\n this.categoryOptions = this.documentUpload.sortListByProperty(categories, 'label');\r\n this.isLoadingCategories = false;\r\n this.validateForm();\r\n }\r\n\r\n /**\r\n * Handles successful loading of document types data.\r\n * Updates document type options and validates form.\r\n * @param documentTypes - Array of loaded document types\r\n */\r\n handleDocumentTypesLoaded(documentTypes: DocumentTypeModel[]): void {\r\n this.documentTypeOptions = this.documentUpload.sortListByProperty(documentTypes, 'label', 'name');\r\n this.isLoadingDocumentTypes = false;\r\n this.validateForm();\r\n }\r\n\r\n /**\r\n * Handles successful upload completion.\r\n * Resets form and emits upload success event.\r\n * @param response - The upload response from the server\r\n */\r\n handleUploadSuccess(response: any): void {\r\n this.isSaving = false;\r\n this.resetForm();\r\n this.onUploadSuccess.emit();\r\n }\r\n\r\n /**\r\n * Handles upload error.\r\n * Resets saving state.\r\n * @param error - The error that occurred during upload\r\n */\r\n handleUploadError(error: any): void {\r\n this.isSaving = false;\r\n }\r\n\r\n /**\r\n * Filters applicants based on the selected assignment type.\r\n * Updates the filtered applicant list.\r\n */\r\n filterApplicants(): void {\r\n this.filteredApplicantList = this.dataService.handleApplicantsLoaded(\r\n this.applicantList, this.selectedAssignmentType\r\n );\r\n }\r\n\r\n /**\r\n * Validates the current form state.\r\n * Checks payload validation and emits form validation change if state changed.\r\n */\r\n validateForm(): void {\r\n const payloadValidation = this.businessService.validatePayload(\r\n this.selectedAssignmentType, this.selectedCategory, this.selectedDocumentType,\r\n this.selectedApplicant, this.uploadedFiles\r\n );\r\n \r\n const previousValidationState = this.isFormValid;\r\n this.isFormValid = payloadValidation.isValid;\r\n if (previousValidationState !== this.isFormValid) {\r\n this.onFormValidationChange.emit();\r\n }\r\n }\r\n\r\n /**\r\n * Saves document metadata to the server.\r\n * Prepares upload payload and calls business service to save.\r\n */\r\n saveDocumentMetadata(): void {\r\n const contextId = this.selectedApplicant || this.contextId;\r\n const payload = this.businessService.prepareUploadPayload(\r\n this.selectedAssignmentType!, this.selectedCategory, this.selectedDocumentType,\r\n this.selectedApplicant, this.uploadedFiles, contextId\r\n );\r\n\r\n this.businessService.saveDocumentUpload(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => this.handleUploadSuccess(response),\r\n error: (error) => this.handleUploadError(error)\r\n });\r\n }\r\n\r\n /**\r\n * Sets up a listener for file upload completion.\r\n * Updates progress tracking and emits validation change when upload completes.\r\n * @param file - The file to monitor for upload completion\r\n */\r\n setupFileUploadListener(file: File): void {\r\n this.documentUpload.uploadCompleted.pipe(takeUntil(this.destroy$)).subscribe(({file: uploadedFile, response}) => {\r\n if (uploadedFile === file) {\r\n this.fileProgress.set(file, SHARED.UPLOAD_PROGRESS_100);\r\n const uploadedFileObj = this.uploadedFiles.find(uf => uf.file === file);\r\n if (uploadedFileObj) {\r\n uploadedFileObj.uploadResponse = response;\r\n uploadedFileObj.progress = SHARED.UPLOAD_PROGRESS_100;\r\n uploadedFileObj.url = response?.url;\r\n uploadedFileObj.contentType = response?.contentType;\r\n }\r\n this.cdr.detectChanges();\r\n this.onFormValidationChange.emit();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handles errors during data loading operations.\r\n * Resets loading state and can be extended for error logging.\r\n * @param title - Error title for display\r\n * @param error - The error object\r\n * @param resetLoading - Callback to reset loading state\r\n */\r\n handleError(title: string, error: any, resetLoading: () => void): void {\r\n resetLoading();\r\n }\r\n\r\n /**\r\n * Validates form and emits validation change event.\r\n */\r\n validateAndEmit(): void {\r\n this.validateForm();\r\n this.onFormValidationChange.emit();\r\n }\r\n\r\n /**\r\n * Emits form validation change event.\r\n */\r\n emitFormValidationChange(): void {\r\n this.onFormValidationChange.emit();\r\n }\r\n\r\n /**\r\n * Formats file size for testing purposes.\r\n * @param size - The file size in bytes\r\n */\r\n formatSize(size: number): void {\r\n this.fileSize = this.businessService.formatFileSize(size, this.config);\r\n }\r\n\r\n\r\n\r\n /**\r\n * Gets the accept string for the file upload component\r\n * @returns String with file extensions for the accept attribute\r\n */\r\n getFileUploadAcceptString(): string {\r\n return this.fileFormatService.getAllowedFileExtensions()\r\n .map(ext => `.${ext}`)\r\n .join(SHARED.COMMA);\r\n }\r\n\r\n /**\r\n * Lifecycle hook that is called when component is destroyed.\r\n * Cleans up subscriptions and destroys services.\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.businessService.destroy();\r\n this.dataService.destroy();\r\n }\r\n}\r\n\r\n","<div class=\"document-upload-container\">\r\n <!-- Assignment Section -->\r\n <div class=\"assignment-section\">\r\n <h4>Assign to Applicant(s) or Application <span class=\"text-red-500\">*</span> </h4>\r\n <div class=\"radio-group\">\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Applicant\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'applicant'\"\r\n ></p-radioButton>\r\n <label [for]=\"'applicant'\" class=\"radio-label\">Applicant(s) </label>\r\n </div>\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Application\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'application'\"\r\n ></p-radioButton>\r\n <label [for]=\"'application'\" class=\"radio-label\">Application</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Applicant Selection (only shown when Applicant is selected) -->\r\n <div class=\"applicant-section\" *ngIf=\"selectedAssignmentType === 'Applicant'\">\r\n <h4>Select Applicant(s) <span class=\"text-red-500\">*</span></h4>\r\n <div class=\"grid\">\r\n <div \r\n *ngFor=\"let applicant of filteredApplicantList\" \r\n class=\"applicant-item col-12 md:col-6\"\r\n >\r\n <p-radioButton \r\n name=\"selectedApplicant\"\r\n [value]=\"applicant._id\"\r\n [(ngModel)]=\"selectedApplicant\"\r\n [inputId]=\"'applicant-' + applicant._id\"\r\n (onClick)=\"onApplicantSelectionChange()\"\r\n ></p-radioButton>\r\n <label [for]=\"'applicant-' + applicant._id\" class=\"applicant-label\">\r\n {{ applicant.name }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Category Selection -->\r\n <div class=\"category-section\">\r\n <h4>Category <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"categoryOptions\"\r\n [(ngModel)]=\"selectedCategory\"\r\n placeholder=\"Select Category type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onCategoryChange()\"\r\n [disabled]=\"!categoryOptions.length\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- Document Type Selection -->\r\n <div class=\"document-type-section\">\r\n <h4>Document Type <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"documentTypeOptions\"\r\n [(ngModel)]=\"selectedDocumentType\"\r\n placeholder=\"Select Document type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onDocumentTypeChange()\"\r\n [disabled]=\"!documentTypeOptions.length || !selectedCategory\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- File Upload Section -->\r\n <div class=\"file-upload-section\">\r\n <h4>Upload Documents <span class=\"text-red-500\">*</span></h4>\r\n <div class=\"grid\">\r\n <div class=\"col-12 md:col-12\">\r\n <p-fileUpload \r\n #fileUploader \r\n [multiple]=\"true\" \r\n auto=\"true\" \r\n [accept]=\"getFileUploadAcceptString()\" \r\n maxFileSize=\"26214400\"\r\n (onSelect)=\"onSelectedFiles($event)\"\r\n >\r\n <ng-template pTemplate=\"header\" let-chooseCallback=\"chooseCallback\" let-clearCallback=\"clearCallback\">\r\n <div class=\"docHeader p-2 flex flex-wrap justify-content-between align-items-center flex-1 gap-2\">\r\n <div class=\"flex gap-2\">\r\n <p-button \r\n (onClick)=\"choose($event, chooseCallback)\" \r\n icon=\"pi pi-images\" \r\n [rounded]=\"true\"\r\n [outlined]=\"true\" \r\n />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"content\" let-removeFileCallback=\"removeFileCallback\"\r\n let-removeUploadedFileCallback=\"removeUploadedFileCallback\">\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <div class=\"col-12 md:col-12 p-0\" *ngIf=\"uploadedFiles.length > 0\">\r\n <div *ngFor=\"let uploadedFile of uploadedFiles; let i = index\"\r\n class=\"m-0 flex flex-column align-items-center gap-1 mt-3\">\r\n <div class=\"col-12 md:col-12 p-0 flex documentInfo\">\r\n <div class=\"documentImage\">\r\n <img src=\"../../../../assets/images/document.png\" [alt]=\"uploadedFile.file.name\" width=\"45\" height=\"50\"\r\n class=\"object-contain\" />\r\n </div>\r\n <div class=\"flex w-full flex-column mt-2 ml-2\">\r\n <div class=\"flex justify-content-between\">\r\n <div style=\"font-weight: bold;font-size: 14px\">\r\n {{ uploadedFile.file.name }}\r\n </div>\r\n <i class=\"pi pi-times cursor-pointer\" (click)=\"handleDocumentRemove(uploadedFile.file,i)\"></i>\r\n </div>\r\n <div class=\"flex justify-content-between mt-1\">\r\n <div style=\"color: #676B89; font-size: 12px; color: green;\" class=\"pi pi-verified\"> \r\n {{ uploadedFile.formattedSize }}\r\n </div>\r\n <div class=\"white-space-nowrap\" style=\"color: #0F8BFD; font-family: 14px;\"> \r\n {{ uploadedFile.progress }} % \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <p-progressBar \r\n [value]=\"uploadedFile.progress ?? 0\" \r\n [showValue]=\"false\" \r\n styleClass=\"h-1/2rem md:ml-auto relative\"\r\n [ngClass]=\"{ 'exceeded-progress-bar': (uploadedFile.progress ?? 0) > 100 }\"\r\n >\r\n </p-progressBar>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"empty\" let-chooseCallback=\"chooseCallback\">\r\n <div *ngIf=\"!uploadedFiles.length\" class=\"flex align-items-center justify-content-center flex-column\"\r\n (click)=\"triggerFileUpload()\">\r\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-8xl text-400 border-400\"></i>\r\n <p class=\"mt-4 mb-0\">Drag and drop files here to upload.</p>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"file\"> </ng-template>\r\n </p-fileUpload>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\nexport interface ConfirmationOptions {\r\n message: string;\r\n header?: string;\r\n icon?: string;\r\n acceptLabel?: string;\r\n rejectLabel?: string;\r\n acceptIcon?: string;\r\n rejectIcon?: string;\r\n acceptButtonClass?: string;\r\n rejectButtonClass?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-confirmation-dialog',\r\n templateUrl: './confirmation-dialog.component.html',\r\n standalone: false,\r\n styleUrls: ['./confirmation-dialog.component.scss']\r\n})\r\nexport class ConfirmationDialogComponent {\r\n @Input() confirmationOptions: ConfirmationOptions = {\r\n message: 'Are you sure that you want to proceed?',\r\n header: 'Confirmation',\r\n icon: 'pi pi-exclamation-triangle',\r\n acceptLabel: 'Yes',\r\n rejectLabel: 'No',\r\n acceptIcon: 'pi pi-check',\r\n rejectIcon: 'pi pi-times',\r\n acceptButtonClass: 'btn-success',\r\n rejectButtonClass: 'btn-secondary'\r\n };\r\n\r\n isVisible: boolean = false;\r\n currentOptions: ConfirmationOptions = this.confirmationOptions;\r\n private acceptCallback?: () => void;\r\n private rejectCallback?: () => void;\r\n\r\n /**\r\n * Shows the confirmation dialog with the specified options\r\n * @param options - Configuration options for the confirmation dialog\r\n * @param acceptCallback - Function to execute when user accepts\r\n * @param rejectCallback - Function to execute when user rejects\r\n */\r\n confirm(\r\n options: Partial<ConfirmationOptions>,\r\n acceptCallback: () => void,\r\n rejectCallback?: () => void\r\n ): void {\r\n this.currentOptions = { ...this.confirmationOptions, ...options };\r\n this.acceptCallback = acceptCallback;\r\n this.rejectCallback = rejectCallback;\r\n this.isVisible = true;\r\n }\r\n\r\n /**\r\n * Shows a delete confirmation dialog\r\n * @param itemName - Name of the item to be deleted\r\n * @param acceptCallback - Function to execute when user accepts deletion\r\n * @param rejectCallback - Function to execute when user rejects deletion\r\n */\r\n confirmDelete(\r\n itemName: string,\r\n acceptCallback: () => void,\r\n rejectCallback?: () => void\r\n ): void {\r\n this.confirm({\r\n message: `Are you sure you want to delete \"${itemName}\"?`,\r\n header: 'Delete Confirmation',\r\n acceptLabel: 'Delete',\r\n rejectLabel: 'Cancel',\r\n acceptButtonClass: 'btn-danger'\r\n }, acceptCallback, rejectCallback);\r\n }\r\n\r\n onAccept(): void {\r\n this.isVisible = false;\r\n if (this.acceptCallback) {\r\n this.acceptCallback();\r\n }\r\n }\r\n\r\n onReject(): void {\r\n this.isVisible = false;\r\n if (this.rejectCallback) {\r\n this.rejectCallback();\r\n }\r\n }\r\n}\r\n","<div *ngIf=\"isVisible\" class=\"custom-confirmation-overlay\">\r\n <div class=\"custom-confirmation-dialog\">\r\n <div class=\"dialog-header\">\r\n <i *ngIf=\"currentOptions.icon\" [class]=\"currentOptions.icon\"></i>\r\n <h3>{{ currentOptions.header }}</h3>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <p>{{ currentOptions.message }}</p>\r\n </div>\r\n <div class=\"dialog-actions\">\r\n <button \r\n type=\"button\" \r\n pButton\r\n class=\"btn btn-secondary\"\r\n (click)=\"onReject()\">\r\n <i *ngIf=\"currentOptions.rejectIcon\" [class]=\"currentOptions.rejectIcon\"></i>\r\n {{ currentOptions.rejectLabel }}\r\n </button>\r\n <button \r\n type=\"button\" \r\n pButton\r\n [class]=\"'btn ' + currentOptions.acceptButtonClass\"\r\n (click)=\"onAccept()\">\r\n <i *ngIf=\"currentOptions.acceptIcon\" [class]=\"currentOptions.acceptIcon\"></i>\r\n {{ currentOptions.acceptLabel }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, OnDestroy, HostListener, ViewChild } from '@angular/core';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ConfirmationDialogComponent, ConfirmationOptions } from '../../../../Shared/components/confirmation-dialog/confirmation-dialog.component';\r\n\r\n@Component({\r\n selector: 'lib-sidebar',\r\n templateUrl: './sidebar.component.html',\r\n styleUrls: ['./sidebar.component.scss'],\r\n standalone: false\r\n})\r\nexport class SidebarComponent implements OnDestroy {\r\n @ViewChild('confirmationDialog') confirmationDialog!: ConfirmationDialogComponent;\r\n \r\n // Add setter to log visible changes\r\n @Input() set visible(value: boolean) {\r\n this._visible = value;\r\n }\r\n \r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n \r\n private _visible: boolean = false;\r\n \r\n // Flag to prevent double event emission\r\n private isProgrammaticallyClosing: boolean = false;\r\n \r\n @Input() position: 'left' | 'right' = 'right';\r\n @Input() width: string = SHARED.WIDTH;\r\n @Input() title: string = SHARED.EMPTY;\r\n @Input() showCloseButton: boolean = true;\r\n @Input() modal: boolean = true;\r\n @Input() dismissible: boolean = true;\r\n @Input() closeOnEscape: boolean = true;\r\n @Input() baseZIndex: number = 10000;\r\n @Input() autoZIndex: boolean = false;\r\n @Input() styleClass: string = SHARED.EMPTY;\r\n @Input() appendTo: string = 'body';\r\n @Input() blockScroll: boolean = true;\r\n @Input() closeIcon: string = SHARED.CLOSE_ICON;\r\n @Input() showSaveButton: boolean = false;\r\n @Input() saveButtonText: string = SHARED.SAVE;\r\n @Input() saveButtonDisabled: boolean = false;\r\n @Input() successMessage: string = SHARED.SUCCESS_MESSAGE;\r\n @Input() errorMessage: string = SHARED.EMPTY;\r\n @Input() hasUnsavedChanges: boolean = false;\r\n\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n @Output() onShow = new EventEmitter<void>();\r\n @Output() onHide = new EventEmitter<void>();\r\n @Output() onSave = new EventEmitter<void>();\r\n @Output() onDiscardChanges = new EventEmitter<void>();\r\n \r\n showSuccessMessage: boolean = false;\r\n showErrorMessage: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n\r\n // Confirmation options for unsaved changes\r\n unsavedChangesConfirmationOptions: ConfirmationOptions = {\r\n message: SHARED.UNSAVED_CHANGES_MESSAGE,\r\n header: SHARED.UNSAVED_CHANGES_HEADER,\r\n icon: SHARED.UNSAVED_CHANGES_ICON,\r\n acceptLabel: SHARED.REMOVE,\r\n rejectLabel: SHARED.CANCEL,\r\n acceptIcon: SHARED.ACCEPT_ICON,\r\n rejectIcon: SHARED.REJECT_ICON,\r\n acceptButtonClass: SHARED.ACCEPT_BUTTON_STYLE_CLASS,\r\n rejectButtonClass: SHARED.REJECT_BUTTON_STYLE_CLASS\r\n };\r\n\r\n constructor() {\r\n }\r\n\r\n /**\r\n * Handles the onHide event from PrimeNG sidebar\r\n */\r\n onSidebarHide(): void {\r\n if (!this.isProgrammaticallyClosing) {\r\n this.onHide.emit();\r\n }\r\n }\r\n\r\n /**\r\n * Handles the visibleChange event from PrimeNG sidebar\r\n */\r\n onVisibleChange(value: boolean): void {\r\n if (!this.isProgrammaticallyClosing) {\r\n this.visibleChange.emit(value);\r\n }\r\n }\r\n\r\n /**\r\n * Opens the sidebar\r\n */\r\n open(): void {\r\n this._visible = true;\r\n this.clearMessages();\r\n this.visibleChange.emit(this._visible);\r\n this.onShow.emit();\r\n }\r\n\r\n /**\r\n * Closes the sidebar\r\n */\r\n close(): void {\r\n this.isProgrammaticallyClosing = true;\r\n this._visible = false;\r\n this.clearMessages();\r\n this.visibleChange.emit(this._visible);\r\n this.onHide.emit();\r\n this.isProgrammaticallyClosing = false;\r\n }\r\n\r\n /**\r\n * Closes the sidebar and discards all changes\r\n */\r\n closeAndDiscardChanges(): void {\r\n this.isProgrammaticallyClosing = true;\r\n this._visible = false;\r\n this.clearMessages();\r\n this.visibleChange.emit(this._visible);\r\n this.onDiscardChanges.emit();\r\n this.onHide.emit();\r\n this.isProgrammaticallyClosing = false;\r\n }\r\n\r\n /**\r\n * Toggles the sidebar visibility\r\n */\r\n toggle(): void {\r\n this._visible = !this._visible;\r\n if (this._visible) {\r\n this.clearMessages();\r\n this.onShow.emit();\r\n } else {\r\n this.clearMessages();\r\n this.onHide.emit();\r\n }\r\n this.visibleChange.emit(this._visible);\r\n }\r\n\r\n /**\r\n * Handles the close button click with unsaved changes check\r\n */\r\n onCloseClick(): void {\r\n if (this.hasUnsavedChanges) {\r\n this.showUnsavedChangesConfirmation();\r\n } else {\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Handles the mask click (when dismissible is true) with unsaved changes check\r\n */\r\n onMaskClick(): void {\r\n if (this.dismissible) {\r\n if (this.hasUnsavedChanges) {\r\n this.showUnsavedChangesConfirmation();\r\n } else {\r\n this.close();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Handles the escape key press with unsaved changes check\r\n */\r\n @HostListener('document:keydown.escape', ['$event'])\r\n onEscapeKey(event: KeyboardEvent): void {\r\n if (this._visible && this.closeOnEscape) {\r\n if (this.hasUnsavedChanges) {\r\n event.preventDefault();\r\n this.showUnsavedChangesConfirmation();\r\n } else {\r\n this.close();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Handles backdrop click with unsaved changes check\r\n */\r\n onBackdropClick(event: Event): void {\r\n \r\n if (this.hasUnsavedChanges) {\r\n this.showUnsavedChangesConfirmation();\r\n } else {\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Handles close button click with unsaved changes check\r\n */\r\n onCloseButtonClick(): void {\r\n if (this.hasUnsavedChanges) {\r\n this.showUnsavedChangesConfirmation();\r\n } else {\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Shows confirmation dialog for unsaved changes\r\n */\r\n private showUnsavedChangesConfirmation(): void {\r\n this.confirmationDialog.confirm(\r\n this.unsavedChangesConfirmationOptions,\r\n () => {\r\n this.closeAndDiscardChanges();\r\n },\r\n () => {}\r\n );\r\n }\r\n\r\n /**\r\n * Shows success message and closes sidebar after delay\r\n */\r\n showSuccess(): void {\r\n this.showSuccessMessage = true;\r\n this.showErrorMessage = false;\r\n setTimeout(() => {\r\n this.close();\r\n }, 2000);\r\n }\r\n\r\n /**\r\n * Shows error message\r\n */\r\n showError(message?: string): void {\r\n this.showErrorMessage = true;\r\n this.showSuccessMessage = false;\r\n this.errorMessage = message || SHARED.EMPTY;\r\n }\r\n\r\n /**\r\n * Clears all messages\r\n */\r\n clearMessages(): void {\r\n this.showSuccessMessage = false;\r\n this.showErrorMessage = false;\r\n }\r\n\r\n /**\r\n * Checks if there are unsaved changes\r\n * @returns True if there are unsaved changes, false otherwise\r\n */\r\n checkForUnsavedChanges(): boolean {\r\n return this.hasUnsavedChanges;\r\n }\r\n\r\n /**\r\n * Lifecycle hook that is called when component is destroyed.\r\n * Cleans up subscriptions.\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","<!-- Custom backdrop for better control over outside clicks -->\r\n<div \r\n *ngIf=\"visible\" \r\n class=\"custom-sidebar-backdrop\" \r\n (click)=\"onBackdropClick($event)\"\r\n></div>\r\n\r\n<p-sidebar \r\n [(visible)]=\"visible\"\r\n [position]=\"position\"\r\n [style]=\"{width: width}\"\r\n [modal]=\"false\"\r\n [dismissible]=\"false\"\r\n [closeOnEscape]=\"false\"\r\n [showCloseIcon]=\"false\"\r\n [baseZIndex]=\"baseZIndex\"\r\n [autoZIndex]=\"autoZIndex\"\r\n [styleClass]=\"styleClass\"\r\n [appendTo]=\"appendTo\"\r\n [blockScroll]=\"blockScroll\"\r\n (visibleChange)=\"onVisibleChange($event)\"\r\n (onShow)=\"onShow.emit()\"\r\n (onHide)=\"onSidebarHide()\"\r\n>\r\n <ng-template pTemplate=\"header\" *ngIf=\"title || showCloseButton || showSaveButton\">\r\n <div class=\"sidebar-header\">\r\n <h3 *ngIf=\"title\" class=\"sidebar-title\">{{ title }}</h3>\r\n <div class=\"header-content\">\r\n <ng-content select=\"[header]\"></ng-content>\r\n \r\n <p-messages \r\n *ngIf=\"showSuccessMessage\"\r\n severity=\"success\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ successMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n <p-messages \r\n *ngIf=\"showErrorMessage\"\r\n severity=\"error\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ errorMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n\r\n <div class=\"header-actions mr-3\">\r\n <button \r\n *ngIf=\"showSaveButton\"\r\n pButton \r\n type=\"button\" \r\n [label]=\"saveButtonText\"\r\n [disabled]=\"saveButtonDisabled\"\r\n class=\"p-button-primary\"\r\n (click)=\"onSave.emit()\"\r\n ></button>\r\n\r\n <button \r\n *ngIf=\"showCloseButton\"\r\n pButton \r\n type=\"button\" \r\n icon=\"pi pi-times\"\r\n class=\"p-button-text p-button-rounded\"\r\n (click)=\"onCloseButtonClick()\"\r\n ></button>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </ng-template>\r\n</p-sidebar>\r\n\r\n<!-- Custom confirmation dialog for unsaved changes -->\r\n<app-confirmation-dialog \r\n #confirmationDialog\r\n [confirmationOptions]=\"unsavedChangesConfirmationOptions\">\r\n</app-confirmation-dialog>\r\n","import { Injectable } from '@angular/core';\r\nimport { UserListModel } from '../models/user-list.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED'\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentQuery } from '../state/document.query';\r\nimport { DocumentCategory } from '../models/document-category.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserListService {\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery\r\n ) { }\r\n\r\n getInitials(name: string): string {\r\n if (!name || name.trim() === SHARED.EMPTY) {\r\n return SHARED.EMPTY;\r\n }\r\n const words = name.trim().split(SHARED.EMPTY_SPACE).filter(word => word.length > SHARED.INITIAL_COUNT);\r\n if (words.length === 1) {\r\n return words[0].substring(0, 2).toUpperCase();\r\n } else if (words.length >= 2) {\r\n const firstWord = words[0];\r\n const lastWord = words[words.length - 1];\r\n return (firstWord.charAt(0) + lastWord.charAt(0)).toUpperCase();\r\n }\r\n return SHARED.EMPTY;\r\n }\r\n\r\n getColorByIndex(index: number): string {\r\n const colors = SHARED.COLORS;\r\n return colors[index % colors.length];\r\n }\r\n\r\n getColorValue(colorName: string): string {\r\n const colorMap: { [key: string]: string } = SHARED.COLOR_MAP;\r\n return colorMap[colorName] || SHARED.DEFAULT_COLOR;\r\n }\r\n\r\n processUserData(userList: UserListModel[]): UserListModel[] {\r\n return userList.map((user, index) => ({\r\n ...user,\r\n initials: this.getInitials(user.name),\r\n color: this.getColorByIndex(index)\r\n }));\r\n }\r\n\r\n /**\r\n * Finds the selected menu item from categories\r\n * @param selectedMenuItemId - The ID of the selected menu item\r\n * @param categories - The document categories\r\n * @returns The selected menu item or null\r\n */\r\n private findSelectedMenuItem(selectedMenuItemId: string, categories: DocumentCategory[]): any {\r\n for (const category of categories) {\r\n if (category.items) {\r\n const item = category.items.find(item => item._id === selectedMenuItemId);\r\n if (item) {\r\n return item;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Filters user list based on selected menu item category\r\n * @param userList - The complete user list\r\n * @param categories - The document categories\r\n * @returns Filtered user list\r\n */\r\n filterUsersByCategory(userList: UserListModel[], categories: DocumentCategory[]): UserListModel[] {\r\n const selectedMenuItemId = this.documentQuery.getSelectionState().menuItem;\r\n if (!selectedMenuItemId) {\r\n return userList;\r\n }\r\n\r\n const selectedMenuItem = this.findSelectedMenuItem(selectedMenuItemId, categories);\r\n if (!selectedMenuItem) {\r\n return userList;\r\n }\r\n\r\n const selectedCategory = categories.find(category => \r\n category.items?.some(item => item._id === selectedMenuItemId)\r\n );\r\n \r\n if (!selectedCategory) {\r\n return userList;\r\n }\r\n\r\n if (selectedCategory.label === SHARED.APPLICATION) {\r\n return userList.filter(user => user.name === SHARED.APPLICATION_DOCS);\r\n }\r\n\r\n return userList;\r\n }\r\n\r\n selectUser(userId: string, userData: UserListModel[]): { selectedUser: string | undefined; name: string | undefined } {\r\n const user = userData.find(u => u._id === userId);\r\n if (user) {\r\n this.documentStore.setSelectedUserId(userId);\r\n return { selectedUser: user.name, name: user.name };\r\n }\r\n return { selectedUser: undefined, name: undefined };\r\n }\r\n\r\n unselectUser(): void {\r\n this.documentStore.setSelectedUserId(null);\r\n }\r\n\r\n isUserSelected(userId: string, userData: UserListModel[], selectedUser: string | undefined): boolean {\r\n return selectedUser === userData.find(u => u._id === userId)?.name;\r\n }\r\n} ","\r\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport { SHARED, USERLIST } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { UserListService } from '../../services/user-list.service';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-user-list',\r\n standalone : false,\r\n templateUrl: './user-list.component.html',\r\n styleUrls: ['./user-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [\r\n trigger('slideInFromTop', [\r\n state('void', style({\r\n opacity: 0,\r\n transform: 'translateY(-10px)'\r\n })),\r\n state('*', style({\r\n opacity: 1,\r\n transform: 'translateY(0)'\r\n })),\r\n transition('void => *', [\r\n animate('300ms ease-out')\r\n ])\r\n ]),\r\n trigger('fadeIn', [\r\n state('void', style({\r\n opacity: 0,\r\n transform: 'scale(0.8)'\r\n })),\r\n state('*', style({\r\n opacity: 1,\r\n transform: 'scale(1)'\r\n })),\r\n transition('void => *', [\r\n animate('200ms ease-in-out')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class UserListComponent implements OnInit, OnChanges {\r\n \r\n @Input() userList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n @Input() categories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n @Output() userSelected = new EventEmitter<string>();\r\n \r\n userData: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n filteredUserData: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n selectedUser: string | undefined;\r\n shouldShowContainer: boolean = true;\r\n \r\n private userListSubscription: Subscription = new Subscription();\r\n private categoriesSubscription: Subscription = new Subscription();\r\n \r\n constructor(\r\n public documentService : DocumentHelperService,\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private userListService: UserListService,\r\n private cdr: ChangeDetectorRef\r\n ){\r\n\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[SHARED.USER_LIST] && !changes[SHARED.USER_LIST].firstChange) {\r\n this.initializeUserData();\r\n }\r\n if (changes[SHARED.CATEGORIES] && !changes[SHARED.CATEGORIES].firstChange) {\r\n this.updateFilteredUserData();\r\n }\r\n }\r\n\r\n initializeUserData(): void {\r\n if (this.userList && this.userList.length > 0) {\r\n this.userData = this.userListService.processUserData(this.userList);\r\n this.updateFilteredUserData();\r\n }\r\n }\r\n\r\n updateFilteredUserData(): void {\r\n if (this.userData.length > 0 && this.categories.length > 0) {\r\n this.filteredUserData = this.userListService.filterUsersByCategory(this.userData, this.categories);\r\n this.shouldShowContainer = true;\r\n if (this.selectedUser) {\r\n const selectedUserInFiltered = this.filteredUserData.find(user => user.name === this.selectedUser);\r\n if (!selectedUserInFiltered) {\r\n this.selectedUser = undefined;\r\n this.documentStore.setSelectedUserId(null);\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n }\r\n } else {\r\n this.filteredUserData = this.userData;\r\n this.shouldShowContainer = true;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeUserData();\r\n this.userListSubscription.add(\r\n this.documentQuery.selectUserList().subscribe(userList => {\r\n if (userList && userList.length > 0) {\r\n this.userList = userList;\r\n this.initializeUserData();\r\n this.cdr.markForCheck();\r\n }\r\n })\r\n );\r\n\r\n this.categoriesSubscription.add(\r\n this.documentQuery.selectDocumentCategories().subscribe(categories => {\r\n if (categories && categories.length > 0) {\r\n this.categories = categories;\r\n this.updateFilteredUserData();\r\n this.cdr.markForCheck();\r\n }\r\n })\r\n );\r\n\r\n this.userListSubscription.add(\r\n this.documentQuery.selectDocumentListResponse().subscribe(() => {\r\n const currentUserList = this.documentQuery.getUserList();\r\n if (currentUserList && currentUserList.length > 0) {\r\n this.userList = currentUserList;\r\n this.initializeUserData();\r\n this.cdr.markForCheck();\r\n }\r\n })\r\n );\r\n\r\n this.documentQuery.selectSelectedUserId().subscribe(userId => {\r\n if (userId) {\r\n const user = this.userData.find(u => u._id === userId);\r\n this.selectedUser = user ? user.name : undefined;\r\n } else {\r\n this.selectedUser = undefined;\r\n }\r\n this.cdr.markForCheck();\r\n });\r\n\r\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItemId => {\r\n this.updateFilteredUserData();\r\n if (this.selectedUser) {\r\n const selectedUserInFiltered = this.filteredUserData.find(user => user.name === this.selectedUser);\r\n if (!selectedUserInFiltered) {\r\n this.selectedUser = undefined;\r\n this.documentStore.setSelectedUserId(null);\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n }\r\n this.cdr.markForCheck();\r\n });\r\n\r\n this.documentQuery.selectShowUserList().subscribe(show => {\r\n if (!show && this.selectedUser) {\r\n this.selectedUser = undefined;\r\n this.userSelected.emit(SHARED.EMPTY);\r\n }\r\n });\r\n }\r\n\r\n onUserSelect(username: string, id: string): void {\r\n if (this.selectedUser === username) {\r\n this.selectedUser = undefined;\r\n this.userListService.unselectUser();\r\n this.userSelected.emit(SHARED.EMPTY);\r\n } else {\r\n this.selectedUser = username;\r\n this.documentStore.setSelectedUserId(id);\r\n this.userSelected.emit(username);\r\n }\r\n }\r\n\r\n\r\n ngOnDestroy(): void {\r\n this.userListSubscription.unsubscribe();\r\n this.categoriesSubscription.unsubscribe();\r\n }\r\n}","<div class=\"user-list-container\" [@slideInFromTop]>\r\n <div class=\"user-cards\">\r\n <div \r\n *ngFor=\"let user of filteredUserData\" \r\n class=\"user-card\"\r\n [class.selected]=\"selectedUser === user.name\"\r\n [style.border-color]=\"selectedUser === user.name ? '#f97316' : 'transparent'\"\r\n (click)=\"onUserSelect(user.name, user._id)\"\r\n >\r\n @if(user.name === \"Application Docs\"){\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\"><i class=\"pi pi-user\"></i></span>\r\n </div>\r\n }@else {\r\n <div class=\"user-avatar\" [ngClass]=\"'avatar-' + user.color\">\r\n <span class=\"initials\">{{ user.initials }}</span>\r\n </div>\r\n }\r\n <div class=\"user-info\">\r\n <div class=\"username\">{{ user.name }}</div>\r\n <div class=\"document-counts\">\r\n <span style=\"color : #16A34A;\"> {{ user.approved }} approved </span><span>/ {{ user.pending }} pending</span>\r\n </div>\r\n </div>\r\n <div class=\"selection-indicator\" *ngIf=\"selectedUser === user.name\" [@fadeIn]>\r\n <i class=\"ri-check-line\"></i>\r\n </div>\r\n </div>\r\n \r\n <!-- Show message when filtered list is empty -->\r\n <div *ngIf=\"filteredUserData.length === 0 && shouldShowContainer\" class=\"no-users-message\" [@slideInFromTop]>\r\n <p>No users available for this category.</p>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\nexport interface StatusData {\r\n status: string;\r\n count: number;\r\n color?: string;\r\n icon?: string;\r\n _id?: string;\r\n}\r\n\r\nexport interface CalculatedStatusData extends StatusData {\r\n percentage: number;\r\n isSelected: boolean;\r\n statusClass: string;\r\n iconClass: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StatusCalculatorService {\r\n\r\n calculateTotalCount(statusData: StatusData[]): number {\r\n return statusData?.reduce((total, status) => total + (status.count ?? 0), 0) || 0;\r\n }\r\n\r\n calculateStatusDataWithPercentages(\r\n statusData: StatusData[], \r\n selectedStatus: string | null\r\n ): CalculatedStatusData[] {\r\n if (!statusData) return [];\r\n \r\n const totalCount = this.calculateTotalCount(statusData);\r\n \r\n return statusData.map((status) => ({\r\n ...status,\r\n percentage: totalCount > 0 ? (status.count ?? 0) / totalCount * 100 : 0,\r\n isSelected: selectedStatus === status.status,\r\n statusClass: status.status ? SHARED.STATUS_WITH_DASH + status.status.toLowerCase() : SHARED.EMPTY,\r\n iconClass: SHARED.ICON_WITH_DASH + (status?.status?.toLowerCase() || SHARED.EMPTY)\r\n }));\r\n }\r\n} ","import { Component, OnInit, OnDestroy, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { StatusDataModel } from '../../models/status-data.model';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { StatusCalculatorService, CalculatedStatusData } from '../../services/status-calculator.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\n\r\n@Component({\r\n selector: 'lib-document-status',\r\n standalone: false,\r\n templateUrl: './document-status.component.html',\r\n styleUrl: './document-status.component.scss'\r\n})\r\nexport class DocumentStatusComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() contextId: string = SHARED.EMPTY;\r\n @Input() statusData: any;\r\n \r\n selectedStatus: string | null = null;\r\n statusDataWithPercentages: CalculatedStatusData[] = [];\r\n\r\n \r\n private subscription = new Subscription();\r\n\r\n constructor(\r\n private documentQuery: DocumentQuery,\r\n private documentService: DocumentHelperService,\r\n private statusCalculatorService: StatusCalculatorService\r\n ) {}\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['contextId'] && !changes['contextId'].firstChange) {\r\n // When contextId changes, refetch status data for the new context\r\n this.refetchStatusData();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedStatus().subscribe(status => {\r\n this.selectedStatus= status;\r\n this.updateCalculatedStatusData();\r\n })\r\n );\r\n\r\n this.subscription.add(\r\n this.documentQuery.selectStatusData().subscribe(statusData => {\r\n if (statusData && statusData.length > 0) {\r\n this.statusData = statusData;\r\n this.updateCalculatedStatusData();\r\n }\r\n })\r\n );\r\n\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.refetchStatusData();\r\n }\r\n }\r\n\r\n private refetchStatusData(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n const currentState = this.documentQuery.getSelectionState();\r\n const statusContextId = currentState.userId || null;\r\n const categoryId = currentState.menuItem || null;\r\n \r\n // Use the document service to refresh status data for the new context\r\n this.documentService.refreshStatusData(this.contextId, statusContextId, categoryId);\r\n }\r\n }\r\n\r\n \r\n selectStatus(status: string): void {\r\n const newStatus = this.selectedStatus === status ? null : status;\r\n this.documentService.setSelectedStatus(newStatus);\r\n }\r\n\r\n private updateCalculatedStatusData(): void {\r\n this.statusDataWithPercentages = this.statusCalculatorService.calculateStatusDataWithPercentages(\r\n this.statusData,\r\n this.selectedStatus\r\n );\r\n }\r\n \r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"status-summary-container\">\r\n <div class=\"status-cards\">\r\n \r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"status-card {{ status.statusClass }}\"\r\n [class.selected]=\"status.isSelected\"\r\n (click)=\"selectStatus(status.status || '')\"\r\n >\r\n <div class=\"status-icon {{ status.iconClass }}\">\r\n <i [class]=\"status.icon\"></i>\r\n </div>\r\n <div class=\"status-info\">\r\n <div class=\"status-count\">{{ status.count }}</div>\r\n <div class=\"status-name\">{{ status.status }}</div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"progress-bar-container\">\r\n <div class=\"progress-bar\">\r\n <div \r\n *ngFor=\"let status of statusDataWithPercentages\" \r\n class=\"progress-segment\"\r\n [style.width.%]=\"status.percentage\"\r\n [style.background-color]=\"status.color\"\r\n ></div>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { Subject, takeUntil, debounceTime, distinctUntilChanged } from 'rxjs';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\n\r\n@Component({\r\n selector: 'document-search',\r\n templateUrl: './document-search.component.html',\r\n styleUrls: ['./document-search.component.scss'],\r\n standalone: false\r\n})\r\nexport class DocumentSearchComponent implements OnInit, OnDestroy {\r\n readonly SHARED = SHARED;\r\n \r\n @Input() contextId: string = SHARED.EMPTY;\r\n @Output() onActionClick = new EventEmitter<void>();\r\n \r\n searchTerm: string = SHARED.EMPTY;\r\n private destroy$ = new Subject<void>();\r\n private searchSubject = new Subject<string>();\r\n\r\n constructor(private documentHelperService: DocumentHelperService) {}\r\n\r\n ngOnInit(): void {\r\n this.setupSearchSubscription();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n /**\r\n * Sets up the search input subscription with debouncing\r\n */\r\n private setupSearchSubscription(): void {\r\n const searchSubject = new Subject<string>();\r\n searchSubject.pipe(\r\n takeUntil(this.destroy$),\r\n debounceTime(500),\r\n distinctUntilChanged()\r\n ).subscribe(searchTerm => {\r\n this.onSearchChange(searchTerm);\r\n });\r\n\r\n this.searchSubject = searchSubject;\r\n }\r\n\r\n /**\r\n * Handles search term changes from ngModel\r\n * @param searchTerm - The search term entered by the user\r\n */\r\n onSearchInputChange(searchTerm: string): void {\r\n this.searchSubject.next(searchTerm);\r\n }\r\n\r\n /**\r\n * Handles search term changes\r\n * @param searchTerm - The search term entered by the user\r\n */\r\n private onSearchChange(searchTerm: string): void {\r\n const normalizedSearchTerm = searchTerm?.trim() || null;\r\n this.documentHelperService.setSearchKey(normalizedSearchTerm);\r\n }\r\n\r\n /**\r\n * Clears the search input\r\n */\r\n onClearSearch(): void {\r\n this.searchTerm = SHARED.EMPTY;\r\n this.documentHelperService.setSearchKey(null);\r\n }\r\n\r\n /**\r\n * Clears all filters including search, menu item, user, and status selections\r\n */\r\n onClearAllFilters(): void {\r\n this.searchTerm = SHARED.EMPTY;\r\n this.documentHelperService.clearSelectionState();\r\n }\r\n\r\n} ","<div class=\"search-container\">\r\n <div class=\"search-input-wrapper\">\r\n <i class=\"pi pi-search search-icon\"></i>\r\n <input \r\n type=\"text\" \r\n [(ngModel)]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchInputChange($event)\"\r\n class=\"search-input\"\r\n placeholder=\"Search by document name, category, type, status or applicant name...\"\r\n [attr.aria-label]=\"'Search documents'\"\r\n />\r\n <button \r\n *ngIf=\"searchTerm\"\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"onClearSearch()\"\r\n [attr.aria-label]=\"'Clear search'\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <button \r\n type=\"button\"\r\n class=\"clear-all-filters-link\"\r\n (click)=\"onClearAllFilters()\"\r\n [attr.aria-label]=\"'Clear all'\"\r\n >\r\n Clear All\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n\r\n <div class=\"filters-section\">\r\n <button \r\n type=\"button\"\r\n class=\"action-button\"\r\n (click)=\"onActionClick.emit()\"\r\n [attr.aria-label]=\"'Open actions menu'\"\r\n >\r\n Upload Document\r\n </button>\r\n </div>\r\n</div> ","import { Component, Input, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport {SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { FolderBlockModel } from '../../models/folder.model';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { StatusDataModel } from '../../models/status-data.model';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { DocumentUploadComponent } from '../document-upload/document-upload.component';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { SidebarComponent } from '../sidebar/sidebar.component';\r\n\r\n/**\r\n * The `FolderContainerComponent` is responsible for rendering a container \r\n * that displays a list of documents and associated folder panel data.\r\n * This component utilizes the `FOLDERPANEL` constant for folder panel data\r\n * and accepts a document list input of type `DocumentModel`.\r\n */\r\n@Component({\r\n selector: 'lib-folder-container',\r\n standalone: false,\r\n templateUrl: './folder-container.component.html',\r\n styleUrl: './folder-container.component.scss',\r\n animations: [\r\n trigger('slideInOut', [\r\n state('visible', style({\r\n height: '*',\r\n opacity: 1,\r\n transform: 'translateY(0)',\r\n overflow: 'hidden',\r\n marginBottom: '1rem',\r\n visibility: 'visible'\r\n })),\r\n state('hidden', style({\r\n height: '0px',\r\n opacity: 0,\r\n transform: 'translateY(-20px)',\r\n overflow: 'hidden',\r\n marginBottom: '0px',\r\n visibility: 'hidden'\r\n })),\r\n transition('visible => hidden', [\r\n animate('250ms cubic-bezier(0.4, 0.0, 0.2, 1)')\r\n ]),\r\n transition('hidden => visible', [\r\n animate('300ms cubic-bezier(0.0, 0.0, 0.2, 1)')\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class FolderContainerComponent implements OnInit {\r\n /**\r\n * A list of documents passed as input to the component.\r\n * Represents the document data to be displayed in the folder container.\r\n */\r\n @Input() documentList?: DocumentModel[];\r\n /**\r\n * A list of documents passed as input to the component.\r\n * Represents the document data to be displayed in the folder container.\r\n */\r\n @Input() folderList: FolderBlockModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The context ID for the folder container.\r\n * @type {string}\r\n */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n\r\n /**\r\n * The list of users passed as input to the component.\r\n * @type {UserListModel[]}\r\n */\r\n @Input() userList: UserListModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The status data passed as input to the component.\r\n * @type {StatusDataModel[]}\r\n */\r\n @Input() statusData: StatusDataModel[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The document categories passed as input to the component.\r\n * @type {DocumentCategory[]}\r\n */\r\n @Input() categories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Flag to control user list visibility\r\n */\r\n showUserList: boolean = true;\r\n \r\n /**\r\n * Animation state for user list visibility\r\n */\r\n userListAnimationState: string = SHARED.VISIBLE;\r\n\r\n /**\r\n * Controls the visibility of the document upload sidebar\r\n */\r\n isDocumentUploadSidebarOpen: boolean = false;\r\n\r\n /**\r\n * Reference to the document upload component\r\n */\r\n @ViewChild(DocumentUploadComponent) documentUploadComponent!: DocumentUploadComponent;\r\n \r\n /**\r\n * Reference to the sidebar component\r\n */\r\n @ViewChild(SidebarComponent) sidebarComponent!: SidebarComponent;\r\n \r\n /**\r\n * Tracks whether the save button should be disabled\r\n */\r\n isSaveButtonDisabled: boolean = false;\r\n \r\n /**\r\n * Tracks whether there are unsaved changes in the document upload form\r\n */\r\n hasUnsavedChanges: boolean = false;\r\n \r\n constructor(private documentQuery: DocumentQuery, private documentHelperService: DocumentHelperService) {}\r\n\r\n ngOnInit(): void {\r\n this.documentQuery.selectShowUserList().subscribe(show => {\r\n this.showUserList = show;\r\n this.userListAnimationState = show ? SHARED.VISIBLE : SHARED.HIDDEN;\r\n });\r\n }\r\n\r\n /**\r\n * Called when the view is initialized to set up the save button state\r\n */\r\n ngAfterViewInit(): void {\r\n this.updateSaveButtonState();\r\n }\r\n\r\n /**\r\n * Updates the save button disabled state based on the document upload component\r\n */\r\n updateSaveButtonState(): void {\r\n if (this.documentUploadComponent) {\r\n this.isSaveButtonDisabled = this.documentUploadComponent.getSaveButtonDisabled();\r\n }\r\n }\r\n\r\n /**\r\n * Handles form validation changes from the document upload component\r\n */\r\n onFormValidationChange(): void {\r\n this.updateSaveButtonState();\r\n // Check if there are actual unsaved changes\r\n this.checkForUnsavedChanges();\r\n }\r\n\r\n /**\r\n * Checks if there are unsaved changes in the document upload form\r\n */\r\n private checkForUnsavedChanges(): void {\r\n if (this.documentUploadComponent) {\r\n // Check if files are uploaded or form has changes\r\n const hasFiles = Boolean(this.documentUploadComponent.uploadedFiles && this.documentUploadComponent.uploadedFiles.length > 0);\r\n const hasFormChanges = Boolean(\r\n (this.documentUploadComponent.selectedAssignmentType && this.documentUploadComponent.selectedAssignmentType !== SHARED.EMPTY) || \r\n (this.documentUploadComponent.selectedApplicant && this.documentUploadComponent.selectedApplicant !== SHARED.EMPTY) || \r\n (this.documentUploadComponent.selectedCategory && this.documentUploadComponent.selectedCategory !== SHARED.EMPTY) || \r\n (this.documentUploadComponent.selectedDocumentType && this.documentUploadComponent.selectedDocumentType !== SHARED.EMPTY)\r\n );\r\n \r\n this.hasUnsavedChanges = hasFiles || hasFormChanges;\r\n }\r\n }\r\n\r\n /**\r\n * Opens the document upload sidebar\r\n */\r\n openDocumentUploadSidebar(): void {\r\n this.isDocumentUploadSidebarOpen = true;\r\n this.hasUnsavedChanges = false; // Reset when opening\r\n }\r\n\r\n /**\r\n * Handles the document upload sidebar hide event\r\n */\r\n onDocumentUploadSidebarHide(): void {\r\n this.isDocumentUploadSidebarOpen = false;\r\n this.hasUnsavedChanges = false;\r\n if (this.documentUploadComponent) {\r\n this.documentUploadComponent.resetForm();\r\n }\r\n }\r\n\r\n /**\r\n * Handles the document upload sidebar close event (when close button is clicked or sidebar is dismissed)\r\n */\r\n onDocumentUploadSidebarClose(): void {\r\n this.isDocumentUploadSidebarOpen = false;\r\n this.hasUnsavedChanges = false;\r\n if (this.documentUploadComponent) {\r\n this.documentUploadComponent.resetForm();\r\n }\r\n }\r\n\r\n /**\r\n * Handles the document upload sidebar close with unsaved changes event\r\n */\r\n onDocumentUploadSidebarCloseWithUnsavedChanges(): void {\r\n this.isDocumentUploadSidebarOpen = false;\r\n this.hasUnsavedChanges = false;\r\n if (this.documentUploadComponent) {\r\n this.documentUploadComponent.resetForm();\r\n }\r\n }\r\n\r\n /**\r\n * Handles the document upload save event\r\n */\r\n onDocumentUploadSave(): void {\r\n if (this.documentUploadComponent) {\r\n this.documentUploadComponent.saveDocumentUpload();\r\n this.updateSaveButtonState();\r\n }\r\n }\r\n\r\n /**\r\n * Handles successful document upload and refreshes data\r\n */\r\n onDocumentUploadSuccess(): void {\r\n this.documentHelperService.refreshAllDataWithCurrentFilters(this.contextId);\r\n this.hasUnsavedChanges = false; // Reset after successful upload\r\n if (this.sidebarComponent) {\r\n this.sidebarComponent.showSuccess();\r\n }\r\n }\r\n\r\n /**\r\n * Handles document upload error\r\n */\r\n onDocumentUploadError(error: any): void {\r\n if (this.sidebarComponent) {\r\n const errorMessage = error?.message || SHARED.UPLOAD_FAILED;\r\n this.sidebarComponent.showError(errorMessage);\r\n }\r\n }\r\n\r\n \r\n}\r\n","\r\n<document-search [contextId]=\"contextId\" (onActionClick)=\"openDocumentUploadSidebar()\"></document-search>\r\n<div class=\"user-list-wrapper\" [@slideInOut]=\"userListAnimationState\">\r\n <lib-user-list [userList]=\"userList\" [categories]=\"categories\"></lib-user-list>\r\n</div>\r\n<lib-document-status [contextId]=\"contextId\" [statusData]=\"statusData\"></lib-document-status>\r\n\r\n<!-- Document Upload Sidebar -->\r\n<lib-sidebar\r\n [(visible)]=\"isDocumentUploadSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Upload Documents\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isSaveButtonDisabled\"\r\n [successMessage]=\"'Document Saved Successfully'\"\r\n [hasUnsavedChanges]=\"hasUnsavedChanges\"\r\n (onHide)=\"onDocumentUploadSidebarHide()\"\r\n (onSave)=\"onDocumentUploadSave()\"\r\n (onDiscardChanges)=\"onDocumentUploadSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-document-upload \r\n [contextId]=\"contextId\" \r\n (onFormValidationChange)=\"onFormValidationChange()\" \r\n (onUploadSuccess)=\"onDocumentUploadSuccess()\"\r\n (onUploadError)=\"onDocumentUploadError($event)\"\r\n ></lib-document-upload>\r\n</lib-sidebar>","\r\n/**\r\n * Storing all permission properties.\r\n * @export\r\n * @class PERMISSIONS\r\n * @typedef {PERMISSIONS}\r\n */\r\nexport class PERMISSIONS{\r\n \r\n/**\r\n * Access permission.\r\n * @static\r\n * @type {string}\r\n */\r\nstatic DOCUMENT_POST = 'Documents-POST'\r\nstatic DOCUMENT_DELETE = 'documents-deleteDocumentByDocumentId'\r\n}","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { SHARED } from '../constant/SHARED';\r\n\r\n/**\r\n * Service for managing user session details.\r\n * @class SessionService\r\n * @typedef {SessionService}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SessionService {\r\n\r\n /**\r\n * Creates an instance of SessionService.\r\n * @param {Router} router - Angular Router for navigation.\r\n */\r\n constructor(public router: Router) {}\r\n\r\n /**\r\n * Retrieves the current user's role from local storage.\r\n * @returns {string | null} The user's role, or null if not found.\r\n */\r\n getUserRole(): string | null {\r\n return localStorage.getItem('role');\r\n }\r\n\r\n /**\r\n * Stores the user session data in local storage.\r\n * @param {any} data - The session data to store.\r\n */\r\n setUserSession(data: any): void {\r\n localStorage.setItem(SHARED.SESSIONKEY, JSON.stringify(data));\r\n }\r\n\r\n /**\r\n * Retrieves the stored user session data.\r\n * @returns {any | null} The parsed session data, or null if not found.\r\n */\r\n getUserSession(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n return sessionData ? JSON.parse(sessionData) : null;\r\n }\r\n\r\n /**\r\n * Retrieves the user's permissions from the stored session data.\r\n * @returns {any | null} The user's permissions, or null if not found.\r\n */\r\n getUserPermissions(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n return sessionData ? JSON.parse(sessionData).permissions : null;\r\n }\r\n\r\n /**\r\n * Retrieves the session ID from the stored session data.\r\n * @returns {any | null} The session ID, or null if not found.\r\n */\r\n getSessionID(): any | null {\r\n const sessionData = localStorage.getItem(SHARED.SESSIONKEY);\r\n console.log(sessionData);\r\n if (sessionData) {\r\n const sessionId = JSON.parse(sessionData);\r\n console.log(sessionId);\r\n return sessionId;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Clears all stored session data from local storage.\r\n */\r\n clearSession(): void {\r\n localStorage.clear();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DocumentListResponse, DocumentListItem } from '../models/document-list-response.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { PERMISSIONS } from '../../../Shared/constant/PERMISSIONS';\r\nimport { TableData } from '../../../Shared/components/table-primary/table-primary.model';\r\nimport { SessionService } from '../../../Shared/services/session.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentTableBuilderService {\r\n\r\n constructor(private sessionService: SessionService) { }\r\n\r\n /**\r\n * Builds a single table from document list items\r\n * @param documents Array of document list items\r\n * @returns TableData object\r\n */\r\n buildDocumentTable(documents: DocumentListItem[]): TableData {\r\n const userPermissionsObjects = this.sessionService.getUserPermissions();\r\n const userPermissionNames = userPermissionsObjects?.map((perm: any) => perm.name) || [];\r\n const hasDeletePermission = userPermissionNames.includes(PERMISSIONS.DOCUMENT_DELETE);\r\n const columns = SHARED.DOCUMENT_TABLE_COLUMNS.filter(col => {\r\n // Always include non-action columns\r\n if (col.type !== SHARED.ACTIONS) {\r\n return true;\r\n }\r\n // Only include action column if user has delete permission\r\n return hasDeletePermission;\r\n });\r\n\r\n return {\r\n columns: columns,\r\n data: documents\r\n };\r\n }\r\n\r\n /**\r\n * Gets completion count for a category\r\n * @param category Document category\r\n * @returns Completion string (e.g., \"2/4\")\r\n */\r\n getCompletionCount(category: DocumentListResponse): string {\r\n const total = category.list.length;\r\n const completed = category.list.filter(doc => \r\n doc.status.toLowerCase() === SHARED.APPROVED || \r\n doc.status.toLowerCase() === SHARED.UPLOADED\r\n ).length;\r\n return `${completed}/${total}`;\r\n }\r\n\r\n /**\r\n * Gets pending document count for a category\r\n * @param category Document category\r\n * @returns Number of pending documents\r\n */\r\n getPendingDocumentCount(category: DocumentListResponse): number {\r\n return category.totalDocs - category.acceptedDocs;\r\n }\r\n\r\n /**\r\n * Gets approved document count for a category\r\n * @param category Document category\r\n * @returns Number of approved documents\r\n */\r\n getApprovedDocumentCount(category: DocumentListResponse): number {\r\n return category.acceptedDocs;\r\n }\r\n\r\n /**\r\n * Transforms document model to document list item\r\n * @param documents Array of DocumentModel\r\n * @returns Array of DocumentListItem\r\n */\r\n transformDocumentModelToListItem(documents: any[]): DocumentListItem[] {\r\n return documents.map(doc => ({\r\n _id: doc._id || SHARED.EMPTY,\r\n fileName: doc.fileName || SHARED.EMPTY,\r\n docName: doc.docName || doc.documentName || SHARED.EMPTY,\r\n fileSize: doc.fileSize || SHARED.EMPTY,\r\n documentUrl: doc.documentUrl || doc.url || SHARED.EMPTY,\r\n status: doc.status || SHARED.PENDING,\r\n uploadedOn: doc.uploadedOn || doc.uploadDate || SHARED.EMPTY,\r\n ownerName: doc.ownerName || doc.applicantName || SHARED.EMPTY,\r\n contentType: doc.contentType || SHARED.EMPTY,\r\n isUploaded: doc.isUploaded || false\r\n }));\r\n }\r\n} ","import { Injectable } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { DocumentUploadService } from './document-upload.service';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { DocumentQuery } from '../state/document.query';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentTableBuilderService } from './document-table-builder.service';\r\nimport { DocumentHelperService } from './document.service';\r\nimport { DocumentListItem, DocumentListResponse } from '../models/document-list-response.model';\r\nimport { TableData } from '../../../Shared/components/table-primary/table-primary.model';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { ERRORS } from '../../../Shared/constant/ERROR';\r\nimport { Message } from 'primeng/api';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentListService {\r\n\r\n constructor(\r\n private documentUploadService: DocumentUploadService,\r\n private documentHttpService: DocumentHttpService,\r\n private documentQuery: DocumentQuery,\r\n private documentStore: DocumentStore,\r\n private documentTableBuilder: DocumentTableBuilderService,\r\n private documentHelperService: DocumentHelperService\r\n ) {}\r\n\r\n /**\r\n * Handle file upload click event\r\n */\r\n handleFileUploadClick(): void {\r\n this.documentStore.setMessage(SHARED.EMPTY_ARRAY);\r\n }\r\n\r\n /**\r\n * Handle save click to update document name\r\n */\r\n handleSaveClick(fileName: string, selectedDocument: DocumentListItem): Observable<any> {\r\n const payload = { fileName };\r\n return this.documentHttpService.updateDocumentName(selectedDocument._id, payload);\r\n }\r\n\r\n\r\n /**\r\n * Get completion count for a category\r\n */\r\n getCompletionCount(category: DocumentListResponse): string {\r\n return this.documentTableBuilder.getCompletionCount(category);\r\n }\r\n\r\n /**\r\n * Get pending document count for a category\r\n */\r\n getPendingDocumentCount(category: DocumentListResponse): number {\r\n return this.documentTableBuilder.getPendingDocumentCount(category);\r\n }\r\n\r\n /**\r\n * Get approved document count for a category\r\n */\r\n getApprovedDocumentCount(category: DocumentListResponse): number {\r\n return this.documentTableBuilder.getApprovedDocumentCount(category);\r\n }\r\n\r\n /**\r\n * Build document categories from API response\r\n */\r\n buildDocumentCategories(documentListResponse: DocumentListResponse[] | null): {\r\n documentCategories: DocumentListResponse[];\r\n categoryTables: TableData[];\r\n categoryCompletionCounts: string[];\r\n } {\r\n if (!documentListResponse) {\r\n return {\r\n documentCategories: SHARED.EMPTY_ARRAY,\r\n categoryTables: SHARED.EMPTY_ARRAY,\r\n categoryCompletionCounts: SHARED.EMPTY_ARRAY\r\n };\r\n }\r\n\r\n // Handle empty response - create a default category to show \"No records found\"\r\n if (documentListResponse.length === 0) {\r\n const defaultCategory = {\r\n label: SHARED.EMPTY,\r\n categoryDescription: SHARED.NO_DOCUMENTS_FOUND,\r\n list: SHARED.EMPTY_ARRAY,\r\n totalDocs: 0,\r\n acceptedDocs: 0,\r\n completed: '0/0'\r\n };\r\n \r\n return {\r\n documentCategories: [defaultCategory],\r\n categoryTables: [this.documentTableBuilder.buildDocumentTable([])],\r\n categoryCompletionCounts: ['0/0']\r\n };\r\n }\r\n\r\n const documentCategories = [...documentListResponse];\r\n const categoryTables = documentListResponse.map(category => \r\n this.documentTableBuilder.buildDocumentTable(category.list)\r\n );\r\n const categoryCompletionCounts = documentListResponse.map(category => \r\n this.getCompletionCount(category)\r\n );\r\n\r\n return {\r\n documentCategories,\r\n categoryTables,\r\n categoryCompletionCounts\r\n };\r\n }\r\n\r\n /**\r\n * Handle table row click\r\n */\r\n handleTableRowClick(rowData: any): DocumentListItem {\r\n return rowData;\r\n }\r\n\r\n /**\r\n * Handle delete action\r\n */\r\n handleDeleteAction(rowData: any, contextId: string): Observable<any> {\r\n if (!rowData._id || !contextId) {\r\n return throwError(() => new Error('Missing required parameters for delete'));\r\n }\r\n\r\n return this.documentHttpService.deleteDocument(rowData._id, contextId);\r\n }\r\n\r\n /**\r\n * Refresh document list for new context\r\n */\r\n refreshDocumentListForNewContext(contextId: string): void {\r\n if (contextId && contextId !== SHARED.EMPTY) {\r\n // Clear current document list response\r\n this.documentStore.setDocumentListResponse(null);\r\n \r\n // Refresh documents for the new context\r\n this.documentHelperService.refreshDocumentsWithoutFilters(contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Refresh document list after status update\r\n */\r\n refreshDocumentList(contextId: string): void {\r\n if (contextId) {\r\n this.documentHelperService.refreshDocumentsWithCurrentSelection(contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Setup subscription to document list response\r\n */\r\n setupDocumentListSubscription(): Observable<DocumentListResponse[] | null> {\r\n return this.documentQuery.selectDocumentListResponse();\r\n }\r\n\r\n /**\r\n * Refresh all data with current filters\r\n */\r\n refreshAllDataWithCurrentFilters(contextId: string): void {\r\n this.documentHelperService.refreshAllDataWithCurrentFilters(contextId);\r\n }\r\n} ","import { Directive, Input, ElementRef, Renderer2, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { SessionService } from '../../../Shared/services/session.service';\r\n\r\n/**\r\n * Directive to conditionally show or hide elements based on user permissions.\r\n * @class HasPermissionDirective\r\n * @typedef {HasPermissionDirective}\r\n */\r\n@Directive({\r\n selector: '[permission]',\r\n standalone: false\r\n})\r\nexport class HasPermissionDirective implements OnChanges {\r\n \r\n /**\r\n * The required permission(s) to display the element.\r\n * Accepts a single string or an array of strings.\r\n * @type {string | string[]}\r\n */\r\n @Input() permission?: string | string[];\r\n\r\n /**\r\n * Creates an instance of HasPermissionDirective.\r\n * @param {ElementRef} el - Reference to the host element.\r\n * @param {Renderer2} renderer - Angular Renderer for DOM manipulation.\r\n * @param {SessionService} sessionService - Service to retrieve user permissions.\r\n */\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n public sessionService: SessionService\r\n ) {}\r\n\r\n /**\r\n * Lifecycle hook that is called when input properties change.\r\n * @param {SimpleChanges} changes - The changes in input properties.\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['permission']) {\r\n this.checkPermission();\r\n }\r\n }\r\n\r\n /**\r\n * Checks if the user has the required permission(s).\r\n * Hides the element if the permission is not found.\r\n */\r\n private checkPermission() {\r\n // If no permission is required (empty string, null, or undefined), show the element\r\n if (!this.permission || this.permission === '' || (Array.isArray(this.permission) && this.permission.length === 0)) {\r\n this.renderer.removeStyle(this.el.nativeElement, 'display');\r\n return;\r\n }\r\n\r\n const userPermissionsObjects = this.sessionService.getUserPermissions();\r\n const userPermissionNames = userPermissionsObjects?.map((perm: any) => perm.name) || [];\r\n\r\n const requiredPermissions = Array.isArray(this.permission)\r\n ? this.permission\r\n : [this.permission];\r\n\r\n const hasPermission = requiredPermissions.some(permission =>\r\n userPermissionNames.includes(permission)\r\n );\r\n\r\n if (!hasPermission) {\r\n this.renderer.setStyle(this.el.nativeElement, 'display', 'none');\r\n } else {\r\n this.renderer.removeStyle(this.el.nativeElement, 'display');\r\n }\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { SHARED } from '../../constant/SHARED';\r\nimport { ProcessedRowData, TableData } from './table-primary.model';\r\n\r\n@Component({\r\n selector: 'lib-table-primary',\r\n standalone: false,\r\n templateUrl: './table-primary.component.html',\r\n styleUrl: './table-primary.component.scss'\r\n})\r\nexport class TablePrimaryComponent implements OnChanges {\r\n @Input() tableData: TableData = { columns: [], data: [] };\r\n @Input() showHeader: boolean = true;\r\n @Input() tableStyle: any = { 'min-width': '100%' };\r\n @Output() rowClick = new EventEmitter<any>();\r\n @Output() deleteAction = new EventEmitter<any>();\r\n\r\n processedData: ProcessedRowData[] = [];\r\n \r\n // Expose SHARED constants for template use\r\n readonly SHARED = SHARED;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['tableData'] && this.tableData) {\r\n this.processTableData();\r\n }\r\n }\r\n\r\n private processTableData(): void {\r\n this.processedData = this.tableData.data.map(rowData => {\r\n const processedRow: ProcessedRowData = { ...rowData };\r\n if (rowData.fileName) {\r\n processedRow._fileExtension = this.getFileExtension(rowData.fileName);\r\n processedRow._isPdfFile = processedRow._fileExtension === SHARED.PDF;\r\n processedRow._isImageFile = processedRow._fileExtension === SHARED.JPG || processedRow._fileExtension === SHARED.PNG;\r\n processedRow._isExcelFile = processedRow._fileExtension === SHARED.XLSX;\r\n processedRow._isOtherFile = !processedRow._isPdfFile && !processedRow._isImageFile && !processedRow._isExcelFile;\r\n }\r\n\r\n this.tableData.columns.forEach(col => {\r\n if (col.type === SHARED.STATUS_PARAM && rowData[col.field]) {\r\n const status = rowData[col.field];\r\n processedRow._statusClass = this.getStatusClass(status);\r\n processedRow._statusIcon = this.getStatusIcon(status);\r\n }\r\n });\r\n\r\n return processedRow;\r\n });\r\n }\r\n\r\n getStatusClass(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.PENDING_STATUS:\r\n return SHARED.STATUS_PENDING_CLASS;\r\n case SHARED.APPROVED_STATUS:\r\n return SHARED.STATUS_APPROVED_CLASS;\r\n case SHARED.ALERT_STATUS:\r\n return SHARED.STATUS_ALERT_CLASS;\r\n case SHARED.UPLOADED_STATUS:\r\n return SHARED.STATUS_UPLOADED_CLASS;\r\n case SHARED.REVIEWING_STATUS:\r\n return SHARED.STATUS_REVIEWING_CLASS;\r\n case SHARED.REJECTED_STATUS:\r\n return SHARED.STATUS_REJECTED_CLASS;\r\n default:\r\n return SHARED.STATUS_PENDING_CLASS;\r\n }\r\n }\r\n\r\n getStatusIcon(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case SHARED.PENDING_STATUS:\r\n return SHARED.ICON_CLOCK;\r\n case SHARED.APPROVED_STATUS:\r\n return SHARED.ICON_CHECK;\r\n case SHARED.ALERT_STATUS:\r\n return SHARED.ICON_EXCLAMATION_TRIANGLE;\r\n case SHARED.UPLOADED_STATUS:\r\n return SHARED.ICON_CLOUD_UPLOAD;\r\n case SHARED.REVIEWING_STATUS:\r\n return SHARED.ICON_EYE;\r\n case SHARED.REJECTED_STATUS:\r\n return SHARED.ICON_TIMES;\r\n default:\r\n return SHARED.ICON_CLOCK;\r\n }\r\n }\r\n\r\n getFileExtension(fileName: string): string {\r\n return fileName.split(SHARED.DOT).pop()?.toUpperCase() || SHARED.PDF;\r\n }\r\n\r\n onActionClick(event: Event, rowData: any): void {\r\n event.stopPropagation();\r\n this.deleteAction.emit(rowData);\r\n }\r\n\r\n onRowClick(rowData: any): void {\r\n this.rowClick.emit(rowData);\r\n }\r\n}\r\n","<div class=\"card\">\r\n <p-table [value]=\"processedData\" [tableStyle]=\"tableStyle\">\r\n <ng-template pTemplate=\"header\" *ngIf=\"showHeader\">\r\n <tr>\r\n <th *ngFor=\"let col of tableData.columns\" [style.width]=\"col.width\">\r\n {{ col.header }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr (click)=\"onRowClick(rowData)\" class=\"clickable-row\">\r\n <td *ngFor=\"let col of tableData.columns\" [style.width]=\"col.width\">\r\n <!-- Document Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_DOCUMENT\" class=\"document-cell\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i [class]=\"SHARED.ICON_FILE_PDF\" *ngIf=\"rowData._isPdfFile\"></i>\r\n <i [class]=\"SHARED.ICON_IMAGE\" *ngIf=\"rowData._isImageFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE_EXCEL\" *ngIf=\"rowData._isExcelFile\"></i>\r\n <i [class]=\"SHARED.ICON_FILE\" *ngIf=\"rowData._isOtherFile\"></i>\r\n </div>\r\n <div class=\"document-details\">\r\n <div class=\"document-name\">{{ rowData.docName }}</div>\r\n <div class=\"file-info\">{{ rowData.fileName }} - {{ rowData.fileSize }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Status Cell -->\r\n \r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_STATUS\" class=\"status-cell\">\r\n <span class=\"status-pill\" [ngClass]=\"rowData._statusClass\">\r\n <i [class]=\"rowData._statusIcon\"></i>\r\n {{ rowData[col.field] }}\r\n </span>\r\n </div>\r\n\r\n <!-- Actions Cell -->\r\n <div *ngIf=\"col.type === SHARED.CELL_TYPE_ACTIONS\" class=\"actions-cell\">\r\n @if(rowData.isUploaded){\r\n <button pButton pRipple type=\"button\" [icon]=\"SHARED.ICON_DELETE\" \r\n class=\"p-button-text p-button-rounded\" \r\n [permission]=\"'documents-deleteDocumentByDocumentId'\"\r\n (click)=\"onActionClick($event, rowData)\">\r\n </button>\r\n } \r\n </div>\r\n\r\n <!-- Default Text Cell -->\r\n <div *ngIf=\"!col.type || col.type === SHARED.CELL_TYPE_TEXT\" class=\"text-cell\">\r\n {{ rowData[col.field] }}\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n \r\n <!-- No Records Template -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"tableData.columns.length\" class=\"no-records-cell\">\r\n <div class=\"no-records-content\">\r\n <i class=\"pi pi-inbox\" style=\"font-size: 2rem; color: #6c757d;\"></i>\r\n <p class=\"no-records-text\">No records found</p>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DocumentHttpService } from './document-http.service';\r\nimport { DocumentHelperService } from './document.service';\r\nimport { DocumentListItem } from '../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../models/document-history.model';\r\nimport { DocumentAction } from './document-actions.service';\r\nimport { DocumentAlertList, SHARED, SUPPORTED_IMAGE_TYPES } from '../../../Shared/constant/SHARED';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { DocumentQuery } from '../state/document.query';\r\n\r\nexport interface DocumentViewerState {\r\n selectedDocument?: DocumentListItem;\r\n documentHistory: DocumentHistorySection[];\r\n showDocumentHistory: boolean;\r\n isActionLoading: boolean;\r\n documentStatus: 'pending' | 'accepted' | 'rejected';\r\n documentIsUploaded: boolean;\r\n alertData: any;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentViewerService {\r\n constructor(\r\n private documentHttpService: DocumentHttpService,\r\n private documentService: DocumentHelperService,\r\n private messageService: MessageService,\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery\r\n ) {}\r\n\r\n /**\r\n * Gets the current document viewer state as an observable\r\n */\r\n get state$(): Observable<DocumentViewerState> {\r\n return this.documentQuery.selectDocumentViewerState();\r\n }\r\n\r\n /**\r\n * Gets the current document viewer state synchronously\r\n */\r\n getCurrentState(): DocumentViewerState {\r\n return this.documentQuery.getDocumentViewerState();\r\n }\r\n\r\n /**\r\n * Updates the selected document and recalculates all computed properties\r\n * @param document The selected document\r\n */\r\n updateSelectedDocument(document: DocumentListItem): void {\r\n this.documentService.set(document);\r\n const alertData = this.getAlertData(document);\r\n const documentStatus = this.calculateDocumentStatus(document);\r\n const documentIsUploaded = this.calculateIsDocumentUploaded(document);\r\n\r\n this.documentStore.updateDocumentViewerState(\r\n document,\r\n undefined, \r\n undefined,\r\n undefined,\r\n documentStatus,\r\n documentIsUploaded,\r\n alertData\r\n );\r\n\r\n this.loadDocumentHistory(document._id);\r\n }\r\n\r\n /**\r\n * Loads document history data\r\n * @param documentId The document ID\r\n */\r\n loadDocumentHistory(documentId: string): void {\r\n if (documentId) {\r\n this.documentHttpService.getDocumentHistory(documentId)\r\n .subscribe({\r\n next: (history) => {\r\n this.documentStore.updateDocumentViewerState(\r\n undefined,\r\n history,\r\n true\r\n );\r\n },\r\n error: (error) => {\r\n this.documentStore.updateDocumentViewerState(\r\n undefined,\r\n undefined,\r\n false\r\n );\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Determines if the given content type is an image\r\n * @param contentType The MIME type of the content\r\n * @returns True if the content type is an image\r\n */\r\n isImage(contentType?: string): boolean {\r\n return contentType ? SUPPORTED_IMAGE_TYPES.includes(contentType) : false;\r\n }\r\n\r\n /**\r\n * Handles document actions and updates status\r\n * @param action The action performed\r\n * @param contextId The context ID for API calls\r\n */\r\n handleDocumentAction(action: DocumentAction, contextId?: string): void {\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (!currentState.selectedDocument?._id) {\r\n console.error('No document ID available');\r\n return;\r\n }\r\n\r\n switch (action.type) {\r\n case SHARED.ACCEPT_ACTION:\r\n this.updateDocumentStatus(SHARED.STATUS_APPROVED, action.note || SHARED.DOCUMENT_ACCEPTED_MESSAGE, contextId);\r\n break;\r\n case SHARED.REJECT_ACTION:\r\n this.updateDocumentStatus(SHARED.STATUS_REJECTED, action.note || SHARED.DOCUMENT_REJECTED_MESSAGE, contextId);\r\n break;\r\n case SHARED.DELETE_ACTION:\r\n this.deleteDocument(currentState.selectedDocument._id, contextId);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the document status via API call and refreshes all related data\r\n * @param status The new status (Approved, Rejected)\r\n * @param description The status update description\r\n * @param contextId The context ID for API calls\r\n */\r\n private updateDocumentStatus(status: string, description: string, contextId?: string): void {\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (!currentState.selectedDocument?._id) {\r\n console.error('No document ID available');\r\n return;\r\n }\r\n\r\n this.documentStore.setIsActionLoading(true);\r\n\r\n this.documentHttpService.updateDocumentStatus(\r\n currentState.selectedDocument._id,\r\n status,\r\n description\r\n ).subscribe({\r\n next: (response) => {\r\n if (currentState.selectedDocument && response.status) {\r\n const normalizedStatus = response.normalizedStatus || response.status.toLowerCase();\r\n const updatedDocument = {\r\n ...currentState.selectedDocument,\r\n status: normalizedStatus\r\n };\r\n \r\n this.updateSelectedDocument(updatedDocument);\r\n }\r\n this.refreshAllData(contextId);\r\n },\r\n error: (error) => {\r\n console.error('Error updating document status:', error);\r\n },\r\n complete: () => {\r\n this.documentStore.setIsActionLoading(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Deletes a document and refreshes all data while preserving current filters\r\n * @param documentId The ID of the document to delete\r\n * @param contextId The context ID for API calls\r\n */\r\n private deleteDocument(documentId: string, contextId?: string): void {\r\n if (!contextId) {\r\n console.error('No context ID available for delete operation');\r\n return;\r\n }\r\n\r\n this.documentStore.setIsActionLoading(true);\r\n\r\n this.documentHttpService.deleteDocument(documentId, contextId).subscribe({\r\n next: (res:any) => {\r\n if(res){\r\n this.documentService.refreshAllDataWithCurrentFilters(contextId);\r\n this.documentStore.clearDocumentViewerState();\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Error deleting document:', error);\r\n this.documentStore.setIsActionLoading(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Refreshes all related data after document status update\r\n * @param contextId The context ID for API calls\r\n */\r\n private refreshAllData(contextId?: string): void {\r\n if (!contextId) {\r\n console.error('No context ID available for data refresh');\r\n return;\r\n }\r\n\r\n const currentState = this.documentQuery.getDocumentViewerState();\r\n if (currentState.selectedDocument?._id) {\r\n this.loadDocumentHistory(currentState.selectedDocument._id);\r\n }\r\n\r\n // Use the same refresh method as other components for consistency\r\n this.documentService.refreshAllDataWithCurrentFilters(contextId);\r\n }\r\n\r\n /**\r\n * Gets alert data for the document\r\n * @param document The document\r\n * @returns Alert data\r\n */\r\n private getAlertData(document: DocumentListItem): any {\r\n return DocumentAlertList.find((res: any) => res.status === document?.status);\r\n }\r\n\r\n /**\r\n * Calculates the current status of the document for the actions component\r\n * @param document The document\r\n * @returns The current document status\r\n */\r\n private calculateDocumentStatus(document: DocumentListItem): 'pending' | 'accepted' | 'rejected' {\r\n if (!document) return SHARED.STATUS_PENDING as 'pending';\r\n \r\n // First check statusId from API response if available\r\n if (document.statusId) {\r\n switch (document.statusId.toLowerCase()) {\r\n case SHARED.STATUS_APPROVED.toLowerCase():\r\n return SHARED.STATUS_ACCEPTED as 'accepted';\r\n case SHARED.STATUS_REJECTED.toLowerCase():\r\n return SHARED.STATUS_REJECTED_LOWERCASE as 'rejected';\r\n case SHARED.STATUS_PENDING:\r\n return SHARED.STATUS_PENDING as 'pending';\r\n }\r\n }\r\n \r\n // Fall back to status field mapping\r\n switch (document.status?.toLowerCase()) {\r\n case SHARED.STATUS_APPROVED.toLowerCase():\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.STATUS_ACCEPTED as 'accepted';\r\n case SHARED.STATUS_REJECTED.toLowerCase():\r\n case SHARED.STATUS_DECLINED:\r\n return SHARED.STATUS_REJECTED_LOWERCASE as 'rejected';\r\n default:\r\n return SHARED.STATUS_PENDING as 'pending';\r\n }\r\n }\r\n\r\n /**\r\n * Calculates if the document is uploaded and ready for actions\r\n * @param document The document\r\n * @returns True if document is uploaded\r\n */\r\n private calculateIsDocumentUploaded(document: DocumentListItem): boolean {\r\n if (!document) return false;\r\n \r\n // Check if document has a URL and is not in a pending state\r\n const isPending = document.statusId?.toLowerCase() === SHARED.STATUS_PENDING || \r\n document.status?.toLowerCase() === SHARED.STATUS_PENDING;\r\n \r\n return !!(document.documentUrl && !isPending);\r\n }\r\n} ","/**\r\n * Constants for Document History labels and styling\r\n */\r\nexport const DOCUMENT_HISTORY = {\r\n // Document History Labels\r\n LABELS: {\r\n DOCUMENT_REQUESTED: 'Document Requested',\r\n DOCUMENT_UPLOADED: 'Document Uploaded',\r\n DOCUMENT_REJECTED: 'Document Rejected',\r\n DOCUMENT_ACCEPTED: 'Document Accepted'\r\n },\r\n\r\n // Icon classes for different actions\r\n ICONS: {\r\n DOCUMENT_REQUESTED: 'pi pi-file',\r\n DOCUMENT_UPLOADED: 'pi pi-cloud-upload',\r\n DOCUMENT_REJECTED: 'pi pi-times',\r\n DOCUMENT_ACCEPTED: 'pi pi-check'\r\n },\r\n\r\n // Text color classes - matching the design in the image\r\n TEXT_COLORS: {\r\n DOCUMENT_REQUESTED: 'text-gray-700', // Dark gray for better readability\r\n DOCUMENT_UPLOADED: 'text-green-700', // Dark green for uploaded\r\n DOCUMENT_REJECTED: 'text-red-700', // Dark red for rejected\r\n DOCUMENT_ACCEPTED: 'text-green-700' // Dark green for accepted\r\n },\r\n\r\n // Background color classes - matching the light gray design from image\r\n BG_COLORS: {\r\n DOCUMENT_REQUESTED: 'bg-gray-100', // Light gray like in the image\r\n DOCUMENT_UPLOADED: 'bg-green-50', // Very light green\r\n DOCUMENT_REJECTED: 'bg-red-50', // Very light red\r\n DOCUMENT_ACCEPTED: 'bg-green-50' // Very light green\r\n },\r\n\r\n // Border color classes - subtle borders\r\n BORDER_COLORS: {\r\n DOCUMENT_REQUESTED: 'border-gray-300', // Medium gray border\r\n DOCUMENT_UPLOADED: 'border-green-300', // Light green border\r\n DOCUMENT_REJECTED: 'border-red-300', // Light red border\r\n DOCUMENT_ACCEPTED: 'border-green-300' // Light green border\r\n },\r\n\r\n // Icon background color classes - matching the circular icon design\r\n ICON_BG_COLORS: {\r\n DOCUMENT_REQUESTED: 'icon-bg-blue', // Blue for requested (as shown in image)\r\n DOCUMENT_UPLOADED: 'icon-bg-green', // Green for uploaded\r\n DOCUMENT_REJECTED: 'icon-bg-red', // Red for rejected\r\n DOCUMENT_ACCEPTED: 'icon-bg-green' // Green for accepted\r\n }\r\n}; ","import { Injectable } from '@angular/core';\r\nimport { DOCUMENT_HISTORY } from '../constant/DOCUMENT_HISTORY';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\n/**\r\n * Service for handling document history styling logic\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentHistoryStyleService {\r\n\r\n constructor() {}\r\n\r\n /**\r\n * Get the appropriate icon class based on the action label\r\n */\r\n getActionIcon(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.ICONS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate color class based on the action label\r\n */\r\n getActionColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.TEXT_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate background color class based on the action label\r\n */\r\n getActionBgColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.BG_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate border color class based on the action label\r\n */\r\n getActionBorderColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.BORDER_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Get the appropriate icon background color class based on the action label\r\n */\r\n getActionIconBgColor(label: string): string {\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REQUESTED;\r\n default:\r\n return DOCUMENT_HISTORY.ICON_BG_COLORS.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Check if a section has valid content to display\r\n */\r\n checkValidContent(section: any): boolean {\r\n return section.list && section.list.length > 0 && \r\n section.list.some((item:any) => \r\n item.label || \r\n item.requestDescription || \r\n item.documentUrl || \r\n item.userName\r\n );\r\n }\r\n\r\n getAccordionClass(section: any): string {\r\n if (!section.list || section.list.length === 0) {\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n\r\n const firstItem = section.list[0];\r\n const label = firstItem.label;\r\n\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return SHARED.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return SHARED.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return SHARED.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n default:\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n} ","import { Injectable } from '@angular/core';\r\nimport { DocumentHistoryItem, DocumentHistorySection } from '../models/document-history.model';\r\nimport { DocumentHistoryStyleService } from './document-history-style.service';\r\nimport { DOCUMENT_HISTORY } from '../constant/DOCUMENT_HISTORY';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\nimport { ERRORS } from '../../../Shared/constant/ERROR';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n// Extended interface for processed items with computed properties\r\ninterface ProcessedDocumentHistoryItem extends DocumentHistoryItem {\r\n actionIcon: string;\r\n actionColor: string;\r\n actionBgColor: string;\r\n actionBorderColor: string;\r\n actionIconBgColor: string;\r\n}\r\n\r\ninterface ProcessedDocumentHistorySection extends DocumentHistorySection {\r\n list: ProcessedDocumentHistoryItem[];\r\n accordionClass?: string;\r\n hasValidContent?: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentHistoryService {\r\n\r\n constructor(private documentHistoryStyleService: DocumentHistoryStyleService, private http : HttpClient) {}\r\n\r\n /**\r\n * Get the CSS class for accordion styling based on the section's label\r\n */\r\n private getAccordionClass(section: ProcessedDocumentHistorySection): string {\r\n if (!section.list || section.list.length === 0) {\r\n return SHARED.DOCUMENT_REQUESTED; // Default class\r\n }\r\n\r\n const firstItem = section.list[0];\r\n const label = firstItem.label;\r\n\r\n switch (label) {\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_UPLOADED:\r\n return SHARED.DOCUMENT_UPLOADED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REJECTED:\r\n return SHARED.DOCUMENT_REJECTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_ACCEPTED:\r\n return SHARED.DOCUMENT_ACCEPTED;\r\n case DOCUMENT_HISTORY.LABELS.DOCUMENT_REQUESTED:\r\n default:\r\n return SHARED.DOCUMENT_REQUESTED;\r\n }\r\n }\r\n\r\n /**\r\n * Check if a section has valid content to display\r\n */\r\n private checkValidContent(section: ProcessedDocumentHistorySection): boolean {\r\n return section.list && section.list.length > 0 && \r\n section.list.some(item => \r\n item.requestDescription !== SHARED.EMPTY && \r\n item.documentUrl !== SHARED.EMPTY && \r\n (item.userName !== SHARED.EMPTY && item.userName !== SHARED.UNKNOWN_USER)\r\n );\r\n }\r\n\r\n /**\r\n * Process history data to add computed properties\r\n */\r\n processHistoryData(historyData: DocumentHistorySection[]): ProcessedDocumentHistorySection[] {\r\n if (!historyData) {\r\n return SHARED.EMPTY_ARRAY;\r\n }\r\n\r\n return historyData.map(section => {\r\n const processedSection: ProcessedDocumentHistorySection = {\r\n ...section,\r\n list: section.list.map(item => ({\r\n ...item,\r\n dateTime: item.dateTime || ERRORS.NO_VALUE_FOUND,\r\n actionIcon: this.documentHistoryStyleService.getActionIcon(item.label),\r\n actionColor: this.documentHistoryStyleService.getActionColor(item.label),\r\n actionBgColor: this.documentHistoryStyleService.getActionBgColor(item.label),\r\n actionBorderColor: this.documentHistoryStyleService.getActionBorderColor(item.label),\r\n actionIconBgColor: this.documentHistoryStyleService.getActionIconBgColor(item.label)\r\n }))\r\n };\r\n\r\n // Add accordion class based on the first item's label\r\n processedSection.accordionClass = this.getAccordionClass(processedSection);\r\n \r\n // Add hasValidContent property\r\n processedSection.hasValidContent = this.checkValidContent(processedSection);\r\n\r\n return processedSection;\r\n });\r\n }\r\n\r\n /**\r\n * Downloads a document when clicked\r\n * @param documentUrl - The URL of the document to download\r\n * @param docName - The name of the document\r\n */\r\n downloadDocument(documentUrl: string, docName?: string): void {\r\n if (!documentUrl) {\r\n console.warn(ERRORS.NO_DOCUMENT_URL);\r\n return;\r\n }\r\n this.http.get(documentUrl, { responseType: 'blob' }).subscribe({\r\n next: (blob) => {\r\n const blobUrl = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = blobUrl;\r\n a.download = docName ?? SHARED.DOCUMENT;\r\n a.style.display = SHARED.NONE;\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n window.URL.revokeObjectURL(blobUrl);\r\n },\r\n error: (err) => {\r\n console.error(ERRORS.DOWNLOAD_FAIL, err);\r\n }\r\n });\r\n }\r\n} ","import { Component, Input } from '@angular/core';\nimport { DocumentHistorySection } from '../../models/document-history.model';\nimport { SHARED } from '../../../../Shared/constant/SHARED';\nimport { DocumentHistoryService } from '../../services/document-history.service';\n\n// Extended interface for processed items with computed properties\ninterface ProcessedDocumentHistoryItem {\n label: string;\n dateTime: string;\n requestDescription: string;\n userName: string;\n userRole: string;\n documentUrl?: string;\n docName?: string;\n actionIcon: string;\n actionColor: string;\n actionBgColor: string;\n actionBorderColor: string;\n actionIconBgColor: string;\n}\n\ninterface ProcessedDocumentHistorySection extends DocumentHistorySection {\n list: ProcessedDocumentHistoryItem[];\n accordionClass?: string;\n hasValidContent?: boolean;\n}\n\n/**\n * Component for displaying document history in a timeline format.\n */\n@Component({\n selector: 'document-history',\n standalone: false,\n templateUrl: './document-history.component.html',\n styleUrls: ['./document-history.component.scss']\n})\nexport class DocumentHistoryComponent {\n \n /**\n * Input data for document history sections\n */\n @Input() historyData: DocumentHistorySection[] = SHARED.EMPTY_ARRAY;\n \n /**\n * Whether to show the history component\n */\n @Input() showHistory: boolean = false;\n\n /**\n * Active accordion index for controlling expand/collapse\n */\n activeAccordionIndex: number = 0;\n\n /**\n * Whether the accordion is expanded\n */\n isAccordionExpanded: boolean = true;\n\n constructor(private documentHistoryService: DocumentHistoryService) {}\n\n /**\n * Handle accordion open event\n */\n onAccordionOpen(): void {\n this.isAccordionExpanded = true;\n this.activeAccordionIndex = 0;\n }\n\n /**\n * Handle accordion close event\n */\n onAccordionClose(): void {\n this.isAccordionExpanded = false;\n this.activeAccordionIndex = -1;\n }\n\n /**\n * Toggle accordion state\n */\n toggleAccordion(): void {\n if (this.isAccordionExpanded) {\n this.onAccordionClose();\n } else {\n this.onAccordionOpen();\n }\n }\n\n /**\n * Process history data to add computed properties\n */\n get processedHistoryData(): ProcessedDocumentHistorySection[] {\n return this.documentHistoryService.processHistoryData(this.historyData);\n }\n\n /**\n * Downloads a document when clicked\n * @param documentUrl - The URL of the document to download\n * @param docName - The name of the document\n */\n downloadDocument(documentUrl: string, docName?: string): void {\n this.documentHistoryService.downloadDocument(documentUrl, docName);\n }\n} ","<div class=\"document-history-container\" *ngIf=\"showHistory && historyData.length > 0\">\r\n <div class=\"history-sections\">\r\n <div class=\"history-section\" *ngFor=\"let section of processedHistoryData\">\r\n <div *ngIf=\"section.header === 'Initial Request' && section.hasValidContent\" \r\n class=\"initial-request-section\"\r\n [ngClass]=\"section.accordionClass\">\r\n <p-accordion [activeIndex]=\"activeAccordionIndex\" \r\n (onOpen)=\"onAccordionOpen()\" \r\n (onClose)=\"onAccordionClose()\">\r\n <p-accordionTab [header]=\"section.header\">\r\n <div class=\"history-timeline\" *ngIf=\"section.hasValidContent\">\r\n <div class=\"timeline-item\" *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-card\" [ngClass]=\"item.actionBgColor\">\r\n <div class=\"card-header\">\r\n <div class=\"action-info\">\r\n <div class=\"action-icon\" [ngClass]=\"item.actionIconBgColor\">\r\n <i [class]=\"item.actionIcon\"></i>\r\n </div>\r\n <span class=\"action-label\" [ngClass]=\"item.actionColor\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n <div class=\"timestamp\">\r\n {{ item.dateTime }}\r\n </div>\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"card-description\" *ngIf=\"item.requestDescription\">\r\n <p class=\"description-text\">{{ item.requestDescription ?? 'No Request' }}</p>\r\n </div>\r\n \r\n <!-- Document details if URL exists -->\r\n <div class=\"document-details\" *ngIf=\"item.documentUrl\">\r\n <div class=\"document-card\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <div class=\"document-text\">\r\n <div class=\"document-title\">Document</div>\r\n <div class=\"document-filename clickable\" \r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\"\r\n title=\"Click to download\">\r\n {{ item.docName || 'Document' }}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button class=\"action-btn download-btn\" \r\n title=\"Download\"\r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\">\r\n <i class=\"pi pi-download\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- User information -->\r\n <div class=\"user-info\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Show message if no valid content -->\r\n <div class=\"no-content-message\" *ngIf=\"!section.hasValidContent\">\r\n <p>No initial request details available.</p>\r\n </div>\r\n </p-accordionTab>\r\n </p-accordion>\r\n </div>\r\n \r\n <!-- Document History as regular timeline -->\r\n <div *ngIf=\"section.header !== 'Initial Request'\" class=\"document-history-section\">\r\n <div class=\"section-header\" *ngIf=\"section.header\">\r\n <h4 class=\"section-title\">{{ section.header }}</h4>\r\n </div>\r\n \r\n <div class=\"history-timeline\">\r\n <div class=\"timeline-item\" *ngFor=\"let item of section.list; let i = index\">\r\n <div class=\"timeline-card\" [ngClass]=\"item.actionBgColor\">\r\n <!-- Header with icon and timestamp -->\r\n <div class=\"card-header\">\r\n <div class=\"action-info\">\r\n <div class=\"action-icon\" [ngClass]=\"item.actionIconBgColor\">\r\n <i [class]=\"item.actionIcon\"></i>\r\n </div>\r\n <span class=\"action-label\" [ngClass]=\"item.actionColor\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n <div class=\"timestamp\">\r\n {{ item.dateTime }}\r\n </div>\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"card-description\" *ngIf=\"item.requestDescription\">\r\n <p class=\"description-text\">{{ item.requestDescription }}</p>\r\n </div>\r\n \r\n <!-- Document details if URL exists -->\r\n <div class=\"document-details\" *ngIf=\"item.documentUrl\">\r\n <div class=\"document-card\">\r\n <div class=\"document-info\">\r\n <div class=\"document-icon\">\r\n <i class=\"pi pi-file\"></i>\r\n </div>\r\n <div class=\"document-text\">\r\n <div class=\"document-title\">Document</div>\r\n <div class=\"document-filename clickable\" \r\n (click)=\"downloadDocument(item.documentUrl!, item.docName)\"\r\n title=\"Click to download\">\r\n {{ item.docName || 'Document' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- User information -->\r\n <div class=\"user-info\">\r\n <span class=\"user-name\">{{ item.userName }}</span>\r\n <span class=\"user-role\">({{ item.userRole }})</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>","import { Injectable } from '@angular/core';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\nexport interface DocumentAction {\r\n type: typeof SHARED.REJECT_ACTION | typeof SHARED.ACCEPT_ACTION | typeof SHARED.DELETE_ACTION;\r\n note?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentActionsService {\r\n\r\n /**\r\n * Calculates the card class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the card\r\n */\r\n calculateCardClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-card`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.CARD_ACCEPTED;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.CARD_REJECTED;\r\n default:\r\n return SHARED.CARD_PENDING;\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the reject button class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the reject button\r\n */\r\n calculateRejectButtonClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-reject`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.BUTTON_SECONDARY_REJECT;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.BUTTON_PRIMARY_REJECT;\r\n default:\r\n return SHARED.BUTTON_DEFAULT_REJECT;\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the accept button class based on status\r\n * @param currentStatus - The current status of the document\r\n * @param statusId - The status ID from API\r\n * @returns {string} The CSS class for the accept button\r\n */\r\n calculateAcceptButtonClass(currentStatus?: string, statusId?: string): string {\r\n // Use statusId if available, otherwise fall back to currentStatus\r\n if (statusId) {\r\n return `status-${statusId}-accept`;\r\n }\r\n \r\n switch (currentStatus) {\r\n case SHARED.STATUS_ACCEPTED:\r\n return SHARED.BUTTON_PRIMARY_ACCEPT;\r\n case SHARED.STATUS_REJECTED_LOWERCASE:\r\n return SHARED.BUTTON_SECONDARY_ACCEPT;\r\n default:\r\n return SHARED.BUTTON_DEFAULT_ACCEPT;\r\n }\r\n }\r\n\r\n /**\r\n * Creates an accept action\r\n * @param note - The acceptance note\r\n * @returns {DocumentAction} The accept action\r\n */\r\n createAcceptAction(note: string): DocumentAction {\r\n return {\r\n type: SHARED.ACCEPT_ACTION as 'accept',\r\n note: note\r\n };\r\n }\r\n\r\n /**\r\n * Creates a reject action\r\n * @param note - The rejection note\r\n * @returns {DocumentAction} The reject action\r\n */\r\n createRejectAction(note: string): DocumentAction {\r\n return {\r\n type: SHARED.REJECT_ACTION as 'reject',\r\n note: note\r\n };\r\n }\r\n\r\n /**\r\n * Creates a delete action\r\n * @returns {DocumentAction} The delete action\r\n */\r\n createDeleteAction(): DocumentAction {\r\n return {\r\n type: SHARED.DELETE_ACTION as 'delete'\r\n };\r\n }\r\n} ","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentActionsService, DocumentAction } from '../../services/document-actions.service';\r\nimport { ConfirmationDialogComponent } from '../../../../Shared/components/confirmation-dialog/confirmation-dialog.component';\r\n\r\n@Component({\r\n selector: 'document-actions',\r\n templateUrl: './document-actions.component.html',\r\n styleUrls: ['./document-actions.component.scss'],\r\n standalone: false\r\n})\r\nexport class DocumentActionsComponent implements OnChanges {\r\n readonly SHARED = SHARED;\r\n \r\n @Input() document?: any;\r\n @Input() documentId?: string;\r\n @Input() currentStatus?: typeof SHARED.STATUS_PENDING | typeof SHARED.STATUS_ACCEPTED | typeof SHARED.STATUS_REJECTED_LOWERCASE;\r\n @Input() isLoading?: boolean = false;\r\n @Input() isUploaded?: boolean = false;\r\n @Input() statusId?: string;\r\n @Output() actionPerformed = new EventEmitter<DocumentAction>();\r\n\r\n showAcceptDialog = false;\r\n showRejectDialog = false;\r\n acceptNote = SHARED.EMPTY;\r\n private _rejectNote = SHARED.EMPTY;\r\n\r\n // Action processing flags\r\n isAccepting = false;\r\n isRejecting = false;\r\n\r\n // Computed properties for template\r\n cardClass: string = SHARED.CARD_PENDING;\r\n rejectButtonClass: string = SHARED.BUTTON_DEFAULT_REJECT;\r\n acceptButtonClass: string = SHARED.BUTTON_DEFAULT_ACCEPT;\r\n isRejectNoteEmpty: boolean = true;\r\n\r\n @ViewChild(ConfirmationDialogComponent) confirmationDialog!: ConfirmationDialogComponent;\r\n\r\n constructor(\r\n private documentActionsService: DocumentActionsService\r\n ) {}\r\n\r\n get rejectNote(): string {\r\n return this._rejectNote;\r\n }\r\n\r\n set rejectNote(value: string) {\r\n this._rejectNote = value;\r\n this.updateRejectNoteEmpty();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.updateComputedProperties();\r\n \r\n // Reset action flags when isLoading changes to false\r\n if (changes['isLoading'] && !this.isLoading) {\r\n this.resetActionFlags();\r\n }\r\n }\r\n\r\n /**\r\n * Updates computed properties based on currentStatus and statusId\r\n */\r\n private updateComputedProperties(): void {\r\n this.cardClass = this.documentActionsService.calculateCardClass(this.currentStatus, this.statusId);\r\n this.rejectButtonClass = this.documentActionsService.calculateRejectButtonClass(this.currentStatus, this.statusId);\r\n this.acceptButtonClass = this.documentActionsService.calculateAcceptButtonClass(this.currentStatus, this.statusId);\r\n this.updateRejectNoteEmpty();\r\n }\r\n\r\n /**\r\n * Updates the isRejectNoteEmpty property based on current rejectNote value\r\n */\r\n private updateRejectNoteEmpty(): void {\r\n this.isRejectNoteEmpty = !this.rejectNote || this.rejectNote.trim() === SHARED.EMPTY;\r\n }\r\n\r\n /**\r\n * Resets the action processing flags\r\n */\r\n private resetActionFlags(): void {\r\n this.isAccepting = false;\r\n this.isRejecting = false;\r\n }\r\n\r\n onAcceptClick(): void {\r\n this.showAcceptDialog = true;\r\n }\r\n\r\n onRejectClick(): void {\r\n this.showRejectDialog = true;\r\n }\r\n\r\n onDeleteClick(): void {\r\n const documentName = this.document?.name || this.document?.fileName || 'this document';\r\n this.confirmationDialog.confirmDelete(\r\n documentName,\r\n () => {\r\n this.actionPerformed.emit(this.documentActionsService.createDeleteAction());\r\n },\r\n () => {}\r\n );\r\n }\r\n\r\n onAcceptConfirm(): void {\r\n this.isAccepting = true;\r\n this.actionPerformed.emit(this.documentActionsService.createAcceptAction(this.acceptNote));\r\n this.acceptNote = SHARED.EMPTY;\r\n this.showAcceptDialog = false;\r\n }\r\n\r\n onRejectConfirm(): void {\r\n this.isRejecting = true;\r\n this.actionPerformed.emit(this.documentActionsService.createRejectAction(this.rejectNote));\r\n this.rejectNote = SHARED.EMPTY;\r\n this.showRejectDialog = false;\r\n }\r\n\r\n onCancel(): void {\r\n this.showAcceptDialog = false;\r\n this.showRejectDialog = false;\r\n this.acceptNote = SHARED.EMPTY;\r\n this.rejectNote = SHARED.EMPTY;\r\n }\r\n\r\n} ","<div class=\"document-actions-container\" *ngIf=\"!document?.isUploaded\">\r\n <div class=\"actions-card\" [ngClass]=\"cardClass\">\r\n <div class=\"actions-buttons\">\r\n <!-- Reject Button -->\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn reject-btn\" [ngClass]=\"rejectButtonClass\" (click)=\"onRejectClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE || isRejecting\">\r\n <i class=\"pi pi-times\" *ngIf=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isRejecting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_REJECTED_LOWERCASE ? SHARED.BUTTON_LABEL_REJECTED :\r\n SHARED.BUTTON_LABEL_REJECT }}</span>\r\n </button>\r\n\r\n <!-- Accept Button -->\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn accept-btn\" [ngClass]=\"acceptButtonClass\" (click)=\"onAcceptClick()\"\r\n [disabled]=\"currentStatus === SHARED.STATUS_ACCEPTED || isAccepting\">\r\n <i class=\"pi pi-check\" *ngIf=\"currentStatus === SHARED.STATUS_ACCEPTED\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isAccepting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_ACCEPTED ? SHARED.BUTTON_LABEL_ACCEPTED : SHARED.BUTTON_LABEL_ACCEPT\r\n }}</span>\r\n </button>\r\n\r\n <!-- Delete Button -->\r\n @if(document?.isUploaded){\r\n <button class=\"action-btn delete-btn\" (click)=\"onDeleteClick()\" [disabled]=\"isLoading\"\r\n [permission]=\"'documents-deleteDocumentByDocumentId'\" pTooltip=\"Delete Document\" tooltipPosition=\"top\">\r\n <i class=\"pi pi-trash\"></i>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-confirmation-dialog></app-confirmation-dialog>\r\n\r\n<p-dialog [(visible)]=\"showAcceptDialog\" [header]=\"SHARED.ACCEPT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"acceptNote\" class=\"note-label\">{{ SHARED.ACCEPT_NOTE_LABEL }}</label>\r\n <textarea id=\"acceptNote\" pInputTextarea [(ngModel)]=\"acceptNote\" [placeholder]=\"SHARED.ACCEPT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.ACCEPT_BUTTON_LABEL\" class=\"p-button-success\" (click)=\"onAcceptConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [(visible)]=\"showRejectDialog\" [header]=\"SHARED.REJECT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"rejectNote\" class=\"note-label\">{{ SHARED.REJECT_NOTE_LABEL }}</label>\r\n <textarea id=\"rejectNote\" pInputTextarea [(ngModel)]=\"rejectNote\" [placeholder]=\"SHARED.REJECT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.REJECT_BUTTON_LABEL\" class=\"p-button-danger\" [disabled]=\"isRejectNoteEmpty\"\r\n (click)=\"onRejectConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnChanges,\r\n OnDestroy,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { SHARED, SUPPORTED_IMAGE_TYPES } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentHttpService } from '../../services/document-http.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { DocumentListItem } from '../../models/document-list-response.model';\r\nimport { DocumentHistorySection } from '../../models/document-history.model';\r\nimport { DocumentAction } from '../../services/document-actions.service';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DocumentViewerService, DocumentViewerState } from '../../services/document-viewer.service';\r\n\r\n/**\r\n * Component for viewing and managing document details.\r\n * @class DocumentViewerComponent\r\n * @typedef {DocumentViewerComponent}\r\n */\r\n@Component({\r\n selector: 'document-viewer',\r\n templateUrl: './document-viewer.component.html',\r\n standalone : false,\r\n styleUrl: './document-viewer.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DocumentViewerComponent implements OnChanges, OnDestroy {\r\n /**\r\n * Get the selected document by user.\r\n * @type {*}\r\n */\r\n @Input() selectedDocument?: DocumentListItem; // <-- Made optional to prevent undefined issues\r\n /**\r\n * Get the selected document by user.\r\n * @type {*}\r\n */\r\n @Input() documentList?: DocumentListItem[]; // <-- Made optional to prevent undefined issues\r\n /**\r\n * The context ID for API calls\r\n * @type {string}\r\n */\r\n @Input() contextId?: string;\r\n\r\n /**\r\n * Event emitted when document status is updated to refresh the document list\r\n * @type {EventEmitter<void>}\r\n */\r\n @Output() documentStatusUpdated = new EventEmitter<{ actionType?: string }>();\r\n\r\n /**\r\n * Indicates whether a checkbox is selected.\r\n * @type {boolean}\r\n */\r\n checked: boolean = false;\r\n\r\n /**\r\n * Reference to the dynamic dialog used for displaying additional details.\r\n * @type {(DynamicDialogRef | undefined)}\r\n */\r\n ref: DynamicDialogRef | undefined;\r\n\r\n /**\r\n * Indicates whether the document has been verified.\r\n * @type {boolean}\r\n */\r\n isVerified: boolean = false;\r\n\r\n /**\r\n * Messages for user feedback\r\n * @type {any[]}\r\n */\r\n messages: any[] = [];\r\n\r\n /**\r\n * Current state from the service\r\n * @type {DocumentViewerState}\r\n */\r\n currentState: DocumentViewerState = {\r\n documentHistory: [],\r\n showDocumentHistory: false,\r\n isActionLoading: false,\r\n documentStatus: SHARED.STATUS_PENDING as 'pending',\r\n documentIsUploaded: false,\r\n alertData: null\r\n };\r\n\r\n /**\r\n * Computed property to determine if the selected document is an image\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentImage(): boolean {\r\n return this.documentViewerService.isImage(this.selectedDocument?.contentType);\r\n }\r\n\r\n /**\r\n * Computed property to determine if the selected document is a PDF\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentPdf(): boolean {\r\n return this.selectedDocument?.contentType === 'application/pdf';\r\n }\r\n\r\n /**\r\n * Computed property to determine if the selected document has an unsupported content type\r\n * @type {boolean}\r\n */\r\n get isSelectedDocumentUnsupported(): boolean {\r\n return !this.isSelectedDocumentImage && !this.isSelectedDocumentPdf;\r\n }\r\n\r\n /**\r\n * Holds the subscription to manage observable cleanup.\r\n * @private\r\n * @type {Subscription}\r\n */\r\n private subscription: Subscription = new Subscription();\r\n\r\n /**\r\n * Initializes a new instance of the DocumentViewerComponent.\r\n * @param {DocumentHttpService} documentHttpService - Handle the http service.\r\n * @param {DocumentService} documentService - Handle the states.\r\n * @param {DocumentViewerService} documentViewerService - Handle the viewer business logic.\r\n */\r\n constructor(\r\n public documentHttpService : DocumentHttpService, \r\n private documentService: DocumentHelperService,\r\n private messageService: MessageService,\r\n private documentViewerService: DocumentViewerService,\r\n ) {\r\n // Subscribe to state changes from the service\r\n this.subscription.add(\r\n this.documentViewerService.state$.subscribe(state => {\r\n this.currentState = state;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Fetches the alerts for the selected document.\r\n * @returns {void}\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['selectedDocument'] && this.selectedDocument) {\r\n this.documentViewerService.updateSelectedDocument(this.selectedDocument);\r\n }\r\n }\r\n\r\n /**\r\n * Handles document selection from template\r\n * @param document The selected document\r\n */\r\n handleSelectedDocument(document: DocumentListItem): void {\r\n this.selectedDocument = document;\r\n this.documentViewerService.updateSelectedDocument(document);\r\n }\r\n\r\n /**\r\n * Determines if the given content type is an image.\r\n * @param {string | undefined} contentType - The MIME type of the content.\r\n * @returns {boolean} `true` if the content type is an image; otherwise, `false`.\r\n */\r\n isImage(contentType?: string): boolean {\r\n return this.documentViewerService.isImage(contentType);\r\n }\r\n\r\n /**\r\n * Handles document actions from the actions component\r\n * @param {DocumentAction} action - The action performed\r\n */\r\n handleDocumentAction(action: DocumentAction): void {\r\n this.documentViewerService.handleDocumentAction(action, this.contextId);\r\n this.documentStatusUpdated.emit({ actionType: action.type });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"document-viewer-container\">\r\n <div class=\"main-content\">\r\n <p-messages [(value)]=\"messages\" [enableService]=\"false\"></p-messages>\r\n \r\n <div class=\"content-grid\">\r\n @if(selectedDocument){\r\n <div class=\"document-preview\">\r\n @if(isSelectedDocumentImage){\r\n <div class=\"img-container\">\r\n <img\r\n [src]=\"selectedDocument?.documentUrl || ''\"\r\n class=\"uploadedImages\"\r\n alt=\"Document Image\"\r\n />\r\n </div>\r\n }@else if(isSelectedDocumentPdf){\r\n <div class=\"pdf-container\">\r\n <pdf-viewer\r\n [src]=\"selectedDocument?.documentUrl || ''\"\r\n [rotation]=\"0\"\r\n [original-size]=\"false\"\r\n [show-all]=\"true\"\r\n [fit-to-page]=\"false\"\r\n [zoom]=\"0.7\"\r\n [zoom-scale]=\"'page-width'\"\r\n [stick-to-page]=\"false\"\r\n [render-text]=\"true\"\r\n [external-link-target]=\"'blank'\"\r\n [autoresize]=\"true\"\r\n [show-borders]=\"false\"\r\n style=\"width: 100%; height: 100%\"\r\n ></pdf-viewer>\r\n </div>\r\n }@else if(isSelectedDocumentUnsupported){\r\n <div class=\"incorrect-docType\">\r\n ContentType is incorrect.\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"left-part col-12 md:col-12 pt-0\">\r\n \r\n <!-- <div class=\"alerts mb-4 pb-1\">\r\n <button\r\n type=\"button\"\r\n *ngIf=\"\r\n (alertData?.status !== 'Pending' && !!alertData?.status) ||\r\n alertData?.isAlert === false\r\n \"\r\n class=\"bg-green-500 border-none border-round-md flex align-items-center mb-3 p-2 px-3\"\r\n >\r\n <i\r\n class=\"pi pi-verified mr-2 cursor-pointer\"\r\n [ngStyle]=\"{\r\n color:\r\n alertData?.status === 'Pending' &&\r\n alertData?.isAlert !== false\r\n ? '#FFFFFF'\r\n : '#8A8EA6'\r\n }\"\r\n style=\"font-size: 20px\"\r\n ></i>\r\n <span class=\"font-semibold text-white\">Verified</span>\r\n </button>\r\n <div\r\n class=\"card mb-0\"\r\n [ngClass]=\"\r\n (alertData?.status === 'Pending' || !alertData?.status) &&\r\n alertData?.isAlert !== false\r\n ? 'alert-card'\r\n : 'success-alert'\r\n \"\r\n >\r\n <div class=\"flex align-items-center mb-2 pb-1\" *ngIf=\"alertData?.status !== 'Verified'\">\r\n <h4 class=\"mr-3 mt-0 mb-0 text-color font-bold\" style=\"font-size: 21px; font-weight: bold; border-color: rgba(68, 72, 109, 0.2) ;\" >Alerts</h4>\r\n <i\r\n class=\"pi pi-exclamation-triangle\"\r\n style=\"font-size: 20px\"\r\n [ngStyle]=\"{\r\n color:\r\n (alertData?.status === 'Pending' || !alertData?.status) &&\r\n alertData?.isAlert !== false\r\n ? '#FB392D'\r\n : '#8A8EA6'\r\n }\"\r\n ></i>\r\n </div>\r\n <p class=\"text-color mb-0\">{{ alertData?.alertMessage }}</p>\r\n </div>\r\n </div>\r\n -->\r\n \r\n <div class=\"sidebar\">\r\n <document-actions\r\n [document]=\"selectedDocument\"\r\n [documentId]=\"selectedDocument?._id\"\r\n [currentStatus]=\"currentState.documentStatus\"\r\n [isLoading]=\"currentState.isActionLoading\"\r\n [isUploaded]=\"currentState.documentIsUploaded\"\r\n [statusId]=\"selectedDocument?.statusId\"\r\n (actionPerformed)=\"handleDocumentAction($event)\">\r\n </document-actions>\r\n \r\n <document-history \r\n [historyData]=\"currentState.documentHistory\" \r\n [showHistory]=\"currentState.showDocumentHistory\">\r\n </document-history>\r\n \r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentListItem, DocumentListResponse } from '../../models/document-list-response.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { TableData } from '../../../../Shared/components/table-primary/table-primary.model';\r\nimport { DocumentListService } from '../../services/document-list.service';\r\nimport { Message } from 'primeng/api';\r\nimport { ERRORS } from '../../../../Shared/constant/ERROR';\r\n\r\n/**\r\n * This component is responsible for displaying and managing a list of documents.\r\n * Provides functionality for file upload, document selection, and dialog management.\r\n * @class DocumentListComponent\r\n */\r\n@Component({\r\n selector: 'lib-document-list',\r\n standalone: false,\r\n templateUrl: './document-list.component.html',\r\n styleUrls: ['./document-list.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class DocumentListComponent implements OnInit, OnDestroy, OnChanges {\r\n\r\n /**\r\n * Represents the context ID for the document list.\r\n * This value is passed from the parent component.\r\n * @type {string}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n\r\n /**\r\n * The document list response data passed from the parent component.\r\n * @type {DocumentListResponse[] | null}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() documentListResponse: DocumentListResponse[] | null = null;\r\n\r\n /**\r\n * Subscription to document list response from store\r\n */\r\n private documentListSubscription: Subscription = new Subscription();\r\n\r\n /**\r\n * The currently selected document.\r\n * @type {DocumentModel}\r\n * @memberof DocumentListComponent\r\n */\r\n selectedDocument!: DocumentListItem;\r\n\r\n /**\r\n * Default visibility of the sidebar.\r\n * @type {boolean}\r\n * @memberof DocumentListComponent\r\n */\r\n isSidebarVisible: boolean = SHARED.FALSE;\r\n\r\n /**\r\n * Default visibility of the messages.\r\n * @type {Message[]}\r\n * @memberof DocumentListComponent\r\n */\r\n messages: Message[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Default visibility of the dialog.\r\n * @type {boolean}\r\n * @memberof DocumentListComponent\r\n */\r\n isdialogVisible: boolean = SHARED.FALSE;\r\n\r\n /**\r\n * The list of documents to display.\r\n * This value is passed from the parent component.\r\n * @type {DocumentModel[]}\r\n * @memberof DocumentListComponent\r\n */\r\n @Input() documentList: DocumentListItem[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Available document types for selection.\r\n * @type {string[]}\r\n * @memberof DocumentListComponent\r\n */\r\n options: any[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * The selected option for the document type.\r\n * @type {(string | null)}\r\n * @memberof DocumentListComponent\r\n */\r\n selectedOption: string | null = null;\r\n \r\n /**\r\n * The file name associated with the document.\r\n * It may be undefined until a file is selected or loaded.\r\n * @type {string | undefined}\r\n */\r\n fileName!: string | undefined;\r\n \r\n /**\r\n * Table data for each category\r\n */\r\n categoryTables: TableData[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Document categories from the response\r\n */\r\n documentCategories: DocumentListResponse[] = SHARED.EMPTY_ARRAY;\r\n\r\n /**\r\n * Completion counts for each category\r\n */\r\n categoryCompletionCounts: string[] = SHARED.EMPTY_ARRAY;\r\n deleteMessage: Message[] = SHARED.EMPTY_ARRAY;\r\n /**\r\n * Getter to format category labels with proper suffix\r\n */\r\n get formattedCategoryLabels(): string[] {\r\n return this.documentCategories.map(category => {\r\n return category.label.endsWith(SHARED.DOCUMENTS) ? category.label : `${category.label} ${SHARED.DOCUMENTS}`;\r\n });\r\n }\r\n\r\n /**\r\n * Creates an instance of DocumentListComponent.\r\n * @class\r\n * @param {DocumentListService} documentListService - The service responsible for document list operations.\r\n */\r\n constructor(\r\n private documentListService: DocumentListService\r\n ) {}\r\n\r\n /**\r\n * Handles changes to input properties\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\r\n this.documentListService.refreshDocumentListForNewContext(this.contextId);\r\n }\r\n }\r\n\r\n /** \r\n * Initializes the component by setting up document list subscription.\r\n */\r\n ngOnInit(): void {\r\n this.setupDocumentListSubscription();\r\n }\r\n\r\n\r\n /**\r\n * Handles the visibility of the sidebar.\r\n * @param {boolean} isVisible - Indicates whether the sidebar should be visible or not.\r\n * @memberof DocumentListComponent\r\n */\r\n handleOpenSideBar(isVisible: boolean): void {\r\n this.isSidebarVisible = isVisible;\r\n }\r\n\r\n /**\r\n * Builds document categories from the API response\r\n */\r\n buildDocumentCategories(): void {\r\n const result = this.documentListService.buildDocumentCategories(this.documentListResponse);\r\n this.documentCategories = result.documentCategories;\r\n this.categoryTables = result.categoryTables;\r\n this.categoryCompletionCounts = result.categoryCompletionCounts;\r\n }\r\n\r\n /**\r\n * Sets up subscription to document list response from store\r\n */\r\n setupDocumentListSubscription(): void {\r\n this.documentListSubscription.add(\r\n this.documentListService.setupDocumentListSubscription().subscribe({\r\n next: (response: any) => {\r\n this.documentListResponse = response;\r\n this.buildDocumentCategories();\r\n },\r\n error: (error: any) => {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENTS, error);\r\n }\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Handles table row click event\r\n */\r\n handleTableRowClick(rowData: any): void {\r\n this.isdialogVisible = SHARED.TRUE;\r\n this.selectedDocument = this.documentListService.handleTableRowClick(rowData);\r\n }\r\n\r\n /**\r\n * Handles the delete action from the table component\r\n * @param {any} rowData - The row data containing the document to delete\r\n */\r\n handleDeleteAction(rowData: any): void {\r\n this.documentListService.handleDeleteAction(rowData, this.contextId)\r\n .subscribe({\r\n next: (response) => {\r\n if (this.selectedDocument && this.selectedDocument._id === rowData._id) {\r\n this.handleCloseModal();\r\n }\r\n this.documentListService.refreshAllDataWithCurrentFilters(this.contextId);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENTS, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Closes the document viewer dialog and resets the selected document\r\n */\r\n handleCloseModal(): void {\r\n this.isdialogVisible = SHARED.FALSE;\r\n this.selectedDocument = {} as DocumentListItem;\r\n this.fileName = SHARED.EMPTY;\r\n }\r\n\r\n /**\r\n * Refreshes the document list after a status update\r\n * @param {boolean} isDeleteAction - Optional flag indicating if this refresh is due to a delete action\r\n */\r\n refreshDocumentList(isDeleteAction: boolean = false): void {\r\n this.documentListService.refreshDocumentList(this.contextId);\r\n if (isDeleteAction) {\r\n this.deleteMessage = [{severity: SHARED.SUCCESS_SEVERITY, detail: SHARED.DOCUMENT_DELETED_SUCCESSFULLY}];\r\n setTimeout(() => {\r\n this.deleteMessage = SHARED.EMPTY_ARRAY;\r\n this.handleCloseModal();\r\n }, 2000);\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup subscriptions on component destroy\r\n */\r\n ngOnDestroy(): void {\r\n this.documentListSubscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"document-viewer\">\r\n <p-dialog [header]=\"selectedDocument?.docName\" [(visible)]=\"isdialogVisible\" [modal]=\"true\" \r\n class=\"w-full h-full document-dailog-wrapper\" [draggable]=\"false\" [closable]=\"true\"\r\n (onHide)=\"handleCloseModal()\">\r\n <p-messages \r\n[(value)]=\"deleteMessage\" \r\n[enableService]=\"false\" \r\n[closable]=\"false\" />\r\n <document-viewer \r\n [selectedDocument]=\"selectedDocument\" \r\n [documentList]=\"documentList\" \r\n [contextId]=\"contextId\" \r\n (documentStatusUpdated)=\"refreshDocumentList($event.actionType === 'delete')\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"w-full flex align-items-center justify-content-between\">\r\n <input type=\"text\" class=\"w-full border-none bg-white h-3rem file-input-wrapper\" pInputText\r\n [(ngModel)]=\"fileName\" />\r\n \r\n </div>\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </document-viewer>\r\n </p-dialog>\r\n</div>\r\n\r\n<div class=\"document-categories-container\">\r\n <div class=\"category\" *ngFor=\"let category of documentCategories; let i = index\">\r\n <div class=\"category-header\">\r\n <div class=\"category-title\">\r\n <h3>{{ formattedCategoryLabels[i] }}</h3>\r\n <p class=\"category-description\">{{ category.categoryDescription }}</p>\r\n </div>\r\n <div class=\"completion-status\">\r\n <span class=\"status-badge\">{{ categoryCompletionCounts[i] }} Complete</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-container\">\r\n <lib-table-primary \r\n [tableData]=\"categoryTables[i]\" \r\n [tableStyle]=\"{ 'min-width': '100%' }\"\r\n (rowClick)=\"handleTableRowClick($event)\"\r\n (deleteAction)=\"handleDeleteAction($event)\">\r\n </lib-table-primary>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { DocumentCategory, DocumentCategoryItem } from '../models/document-category.model';\r\nimport { DocumentStore } from '../state/document.store';\r\nimport { SHARED } from '../../../Shared/constant/SHARED';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DocumentMenuService {\r\n\r\n constructor(private documentStore: DocumentStore) {}\r\n\r\n /**\r\n * Gets the category name for a given menu item _id\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n * @returns The category name or null if not found\r\n */\r\n getMenuItemCategory(menuItemId: string, categories: DocumentCategory[]): string | null {\r\n for (const category of categories) {\r\n if (category.items?.some((menuItem: DocumentCategoryItem) => menuItem._id === menuItemId)) {\r\n return category.label;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the menu item by its _id\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n * @returns The menu item or null if not found\r\n */\r\n getMenuItemById(menuItemId: string, categories: DocumentCategory[]): DocumentCategoryItem | null {\r\n for (const category of categories) {\r\n if (category.items) {\r\n const item = category.items.find((menuItem: DocumentCategoryItem) => menuItem._id === menuItemId);\r\n if (item) {\r\n return item;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Handles user list visibility based on menu item category\r\n * @param menuItemId - The _id of the menu item\r\n * @param categories - The list of document categories\r\n */\r\n handleUserListVisibility(menuItemId: string, categories: DocumentCategory[]): void {\r\n const category = this.getMenuItemCategory(menuItemId, categories);\r\n const menuItem = this.getMenuItemById(menuItemId, categories);\r\n \r\n if (category === SHARED.APPLICATION) {\r\n this.documentStore.setShowUserList(true);\r\n } else if (category === SHARED.APPLICANTS) {\r\n this.documentStore.setShowUserList(true);\r\n } else {\r\n this.documentStore.setShowUserList(false);\r\n this.documentStore.setSelectedUserId(null);\r\n this.documentStore.setSelectedStatus(null);\r\n }\r\n }\r\n\r\n /**\r\n * Handles document status based on selected menu item\r\n * @param menuItemId - The _id of the selected menu item\r\n * @param categories - The list of document categories\r\n */\r\n handleDocumentStatus(menuItemId: string, categories: DocumentCategory[]): void {\r\n const menuItem = this.getMenuItemById(menuItemId, categories);\r\n if (menuItem) {\r\n // You can add logic here to handle document status based on the selected menu item\r\n // For example, filtering documents by status, updating status counts, etc.\r\n console.log('Selected menu item:', menuItem.label, 'with status:', menuItem.status);\r\n }\r\n }\r\n\r\n /**\r\n * Calculates total documents for a menu item\r\n * @param item - The menu item\r\n * @returns Total number of documents\r\n */\r\n getTotalDocuments(item: DocumentCategoryItem): number {\r\n const status = item.status;\r\n // Handle both uppercase and lowercase keys\r\n const pending = status.Pending || status.pending || 0;\r\n const reviewing = status.Reviewing || status.reviewing || 0;\r\n const accepted = status.Accepted || status.approved || 0; // Note: approved maps to Accepted\r\n const rejected = status.Rejected || status.rejected || 0;\r\n \r\n return pending + reviewing + accepted + rejected;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Gets badge value for a menu item\r\n * @param item - The menu item\r\n * @returns Badge value string (e.g., \"2/3\")\r\n */\r\n getBadgeValue(item: DocumentCategoryItem): string {\r\n const approved = this.getApprovedDocuments(item);\r\n const total = this.getTotalDocuments(item);\r\n return `${approved}/${total}`;\r\n }\r\n\r\n /**\r\n * Gets badge severity based on status\r\n * @param item - The menu item\r\n * @returns Badge severity for PrimeNG\r\n */\r\n getBadgeSeverity(item: DocumentCategoryItem): 'success' | 'info' | 'warning' | 'danger' {\r\n const status = item.status;\r\n const total = this.getTotalDocuments(item);\r\n const approved = this.getApprovedDocuments(item);\r\n const rejected = status.Rejected || status.rejected || 0;\r\n \r\n if (total === 0) return 'info';\r\n \r\n // If any docs are rejected, show red\r\n if (rejected > 0) return 'danger';\r\n \r\n // If all docs are approved, show green\r\n if (approved === total && total > 0) return 'success';\r\n \r\n // Otherwise show amber\r\n return 'warning';\r\n }\r\n\r\n /**\r\n * Checks if badge should be shown for a menu item\r\n * @param item - The menu item\r\n * @returns True if badge should be shown\r\n */\r\n shouldShowBadge(item: DocumentCategoryItem): boolean {\r\n return this.getTotalDocuments(item) > 0;\r\n }\r\n\r\n /**\r\n * Calculates approved documents for a menu item\r\n * @param item - The menu item\r\n * @returns Number of approved documents\r\n */\r\n getApprovedDocuments(item: DocumentCategoryItem): number {\r\n const status = item.status;\r\n // Handle both uppercase and lowercase keys, with approved mapping to Accepted\r\n return status.Accepted || status.approved || 0;\r\n }\r\n} ","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentCategory, DocumentCategoryItem } from '../../models/document-category.model';\r\nimport { DocumentMenuService } from '../../services/document-menu.service';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\ninterface MenuItemData {\r\n totalDocuments: number;\r\n approvedDocuments: number;\r\n badgeValue: string;\r\n badgeSeverity: 'success' | 'info' | 'warning' | 'danger';\r\n shouldShowBadge: boolean;\r\n}\r\n@Component({\r\n selector: 'lib-documents-menu',\r\n standalone: false,\r\n templateUrl: './documents-menu.component.html',\r\n styleUrl: './documents-menu.component.scss'\r\n})\r\nexport class DocumentsMenuComponent implements OnInit, OnChanges {\r\n @Input() catagories: DocumentCategory[] = SHARED.EMPTY_ARRAY\r\n @Input() applicationNumber : string = SHARED.EMPTY\r\n @Input() contextId: string = SHARED.EMPTY;\r\n selectedMenuItem: string | null = null;\r\n selectedMenuItemId: string | null = null;\r\n\r\n // Store the categories from the store\r\n private storeCategories: DocumentCategory[] = SHARED.EMPTY_ARRAY;\r\n\r\n constructor(\r\n private documentStore: DocumentStore,\r\n private documentQuery: DocumentQuery,\r\n private documentMenuService: DocumentMenuService,\r\n private documentHelperService: DocumentHelperService\r\n ) {}\r\n /**\r\n * Initialize the component\r\n * @returns {void}\r\n * @memberof DocumentsMenuComponent\r\n */\r\n ngOnInit(): void {\r\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItemId => {\r\n this.selectedMenuItemId = menuItemId;\r\n this.selectedMenuItem = this.findMenuItemLabelById(menuItemId);\r\n });\r\n\r\n // Subscribe to document categories from the store\r\n this.documentQuery.selectDocumentCategories().subscribe(categories => {\r\n if (categories && categories.length > 0) {\r\n this.storeCategories = categories;\r\n this.updateMenuItemsData();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle changes to input properties\r\n * @param {SimpleChanges} changes - The changes to the input properties\r\n * @returns {void}\r\n * @memberof DocumentsMenuComponent\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[SHARED.CATAGORIES] && this.catagories) {\r\n this.updateMenuItemsData();\r\n }\r\n \r\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\r\n this.handleContextIdChange();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the categories to use for the menu\r\n * Priority: Store categories > Input categories\r\n */\r\n get categories(): DocumentCategory[] {\r\n const result = this.storeCategories.length > 0 ? this.storeCategories : this.catagories;\r\n return result;\r\n }\r\n\r\n /**\r\n * Finds the label of a menu item by its _id\r\n * @param id The _id to search for\r\n * @returns The label of the menu item or null if not found\r\n */\r\n private findMenuItemLabelById(id: string | null): string | null {\r\n if (!id) return null;\r\n \r\n for (const category of this.categories) {\r\n if (category.items) {\r\n const item = category.items.find(item => item._id === id);\r\n if (item) {\r\n return item.label;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n \r\n /**\r\n * Update menu use catagories\r\n */\r\n private updateMenuItemsData(): void {\r\n this.categories.forEach(category => {\r\n if (category.items) {\r\n category.items.forEach(item => {\r\n const menuData = {\r\n totalDocuments: this.documentMenuService.getTotalDocuments(item),\r\n approvedDocuments: this.documentMenuService.getApprovedDocuments(item),\r\n badgeValue: this.documentMenuService.getBadgeValue(item),\r\n badgeSeverity: this.documentMenuService.getBadgeSeverity(item),\r\n shouldShowBadge: this.documentMenuService.shouldShowBadge(item)\r\n };\r\n (item as any).menuData = menuData;\r\n });\r\n }\r\n });\r\n }\r\n\r\n \r\n /**\r\n * Handle the menu item click\r\n * @param {*} event - Event \r\n * @param {DocumentCategoryItem} item - catagory item\r\n */\r\n onMenuItemClick(event: any, item: DocumentCategoryItem): void {\r\n if (this.selectedMenuItemId === item._id) {\r\n // Immediately clear the selection state\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n \r\n // Update the store\r\n this.documentStore.setSelectedMenuItem(null);\r\n \r\n // Refresh documents\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n \r\n // Force change detection by updating the component state\r\n this.handleDeselection();\r\n } else {\r\n this.selectedMenuItem = item.label;\r\n this.selectedMenuItemId = item._id;\r\n this.documentStore.setSelectedMenuItem(item._id);\r\n this.documentMenuService.handleUserListVisibility(item._id, this.categories);\r\n }\r\n }\r\n\r\n /**\r\n * Handle deselection to ensure immediate visual feedback\r\n */\r\n private handleDeselection(): void {\r\n this.selectedMenuItemId = null;\r\n this.selectedMenuItem = null;\r\n setTimeout(() => {\r\n }, 0);\r\n }\r\n\r\n /**\r\n * Handle the menu item selection\r\n * @param {string} menuItemId - The ID of the menu item to select\r\n */\r\n onSelectMenuItem(menuItemId: string): void {\r\n const label = this.findMenuItemLabelById(menuItemId);\r\n if (label) {\r\n this.selectedMenuItem = label;\r\n this.selectedMenuItemId = menuItemId;\r\n this.documentStore.setSelectedMenuItem(menuItemId);\r\n this.documentMenuService.handleUserListVisibility(menuItemId, this.categories);\r\n }\r\n }\r\n /**\r\n * Handle the menu item unselection\r\n */\r\n onUnselectMenuItem(): void {\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n this.documentStore.setSelectedMenuItem(null);\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n }\r\n\r\n /**\r\n * Get the selected menu item\r\n * @returns {string | null} - The selected menu item\r\n */\r\n getSelectedMenuItem(): string | null {\r\n return this.selectedMenuItem;\r\n }\r\n\r\n /**\r\n * Handles contextId changes by clearing current selection and refreshing data\r\n */\r\n private handleContextIdChange(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.selectedMenuItem = null;\r\n this.selectedMenuItemId = null;\r\n this.documentStore.setSelectedMenuItem(null);\r\n this.documentHelperService.refreshDocumentsWithoutFilters(this.contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Get the selected menu item id\r\n * @returns {string | null} - The selected menu item id\r\n */\r\n getSelectedMenuItemId(): string | null {\r\n return this.selectedMenuItemId;\r\n }\r\n}\r\n","<div class=\"document-sidebar-container h-full\">\r\n <p-card class=\"widget-menu-wrapper h-full\">\r\n @if(applicationNumber){\r\n <div class=\"flex align-items-center justify-content-between widget-menu-header-wrapper\">\r\n <p class=\"mb-0 application-title-wrapper\">ID - {{applicationNumber}}</p>\r\n <div class=\"expand-icon-wrapper\">\r\n <i class=\"ri-arrow-left-s-line text-primary flex align-items-center justify-content-center w-full h-full\"></i>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"widget-menu-container\" >\r\n <div class=\"widget-menu-wrapper h-ful l custom-scroll\">\r\n <p-menu [model]=\"categories\" styleClass=\"w-full md:w-15rem\">\r\n <ng-template pTemplate=\"submenuheader\" let-item>\r\n <span [style]=\"{\r\n color : '#9EA0B3'\r\n }\">{{ item.label === 'Application' ? 'Application Documents' : item.label }}</span>\r\n </ng-template>\r\n <ng-template pTemplate=\"item\" let-item>\r\n <a pRipple \r\n class=\"flex align-items-center p-menuitem-link\"\r\n [class.selected-menu-item]=\"selectedMenuItemId === item._id\"\r\n (click)=\"onMenuItemClick($event, item)\">\r\n <span [class]=\"item.icon\" class=\"text-xl\"></span>\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n <p-badge *ngIf=\"item.menuData?.shouldShowBadge\" \r\n class=\"ml-auto\" \r\n [severity]=\"item.menuData?.badgeSeverity\" \r\n [value]=\"item.menuData?.badgeValue\" />\r\n </a>\r\n </ng-template>\r\n </p-menu>\r\n </div>\r\n </div>\r\n </p-card>\r\n</div>\r\n\r\n ","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\nimport { DocumentService } from '../../state/document.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { ERRORS } from '../../../../Shared/constant/ERROR';\r\nimport { DocumentHttpService } from '../../services/document-http.service';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { DocumentCategory } from '../../models/document-category.model';\r\nimport { UserListModel } from '../../models/user-list.model';\r\nimport { StatusDataModel } from '../../models/status-data.model';\r\nimport { DocumentListResponse } from '../../models/document-list-response.model';\r\nimport { DocumentHelperService } from '../../services/document.service';\r\n\r\n/**\r\n *This component is responsible for managing and displaying a list of documents.\r\n * @class DocumentContainerComponent\r\n * @typedef {DocumentContainerComponent}\r\n */\r\n@Component({\r\n selector: 'lib-document-container',\r\n standalone: false,\r\n templateUrl: './document-container.component.html',\r\n styleUrl: './document-container.component.scss'\r\n})\r\nexport class DocumentContainerComponent implements OnInit, OnDestroy, OnChanges {\r\n\r\n /**\r\n * Creates an instance of DocumentContainerComponent.\r\n * @param {DocumentStore} documentStore - Query Store service to manage store document-related state.\r\n * @param {DocumentService} documentService - Service to manage document-related operations.\r\n * @param {DocumentQuery} documentQuery - Query service to manage document-related state.\r\n * @param {DocumentHttpService} documentHttpService - Service to make HTTP requests related to documents.\r\n */\r\n constructor(public documentStore: DocumentStore, public documentService: DocumentService, public documentQuery: DocumentQuery, public documentHttpService: DocumentHttpService, public documentHelperService : DocumentHelperService) {\r\n // Note: initializeSelectionWatcher now requires contextId\r\n // This should be called from the component that has access to contextId\r\n\r\n }\r\n /**\r\n * Get contextId in input.\r\n * @type {string}\r\n */\r\n @Input() contextId: string = SHARED.EMPTY;\r\n \r\n \r\n /**\r\n * The list of folders.\r\n * @type {Array}\r\n */\r\n applicationNumber: string = SHARED.EMPTY\r\n catagories: DocumentCategory[] = SHARED.EMPTY_ARRAY\r\n userList: UserListModel[] = SHARED.EMPTY_ARRAY\r\n /**\r\n * Status data for the current selection\r\n * @type {StatusDataModel[]}\r\n */\r\n statusData: StatusDataModel[] = []\r\n\r\n /**\r\n * Document list response from API\r\n * @type {DocumentListResponse | null}\r\n */\r\n documentListResponse: DocumentListResponse[] | null = null;\r\n /**\r\n * Holds the subscription to manage observable cleanup.\r\n * @\r\n * @type {Subscription}\r\n */\r\n subscription: Subscription = new Subscription();\r\n\r\n /**\r\n * Handles changes to input properties\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes[SHARED.CONTEXT_ID] && !changes[SHARED.CONTEXT_ID].firstChange) {\r\n // When contextId changes, clear all state and refetch data for the new context\r\n this.handleContextIdChange();\r\n }\r\n }\r\n\r\n /**\r\n * Fetches the folder and document data on initialization.\r\n * @returns {void}\r\n */\r\n ngOnInit(): void {\r\n this.clearAllState();\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.initializeData();\r\n }\r\n }\r\n\r\n /**\r\n * Initialize all data with proper sequencing to avoid duplicate API calls\r\n */\r\n initializeData(): void {\r\n this.fetchDocumentCatagories();\r\n this.fetchUserListWithFilters();\r\n this.setupStatusDataSubscriptions();\r\n this.setupFilteredDocumentSubscription();\r\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\r\n }\r\n\r\n /**\r\n * Clears all state (store and component) comprehensively\r\n */\r\n clearAllState(): void {\r\n this.documentStore.clearSelectionState();\r\n this.documentStore.clearDocumentViewerState();\r\n this.documentStore.setDocumentListResponse(null);\r\n this.documentStore.setDocumentList([]); \r\n this.documentStore.setDocumentCategories([]);\r\n this.documentStore.setUserList([]);\r\n this.documentStore.setStatusData([]);\r\n this.documentStore.setCurrentDocument(null); \r\n this.documentStore.setFolders([]);\r\n this.documentStore.setDocumentAlert(null);\r\n this.catagories = SHARED.EMPTY_ARRAY;\r\n this.userList = SHARED.EMPTY_ARRAY;\r\n this.statusData = [];\r\n this.documentListResponse = null;\r\n this.applicationNumber = SHARED.EMPTY;\r\n }\r\n\r\n /**\r\n * Handles contextId change by clearing all state and refetching data\r\n */\r\n handleContextIdChange(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.subscription.unsubscribe();\r\n this.subscription = new Subscription();\r\n this.documentHelperService.cleanupSelectionWatcher();\r\n this.clearAllState();\r\n this.initializeData();\r\n }\r\n }\r\n\r\n /**\r\n * Sets up subscriptions to monitor menu item and user selection changes\r\n * to trigger status data fetching and user list refreshing\r\n */\r\n setupStatusDataSubscriptions(): void {\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedMenuItem().subscribe(menuItem => {\r\n this.fetchStatusData();\r\n if (this.catagories.length > 0) {\r\n this.fetchUserListWithFilters();\r\n }\r\n })\r\n );\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedUserId().subscribe(userId => {\r\n this.fetchStatusData();\r\n if (this.catagories.length > 0) {\r\n this.fetchUserListWithFilters();\r\n }\r\n })\r\n );\r\n this.subscription.add(\r\n this.documentQuery.selectSelectedStatus().subscribe(status => {\r\n this.fetchStatusData();\r\n if (this.catagories.length > 0) {\r\n this.fetchUserListWithFilters();\r\n }\r\n })\r\n );\r\n this.fetchStatusData();\r\n }\r\n\r\n /**\r\n * Fetches status data based on current selections\r\n */\r\n fetchStatusData(): void {\r\n if (!this.contextId) {\r\n console.warn(ERRORS.CONTEXT_ID_REQUIRED);\r\n return;\r\n }\r\n\r\n const currentState = this.documentQuery.getSelectionState();\r\n const contextId = currentState.userId || null\r\n const categoryId = currentState.menuItem || null; \r\n this.documentHttpService.getStatusDocumentCount(this.contextId,contextId,categoryId).subscribe({\r\n next: (statusData) => {\r\n this.statusData = statusData;\r\n this.documentStore.setStatusData(statusData);\r\n },\r\n error: (error) => {\r\n console.error(ERRORS.ERROR_FETCHING_STATUS_DATA, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Fetches userlist data with current filters applied\r\n */\r\n fetchUserListWithFilters(): void {\r\n if (!this.contextId) {\r\n console.warn(ERRORS.CONTEXT_ID_REQUIRED);\r\n return;\r\n }\r\n\r\n const currentState = this.documentQuery.getSelectionState();\r\n // For user list, we use the contextId but the API might need additional parameters\r\n // based on current filters. For now, we'll use the base contextId\r\n // If the API supports filtering by menu item or status, we can add those parameters\r\n this.documentHttpService.getUserListByContextId(this.contextId).subscribe({\r\n next: (res: UserListModel[]) => {\r\n this.userList = res;\r\n this.documentStore.setUserList(res);\r\n },\r\n error: (err: any) => {\r\n console.error(ERRORS.ERROR_FETCHING_USER_LIST, err);\r\n }\r\n });\r\n }\r\n /**\r\n * Fetches document catagory data.\r\n */\r\n fetchDocumentCatagories(): void {\r\n const categoriesSubscription = this.documentHttpService.getDocumentCatagories(this.contextId).subscribe({\r\n next: (categories: any) => {\r\n if (categories) {\r\n this.catagories = categories.categories;\r\n this.applicationNumber = categories.applicationNumber;\r\n this.documentStore.setDocumentCategories(categories.categories);\r\n }\r\n },\r\n error: (err: any) => {\r\n console.error(ERRORS.ERROR_FETCHING_DOCUMENT_CATEGORIES, err);\r\n }\r\n });\r\n this.subscription.add(categoriesSubscription);\r\n }\r\n \r\n /**\r\n * Refetches all data when contextId changes\r\n */\r\n refetchAllDataForNewContext(): void {\r\n if (this.contextId && this.contextId !== SHARED.EMPTY) {\r\n this.documentStore.clearSelectionState();\r\n this.documentStore.clearDocumentViewerState();\r\n this.fetchDocumentCatagories();\r\n this.fetchUserListWithFilters();\r\n this.fetchStatusData();\r\n this.documentHelperService.initializeSelectionWatcherWithInitialLoad(this.contextId);\r\n }\r\n }\r\n\r\n /**\r\n * Sets up subscription to listen for filtered document responses\r\n */\r\n setupFilteredDocumentSubscription(): void {\r\n this.subscription.add(\r\n this.documentQuery.selectDocumentListResponse().subscribe({\r\n next: (response: any) => {\r\n this.documentListResponse = response;\r\n },\r\n error: (error: any) => {\r\n console.error(ERRORS.ERROR_RECEIVING_DOCUMENT_LIST, error);\r\n }\r\n })\r\n );\r\n }\r\n\r\n /** \r\n * Unsubscribe subscription on destroy of component and clean up state.\r\n */\r\n ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n this.documentHelperService.cleanupSelectionWatcher();\r\n this.clearAllState();\r\n }\r\n}\r\n","<div class=\"grid m-0 h-full flex\">\r\n <div class=\"col-12 md:col-2 lg:col-2\">\r\n <lib-documents-menu [catagories]=\"catagories\" [applicationNumber]=\"applicationNumber\" [contextId]=\"contextId\"></lib-documents-menu>\r\n </div>\r\n <div class=\"col-12 md:col-10 lg:col-10 p-0 h-full\" [ngClass]=\"{'custom-scroll': true}\">\r\n <div class=\"card\">\r\n <lib-folder-container [contextId]=\"contextId\" [userList]=\"userList\" [statusData]=\"statusData\" [categories]=\"catagories\"></lib-folder-container>\r\n </div>\r\n <div >\r\n <lib-document-list [contextId]=\"contextId\" [documentListResponse]=\"documentListResponse\">\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { DocumentStore } from '../../state/document.store';\r\nimport { FolderBlockModel } from '../../models/folder.model';\r\nimport { SHARED } from '../../../../Shared/constant/SHARED';\r\n\r\n/**\r\n * The `FolderBlockComponent` is responsible for displaying a block of folders and\r\n * providing filtering functionality based on folder IDs.\r\n *\r\n * It uses data from the `DocumentStore` and constants from the `SHARED` configuration \r\n * to display missing and pending file counts.\r\n */\r\n@Component({\r\n selector: 'lib-folder-block',\r\n standalone: false,\r\n templateUrl: './folder-block.component.html',\r\n styleUrl: './folder-block.component.scss'\r\n})\r\nexport class FolderBlockComponent {\r\n /**\r\n * Array of folder blocks data to display.\r\n * Each folder is represented as a `FolderBlockModel`.\r\n */\r\n @Input() folderList : FolderBlockModel[] = SHARED.EMPTY_ARRAY;\r\n \r\n /** Number of missing files, sourced from the `SHARED` constants. */\r\n missingFileCount = SHARED.MISSINGCOUNT;\r\n\r\n /** Number of pending files, sourced from the `SHARED` constants. */\r\n pendingFileCount = SHARED.PENDINGCOUNT;\r\n\r\n /**\r\n * Injects the `DocumentStore` service to manage and access document-related state.\r\n * @param {DocumentStore} documentStore - The state management store for documents.\r\n */\r\n constructor(public documentStore: DocumentStore) {}\r\n\r\n /**\r\n * Handles the click event for filtering based on the provided folder ID.\r\n * This method validates the folder ID and returns it for further processing. \r\n * If the folder ID is not provided, an empty string is returned.\r\n * @param {string} folderBlockId - The unique identifier of the folder to filter by.\r\n * @returns {string} The validated folder ID, or an empty string if the input is invalid.\r\n */\r\n handleClickForFilter(folderBlockId: string): string {\r\n if (!folderBlockId) {\r\n return SHARED.EMPTY;\r\n }\r\n this.documentStore.setParentDocumentTypeId(folderBlockId);\r\n return folderBlockId;\r\n }\r\n \r\n}\r\n","<div class=\"card p-0 folder-info\">\r\n <div class=\"text-900 text-xl font-semibold ml-2 mb-1\">Folders</div>\r\n <div class=\"grid m-0\">\r\n <div *ngFor=\"let folder of folderList\" class=\"col-12 md:col-6 xl:col-4 container-wrapper\">\r\n <div\r\n class=\"p-3 border-1 h-full surface-border flex flex-column justify-content-between hover:surface-100 cursor-pointer border-round\"\r\n (click)=\"handleClickForFilter(folder._id)\"\r\n >\r\n <div class=\"icon\">\r\n <img src=\"../../../../assets/images/FolderImg.png\" alt=\"\" />\r\n </div>\r\n <div class=\"flex flex-column\">\r\n <span class=\"text-600 mt-2\"> {{ folder.documentCount }} Files </span>\r\n <span class=\"text-900 text-lg mt-2 mb-2 font-semibold font-medium\">\r\n {{ folder.folderName }}\r\n </span>\r\n </div>\r\n <hr />\r\n <div class=\"flex justify-content-between\">\r\n <div class=\"flex flex-column\">\r\n <span>Missing</span>\r\n <span\r\n [ngClass]=\"{\r\n 'text-pink-500': missingFileCount > 0,\r\n 'text-green-500': missingFileCount === 0\r\n }\"\r\n >\r\n {{ missingFileCount }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-column\">\r\n <span>Pending</span>\r\n <span\r\n [ngClass]=\"{\r\n 'text-yellow-500': pendingFileCount > 0,\r\n 'text-green-500': pendingFileCount === 0\r\n }\"\r\n >\r\n {{ pendingFileCount }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DocumentModel } from '../../models/document.model';\r\n\r\n/**\r\n * DocumentListItemComponent\r\n *\r\n * This component displays individual document items within a list. \r\n * It accepts a list of documents as input and handles interactions with documents.\r\n */\r\n@Component({\r\n selector: 'lib-document-list-item',\r\n standalone: false,\r\n templateUrl: './document-list-item.component.html',\r\n styleUrls: ['./document-list-item.component.scss']\r\n})\r\nexport class DocumentListItemComponent {\r\n /**\r\n * Emit the selected document.\r\n * @type {EventEmitter<DocumentModel>}\r\n */\r\n @Output() documentClick = new EventEmitter<DocumentModel>();\r\n \r\n /**\r\n * The document to display.\r\n * @type {DocumentModel[]}\r\n */\r\n @Input() document!: DocumentModel;\r\n\r\n /**\r\n * Handles interactions with a document.\r\n * @param {DocumentModel} document - The document to be opened or interacted with.\r\n */\r\n handleOpenDocument(document: DocumentModel): void {\r\n if (!document) {\r\n console.error('Error: Document is null or undefined:', document);\r\n return;\r\n }\r\n this.documentClick.emit(document);\r\n }\r\n}\r\n","<div class=\"grid m-0\">\r\n <div\r\n class=\"col-12 flex align-items-center justify-content-between md:col-12 xl:col-12\"\r\n >\r\n <div\r\n class=\"col-5 flex cursor-pointer align-items-center pl-0\"\r\n (click)=\"handleOpenDocument(document)\"\r\n >\r\n <img src=\"../../../../assets/images/Frame.png\" alt=\"\" />\r\n <span class=\"ml-4 file-name-wrapper document-text-wrapper\">{{ document.fileName }}</span>\r\n </div>\r\n <div class=\"col-4 flex align-items-center justify-content-center\">\r\n <span\r\n [class]=\"'product-badge status-' + document.status?.toLowerCase()\"\r\n class=\"flex align-items-center justify-content-center pl-2 pr-2 pt-1 pb-1\"\r\n >\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'pending'\">\r\n <i class=\"pi pi-clock pr-1\" style=\"font-size: 12px;\"></i>\r\n Pending\r\n </ng-container>\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'verified'\">\r\n <i class=\"pi pi-check-circle pr-1\" style=\"font-size: 12px;\"></i>\r\n Verified\r\n </ng-container>\r\n <ng-container *ngIf=\"document.status?.toLowerCase() === 'alert'\">\r\n <i class=\"pi pi-bell pr-1\" style=\"font-size: 12px;\"></i>\r\n Alert\r\n </ng-container>\r\n </span>\r\n </div>\r\n <div class=\"document-type file-name-wrapper document-text-wrapper\">\r\n {{document.documentTypeName}}\r\n </div>\r\n </div>\r\n </div>\r\n ","import { ErrorHandler, Injectable, Injector } from '@angular/core';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/**\r\n * GlobalErrorHandler is a custom error handler that implements the ErrorHandler interface.\r\n * It is used to handle both HTTP errors and other types of errors globally in the application.\r\n * @class\r\n * @implements {ErrorHandler}\r\n * @decorator {Injectable}\r\n */\r\n@Injectable()\r\nexport class GlobalErrorHandler implements ErrorHandler {\r\n /**\r\n * Creates an instance of GlobalErrorHandler.\r\n * @constructor\r\n * @param {Injector} injector - The Angular injector used to get instances of services.\r\n */\r\n constructor(private injector: Injector) { }\r\n\r\n /**\r\n * Handles errors globally in the application.\r\n * \r\n * @param {any} error - The error object that needs to be handled.\r\n * @returns {void}\r\n */\r\n handleError(error: any): void {\r\n console.error('GlobalErrorHandler:', error);\r\n }\r\n}\r\n","import { Directive, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\nimport { DocumentModel } from \"../models/document.model\";\r\nimport { DocumentHelperService } from \"../services/document.service\";\r\n\r\n/**\r\n * Directive to display the document data\r\n */\r\n@Directive({\r\n selector: '[doc]',\r\n standalone: false\r\n})\r\nexport class DocumentDirective {\r\n\r\n /**\r\n * Creates an instance of DocumentDirective.\r\n * @param documentService Service to get the document data.\r\n * @param templateRef Reference to the template.\r\n * @param vcr View container reference to manage the view.\r\n */\r\n constructor(\r\n private documentService: DocumentHelperService,\r\n private templateRef: TemplateRef<any>,\r\n private vcr: ViewContainerRef\r\n ) {\r\n this.documentService.get().subscribe((document: DocumentModel | null) => {\r\n this.vcr.clear();\r\n if (document) {\r\n this.vcr.createEmbeddedView(this.templateRef, { $implicit: document });\r\n }\r\n });\r\n }\r\n}","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\r\nimport { DocumentQuery } from '../../state/document.query';\r\nimport { DocumentModel } from '../../models/document.model';\r\nimport { DocumentListItem } from '../../models/document-list-response.model';\r\n/**\r\n * Description placeholder\r\n * @class LinkedDocumentComponent\r\n * @typedef {LinkedDocumentComponent}\r\n * @implements {OnChanges}\r\n */\r\n@Component({\r\n selector: 'app-linked-document',\r\n templateUrl: './linked-document.component.html',\r\n styleUrl: './linked-document.component.scss',\r\n standalone : false\r\n})\r\nexport class LinkedDocumentComponent {\r\n /**\r\n * Selected document for view.\r\n * @type {?DocumentModel}\r\n */\r\n @Input() selectedDocument?: DocumentListItem;\r\n /**\r\n * Whole document list.\r\n * @type {?DocumentModel[]}\r\n */\r\n @Input() documentList?: DocumentListItem[];\r\n /**\r\n * Changed selected document.\r\n * @type {*}\r\n */\r\n @Output() selectedDocumentChange = new EventEmitter<DocumentListItem>();\r\n\r\n /**\r\n * Filtered documents.\r\n * @type {DocumentModel[]}\r\n */\r\n filteredDocuments: DocumentModel[] = [];\r\n\r\n /**\r\n * Handle the click on the document.\r\n * @param {DocumentModel} document - Clicked document.\r\n */\r\n handleDocumentClick(document: DocumentListItem): void {\r\n this.selectedDocument = document;\r\n this.selectedDocumentChange.emit(this.selectedDocument);\r\n }\r\n\r\n}\r\n","<div class=\"summary-card mb-4 pb-1\">\r\n <div class=\"card p-0 mb-0\"\r\n style=\"border-bottom: 1px solid;border-color: rgba(68, 72, 109, 0.2); border-bottom-right-radius: 0px;border-bottom-left-radius: 0px; background-color: #F9fafb;\">\r\n <div class=\"p-0\">\r\n <h4 class=\"m-0 pt-3 pl-3 mb-3\" style=\"font-size: 21px; font-weight: bold; \">Linked Documents</h4>\r\n </div>\r\n </div>\r\n <div class=\"card mb-0\" style=\"border-top-right-radius: 0px;border-top-left-radius: 0px;\">\r\n @for(document of documentList; track document){\r\n <div class=\"linkedDocument documentName m-2\">\r\n <div class=\"documentName\" [class.selected]=\"document._id === selectedDocument?._id\"\r\n (click)=\"handleDocumentClick(document)\">\r\n <span class=\"pi pi-link\"></span>\r\n {{document.fileName}}\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n \r\n \r\n </div>\r\n ","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TablePrimaryComponent } from './components/table-primary/table-primary.component';\r\nimport { TableModule } from 'primeng/table';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { HasPermissionDirective } from '../lib/document/directives/permission.directive';\r\nimport { ConfirmationDialogComponent } from './components/confirmation-dialog/confirmation-dialog.component';\r\nimport { ConfirmationService } from 'primeng/api';\r\n\r\n\r\n@NgModule({\r\n declarations: [TablePrimaryComponent, HasPermissionDirective, ConfirmationDialogComponent],\r\n imports: [\r\n CommonModule,\r\n TableModule,\r\n ButtonModule,\r\n RippleModule\r\n ],\r\n providers: [ConfirmationService],\r\n exports : [TablePrimaryComponent, HasPermissionDirective, ConfirmationDialogComponent]\r\n})\r\nexport class SharedModule { }\r\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DocumentContainerComponent } from './components/document-container/document-container.component';\r\nimport { FolderContainerComponent } from './components/folder-container/folder-container.component';\r\nimport { FolderBlockComponent } from './components/folder-block/folder-block.component';\r\nimport { DocumentListComponent } from './components/document-list/document-list.component';\r\nimport { AccordionModule } from 'primeng/accordion';\r\nimport { DocumentListItemComponent } from './components/document-list-item/document-list-item.component';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { SidebarModule } from 'primeng/sidebar';\r\nimport { FileUploadModule } from 'primeng/fileupload';\r\nimport { DocumentUploadComponent } from './components/document-upload/document-upload.component';\r\nimport { MessageService } from 'primeng/api';\r\nimport { ConfirmationService } from 'primeng/api';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { BadgeModule } from 'primeng/badge';\r\nimport { ListboxModule } from 'primeng/listbox';\r\nimport { TimelineModule } from 'primeng/timeline';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { InputTextareaModule } from 'primeng/inputtextarea';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DocumentViewerComponent } from './components/document-viewer/document-viewer.component';\r\nimport { DocumentHistoryComponent } from './components/document-history/document-history.component';\r\nimport { PdfViewerModule } from 'ng2-pdf-viewer';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { AppConfigService } from '../../Shared/services/app-config.service';\r\nimport { GlobalErrorHandler } from '../../Shared/services/global-error.handler';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DocumentDirective } from './directives/document.directive';\r\nimport { LinkedDocumentComponent } from './components/linked-document/linked-document.component';\r\nimport { DocumentsMenuComponent } from './components/documents-menu/documents-menu.component';\r\nimport { MenuModule } from 'primeng/menu';\r\nimport { PanelMenuModule } from 'primeng/panelmenu';\r\nimport { CardModule } from 'primeng/card';\r\nimport { TableModule } from 'primeng/table';\r\nimport { UserListComponent } from './components/user-list/user-list.component';\r\nimport { DocumentStatusComponent } from './components/document-status/document-status.component';\r\nimport { DocumentActionsComponent } from './components/document-actions/document-actions.component';\r\nimport { DocumentSearchComponent } from './components/document-search/document-search.component';\r\nimport { SharedModule } from '../../Shared/shared.module';\r\nimport { DocumentActionsService } from './services/document-actions.service';\r\nimport { SidebarComponent } from './components/sidebar/sidebar.component';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { MessagesModule } from 'primeng/messages';\r\nimport { MessageModule } from 'primeng/message';\r\n\r\n/**\r\n * @module DocumentModule\r\n * \r\n * The `DocumentModule` handles the organization and display of document and folder components \r\n * in the application. This module is designed to support features like folder containers, \r\n * document lists, and individual document items.\r\n */\r\n@NgModule({\r\n declarations: [\r\n /**\r\n * The main container for managing documents.\r\n * DocumentContainerComponent\r\n */\r\n DocumentContainerComponent,\r\n\r\n /**\r\n * A container component to manage folders.\r\n * FolderContainerComponent\r\n */\r\n FolderContainerComponent,\r\n\r\n /**\r\n * A block component that represents an individual folder.\r\n * FolderBlockComponent\r\n */\r\n FolderBlockComponent,\r\n\r\n /**\r\n * A component to display a list of documents.\r\n * DocumentListComponent\r\n */\r\n DocumentListComponent,\r\n\r\n /**\r\n * A component representing an individual item in the document list.\r\n * DocumentListItemComponent\r\n */\r\n DocumentListItemComponent,\r\n\r\n /** \r\n * A component representing to upload a file.\r\n */\r\n DocumentUploadComponent,\r\n\r\n /**\r\n * A component representing and allow you to view the document.\r\n */\r\n DocumentViewerComponent,\r\n\r\n /**\r\n * A component representing document history timeline.\r\n */\r\n DocumentHistoryComponent,\r\n\r\n /**\r\n * A directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n /**\r\n * A component which have linked documents.\r\n */\r\n LinkedDocumentComponent,\r\n DocumentsMenuComponent,\r\n UserListComponent,\r\n DocumentStatusComponent,\r\n DocumentActionsComponent,\r\n DocumentSearchComponent,\r\n /**\r\n * A sidebar component for content projection.\r\n */\r\n SidebarComponent,\r\n\r\n ],\r\n imports: [\r\n /**\r\n * Angular's CommonModule is imported to access common directives like `ngIf` and `ngFor`.\r\n */\r\n CommonModule,\r\n\r\n /**\r\n * PrimeNG AccordionModule is used for creating collapsible sections in the UI.\r\n */\r\n AccordionModule,\r\n\r\n /**\r\n * HttpClienModule for the http calls\r\n */\r\n HttpClientModule,\r\n\r\n /**\r\n * PrimeNG ButtonModule is used for creating buttons in the UI.\r\n */\r\n ButtonModule,\r\n\r\n /**\r\n * PrimeNG SidebarModule is used for creating sidebars.\r\n */\r\n SidebarModule,\r\n\r\n /**\r\n * PrimeNG FileUploadModule is used for uploading file.\r\n */\r\n FileUploadModule,\r\n\r\n /**\r\n * PrimeNG ProgressBarModule is used for showing progress.\r\n */\r\n ProgressBarModule,\r\n\r\n /**\r\n * PrimeNG BadgeModule is used for showing badge value.\r\n */\r\n BadgeModule,\r\n\r\n /**\r\n * PrimeNG ListboxModule is used for showing listbox value.\r\n */\r\n ListboxModule,\r\n\r\n /**\r\n * PrimeNG CheckboxModule is used for showing checkbox value.\r\n */\r\n CheckboxModule,\r\n\r\n /**\r\n * PrimeNG RadioButtonModule is used for showing radio button values.\r\n */\r\n RadioButtonModule,\r\n\r\n /**\r\n * PrimeNG TimelineModule is used for showing timeline value.\r\n */\r\n TimelineModule,\r\n /**\r\n * PrimeNG InputTextareaModule is used for showing textarea value.\r\n */\r\n InputTextareaModule,\r\n /**\r\n * FormsModule to handle the forms.\r\n */\r\n FormsModule,\r\n /**\r\n * PdfViewerModule to handle and make visible the pdf.\r\n */\r\n PdfViewerModule,\r\n /**\r\n * PrimeNG DialogModule is used for showing dialog.\r\n */\r\n DialogModule,\r\n /**\r\n * PrimeNG DropdownModule is used for creating dropdown menus, allowing users to select options from a list.\r\n */\r\n DropdownModule,\r\n /**\r\n * PrimeNG InputTextModule is used for creating InputTextFeilds, allowing users to enter name for a document.\r\n */\r\n InputTextModule,\r\n\r\n MenuModule,\r\n PanelMenuModule,\r\n CardModule,\r\n TableModule,\r\n SharedModule,\r\n InputTextareaModule,\r\n ToastModule,\r\n TooltipModule,\r\n MessagesModule,\r\n MessageModule\r\n \r\n ],\r\n exports: [\r\n /**\r\n * Exports the `DocumentContainerComponent` to be used in other modules.\r\n */\r\n DocumentContainerComponent,\r\n /**\r\n * Exports the `DocumentViewerComponent` to be used in other modules.\r\n */\r\n DocumentViewerComponent,\r\n /**\r\n * Exports the `DocumentActionsComponent` to be used in other modules.\r\n */\r\n DocumentActionsComponent,\r\n /**\r\n * A component to display a list of documents.\r\n * DocumentListComponent\r\n */\r\n DocumentListComponent,\r\n\r\n /**\r\n * A directive to show the document.\r\n */\r\n DocumentDirective,\r\n\r\n /**\r\n * A component for searching documents.\r\n */\r\n DocumentSearchComponent,\r\n\r\n /**\r\n * A sidebar component for content projection.\r\n */\r\n SidebarComponent,\r\n\r\n\r\n ],\r\n providers: [\r\n /**\r\n * Provide the messageservice to be used in other components.\r\n */\r\n MessageService,\r\n\r\n /**\r\n * Provide the DocumentActionsService to be used in other components.\r\n */\r\n DocumentActionsService,\r\n\r\n /**\r\n * Provide the ConfirmationService to be used in other components.\r\n */\r\n ConfirmationService,\r\n\r\n /**\r\n * Provide the messageservice to be used in other components.\r\n */\r\n { provide: GlobalErrorHandler, useClass: GlobalErrorHandler },\r\n /**\r\n * Initializes the application configuration by loading it from the AppConfigService\r\n * before the application starts.\r\n * This ensures that the configuration is available for the rest of the app when needed.\r\n * The configuration is loaded asynchronously using the APP_INITIALIZER.\r\n * @returns {Function} - A function that loads the configuration from the AppConfigService.\r\n */\r\n {\r\n provide: APP_INITIALIZER,\r\n /**\r\n * This useFactory is executed when the app initializes.\r\n * It calls the AppConfigService to load the configuration.\r\n * If an error occurs, it throws an error.\r\n * @param {AppConfigService} configService - The service responsible for loading the application configuration.\r\n * @returns {Function} - A function that loads the configuration from the AppConfigService.\r\n */\r\n useFactory: (configService: AppConfigService) => () =>\r\n configService.loadAppConfig().catch((error) => {\r\n throw new Error(error);\r\n }),\r\n deps: [AppConfigService],\r\n multi: true,\r\n },\r\n \r\n ]\r\n})\r\nexport class DocumentModule { }\r\n","/*\r\n * Public API Surface of cat-document-lib\r\n */\r\n\r\nexport * from './lib/document/document.module';\r\nexport * from './lib/document/components/document-container/document-container.component';\r\nexport * from './lib/document/components/document-viewer/document-viewer.component';\r\nexport * from './lib/document/components/document-actions/document-actions.component';\r\nexport * from './lib/document/components/document-history/document-history.component';\r\nexport * from './lib/document/components/document-list/document-list.component';\r\nexport * from './lib/document/components/document-search/document-search.component';\r\nexport * from './lib/document/components/sidebar/sidebar.component';\r\nexport * from './lib/document/models/document-history.model';\r\nexport * from './lib/document/models/uploaded-file-response.model';\r\nexport * from './lib/document/services/document-table-builder.service';\r\nexport * from './lib/document/directives/document.directive';\r\nexport * from './lib/document/directives/permission.directive';\r\nexport * from './Shared/components/confirmation-dialog/confirmation-dialog.component';\r\nexport * from './Shared/components/table-primary/table-primary.component';\r\nexport * from './Shared/components/table-primary/table-primary.model';\r\nexport * from './Shared/constant/SHARED';\r\nexport * from './Shared/shared.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.DocumentStore","i3.AppConfigService","i2.DocumentQuery","i3.DocumentHttpService","i1.DocumentService","i2.DocumentStore","i1.DocumentHttpService","i2.FileFormatService","i1.DocumentUploadBusinessService","i2.DocumentUploadFormService","i1.DocumentUploadService","i2.DocumentService","i4.FileFormatService","i5.DocumentUploadBusinessService","i6.DocumentUploadFormService","i7.DocumentUploadDataService","i8","i9","i13","i2","i3","i4","i6.ConfirmationDialogComponent","i1.DocumentHelperService","i3.DocumentQuery","i4.UserListService","i5","i1.DocumentQuery","i2.DocumentHelperService","i3.StatusCalculatorService","debounceTime","distinctUntilChanged","i3.DocumentUploadComponent","i4.UserListComponent","i5.DocumentStatusComponent","i6.DocumentSearchComponent","i7.SidebarComponent","i1.SessionService","i2.DocumentHttpService","i4.DocumentStore","i5.DocumentTableBuilderService","i6.DocumentHelperService","i6.HasPermissionDirective","i5.DocumentQuery","i1.DocumentHistoryStyleService","i1.DocumentHistoryService","i1.DocumentActionsService","i6","i9.HasPermissionDirective","i10.ConfirmationDialogComponent","i4.DocumentViewerService","i7.DocumentHistoryComponent","i8.DocumentActionsComponent","i1.DocumentListService","i7","i8.TablePrimaryComponent","i9.DocumentViewerComponent","i3.DocumentMenuService","i4.DocumentHelperService","i4.DocumentHttpService","i5.DocumentHelperService","i7.FolderContainerComponent","i8.DocumentListComponent","i9.DocumentsMenuComponent"],"mappings":"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"}
|