cloud-ide-academics 0.0.26 → 0.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{cloud-ide-academics-class-program-term-create.component-CM7vxAXT.mjs → cloud-ide-academics-class-program-term-create.component-BRbHViJN.mjs} +17 -4
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-BRbHViJN.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-class-program-term-list.component-BQ1Etnft.mjs → cloud-ide-academics-class-program-term-list.component-CP2vlRBP.mjs} +67 -83
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-CP2vlRBP.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-cloud-ide-academics-CFEjm3Iz.mjs → cloud-ide-academics-cloud-ide-academics-g9qZGJtG.mjs} +10 -10
- package/fesm2022/{cloud-ide-academics-cloud-ide-academics-CFEjm3Iz.mjs.map → cloud-ide-academics-cloud-ide-academics-g9qZGJtG.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-program-class-create.component-DG6m0cmY.mjs → cloud-ide-academics-program-class-create.component-KijRP6Nl.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-program-class-create.component-DG6m0cmY.mjs.map → cloud-ide-academics-program-class-create.component-KijRP6Nl.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-program-class-list.component-DizuYHy3.mjs → cloud-ide-academics-program-class-list.component-B5cy2Gpk.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-program-class-list.component-DizuYHy3.mjs.map → cloud-ide-academics-program-class-list.component-B5cy2Gpk.mjs.map} +1 -1
- package/fesm2022/cloud-ide-academics.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-CM7vxAXT.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-BQ1Etnft.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-academics-cloud-ide-academics-CFEjm3Iz.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/cloud-ide-academics.routes.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/services/academic-year.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/services/academic-year-mapping.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-create/academic-year-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-create/academic-year-create.component.html","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-list/academic-year-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-list/academic-year-list.component.html","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/index.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/services/class-program-branch.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/services/program-class.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component.html","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component.html","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/index.ts","../../../projects/cloud-ide-academics/src/public-api.ts","../../../projects/cloud-ide-academics/src/cloud-ide-academics.ts"],"sourcesContent":["import { Route } from '@angular/router';\r\nimport { authGuard } from 'cloud-ide-auth';\r\nexport const academicsRoutes: Route[] = [\r\n // Academic Year Management Routes\r\n {\r\n path: 'academic_year',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-list/academic-year-list.component').then(c => c.AcademicYearListComponent),\r\n title: 'Academic Year Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n },\r\n {\r\n path: 'academic_year/create',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\r\n title: 'Create Academic Year',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n },\r\n {\r\n path: 'academic_year/edit/:query',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\r\n title: 'Edit Academic Year',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n },\r\n {\r\n path: 'academic_year/view/:query',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\r\n title: 'View Academic Year',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n },\r\n {\r\n path: 'program-class-management',\r\n loadComponent: () => import('./collection/program-class-management/components/program-class-list/program-class-list.component').then(c => c.ProgramClassListComponent),\r\n title: 'Program Class Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: false,\r\n sypg_page_code: \"program_class\"\r\n }\r\n },\r\n {\r\n path: 'program-class-management/create',\r\n loadComponent: () => import('./collection/program-class-management/components/program-class-create/program-class-create.component').then(c => c.ProgramClassCreateComponent),\r\n title: 'Create Program Class',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: false,\r\n sypg_page_code: \"program_class\"\r\n }\r\n },\r\n {\r\n path: 'program-class-management/edit/:query',\r\n loadComponent: () => import('./collection/program-class-management/components/program-class-create/program-class-create.component').then(c => c.ProgramClassCreateComponent),\r\n title: 'Edit Program Class',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: false,\r\n sypg_page_code: \"program_class\"\r\n }\r\n },\r\n {\r\n path: 'program-class-management/view/:query',\r\n loadComponent: () => import('./collection/program-class-management/components/program-class-create/program-class-create.component').then(c => c.ProgramClassCreateComponent),\r\n title: 'View Program Class',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: false,\r\n sypg_page_code: \"program_class\"\r\n }\r\n },\r\n {\r\n path: 'program-term-management/create',\r\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component').then(c => c.ClassProgramTermCreateComponent),\r\n title: 'Create Class Program Term',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_term\"\r\n }\r\n },\r\n {\r\n path: 'program-term-management/edit/:query',\r\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component').then(c => c.ClassProgramTermCreateComponent),\r\n title: 'Edit Class Program Term',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_term\"\r\n }\r\n },\r\n {\r\n path: 'program-term-management/view/:query',\r\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component').then(c => c.ClassProgramTermCreateComponent),\r\n title: 'View Class Program Term',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_term\"\r\n }\r\n },\r\n {\r\n path: 'program-term-management',\r\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component').then(c => c.ClassProgramTermListComponent),\r\n title: 'Class Program Term Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_term\"\r\n }\r\n },\r\n {\r\n path: 'program-term-management/:query',\r\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component').then(c => c.ClassProgramTermListComponent),\r\n title: 'Class Program Term Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_term\"\r\n }\r\n },\r\n {\r\n path: 'class-program-term',\r\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component').then(c => c.ProgramTermSectionListComponent),\r\n title: 'Program Term Section Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"program_term_section\"\r\n }\r\n },\r\n {\r\n path: 'class-program-term/:query',\r\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component').then(c => c.ProgramTermSectionListComponent),\r\n title: 'Program Term Section Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"program_term_section\"\r\n }\r\n },\r\n {\r\n path: 'class-program-term/create',\r\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component').then(c => c.ProgramTermSectionCreateComponent),\r\n title: 'Create Program Term Section',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"program_term_section\"\r\n }\r\n },\r\n {\r\n path: 'class-program-term/edit/:query',\r\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component').then(c => c.ProgramTermSectionCreateComponent),\r\n title: 'Edit Program Term Section',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"program_term_section\"\r\n }\r\n },\r\n {\r\n path: 'class-program-term/view/:query',\r\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component').then(c => c.ProgramTermSectionCreateComponent),\r\n title: 'View Program Term Section',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"program_term_section\"\r\n }\r\n },\r\n // Class Program Branch Management Routes\r\n {\r\n path: 'program_specialization/:query',\r\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component').then(c => c.CideLytClassProgramBranchListComponent),\r\n title: 'Class Program Branch Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_branch\"\r\n }\r\n },\r\n {\r\n path: 'program_specialization',\r\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component').then(c => c.CideLytClassProgramBranchListComponent),\r\n title: 'Class Program Branch Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_branch\"\r\n }\r\n },\r\n {\r\n path: 'program_specialization/create/:query?',\r\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component').then(c => c.CideLytClassProgramBranchFormComponent),\r\n title: 'Create Class Program Branch',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_branch\"\r\n }\r\n },\r\n {\r\n path: 'program_specialization/edit/:query',\r\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component').then(c => c.CideLytClassProgramBranchFormComponent),\r\n title: 'Edit Class Program Branch',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_branch\"\r\n }\r\n },\r\n {\r\n path: 'program_specialization/view/:query',\r\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component').then(c => c.CideLytClassProgramBranchFormComponent),\r\n title: 'View Class Program Branch',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_branch\"\r\n }\r\n }\r\n];\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, forkJoin, of, type OperatorFunction } from 'rxjs';\r\nimport { map, catchError, switchMap } from 'rxjs/operators';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n type academicYearControllerResponse,\r\n type MAcademicYear,\r\n type academicYearByIdControllerResponse,\r\n type MAcademicYearGetByIdPayload,\r\n type academicYearInsertUpdateControllerResponse,\r\n type MAcademicYearInsertUpdatePayload,\r\n type academicYearDeleteControllerResponse,\r\n type MAcademicYearDeletePayload,\r\n type academicYearToggleStatusControllerResponse,\r\n type MAcademicYearToggleStatusPayload,\r\n type MAcademicYearMappingInsertUpdatePayload,\r\n type academicYearMappingInsertUpdateControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n// Types\r\ninterface AcademicYearMapping {\r\n _id?: string;\r\n acayrmp_entity_id_syen: string;\r\n acayrmp_islocked?: boolean;\r\n acayrmp_iscurrent?: boolean;\r\n}\r\n\r\ninterface AcademicYearWithMappings {\r\n acayr_academic_year_mappings?: AcademicYearMapping[];\r\n [key: string]: any;\r\n}\r\n\r\ninterface DeleteMappingPayload {\r\n acayrmp_id: string;\r\n}\r\n\r\ninterface ToggleMappingPayload {\r\n acayrmp_id: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytAcademicYearService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of academic years\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of academic year list response\r\n */\r\n getAcademicYearList(payload: MAcademicYear): Observable<academicYearControllerResponse> {\r\n console.log(\"payload\", payload)\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get academic year by ID\r\n * @param payload - Academic year ID payload\r\n * @returns Observable of academic year data\r\n */\r\n getAcademicYearById(payload: MAcademicYearGetByIdPayload): Observable<academicYearByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Create or update academic year\r\n * @param data - Academic year data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateAcademicYear(data: MAcademicYearInsertUpdatePayload): Observable<academicYearInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Create or update academic year with mappings\r\n * @param data - Academic year data with mappings\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateAcademicYearWithMappings(data: AcademicYearWithMappings): Observable<academicYearInsertUpdateControllerResponse> {\r\n // Extract mappings from the data\r\n const mappings = data.acayr_academic_year_mappings || [];\r\n const academicYearData = { ...data } as MAcademicYearInsertUpdatePayload;\r\n delete (academicYearData as any).acayr_academic_year_mappings;\r\n\r\n // First save/update the academic year\r\n return this.saveUpdateAcademicYear(academicYearData).pipe(\r\n switchMap((academicYearResponse) => {\r\n if (!academicYearResponse.success || !academicYearResponse.data) {\r\n return of(academicYearResponse);\r\n }\r\n\r\n const academicYearId = academicYearResponse.data._id;\r\n \r\n // If no mappings, return the academic year response\r\n if (mappings.length === 0) {\r\n return of(academicYearResponse);\r\n }\r\n\r\n // Process mappings\r\n const mappingObservables = mappings.map((mapping: AcademicYearMapping) => {\r\n const mappingPayload: MAcademicYearMappingInsertUpdatePayload = {\r\n _id: mapping._id && !mapping._id.startsWith('temp_') ? mapping._id : undefined,\r\n acayrmp_academic_year_id_acayr: academicYearId,\r\n acayrmp_entity_id_syen: mapping.acayrmp_entity_id_syen,\r\n acayrmp_islocked: mapping.acayrmp_islocked || false,\r\n acayrmp_iscurrent: mapping.acayrmp_iscurrent || false\r\n };\r\n\r\n const mappingUrl = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping\r\n ]);\r\n\r\n return this.http.post(mappingUrl, mappingPayload).pipe(\r\n catchError((error) => {\r\n console.error('Error saving mapping:', error);\r\n return of({ success: false, error });\r\n })\r\n );\r\n });\r\n\r\n // Execute all mapping operations\r\n return forkJoin(mappingObservables).pipe(\r\n map((mappingResponses: any) => {\r\n // Check if all mappings were successful\r\n const allMappingsSuccessful = mappingResponses.every((response: any) => response.success);\r\n \r\n if (allMappingsSuccessful) {\r\n return {\r\n ...academicYearResponse,\r\n message: 'Academic year and mappings saved successfully'\r\n };\r\n } else {\r\n return {\r\n ...academicYearResponse,\r\n message: 'Academic year saved but some mappings failed',\r\n mappingErrors: mappingResponses.filter((response: any) => !response.success)\r\n } as any;\r\n }\r\n })\r\n );\r\n }),\r\n catchError((error) => {\r\n console.error('Error in saveUpdateAcademicYearWithMappings:', error);\r\n return of({\r\n success: false,\r\n code: 500 as any,\r\n message: 'Error saving academic year with mappings',\r\n error\r\n } as any);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Delete academic year\r\n * @param payload - Academic year ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteAcademicYear(payload: MAcademicYearDeletePayload): Observable<academicYearDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\r\n 'delete',\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle academic year status\r\n * @param payload - Academic year ID payload\r\n * @returns Observable of the toggle response\r\n */\r\n toggleAcademicYearStatus(payload: MAcademicYearToggleStatusPayload): Observable<academicYearToggleStatusControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\r\n 'toggle-status'\r\n ]);\r\n\r\n console.log('🔄 Making PATCH request to toggle academic year status:', { url, payload });\r\n return this.http.patch(url, payload);\r\n }\r\n\r\n /**\r\n * Delete academic year mapping\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteAcademicYearMapping(payload: DeleteMappingPayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping\r\n ]);\r\n\r\n return this.http.delete(url, { body: payload });\r\n }\r\n\r\n /**\r\n * Toggle academic year mapping status\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the toggle response\r\n */\r\n toggleAcademicYearMappingStatus(payload: ToggleMappingPayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'toggle-status'\r\n ]);\r\n\r\n console.log('🔄 Making PATCH request to toggle academic year mapping status:', { url, payload });\r\n return this.http.patch(url, payload);\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n academicYearMappingControllerResponse,\r\n MAcademicYearMapping,\r\n academicYearMappingByIdControllerResponse,\r\n MAcademicYearMappingGetByIdPayload,\r\n academicYearMappingInsertUpdateControllerResponse,\r\n MAcademicYearMappingInsertUpdatePayload,\r\n academicYearMappingDeleteControllerResponse,\r\n MAcademicYearMappingDeletePayload,\r\n academicYearMappingToggleStatusControllerResponse,\r\n MAcademicYearMappingToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytAcademicYearMappingService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of academic year mappings\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of academic year mapping list response\r\n */\r\n getAcademicYearMappingList(payload: MAcademicYearMapping): Observable<academicYearMappingControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get academic year mapping by ID\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of academic year mapping data\r\n */\r\n getAcademicYearMappingById(payload: MAcademicYearMappingGetByIdPayload): Observable<academicYearMappingByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Create or update academic year mapping\r\n * @param data - Academic year mapping data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateAcademicYearMapping(data: MAcademicYearMappingInsertUpdatePayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete academic year mapping\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteAcademicYearMapping(payload: MAcademicYearMappingDeletePayload): Observable<academicYearMappingDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'delete',\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle academic year mapping status\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the toggle response\r\n */\r\n toggleAcademicYearMappingStatus(payload: MAcademicYearMappingToggleStatusPayload): Observable<academicYearMappingToggleStatusControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'toggle-status'\r\n ]);\r\n\r\n return this.http.post(url, payload);\r\n }\r\n}\r\n","import { \n Component, \n inject, \n signal, \n OnInit, \n DestroyRef, \n OnDestroy,\n type OnDestroy as OnDestroyType \n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { \n FormBuilder, \n FormGroup, \n ReactiveFormsModule, \n Validators, \n FormArray,\n type AbstractControl \n} from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, forkJoin, of, type OperatorFunction } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\nimport { \n CideTextareaComponent, \n CideEleButtonComponent, \n CideEleTabComponent, \n type TabItem, \n CideIconComponent \n} from 'cloud-ide-element';\nimport { CideLytAcademicYearService } from '../../services/academic-year.service';\nimport { CideLytAcademicYearMappingService } from '../../services/academic-year-mapping.service';\nimport { ENTITY_SERVICE_TOKEN, type IEntityService } from 'cloud-ide-shared';\nimport {\n type MAcademicYearInsertUpdatePayload,\n type MAcademicYearGetByIdPayload,\n type academicYearByIdControllerResponse,\n generateObjectFromString\n} from 'cloud-ide-lms-model';\nimport { CideSelectComponent, CideFormFieldErrorComponent } from 'cloud-ide-element';\nimport { CideInputComponent } from 'cloud-ide-element';\n\n// Types\ninterface AcademicYearMapping {\n _id?: string;\n acayrmp_entity_id_syen: string;\n acayrmp_islocked?: boolean;\n acayrmp_iscurrent?: boolean;\n}\n\ninterface Entity {\n _id?: string;\n syen_name?: string;\n syen_code?: string;\n}\n\n\n@Component({\n selector: 'cide-core-academic-year-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideEleTabComponent,\n CideIconComponent,\n CideSelectComponent,\n CideFormFieldErrorComponent\n ],\n templateUrl: './academic-year-create.component.html'\n})\nexport class AcademicYearCreateComponent implements OnInit, OnDestroy {\n // Modern Angular 20+ dependency injection\n private readonly destroyRef = inject(DestroyRef);\n private readonly fb = inject(FormBuilder);\n private readonly academicYearService = inject(CideLytAcademicYearService);\n private readonly academicYearMappingService = inject(CideLytAcademicYearMappingService);\n private readonly entityService = inject<IEntityService>(ENTITY_SERVICE_TOKEN);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n\n // Form and state management with proper typing\n academicYearForm!: FormGroup;\n readonly activeTab = signal<string>('basic');\n readonly loading = signal<boolean>(false);\n\n // Academic year information from route\n readonly academicYearId = signal<string>('');\n readonly isEditMode = signal<boolean>(false);\n readonly originalMappings = signal<AcademicYearMapping[]>([]); // Track original mappings for deletion\n\n // Entity options for dropdown\n readonly entityOptions = signal<Entity[]>([]);\n\n constructor() {\n this.academicYearForm = this.fb.group({\n // Basic Academic Year Information\n acayr_code: ['', [Validators.required]],\n acayr_name: ['', [Validators.required]],\n acayr_description: [''],\n acayr_from_date: ['', [Validators.required]],\n acayr_to_date: ['', [Validators.required]],\n acayr_isactive: [true],\n acayr_iscurrent: [false],\n acayr_islocked: [false],\n \n // Academic Year Mapping Information\n acayr_academic_year_mappings: this.fb.array([])\n });\n }\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Get academic year information from route (for edit mode)\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n console.log(queryParams, 'queryParams');\n\n if (queryParams) {\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n if (queryData?.acayr_id) {\n this.academicYearId.set(queryData.acayr_id as string);\n this.isEditMode.set(true);\n this.loadAcademicYearData(queryData.acayr_id as string);\n }\n } else {\n // Create mode\n this.isEditMode.set(false);\n }\n\n // Always load dropdown options\n this.loadDropdownOptions();\n });\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n console.log('🏢 Loading dropdown options');\n // Load entity options\n this.entityService.getEntityList({}).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log(`🏢 entities:`, response.data);\n this.entityOptions.set(response.data || []);\n }\n },\n error: (error) => console.error('Error loading entities:', error)\n });\n }\n\n /**\n * Load academic year data for edit mode\n */\n private loadAcademicYearData(academicYearId: string): void {\n this.loading.set(true);\n\n const payload: MAcademicYearGetByIdPayload = {\n acayr_id: academicYearId\n };\n\n // Load academic year data\n this.academicYearService.getAcademicYearById(payload).subscribe({\n next: (response: academicYearByIdControllerResponse) => {\n if (response?.success && response.data) {\n console.log('📚 Academic year data loaded:', response.data);\n this.populateFormWithAcademicYearData(response.data);\n \n // Load existing mappings for this academic year\n this.loadAcademicYearMappings(academicYearId);\n } else {\n console.error('❌ Failed to load academic year data');\n this.loading.set(false);\n }\n },\n error: (error) => {\n console.error('❌ Error loading academic year data:', error);\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Load academic year mappings for edit mode\n */\n private loadAcademicYearMappings(academicYearId: string): void {\n const mappingPayload: any = {\n acayrmp_academic_year_id_acayr: academicYearId\n };\n\n this.academicYearMappingService.getAcademicYearMappingList(mappingPayload).subscribe({\n next: (response: any) => {\n if (response?.success && response.data) {\n console.log('🔗 Academic year mappings loaded:', response.data);\n this.populateFormWithMappingsData(response.data);\n } else {\n console.warn('⚠️ No mappings found for this academic year');\n }\n this.loading.set(false);\n },\n error: (error: any) => {\n console.error('❌ Error loading academic year mappings:', error);\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with academic year data\n */\n private populateFormWithAcademicYearData(data: any): void {\n if (data) {\n this.academicYearForm.patchValue({\n acayr_code: data.acayr_code || '',\n acayr_name: data.acayr_name || '',\n acayr_description: data.acayr_description || '',\n acayr_from_date: data.acayr_from_date ? new Date(data.acayr_from_date).toISOString().split('T')[0] : '',\n acayr_to_date: data.acayr_to_date ? new Date(data.acayr_to_date).toISOString().split('T')[0] : '',\n acayr_isactive: data.acayr_isactive ?? true,\n acayr_iscurrent: data.acayr_iscurrent ?? false,\n acayr_islocked: data.acayr_islocked ?? false\n });\n }\n }\n\n /**\n * Populate form with mappings data\n */\n private populateFormWithMappingsData(mappings: any[]): void {\n if (mappings && Array.isArray(mappings)) {\n // Store original mappings for deletion tracking\n this.originalMappings.set([...mappings]);\n \n // Clear existing mappings\n while (this.academicYearMappingsArray.length !== 0) {\n this.academicYearMappingsArray.removeAt(0);\n }\n \n // Add existing mappings\n mappings.forEach((mapping: any) => {\n const mappingGroup = this.fb.group({\n _id: [mapping._id || ''],\n acayrmp_academic_year_id_acayr: [mapping.acayrmp_academic_year_id_acayr || this.academicYearId() || '', [Validators.required]],\n acayrmp_entity_id_syen: [mapping.acayrmp_entity_id_syen || '', [Validators.required]],\n acayrmp_islocked: [mapping.acayrmp_islocked ?? false],\n acayrmp_iscurrent: [mapping.acayrmp_iscurrent ?? false]\n });\n this.academicYearMappingsArray.push(mappingGroup);\n });\n }\n }\n\n /**\n * Tab configuration\n */\n academicYearTabs() {\n return [\n { id: 'basic', label: 'Academic Year Details', icon: 'school' },\n { id: 'mapping', label: 'Mapping Configuration', icon: 'link' }\n ];\n }\n\n onTabChange(tab: TabItem) {\n this.activeTab.set(tab.id);\n }\n\n\n\n\n\n onSubmit() {\n \n if (this.academicYearForm.valid && this.validateMappings()) {\n this.loading.set(true);\n\n const formData = this.academicYearForm.value;\n\n // Prepare payload with mappings\n const payload: MAcademicYearInsertUpdatePayload = {\n ...formData,\n _id: this.isEditMode() ? this.academicYearId() : undefined,\n acayr_academic_year_mappings: this.getAcademicYearMappingsValue()\n };\n\n console.log('📤 Submitting academic year with mappings:', payload);\n\n // First delete removed mappings, then save/update academic year\n this.deleteRemovedMappings().pipe(\n switchMap(() => {\n // After deleting removed mappings, save/update the academic year\n return this.academicYearService.saveUpdateAcademicYearWithMappings(payload);\n })\n ).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log('✅ Academic year and mappings saved successfully:', response.data);\n \n // Check if there were any mapping errors\n if ((response as any).mappingErrors && (response as any).mappingErrors.length > 0) {\n console.warn('⚠️ Some mappings failed:', (response as any).mappingErrors);\n } else {\n this.goBackToAcademicYearList();\n }\n } else {\n console.error('❌ Failed to save academic year');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error saving academic year:', error);\n this.loading.set(false);\n }\n });\n } else {\n console.warn('Form is invalid');\n this.markFormGroupTouched();\n }\n }\n\n /**\n * Mark all form controls as touched to trigger validation display\n */\n private markFormGroupTouched(): void {\n Object.keys(this.academicYearForm.controls).forEach(key => {\n const control = this.academicYearForm.get(key);\n control?.markAsTouched();\n });\n }\n\n resetForm() {\n this.academicYearForm.reset({\n acayr_isactive: true,\n acayr_iscurrent: false,\n acayr_islocked: false\n });\n \n // Clear the mappings array\n while (this.academicYearMappingsArray.length !== 0) {\n this.academicYearMappingsArray.removeAt(0);\n }\n\n // Reset academic year ID\n this.academicYearId.set('');\n this.isEditMode.set(false);\n this.originalMappings.set([]);\n \n // Reset entity options to show all entities again\n this.updateEntityOptionsForMappings();\n }\n\n /**\n * Go back to academic year list\n */\n goBackToAcademicYearList(): void {\n this.router.navigate(['/control-panel/academic-year']);\n }\n\n /**\n * Cancel form and optionally navigate back\n */\n cancelForm(): void {\n if (this.isEditMode()) {\n this.goBackToAcademicYearList();\n } else {\n this.resetForm();\n }\n }\n\n /**\n * Get page title based on mode\n */\n getPageTitle(): string {\n return this.isEditMode() ? 'Edit Academic Year' : 'Create New Academic Year';\n }\n\n /**\n * Getter methods for form arrays\n */\n get academicYearMappingsArray(): FormArray {\n return this.academicYearForm.get('acayr_academic_year_mappings') as FormArray;\n }\n\n /**\n * Add new academic year mapping\n */\n addAcademicYearMapping(): void {\n // Check if there are any available entities to map\n const availableEntities = this.getAvailableEntityCount(this.academicYearMappingsArray.length);\n if (availableEntities === 0) {\n console.warn('No available entities to map');\n return;\n }\n\n // Generate a temporary ID for new mappings\n const tempId = 'temp_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n \n const academicYearMapping = this.fb.group({\n _id: [tempId],\n acayrmp_academic_year_id_acayr: [this.academicYearId() || '', [Validators.required]],\n acayrmp_entity_id_syen: ['', [Validators.required]],\n acayrmp_islocked: [false],\n acayrmp_iscurrent: [false]\n });\n this.academicYearMappingsArray.push(academicYearMapping);\n }\n\n /**\n * Update academic year ID in all existing mappings when academic year ID changes\n */\n private updateMappingsAcademicYearId(newAcademicYearId: string): void {\n const mappingsArray = this.academicYearMappingsArray;\n mappingsArray.controls.forEach((control: any) => {\n if (control.get('acayrmp_academic_year_id_acayr')) {\n control.get('acayrmp_academic_year_id_acayr').setValue(newAcademicYearId);\n }\n });\n }\n\n /**\n * Get form array value for validation or submission\n */\n getAcademicYearMappingsValue(): any[] {\n return this.academicYearMappingsArray.value;\n }\n\n /**\n * Check if mappings array has any invalid controls\n */\n isMappingsArrayValid(): boolean {\n return this.academicYearMappingsArray.valid;\n }\n\n /**\n * Set academic year ID for all existing mappings\n * This is useful when the academic year ID is generated after creation\n */\n setAcademicYearIdForMappings(academicYearId: string): void {\n this.academicYearId.set(academicYearId);\n this.updateMappingsAcademicYearId(academicYearId);\n }\n\n /**\n * Validate that all mappings have required fields\n */\n validateMappings(): boolean {\n const mappings = this.academicYearMappingsArray.controls;\n \n // Check if there are any mappings\n if (mappings.length === 0) {\n return true; // No mappings is valid\n }\n\n // Validate each mapping\n for (let i = 0; i < mappings.length; i++) {\n const mapping = mappings[i] as any;\n \n // Check required fields\n if (!mapping.get('acayrmp_entity_id_syen')?.value) {\n console.warn(`Mapping ${i + 1} is missing entity selection`);\n return false;\n }\n\n // Check for duplicate entity selections\n const currentEntityId = mapping.get('acayrmp_entity_id_syen')?.value;\n const duplicateIndex = this.findDuplicateEntitySelection(currentEntityId, i);\n if (duplicateIndex !== -1) {\n console.warn(`Mapping ${i + 1} has duplicate entity selection with mapping ${duplicateIndex + 1}`);\n return false;\n }\n }\n \n return true;\n }\n\n /**\n * Find duplicate entity selection in mappings\n */\n private findDuplicateEntitySelection(entityId: string, currentIndex: number): number {\n const mappings = this.academicYearMappingsArray.controls;\n \n for (let i = 0; i < mappings.length; i++) {\n if (i !== currentIndex) {\n const mapping = mappings[i] as any;\n if (mapping.get('acayrmp_entity_id_syen')?.value === entityId) {\n return i;\n }\n }\n }\n \n return -1;\n }\n\n /**\n * Remove academic year mapping\n */\n removeAcademicYearMapping(index: number): void {\n this.academicYearMappingsArray.removeAt(index);\n // Update entity options after removal to re-enable previously selected entities\n this.updateEntityOptionsForMappings();\n }\n\n /**\n * Handle entity selection change for a specific mapping\n */\n onMappingEntityChange(event: any, mappingIndex: number): void {\n const selectedEntityId = event?.value || event;\n if (selectedEntityId) {\n console.log(`🏢 Entity selected for mapping ${mappingIndex}:`, selectedEntityId);\n // Trigger change detection to update other mappings' entity options\n this.updateEntityOptionsForMappings();\n }\n }\n\n /**\n * Get filtered entity options excluding already selected entities in other mappings\n * @param currentMappingIndex The index of the current mapping being edited\n * @returns Entity options excluding already selected entities\n */\n getFilteredEntityOptions(currentMappingIndex: number): any[] {\n const allEntities = this.entityOptions();\n if (!allEntities || allEntities.length === 0) {\n return [];\n }\n\n // Get all currently selected entity IDs from other mappings (excluding current mapping)\n const selectedEntityIds = this.getSelectedEntityIds(currentMappingIndex);\n \n console.log(`🔍 Filtering entities for mapping ${currentMappingIndex}:`, {\n totalEntities: allEntities.length,\n selectedEntityIds,\n availableEntities: allEntities.length - selectedEntityIds.length\n });\n\n // Return only entities that are not already selected in other mappings\n return allEntities.filter((entity: any) => {\n const entityId = entity._id;\n const isAlreadySelected = selectedEntityIds.includes(entityId);\n \n if (isAlreadySelected) {\n console.log(`🚫 Entity \"${entity.syen_name}\" (${entityId}) is already selected in another mapping - excluding from options`);\n }\n \n return !isAlreadySelected;\n });\n }\n\n /**\n * Get all currently selected entity IDs from other mappings\n */\n private getSelectedEntityIds(excludeMappingIndex: number): string[] {\n const mappingsArray = this.academicYearMappingsArray;\n const selectedIds: string[] = [];\n \n mappingsArray.controls.forEach((control: any, index: number) => {\n if (index !== excludeMappingIndex) {\n const entityId = control.get('acayrmp_entity_id_syen')?.value;\n if (entityId) {\n selectedIds.push(entityId);\n }\n }\n });\n \n return selectedIds;\n }\n\n /**\n * Update entity options for all mappings to prevent duplicates\n */\n private updateEntityOptionsForMappings(): void {\n // This method triggers change detection to update the UI\n // The actual filtering is done in getEntityOptionsForMapping method\n console.log('🔄 Updating entity options for all mappings');\n }\n\n /**\n * Check if an entity is disabled for a specific mapping\n */\n isEntityDisabled(entityId: string, mappingIndex: number): boolean {\n const selectedEntityIds = this.getSelectedEntityIds(mappingIndex);\n return selectedEntityIds.includes(entityId);\n }\n\n /**\n * Get the count of available entities for a specific mapping\n */\n getAvailableEntityCount(mappingIndex: number): number {\n const availableEntities = this.getFilteredEntityOptions(mappingIndex);\n return availableEntities.length;\n }\n\n /**\n * Get the count of total entities\n */\n getTotalEntityCount(): number {\n return this.entityOptions().length;\n }\n\n /**\n * Check if all entities are already selected in other mappings\n * @param currentMappingIndex The index of the current mapping being edited\n * @returns True if all entities are already selected\n */\n isAllEntitiesSelected(currentMappingIndex: number): boolean {\n const allEntities = this.entityOptions();\n const currentMappings = this.academicYearMappingsArray.value;\n\n // Get all selected entity IDs from other mappings (excluding current mapping)\n const selectedEntityIds = currentMappings\n .map((mapping: any, index: number) => {\n if (index !== currentMappingIndex && mapping.acayrmp_entity_id_syen) {\n return mapping.acayrmp_entity_id_syen;\n }\n return null;\n })\n .filter((id: string | null) => id !== null && id !== '');\n\n // Check if all entities are selected\n return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n }\n\n /**\n * Check if all entities are already mapped (for disabling Add Entity Mapping button)\n * @returns True if all entities are already mapped\n */\n isAllEntitiesMapped(): boolean {\n const allEntities = this.entityOptions();\n const currentMappings = this.academicYearMappingsArray.value;\n\n // Get all selected entity IDs\n const selectedEntityIds = currentMappings\n .map((mapping: any) => {\n if (mapping.acayrmp_entity_id_syen) {\n return mapping.acayrmp_entity_id_syen;\n }\n return null;\n })\n .filter((id: string | null) => id !== null && id !== '');\n\n // Check if all entities are selected\n return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n }\n\n /**\n * Cleanup when component is destroyed\n * This ensures that when the component is destroyed (e.g., tab closed),\n * all state is properly reset to prevent old data from persisting\n */\n ngOnDestroy(): void {\n console.log('🧹 AcademicYearCreateComponent: Cleaning up component state');\n\n // Reset all signals to their initial state\n this.activeTab.set('basic');\n this.loading.set(false);\n this.academicYearId.set('');\n this.isEditMode.set(false);\n this.originalMappings.set([]);\n this.entityOptions.set([]);\n\n // Reset form to initial state\n this.resetForm();\n\n console.log('🧹 AcademicYearCreateComponent: Component state cleaned up');\n }\n\n /**\n * Delete removed academic year mappings\n */\n private deleteRemovedMappings(): Observable<any[]> {\n const originalMappings = this.originalMappings();\n const currentMappings = this.getAcademicYearMappingsValue();\n \n // Find mappings that were removed (exist in original but not in current)\n const removedMappings = originalMappings.filter(originalMapping => {\n return !currentMappings.some(currentMapping => \n currentMapping._id === originalMapping._id && originalMapping._id\n );\n });\n\n console.log('🗑️ Mappings to delete:', removedMappings);\n\n if (removedMappings.length === 0) {\n return of([]);\n }\n\n // Create delete observables for each removed mapping\n const deleteObservables = removedMappings.map(mapping => {\n return this.academicYearService.deleteAcademicYearMapping({ \n acayrmp_id: mapping._id || '' \n }).pipe(\n catchError(error => {\n console.error('❌ Error deleting mapping:', error);\n return of({ success: false, error, mappingId: mapping._id });\n })\n );\n });\n\n return forkJoin(deleteObservables);\n }\n}\n","<!-- \n ACADEMIC YEAR MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"academicYearForm\" [class.tw-opacity-60]=\"loading()\"\n (ngSubmit)=\"onSubmit()\">\n\n <!-- Simple Header Section -->\n <div class=\"tw-table-row tw-w-full tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n \n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">\n {{ isEditMode() ? 'Edit Academic Year' : 'Create Academic Year' }}\n </h5>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Back button or other actions can be added here if needed -->\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-2 tw-py-0\">\n <cide-ele-tab [tabs]=\"academicYearTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Academic Year Information -->\n <div class=\"tw-space-y-6\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Academic Year Code *\" formControlName=\"acayr_code\"\n placeholder=\"e.g., AY2024-25\" size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Academic Year Name *\" formControlName=\"acayr_name\"\n placeholder=\"e.g., Academic Year 2024-2025\" size=\"md\" leadingIcon=\"school\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acayr_description\"\n placeholder=\"Enter detailed description of the academic year...\"\n rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"From Date *\" formControlName=\"acayr_from_date\" type=\"date\" size=\"md\"\n leadingIcon=\"calendar_today\" id=\"acayr_from_date\">\n </cide-ele-input>\n\n <cide-ele-input label=\"To Date *\" formControlName=\"acayr_to_date\" type=\"date\" size=\"md\"\n leadingIcon=\"calendar_today\" id=\"acayr_to_date\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this academic year</span>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_iscurrent\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current academic year</span>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n @case ('mapping') {\n <!-- Academic Year Mapping Configuration -->\n <div class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-xl tw-p-6\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-6 tw-h-6\">link</cide-ele-icon>\n </div>\n <div>\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-blue-900 tw-m-0\">Academic Year Mapping</h6>\n <p class=\"tw-text-sm tw-text-blue-600 tw-m-0\">Configure entity mappings for this academic year</p>\n </div>\n </div>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"md\" leftIcon=\"add\"\n (click)=\"addAcademicYearMapping()\"\n class=\"tw-shadow-md hover:tw-shadow-lg tw-transition-shadow\">\n Add New Mapping\n </button>\n </div>\n \n @if (academicYearMappingsArray.length === 0) {\n <div class=\"tw-text-center tw-py-12 tw-text-gray-500\">\n <div class=\"tw-bg-white tw-p-4 tw-rounded-full tw-w-16 tw-h-16 tw-mx-auto tw-mb-4 tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-gray-400\">link</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-base tw-font-medium tw-text-gray-600 tw-mb-2\">No Mappings Yet</h6>\n <p class=\"tw-text-sm tw-text-gray-500\">Click \"Add New Mapping\" to start configuring entity relationships for this academic year.</p>\n </div>\n } @else {\n <div class=\"tw-space-y-4\" formArrayName=\"acayr_academic_year_mappings\">\n @for (mapping of academicYearMappingsArray.controls; track $index) {\n <div class=\"tw-bg-white tw-rounded-xl tw-border tw-border-gray-200 tw-shadow-sm hover:tw-shadow-md tw-transition-shadow tw-p-6\">\n <div class=\"tw-flex tw-items-start tw-justify-between tw-mb-4\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">settings</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Mapping #{{ $index + 1 }}</h6>\n </div>\n <button cideEleButton type=\"button\" variant=\"danger\" size=\"sm\" leftIcon=\"delete\"\n (click)=\"removeAcademicYearMapping($index)\"\n class=\"tw-opacity-80 hover:tw-opacity-100 tw-transition-opacity\">\n Remove\n </button>\n </div>\n \n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4\" [formGroupName]=\"$index\">\n <!-- Hidden Academic Year ID field (internal use only) -->\n <input type=\"hidden\" formControlName=\"acayrmp_academic_year_id_acayr\">\n \n <!-- Entity Selection -->\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Select Entity *</label>\n <cide-ele-select \n [options]=\"entityOptions()\"\n formControlName=\"acayrmp_entity_id_syen\"\n placeholder=\"Choose entity for this mapping\" \n size=\"md\"\n valueKey=\"_id\"\n labelKey=\"syen_name\"\n class=\"tw-min-w-full\"\n (change)=\"onMappingEntityChange($event, $index)\">\n </cide-ele-select>\n </div>\n \n <!-- Status Controls -->\n <div class=\"tw-space-y-2\">\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-3\">\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input \n formControlName=\"acayrmp_islocked\" \n type=\"checkbox\" \n size=\"sm\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n \n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input \n formControlName=\"acayrmp_iscurrent\" \n type=\"checkbox\" \n size=\"sm\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current mapping</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Mapping Validation Messages -->\n @if (academicYearMappingsArray.length > 0 && !isMappingsArrayValid()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"warning\" size=\"sm\">warning</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-yellow-800\">\n Please ensure all mappings have required fields filled in.\n </span>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-gap-4\">\n <!-- Form Validation Errors -->\n <cide-form-field-error [formGroup]=\"academicYearForm\"></cide-form-field-error>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || academicYearForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Academic Year' : 'Create Academic Year' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>","import { \r\n Component, \r\n signal, \r\n computed, \r\n viewChild, \r\n TemplateRef, \r\n DestroyRef, \r\n inject, \r\n OnInit,\r\n type OnDestroy \r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { forkJoin, of, type Observable } from 'rxjs';\r\nimport { catchError, switchMap, map } from 'rxjs/operators';\r\nimport { \r\n CideEleDataGridComponent, \r\n CideIconComponent, \r\n CideEleButtonComponent, \r\n type GridConfiguration, \r\n type GridEvent, \r\n CideEleDropdownComponent, \r\n type DropdownItem, \r\n type TemplateContext, \r\n type DropdownConfig, \r\n ConfirmationService,\r\n NotificationService \r\n } from 'cloud-ide-element';\r\nimport { \r\n type AcaAcademicYear, \r\n generateStringFromObject, \r\n type MAcademicYear \r\n} from 'cloud-ide-lms-model';\r\nimport { AppStateHelperService } from 'cloud-ide-layout';\r\nimport { CideLytAcademicYearService } from '../../services/academic-year.service';\r\n\r\n// Types\r\ninterface AcademicYear {\r\n _id?: string;\r\n acayr_code?: string;\r\n acayr_name?: string;\r\n acayr_description?: string;\r\n acayr_from_date?: string | Date;\r\n acayr_to_date?: string | Date;\r\n acayr_isactive?: boolean;\r\n acayr_iscurrent?: boolean;\r\n acayr_islocked?: boolean;\r\n}\r\n\r\ninterface AcademicYearMapping {\r\n _id: string;\r\n acayrmp_academic_year_id_acayr: string;\r\n acayrmp_entity_id_syen: string;\r\n acayrmp_islocked: boolean;\r\n acayrmp_iscurrent: boolean;\r\n}\r\n\r\ninterface ApiResponse<T> {\r\n success: boolean;\r\n code: number;\r\n data: T;\r\n total?: number;\r\n pageIndex?: number;\r\n pageSize?: number;\r\n message: string;\r\n}\r\n\r\n@Component({\r\n selector: 'cide-core-academic-year-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n CideIconComponent,\r\n CideEleButtonComponent,\r\n CideEleDataGridComponent,\r\n CideEleDropdownComponent\r\n ],\r\n templateUrl: './academic-year-list.component.html',\r\n styles: [`\r\n .academic-year-listing-container {\r\n @apply tw-w-full tw-h-full;\r\n }\r\n \r\n :host {\r\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\r\n }\r\n `]\r\n})\r\nexport class AcademicYearListComponent implements OnInit, OnDestroy {\r\n // Modern Angular 20+ dependency injection using inject()\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly academicYearService = inject(CideLytAcademicYearService);\r\n private readonly router = inject(Router);\r\n private readonly appState = inject(AppStateHelperService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly notificationService = inject(NotificationService);\r\n\r\n // Modern ViewChild signals for template renderers (Angular 20 approach)\r\n readonly academicYearDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('academicYearDetailsRendererTemplate');\r\n readonly dateRangeRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('dateRangeRendererTemplate');\r\n readonly statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\r\n readonly actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\r\n\r\n // Modern Angular 20+ state management using signals with proper typing\r\n readonly academicYears = signal<AcademicYear[]>([]);\r\n readonly loading = signal<boolean>(false);\r\n readonly error = signal<string | null>(null);\r\n\r\n // Server-side pagination state using signals\r\n readonly currentPage = signal<number>(1);\r\n readonly pageSize = signal<number>(10);\r\n readonly totalItems = signal<number>(0);\r\n readonly totalPages = signal<number>(0);\r\n\r\n // Server-side search state using signals\r\n readonly searchQuery = signal<string>('');\r\n\r\n // Server-side sorting state using signals\r\n readonly sortColumn = signal<string>('acayr_name');\r\n readonly sortDirection = signal<'asc' | 'desc'>('asc');\r\n\r\n // Server-side filtering state using signals\r\n readonly selectedStatusFilter = signal<string>('');\r\n\r\n // Filter options using computed signal for better performance\r\n readonly statusFilterOptions = computed(() => [\r\n { value: '', label: 'All Status' },\r\n { value: 'active', label: 'Active Years' },\r\n { value: 'inactive', label: 'Inactive Years' },\r\n { value: 'current', label: 'Current Year' },\r\n { value: 'locked', label: 'Locked Years' }\r\n ]);\r\n\r\n\r\n\r\n // Modern Angular 20+ grid configuration using computed signal with proper typing\r\n readonly gridConfig = computed<GridConfiguration<AcademicYear>>(() => ({\r\n id: 'academic-year-list-grid',\r\n columns: [\r\n {\r\n key: 'acayr_code',\r\n header: 'Academic Year Code',\r\n type: 'text',\r\n width: '140px',\r\n truncate: true,\r\n align: 'left',\r\n sortable: true\r\n },\r\n {\r\n key: 'details',\r\n header: 'Academic Year Details',\r\n type: 'custom',\r\n width: 'auto',\r\n truncate: true,\r\n align: 'left',\r\n renderer: 'academicYearDetailsRenderer',\r\n sortable: true\r\n },\r\n {\r\n key: 'date_range',\r\n header: 'Date Range',\r\n type: 'custom',\r\n width: '200px',\r\n truncate: false,\r\n align: 'left',\r\n renderer: 'dateRangeRenderer',\r\n sortable: true\r\n },\r\n {\r\n key: 'acayr_isactive',\r\n header: 'Status',\r\n type: 'custom',\r\n width: '140px',\r\n truncate: false,\r\n align: 'center',\r\n renderer: 'statusRenderer'\r\n },\r\n {\r\n key: 'actions',\r\n header: 'Actions',\r\n type: 'custom',\r\n width: '80px',\r\n truncate: false,\r\n align: 'center',\r\n renderer: 'actionsDropdownRenderer'\r\n }\r\n ],\r\n data: this.academicYears(),\r\n trackBy: '_id',\r\n pagination: {\r\n enabled: true,\r\n pageSize: this.pageSize(),\r\n pageSizeOptions: [10, 25, 50, 100],\r\n showQuickJump: true,\r\n showPageInfo: true,\r\n showRefresh: true\r\n },\r\n search: {\r\n enabled: true,\r\n placeholder: 'Search by code, name, or description...',\r\n searchableColumns: ['acayr_code', 'acayr_name', 'acayr_description'],\r\n debounceMs: 300,\r\n showClearButton: true\r\n },\r\n loading: {\r\n useDefer: true,\r\n skeletonRows: 5,\r\n showOverlay: this.loading()\r\n },\r\n scroll: {\r\n enabled: true,\r\n maxHeight: '',\r\n minHeight: '',\r\n stickyHeader: true,\r\n virtualScroll: false,\r\n rowHeight: 50\r\n },\r\n export: {\r\n enabled: true,\r\n formats: ['csv', 'excel', 'pdf'],\r\n filename: 'academic-years',\r\n includeHeaders: true\r\n },\r\n responsive: true,\r\n striped: false,\r\n bordered: true,\r\n compact: false,\r\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\r\n }));\r\n\r\n ngOnInit(): void {\r\n console.log('🎓 Academic Year List Component initialized');\r\n this.loadAcademicYears();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Cleanup if needed\r\n }\r\n\r\n /**\r\n * Load academic years from API\r\n */\r\n loadAcademicYears(): void {\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n const payload: MAcademicYear = {\r\n pageIndex: this.currentPage(),\r\n pageSize: this.pageSize(),\r\n query: this.searchQuery() || \"\",\r\n sort: {\r\n key: this.sortColumn(),\r\n order: this.sortDirection()\r\n }\r\n };\r\n\r\n this.academicYearService.getAcademicYearList(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.success && response.data) {\r\n console.log('📚 Academic years loaded:', response.data);\r\n console.log('📊 Pagination info:', {\r\n total: response.total,\r\n pageIndex: response.pageIndex,\r\n pageSize: response.pageSize\r\n });\r\n \r\n this.academicYears.set(response.data);\r\n this.totalItems.set(response.total || 0);\r\n this.totalPages.set(Math.ceil((response.total || 0) / this.pageSize()));\r\n \r\n // Show success notification if data was loaded successfully\r\n if (response.data.length > 0) {\r\n this.notificationService.success(`Loaded ${response.data.length} academic year(s) successfully.`);\r\n }\r\n } else {\r\n console.warn('⚠️ No academic year data received');\r\n this.academicYears.set([]);\r\n this.totalItems.set(0);\r\n this.totalPages.set(0);\r\n this.notificationService.warning('No academic years found.');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('❌ Error loading academic years:', error);\r\n this.error.set('Failed to load academic years. Please try again.');\r\n this.academicYears.set([]);\r\n this.totalItems.set(0);\r\n this.totalPages.set(0);\r\n this.notificationService.error('Failed to load academic years. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n\r\n\r\n // Computed template renderers for grid\r\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\r\n academicYearDetailsRenderer: this.academicYearDetailsRendererTemplate(),\r\n dateRangeRenderer: this.dateRangeRendererTemplate(),\r\n statusRenderer: this.statusRendererTemplate(),\r\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\r\n }));\r\n\r\n /**\r\n * Handle grid events\r\n */\r\n onGridEvent(event: GridEvent<any>): void {\r\n switch (event.type) {\r\n case 'pageChange':\r\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\r\n this.currentPage.set(event.data['pageIndex'] as number);\r\n this.pageSize.set(event.data['pageSize'] as number);\r\n this.loadAcademicYears();\r\n }\r\n break;\r\n case 'search':\r\n this.searchQuery.set(event.data as string);\r\n this.currentPage.set(1);\r\n this.loadAcademicYears();\r\n break;\r\n case 'refresh':\r\n this.loadAcademicYears();\r\n break;\r\n case 'action':\r\n // Handle action events if needed\r\n console.log('Action event:', event);\r\n break;\r\n case 'rowClick':\r\n // Handle row click events if needed\r\n console.log('Row click event:', event);\r\n break;\r\n case 'sort':\r\n if (event.data && typeof event.data === 'object' && 'column' in event.data && 'direction' in event.data) {\r\n this.sortColumn.set(event.data['column'] as string);\r\n this.sortDirection.set(event.data['direction'] as 'asc' | 'desc');\r\n this.currentPage.set(1); // Reset to first page when sorting\r\n this.loadAcademicYears();\r\n }\r\n break;\r\n case 'export':\r\n if (event.data && typeof event.data === 'string') {\r\n this.handleExport(event.data);\r\n }\r\n break;\r\n default:\r\n console.log('🔄 Unhandled grid event:', event.type);\r\n }\r\n }\r\n\r\n // Filter handlers\r\n onStatusFilterChange(): void {\r\n console.log('🔍 Status filter changed:', this.selectedStatusFilter());\r\n this.currentPage.set(1); // Reset to first page when filtering\r\n this.loadAcademicYears();\r\n }\r\n\r\n clearFilters(): void {\r\n console.log('🧹 Clearing filters');\r\n this.selectedStatusFilter.set('');\r\n this.searchQuery.set('');\r\n this.currentPage.set(1);\r\n this.loadAcademicYears();\r\n }\r\n\r\n // Academic Year actions with proper typing\r\n createAcademicYear(): void {\r\n console.log('➕ Navigating to create academic year');\r\n this.notificationService.info('Opening form to create a new academic year.');\r\n this.router.navigate(['/control-panel/academic_year/create']);\r\n }\r\n\r\n viewAcademicYear(academicYear: AcademicYear): void {\r\n console.log('👁️ Viewing academic year:', academicYear);\r\n this.notificationService.info(`Opening academic year \"${academicYear.acayr_name}\" for viewing.`);\r\n const queryParams = generateStringFromObject({ acayr_id: academicYear._id });\r\n this.router.navigate(['/control-panel/academic_year/view', queryParams]);\r\n }\r\n\r\n editAcademicYear(academicYear: AcademicYear): void {\r\n console.log('✏️ Editing academic year:', academicYear);\r\n \r\n // Check if the academic year is locked\r\n if (academicYear.acayr_islocked) {\r\n this.notificationService.error(`Cannot edit \"${academicYear.acayr_name}\" - This academic year is locked and cannot be modified. Please contact an administrator to unlock it first.`);\r\n return;\r\n }\r\n \r\n this.notificationService.info(`Opening academic year \"${academicYear.acayr_name}\" for editing.`);\r\n const queryParams = generateStringFromObject({ acayr_id: academicYear._id });\r\n this.router.navigate(['/control-panel/academic_year/edit', queryParams]);\r\n }\r\n\r\n\r\n /**\r\n * Get dropdown configuration\r\n */\r\n getDropdownConfig(): DropdownConfig {\r\n return {\r\n triggerIcon: 'more_vert',\r\n triggerSize: 'sm',\r\n // menuPosition: 'right' as const,\r\n // forcePosition: 'bottom' as const,\r\n // offsetX: 0,\r\n // offsetY: 1,\r\n // usePortal: true,\r\n // showArrow: false\r\n };\r\n }\r\n\r\n /**\r\n * Get action dropdown items\r\n */\r\n getActionDropdownItems(academicYear: AcademicYear): DropdownItem[] {\r\n console.log('🔽 Generating dropdown items for:', academicYear.acayr_name);\r\n console.log('🔽 Academic year data:', {\r\n isCurrent: academicYear.acayr_iscurrent,\r\n isLocked: academicYear.acayr_islocked,\r\n isActive: academicYear.acayr_isactive\r\n });\r\n \r\n const items: DropdownItem[] = [\r\n {\r\n id: 'view',\r\n label: 'View Details',\r\n icon: 'visibility',\r\n iconColor: 'tw-text-gray-400',\r\n textColor: 'tw-text-gray-700',\r\n hoverBgColor: 'hover:tw-bg-gray-100'\r\n },\r\n {\r\n id: 'edit',\r\n label: 'Edit',\r\n icon: 'edit',\r\n iconColor: academicYear?.acayr_islocked ? 'tw-text-gray-300' : 'tw-text-blue-400',\r\n textColor: academicYear?.acayr_islocked ? 'tw-text-gray-400' : 'tw-text-blue-600',\r\n hoverBgColor: academicYear?.acayr_islocked ? 'hover:tw-bg-gray-50' : 'hover:tw-bg-blue-50'\r\n },\r\n {\r\n id: 'toggle-status',\r\n label: academicYear.acayr_isactive ? 'Deactivate' : 'Activate',\r\n icon: academicYear.acayr_isactive ? 'toggle_off' : 'toggle_on',\r\n iconColor: academicYear?.acayr_islocked ? 'tw-text-gray-300' : 'tw-text-gray-400',\r\n textColor: academicYear?.acayr_islocked ? 'tw-text-gray-400' : 'tw-text-gray-700',\r\n hoverBgColor: academicYear?.acayr_islocked ? 'hover:tw-bg-gray-50' : 'hover:tw-bg-gray-100'\r\n }\r\n ];\r\n return items;\r\n }\r\n\r\n /**\r\n * Handle dropdown item click\r\n */\r\n onDropdownItemClick(item: DropdownItem, academicYear: AcademicYear): void {\r\n console.log('🖱️ Dropdown item clicked:', item.id, 'for academic year:', academicYear.acayr_name);\r\n \r\n // Check if item is disabled\r\n if (item.disabled) {\r\n console.log('⚠️ Item is disabled, ignoring click');\r\n return;\r\n }\r\n \r\n switch (item.id) {\r\n case 'view':\r\n this.viewAcademicYear(academicYear);\r\n break;\r\n case 'edit':\r\n this.editAcademicYear(academicYear);\r\n break;\r\n case 'toggle-status':\r\n this.toggleAcademicYearStatus(academicYear);\r\n break;\r\n default:\r\n console.log('❓ Unknown dropdown item clicked:', item.id);\r\n }\r\n }\r\n\r\n /**\r\n * Toggle academic year status (active/inactive)\r\n */\r\n toggleAcademicYearStatus(academicYear: AcademicYear): void {\r\n console.log('🔄 Toggling academic year status:', academicYear);\r\n \r\n // Check if the academic year is locked\r\n if (academicYear.acayr_islocked) {\r\n this.notificationService.error(`Cannot ${academicYear.acayr_isactive ? 'deactivate' : 'activate'} \"${academicYear.acayr_name}\" - This academic year is locked and its status cannot be changed. Please contact an administrator to unlock it first.`);\r\n return;\r\n }\r\n \r\n const action = academicYear.acayr_isactive ? 'deactivate' : 'activate';\r\n const actionText = academicYear.acayr_isactive ? 'Deactivate' : 'Activate';\r\n \r\n // Show confirmation dialog\r\n console.log('🔔 Showing confirmation dialog for toggle status');\r\n this.confirmationService.ask({\r\n title: `${actionText} Academic Year`,\r\n message: `Are you sure you want to ${action} the academic year \"${academicYear.acayr_name}\"?${!academicYear.acayr_isactive ? '\\n\\nThis will also deactivate all associated mappings.' : ''}`,\r\n confirmText: actionText,\r\n cancelText: 'Cancel',\r\n type: academicYear.acayr_isactive ? 'warning' : 'info'\r\n }).then((confirmed: boolean) => {\r\n console.log('🔔 Confirmation dialog result:', confirmed);\r\n if (confirmed) {\r\n this.loading.set(true);\r\n \r\n // First toggle the academic year status\r\n console.log('🔄 Calling toggleAcademicYearStatus with ID:', academicYear._id);\r\n this.academicYearService.toggleAcademicYearStatus({ acayr_id: academicYear._id }).subscribe({\r\n next: (response) => {\r\n console.log('🔄 Toggle academic year status response:', response);\r\n if (response?.success) {\r\n console.log('✅ Academic year status toggled successfully');\r\n \r\n // If deactivating, also toggle status of all academic year mappings\r\n if (!academicYear.acayr_isactive) { // If we're deactivating (was active, now inactive)\r\n this.toggleAcademicYearMappingsStatus(academicYear._id || '', false);\r\n } else {\r\n // If activating, just reload the list\r\n this.notificationService.success(`Academic year \"${academicYear.acayr_name}\" has been activated successfully.`);\r\n this.loadAcademicYears();\r\n }\r\n } else {\r\n console.error('❌ Failed to toggle academic year status');\r\n this.notificationService.error(response?.message || 'Failed to toggle academic year status');\r\n this.loading.set(false);\r\n }\r\n },\r\n error: (error) => {\r\n console.error('❌ Error toggling academic year status:', error);\r\n console.error('❌ Error details:', { \r\n status: error.status, \r\n message: error.message, \r\n error: error.error \r\n });\r\n this.notificationService.error('Failed to toggle academic year status. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Toggle status of all academic year mappings for a specific academic year\r\n */\r\n private toggleAcademicYearMappingsStatus(academicYearId: string, isActive: boolean): void {\r\n console.log(`🔄 Toggling mappings status for academic year ${academicYearId} to ${isActive ? 'active' : 'inactive'}`);\r\n \r\n // Get all mappings for this academic year and toggle their status\r\n // For now, we'll reload the academic year data to get the mappings\r\n // In a real implementation, you might want to get mappings separately\r\n this.academicYearService.getAcademicYearById({ acayr_id: academicYearId }).subscribe({\r\n next: (response) => {\r\n if (response?.success && response.data && (response.data as any).acayr_academic_year_mappings) {\r\n const mappings = (response.data as any).acayr_academic_year_mappings;\r\n console.log('📋 Found mappings to toggle:', mappings);\r\n \r\n // Toggle each mapping's status\r\n const toggleObservables = mappings.map((mapping: any) => {\r\n return this.academicYearService.toggleAcademicYearMappingStatus({ \r\n acayrmp_id: mapping._id \r\n }).pipe(\r\n catchError(error => {\r\n console.error('❌ Error toggling mapping status:', error);\r\n return of({ success: false, error, mappingId: mapping._id });\r\n })\r\n );\r\n });\r\n\r\n if (toggleObservables.length > 0) {\r\n forkJoin(toggleObservables).subscribe(\r\n (results) => {\r\n console.log('✅ All mapping statuses toggled:', results);\r\n const resultsArray = results as any[];\r\n const failedCount = resultsArray.filter((result: any) => !result.success).length;\r\n if (failedCount === 0) {\r\n this.notificationService.success(`Academic year and all ${resultsArray.length} associated mappings have been deactivated successfully.`);\r\n } else {\r\n this.notificationService.warning(`Academic year deactivated, but ${failedCount} out of ${resultsArray.length} mappings failed to update.`);\r\n }\r\n this.loadAcademicYears(); // Reload the list\r\n },\r\n (error) => {\r\n console.error('❌ Error toggling mapping statuses:', error);\r\n this.notificationService.error('Academic year deactivated, but failed to update some mappings.');\r\n this.loadAcademicYears(); // Still reload the list\r\n }\r\n );\r\n } else {\r\n this.notificationService.success('Academic year has been deactivated successfully.');\r\n this.loadAcademicYears(); // No mappings to toggle, just reload\r\n }\r\n } else {\r\n this.notificationService.success('Academic year has been deactivated successfully.');\r\n this.loadAcademicYears(); // No mappings found, just reload\r\n }\r\n },\r\n error: (error) => {\r\n console.error('❌ Error getting academic year mappings:', error);\r\n this.notificationService.error('Academic year deactivated, but failed to update mappings.');\r\n this.loadAcademicYears(); // Still reload the list\r\n }\r\n });\r\n }\r\n\r\n // Export handler\r\n private handleExport(format: string): void {\r\n console.log(`📤 Exporting academic years as ${format}`);\r\n \r\n const data = this.academicYears().map(item => ({\r\n 'Academic Year Code': item.acayr_code,\r\n 'Academic Year Name': item.acayr_name,\r\n 'Description': item.acayr_description,\r\n 'From Date': this.formatDate(item?.acayr_from_date || \"\"),\r\n 'To Date': this.formatDate(item?.acayr_to_date || \"\"),\r\n 'Duration': this.getDuration(item?.acayr_from_date || \"\", item?.acayr_to_date || \"\"),\r\n 'Status': this.getStatusText(item),\r\n 'Is Current': item.acayr_iscurrent ? 'Yes' : 'No',\r\n 'Is Active': item.acayr_isactive ? 'Yes' : 'No',\r\n 'Is Locked': item.acayr_islocked ? 'Yes' : 'No'\r\n }));\r\n\r\n // Create filename with timestamp\r\n const timestamp = new Date().toISOString().split('T')[0];\r\n const filename = `academic-years-${timestamp}`;\r\n\r\n switch (format.toLowerCase()) {\r\n case 'csv':\r\n this.exportToCSV(data, filename);\r\n break;\r\n case 'excel':\r\n this.exportToExcel(data, filename);\r\n break;\r\n case 'pdf':\r\n this.exportToPDF(data, filename);\r\n break;\r\n default:\r\n console.warn(`Unsupported export format: ${format}`);\r\n }\r\n }\r\n\r\n private exportToCSV(data: any[], filename: string): void {\r\n const headers = Object.keys(data[0] || {});\r\n const csvContent = [\r\n headers.join(','),\r\n ...data.map(row => headers.map(header => `\"${row[header] || ''}\"`).join(','))\r\n ].join('\\n');\r\n\r\n this.downloadFile(csvContent, `${filename}.csv`, 'text/csv');\r\n }\r\n\r\n private exportToExcel(data: any[], filename: string): void {\r\n // For Excel export, you might want to use a library like xlsx\r\n // For now, we'll export as CSV with .xlsx extension\r\n this.exportToCSV(data, filename);\r\n }\r\n\r\n private exportToPDF(data: any[], filename: string): void {\r\n // For PDF export, you might want to use a library like jsPDF\r\n // For now, we'll export as CSV\r\n this.exportToCSV(data, filename);\r\n }\r\n\r\n private downloadFile(content: string, filename: string, mimeType: string): void {\r\n const blob = new Blob([content], { type: mimeType });\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = filename;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n // Utility methods with proper typing\r\n formatDate(date: string | Date | null | undefined): string {\r\n if (!date) return '-';\r\n return new Date(date).toLocaleDateString('en-US', {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric'\r\n });\r\n }\r\n\r\n getDuration(fromDate: string | Date | null | undefined, toDate: string | Date | null | undefined): string {\r\n if (!fromDate || !toDate) return '';\r\n \r\n const from = new Date(fromDate);\r\n const to = new Date(toDate);\r\n const diffTime = Math.abs(to.getTime() - from.getTime());\r\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\r\n const months = Math.floor(diffDays / 30);\r\n const years = Math.floor(months / 12);\r\n \r\n if (years > 0) {\r\n return `${years} year${years > 1 ? 's' : ''}`;\r\n } else if (months > 0) {\r\n return `${months} month${months > 1 ? 's' : ''}`;\r\n } else {\r\n return `${diffDays} day${diffDays > 1 ? 's' : ''}`;\r\n }\r\n }\r\n\r\n getStatusBadgeClass(academicYear: AcademicYear): string {\r\n if (academicYear.acayr_iscurrent) return 'tw-bg-green-100 tw-text-green-800';\r\n if (academicYear.acayr_islocked) return 'tw-bg-red-100 tw-text-red-800';\r\n if (academicYear.acayr_isactive) return 'tw-bg-blue-100 tw-text-blue-800';\r\n return 'tw-bg-gray-100 tw-text-gray-800';\r\n }\r\n\r\n getActiveStatusBadgeClass(academicYear: AcademicYear): string {\r\n if (academicYear.acayr_isactive) {\r\n return 'tw-bg-green-100 tw-text-green-800';\r\n } else {\r\n return 'tw-bg-orange-100 tw-text-orange-800';\r\n }\r\n }\r\n\r\n getStatusText(academicYear: AcademicYear): string {\r\n if (academicYear.acayr_iscurrent) return 'Current';\r\n if (academicYear.acayr_islocked) return 'Locked';\r\n if (academicYear.acayr_isactive) return 'Active';\r\n return 'Inactive';\r\n }\r\n}\r\n","<!-- Academic Year Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Academic Year Management</h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"createAcademicYear()\">\r\n Create Academic Year\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #academicYearDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.acayr_name || 'N/A' }}</div>\r\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.acayr_description || 'No description' }}</div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dateRangeRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-text-sm\">\r\n <span class=\"tw-text-gray-900 tw-font-medium\">{{ formatDate(row.acayr_from_date) }}</span>\r\n <span class=\"tw-text-gray-500\">to {{ formatDate(row.acayr_to_date) }}</span>\r\n <span class=\"tw-text-xs tw-text-gray-400\">{{ getDuration(row.acayr_from_date, row.acayr_to_date) }}</span>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #statusRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-gap-1 tw-items-center\">\r\n <!-- Current Year Badge (Priority) -->\r\n @if (row.acayr_iscurrent) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800 tw-text-center\">\r\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">star</cide-ele-icon>\r\n Current Year\r\n </span>\r\n }\r\n \r\n <!-- Active/Inactive Status Badge -->\r\n <span class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-text-center\"\r\n [ngClass]=\"getActiveStatusBadgeClass(row)\">\r\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\r\n {{ row.acayr_isactive ? 'check_circle' : 'cancel' }}\r\n </cide-ele-icon>\r\n {{ row.acayr_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n \r\n <!-- Locked Status Badge (Additional info) -->\r\n @if (row.acayr_islocked) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800 tw-text-center\">\r\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">lock</cide-ele-icon>\r\n Locked\r\n </span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>","// Academic Year Management Components\r\nexport * from './components/academic-year-create/academic-year-create.component';\r\nexport * from './components/academic-year-list/academic-year-list.component';\r\n\r\n// Academic Year Management Services\r\nexport * from './services/academic-year.service';\r\nexport * from './services/academic-year-mapping.service';\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n type classPrgBranchControllerResponse,\r\n type AcaClassPrgBranchListPayload,\r\n type classPrgBranchByIdControllerResponse,\r\n type AcaClassPrgBranchGetByIdPayload,\r\n type classPrgBranchInsertUpdateControllerResponse,\r\n type AcaClassPrgBranchInsertUpdatePayload,\r\n type classPrgBranchDeleteControllerResponse,\r\n type AcaClassPrgBranchDeletePayload,\r\n type classPrgBranchToggleStatusControllerResponse,\r\n type AcaClassPrgBranchToggleStatusPayload,\r\n type classPrgBranchToggleLockControllerResponse,\r\n type AcaClassPrgBranchToggleLockPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytClassProgramBranchService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of class program branches\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of class program branch list response\r\n */\r\n getClassProgramBranchList(payload: AcaClassPrgBranchListPayload): Observable<classPrgBranchControllerResponse> {\r\n console.log(\"Class Program Branch List Payload:\", payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get class program branch by ID\r\n * @param payload - Class program branch ID payload\r\n * @returns Observable of class program branch data\r\n */\r\n getClassProgramBranchById(payload: AcaClassPrgBranchGetByIdPayload): Observable<classPrgBranchByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Create or update class program branch\r\n * @param data - Class program branch data to save\r\n * @returns Observable of the save response\r\n */\r\n saveClassProgramBranch(data: AcaClassPrgBranchInsertUpdatePayload): Observable<classPrgBranchInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete class program branch\r\n * @param payload - Class program branch delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteClassProgramBranch(payload: AcaClassPrgBranchDeletePayload): Observable<classPrgBranchDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle class program branch status (active/inactive)\r\n * @param payload - Class program branch toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleClassProgramBranchStatus(payload: AcaClassPrgBranchToggleStatusPayload): Observable<classPrgBranchToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n 'toggleStatus',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n\r\n /**\r\n * Toggle class program branch lock\r\n * @param payload - Class program branch toggle lock payload\r\n * @returns Observable of the toggle lock response\r\n */\r\n toggleClassProgramBranchLock(payload: AcaClassPrgBranchToggleLockPayload): Observable<classPrgBranchToggleLockControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n 'toggleLock',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n}\r\n\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n type classProgramMasterControllerResponse,\r\n type MClassProgramMaster,\r\n type classProgramMasterByIdControllerResponse,\r\n type MClassProgramMasterGetByIdPayload,\r\n type classProgramMasterInsertUpdateControllerResponse,\r\n type MClassProgramMasterInsertUpdatePayload,\r\n type classProgramMasterDeleteControllerResponse,\r\n type MClassProgramMasterDeletePayload,\r\n type classProgramMasterToggleStatusControllerResponse,\r\n type MClassProgramMasterToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytProgramClassService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of program classes\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of program class list response\r\n */\r\n getProgramClassList(payload: MClassProgramMaster): Observable<classProgramMasterControllerResponse> {\r\n console.log(\"Program Class List Payload:\", payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get program class by ID\r\n * @param payload - Program class ID payload\r\n * @returns Observable of program class data\r\n */\r\n getProgramClassById(payload: MClassProgramMasterGetByIdPayload): Observable<classProgramMasterByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Create or update program class\r\n * @param data - Program class data to save\r\n * @returns Observable of the save response\r\n */\r\n saveProgramClass(data: MClassProgramMasterInsertUpdatePayload): Observable<classProgramMasterInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete program class\r\n * @param payload - Program class delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteProgramClass(payload: MClassProgramMasterDeletePayload): Observable<classProgramMasterDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster,\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle program class status (active/inactive)\r\n * @param payload - Program class toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleProgramClassStatus(payload: MClassProgramMasterToggleStatusPayload): Observable<classProgramMasterToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster,\r\n 'toggleStatus',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n}\r\n\r\n\r\n","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService, CideSelectComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport {\n AcaClassPrgBranchListPayload,\n type AcaClassPrgBranchDeletePayload,\n type AcaClassPrgBranchToggleStatusPayload,\n type AcaClassPrgBranchToggleLockPayload,\n generateObjectFromString,\n generateStringFromObject,\n AcaClassPrgBranchResponse,\n type MClassProgramMaster,\n type classProgramMasterControllerResponse\n} from 'cloud-ide-lms-model';\nimport { CideLytClassProgramBranchService } from '../../services/class-program-branch.service';\nimport { CideLytProgramClassService } from '../../../program-class-management/services/program-class.service';\n\n// Interfaces based on the actual API response\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_class_program_id_acacpm?: any; // Can be string or populated object\n acabrn_name?: string;\n acabrn_code?: string;\n acabrn_sequence?: number;\n acabrn_isactive?: boolean;\n acabrn_islocked?: boolean;\n}\n\ninterface ProgramClass {\n _id?: string;\n acacpm_name?: string;\n acacpm_code?: string;\n acacpm_alise_title?: string;\n acacpm_description?: string;\n}\n\n@Component({\n selector: 'cide-academics-class-program-branch-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideEleDataGridComponent,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDropdownComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './class-program-branch-list.component.html',\n styles: [`\n .drag-handle {\n cursor: move;\n }\n \n .drag-handle:hover {\n background-color: rgba(0, 0, 0, 0.05);\n border-radius: 4px;\n }\n \n .tw-table tbody tr {\n cursor: pointer;\n }\n \n .tw-table tbody tr:hover {\n background-color: rgba(0, 0, 0, 0.02);\n }\n \n .tw-table tbody tr.selected {\n background-color: rgba(59, 130, 246, 0.1);\n }\n `]\n})\nexport class CideLytClassProgramBranchListComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n private programClassService = inject(CideLytProgramClassService);\n\n // State management\n loading = signal(false);\n error = signal<string | null>(null);\n branches = signal<ClassProgramBranch[]>([]);\n totalCount = signal(0);\n programId = signal<string | null>(null);\n programClasses = signal<ProgramClass[]>([]);\n selectedProgramClassId = signal<string | null>(null);\n\n // Signal for breadcrumb data that will be passed to shared wrapper\n breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n // Template renderers\n dragHandleRendererTemplate = viewChild<TemplateRef<TemplateContext>>('dragHandleRendererTemplate');\n classProgramRendererTemplate = viewChild<TemplateRef<TemplateContext>>('classProgramRendererTemplate');\n actionsDropdownRendererTemplate = viewChild<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Grid configuration\n gridConfig = signal<GridConfiguration<ClassProgramBranch>>({\n id: 'class-program-branch-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'drag',\n header: '',\n type: 'custom',\n width: '40px',\n truncate: false,\n align: 'center',\n renderer: 'dragHandleRenderer'\n },\n {\n key: 'acabrn_name',\n header: 'Branch Name',\n type: 'text',\n width: '300px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'acabrn_code',\n header: 'Code',\n type: 'text',\n width: '150px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'acabrn_class_program_id_acacpm',\n header: 'Class Program',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'classProgramRenderer'\n },\n {\n key: 'acabrn_isactive',\n header: 'Status',\n type: 'status',\n width: '100px',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Active',\n inactiveLabel: 'Inactive',\n activeClass: 'tw-bg-green-100 tw-text-green-800',\n inactiveClass: 'tw-bg-red-100 tw-text-red-800'\n }\n },\n {\n key: 'acabrn_islocked',\n header: 'Locked',\n type: 'status',\n width: '100px',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Locked',\n inactiveLabel: 'Unlocked',\n activeClass: 'tw-bg-yellow-100 tw-text-yellow-800',\n inactiveClass: 'tw-bg-gray-100 tw-text-gray-800'\n }\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '80px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search branches...',\n searchableColumns: ['acabrn_name', 'acabrn_code'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n fullHeight: true,\n responsive: true,\n striped: true,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full',\n dragDrop: {\n enabled: true\n },\n onRefresh: 'onRefresh',\n onPageChange: 'onPageChange',\n onSearch: 'onSearch',\n onRowReorder: 'onRowReorder'\n });\n\n // Computed template renderers\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => {\n const renderers: Record<string, TemplateRef<TemplateContext>> = {};\n\n if (this.dragHandleRendererTemplate()) {\n renderers['dragHandleRenderer'] = this.dragHandleRendererTemplate()!;\n }\n\n if (this.classProgramRendererTemplate()) {\n renderers['classProgramRenderer'] = this.classProgramRendererTemplate()!;\n }\n\n if (this.actionsDropdownRendererTemplate()) {\n renderers['actionsDropdownRenderer'] = this.actionsDropdownRendererTemplate()!;\n }\n\n return renderers;\n });\n\n ngOnInit(): void {\n console.log('🏢 Class Program Branch List Component initialized');\n this.initializeBreadcrumbData();\n this.loadProgramClasses();\n this.checkRouteParams();\n // Load branches will be called when programId is set in checkRouteParams\n }\n\n /**\n * Initialize breadcrumb data for list view\n */\n private initializeBreadcrumbData(): void {\n // The shared wrapper will automatically add:\n // 1. Module (Academics) from app state\n // 2. Current page (Class Program Branch Management) from page config\n // We can add additional items here if needed\n this.breadcrumbData.set([\n {\n id: 'list',\n label: 'List',\n icon: 'list',\n url: undefined\n }\n ]);\n }\n\n /**\n * Load program classes for dropdown\n */\n private loadProgramClasses(): void {\n const payload: Partial<MClassProgramMaster> = {\n pagination: false,\n acacpm_isactive: true\n };\n\n this.programClassService.getProgramClassList(payload as MClassProgramMaster)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: classProgramMasterControllerResponse) => {\n console.log('✅ Program classes loaded:', response);\n if (response?.success && response.data) {\n this.programClasses.set(response.data as ProgramClass[]);\n } else {\n console.warn('⚠️ No program class data received');\n this.programClasses.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading program classes:', error);\n this.programClasses.set([]);\n }\n });\n }\n\n /**\n * Handle Program Class selection change\n */\n onProgramClassChange(programClassId: string | number | string[] | null): void {\n const programId = typeof programClassId === 'string' ? programClassId : (programClassId ? String(programClassId) : null);\n console.log('🔄 Program Class changed:', programId);\n if (!programId) {\n // Class program is required, show error if cleared\n this.notificationService.warning('Class Program is required to view branches');\n return;\n }\n this.selectedProgramClassId.set(programId);\n this.programId.set(programId);\n this.loadBranches();\n }\n\n /**\n * Check route parameters for program ID\n */\n private checkRouteParams(): void {\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n console.log('🏢 Route params:', params, 'queryParams:', queryParams);\n\n if (queryParams) {\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n console.log('🏢 Query data from route:', queryData);\n\n // Check for programId in various possible formats\n const programId = queryData?.programId\n\n if (programId) {\n this.programId.set(programId as string);\n this.selectedProgramClassId.set(programId as string);\n console.log('🏢 Program Class ID extracted from route:', programId);\n console.log('🏢 Will filter branches by acabrn_class_program_id_acacpm:', programId);\n this.loadBranches();\n } else {\n // No program ID in route params, check query params\n this.checkQueryParams();\n }\n } else {\n // No route query params, check direct query parameters\n this.checkQueryParams();\n }\n });\n }\n\n /**\n * Check direct query parameters for program ID\n */\n private checkQueryParams(): void {\n const queryParams = this.route.snapshot.queryParams;\n const programId = queryParams['programId']\n\n if (programId) {\n this.programId.set(programId);\n this.selectedProgramClassId.set(programId);\n console.log('🏢 Program Class ID from query params:', programId);\n console.log('🏢 Will filter branches by acabrn_class_program_id_acacpm:', programId);\n this.loadBranches();\n } else {\n // No program ID provided - class program is required\n console.log('🏢 No program class ID provided - class program is required');\n this.programId.set(null);\n this.selectedProgramClassId.set(null);\n // Don't load branches if no program ID - wait for user selection\n this.branches.set([]);\n this.updateGridData();\n }\n }\n\n /**\n * Load branches from API\n */\n private loadBranches(): void {\n this.loading.set(true);\n this.error.set(null);\n\n // Build payload with program ID - required field\n const currentProgramId = this.programId();\n \n // Class program is required, so we must have a program ID\n if (!currentProgramId) {\n this.loading.set(false);\n this.error.set('Class Program is required');\n this.branches.set([]);\n this.updateGridData();\n return;\n }\n\n const payload: AcaClassPrgBranchListPayload = new AcaClassPrgBranchListPayload({\n acabrn_class_program_id_acacpm: currentProgramId,\n pagination: true,\n pageIndex: 0,\n pageSize: 10\n });\n\n console.log('🏢 API Payload:', payload);\n\n this.classProgramBranchService.getClassProgramBranchList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Branches loaded:', response);\n if (response?.success && response.data) {\n this.branches.set(response.data as ClassProgramBranch[]);\n this.totalCount.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set('Failed to load branches');\n this.notificationService.error('Failed to load branches');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading branches:', error);\n this.error.set('Failed to load branches');\n this.loading.set(false);\n this.notificationService.error('Failed to load branches');\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.branches()\n }));\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ClassProgramBranch>): void {\n console.log('Grid Event:', event);\n\n switch (event.type) {\n case 'refresh':\n this.onRefresh();\n break;\n case 'pageChange':\n this.onPageChange(event.data);\n break;\n case 'search':\n this.onSearch(event.data);\n break;\n case 'rowReorder':\n this.onRowReorder(event.data);\n break;\n }\n }\n\n /**\n * Handle refresh\n */\n onRefresh(): void {\n this.loadBranches();\n }\n\n /**\n * Handle page change\n */\n onPageChange(event: any): void {\n console.log('Page change:', event);\n // Implement pagination logic here\n }\n\n /**\n * Handle search\n */\n onSearch(event: any): void {\n console.log('Search:', event);\n // Implement search logic here\n }\n\n /**\n * Handle row reorder (drag and drop)\n */\n onRowReorder(event: any): void {\n console.log('Row reorder:', event);\n\n if (event && event.newOrder) {\n // Update the sequence order based on the new drag and drop order\n this.updateSequenceOrder(event.newOrder);\n }\n }\n\n\n /**\n * Update sequence order for branches\n */\n private updateSequenceOrder(branches: ClassProgramBranch[]): void {\n // Update sequence numbers based on new order\n const updatedBranches = branches.map((branch, index) => ({\n ...branch,\n acabrn_sequence: index + 1\n }));\n\n // Update local state\n this.branches.set(updatedBranches);\n this.updateGridData();\n\n // TODO: Implement API call to update sequence order on server\n // This would typically be a bulk update API call\n console.log('Updated sequence order:', updatedBranches.map(b => ({ id: b._id, sequence: b.acabrn_sequence })));\n\n this.notificationService.success('Sequence order updated successfully');\n }\n\n\n /**\n * Navigate to create branch\n */\n onCreateBranch(event?: Event): void {\n console.log('🏢 Create Branch button clicked', event);\n const currentProgramId = this.programId();\n console.log('🏢 Current Program ID:', currentProgramId);\n\n if (!currentProgramId) {\n // Class program is required\n this.notificationService.warning('Please select a Class Program first before creating a branch');\n return;\n }\n\n // Use generateStringFromObject to pass programId as route parameter\n const queryParams = generateStringFromObject({ programId: currentProgramId });\n console.log('🏢 Navigating to create with programId:', queryParams);\n this.router.navigate(['/control-panel/program_specialization/create', queryParams]).then(\n (success) => {\n console.log('✅ Navigation successful:', success);\n },\n (error) => {\n console.error('❌ Navigation failed:', error);\n this.notificationService.error('Failed to navigate to create branch page');\n }\n );\n }\n\n /**\n * Navigate to view branch\n */\n onViewBranch(branch: ClassProgramBranch): void {\n if (branch._id) {\n const currentProgramId = this.programId();\n const queryParams = generateStringFromObject({ acabrn_id: branch._id });\n\n // Add programId as query parameter if available\n const navigationExtras: any = {};\n if (currentProgramId) {\n navigationExtras.queryParams = { programId: currentProgramId };\n }\n\n this.router.navigate(['/control-panel/program_specialization/view', queryParams], navigationExtras);\n }\n }\n\n /**\n * Navigate to edit branch\n */\n onEditBranch(branch: ClassProgramBranch): void {\n if (branch._id) {\n const currentProgramId = this.programId();\n const queryParams = generateStringFromObject({ acabrn_id: branch._id });\n\n\n this.router.navigate(['/control-panel/program_specialization/edit', queryParams]);\n }\n }\n\n /**\n * Navigate to manage term for branch\n */\n onManageTerm(branch: ClassProgramBranch): void {\n if (branch._id) {\n const currentProgramId = this.programId();\n const queryParams = generateStringFromObject({\n acabrn_id: branch._id,\n acacpm_id: currentProgramId\n });\n\n // Navigate to term management page\n this.router.navigate(['/control-panel/program-term-management', queryParams]);\n }\n }\n\n /**\n * Get dropdown items for branch actions\n */\n getBranchActionDropdownItems(branch: AcaClassPrgBranchResponse): DropdownItem[] {\n return [\n {\n id: 'view',\n label: 'View',\n icon: 'visibility'\n },\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit'\n },\n {\n id: 'manage-term',\n label: 'Manage Term',\n icon: 'school'\n },\n {\n id: 'toggle-status',\n label: branch.acabrn_isactive ? 'Deactivate' : 'Activate',\n icon: branch.acabrn_isactive ? 'block' : 'check_circle'\n },\n {\n id: 'toggle-lock',\n label: branch.acabrn_islocked ? 'Unlock' : 'Lock',\n icon: branch.acabrn_islocked ? 'lock_open' : 'lock'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, branch: ClassProgramBranch): void {\n switch (item.id) {\n case 'view':\n this.onViewBranch(branch);\n break;\n case 'edit':\n this.onEditBranch(branch);\n break;\n case 'manage-term':\n this.onManageTerm(branch);\n break;\n case 'toggle-status':\n this.toggleBranchStatus(branch);\n break;\n case 'toggle-lock':\n this.toggleBranchLock(branch);\n break;\n case 'delete':\n this.deleteBranch(branch);\n break;\n }\n }\n\n /**\n * Toggle branch status\n */\n private toggleBranchStatus(branch: ClassProgramBranch): void {\n if (!branch._id) return;\n\n const action = branch.acabrn_isactive ? 'deactivate' : 'activate';\n\n this.confirmationService.ask({\n title: `${action.charAt(0).toUpperCase() + action.slice(1)} Branch`,\n message: `Are you sure you want to ${action} this branch?`,\n confirmText: action.charAt(0).toUpperCase() + action.slice(1),\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n const payload: AcaClassPrgBranchToggleStatusPayload = {\n acabrn_id: branch._id!\n };\n\n this.classProgramBranchService.toggleClassProgramBranchStatus(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.notificationService.success(`Branch ${action}d successfully`);\n this.loadBranches();\n } else {\n this.notificationService.error(`Failed to ${action} branch`);\n }\n },\n error: (error) => {\n console.error('❌ Error toggling branch status:', error);\n this.notificationService.error(`Failed to ${action} branch`);\n }\n });\n }\n });\n }\n\n /**\n * Toggle branch lock\n */\n private toggleBranchLock(branch: ClassProgramBranch): void {\n if (!branch._id) return;\n\n const action = branch.acabrn_islocked ? 'unlock' : 'lock';\n\n this.confirmationService.ask({\n title: `${action.charAt(0).toUpperCase() + action.slice(1)} Branch`,\n message: `Are you sure you want to ${action} this branch?`,\n confirmText: action.charAt(0).toUpperCase() + action.slice(1),\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n const payload: AcaClassPrgBranchToggleLockPayload = {\n acabrn_id: branch._id!\n };\n\n this.classProgramBranchService.toggleClassProgramBranchLock(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.notificationService.success(`Branch ${action}ed successfully`);\n this.loadBranches();\n } else {\n this.notificationService.error(`Failed to ${action} branch`);\n }\n },\n error: (error) => {\n console.error('❌ Error toggling branch lock:', error);\n this.notificationService.error(`Failed to ${action} branch`);\n }\n });\n }\n });\n }\n\n /**\n * Delete branch\n */\n private deleteBranch(branch: ClassProgramBranch): void {\n if (!branch._id) return;\n\n this.confirmationService.ask({\n title: 'Delete Branch',\n message: `Are you sure you want to delete \"${branch.acabrn_name}\"? This action cannot be undone.`,\n confirmText: 'Delete',\n cancelText: 'Cancel',\n type: 'danger'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n const payload: AcaClassPrgBranchDeletePayload = {\n acabrn_id: branch._id!\n };\n\n this.classProgramBranchService.deleteClassProgramBranch(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.notificationService.success('Branch deleted successfully');\n this.loadBranches();\n } else {\n this.notificationService.error('Failed to delete branch');\n }\n },\n error: (error) => {\n console.error('❌ Error deleting branch:', error);\n this.notificationService.error('Failed to delete branch');\n }\n });\n }\n });\n }\n}\n\n","<!-- Class Program Branch List Component -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"onCreateBranch($event)\">\n Create Branch\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\n <!-- Filter Section -->\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-items-center tw-gap-4\">\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program *</label>\n <cide-ele-select\n [options]=\"programClasses()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onProgramClassChange($event)\"\n placeholder=\"Select Class Program\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [required]=\"true\">\n </cide-ele-select>\n </div>\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #dragHandleRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-justify-center tw-cursor-move drag-handle\" title=\"Drag to reorder\">\n <cide-ele-icon name=\"drag_indicator\" class=\"tw-w-4 tw-h-4 tw-text-gray-400 hover:tw-text-gray-600\"></cide-ele-icon>\n </div>\n</ng-template>\n\n\n<ng-template #classProgramRendererTemplate let-row=\"row\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row.acabrn_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <div class=\"tw-relative tw-inline-block\">\n <cide-ele-dropdown \n [items]=\"getBranchActionDropdownItems(row)\" \n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n </div>\n</ng-template>\n\n","import { Component, inject, signal, OnInit, DestroyRef, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideLytClassProgramBranchService } from '../../services/class-program-branch.service';\nimport { CideLytProgramClassService } from '../../../program-class-management/services/program-class.service';\nimport { CideCoreGeneralMasterService } from 'cloud-ide-shared';\nimport { ICoreSygms, IGeneralMasterListRequest } from 'cloud-ide-lms-model';\nimport {\n type AcaClassPrgBranchInsertUpdatePayload,\n type AcaClassPrgBranchGetByIdPayload,\n generateStringFromObject,\n generateObjectFromString\n} from 'cloud-ide-lms-model';\n\n// Interfaces based on the actual API response\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_class_program_id_acacpm?: any; // Can be string or populated object\n acabrn_name?: string;\n acabrn_code?: string;\n acabrn_sequence?: number;\n acabrn_isactive?: boolean;\n acabrn_islocked?: boolean;\n}\n\ninterface ProgramClass {\n _id?: string;\n acacpm_name?: string;\n acacpm_code?: string;\n acacpm_description?: string;\n}\n\ninterface BranchMaster extends ICoreSygms {\n value?: string;\n label?: string;\n}\n\n\n@Component({\n selector: 'cide-academics-class-program-branch-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent,\n ],\n templateUrl: './class-program-branch-form.component.html'\n})\nexport class CideLytClassProgramBranchFormComponent implements OnInit, OnDestroy {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private fb = inject(FormBuilder);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n private programClassService = inject(CideLytProgramClassService);\n private generalMasterService = inject(CideCoreGeneralMasterService);\n\n // Form and state management\n branchForm: FormGroup;\n loading = signal(false);\n error = signal<string | null>(null);\n isEditMode = signal(false);\n isViewMode = signal(false);\n branchId = signal<string | null>(null);\n\n // Data signals\n programClasses = signal<ProgramClass[]>([]);\n branchMasters = signal<BranchMaster[]>([]);\n\n // Signal for breadcrumb data that will be passed to shared wrapper\n breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n // Signal to control Program Class dropdown visibility\n showProgramClassDropdown = signal<boolean>(true);\n\n // Flag to prevent auto-populate during data load\n private isLoadingData = false;\n\n constructor() {\n this.branchForm = this.fb.group({\n acabrn_name: ['', [Validators.required, Validators.minLength(2)]],\n acabrn_code: ['', [Validators.required, Validators.minLength(2)]],\n acabrn_sequence: [0, [Validators.required, Validators.min(0)]],\n acabrn_class_program_id_acacpm: ['', [Validators.required]],\n acabrn_branch_id_sygms: [''],\n acabrn_isactive: [true],\n acabrn_islocked: [false]\n });\n }\n\n ngOnInit(): void {\n console.log('🏢 Class Program Branch Form Component initialized');\n this.initializeComponent();\n this.setupFormListeners();\n }\n\n /**\n * Setup form control listeners\n */\n private setupFormListeners(): void {\n // Listen to SYGMS field changes\n this.branchForm.get('acabrn_branch_id_sygms')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((sygmsId: string) => {\n // Only auto-populate if not loading existing data\n if (sygmsId && !this.isLoadingData) {\n this.onBranchMasterChange(sygmsId);\n }\n });\n\n // Listen to Program Class field changes\n this.branchForm.get('acabrn_class_program_id_acacpm')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((programClassId: string) => {\n // Only trigger if not loading existing data and dropdown is visible\n if (programClassId && !this.isLoadingData && this.showProgramClassDropdown()) {\n this.onProgramClassChange(programClassId);\n }\n });\n }\n\n /**\n * Handle Program Class selection change\n * This can be used to filter or update dependent lists\n */\n private onProgramClassChange(programClassId: string): void {\n if (!programClassId) {\n return;\n }\n\n console.log('🔄 Program Class changed:', programClassId);\n // Add any logic here to update dependent lists based on Program Class selection\n // For example, you could filter branch masters or load additional data\n }\n\n ngOnDestroy(): void {\n console.log('🏢 Class Program Branch Form Component destroyed');\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n this.loadMasterData();\n this.checkRouteParams();\n }\n\n /**\n * Check route parameters to determine mode\n */\n private checkRouteParams(): void {\n const url = this.router.url;\n const queryParams = this.route.snapshot.queryParams;\n const routeParams = this.route.snapshot.params;\n\n // Check for program ID from route parameters or query parameters\n let programId: string | null = null;\n\n // Check route parameters for programId or acacpm_id (for create operations)\n if (routeParams['query']) {\n const params = generateObjectFromString(routeParams['query']);\n console.log('🏢 Params:generateObjectFromString', params);\n programId = params?.programId || params?.acacpm_id || null;\n }\n\n // Also check queryParams for programId or acacpm_id\n if (!programId) {\n programId = queryParams['programId'] || queryParams['acacpm_id'] || null;\n }\n\n if (programId) {\n console.log('🏢 Program Class Management ID from URL:', programId);\n // Hide the dropdown and set the value\n this.showProgramClassDropdown.set(false);\n this.branchForm.patchValue({\n acabrn_class_program_id_acacpm: programId\n });\n // Keep the field enabled so it's included in form.value, but it will be hidden\n } else {\n // Show the dropdown if no ID from URL\n this.showProgramClassDropdown.set(true);\n }\n\n if (url.includes('/view/')) {\n this.isViewMode.set(true);\n this.loadBranchForView(queryParams);\n } else if (url.includes('/edit/')) {\n this.isEditMode.set(true);\n this.loadBranchForEdit(queryParams);\n } else {\n // Create mode\n this.isEditMode.set(false);\n this.isViewMode.set(false);\n // Initialize breadcrumb for create mode\n this.updateBreadcrumbData();\n }\n }\n\n\n /**\n * Load master data\n */\n private loadMasterData(): void {\n console.log('🔄 Loading master data for Class Program Branch Form...');\n\n // Load program classes\n this.loadProgramClasses();\n \n // Load branch masters (SYGMS)\n this.loadBranchMasters();\n }\n\n /**\n * Load program classes\n */\n private loadProgramClasses(): void {\n this.programClassService.getProgramClassList({ pagination: false })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Program classes loaded:', response);\n if (response?.success && response.data) {\n this.programClasses.set(response.data as ProgramClass[]);\n } else {\n console.warn('⚠️ No program class data received');\n this.programClasses.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading program classes:', error);\n this.programClasses.set([]);\n }\n });\n }\n\n /**\n * Load branch masters from SYGMS (General Master)\n * Filter by type code 'BRANCH' or similar\n */\n private loadBranchMasters(): void {\n const payload: IGeneralMasterListRequest = {\n sygmt_code: 'BRANCH' // Assuming 'BRANCH' is the type code for branch masters\n };\n\n this.generalMasterService.getMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Branch masters loaded:', response);\n if (response?.success && response.data) {\n const masters = response.data.map((master: ICoreSygms) => ({\n ...master,\n value: master._id,\n label: master.sygms_title\n })) as BranchMaster[];\n this.branchMasters.set(masters);\n } else {\n console.warn('⚠️ No branch master data received');\n this.branchMasters.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading branch masters:', error);\n this.branchMasters.set([]);\n }\n });\n }\n\n /**\n * Handle SYGMS selection change - auto-populate name and code\n */\n onBranchMasterChange(sygmsId: string): void {\n if (!sygmsId) {\n return;\n }\n\n const selectedMaster = this.branchMasters().find(m => m._id === sygmsId);\n if (selectedMaster) {\n // Auto-populate name from SYGMS title\n if (selectedMaster.sygms_title) {\n this.branchForm.patchValue({\n acabrn_name: selectedMaster.sygms_title\n });\n }\n\n // Auto-populate code from SYGMS configuration or code\n if (selectedMaster.sygms_configuration && typeof selectedMaster.sygms_configuration === 'object') {\n const config = selectedMaster.sygms_configuration as any;\n if (config.code) {\n this.branchForm.patchValue({\n acabrn_code: config.code\n });\n } else if (selectedMaster.sygms_code) {\n this.branchForm.patchValue({\n acabrn_code: selectedMaster.sygms_code\n });\n }\n } else if (selectedMaster.sygms_code) {\n this.branchForm.patchValue({\n acabrn_code: selectedMaster.sygms_code\n });\n }\n }\n }\n\n\n /**\n * Load branch for viewing\n */\n private loadBranchForView(queryParams: any): void {\n const routeParams = this.route.snapshot.params;\n\n // Check query parameters first\n let params = generateObjectFromString(routeParams['query']);\n console.log('🏢 Params:generateObjectFromString', params);\n\n if (params?.acabrn_id) {\n console.log('🏢 Branch ID for view:', params.acabrn_id);\n this.branchId.set(params.acabrn_id);\n this.loadBranchData(params.acabrn_id, true);\n } else {\n console.error('❌ No branch ID found in route parameters');\n this.error.set('Branch ID not found in route parameters');\n }\n }\n\n /**\n * Load branch for editing\n */\n private loadBranchForEdit(queryParams: any): void {\n const routeParams = this.route.snapshot.params;\n\n // Check query parameters first\n let params = generateObjectFromString(routeParams['query']);\n console.log('🏢 Params:generateObjectFromString', params);\n\n if (params?.acabrn_id) {\n console.log('🏢 Branch ID for edit:', params.acabrn_id);\n this.branchId.set(params.acabrn_id);\n this.loadBranchData(params.acabrn_id, false);\n } else {\n console.error('❌ No branch ID found in route parameters');\n this.error.set('Branch ID not found in route parameters');\n }\n }\n\n /**\n * Load branch data\n */\n private loadBranchData(branchId: string, isViewMode: boolean): void {\n this.loading.set(true);\n this.error.set(null);\n this.isLoadingData = true; // Set flag to prevent auto-populate\n\n const payload: AcaClassPrgBranchGetByIdPayload = {\n acabrn_id: branchId\n };\n\n this.classProgramBranchService.getClassProgramBranchById(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n const branchData = response.data;\n\n // Check if program class ID is in URL - if so, hide dropdown\n const routeParams = this.route.snapshot.params;\n const queryParams = this.route.snapshot.queryParams;\n let programIdFromUrl: string | null = null;\n\n if (routeParams['query']) {\n const params = generateObjectFromString(routeParams['query']);\n programIdFromUrl = params?.programId || params?.acacpm_id || null;\n }\n\n if (!programIdFromUrl) {\n programIdFromUrl = queryParams['programId'] || queryParams['acacpm_id'] || null;\n }\n\n if (programIdFromUrl) {\n this.showProgramClassDropdown.set(false);\n // Keep the field enabled so it's included in form.value\n }\n\n // Populate form with branch data\n this.branchForm.patchValue({\n acabrn_name: branchData.acabrn_name,\n acabrn_code: branchData.acabrn_code,\n acabrn_sequence: branchData.acabrn_sequence,\n acabrn_class_program_id_acacpm: branchData.acabrn_class_program_id_acacpm?._id || branchData.acabrn_class_program_id_acacpm,\n acabrn_branch_id_sygms: branchData.acabrn_branch_id_sygms?._id || branchData.acabrn_branch_id_sygms || '',\n acabrn_isactive: (branchData).acabrn_isactive,\n acabrn_islocked: branchData.acabrn_islocked\n });\n\n // Reset flag after data is loaded\n this.isLoadingData = false;\n\n // Disable form if in view mode\n if (isViewMode) {\n this.branchForm.disable();\n }\n\n // Update breadcrumb for edit/view mode\n this.updateBreadcrumbData(branchData, isViewMode);\n\n this.notificationService.success('Branch data loaded successfully.');\n } else {\n this.error.set('Failed to load branch data.');\n this.notificationService.error('Failed to load branch data.');\n this.isLoadingData = false;\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading branch data:', error);\n this.error.set('Failed to load branch data. Please try again.');\n this.loading.set(false);\n this.isLoadingData = false;\n this.notificationService.error('Failed to load branch data. Please try again.');\n }\n });\n }\n\n /**\n * Get form title\n */\n get formTitle(): string {\n if (this.isViewMode()) return 'View Program Specialization';\n if (this.isEditMode()) return 'Edit Program Specialization';\n return 'Create Program Specialization';\n }\n\n /**\n * Get submit button text\n */\n get submitButtonText(): string {\n if (this.isViewMode()) return 'Close';\n if (this.isEditMode()) return 'Update Branch';\n return 'Create Branch';\n }\n\n /**\n * Handle form submission\n */\n onSubmit(): void {\n if (this.isViewMode()) {\n this.location.back();\n return;\n }\n\n if (this.branchForm.invalid) {\n this.notificationService.error('Please fill in all required fields correctly.');\n return;\n }\n\n const formData = this.branchForm.value;\n const payload: AcaClassPrgBranchInsertUpdatePayload = {\n _id: this.branchId() || undefined,\n acabrn_name: formData.acabrn_name,\n acabrn_code: formData.acabrn_code,\n acabrn_sequence: formData.acabrn_sequence,\n acabrn_class_program_id_acacpm: formData.acabrn_class_program_id_acacpm,\n acabrn_branch_id_sygms: formData.acabrn_branch_id_sygms || undefined,\n acabrn_isactive: formData.acabrn_isactive,\n acabrn_islocked: formData.acabrn_islocked\n };\n\n this.saveBranch(payload);\n }\n\n /**\n * Save branch\n */\n private saveBranch(payload: AcaClassPrgBranchInsertUpdatePayload): void {\n this.loading.set(true);\n\n this.classProgramBranchService.saveClassProgramBranch(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.notificationService.success(`Branch has been ${action} successfully.`);\n this.location.back();\n } else {\n this.notificationService.error(response?.message || 'Failed to save branch.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error saving branch:', error);\n this.notificationService.error('Failed to save branch. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Handle cancel\n */\n onCancel(): void {\n if (this.branchForm.dirty && !this.isViewMode()) {\n this.confirmationService.ask({\n title: 'Discard Changes',\n message: 'You have unsaved changes. Are you sure you want to discard them?',\n confirmText: 'Discard',\n cancelText: 'Keep Editing',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n this.location.back();\n }\n });\n } else {\n this.location.back();\n }\n }\n\n /**\n * Reset form to initial state\n */\n resetForm(): void {\n this.branchForm.reset();\n this.branchForm.patchValue({\n acabrn_isactive: true,\n acabrn_islocked: false,\n acabrn_sequence: 0,\n acabrn_branch_id_sygms: ''\n });\n this.notificationService.info('Form has been reset to initial values.');\n }\n\n /**\n * Toggle active status on card click\n */\n onActiveCardClick(): void {\n if (this.isViewMode()) return;\n\n const currentValue = this.branchForm.get('acabrn_isactive')?.value;\n this.branchForm.patchValue({\n acabrn_isactive: !currentValue\n });\n }\n\n /**\n * Toggle locked status on card click\n */\n onLockedCardClick(): void {\n if (this.isViewMode()) return;\n\n const currentValue = this.branchForm.get('acabrn_islocked')?.value;\n this.branchForm.patchValue({\n acabrn_islocked: !currentValue\n });\n }\n\n /**\n * Update breadcrumb data based on mode\n */\n private updateBreadcrumbData(branchData?: any, isViewMode: boolean = false): void {\n const additionalItems: { id: string; label: string; icon?: string; url?: string }[] = [];\n\n if (this.isEditMode() || isViewMode) {\n if (branchData) {\n additionalItems.push({\n id: branchData._id || 'branch',\n label: branchData.acabrn_name || 'Branch',\n icon: undefined,\n url: undefined\n });\n }\n\n if (isViewMode) {\n additionalItems.push({\n id: 'view',\n label: 'View',\n icon: 'visibility',\n url: undefined\n });\n } else {\n additionalItems.push({\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n url: undefined\n });\n }\n } else {\n // Create mode\n additionalItems.push({\n id: 'create',\n label: 'Create',\n icon: 'add',\n url: undefined\n });\n }\n\n this.breadcrumbData.set(additionalItems);\n }\n}\n\n","<!-- \n CLASS PROGRAM BRANCH FORM COMPONENT\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n <div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"branchForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\"\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n\n <!-- Basic Branch Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program Selection -->\n @if (showProgramClassDropdown()) {\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program *</label>\n <cide-ele-select formControlName=\"acabrn_class_program_id_acacpm\" placeholder=\"Select class program\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"acacpm_alise_title\" [options]=\"programClasses()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Sequence will be automatically assigned based on the order in the listing\n </p>\n </div>\n </div>\n }\n\n <!-- Standard Branch Name (SYGMS) -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Standard Branch Name</label>\n <cide-ele-select formControlName=\"acabrn_branch_id_sygms\" placeholder=\"Select standard branch name\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"branchMasters()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Selecting a standard branch will auto-populate the branch name and code\n </p>\n </div>\n </div>\n\n <!-- Branch Name and Code -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div>\n <cide-ele-input label=\"Branch Name *\" formControlName=\"acabrn_name\"\n placeholder=\"e.g., Computer Science Branch\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-input label=\"Branch Code *\" formControlName=\"acabrn_code\" placeholder=\"e.g., CS\" size=\"md\"\n leadingIcon=\"code\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Status and Lock Options -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onActiveCardClick()\">\n <cide-ele-input formControlName=\"acabrn_isactive\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this branch</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onLockedCardClick()\">\n <cide-ele-input formControlName=\"acabrn_islocked\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n {{ isViewMode() ? 'Close' : 'Cancel' }}\n </button>\n\n @if (!isViewMode()) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || branchForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ submitButtonText }}\n </button>\n }\n </div>\n </div>\n </div>\n </form>\n </div>\n</cide-lyt-shared-wrapper>","// Class Program Branch Management Module\r\n// This module provides components and services for managing class program branches\r\n\r\n// Components\r\nexport { CideLytClassProgramBranchListComponent } from './components/class-program-branch-list/class-program-branch-list.component';\r\nexport { CideLytClassProgramBranchFormComponent } from './components/class-program-branch-form/class-program-branch-form.component';\r\n\r\n// Services\r\nexport { CideLytClassProgramBranchService } from './services/class-program-branch.service';\r\n\r\n","/*\r\n * Public API Surface of cloud-ide-academics\r\n */\r\nexport * from './lib/cloud-ide-academics.routes';\r\nexport * from './lib/collection/academic-year-management';\r\nexport * from './lib/collection/class-program-branch-management';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;;;;;;;;;;;;AAEO,MAAM,eAAe,GAAY;;AAEpC,IAAA;AACI,QAAA,IAAI,EAAE,eAAe;AACrB,QAAA,aAAa,EAAE,MAAM,0EAA0G,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,yBAAyB,CAAC;AACtK,QAAA,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,sBAAsB;AAC5B,QAAA,aAAa,EAAE,MAAM,4EAA8G,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAC5K,QAAA,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,2BAA2B;AACjC,QAAA,aAAa,EAAE,MAAM,4EAA8G,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAC5K,QAAA,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,2BAA2B;AACjC,QAAA,aAAa,EAAE,MAAM,4EAA8G,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAC5K,QAAA,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,aAAa,EAAE,MAAM,OAAO,iEAAkG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,yBAAyB,CAAC;AACtK,QAAA,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,iCAAiC;AACvC,QAAA,aAAa,EAAE,MAAM,OAAO,mEAAsG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAC5K,QAAA,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,sCAAsC;AAC5C,QAAA,aAAa,EAAE,MAAM,OAAO,mEAAsG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAC5K,QAAA,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,sCAAsC;AAC5C,QAAA,aAAa,EAAE,MAAM,OAAO,mEAAsG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAC5K,QAAA,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,gCAAgC;AACtC,QAAA,aAAa,EAAE,MAAM,OAAO,wEAAqH,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,+BAA+B,CAAC;AAC/L,QAAA,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,qCAAqC;AAC3C,QAAA,aAAa,EAAE,MAAM,OAAO,wEAAqH,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,+BAA+B,CAAC;AAC/L,QAAA,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,qCAAqC;AAC3C,QAAA,aAAa,EAAE,MAAM,OAAO,wEAAqH,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,+BAA+B,CAAC;AAC/L,QAAA,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,yBAAyB;AAC/B,QAAA,aAAa,EAAE,MAAM,OAAO,sEAAiH,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,6BAA6B,CAAC;AACzL,QAAA,KAAK,EAAE,+BAA+B;QACtC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,gCAAgC;AACtC,QAAA,aAAa,EAAE,MAAM,OAAO,sEAAiH,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,6BAA6B,CAAC;AACzL,QAAA,KAAK,EAAE,+BAA+B;QACtC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,aAAa,EAAE,MAAM,OAAO,wEAAuH,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,+BAA+B,CAAC;AACjM,QAAA,KAAK,EAAE,iCAAiC;QACxC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,2BAA2B;AACjC,QAAA,aAAa,EAAE,MAAM,OAAO,wEAAuH,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,+BAA+B,CAAC;AACjM,QAAA,KAAK,EAAE,iCAAiC;QACxC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,2BAA2B;AACjC,QAAA,aAAa,EAAE,MAAM,OAAO,0EAA2H,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iCAAiC,CAAC;AACvM,QAAA,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,gCAAgC;AACtC,QAAA,aAAa,EAAE,MAAM,OAAO,0EAA2H,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iCAAiC,CAAC;AACvM,QAAA,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,gCAAgC;AACtC,QAAA,aAAa,EAAE,MAAM,OAAO,0EAA2H,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iCAAiC,CAAC;AACvM,QAAA,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;;AAED,IAAA;AACI,QAAA,IAAI,EAAE,+BAA+B;AACrC,QAAA,aAAa,EAAE,MAAM,gFAA+H,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,sCAAsC,CAAC;AACxM,QAAA,KAAK,EAAE,iCAAiC;QACxC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,wBAAwB;AAC9B,QAAA,aAAa,EAAE,MAAM,gFAA+H,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,sCAAsC,CAAC;AACxM,QAAA,KAAK,EAAE,iCAAiC;QACxC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,uCAAuC;AAC7C,QAAA,aAAa,EAAE,MAAM,gFAA+H,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,sCAAsC,CAAC;AACxM,QAAA,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,oCAAoC;AAC1C,QAAA,aAAa,EAAE,MAAM,gFAA+H,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,sCAAsC,CAAC;AACxM,QAAA,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,oCAAoC;AAC1C,QAAA,aAAa,EAAE,MAAM,gFAA+H,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,sCAAsC,CAAC;AACxM,QAAA,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ;;;MC3LQ,0BAA0B,CAAA;AAC7B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,OAAsB,EAAA;AACxC,QAAA,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,YAAY;YAC/B;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,OAAoC,EAAA;AACtD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,YAAY;YAC/B,MAAM;YACN;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,sBAAsB,CAAC,IAAsC,EAAA;AAC3D,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC;AACpB,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;AAGlC;;;;AAIG;AACH,IAAA,kCAAkC,CAAC,IAA8B,EAAA;;AAE/D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,4BAA4B,IAAI,EAAE;AACxD,QAAA,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,EAAsC;QACxE,OAAQ,gBAAwB,CAAC,4BAA4B;;AAG7D,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,IAAI,CACvD,SAAS,CAAC,CAAC,oBAAoB,KAAI;YACjC,IAAI,CAAC,oBAAoB,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;AAC/D,gBAAA,OAAO,EAAE,CAAC,oBAAoB,CAAC;;AAGjC,YAAA,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG;;AAGpD,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,gBAAA,OAAO,EAAE,CAAC,oBAAoB,CAAC;;;YAIjC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAA4B,KAAI;AACvE,gBAAA,MAAM,cAAc,GAA4C;oBAC9D,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS;AAC9E,oBAAA,8BAA8B,EAAE,cAAc;oBAC9C,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;AACtD,oBAAA,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK;AACnD,oBAAA,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI;iBACjD;AAED,gBAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC;AAC/B,oBAAA,oBAAoB,CAAC,aAAa;AAClC,oBAAA,kBAAkB,CAAC,MAAM;AACzB,oBAAA,kBAAkB,CAAC;AACpB,iBAAA,CAAC;AAEF,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,IAAI,CACpD,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,oBAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;oBAC7C,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;iBACrC,CAAC,CACH;AACH,aAAC,CAAC;;AAGF,YAAA,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC,IAAI,CACtC,GAAG,CAAC,CAAC,gBAAqB,KAAI;;AAE5B,gBAAA,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,QAAa,KAAK,QAAQ,CAAC,OAAO,CAAC;gBAEzF,IAAI,qBAAqB,EAAE;oBACzB,OAAO;AACL,wBAAA,GAAG,oBAAoB;AACvB,wBAAA,OAAO,EAAE;qBACV;;qBACI;oBACL,OAAO;AACL,wBAAA,GAAG,oBAAoB;AACvB,wBAAA,OAAO,EAAE,8CAA8C;AACvD,wBAAA,aAAa,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,QAAa,KAAK,CAAC,QAAQ,CAAC,OAAO;qBACrE;;aAEX,CAAC,CACH;AACH,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC;AACpE,YAAA,OAAO,EAAE,CAAC;AACR,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,IAAI,EAAE,GAAU;AAChB,gBAAA,OAAO,EAAE,0CAA0C;gBACnD;AACM,aAAA,CAAC;SACV,CAAC,CACH;;AAGH;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,OAAmC,EAAA;AACpD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,YAAY;YAC/B,QAAQ;YACR;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAG9B;;;;AAIG;AACH,IAAA,wBAAwB,CAAC,OAAyC,EAAA;AAChE,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,YAAY;YAC/B;AACD,SAAA,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,yDAAyD,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QACxF,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;;AAGtC;;;;AAIG;AACH,IAAA,yBAAyB,CAAC,OAA6B,EAAA;AACrD,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC;AACpB,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;;AAGjD;;;;AAIG;AACH,IAAA,+BAA+B,CAAC,OAA6B,EAAA;AAC3D,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,mBAAmB;YACtC;AACD,SAAA,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,iEAAiE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QAChG,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;;uGAxM3B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA;;2FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCvBY,iCAAiC,CAAA;AACpC,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC;;;;AAIG;AACH,IAAA,0BAA0B,CAAC,OAA6B,EAAA;AACtD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,mBAAmB;YACtC;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,0BAA0B,CAAC,OAA2C,EAAA;AACpE,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,mBAAmB;YACtC,MAAM;YACN;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,6BAA6B,CAAC,IAA6C,EAAA;AACzE,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC;AACpB,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;AAGlC;;;;AAIG;AACH,IAAA,yBAAyB,CAAC,OAA0C,EAAA;AAClE,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,mBAAmB;YACtC,QAAQ;YACR;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAG9B;;;;AAIG;AACH,IAAA,+BAA+B,CAAC,OAAgD,EAAA;AAC9E,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,mBAAmB;YACtC;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;;uGApF1B,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cAFhC,MAAM,EAAA,CAAA;;2FAEP,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCkDY,2BAA2B,CAAA;;AAErB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACxD,IAAA,0BAA0B,GAAG,MAAM,CAAC,iCAAiC,CAAC;AACtE,IAAA,aAAa,GAAG,MAAM,CAAiB,oBAAoB,CAAC;AAC5D,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;;AAG/C,IAAA,gBAAgB;AACP,IAAA,SAAS,GAAG,MAAM,CAAS,OAAO,qDAAC;AACnC,IAAA,OAAO,GAAG,MAAM,CAAU,KAAK,mDAAC;;AAGhC,IAAA,cAAc,GAAG,MAAM,CAAS,EAAE,0DAAC;AACnC,IAAA,UAAU,GAAG,MAAM,CAAU,KAAK,sDAAC;AACnC,IAAA,gBAAgB,GAAG,MAAM,CAAwB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;;AAGrD,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;AAE7C,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;;YAEpC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACvC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACvC,iBAAiB,EAAE,CAAC,EAAE,CAAC;YACvB,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5C,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1C,cAAc,EAAE,CAAC,IAAI,CAAC;YACtB,eAAe,EAAE,CAAC,KAAK,CAAC;YACxB,cAAc,EAAE,CAAC,KAAK,CAAC;;YAGvB,4BAA4B,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;AAC/C,SAAA,CAAC;;IAGJ,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;;AAG5B;;AAEG;IACK,mBAAmB,GAAA;;AAEzB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AAC7E,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;AACnC,YAAA,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC;YAEvC,IAAI,WAAW,EAAE;;AAEf,gBAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC;AACvD,gBAAA,IAAI,SAAS,EAAE,QAAQ,EAAE;oBACvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,QAAkB,CAAC;AACrD,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,oBAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,QAAkB,CAAC;;;iBAEpD;;AAEL,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;;;YAI5B,IAAI,CAAC,mBAAmB,EAAE;AAC5B,SAAC,CAAC;;AAGJ;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;;QAE1C,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AAC7C,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,CAAA,YAAA,CAAc,EAAE,QAAQ,CAAC,IAAI,CAAC;oBAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;;aAE9C;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK;AACjE,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,oBAAoB,CAAC,cAAsB,EAAA;AACjD,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,QAAA,MAAM,OAAO,GAAgC;AAC3C,YAAA,QAAQ,EAAE;SACX;;QAGD,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AAC9D,YAAA,IAAI,EAAE,CAAC,QAA4C,KAAI;gBACrD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC3D,oBAAA,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAGpD,oBAAA,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC;;qBACxC;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC;AACpD,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;aAE1B;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC;AAC3D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,wBAAwB,CAAC,cAAsB,EAAA;AACrD,QAAA,MAAM,cAAc,GAAQ;AAC1B,YAAA,8BAA8B,EAAE;SACjC;QAED,IAAI,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC;AACnF,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC/D,oBAAA,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC;;qBAC3C;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC;;AAE7D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gBAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC;AAC/D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,gCAAgC,CAAC,IAAS,EAAA;QAChD,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;AAC/B,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;AACjC,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;AACjC,gBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,EAAE;AAC/C,gBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACvG,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACjG,gBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;AAC3C,gBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,KAAK;AAC9C,gBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI;AACxC,aAAA,CAAC;;;AAIN;;AAEG;AACK,IAAA,4BAA4B,CAAC,QAAe,EAAA;QAClD,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;;YAEvC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;;YAGxC,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD,gBAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;;;AAI5C,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAY,KAAI;AAChC,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACjC,oBAAA,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;AACxB,oBAAA,8BAA8B,EAAE,CAAC,OAAO,CAAC,8BAA8B,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9H,oBAAA,sBAAsB,EAAE,CAAC,OAAO,CAAC,sBAAsB,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACrF,oBAAA,gBAAgB,EAAE,CAAC,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC;AACrD,oBAAA,iBAAiB,EAAE,CAAC,OAAO,CAAC,iBAAiB,IAAI,KAAK;AACvD,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,YAAY,CAAC;AACnD,aAAC,CAAC;;;AAIN;;AAEG;IACH,gBAAgB,GAAA;QACd,OAAO;YACL,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/D,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM;SAC9D;;AAGH,IAAA,WAAW,CAAC,GAAY,EAAA;QACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;;IAO5B,QAAQ,GAAA;QAEN,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC1D,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK;;AAG5C,YAAA,MAAM,OAAO,GAAqC;AAChD,gBAAA,GAAG,QAAQ;AACX,gBAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,SAAS;AAC1D,gBAAA,4BAA4B,EAAE,IAAI,CAAC,4BAA4B;aAChE;AAED,YAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,OAAO,CAAC;;YAGlE,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAC/B,SAAS,CAAC,MAAK;;gBAEb,OAAO,IAAI,CAAC,mBAAmB,CAAC,kCAAkC,CAAC,OAAO,CAAC;AAC7E,aAAC,CAAC,CACH,CAAC,SAAS,CAAC;AACV,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;wBACrB,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE,QAAQ,CAAC,IAAI,CAAC;;AAG9E,wBAAA,IAAK,QAAgB,CAAC,aAAa,IAAK,QAAgB,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;4BACjF,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAG,QAAgB,CAAC,aAAa,CAAC;;6BACpE;4BACL,IAAI,CAAC,wBAAwB,EAAE;;;yBAE5B;AACL,wBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC;;AAEjD,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;iBACxB;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACrD,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;aACG;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAC/B,IAAI,CAAC,oBAAoB,EAAE;;;AAI/B;;AAEG;IACK,oBAAoB,GAAA;AAC1B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YACxD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;YAC9C,OAAO,EAAE,aAAa,EAAE;AAC1B,SAAC,CAAC;;IAGJ,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC1B,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;;QAGF,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;;;AAI5C,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;;QAG7B,IAAI,CAAC,8BAA8B,EAAE;;AAGvC;;AAEG;IACH,wBAAwB,GAAA;QACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,8BAA8B,CAAC,CAAC;;AAGxD;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,IAAI,CAAC,wBAAwB,EAAE;;aAC1B;YACL,IAAI,CAAC,SAAS,EAAE;;;AAIpB;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,oBAAoB,GAAG,0BAA0B;;AAG9E;;AAEG;AACH,IAAA,IAAI,yBAAyB,GAAA;QAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,8BAA8B,CAAc;;AAG/E;;AAEG;IACH,sBAAsB,GAAA;;AAEpB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;AAC7F,QAAA,IAAI,iBAAiB,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC;YAC5C;;;QAIF,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAEnF,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACxC,GAAG,EAAE,CAAC,MAAM,CAAC;AACb,YAAA,8BAA8B,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACpF,sBAAsB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnD,gBAAgB,EAAE,CAAC,KAAK,CAAC;YACzB,iBAAiB,EAAE,CAAC,KAAK;AAC1B,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,CAAC;;AAG1D;;AAEG;AACK,IAAA,4BAA4B,CAAC,iBAAyB,EAAA;AAC5D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,yBAAyB;QACpD,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAY,KAAI;AAC9C,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,EAAE;gBACjD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;;AAE7E,SAAC,CAAC;;AAGJ;;AAEG;IACH,4BAA4B,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK;;AAG7C;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK;;AAG7C;;;AAGG;AACH,IAAA,4BAA4B,CAAC,cAAsB,EAAA;AACjD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC;AACvC,QAAA,IAAI,CAAC,4BAA4B,CAAC,cAAc,CAAC;;AAGnD;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ;;AAGxD,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,OAAO,IAAI,CAAC;;;AAId,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAQ;;YAGlC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE;gBACjD,OAAO,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,CAAC,GAAG,CAAC,CAAA,4BAAA,CAA8B,CAAC;AAC5D,gBAAA,OAAO,KAAK;;;YAId,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,KAAK;YACpE,MAAM,cAAc,GAAG,IAAI,CAAC,4BAA4B,CAAC,eAAe,EAAE,CAAC,CAAC;AAC5E,YAAA,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;AACzB,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,CAAC,GAAG,CAAC,CAAA,6CAAA,EAAgD,cAAc,GAAG,CAAC,CAAA,CAAE,CAAC;AAClG,gBAAA,OAAO,KAAK;;;AAIhB,QAAA,OAAO,IAAI;;AAGb;;AAEG;IACK,4BAA4B,CAAC,QAAgB,EAAE,YAAoB,EAAA;AACzE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ;AAExD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,IAAI,CAAC,KAAK,YAAY,EAAE;AACtB,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAQ;gBAClC,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,KAAK,KAAK,QAAQ,EAAE;AAC7D,oBAAA,OAAO,CAAC;;;;QAKd,OAAO,CAAC,CAAC;;AAGX;;AAEG;AACH,IAAA,yBAAyB,CAAC,KAAa,EAAA;AACrC,QAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,KAAK,CAAC;;QAE9C,IAAI,CAAC,8BAA8B,EAAE;;AAGvC;;AAEG;IACH,qBAAqB,CAAC,KAAU,EAAE,YAAoB,EAAA;AACpD,QAAA,MAAM,gBAAgB,GAAG,KAAK,EAAE,KAAK,IAAI,KAAK;QAC9C,IAAI,gBAAgB,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,CAAA,+BAAA,EAAkC,YAAY,CAAA,CAAA,CAAG,EAAE,gBAAgB,CAAC;;YAEhF,IAAI,CAAC,8BAA8B,EAAE;;;AAIzC;;;;AAIG;AACH,IAAA,wBAAwB,CAAC,mBAA2B,EAAA;AAClD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;QACxC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5C,YAAA,OAAO,EAAE;;;QAIX,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;AAExE,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,kCAAA,EAAqC,mBAAmB,GAAG,EAAE;YACvE,aAAa,EAAE,WAAW,CAAC,MAAM;YACjC,iBAAiB;AACjB,YAAA,iBAAiB,EAAE,WAAW,CAAC,MAAM,GAAG,iBAAiB,CAAC;AAC3D,SAAA,CAAC;;AAGF,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,MAAW,KAAI;AACxC,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG;YAC3B,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAE9D,IAAI,iBAAiB,EAAE;gBACrB,OAAO,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,MAAM,CAAC,SAAS,CAAA,GAAA,EAAM,QAAQ,CAAA,iEAAA,CAAmE,CAAC;;YAG9H,OAAO,CAAC,iBAAiB;AAC3B,SAAC,CAAC;;AAGJ;;AAEG;AACK,IAAA,oBAAoB,CAAC,mBAA2B,EAAA;AACtD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,yBAAyB;QACpD,MAAM,WAAW,GAAa,EAAE;QAEhC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAY,EAAE,KAAa,KAAI;AAC7D,YAAA,IAAI,KAAK,KAAK,mBAAmB,EAAE;gBACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,KAAK;gBAC7D,IAAI,QAAQ,EAAE;AACZ,oBAAA,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;;;AAGhC,SAAC,CAAC;AAEF,QAAA,OAAO,WAAW;;AAGpB;;AAEG;IACK,8BAA8B,GAAA;;;AAGpC,QAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC;;AAG5D;;AAEG;IACH,gBAAgB,CAAC,QAAgB,EAAE,YAAoB,EAAA;QACrD,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;AACjE,QAAA,OAAO,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAG7C;;AAEG;AACH,IAAA,uBAAuB,CAAC,YAAoB,EAAA;QAC1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC;QACrE,OAAO,iBAAiB,CAAC,MAAM;;AAGjC;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM;;AAGpC;;;;AAIG;AACH,IAAA,qBAAqB,CAAC,mBAA2B,EAAA;AAC/C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;AACxC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK;;QAG5D,MAAM,iBAAiB,GAAG;AACvB,aAAA,GAAG,CAAC,CAAC,OAAY,EAAE,KAAa,KAAI;YACnC,IAAI,KAAK,KAAK,mBAAmB,IAAI,OAAO,CAAC,sBAAsB,EAAE;gBACnE,OAAO,OAAO,CAAC,sBAAsB;;AAEvC,YAAA,OAAO,IAAI;AACb,SAAC;AACA,aAAA,MAAM,CAAC,CAAC,EAAiB,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;;AAG1D,QAAA,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM;;AAGjF;;;AAGG;IACH,mBAAmB,GAAA;AACjB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;AACxC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK;;QAG5D,MAAM,iBAAiB,GAAG;AACvB,aAAA,GAAG,CAAC,CAAC,OAAY,KAAI;AACpB,YAAA,IAAI,OAAO,CAAC,sBAAsB,EAAE;gBAClC,OAAO,OAAO,CAAC,sBAAsB;;AAEvC,YAAA,OAAO,IAAI;AACb,SAAC;AACA,aAAA,MAAM,CAAC,CAAC,EAAiB,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;;AAG1D,QAAA,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM;;AAGjF;;;;AAIG;IACH,WAAW,GAAA;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC;;AAG1E,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;;QAG1B,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC;;AAG3E;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAChD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,4BAA4B,EAAE;;QAG3D,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAAC,eAAe,IAAG;YAChE,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,IACzC,cAAc,CAAC,GAAG,KAAK,eAAe,CAAC,GAAG,IAAI,eAAe,CAAC,GAAG,CAClE;AACH,SAAC,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,eAAe,CAAC;AAEvD,QAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;;;QAIf,MAAM,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,IAAG;AACtD,YAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC;AACxD,gBAAA,UAAU,EAAE,OAAO,CAAC,GAAG,IAAI;AAC5B,aAAA,CAAC,CAAC,IAAI,CACL,UAAU,CAAC,KAAK,IAAG;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;AACjD,gBAAA,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;aAC7D,CAAC,CACH;AACH,SAAC,CAAC;AAEF,QAAA,OAAO,QAAQ,CAAC,iBAAiB,CAAC;;uGAznBzB,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,QAAA,EAAA,IAAA,EAAA,2BAA2B,0FCxExC,8haA6PQ,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjMJ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,2pCACnB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,sBAAsB,mYACtB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,mBAAmB,2ZACnB,2BAA2B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIlB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAhBvC,SAAS;+BACE,gCAAgC,EAAA,UAAA,EAC9B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,kBAAkB;wBAClB,qBAAqB;wBACrB,sBAAsB;wBACtB,mBAAmB;wBACnB,iBAAiB;wBACjB,mBAAmB;wBACnB;AACD,qBAAA,EAAA,QAAA,EAAA,8haAAA,EAAA;;;;;;;;MEsBU,yBAAyB,CAAA;;AAEnB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACxD,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAGzD,IAAA,mCAAmC,GAAG,SAAS,CAAC,QAAQ,CAA+B,qCAAqC,CAAC;AAC7H,IAAA,yBAAyB,GAAG,SAAS,CAAC,QAAQ,CAA+B,2BAA2B,CAAC;AACzG,IAAA,sBAAsB,GAAG,SAAS,CAAC,QAAQ,CAA+B,wBAAwB,CAAC;AACnG,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAA+B,iCAAiC,CAAC;;AAGrH,IAAA,aAAa,GAAG,MAAM,CAAiB,EAAE,yDAAC;AAC1C,IAAA,OAAO,GAAG,MAAM,CAAU,KAAK,mDAAC;AAChC,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;;AAGnC,IAAA,WAAW,GAAG,MAAM,CAAS,CAAC,uDAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAS,EAAE,oDAAC;AAC7B,IAAA,UAAU,GAAG,MAAM,CAAS,CAAC,sDAAC;AAC9B,IAAA,UAAU,GAAG,MAAM,CAAS,CAAC,sDAAC;;AAG9B,IAAA,WAAW,GAAG,MAAM,CAAS,EAAE,uDAAC;;AAGhC,IAAA,UAAU,GAAG,MAAM,CAAS,YAAY,sDAAC;AACzC,IAAA,aAAa,GAAG,MAAM,CAAiB,KAAK,yDAAC;;AAG7C,IAAA,oBAAoB,GAAG,MAAM,CAAS,EAAE,gEAAC;;AAGzC,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM;AAC5C,QAAA,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;AAClC,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE;AAC1C,QAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE;AAC9C,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE;AAC3C,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc;AACzC,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAKO,IAAA,UAAU,GAAG,QAAQ,CAAkC,OAAO;AACrE,QAAA,EAAE,EAAE,yBAAyB;AAC7B,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,MAAM,EAAE,oBAAoB;AAC5B,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,uBAAuB;AAC/B,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,6BAA6B;AACvC,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,MAAM,EAAE,YAAY;AACpB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,mBAAmB;AAC7B,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,gBAAgB;AACrB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE;AAC1B,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,yCAAyC;AACtD,YAAA,iBAAiB,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,mBAAmB,CAAC;AACpE,YAAA,UAAU,EAAE,GAAG;AACf,YAAA,eAAe,EAAE;AAClB,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE,IAAI,CAAC,OAAO;AAC1B,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC;AAChC,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,cAAc,EAAE;AACjB,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACb,KAAA,CAAC,sDAAC;IAEH,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC;QAC1D,IAAI,CAAC,iBAAiB,EAAE;;IAG1B,WAAW,GAAA;;;AAIX;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;AAC/B,YAAA,IAAI,EAAE;AACJ,gBAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE;AACtB,gBAAA,KAAK,EAAE,IAAI,CAAC,aAAa;AAC1B;SACF;AAED,QAAA,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,OAAO;AACjD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC,IAAI,CAAC;AACvD,oBAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE;wBACjC,KAAK,EAAE,QAAQ,CAAC,KAAK;wBACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,QAAQ,EAAE,QAAQ,CAAC;AACpB,qBAAA,CAAC;oBAEF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;;oBAGvE,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,wBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,OAAA,EAAU,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAA,+BAAA,CAAiC,CAAC;;;qBAE9F;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;AACjD,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,0BAA0B,CAAC;;AAE9D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACvD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC;AAClE,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,kDAAkD,CAAC;AAClF,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;;AAQN,IAAA,iBAAiB,GAAG,QAAQ,CAAC,OAAqD;AAChF,QAAA,2BAA2B,EAAE,IAAI,CAAC,mCAAmC,EAAE;AACvE,QAAA,iBAAiB,EAAE,IAAI,CAAC,yBAAyB,EAAE;AACnD,QAAA,cAAc,EAAE,IAAI,CAAC,sBAAsB,EAAE;AAC7C,QAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B;AAC9D,KAAA,CAAC,6DAAC;AAEH;;AAEG;AACH,IAAA,WAAW,CAAC,KAAqB,EAAA;AAC/B,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,YAAY;gBACf,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE;AACzG,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAW,CAAC;AACvD,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAW,CAAC;oBACnD,IAAI,CAAC,iBAAiB,EAAE;;gBAE1B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;AAC1C,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,iBAAiB,EAAE;gBACxB;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,iBAAiB,EAAE;gBACxB;AACF,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;gBACnC;AACF,YAAA,KAAK,UAAU;;AAEb,gBAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC;gBACtC;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE;AACvG,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAW,CAAC;AACnD,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAmB,CAAC;oBACjE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,CAAC,iBAAiB,EAAE;;gBAE1B;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AAChD,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;;gBAE/B;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,IAAI,CAAC;;;;IAKzD,oBAAoB,GAAA;QAClB,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACrE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,iBAAiB,EAAE;;IAG1B,YAAY,GAAA;AACV,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAClC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,iBAAiB,EAAE;;;IAI1B,kBAAkB,GAAA;AAChB,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;AACnD,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,6CAA6C,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,qCAAqC,CAAC,CAAC;;AAG/D,IAAA,gBAAgB,CAAC,YAA0B,EAAA;AACzC,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,YAAY,CAAC;QACvD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA,uBAAA,EAA0B,YAAY,CAAC,UAAU,CAAA,cAAA,CAAgB,CAAC;AAChG,QAAA,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,mCAAmC,EAAE,WAAW,CAAC,CAAC;;AAG1E,IAAA,gBAAgB,CAAC,YAA0B,EAAA;AACzC,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,YAAY,CAAC;;AAGtD,QAAA,IAAI,YAAY,CAAC,cAAc,EAAE;YAC/B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA,aAAA,EAAgB,YAAY,CAAC,UAAU,CAAA,4GAAA,CAA8G,CAAC;YACrL;;QAGF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA,uBAAA,EAA0B,YAAY,CAAC,UAAU,CAAA,cAAA,CAAgB,CAAC;AAChG,QAAA,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,mCAAmC,EAAE,WAAW,CAAC,CAAC;;AAI1E;;AAEG;IACH,iBAAiB,GAAA;QACf,OAAO;AACL,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,WAAW,EAAE,IAAI;;;;;;;SAOlB;;AAGH;;AAEG;AACH,IAAA,sBAAsB,CAAC,YAA0B,EAAA;QAC/C,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,YAAY,CAAC,UAAU,CAAC;AACzE,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE;YACpC,SAAS,EAAE,YAAY,CAAC,eAAe;YACvC,QAAQ,EAAE,YAAY,CAAC,cAAc;YACrC,QAAQ,EAAE,YAAY,CAAC;AACxB,SAAA,CAAC;AAEF,QAAA,MAAM,KAAK,GAAmB;AAC5B,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,YAAY,EAAE,cAAc,GAAG,kBAAkB,GAAG,kBAAkB;gBACjF,SAAS,EAAE,YAAY,EAAE,cAAc,GAAG,kBAAkB,GAAG,kBAAkB;gBACjF,YAAY,EAAE,YAAY,EAAE,cAAc,GAAG,qBAAqB,GAAG;AACtE,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,eAAe;gBACnB,KAAK,EAAE,YAAY,CAAC,cAAc,GAAG,YAAY,GAAG,UAAU;gBAC9D,IAAI,EAAE,YAAY,CAAC,cAAc,GAAG,YAAY,GAAG,WAAW;gBAC9D,SAAS,EAAE,YAAY,EAAE,cAAc,GAAG,kBAAkB,GAAG,kBAAkB;gBACjF,SAAS,EAAE,YAAY,EAAE,cAAc,GAAG,kBAAkB,GAAG,kBAAkB;gBACjF,YAAY,EAAE,YAAY,EAAE,cAAc,GAAG,qBAAqB,GAAG;AACtE;SACF;AACD,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,mBAAmB,CAAC,IAAkB,EAAE,YAA0B,EAAA;AAChE,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,EAAE,EAAE,oBAAoB,EAAE,YAAY,CAAC,UAAU,CAAC;;AAGjG,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC;YAClD;;AAGF,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;gBACnC;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;gBACnC;AACF,YAAA,KAAK,eAAe;AAClB,gBAAA,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC;gBAC3C;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,IAAI,CAAC,EAAE,CAAC;;;AAI9D;;AAEG;AACH,IAAA,wBAAwB,CAAC,YAA0B,EAAA;AACjD,QAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,YAAY,CAAC;;AAG9D,QAAA,IAAI,YAAY,CAAC,cAAc,EAAE;YAC/B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA,OAAA,EAAU,YAAY,CAAC,cAAc,GAAG,YAAY,GAAG,UAAU,CAAA,EAAA,EAAK,YAAY,CAAC,UAAU,CAAA,sHAAA,CAAwH,CAAC;YACrP;;AAGF,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,GAAG,YAAY,GAAG,UAAU;AACtE,QAAA,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,GAAG,YAAY,GAAG,UAAU;;AAG1E,QAAA,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC;AAC/D,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;YAC3B,KAAK,EAAE,CAAA,EAAG,UAAU,CAAA,cAAA,CAAgB;YACpC,OAAO,EAAE,4BAA4B,MAAM,CAAA,oBAAA,EAAuB,YAAY,CAAC,UAAU,KAAK,CAAC,YAAY,CAAC,cAAc,GAAG,wDAAwD,GAAG,EAAE,CAAA,CAAE;AAC5L,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,UAAU,EAAE,QAAQ;YACpB,IAAI,EAAE,YAAY,CAAC,cAAc,GAAG,SAAS,GAAG;AACjD,SAAA,CAAC,CAAC,IAAI,CAAC,CAAC,SAAkB,KAAI;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,SAAS,CAAC;YACxD,IAAI,SAAS,EAAE;AACf,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;gBAGpB,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,YAAY,CAAC,GAAG,CAAC;AAC/E,gBAAA,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC;AAC1F,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,QAAQ,CAAC;AACjE,wBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;AACrB,4BAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC;;AAGxD,4BAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;gCAChC,IAAI,CAAC,gCAAgC,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,CAAC;;iCAC/D;;gCAEL,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,eAAA,EAAkB,YAAY,CAAC,UAAU,CAAA,kCAAA,CAAoC,CAAC;gCAC/G,IAAI,CAAC,iBAAiB,EAAE;;;6BAEvB;AACL,4BAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC;4BACtD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,IAAI,uCAAuC,CAAC;AAC9F,4BAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;qBAE1B;AACD,oBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,wBAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC;AAC9D,wBAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE;4BAChC,MAAM,EAAE,KAAK,CAAC,MAAM;4BACpB,OAAO,EAAE,KAAK,CAAC,OAAO;4BACtB,KAAK,EAAE,KAAK,CAAC;AACd,yBAAA,CAAC;AACF,wBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,0DAA0D,CAAC;AAC1F,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,iBAAA,CAAC;;AAEJ,SAAC,CAAC;;AAGJ;;AAEG;IACK,gCAAgC,CAAC,cAAsB,EAAE,QAAiB,EAAA;AAChF,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,8CAAA,EAAiD,cAAc,OAAO,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAA,CAAE,CAAC;;;;AAKrH,QAAA,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC;AACnF,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,IAAK,QAAQ,CAAC,IAAY,CAAC,4BAA4B,EAAE;AAC7F,oBAAA,MAAM,QAAQ,GAAI,QAAQ,CAAC,IAAY,CAAC,4BAA4B;AACpE,oBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,QAAQ,CAAC;;oBAGrD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAY,KAAI;AACtD,wBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,+BAA+B,CAAC;4BAC9D,UAAU,EAAE,OAAO,CAAC;AACrB,yBAAA,CAAC,CAAC,IAAI,CACL,UAAU,CAAC,KAAK,IAAG;AACjB,4BAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACxD,4BAAA,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;yBAC7D,CAAC,CACH;AACH,qBAAC,CAAC;AAEF,oBAAA,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;wBAChC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,SAAS,CACnC,CAAC,OAAO,KAAI;AACV,4BAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,OAAO,CAAC;4BACvD,MAAM,YAAY,GAAG,OAAgB;AACrC,4BAAA,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,MAAW,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;AAC/E,4BAAA,IAAI,WAAW,KAAK,CAAC,EAAE;gCACrB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,sBAAA,EAAyB,YAAY,CAAC,MAAM,CAAA,wDAAA,CAA0D,CAAC;;iCACnI;AACL,gCAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,+BAAA,EAAkC,WAAW,CAAA,QAAA,EAAW,YAAY,CAAC,MAAM,CAAA,2BAAA,CAA6B,CAAC;;AAE5I,4BAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC3B,yBAAC,EACD,CAAC,KAAK,KAAI;AACR,4BAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;AAC1D,4BAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,gEAAgE,CAAC;AAChG,4BAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC3B,yBAAC,CACF;;yBACI;AACL,wBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,kDAAkD,CAAC;AACrF,wBAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC;;;qBAEtB;AACL,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,kDAAkD,CAAC;AACpF,oBAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC;;aAE5B;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC;AAC/D,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,2DAA2D,CAAC;AAC3F,gBAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC;;AAE5B,SAAA,CAAC;;;AAII,IAAA,YAAY,CAAC,MAAc,EAAA;AACjC,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAA,CAAE,CAAC;AAEvD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK;YAC7C,oBAAoB,EAAE,IAAI,CAAC,UAAU;YACrC,oBAAoB,EAAE,IAAI,CAAC,UAAU;YACrC,aAAa,EAAE,IAAI,CAAC,iBAAiB;YACrC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,IAAI,EAAE,CAAC;YACzD,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,IAAI,EAAE,CAAC;AACrD,YAAA,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,IAAI,EAAE,CAAC;AACpF,YAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAClC,YAAY,EAAE,IAAI,CAAC,eAAe,GAAG,KAAK,GAAG,IAAI;YACjD,WAAW,EAAE,IAAI,CAAC,cAAc,GAAG,KAAK,GAAG,IAAI;YAC/C,WAAW,EAAE,IAAI,CAAC,cAAc,GAAG,KAAK,GAAG;AAC5C,SAAA,CAAC,CAAC;;AAGH,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxD,QAAA,MAAM,QAAQ,GAAG,CAAA,eAAA,EAAkB,SAAS,EAAE;AAE9C,QAAA,QAAQ,MAAM,CAAC,WAAW,EAAE;AAC1B,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAChC;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAClC;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAChC;AACF,YAAA;AACE,gBAAA,OAAO,CAAC,IAAI,CAAC,8BAA8B,MAAM,CAAA,CAAE,CAAC;;;IAIlD,WAAW,CAAC,IAAW,EAAE,QAAgB,EAAA;AAC/C,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACjB,YAAA,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAA,CAAA,EAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7E,SAAA,CAAC,IAAI,CAAC,IAAI,CAAC;QAEZ,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAA,EAAG,QAAQ,CAAA,IAAA,CAAM,EAAE,UAAU,CAAC;;IAGtD,aAAa,CAAC,IAAW,EAAE,QAAgB,EAAA;;;AAGjD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;;IAG1B,WAAW,CAAC,IAAW,EAAE,QAAgB,EAAA;;;AAG/C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;;AAG1B,IAAA,YAAY,CAAC,OAAe,EAAE,QAAgB,EAAE,QAAgB,EAAA;AACtE,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,QAAA,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;;;AAIjC,IAAA,UAAU,CAAC,IAAsC,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,GAAG;QACrB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;AAChD,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,GAAG,EAAE;AACN,SAAA,CAAC;;IAGJ,WAAW,CAAC,QAA0C,EAAE,MAAwC,EAAA;AAC9F,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AAEnC,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AACxD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;AAErC,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,OAAO,CAAA,EAAG,KAAK,CAAA,KAAA,EAAQ,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE;;AACxC,aAAA,IAAI,MAAM,GAAG,CAAC,EAAE;AACrB,YAAA,OAAO,CAAA,EAAG,MAAM,CAAA,MAAA,EAAS,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE;;aAC3C;AACL,YAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,IAAA,EAAO,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE;;;AAItD,IAAA,mBAAmB,CAAC,YAA0B,EAAA;QAC5C,IAAI,YAAY,CAAC,eAAe;AAAE,YAAA,OAAO,mCAAmC;QAC5E,IAAI,YAAY,CAAC,cAAc;AAAE,YAAA,OAAO,+BAA+B;QACvE,IAAI,YAAY,CAAC,cAAc;AAAE,YAAA,OAAO,iCAAiC;AACzE,QAAA,OAAO,iCAAiC;;AAG1C,IAAA,yBAAyB,CAAC,YAA0B,EAAA;AAClD,QAAA,IAAI,YAAY,CAAC,cAAc,EAAE;AAC/B,YAAA,OAAO,mCAAmC;;aACrC;AACL,YAAA,OAAO,qCAAqC;;;AAIhD,IAAA,aAAa,CAAC,YAA0B,EAAA;QACtC,IAAI,YAAY,CAAC,eAAe;AAAE,YAAA,OAAO,SAAS;QAClD,IAAI,YAAY,CAAC,cAAc;AAAE,YAAA,OAAO,QAAQ;QAChD,IAAI,YAAY,CAAC,cAAc;AAAE,YAAA,OAAO,QAAQ;AAChD,QAAA,OAAO,UAAU;;uGAhoBR,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,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,qCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,2BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3FtC,4nIA+Fc,EAAA,MAAA,EAAA,CAAA,uHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtBV,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,wBAAwB,mRACxB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAaf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAtBrC,SAAS;+BACE,8BAA8B,EAAA,UAAA,EAC5B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,iBAAiB;wBACjB,sBAAsB;wBACtB,wBAAwB;wBACxB;AACD,qBAAA,EAAA,QAAA,EAAA,4nIAAA,EAAA,MAAA,EAAA,CAAA,uHAAA,CAAA,EAAA;;;;;;;;AE/EH;;MCyBa,gCAAgC,CAAA;AACnC,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC;;;;AAIG;AACH,IAAA,yBAAyB,CAAC,OAAqC,EAAA;AAC7D,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,OAAO,CAAC;AAC1D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,kBAAkB;YACrC;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,yBAAyB,CAAC,OAAwC,EAAA;AAChE,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,kBAAkB;YACrC,MAAM;YACN;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,sBAAsB,CAAC,IAA0C,EAAA;AAC/D,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC;AACpB,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;AAGlC;;;;AAIG;AACH,IAAA,wBAAwB,CAAC,OAAuC,EAAA;AAC9D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,kBAAkB;YACrC;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAG9B;;;;AAIG;AACH,IAAA,8BAA8B,CAAC,OAA6C,EAAA;AAC1E,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,kBAAkB;YACrC,cAAc;YACd;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;;AAG/B;;;;AAIG;AACH,IAAA,4BAA4B,CAAC,OAA2C,EAAA;AACtE,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,kBAAkB;YACrC,YAAY;YACZ;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;;uGAxGpB,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,cAF/B,MAAM,EAAA,CAAA;;2FAEP,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAH5C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCDY,0BAA0B,CAAA;AAC7B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,OAA4B,EAAA;AAC9C,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC;AACnD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,kBAAkB;YACrC;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,OAA0C,EAAA;AAC5D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,kBAAkB;YACrC,MAAM;YACN;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,IAA4C,EAAA;AAC3D,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC;AACpB,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;AAGlC;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,OAAyC,EAAA;AAC1D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,kBAAkB;YACrC;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAG9B;;;;AAIG;AACH,IAAA,wBAAwB,CAAC,OAA+C,EAAA;AACtE,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,kBAAkB,CAAC,MAAM;AACzB,YAAA,kBAAkB,CAAC,kBAAkB;YACrC,cAAc;YACd;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;;uGAtFpB,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA;;2FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCwDY,sCAAsC,CAAA;;AAEzC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,yBAAyB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACpE,IAAA,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,CAAC;;AAGhE,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,QAAQ,GAAG,MAAM,CAAuB,EAAE,oDAAC;AAC3C,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;AACtB,IAAA,SAAS,GAAG,MAAM,CAAgB,IAAI,qDAAC;AACvC,IAAA,cAAc,GAAG,MAAM,CAAiB,EAAE,0DAAC;AAC3C,IAAA,sBAAsB,GAAG,MAAM,CAAgB,IAAI,kEAAC;;AAGpD,IAAA,cAAc,GAAG,MAAM,CAA+D,EAAE,0DAAC;;AAGzF,IAAA,0BAA0B,GAAG,SAAS,CAA+B,4BAA4B,sEAAC;AAClG,IAAA,4BAA4B,GAAG,SAAS,CAA+B,8BAA8B,wEAAC;AACtG,IAAA,+BAA+B,GAAG,SAAS,CAA+B,iCAAiC,2EAAC;;IAG5G,UAAU,GAAG,MAAM,CAAwC;AACzD,QAAA,EAAE,EAAE,gCAAgC;AACpC,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,MAAM;AACX,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,gCAAgC;AACrC,gBAAA,MAAM,EAAE,eAAe;AACvB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,YAAY,EAAE;AACZ,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,WAAW,EAAE,QAAQ;AACrB,oBAAA,aAAa,EAAE,UAAU;AACzB,oBAAA,WAAW,EAAE,mCAAmC;AAChD,oBAAA,aAAa,EAAE;AAChB;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,YAAY,EAAE;AACZ,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,WAAW,EAAE,QAAQ;AACrB,oBAAA,aAAa,EAAE,UAAU;AACzB,oBAAA,WAAW,EAAE,qCAAqC;AAClD,oBAAA,aAAa,EAAE;AAChB;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,oBAAoB;AACjC,YAAA,iBAAiB,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;AACjD,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,0BAA0B;AACtC,QAAA,QAAQ,EAAE;AACR,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,YAAY,EAAE;AACf,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAmD;QAC9E,MAAM,SAAS,GAAiD,EAAE;AAElE,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE;YACrC,SAAS,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,0BAA0B,EAAG;;AAGtE,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;YACvC,SAAS,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC,4BAA4B,EAAG;;AAG1E,QAAA,IAAI,IAAI,CAAC,+BAA+B,EAAE,EAAE;YAC1C,SAAS,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,+BAA+B,EAAG;;AAGhF,QAAA,OAAO,SAAS;AAClB,KAAC,6DAAC;IAEF,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC;QACjE,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,gBAAgB,EAAE;;;AAIzB;;AAEG;IACK,wBAAwB,GAAA;;;;;AAK9B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,GAAG,EAAE;AACN;AACF,SAAA,CAAC;;AAGJ;;AAEG;IACK,kBAAkB,GAAA;AACxB,QAAA,MAAM,OAAO,GAAiC;AAC5C,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,eAAe,EAAE;SAClB;AAED,QAAA,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,OAA8B;AACxE,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAA8C,KAAI;AACvD,gBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC;gBAClD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAsB,CAAC;;qBACnD;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;AACjD,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;;aAE9B;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACxD,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;;AAE9B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,oBAAoB,CAAC,cAAiD,EAAA;QACpE,MAAM,SAAS,GAAG,OAAO,cAAc,KAAK,QAAQ,GAAG,cAAc,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;AACxH,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,SAAS,CAAC;QACnD,IAAI,CAAC,SAAS,EAAE;;AAEd,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,4CAA4C,CAAC;YAC9E;;AAEF,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE;;AAGrB;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AAC7E,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC;YAEpE,IAAI,WAAW,EAAE;;AAEf,gBAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC;AACvD,gBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,SAAS,CAAC;;AAGnD,gBAAA,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS;gBAEtC,IAAI,SAAS,EAAE;AACb,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAmB,CAAC;AACvC,oBAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAmB,CAAC;AACpD,oBAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,SAAS,CAAC;AACnE,oBAAA,OAAO,CAAC,GAAG,CAAC,4DAA4D,EAAE,SAAS,CAAC;oBACpF,IAAI,CAAC,YAAY,EAAE;;qBACd;;oBAEL,IAAI,CAAC,gBAAgB,EAAE;;;iBAEpB;;gBAEL,IAAI,CAAC,gBAAgB,EAAE;;AAE3B,SAAC,CAAC;;AAGJ;;AAEG;IACK,gBAAgB,GAAA;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW;AACnD,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC;QAE1C,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC1C,YAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,SAAS,CAAC;AAChE,YAAA,OAAO,CAAC,GAAG,CAAC,4DAA4D,EAAE,SAAS,CAAC;YACpF,IAAI,CAAC,YAAY,EAAE;;aACd;;AAEL,YAAA,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC;AAC1E,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAErC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,cAAc,EAAE;;;AAIzB;;AAEG;IACK,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGpB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE;;QAGzC,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,cAAc,EAAE;YACrB;;AAGF,QAAA,MAAM,OAAO,GAAiC,IAAI,4BAA4B,CAAC;AAC7E,YAAA,8BAA8B,EAAE,gBAAgB;AAChD,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC;AAEvC,QAAA,IAAI,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,OAAO;AAC7D,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC;gBAC3C,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAA4B,CAAC;oBACxD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,cAAc,EAAE;;qBAChB;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC;AACzC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,yBAAyB,CAAC;;AAE3D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;AACjD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC;AACzC,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,yBAAyB,CAAC;;AAE5D,SAAA,CAAC;;AAGN;;AAEG;IACK,cAAc,GAAA;QACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK;AAChC,YAAA,GAAG,MAAM;AACT,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ;AACpB,SAAA,CAAC,CAAC;;AAGL;;AAEG;AACH,IAAA,WAAW,CAAC,KAAoC,EAAA;AAC9C,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;AAEjC,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC7B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBACzB;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC7B;;;AAIN;;AAEG;IACH,SAAS,GAAA;QACP,IAAI,CAAC,YAAY,EAAE;;AAGrB;;AAEG;AACH,IAAA,YAAY,CAAC,KAAU,EAAA;AACrB,QAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC;;;AAIpC;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAU,EAAA;AACjB,QAAA,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC;;;AAI/B;;AAEG;AACH,IAAA,YAAY,CAAC,KAAU,EAAA;AACrB,QAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC;AAElC,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE;;AAE3B,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC;;;AAK5C;;AAEG;AACK,IAAA,mBAAmB,CAAC,QAA8B,EAAA;;AAExD,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,MAAM;AACvD,YAAA,GAAG,MAAM;YACT,eAAe,EAAE,KAAK,GAAG;AAC1B,SAAA,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;QAClC,IAAI,CAAC,cAAc,EAAE;;;AAIrB,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;AAE9G,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,qCAAqC,CAAC;;AAIzE;;AAEG;AACH,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACrD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE;AACzC,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;QAEvD,IAAI,CAAC,gBAAgB,EAAE;;AAErB,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,8DAA8D,CAAC;YAChG;;;QAIF,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAC7E,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,WAAW,CAAC;AACnE,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,8CAA8C,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CACtF,CAAC,OAAO,KAAI;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,OAAO,CAAC;AAClD,SAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC5C,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,0CAA0C,CAAC;AAC5E,SAAC,CACF;;AAGH;;AAEG;AACH,IAAA,YAAY,CAAC,MAA0B,EAAA;AACrC,QAAA,IAAI,MAAM,CAAC,GAAG,EAAE;AACd,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE;AACzC,YAAA,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;;YAGvE,MAAM,gBAAgB,GAAQ,EAAE;YAChC,IAAI,gBAAgB,EAAE;gBACpB,gBAAgB,CAAC,WAAW,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE;;AAGhE,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,4CAA4C,EAAE,WAAW,CAAC,EAAE,gBAAgB,CAAC;;;AAIvG;;AAEG;AACH,IAAA,YAAY,CAAC,MAA0B,EAAA;AACrC,QAAA,IAAI,MAAM,CAAC,GAAG,EAAE;AACd,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE;AACzC,YAAA,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;YAGvE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,4CAA4C,EAAE,WAAW,CAAC,CAAC;;;AAIrF;;AAEG;AACH,IAAA,YAAY,CAAC,MAA0B,EAAA;AACrC,QAAA,IAAI,MAAM,CAAC,GAAG,EAAE;AACd,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE;YACzC,MAAM,WAAW,GAAG,wBAAwB,CAAC;gBAC3C,SAAS,EAAE,MAAM,CAAC,GAAG;AACrB,gBAAA,SAAS,EAAE;AACZ,aAAA,CAAC;;YAGF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,wCAAwC,EAAE,WAAW,CAAC,CAAC;;;AAIjF;;AAEG;AACH,IAAA,4BAA4B,CAAC,MAAiC,EAAA;QAC5D,OAAO;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE;AACP,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE;AACP,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,aAAa;AACjB,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,IAAI,EAAE;AACP,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,eAAe;gBACnB,KAAK,EAAE,MAAM,CAAC,eAAe,GAAG,YAAY,GAAG,UAAU;gBACzD,IAAI,EAAE,MAAM,CAAC,eAAe,GAAG,OAAO,GAAG;AAC1C,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,aAAa;gBACjB,KAAK,EAAE,MAAM,CAAC,eAAe,GAAG,QAAQ,GAAG,MAAM;gBACjD,IAAI,EAAE,MAAM,CAAC,eAAe,GAAG,WAAW,GAAG;AAC9C,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,QAAQ;AACf;SACF;;AAGH;;AAEG;IACH,mBAAmB,CAAC,IAAkB,EAAE,MAA0B,EAAA;AAChE,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACzB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACzB;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACzB;AACF,YAAA,KAAK,eAAe;AAClB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAC/B;AACF,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAC7B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACzB;;;AAIN;;AAEG;AACK,IAAA,kBAAkB,CAAC,MAA0B,EAAA;QACnD,IAAI,CAAC,MAAM,CAAC,GAAG;YAAE;AAEjB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,GAAG,YAAY,GAAG,UAAU;AAEjE,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAC3B,YAAA,KAAK,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,OAAA,CAAS;YACnE,OAAO,EAAE,CAAA,yBAAA,EAA4B,MAAM,CAAA,aAAA,CAAe;AAC1D,YAAA,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,IAAI,EAAE;AACP,SAAA,CAAC,CAAC,IAAI,CAAC,CAAC,SAAkB,KAAI;YAC7B,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,OAAO,GAAyC;oBACpD,SAAS,EAAE,MAAM,CAAC;iBACnB;AAED,gBAAA,IAAI,CAAC,yBAAyB,CAAC,8BAA8B,CAAC,OAAO;AAClE,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,qBAAA,SAAS,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;4BACrB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,cAAA,CAAgB,CAAC;4BAClE,IAAI,CAAC,YAAY,EAAE;;6BACd;4BACL,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,MAAM,CAAA,OAAA,CAAS,CAAC;;qBAE/D;AACD,oBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,wBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;wBACvD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,MAAM,CAAA,OAAA,CAAS,CAAC;;AAE/D,iBAAA,CAAC;;AAER,SAAC,CAAC;;AAGJ;;AAEG;AACK,IAAA,gBAAgB,CAAC,MAA0B,EAAA;QACjD,IAAI,CAAC,MAAM,CAAC,GAAG;YAAE;AAEjB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,GAAG,QAAQ,GAAG,MAAM;AAEzD,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAC3B,YAAA,KAAK,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,OAAA,CAAS;YACnE,OAAO,EAAE,CAAA,yBAAA,EAA4B,MAAM,CAAA,aAAA,CAAe;AAC1D,YAAA,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,IAAI,EAAE;AACP,SAAA,CAAC,CAAC,IAAI,CAAC,CAAC,SAAkB,KAAI;YAC7B,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,OAAO,GAAuC;oBAClD,SAAS,EAAE,MAAM,CAAC;iBACnB;AAED,gBAAA,IAAI,CAAC,yBAAyB,CAAC,4BAA4B,CAAC,OAAO;AAChE,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,qBAAA,SAAS,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;4BACrB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,eAAA,CAAiB,CAAC;4BACnE,IAAI,CAAC,YAAY,EAAE;;6BACd;4BACL,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,MAAM,CAAA,OAAA,CAAS,CAAC;;qBAE/D;AACD,oBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,wBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;wBACrD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,MAAM,CAAA,OAAA,CAAS,CAAC;;AAE/D,iBAAA,CAAC;;AAER,SAAC,CAAC;;AAGJ;;AAEG;AACK,IAAA,YAAY,CAAC,MAA0B,EAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,GAAG;YAAE;AAEjB,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAC3B,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,OAAO,EAAE,CAAA,iCAAA,EAAoC,MAAM,CAAC,WAAW,CAAA,gCAAA,CAAkC;AACjG,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,IAAI,EAAE;AACP,SAAA,CAAC,CAAC,IAAI,CAAC,CAAC,SAAkB,KAAI;YAC7B,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,OAAO,GAAmC;oBAC9C,SAAS,EAAE,MAAM,CAAC;iBACnB;AAED,gBAAA,IAAI,CAAC,yBAAyB,CAAC,wBAAwB,CAAC,OAAO;AAC5D,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,qBAAA,SAAS,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;AACrB,4BAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,6BAA6B,CAAC;4BAC/D,IAAI,CAAC,YAAY,EAAE;;6BACd;AACL,4BAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,yBAAyB,CAAC;;qBAE5D;AACD,oBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,wBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAChD,wBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,yBAAyB,CAAC;;AAE5D,iBAAA,CAAC;;AAER,SAAC,CAAC;;uGAprBO,sCAAsC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sCAAsC,kiBC9EnD,g6EAiEA,EAAA,MAAA,EAAA,CAAA,0OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpBI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,wBAAwB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,iBAAiB,+FACjB,sBAAsB,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,mBAAmB,2ZACnB,6BAA6B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,4BAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA0BpB,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBArClD,SAAS;+BACE,0CAA0C,EAAA,UAAA,EACxC,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,wBAAwB;wBACxB,iBAAiB;wBACjB,sBAAsB;wBACtB,wBAAwB;wBACxB,mBAAmB;wBACnB;AACD,qBAAA,EAAA,QAAA,EAAA,g6EAAA,EAAA,MAAA,EAAA,CAAA,0OAAA,CAAA,EAAA;;;;;;;;MEIU,sCAAsC,CAAA;;AAEzC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,yBAAyB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACpE,IAAA,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACxD,IAAA,oBAAoB,GAAG,MAAM,CAAC,4BAA4B,CAAC;;AAGnE,IAAA,UAAU;AACV,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,QAAQ,GAAG,MAAM,CAAgB,IAAI,oDAAC;;AAGtC,IAAA,cAAc,GAAG,MAAM,CAAiB,EAAE,0DAAC;AAC3C,IAAA,aAAa,GAAG,MAAM,CAAiB,EAAE,yDAAC;;AAG1C,IAAA,cAAc,GAAG,MAAM,CAA+D,EAAE,0DAAC;;AAGzF,IAAA,wBAAwB,GAAG,MAAM,CAAU,IAAI,oEAAC;;IAGxC,aAAa,GAAG,KAAK;AAE7B,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAC9B,YAAA,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,YAAA,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,YAAA,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,8BAA8B,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC3D,sBAAsB,EAAE,CAAC,EAAE,CAAC;YAC5B,eAAe,EAAE,CAAC,IAAI,CAAC;YACvB,eAAe,EAAE,CAAC,KAAK;AACxB,SAAA,CAAC;;IAGJ,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC;QACjE,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,kBAAkB,EAAE;;AAG3B;;AAEG;IACK,kBAAkB,GAAA;;QAExB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE;AAC5C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,OAAe,KAAI;;AAE7B,YAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAClC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;;AAEtC,SAAC,CAAC;;QAGJ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,gCAAgC,CAAC,EAAE;AACpD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,cAAsB,KAAI;;AAEpC,YAAA,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE;AAC5E,gBAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;;AAE7C,SAAC,CAAC;;AAGN;;;AAGG;AACK,IAAA,oBAAoB,CAAC,cAAsB,EAAA;QACjD,IAAI,CAAC,cAAc,EAAE;YACnB;;AAGF,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,cAAc,CAAC;;;;IAK1D,WAAW,GAAA;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC;;AAGjE;;AAEG;IACK,mBAAmB,GAAA;QACzB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,gBAAgB,EAAE;;AAGzB;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;;QAG9C,IAAI,SAAS,GAAkB,IAAI;;AAGnC,QAAA,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE;YACxB,MAAM,MAAM,GAAG,wBAAwB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7D,YAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,MAAM,CAAC;YACzD,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,MAAM,EAAE,SAAS,IAAI,IAAI;;;QAI5D,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,IAAI,IAAI;;QAG1E,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,SAAS,CAAC;;AAElE,YAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AACzB,gBAAA,8BAA8B,EAAE;AACjC,aAAA,CAAC;;;aAEG;;AAEL,YAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGzC,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;;AAC9B,aAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;;aAC9B;;AAEL,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;;YAE1B,IAAI,CAAC,oBAAoB,EAAE;;;AAK/B;;AAEG;IACK,cAAc,GAAA;AACpB,QAAA,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC;;QAGtE,IAAI,CAAC,kBAAkB,EAAE;;QAGzB,IAAI,CAAC,iBAAiB,EAAE;;AAG1B;;AAEG;IACK,kBAAkB,GAAA;QACxB,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE;AAC/D,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC;gBAClD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAsB,CAAC;;qBACnD;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;AACjD,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;;aAE9B;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACxD,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;;AAE9B,SAAA,CAAC;;AAGN;;;AAGG;IACK,iBAAiB,GAAA;AACvB,QAAA,MAAM,OAAO,GAA8B;YACzC,UAAU,EAAE,QAAQ;SACrB;AAED,QAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,OAAO;AAC5C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,QAAQ,CAAC;gBACjD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACtC,oBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAkB,MAAM;AACzD,wBAAA,GAAG,MAAM;wBACT,KAAK,EAAE,MAAM,CAAC,GAAG;wBACjB,KAAK,EAAE,MAAM,CAAC;AACf,qBAAA,CAAC,CAAmB;AACrB,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;;qBAC1B;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;AACjD,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;;aAE7B;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACvD,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;;AAE7B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,oBAAoB,CAAC,OAAe,EAAA;QAClC,IAAI,CAAC,OAAO,EAAE;YACZ;;AAGF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC;QACxE,IAAI,cAAc,EAAE;;AAElB,YAAA,IAAI,cAAc,CAAC,WAAW,EAAE;AAC9B,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;oBACzB,WAAW,EAAE,cAAc,CAAC;AAC7B,iBAAA,CAAC;;;YAIJ,IAAI,cAAc,CAAC,mBAAmB,IAAI,OAAO,cAAc,CAAC,mBAAmB,KAAK,QAAQ,EAAE;AAChG,gBAAA,MAAM,MAAM,GAAG,cAAc,CAAC,mBAA0B;AACxD,gBAAA,IAAI,MAAM,CAAC,IAAI,EAAE;AACf,oBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;wBACzB,WAAW,EAAE,MAAM,CAAC;AACrB,qBAAA,CAAC;;AACG,qBAAA,IAAI,cAAc,CAAC,UAAU,EAAE;AACpC,oBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;wBACzB,WAAW,EAAE,cAAc,CAAC;AAC7B,qBAAA,CAAC;;;AAEC,iBAAA,IAAI,cAAc,CAAC,UAAU,EAAE;AACpC,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;oBACzB,WAAW,EAAE,cAAc,CAAC;AAC7B,iBAAA,CAAC;;;;AAMR;;AAEG;AACK,IAAA,iBAAiB,CAAC,WAAgB,EAAA;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;;QAG9C,IAAI,MAAM,GAAG,wBAAwB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC3D,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,MAAM,CAAC;AAEzD,QAAA,IAAI,MAAM,EAAE,SAAS,EAAE;YACrB,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,SAAS,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;;aACtC;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC;AACzD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC;;;AAI7D;;AAEG;AACK,IAAA,iBAAiB,CAAC,WAAgB,EAAA;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;;QAG9C,IAAI,MAAM,GAAG,wBAAwB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC3D,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,MAAM,CAAC;AAEzD,QAAA,IAAI,MAAM,EAAE,SAAS,EAAE;YACrB,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,SAAS,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;;aACvC;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC;AACzD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC;;;AAI7D;;AAEG;IACK,cAAc,CAAC,QAAgB,EAAE,UAAmB,EAAA;AAC1D,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAE1B,QAAA,MAAM,OAAO,GAAoC;AAC/C,YAAA,SAAS,EAAE;SACZ;AAED,QAAA,IAAI,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,OAAO;AAC7D,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACtC,oBAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI;;oBAGhC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;oBAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW;oBACnD,IAAI,gBAAgB,GAAkB,IAAI;AAE1C,oBAAA,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE;wBACxB,MAAM,MAAM,GAAG,wBAAwB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;wBAC7D,gBAAgB,GAAG,MAAM,EAAE,SAAS,IAAI,MAAM,EAAE,SAAS,IAAI,IAAI;;oBAGnE,IAAI,CAAC,gBAAgB,EAAE;AACrB,wBAAA,gBAAgB,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,IAAI,IAAI;;oBAGjF,IAAI,gBAAgB,EAAE;AACpB,wBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC;;;;AAK1C,oBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;wBACzB,WAAW,EAAE,UAAU,CAAC,WAAW;wBACnC,WAAW,EAAE,UAAU,CAAC,WAAW;wBACnC,eAAe,EAAE,UAAU,CAAC,eAAe;wBAC3C,8BAA8B,EAAE,UAAU,CAAC,8BAA8B,EAAE,GAAG,IAAI,UAAU,CAAC,8BAA8B;wBAC3H,sBAAsB,EAAE,UAAU,CAAC,sBAAsB,EAAE,GAAG,IAAI,UAAU,CAAC,sBAAsB,IAAI,EAAE;AACzG,wBAAA,eAAe,EAAE,CAAC,UAAU,EAAE,eAAe;wBAC7C,eAAe,EAAE,UAAU,CAAC;AAC7B,qBAAA,CAAC;;AAGF,oBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;oBAG1B,IAAI,UAAU,EAAE;AACd,wBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;;;AAI3B,oBAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,UAAU,CAAC;AAEjD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,kCAAkC,CAAC;;qBAC/D;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC;AAC7C,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,6BAA6B,CAAC;AAC7D,oBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;AAE5B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AACpD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC;AAC/D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,+CAA+C,CAAC;;AAElF,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,IAAI,SAAS,GAAA;QACX,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,6BAA6B;QAC3D,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,6BAA6B;AAC3D,QAAA,OAAO,+BAA+B;;AAGxC;;AAEG;AACH,IAAA,IAAI,gBAAgB,GAAA;QAClB,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,OAAO;QACrC,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,eAAe;AAC7C,QAAA,OAAO,eAAe;;AAGxB;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YACpB;;AAGF,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,+CAA+C,CAAC;YAC/E;;AAGF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;AACtC,QAAA,MAAM,OAAO,GAAyC;AACpD,YAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,SAAS;YACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,8BAA8B,EAAE,QAAQ,CAAC,8BAA8B;AACvE,YAAA,sBAAsB,EAAE,QAAQ,CAAC,sBAAsB,IAAI,SAAS;YACpE,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,eAAe,EAAE,QAAQ,CAAC;SAC3B;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;;AAG1B;;AAEG;AACK,IAAA,UAAU,CAAC,OAA6C,EAAA;AAC9D,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,QAAA,IAAI,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,OAAO;AAC1D,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;AACrB,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,GAAG,SAAS;oBACxD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAA,cAAA,CAAgB,CAAC;AAC3E,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;;qBACf;oBACL,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,IAAI,wBAAwB,CAAC;;AAE/E,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC9C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,0CAA0C,CAAC;AAC1E,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AAC/C,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAC3B,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,OAAO,EAAE,kEAAkE;AAC3E,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,IAAI,EAAE;AACP,aAAA,CAAC,CAAC,IAAI,CAAC,CAAC,SAAkB,KAAI;gBAC7B,IAAI,SAAS,EAAE;AACb,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;;AAExB,aAAC,CAAC;;aACG;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;;;AAIxB;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AACzB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,sBAAsB,EAAE;AACzB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,wCAAwC,CAAC;;AAGzE;;AAEG;IACH,iBAAiB,GAAA;QACf,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AAEvB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK;AAClE,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YACzB,eAAe,EAAE,CAAC;AACnB,SAAA,CAAC;;AAGJ;;AAEG;IACH,iBAAiB,GAAA;QACf,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AAEvB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK;AAClE,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YACzB,eAAe,EAAE,CAAC;AACnB,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,oBAAoB,CAAC,UAAgB,EAAE,UAAA,GAAsB,KAAK,EAAA;QACxE,MAAM,eAAe,GAAiE,EAAE;AAExF,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,UAAU,EAAE;YACnC,IAAI,UAAU,EAAE;gBACd,eAAe,CAAC,IAAI,CAAC;AACnB,oBAAA,EAAE,EAAE,UAAU,CAAC,GAAG,IAAI,QAAQ;AAC9B,oBAAA,KAAK,EAAE,UAAU,CAAC,WAAW,IAAI,QAAQ;AACzC,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,GAAG,EAAE;AACN,iBAAA,CAAC;;YAGJ,IAAI,UAAU,EAAE;gBACd,eAAe,CAAC,IAAI,CAAC;AACnB,oBAAA,EAAE,EAAE,MAAM;AACV,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,GAAG,EAAE;AACN,iBAAA,CAAC;;iBACG;gBACL,eAAe,CAAC,IAAI,CAAC;AACnB,oBAAA,EAAE,EAAE,MAAM;AACV,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,GAAG,EAAE;AACN,iBAAA,CAAC;;;aAEC;;YAEL,eAAe,CAAC,IAAI,CAAC;AACnB,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,GAAG,EAAE;AACN,aAAA,CAAC;;AAGJ,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;;uGA3iB/B,sCAAsC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sCAAsC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzDnD,i8NAuI0B,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxFtB,YAAY,8BACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,sBAAsB,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,mBAAmB,2ZACnB,6BAA6B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,4BAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIpB,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAdlD,SAAS;+BACE,0CAA0C,EAAA,UAAA,EACxC,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,kBAAkB;wBAClB,sBAAsB;wBACtB,iBAAiB;wBACjB,mBAAmB;wBACnB,6BAA6B;AAC9B,qBAAA,EAAA,QAAA,EAAA,i8NAAA,EAAA;;;;;;;;AEtDH;AACA;AAEA;;ACHA;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-cloud-ide-academics-g9qZGJtG.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/cloud-ide-academics.routes.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/services/academic-year.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/services/academic-year-mapping.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-create/academic-year-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-create/academic-year-create.component.html","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-list/academic-year-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-list/academic-year-list.component.html","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/index.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/services/class-program-branch.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/program-class-management/services/program-class.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component.html","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component.html","../../../projects/cloud-ide-academics/src/lib/collection/class-program-branch-management/index.ts","../../../projects/cloud-ide-academics/src/public-api.ts","../../../projects/cloud-ide-academics/src/cloud-ide-academics.ts"],"sourcesContent":["import { Route } from '@angular/router';\r\nimport { authGuard } from 'cloud-ide-auth';\r\nexport const academicsRoutes: Route[] = [\r\n // Academic Year Management Routes\r\n {\r\n path: 'academic_year',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-list/academic-year-list.component').then(c => c.AcademicYearListComponent),\r\n title: 'Academic Year Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n },\r\n {\r\n path: 'academic_year/create',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\r\n title: 'Create Academic Year',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n },\r\n {\r\n path: 'academic_year/edit/:query',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\r\n title: 'Edit Academic Year',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n },\r\n {\r\n path: 'academic_year/view/:query',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\r\n title: 'View Academic Year',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n },\r\n {\r\n path: 'program-class-management',\r\n loadComponent: () => import('./collection/program-class-management/components/program-class-list/program-class-list.component').then(c => c.ProgramClassListComponent),\r\n title: 'Program Class Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: false,\r\n sypg_page_code: \"program_class\"\r\n }\r\n },\r\n {\r\n path: 'program-class-management/create',\r\n loadComponent: () => import('./collection/program-class-management/components/program-class-create/program-class-create.component').then(c => c.ProgramClassCreateComponent),\r\n title: 'Create Program Class',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: false,\r\n sypg_page_code: \"program_class\"\r\n }\r\n },\r\n {\r\n path: 'program-class-management/edit/:query',\r\n loadComponent: () => import('./collection/program-class-management/components/program-class-create/program-class-create.component').then(c => c.ProgramClassCreateComponent),\r\n title: 'Edit Program Class',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: false,\r\n sypg_page_code: \"program_class\"\r\n }\r\n },\r\n {\r\n path: 'program-class-management/view/:query',\r\n loadComponent: () => import('./collection/program-class-management/components/program-class-create/program-class-create.component').then(c => c.ProgramClassCreateComponent),\r\n title: 'View Program Class',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: false,\r\n sypg_page_code: \"program_class\"\r\n }\r\n },\r\n {\r\n path: 'program-term-management/create',\r\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component').then(c => c.ClassProgramTermCreateComponent),\r\n title: 'Create Class Program Term',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_term\"\r\n }\r\n },\r\n {\r\n path: 'program-term-management/edit/:query',\r\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component').then(c => c.ClassProgramTermCreateComponent),\r\n title: 'Edit Class Program Term',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_term\"\r\n }\r\n },\r\n {\r\n path: 'program-term-management/view/:query',\r\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component').then(c => c.ClassProgramTermCreateComponent),\r\n title: 'View Class Program Term',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_term\"\r\n }\r\n },\r\n {\r\n path: 'program-term-management',\r\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component').then(c => c.ClassProgramTermListComponent),\r\n title: 'Class Program Term Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_term\"\r\n }\r\n },\r\n {\r\n path: 'program-term-management/:query',\r\n loadComponent: () => import('./collection/class-program-term-management/components/class-program-term-list/class-program-term-list.component').then(c => c.ClassProgramTermListComponent),\r\n title: 'Class Program Term Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_term\"\r\n }\r\n },\r\n {\r\n path: 'class-program-term',\r\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component').then(c => c.ProgramTermSectionListComponent),\r\n title: 'Program Term Section Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"program_term_section\"\r\n }\r\n },\r\n {\r\n path: 'class-program-term/:query',\r\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-list/program-term-section-list.component').then(c => c.ProgramTermSectionListComponent),\r\n title: 'Program Term Section Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"program_term_section\"\r\n }\r\n },\r\n {\r\n path: 'class-program-term/create',\r\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component').then(c => c.ProgramTermSectionCreateComponent),\r\n title: 'Create Program Term Section',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"program_term_section\"\r\n }\r\n },\r\n {\r\n path: 'class-program-term/edit/:query',\r\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component').then(c => c.ProgramTermSectionCreateComponent),\r\n title: 'Edit Program Term Section',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"program_term_section\"\r\n }\r\n },\r\n {\r\n path: 'class-program-term/view/:query',\r\n loadComponent: () => import('./collection/program-term-section-management/components/program-term-section-create/program-term-section-create.component').then(c => c.ProgramTermSectionCreateComponent),\r\n title: 'View Program Term Section',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"program_term_section\"\r\n }\r\n },\r\n // Class Program Branch Management Routes\r\n {\r\n path: 'program_specialization/:query',\r\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component').then(c => c.CideLytClassProgramBranchListComponent),\r\n title: 'Class Program Branch Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_branch\"\r\n }\r\n },\r\n {\r\n path: 'program_specialization',\r\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-list/class-program-branch-list.component').then(c => c.CideLytClassProgramBranchListComponent),\r\n title: 'Class Program Branch Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_branch\"\r\n }\r\n },\r\n {\r\n path: 'program_specialization/create/:query?',\r\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component').then(c => c.CideLytClassProgramBranchFormComponent),\r\n title: 'Create Class Program Branch',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_branch\"\r\n }\r\n },\r\n {\r\n path: 'program_specialization/edit/:query',\r\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component').then(c => c.CideLytClassProgramBranchFormComponent),\r\n title: 'Edit Class Program Branch',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_branch\"\r\n }\r\n },\r\n {\r\n path: 'program_specialization/view/:query',\r\n loadComponent: () => import('./collection/class-program-branch-management/components/class-program-branch-form/class-program-branch-form.component').then(c => c.CideLytClassProgramBranchFormComponent),\r\n title: 'View Class Program Branch',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"class_program_branch\"\r\n }\r\n }\r\n];\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, forkJoin, of, type OperatorFunction } from 'rxjs';\r\nimport { map, catchError, switchMap } from 'rxjs/operators';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n type academicYearControllerResponse,\r\n type MAcademicYear,\r\n type academicYearByIdControllerResponse,\r\n type MAcademicYearGetByIdPayload,\r\n type academicYearInsertUpdateControllerResponse,\r\n type MAcademicYearInsertUpdatePayload,\r\n type academicYearDeleteControllerResponse,\r\n type MAcademicYearDeletePayload,\r\n type academicYearToggleStatusControllerResponse,\r\n type MAcademicYearToggleStatusPayload,\r\n type MAcademicYearMappingInsertUpdatePayload,\r\n type academicYearMappingInsertUpdateControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n// Types\r\ninterface AcademicYearMapping {\r\n _id?: string;\r\n acayrmp_entity_id_syen: string;\r\n acayrmp_islocked?: boolean;\r\n acayrmp_iscurrent?: boolean;\r\n}\r\n\r\ninterface AcademicYearWithMappings {\r\n acayr_academic_year_mappings?: AcademicYearMapping[];\r\n [key: string]: any;\r\n}\r\n\r\ninterface DeleteMappingPayload {\r\n acayrmp_id: string;\r\n}\r\n\r\ninterface ToggleMappingPayload {\r\n acayrmp_id: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytAcademicYearService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of academic years\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of academic year list response\r\n */\r\n getAcademicYearList(payload: MAcademicYear): Observable<academicYearControllerResponse> {\r\n console.log(\"payload\", payload)\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get academic year by ID\r\n * @param payload - Academic year ID payload\r\n * @returns Observable of academic year data\r\n */\r\n getAcademicYearById(payload: MAcademicYearGetByIdPayload): Observable<academicYearByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Create or update academic year\r\n * @param data - Academic year data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateAcademicYear(data: MAcademicYearInsertUpdatePayload): Observable<academicYearInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Create or update academic year with mappings\r\n * @param data - Academic year data with mappings\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateAcademicYearWithMappings(data: AcademicYearWithMappings): Observable<academicYearInsertUpdateControllerResponse> {\r\n // Extract mappings from the data\r\n const mappings = data.acayr_academic_year_mappings || [];\r\n const academicYearData = { ...data } as MAcademicYearInsertUpdatePayload;\r\n delete (academicYearData as any).acayr_academic_year_mappings;\r\n\r\n // First save/update the academic year\r\n return this.saveUpdateAcademicYear(academicYearData).pipe(\r\n switchMap((academicYearResponse) => {\r\n if (!academicYearResponse.success || !academicYearResponse.data) {\r\n return of(academicYearResponse);\r\n }\r\n\r\n const academicYearId = academicYearResponse.data._id;\r\n \r\n // If no mappings, return the academic year response\r\n if (mappings.length === 0) {\r\n return of(academicYearResponse);\r\n }\r\n\r\n // Process mappings\r\n const mappingObservables = mappings.map((mapping: AcademicYearMapping) => {\r\n const mappingPayload: MAcademicYearMappingInsertUpdatePayload = {\r\n _id: mapping._id && !mapping._id.startsWith('temp_') ? mapping._id : undefined,\r\n acayrmp_academic_year_id_acayr: academicYearId,\r\n acayrmp_entity_id_syen: mapping.acayrmp_entity_id_syen,\r\n acayrmp_islocked: mapping.acayrmp_islocked || false,\r\n acayrmp_iscurrent: mapping.acayrmp_iscurrent || false\r\n };\r\n\r\n const mappingUrl = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping\r\n ]);\r\n\r\n return this.http.post(mappingUrl, mappingPayload).pipe(\r\n catchError((error) => {\r\n console.error('Error saving mapping:', error);\r\n return of({ success: false, error });\r\n })\r\n );\r\n });\r\n\r\n // Execute all mapping operations\r\n return forkJoin(mappingObservables).pipe(\r\n map((mappingResponses: any) => {\r\n // Check if all mappings were successful\r\n const allMappingsSuccessful = mappingResponses.every((response: any) => response.success);\r\n \r\n if (allMappingsSuccessful) {\r\n return {\r\n ...academicYearResponse,\r\n message: 'Academic year and mappings saved successfully'\r\n };\r\n } else {\r\n return {\r\n ...academicYearResponse,\r\n message: 'Academic year saved but some mappings failed',\r\n mappingErrors: mappingResponses.filter((response: any) => !response.success)\r\n } as any;\r\n }\r\n })\r\n );\r\n }),\r\n catchError((error) => {\r\n console.error('Error in saveUpdateAcademicYearWithMappings:', error);\r\n return of({\r\n success: false,\r\n code: 500 as any,\r\n message: 'Error saving academic year with mappings',\r\n error\r\n } as any);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Delete academic year\r\n * @param payload - Academic year ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteAcademicYear(payload: MAcademicYearDeletePayload): Observable<academicYearDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\r\n 'delete',\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle academic year status\r\n * @param payload - Academic year ID payload\r\n * @returns Observable of the toggle response\r\n */\r\n toggleAcademicYearStatus(payload: MAcademicYearToggleStatusPayload): Observable<academicYearToggleStatusControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYear,\r\n 'toggle-status'\r\n ]);\r\n\r\n console.log('🔄 Making PATCH request to toggle academic year status:', { url, payload });\r\n return this.http.patch(url, payload);\r\n }\r\n\r\n /**\r\n * Delete academic year mapping\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteAcademicYearMapping(payload: DeleteMappingPayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping\r\n ]);\r\n\r\n return this.http.delete(url, { body: payload });\r\n }\r\n\r\n /**\r\n * Toggle academic year mapping status\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the toggle response\r\n */\r\n toggleAcademicYearMappingStatus(payload: ToggleMappingPayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'toggle-status'\r\n ]);\r\n\r\n console.log('🔄 Making PATCH request to toggle academic year mapping status:', { url, payload });\r\n return this.http.patch(url, payload);\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n academicYearMappingControllerResponse,\r\n MAcademicYearMapping,\r\n academicYearMappingByIdControllerResponse,\r\n MAcademicYearMappingGetByIdPayload,\r\n academicYearMappingInsertUpdateControllerResponse,\r\n MAcademicYearMappingInsertUpdatePayload,\r\n academicYearMappingDeleteControllerResponse,\r\n MAcademicYearMappingDeletePayload,\r\n academicYearMappingToggleStatusControllerResponse,\r\n MAcademicYearMappingToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytAcademicYearMappingService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of academic year mappings\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of academic year mapping list response\r\n */\r\n getAcademicYearMappingList(payload: MAcademicYearMapping): Observable<academicYearMappingControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get academic year mapping by ID\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of academic year mapping data\r\n */\r\n getAcademicYearMappingById(payload: MAcademicYearMappingGetByIdPayload): Observable<academicYearMappingByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Create or update academic year mapping\r\n * @param data - Academic year mapping data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateAcademicYearMapping(data: MAcademicYearMappingInsertUpdatePayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete academic year mapping\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteAcademicYearMapping(payload: MAcademicYearMappingDeletePayload): Observable<academicYearMappingDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'delete',\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle academic year mapping status\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the toggle response\r\n */\r\n toggleAcademicYearMappingStatus(payload: MAcademicYearMappingToggleStatusPayload): Observable<academicYearMappingToggleStatusControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'toggle-status'\r\n ]);\r\n\r\n return this.http.post(url, payload);\r\n }\r\n}\r\n","import { \n Component, \n inject, \n signal, \n OnInit, \n DestroyRef, \n OnDestroy,\n type OnDestroy as OnDestroyType \n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { \n FormBuilder, \n FormGroup, \n ReactiveFormsModule, \n Validators, \n FormArray,\n type AbstractControl \n} from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, forkJoin, of, type OperatorFunction } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\nimport { \n CideTextareaComponent, \n CideEleButtonComponent, \n CideEleTabComponent, \n type TabItem, \n CideIconComponent \n} from 'cloud-ide-element';\nimport { CideLytAcademicYearService } from '../../services/academic-year.service';\nimport { CideLytAcademicYearMappingService } from '../../services/academic-year-mapping.service';\nimport { ENTITY_SERVICE_TOKEN, type IEntityService } from 'cloud-ide-shared';\nimport {\n type MAcademicYearInsertUpdatePayload,\n type MAcademicYearGetByIdPayload,\n type academicYearByIdControllerResponse,\n generateObjectFromString\n} from 'cloud-ide-lms-model';\nimport { CideSelectComponent, CideFormFieldErrorComponent } from 'cloud-ide-element';\nimport { CideInputComponent } from 'cloud-ide-element';\n\n// Types\ninterface AcademicYearMapping {\n _id?: string;\n acayrmp_entity_id_syen: string;\n acayrmp_islocked?: boolean;\n acayrmp_iscurrent?: boolean;\n}\n\ninterface Entity {\n _id?: string;\n syen_name?: string;\n syen_code?: string;\n}\n\n\n@Component({\n selector: 'cide-core-academic-year-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideEleTabComponent,\n CideIconComponent,\n CideSelectComponent,\n CideFormFieldErrorComponent\n ],\n templateUrl: './academic-year-create.component.html'\n})\nexport class AcademicYearCreateComponent implements OnInit, OnDestroy {\n // Modern Angular 20+ dependency injection\n private readonly destroyRef = inject(DestroyRef);\n private readonly fb = inject(FormBuilder);\n private readonly academicYearService = inject(CideLytAcademicYearService);\n private readonly academicYearMappingService = inject(CideLytAcademicYearMappingService);\n private readonly entityService = inject<IEntityService>(ENTITY_SERVICE_TOKEN);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n\n // Form and state management with proper typing\n academicYearForm!: FormGroup;\n readonly activeTab = signal<string>('basic');\n readonly loading = signal<boolean>(false);\n\n // Academic year information from route\n readonly academicYearId = signal<string>('');\n readonly isEditMode = signal<boolean>(false);\n readonly originalMappings = signal<AcademicYearMapping[]>([]); // Track original mappings for deletion\n\n // Entity options for dropdown\n readonly entityOptions = signal<Entity[]>([]);\n\n constructor() {\n this.academicYearForm = this.fb.group({\n // Basic Academic Year Information\n acayr_code: ['', [Validators.required]],\n acayr_name: ['', [Validators.required]],\n acayr_description: [''],\n acayr_from_date: ['', [Validators.required]],\n acayr_to_date: ['', [Validators.required]],\n acayr_isactive: [true],\n acayr_iscurrent: [false],\n acayr_islocked: [false],\n \n // Academic Year Mapping Information\n acayr_academic_year_mappings: this.fb.array([])\n });\n }\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Get academic year information from route (for edit mode)\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n console.log(queryParams, 'queryParams');\n\n if (queryParams) {\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n if (queryData?.acayr_id) {\n this.academicYearId.set(queryData.acayr_id as string);\n this.isEditMode.set(true);\n this.loadAcademicYearData(queryData.acayr_id as string);\n }\n } else {\n // Create mode\n this.isEditMode.set(false);\n }\n\n // Always load dropdown options\n this.loadDropdownOptions();\n });\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n console.log('🏢 Loading dropdown options');\n // Load entity options\n this.entityService.getEntityList({}).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log(`🏢 entities:`, response.data);\n this.entityOptions.set(response.data || []);\n }\n },\n error: (error) => console.error('Error loading entities:', error)\n });\n }\n\n /**\n * Load academic year data for edit mode\n */\n private loadAcademicYearData(academicYearId: string): void {\n this.loading.set(true);\n\n const payload: MAcademicYearGetByIdPayload = {\n acayr_id: academicYearId\n };\n\n // Load academic year data\n this.academicYearService.getAcademicYearById(payload).subscribe({\n next: (response: academicYearByIdControllerResponse) => {\n if (response?.success && response.data) {\n console.log('📚 Academic year data loaded:', response.data);\n this.populateFormWithAcademicYearData(response.data);\n \n // Load existing mappings for this academic year\n this.loadAcademicYearMappings(academicYearId);\n } else {\n console.error('❌ Failed to load academic year data');\n this.loading.set(false);\n }\n },\n error: (error) => {\n console.error('❌ Error loading academic year data:', error);\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Load academic year mappings for edit mode\n */\n private loadAcademicYearMappings(academicYearId: string): void {\n const mappingPayload: any = {\n acayrmp_academic_year_id_acayr: academicYearId\n };\n\n this.academicYearMappingService.getAcademicYearMappingList(mappingPayload).subscribe({\n next: (response: any) => {\n if (response?.success && response.data) {\n console.log('🔗 Academic year mappings loaded:', response.data);\n this.populateFormWithMappingsData(response.data);\n } else {\n console.warn('⚠️ No mappings found for this academic year');\n }\n this.loading.set(false);\n },\n error: (error: any) => {\n console.error('❌ Error loading academic year mappings:', error);\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with academic year data\n */\n private populateFormWithAcademicYearData(data: any): void {\n if (data) {\n this.academicYearForm.patchValue({\n acayr_code: data.acayr_code || '',\n acayr_name: data.acayr_name || '',\n acayr_description: data.acayr_description || '',\n acayr_from_date: data.acayr_from_date ? new Date(data.acayr_from_date).toISOString().split('T')[0] : '',\n acayr_to_date: data.acayr_to_date ? new Date(data.acayr_to_date).toISOString().split('T')[0] : '',\n acayr_isactive: data.acayr_isactive ?? true,\n acayr_iscurrent: data.acayr_iscurrent ?? false,\n acayr_islocked: data.acayr_islocked ?? false\n });\n }\n }\n\n /**\n * Populate form with mappings data\n */\n private populateFormWithMappingsData(mappings: any[]): void {\n if (mappings && Array.isArray(mappings)) {\n // Store original mappings for deletion tracking\n this.originalMappings.set([...mappings]);\n \n // Clear existing mappings\n while (this.academicYearMappingsArray.length !== 0) {\n this.academicYearMappingsArray.removeAt(0);\n }\n \n // Add existing mappings\n mappings.forEach((mapping: any) => {\n const mappingGroup = this.fb.group({\n _id: [mapping._id || ''],\n acayrmp_academic_year_id_acayr: [mapping.acayrmp_academic_year_id_acayr || this.academicYearId() || '', [Validators.required]],\n acayrmp_entity_id_syen: [mapping.acayrmp_entity_id_syen || '', [Validators.required]],\n acayrmp_islocked: [mapping.acayrmp_islocked ?? false],\n acayrmp_iscurrent: [mapping.acayrmp_iscurrent ?? false]\n });\n this.academicYearMappingsArray.push(mappingGroup);\n });\n }\n }\n\n /**\n * Tab configuration\n */\n academicYearTabs() {\n return [\n { id: 'basic', label: 'Academic Year Details', icon: 'school' },\n { id: 'mapping', label: 'Mapping Configuration', icon: 'link' }\n ];\n }\n\n onTabChange(tab: TabItem) {\n this.activeTab.set(tab.id);\n }\n\n\n\n\n\n onSubmit() {\n \n if (this.academicYearForm.valid && this.validateMappings()) {\n this.loading.set(true);\n\n const formData = this.academicYearForm.value;\n\n // Prepare payload with mappings\n const payload: MAcademicYearInsertUpdatePayload = {\n ...formData,\n _id: this.isEditMode() ? this.academicYearId() : undefined,\n acayr_academic_year_mappings: this.getAcademicYearMappingsValue()\n };\n\n console.log('📤 Submitting academic year with mappings:', payload);\n\n // First delete removed mappings, then save/update academic year\n this.deleteRemovedMappings().pipe(\n switchMap(() => {\n // After deleting removed mappings, save/update the academic year\n return this.academicYearService.saveUpdateAcademicYearWithMappings(payload);\n })\n ).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log('✅ Academic year and mappings saved successfully:', response.data);\n \n // Check if there were any mapping errors\n if ((response as any).mappingErrors && (response as any).mappingErrors.length > 0) {\n console.warn('⚠️ Some mappings failed:', (response as any).mappingErrors);\n } else {\n this.goBackToAcademicYearList();\n }\n } else {\n console.error('❌ Failed to save academic year');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error saving academic year:', error);\n this.loading.set(false);\n }\n });\n } else {\n console.warn('Form is invalid');\n this.markFormGroupTouched();\n }\n }\n\n /**\n * Mark all form controls as touched to trigger validation display\n */\n private markFormGroupTouched(): void {\n Object.keys(this.academicYearForm.controls).forEach(key => {\n const control = this.academicYearForm.get(key);\n control?.markAsTouched();\n });\n }\n\n resetForm() {\n this.academicYearForm.reset({\n acayr_isactive: true,\n acayr_iscurrent: false,\n acayr_islocked: false\n });\n \n // Clear the mappings array\n while (this.academicYearMappingsArray.length !== 0) {\n this.academicYearMappingsArray.removeAt(0);\n }\n\n // Reset academic year ID\n this.academicYearId.set('');\n this.isEditMode.set(false);\n this.originalMappings.set([]);\n \n // Reset entity options to show all entities again\n this.updateEntityOptionsForMappings();\n }\n\n /**\n * Go back to academic year list\n */\n goBackToAcademicYearList(): void {\n this.router.navigate(['/control-panel/academic-year']);\n }\n\n /**\n * Cancel form and optionally navigate back\n */\n cancelForm(): void {\n if (this.isEditMode()) {\n this.goBackToAcademicYearList();\n } else {\n this.resetForm();\n }\n }\n\n /**\n * Get page title based on mode\n */\n getPageTitle(): string {\n return this.isEditMode() ? 'Edit Academic Year' : 'Create New Academic Year';\n }\n\n /**\n * Getter methods for form arrays\n */\n get academicYearMappingsArray(): FormArray {\n return this.academicYearForm.get('acayr_academic_year_mappings') as FormArray;\n }\n\n /**\n * Add new academic year mapping\n */\n addAcademicYearMapping(): void {\n // Check if there are any available entities to map\n const availableEntities = this.getAvailableEntityCount(this.academicYearMappingsArray.length);\n if (availableEntities === 0) {\n console.warn('No available entities to map');\n return;\n }\n\n // Generate a temporary ID for new mappings\n const tempId = 'temp_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n \n const academicYearMapping = this.fb.group({\n _id: [tempId],\n acayrmp_academic_year_id_acayr: [this.academicYearId() || '', [Validators.required]],\n acayrmp_entity_id_syen: ['', [Validators.required]],\n acayrmp_islocked: [false],\n acayrmp_iscurrent: [false]\n });\n this.academicYearMappingsArray.push(academicYearMapping);\n }\n\n /**\n * Update academic year ID in all existing mappings when academic year ID changes\n */\n private updateMappingsAcademicYearId(newAcademicYearId: string): void {\n const mappingsArray = this.academicYearMappingsArray;\n mappingsArray.controls.forEach((control: any) => {\n if (control.get('acayrmp_academic_year_id_acayr')) {\n control.get('acayrmp_academic_year_id_acayr').setValue(newAcademicYearId);\n }\n });\n }\n\n /**\n * Get form array value for validation or submission\n */\n getAcademicYearMappingsValue(): any[] {\n return this.academicYearMappingsArray.value;\n }\n\n /**\n * Check if mappings array has any invalid controls\n */\n isMappingsArrayValid(): boolean {\n return this.academicYearMappingsArray.valid;\n }\n\n /**\n * Set academic year ID for all existing mappings\n * This is useful when the academic year ID is generated after creation\n */\n setAcademicYearIdForMappings(academicYearId: string): void {\n this.academicYearId.set(academicYearId);\n this.updateMappingsAcademicYearId(academicYearId);\n }\n\n /**\n * Validate that all mappings have required fields\n */\n validateMappings(): boolean {\n const mappings = this.academicYearMappingsArray.controls;\n \n // Check if there are any mappings\n if (mappings.length === 0) {\n return true; // No mappings is valid\n }\n\n // Validate each mapping\n for (let i = 0; i < mappings.length; i++) {\n const mapping = mappings[i] as any;\n \n // Check required fields\n if (!mapping.get('acayrmp_entity_id_syen')?.value) {\n console.warn(`Mapping ${i + 1} is missing entity selection`);\n return false;\n }\n\n // Check for duplicate entity selections\n const currentEntityId = mapping.get('acayrmp_entity_id_syen')?.value;\n const duplicateIndex = this.findDuplicateEntitySelection(currentEntityId, i);\n if (duplicateIndex !== -1) {\n console.warn(`Mapping ${i + 1} has duplicate entity selection with mapping ${duplicateIndex + 1}`);\n return false;\n }\n }\n \n return true;\n }\n\n /**\n * Find duplicate entity selection in mappings\n */\n private findDuplicateEntitySelection(entityId: string, currentIndex: number): number {\n const mappings = this.academicYearMappingsArray.controls;\n \n for (let i = 0; i < mappings.length; i++) {\n if (i !== currentIndex) {\n const mapping = mappings[i] as any;\n if (mapping.get('acayrmp_entity_id_syen')?.value === entityId) {\n return i;\n }\n }\n }\n \n return -1;\n }\n\n /**\n * Remove academic year mapping\n */\n removeAcademicYearMapping(index: number): void {\n this.academicYearMappingsArray.removeAt(index);\n // Update entity options after removal to re-enable previously selected entities\n this.updateEntityOptionsForMappings();\n }\n\n /**\n * Handle entity selection change for a specific mapping\n */\n onMappingEntityChange(event: any, mappingIndex: number): void {\n const selectedEntityId = event?.value || event;\n if (selectedEntityId) {\n console.log(`🏢 Entity selected for mapping ${mappingIndex}:`, selectedEntityId);\n // Trigger change detection to update other mappings' entity options\n this.updateEntityOptionsForMappings();\n }\n }\n\n /**\n * Get filtered entity options excluding already selected entities in other mappings\n * @param currentMappingIndex The index of the current mapping being edited\n * @returns Entity options excluding already selected entities\n */\n getFilteredEntityOptions(currentMappingIndex: number): any[] {\n const allEntities = this.entityOptions();\n if (!allEntities || allEntities.length === 0) {\n return [];\n }\n\n // Get all currently selected entity IDs from other mappings (excluding current mapping)\n const selectedEntityIds = this.getSelectedEntityIds(currentMappingIndex);\n \n console.log(`🔍 Filtering entities for mapping ${currentMappingIndex}:`, {\n totalEntities: allEntities.length,\n selectedEntityIds,\n availableEntities: allEntities.length - selectedEntityIds.length\n });\n\n // Return only entities that are not already selected in other mappings\n return allEntities.filter((entity: any) => {\n const entityId = entity._id;\n const isAlreadySelected = selectedEntityIds.includes(entityId);\n \n if (isAlreadySelected) {\n console.log(`🚫 Entity \"${entity.syen_name}\" (${entityId}) is already selected in another mapping - excluding from options`);\n }\n \n return !isAlreadySelected;\n });\n }\n\n /**\n * Get all currently selected entity IDs from other mappings\n */\n private getSelectedEntityIds(excludeMappingIndex: number): string[] {\n const mappingsArray = this.academicYearMappingsArray;\n const selectedIds: string[] = [];\n \n mappingsArray.controls.forEach((control: any, index: number) => {\n if (index !== excludeMappingIndex) {\n const entityId = control.get('acayrmp_entity_id_syen')?.value;\n if (entityId) {\n selectedIds.push(entityId);\n }\n }\n });\n \n return selectedIds;\n }\n\n /**\n * Update entity options for all mappings to prevent duplicates\n */\n private updateEntityOptionsForMappings(): void {\n // This method triggers change detection to update the UI\n // The actual filtering is done in getEntityOptionsForMapping method\n console.log('🔄 Updating entity options for all mappings');\n }\n\n /**\n * Check if an entity is disabled for a specific mapping\n */\n isEntityDisabled(entityId: string, mappingIndex: number): boolean {\n const selectedEntityIds = this.getSelectedEntityIds(mappingIndex);\n return selectedEntityIds.includes(entityId);\n }\n\n /**\n * Get the count of available entities for a specific mapping\n */\n getAvailableEntityCount(mappingIndex: number): number {\n const availableEntities = this.getFilteredEntityOptions(mappingIndex);\n return availableEntities.length;\n }\n\n /**\n * Get the count of total entities\n */\n getTotalEntityCount(): number {\n return this.entityOptions().length;\n }\n\n /**\n * Check if all entities are already selected in other mappings\n * @param currentMappingIndex The index of the current mapping being edited\n * @returns True if all entities are already selected\n */\n isAllEntitiesSelected(currentMappingIndex: number): boolean {\n const allEntities = this.entityOptions();\n const currentMappings = this.academicYearMappingsArray.value;\n\n // Get all selected entity IDs from other mappings (excluding current mapping)\n const selectedEntityIds = currentMappings\n .map((mapping: any, index: number) => {\n if (index !== currentMappingIndex && mapping.acayrmp_entity_id_syen) {\n return mapping.acayrmp_entity_id_syen;\n }\n return null;\n })\n .filter((id: string | null) => id !== null && id !== '');\n\n // Check if all entities are selected\n return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n }\n\n /**\n * Check if all entities are already mapped (for disabling Add Entity Mapping button)\n * @returns True if all entities are already mapped\n */\n isAllEntitiesMapped(): boolean {\n const allEntities = this.entityOptions();\n const currentMappings = this.academicYearMappingsArray.value;\n\n // Get all selected entity IDs\n const selectedEntityIds = currentMappings\n .map((mapping: any) => {\n if (mapping.acayrmp_entity_id_syen) {\n return mapping.acayrmp_entity_id_syen;\n }\n return null;\n })\n .filter((id: string | null) => id !== null && id !== '');\n\n // Check if all entities are selected\n return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n }\n\n /**\n * Cleanup when component is destroyed\n * This ensures that when the component is destroyed (e.g., tab closed),\n * all state is properly reset to prevent old data from persisting\n */\n ngOnDestroy(): void {\n console.log('🧹 AcademicYearCreateComponent: Cleaning up component state');\n\n // Reset all signals to their initial state\n this.activeTab.set('basic');\n this.loading.set(false);\n this.academicYearId.set('');\n this.isEditMode.set(false);\n this.originalMappings.set([]);\n this.entityOptions.set([]);\n\n // Reset form to initial state\n this.resetForm();\n\n console.log('🧹 AcademicYearCreateComponent: Component state cleaned up');\n }\n\n /**\n * Delete removed academic year mappings\n */\n private deleteRemovedMappings(): Observable<any[]> {\n const originalMappings = this.originalMappings();\n const currentMappings = this.getAcademicYearMappingsValue();\n \n // Find mappings that were removed (exist in original but not in current)\n const removedMappings = originalMappings.filter(originalMapping => {\n return !currentMappings.some(currentMapping => \n currentMapping._id === originalMapping._id && originalMapping._id\n );\n });\n\n console.log('🗑️ Mappings to delete:', removedMappings);\n\n if (removedMappings.length === 0) {\n return of([]);\n }\n\n // Create delete observables for each removed mapping\n const deleteObservables = removedMappings.map(mapping => {\n return this.academicYearService.deleteAcademicYearMapping({ \n acayrmp_id: mapping._id || '' \n }).pipe(\n catchError(error => {\n console.error('❌ Error deleting mapping:', error);\n return of({ success: false, error, mappingId: mapping._id });\n })\n );\n });\n\n return forkJoin(deleteObservables);\n }\n}\n","<!-- \n ACADEMIC YEAR MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"academicYearForm\" [class.tw-opacity-60]=\"loading()\"\n (ngSubmit)=\"onSubmit()\">\n\n <!-- Simple Header Section -->\n <div class=\"tw-table-row tw-w-full tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n \n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">\n {{ isEditMode() ? 'Edit Academic Year' : 'Create Academic Year' }}\n </h5>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Back button or other actions can be added here if needed -->\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-2 tw-py-0\">\n <cide-ele-tab [tabs]=\"academicYearTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Academic Year Information -->\n <div class=\"tw-space-y-6\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Academic Year Code *\" formControlName=\"acayr_code\"\n placeholder=\"e.g., AY2024-25\" size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Academic Year Name *\" formControlName=\"acayr_name\"\n placeholder=\"e.g., Academic Year 2024-2025\" size=\"md\" leadingIcon=\"school\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acayr_description\"\n placeholder=\"Enter detailed description of the academic year...\"\n rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"From Date *\" formControlName=\"acayr_from_date\" type=\"date\" size=\"md\"\n leadingIcon=\"calendar_today\" id=\"acayr_from_date\">\n </cide-ele-input>\n\n <cide-ele-input label=\"To Date *\" formControlName=\"acayr_to_date\" type=\"date\" size=\"md\"\n leadingIcon=\"calendar_today\" id=\"acayr_to_date\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this academic year</span>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_iscurrent\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current academic year</span>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n @case ('mapping') {\n <!-- Academic Year Mapping Configuration -->\n <div class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-xl tw-p-6\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-6 tw-h-6\">link</cide-ele-icon>\n </div>\n <div>\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-blue-900 tw-m-0\">Academic Year Mapping</h6>\n <p class=\"tw-text-sm tw-text-blue-600 tw-m-0\">Configure entity mappings for this academic year</p>\n </div>\n </div>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"md\" leftIcon=\"add\"\n (click)=\"addAcademicYearMapping()\"\n class=\"tw-shadow-md hover:tw-shadow-lg tw-transition-shadow\">\n Add New Mapping\n </button>\n </div>\n \n @if (academicYearMappingsArray.length === 0) {\n <div class=\"tw-text-center tw-py-12 tw-text-gray-500\">\n <div class=\"tw-bg-white tw-p-4 tw-rounded-full tw-w-16 tw-h-16 tw-mx-auto tw-mb-4 tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-gray-400\">link</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-base tw-font-medium tw-text-gray-600 tw-mb-2\">No Mappings Yet</h6>\n <p class=\"tw-text-sm tw-text-gray-500\">Click \"Add New Mapping\" to start configuring entity relationships for this academic year.</p>\n </div>\n } @else {\n <div class=\"tw-space-y-4\" formArrayName=\"acayr_academic_year_mappings\">\n @for (mapping of academicYearMappingsArray.controls; track $index) {\n <div class=\"tw-bg-white tw-rounded-xl tw-border tw-border-gray-200 tw-shadow-sm hover:tw-shadow-md tw-transition-shadow tw-p-6\">\n <div class=\"tw-flex tw-items-start tw-justify-between tw-mb-4\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">settings</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Mapping #{{ $index + 1 }}</h6>\n </div>\n <button cideEleButton type=\"button\" variant=\"danger\" size=\"sm\" leftIcon=\"delete\"\n (click)=\"removeAcademicYearMapping($index)\"\n class=\"tw-opacity-80 hover:tw-opacity-100 tw-transition-opacity\">\n Remove\n </button>\n </div>\n \n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4\" [formGroupName]=\"$index\">\n <!-- Hidden Academic Year ID field (internal use only) -->\n <input type=\"hidden\" formControlName=\"acayrmp_academic_year_id_acayr\">\n \n <!-- Entity Selection -->\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Select Entity *</label>\n <cide-ele-select \n [options]=\"entityOptions()\"\n formControlName=\"acayrmp_entity_id_syen\"\n placeholder=\"Choose entity for this mapping\" \n size=\"md\"\n valueKey=\"_id\"\n labelKey=\"syen_name\"\n class=\"tw-min-w-full\"\n (change)=\"onMappingEntityChange($event, $index)\">\n </cide-ele-select>\n </div>\n \n <!-- Status Controls -->\n <div class=\"tw-space-y-2\">\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-3\">\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input \n formControlName=\"acayrmp_islocked\" \n type=\"checkbox\" \n size=\"sm\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n \n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input \n formControlName=\"acayrmp_iscurrent\" \n type=\"checkbox\" \n size=\"sm\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current mapping</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Mapping Validation Messages -->\n @if (academicYearMappingsArray.length > 0 && !isMappingsArrayValid()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"warning\" size=\"sm\">warning</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-yellow-800\">\n Please ensure all mappings have required fields filled in.\n </span>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-gap-4\">\n <!-- Form Validation Errors -->\n <cide-form-field-error [formGroup]=\"academicYearForm\"></cide-form-field-error>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || academicYearForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Academic Year' : 'Create Academic Year' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>","import { \r\n Component, \r\n signal, \r\n computed, \r\n viewChild, \r\n TemplateRef, \r\n DestroyRef, \r\n inject, \r\n OnInit,\r\n type OnDestroy \r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { forkJoin, of, type Observable } from 'rxjs';\r\nimport { catchError, switchMap, map } from 'rxjs/operators';\r\nimport { \r\n CideEleDataGridComponent, \r\n CideIconComponent, \r\n CideEleButtonComponent, \r\n type GridConfiguration, \r\n type GridEvent, \r\n CideEleDropdownComponent, \r\n type DropdownItem, \r\n type TemplateContext, \r\n type DropdownConfig, \r\n ConfirmationService,\r\n NotificationService \r\n } from 'cloud-ide-element';\r\nimport { \r\n type AcaAcademicYear, \r\n generateStringFromObject, \r\n type MAcademicYear \r\n} from 'cloud-ide-lms-model';\r\nimport { AppStateHelperService } from 'cloud-ide-layout';\r\nimport { CideLytAcademicYearService } from '../../services/academic-year.service';\r\n\r\n// Types\r\ninterface AcademicYear {\r\n _id?: string;\r\n acayr_code?: string;\r\n acayr_name?: string;\r\n acayr_description?: string;\r\n acayr_from_date?: string | Date;\r\n acayr_to_date?: string | Date;\r\n acayr_isactive?: boolean;\r\n acayr_iscurrent?: boolean;\r\n acayr_islocked?: boolean;\r\n}\r\n\r\ninterface AcademicYearMapping {\r\n _id: string;\r\n acayrmp_academic_year_id_acayr: string;\r\n acayrmp_entity_id_syen: string;\r\n acayrmp_islocked: boolean;\r\n acayrmp_iscurrent: boolean;\r\n}\r\n\r\ninterface ApiResponse<T> {\r\n success: boolean;\r\n code: number;\r\n data: T;\r\n total?: number;\r\n pageIndex?: number;\r\n pageSize?: number;\r\n message: string;\r\n}\r\n\r\n@Component({\r\n selector: 'cide-core-academic-year-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n CideIconComponent,\r\n CideEleButtonComponent,\r\n CideEleDataGridComponent,\r\n CideEleDropdownComponent\r\n ],\r\n templateUrl: './academic-year-list.component.html',\r\n styles: [`\r\n .academic-year-listing-container {\r\n @apply tw-w-full tw-h-full;\r\n }\r\n \r\n :host {\r\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\r\n }\r\n `]\r\n})\r\nexport class AcademicYearListComponent implements OnInit, OnDestroy {\r\n // Modern Angular 20+ dependency injection using inject()\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly academicYearService = inject(CideLytAcademicYearService);\r\n private readonly router = inject(Router);\r\n private readonly appState = inject(AppStateHelperService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly notificationService = inject(NotificationService);\r\n\r\n // Modern ViewChild signals for template renderers (Angular 20 approach)\r\n readonly academicYearDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('academicYearDetailsRendererTemplate');\r\n readonly dateRangeRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('dateRangeRendererTemplate');\r\n readonly statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\r\n readonly actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\r\n\r\n // Modern Angular 20+ state management using signals with proper typing\r\n readonly academicYears = signal<AcademicYear[]>([]);\r\n readonly loading = signal<boolean>(false);\r\n readonly error = signal<string | null>(null);\r\n\r\n // Server-side pagination state using signals\r\n readonly currentPage = signal<number>(1);\r\n readonly pageSize = signal<number>(10);\r\n readonly totalItems = signal<number>(0);\r\n readonly totalPages = signal<number>(0);\r\n\r\n // Server-side search state using signals\r\n readonly searchQuery = signal<string>('');\r\n\r\n // Server-side sorting state using signals\r\n readonly sortColumn = signal<string>('acayr_name');\r\n readonly sortDirection = signal<'asc' | 'desc'>('asc');\r\n\r\n // Server-side filtering state using signals\r\n readonly selectedStatusFilter = signal<string>('');\r\n\r\n // Filter options using computed signal for better performance\r\n readonly statusFilterOptions = computed(() => [\r\n { value: '', label: 'All Status' },\r\n { value: 'active', label: 'Active Years' },\r\n { value: 'inactive', label: 'Inactive Years' },\r\n { value: 'current', label: 'Current Year' },\r\n { value: 'locked', label: 'Locked Years' }\r\n ]);\r\n\r\n\r\n\r\n // Modern Angular 20+ grid configuration using computed signal with proper typing\r\n readonly gridConfig = computed<GridConfiguration<AcademicYear>>(() => ({\r\n id: 'academic-year-list-grid',\r\n columns: [\r\n {\r\n key: 'acayr_code',\r\n header: 'Academic Year Code',\r\n type: 'text',\r\n width: '140px',\r\n truncate: true,\r\n align: 'left',\r\n sortable: true\r\n },\r\n {\r\n key: 'details',\r\n header: 'Academic Year Details',\r\n type: 'custom',\r\n width: 'auto',\r\n truncate: true,\r\n align: 'left',\r\n renderer: 'academicYearDetailsRenderer',\r\n sortable: true\r\n },\r\n {\r\n key: 'date_range',\r\n header: 'Date Range',\r\n type: 'custom',\r\n width: '200px',\r\n truncate: false,\r\n align: 'left',\r\n renderer: 'dateRangeRenderer',\r\n sortable: true\r\n },\r\n {\r\n key: 'acayr_isactive',\r\n header: 'Status',\r\n type: 'custom',\r\n width: '140px',\r\n truncate: false,\r\n align: 'center',\r\n renderer: 'statusRenderer'\r\n },\r\n {\r\n key: 'actions',\r\n header: 'Actions',\r\n type: 'custom',\r\n width: '80px',\r\n truncate: false,\r\n align: 'center',\r\n renderer: 'actionsDropdownRenderer'\r\n }\r\n ],\r\n data: this.academicYears(),\r\n trackBy: '_id',\r\n pagination: {\r\n enabled: true,\r\n pageSize: this.pageSize(),\r\n pageSizeOptions: [10, 25, 50, 100],\r\n showQuickJump: true,\r\n showPageInfo: true,\r\n showRefresh: true\r\n },\r\n search: {\r\n enabled: true,\r\n placeholder: 'Search by code, name, or description...',\r\n searchableColumns: ['acayr_code', 'acayr_name', 'acayr_description'],\r\n debounceMs: 300,\r\n showClearButton: true\r\n },\r\n loading: {\r\n useDefer: true,\r\n skeletonRows: 5,\r\n showOverlay: this.loading()\r\n },\r\n scroll: {\r\n enabled: true,\r\n maxHeight: '',\r\n minHeight: '',\r\n stickyHeader: true,\r\n virtualScroll: false,\r\n rowHeight: 50\r\n },\r\n export: {\r\n enabled: true,\r\n formats: ['csv', 'excel', 'pdf'],\r\n filename: 'academic-years',\r\n includeHeaders: true\r\n },\r\n responsive: true,\r\n striped: false,\r\n bordered: true,\r\n compact: false,\r\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\r\n }));\r\n\r\n ngOnInit(): void {\r\n console.log('🎓 Academic Year List Component initialized');\r\n this.loadAcademicYears();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Cleanup if needed\r\n }\r\n\r\n /**\r\n * Load academic years from API\r\n */\r\n loadAcademicYears(): void {\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n const payload: MAcademicYear = {\r\n pageIndex: this.currentPage(),\r\n pageSize: this.pageSize(),\r\n query: this.searchQuery() || \"\",\r\n sort: {\r\n key: this.sortColumn(),\r\n order: this.sortDirection()\r\n }\r\n };\r\n\r\n this.academicYearService.getAcademicYearList(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.success && response.data) {\r\n console.log('📚 Academic years loaded:', response.data);\r\n console.log('📊 Pagination info:', {\r\n total: response.total,\r\n pageIndex: response.pageIndex,\r\n pageSize: response.pageSize\r\n });\r\n \r\n this.academicYears.set(response.data);\r\n this.totalItems.set(response.total || 0);\r\n this.totalPages.set(Math.ceil((response.total || 0) / this.pageSize()));\r\n \r\n // Show success notification if data was loaded successfully\r\n if (response.data.length > 0) {\r\n this.notificationService.success(`Loaded ${response.data.length} academic year(s) successfully.`);\r\n }\r\n } else {\r\n console.warn('⚠️ No academic year data received');\r\n this.academicYears.set([]);\r\n this.totalItems.set(0);\r\n this.totalPages.set(0);\r\n this.notificationService.warning('No academic years found.');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('❌ Error loading academic years:', error);\r\n this.error.set('Failed to load academic years. Please try again.');\r\n this.academicYears.set([]);\r\n this.totalItems.set(0);\r\n this.totalPages.set(0);\r\n this.notificationService.error('Failed to load academic years. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n\r\n\r\n // Computed template renderers for grid\r\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\r\n academicYearDetailsRenderer: this.academicYearDetailsRendererTemplate(),\r\n dateRangeRenderer: this.dateRangeRendererTemplate(),\r\n statusRenderer: this.statusRendererTemplate(),\r\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\r\n }));\r\n\r\n /**\r\n * Handle grid events\r\n */\r\n onGridEvent(event: GridEvent<any>): void {\r\n switch (event.type) {\r\n case 'pageChange':\r\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\r\n this.currentPage.set(event.data['pageIndex'] as number);\r\n this.pageSize.set(event.data['pageSize'] as number);\r\n this.loadAcademicYears();\r\n }\r\n break;\r\n case 'search':\r\n this.searchQuery.set(event.data as string);\r\n this.currentPage.set(1);\r\n this.loadAcademicYears();\r\n break;\r\n case 'refresh':\r\n this.loadAcademicYears();\r\n break;\r\n case 'action':\r\n // Handle action events if needed\r\n console.log('Action event:', event);\r\n break;\r\n case 'rowClick':\r\n // Handle row click events if needed\r\n console.log('Row click event:', event);\r\n break;\r\n case 'sort':\r\n if (event.data && typeof event.data === 'object' && 'column' in event.data && 'direction' in event.data) {\r\n this.sortColumn.set(event.data['column'] as string);\r\n this.sortDirection.set(event.data['direction'] as 'asc' | 'desc');\r\n this.currentPage.set(1); // Reset to first page when sorting\r\n this.loadAcademicYears();\r\n }\r\n break;\r\n case 'export':\r\n if (event.data && typeof event.data === 'string') {\r\n this.handleExport(event.data);\r\n }\r\n break;\r\n default:\r\n console.log('🔄 Unhandled grid event:', event.type);\r\n }\r\n }\r\n\r\n // Filter handlers\r\n onStatusFilterChange(): void {\r\n console.log('🔍 Status filter changed:', this.selectedStatusFilter());\r\n this.currentPage.set(1); // Reset to first page when filtering\r\n this.loadAcademicYears();\r\n }\r\n\r\n clearFilters(): void {\r\n console.log('🧹 Clearing filters');\r\n this.selectedStatusFilter.set('');\r\n this.searchQuery.set('');\r\n this.currentPage.set(1);\r\n this.loadAcademicYears();\r\n }\r\n\r\n // Academic Year actions with proper typing\r\n createAcademicYear(): void {\r\n console.log('➕ Navigating to create academic year');\r\n this.notificationService.info('Opening form to create a new academic year.');\r\n this.router.navigate(['/control-panel/academic_year/create']);\r\n }\r\n\r\n viewAcademicYear(academicYear: AcademicYear): void {\r\n console.log('👁️ Viewing academic year:', academicYear);\r\n this.notificationService.info(`Opening academic year \"${academicYear.acayr_name}\" for viewing.`);\r\n const queryParams = generateStringFromObject({ acayr_id: academicYear._id });\r\n this.router.navigate(['/control-panel/academic_year/view', queryParams]);\r\n }\r\n\r\n editAcademicYear(academicYear: AcademicYear): void {\r\n console.log('✏️ Editing academic year:', academicYear);\r\n \r\n // Check if the academic year is locked\r\n if (academicYear.acayr_islocked) {\r\n this.notificationService.error(`Cannot edit \"${academicYear.acayr_name}\" - This academic year is locked and cannot be modified. Please contact an administrator to unlock it first.`);\r\n return;\r\n }\r\n \r\n this.notificationService.info(`Opening academic year \"${academicYear.acayr_name}\" for editing.`);\r\n const queryParams = generateStringFromObject({ acayr_id: academicYear._id });\r\n this.router.navigate(['/control-panel/academic_year/edit', queryParams]);\r\n }\r\n\r\n\r\n /**\r\n * Get dropdown configuration\r\n */\r\n getDropdownConfig(): DropdownConfig {\r\n return {\r\n triggerIcon: 'more_vert',\r\n triggerSize: 'sm',\r\n // menuPosition: 'right' as const,\r\n // forcePosition: 'bottom' as const,\r\n // offsetX: 0,\r\n // offsetY: 1,\r\n // usePortal: true,\r\n // showArrow: false\r\n };\r\n }\r\n\r\n /**\r\n * Get action dropdown items\r\n */\r\n getActionDropdownItems(academicYear: AcademicYear): DropdownItem[] {\r\n console.log('🔽 Generating dropdown items for:', academicYear.acayr_name);\r\n console.log('🔽 Academic year data:', {\r\n isCurrent: academicYear.acayr_iscurrent,\r\n isLocked: academicYear.acayr_islocked,\r\n isActive: academicYear.acayr_isactive\r\n });\r\n \r\n const items: DropdownItem[] = [\r\n {\r\n id: 'view',\r\n label: 'View Details',\r\n icon: 'visibility',\r\n iconColor: 'tw-text-gray-400',\r\n textColor: 'tw-text-gray-700',\r\n hoverBgColor: 'hover:tw-bg-gray-100'\r\n },\r\n {\r\n id: 'edit',\r\n label: 'Edit',\r\n icon: 'edit',\r\n iconColor: academicYear?.acayr_islocked ? 'tw-text-gray-300' : 'tw-text-blue-400',\r\n textColor: academicYear?.acayr_islocked ? 'tw-text-gray-400' : 'tw-text-blue-600',\r\n hoverBgColor: academicYear?.acayr_islocked ? 'hover:tw-bg-gray-50' : 'hover:tw-bg-blue-50'\r\n },\r\n {\r\n id: 'toggle-status',\r\n label: academicYear.acayr_isactive ? 'Deactivate' : 'Activate',\r\n icon: academicYear.acayr_isactive ? 'toggle_off' : 'toggle_on',\r\n iconColor: academicYear?.acayr_islocked ? 'tw-text-gray-300' : 'tw-text-gray-400',\r\n textColor: academicYear?.acayr_islocked ? 'tw-text-gray-400' : 'tw-text-gray-700',\r\n hoverBgColor: academicYear?.acayr_islocked ? 'hover:tw-bg-gray-50' : 'hover:tw-bg-gray-100'\r\n }\r\n ];\r\n return items;\r\n }\r\n\r\n /**\r\n * Handle dropdown item click\r\n */\r\n onDropdownItemClick(item: DropdownItem, academicYear: AcademicYear): void {\r\n console.log('🖱️ Dropdown item clicked:', item.id, 'for academic year:', academicYear.acayr_name);\r\n \r\n // Check if item is disabled\r\n if (item.disabled) {\r\n console.log('⚠️ Item is disabled, ignoring click');\r\n return;\r\n }\r\n \r\n switch (item.id) {\r\n case 'view':\r\n this.viewAcademicYear(academicYear);\r\n break;\r\n case 'edit':\r\n this.editAcademicYear(academicYear);\r\n break;\r\n case 'toggle-status':\r\n this.toggleAcademicYearStatus(academicYear);\r\n break;\r\n default:\r\n console.log('❓ Unknown dropdown item clicked:', item.id);\r\n }\r\n }\r\n\r\n /**\r\n * Toggle academic year status (active/inactive)\r\n */\r\n toggleAcademicYearStatus(academicYear: AcademicYear): void {\r\n console.log('🔄 Toggling academic year status:', academicYear);\r\n \r\n // Check if the academic year is locked\r\n if (academicYear.acayr_islocked) {\r\n this.notificationService.error(`Cannot ${academicYear.acayr_isactive ? 'deactivate' : 'activate'} \"${academicYear.acayr_name}\" - This academic year is locked and its status cannot be changed. Please contact an administrator to unlock it first.`);\r\n return;\r\n }\r\n \r\n const action = academicYear.acayr_isactive ? 'deactivate' : 'activate';\r\n const actionText = academicYear.acayr_isactive ? 'Deactivate' : 'Activate';\r\n \r\n // Show confirmation dialog\r\n console.log('🔔 Showing confirmation dialog for toggle status');\r\n this.confirmationService.ask({\r\n title: `${actionText} Academic Year`,\r\n message: `Are you sure you want to ${action} the academic year \"${academicYear.acayr_name}\"?${!academicYear.acayr_isactive ? '\\n\\nThis will also deactivate all associated mappings.' : ''}`,\r\n confirmText: actionText,\r\n cancelText: 'Cancel',\r\n type: academicYear.acayr_isactive ? 'warning' : 'info'\r\n }).then((confirmed: boolean) => {\r\n console.log('🔔 Confirmation dialog result:', confirmed);\r\n if (confirmed) {\r\n this.loading.set(true);\r\n \r\n // First toggle the academic year status\r\n console.log('🔄 Calling toggleAcademicYearStatus with ID:', academicYear._id);\r\n this.academicYearService.toggleAcademicYearStatus({ acayr_id: academicYear._id }).subscribe({\r\n next: (response) => {\r\n console.log('🔄 Toggle academic year status response:', response);\r\n if (response?.success) {\r\n console.log('✅ Academic year status toggled successfully');\r\n \r\n // If deactivating, also toggle status of all academic year mappings\r\n if (!academicYear.acayr_isactive) { // If we're deactivating (was active, now inactive)\r\n this.toggleAcademicYearMappingsStatus(academicYear._id || '', false);\r\n } else {\r\n // If activating, just reload the list\r\n this.notificationService.success(`Academic year \"${academicYear.acayr_name}\" has been activated successfully.`);\r\n this.loadAcademicYears();\r\n }\r\n } else {\r\n console.error('❌ Failed to toggle academic year status');\r\n this.notificationService.error(response?.message || 'Failed to toggle academic year status');\r\n this.loading.set(false);\r\n }\r\n },\r\n error: (error) => {\r\n console.error('❌ Error toggling academic year status:', error);\r\n console.error('❌ Error details:', { \r\n status: error.status, \r\n message: error.message, \r\n error: error.error \r\n });\r\n this.notificationService.error('Failed to toggle academic year status. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Toggle status of all academic year mappings for a specific academic year\r\n */\r\n private toggleAcademicYearMappingsStatus(academicYearId: string, isActive: boolean): void {\r\n console.log(`🔄 Toggling mappings status for academic year ${academicYearId} to ${isActive ? 'active' : 'inactive'}`);\r\n \r\n // Get all mappings for this academic year and toggle their status\r\n // For now, we'll reload the academic year data to get the mappings\r\n // In a real implementation, you might want to get mappings separately\r\n this.academicYearService.getAcademicYearById({ acayr_id: academicYearId }).subscribe({\r\n next: (response) => {\r\n if (response?.success && response.data && (response.data as any).acayr_academic_year_mappings) {\r\n const mappings = (response.data as any).acayr_academic_year_mappings;\r\n console.log('📋 Found mappings to toggle:', mappings);\r\n \r\n // Toggle each mapping's status\r\n const toggleObservables = mappings.map((mapping: any) => {\r\n return this.academicYearService.toggleAcademicYearMappingStatus({ \r\n acayrmp_id: mapping._id \r\n }).pipe(\r\n catchError(error => {\r\n console.error('❌ Error toggling mapping status:', error);\r\n return of({ success: false, error, mappingId: mapping._id });\r\n })\r\n );\r\n });\r\n\r\n if (toggleObservables.length > 0) {\r\n forkJoin(toggleObservables).subscribe(\r\n (results) => {\r\n console.log('✅ All mapping statuses toggled:', results);\r\n const resultsArray = results as any[];\r\n const failedCount = resultsArray.filter((result: any) => !result.success).length;\r\n if (failedCount === 0) {\r\n this.notificationService.success(`Academic year and all ${resultsArray.length} associated mappings have been deactivated successfully.`);\r\n } else {\r\n this.notificationService.warning(`Academic year deactivated, but ${failedCount} out of ${resultsArray.length} mappings failed to update.`);\r\n }\r\n this.loadAcademicYears(); // Reload the list\r\n },\r\n (error) => {\r\n console.error('❌ Error toggling mapping statuses:', error);\r\n this.notificationService.error('Academic year deactivated, but failed to update some mappings.');\r\n this.loadAcademicYears(); // Still reload the list\r\n }\r\n );\r\n } else {\r\n this.notificationService.success('Academic year has been deactivated successfully.');\r\n this.loadAcademicYears(); // No mappings to toggle, just reload\r\n }\r\n } else {\r\n this.notificationService.success('Academic year has been deactivated successfully.');\r\n this.loadAcademicYears(); // No mappings found, just reload\r\n }\r\n },\r\n error: (error) => {\r\n console.error('❌ Error getting academic year mappings:', error);\r\n this.notificationService.error('Academic year deactivated, but failed to update mappings.');\r\n this.loadAcademicYears(); // Still reload the list\r\n }\r\n });\r\n }\r\n\r\n // Export handler\r\n private handleExport(format: string): void {\r\n console.log(`📤 Exporting academic years as ${format}`);\r\n \r\n const data = this.academicYears().map(item => ({\r\n 'Academic Year Code': item.acayr_code,\r\n 'Academic Year Name': item.acayr_name,\r\n 'Description': item.acayr_description,\r\n 'From Date': this.formatDate(item?.acayr_from_date || \"\"),\r\n 'To Date': this.formatDate(item?.acayr_to_date || \"\"),\r\n 'Duration': this.getDuration(item?.acayr_from_date || \"\", item?.acayr_to_date || \"\"),\r\n 'Status': this.getStatusText(item),\r\n 'Is Current': item.acayr_iscurrent ? 'Yes' : 'No',\r\n 'Is Active': item.acayr_isactive ? 'Yes' : 'No',\r\n 'Is Locked': item.acayr_islocked ? 'Yes' : 'No'\r\n }));\r\n\r\n // Create filename with timestamp\r\n const timestamp = new Date().toISOString().split('T')[0];\r\n const filename = `academic-years-${timestamp}`;\r\n\r\n switch (format.toLowerCase()) {\r\n case 'csv':\r\n this.exportToCSV(data, filename);\r\n break;\r\n case 'excel':\r\n this.exportToExcel(data, filename);\r\n break;\r\n case 'pdf':\r\n this.exportToPDF(data, filename);\r\n break;\r\n default:\r\n console.warn(`Unsupported export format: ${format}`);\r\n }\r\n }\r\n\r\n private exportToCSV(data: any[], filename: string): void {\r\n const headers = Object.keys(data[0] || {});\r\n const csvContent = [\r\n headers.join(','),\r\n ...data.map(row => headers.map(header => `\"${row[header] || ''}\"`).join(','))\r\n ].join('\\n');\r\n\r\n this.downloadFile(csvContent, `${filename}.csv`, 'text/csv');\r\n }\r\n\r\n private exportToExcel(data: any[], filename: string): void {\r\n // For Excel export, you might want to use a library like xlsx\r\n // For now, we'll export as CSV with .xlsx extension\r\n this.exportToCSV(data, filename);\r\n }\r\n\r\n private exportToPDF(data: any[], filename: string): void {\r\n // For PDF export, you might want to use a library like jsPDF\r\n // For now, we'll export as CSV\r\n this.exportToCSV(data, filename);\r\n }\r\n\r\n private downloadFile(content: string, filename: string, mimeType: string): void {\r\n const blob = new Blob([content], { type: mimeType });\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = filename;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n // Utility methods with proper typing\r\n formatDate(date: string | Date | null | undefined): string {\r\n if (!date) return '-';\r\n return new Date(date).toLocaleDateString('en-US', {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric'\r\n });\r\n }\r\n\r\n getDuration(fromDate: string | Date | null | undefined, toDate: string | Date | null | undefined): string {\r\n if (!fromDate || !toDate) return '';\r\n \r\n const from = new Date(fromDate);\r\n const to = new Date(toDate);\r\n const diffTime = Math.abs(to.getTime() - from.getTime());\r\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\r\n const months = Math.floor(diffDays / 30);\r\n const years = Math.floor(months / 12);\r\n \r\n if (years > 0) {\r\n return `${years} year${years > 1 ? 's' : ''}`;\r\n } else if (months > 0) {\r\n return `${months} month${months > 1 ? 's' : ''}`;\r\n } else {\r\n return `${diffDays} day${diffDays > 1 ? 's' : ''}`;\r\n }\r\n }\r\n\r\n getStatusBadgeClass(academicYear: AcademicYear): string {\r\n if (academicYear.acayr_iscurrent) return 'tw-bg-green-100 tw-text-green-800';\r\n if (academicYear.acayr_islocked) return 'tw-bg-red-100 tw-text-red-800';\r\n if (academicYear.acayr_isactive) return 'tw-bg-blue-100 tw-text-blue-800';\r\n return 'tw-bg-gray-100 tw-text-gray-800';\r\n }\r\n\r\n getActiveStatusBadgeClass(academicYear: AcademicYear): string {\r\n if (academicYear.acayr_isactive) {\r\n return 'tw-bg-green-100 tw-text-green-800';\r\n } else {\r\n return 'tw-bg-orange-100 tw-text-orange-800';\r\n }\r\n }\r\n\r\n getStatusText(academicYear: AcademicYear): string {\r\n if (academicYear.acayr_iscurrent) return 'Current';\r\n if (academicYear.acayr_islocked) return 'Locked';\r\n if (academicYear.acayr_isactive) return 'Active';\r\n return 'Inactive';\r\n }\r\n}\r\n","<!-- Academic Year Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n\r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Academic Year Management</h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div\r\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"createAcademicYear()\">\r\n Create Academic Year\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #academicYearDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.acayr_name || 'N/A' }}</div>\r\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.acayr_description || 'No description' }}</div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dateRangeRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-text-sm\">\r\n <span class=\"tw-text-gray-900 tw-font-medium\">{{ formatDate(row.acayr_from_date) }}</span>\r\n <span class=\"tw-text-gray-500\">to {{ formatDate(row.acayr_to_date) }}</span>\r\n <span class=\"tw-text-xs tw-text-gray-400\">{{ getDuration(row.acayr_from_date, row.acayr_to_date) }}</span>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #statusRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-gap-1 tw-items-center\">\r\n <!-- Current Year Badge (Priority) -->\r\n @if (row.acayr_iscurrent) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800 tw-text-center\">\r\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">star</cide-ele-icon>\r\n Current Year\r\n </span>\r\n }\r\n \r\n <!-- Active/Inactive Status Badge -->\r\n <span class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-text-center\"\r\n [ngClass]=\"getActiveStatusBadgeClass(row)\">\r\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\r\n {{ row.acayr_isactive ? 'check_circle' : 'cancel' }}\r\n </cide-ele-icon>\r\n {{ row.acayr_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n \r\n <!-- Locked Status Badge (Additional info) -->\r\n @if (row.acayr_islocked) {\r\n <span\r\n class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800 tw-text-center\">\r\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">lock</cide-ele-icon>\r\n Locked\r\n </span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>","// Academic Year Management Components\r\nexport * from './components/academic-year-create/academic-year-create.component';\r\nexport * from './components/academic-year-list/academic-year-list.component';\r\n\r\n// Academic Year Management Services\r\nexport * from './services/academic-year.service';\r\nexport * from './services/academic-year-mapping.service';\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n type classPrgBranchControllerResponse,\r\n type AcaClassPrgBranchListPayload,\r\n type classPrgBranchByIdControllerResponse,\r\n type AcaClassPrgBranchGetByIdPayload,\r\n type classPrgBranchInsertUpdateControllerResponse,\r\n type AcaClassPrgBranchInsertUpdatePayload,\r\n type classPrgBranchDeleteControllerResponse,\r\n type AcaClassPrgBranchDeletePayload,\r\n type classPrgBranchToggleStatusControllerResponse,\r\n type AcaClassPrgBranchToggleStatusPayload,\r\n type classPrgBranchToggleLockControllerResponse,\r\n type AcaClassPrgBranchToggleLockPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytClassProgramBranchService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of class program branches\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of class program branch list response\r\n */\r\n getClassProgramBranchList(payload: AcaClassPrgBranchListPayload): Observable<classPrgBranchControllerResponse> {\r\n console.log(\"Class Program Branch List Payload:\", payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get class program branch by ID\r\n * @param payload - Class program branch ID payload\r\n * @returns Observable of class program branch data\r\n */\r\n getClassProgramBranchById(payload: AcaClassPrgBranchGetByIdPayload): Observable<classPrgBranchByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Create or update class program branch\r\n * @param data - Class program branch data to save\r\n * @returns Observable of the save response\r\n */\r\n saveClassProgramBranch(data: AcaClassPrgBranchInsertUpdatePayload): Observable<classPrgBranchInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete class program branch\r\n * @param payload - Class program branch delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteClassProgramBranch(payload: AcaClassPrgBranchDeletePayload): Observable<classPrgBranchDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle class program branch status (active/inactive)\r\n * @param payload - Class program branch toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleClassProgramBranchStatus(payload: AcaClassPrgBranchToggleStatusPayload): Observable<classPrgBranchToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n 'toggleStatus',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n\r\n /**\r\n * Toggle class program branch lock\r\n * @param payload - Class program branch toggle lock payload\r\n * @returns Observable of the toggle lock response\r\n */\r\n toggleClassProgramBranchLock(payload: AcaClassPrgBranchToggleLockPayload): Observable<classPrgBranchToggleLockControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramBranch,\r\n 'toggleLock',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n}\r\n\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n type classProgramMasterControllerResponse,\r\n type MClassProgramMaster,\r\n type classProgramMasterByIdControllerResponse,\r\n type MClassProgramMasterGetByIdPayload,\r\n type classProgramMasterInsertUpdateControllerResponse,\r\n type MClassProgramMasterInsertUpdatePayload,\r\n type classProgramMasterDeleteControllerResponse,\r\n type MClassProgramMasterDeletePayload,\r\n type classProgramMasterToggleStatusControllerResponse,\r\n type MClassProgramMasterToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytProgramClassService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of program classes\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of program class list response\r\n */\r\n getProgramClassList(payload: MClassProgramMaster): Observable<classProgramMasterControllerResponse> {\r\n console.log(\"Program Class List Payload:\", payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get program class by ID\r\n * @param payload - Program class ID payload\r\n * @returns Observable of program class data\r\n */\r\n getProgramClassById(payload: MClassProgramMasterGetByIdPayload): Observable<classProgramMasterByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Create or update program class\r\n * @param data - Program class data to save\r\n * @returns Observable of the save response\r\n */\r\n saveProgramClass(data: MClassProgramMasterInsertUpdatePayload): Observable<classProgramMasterInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete program class\r\n * @param payload - Program class delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteProgramClass(payload: MClassProgramMasterDeletePayload): Observable<classProgramMasterDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster,\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle program class status (active/inactive)\r\n * @param payload - Program class toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleProgramClassStatus(payload: MClassProgramMasterToggleStatusPayload): Observable<classProgramMasterToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramMaster,\r\n 'toggleStatus',\r\n query\r\n ]);\r\n\r\n return this.http.put(url, {});\r\n }\r\n}\r\n\r\n\r\n","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService, CideSelectComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport {\n AcaClassPrgBranchListPayload,\n type AcaClassPrgBranchDeletePayload,\n type AcaClassPrgBranchToggleStatusPayload,\n type AcaClassPrgBranchToggleLockPayload,\n generateObjectFromString,\n generateStringFromObject,\n AcaClassPrgBranchResponse,\n type MClassProgramMaster,\n type classProgramMasterControllerResponse\n} from 'cloud-ide-lms-model';\nimport { CideLytClassProgramBranchService } from '../../services/class-program-branch.service';\nimport { CideLytProgramClassService } from '../../../program-class-management/services/program-class.service';\n\n// Interfaces based on the actual API response\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_class_program_id_acacpm?: any; // Can be string or populated object\n acabrn_name?: string;\n acabrn_code?: string;\n acabrn_sequence?: number;\n acabrn_isactive?: boolean;\n acabrn_islocked?: boolean;\n}\n\ninterface ProgramClass {\n _id?: string;\n acacpm_name?: string;\n acacpm_code?: string;\n acacpm_alise_title?: string;\n acacpm_description?: string;\n}\n\n@Component({\n selector: 'cide-academics-class-program-branch-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideEleDataGridComponent,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDropdownComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './class-program-branch-list.component.html',\n styles: [`\n .drag-handle {\n cursor: move;\n }\n \n .drag-handle:hover {\n background-color: rgba(0, 0, 0, 0.05);\n border-radius: 4px;\n }\n \n .tw-table tbody tr {\n cursor: pointer;\n }\n \n .tw-table tbody tr:hover {\n background-color: rgba(0, 0, 0, 0.02);\n }\n \n .tw-table tbody tr.selected {\n background-color: rgba(59, 130, 246, 0.1);\n }\n `]\n})\nexport class CideLytClassProgramBranchListComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n private programClassService = inject(CideLytProgramClassService);\n\n // State management\n loading = signal(false);\n error = signal<string | null>(null);\n branches = signal<ClassProgramBranch[]>([]);\n totalCount = signal(0);\n programId = signal<string | null>(null);\n programClasses = signal<ProgramClass[]>([]);\n selectedProgramClassId = signal<string | null>(null);\n\n // Signal for breadcrumb data that will be passed to shared wrapper\n breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n // Template renderers\n dragHandleRendererTemplate = viewChild<TemplateRef<TemplateContext>>('dragHandleRendererTemplate');\n classProgramRendererTemplate = viewChild<TemplateRef<TemplateContext>>('classProgramRendererTemplate');\n actionsDropdownRendererTemplate = viewChild<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Grid configuration\n gridConfig = signal<GridConfiguration<ClassProgramBranch>>({\n id: 'class-program-branch-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'drag',\n header: '',\n type: 'custom',\n width: '40px',\n truncate: false,\n align: 'center',\n renderer: 'dragHandleRenderer'\n },\n {\n key: 'acabrn_name',\n header: 'Branch Name',\n type: 'text',\n width: '300px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'acabrn_code',\n header: 'Code',\n type: 'text',\n width: '150px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'acabrn_class_program_id_acacpm',\n header: 'Class Program',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'classProgramRenderer'\n },\n {\n key: 'acabrn_isactive',\n header: 'Status',\n type: 'status',\n width: '100px',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Active',\n inactiveLabel: 'Inactive',\n activeClass: 'tw-bg-green-100 tw-text-green-800',\n inactiveClass: 'tw-bg-red-100 tw-text-red-800'\n }\n },\n {\n key: 'acabrn_islocked',\n header: 'Locked',\n type: 'status',\n width: '100px',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Locked',\n inactiveLabel: 'Unlocked',\n activeClass: 'tw-bg-yellow-100 tw-text-yellow-800',\n inactiveClass: 'tw-bg-gray-100 tw-text-gray-800'\n }\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '80px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search branches...',\n searchableColumns: ['acabrn_name', 'acabrn_code'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n fullHeight: true,\n responsive: true,\n striped: true,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full',\n dragDrop: {\n enabled: true\n },\n onRefresh: 'onRefresh',\n onPageChange: 'onPageChange',\n onSearch: 'onSearch',\n onRowReorder: 'onRowReorder'\n });\n\n // Computed template renderers\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => {\n const renderers: Record<string, TemplateRef<TemplateContext>> = {};\n\n if (this.dragHandleRendererTemplate()) {\n renderers['dragHandleRenderer'] = this.dragHandleRendererTemplate()!;\n }\n\n if (this.classProgramRendererTemplate()) {\n renderers['classProgramRenderer'] = this.classProgramRendererTemplate()!;\n }\n\n if (this.actionsDropdownRendererTemplate()) {\n renderers['actionsDropdownRenderer'] = this.actionsDropdownRendererTemplate()!;\n }\n\n return renderers;\n });\n\n ngOnInit(): void {\n console.log('🏢 Class Program Branch List Component initialized');\n this.initializeBreadcrumbData();\n this.loadProgramClasses();\n this.checkRouteParams();\n // Load branches will be called when programId is set in checkRouteParams\n }\n\n /**\n * Initialize breadcrumb data for list view\n */\n private initializeBreadcrumbData(): void {\n // The shared wrapper will automatically add:\n // 1. Module (Academics) from app state\n // 2. Current page (Class Program Branch Management) from page config\n // We can add additional items here if needed\n this.breadcrumbData.set([\n {\n id: 'list',\n label: 'List',\n icon: 'list',\n url: undefined\n }\n ]);\n }\n\n /**\n * Load program classes for dropdown\n */\n private loadProgramClasses(): void {\n const payload: Partial<MClassProgramMaster> = {\n pagination: false,\n acacpm_isactive: true\n };\n\n this.programClassService.getProgramClassList(payload as MClassProgramMaster)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: classProgramMasterControllerResponse) => {\n console.log('✅ Program classes loaded:', response);\n if (response?.success && response.data) {\n this.programClasses.set(response.data as ProgramClass[]);\n } else {\n console.warn('⚠️ No program class data received');\n this.programClasses.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading program classes:', error);\n this.programClasses.set([]);\n }\n });\n }\n\n /**\n * Handle Program Class selection change\n */\n onProgramClassChange(programClassId: string | number | string[] | null): void {\n const programId = typeof programClassId === 'string' ? programClassId : (programClassId ? String(programClassId) : null);\n console.log('🔄 Program Class changed:', programId);\n if (!programId) {\n // Class program is required, show error if cleared\n this.notificationService.warning('Class Program is required to view branches');\n return;\n }\n this.selectedProgramClassId.set(programId);\n this.programId.set(programId);\n this.loadBranches();\n }\n\n /**\n * Check route parameters for program ID\n */\n private checkRouteParams(): void {\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n console.log('🏢 Route params:', params, 'queryParams:', queryParams);\n\n if (queryParams) {\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n console.log('🏢 Query data from route:', queryData);\n\n // Check for programId in various possible formats\n const programId = queryData?.programId\n\n if (programId) {\n this.programId.set(programId as string);\n this.selectedProgramClassId.set(programId as string);\n console.log('🏢 Program Class ID extracted from route:', programId);\n console.log('🏢 Will filter branches by acabrn_class_program_id_acacpm:', programId);\n this.loadBranches();\n } else {\n // No program ID in route params, check query params\n this.checkQueryParams();\n }\n } else {\n // No route query params, check direct query parameters\n this.checkQueryParams();\n }\n });\n }\n\n /**\n * Check direct query parameters for program ID\n */\n private checkQueryParams(): void {\n const queryParams = this.route.snapshot.queryParams;\n const programId = queryParams['programId']\n\n if (programId) {\n this.programId.set(programId);\n this.selectedProgramClassId.set(programId);\n console.log('🏢 Program Class ID from query params:', programId);\n console.log('🏢 Will filter branches by acabrn_class_program_id_acacpm:', programId);\n this.loadBranches();\n } else {\n // No program ID provided - class program is required\n console.log('🏢 No program class ID provided - class program is required');\n this.programId.set(null);\n this.selectedProgramClassId.set(null);\n // Don't load branches if no program ID - wait for user selection\n this.branches.set([]);\n this.updateGridData();\n }\n }\n\n /**\n * Load branches from API\n */\n private loadBranches(): void {\n this.loading.set(true);\n this.error.set(null);\n\n // Build payload with program ID - required field\n const currentProgramId = this.programId();\n \n // Class program is required, so we must have a program ID\n if (!currentProgramId) {\n this.loading.set(false);\n this.error.set('Class Program is required');\n this.branches.set([]);\n this.updateGridData();\n return;\n }\n\n const payload: AcaClassPrgBranchListPayload = new AcaClassPrgBranchListPayload({\n acabrn_class_program_id_acacpm: currentProgramId,\n pagination: true,\n pageIndex: 0,\n pageSize: 10\n });\n\n console.log('🏢 API Payload:', payload);\n\n this.classProgramBranchService.getClassProgramBranchList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Branches loaded:', response);\n if (response?.success && response.data) {\n this.branches.set(response.data as ClassProgramBranch[]);\n this.totalCount.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set('Failed to load branches');\n this.notificationService.error('Failed to load branches');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading branches:', error);\n this.error.set('Failed to load branches');\n this.loading.set(false);\n this.notificationService.error('Failed to load branches');\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.branches()\n }));\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ClassProgramBranch>): void {\n console.log('Grid Event:', event);\n\n switch (event.type) {\n case 'refresh':\n this.onRefresh();\n break;\n case 'pageChange':\n this.onPageChange(event.data);\n break;\n case 'search':\n this.onSearch(event.data);\n break;\n case 'rowReorder':\n this.onRowReorder(event.data);\n break;\n }\n }\n\n /**\n * Handle refresh\n */\n onRefresh(): void {\n this.loadBranches();\n }\n\n /**\n * Handle page change\n */\n onPageChange(event: any): void {\n console.log('Page change:', event);\n // Implement pagination logic here\n }\n\n /**\n * Handle search\n */\n onSearch(event: any): void {\n console.log('Search:', event);\n // Implement search logic here\n }\n\n /**\n * Handle row reorder (drag and drop)\n */\n onRowReorder(event: any): void {\n console.log('Row reorder:', event);\n\n if (event && event.newOrder) {\n // Update the sequence order based on the new drag and drop order\n this.updateSequenceOrder(event.newOrder);\n }\n }\n\n\n /**\n * Update sequence order for branches\n */\n private updateSequenceOrder(branches: ClassProgramBranch[]): void {\n // Update sequence numbers based on new order\n const updatedBranches = branches.map((branch, index) => ({\n ...branch,\n acabrn_sequence: index + 1\n }));\n\n // Update local state\n this.branches.set(updatedBranches);\n this.updateGridData();\n\n // TODO: Implement API call to update sequence order on server\n // This would typically be a bulk update API call\n console.log('Updated sequence order:', updatedBranches.map(b => ({ id: b._id, sequence: b.acabrn_sequence })));\n\n this.notificationService.success('Sequence order updated successfully');\n }\n\n\n /**\n * Navigate to create branch\n */\n onCreateBranch(event?: Event): void {\n console.log('🏢 Create Branch button clicked', event);\n const currentProgramId = this.programId();\n console.log('🏢 Current Program ID:', currentProgramId);\n\n if (!currentProgramId) {\n // Class program is required\n this.notificationService.warning('Please select a Class Program first before creating a branch');\n return;\n }\n\n // Use generateStringFromObject to pass programId as route parameter\n const queryParams = generateStringFromObject({ programId: currentProgramId });\n console.log('🏢 Navigating to create with programId:', queryParams);\n this.router.navigate(['/control-panel/program_specialization/create', queryParams]).then(\n (success) => {\n console.log('✅ Navigation successful:', success);\n },\n (error) => {\n console.error('❌ Navigation failed:', error);\n this.notificationService.error('Failed to navigate to create branch page');\n }\n );\n }\n\n /**\n * Navigate to view branch\n */\n onViewBranch(branch: ClassProgramBranch): void {\n if (branch._id) {\n const currentProgramId = this.programId();\n const queryParams = generateStringFromObject({ acabrn_id: branch._id });\n\n // Add programId as query parameter if available\n const navigationExtras: any = {};\n if (currentProgramId) {\n navigationExtras.queryParams = { programId: currentProgramId };\n }\n\n this.router.navigate(['/control-panel/program_specialization/view', queryParams], navigationExtras);\n }\n }\n\n /**\n * Navigate to edit branch\n */\n onEditBranch(branch: ClassProgramBranch): void {\n if (branch._id) {\n const currentProgramId = this.programId();\n const queryParams = generateStringFromObject({ acabrn_id: branch._id });\n\n\n this.router.navigate(['/control-panel/program_specialization/edit', queryParams]);\n }\n }\n\n /**\n * Navigate to manage term for branch\n */\n onManageTerm(branch: ClassProgramBranch): void {\n if (branch._id) {\n const currentProgramId = this.programId();\n const queryParams = generateStringFromObject({\n acabrn_id: branch._id,\n acacpm_id: currentProgramId\n });\n\n // Navigate to term management page\n this.router.navigate(['/control-panel/program-term-management', queryParams]);\n }\n }\n\n /**\n * Get dropdown items for branch actions\n */\n getBranchActionDropdownItems(branch: AcaClassPrgBranchResponse): DropdownItem[] {\n return [\n {\n id: 'view',\n label: 'View',\n icon: 'visibility'\n },\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit'\n },\n {\n id: 'manage-term',\n label: 'Manage Term',\n icon: 'school'\n },\n {\n id: 'toggle-status',\n label: branch.acabrn_isactive ? 'Deactivate' : 'Activate',\n icon: branch.acabrn_isactive ? 'block' : 'check_circle'\n },\n {\n id: 'toggle-lock',\n label: branch.acabrn_islocked ? 'Unlock' : 'Lock',\n icon: branch.acabrn_islocked ? 'lock_open' : 'lock'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, branch: ClassProgramBranch): void {\n switch (item.id) {\n case 'view':\n this.onViewBranch(branch);\n break;\n case 'edit':\n this.onEditBranch(branch);\n break;\n case 'manage-term':\n this.onManageTerm(branch);\n break;\n case 'toggle-status':\n this.toggleBranchStatus(branch);\n break;\n case 'toggle-lock':\n this.toggleBranchLock(branch);\n break;\n case 'delete':\n this.deleteBranch(branch);\n break;\n }\n }\n\n /**\n * Toggle branch status\n */\n private toggleBranchStatus(branch: ClassProgramBranch): void {\n if (!branch._id) return;\n\n const action = branch.acabrn_isactive ? 'deactivate' : 'activate';\n\n this.confirmationService.ask({\n title: `${action.charAt(0).toUpperCase() + action.slice(1)} Branch`,\n message: `Are you sure you want to ${action} this branch?`,\n confirmText: action.charAt(0).toUpperCase() + action.slice(1),\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n const payload: AcaClassPrgBranchToggleStatusPayload = {\n acabrn_id: branch._id!\n };\n\n this.classProgramBranchService.toggleClassProgramBranchStatus(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.notificationService.success(`Branch ${action}d successfully`);\n this.loadBranches();\n } else {\n this.notificationService.error(`Failed to ${action} branch`);\n }\n },\n error: (error) => {\n console.error('❌ Error toggling branch status:', error);\n this.notificationService.error(`Failed to ${action} branch`);\n }\n });\n }\n });\n }\n\n /**\n * Toggle branch lock\n */\n private toggleBranchLock(branch: ClassProgramBranch): void {\n if (!branch._id) return;\n\n const action = branch.acabrn_islocked ? 'unlock' : 'lock';\n\n this.confirmationService.ask({\n title: `${action.charAt(0).toUpperCase() + action.slice(1)} Branch`,\n message: `Are you sure you want to ${action} this branch?`,\n confirmText: action.charAt(0).toUpperCase() + action.slice(1),\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n const payload: AcaClassPrgBranchToggleLockPayload = {\n acabrn_id: branch._id!\n };\n\n this.classProgramBranchService.toggleClassProgramBranchLock(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.notificationService.success(`Branch ${action}ed successfully`);\n this.loadBranches();\n } else {\n this.notificationService.error(`Failed to ${action} branch`);\n }\n },\n error: (error) => {\n console.error('❌ Error toggling branch lock:', error);\n this.notificationService.error(`Failed to ${action} branch`);\n }\n });\n }\n });\n }\n\n /**\n * Delete branch\n */\n private deleteBranch(branch: ClassProgramBranch): void {\n if (!branch._id) return;\n\n this.confirmationService.ask({\n title: 'Delete Branch',\n message: `Are you sure you want to delete \"${branch.acabrn_name}\"? This action cannot be undone.`,\n confirmText: 'Delete',\n cancelText: 'Cancel',\n type: 'danger'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n const payload: AcaClassPrgBranchDeletePayload = {\n acabrn_id: branch._id!\n };\n\n this.classProgramBranchService.deleteClassProgramBranch(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n this.notificationService.success('Branch deleted successfully');\n this.loadBranches();\n } else {\n this.notificationService.error('Failed to delete branch');\n }\n },\n error: (error) => {\n console.error('❌ Error deleting branch:', error);\n this.notificationService.error('Failed to delete branch');\n }\n });\n }\n });\n }\n}\n\n","<!-- Class Program Branch List Component -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"onCreateBranch($event)\">\n Create Branch\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full\">\n <!-- Filter Section -->\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-items-center tw-gap-4\">\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program *</label>\n <cide-ele-select\n [options]=\"programClasses()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onProgramClassChange($event)\"\n placeholder=\"Select Class Program\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [required]=\"true\">\n </cide-ele-select>\n </div>\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #dragHandleRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-justify-center tw-cursor-move drag-handle\" title=\"Drag to reorder\">\n <cide-ele-icon name=\"drag_indicator\" class=\"tw-w-4 tw-h-4 tw-text-gray-400 hover:tw-text-gray-600\"></cide-ele-icon>\n </div>\n</ng-template>\n\n\n<ng-template #classProgramRendererTemplate let-row=\"row\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row.acabrn_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <div class=\"tw-relative tw-inline-block\">\n <cide-ele-dropdown \n [items]=\"getBranchActionDropdownItems(row)\" \n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n </div>\n</ng-template>\n\n","import { Component, inject, signal, OnInit, DestroyRef, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService } from 'cloud-ide-element';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideLytClassProgramBranchService } from '../../services/class-program-branch.service';\nimport { CideLytProgramClassService } from '../../../program-class-management/services/program-class.service';\nimport { CideCoreGeneralMasterService } from 'cloud-ide-shared';\nimport { ICoreSygms, IGeneralMasterListRequest } from 'cloud-ide-lms-model';\nimport {\n type AcaClassPrgBranchInsertUpdatePayload,\n type AcaClassPrgBranchGetByIdPayload,\n generateStringFromObject,\n generateObjectFromString\n} from 'cloud-ide-lms-model';\n\n// Interfaces based on the actual API response\ninterface ClassProgramBranch {\n _id?: string;\n acabrn_class_program_id_acacpm?: any; // Can be string or populated object\n acabrn_name?: string;\n acabrn_code?: string;\n acabrn_sequence?: number;\n acabrn_isactive?: boolean;\n acabrn_islocked?: boolean;\n}\n\ninterface ProgramClass {\n _id?: string;\n acacpm_name?: string;\n acacpm_code?: string;\n acacpm_description?: string;\n}\n\ninterface BranchMaster extends ICoreSygms {\n value?: string;\n label?: string;\n}\n\n\n@Component({\n selector: 'cide-academics-class-program-branch-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent,\n ],\n templateUrl: './class-program-branch-form.component.html'\n})\nexport class CideLytClassProgramBranchFormComponent implements OnInit, OnDestroy {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private fb = inject(FormBuilder);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\n private programClassService = inject(CideLytProgramClassService);\n private generalMasterService = inject(CideCoreGeneralMasterService);\n\n // Form and state management\n branchForm: FormGroup;\n loading = signal(false);\n error = signal<string | null>(null);\n isEditMode = signal(false);\n isViewMode = signal(false);\n branchId = signal<string | null>(null);\n\n // Data signals\n programClasses = signal<ProgramClass[]>([]);\n branchMasters = signal<BranchMaster[]>([]);\n\n // Signal for breadcrumb data that will be passed to shared wrapper\n breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n // Signal to control Program Class dropdown visibility\n showProgramClassDropdown = signal<boolean>(true);\n\n // Flag to prevent auto-populate during data load\n private isLoadingData = false;\n\n constructor() {\n this.branchForm = this.fb.group({\n acabrn_name: ['', [Validators.required, Validators.minLength(2)]],\n acabrn_code: ['', [Validators.required, Validators.minLength(2)]],\n acabrn_sequence: [0, [Validators.required, Validators.min(0)]],\n acabrn_class_program_id_acacpm: ['', [Validators.required]],\n acabrn_branch_id_sygms: [''],\n acabrn_isactive: [true],\n acabrn_islocked: [false]\n });\n }\n\n ngOnInit(): void {\n console.log('🏢 Class Program Branch Form Component initialized');\n this.initializeComponent();\n this.setupFormListeners();\n }\n\n /**\n * Setup form control listeners\n */\n private setupFormListeners(): void {\n // Listen to SYGMS field changes\n this.branchForm.get('acabrn_branch_id_sygms')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((sygmsId: string) => {\n // Only auto-populate if not loading existing data\n if (sygmsId && !this.isLoadingData) {\n this.onBranchMasterChange(sygmsId);\n }\n });\n\n // Listen to Program Class field changes\n this.branchForm.get('acabrn_class_program_id_acacpm')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((programClassId: string) => {\n // Only trigger if not loading existing data and dropdown is visible\n if (programClassId && !this.isLoadingData && this.showProgramClassDropdown()) {\n this.onProgramClassChange(programClassId);\n }\n });\n }\n\n /**\n * Handle Program Class selection change\n * This can be used to filter or update dependent lists\n */\n private onProgramClassChange(programClassId: string): void {\n if (!programClassId) {\n return;\n }\n\n console.log('🔄 Program Class changed:', programClassId);\n // Add any logic here to update dependent lists based on Program Class selection\n // For example, you could filter branch masters or load additional data\n }\n\n ngOnDestroy(): void {\n console.log('🏢 Class Program Branch Form Component destroyed');\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n this.loadMasterData();\n this.checkRouteParams();\n }\n\n /**\n * Check route parameters to determine mode\n */\n private checkRouteParams(): void {\n const url = this.router.url;\n const queryParams = this.route.snapshot.queryParams;\n const routeParams = this.route.snapshot.params;\n\n // Check for program ID from route parameters or query parameters\n let programId: string | null = null;\n\n // Check route parameters for programId or acacpm_id (for create operations)\n if (routeParams['query']) {\n const params = generateObjectFromString(routeParams['query']);\n console.log('🏢 Params:generateObjectFromString', params);\n programId = params?.programId || params?.acacpm_id || null;\n }\n\n // Also check queryParams for programId or acacpm_id\n if (!programId) {\n programId = queryParams['programId'] || queryParams['acacpm_id'] || null;\n }\n\n if (programId) {\n console.log('🏢 Program Class Management ID from URL:', programId);\n // Hide the dropdown and set the value\n this.showProgramClassDropdown.set(false);\n this.branchForm.patchValue({\n acabrn_class_program_id_acacpm: programId\n });\n // Keep the field enabled so it's included in form.value, but it will be hidden\n } else {\n // Show the dropdown if no ID from URL\n this.showProgramClassDropdown.set(true);\n }\n\n if (url.includes('/view/')) {\n this.isViewMode.set(true);\n this.loadBranchForView(queryParams);\n } else if (url.includes('/edit/')) {\n this.isEditMode.set(true);\n this.loadBranchForEdit(queryParams);\n } else {\n // Create mode\n this.isEditMode.set(false);\n this.isViewMode.set(false);\n // Initialize breadcrumb for create mode\n this.updateBreadcrumbData();\n }\n }\n\n\n /**\n * Load master data\n */\n private loadMasterData(): void {\n console.log('🔄 Loading master data for Class Program Branch Form...');\n\n // Load program classes\n this.loadProgramClasses();\n \n // Load branch masters (SYGMS)\n this.loadBranchMasters();\n }\n\n /**\n * Load program classes\n */\n private loadProgramClasses(): void {\n this.programClassService.getProgramClassList({ pagination: false })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Program classes loaded:', response);\n if (response?.success && response.data) {\n this.programClasses.set(response.data as ProgramClass[]);\n } else {\n console.warn('⚠️ No program class data received');\n this.programClasses.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading program classes:', error);\n this.programClasses.set([]);\n }\n });\n }\n\n /**\n * Load branch masters from SYGMS (General Master)\n * Filter by type code 'BRANCH' or similar\n */\n private loadBranchMasters(): void {\n const payload: IGeneralMasterListRequest = {\n sygmt_code: 'BRANCH' // Assuming 'BRANCH' is the type code for branch masters\n };\n\n this.generalMasterService.getMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Branch masters loaded:', response);\n if (response?.success && response.data) {\n const masters = response.data.map((master: ICoreSygms) => ({\n ...master,\n value: master._id,\n label: master.sygms_title\n })) as BranchMaster[];\n this.branchMasters.set(masters);\n } else {\n console.warn('⚠️ No branch master data received');\n this.branchMasters.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading branch masters:', error);\n this.branchMasters.set([]);\n }\n });\n }\n\n /**\n * Handle SYGMS selection change - auto-populate name and code\n */\n onBranchMasterChange(sygmsId: string): void {\n if (!sygmsId) {\n return;\n }\n\n const selectedMaster = this.branchMasters().find(m => m._id === sygmsId);\n if (selectedMaster) {\n // Auto-populate name from SYGMS title\n if (selectedMaster.sygms_title) {\n this.branchForm.patchValue({\n acabrn_name: selectedMaster.sygms_title\n });\n }\n\n // Auto-populate code from SYGMS configuration or code\n if (selectedMaster.sygms_configuration && typeof selectedMaster.sygms_configuration === 'object') {\n const config = selectedMaster.sygms_configuration as any;\n if (config.code) {\n this.branchForm.patchValue({\n acabrn_code: config.code\n });\n } else if (selectedMaster.sygms_code) {\n this.branchForm.patchValue({\n acabrn_code: selectedMaster.sygms_code\n });\n }\n } else if (selectedMaster.sygms_code) {\n this.branchForm.patchValue({\n acabrn_code: selectedMaster.sygms_code\n });\n }\n }\n }\n\n\n /**\n * Load branch for viewing\n */\n private loadBranchForView(queryParams: any): void {\n const routeParams = this.route.snapshot.params;\n\n // Check query parameters first\n let params = generateObjectFromString(routeParams['query']);\n console.log('🏢 Params:generateObjectFromString', params);\n\n if (params?.acabrn_id) {\n console.log('🏢 Branch ID for view:', params.acabrn_id);\n this.branchId.set(params.acabrn_id);\n this.loadBranchData(params.acabrn_id, true);\n } else {\n console.error('❌ No branch ID found in route parameters');\n this.error.set('Branch ID not found in route parameters');\n }\n }\n\n /**\n * Load branch for editing\n */\n private loadBranchForEdit(queryParams: any): void {\n const routeParams = this.route.snapshot.params;\n\n // Check query parameters first\n let params = generateObjectFromString(routeParams['query']);\n console.log('🏢 Params:generateObjectFromString', params);\n\n if (params?.acabrn_id) {\n console.log('🏢 Branch ID for edit:', params.acabrn_id);\n this.branchId.set(params.acabrn_id);\n this.loadBranchData(params.acabrn_id, false);\n } else {\n console.error('❌ No branch ID found in route parameters');\n this.error.set('Branch ID not found in route parameters');\n }\n }\n\n /**\n * Load branch data\n */\n private loadBranchData(branchId: string, isViewMode: boolean): void {\n this.loading.set(true);\n this.error.set(null);\n this.isLoadingData = true; // Set flag to prevent auto-populate\n\n const payload: AcaClassPrgBranchGetByIdPayload = {\n acabrn_id: branchId\n };\n\n this.classProgramBranchService.getClassProgramBranchById(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n const branchData = response.data;\n\n // Check if program class ID is in URL - if so, hide dropdown\n const routeParams = this.route.snapshot.params;\n const queryParams = this.route.snapshot.queryParams;\n let programIdFromUrl: string | null = null;\n\n if (routeParams['query']) {\n const params = generateObjectFromString(routeParams['query']);\n programIdFromUrl = params?.programId || params?.acacpm_id || null;\n }\n\n if (!programIdFromUrl) {\n programIdFromUrl = queryParams['programId'] || queryParams['acacpm_id'] || null;\n }\n\n if (programIdFromUrl) {\n this.showProgramClassDropdown.set(false);\n // Keep the field enabled so it's included in form.value\n }\n\n // Populate form with branch data\n this.branchForm.patchValue({\n acabrn_name: branchData.acabrn_name,\n acabrn_code: branchData.acabrn_code,\n acabrn_sequence: branchData.acabrn_sequence,\n acabrn_class_program_id_acacpm: branchData.acabrn_class_program_id_acacpm?._id || branchData.acabrn_class_program_id_acacpm,\n acabrn_branch_id_sygms: branchData.acabrn_branch_id_sygms?._id || branchData.acabrn_branch_id_sygms || '',\n acabrn_isactive: (branchData).acabrn_isactive,\n acabrn_islocked: branchData.acabrn_islocked\n });\n\n // Reset flag after data is loaded\n this.isLoadingData = false;\n\n // Disable form if in view mode\n if (isViewMode) {\n this.branchForm.disable();\n }\n\n // Update breadcrumb for edit/view mode\n this.updateBreadcrumbData(branchData, isViewMode);\n\n this.notificationService.success('Branch data loaded successfully.');\n } else {\n this.error.set('Failed to load branch data.');\n this.notificationService.error('Failed to load branch data.');\n this.isLoadingData = false;\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading branch data:', error);\n this.error.set('Failed to load branch data. Please try again.');\n this.loading.set(false);\n this.isLoadingData = false;\n this.notificationService.error('Failed to load branch data. Please try again.');\n }\n });\n }\n\n /**\n * Get form title\n */\n get formTitle(): string {\n if (this.isViewMode()) return 'View Program Specialization';\n if (this.isEditMode()) return 'Edit Program Specialization';\n return 'Create Program Specialization';\n }\n\n /**\n * Get submit button text\n */\n get submitButtonText(): string {\n if (this.isViewMode()) return 'Close';\n if (this.isEditMode()) return 'Update Branch';\n return 'Create Branch';\n }\n\n /**\n * Handle form submission\n */\n onSubmit(): void {\n if (this.isViewMode()) {\n this.location.back();\n return;\n }\n\n if (this.branchForm.invalid) {\n this.notificationService.error('Please fill in all required fields correctly.');\n return;\n }\n\n const formData = this.branchForm.value;\n const payload: AcaClassPrgBranchInsertUpdatePayload = {\n _id: this.branchId() || undefined,\n acabrn_name: formData.acabrn_name,\n acabrn_code: formData.acabrn_code,\n acabrn_sequence: formData.acabrn_sequence,\n acabrn_class_program_id_acacpm: formData.acabrn_class_program_id_acacpm,\n acabrn_branch_id_sygms: formData.acabrn_branch_id_sygms || undefined,\n acabrn_isactive: formData.acabrn_isactive,\n acabrn_islocked: formData.acabrn_islocked\n };\n\n this.saveBranch(payload);\n }\n\n /**\n * Save branch\n */\n private saveBranch(payload: AcaClassPrgBranchInsertUpdatePayload): void {\n this.loading.set(true);\n\n this.classProgramBranchService.saveClassProgramBranch(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.notificationService.success(`Branch has been ${action} successfully.`);\n this.location.back();\n } else {\n this.notificationService.error(response?.message || 'Failed to save branch.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error saving branch:', error);\n this.notificationService.error('Failed to save branch. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Handle cancel\n */\n onCancel(): void {\n if (this.branchForm.dirty && !this.isViewMode()) {\n this.confirmationService.ask({\n title: 'Discard Changes',\n message: 'You have unsaved changes. Are you sure you want to discard them?',\n confirmText: 'Discard',\n cancelText: 'Keep Editing',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n this.location.back();\n }\n });\n } else {\n this.location.back();\n }\n }\n\n /**\n * Reset form to initial state\n */\n resetForm(): void {\n this.branchForm.reset();\n this.branchForm.patchValue({\n acabrn_isactive: true,\n acabrn_islocked: false,\n acabrn_sequence: 0,\n acabrn_branch_id_sygms: ''\n });\n this.notificationService.info('Form has been reset to initial values.');\n }\n\n /**\n * Toggle active status on card click\n */\n onActiveCardClick(): void {\n if (this.isViewMode()) return;\n\n const currentValue = this.branchForm.get('acabrn_isactive')?.value;\n this.branchForm.patchValue({\n acabrn_isactive: !currentValue\n });\n }\n\n /**\n * Toggle locked status on card click\n */\n onLockedCardClick(): void {\n if (this.isViewMode()) return;\n\n const currentValue = this.branchForm.get('acabrn_islocked')?.value;\n this.branchForm.patchValue({\n acabrn_islocked: !currentValue\n });\n }\n\n /**\n * Update breadcrumb data based on mode\n */\n private updateBreadcrumbData(branchData?: any, isViewMode: boolean = false): void {\n const additionalItems: { id: string; label: string; icon?: string; url?: string }[] = [];\n\n if (this.isEditMode() || isViewMode) {\n if (branchData) {\n additionalItems.push({\n id: branchData._id || 'branch',\n label: branchData.acabrn_name || 'Branch',\n icon: undefined,\n url: undefined\n });\n }\n\n if (isViewMode) {\n additionalItems.push({\n id: 'view',\n label: 'View',\n icon: 'visibility',\n url: undefined\n });\n } else {\n additionalItems.push({\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n url: undefined\n });\n }\n } else {\n // Create mode\n additionalItems.push({\n id: 'create',\n label: 'Create',\n icon: 'add',\n url: undefined\n });\n }\n\n this.breadcrumbData.set(additionalItems);\n }\n}\n\n","<!-- \n CLASS PROGRAM BRANCH FORM COMPONENT\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n <div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"branchForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\"\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n\n <!-- Basic Branch Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program Selection -->\n @if (showProgramClassDropdown()) {\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program *</label>\n <cide-ele-select formControlName=\"acabrn_class_program_id_acacpm\" placeholder=\"Select class program\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"acacpm_alise_title\" [options]=\"programClasses()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Sequence will be automatically assigned based on the order in the listing\n </p>\n </div>\n </div>\n }\n\n <!-- Standard Branch Name (SYGMS) -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Standard Branch Name</label>\n <cide-ele-select formControlName=\"acabrn_branch_id_sygms\" placeholder=\"Select standard branch name\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"branchMasters()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Selecting a standard branch will auto-populate the branch name and code\n </p>\n </div>\n </div>\n\n <!-- Branch Name and Code -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div>\n <cide-ele-input label=\"Branch Name *\" formControlName=\"acabrn_name\"\n placeholder=\"e.g., Computer Science Branch\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-input label=\"Branch Code *\" formControlName=\"acabrn_code\" placeholder=\"e.g., CS\" size=\"md\"\n leadingIcon=\"code\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Status and Lock Options -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onActiveCardClick()\">\n <cide-ele-input formControlName=\"acabrn_isactive\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this branch</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onLockedCardClick()\">\n <cide-ele-input formControlName=\"acabrn_islocked\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n {{ isViewMode() ? 'Close' : 'Cancel' }}\n </button>\n\n @if (!isViewMode()) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || branchForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ submitButtonText }}\n </button>\n }\n </div>\n </div>\n </div>\n </form>\n </div>\n</cide-lyt-shared-wrapper>","// Class Program Branch Management Module\r\n// This module provides components and services for managing class program branches\r\n\r\n// Components\r\nexport { CideLytClassProgramBranchListComponent } from './components/class-program-branch-list/class-program-branch-list.component';\r\nexport { CideLytClassProgramBranchFormComponent } from './components/class-program-branch-form/class-program-branch-form.component';\r\n\r\n// Services\r\nexport { CideLytClassProgramBranchService } from './services/class-program-branch.service';\r\n\r\n","/*\r\n * Public API Surface of cloud-ide-academics\r\n */\r\nexport * from './lib/cloud-ide-academics.routes';\r\nexport * from './lib/collection/academic-year-management';\r\nexport * from './lib/collection/class-program-branch-management';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|