cloud-ide-shared 1.0.37 → 1.0.38
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-shared.mjs +17 -1
- package/fesm2022/cloud-ide-shared.mjs.map +1 -1
- package/index.d.ts +32 -3
- package/package.json +1 -1
|
@@ -145,6 +145,22 @@ const COUNTRY_SERVICE_TOKEN = new InjectionToken('CideCoreCountryService');
|
|
|
145
145
|
*/
|
|
146
146
|
const NATIONALITY_SERVICE_TOKEN = new InjectionToken('CideCoreNationalityService');
|
|
147
147
|
|
|
148
|
+
/**
|
|
149
|
+
* Injection token for Currency Service (CideCoreCurrencyService)
|
|
150
|
+
* Used to provide and inject currency service implementations
|
|
151
|
+
* This enables dependency injection with interface-based contracts
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```typescript
|
|
155
|
+
* // In app.config.ts
|
|
156
|
+
* { provide: CURRENCY_SERVICE_TOKEN, useExisting: CideCoreCurrencyService }
|
|
157
|
+
*
|
|
158
|
+
* // In component
|
|
159
|
+
* private currencyService = inject(CURRENCY_SERVICE_TOKEN) as ICurrencyService;
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
const CURRENCY_SERVICE_TOKEN = new InjectionToken('CideCoreCurrencyService');
|
|
163
|
+
|
|
148
164
|
/**
|
|
149
165
|
* Injection token for Class Program Master Service (CideCoreClassProgramMasterService)
|
|
150
166
|
* Used to provide and inject class program master service implementations
|
|
@@ -2032,5 +2048,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
2032
2048
|
* Generated bundle index. Do not edit.
|
|
2033
2049
|
*/
|
|
2034
2050
|
|
|
2035
|
-
export { ACADEMIC_YEAR_SERVICE_TOKEN, APP_STATE_SERVICE_TOKEN, AUTH_SERVICE_TOKEN, CLASS_PROGRAM_MASTER_SERVICE_TOKEN, COUNTRY_SERVICE_TOKEN, CideCoreGeneralMasterService, CideCoreGeneralMasterTypeService, CideSharedOrgStructureComponent, CideSharedProgramSectionSelectorComponent, CloudIdeShared, ENTITY_SERVICE_TOKEN, FEE_DETAILS_VIEWER_COMPONENT_TOKEN, FEE_PAYMENT_SERVICE_TOKEN, FEE_STRUCTURE_SERVICE_TOKEN, FINANCIAL_YEAR_SERVICE_TOKEN, FeeDetailsViewerWrapperComponent, NATIONALITY_SERVICE_TOKEN, PIN_CODE_SERVICE_TOKEN, PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN, PROGRAM_TERM_SECTION_SERVICE_TOKEN, ProgramSectionSelectorWrapperComponent, SharedObjectIdService, USER_SERVICE_TOKEN, authGuard };
|
|
2051
|
+
export { ACADEMIC_YEAR_SERVICE_TOKEN, APP_STATE_SERVICE_TOKEN, AUTH_SERVICE_TOKEN, CLASS_PROGRAM_MASTER_SERVICE_TOKEN, COUNTRY_SERVICE_TOKEN, CURRENCY_SERVICE_TOKEN, CideCoreGeneralMasterService, CideCoreGeneralMasterTypeService, CideSharedOrgStructureComponent, CideSharedProgramSectionSelectorComponent, CloudIdeShared, ENTITY_SERVICE_TOKEN, FEE_DETAILS_VIEWER_COMPONENT_TOKEN, FEE_PAYMENT_SERVICE_TOKEN, FEE_STRUCTURE_SERVICE_TOKEN, FINANCIAL_YEAR_SERVICE_TOKEN, FeeDetailsViewerWrapperComponent, NATIONALITY_SERVICE_TOKEN, PIN_CODE_SERVICE_TOKEN, PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN, PROGRAM_TERM_SECTION_SERVICE_TOKEN, ProgramSectionSelectorWrapperComponent, SharedObjectIdService, USER_SERVICE_TOKEN, authGuard };
|
|
2036
2052
|
//# sourceMappingURL=cloud-ide-shared.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-shared.mjs","sources":["../../../projects/cloud-ide-shared/src/lib/cloud-ide-shared.ts","../../../projects/cloud-ide-shared/src/lib/services/auth.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/guards/auth.guard.ts","../../../projects/cloud-ide-shared/src/lib/services/entity.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/pin-code.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/country.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/nationality.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/class-program-master.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/program-term-section.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/shared-object-id.service.ts","../../../projects/cloud-ide-shared/src/lib/services/general-master-type.service.ts","../../../projects/cloud-ide-shared/src/lib/services/general-master.service.ts","../../../projects/cloud-ide-shared/src/lib/services/user.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/year-services.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/fee.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/components/org-structure/org-structure.component.ts","../../../projects/cloud-ide-shared/src/lib/components/org-structure/org-structure.component.html","../../../projects/cloud-ide-shared/src/lib/components/program-section-selector/program-section-selector.component.ts","../../../projects/cloud-ide-shared/src/lib/components/program-section-selector/program-section-selector.component.html","../../../projects/cloud-ide-shared/src/lib/services/fee-details-viewer.component.token.ts","../../../projects/cloud-ide-shared/src/lib/components/fee-details-viewer-wrapper/fee-details-viewer-wrapper.component.ts","../../../projects/cloud-ide-shared/src/lib/services/program-section-selector.component.token.ts","../../../projects/cloud-ide-shared/src/lib/components/program-section-selector-wrapper/program-section-selector-wrapper.component.ts","../../../projects/cloud-ide-shared/src/public-api.ts","../../../projects/cloud-ide-shared/src/cloud-ide-shared.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-cloud-ide-shared',\r\n imports: [],\r\n template: `\r\n <p>\r\n cloud-ide-shared works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class CloudIdeShared {\r\n\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n// Interface for auth service to avoid circular dependency\r\nexport interface IAuthService {\r\n isAuthenticated(): boolean;\r\n isTokenExpired(): boolean;\r\n signOut(): void;\r\n refreshAuthState(): void;\r\n}\r\n\r\n// Interface for app state service to avoid circular dependency\r\nexport interface IAppStateService {\r\n isUserAuthenticated(): boolean;\r\n refreshFromLocalStorage(): void;\r\n}\r\n\r\n/**\r\n * Injection token for Auth Service (CloudIdeAuthService)\r\n * Used to provide and inject authentication service implementations\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: AUTH_SERVICE_TOKEN, useExisting: CloudIdeAuthService }\r\n * \r\n * // In component\r\n * private authService = inject(AUTH_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const AUTH_SERVICE_TOKEN = new InjectionToken<IAuthService>('CloudIdeAuthService');\r\n\r\n/**\r\n * Injection token for App State Service (AppStateHelperService)\r\n * Used to provide and inject app state service implementations\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: APP_STATE_SERVICE_TOKEN, useExisting: AppStateHelperService }\r\n * \r\n * // In component\r\n * private appStateService = inject(APP_STATE_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const APP_STATE_SERVICE_TOKEN = new InjectionToken<IAppStateService>('AppStateHelperService');\r\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { IAuthService, AUTH_SERVICE_TOKEN, IAppStateService, APP_STATE_SERVICE_TOKEN } from '../services/auth.service.interface';\n\nexport const authGuard: CanActivateFn = (route, state) => {\n const authService = inject(AUTH_SERVICE_TOKEN) as IAuthService;\n const appState = inject(APP_STATE_SERVICE_TOKEN) as IAppStateService;\n const router = inject(Router);\n \n // Check if user is authenticated using current state (without refreshing first)\n const isAuthenticated = appState.isUserAuthenticated() && !authService.isTokenExpired();\n \n // Defer state refresh to next change detection cycle to avoid ExpressionChangedAfterItHasBeenCheckedError\n Promise.resolve().then(() => {\n // Refresh auth state to make sure it's current\n authService.refreshAuthState();\n \n // Refresh app state from localStorage to ensure synchronization\n appState.refreshFromLocalStorage();\n });\n \n if (isAuthenticated) {\n return true;\n }\n \n // Redirect to login page with the intended destination\n router.navigate(['/auth/sign-in'], { \n queryParams: { returnUrl: state.url }\n });\n \n return false;\n};\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n entityControllerResponse, \r\n MEntity,\r\n CoreSystemEntitySaveUpdatePayload,\r\n entityByIdControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Entity Management Service\r\n * This interface defines the contract for entity management operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IEntityService {\r\n /**\r\n * Get list of entities\r\n * @param body - Query parameters for filtering/pagination\r\n * @returns Observable of entity list response\r\n */\r\n getEntityList(body: MEntity): Observable<entityControllerResponse>;\r\n\r\n /**\r\n * Get entity by ID\r\n * @param entityId - ID of the entity to retrieve\r\n * @returns Observable of the entity data\r\n */\r\n getEntityById(entityId: string): Observable<entityByIdControllerResponse>;\r\n\r\n /**\r\n * Save or update entity data\r\n * @param data - Entity data to save/update\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateEntity(data: CoreSystemEntitySaveUpdatePayload): Observable<entityControllerResponse>;\r\n\r\n /**\r\n * Delete entity by ID\r\n * @param entityId - ID of the entity to delete\r\n * @returns Observable of delete response\r\n */\r\n deleteEntity(entityId: string): Observable<entityControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Entity Management Service (CideCoreEntityManagementService)\r\n * Used to provide and inject entity service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: ENTITY_SERVICE_TOKEN, useExisting: CideCoreEntityManagementService }\r\n * \r\n * // In component\r\n * private entityService = inject(ENTITY_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const ENTITY_SERVICE_TOKEN = new InjectionToken<IEntityService>('CideCoreEntityManagementService');\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n MPinCodeSelect,\r\n pinCodeSelectControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Pin Code Service\r\n * This interface defines the contract for pin code (postal code) operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IPinCodeService {\r\n /**\r\n * Get pin code data from API\r\n * @param body - MPinCodeSelect payload with sypin_pincode\r\n * @returns Observable of pin code select response\r\n */\r\n getPinCodeData(body: MPinCodeSelect): Observable<pinCodeSelectControllerResponse>;\r\n\r\n /**\r\n * Get pin code data by specific pin code\r\n * @param pincode - The pin code to search for\r\n * @returns Observable of pin code data\r\n */\r\n getPinCodeByCode(pincode: string): Observable<pinCodeSelectControllerResponse>;\r\n\r\n /**\r\n * Get all postal codes with default parameters\r\n * @returns Observable of all postal codes\r\n */\r\n getAllPostalCodes(): Observable<pinCodeSelectControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Pin Code Service (CideCorePinCodeService)\r\n * Used to provide and inject pin code service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: PIN_CODE_SERVICE_TOKEN, useExisting: CideCorePinCodeService }\r\n * \r\n * // In component\r\n * private pinCodeService = inject(PIN_CODE_SERVICE_TOKEN) as IPinCodeService;\r\n * ```\r\n */\r\nexport const PIN_CODE_SERVICE_TOKEN = new InjectionToken<IPinCodeService>('CideCorePinCodeService');\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n MSyctrList,\r\n countryListControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Country Service\r\n * This interface defines the contract for country operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface ICountryService {\r\n /**\r\n * Get all countries from API\r\n * @param body - MSyctrList payload for filtering\r\n * @returns Observable of country list response\r\n */\r\n getAllCountries(body: Partial<MSyctrList>): Observable<countryListControllerResponse>;\r\n\r\n /**\r\n * Get countries with default parameters\r\n * @returns Observable of country list response\r\n */\r\n getCountries(): Observable<countryListControllerResponse>;\r\n\r\n /**\r\n * Search countries with specific filters\r\n * @param filters - Search criteria for countries\r\n * @returns Observable of filtered country list\r\n */\r\n searchCountries(filters: Partial<MSyctrList>): Observable<countryListControllerResponse>;\r\n\r\n /**\r\n * Get country by ID\r\n * @param countryId - ID of the country to retrieve\r\n * @returns Observable of country data\r\n */\r\n getCountryById(countryId: string): Observable<countryListControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Country Service (CideCoreCountryService)\r\n * Used to provide and inject country service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: COUNTRY_SERVICE_TOKEN, useExisting: CideCoreCountryService }\r\n * \r\n * // In component\r\n * private countryService = inject(COUNTRY_SERVICE_TOKEN) as ICountryService;\r\n * ```\r\n */\r\nexport const COUNTRY_SERVICE_TOKEN = new InjectionToken<ICountryService>('CideCoreCountryService');\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n CoreNationalityListPayload,\r\n nationalityListControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Nationality Service\r\n * This interface defines the contract for nationality operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface INationalityService {\r\n /**\r\n * Get all nationalities from API\r\n * @param body - CoreNationalityListPayload for filtering\r\n * @returns Observable of nationality list response\r\n */\r\n getAllNationalities(body: Partial<CoreNationalityListPayload>): Observable<nationalityListControllerResponse>;\r\n\r\n /**\r\n * Get nationalities with default parameters\r\n * @returns Observable of nationality list response\r\n */\r\n getNationalities(): Observable<nationalityListControllerResponse>;\r\n\r\n /**\r\n * Search nationalities with specific filters\r\n * @param filters - Search criteria for nationalities\r\n * @returns Observable of filtered nationality list\r\n */\r\n searchNationalities(filters: Partial<CoreNationalityListPayload>): Observable<nationalityListControllerResponse>;\r\n\r\n /**\r\n * Get nationality by ID\r\n * @param nationalityId - ID of the nationality to retrieve\r\n * @returns Observable of nationality data\r\n */\r\n getNationalityById(nationalityId: string): Observable<nationalityListControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Nationality Service (CideCoreNationalityService)\r\n * Used to provide and inject nationality service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: NATIONALITY_SERVICE_TOKEN, useExisting: CideCoreNationalityService }\r\n * \r\n * // In component\r\n * private nationalityService = inject(NATIONALITY_SERVICE_TOKEN) as INationalityService;\r\n * ```\r\n */\r\nexport const NATIONALITY_SERVICE_TOKEN = new InjectionToken<INationalityService>('CideCoreNationalityService');\r\n\r\n\r\n\r\n\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n MClassProgramMaster,\r\n classProgramMasterControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Class Program Master Service\r\n * This interface defines the contract for class program master operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IClassProgramMasterService {\r\n /**\r\n * Get all class program masters from API\r\n * @param body - MClassProgramMaster for filtering\r\n * @returns Observable of class program master list response\r\n */\r\n getClassProgramMasterList(body: Partial<MClassProgramMaster>): Observable<classProgramMasterControllerResponse>;\r\n\r\n /**\r\n * Get class program masters with default parameters\r\n * @returns Observable of class program master list response\r\n */\r\n getClassProgramMasters(): Observable<classProgramMasterControllerResponse>;\r\n\r\n /**\r\n * Search class program masters with specific filters\r\n * @param filters - Search criteria for class program masters\r\n * @returns Observable of filtered class program master list\r\n */\r\n searchClassProgramMasters(filters: Partial<MClassProgramMaster>): Observable<classProgramMasterControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Class Program Master Service (CideCoreClassProgramMasterService)\r\n * Used to provide and inject class program master service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: CLASS_PROGRAM_MASTER_SERVICE_TOKEN, useExisting: CideCoreClassProgramMasterService }\r\n * \r\n * // In component\r\n * private classProgramMasterService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN) as IClassProgramMasterService;\r\n * ```\r\n */\r\nexport const CLASS_PROGRAM_MASTER_SERVICE_TOKEN = new InjectionToken<IClassProgramMasterService>('CideCoreClassProgramMasterService');\r\n\r\n\r\n\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n MPrgTrmSection,\r\n prgTrmSectionControllerResponse,\r\n prgTrmSectionByIdControllerResponse,\r\n MPrgTrmSectionGetByIdPayload,\r\n prgTrmSectionInsertUpdateControllerResponse,\r\n MPrgTrmSectionInsertUpdatePayload,\r\n prgTrmSectionDeleteControllerResponse,\r\n MPrgTrmSectionDeletePayload,\r\n prgTrmSectionToggleStatusControllerResponse,\r\n MPrgTrmSectionToggleStatusPayload,\r\n prgTrmSectionToggleLockControllerResponse,\r\n MPrgTrmSectionToggleLockPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Program Term Section Service\r\n * This interface defines the contract for program term section operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IProgramTermSectionService {\r\n /**\r\n * Get list of program term sections from API\r\n * @param payload - MPrgTrmSection for filtering\r\n * @returns Observable of program term section list response\r\n */\r\n getProgramTermSectionList(payload: MPrgTrmSection): Observable<prgTrmSectionControllerResponse>;\r\n\r\n /**\r\n * Get program term section by ID\r\n * @param payload - Program term section ID payload\r\n * @returns Observable of program term section data\r\n */\r\n getProgramTermSectionById(payload: MPrgTrmSectionGetByIdPayload): Observable<prgTrmSectionByIdControllerResponse>;\r\n\r\n /**\r\n * Create or update program term section\r\n * @param data - Program term section data to save\r\n * @returns Observable of the save response\r\n */\r\n saveProgramTermSection(data: MPrgTrmSectionInsertUpdatePayload): Observable<prgTrmSectionInsertUpdateControllerResponse>;\r\n\r\n /**\r\n * Delete program term section\r\n * @param payload - Program term section delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteProgramTermSection(payload: MPrgTrmSectionDeletePayload): Observable<prgTrmSectionDeleteControllerResponse>;\r\n\r\n /**\r\n * Toggle program term section status (active/inactive)\r\n * @param payload - Program term section toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleProgramTermSectionStatus(payload: MPrgTrmSectionToggleStatusPayload): Observable<prgTrmSectionToggleStatusControllerResponse>;\r\n\r\n /**\r\n * Toggle program term section lock status\r\n * @param payload - Program term section toggle lock payload\r\n * @returns Observable of the toggle lock response\r\n */\r\n toggleProgramTermSectionLock(payload: MPrgTrmSectionToggleLockPayload): Observable<prgTrmSectionToggleLockControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Program Term Section Service (CideLytProgramTermSectionService)\r\n * Used to provide and inject program term section service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: PROGRAM_TERM_SECTION_SERVICE_TOKEN, useExisting: CideLytProgramTermSectionService }\r\n * \r\n * // In component\r\n * private programTermSectionService = inject(PROGRAM_TERM_SECTION_SERVICE_TOKEN) as IProgramTermSectionService;\r\n * ```\r\n */\r\nexport const PROGRAM_TERM_SECTION_SERVICE_TOKEN = new InjectionToken<IProgramTermSectionService>('CideLytProgramTermSectionService');\r\n\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CideEleFileManagerService } from 'cloud-ide-element';\r\nimport { mongooseObjectIdCreateControllerResponse } from 'cloud-ide-element';\r\nimport { cidePath, commonRoutesUrl, hostManagerRoutesUrl } from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Shared Object ID Generation Service\r\n * \r\n * This service provides a consistent interface for generating Object IDs\r\n * across all libraries. It internally uses the FileManagerService but\r\n * provides a standardized API that can be used throughout the application.\r\n * \r\n * Benefits:\r\n * - Consistent interface across all libraries\r\n * - Centralized Object ID generation logic\r\n * - Easy to maintain and update\r\n * - Prevents confusion with different Object ID generation methods\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SharedObjectIdService {\r\n private fileManagerService = inject(CideEleFileManagerService);\r\n\r\n /**\r\n * Generate a new Object ID\r\n * \r\n * This method internally uses the FileManagerService to generate\r\n * a unique Object ID that can be used for any entity in the system.\r\n * \r\n * @returns Observable<mongooseObjectIdCreateControllerResponse> - The generated Object ID response\r\n * \r\n * @example\r\n * ```typescript\r\n * // Generate Object ID for a new user\r\n * this.sharedObjectIdService.generateObjectId().subscribe({\r\n * next: (response) => {\r\n * if (response.success && response.data?.objectId) {\r\n * const newUserId = response.data.objectId;\r\n * // Use the Object ID for creating a new user\r\n * }\r\n * },\r\n * error: (error) => {\r\n * console.error('Failed to generate Object ID:', error);\r\n * }\r\n * });\r\n * ```\r\n */\r\n generateObjectId(): Observable<mongooseObjectIdCreateControllerResponse> {\r\n console.log('🆔 [SharedObjectIdService] Generating Object ID via FileManagerService');\r\n this.fileManagerService.setObjectIdEndpoint(cidePath.join([hostManagerRoutesUrl.cideSuiteHost, commonRoutesUrl?.module, commonRoutesUrl?.generateObjectId]));\r\n \r\n return this.fileManagerService.generateObjectId();\r\n }\r\n\r\n /**\r\n * Generate Object ID as Promise\r\n * \r\n * Convenience method that converts the Observable to a Promise\r\n * for easier use with async/await syntax.\r\n * \r\n * @returns Promise<string> - The generated Object ID string\r\n * \r\n * @example\r\n * ```typescript\r\n * // Generate Object ID using async/await\r\n * try {\r\n * const objectId = await this.sharedObjectIdService.generateObjectIdAsync();\r\n * console.log('Generated Object ID:', objectId);\r\n * } catch (error) {\r\n * console.error('Failed to generate Object ID:', error);\r\n * }\r\n * ```\r\n */\r\n async generateObjectIdAsync(): Promise<string> {\r\n try {\r\n const response = await this.generateObjectId().toPromise();\r\n if (response?.success && response?.data?.objectId) {\r\n console.log('🆔 [SharedObjectIdService] Generated Object ID:', response.data.objectId);\r\n return response.data.objectId;\r\n } else {\r\n throw new Error('Failed to generate Object ID: Invalid response');\r\n }\r\n } catch (error) {\r\n console.error('❌ [SharedObjectIdService] Error generating Object ID:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Generate multiple Object IDs at once\r\n * \r\n * Useful when you need multiple Object IDs for batch operations.\r\n * \r\n * @param count - Number of Object IDs to generate\r\n * @returns Observable<string[]> - Array of generated Object IDs\r\n * \r\n * @example\r\n * ```typescript\r\n * // Generate 5 Object IDs for batch creation\r\n * this.sharedObjectIdService.generateMultipleObjectIds(5).subscribe({\r\n * next: (objectIds) => {\r\n * console.log('Generated Object IDs:', objectIds);\r\n * // Use the Object IDs for batch operations\r\n * }\r\n * });\r\n * ```\r\n */\r\n generateMultipleObjectIds(count: number): Observable<string[]> {\r\n console.log(`🆔 [SharedObjectIdService] Generating ${count} Object IDs`);\r\n \r\n const requests = Array.from({ length: count }, () => this.generateObjectId());\r\n \r\n return new Observable(observer => {\r\n let completed = 0;\r\n const objectIds: string[] = [];\r\n \r\n requests.forEach((request, index) => {\r\n request.subscribe({\r\n next: (response) => {\r\n if (response?.success && response?.data?.objectId) {\r\n objectIds[index] = response.data.objectId;\r\n } else {\r\n observer.error(new Error(`Failed to generate Object ID at index ${index}`));\r\n return;\r\n }\r\n \r\n completed++;\r\n if (completed === count) {\r\n observer.next(objectIds);\r\n observer.complete();\r\n }\r\n },\r\n error: (error) => {\r\n observer.error(error);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Generate Object ID with validation\r\n * \r\n * Generates an Object ID and validates it before returning.\r\n * \r\n * @param validator - Optional validation function\r\n * @returns Observable<string> - Validated Object ID\r\n * \r\n * @example\r\n * ```typescript\r\n * // Generate Object ID with custom validation\r\n * const validator = (id: string) => id.length === 24; // MongoDB ObjectId length\r\n * this.sharedObjectIdService.generateObjectIdWithValidation(validator).subscribe({\r\n * next: (validatedId) => {\r\n * console.log('Validated Object ID:', validatedId);\r\n * }\r\n * });\r\n * ```\r\n */\r\n generateObjectIdWithValidation(validator?: (id: string) => boolean): Observable<string> {\r\n return new Observable(observer => {\r\n this.generateObjectId().subscribe({\r\n next: (response) => {\r\n if (response?.success && response?.data?.objectId) {\r\n const objectId = response.data.objectId;\r\n \r\n // Apply validation if provided\r\n if (validator && !validator(objectId)) {\r\n observer.error(new Error('Generated Object ID failed validation'));\r\n return;\r\n }\r\n \r\n observer.next(objectId);\r\n observer.complete();\r\n } else {\r\n observer.error(new Error('Failed to generate Object ID: Invalid response'));\r\n }\r\n },\r\n error: (error) => {\r\n observer.error(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Check if a string is a valid Object ID format\r\n * \r\n * @param id - String to validate\r\n * @returns boolean - True if valid Object ID format\r\n * \r\n * @example\r\n * ```typescript\r\n * const isValid = this.sharedObjectIdService.isValidObjectId('507f1f77bcf86cd799439011');\r\n * console.log('Is valid Object ID:', isValid); // true\r\n * ```\r\n */\r\n isValidObjectId(id: string): boolean {\r\n // MongoDB ObjectId is 24 characters long and contains only hexadecimal characters\r\n const objectIdRegex = /^[0-9a-fA-F]{24}$/;\r\n return objectIdRegex.test(id);\r\n }\r\n\r\n /**\r\n * Get Object ID generation statistics\r\n * \r\n * Returns information about Object ID generation for monitoring purposes.\r\n * \r\n * @returns Object with statistics\r\n */\r\n getGenerationStats(): { serviceName: string; description: string; internalService: string } {\r\n return {\r\n serviceName: 'SharedObjectIdService',\r\n description: 'Centralized Object ID generation service',\r\n internalService: 'CideEleFileManagerService'\r\n };\r\n }\r\n}\r\n\r\n\r\n\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { \r\n cidePath,\r\n coreRoutesUrl,\r\n generateStringFromObject,\r\n hostManagerRoutesUrl,\r\n generalMasterTypeListControllerResponse,\r\n generalMasterTypeByIdControllerResponse,\r\n generalMasterTypeInsertUpdateControllerResponse,\r\n generalMasterTypeDeleteControllerResponse,\r\n generalMasterTypeToggleStatusControllerResponse,\r\n MGeneralMasterType,\r\n ICoreSygmt\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreGeneralMasterTypeService {\r\n private http = inject(HttpClient);\r\n private generalMasterTypeListSubject = new BehaviorSubject<ICoreSygmt[]>([]);\r\n public generalMasterTypeList$ = this.generalMasterTypeListSubject.asObservable();\r\n\r\n constructor() {\r\n console.log('CideCoreGeneralMasterTypeService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get general master type list from API\r\n */\r\n getTypeList(body: MGeneralMasterType): Observable<generalMasterTypeListControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<generalMasterTypeListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]))\r\n .pipe(\r\n tap((response: generalMasterTypeListControllerResponse) => {\r\n if (response?.success) {\r\n this.generalMasterTypeListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('CideCoreGeneralMasterTypeService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get general master type list from cache (if available)\r\n */\r\n getTypeListFromCache(): ICoreSygmt[] {\r\n return this.generalMasterTypeListSubject.value;\r\n }\r\n\r\n /**\r\n * Create or update general master type\r\n * POST ${coreRoutesUrl?.generalMasterType} - payload: IGeneralMasterTypeCreateUpdatePayload, response: generalMasterTypeInsertUpdateControllerResponse\r\n * If type._id exists, it will update; otherwise, it will create a new type\r\n */\r\n saveType(type: ICoreSygmt): Observable<generalMasterTypeInsertUpdateControllerResponse> {\r\n const isUpdate = !!type._id;\r\n console.log(`${isUpdate ? 'Updating' : 'Creating'} general master type:`, type);\r\n \r\n // Create proper payload - backend will determine create vs update based on _id presence\r\n const payload: ICoreSygmt = {\r\n ...(type._id && { _id: type._id }), // Only include _id if it exists\r\n sygmt_code: type.sygmt_code,\r\n sygmt_title: type.sygmt_title,\r\n sygmt_desc: type.sygmt_desc,\r\n sygmt_isactive: type.sygmt_isactive,\r\n sygmt_configuration: type.sygmt_configuration,\r\n sygmt_id_sygmt: type.sygmt_id_sygmt\r\n };\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType]);\r\n return this.http.post<generalMasterTypeInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: generalMasterTypeInsertUpdateControllerResponse) => {\r\n if (response.success) {\r\n this.refreshTypeList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get general master type by ID\r\n * GET ${coreRoutesUrl?.generalMasterType}/byId/:query - payload: { sygmt_id: string }, response: generalMasterTypeByIdControllerResponse\r\n */\r\n getTypeById(id: string): Observable<generalMasterTypeByIdControllerResponse> {\r\n console.log('Getting general master type by ID:', id);\r\n const payload = { sygmt_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'byId', query]);\r\n return this.http.get<generalMasterTypeByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete general master type\r\n * DELETE ${coreRoutesUrl?.generalMasterType}/:query - payload: { sygmt_id: string }, response: generalMasterTypeDeleteControllerResponse\r\n */\r\n deleteType(id: string): Observable<generalMasterTypeDeleteControllerResponse> {\r\n const payload = { sygmt_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);\r\n return this.http.delete<generalMasterTypeDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: generalMasterTypeDeleteControllerResponse) => {\r\n if (response.success) {\r\n this.refreshTypeList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle general master type active status\r\n */\r\n toggleTypeStatus(id: string): Observable<generalMasterTypeToggleStatusControllerResponse> {\r\n console.log('Toggling general master type status:', id);\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);\r\n return this.http.put<generalMasterTypeToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: generalMasterTypeToggleStatusControllerResponse) => {\r\n if (response.success) {\r\n this.refreshTypeList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Check if type code exists\r\n */\r\n checkTypeCodeExists(code: string, excludeId?: string): Observable<{ success: boolean; message: string; exists: boolean }> {\r\n const payload: Record<string, string> = { code };\r\n if (excludeId) {\r\n payload['excludeId'] = excludeId;\r\n }\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'checkCodeExists', query]);\r\n return this.http.get<{ success: boolean; message: string; exists: boolean }>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Refresh general master type list from server\r\n */\r\n private refreshTypeList(): void {\r\n const defaultBody: MGeneralMasterType = {};\r\n this.getTypeList(defaultBody).subscribe({\r\n next: () => {\r\n console.log('General master type list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing general master type list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('General Master Type Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { \r\n cidePath,\r\n coreRoutesUrl,\r\n generateStringFromObject,\r\n hostManagerRoutesUrl,\r\n generalMasterListControllerResponse,\r\n generalMasterByIdControllerResponse,\r\n generalMasterInsertUpdateControllerResponse,\r\n generalMasterDeleteControllerResponse,\r\n generalMasterToggleStatusControllerResponse,\r\n ICoreSygms,\r\n IGeneralMasterListRequest,\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreGeneralMasterService {\r\n private http = inject(HttpClient);\r\n private generalMasterListSubject = new BehaviorSubject<ICoreSygms[]>([]);\r\n public generalMasterList$ = this.generalMasterListSubject.asObservable();\r\n\r\n constructor() {\r\n console.log('CideCoreGeneralMasterService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get general master list from API\r\n */\r\n getMasterList(payload: IGeneralMasterListRequest): Observable<generalMasterListControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n return this.http?.get<generalMasterListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]))\r\n .pipe(\r\n tap((response: generalMasterListControllerResponse) => {\r\n if (response?.success) {\r\n this.generalMasterListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('CideCoreGeneralMasterService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get general master list from cache (if available)\r\n */\r\n getMasterListFromCache(): ICoreSygms[] {\r\n return this.generalMasterListSubject.value;\r\n }\r\n\r\n /**\r\n * Save general master (create or update)\r\n * POST ${coreRoutesUrl?.generalMaster} - payload: ICoreSygms, response: generalMasterInsertUpdateControllerResponse\r\n */\r\n saveMaster(master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\r\n const isUpdate = !!master._id;\r\n console.log(`${isUpdate ? 'Updating' : 'Creating'} general master:`, master);\r\n \r\n // Create proper payload\r\n const payload: ICoreSygms = {\r\n ...(master._id && { _id: master._id }), // Only include _id if it exists\r\n sygms_code: master.sygms_code,\r\n sygms_id_sygmt: master.sygms_id_sygmt,\r\n sygms_title: master.sygms_title,\r\n sygms_desc: master.sygms_desc,\r\n sygms_isactive: master.sygms_isactive,\r\n sygms_id_sygms: master.sygms_id_sygms,\r\n sygms_configuration: master.sygms_configuration,\r\n sygms_entity_id_syen: master.sygms_entity_id_syen\r\n };\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster]);\r\n return this.http.post<generalMasterInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: generalMasterInsertUpdateControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMasterList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Create new general master (backward compatibility)\r\n */\r\n createMaster(master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\r\n return this.saveMaster(master);\r\n }\r\n\r\n /**\r\n * Update existing general master (backward compatibility)\r\n */\r\n updateMaster(id: string, master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\r\n return this.saveMaster({ ...master, _id: id });\r\n }\r\n\r\n /**\r\n * Get general master by ID\r\n * GET ${coreRoutesUrl?.generalMaster}/byId/:query - payload: { sygms_id: string }, response: generalMasterByIdControllerResponse\r\n */\r\n getMasterById(id: string): Observable<generalMasterByIdControllerResponse> {\r\n console.log('Getting general master by ID:', id);\r\n const payload = { sygms_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'byId', query]);\r\n return this.http.get<generalMasterByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete general master\r\n * DELETE ${coreRoutesUrl?.generalMaster}/:query - payload: { sygms_id: string }, response: generalMasterDeleteControllerResponse\r\n */\r\n deleteMaster(id: string): Observable<generalMasterDeleteControllerResponse> {\r\n const payload = { sygms_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);\r\n return this.http.delete<generalMasterDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: generalMasterDeleteControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMasterList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle general master active status\r\n */\r\n toggleMasterStatus(id: string): Observable<generalMasterToggleStatusControllerResponse> {\r\n console.log('Toggling general master status:', id);\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);\r\n return this.http.put<generalMasterToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: generalMasterToggleStatusControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMasterList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Check if master code exists\r\n */\r\n checkMasterCodeExists(code: string, typeId: string, excludeId?: string): Observable<{ success: boolean; message: string; exists: boolean }> {\r\n const payload: Record<string, string> = { code, typeId };\r\n if (excludeId) {\r\n payload['excludeId'] = excludeId;\r\n }\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'checkCodeExists', query]);\r\n return this.http.get<{ success: boolean; message: string; exists: boolean }>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Refresh general master list from server\r\n */\r\n private refreshMasterList(): void {\r\n const defaultPayload: IGeneralMasterListRequest = {};\r\n this.getMasterList(defaultPayload).subscribe({\r\n next: () => {\r\n console.log('General master list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing general master list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('General Master Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n}\r\n\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AuthUserMstListPayload, authUserMstListControllerResponse, AuthUserMst } from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * User Master Service Interface\r\n * Defines the contract for user management operations\r\n */\r\nexport interface IUserMasterService {\r\n /**\r\n * Get list of users with filtering and pagination\r\n * @param payload - User list query parameters\r\n * @returns Observable of user list response\r\n */\r\n getUserList(payload: AuthUserMstListPayload): Observable<authUserMstListControllerResponse>;\r\n\r\n /**\r\n * Save or update user master data\r\n * @param data - User data to save\r\n * @returns Observable of save response\r\n */\r\n saveUpdateUserMaster(data: any): Observable<any>;\r\n\r\n /**\r\n * Get user master by ID\r\n * @param payload - User ID payload\r\n * @returns Observable of user data\r\n */\r\n getUserMasterById(payload: any): Observable<any>;\r\n\r\n /**\r\n * Delete user master\r\n * @param userId - User ID to delete\r\n * @returns Observable of delete response\r\n */\r\n deleteUserMaster(userId: string): Observable<any>;\r\n\r\n /**\r\n * Toggle user status (active/inactive)\r\n * @param userId - User ID to toggle\r\n * @returns Observable of toggle response\r\n */\r\n toggleUserStatus(userId: string): Observable<any>;\r\n\r\n /**\r\n * Delete user\r\n * @param userId - User ID to delete\r\n * @returns Observable of delete response\r\n */\r\n deleteUser(userId: string): Observable<any>;\r\n\r\n /**\r\n * Generate Object ID for new user\r\n * @returns Observable of Object ID response\r\n */\r\n generateObjectId(): Observable<any>;\r\n}\r\n\r\n/**\r\n * Injection token for User Master Service (CideCoreUserMasterService)\r\n * Used to provide and inject user master service implementations\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: USER_SERVICE_TOKEN, useExisting: CideCoreUserMasterService }\r\n * \r\n * // In component\r\n * private userService = inject(USER_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const USER_SERVICE_TOKEN = new InjectionToken<IUserMasterService>('CideCoreUserMasterService');\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type {\r\n financialYearControllerResponse,\r\n MFinancialYear,\r\n financialYearByIdControllerResponse,\r\n MFinancialYearGetByIdPayload,\r\n financialYearInsertUpdateControllerResponse,\r\n MFinancialYearInsertUpdatePayload,\r\n financialYearDeleteControllerResponse,\r\n MFinancialYearDeletePayload,\r\n financialYearToggleStatusControllerResponse,\r\n MFinancialYearToggleStatusPayload,\r\n academicYearControllerResponse,\r\n MAcademicYear,\r\n academicYearByIdControllerResponse,\r\n MAcademicYearGetByIdPayload,\r\n academicYearInsertUpdateControllerResponse,\r\n MAcademicYearInsertUpdatePayload,\r\n academicYearDeleteControllerResponse,\r\n MAcademicYearDeletePayload,\r\n academicYearToggleStatusControllerResponse,\r\n MAcademicYearToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Financial Year Service\r\n * This interface defines the contract for financial year operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IFinancialYearService {\r\n /**\r\n * Get list of financial years\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of financial year list response\r\n */\r\n getFinancialYearList(payload: MFinancialYear): Observable<financialYearControllerResponse>;\r\n\r\n /**\r\n * Get financial year by ID\r\n * @param payload - Financial year ID payload\r\n * @returns Observable of financial year data\r\n */\r\n getFinancialYearById(payload: MFinancialYearGetByIdPayload): Observable<financialYearByIdControllerResponse>;\r\n\r\n /**\r\n * Create or update financial year\r\n * @param data - Financial year data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateFinancialYear(data: MFinancialYearInsertUpdatePayload): Observable<financialYearInsertUpdateControllerResponse>;\r\n\r\n /**\r\n * Delete financial year\r\n * @param payload - Financial year delete payload\r\n * @returns Observable of delete response\r\n */\r\n deleteFinancialYear(payload: MFinancialYearDeletePayload): Observable<financialYearDeleteControllerResponse>;\r\n\r\n /**\r\n * Toggle financial year status (active/inactive)\r\n * @param payload - Toggle status payload\r\n * @returns Observable of toggle status response\r\n */\r\n toggleFinancialYearStatus(payload: MFinancialYearToggleStatusPayload): Observable<financialYearToggleStatusControllerResponse>;\r\n}\r\n\r\n/**\r\n * Interface for Academic Year Service\r\n * This interface defines the contract for academic year operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IAcademicYearService {\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\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\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\r\n /**\r\n * Delete academic year\r\n * @param payload - Academic year delete payload\r\n * @returns Observable of delete response\r\n */\r\n deleteAcademicYear(payload: MAcademicYearDeletePayload): Observable<academicYearDeleteControllerResponse>;\r\n\r\n /**\r\n * Toggle academic year status (active/inactive)\r\n * @param payload - Toggle status payload\r\n * @returns Observable of toggle status response\r\n */\r\n toggleAcademicYearStatus(payload: MAcademicYearToggleStatusPayload): Observable<academicYearToggleStatusControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Financial Year Service (CideAccFinancialYearService)\r\n * Used to provide and inject financial year service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: FINANCIAL_YEAR_SERVICE_TOKEN, useExisting: CideAccFinancialYearService }\r\n * \r\n * // In component\r\n * private financialYearService = inject(FINANCIAL_YEAR_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const FINANCIAL_YEAR_SERVICE_TOKEN = new InjectionToken<IFinancialYearService>('CideAccFinancialYearService');\r\n\r\n/**\r\n * Injection token for Academic Year Service (CideLytAcademicYearService)\r\n * Used to provide and inject academic year service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: ACADEMIC_YEAR_SERVICE_TOKEN, useExisting: CideLytAcademicYearService }\r\n * \r\n * // In component\r\n * private academicYearService = inject(ACADEMIC_YEAR_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const ACADEMIC_YEAR_SERVICE_TOKEN = new InjectionToken<IAcademicYearService>('CideLytAcademicYearService');\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type {\r\n feeStructureControllerResponse,\r\n MFeeStructure,\r\n feeStructureByIdControllerResponse,\r\n MFeeStructureGetByIdPayload,\r\n feeStructureInsertUpdateControllerResponse,\r\n MFeeStructureInsertUpdatePayload,\r\n feeStructureDeleteControllerResponse,\r\n MFeeStructureDeletePayload,\r\n feeStructureToggleStatusControllerResponse,\r\n MFeeStructureToggleStatusPayload,\r\n feePaymentControllerResponse,\r\n MFeePayment,\r\n feePaymentByIdControllerResponse,\r\n MFeePaymentGetByIdPayload,\r\n feePaymentInsertUpdateControllerResponse,\r\n MFeePaymentInsertUpdatePayload,\r\n feePaymentDeleteControllerResponse,\r\n MFeePaymentDeletePayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Fee Structure Service\r\n * This interface defines the contract for fee structure operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IFeeStructureService {\r\n /**\r\n * Get list of fee structures\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of fee structure list response\r\n */\r\n getFeeStructureList(payload: MFeeStructure): Observable<feeStructureControllerResponse>;\r\n\r\n /**\r\n * Get fee structure by ID\r\n * @param payload - Fee structure ID payload\r\n * @returns Observable of fee structure data\r\n */\r\n getFeeStructureById(payload: MFeeStructureGetByIdPayload): Observable<feeStructureByIdControllerResponse>;\r\n\r\n /**\r\n * Create or update fee structure\r\n * @param data - Fee structure data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateFeeStructure(data: MFeeStructureInsertUpdatePayload): Observable<feeStructureInsertUpdateControllerResponse>;\r\n\r\n /**\r\n * Delete fee structure\r\n * @param payload - Fee structure delete payload\r\n * @returns Observable of delete response\r\n */\r\n deleteFeeStructure(payload: MFeeStructureDeletePayload): Observable<feeStructureDeleteControllerResponse>;\r\n\r\n /**\r\n * Toggle fee structure status (active/inactive)\r\n * @param payload - Toggle status payload\r\n * @returns Observable of toggle status response\r\n */\r\n toggleFeeStructureStatus(payload: MFeeStructureToggleStatusPayload): Observable<feeStructureToggleStatusControllerResponse>;\r\n}\r\n\r\n/**\r\n * Interface for Fee Payment Service\r\n * This interface defines the contract for fee payment operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IFeePaymentService {\r\n /**\r\n * Get list of fee payments\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of fee payment list response\r\n */\r\n getFeePaymentList(payload: MFeePayment): Observable<feePaymentControllerResponse>;\r\n\r\n /**\r\n * Get fee payment by ID\r\n * @param payload - Fee payment ID payload\r\n * @returns Observable of fee payment data\r\n */\r\n getFeePaymentById(payload: MFeePaymentGetByIdPayload): Observable<feePaymentByIdControllerResponse>;\r\n\r\n /**\r\n * Create or update fee payment\r\n * @param data - Fee payment data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateFeePayment(data: MFeePaymentInsertUpdatePayload): Observable<feePaymentInsertUpdateControllerResponse>;\r\n\r\n /**\r\n * Delete fee payment\r\n * @param payload - Fee payment delete payload\r\n * @returns Observable of delete response\r\n */\r\n deleteFeePayment(payload: MFeePaymentDeletePayload): Observable<feePaymentDeleteControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Fee Structure Service (CideFeeFeeStructureService)\r\n * Used to provide and inject fee structure service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: FEE_STRUCTURE_SERVICE_TOKEN, useExisting: CideFeeFeeStructureService }\r\n * \r\n * // In component\r\n * private feeStructureService = inject(FEE_STRUCTURE_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const FEE_STRUCTURE_SERVICE_TOKEN = new InjectionToken<IFeeStructureService>('CideFeeFeeStructureService');\r\n\r\n/**\r\n * Injection token for Fee Payment Service (CideFeeFeePaymentService)\r\n * Used to provide and inject fee payment service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: FEE_PAYMENT_SERVICE_TOKEN, useExisting: CideFeeFeePaymentService }\r\n * \r\n * // In component\r\n * private feePaymentService = inject(FEE_PAYMENT_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const FEE_PAYMENT_SERVICE_TOKEN = new InjectionToken<IFeePaymentService>('CideFeeFeePaymentService');\r\n\r\n","import { Component, signal, OnInit, inject, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { CideEleButtonComponent, CideIconComponent, CideSpinnerComponent, TooltipDirective } from 'cloud-ide-element';\nimport { entityControllerResponse, MEntity, CoreSystemEntityListResponse } from 'cloud-ide-lms-model';\nimport { IEntityService, ENTITY_SERVICE_TOKEN } from '../../services/entity.service.interface';\n\n@Component({\n selector: 'cide-shared-org-structure',\n imports: [\n CommonModule,\n CideEleButtonComponent,\n CideIconComponent,\n CideSpinnerComponent,\n TooltipDirective\n ],\n templateUrl: './org-structure.component.html',\n styleUrl: './org-structure.component.scss'\n})\nexport class CideSharedOrgStructureComponent implements OnInit {\n // Input parameters for configuration\n allowSwitching = input<boolean>(true); // Allow entity switching (default: true)\n showActions = input<boolean>(true); // Show action buttons (default: true)\n mode = input<'selection' | 'view'>('view'); // Mode: selection or view-only\n\n // Output events\n entityClick = output<CoreSystemEntityListResponse>(); // Emit when entity is clicked\n entitySelect = output<CoreSystemEntityListResponse>(); // Emit when entity is selected for switching\n entityView = output<CoreSystemEntityListResponse>(); // Emit when entity is viewed\n\n private entityService = inject(ENTITY_SERVICE_TOKEN) as IEntityService;\n public router = inject(Router);\n\n // Signals\n loading = signal(false);\n error = signal<string | null>(null);\n orgStructure = signal<CoreSystemEntityListResponse[]>([]);\n\n ngOnInit(): void {\n this.loadOrgStructure();\n }\n\n /**\n * Load organization structure\n */\n loadOrgStructure(): void {\n this.loading.set(true);\n this.error.set(null);\n\n this.entityService.getEntityList({}).subscribe({\n next: (response: entityControllerResponse) => {\n if (response?.success && response?.data) {\n const structure = this.buildOrgStructure(response.data);\n this.orgStructure.set(structure);\n } else {\n this.error.set('Failed to load organization structure');\n }\n this.loading.set(false);\n },\n error: (error: any) => {\n this.error.set('Error loading organization structure');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Build organization structure from flat entity list\n */\n private buildOrgStructure(entities: CoreSystemEntityListResponse[]): CoreSystemEntityListResponse[] {\n const nodeMap = new Map<string, CoreSystemEntityListResponse>();\n const rootNodes: CoreSystemEntityListResponse[] = [];\n\n // First pass: create all nodes\n entities.forEach(entity => {\n const node: CoreSystemEntityListResponse = {\n ...entity,\n children: []\n };\n nodeMap.set(entity._id || '', node);\n });\n\n // Second pass: build hierarchy\n entities.forEach(entity => {\n const node = nodeMap.get(entity._id || '');\n if (node) {\n const parentId = entity.syen_id_syen;\n if (parentId && parentId !== \"\" && nodeMap.has(parentId)) {\n const parent = nodeMap.get(parentId)!;\n parent.children = parent.children || [];\n parent.children.push(node);\n } else {\n rootNodes.push(node);\n }\n }\n });\n\n // Sort children recursively\n this.sortChildrenRecursively(rootNodes);\n return rootNodes;\n }\n\n /**\n * Calculate level of a node based on its parent\n */\n private calculateLevel(node: CoreSystemEntityListResponse, nodeMap: Map<string, CoreSystemEntityListResponse>): number {\n let level = 0;\n let current = node;\n \n while (current.syen_id_syen && nodeMap.has(current.syen_id_syen)) {\n level++;\n current = nodeMap.get(current.syen_id_syen)!;\n }\n \n return level;\n }\n\n /**\n * Sort children recursively by name\n */\n private sortChildrenRecursively(nodes: CoreSystemEntityListResponse[]): void {\n nodes.sort((a, b) => (a.syen_name || '').localeCompare(b.syen_name || ''));\n \n nodes.forEach(node => {\n if (node.children && node.children.length > 0) {\n this.sortChildrenRecursively(node.children);\n }\n });\n }\n\n\n /**\n * View entity details\n */\n viewEntity(entityId: string): void {\n // Find the entity in the structure\n const entity = this.findEntityById(entityId);\n if (entity) {\n // Emit the appropriate event based on mode\n this.entityClick.emit(entity);\n \n if (this.mode() === 'selection' && this.allowSwitching()) {\n this.entitySelect.emit(entity);\n } else {\n this.entityView.emit(entity);\n }\n }\n\n // Only navigate if not in selection mode\n if (this.mode() !== 'selection') {\n this.router.navigate(['/control-panel/entity-list'], { \n queryParams: { view: entityId } \n });\n }\n }\n\n /**\n * Find entity by ID in the structure\n */\n private findEntityById(entityId: string): CoreSystemEntityListResponse | null {\n const findInNodes = (nodes: CoreSystemEntityListResponse[]): CoreSystemEntityListResponse | null => {\n for (const node of nodes) {\n if (node._id === entityId) {\n return node;\n }\n if (node.children && node.children.length > 0) {\n const found = findInNodes(node.children);\n if (found) return found;\n }\n }\n return null;\n };\n \n return findInNodes(this.orgStructure());\n }\n\n /**\n * Edit entity\n */\n editEntity(entityId: string): void {\n this.router.navigate(['/control-panel/entity-list/entity-create'], { \n queryParams: { edit: entityId } \n });\n }\n}\n","<!-- Organization Structure Component -->\n<div class=\"tw-flex-1 tw-overflow-hidden\">\n @if (loading()) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-py-12\">\n <cide-ele-spinner size=\"md\"></cide-ele-spinner>\n <span class=\"tw-ml-3 tw-text-gray-600 tw-text-sm\">Loading organization structure...</span>\n </div>\n } @else if (error()) {\n <div class=\"tw-text-center tw-py-12\">\n <div class=\"tw-w-16 tw-h-16 tw-bg-red-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-mx-auto tw-mb-4\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-red-500\">error</cide-ele-icon>\n </div>\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-2\">Error Loading Structure</h3>\n <p class=\"tw-text-gray-600 tw-mb-4\">{{ error() }}</p>\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"loadOrgStructure()\">\n <cide-ele-icon>refresh</cide-ele-icon>\n Try Again\n </button>\n </div>\n } @else if (orgStructure().length === 0) {\n <div class=\"tw-text-center tw-py-12\">\n <div class=\"tw-w-16 tw-h-16 tw-bg-gray-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-mx-auto tw-mb-4\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-gray-400\">account_tree</cide-ele-icon>\n </div>\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-2\">No Entities Found</h3>\n <p class=\"tw-text-gray-600 tw-mb-4\">No entities are available to display in the organization structure.</p>\n @if (mode() === 'view') {\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"router.navigate(['/control-panel/entity-list'])\">\n <cide-ele-icon>add</cide-ele-icon>\n Create First Entity\n </button>\n }\n </div>\n } @else {\n <!-- Organization Chart Container -->\n <div class=\"tw-relative tw-min-h-screen tw-bg-gray-50 tw-py-8 org-chart-container\">\n <!-- Chart Content with Background Pattern -->\n <div class=\"tw-relative tw-z-10 tw-min-w-max tw-px-4 org-chart-content org-chart-content-with-bg\">\n @for (rootNode of orgStructure(); track rootNode._id) {\n <div class=\"tw-flex tw-flex-col tw-items-center tw-mb-12\">\n <!-- Render node recursively with unlimited depth -->\n <ng-container [ngTemplateOutlet]=\"entityNodeTemplate\" [ngTemplateOutletContext]=\"{ $implicit: rootNode, level: 0 }\"></ng-container>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n<!-- Entity Node Template (Recursive) -->\n<ng-template #entityNodeTemplate let-node let-level=\"level\">\n <div class=\"tw-flex tw-flex-col tw-items-center\">\n \n <!-- Entity Card -->\n <div class=\"tw-bg-white tw-shadow-lg tw-rounded-lg tw-p-4 tw-w-64 tw-max-w-72 tw-border-t-4 tw-transition-all tw-cursor-pointer hover:tw-shadow-xl hover:tw-scale-105 entity-card\"\n [class.level-0]=\"level === 0\"\n [class.level-1]=\"level === 1\"\n [class.level-2]=\"level === 2\"\n [class.level-3]=\"level === 3\"\n [class.level-4]=\"level === 4\"\n [class.level-5]=\"level === 5\"\n (click)=\"viewEntity(node._id)\">\n \n <!-- Card Content -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <!-- Avatar -->\n <div class=\"tw-w-12 tw-h-12 tw-bg-purple-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0\">\n <cide-ele-icon class=\"tw-w-6 tw-h-6 tw-text-purple-600\">person</cide-ele-icon>\n </div>\n \n <!-- Entity Info -->\n <div class=\"tw-flex-1 tw-min-w-0\">\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-whitespace-nowrap tw-overflow-hidden tw-text-ellipsis\" \n [cideEleTooltip]=\"node.syen_name || ''\" \n [tooltipPlacement]=\"'top'\"\n [tooltipType]=\"'default'\">{{ node.syen_name }}</h3>\n <p class=\"tw-text-xs tw-text-gray-600 tw-mt-1\">{{ node.syen_entity_code }}</p>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">{{ node.syen_entity_type_sygms }}</p>\n </div>\n </div>\n \n <!-- Action Icons -->\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mt-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <!-- Phone Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">phone</cide-ele-icon>\n </button>\n \n <!-- Email Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">email</cide-ele-icon>\n </button>\n \n <!-- LinkedIn Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-blue-100 tw-flex tw-items-center tw-justify-center tw-text-blue-600 hover:tw-bg-blue-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">attach_money</cide-ele-icon>\n </button>\n \n <!-- Document Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">description</cide-ele-icon>\n </button>\n \n <!-- More Options Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">more_horiz</cide-ele-icon>\n </button>\n </div>\n \n <!-- Status Badge -->\n <div class=\"tw-flex-shrink-0\">\n @if (node.syen_isactive) {\n <div class=\"tw-inline-flex tw-items-center tw-px-1.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-green-500 tw-rounded-full tw-mr-1\"></div>\n Active\n </div>\n } @else {\n <div class=\"tw-inline-flex tw-items-center tw-px-1.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-red-500 tw-rounded-full tw-mr-1\"></div>\n Inactive\n </div>\n }\n </div>\n </div>\n </div>\n \n <!-- Children Entities (Recursive) -->\n @if (node.children && node.children.length > 0) {\n <!-- Flexible Connection Lines -->\n <div class=\"tw-relative tw-flex tw-flex-col tw-items-center tw-mt-4\">\n <!-- Connection dot -->\n <div class=\"tw-absolute tw-left-1/2 tw-transform tw--translate-x-1/2\" style=\"top: -8px;\">\n <div class=\"tw-w-2 tw-h-2 tw-bg-purple-600 tw-rounded-full tw-border tw-border-white\"></div>\n </div>\n \n <!-- Flexible SVG Lines -->\n <div class=\"tw-relative tw-w-full tw-flex tw-justify-center flexible-connection-lines\">\n @if (node.children && node.children.length === 1) {\n <!-- Single child - simple vertical line -->\n <svg class=\"tw-absolute tw-left-1/2\" style=\"transform: translateX(-50%); width: 2px; height: 40px; top: 0;\">\n <line x1=\"1\" y1=\"0\" x2=\"1\" y2=\"40\" stroke=\"#9333ea\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n </svg>\n }\n @else if (node.children && node.children.length > 1) {\n <!-- Multiple children - flexible design -->\n <svg class=\"tw-absolute tw-left-1/2\" style=\"transform: translateX(-50%); width: 100%; height: 40px; top: 0;\">\n <!-- Vertical line from parent -->\n <line x1=\"50%\" y1=\"0\" x2=\"50%\" y2=\"15\" stroke=\"#9333ea\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n \n <!-- Horizontal line spanning children -->\n <line x1=\"20%\" y1=\"15\" x2=\"80%\" y2=\"15\" stroke=\"#9333ea\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n \n <!-- Vertical lines to children -->\n @for (child of node.children; track child._id; let i = $index) {\n <line [attr.x1]=\"(20 + (60 * i) / (node.children.length - 1)) + '%'\" \n y1=\"15\" \n [attr.x2]=\"(20 + (60 * i) / (node.children.length - 1)) + '%'\" \n y2=\"35\" \n stroke=\"#9333ea\" \n stroke-width=\"2\" \n stroke-linecap=\"round\"/>\n <!-- Connection dot -->\n <circle [attr.cx]=\"(20 + (60 * i) / (node.children.length - 1)) + '%'\" cy=\"35\" r=\"2.5\" fill=\"#9333ea\" stroke=\"#fff\" stroke-width=\"1\"/>\n }\n </svg>\n }\n </div>\n \n <!-- Children Container - Flexible Layout -->\n <div class=\"tw-flex tw-flex-wrap tw-justify-center tw-gap-4 tw-w-full tw-max-w-6xl tw-px-4 children-container\">\n @for (child of node.children; track child._id) {\n <div class=\"tw-flex tw-flex-col tw-items-center tw-flex-shrink-0\">\n <!-- Child node -->\n <ng-container [ngTemplateOutlet]=\"entityNodeTemplate\" [ngTemplateOutletContext]=\"{ $implicit: child, level: level + 1 }\"></ng-container>\n </div>\n }\n </div>\n </div>\n }\n </div>\n</ng-template>\n","import { Component, OnInit, OnDestroy, inject, signal, computed, input, output, effect } from '@angular/core';\r\nimport { CommonModule, NgClass } from '@angular/common';\r\nimport { FormGroup, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport type { selectSearchType } from 'cloud-ide-lms-model';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { DestroyRef } from '@angular/core';\r\nimport { CideSelectComponent, NotificationService } from 'cloud-ide-element';\r\nimport {\r\n cidePath,\r\n hostManagerRoutesUrl,\r\n academicsRoutesUrl,\r\n generateStringFromObject,\r\n type classProgramMasterControllerResponse,\r\n type classProgramTermControllerResponse,\r\n type prgTrmSectionControllerResponse,\r\n type MClassProgramTerm,\r\n MPrgTrmSection,\r\n type AcaClassProgramTermReponse,\r\n type AcaPrgTrmSectionResponse,\r\n type AcaClassProgramMasterResponse,\r\n type AcaClassPrgBranchResponse,\r\n type classPrgBranchControllerResponse,\r\n type controllerResponse\r\n} from 'cloud-ide-lms-model';\r\nimport { AcaClassPrgBranchListPayload } from 'cloud-ide-lms-model';\r\nimport { CLASS_PROGRAM_MASTER_SERVICE_TOKEN } from '../../services/class-program-master.service.interface';\r\n\r\ninterface ClassProgramConfiguration {\r\n semesterType?: boolean; // Legacy property name\r\n termType?: boolean; // Current property name\r\n branchType?: boolean;\r\n termLevelUpTo?: number; // Number of term hierarchy levels\r\n termAdmissionLevelUpTo?: number; // For admission forms\r\n termProgramLevelOneConnected?: boolean; // Whether term is connected at program level\r\n getAdmission?: boolean; // For admission forms\r\n [key: string]: unknown;\r\n}\r\n\r\ninterface SelectOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface ProgramSectionSelectorValues {\r\n classProgramId?: string | null;\r\n branchId?: string | null;\r\n termId?: string | null;\r\n sectionId?: string | null;\r\n}\r\n\r\n@Component({\r\n selector: 'cide-shared-program-section-selector',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n CideSelectComponent,\r\n NgClass\r\n ],\r\n templateUrl: './program-section-selector.component.html',\r\n styleUrl: './program-section-selector.component.scss'\r\n})\r\nexport class CideSharedProgramSectionSelectorComponent implements OnInit, OnDestroy {\r\n // Inputs\r\n readonly formGroup = input.required<FormGroup>();\r\n readonly classProgramControlName = input<string>('class_program_id');\r\n readonly branchControlName = input<string>('branch_id');\r\n readonly termControlName = input<string>('term_id');\r\n readonly sectionControlName = input<string>('section_id');\r\n readonly academicYearId = input<string | null>(null);\r\n readonly entityId = input<string | null>(null);\r\n readonly disabled = input<boolean>(false);\r\n readonly showLabels = input<boolean>(true);\r\n readonly gridCols = input<string>('tw-grid-cols-1 md:tw-grid-cols-3');\r\n readonly showAllPrograms = input<boolean>(false); // If true, shows all programs regardless of academic year/entity filters\r\n readonly includeInactive = input<boolean>(false); // If true, includes inactive programs\r\n\r\n // Outputs\r\n readonly valuesChange = output<ProgramSectionSelectorValues>();\r\n\r\n // Services\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly http = inject(HttpClient);\r\n private readonly classProgramService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN);\r\n private readonly notificationService = inject(NotificationService);\r\n\r\n // State\r\n readonly classProgramMasters = signal<AcaClassProgramMasterResponse[]>([]);\r\n readonly classProgramBranches = signal<SelectOption[]>([]);\r\n readonly classProgramTerms = signal<SelectOption[]>([]);\r\n readonly programTermSections = signal<SelectOption[]>([]);\r\n \r\n readonly classProgramMastersLoading = signal<boolean>(false);\r\n readonly classProgramBranchesLoading = signal<boolean>(false);\r\n readonly classProgramTermsLoading = signal<boolean>(false);\r\n readonly programTermSectionsLoading = signal<boolean>(false);\r\n\r\n readonly selectedClassProgram = signal<AcaClassProgramMasterResponse | null>(null);\r\n readonly hasSections = signal<boolean>(false);\r\n private isProcessingInitialValues = false;\r\n\r\n // FormControl getters\r\n getClassProgramControl(): FormControl {\r\n return this.formGroup().get(this.classProgramControlName()) as FormControl;\r\n }\r\n\r\n getBranchControl(): FormControl {\r\n return this.formGroup().get(this.branchControlName()) as FormControl;\r\n }\r\n\r\n getTermControl(): FormControl {\r\n return this.formGroup().get(this.termControlName()) as FormControl;\r\n }\r\n\r\n getSectionControl(): FormControl {\r\n return this.formGroup().get(this.sectionControlName()) as FormControl;\r\n }\r\n\r\n // Computed signals\r\n readonly classProgramOptions = computed(() => {\r\n return this.classProgramMasters().map(cp => ({\r\n value: cp._id || '',\r\n label: cp.acacpm_alise_title || ''\r\n }));\r\n });\r\n\r\n readonly showBranchDropdown = computed(() => {\r\n const program = this.selectedClassProgram();\r\n if (!program) return false;\r\n \r\n const generalMaster = program.acacpm_class_program_id_sygms || (program as any).acacpm_class_program_id_sygmt;\r\n if (!generalMaster || typeof generalMaster !== 'object') return false;\r\n \r\n let config: ClassProgramConfiguration | undefined;\r\n if ('sygms_configuration' in generalMaster) {\r\n const configValue = generalMaster.sygms_configuration;\r\n if (typeof configValue === 'string') {\r\n try {\r\n config = JSON.parse(configValue) as ClassProgramConfiguration;\r\n } catch {\r\n return false;\r\n }\r\n } else if (typeof configValue === 'object' && configValue !== null) {\r\n config = configValue as ClassProgramConfiguration;\r\n }\r\n }\r\n \r\n return config?.branchType === true;\r\n });\r\n\r\n readonly showTermDropdown = computed(() => {\r\n const program = this.selectedClassProgram();\r\n if (!program) return false;\r\n \r\n const generalMaster = program.acacpm_class_program_id_sygms || (program as any).acacpm_class_program_id_sygmt;\r\n if (!generalMaster || typeof generalMaster !== 'object') return false;\r\n \r\n let config: ClassProgramConfiguration | undefined;\r\n if ('sygms_configuration' in generalMaster) {\r\n const configValue = generalMaster.sygms_configuration;\r\n if (typeof configValue === 'string') {\r\n try {\r\n config = JSON.parse(configValue) as ClassProgramConfiguration;\r\n } catch {\r\n return false;\r\n }\r\n } else if (typeof configValue === 'object' && configValue !== null) {\r\n config = configValue as ClassProgramConfiguration;\r\n }\r\n }\r\n \r\n // If termType is explicitly false, don't show the dropdown\r\n if (config?.termType === false) {\r\n return false;\r\n }\r\n \r\n // Special case: Hide dropdown if termType=true, termLevelUpTo=1, and termProgramLevelOneConnected=true\r\n if (config?.termType === true && \r\n config?.termLevelUpTo === 1 && \r\n config?.termProgramLevelOneConnected === true) {\r\n return false;\r\n }\r\n \r\n // Check for both termType (current) and semesterType (legacy) for backward compatibility\r\n return config?.termType === true || config?.semesterType === true;\r\n });\r\n\r\n constructor() {\r\n // Effect to emit values when form changes\r\n effect(() => {\r\n const form = this.formGroup();\r\n if (form) {\r\n const classProgramId = form.get(this.classProgramControlName())?.value;\r\n const branchId = form.get(this.branchControlName())?.value;\r\n const termId = form.get(this.termControlName())?.value;\r\n const sectionId = form.get(this.sectionControlName())?.value;\r\n \r\n this.valuesChange.emit({\r\n classProgramId: classProgramId || null,\r\n branchId: branchId || null,\r\n termId: termId || null,\r\n sectionId: sectionId || null\r\n });\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loadClassProgramMasters();\r\n this.setupFormListeners();\r\n // Check for initial values in the form and load cascading options\r\n // Use setTimeout to ensure form is ready\r\n setTimeout(() => {\r\n this.handleInitialValues();\r\n }, 0);\r\n \r\n // Also watch for form value changes to handle values set after component initialization\r\n const form = this.formGroup();\r\n if (form) {\r\n // Watch for class program value being set\r\n form.get(this.classProgramControlName())?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n // If class program is set but we haven't processed initial values yet, process them\r\n const classProgramId = form.get(this.classProgramControlName())?.value;\r\n if (classProgramId && this.classProgramMasters().length > 0 && !this.selectedClassProgram()) {\r\n // Form value was set, but we haven't processed it yet - process now\r\n setTimeout(() => {\r\n this.handleInitialValues();\r\n }, 100);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private handleInitialValues(): void {\r\n const form = this.formGroup();\r\n if (!form) return;\r\n\r\n const classProgramId = form.get(this.classProgramControlName())?.value;\r\n if (!classProgramId) return;\r\n\r\n // Set flag to prevent clearing values during initial load\r\n this.isProcessingInitialValues = true;\r\n\r\n // Wait for class programs to load, then process initial values\r\n const checkInterval = setInterval(() => {\r\n if (this.classProgramMasters().length > 0) {\r\n clearInterval(checkInterval);\r\n // Find the selected program\r\n const selectedProgram = this.classProgramMasters().find(cp => cp._id === classProgramId);\r\n if (selectedProgram) {\r\n this.selectedClassProgram.set(selectedProgram);\r\n \r\n // Read config directly from the program to determine what to show\r\n const generalMaster = selectedProgram.acacpm_class_program_id_sygms || (selectedProgram as any).acacpm_class_program_id_sygmt;\r\n let config: ClassProgramConfiguration | undefined;\r\n \r\n if (generalMaster && typeof generalMaster === 'object') {\r\n if ('sygms_configuration' in generalMaster) {\r\n const configValue = generalMaster.sygms_configuration;\r\n if (typeof configValue === 'string') {\r\n try {\r\n config = JSON.parse(configValue) as ClassProgramConfiguration;\r\n } catch {\r\n console.warn('Failed to parse config:', configValue);\r\n }\r\n } else if (typeof configValue === 'object' && configValue !== null) {\r\n config = configValue as ClassProgramConfiguration;\r\n }\r\n }\r\n }\r\n \r\n // Wait a tick for computed signals to update\r\n setTimeout(() => {\r\n const branchId = form.get(this.branchControlName())?.value;\r\n const termId = form.get(this.termControlName())?.value;\r\n const sectionId = form.get(this.sectionControlName())?.value;\r\n \r\n // Load branches if config says so AND we have a branch ID\r\n const shouldShowBranch = config?.branchType === true;\r\n if (shouldShowBranch) {\r\n this.loadClassProgramBranches(classProgramId);\r\n \r\n // Wait for branches to load\r\n if (branchId) {\r\n const branchCheckInterval = setInterval(() => {\r\n if (this.classProgramBranches().length > 0 || !this.classProgramBranchesLoading()) {\r\n clearInterval(branchCheckInterval);\r\n // Branch value is already set, now load terms\r\n this.loadClassProgramTerms(classProgramId, branchId);\r\n \r\n // Wait for terms to load\r\n if (termId) {\r\n const termCheckInterval = setInterval(() => {\r\n if (this.classProgramTerms().length > 0 || !this.classProgramTermsLoading()) {\r\n clearInterval(termCheckInterval);\r\n // Term value is already set, now load sections\r\n if (sectionId) {\r\n this.loadProgramTermSections(termId);\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(termCheckInterval), 5000);\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(branchCheckInterval), 5000);\r\n } else {\r\n // No branch ID but should show branch dropdown - load terms after branches load\r\n const branchCheckInterval = setInterval(() => {\r\n if (!this.classProgramBranchesLoading()) {\r\n clearInterval(branchCheckInterval);\r\n if (termId) {\r\n this.loadClassProgramTerms(classProgramId, undefined);\r\n if (sectionId) {\r\n const termCheckInterval = setInterval(() => {\r\n if (this.classProgramTerms().length > 0 || !this.classProgramTermsLoading()) {\r\n clearInterval(termCheckInterval);\r\n this.loadProgramTermSections(termId);\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(termCheckInterval), 5000);\r\n }\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(branchCheckInterval), 5000);\r\n }\r\n } else {\r\n // No branch dropdown, load terms directly if config allows\r\n const shouldShowTerm = config?.termType === true || config?.semesterType === true;\r\n if (shouldShowTerm && termId) {\r\n this.loadClassProgramTerms(classProgramId, undefined);\r\n \r\n // Wait for terms to load, then load sections\r\n if (sectionId) {\r\n const termCheckInterval = setInterval(() => {\r\n if (this.classProgramTerms().length > 0 || !this.classProgramTermsLoading()) {\r\n clearInterval(termCheckInterval);\r\n this.loadProgramTermSections(termId);\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(termCheckInterval), 5000);\r\n }\r\n }\r\n }\r\n }, 0);\r\n }\r\n }\r\n }, 100);\r\n // Timeout after 5 seconds\r\n setTimeout(() => {\r\n clearInterval(checkInterval);\r\n // Reset flag after processing is complete\r\n this.isProcessingInitialValues = false;\r\n }, 5000);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Cleanup handled by takeUntilDestroyed\r\n }\r\n\r\n private setupFormListeners(): void {\r\n const form = this.formGroup();\r\n if (!form) return;\r\n\r\n // Listen for class program selection changes\r\n form.get(this.classProgramControlName())?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(classProgramId => {\r\n this.onClassProgramChange(classProgramId);\r\n });\r\n\r\n // Listen for branch selection changes\r\n form.get(this.branchControlName())?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(branchId => {\r\n this.onBranchChange(branchId);\r\n });\r\n\r\n // Listen for term selection changes\r\n form.get(this.termControlName())?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(termId => {\r\n this.onTermChange(termId);\r\n });\r\n }\r\n\r\n private loadClassProgramMasters(): void {\r\n this.classProgramMastersLoading.set(true);\r\n \r\n const academicYearId = this.academicYearId();\r\n const entityId = this.entityId();\r\n const showAll = this.showAllPrograms();\r\n const includeInactive = this.includeInactive();\r\n \r\n // Build payload - only include filters if not showing all programs\r\n const payload: Partial<any> = {\r\n pagination: false\r\n };\r\n\r\n // Only add academic year filter if not showing all programs and academic year is provided\r\n if (!showAll && academicYearId) {\r\n payload['acacpm_academic_year_id_acayr'] = academicYearId;\r\n }\r\n\r\n // Only add entity filter if not showing all programs and entity is provided\r\n if (!showAll && entityId) {\r\n payload['acacpm_entity_id_syen'] = entityId;\r\n }\r\n\r\n // Only add active filter if not including inactive programs\r\n if (!includeInactive) {\r\n payload['acacpm_isactive'] = true;\r\n }\r\n\r\n this.classProgramService.searchClassProgramMasters(payload).subscribe({\r\n next: (response: classProgramMasterControllerResponse) => {\r\n if (response?.success && response.data) {\r\n const dataArray: AcaClassProgramMasterResponse[] = Array.isArray(response.data) ? response.data : [];\r\n this.classProgramMasters.set(dataArray);\r\n console.log(`✅ Loaded ${dataArray.length} class programs`, {\r\n showAll,\r\n includeInactive,\r\n academicYearId,\r\n entityId,\r\n filters: payload\r\n });\r\n } else {\r\n this.classProgramMasters.set([]);\r\n console.warn('⚠️ No class programs found', response);\r\n }\r\n this.classProgramMastersLoading.set(false);\r\n },\r\n error: (response: { error: controllerResponse }) => {\r\n console.error('❌ Error loading class programs:', response);\r\n const errorMessage = response?.error?.message;\r\n if (errorMessage) {\r\n this.notificationService.error(errorMessage);\r\n }\r\n this.classProgramMasters.set([]);\r\n this.classProgramMastersLoading.set(false);\r\n }\r\n });\r\n }\r\n\r\n onClassProgramSearch(event: selectSearchType): void {\r\n this.classProgramMastersLoading.set(true);\r\n \r\n const academicYearId = this.academicYearId();\r\n const entityId = this.entityId();\r\n const showAll = this.showAllPrograms();\r\n const includeInactive = this.includeInactive();\r\n \r\n // Build payload for search\r\n const payload: Partial<any> = {\r\n query: event.query || \"\",\r\n acacpm_id: event.value ? String(event.value) : \"\",\r\n pagination: false\r\n };\r\n\r\n // Only add academic year filter if not showing all programs and academic year is provided\r\n if (!showAll && academicYearId) {\r\n payload['acacpm_academic_year_id_acayr'] = academicYearId;\r\n }\r\n\r\n // Only add entity filter if not showing all programs and entity is provided\r\n if (!showAll && entityId) {\r\n payload['acacpm_entity_id_syen'] = entityId;\r\n }\r\n\r\n // Only add active filter if not including inactive programs\r\n if (!includeInactive) {\r\n payload['acacpm_isactive'] = true;\r\n }\r\n\r\n this.classProgramService.searchClassProgramMasters(payload).subscribe({\r\n next: (response: classProgramMasterControllerResponse) => {\r\n if (response?.success && response.data) {\r\n const dataArray: AcaClassProgramMasterResponse[] = Array.isArray(response.data) ? response.data : [];\r\n this.classProgramMasters.set(dataArray);\r\n } else {\r\n this.classProgramMasters.set([]);\r\n }\r\n this.classProgramMastersLoading.set(false);\r\n },\r\n error: () => {\r\n this.classProgramMasters.set([]);\r\n this.classProgramMastersLoading.set(false);\r\n }\r\n });\r\n }\r\n\r\n onClassProgramChange(classProgramId: string | null | undefined): void {\r\n // Clear previous selections state\r\n this.selectedClassProgram.set(null);\r\n this.classProgramBranches.set([]);\r\n this.classProgramTerms.set([]);\r\n this.programTermSections.set([]);\r\n\r\n if (!classProgramId) {\r\n // Clear all dependent values if no class program selected\r\n const form = this.formGroup();\r\n if (form) {\r\n form.patchValue({\r\n [this.branchControlName()]: '',\r\n [this.termControlName()]: '',\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n return;\r\n }\r\n\r\n // Find the selected program from the list\r\n const selectedProgram = this.classProgramMasters().find(cp => cp._id === classProgramId);\r\n if (!selectedProgram) {\r\n return;\r\n }\r\n\r\n this.selectedClassProgram.set(selectedProgram);\r\n\r\n const form = this.formGroup();\r\n if (!form) return;\r\n\r\n // Get current form values before loading options\r\n const currentBranchId = form.get(this.branchControlName())?.value;\r\n const currentTermId = form.get(this.termControlName())?.value;\r\n const currentSectionId = form.get(this.sectionControlName())?.value;\r\n\r\n // Load branches if branchType is true\r\n if (this.showBranchDropdown()) {\r\n this.loadClassProgramBranches(classProgramId);\r\n \r\n // After branches load, check if current branch value is valid\r\n const branchCheckInterval = setInterval(() => {\r\n if (!this.classProgramBranchesLoading()) {\r\n clearInterval(branchCheckInterval);\r\n \r\n // Check if current branch value exists in loaded branches\r\n const branchExists = currentBranchId && \r\n this.classProgramBranches().some(b => b.value === currentBranchId);\r\n \r\n if (!branchExists && currentBranchId) {\r\n // Current branch value is not in the list, clear it\r\n form.patchValue({\r\n [this.branchControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n \r\n // Load terms with the branch (or without if branch was cleared)\r\n const branchIdToUse = branchExists ? currentBranchId : undefined;\r\n if (this.showTermDropdown()) {\r\n this.loadClassProgramTerms(classProgramId, branchIdToUse);\r\n \r\n // After terms load, check if current term value is valid\r\n const termCheckInterval = setInterval(() => {\r\n if (!this.classProgramTermsLoading()) {\r\n clearInterval(termCheckInterval);\r\n \r\n // Check if current term value exists in loaded terms\r\n const termExists = currentTermId && \r\n this.classProgramTerms().some(t => t.value === currentTermId);\r\n \r\n if (!termExists && currentTermId) {\r\n // Current term value is not in the list, clear it\r\n form.patchValue({\r\n [this.termControlName()]: ''\r\n }, { emitEvent: false });\r\n \r\n // Also clear section if term is cleared\r\n form.patchValue({\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n } else if (termExists && currentSectionId) {\r\n // Term is valid, load sections\r\n this.loadProgramTermSections(currentTermId);\r\n \r\n // After sections load, check if current section value is valid\r\n const sectionCheckInterval = setInterval(() => {\r\n if (!this.programTermSectionsLoading()) {\r\n clearInterval(sectionCheckInterval);\r\n \r\n // Check if current section value exists in loaded sections\r\n const sectionExists = this.programTermSections().some(s => s.value === currentSectionId);\r\n \r\n if (!sectionExists) {\r\n // Current section value is not in the list, clear it\r\n form.patchValue({\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(sectionCheckInterval), 5000);\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(termCheckInterval), 5000);\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(branchCheckInterval), 5000);\r\n } else {\r\n // If no branch dropdown but term dropdown should be shown, load terms directly\r\n if (this.showTermDropdown()) {\r\n this.loadClassProgramTerms(classProgramId, undefined);\r\n \r\n // After terms load, check if current term value is valid\r\n const termCheckInterval = setInterval(() => {\r\n if (!this.classProgramTermsLoading()) {\r\n clearInterval(termCheckInterval);\r\n \r\n // Check if current term value exists in loaded terms\r\n const termExists = currentTermId && \r\n this.classProgramTerms().some(t => t.value === currentTermId);\r\n \r\n if (!termExists && currentTermId) {\r\n // Current term value is not in the list, clear it\r\n form.patchValue({\r\n [this.termControlName()]: ''\r\n }, { emitEvent: false });\r\n \r\n // Also clear section if term is cleared\r\n form.patchValue({\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n } else if (termExists && currentSectionId) {\r\n // Term is valid, load sections\r\n this.loadProgramTermSections(currentTermId);\r\n \r\n // After sections load, check if current section value is valid\r\n const sectionCheckInterval = setInterval(() => {\r\n if (!this.programTermSectionsLoading()) {\r\n clearInterval(sectionCheckInterval);\r\n \r\n // Check if current section value exists in loaded sections\r\n const sectionExists = this.programTermSections().some(s => s.value === currentSectionId);\r\n \r\n if (!sectionExists) {\r\n // Current section value is not in the list, clear it\r\n form.patchValue({\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(sectionCheckInterval), 5000);\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(termCheckInterval), 5000);\r\n }\r\n }\r\n }\r\n\r\n private loadClassProgramBranches(classProgramId: string): void {\r\n this.classProgramBranchesLoading.set(true);\r\n \r\n const payload = new AcaClassPrgBranchListPayload({\r\n acabrn_class_program_id_acacpm: classProgramId,\r\n pagination: false\r\n });\r\n\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 this.http.get<classPrgBranchControllerResponse>(url).subscribe({\r\n next: (response) => {\r\n if (response?.success && response?.data) {\r\n const branches: AcaClassPrgBranchResponse[] = Array.isArray(response.data) ? response.data : [];\r\n this.classProgramBranches.set(branches.map((branch: AcaClassPrgBranchResponse) => ({\r\n value: branch._id || '',\r\n label: branch.acabrn_name || branch.acabrn_code || ''\r\n })));\r\n } else {\r\n this.classProgramBranches.set([]);\r\n }\r\n this.classProgramBranchesLoading.set(false);\r\n },\r\n error: (response: { error: controllerResponse }) => {\r\n console.error('Error loading branches:', response);\r\n const errorMessage = response?.error?.message;\r\n if (errorMessage) {\r\n this.notificationService.error(errorMessage);\r\n }\r\n this.classProgramBranches.set([]);\r\n this.classProgramBranchesLoading.set(false);\r\n }\r\n });\r\n }\r\n\r\n onBranchChange(branchId: string | null | undefined): void {\r\n this.classProgramTerms.set([]);\r\n this.programTermSections.set([]);\r\n \r\n const form = this.formGroup();\r\n if (form) {\r\n form.patchValue({\r\n [this.termControlName()]: '',\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n\r\n const classProgramId = form?.get(this.classProgramControlName())?.value;\r\n if (classProgramId && this.showTermDropdown()) {\r\n this.loadClassProgramTerms(classProgramId, branchId || undefined);\r\n }\r\n }\r\n\r\n private loadClassProgramTerms(classProgramId: string, branchId?: string): void {\r\n this.classProgramTermsLoading.set(true);\r\n \r\n const payload: Partial<MClassProgramTerm> = {\r\n acapt_class_program_id_acacpm: classProgramId,\r\n acapt_class_prg_branch_acabrn: branchId || undefined,\r\n pagination: false\r\n } as Partial<MClassProgramTerm>;\r\n\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramTerm,\r\n query\r\n ]);\r\n\r\n this.http.get<classProgramTermControllerResponse>(url)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.success && response?.data) {\r\n const terms: AcaClassProgramTermReponse[] = Array.isArray(response.data) ? response.data : [];\r\n // Transform to SelectOption format with parent field for tree view\r\n const options = terms.map((term: AcaClassProgramTermReponse) => {\r\n // Normalize parent field for tree view compatibility\r\n let parentId = '';\r\n if (term.acapt_parent_class_prog_term_acapt) {\r\n if (typeof term.acapt_parent_class_prog_term_acapt === 'object') {\r\n parentId = term.acapt_parent_class_prog_term_acapt._id || '';\r\n } else if (typeof term.acapt_parent_class_prog_term_acapt === 'string') {\r\n parentId = term.acapt_parent_class_prog_term_acapt || '';\r\n }\r\n }\r\n \r\n return {\r\n value: term._id || '',\r\n label: term.acapt_name || term.acapt_code || '',\r\n _id: term._id || '',\r\n acapt_parent_class_prog_term_acapt: parentId\r\n };\r\n });\r\n \r\n this.classProgramTerms.set(options);\r\n } else {\r\n this.classProgramTerms.set([]);\r\n }\r\n this.classProgramTermsLoading.set(false);\r\n },\r\n error: (response: { error: controllerResponse }) => {\r\n console.error('Error loading program terms:', response);\r\n const errorMessage = response?.error?.message;\r\n if (errorMessage) {\r\n this.notificationService.error(errorMessage);\r\n }\r\n this.classProgramTerms.set([]);\r\n this.classProgramTermsLoading.set(false);\r\n }\r\n });\r\n }\r\n\r\n onTermChange(termId: string | null | undefined): void {\r\n this.programTermSections.set([]);\r\n \r\n const form = this.formGroup();\r\n if (form) {\r\n form.patchValue({\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n\r\n if (termId) {\r\n this.loadProgramTermSections(termId);\r\n } else {\r\n this.hasSections.set(false);\r\n const sectionControl = form?.get(this.sectionControlName());\r\n if (sectionControl) {\r\n sectionControl.clearValidators();\r\n sectionControl.updateValueAndValidity();\r\n }\r\n }\r\n }\r\n\r\n private loadProgramTermSections(termId: string): void {\r\n this.programTermSectionsLoading.set(true);\r\n \r\n const payload = new MPrgTrmSection({\r\n acapts_parent_class_prog_term_acapt: termId,\r\n pagination: false,\r\n pageIndex: 0,\r\n pageSize: 1000,\r\n query: \"\",\r\n sort: {\r\n key: 'acapts_name',\r\n order: 'asc'\r\n }\r\n } as Partial<MPrgTrmSection>);\r\n\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n query\r\n ]);\r\n\r\n this.http.get<prgTrmSectionControllerResponse>(url)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.success && response?.data) {\r\n const sections: AcaPrgTrmSectionResponse[] = Array.isArray(response.data) ? response.data : [];\r\n const hasSections = sections.length > 0;\r\n this.hasSections.set(hasSections);\r\n \r\n if (hasSections) {\r\n this.programTermSections.set(\r\n sections.map(section => ({\r\n value: section._id || '',\r\n label: section.acapts_name || section.acapts_code || ''\r\n }))\r\n );\r\n \r\n const form = this.formGroup();\r\n const sectionControl = form?.get(this.sectionControlName());\r\n if (sectionControl) {\r\n sectionControl.setValidators([Validators.required]);\r\n sectionControl.updateValueAndValidity();\r\n }\r\n } else {\r\n this.programTermSections.set([]);\r\n const form = this.formGroup();\r\n const sectionControl = form?.get(this.sectionControlName());\r\n if (sectionControl) {\r\n sectionControl.clearValidators();\r\n sectionControl.updateValueAndValidity();\r\n }\r\n }\r\n } else {\r\n this.hasSections.set(false);\r\n this.programTermSections.set([]);\r\n const form = this.formGroup();\r\n const sectionControl = form?.get(this.sectionControlName());\r\n if (sectionControl) {\r\n sectionControl.clearValidators();\r\n sectionControl.updateValueAndValidity();\r\n }\r\n }\r\n this.programTermSectionsLoading.set(false);\r\n },\r\n error: (response: { error: controllerResponse }) => {\r\n console.error('Error loading sections:', response);\r\n const errorMessage = response?.error?.message;\r\n if (errorMessage) {\r\n this.notificationService.error(errorMessage);\r\n }\r\n this.hasSections.set(false);\r\n this.programTermSections.set([]);\r\n const form = this.formGroup();\r\n const sectionControl = form?.get(this.sectionControlName());\r\n if (sectionControl) {\r\n sectionControl.clearValidators();\r\n sectionControl.updateValueAndValidity();\r\n }\r\n this.programTermSectionsLoading.set(false);\r\n }\r\n });\r\n }\r\n}\r\n\r\n","<div class=\"program-section-selector\" [ngClass]=\"gridCols()\">\r\n <!-- Class/Program Dropdown -->\r\n <cide-ele-select \r\n [label]=\"showLabels() ? 'Program/Class' : ''\" \r\n [formControl]=\"getClassProgramControl()\"\r\n [options]=\"classProgramOptions()\"\r\n [loading]=\"classProgramMastersLoading()\"\r\n [searchable]=\"true\"\r\n (searchChange)=\"onClassProgramSearch($event)\"\r\n placeholder=\"Search and select class/program\"\r\n [disabled]=\"disabled()\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <!-- Branch/Specialization Dropdown (conditional) -->\r\n @if (showBranchDropdown()) {\r\n <cide-ele-select \r\n [label]=\"showLabels() ? 'Branch (Specialization)' : ''\" \r\n [formControl]=\"getBranchControl()\"\r\n [options]=\"classProgramBranches()\"\r\n [loading]=\"classProgramBranchesLoading()\"\r\n placeholder=\"Select branch\"\r\n [disabled]=\"disabled() || !formGroup().get(classProgramControlName())?.value\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n }\r\n\r\n <!-- Program Term Dropdown (conditional) -->\r\n @if (showTermDropdown()) {\r\n <cide-ele-select \r\n [label]=\"showLabels() ? 'Program Term' : ''\" \r\n [formControl]=\"getTermControl()\"\r\n [options]=\"classProgramTerms()\"\r\n [loading]=\"classProgramTermsLoading()\"\r\n placeholder=\"Select term/semester\"\r\n [disabled]=\"disabled() || !formGroup().get(classProgramControlName())?.value\"\r\n size=\"sm\"\r\n valueKey=\"_id\"\r\n labelKey=\"label\"\r\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\">\r\n </cide-ele-select>\r\n }\r\n\r\n <!-- Section Dropdown (conditional) -->\r\n @if (hasSections()) {\r\n <cide-ele-select \r\n [label]=\"showLabels() ? 'Section' : ''\" \r\n [formControl]=\"getSectionControl()\"\r\n [options]=\"programTermSections()\"\r\n [loading]=\"programTermSectionsLoading()\"\r\n placeholder=\"Select section\"\r\n [disabled]=\"disabled() || !formGroup().get(termControlName())?.value\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n }\r\n</div>\r\n\r\n","import { InjectionToken, Type } from '@angular/core';\r\n\r\n/**\r\n * Type for FeeDetailsViewerComponent\r\n * This represents the component interface that must be implemented\r\n */\r\nexport interface FeeDetailsViewerComponentType {\r\n isOpen?: boolean | (() => boolean);\r\n feeData?: any;\r\n assignmentDate?: Date | null;\r\n discount?: number | null;\r\n closed?: () => void;\r\n}\r\n\r\n/**\r\n * Injection token for FeeDetailsViewerComponent\r\n * This allows the component to be provided without direct import dependency\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * import { FeeDetailsViewerComponent } from 'cloud-ide-fees';\r\n * import { FEE_DETAILS_VIEWER_COMPONENT_TOKEN } from 'cloud-ide-shared';\r\n * \r\n * providers: [\r\n * { provide: FEE_DETAILS_VIEWER_COMPONENT_TOKEN, useValue: FeeDetailsViewerComponent }\r\n * ]\r\n * \r\n * // In component template\r\n * <cide-shared-fee-details-viewer-wrapper\r\n * [isOpen]=\"viewingFeeDetails() !== null\"\r\n * [feeData]=\"getFeeDataForViewer()\"\r\n * [assignmentDate]=\"getAssignmentDate()\"\r\n * [discount]=\"getFeeDiscountForViewer()\"\r\n * (closed)=\"closeFeeDetails()\">\r\n * </cide-shared-fee-details-viewer-wrapper>\r\n * ```\r\n */\r\nexport const FEE_DETAILS_VIEWER_COMPONENT_TOKEN = new InjectionToken<Type<FeeDetailsViewerComponentType>>('FeeDetailsViewerComponent');\r\n\r\n","import { Component, inject, Input, Output, EventEmitter, ViewContainerRef, ComponentRef, OnInit, OnDestroy, DestroyRef, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FEE_DETAILS_VIEWER_COMPONENT_TOKEN, type FeeDetailsViewerComponentType } from '../../services/fee-details-viewer.component.token';\r\n\r\n/**\r\n * Wrapper component that dynamically loads the FeeDetailsViewerComponent\r\n * This allows front-desk to use the component without directly importing cloud-ide-fees\r\n */\r\n@Component({\r\n selector: 'cide-shared-fee-details-viewer-wrapper',\r\n standalone: true,\r\n template: `<!-- Component will be dynamically loaded here -->`\r\n})\r\nexport class FeeDetailsViewerWrapperComponent implements OnInit, OnDestroy, OnChanges {\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly componentToken = inject(FEE_DETAILS_VIEWER_COMPONENT_TOKEN, { optional: true });\r\n \r\n private componentRef: ComponentRef<any> | null = null;\r\n\r\n // Inputs that will be passed to the dynamically loaded component\r\n @Input() isOpen: boolean = false;\r\n @Input() feeData: any = null;\r\n @Input() assignmentDate: Date | null = null;\r\n @Input() discount: number | null = null;\r\n\r\n // Outputs\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n ngOnInit(): void {\r\n if (this.isOpen && this.componentToken) {\r\n this.loadComponent();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Handle isOpen changes\r\n if (changes['isOpen']) {\r\n if (this.isOpen && this.componentToken && !this.componentRef) {\r\n this.loadComponent();\r\n } else if (!this.isOpen && this.componentRef) {\r\n this.destroyComponent();\r\n } else if (this.componentRef) {\r\n this.updateComponentInputs();\r\n }\r\n } else if (this.componentRef) {\r\n // Update other inputs when they change\r\n this.updateComponentInputs();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyComponent();\r\n }\r\n\r\n private loadComponent(): void {\r\n if (!this.componentToken) {\r\n console.warn('FEE_DETAILS_VIEWER_COMPONENT_TOKEN not provided. FeeDetailsViewerComponent will not be loaded.');\r\n return;\r\n }\r\n\r\n if (this.componentRef) {\r\n // Component already loaded, just update inputs\r\n this.updateComponentInputs();\r\n return;\r\n }\r\n\r\n try {\r\n // Create the component dynamically\r\n this.componentRef = this.viewContainerRef.createComponent(this.componentToken);\r\n \r\n // Set inputs\r\n this.updateComponentInputs();\r\n\r\n // Subscribe to closed output if it exists (signal output)\r\n if (this.componentRef.instance.closed) {\r\n const closedOutput = this.componentRef.instance.closed;\r\n // Signal outputs are EventEmitters, so we can subscribe\r\n if (closedOutput && typeof closedOutput.subscribe === 'function') {\r\n closedOutput.subscribe(() => {\r\n this.closed.emit();\r\n });\r\n } else if (closedOutput && typeof closedOutput.emit === 'function') {\r\n // If it's an EventEmitter-like object\r\n closedOutput.subscribe(() => {\r\n this.closed.emit();\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.error('Error loading FeeDetailsViewerComponent:', error);\r\n }\r\n }\r\n\r\n private updateComponentInputs(): void {\r\n if (!this.componentRef) return;\r\n\r\n // Use setInput for all inputs - this works correctly with signal inputs in Angular 17+\r\n // Signal inputs are functions, but setInput handles them correctly\r\n this.componentRef.setInput('isOpen', this.isOpen);\r\n this.componentRef.setInput('feeData', this.feeData);\r\n this.componentRef.setInput('assignmentDate', this.assignmentDate);\r\n this.componentRef.setInput('discount', this.discount);\r\n\r\n // Detect changes\r\n this.componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n private destroyComponent(): void {\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n this.componentRef = null;\r\n this.viewContainerRef.clear();\r\n }\r\n }\r\n}\r\n\r\n","import { InjectionToken, Type } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\n/**\r\n * Type for ProgramSectionSelectorValues output\r\n */\r\nexport interface ProgramSectionSelectorValues {\r\n classProgramId?: string | null;\r\n branchId?: string | null;\r\n termId?: string | null;\r\n sectionId?: string | null;\r\n}\r\n\r\n/**\r\n * Type for ProgramSectionSelectorComponent\r\n * This represents the component interface that must be implemented\r\n */\r\nexport interface ProgramSectionSelectorComponentType {\r\n formGroup?: FormGroup | (() => FormGroup);\r\n classProgramControlName?: string | (() => string);\r\n branchControlName?: string | (() => string);\r\n termControlName?: string | (() => string);\r\n sectionControlName?: string | (() => string);\r\n academicYearId?: string | null | (() => string | null);\r\n entityId?: string | null | (() => string | null);\r\n disabled?: boolean | (() => boolean);\r\n showLabels?: boolean | (() => boolean);\r\n gridCols?: string | (() => string);\r\n showAllPrograms?: boolean | (() => boolean);\r\n includeInactive?: boolean | (() => boolean);\r\n valuesChange?: (values: ProgramSectionSelectorValues) => void;\r\n}\r\n\r\n/**\r\n * Injection token for ProgramSectionSelectorComponent\r\n * This allows the component to be provided without direct import dependency\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * import { CideLytProgramSectionSelectorComponent } from 'cloud-ide-academics';\r\n * import { PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN } from 'cloud-ide-shared';\r\n * \r\n * providers: [\r\n * { provide: PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN, useValue: CideLytProgramSectionSelectorComponent }\r\n * ]\r\n * \r\n * // In component template\r\n * <cide-shared-program-section-selector-wrapper\r\n * [formGroup]=\"form\"\r\n * [classProgramControlName]=\"'class_program_id'\"\r\n * [academicYearId]=\"academicYearId()\"\r\n * (valuesChange)=\"onValuesChange($event)\">\r\n * </cide-shared-program-section-selector-wrapper>\r\n * ```\r\n */\r\nexport const PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN = new InjectionToken<Type<ProgramSectionSelectorComponentType>>('ProgramSectionSelectorComponent');\r\n\r\n","import { Component, inject, Input, Output, EventEmitter, ViewContainerRef, ComponentRef, OnInit, OnDestroy, DestroyRef, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN, type ProgramSectionSelectorComponentType, type ProgramSectionSelectorValues } from '../../services/program-section-selector.component.token';\r\n\r\n/**\r\n * Wrapper component that dynamically loads the ProgramSectionSelectorComponent\r\n * This allows front-desk to use the component without directly importing cloud-ide-academics\r\n */\r\n@Component({\r\n selector: 'cide-shared-program-section-selector-wrapper',\r\n standalone: true,\r\n template: `<!-- Component will be dynamically loaded here -->`\r\n})\r\nexport class ProgramSectionSelectorWrapperComponent implements OnInit, OnDestroy, OnChanges {\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly componentToken = inject(PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN, { optional: true });\r\n \r\n private componentRef: ComponentRef<any> | null = null;\r\n\r\n // Inputs that will be passed to the dynamically loaded component\r\n @Input() formGroup!: FormGroup;\r\n @Input() classProgramControlName: string = 'class_program_id';\r\n @Input() branchControlName: string = 'branch_id';\r\n @Input() termControlName: string = 'term_id';\r\n @Input() sectionControlName: string = 'section_id';\r\n @Input() academicYearId: string | null = null;\r\n @Input() entityId: string | null = null;\r\n @Input() disabled: boolean = false;\r\n @Input() showLabels: boolean = true;\r\n @Input() gridCols: string = 'tw-grid-cols-1 md:tw-grid-cols-3';\r\n @Input() showAllPrograms: boolean = false;\r\n @Input() includeInactive: boolean = false;\r\n\r\n // Outputs\r\n @Output() valuesChange = new EventEmitter<ProgramSectionSelectorValues>();\r\n\r\n ngOnInit(): void {\r\n if (this.componentToken && this.formGroup) {\r\n this.loadComponent();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.componentRef) {\r\n this.updateComponentInputs();\r\n } else if (this.formGroup && this.componentToken && changes['formGroup']?.currentValue) {\r\n this.loadComponent();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyComponent();\r\n }\r\n\r\n private loadComponent(): void {\r\n if (!this.componentToken) {\r\n console.warn('PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN not provided. ProgramSectionSelectorComponent will not be loaded.');\r\n return;\r\n }\r\n\r\n if (!this.formGroup) {\r\n console.warn('formGroup is required for ProgramSectionSelectorComponent.');\r\n return;\r\n }\r\n\r\n if (this.componentRef) {\r\n // Component already loaded, just update inputs\r\n this.updateComponentInputs();\r\n return;\r\n }\r\n\r\n try {\r\n // Create the component dynamically\r\n this.componentRef = this.viewContainerRef.createComponent(this.componentToken);\r\n \r\n // Set inputs\r\n this.updateComponentInputs();\r\n\r\n // Subscribe to valuesChange output if it exists\r\n if (this.componentRef.instance.valuesChange) {\r\n const valuesChangeOutput = this.componentRef.instance.valuesChange;\r\n if (valuesChangeOutput && typeof valuesChangeOutput.subscribe === 'function') {\r\n valuesChangeOutput.subscribe((values: ProgramSectionSelectorValues) => {\r\n this.valuesChange.emit(values);\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.error('Error loading ProgramSectionSelectorComponent:', error);\r\n }\r\n }\r\n\r\n private updateComponentInputs(): void {\r\n if (!this.componentRef) return;\r\n\r\n const instance = this.componentRef.instance;\r\n\r\n // Handle signal inputs (Angular 17+)\r\n // Use setInput for proper change detection\r\n if ('formGroup' in instance) {\r\n this.componentRef.setInput('formGroup', this.formGroup);\r\n }\r\n if ('classProgramControlName' in instance) {\r\n this.componentRef.setInput('classProgramControlName', this.classProgramControlName);\r\n }\r\n if ('branchControlName' in instance) {\r\n this.componentRef.setInput('branchControlName', this.branchControlName);\r\n }\r\n if ('termControlName' in instance) {\r\n this.componentRef.setInput('termControlName', this.termControlName);\r\n }\r\n if ('sectionControlName' in instance) {\r\n this.componentRef.setInput('sectionControlName', this.sectionControlName);\r\n }\r\n if ('academicYearId' in instance) {\r\n this.componentRef.setInput('academicYearId', this.academicYearId);\r\n }\r\n if ('entityId' in instance) {\r\n this.componentRef.setInput('entityId', this.entityId);\r\n }\r\n if ('disabled' in instance) {\r\n this.componentRef.setInput('disabled', this.disabled);\r\n }\r\n if ('showLabels' in instance) {\r\n this.componentRef.setInput('showLabels', this.showLabels);\r\n }\r\n if ('gridCols' in instance) {\r\n this.componentRef.setInput('gridCols', this.gridCols);\r\n }\r\n if ('showAllPrograms' in instance) {\r\n this.componentRef.setInput('showAllPrograms', this.showAllPrograms);\r\n }\r\n if ('includeInactive' in instance) {\r\n this.componentRef.setInput('includeInactive', this.includeInactive);\r\n }\r\n\r\n // Detect changes\r\n this.componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n private destroyComponent(): void {\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n this.componentRef = null;\r\n this.viewContainerRef.clear();\r\n }\r\n }\r\n}\r\n\r\n","/*\n * Public API Surface of cloud-ide-shared\n */\n\nexport * from './lib/cloud-ide-shared';\n\n// Guards\nexport * from './lib/guards/auth.guard';\n\n// Services\nexport * from './lib/services/auth.service.interface';\nexport * from './lib/services/entity.service.interface';\nexport * from './lib/services/pin-code.service.interface';\nexport * from './lib/services/country.service.interface';\nexport * from './lib/services/nationality.service.interface';\nexport * from './lib/services/class-program-master.service.interface';\nexport * from './lib/services/program-term-section.service.interface';\nexport * from './lib/services/shared-object-id.service';\nexport * from './lib/services/general-master-type.service';\nexport * from './lib/services/general-master.service';\nexport * from './lib/services/user.service.interface';\nexport * from './lib/services/year-services.interface';\nexport * from './lib/services/fee.service.interface';\n\n// Components\nexport * from './lib/components/org-structure/org-structure.component';\nexport * from './lib/components/program-section-selector/program-section-selector.component'; // Keep for backward compatibility\nexport * from './lib/components/fee-details-viewer-wrapper/fee-details-viewer-wrapper.component';\nexport * from './lib/components/program-section-selector-wrapper/program-section-selector-wrapper.component';\n\n// Component Tokens\nexport * from './lib/services/fee-details-viewer.component.token';\nexport * from './lib/services/program-section-selector.component.token';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;MAYa,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPf,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGU,cAAc,EAAA,UAAA,EAAA,CAAA;kBAV1B,SAAS;+BACE,sBAAsB,EAAA,OAAA,EACvB,EAAE,EAAA,QAAA,EACD,CAAA;;;;AAIT,EAAA,CAAA,EAAA;;;ACOH;;;;;;;;;;;;AAYG;MACU,kBAAkB,GAAG,IAAI,cAAc,CAAe,qBAAqB;AAExF;;;;;;;;;;;;AAYG;MACU,uBAAuB,GAAG,IAAI,cAAc,CAAmB,uBAAuB;;MCxCtF,SAAS,GAAkB,CAAC,KAAK,EAAE,KAAK,KAAI;AACvD,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAiB;AAC9D,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,uBAAuB,CAAqB;AACpE,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG7B,IAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;;AAGvF,IAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;;QAE1B,WAAW,CAAC,gBAAgB,EAAE;;QAG9B,QAAQ,CAAC,uBAAuB,EAAE;AACpC,KAAC,CAAC;IAEF,IAAI,eAAe,EAAE;AACnB,QAAA,OAAO,IAAI;;;AAIb,IAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE;AACjC,QAAA,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG;AACpC,KAAA,CAAC;AAEF,IAAA,OAAO,KAAK;AACd;;ACaA;;;;;;;;;;;;;AAaG;MACU,oBAAoB,GAAG,IAAI,cAAc,CAAiB,iCAAiC;;ACxBxG;;;;;;;;;;;;;AAaG;MACU,sBAAsB,GAAG,IAAI,cAAc,CAAkB,wBAAwB;;ACPlG;;;;;;;;;;;;;AAaG;MACU,qBAAqB,GAAG,IAAI,cAAc,CAAkB,wBAAwB;;ACdjG;;;;;;;;;;;;;AAaG;MACU,yBAAyB,GAAG,IAAI,cAAc,CAAsB,4BAA4B;;ACrB7G;;;;;;;;;;;;;AAaG;MACU,kCAAkC,GAAG,IAAI,cAAc,CAA6B,mCAAmC;;ACkBpI;;;;;;;;;;;;;AAaG;MACU,kCAAkC,GAAG,IAAI,cAAc,CAA6B,kCAAkC;;AC1EnI;;;;;;;;;;;;AAYG;MAIU,qBAAqB,CAAA;AACxB,IAAA,kBAAkB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;AAuBG;IACH,gBAAgB,GAAA;AACd,QAAA,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC;QACrF,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAE5J,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE;;AAGnD;;;;;;;;;;;;;;;;;;AAkBG;AACH,IAAA,MAAM,qBAAqB,GAAA;AACzB,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE;YAC1D,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACjD,OAAO,CAAC,GAAG,CAAC,iDAAiD,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtF,gBAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ;;iBACxB;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC;;;QAEnE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC;AAC7E,YAAA,MAAM,KAAK;;;AAIf;;;;;;;;;;;;;;;;;;AAkBG;AACH,IAAA,yBAAyB,CAAC,KAAa,EAAA;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,KAAK,CAAA,WAAA,CAAa,CAAC;QAExE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAE7E,QAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAG;YAC/B,IAAI,SAAS,GAAG,CAAC;YACjB,MAAM,SAAS,GAAa,EAAE;YAE9B,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;gBAClC,OAAO,CAAC,SAAS,CAAC;AAChB,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;wBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACjD,SAAS,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ;;6BACpC;4BACL,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,sCAAA,EAAyC,KAAK,CAAA,CAAE,CAAC,CAAC;4BAC3E;;AAGF,wBAAA,SAAS,EAAE;AACX,wBAAA,IAAI,SAAS,KAAK,KAAK,EAAE;AACvB,4BAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;4BACxB,QAAQ,CAAC,QAAQ,EAAE;;qBAEtB;AACD,oBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,wBAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;;AAExB,iBAAA,CAAC;AACJ,aAAC,CAAC;AACJ,SAAC,CAAC;;AAGJ;;;;;;;;;;;;;;;;;;AAkBG;AACH,IAAA,8BAA8B,CAAC,SAAmC,EAAA;AAChE,QAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAG;AAC/B,YAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC;AAChC,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;oBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;AACjD,wBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ;;wBAGvC,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;4BACrC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;4BAClE;;AAGF,wBAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;wBACvB,QAAQ,CAAC,QAAQ,EAAE;;yBACd;wBACL,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;;iBAE9E;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;;AAExB,aAAA,CAAC;AACJ,SAAC,CAAC;;AAGJ;;;;;;;;;;;AAWG;AACH,IAAA,eAAe,CAAC,EAAU,EAAA;;QAExB,MAAM,aAAa,GAAG,mBAAmB;AACzC,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;;AAG/B;;;;;;AAMG;IACH,kBAAkB,GAAA;QAChB,OAAO;AACL,YAAA,WAAW,EAAE,uBAAuB;AACpC,YAAA,WAAW,EAAE,0CAA0C;AACvD,YAAA,eAAe,EAAE;SAClB;;uGAnMQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCAY,gCAAgC,CAAA;AACnC,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,4BAA4B,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;AACrE,IAAA,sBAAsB,GAAG,IAAI,CAAC,4BAA4B,CAAC,YAAY,EAAE;AAEhF,IAAA,WAAA,GAAA;AACE,QAAA,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC;;AAG9E;;AAEG;AACH,IAAA,WAAW,CAAC,IAAwB,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAA0C,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACjL,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAiD,KAAI;AACxD,YAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;gBACrB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;;AAEhE,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC;AACnE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK;;AAGhD;;;;AAIG;AACH,IAAA,QAAQ,CAAC,IAAgB,EAAA;AACvB,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,uBAAuB,EAAE,IAAI,CAAC;;AAG/E,QAAA,MAAM,OAAO,GAAe;AAC1B,YAAA,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YAClC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,cAAc,EAAE,IAAI,CAAC;SACtB;QAED,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAC1H,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAkD,GAAG,EAAE,OAAO;AAChF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAyD,KAAI;AAChE,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,WAAW,CAAC,EAAU,EAAA;AACpB,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,EAAE,CAAC;AACrD,QAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACzI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA0C,GAAG;aAC9D,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,UAAU,CAAC,EAAU,EAAA;AACnB,QAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACjI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAA4C,GAAG;AACnE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAmD,KAAI;AAC1D,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAU,EAAA;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,EAAE,CAAC;AACvD,QAAA,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE;AACtB,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACjI,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAkD,GAAG,EAAE,EAAE;AAC1E,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAyD,KAAI;AAChE,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACH,mBAAmB,CAAC,IAAY,EAAE,SAAkB,EAAA;AAClD,QAAA,MAAM,OAAO,GAA2B,EAAE,IAAI,EAAE;QAChD,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS;;AAElC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAyD,GAAG;aAC7E,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACK,eAAe,GAAA;QACrB,MAAM,WAAW,GAAuB,EAAE;AAC1C,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;YACtC,IAAI,EAAE,MAAK;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC;aAC/D;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;;AAErE,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,IAAI,YAAY,GAAG,mBAAmB;AAEtC,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,YAAY,GAAG,KAAK,CAAC,OAAO;;AACvB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAG,KAAK;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,YAAY,CAAC;QACjE,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;;uGApKvC,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;;;MCCY,4BAA4B,CAAA;AAC/B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,wBAAwB,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;AACjE,IAAA,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE;AAExE,IAAA,WAAA,GAAA;AACE,QAAA,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC;;AAG1E;;AAEG;AACH,IAAA,aAAa,CAAC,OAAkC,EAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAsC,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AACzK,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAA6C,KAAI;AACpD,YAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;gBACrB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;;AAE5D,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC;AAC/D,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;IACH,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK;;AAG5C;;;AAGG;AACH,IAAA,UAAU,CAAC,MAAkB,EAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,kBAAkB,EAAE,MAAM,CAAC;;AAG5E,QAAA,MAAM,OAAO,GAAe;AAC1B,YAAA,IAAI,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;YACtC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;YAC/C,oBAAoB,EAAE,MAAM,CAAC;SAC9B;QAED,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QACtH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA8C,GAAG,EAAE,OAAO;AAC5E,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAqD,KAAI;AAC5D,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,iBAAiB,EAAE;;SAE3B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,YAAY,CAAC,MAAkB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;;AAGhC;;AAEG;IACH,YAAY,CAAC,EAAU,EAAE,MAAkB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;;AAGhD;;;AAGG;AACH,IAAA,aAAa,CAAC,EAAU,EAAA;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,EAAE,CAAC;AAChD,QAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACrI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAsC,GAAG;aAC1D,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,YAAY,CAAC,EAAU,EAAA;AACrB,QAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AAC7H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAwC,GAAG;AAC/D,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAA+C,KAAI;AACtD,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,iBAAiB,EAAE;;SAE3B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,kBAAkB,CAAC,EAAU,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,EAAE,CAAC;AAClD,QAAA,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE;AACtB,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAC7H,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA8C,GAAG,EAAE,EAAE;AACtE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAqD,KAAI;AAC5D,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,iBAAiB,EAAE;;SAE3B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,qBAAqB,CAAC,IAAY,EAAE,MAAc,EAAE,SAAkB,EAAA;AACpE,QAAA,MAAM,OAAO,GAA2B,EAAE,IAAI,EAAE,MAAM,EAAE;QACxD,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS;;AAElC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AAChJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAyD,GAAG;aAC7E,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACK,iBAAiB,GAAA;QACvB,MAAM,cAAc,GAA8B,EAAE;AACpD,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC;YAC3C,IAAI,EAAE,MAAK;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC;aAC1D;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC;;AAEhE,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,IAAI,YAAY,GAAG,mBAAmB;AAEtC,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,YAAY,GAAG,KAAK,CAAC,OAAO;;AACvB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAG,KAAK;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,YAAY,CAAC;QAC5D,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;;uGAnLvC,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cAF3B,MAAM,EAAA,CAAA;;2FAEP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACsCD;;;;;;;;;;;;AAYG;MACU,kBAAkB,GAAG,IAAI,cAAc,CAAqB,2BAA2B;;ACsCpG;;;;;;;;;;;;;AAaG;MACU,4BAA4B,GAAG,IAAI,cAAc,CAAwB,6BAA6B;AAEnH;;;;;;;;;;;;;AAaG;MACU,2BAA2B,GAAG,IAAI,cAAc,CAAuB,4BAA4B;;ACvChH;;;;;;;;;;;;;AAaG;MACU,2BAA2B,GAAG,IAAI,cAAc,CAAuB,4BAA4B;AAEhH;;;;;;;;;;;;;AAaG;MACU,yBAAyB,GAAG,IAAI,cAAc,CAAqB,0BAA0B;;MC/G7F,+BAA+B,CAAA;;AAE1C,IAAA,cAAc,GAAG,KAAK,CAAU,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;AACtC,IAAA,WAAW,GAAG,KAAK,CAAU,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;AACnC,IAAA,IAAI,GAAG,KAAK,CAAuB,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;;AAG3C,IAAA,WAAW,GAAG,MAAM,EAAgC,CAAC;AACrD,IAAA,YAAY,GAAG,MAAM,EAAgC,CAAC;AACtD,IAAA,UAAU,GAAG,MAAM,EAAgC,CAAC;AAE5C,IAAA,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAmB;AAC/D,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG9B,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,YAAY,GAAG,MAAM,CAAiC,EAAE,wDAAC;IAEzD,QAAQ,GAAA;QACN,IAAI,CAAC,gBAAgB,EAAE;;AAGzB;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QAEpB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AAC7C,YAAA,IAAI,EAAE,CAAC,QAAkC,KAAI;gBAC3C,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE;oBACvC,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvD,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;;qBAC3B;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC;;AAEzD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC;AACtD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,iBAAiB,CAAC,QAAwC,EAAA;AAChE,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwC;QAC/D,MAAM,SAAS,GAAmC,EAAE;;AAGpD,QAAA,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAG;AACxB,YAAA,MAAM,IAAI,GAAiC;AACzC,gBAAA,GAAG,MAAM;AACT,gBAAA,QAAQ,EAAE;aACX;YACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC;AACrC,SAAC,CAAC;;AAGF,QAAA,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAG;AACxB,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YAC1C,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY;AACpC,gBAAA,IAAI,QAAQ,IAAI,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;oBACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE;oBACrC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE;AACvC,oBAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;qBACrB;AACL,oBAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAG1B,SAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC;AACvC,QAAA,OAAO,SAAS;;AAGlB;;AAEG;IACK,cAAc,CAAC,IAAkC,EAAE,OAAkD,EAAA;QAC3G,IAAI,KAAK,GAAG,CAAC;QACb,IAAI,OAAO,GAAG,IAAI;AAElB,QAAA,OAAO,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAChE,YAAA,KAAK,EAAE;YACP,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAE;;AAG9C,QAAA,OAAO,KAAK;;AAGd;;AAEG;AACK,IAAA,uBAAuB,CAAC,KAAqC,EAAA;QACnE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;AAE1E,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,gBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAE/C,SAAC,CAAC;;AAIJ;;AAEG;AACH,IAAA,UAAU,CAAC,QAAgB,EAAA;;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC5C,IAAI,MAAM,EAAE;;AAEV,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAE7B,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACxD,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;;iBACzB;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;;;;AAKhC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,WAAW,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,4BAA4B,CAAC,EAAE;AACnD,gBAAA,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ;AAC9B,aAAA,CAAC;;;AAIN;;AAEG;AACK,IAAA,cAAc,CAAC,QAAgB,EAAA;AACrC,QAAA,MAAM,WAAW,GAAG,CAAC,KAAqC,KAAyC;AACjG,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE;AACzB,oBAAA,OAAO,IAAI;;AAEb,gBAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,oBAAA,IAAI,KAAK;AAAE,wBAAA,OAAO,KAAK;;;AAG3B,YAAA,OAAO,IAAI;AACb,SAAC;AAED,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;;AAGzC;;AAEG;AACH,IAAA,UAAU,CAAC,QAAgB,EAAA;QACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,0CAA0C,CAAC,EAAE;AACjE,YAAA,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ;AAC9B,SAAA,CAAC;;uGAnKO,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnB5C,6zSAsLA,EAAA,MAAA,EAAA,CAAA,6wHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5KI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,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,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,gBAAgB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKP,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAZ3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,OAAA,EAC5B;wBACP,YAAY;wBACZ,sBAAsB;wBACtB,iBAAiB;wBACjB,oBAAoB;wBACpB;AACD,qBAAA,EAAA,QAAA,EAAA,6zSAAA,EAAA,MAAA,EAAA,CAAA,6wHAAA,CAAA,EAAA;;;MEgDU,yCAAyC,CAAA;;AAE3C,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAa;AACvC,IAAA,uBAAuB,GAAG,KAAK,CAAS,kBAAkB,mEAAC;AAC3D,IAAA,iBAAiB,GAAG,KAAK,CAAS,WAAW,6DAAC;AAC9C,IAAA,eAAe,GAAG,KAAK,CAAS,SAAS,2DAAC;AAC1C,IAAA,kBAAkB,GAAG,KAAK,CAAS,YAAY,8DAAC;AAChD,IAAA,cAAc,GAAG,KAAK,CAAgB,IAAI,0DAAC;AAC3C,IAAA,QAAQ,GAAG,KAAK,CAAgB,IAAI,oDAAC;AACrC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,UAAU,GAAG,KAAK,CAAU,IAAI,sDAAC;AACjC,IAAA,QAAQ,GAAG,KAAK,CAAS,kCAAkC,oDAAC;AAC5D,IAAA,eAAe,GAAG,KAAK,CAAU,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;AACxC,IAAA,eAAe,GAAG,KAAK,CAAU,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;;IAGxC,YAAY,GAAG,MAAM,EAAgC;;AAG7C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,mBAAmB,GAAG,MAAM,CAAC,kCAAkC,CAAC;AAChE,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAGzD,IAAA,mBAAmB,GAAG,MAAM,CAAkC,EAAE,+DAAC;AACjE,IAAA,oBAAoB,GAAG,MAAM,CAAiB,EAAE,gEAAC;AACjD,IAAA,iBAAiB,GAAG,MAAM,CAAiB,EAAE,6DAAC;AAC9C,IAAA,mBAAmB,GAAG,MAAM,CAAiB,EAAE,+DAAC;AAEhD,IAAA,0BAA0B,GAAG,MAAM,CAAU,KAAK,sEAAC;AACnD,IAAA,2BAA2B,GAAG,MAAM,CAAU,KAAK,uEAAC;AACpD,IAAA,wBAAwB,GAAG,MAAM,CAAU,KAAK,oEAAC;AACjD,IAAA,0BAA0B,GAAG,MAAM,CAAU,KAAK,sEAAC;AAEnD,IAAA,oBAAoB,GAAG,MAAM,CAAuC,IAAI,gEAAC;AACzE,IAAA,WAAW,GAAG,MAAM,CAAU,KAAK,uDAAC;IACrC,yBAAyB,GAAG,KAAK;;IAGzC,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAgB;;IAG5E,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAgB;;IAGtE,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAgB;;IAGpE,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAgB;;;AAI9D,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;QAC3C,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK;AAC3C,YAAA,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE;AACnB,YAAA,KAAK,EAAE,EAAE,CAAC,kBAAkB,IAAI;AACjC,SAAA,CAAC,CAAC;AACL,KAAC,+DAAC;AAEO,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC3C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;QAE1B,MAAM,aAAa,GAAG,OAAO,CAAC,6BAA6B,IAAK,OAAe,CAAC,6BAA6B;AAC7G,QAAA,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK;AAErE,QAAA,IAAI,MAA6C;AACjD,QAAA,IAAI,qBAAqB,IAAI,aAAa,EAAE;AAC1C,YAAA,MAAM,WAAW,GAAG,aAAa,CAAC,mBAAmB;AACrD,YAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,gBAAA,IAAI;AACF,oBAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA8B;;AAC7D,gBAAA,MAAM;AACN,oBAAA,OAAO,KAAK;;;iBAET,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE;gBAClE,MAAM,GAAG,WAAwC;;;AAIrD,QAAA,OAAO,MAAM,EAAE,UAAU,KAAK,IAAI;AACpC,KAAC,8DAAC;AAEO,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC3C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;QAE1B,MAAM,aAAa,GAAG,OAAO,CAAC,6BAA6B,IAAK,OAAe,CAAC,6BAA6B;AAC7G,QAAA,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK;AAErE,QAAA,IAAI,MAA6C;AACjD,QAAA,IAAI,qBAAqB,IAAI,aAAa,EAAE;AAC1C,YAAA,MAAM,WAAW,GAAG,aAAa,CAAC,mBAAmB;AACrD,YAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,gBAAA,IAAI;AACF,oBAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA8B;;AAC7D,gBAAA,MAAM;AACN,oBAAA,OAAO,KAAK;;;iBAET,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE;gBAClE,MAAM,GAAG,WAAwC;;;;AAKrD,QAAA,IAAI,MAAM,EAAE,QAAQ,KAAK,KAAK,EAAE;AAC9B,YAAA,OAAO,KAAK;;;AAId,QAAA,IAAI,MAAM,EAAE,QAAQ,KAAK,IAAI;YACzB,MAAM,EAAE,aAAa,KAAK,CAAC;AAC3B,YAAA,MAAM,EAAE,4BAA4B,KAAK,IAAI,EAAE;AACjD,YAAA,OAAO,KAAK;;;QAId,OAAO,MAAM,EAAE,QAAQ,KAAK,IAAI,IAAI,MAAM,EAAE,YAAY,KAAK,IAAI;AACnE,KAAC,4DAAC;AAEF,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;YAC7B,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,EAAE,KAAK;AACtE,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,KAAK;AAC1D,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,KAAK;AACtD,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,KAAK;AAE5D,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBACrB,cAAc,EAAE,cAAc,IAAI,IAAI;oBACtC,QAAQ,EAAE,QAAQ,IAAI,IAAI;oBAC1B,MAAM,EAAE,MAAM,IAAI,IAAI;oBACtB,SAAS,EAAE,SAAS,IAAI;AACzB,iBAAA,CAAC;;AAEN,SAAC,CAAC;;IAGJ,QAAQ,GAAA;QACN,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,kBAAkB,EAAE;;;QAGzB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,mBAAmB,EAAE;SAC3B,EAAE,CAAC,CAAC;;AAGL,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;QAC7B,IAAI,IAAI,EAAE;;YAER,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,EAAE;AACvC,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;iBACxC,SAAS,CAAC,MAAK;;AAEd,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,EAAE,KAAK;AACtE,gBAAA,IAAI,cAAc,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;;oBAE3F,UAAU,CAAC,MAAK;wBACd,IAAI,CAAC,mBAAmB,EAAE;qBAC3B,EAAE,GAAG,CAAC;;AAEX,aAAC,CAAC;;;IAIA,mBAAmB,GAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,EAAE,KAAK;AACtE,QAAA,IAAI,CAAC,cAAc;YAAE;;AAGrB,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;;AAGrC,QAAA,MAAM,aAAa,GAAG,WAAW,CAAC,MAAK;YACrC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzC,aAAa,CAAC,aAAa,CAAC;;AAE5B,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,cAAc,CAAC;gBACxF,IAAI,eAAe,EAAE;AACnB,oBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,eAAe,CAAC;;oBAG9C,MAAM,aAAa,GAAG,eAAe,CAAC,6BAA6B,IAAK,eAAuB,CAAC,6BAA6B;AAC7H,oBAAA,IAAI,MAA6C;AAEjD,oBAAA,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AACtD,wBAAA,IAAI,qBAAqB,IAAI,aAAa,EAAE;AAC1C,4BAAA,MAAM,WAAW,GAAG,aAAa,CAAC,mBAAmB;AACrD,4BAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,gCAAA,IAAI;AACF,oCAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA8B;;AAC7D,gCAAA,MAAM;AACN,oCAAA,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,WAAW,CAAC;;;iCAEjD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE;gCAClE,MAAM,GAAG,WAAwC;;;;;oBAMvD,UAAU,CAAC,MAAK;AACd,wBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,KAAK;AAC1D,wBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,KAAK;AACtD,wBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,KAAK;;AAG5D,wBAAA,MAAM,gBAAgB,GAAG,MAAM,EAAE,UAAU,KAAK,IAAI;wBACpD,IAAI,gBAAgB,EAAE;AACpB,4BAAA,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC;;4BAG7C,IAAI,QAAQ,EAAE;AACZ,gCAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAK;AAC3C,oCAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE;wCACjF,aAAa,CAAC,mBAAmB,CAAC;;AAElC,wCAAA,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC;;wCAGpD,IAAI,MAAM,EAAE;AACV,4CAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAK;AACzC,gDAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE;oDAC3E,aAAa,CAAC,iBAAiB,CAAC;;oDAEhC,IAAI,SAAS,EAAE;AACb,wDAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;;;6CAGzC,EAAE,GAAG,CAAC;4CACP,UAAU,CAAC,MAAM,aAAa,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC;;;iCAG7D,EAAE,GAAG,CAAC;gCACP,UAAU,CAAC,MAAM,aAAa,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC;;iCACrD;;AAEL,gCAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAK;AAC3C,oCAAA,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE;wCACvC,aAAa,CAAC,mBAAmB,CAAC;wCAClC,IAAI,MAAM,EAAE;AACV,4CAAA,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,SAAS,CAAC;4CACrD,IAAI,SAAS,EAAE;AACb,gDAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAK;AACzC,oDAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE;wDAC3E,aAAa,CAAC,iBAAiB,CAAC;AAChC,wDAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;;iDAEvC,EAAE,GAAG,CAAC;gDACP,UAAU,CAAC,MAAM,aAAa,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC;;;;iCAI/D,EAAE,GAAG,CAAC;gCACP,UAAU,CAAC,MAAM,aAAa,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC;;;6BAEvD;;AAEL,4BAAA,MAAM,cAAc,GAAG,MAAM,EAAE,QAAQ,KAAK,IAAI,IAAI,MAAM,EAAE,YAAY,KAAK,IAAI;AACjF,4BAAA,IAAI,cAAc,IAAI,MAAM,EAAE;AAC5B,gCAAA,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,SAAS,CAAC;;gCAGrD,IAAI,SAAS,EAAE;AACb,oCAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAK;AACzC,wCAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE;4CAC3E,aAAa,CAAC,iBAAiB,CAAC;AAChC,4CAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;;qCAEvC,EAAE,GAAG,CAAC;oCACP,UAAU,CAAC,MAAM,aAAa,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC;;;;qBAI/D,EAAE,CAAC,CAAC;;;SAGV,EAAE,GAAG,CAAC;;QAEP,UAAU,CAAC,MAAK;YACd,aAAa,CAAC,aAAa,CAAC;;AAE5B,YAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;SACvC,EAAE,IAAI,CAAC;;IAGV,WAAW,GAAA;;;IAIH,kBAAkB,GAAA;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,IAAI,CAAC,IAAI;YAAE;;QAGX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,EAAE;AACvC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,cAAc,IAAG;AAC1B,YAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;AAC3C,SAAC,CAAC;;QAGJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE;AACjC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,QAAQ,IAAG;AACpB,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC/B,SAAC,CAAC;;QAGJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE;AAC/B,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAG;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAC3B,SAAC,CAAC;;IAGE,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC;AAEzC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;;AAG9C,QAAA,MAAM,OAAO,GAAiB;AAC5B,YAAA,UAAU,EAAE;SACb;;AAGD,QAAA,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE;AAC9B,YAAA,OAAO,CAAC,+BAA+B,CAAC,GAAG,cAAc;;;AAI3D,QAAA,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE;AACxB,YAAA,OAAO,CAAC,uBAAuB,CAAC,GAAG,QAAQ;;;QAI7C,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;;QAGnC,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AACpE,YAAA,IAAI,EAAE,CAAC,QAA8C,KAAI;gBACvD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,MAAM,SAAS,GAAoC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,EAAE;AACpG,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,SAAS,CAAC,MAAM,iBAAiB,EAAE;wBACzD,OAAO;wBACP,eAAe;wBACf,cAAc;wBACd,QAAQ;AACR,wBAAA,OAAO,EAAE;AACV,qBAAA,CAAC;;qBACG;AACL,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AAChC,oBAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,QAAQ,CAAC;;AAEtD,gBAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC;aAC3C;AACD,YAAA,KAAK,EAAE,CAAC,QAAuC,KAAI;AACjD,gBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,QAAQ,CAAC;AAC1D,gBAAA,MAAM,YAAY,GAAG,QAAQ,EAAE,KAAK,EAAE,OAAO;gBAC7C,IAAI,YAAY,EAAE;AAChB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC;;AAE9C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE7C,SAAA,CAAC;;AAGJ,IAAA,oBAAoB,CAAC,KAAuB,EAAA;AAC1C,QAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC;AAEzC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;;AAG9C,QAAA,MAAM,OAAO,GAAiB;AAC5B,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;AACxB,YAAA,SAAS,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;AACjD,YAAA,UAAU,EAAE;SACb;;AAGD,QAAA,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE;AAC9B,YAAA,OAAO,CAAC,+BAA+B,CAAC,GAAG,cAAc;;;AAI3D,QAAA,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE;AACxB,YAAA,OAAO,CAAC,uBAAuB,CAAC,GAAG,QAAQ;;;QAI7C,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;;QAGnC,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AACpE,YAAA,IAAI,EAAE,CAAC,QAA8C,KAAI;gBACvD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,MAAM,SAAS,GAAoC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,EAAE;AACpG,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;;qBAClC;AACL,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;;AAElC,gBAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC;aAC3C;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE7C,SAAA,CAAC;;AAGJ,IAAA,oBAAoB,CAAC,cAAyC,EAAA;;AAE5D,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;QAEhC,IAAI,CAAC,cAAc,EAAE;;AAEnB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;YAC7B,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,UAAU,CAAC;AACd,oBAAA,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;AAC9B,oBAAA,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;AAC5B,oBAAA,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG;AAC9B,iBAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;YAE1B;;;AAIF,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,cAAc,CAAC;QACxF,IAAI,CAAC,eAAe,EAAE;YACpB;;AAGF,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,eAAe,CAAC;AAE9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,IAAI,CAAC,IAAI;YAAE;;AAGX,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,KAAK;AACjE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,KAAK;AAC7D,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,KAAK;;AAGnE,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC;;AAG7C,YAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAK;AAC3C,gBAAA,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE;oBACvC,aAAa,CAAC,mBAAmB,CAAC;;oBAGlC,MAAM,YAAY,GAAG,eAAe;AAClC,wBAAA,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,eAAe,CAAC;AAEpE,oBAAA,IAAI,CAAC,YAAY,IAAI,eAAe,EAAE;;wBAEpC,IAAI,CAAC,UAAU,CAAC;AACd,4BAAA,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG;AAC7B,yBAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;oBAI1B,MAAM,aAAa,GAAG,YAAY,GAAG,eAAe,GAAG,SAAS;AAChE,oBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,wBAAA,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,aAAa,CAAC;;AAGzD,wBAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAK;AACzC,4BAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE;gCACpC,aAAa,CAAC,iBAAiB,CAAC;;gCAGhC,MAAM,UAAU,GAAG,aAAa;AAC9B,oCAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC;AAE/D,gCAAA,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE;;oCAEhC,IAAI,CAAC,UAAU,CAAC;AACd,wCAAA,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG;AAC3B,qCAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;oCAGxB,IAAI,CAAC,UAAU,CAAC;AACd,wCAAA,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG;AAC9B,qCAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AACnB,qCAAA,IAAI,UAAU,IAAI,gBAAgB,EAAE;;AAEzC,oCAAA,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;;AAG3C,oCAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC,MAAK;AAC5C,wCAAA,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE;4CACtC,aAAa,CAAC,oBAAoB,CAAC;;AAGnC,4CAAA,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC;4CAExF,IAAI,CAAC,aAAa,EAAE;;gDAElB,IAAI,CAAC,UAAU,CAAC;AACd,oDAAA,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG;AAC9B,iDAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;qCAG7B,EAAE,GAAG,CAAC;oCACP,UAAU,CAAC,MAAM,aAAa,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC;;;yBAGhE,EAAE,GAAG,CAAC;wBACP,UAAU,CAAC,MAAM,aAAa,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC;;;aAG7D,EAAE,GAAG,CAAC;YACP,UAAU,CAAC,MAAM,aAAa,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC;;aACrD;;AAEL,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,SAAS,CAAC;;AAGrD,gBAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAK;AACzC,oBAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE;wBACpC,aAAa,CAAC,iBAAiB,CAAC;;wBAGhC,MAAM,UAAU,GAAG,aAAa;AAC9B,4BAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC;AAE/D,wBAAA,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE;;4BAEhC,IAAI,CAAC,UAAU,CAAC;AACd,gCAAA,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG;AAC3B,6BAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;4BAGxB,IAAI,CAAC,UAAU,CAAC;AACd,gCAAA,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG;AAC9B,6BAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AACnB,6BAAA,IAAI,UAAU,IAAI,gBAAgB,EAAE;;AAEzC,4BAAA,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;;AAG3C,4BAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC,MAAK;AAC5C,gCAAA,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE;oCACtC,aAAa,CAAC,oBAAoB,CAAC;;AAGnC,oCAAA,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC;oCAExF,IAAI,CAAC,aAAa,EAAE;;wCAElB,IAAI,CAAC,UAAU,CAAC;AACd,4CAAA,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG;AAC9B,yCAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;6BAG7B,EAAE,GAAG,CAAC;4BACP,UAAU,CAAC,MAAM,aAAa,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC;;;iBAGhE,EAAE,GAAG,CAAC;gBACP,UAAU,CAAC,MAAM,aAAa,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC;;;;AAKtD,IAAA,wBAAwB,CAAC,cAAsB,EAAA;AACrD,QAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC;AAE1C,QAAA,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC;AAC/C,YAAA,8BAA8B,EAAE,cAAc;AAC9C,YAAA,UAAU,EAAE;AACb,SAAA,CAAC;AAEF,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,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmC,GAAG,CAAC,CAAC,SAAS,CAAC;AAC7D,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE;oBACvC,MAAM,QAAQ,GAAgC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,EAAE;AAC/F,oBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAiC,MAAM;AACjF,wBAAA,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;wBACvB,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,IAAI;qBACpD,CAAC,CAAC,CAAC;;qBACC;AACL,oBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;;AAEnC,gBAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC;aAC5C;AACD,YAAA,KAAK,EAAE,CAAC,QAAuC,KAAI;AACjD,gBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,QAAQ,CAAC;AAClD,gBAAA,MAAM,YAAY,GAAG,QAAQ,EAAE,KAAK,EAAE,OAAO;gBAC7C,IAAI,YAAY,EAAE;AAChB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC;;AAE9C,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;AACjC,gBAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE9C,SAAA,CAAC;;AAGJ,IAAA,cAAc,CAAC,QAAmC,EAAA;AAChD,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AAEhC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;QAC7B,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,UAAU,CAAC;AACd,gBAAA,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;AAC5B,gBAAA,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG;AAC9B,aAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAG1B,QAAA,MAAM,cAAc,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,EAAE,KAAK;AACvE,QAAA,IAAI,cAAc,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC7C,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,IAAI,SAAS,CAAC;;;IAI7D,qBAAqB,CAAC,cAAsB,EAAE,QAAiB,EAAA;AACrE,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;AAEvC,QAAA,MAAM,OAAO,GAA+B;AAC1C,YAAA,6BAA6B,EAAE,cAAc;YAC7C,6BAA6B,EAAE,QAAQ,IAAI,SAAS;AACpD,YAAA,UAAU,EAAE;SACiB;AAE/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,gBAAgB;YACnC;AACD,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAqC,GAAG;AAClD,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,EAAE,IAAI,EAAE;oBACvC,MAAM,KAAK,GAAiC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,EAAE;;oBAE7F,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAgC,KAAI;;wBAE7D,IAAI,QAAQ,GAAG,EAAE;AACjB,wBAAA,IAAI,IAAI,CAAC,kCAAkC,EAAE;AAC3C,4BAAA,IAAI,OAAO,IAAI,CAAC,kCAAkC,KAAK,QAAQ,EAAE;gCAC/D,QAAQ,GAAG,IAAI,CAAC,kCAAkC,CAAC,GAAG,IAAI,EAAE;;AACvD,iCAAA,IAAI,OAAO,IAAI,CAAC,kCAAkC,KAAK,QAAQ,EAAE;AACtE,gCAAA,QAAQ,GAAG,IAAI,CAAC,kCAAkC,IAAI,EAAE;;;wBAI5D,OAAO;AACL,4BAAA,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;4BACrB,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE;AAC/C,4BAAA,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;AACnB,4BAAA,kCAAkC,EAAE;yBACrC;AACH,qBAAC,CAAC;AAEF,oBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;;qBAC9B;AACL,oBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;;AAEhC,gBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC;aACzC;AACD,YAAA,KAAK,EAAE,CAAC,QAAuC,KAAI;AACjD,gBAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,QAAQ,CAAC;AACvD,gBAAA,MAAM,YAAY,GAAG,QAAQ,EAAE,KAAK,EAAE,OAAO;gBAC7C,IAAI,YAAY,EAAE;AAChB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC;;AAE9C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE3C,SAAA,CAAC;;AAGN,IAAA,YAAY,CAAC,MAAiC,EAAA;AAC5C,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AAEhC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;QAC7B,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,UAAU,CAAC;AACd,gBAAA,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG;AAC9B,aAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;QAG1B,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;;aAC/B;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B,MAAM,cAAc,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3D,IAAI,cAAc,EAAE;gBAClB,cAAc,CAAC,eAAe,EAAE;gBAChC,cAAc,CAAC,sBAAsB,EAAE;;;;AAKrC,IAAA,uBAAuB,CAAC,MAAc,EAAA;AAC5C,QAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC;AAEzC,QAAA,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC;AACjC,YAAA,mCAAmC,EAAE,MAAM;AAC3C,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE;AACJ,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,KAAK,EAAE;AACR;AACyB,SAAA,CAAC;AAE7B,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;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAkC,GAAG;AAC/C,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,EAAE,IAAI,EAAE;oBACvC,MAAM,QAAQ,GAA+B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,EAAE;AAC9F,oBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;AACvC,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;oBAEjC,IAAI,WAAW,EAAE;AACf,wBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAC1B,QAAQ,CAAC,GAAG,CAAC,OAAO,KAAK;AACvB,4BAAA,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE;4BACxB,KAAK,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,IAAI;yBACtD,CAAC,CAAC,CACJ;AAED,wBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;wBAC7B,MAAM,cAAc,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC3D,IAAI,cAAc,EAAE;4BAClB,cAAc,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;4BACnD,cAAc,CAAC,sBAAsB,EAAE;;;yBAEpC;AACL,wBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AAChC,wBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;wBAC7B,MAAM,cAAc,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC3D,IAAI,cAAc,EAAE;4BAClB,cAAc,CAAC,eAAe,EAAE;4BAChC,cAAc,CAAC,sBAAsB,EAAE;;;;qBAGtC;AACL,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AAChC,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;oBAC7B,MAAM,cAAc,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC3D,IAAI,cAAc,EAAE;wBAClB,cAAc,CAAC,eAAe,EAAE;wBAChC,cAAc,CAAC,sBAAsB,EAAE;;;AAG3C,gBAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC;aAC3C;AACD,YAAA,KAAK,EAAE,CAAC,QAAuC,KAAI;AACjD,gBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,QAAQ,CAAC;AAClD,gBAAA,MAAM,YAAY,GAAG,QAAQ,EAAE,KAAK,EAAE,OAAO;gBAC7C,IAAI,YAAY,EAAE;AAChB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC;;AAE9C,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AAChC,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;gBAC7B,MAAM,cAAc,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC3D,IAAI,cAAc,EAAE;oBAClB,cAAc,CAAC,eAAe,EAAE;oBAChC,cAAc,CAAC,sBAAsB,EAAE;;AAEzC,gBAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE7C,SAAA,CAAC;;uGAnzBK,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,k2DC/DtD,mqEAyDA,EAAA,MAAA,EAAA,CAAA,qHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDFI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,0TACnB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAMV,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAZrD,SAAS;+BACE,sCAAsC,EAAA,UAAA,EACpC,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,mBAAmB;wBACnB;AACD,qBAAA,EAAA,QAAA,EAAA,mqEAAA,EAAA,MAAA,EAAA,CAAA,qHAAA,CAAA,EAAA;;;AE7CH;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MACU,kCAAkC,GAAG,IAAI,cAAc,CAAsC,2BAA2B;;ACnCrI;;;AAGG;MAMU,gCAAgC,CAAA;AAC1B,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,cAAc,GAAG,MAAM,CAAC,kCAAkC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAExF,YAAY,GAA6B,IAAI;;IAG5C,MAAM,GAAY,KAAK;IACvB,OAAO,GAAQ,IAAI;IACnB,cAAc,GAAgB,IAAI;IAClC,QAAQ,GAAkB,IAAI;;AAG7B,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;IAE3C,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE;YACtC,IAAI,CAAC,aAAa,EAAE;;;AAIxB,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;AACrB,YAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC5D,IAAI,CAAC,aAAa,EAAE;;iBACf,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC5C,IAAI,CAAC,gBAAgB,EAAE;;AAClB,iBAAA,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC5B,IAAI,CAAC,qBAAqB,EAAE;;;AAEzB,aAAA,IAAI,IAAI,CAAC,YAAY,EAAE;;YAE5B,IAAI,CAAC,qBAAqB,EAAE;;;IAIhC,WAAW,GAAA;QACT,IAAI,CAAC,gBAAgB,EAAE;;IAGjB,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,OAAO,CAAC,IAAI,CAAC,gGAAgG,CAAC;YAC9G;;AAGF,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;;YAErB,IAAI,CAAC,qBAAqB,EAAE;YAC5B;;AAGF,QAAA,IAAI;;AAEF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;;YAG9E,IAAI,CAAC,qBAAqB,EAAE;;YAG5B,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACrC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM;;gBAEtD,IAAI,YAAY,IAAI,OAAO,YAAY,CAAC,SAAS,KAAK,UAAU,EAAE;AAChE,oBAAA,YAAY,CAAC,SAAS,CAAC,MAAK;AAC1B,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpB,qBAAC,CAAC;;qBACG,IAAI,YAAY,IAAI,OAAO,YAAY,CAAC,IAAI,KAAK,UAAU,EAAE;;AAElE,oBAAA,YAAY,CAAC,SAAS,CAAC,MAAK;AAC1B,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpB,qBAAC,CAAC;;;;QAGN,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;;;IAI5D,qBAAqB,GAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;;;QAIxB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;QACnD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC;QACjE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;;AAGrD,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;;IAG7C,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;;;uGAnGtB,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,gQAFjC,CAAA,kDAAA,CAAoD,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAEnD,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAL5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wCAAwC;AAClD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,kDAAA;AACX,iBAAA;8BASU,MAAM,EAAA,CAAA;sBAAd;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBAGS,MAAM,EAAA,CAAA;sBAAf;;;ACOH;;;;;;;;;;;;;;;;;;;;;;AAsBG;MACU,wCAAwC,GAAG,IAAI,cAAc,CAA4C,iCAAiC;;ACpDvJ;;;AAGG;MAMU,sCAAsC,CAAA;AAChC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,cAAc,GAAG,MAAM,CAAC,wCAAwC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE9F,YAAY,GAA6B,IAAI;;AAG5C,IAAA,SAAS;IACT,uBAAuB,GAAW,kBAAkB;IACpD,iBAAiB,GAAW,WAAW;IACvC,eAAe,GAAW,SAAS;IACnC,kBAAkB,GAAW,YAAY;IACzC,cAAc,GAAkB,IAAI;IACpC,QAAQ,GAAkB,IAAI;IAC9B,QAAQ,GAAY,KAAK;IACzB,UAAU,GAAY,IAAI;IAC1B,QAAQ,GAAW,kCAAkC;IACrD,eAAe,GAAY,KAAK;IAChC,eAAe,GAAY,KAAK;;AAG/B,IAAA,YAAY,GAAG,IAAI,YAAY,EAAgC;IAEzE,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,EAAE;YACzC,IAAI,CAAC,aAAa,EAAE;;;AAIxB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,qBAAqB,EAAE;;AACvB,aAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE;YACtF,IAAI,CAAC,aAAa,EAAE;;;IAIxB,WAAW,GAAA;QACT,IAAI,CAAC,gBAAgB,EAAE;;IAGjB,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,OAAO,CAAC,IAAI,CAAC,4GAA4G,CAAC;YAC1H;;AAGF,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC;YAC1E;;AAGF,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;;YAErB,IAAI,CAAC,qBAAqB,EAAE;YAC5B;;AAGF,QAAA,IAAI;;AAEF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;;YAG9E,IAAI,CAAC,qBAAqB,EAAE;;YAG5B,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE;gBAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY;gBAClE,IAAI,kBAAkB,IAAI,OAAO,kBAAkB,CAAC,SAAS,KAAK,UAAU,EAAE;AAC5E,oBAAA,kBAAkB,CAAC,SAAS,CAAC,CAAC,MAAoC,KAAI;AACpE,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,qBAAC,CAAC;;;;QAGN,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC;;;IAIlE,qBAAqB,GAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;AAExB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;;;AAI3C,QAAA,IAAI,WAAW,IAAI,QAAQ,EAAE;YAC3B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;;AAEzD,QAAA,IAAI,yBAAyB,IAAI,QAAQ,EAAE;YACzC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,yBAAyB,EAAE,IAAI,CAAC,uBAAuB,CAAC;;AAErF,QAAA,IAAI,mBAAmB,IAAI,QAAQ,EAAE;YACnC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC;;AAEzE,QAAA,IAAI,iBAAiB,IAAI,QAAQ,EAAE;YACjC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC;;AAErE,QAAA,IAAI,oBAAoB,IAAI,QAAQ,EAAE;YACpC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC;;AAE3E,QAAA,IAAI,gBAAgB,IAAI,QAAQ,EAAE;YAChC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC;;AAEnE,QAAA,IAAI,UAAU,IAAI,QAAQ,EAAE;YAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;;AAEvD,QAAA,IAAI,UAAU,IAAI,QAAQ,EAAE;YAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;;AAEvD,QAAA,IAAI,YAAY,IAAI,QAAQ,EAAE;YAC5B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC;;AAE3D,QAAA,IAAI,UAAU,IAAI,QAAQ,EAAE;YAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;;AAEvD,QAAA,IAAI,iBAAiB,IAAI,QAAQ,EAAE;YACjC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC;;AAErE,QAAA,IAAI,iBAAiB,IAAI,QAAQ,EAAE;YACjC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC;;;AAIrE,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;;IAG7C,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;;;uGApItB,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,4jBAFvC,CAAA,kDAAA,CAAoD,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAEnD,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBALlD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8CAA8C;AACxD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,kDAAA;AACX,iBAAA;8BASU,SAAS,EAAA,CAAA;sBAAjB;gBACQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBAGS,YAAY,EAAA,CAAA;sBAArB;;;ACnCH;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"cloud-ide-shared.mjs","sources":["../../../projects/cloud-ide-shared/src/lib/cloud-ide-shared.ts","../../../projects/cloud-ide-shared/src/lib/services/auth.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/guards/auth.guard.ts","../../../projects/cloud-ide-shared/src/lib/services/entity.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/pin-code.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/country.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/nationality.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/currency.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/class-program-master.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/program-term-section.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/shared-object-id.service.ts","../../../projects/cloud-ide-shared/src/lib/services/general-master-type.service.ts","../../../projects/cloud-ide-shared/src/lib/services/general-master.service.ts","../../../projects/cloud-ide-shared/src/lib/services/user.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/year-services.interface.ts","../../../projects/cloud-ide-shared/src/lib/services/fee.service.interface.ts","../../../projects/cloud-ide-shared/src/lib/components/org-structure/org-structure.component.ts","../../../projects/cloud-ide-shared/src/lib/components/org-structure/org-structure.component.html","../../../projects/cloud-ide-shared/src/lib/components/program-section-selector/program-section-selector.component.ts","../../../projects/cloud-ide-shared/src/lib/components/program-section-selector/program-section-selector.component.html","../../../projects/cloud-ide-shared/src/lib/services/fee-details-viewer.component.token.ts","../../../projects/cloud-ide-shared/src/lib/components/fee-details-viewer-wrapper/fee-details-viewer-wrapper.component.ts","../../../projects/cloud-ide-shared/src/lib/services/program-section-selector.component.token.ts","../../../projects/cloud-ide-shared/src/lib/components/program-section-selector-wrapper/program-section-selector-wrapper.component.ts","../../../projects/cloud-ide-shared/src/public-api.ts","../../../projects/cloud-ide-shared/src/cloud-ide-shared.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-cloud-ide-shared',\r\n imports: [],\r\n template: `\r\n <p>\r\n cloud-ide-shared works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class CloudIdeShared {\r\n\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n// Interface for auth service to avoid circular dependency\r\nexport interface IAuthService {\r\n isAuthenticated(): boolean;\r\n isTokenExpired(): boolean;\r\n signOut(): void;\r\n refreshAuthState(): void;\r\n}\r\n\r\n// Interface for app state service to avoid circular dependency\r\nexport interface IAppStateService {\r\n isUserAuthenticated(): boolean;\r\n refreshFromLocalStorage(): void;\r\n}\r\n\r\n/**\r\n * Injection token for Auth Service (CloudIdeAuthService)\r\n * Used to provide and inject authentication service implementations\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: AUTH_SERVICE_TOKEN, useExisting: CloudIdeAuthService }\r\n * \r\n * // In component\r\n * private authService = inject(AUTH_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const AUTH_SERVICE_TOKEN = new InjectionToken<IAuthService>('CloudIdeAuthService');\r\n\r\n/**\r\n * Injection token for App State Service (AppStateHelperService)\r\n * Used to provide and inject app state service implementations\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: APP_STATE_SERVICE_TOKEN, useExisting: AppStateHelperService }\r\n * \r\n * // In component\r\n * private appStateService = inject(APP_STATE_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const APP_STATE_SERVICE_TOKEN = new InjectionToken<IAppStateService>('AppStateHelperService');\r\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { IAuthService, AUTH_SERVICE_TOKEN, IAppStateService, APP_STATE_SERVICE_TOKEN } from '../services/auth.service.interface';\n\nexport const authGuard: CanActivateFn = (route, state) => {\n const authService = inject(AUTH_SERVICE_TOKEN) as IAuthService;\n const appState = inject(APP_STATE_SERVICE_TOKEN) as IAppStateService;\n const router = inject(Router);\n \n // Check if user is authenticated using current state (without refreshing first)\n const isAuthenticated = appState.isUserAuthenticated() && !authService.isTokenExpired();\n \n // Defer state refresh to next change detection cycle to avoid ExpressionChangedAfterItHasBeenCheckedError\n Promise.resolve().then(() => {\n // Refresh auth state to make sure it's current\n authService.refreshAuthState();\n \n // Refresh app state from localStorage to ensure synchronization\n appState.refreshFromLocalStorage();\n });\n \n if (isAuthenticated) {\n return true;\n }\n \n // Redirect to login page with the intended destination\n router.navigate(['/auth/sign-in'], { \n queryParams: { returnUrl: state.url }\n });\n \n return false;\n};\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n entityControllerResponse, \r\n MEntity,\r\n CoreSystemEntitySaveUpdatePayload,\r\n entityByIdControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Entity Management Service\r\n * This interface defines the contract for entity management operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IEntityService {\r\n /**\r\n * Get list of entities\r\n * @param body - Query parameters for filtering/pagination\r\n * @returns Observable of entity list response\r\n */\r\n getEntityList(body: MEntity): Observable<entityControllerResponse>;\r\n\r\n /**\r\n * Get entity by ID\r\n * @param entityId - ID of the entity to retrieve\r\n * @returns Observable of the entity data\r\n */\r\n getEntityById(entityId: string): Observable<entityByIdControllerResponse>;\r\n\r\n /**\r\n * Save or update entity data\r\n * @param data - Entity data to save/update\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateEntity(data: CoreSystemEntitySaveUpdatePayload): Observable<entityControllerResponse>;\r\n\r\n /**\r\n * Delete entity by ID\r\n * @param entityId - ID of the entity to delete\r\n * @returns Observable of delete response\r\n */\r\n deleteEntity(entityId: string): Observable<entityControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Entity Management Service (CideCoreEntityManagementService)\r\n * Used to provide and inject entity service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: ENTITY_SERVICE_TOKEN, useExisting: CideCoreEntityManagementService }\r\n * \r\n * // In component\r\n * private entityService = inject(ENTITY_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const ENTITY_SERVICE_TOKEN = new InjectionToken<IEntityService>('CideCoreEntityManagementService');\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n MPinCodeSelect,\r\n pinCodeSelectControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Pin Code Service\r\n * This interface defines the contract for pin code (postal code) operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IPinCodeService {\r\n /**\r\n * Get pin code data from API\r\n * @param body - MPinCodeSelect payload with sypin_pincode\r\n * @returns Observable of pin code select response\r\n */\r\n getPinCodeData(body: MPinCodeSelect): Observable<pinCodeSelectControllerResponse>;\r\n\r\n /**\r\n * Get pin code data by specific pin code\r\n * @param pincode - The pin code to search for\r\n * @returns Observable of pin code data\r\n */\r\n getPinCodeByCode(pincode: string): Observable<pinCodeSelectControllerResponse>;\r\n\r\n /**\r\n * Get all postal codes with default parameters\r\n * @returns Observable of all postal codes\r\n */\r\n getAllPostalCodes(): Observable<pinCodeSelectControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Pin Code Service (CideCorePinCodeService)\r\n * Used to provide and inject pin code service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: PIN_CODE_SERVICE_TOKEN, useExisting: CideCorePinCodeService }\r\n * \r\n * // In component\r\n * private pinCodeService = inject(PIN_CODE_SERVICE_TOKEN) as IPinCodeService;\r\n * ```\r\n */\r\nexport const PIN_CODE_SERVICE_TOKEN = new InjectionToken<IPinCodeService>('CideCorePinCodeService');\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n MSyctrList,\r\n countryListControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Country Service\r\n * This interface defines the contract for country operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface ICountryService {\r\n /**\r\n * Get all countries from API\r\n * @param body - MSyctrList payload for filtering\r\n * @returns Observable of country list response\r\n */\r\n getAllCountries(body: Partial<MSyctrList>): Observable<countryListControllerResponse>;\r\n\r\n /**\r\n * Get countries with default parameters\r\n * @returns Observable of country list response\r\n */\r\n getCountries(): Observable<countryListControllerResponse>;\r\n\r\n /**\r\n * Search countries with specific filters\r\n * @param filters - Search criteria for countries\r\n * @returns Observable of filtered country list\r\n */\r\n searchCountries(filters: Partial<MSyctrList>): Observable<countryListControllerResponse>;\r\n\r\n /**\r\n * Get country by ID\r\n * @param countryId - ID of the country to retrieve\r\n * @returns Observable of country data\r\n */\r\n getCountryById(countryId: string): Observable<countryListControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Country Service (CideCoreCountryService)\r\n * Used to provide and inject country service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: COUNTRY_SERVICE_TOKEN, useExisting: CideCoreCountryService }\r\n * \r\n * // In component\r\n * private countryService = inject(COUNTRY_SERVICE_TOKEN) as ICountryService;\r\n * ```\r\n */\r\nexport const COUNTRY_SERVICE_TOKEN = new InjectionToken<ICountryService>('CideCoreCountryService');\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n CoreNationalityListPayload,\r\n nationalityListControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Nationality Service\r\n * This interface defines the contract for nationality operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface INationalityService {\r\n /**\r\n * Get all nationalities from API\r\n * @param body - CoreNationalityListPayload for filtering\r\n * @returns Observable of nationality list response\r\n */\r\n getAllNationalities(body: Partial<CoreNationalityListPayload>): Observable<nationalityListControllerResponse>;\r\n\r\n /**\r\n * Get nationalities with default parameters\r\n * @returns Observable of nationality list response\r\n */\r\n getNationalities(): Observable<nationalityListControllerResponse>;\r\n\r\n /**\r\n * Search nationalities with specific filters\r\n * @param filters - Search criteria for nationalities\r\n * @returns Observable of filtered nationality list\r\n */\r\n searchNationalities(filters: Partial<CoreNationalityListPayload>): Observable<nationalityListControllerResponse>;\r\n\r\n /**\r\n * Get nationality by ID\r\n * @param nationalityId - ID of the nationality to retrieve\r\n * @returns Observable of nationality data\r\n */\r\n getNationalityById(nationalityId: string): Observable<nationalityListControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Nationality Service (CideCoreNationalityService)\r\n * Used to provide and inject nationality service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: NATIONALITY_SERVICE_TOKEN, useExisting: CideCoreNationalityService }\r\n * \r\n * // In component\r\n * private nationalityService = inject(NATIONALITY_SERVICE_TOKEN) as INationalityService;\r\n * ```\r\n */\r\nexport const NATIONALITY_SERVICE_TOKEN = new InjectionToken<INationalityService>('CideCoreNationalityService');\r\n\r\n\r\n\r\n\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n MSycrList,\r\n currencyListControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Currency Service\r\n * This interface defines the contract for currency operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface ICurrencyService {\r\n /**\r\n * Get all currencies from API\r\n * @param body - MSycrList payload for filtering\r\n * @returns Observable of currency list response\r\n */\r\n getAllCurrencies(body: Partial<MSycrList>): Observable<currencyListControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Currency Service (CideCoreCurrencyService)\r\n * Used to provide and inject currency service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: CURRENCY_SERVICE_TOKEN, useExisting: CideCoreCurrencyService }\r\n * \r\n * // In component\r\n * private currencyService = inject(CURRENCY_SERVICE_TOKEN) as ICurrencyService;\r\n * ```\r\n */\r\nexport const CURRENCY_SERVICE_TOKEN = new InjectionToken<ICurrencyService>('CideCoreCurrencyService');\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n MClassProgramMaster,\r\n classProgramMasterControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Class Program Master Service\r\n * This interface defines the contract for class program master operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IClassProgramMasterService {\r\n /**\r\n * Get all class program masters from API\r\n * @param body - MClassProgramMaster for filtering\r\n * @returns Observable of class program master list response\r\n */\r\n getClassProgramMasterList(body: Partial<MClassProgramMaster>): Observable<classProgramMasterControllerResponse>;\r\n\r\n /**\r\n * Get class program masters with default parameters\r\n * @returns Observable of class program master list response\r\n */\r\n getClassProgramMasters(): Observable<classProgramMasterControllerResponse>;\r\n\r\n /**\r\n * Search class program masters with specific filters\r\n * @param filters - Search criteria for class program masters\r\n * @returns Observable of filtered class program master list\r\n */\r\n searchClassProgramMasters(filters: Partial<MClassProgramMaster>): Observable<classProgramMasterControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Class Program Master Service (CideCoreClassProgramMasterService)\r\n * Used to provide and inject class program master service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: CLASS_PROGRAM_MASTER_SERVICE_TOKEN, useExisting: CideCoreClassProgramMasterService }\r\n * \r\n * // In component\r\n * private classProgramMasterService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN) as IClassProgramMasterService;\r\n * ```\r\n */\r\nexport const CLASS_PROGRAM_MASTER_SERVICE_TOKEN = new InjectionToken<IClassProgramMasterService>('CideCoreClassProgramMasterService');\r\n\r\n\r\n\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type { \r\n MPrgTrmSection,\r\n prgTrmSectionControllerResponse,\r\n prgTrmSectionByIdControllerResponse,\r\n MPrgTrmSectionGetByIdPayload,\r\n prgTrmSectionInsertUpdateControllerResponse,\r\n MPrgTrmSectionInsertUpdatePayload,\r\n prgTrmSectionDeleteControllerResponse,\r\n MPrgTrmSectionDeletePayload,\r\n prgTrmSectionToggleStatusControllerResponse,\r\n MPrgTrmSectionToggleStatusPayload,\r\n prgTrmSectionToggleLockControllerResponse,\r\n MPrgTrmSectionToggleLockPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Program Term Section Service\r\n * This interface defines the contract for program term section operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IProgramTermSectionService {\r\n /**\r\n * Get list of program term sections from API\r\n * @param payload - MPrgTrmSection for filtering\r\n * @returns Observable of program term section list response\r\n */\r\n getProgramTermSectionList(payload: MPrgTrmSection): Observable<prgTrmSectionControllerResponse>;\r\n\r\n /**\r\n * Get program term section by ID\r\n * @param payload - Program term section ID payload\r\n * @returns Observable of program term section data\r\n */\r\n getProgramTermSectionById(payload: MPrgTrmSectionGetByIdPayload): Observable<prgTrmSectionByIdControllerResponse>;\r\n\r\n /**\r\n * Create or update program term section\r\n * @param data - Program term section data to save\r\n * @returns Observable of the save response\r\n */\r\n saveProgramTermSection(data: MPrgTrmSectionInsertUpdatePayload): Observable<prgTrmSectionInsertUpdateControllerResponse>;\r\n\r\n /**\r\n * Delete program term section\r\n * @param payload - Program term section delete payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteProgramTermSection(payload: MPrgTrmSectionDeletePayload): Observable<prgTrmSectionDeleteControllerResponse>;\r\n\r\n /**\r\n * Toggle program term section status (active/inactive)\r\n * @param payload - Program term section toggle status payload\r\n * @returns Observable of the toggle status response\r\n */\r\n toggleProgramTermSectionStatus(payload: MPrgTrmSectionToggleStatusPayload): Observable<prgTrmSectionToggleStatusControllerResponse>;\r\n\r\n /**\r\n * Toggle program term section lock status\r\n * @param payload - Program term section toggle lock payload\r\n * @returns Observable of the toggle lock response\r\n */\r\n toggleProgramTermSectionLock(payload: MPrgTrmSectionToggleLockPayload): Observable<prgTrmSectionToggleLockControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Program Term Section Service (CideLytProgramTermSectionService)\r\n * Used to provide and inject program term section service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: PROGRAM_TERM_SECTION_SERVICE_TOKEN, useExisting: CideLytProgramTermSectionService }\r\n * \r\n * // In component\r\n * private programTermSectionService = inject(PROGRAM_TERM_SECTION_SERVICE_TOKEN) as IProgramTermSectionService;\r\n * ```\r\n */\r\nexport const PROGRAM_TERM_SECTION_SERVICE_TOKEN = new InjectionToken<IProgramTermSectionService>('CideLytProgramTermSectionService');\r\n\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CideEleFileManagerService } from 'cloud-ide-element';\r\nimport { mongooseObjectIdCreateControllerResponse } from 'cloud-ide-element';\r\nimport { cidePath, commonRoutesUrl, hostManagerRoutesUrl } from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Shared Object ID Generation Service\r\n * \r\n * This service provides a consistent interface for generating Object IDs\r\n * across all libraries. It internally uses the FileManagerService but\r\n * provides a standardized API that can be used throughout the application.\r\n * \r\n * Benefits:\r\n * - Consistent interface across all libraries\r\n * - Centralized Object ID generation logic\r\n * - Easy to maintain and update\r\n * - Prevents confusion with different Object ID generation methods\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SharedObjectIdService {\r\n private fileManagerService = inject(CideEleFileManagerService);\r\n\r\n /**\r\n * Generate a new Object ID\r\n * \r\n * This method internally uses the FileManagerService to generate\r\n * a unique Object ID that can be used for any entity in the system.\r\n * \r\n * @returns Observable<mongooseObjectIdCreateControllerResponse> - The generated Object ID response\r\n * \r\n * @example\r\n * ```typescript\r\n * // Generate Object ID for a new user\r\n * this.sharedObjectIdService.generateObjectId().subscribe({\r\n * next: (response) => {\r\n * if (response.success && response.data?.objectId) {\r\n * const newUserId = response.data.objectId;\r\n * // Use the Object ID for creating a new user\r\n * }\r\n * },\r\n * error: (error) => {\r\n * console.error('Failed to generate Object ID:', error);\r\n * }\r\n * });\r\n * ```\r\n */\r\n generateObjectId(): Observable<mongooseObjectIdCreateControllerResponse> {\r\n console.log('🆔 [SharedObjectIdService] Generating Object ID via FileManagerService');\r\n this.fileManagerService.setObjectIdEndpoint(cidePath.join([hostManagerRoutesUrl.cideSuiteHost, commonRoutesUrl?.module, commonRoutesUrl?.generateObjectId]));\r\n \r\n return this.fileManagerService.generateObjectId();\r\n }\r\n\r\n /**\r\n * Generate Object ID as Promise\r\n * \r\n * Convenience method that converts the Observable to a Promise\r\n * for easier use with async/await syntax.\r\n * \r\n * @returns Promise<string> - The generated Object ID string\r\n * \r\n * @example\r\n * ```typescript\r\n * // Generate Object ID using async/await\r\n * try {\r\n * const objectId = await this.sharedObjectIdService.generateObjectIdAsync();\r\n * console.log('Generated Object ID:', objectId);\r\n * } catch (error) {\r\n * console.error('Failed to generate Object ID:', error);\r\n * }\r\n * ```\r\n */\r\n async generateObjectIdAsync(): Promise<string> {\r\n try {\r\n const response = await this.generateObjectId().toPromise();\r\n if (response?.success && response?.data?.objectId) {\r\n console.log('🆔 [SharedObjectIdService] Generated Object ID:', response.data.objectId);\r\n return response.data.objectId;\r\n } else {\r\n throw new Error('Failed to generate Object ID: Invalid response');\r\n }\r\n } catch (error) {\r\n console.error('❌ [SharedObjectIdService] Error generating Object ID:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Generate multiple Object IDs at once\r\n * \r\n * Useful when you need multiple Object IDs for batch operations.\r\n * \r\n * @param count - Number of Object IDs to generate\r\n * @returns Observable<string[]> - Array of generated Object IDs\r\n * \r\n * @example\r\n * ```typescript\r\n * // Generate 5 Object IDs for batch creation\r\n * this.sharedObjectIdService.generateMultipleObjectIds(5).subscribe({\r\n * next: (objectIds) => {\r\n * console.log('Generated Object IDs:', objectIds);\r\n * // Use the Object IDs for batch operations\r\n * }\r\n * });\r\n * ```\r\n */\r\n generateMultipleObjectIds(count: number): Observable<string[]> {\r\n console.log(`🆔 [SharedObjectIdService] Generating ${count} Object IDs`);\r\n \r\n const requests = Array.from({ length: count }, () => this.generateObjectId());\r\n \r\n return new Observable(observer => {\r\n let completed = 0;\r\n const objectIds: string[] = [];\r\n \r\n requests.forEach((request, index) => {\r\n request.subscribe({\r\n next: (response) => {\r\n if (response?.success && response?.data?.objectId) {\r\n objectIds[index] = response.data.objectId;\r\n } else {\r\n observer.error(new Error(`Failed to generate Object ID at index ${index}`));\r\n return;\r\n }\r\n \r\n completed++;\r\n if (completed === count) {\r\n observer.next(objectIds);\r\n observer.complete();\r\n }\r\n },\r\n error: (error) => {\r\n observer.error(error);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Generate Object ID with validation\r\n * \r\n * Generates an Object ID and validates it before returning.\r\n * \r\n * @param validator - Optional validation function\r\n * @returns Observable<string> - Validated Object ID\r\n * \r\n * @example\r\n * ```typescript\r\n * // Generate Object ID with custom validation\r\n * const validator = (id: string) => id.length === 24; // MongoDB ObjectId length\r\n * this.sharedObjectIdService.generateObjectIdWithValidation(validator).subscribe({\r\n * next: (validatedId) => {\r\n * console.log('Validated Object ID:', validatedId);\r\n * }\r\n * });\r\n * ```\r\n */\r\n generateObjectIdWithValidation(validator?: (id: string) => boolean): Observable<string> {\r\n return new Observable(observer => {\r\n this.generateObjectId().subscribe({\r\n next: (response) => {\r\n if (response?.success && response?.data?.objectId) {\r\n const objectId = response.data.objectId;\r\n \r\n // Apply validation if provided\r\n if (validator && !validator(objectId)) {\r\n observer.error(new Error('Generated Object ID failed validation'));\r\n return;\r\n }\r\n \r\n observer.next(objectId);\r\n observer.complete();\r\n } else {\r\n observer.error(new Error('Failed to generate Object ID: Invalid response'));\r\n }\r\n },\r\n error: (error) => {\r\n observer.error(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Check if a string is a valid Object ID format\r\n * \r\n * @param id - String to validate\r\n * @returns boolean - True if valid Object ID format\r\n * \r\n * @example\r\n * ```typescript\r\n * const isValid = this.sharedObjectIdService.isValidObjectId('507f1f77bcf86cd799439011');\r\n * console.log('Is valid Object ID:', isValid); // true\r\n * ```\r\n */\r\n isValidObjectId(id: string): boolean {\r\n // MongoDB ObjectId is 24 characters long and contains only hexadecimal characters\r\n const objectIdRegex = /^[0-9a-fA-F]{24}$/;\r\n return objectIdRegex.test(id);\r\n }\r\n\r\n /**\r\n * Get Object ID generation statistics\r\n * \r\n * Returns information about Object ID generation for monitoring purposes.\r\n * \r\n * @returns Object with statistics\r\n */\r\n getGenerationStats(): { serviceName: string; description: string; internalService: string } {\r\n return {\r\n serviceName: 'SharedObjectIdService',\r\n description: 'Centralized Object ID generation service',\r\n internalService: 'CideEleFileManagerService'\r\n };\r\n }\r\n}\r\n\r\n\r\n\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { \r\n cidePath,\r\n coreRoutesUrl,\r\n generateStringFromObject,\r\n hostManagerRoutesUrl,\r\n generalMasterTypeListControllerResponse,\r\n generalMasterTypeByIdControllerResponse,\r\n generalMasterTypeInsertUpdateControllerResponse,\r\n generalMasterTypeDeleteControllerResponse,\r\n generalMasterTypeToggleStatusControllerResponse,\r\n MGeneralMasterType,\r\n ICoreSygmt\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreGeneralMasterTypeService {\r\n private http = inject(HttpClient);\r\n private generalMasterTypeListSubject = new BehaviorSubject<ICoreSygmt[]>([]);\r\n public generalMasterTypeList$ = this.generalMasterTypeListSubject.asObservable();\r\n\r\n constructor() {\r\n console.log('CideCoreGeneralMasterTypeService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get general master type list from API\r\n */\r\n getTypeList(body: MGeneralMasterType): Observable<generalMasterTypeListControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<generalMasterTypeListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]))\r\n .pipe(\r\n tap((response: generalMasterTypeListControllerResponse) => {\r\n if (response?.success) {\r\n this.generalMasterTypeListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('CideCoreGeneralMasterTypeService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get general master type list from cache (if available)\r\n */\r\n getTypeListFromCache(): ICoreSygmt[] {\r\n return this.generalMasterTypeListSubject.value;\r\n }\r\n\r\n /**\r\n * Create or update general master type\r\n * POST ${coreRoutesUrl?.generalMasterType} - payload: IGeneralMasterTypeCreateUpdatePayload, response: generalMasterTypeInsertUpdateControllerResponse\r\n * If type._id exists, it will update; otherwise, it will create a new type\r\n */\r\n saveType(type: ICoreSygmt): Observable<generalMasterTypeInsertUpdateControllerResponse> {\r\n const isUpdate = !!type._id;\r\n console.log(`${isUpdate ? 'Updating' : 'Creating'} general master type:`, type);\r\n \r\n // Create proper payload - backend will determine create vs update based on _id presence\r\n const payload: ICoreSygmt = {\r\n ...(type._id && { _id: type._id }), // Only include _id if it exists\r\n sygmt_code: type.sygmt_code,\r\n sygmt_title: type.sygmt_title,\r\n sygmt_desc: type.sygmt_desc,\r\n sygmt_isactive: type.sygmt_isactive,\r\n sygmt_configuration: type.sygmt_configuration,\r\n sygmt_id_sygmt: type.sygmt_id_sygmt\r\n };\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType]);\r\n return this.http.post<generalMasterTypeInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: generalMasterTypeInsertUpdateControllerResponse) => {\r\n if (response.success) {\r\n this.refreshTypeList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get general master type by ID\r\n * GET ${coreRoutesUrl?.generalMasterType}/byId/:query - payload: { sygmt_id: string }, response: generalMasterTypeByIdControllerResponse\r\n */\r\n getTypeById(id: string): Observable<generalMasterTypeByIdControllerResponse> {\r\n console.log('Getting general master type by ID:', id);\r\n const payload = { sygmt_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'byId', query]);\r\n return this.http.get<generalMasterTypeByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete general master type\r\n * DELETE ${coreRoutesUrl?.generalMasterType}/:query - payload: { sygmt_id: string }, response: generalMasterTypeDeleteControllerResponse\r\n */\r\n deleteType(id: string): Observable<generalMasterTypeDeleteControllerResponse> {\r\n const payload = { sygmt_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);\r\n return this.http.delete<generalMasterTypeDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: generalMasterTypeDeleteControllerResponse) => {\r\n if (response.success) {\r\n this.refreshTypeList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle general master type active status\r\n */\r\n toggleTypeStatus(id: string): Observable<generalMasterTypeToggleStatusControllerResponse> {\r\n console.log('Toggling general master type status:', id);\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);\r\n return this.http.put<generalMasterTypeToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: generalMasterTypeToggleStatusControllerResponse) => {\r\n if (response.success) {\r\n this.refreshTypeList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Check if type code exists\r\n */\r\n checkTypeCodeExists(code: string, excludeId?: string): Observable<{ success: boolean; message: string; exists: boolean }> {\r\n const payload: Record<string, string> = { code };\r\n if (excludeId) {\r\n payload['excludeId'] = excludeId;\r\n }\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'checkCodeExists', query]);\r\n return this.http.get<{ success: boolean; message: string; exists: boolean }>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Refresh general master type list from server\r\n */\r\n private refreshTypeList(): void {\r\n const defaultBody: MGeneralMasterType = {};\r\n this.getTypeList(defaultBody).subscribe({\r\n next: () => {\r\n console.log('General master type list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing general master type list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('General Master Type Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { \r\n cidePath,\r\n coreRoutesUrl,\r\n generateStringFromObject,\r\n hostManagerRoutesUrl,\r\n generalMasterListControllerResponse,\r\n generalMasterByIdControllerResponse,\r\n generalMasterInsertUpdateControllerResponse,\r\n generalMasterDeleteControllerResponse,\r\n generalMasterToggleStatusControllerResponse,\r\n ICoreSygms,\r\n IGeneralMasterListRequest,\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreGeneralMasterService {\r\n private http = inject(HttpClient);\r\n private generalMasterListSubject = new BehaviorSubject<ICoreSygms[]>([]);\r\n public generalMasterList$ = this.generalMasterListSubject.asObservable();\r\n\r\n constructor() {\r\n console.log('CideCoreGeneralMasterService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get general master list from API\r\n */\r\n getMasterList(payload: IGeneralMasterListRequest): Observable<generalMasterListControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n return this.http?.get<generalMasterListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]))\r\n .pipe(\r\n tap((response: generalMasterListControllerResponse) => {\r\n if (response?.success) {\r\n this.generalMasterListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('CideCoreGeneralMasterService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get general master list from cache (if available)\r\n */\r\n getMasterListFromCache(): ICoreSygms[] {\r\n return this.generalMasterListSubject.value;\r\n }\r\n\r\n /**\r\n * Save general master (create or update)\r\n * POST ${coreRoutesUrl?.generalMaster} - payload: ICoreSygms, response: generalMasterInsertUpdateControllerResponse\r\n */\r\n saveMaster(master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\r\n const isUpdate = !!master._id;\r\n console.log(`${isUpdate ? 'Updating' : 'Creating'} general master:`, master);\r\n \r\n // Create proper payload\r\n const payload: ICoreSygms = {\r\n ...(master._id && { _id: master._id }), // Only include _id if it exists\r\n sygms_code: master.sygms_code,\r\n sygms_id_sygmt: master.sygms_id_sygmt,\r\n sygms_title: master.sygms_title,\r\n sygms_desc: master.sygms_desc,\r\n sygms_isactive: master.sygms_isactive,\r\n sygms_id_sygms: master.sygms_id_sygms,\r\n sygms_configuration: master.sygms_configuration,\r\n sygms_entity_id_syen: master.sygms_entity_id_syen\r\n };\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster]);\r\n return this.http.post<generalMasterInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: generalMasterInsertUpdateControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMasterList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Create new general master (backward compatibility)\r\n */\r\n createMaster(master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\r\n return this.saveMaster(master);\r\n }\r\n\r\n /**\r\n * Update existing general master (backward compatibility)\r\n */\r\n updateMaster(id: string, master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\r\n return this.saveMaster({ ...master, _id: id });\r\n }\r\n\r\n /**\r\n * Get general master by ID\r\n * GET ${coreRoutesUrl?.generalMaster}/byId/:query - payload: { sygms_id: string }, response: generalMasterByIdControllerResponse\r\n */\r\n getMasterById(id: string): Observable<generalMasterByIdControllerResponse> {\r\n console.log('Getting general master by ID:', id);\r\n const payload = { sygms_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'byId', query]);\r\n return this.http.get<generalMasterByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete general master\r\n * DELETE ${coreRoutesUrl?.generalMaster}/:query - payload: { sygms_id: string }, response: generalMasterDeleteControllerResponse\r\n */\r\n deleteMaster(id: string): Observable<generalMasterDeleteControllerResponse> {\r\n const payload = { sygms_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);\r\n return this.http.delete<generalMasterDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: generalMasterDeleteControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMasterList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle general master active status\r\n */\r\n toggleMasterStatus(id: string): Observable<generalMasterToggleStatusControllerResponse> {\r\n console.log('Toggling general master status:', id);\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);\r\n return this.http.put<generalMasterToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: generalMasterToggleStatusControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMasterList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Check if master code exists\r\n */\r\n checkMasterCodeExists(code: string, typeId: string, excludeId?: string): Observable<{ success: boolean; message: string; exists: boolean }> {\r\n const payload: Record<string, string> = { code, typeId };\r\n if (excludeId) {\r\n payload['excludeId'] = excludeId;\r\n }\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'checkCodeExists', query]);\r\n return this.http.get<{ success: boolean; message: string; exists: boolean }>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Refresh general master list from server\r\n */\r\n private refreshMasterList(): void {\r\n const defaultPayload: IGeneralMasterListRequest = {};\r\n this.getMasterList(defaultPayload).subscribe({\r\n next: () => {\r\n console.log('General master list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing general master list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('General Master Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n}\r\n\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AuthUserMstListPayload, authUserMstListControllerResponse, AuthUserMst } from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * User Master Service Interface\r\n * Defines the contract for user management operations\r\n */\r\nexport interface IUserMasterService {\r\n /**\r\n * Get list of users with filtering and pagination\r\n * @param payload - User list query parameters\r\n * @returns Observable of user list response\r\n */\r\n getUserList(payload: AuthUserMstListPayload): Observable<authUserMstListControllerResponse>;\r\n\r\n /**\r\n * Save or update user master data\r\n * @param data - User data to save\r\n * @returns Observable of save response\r\n */\r\n saveUpdateUserMaster(data: any): Observable<any>;\r\n\r\n /**\r\n * Get user master by ID\r\n * @param payload - User ID payload\r\n * @returns Observable of user data\r\n */\r\n getUserMasterById(payload: any): Observable<any>;\r\n\r\n /**\r\n * Delete user master\r\n * @param userId - User ID to delete\r\n * @returns Observable of delete response\r\n */\r\n deleteUserMaster(userId: string): Observable<any>;\r\n\r\n /**\r\n * Toggle user status (active/inactive)\r\n * @param userId - User ID to toggle\r\n * @returns Observable of toggle response\r\n */\r\n toggleUserStatus(userId: string): Observable<any>;\r\n\r\n /**\r\n * Delete user\r\n * @param userId - User ID to delete\r\n * @returns Observable of delete response\r\n */\r\n deleteUser(userId: string): Observable<any>;\r\n\r\n /**\r\n * Generate Object ID for new user\r\n * @returns Observable of Object ID response\r\n */\r\n generateObjectId(): Observable<any>;\r\n}\r\n\r\n/**\r\n * Injection token for User Master Service (CideCoreUserMasterService)\r\n * Used to provide and inject user master service implementations\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: USER_SERVICE_TOKEN, useExisting: CideCoreUserMasterService }\r\n * \r\n * // In component\r\n * private userService = inject(USER_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const USER_SERVICE_TOKEN = new InjectionToken<IUserMasterService>('CideCoreUserMasterService');\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type {\r\n financialYearControllerResponse,\r\n MFinancialYear,\r\n financialYearByIdControllerResponse,\r\n MFinancialYearGetByIdPayload,\r\n financialYearInsertUpdateControllerResponse,\r\n MFinancialYearInsertUpdatePayload,\r\n financialYearDeleteControllerResponse,\r\n MFinancialYearDeletePayload,\r\n financialYearToggleStatusControllerResponse,\r\n MFinancialYearToggleStatusPayload,\r\n academicYearControllerResponse,\r\n MAcademicYear,\r\n academicYearByIdControllerResponse,\r\n MAcademicYearGetByIdPayload,\r\n academicYearInsertUpdateControllerResponse,\r\n MAcademicYearInsertUpdatePayload,\r\n academicYearDeleteControllerResponse,\r\n MAcademicYearDeletePayload,\r\n academicYearToggleStatusControllerResponse,\r\n MAcademicYearToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Financial Year Service\r\n * This interface defines the contract for financial year operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IFinancialYearService {\r\n /**\r\n * Get list of financial years\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of financial year list response\r\n */\r\n getFinancialYearList(payload: MFinancialYear): Observable<financialYearControllerResponse>;\r\n\r\n /**\r\n * Get financial year by ID\r\n * @param payload - Financial year ID payload\r\n * @returns Observable of financial year data\r\n */\r\n getFinancialYearById(payload: MFinancialYearGetByIdPayload): Observable<financialYearByIdControllerResponse>;\r\n\r\n /**\r\n * Create or update financial year\r\n * @param data - Financial year data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateFinancialYear(data: MFinancialYearInsertUpdatePayload): Observable<financialYearInsertUpdateControllerResponse>;\r\n\r\n /**\r\n * Delete financial year\r\n * @param payload - Financial year delete payload\r\n * @returns Observable of delete response\r\n */\r\n deleteFinancialYear(payload: MFinancialYearDeletePayload): Observable<financialYearDeleteControllerResponse>;\r\n\r\n /**\r\n * Toggle financial year status (active/inactive)\r\n * @param payload - Toggle status payload\r\n * @returns Observable of toggle status response\r\n */\r\n toggleFinancialYearStatus(payload: MFinancialYearToggleStatusPayload): Observable<financialYearToggleStatusControllerResponse>;\r\n}\r\n\r\n/**\r\n * Interface for Academic Year Service\r\n * This interface defines the contract for academic year operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IAcademicYearService {\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\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\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\r\n /**\r\n * Delete academic year\r\n * @param payload - Academic year delete payload\r\n * @returns Observable of delete response\r\n */\r\n deleteAcademicYear(payload: MAcademicYearDeletePayload): Observable<academicYearDeleteControllerResponse>;\r\n\r\n /**\r\n * Toggle academic year status (active/inactive)\r\n * @param payload - Toggle status payload\r\n * @returns Observable of toggle status response\r\n */\r\n toggleAcademicYearStatus(payload: MAcademicYearToggleStatusPayload): Observable<academicYearToggleStatusControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Financial Year Service (CideAccFinancialYearService)\r\n * Used to provide and inject financial year service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: FINANCIAL_YEAR_SERVICE_TOKEN, useExisting: CideAccFinancialYearService }\r\n * \r\n * // In component\r\n * private financialYearService = inject(FINANCIAL_YEAR_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const FINANCIAL_YEAR_SERVICE_TOKEN = new InjectionToken<IFinancialYearService>('CideAccFinancialYearService');\r\n\r\n/**\r\n * Injection token for Academic Year Service (CideLytAcademicYearService)\r\n * Used to provide and inject academic year service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: ACADEMIC_YEAR_SERVICE_TOKEN, useExisting: CideLytAcademicYearService }\r\n * \r\n * // In component\r\n * private academicYearService = inject(ACADEMIC_YEAR_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const ACADEMIC_YEAR_SERVICE_TOKEN = new InjectionToken<IAcademicYearService>('CideLytAcademicYearService');\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport type {\r\n feeStructureControllerResponse,\r\n MFeeStructure,\r\n feeStructureByIdControllerResponse,\r\n MFeeStructureGetByIdPayload,\r\n feeStructureInsertUpdateControllerResponse,\r\n MFeeStructureInsertUpdatePayload,\r\n feeStructureDeleteControllerResponse,\r\n MFeeStructureDeletePayload,\r\n feeStructureToggleStatusControllerResponse,\r\n MFeeStructureToggleStatusPayload,\r\n feePaymentControllerResponse,\r\n MFeePayment,\r\n feePaymentByIdControllerResponse,\r\n MFeePaymentGetByIdPayload,\r\n feePaymentInsertUpdateControllerResponse,\r\n MFeePaymentInsertUpdatePayload,\r\n feePaymentDeleteControllerResponse,\r\n MFeePaymentDeletePayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Interface for Fee Structure Service\r\n * This interface defines the contract for fee structure operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IFeeStructureService {\r\n /**\r\n * Get list of fee structures\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of fee structure list response\r\n */\r\n getFeeStructureList(payload: MFeeStructure): Observable<feeStructureControllerResponse>;\r\n\r\n /**\r\n * Get fee structure by ID\r\n * @param payload - Fee structure ID payload\r\n * @returns Observable of fee structure data\r\n */\r\n getFeeStructureById(payload: MFeeStructureGetByIdPayload): Observable<feeStructureByIdControllerResponse>;\r\n\r\n /**\r\n * Create or update fee structure\r\n * @param data - Fee structure data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateFeeStructure(data: MFeeStructureInsertUpdatePayload): Observable<feeStructureInsertUpdateControllerResponse>;\r\n\r\n /**\r\n * Delete fee structure\r\n * @param payload - Fee structure delete payload\r\n * @returns Observable of delete response\r\n */\r\n deleteFeeStructure(payload: MFeeStructureDeletePayload): Observable<feeStructureDeleteControllerResponse>;\r\n\r\n /**\r\n * Toggle fee structure status (active/inactive)\r\n * @param payload - Toggle status payload\r\n * @returns Observable of toggle status response\r\n */\r\n toggleFeeStructureStatus(payload: MFeeStructureToggleStatusPayload): Observable<feeStructureToggleStatusControllerResponse>;\r\n}\r\n\r\n/**\r\n * Interface for Fee Payment Service\r\n * This interface defines the contract for fee payment operations\r\n * Used to avoid circular dependencies and provide clean abstraction\r\n */\r\nexport interface IFeePaymentService {\r\n /**\r\n * Get list of fee payments\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of fee payment list response\r\n */\r\n getFeePaymentList(payload: MFeePayment): Observable<feePaymentControllerResponse>;\r\n\r\n /**\r\n * Get fee payment by ID\r\n * @param payload - Fee payment ID payload\r\n * @returns Observable of fee payment data\r\n */\r\n getFeePaymentById(payload: MFeePaymentGetByIdPayload): Observable<feePaymentByIdControllerResponse>;\r\n\r\n /**\r\n * Create or update fee payment\r\n * @param data - Fee payment data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateFeePayment(data: MFeePaymentInsertUpdatePayload): Observable<feePaymentInsertUpdateControllerResponse>;\r\n\r\n /**\r\n * Delete fee payment\r\n * @param payload - Fee payment delete payload\r\n * @returns Observable of delete response\r\n */\r\n deleteFeePayment(payload: MFeePaymentDeletePayload): Observable<feePaymentDeleteControllerResponse>;\r\n}\r\n\r\n/**\r\n * Injection token for Fee Structure Service (CideFeeFeeStructureService)\r\n * Used to provide and inject fee structure service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: FEE_STRUCTURE_SERVICE_TOKEN, useExisting: CideFeeFeeStructureService }\r\n * \r\n * // In component\r\n * private feeStructureService = inject(FEE_STRUCTURE_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const FEE_STRUCTURE_SERVICE_TOKEN = new InjectionToken<IFeeStructureService>('CideFeeFeeStructureService');\r\n\r\n/**\r\n * Injection token for Fee Payment Service (CideFeeFeePaymentService)\r\n * Used to provide and inject fee payment service implementations\r\n * This enables dependency injection with interface-based contracts\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * { provide: FEE_PAYMENT_SERVICE_TOKEN, useExisting: CideFeeFeePaymentService }\r\n * \r\n * // In component\r\n * private feePaymentService = inject(FEE_PAYMENT_SERVICE_TOKEN);\r\n * ```\r\n */\r\nexport const FEE_PAYMENT_SERVICE_TOKEN = new InjectionToken<IFeePaymentService>('CideFeeFeePaymentService');\r\n\r\n","import { Component, signal, OnInit, inject, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { CideEleButtonComponent, CideIconComponent, CideSpinnerComponent, TooltipDirective } from 'cloud-ide-element';\nimport { entityControllerResponse, MEntity, CoreSystemEntityListResponse } from 'cloud-ide-lms-model';\nimport { IEntityService, ENTITY_SERVICE_TOKEN } from '../../services/entity.service.interface';\n\n@Component({\n selector: 'cide-shared-org-structure',\n imports: [\n CommonModule,\n CideEleButtonComponent,\n CideIconComponent,\n CideSpinnerComponent,\n TooltipDirective\n ],\n templateUrl: './org-structure.component.html',\n styleUrl: './org-structure.component.scss'\n})\nexport class CideSharedOrgStructureComponent implements OnInit {\n // Input parameters for configuration\n allowSwitching = input<boolean>(true); // Allow entity switching (default: true)\n showActions = input<boolean>(true); // Show action buttons (default: true)\n mode = input<'selection' | 'view'>('view'); // Mode: selection or view-only\n\n // Output events\n entityClick = output<CoreSystemEntityListResponse>(); // Emit when entity is clicked\n entitySelect = output<CoreSystemEntityListResponse>(); // Emit when entity is selected for switching\n entityView = output<CoreSystemEntityListResponse>(); // Emit when entity is viewed\n\n private entityService = inject(ENTITY_SERVICE_TOKEN) as IEntityService;\n public router = inject(Router);\n\n // Signals\n loading = signal(false);\n error = signal<string | null>(null);\n orgStructure = signal<CoreSystemEntityListResponse[]>([]);\n\n ngOnInit(): void {\n this.loadOrgStructure();\n }\n\n /**\n * Load organization structure\n */\n loadOrgStructure(): void {\n this.loading.set(true);\n this.error.set(null);\n\n this.entityService.getEntityList({}).subscribe({\n next: (response: entityControllerResponse) => {\n if (response?.success && response?.data) {\n const structure = this.buildOrgStructure(response.data);\n this.orgStructure.set(structure);\n } else {\n this.error.set('Failed to load organization structure');\n }\n this.loading.set(false);\n },\n error: (error: any) => {\n this.error.set('Error loading organization structure');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Build organization structure from flat entity list\n */\n private buildOrgStructure(entities: CoreSystemEntityListResponse[]): CoreSystemEntityListResponse[] {\n const nodeMap = new Map<string, CoreSystemEntityListResponse>();\n const rootNodes: CoreSystemEntityListResponse[] = [];\n\n // First pass: create all nodes\n entities.forEach(entity => {\n const node: CoreSystemEntityListResponse = {\n ...entity,\n children: []\n };\n nodeMap.set(entity._id || '', node);\n });\n\n // Second pass: build hierarchy\n entities.forEach(entity => {\n const node = nodeMap.get(entity._id || '');\n if (node) {\n const parentId = entity.syen_id_syen;\n if (parentId && parentId !== \"\" && nodeMap.has(parentId)) {\n const parent = nodeMap.get(parentId)!;\n parent.children = parent.children || [];\n parent.children.push(node);\n } else {\n rootNodes.push(node);\n }\n }\n });\n\n // Sort children recursively\n this.sortChildrenRecursively(rootNodes);\n return rootNodes;\n }\n\n /**\n * Calculate level of a node based on its parent\n */\n private calculateLevel(node: CoreSystemEntityListResponse, nodeMap: Map<string, CoreSystemEntityListResponse>): number {\n let level = 0;\n let current = node;\n \n while (current.syen_id_syen && nodeMap.has(current.syen_id_syen)) {\n level++;\n current = nodeMap.get(current.syen_id_syen)!;\n }\n \n return level;\n }\n\n /**\n * Sort children recursively by name\n */\n private sortChildrenRecursively(nodes: CoreSystemEntityListResponse[]): void {\n nodes.sort((a, b) => (a.syen_name || '').localeCompare(b.syen_name || ''));\n \n nodes.forEach(node => {\n if (node.children && node.children.length > 0) {\n this.sortChildrenRecursively(node.children);\n }\n });\n }\n\n\n /**\n * View entity details\n */\n viewEntity(entityId: string): void {\n // Find the entity in the structure\n const entity = this.findEntityById(entityId);\n if (entity) {\n // Emit the appropriate event based on mode\n this.entityClick.emit(entity);\n \n if (this.mode() === 'selection' && this.allowSwitching()) {\n this.entitySelect.emit(entity);\n } else {\n this.entityView.emit(entity);\n }\n }\n\n // Only navigate if not in selection mode\n if (this.mode() !== 'selection') {\n this.router.navigate(['/control-panel/entity-list'], { \n queryParams: { view: entityId } \n });\n }\n }\n\n /**\n * Find entity by ID in the structure\n */\n private findEntityById(entityId: string): CoreSystemEntityListResponse | null {\n const findInNodes = (nodes: CoreSystemEntityListResponse[]): CoreSystemEntityListResponse | null => {\n for (const node of nodes) {\n if (node._id === entityId) {\n return node;\n }\n if (node.children && node.children.length > 0) {\n const found = findInNodes(node.children);\n if (found) return found;\n }\n }\n return null;\n };\n \n return findInNodes(this.orgStructure());\n }\n\n /**\n * Edit entity\n */\n editEntity(entityId: string): void {\n this.router.navigate(['/control-panel/entity-list/entity-create'], { \n queryParams: { edit: entityId } \n });\n }\n}\n","<!-- Organization Structure Component -->\n<div class=\"tw-flex-1 tw-overflow-hidden\">\n @if (loading()) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-py-12\">\n <cide-ele-spinner size=\"md\"></cide-ele-spinner>\n <span class=\"tw-ml-3 tw-text-gray-600 tw-text-sm\">Loading organization structure...</span>\n </div>\n } @else if (error()) {\n <div class=\"tw-text-center tw-py-12\">\n <div class=\"tw-w-16 tw-h-16 tw-bg-red-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-mx-auto tw-mb-4\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-red-500\">error</cide-ele-icon>\n </div>\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-2\">Error Loading Structure</h3>\n <p class=\"tw-text-gray-600 tw-mb-4\">{{ error() }}</p>\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"loadOrgStructure()\">\n <cide-ele-icon>refresh</cide-ele-icon>\n Try Again\n </button>\n </div>\n } @else if (orgStructure().length === 0) {\n <div class=\"tw-text-center tw-py-12\">\n <div class=\"tw-w-16 tw-h-16 tw-bg-gray-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-mx-auto tw-mb-4\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-gray-400\">account_tree</cide-ele-icon>\n </div>\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-2\">No Entities Found</h3>\n <p class=\"tw-text-gray-600 tw-mb-4\">No entities are available to display in the organization structure.</p>\n @if (mode() === 'view') {\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"router.navigate(['/control-panel/entity-list'])\">\n <cide-ele-icon>add</cide-ele-icon>\n Create First Entity\n </button>\n }\n </div>\n } @else {\n <!-- Organization Chart Container -->\n <div class=\"tw-relative tw-min-h-screen tw-bg-gray-50 tw-py-8 org-chart-container\">\n <!-- Chart Content with Background Pattern -->\n <div class=\"tw-relative tw-z-10 tw-min-w-max tw-px-4 org-chart-content org-chart-content-with-bg\">\n @for (rootNode of orgStructure(); track rootNode._id) {\n <div class=\"tw-flex tw-flex-col tw-items-center tw-mb-12\">\n <!-- Render node recursively with unlimited depth -->\n <ng-container [ngTemplateOutlet]=\"entityNodeTemplate\" [ngTemplateOutletContext]=\"{ $implicit: rootNode, level: 0 }\"></ng-container>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n<!-- Entity Node Template (Recursive) -->\n<ng-template #entityNodeTemplate let-node let-level=\"level\">\n <div class=\"tw-flex tw-flex-col tw-items-center\">\n \n <!-- Entity Card -->\n <div class=\"tw-bg-white tw-shadow-lg tw-rounded-lg tw-p-4 tw-w-64 tw-max-w-72 tw-border-t-4 tw-transition-all tw-cursor-pointer hover:tw-shadow-xl hover:tw-scale-105 entity-card\"\n [class.level-0]=\"level === 0\"\n [class.level-1]=\"level === 1\"\n [class.level-2]=\"level === 2\"\n [class.level-3]=\"level === 3\"\n [class.level-4]=\"level === 4\"\n [class.level-5]=\"level === 5\"\n (click)=\"viewEntity(node._id)\">\n \n <!-- Card Content -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <!-- Avatar -->\n <div class=\"tw-w-12 tw-h-12 tw-bg-purple-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0\">\n <cide-ele-icon class=\"tw-w-6 tw-h-6 tw-text-purple-600\">person</cide-ele-icon>\n </div>\n \n <!-- Entity Info -->\n <div class=\"tw-flex-1 tw-min-w-0\">\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-whitespace-nowrap tw-overflow-hidden tw-text-ellipsis\" \n [cideEleTooltip]=\"node.syen_name || ''\" \n [tooltipPlacement]=\"'top'\"\n [tooltipType]=\"'default'\">{{ node.syen_name }}</h3>\n <p class=\"tw-text-xs tw-text-gray-600 tw-mt-1\">{{ node.syen_entity_code }}</p>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">{{ node.syen_entity_type_sygms }}</p>\n </div>\n </div>\n \n <!-- Action Icons -->\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mt-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <!-- Phone Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">phone</cide-ele-icon>\n </button>\n \n <!-- Email Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">email</cide-ele-icon>\n </button>\n \n <!-- LinkedIn Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-blue-100 tw-flex tw-items-center tw-justify-center tw-text-blue-600 hover:tw-bg-blue-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">attach_money</cide-ele-icon>\n </button>\n \n <!-- Document Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">description</cide-ele-icon>\n </button>\n \n <!-- More Options Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">more_horiz</cide-ele-icon>\n </button>\n </div>\n \n <!-- Status Badge -->\n <div class=\"tw-flex-shrink-0\">\n @if (node.syen_isactive) {\n <div class=\"tw-inline-flex tw-items-center tw-px-1.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-green-500 tw-rounded-full tw-mr-1\"></div>\n Active\n </div>\n } @else {\n <div class=\"tw-inline-flex tw-items-center tw-px-1.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-red-500 tw-rounded-full tw-mr-1\"></div>\n Inactive\n </div>\n }\n </div>\n </div>\n </div>\n \n <!-- Children Entities (Recursive) -->\n @if (node.children && node.children.length > 0) {\n <!-- Flexible Connection Lines -->\n <div class=\"tw-relative tw-flex tw-flex-col tw-items-center tw-mt-4\">\n <!-- Connection dot -->\n <div class=\"tw-absolute tw-left-1/2 tw-transform tw--translate-x-1/2\" style=\"top: -8px;\">\n <div class=\"tw-w-2 tw-h-2 tw-bg-purple-600 tw-rounded-full tw-border tw-border-white\"></div>\n </div>\n \n <!-- Flexible SVG Lines -->\n <div class=\"tw-relative tw-w-full tw-flex tw-justify-center flexible-connection-lines\">\n @if (node.children && node.children.length === 1) {\n <!-- Single child - simple vertical line -->\n <svg class=\"tw-absolute tw-left-1/2\" style=\"transform: translateX(-50%); width: 2px; height: 40px; top: 0;\">\n <line x1=\"1\" y1=\"0\" x2=\"1\" y2=\"40\" stroke=\"#9333ea\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n </svg>\n }\n @else if (node.children && node.children.length > 1) {\n <!-- Multiple children - flexible design -->\n <svg class=\"tw-absolute tw-left-1/2\" style=\"transform: translateX(-50%); width: 100%; height: 40px; top: 0;\">\n <!-- Vertical line from parent -->\n <line x1=\"50%\" y1=\"0\" x2=\"50%\" y2=\"15\" stroke=\"#9333ea\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n \n <!-- Horizontal line spanning children -->\n <line x1=\"20%\" y1=\"15\" x2=\"80%\" y2=\"15\" stroke=\"#9333ea\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n \n <!-- Vertical lines to children -->\n @for (child of node.children; track child._id; let i = $index) {\n <line [attr.x1]=\"(20 + (60 * i) / (node.children.length - 1)) + '%'\" \n y1=\"15\" \n [attr.x2]=\"(20 + (60 * i) / (node.children.length - 1)) + '%'\" \n y2=\"35\" \n stroke=\"#9333ea\" \n stroke-width=\"2\" \n stroke-linecap=\"round\"/>\n <!-- Connection dot -->\n <circle [attr.cx]=\"(20 + (60 * i) / (node.children.length - 1)) + '%'\" cy=\"35\" r=\"2.5\" fill=\"#9333ea\" stroke=\"#fff\" stroke-width=\"1\"/>\n }\n </svg>\n }\n </div>\n \n <!-- Children Container - Flexible Layout -->\n <div class=\"tw-flex tw-flex-wrap tw-justify-center tw-gap-4 tw-w-full tw-max-w-6xl tw-px-4 children-container\">\n @for (child of node.children; track child._id) {\n <div class=\"tw-flex tw-flex-col tw-items-center tw-flex-shrink-0\">\n <!-- Child node -->\n <ng-container [ngTemplateOutlet]=\"entityNodeTemplate\" [ngTemplateOutletContext]=\"{ $implicit: child, level: level + 1 }\"></ng-container>\n </div>\n }\n </div>\n </div>\n }\n </div>\n</ng-template>\n","import { Component, OnInit, OnDestroy, inject, signal, computed, input, output, effect } from '@angular/core';\r\nimport { CommonModule, NgClass } from '@angular/common';\r\nimport { FormGroup, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport type { selectSearchType } from 'cloud-ide-lms-model';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { DestroyRef } from '@angular/core';\r\nimport { CideSelectComponent, NotificationService } from 'cloud-ide-element';\r\nimport {\r\n cidePath,\r\n hostManagerRoutesUrl,\r\n academicsRoutesUrl,\r\n generateStringFromObject,\r\n type classProgramMasterControllerResponse,\r\n type classProgramTermControllerResponse,\r\n type prgTrmSectionControllerResponse,\r\n type MClassProgramTerm,\r\n MPrgTrmSection,\r\n type AcaClassProgramTermReponse,\r\n type AcaPrgTrmSectionResponse,\r\n type AcaClassProgramMasterResponse,\r\n type AcaClassPrgBranchResponse,\r\n type classPrgBranchControllerResponse,\r\n type controllerResponse\r\n} from 'cloud-ide-lms-model';\r\nimport { AcaClassPrgBranchListPayload } from 'cloud-ide-lms-model';\r\nimport { CLASS_PROGRAM_MASTER_SERVICE_TOKEN } from '../../services/class-program-master.service.interface';\r\n\r\ninterface ClassProgramConfiguration {\r\n semesterType?: boolean; // Legacy property name\r\n termType?: boolean; // Current property name\r\n branchType?: boolean;\r\n termLevelUpTo?: number; // Number of term hierarchy levels\r\n termAdmissionLevelUpTo?: number; // For admission forms\r\n termProgramLevelOneConnected?: boolean; // Whether term is connected at program level\r\n getAdmission?: boolean; // For admission forms\r\n [key: string]: unknown;\r\n}\r\n\r\ninterface SelectOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface ProgramSectionSelectorValues {\r\n classProgramId?: string | null;\r\n branchId?: string | null;\r\n termId?: string | null;\r\n sectionId?: string | null;\r\n}\r\n\r\n@Component({\r\n selector: 'cide-shared-program-section-selector',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n CideSelectComponent,\r\n NgClass\r\n ],\r\n templateUrl: './program-section-selector.component.html',\r\n styleUrl: './program-section-selector.component.scss'\r\n})\r\nexport class CideSharedProgramSectionSelectorComponent implements OnInit, OnDestroy {\r\n // Inputs\r\n readonly formGroup = input.required<FormGroup>();\r\n readonly classProgramControlName = input<string>('class_program_id');\r\n readonly branchControlName = input<string>('branch_id');\r\n readonly termControlName = input<string>('term_id');\r\n readonly sectionControlName = input<string>('section_id');\r\n readonly academicYearId = input<string | null>(null);\r\n readonly entityId = input<string | null>(null);\r\n readonly disabled = input<boolean>(false);\r\n readonly showLabels = input<boolean>(true);\r\n readonly gridCols = input<string>('tw-grid-cols-1 md:tw-grid-cols-3');\r\n readonly showAllPrograms = input<boolean>(false); // If true, shows all programs regardless of academic year/entity filters\r\n readonly includeInactive = input<boolean>(false); // If true, includes inactive programs\r\n\r\n // Outputs\r\n readonly valuesChange = output<ProgramSectionSelectorValues>();\r\n\r\n // Services\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly http = inject(HttpClient);\r\n private readonly classProgramService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN);\r\n private readonly notificationService = inject(NotificationService);\r\n\r\n // State\r\n readonly classProgramMasters = signal<AcaClassProgramMasterResponse[]>([]);\r\n readonly classProgramBranches = signal<SelectOption[]>([]);\r\n readonly classProgramTerms = signal<SelectOption[]>([]);\r\n readonly programTermSections = signal<SelectOption[]>([]);\r\n \r\n readonly classProgramMastersLoading = signal<boolean>(false);\r\n readonly classProgramBranchesLoading = signal<boolean>(false);\r\n readonly classProgramTermsLoading = signal<boolean>(false);\r\n readonly programTermSectionsLoading = signal<boolean>(false);\r\n\r\n readonly selectedClassProgram = signal<AcaClassProgramMasterResponse | null>(null);\r\n readonly hasSections = signal<boolean>(false);\r\n private isProcessingInitialValues = false;\r\n\r\n // FormControl getters\r\n getClassProgramControl(): FormControl {\r\n return this.formGroup().get(this.classProgramControlName()) as FormControl;\r\n }\r\n\r\n getBranchControl(): FormControl {\r\n return this.formGroup().get(this.branchControlName()) as FormControl;\r\n }\r\n\r\n getTermControl(): FormControl {\r\n return this.formGroup().get(this.termControlName()) as FormControl;\r\n }\r\n\r\n getSectionControl(): FormControl {\r\n return this.formGroup().get(this.sectionControlName()) as FormControl;\r\n }\r\n\r\n // Computed signals\r\n readonly classProgramOptions = computed(() => {\r\n return this.classProgramMasters().map(cp => ({\r\n value: cp._id || '',\r\n label: cp.acacpm_alise_title || ''\r\n }));\r\n });\r\n\r\n readonly showBranchDropdown = computed(() => {\r\n const program = this.selectedClassProgram();\r\n if (!program) return false;\r\n \r\n const generalMaster = program.acacpm_class_program_id_sygms || (program as any).acacpm_class_program_id_sygmt;\r\n if (!generalMaster || typeof generalMaster !== 'object') return false;\r\n \r\n let config: ClassProgramConfiguration | undefined;\r\n if ('sygms_configuration' in generalMaster) {\r\n const configValue = generalMaster.sygms_configuration;\r\n if (typeof configValue === 'string') {\r\n try {\r\n config = JSON.parse(configValue) as ClassProgramConfiguration;\r\n } catch {\r\n return false;\r\n }\r\n } else if (typeof configValue === 'object' && configValue !== null) {\r\n config = configValue as ClassProgramConfiguration;\r\n }\r\n }\r\n \r\n return config?.branchType === true;\r\n });\r\n\r\n readonly showTermDropdown = computed(() => {\r\n const program = this.selectedClassProgram();\r\n if (!program) return false;\r\n \r\n const generalMaster = program.acacpm_class_program_id_sygms || (program as any).acacpm_class_program_id_sygmt;\r\n if (!generalMaster || typeof generalMaster !== 'object') return false;\r\n \r\n let config: ClassProgramConfiguration | undefined;\r\n if ('sygms_configuration' in generalMaster) {\r\n const configValue = generalMaster.sygms_configuration;\r\n if (typeof configValue === 'string') {\r\n try {\r\n config = JSON.parse(configValue) as ClassProgramConfiguration;\r\n } catch {\r\n return false;\r\n }\r\n } else if (typeof configValue === 'object' && configValue !== null) {\r\n config = configValue as ClassProgramConfiguration;\r\n }\r\n }\r\n \r\n // If termType is explicitly false, don't show the dropdown\r\n if (config?.termType === false) {\r\n return false;\r\n }\r\n \r\n // Special case: Hide dropdown if termType=true, termLevelUpTo=1, and termProgramLevelOneConnected=true\r\n if (config?.termType === true && \r\n config?.termLevelUpTo === 1 && \r\n config?.termProgramLevelOneConnected === true) {\r\n return false;\r\n }\r\n \r\n // Check for both termType (current) and semesterType (legacy) for backward compatibility\r\n return config?.termType === true || config?.semesterType === true;\r\n });\r\n\r\n constructor() {\r\n // Effect to emit values when form changes\r\n effect(() => {\r\n const form = this.formGroup();\r\n if (form) {\r\n const classProgramId = form.get(this.classProgramControlName())?.value;\r\n const branchId = form.get(this.branchControlName())?.value;\r\n const termId = form.get(this.termControlName())?.value;\r\n const sectionId = form.get(this.sectionControlName())?.value;\r\n \r\n this.valuesChange.emit({\r\n classProgramId: classProgramId || null,\r\n branchId: branchId || null,\r\n termId: termId || null,\r\n sectionId: sectionId || null\r\n });\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loadClassProgramMasters();\r\n this.setupFormListeners();\r\n // Check for initial values in the form and load cascading options\r\n // Use setTimeout to ensure form is ready\r\n setTimeout(() => {\r\n this.handleInitialValues();\r\n }, 0);\r\n \r\n // Also watch for form value changes to handle values set after component initialization\r\n const form = this.formGroup();\r\n if (form) {\r\n // Watch for class program value being set\r\n form.get(this.classProgramControlName())?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n // If class program is set but we haven't processed initial values yet, process them\r\n const classProgramId = form.get(this.classProgramControlName())?.value;\r\n if (classProgramId && this.classProgramMasters().length > 0 && !this.selectedClassProgram()) {\r\n // Form value was set, but we haven't processed it yet - process now\r\n setTimeout(() => {\r\n this.handleInitialValues();\r\n }, 100);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private handleInitialValues(): void {\r\n const form = this.formGroup();\r\n if (!form) return;\r\n\r\n const classProgramId = form.get(this.classProgramControlName())?.value;\r\n if (!classProgramId) return;\r\n\r\n // Set flag to prevent clearing values during initial load\r\n this.isProcessingInitialValues = true;\r\n\r\n // Wait for class programs to load, then process initial values\r\n const checkInterval = setInterval(() => {\r\n if (this.classProgramMasters().length > 0) {\r\n clearInterval(checkInterval);\r\n // Find the selected program\r\n const selectedProgram = this.classProgramMasters().find(cp => cp._id === classProgramId);\r\n if (selectedProgram) {\r\n this.selectedClassProgram.set(selectedProgram);\r\n \r\n // Read config directly from the program to determine what to show\r\n const generalMaster = selectedProgram.acacpm_class_program_id_sygms || (selectedProgram as any).acacpm_class_program_id_sygmt;\r\n let config: ClassProgramConfiguration | undefined;\r\n \r\n if (generalMaster && typeof generalMaster === 'object') {\r\n if ('sygms_configuration' in generalMaster) {\r\n const configValue = generalMaster.sygms_configuration;\r\n if (typeof configValue === 'string') {\r\n try {\r\n config = JSON.parse(configValue) as ClassProgramConfiguration;\r\n } catch {\r\n console.warn('Failed to parse config:', configValue);\r\n }\r\n } else if (typeof configValue === 'object' && configValue !== null) {\r\n config = configValue as ClassProgramConfiguration;\r\n }\r\n }\r\n }\r\n \r\n // Wait a tick for computed signals to update\r\n setTimeout(() => {\r\n const branchId = form.get(this.branchControlName())?.value;\r\n const termId = form.get(this.termControlName())?.value;\r\n const sectionId = form.get(this.sectionControlName())?.value;\r\n \r\n // Load branches if config says so AND we have a branch ID\r\n const shouldShowBranch = config?.branchType === true;\r\n if (shouldShowBranch) {\r\n this.loadClassProgramBranches(classProgramId);\r\n \r\n // Wait for branches to load\r\n if (branchId) {\r\n const branchCheckInterval = setInterval(() => {\r\n if (this.classProgramBranches().length > 0 || !this.classProgramBranchesLoading()) {\r\n clearInterval(branchCheckInterval);\r\n // Branch value is already set, now load terms\r\n this.loadClassProgramTerms(classProgramId, branchId);\r\n \r\n // Wait for terms to load\r\n if (termId) {\r\n const termCheckInterval = setInterval(() => {\r\n if (this.classProgramTerms().length > 0 || !this.classProgramTermsLoading()) {\r\n clearInterval(termCheckInterval);\r\n // Term value is already set, now load sections\r\n if (sectionId) {\r\n this.loadProgramTermSections(termId);\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(termCheckInterval), 5000);\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(branchCheckInterval), 5000);\r\n } else {\r\n // No branch ID but should show branch dropdown - load terms after branches load\r\n const branchCheckInterval = setInterval(() => {\r\n if (!this.classProgramBranchesLoading()) {\r\n clearInterval(branchCheckInterval);\r\n if (termId) {\r\n this.loadClassProgramTerms(classProgramId, undefined);\r\n if (sectionId) {\r\n const termCheckInterval = setInterval(() => {\r\n if (this.classProgramTerms().length > 0 || !this.classProgramTermsLoading()) {\r\n clearInterval(termCheckInterval);\r\n this.loadProgramTermSections(termId);\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(termCheckInterval), 5000);\r\n }\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(branchCheckInterval), 5000);\r\n }\r\n } else {\r\n // No branch dropdown, load terms directly if config allows\r\n const shouldShowTerm = config?.termType === true || config?.semesterType === true;\r\n if (shouldShowTerm && termId) {\r\n this.loadClassProgramTerms(classProgramId, undefined);\r\n \r\n // Wait for terms to load, then load sections\r\n if (sectionId) {\r\n const termCheckInterval = setInterval(() => {\r\n if (this.classProgramTerms().length > 0 || !this.classProgramTermsLoading()) {\r\n clearInterval(termCheckInterval);\r\n this.loadProgramTermSections(termId);\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(termCheckInterval), 5000);\r\n }\r\n }\r\n }\r\n }, 0);\r\n }\r\n }\r\n }, 100);\r\n // Timeout after 5 seconds\r\n setTimeout(() => {\r\n clearInterval(checkInterval);\r\n // Reset flag after processing is complete\r\n this.isProcessingInitialValues = false;\r\n }, 5000);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Cleanup handled by takeUntilDestroyed\r\n }\r\n\r\n private setupFormListeners(): void {\r\n const form = this.formGroup();\r\n if (!form) return;\r\n\r\n // Listen for class program selection changes\r\n form.get(this.classProgramControlName())?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(classProgramId => {\r\n this.onClassProgramChange(classProgramId);\r\n });\r\n\r\n // Listen for branch selection changes\r\n form.get(this.branchControlName())?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(branchId => {\r\n this.onBranchChange(branchId);\r\n });\r\n\r\n // Listen for term selection changes\r\n form.get(this.termControlName())?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(termId => {\r\n this.onTermChange(termId);\r\n });\r\n }\r\n\r\n private loadClassProgramMasters(): void {\r\n this.classProgramMastersLoading.set(true);\r\n \r\n const academicYearId = this.academicYearId();\r\n const entityId = this.entityId();\r\n const showAll = this.showAllPrograms();\r\n const includeInactive = this.includeInactive();\r\n \r\n // Build payload - only include filters if not showing all programs\r\n const payload: Partial<any> = {\r\n pagination: false\r\n };\r\n\r\n // Only add academic year filter if not showing all programs and academic year is provided\r\n if (!showAll && academicYearId) {\r\n payload['acacpm_academic_year_id_acayr'] = academicYearId;\r\n }\r\n\r\n // Only add entity filter if not showing all programs and entity is provided\r\n if (!showAll && entityId) {\r\n payload['acacpm_entity_id_syen'] = entityId;\r\n }\r\n\r\n // Only add active filter if not including inactive programs\r\n if (!includeInactive) {\r\n payload['acacpm_isactive'] = true;\r\n }\r\n\r\n this.classProgramService.searchClassProgramMasters(payload).subscribe({\r\n next: (response: classProgramMasterControllerResponse) => {\r\n if (response?.success && response.data) {\r\n const dataArray: AcaClassProgramMasterResponse[] = Array.isArray(response.data) ? response.data : [];\r\n this.classProgramMasters.set(dataArray);\r\n console.log(`✅ Loaded ${dataArray.length} class programs`, {\r\n showAll,\r\n includeInactive,\r\n academicYearId,\r\n entityId,\r\n filters: payload\r\n });\r\n } else {\r\n this.classProgramMasters.set([]);\r\n console.warn('⚠️ No class programs found', response);\r\n }\r\n this.classProgramMastersLoading.set(false);\r\n },\r\n error: (response: { error: controllerResponse }) => {\r\n console.error('❌ Error loading class programs:', response);\r\n const errorMessage = response?.error?.message;\r\n if (errorMessage) {\r\n this.notificationService.error(errorMessage);\r\n }\r\n this.classProgramMasters.set([]);\r\n this.classProgramMastersLoading.set(false);\r\n }\r\n });\r\n }\r\n\r\n onClassProgramSearch(event: selectSearchType): void {\r\n this.classProgramMastersLoading.set(true);\r\n \r\n const academicYearId = this.academicYearId();\r\n const entityId = this.entityId();\r\n const showAll = this.showAllPrograms();\r\n const includeInactive = this.includeInactive();\r\n \r\n // Build payload for search\r\n const payload: Partial<any> = {\r\n query: event.query || \"\",\r\n acacpm_id: event.value ? String(event.value) : \"\",\r\n pagination: false\r\n };\r\n\r\n // Only add academic year filter if not showing all programs and academic year is provided\r\n if (!showAll && academicYearId) {\r\n payload['acacpm_academic_year_id_acayr'] = academicYearId;\r\n }\r\n\r\n // Only add entity filter if not showing all programs and entity is provided\r\n if (!showAll && entityId) {\r\n payload['acacpm_entity_id_syen'] = entityId;\r\n }\r\n\r\n // Only add active filter if not including inactive programs\r\n if (!includeInactive) {\r\n payload['acacpm_isactive'] = true;\r\n }\r\n\r\n this.classProgramService.searchClassProgramMasters(payload).subscribe({\r\n next: (response: classProgramMasterControllerResponse) => {\r\n if (response?.success && response.data) {\r\n const dataArray: AcaClassProgramMasterResponse[] = Array.isArray(response.data) ? response.data : [];\r\n this.classProgramMasters.set(dataArray);\r\n } else {\r\n this.classProgramMasters.set([]);\r\n }\r\n this.classProgramMastersLoading.set(false);\r\n },\r\n error: () => {\r\n this.classProgramMasters.set([]);\r\n this.classProgramMastersLoading.set(false);\r\n }\r\n });\r\n }\r\n\r\n onClassProgramChange(classProgramId: string | null | undefined): void {\r\n // Clear previous selections state\r\n this.selectedClassProgram.set(null);\r\n this.classProgramBranches.set([]);\r\n this.classProgramTerms.set([]);\r\n this.programTermSections.set([]);\r\n\r\n if (!classProgramId) {\r\n // Clear all dependent values if no class program selected\r\n const form = this.formGroup();\r\n if (form) {\r\n form.patchValue({\r\n [this.branchControlName()]: '',\r\n [this.termControlName()]: '',\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n return;\r\n }\r\n\r\n // Find the selected program from the list\r\n const selectedProgram = this.classProgramMasters().find(cp => cp._id === classProgramId);\r\n if (!selectedProgram) {\r\n return;\r\n }\r\n\r\n this.selectedClassProgram.set(selectedProgram);\r\n\r\n const form = this.formGroup();\r\n if (!form) return;\r\n\r\n // Get current form values before loading options\r\n const currentBranchId = form.get(this.branchControlName())?.value;\r\n const currentTermId = form.get(this.termControlName())?.value;\r\n const currentSectionId = form.get(this.sectionControlName())?.value;\r\n\r\n // Load branches if branchType is true\r\n if (this.showBranchDropdown()) {\r\n this.loadClassProgramBranches(classProgramId);\r\n \r\n // After branches load, check if current branch value is valid\r\n const branchCheckInterval = setInterval(() => {\r\n if (!this.classProgramBranchesLoading()) {\r\n clearInterval(branchCheckInterval);\r\n \r\n // Check if current branch value exists in loaded branches\r\n const branchExists = currentBranchId && \r\n this.classProgramBranches().some(b => b.value === currentBranchId);\r\n \r\n if (!branchExists && currentBranchId) {\r\n // Current branch value is not in the list, clear it\r\n form.patchValue({\r\n [this.branchControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n \r\n // Load terms with the branch (or without if branch was cleared)\r\n const branchIdToUse = branchExists ? currentBranchId : undefined;\r\n if (this.showTermDropdown()) {\r\n this.loadClassProgramTerms(classProgramId, branchIdToUse);\r\n \r\n // After terms load, check if current term value is valid\r\n const termCheckInterval = setInterval(() => {\r\n if (!this.classProgramTermsLoading()) {\r\n clearInterval(termCheckInterval);\r\n \r\n // Check if current term value exists in loaded terms\r\n const termExists = currentTermId && \r\n this.classProgramTerms().some(t => t.value === currentTermId);\r\n \r\n if (!termExists && currentTermId) {\r\n // Current term value is not in the list, clear it\r\n form.patchValue({\r\n [this.termControlName()]: ''\r\n }, { emitEvent: false });\r\n \r\n // Also clear section if term is cleared\r\n form.patchValue({\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n } else if (termExists && currentSectionId) {\r\n // Term is valid, load sections\r\n this.loadProgramTermSections(currentTermId);\r\n \r\n // After sections load, check if current section value is valid\r\n const sectionCheckInterval = setInterval(() => {\r\n if (!this.programTermSectionsLoading()) {\r\n clearInterval(sectionCheckInterval);\r\n \r\n // Check if current section value exists in loaded sections\r\n const sectionExists = this.programTermSections().some(s => s.value === currentSectionId);\r\n \r\n if (!sectionExists) {\r\n // Current section value is not in the list, clear it\r\n form.patchValue({\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(sectionCheckInterval), 5000);\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(termCheckInterval), 5000);\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(branchCheckInterval), 5000);\r\n } else {\r\n // If no branch dropdown but term dropdown should be shown, load terms directly\r\n if (this.showTermDropdown()) {\r\n this.loadClassProgramTerms(classProgramId, undefined);\r\n \r\n // After terms load, check if current term value is valid\r\n const termCheckInterval = setInterval(() => {\r\n if (!this.classProgramTermsLoading()) {\r\n clearInterval(termCheckInterval);\r\n \r\n // Check if current term value exists in loaded terms\r\n const termExists = currentTermId && \r\n this.classProgramTerms().some(t => t.value === currentTermId);\r\n \r\n if (!termExists && currentTermId) {\r\n // Current term value is not in the list, clear it\r\n form.patchValue({\r\n [this.termControlName()]: ''\r\n }, { emitEvent: false });\r\n \r\n // Also clear section if term is cleared\r\n form.patchValue({\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n } else if (termExists && currentSectionId) {\r\n // Term is valid, load sections\r\n this.loadProgramTermSections(currentTermId);\r\n \r\n // After sections load, check if current section value is valid\r\n const sectionCheckInterval = setInterval(() => {\r\n if (!this.programTermSectionsLoading()) {\r\n clearInterval(sectionCheckInterval);\r\n \r\n // Check if current section value exists in loaded sections\r\n const sectionExists = this.programTermSections().some(s => s.value === currentSectionId);\r\n \r\n if (!sectionExists) {\r\n // Current section value is not in the list, clear it\r\n form.patchValue({\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(sectionCheckInterval), 5000);\r\n }\r\n }\r\n }, 100);\r\n setTimeout(() => clearInterval(termCheckInterval), 5000);\r\n }\r\n }\r\n }\r\n\r\n private loadClassProgramBranches(classProgramId: string): void {\r\n this.classProgramBranchesLoading.set(true);\r\n \r\n const payload = new AcaClassPrgBranchListPayload({\r\n acabrn_class_program_id_acacpm: classProgramId,\r\n pagination: false\r\n });\r\n\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 this.http.get<classPrgBranchControllerResponse>(url).subscribe({\r\n next: (response) => {\r\n if (response?.success && response?.data) {\r\n const branches: AcaClassPrgBranchResponse[] = Array.isArray(response.data) ? response.data : [];\r\n this.classProgramBranches.set(branches.map((branch: AcaClassPrgBranchResponse) => ({\r\n value: branch._id || '',\r\n label: branch.acabrn_name || branch.acabrn_code || ''\r\n })));\r\n } else {\r\n this.classProgramBranches.set([]);\r\n }\r\n this.classProgramBranchesLoading.set(false);\r\n },\r\n error: (response: { error: controllerResponse }) => {\r\n console.error('Error loading branches:', response);\r\n const errorMessage = response?.error?.message;\r\n if (errorMessage) {\r\n this.notificationService.error(errorMessage);\r\n }\r\n this.classProgramBranches.set([]);\r\n this.classProgramBranchesLoading.set(false);\r\n }\r\n });\r\n }\r\n\r\n onBranchChange(branchId: string | null | undefined): void {\r\n this.classProgramTerms.set([]);\r\n this.programTermSections.set([]);\r\n \r\n const form = this.formGroup();\r\n if (form) {\r\n form.patchValue({\r\n [this.termControlName()]: '',\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n\r\n const classProgramId = form?.get(this.classProgramControlName())?.value;\r\n if (classProgramId && this.showTermDropdown()) {\r\n this.loadClassProgramTerms(classProgramId, branchId || undefined);\r\n }\r\n }\r\n\r\n private loadClassProgramTerms(classProgramId: string, branchId?: string): void {\r\n this.classProgramTermsLoading.set(true);\r\n \r\n const payload: Partial<MClassProgramTerm> = {\r\n acapt_class_program_id_acacpm: classProgramId,\r\n acapt_class_prg_branch_acabrn: branchId || undefined,\r\n pagination: false\r\n } as Partial<MClassProgramTerm>;\r\n\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.classProgramTerm,\r\n query\r\n ]);\r\n\r\n this.http.get<classProgramTermControllerResponse>(url)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.success && response?.data) {\r\n const terms: AcaClassProgramTermReponse[] = Array.isArray(response.data) ? response.data : [];\r\n // Transform to SelectOption format with parent field for tree view\r\n const options = terms.map((term: AcaClassProgramTermReponse) => {\r\n // Normalize parent field for tree view compatibility\r\n let parentId = '';\r\n if (term.acapt_parent_class_prog_term_acapt) {\r\n if (typeof term.acapt_parent_class_prog_term_acapt === 'object') {\r\n parentId = term.acapt_parent_class_prog_term_acapt._id || '';\r\n } else if (typeof term.acapt_parent_class_prog_term_acapt === 'string') {\r\n parentId = term.acapt_parent_class_prog_term_acapt || '';\r\n }\r\n }\r\n \r\n return {\r\n value: term._id || '',\r\n label: term.acapt_name || term.acapt_code || '',\r\n _id: term._id || '',\r\n acapt_parent_class_prog_term_acapt: parentId\r\n };\r\n });\r\n \r\n this.classProgramTerms.set(options);\r\n } else {\r\n this.classProgramTerms.set([]);\r\n }\r\n this.classProgramTermsLoading.set(false);\r\n },\r\n error: (response: { error: controllerResponse }) => {\r\n console.error('Error loading program terms:', response);\r\n const errorMessage = response?.error?.message;\r\n if (errorMessage) {\r\n this.notificationService.error(errorMessage);\r\n }\r\n this.classProgramTerms.set([]);\r\n this.classProgramTermsLoading.set(false);\r\n }\r\n });\r\n }\r\n\r\n onTermChange(termId: string | null | undefined): void {\r\n this.programTermSections.set([]);\r\n \r\n const form = this.formGroup();\r\n if (form) {\r\n form.patchValue({\r\n [this.sectionControlName()]: ''\r\n }, { emitEvent: false });\r\n }\r\n\r\n if (termId) {\r\n this.loadProgramTermSections(termId);\r\n } else {\r\n this.hasSections.set(false);\r\n const sectionControl = form?.get(this.sectionControlName());\r\n if (sectionControl) {\r\n sectionControl.clearValidators();\r\n sectionControl.updateValueAndValidity();\r\n }\r\n }\r\n }\r\n\r\n private loadProgramTermSections(termId: string): void {\r\n this.programTermSectionsLoading.set(true);\r\n \r\n const payload = new MPrgTrmSection({\r\n acapts_parent_class_prog_term_acapt: termId,\r\n pagination: false,\r\n pageIndex: 0,\r\n pageSize: 1000,\r\n query: \"\",\r\n sort: {\r\n key: 'acapts_name',\r\n order: 'asc'\r\n }\r\n } as Partial<MPrgTrmSection>);\r\n\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.programTermSection,\r\n query\r\n ]);\r\n\r\n this.http.get<prgTrmSectionControllerResponse>(url)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.success && response?.data) {\r\n const sections: AcaPrgTrmSectionResponse[] = Array.isArray(response.data) ? response.data : [];\r\n const hasSections = sections.length > 0;\r\n this.hasSections.set(hasSections);\r\n \r\n if (hasSections) {\r\n this.programTermSections.set(\r\n sections.map(section => ({\r\n value: section._id || '',\r\n label: section.acapts_name || section.acapts_code || ''\r\n }))\r\n );\r\n \r\n const form = this.formGroup();\r\n const sectionControl = form?.get(this.sectionControlName());\r\n if (sectionControl) {\r\n sectionControl.setValidators([Validators.required]);\r\n sectionControl.updateValueAndValidity();\r\n }\r\n } else {\r\n this.programTermSections.set([]);\r\n const form = this.formGroup();\r\n const sectionControl = form?.get(this.sectionControlName());\r\n if (sectionControl) {\r\n sectionControl.clearValidators();\r\n sectionControl.updateValueAndValidity();\r\n }\r\n }\r\n } else {\r\n this.hasSections.set(false);\r\n this.programTermSections.set([]);\r\n const form = this.formGroup();\r\n const sectionControl = form?.get(this.sectionControlName());\r\n if (sectionControl) {\r\n sectionControl.clearValidators();\r\n sectionControl.updateValueAndValidity();\r\n }\r\n }\r\n this.programTermSectionsLoading.set(false);\r\n },\r\n error: (response: { error: controllerResponse }) => {\r\n console.error('Error loading sections:', response);\r\n const errorMessage = response?.error?.message;\r\n if (errorMessage) {\r\n this.notificationService.error(errorMessage);\r\n }\r\n this.hasSections.set(false);\r\n this.programTermSections.set([]);\r\n const form = this.formGroup();\r\n const sectionControl = form?.get(this.sectionControlName());\r\n if (sectionControl) {\r\n sectionControl.clearValidators();\r\n sectionControl.updateValueAndValidity();\r\n }\r\n this.programTermSectionsLoading.set(false);\r\n }\r\n });\r\n }\r\n}\r\n\r\n","<div class=\"program-section-selector\" [ngClass]=\"gridCols()\">\r\n <!-- Class/Program Dropdown -->\r\n <cide-ele-select \r\n [label]=\"showLabels() ? 'Program/Class' : ''\" \r\n [formControl]=\"getClassProgramControl()\"\r\n [options]=\"classProgramOptions()\"\r\n [loading]=\"classProgramMastersLoading()\"\r\n [searchable]=\"true\"\r\n (searchChange)=\"onClassProgramSearch($event)\"\r\n placeholder=\"Search and select class/program\"\r\n [disabled]=\"disabled()\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <!-- Branch/Specialization Dropdown (conditional) -->\r\n @if (showBranchDropdown()) {\r\n <cide-ele-select \r\n [label]=\"showLabels() ? 'Branch (Specialization)' : ''\" \r\n [formControl]=\"getBranchControl()\"\r\n [options]=\"classProgramBranches()\"\r\n [loading]=\"classProgramBranchesLoading()\"\r\n placeholder=\"Select branch\"\r\n [disabled]=\"disabled() || !formGroup().get(classProgramControlName())?.value\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n }\r\n\r\n <!-- Program Term Dropdown (conditional) -->\r\n @if (showTermDropdown()) {\r\n <cide-ele-select \r\n [label]=\"showLabels() ? 'Program Term' : ''\" \r\n [formControl]=\"getTermControl()\"\r\n [options]=\"classProgramTerms()\"\r\n [loading]=\"classProgramTermsLoading()\"\r\n placeholder=\"Select term/semester\"\r\n [disabled]=\"disabled() || !formGroup().get(classProgramControlName())?.value\"\r\n size=\"sm\"\r\n valueKey=\"_id\"\r\n labelKey=\"label\"\r\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\">\r\n </cide-ele-select>\r\n }\r\n\r\n <!-- Section Dropdown (conditional) -->\r\n @if (hasSections()) {\r\n <cide-ele-select \r\n [label]=\"showLabels() ? 'Section' : ''\" \r\n [formControl]=\"getSectionControl()\"\r\n [options]=\"programTermSections()\"\r\n [loading]=\"programTermSectionsLoading()\"\r\n placeholder=\"Select section\"\r\n [disabled]=\"disabled() || !formGroup().get(termControlName())?.value\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n }\r\n</div>\r\n\r\n","import { InjectionToken, Type } from '@angular/core';\r\n\r\n/**\r\n * Type for FeeDetailsViewerComponent\r\n * This represents the component interface that must be implemented\r\n */\r\nexport interface FeeDetailsViewerComponentType {\r\n isOpen?: boolean | (() => boolean);\r\n feeData?: any;\r\n assignmentDate?: Date | null;\r\n discount?: number | null;\r\n closed?: () => void;\r\n}\r\n\r\n/**\r\n * Injection token for FeeDetailsViewerComponent\r\n * This allows the component to be provided without direct import dependency\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * import { FeeDetailsViewerComponent } from 'cloud-ide-fees';\r\n * import { FEE_DETAILS_VIEWER_COMPONENT_TOKEN } from 'cloud-ide-shared';\r\n * \r\n * providers: [\r\n * { provide: FEE_DETAILS_VIEWER_COMPONENT_TOKEN, useValue: FeeDetailsViewerComponent }\r\n * ]\r\n * \r\n * // In component template\r\n * <cide-shared-fee-details-viewer-wrapper\r\n * [isOpen]=\"viewingFeeDetails() !== null\"\r\n * [feeData]=\"getFeeDataForViewer()\"\r\n * [assignmentDate]=\"getAssignmentDate()\"\r\n * [discount]=\"getFeeDiscountForViewer()\"\r\n * (closed)=\"closeFeeDetails()\">\r\n * </cide-shared-fee-details-viewer-wrapper>\r\n * ```\r\n */\r\nexport const FEE_DETAILS_VIEWER_COMPONENT_TOKEN = new InjectionToken<Type<FeeDetailsViewerComponentType>>('FeeDetailsViewerComponent');\r\n\r\n","import { Component, inject, Input, Output, EventEmitter, ViewContainerRef, ComponentRef, OnInit, OnDestroy, DestroyRef, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FEE_DETAILS_VIEWER_COMPONENT_TOKEN, type FeeDetailsViewerComponentType } from '../../services/fee-details-viewer.component.token';\r\n\r\n/**\r\n * Wrapper component that dynamically loads the FeeDetailsViewerComponent\r\n * This allows front-desk to use the component without directly importing cloud-ide-fees\r\n */\r\n@Component({\r\n selector: 'cide-shared-fee-details-viewer-wrapper',\r\n standalone: true,\r\n template: `<!-- Component will be dynamically loaded here -->`\r\n})\r\nexport class FeeDetailsViewerWrapperComponent implements OnInit, OnDestroy, OnChanges {\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly componentToken = inject(FEE_DETAILS_VIEWER_COMPONENT_TOKEN, { optional: true });\r\n \r\n private componentRef: ComponentRef<any> | null = null;\r\n\r\n // Inputs that will be passed to the dynamically loaded component\r\n @Input() isOpen: boolean = false;\r\n @Input() feeData: any = null;\r\n @Input() assignmentDate: Date | null = null;\r\n @Input() discount: number | null = null;\r\n\r\n // Outputs\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n ngOnInit(): void {\r\n if (this.isOpen && this.componentToken) {\r\n this.loadComponent();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Handle isOpen changes\r\n if (changes['isOpen']) {\r\n if (this.isOpen && this.componentToken && !this.componentRef) {\r\n this.loadComponent();\r\n } else if (!this.isOpen && this.componentRef) {\r\n this.destroyComponent();\r\n } else if (this.componentRef) {\r\n this.updateComponentInputs();\r\n }\r\n } else if (this.componentRef) {\r\n // Update other inputs when they change\r\n this.updateComponentInputs();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyComponent();\r\n }\r\n\r\n private loadComponent(): void {\r\n if (!this.componentToken) {\r\n console.warn('FEE_DETAILS_VIEWER_COMPONENT_TOKEN not provided. FeeDetailsViewerComponent will not be loaded.');\r\n return;\r\n }\r\n\r\n if (this.componentRef) {\r\n // Component already loaded, just update inputs\r\n this.updateComponentInputs();\r\n return;\r\n }\r\n\r\n try {\r\n // Create the component dynamically\r\n this.componentRef = this.viewContainerRef.createComponent(this.componentToken);\r\n \r\n // Set inputs\r\n this.updateComponentInputs();\r\n\r\n // Subscribe to closed output if it exists (signal output)\r\n if (this.componentRef.instance.closed) {\r\n const closedOutput = this.componentRef.instance.closed;\r\n // Signal outputs are EventEmitters, so we can subscribe\r\n if (closedOutput && typeof closedOutput.subscribe === 'function') {\r\n closedOutput.subscribe(() => {\r\n this.closed.emit();\r\n });\r\n } else if (closedOutput && typeof closedOutput.emit === 'function') {\r\n // If it's an EventEmitter-like object\r\n closedOutput.subscribe(() => {\r\n this.closed.emit();\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.error('Error loading FeeDetailsViewerComponent:', error);\r\n }\r\n }\r\n\r\n private updateComponentInputs(): void {\r\n if (!this.componentRef) return;\r\n\r\n // Use setInput for all inputs - this works correctly with signal inputs in Angular 17+\r\n // Signal inputs are functions, but setInput handles them correctly\r\n this.componentRef.setInput('isOpen', this.isOpen);\r\n this.componentRef.setInput('feeData', this.feeData);\r\n this.componentRef.setInput('assignmentDate', this.assignmentDate);\r\n this.componentRef.setInput('discount', this.discount);\r\n\r\n // Detect changes\r\n this.componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n private destroyComponent(): void {\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n this.componentRef = null;\r\n this.viewContainerRef.clear();\r\n }\r\n }\r\n}\r\n\r\n","import { InjectionToken, Type } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\n/**\r\n * Type for ProgramSectionSelectorValues output\r\n */\r\nexport interface ProgramSectionSelectorValues {\r\n classProgramId?: string | null;\r\n branchId?: string | null;\r\n termId?: string | null;\r\n sectionId?: string | null;\r\n}\r\n\r\n/**\r\n * Type for ProgramSectionSelectorComponent\r\n * This represents the component interface that must be implemented\r\n */\r\nexport interface ProgramSectionSelectorComponentType {\r\n formGroup?: FormGroup | (() => FormGroup);\r\n classProgramControlName?: string | (() => string);\r\n branchControlName?: string | (() => string);\r\n termControlName?: string | (() => string);\r\n sectionControlName?: string | (() => string);\r\n academicYearId?: string | null | (() => string | null);\r\n entityId?: string | null | (() => string | null);\r\n disabled?: boolean | (() => boolean);\r\n showLabels?: boolean | (() => boolean);\r\n gridCols?: string | (() => string);\r\n showAllPrograms?: boolean | (() => boolean);\r\n includeInactive?: boolean | (() => boolean);\r\n valuesChange?: (values: ProgramSectionSelectorValues) => void;\r\n}\r\n\r\n/**\r\n * Injection token for ProgramSectionSelectorComponent\r\n * This allows the component to be provided without direct import dependency\r\n * \r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * import { CideLytProgramSectionSelectorComponent } from 'cloud-ide-academics';\r\n * import { PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN } from 'cloud-ide-shared';\r\n * \r\n * providers: [\r\n * { provide: PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN, useValue: CideLytProgramSectionSelectorComponent }\r\n * ]\r\n * \r\n * // In component template\r\n * <cide-shared-program-section-selector-wrapper\r\n * [formGroup]=\"form\"\r\n * [classProgramControlName]=\"'class_program_id'\"\r\n * [academicYearId]=\"academicYearId()\"\r\n * (valuesChange)=\"onValuesChange($event)\">\r\n * </cide-shared-program-section-selector-wrapper>\r\n * ```\r\n */\r\nexport const PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN = new InjectionToken<Type<ProgramSectionSelectorComponentType>>('ProgramSectionSelectorComponent');\r\n\r\n","import { Component, inject, Input, Output, EventEmitter, ViewContainerRef, ComponentRef, OnInit, OnDestroy, DestroyRef, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN, type ProgramSectionSelectorComponentType, type ProgramSectionSelectorValues } from '../../services/program-section-selector.component.token';\r\n\r\n/**\r\n * Wrapper component that dynamically loads the ProgramSectionSelectorComponent\r\n * This allows front-desk to use the component without directly importing cloud-ide-academics\r\n */\r\n@Component({\r\n selector: 'cide-shared-program-section-selector-wrapper',\r\n standalone: true,\r\n template: `<!-- Component will be dynamically loaded here -->`\r\n})\r\nexport class ProgramSectionSelectorWrapperComponent implements OnInit, OnDestroy, OnChanges {\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly componentToken = inject(PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN, { optional: true });\r\n \r\n private componentRef: ComponentRef<any> | null = null;\r\n\r\n // Inputs that will be passed to the dynamically loaded component\r\n @Input() formGroup!: FormGroup;\r\n @Input() classProgramControlName: string = 'class_program_id';\r\n @Input() branchControlName: string = 'branch_id';\r\n @Input() termControlName: string = 'term_id';\r\n @Input() sectionControlName: string = 'section_id';\r\n @Input() academicYearId: string | null = null;\r\n @Input() entityId: string | null = null;\r\n @Input() disabled: boolean = false;\r\n @Input() showLabels: boolean = true;\r\n @Input() gridCols: string = 'tw-grid-cols-1 md:tw-grid-cols-3';\r\n @Input() showAllPrograms: boolean = false;\r\n @Input() includeInactive: boolean = false;\r\n\r\n // Outputs\r\n @Output() valuesChange = new EventEmitter<ProgramSectionSelectorValues>();\r\n\r\n ngOnInit(): void {\r\n if (this.componentToken && this.formGroup) {\r\n this.loadComponent();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.componentRef) {\r\n this.updateComponentInputs();\r\n } else if (this.formGroup && this.componentToken && changes['formGroup']?.currentValue) {\r\n this.loadComponent();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyComponent();\r\n }\r\n\r\n private loadComponent(): void {\r\n if (!this.componentToken) {\r\n console.warn('PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN not provided. ProgramSectionSelectorComponent will not be loaded.');\r\n return;\r\n }\r\n\r\n if (!this.formGroup) {\r\n console.warn('formGroup is required for ProgramSectionSelectorComponent.');\r\n return;\r\n }\r\n\r\n if (this.componentRef) {\r\n // Component already loaded, just update inputs\r\n this.updateComponentInputs();\r\n return;\r\n }\r\n\r\n try {\r\n // Create the component dynamically\r\n this.componentRef = this.viewContainerRef.createComponent(this.componentToken);\r\n \r\n // Set inputs\r\n this.updateComponentInputs();\r\n\r\n // Subscribe to valuesChange output if it exists\r\n if (this.componentRef.instance.valuesChange) {\r\n const valuesChangeOutput = this.componentRef.instance.valuesChange;\r\n if (valuesChangeOutput && typeof valuesChangeOutput.subscribe === 'function') {\r\n valuesChangeOutput.subscribe((values: ProgramSectionSelectorValues) => {\r\n this.valuesChange.emit(values);\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.error('Error loading ProgramSectionSelectorComponent:', error);\r\n }\r\n }\r\n\r\n private updateComponentInputs(): void {\r\n if (!this.componentRef) return;\r\n\r\n const instance = this.componentRef.instance;\r\n\r\n // Handle signal inputs (Angular 17+)\r\n // Use setInput for proper change detection\r\n if ('formGroup' in instance) {\r\n this.componentRef.setInput('formGroup', this.formGroup);\r\n }\r\n if ('classProgramControlName' in instance) {\r\n this.componentRef.setInput('classProgramControlName', this.classProgramControlName);\r\n }\r\n if ('branchControlName' in instance) {\r\n this.componentRef.setInput('branchControlName', this.branchControlName);\r\n }\r\n if ('termControlName' in instance) {\r\n this.componentRef.setInput('termControlName', this.termControlName);\r\n }\r\n if ('sectionControlName' in instance) {\r\n this.componentRef.setInput('sectionControlName', this.sectionControlName);\r\n }\r\n if ('academicYearId' in instance) {\r\n this.componentRef.setInput('academicYearId', this.academicYearId);\r\n }\r\n if ('entityId' in instance) {\r\n this.componentRef.setInput('entityId', this.entityId);\r\n }\r\n if ('disabled' in instance) {\r\n this.componentRef.setInput('disabled', this.disabled);\r\n }\r\n if ('showLabels' in instance) {\r\n this.componentRef.setInput('showLabels', this.showLabels);\r\n }\r\n if ('gridCols' in instance) {\r\n this.componentRef.setInput('gridCols', this.gridCols);\r\n }\r\n if ('showAllPrograms' in instance) {\r\n this.componentRef.setInput('showAllPrograms', this.showAllPrograms);\r\n }\r\n if ('includeInactive' in instance) {\r\n this.componentRef.setInput('includeInactive', this.includeInactive);\r\n }\r\n\r\n // Detect changes\r\n this.componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n private destroyComponent(): void {\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n this.componentRef = null;\r\n this.viewContainerRef.clear();\r\n }\r\n }\r\n}\r\n\r\n","/*\n * Public API Surface of cloud-ide-shared\n */\n\nexport * from './lib/cloud-ide-shared';\n\n// Guards\nexport * from './lib/guards/auth.guard';\n\n// Services\nexport * from './lib/services/auth.service.interface';\nexport * from './lib/services/entity.service.interface';\nexport * from './lib/services/pin-code.service.interface';\nexport * from './lib/services/country.service.interface';\nexport * from './lib/services/nationality.service.interface';\nexport * from './lib/services/currency.service.interface';\nexport * from './lib/services/class-program-master.service.interface';\nexport * from './lib/services/program-term-section.service.interface';\nexport * from './lib/services/shared-object-id.service';\nexport * from './lib/services/general-master-type.service';\nexport * from './lib/services/general-master.service';\nexport * from './lib/services/user.service.interface';\nexport * from './lib/services/year-services.interface';\nexport * from './lib/services/fee.service.interface';\n\n// Components\nexport * from './lib/components/org-structure/org-structure.component';\nexport * from './lib/components/program-section-selector/program-section-selector.component'; // Keep for backward compatibility\nexport * from './lib/components/fee-details-viewer-wrapper/fee-details-viewer-wrapper.component';\nexport * from './lib/components/program-section-selector-wrapper/program-section-selector-wrapper.component';\n\n// Component Tokens\nexport * from './lib/services/fee-details-viewer.component.token';\nexport * from './lib/services/program-section-selector.component.token';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
|
|
|
2
2
|
import { InjectionToken, OnInit, OnDestroy, OnChanges, EventEmitter, SimpleChanges, Type } from '@angular/core';
|
|
3
3
|
import { CanActivateFn, Router } from '@angular/router';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
|
-
import { MEntity, entityControllerResponse, entityByIdControllerResponse, CoreSystemEntitySaveUpdatePayload, MPinCodeSelect, pinCodeSelectControllerResponse, MSyctrList, countryListControllerResponse, CoreNationalityListPayload, nationalityListControllerResponse, MClassProgramMaster, classProgramMasterControllerResponse, MPrgTrmSection, prgTrmSectionControllerResponse, MPrgTrmSectionGetByIdPayload, prgTrmSectionByIdControllerResponse, MPrgTrmSectionInsertUpdatePayload, prgTrmSectionInsertUpdateControllerResponse, MPrgTrmSectionDeletePayload, prgTrmSectionDeleteControllerResponse, MPrgTrmSectionToggleStatusPayload, prgTrmSectionToggleStatusControllerResponse, MPrgTrmSectionToggleLockPayload, prgTrmSectionToggleLockControllerResponse, ICoreSygmt, MGeneralMasterType, generalMasterTypeListControllerResponse, generalMasterTypeInsertUpdateControllerResponse, generalMasterTypeByIdControllerResponse, generalMasterTypeDeleteControllerResponse, generalMasterTypeToggleStatusControllerResponse, ICoreSygms, IGeneralMasterListRequest, generalMasterListControllerResponse, generalMasterInsertUpdateControllerResponse, generalMasterByIdControllerResponse, generalMasterDeleteControllerResponse, generalMasterToggleStatusControllerResponse, AuthUserMstListPayload, authUserMstListControllerResponse, MFinancialYear, financialYearControllerResponse, MFinancialYearGetByIdPayload, financialYearByIdControllerResponse, MFinancialYearInsertUpdatePayload, financialYearInsertUpdateControllerResponse, MFinancialYearDeletePayload, financialYearDeleteControllerResponse, MFinancialYearToggleStatusPayload, financialYearToggleStatusControllerResponse, MAcademicYear, academicYearControllerResponse, MAcademicYearGetByIdPayload, academicYearByIdControllerResponse, MAcademicYearInsertUpdatePayload, academicYearInsertUpdateControllerResponse, MAcademicYearDeletePayload, academicYearDeleteControllerResponse, MAcademicYearToggleStatusPayload, academicYearToggleStatusControllerResponse, MFeeStructure, feeStructureControllerResponse, MFeeStructureGetByIdPayload, feeStructureByIdControllerResponse, MFeeStructureInsertUpdatePayload, feeStructureInsertUpdateControllerResponse, MFeeStructureDeletePayload, feeStructureDeleteControllerResponse, MFeeStructureToggleStatusPayload, feeStructureToggleStatusControllerResponse, MFeePayment, feePaymentControllerResponse, MFeePaymentGetByIdPayload, feePaymentByIdControllerResponse, MFeePaymentInsertUpdatePayload, feePaymentInsertUpdateControllerResponse, MFeePaymentDeletePayload, feePaymentDeleteControllerResponse, CoreSystemEntityListResponse, AcaClassProgramMasterResponse, selectSearchType } from 'cloud-ide-lms-model';
|
|
5
|
+
import { MEntity, entityControllerResponse, entityByIdControllerResponse, CoreSystemEntitySaveUpdatePayload, MPinCodeSelect, pinCodeSelectControllerResponse, MSyctrList, countryListControllerResponse, CoreNationalityListPayload, nationalityListControllerResponse, MSycrList, currencyListControllerResponse, MClassProgramMaster, classProgramMasterControllerResponse, MPrgTrmSection, prgTrmSectionControllerResponse, MPrgTrmSectionGetByIdPayload, prgTrmSectionByIdControllerResponse, MPrgTrmSectionInsertUpdatePayload, prgTrmSectionInsertUpdateControllerResponse, MPrgTrmSectionDeletePayload, prgTrmSectionDeleteControllerResponse, MPrgTrmSectionToggleStatusPayload, prgTrmSectionToggleStatusControllerResponse, MPrgTrmSectionToggleLockPayload, prgTrmSectionToggleLockControllerResponse, ICoreSygmt, MGeneralMasterType, generalMasterTypeListControllerResponse, generalMasterTypeInsertUpdateControllerResponse, generalMasterTypeByIdControllerResponse, generalMasterTypeDeleteControllerResponse, generalMasterTypeToggleStatusControllerResponse, ICoreSygms, IGeneralMasterListRequest, generalMasterListControllerResponse, generalMasterInsertUpdateControllerResponse, generalMasterByIdControllerResponse, generalMasterDeleteControllerResponse, generalMasterToggleStatusControllerResponse, AuthUserMstListPayload, authUserMstListControllerResponse, MFinancialYear, financialYearControllerResponse, MFinancialYearGetByIdPayload, financialYearByIdControllerResponse, MFinancialYearInsertUpdatePayload, financialYearInsertUpdateControllerResponse, MFinancialYearDeletePayload, financialYearDeleteControllerResponse, MFinancialYearToggleStatusPayload, financialYearToggleStatusControllerResponse, MAcademicYear, academicYearControllerResponse, MAcademicYearGetByIdPayload, academicYearByIdControllerResponse, MAcademicYearInsertUpdatePayload, academicYearInsertUpdateControllerResponse, MAcademicYearDeletePayload, academicYearDeleteControllerResponse, MAcademicYearToggleStatusPayload, academicYearToggleStatusControllerResponse, MFeeStructure, feeStructureControllerResponse, MFeeStructureGetByIdPayload, feeStructureByIdControllerResponse, MFeeStructureInsertUpdatePayload, feeStructureInsertUpdateControllerResponse, MFeeStructureDeletePayload, feeStructureDeleteControllerResponse, MFeeStructureToggleStatusPayload, feeStructureToggleStatusControllerResponse, MFeePayment, feePaymentControllerResponse, MFeePaymentGetByIdPayload, feePaymentByIdControllerResponse, MFeePaymentInsertUpdatePayload, feePaymentInsertUpdateControllerResponse, MFeePaymentDeletePayload, feePaymentDeleteControllerResponse, CoreSystemEntityListResponse, AcaClassProgramMasterResponse, selectSearchType } from 'cloud-ide-lms-model';
|
|
6
6
|
import { mongooseObjectIdCreateControllerResponse } from 'cloud-ide-element';
|
|
7
7
|
import { FormGroup, FormControl } from '@angular/forms';
|
|
8
8
|
|
|
@@ -231,6 +231,35 @@ interface INationalityService {
|
|
|
231
231
|
*/
|
|
232
232
|
declare const NATIONALITY_SERVICE_TOKEN: InjectionToken<INationalityService>;
|
|
233
233
|
|
|
234
|
+
/**
|
|
235
|
+
* Interface for Currency Service
|
|
236
|
+
* This interface defines the contract for currency operations
|
|
237
|
+
* Used to avoid circular dependencies and provide clean abstraction
|
|
238
|
+
*/
|
|
239
|
+
interface ICurrencyService {
|
|
240
|
+
/**
|
|
241
|
+
* Get all currencies from API
|
|
242
|
+
* @param body - MSycrList payload for filtering
|
|
243
|
+
* @returns Observable of currency list response
|
|
244
|
+
*/
|
|
245
|
+
getAllCurrencies(body: Partial<MSycrList>): Observable<currencyListControllerResponse>;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Injection token for Currency Service (CideCoreCurrencyService)
|
|
249
|
+
* Used to provide and inject currency service implementations
|
|
250
|
+
* This enables dependency injection with interface-based contracts
|
|
251
|
+
*
|
|
252
|
+
* @example
|
|
253
|
+
* ```typescript
|
|
254
|
+
* // In app.config.ts
|
|
255
|
+
* { provide: CURRENCY_SERVICE_TOKEN, useExisting: CideCoreCurrencyService }
|
|
256
|
+
*
|
|
257
|
+
* // In component
|
|
258
|
+
* private currencyService = inject(CURRENCY_SERVICE_TOKEN) as ICurrencyService;
|
|
259
|
+
* ```
|
|
260
|
+
*/
|
|
261
|
+
declare const CURRENCY_SERVICE_TOKEN: InjectionToken<ICurrencyService>;
|
|
262
|
+
|
|
234
263
|
/**
|
|
235
264
|
* Interface for Class Program Master Service
|
|
236
265
|
* This interface defines the contract for class program master operations
|
|
@@ -1095,5 +1124,5 @@ interface FeeDetailsViewerComponentType {
|
|
|
1095
1124
|
*/
|
|
1096
1125
|
declare const FEE_DETAILS_VIEWER_COMPONENT_TOKEN: InjectionToken<Type<FeeDetailsViewerComponentType>>;
|
|
1097
1126
|
|
|
1098
|
-
export { ACADEMIC_YEAR_SERVICE_TOKEN, APP_STATE_SERVICE_TOKEN, AUTH_SERVICE_TOKEN, CLASS_PROGRAM_MASTER_SERVICE_TOKEN, COUNTRY_SERVICE_TOKEN, CideCoreGeneralMasterService, CideCoreGeneralMasterTypeService, CideSharedOrgStructureComponent, CideSharedProgramSectionSelectorComponent, CloudIdeShared, ENTITY_SERVICE_TOKEN, FEE_DETAILS_VIEWER_COMPONENT_TOKEN, FEE_PAYMENT_SERVICE_TOKEN, FEE_STRUCTURE_SERVICE_TOKEN, FINANCIAL_YEAR_SERVICE_TOKEN, FeeDetailsViewerWrapperComponent, NATIONALITY_SERVICE_TOKEN, PIN_CODE_SERVICE_TOKEN, PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN, PROGRAM_TERM_SECTION_SERVICE_TOKEN, ProgramSectionSelectorWrapperComponent, SharedObjectIdService, USER_SERVICE_TOKEN, authGuard };
|
|
1099
|
-
export type { FeeDetailsViewerComponentType, IAcademicYearService, IAppStateService, IAuthService, IClassProgramMasterService, ICountryService, IEntityService, IFeePaymentService, IFeeStructureService, IFinancialYearService, INationalityService, IPinCodeService, IProgramTermSectionService, IUserMasterService, ProgramSectionSelectorComponentType, ProgramSectionSelectorValues };
|
|
1127
|
+
export { ACADEMIC_YEAR_SERVICE_TOKEN, APP_STATE_SERVICE_TOKEN, AUTH_SERVICE_TOKEN, CLASS_PROGRAM_MASTER_SERVICE_TOKEN, COUNTRY_SERVICE_TOKEN, CURRENCY_SERVICE_TOKEN, CideCoreGeneralMasterService, CideCoreGeneralMasterTypeService, CideSharedOrgStructureComponent, CideSharedProgramSectionSelectorComponent, CloudIdeShared, ENTITY_SERVICE_TOKEN, FEE_DETAILS_VIEWER_COMPONENT_TOKEN, FEE_PAYMENT_SERVICE_TOKEN, FEE_STRUCTURE_SERVICE_TOKEN, FINANCIAL_YEAR_SERVICE_TOKEN, FeeDetailsViewerWrapperComponent, NATIONALITY_SERVICE_TOKEN, PIN_CODE_SERVICE_TOKEN, PROGRAM_SECTION_SELECTOR_COMPONENT_TOKEN, PROGRAM_TERM_SECTION_SERVICE_TOKEN, ProgramSectionSelectorWrapperComponent, SharedObjectIdService, USER_SERVICE_TOKEN, authGuard };
|
|
1128
|
+
export type { FeeDetailsViewerComponentType, IAcademicYearService, IAppStateService, IAuthService, IClassProgramMasterService, ICountryService, ICurrencyService, IEntityService, IFeePaymentService, IFeeStructureService, IFinancialYearService, INationalityService, IPinCodeService, IProgramTermSectionService, IUserMasterService, ProgramSectionSelectorComponentType, ProgramSectionSelectorValues };
|