cloud-ide-admin 1.0.1 → 1.0.2

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.
Files changed (37) hide show
  1. package/README.md +49 -10
  2. package/fesm2022/cloud-ide-admin-cide-adm-home-wrapper.component-DpAhYlMT.mjs +21 -0
  3. package/fesm2022/{cloud-ide-admin-cide-adm-home-wrapper.component-Cu0sr3ST.mjs.map → cloud-ide-admin-cide-adm-home-wrapper.component-DpAhYlMT.mjs.map} +1 -1
  4. package/fesm2022/cloud-ide-admin.mjs +261 -272
  5. package/fesm2022/cloud-ide-admin.mjs.map +1 -1
  6. package/index.d.ts +220 -5
  7. package/package.json +3 -5
  8. package/esm2022/cloud-ide-admin.mjs +0 -5
  9. package/esm2022/lib/admin-module/entity/create/cide-adm-entity.component.mjs +0 -834
  10. package/esm2022/lib/admin-module/entity/create/cide-adm-entity.service.mjs +0 -79
  11. package/esm2022/lib/admin-module/entity/create/country-select.service.mjs +0 -33
  12. package/esm2022/lib/admin-module/entity/create/currency-select.service.mjs +0 -48
  13. package/esm2022/lib/admin-module/entity/create/general-master-select.service.mjs +0 -44
  14. package/esm2022/lib/admin-module/entity/create/pin-code-select.service.mjs +0 -60
  15. package/esm2022/lib/admin-module/entity/create/user-select.service.mjs +0 -58
  16. package/esm2022/lib/admin-module/entity/list/cide-adm-entity-list.component.mjs +0 -600
  17. package/esm2022/lib/admin-module/entity/list/cide-adm-entity-list.service.mjs +0 -52
  18. package/esm2022/lib/admin-module/home/home-wrapper/cide-adm-home-wrapper.component.mjs +0 -21
  19. package/esm2022/lib/cide-adm-admin.component.mjs +0 -29
  20. package/esm2022/lib/cide-adm-admin.service.mjs +0 -14
  21. package/esm2022/lib/cloud-ide-admin.routes.mjs +0 -38
  22. package/esm2022/public-api.mjs +0 -10
  23. package/fesm2022/cloud-ide-admin-cide-adm-home-wrapper.component-Cu0sr3ST.mjs +0 -24
  24. package/lib/admin-module/entity/create/cide-adm-entity.component.d.ts +0 -73
  25. package/lib/admin-module/entity/create/cide-adm-entity.service.d.ts +0 -39
  26. package/lib/admin-module/entity/create/country-select.service.d.ts +0 -13
  27. package/lib/admin-module/entity/create/currency-select.service.d.ts +0 -19
  28. package/lib/admin-module/entity/create/general-master-select.service.d.ts +0 -24
  29. package/lib/admin-module/entity/create/pin-code-select.service.d.ts +0 -31
  30. package/lib/admin-module/entity/create/user-select.service.d.ts +0 -31
  31. package/lib/admin-module/entity/list/cide-adm-entity-list.component.d.ts +0 -94
  32. package/lib/admin-module/entity/list/cide-adm-entity-list.service.d.ts +0 -25
  33. package/lib/admin-module/home/home-wrapper/cide-adm-home-wrapper.component.d.ts +0 -9
  34. package/lib/cide-adm-admin.component.d.ts +0 -9
  35. package/lib/cide-adm-admin.service.d.ts +0 -6
  36. package/lib/cloud-ide-admin.routes.d.ts +0 -2
  37. package/public-api.d.ts +0 -6
@@ -6,16 +6,16 @@ import { FormBuilder, Validators, ReactiveFormsModule, FormsModule } from '@angu
6
6
  import { ActivatedRoute, Router } from '@angular/router';
7
7
  import { HttpClient } from '@angular/common/http';
8
8
  import { cidePath, hostManagerRoutesUrl, coreRoutesUrl, generateStringFromObject, userRoutesUrl, generateObjectFromString } from 'cloud-ide-lms-model';
9
- import { CideInputComponent, CideSelectComponent, CideTextareaComponent, CideEleFileInputComponent, CideEleTabComponent, CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, TooltipDirective } from 'cloud-ide-element';
9
+ import { CideInputComponent, CideSelectComponent, CideTextareaComponent, CideEleFileInputComponent, CideEleTabComponent, CideEleButtonComponent, CideIconComponent, CideEleDataGridComponent, TooltipDirective } from 'cloud-ide-element';
10
10
  import { Subject, takeUntil, debounceTime, distinctUntilChanged } from 'rxjs';
11
11
  import { CommonModule } from '@angular/common';
12
12
 
13
13
  class CideAdmAdminService {
14
14
  constructor() { }
15
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmAdminService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
16
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmAdminService, providedIn: 'root' }); }
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmAdminService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmAdminService, providedIn: 'root' });
17
17
  }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmAdminService, decorators: [{
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmAdminService, decorators: [{
19
19
  type: Injectable,
20
20
  args: [{
21
21
  providedIn: 'root'
@@ -23,23 +23,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
23
23
  }], ctorParameters: () => [] });
24
24
 
25
25
  class CideAdmAdminComponent extends CideLytSharedWrapperComponent {
26
- constructor() {
27
- super(...arguments);
28
- this.shared_wrapper_setup_param = {
29
- sypg_page_code: "default_home_adm"
30
- };
31
- }
26
+ shared_wrapper_setup_param = {
27
+ sypg_page_code: "default_home_adm"
28
+ };
32
29
  ngOnInit() {
33
30
  super.ngOnInit?.();
34
31
  }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmAdminComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
36
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideAdmAdminComponent, isStandalone: true, selector: "cide-adm-admin", usesInheritance: true, ngImport: i0, template: `
32
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmAdminComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
33
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CideAdmAdminComponent, isStandalone: true, selector: "cide-adm-admin", usesInheritance: true, ngImport: i0, template: `
37
34
  <p>
38
35
  cide-adm-admin works!
39
36
  </p>
40
- `, isInline: true, styles: [""] }); }
37
+ `, isInline: true, styles: [""] });
41
38
  }
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmAdminComponent, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmAdminComponent, decorators: [{
43
40
  type: Component,
44
41
  args: [{ selector: 'cide-adm-admin', standalone: true, imports: [], template: `
45
42
  <p>
@@ -49,9 +46,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
49
46
  }] });
50
47
 
51
48
  class CideAdmEntityService {
52
- constructor() {
53
- this.http = inject(HttpClient);
54
- }
49
+ http = inject(HttpClient);
55
50
  getEntityTypes() {
56
51
  return this.http.get('/api/core/entity-types');
57
52
  }
@@ -113,10 +108,10 @@ class CideAdmEntityService {
113
108
  console.log('🏢 ENTITY SERVICE: Making DELETE request to:', url);
114
109
  return this.http.delete(url);
115
110
  }
116
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
117
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityService, providedIn: 'root' }); }
111
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmEntityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
112
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmEntityService, providedIn: 'root' });
118
113
  }
119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityService, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmEntityService, decorators: [{
120
115
  type: Injectable,
121
116
  args: [{
122
117
  providedIn: 'root'
@@ -124,9 +119,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
124
119
  }] });
125
120
 
126
121
  class GeneralMasterSelectService {
127
- constructor() {
128
- this.http = inject(HttpClient);
129
- }
122
+ http = inject(HttpClient);
130
123
  /**
131
124
  * Get general master data from API
132
125
  * @param body - MGeneralMaster payload with sygmt_code
@@ -153,10 +146,10 @@ class GeneralMasterSelectService {
153
146
  };
154
147
  return this.getGeneralMasterData(payload);
155
148
  }
156
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GeneralMasterSelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
157
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GeneralMasterSelectService, providedIn: 'root' }); }
149
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: GeneralMasterSelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
150
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: GeneralMasterSelectService, providedIn: 'root' });
158
151
  }
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GeneralMasterSelectService, decorators: [{
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: GeneralMasterSelectService, decorators: [{
160
153
  type: Injectable,
161
154
  args: [{
162
155
  providedIn: 'root'
@@ -164,9 +157,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
164
157
  }] });
165
158
 
166
159
  class PinCodeSelectService {
167
- constructor() {
168
- this.http = inject(HttpClient);
169
- }
160
+ http = inject(HttpClient);
170
161
  /**
171
162
  * Get pin code data from API
172
163
  * @param body - MPinCodeSelect payload with sypin_pincode
@@ -209,10 +200,10 @@ class PinCodeSelectService {
209
200
  searchPinCodes(payload) {
210
201
  return this.getPinCodeData(payload);
211
202
  }
212
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PinCodeSelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
213
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PinCodeSelectService, providedIn: 'root' }); }
203
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: PinCodeSelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
204
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: PinCodeSelectService, providedIn: 'root' });
214
205
  }
215
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PinCodeSelectService, decorators: [{
206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: PinCodeSelectService, decorators: [{
216
207
  type: Injectable,
217
208
  args: [{
218
209
  providedIn: 'root'
@@ -220,9 +211,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
220
211
  }] });
221
212
 
222
213
  class UserSelectService {
223
- constructor() {
224
- this.http = inject(HttpClient);
225
- }
214
+ http = inject(HttpClient);
226
215
  /**
227
216
  * Get user data from API
228
217
  * @param body - MUserSelect payload
@@ -263,10 +252,10 @@ class UserSelectService {
263
252
  const payload = { ...filters };
264
253
  return this.getUserData(payload);
265
254
  }
266
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UserSelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
267
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UserSelectService, providedIn: 'root' }); }
255
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: UserSelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
256
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: UserSelectService, providedIn: 'root' });
268
257
  }
269
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UserSelectService, decorators: [{
258
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: UserSelectService, decorators: [{
270
259
  type: Injectable,
271
260
  args: [{
272
261
  providedIn: 'root'
@@ -274,9 +263,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
274
263
  }] });
275
264
 
276
265
  class CurrencySelectService {
277
- constructor() {
278
- this.http = inject(HttpClient);
279
- }
266
+ http = inject(HttpClient);
280
267
  /**
281
268
  * Get currency data from API
282
269
  * @returns Observable of currencyListControllerResponse
@@ -307,10 +294,10 @@ class CurrencySelectService {
307
294
  console.log('🔍 CURRENCY SERVICE: Filters:', filters);
308
295
  return this.http.post(url, filters);
309
296
  }
310
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CurrencySelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
311
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CurrencySelectService, providedIn: 'root' }); }
297
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CurrencySelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
298
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CurrencySelectService, providedIn: 'root' });
312
299
  }
313
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CurrencySelectService, decorators: [{
300
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CurrencySelectService, decorators: [{
314
301
  type: Injectable,
315
302
  args: [{
316
303
  providedIn: 'root'
@@ -318,9 +305,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
318
305
  }] });
319
306
 
320
307
  class CountrySelectService {
321
- constructor() {
322
- this.http = inject(HttpClient);
323
- }
308
+ http = inject(HttpClient);
324
309
  /**
325
310
  * Get country data from API
326
311
  * @returns Observable of country response
@@ -336,10 +321,10 @@ class CountrySelectService {
336
321
  console.log('🔍 COUNTRY SERVICE: Making API call to:', url);
337
322
  return this.http.get(url);
338
323
  }
339
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CountrySelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
340
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CountrySelectService, providedIn: 'root' }); }
324
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CountrySelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
325
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CountrySelectService, providedIn: 'root' });
341
326
  }
342
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CountrySelectService, decorators: [{
327
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CountrySelectService, decorators: [{
343
328
  type: Injectable,
344
329
  args: [{
345
330
  providedIn: 'root'
@@ -347,44 +332,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
347
332
  }] });
348
333
 
349
334
  class CideAdmEntityComponent {
335
+ // Reactive form
336
+ entityForm;
337
+ entityTypes = signal([], ...(ngDevMode ? [{ debugName: "entityTypes" }] : []));
338
+ currencies = signal([], ...(ngDevMode ? [{ debugName: "currencies" }] : []));
339
+ users = signal([], ...(ngDevMode ? [{ debugName: "users" }] : []));
340
+ postalCodes = signal([], ...(ngDevMode ? [{ debugName: "postalCodes" }] : []));
341
+ photoIdDocuments = signal([], ...(ngDevMode ? [{ debugName: "photoIdDocuments" }] : []));
342
+ countries = signal([], ...(ngDevMode ? [{ debugName: "countries" }] : []));
343
+ // Store the full pin code data for auto-population
344
+ pinCodeDataMap = new Map();
345
+ // Store logo file for upload
346
+ logoFile;
347
+ loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
348
+ error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
349
+ success = signal(null, ...(ngDevMode ? [{ debugName: "success" }] : []));
350
+ // Loading states for individual dropdowns
351
+ postalCodesLoading = signal(false, ...(ngDevMode ? [{ debugName: "postalCodesLoading" }] : []));
352
+ usersLoading = signal(false, ...(ngDevMode ? [{ debugName: "usersLoading" }] : []));
353
+ countriesLoading = signal(false, ...(ngDevMode ? [{ debugName: "countriesLoading" }] : []));
354
+ // Entity mode and ID
355
+ isEditMode = signal(false, ...(ngDevMode ? [{ debugName: "isEditMode" }] : []));
356
+ entityId = signal(null, ...(ngDevMode ? [{ debugName: "entityId" }] : []));
357
+ // Tab configuration
358
+ activeTab = signal('basic', ...(ngDevMode ? [{ debugName: "activeTab" }] : []));
359
+ entityTabs = signal([
360
+ { id: 'basic', label: 'Basic Information', icon: 'ℹ️' },
361
+ { id: 'corporate', label: 'Corporate Address', icon: '🏢' },
362
+ { id: 'contact', label: 'Contact Information', icon: '📧' },
363
+ { id: 'registered', label: 'Registered Address', icon: '🏠' },
364
+ { id: 'documents', label: 'Documents & Media', icon: '📄' }
365
+ ], ...(ngDevMode ? [{ debugName: "entityTabs" }] : []));
366
+ // Modern dependency injection using inject()
367
+ entityService = inject(CideAdmEntityService);
368
+ generalMasterService = inject(GeneralMasterSelectService);
369
+ pinCodeService = inject(PinCodeSelectService);
370
+ userService = inject(UserSelectService);
371
+ currencyService = inject(CurrencySelectService);
372
+ countryService = inject(CountrySelectService);
373
+ fb = inject(FormBuilder);
374
+ route = inject(ActivatedRoute);
375
+ destroy$ = new Subject();
376
+ globalErrorHandler;
377
+ globalRejectionHandler;
350
378
  constructor() {
351
- this.entityTypes = signal([]);
352
- this.currencies = signal([]);
353
- this.users = signal([]);
354
- this.postalCodes = signal([]);
355
- this.photoIdDocuments = signal([]);
356
- this.countries = signal([]);
357
- // Store the full pin code data for auto-population
358
- this.pinCodeDataMap = new Map();
359
- this.loading = signal(false);
360
- this.error = signal(null);
361
- this.success = signal(null);
362
- // Loading states for individual dropdowns
363
- this.postalCodesLoading = signal(false);
364
- this.usersLoading = signal(false);
365
- this.countriesLoading = signal(false);
366
- // Entity mode and ID
367
- this.isEditMode = signal(false);
368
- this.entityId = signal(null);
369
- // Tab configuration
370
- this.activeTab = signal('basic');
371
- this.entityTabs = signal([
372
- { id: 'basic', label: 'Basic Information', icon: 'ℹ️' },
373
- { id: 'corporate', label: 'Corporate Address', icon: '🏢' },
374
- { id: 'contact', label: 'Contact Information', icon: '📧' },
375
- { id: 'registered', label: 'Registered Address', icon: '🏠' },
376
- { id: 'documents', label: 'Documents & Media', icon: '📄' }
377
- ]);
378
- // Modern dependency injection using inject()
379
- this.entityService = inject(CideAdmEntityService);
380
- this.generalMasterService = inject(GeneralMasterSelectService);
381
- this.pinCodeService = inject(PinCodeSelectService);
382
- this.userService = inject(UserSelectService);
383
- this.currencyService = inject(CurrencySelectService);
384
- this.countryService = inject(CountrySelectService);
385
- this.fb = inject(FormBuilder);
386
- this.route = inject(ActivatedRoute);
387
- this.destroy$ = new Subject();
388
379
  this.entityForm = this.fb.group({
389
380
  // Basic Information
390
381
  syen_name: ['', [Validators.required]],
@@ -1149,10 +1140,10 @@ class CideAdmEntityComponent {
1149
1140
  this.error.set(null);
1150
1141
  console.log('🔄 Form reset completed');
1151
1142
  }
1152
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1153
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: CideAdmEntityComponent, isStandalone: true, selector: "cide-adm-entity", ngImport: i0, template: "<!-- \n DYNAMIC GRID SYSTEM FEATURES:\n \n Basic Grids: grid-1, grid-2, grid-3, grid-4, grid-5, grid-6\n \n Auto-fit Grids: grid-auto-fit-sm/md/lg/xl (dynamic columns based on content)\n Auto-fill Grids: grid-auto-fill-sm/md/lg (always fill available space)\n \n Custom Ratios: grid-ratio-1-2, grid-ratio-2-1, grid-ratio-1-3, grid-ratio-3-1, etc.\n Fractional: grid-quarter-three, grid-third-two, grid-half-half\n \n Gap Control: gap-xs, gap-sm, gap-md, gap-lg, gap-xl\n Specific Gaps: row-gap-xs/sm/md/lg, col-gap-xs/sm/md/lg\n \n Alignment: align-start/center/end/stretch, justify-start/center/end/stretch\n \n Responsive: xl-grid-*, lg-grid-*, md-grid-*, sm-grid-*, xs-grid-*\n \n Grid Items: span-1/2/3/4/5/6/full, row-span-*, start-*, end-*\n Item Alignment: self-start/center/end/stretch, justify-self-*\n \n Special: grid-dense (auto-fills gaps), grid-masonry (masonry layout)\n-->\n\n<div class=\"entity-form-container\">\n <form class=\"entity-form\" [formGroup]=\"entityForm\" [class.loading]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n \n <!-- Header Section -->\n <div class=\"form-header\">\n <h2 class=\"form-title\">Create New Entity</h2>\n <p class=\"form-subtitle\">Add a new educational institution to the system</p>\n </div>\n\n <!-- Success and Error Messages -->\n @if (success()) {\n <div class=\"alert alert-success\">\n <svg class=\"alert-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"></path>\n </svg>\n {{ success() }}\n </div>\n }\n @if (error()) {\n <div class=\"alert alert-error\">\n <svg class=\"alert-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"></path>\n </svg>\n {{ error() }}\n </div>\n }\n\n <!-- Tab Navigation -->\n <div class=\"form-tabs\">\n <cide-ele-tab \n [tabs]=\"entityTabs()\"\n [activeTabId]=\"activeTab()\"\n size=\"md\"\n variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\"\n [class.loading]=\"loading()\">\n @switch (activeTab()) {\n \n @case ('basic') {\n <!-- Basic Information Section -->\n <div class=\"form-section\">\n <div class=\"grid grid-auto-fit-md gap-md lg-grid-2 md-grid-1\">\n <div class=\"grid-item span-2 md-span-full\">\n <cide-ele-input \n id=\"syen_name\" \n type=\"text\"\n label=\"Institution Name\" \n formControlName=\"syen_name\"\n placeholder=\"Enter full institution name\">\n </cide-ele-input>\n </div>\n \n <cide-ele-input \n label=\"Institution Code\" \n formControlName=\"syen_entity_code\"\n id=\"syen_entity_code\"\n placeholder=\"Enter unique code (max 40 characters)\">\n </cide-ele-input>\n </div>\n\n <div class=\"grid grid-ratio-2-1-1 gap-md lg-grid-3 md-grid-2 sm-grid-1\">\n <cide-ele-select \n label=\"Entity Type\" \n [options]=\"entityTypes()\" \n formControlName=\"syen_entity_type_gmst\"\n placeholder=\"Select entity type\">\n </cide-ele-select>\n \n <cide-ele-input \n label=\"UDISE Number\" \n formControlName=\"syen_udise_no\"\n placeholder=\"Enter UDISE number\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"Affiliation Number\" \n formControlName=\"syen_affiliation_no\"\n placeholder=\"Enter affiliation number\">\n </cide-ele-input>\n </div>\n\n <div class=\"grid grid-1 gap-sm\">\n <div class=\"checkbox-field\">\n <label class=\"checkbox-label\">\n <input \n type=\"checkbox\" \n formControlName=\"syen_isactive\"\n class=\"checkbox-input\" />\n <span class=\"checkbox-text\">Active Status</span>\n <span class=\"checkbox-description\">Enable this entity for system operations</span>\n </label>\n </div>\n </div>\n </div>\n }\n\n @case ('corporate') {\n <!-- Corporate Address Section -->\n <div class=\"form-section\">\n <div class=\"grid grid-1 gap-md\">\n <div class=\"grid-item span-full\">\n <cide-ele-textarea \n label=\"Corporate Address\" \n formControlName=\"syen_corporate_address\"\n placeholder=\"Enter complete corporate address\"\n [rows]=\"3\">\n </cide-ele-textarea>\n </div>\n </div>\n\n <div class=\"grid grid-auto-fit-sm gap-lg xl-grid-4 lg-grid-3 md-grid-2 sm-grid-1 align-end\">\n <cide-ele-select \n label=\"Postal Code\"\n [options]=\"postalCodes()\" \n formControlName=\"syen_corporate_pin_sypin\"\n placeholder=\"Select postal code\"\n [searchable]=\"true\"\n [loading]=\"postalCodesLoading()\"\n (searchChange)=\"onPostalCodeSearch($event)\"\n (selectionChange)=\"onPostalCodeSelection($event)\">\n </cide-ele-select>\n \n <cide-ele-input \n label=\"City\" \n formControlName=\"syen_corporate_city_sypin\"\n placeholder=\"Enter city\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"State\" \n formControlName=\"syen_corporate_state_sypin\"\n placeholder=\"Enter state\">\n </cide-ele-input>\n \n <cide-ele-select \n label=\"Country\" \n [options]=\"countries()\" \n formControlName=\"syen_corporate_country_syctr\"\n placeholder=\"Select country\"\n [searchable]=\"true\"\n [loading]=\"countriesLoading()\"\n (searchChange)=\"onCountrySearch($event)\">\n </cide-ele-select>\n </div>\n </div>\n }\n\n @case ('contact') {\n <!-- Contact Information Section -->\n <div class=\"form-section\">\n <div class=\"grid grid-ratio-3-1 gap-lg md-grid-2 sm-grid-1 justify-stretch\">\n <div class=\"grid-item justify-self-stretch\">\n <cide-ele-select \n label=\"Primary Contact Person\"\n [options]=\"users()\" \n formControlName=\"syen_corporate_contact_person_user\"\n placeholder=\"Select contact person\"\n [searchable]=\"true\"\n [loading]=\"usersLoading()\"\n (searchChange)=\"onUserSearch($event)\">\n </cide-ele-select>\n </div>\n \n <div class=\"grid-item justify-self-stretch\">\n <cide-ele-select \n label=\"Currency\" \n [options]=\"currencies()\" \n formControlName=\"syen_currency_sycr\"\n placeholder=\"Select currency\">\n </cide-ele-select>\n </div>\n </div>\n\n <div class=\"grid grid-auto-fill-md gap-md col-gap-lg row-gap-sm xl-grid-3 lg-grid-2 md-grid-1 grid-dense\">\n <cide-ele-input \n label=\"Primary Phone\" \n formControlName=\"syen_corporate_phone\"\n type=\"tel\"\n placeholder=\"Enter phone number\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"Alternate Phone\" \n formControlName=\"syen_corporate_phone_alt\"\n type=\"tel\"\n placeholder=\"Enter alternate phone\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"Fax Number\" \n formControlName=\"syen_corporate_fax\"\n placeholder=\"Enter fax number\">\n </cide-ele-input>\n </div>\n\n <div class=\"grid grid-ratio-1-2-1 gap-xl lg-grid-3 md-grid-2 sm-grid-1 align-center\">\n <div class=\"grid-item self-stretch\">\n <cide-ele-input \n label=\"Primary Email\" \n formControlName=\"syen_corporate_email\"\n type=\"email\"\n placeholder=\"Enter primary email\">\n </cide-ele-input>\n </div>\n \n <div class=\"grid-item span-2 lg-span-1 self-stretch\">\n <cide-ele-input \n label=\"Website URL\" \n formControlName=\"syen_website\"\n type=\"url\"\n placeholder=\"Enter website URL\">\n </cide-ele-input>\n </div>\n \n <div class=\"grid-item self-stretch\">\n <cide-ele-input \n label=\"Alternate Email\" \n formControlName=\"syen_corporate_email_alt\"\n type=\"email\"\n placeholder=\"Enter alternate email\">\n </cide-ele-input>\n </div>\n </div>\n </div>\n }\n\n @case ('registered') {\n <!-- Registered Address Section -->\n <div class=\"form-section\">\n <div class=\"grid grid-1\">\n <cide-ele-textarea \n label=\"Registered Address\" \n formControlName=\"syen_registered_address\"\n placeholder=\"Enter complete registered address\"\n [rows]=\"3\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"grid grid-4\">\n <cide-ele-select \n label=\"Registered Postal Code\"\n [options]=\"postalCodes()\" \n formControlName=\"syen_registered_pin_sypin\"\n placeholder=\"Select postal code\"\n [searchable]=\"true\"\n [loading]=\"postalCodesLoading()\"\n (searchChange)=\"onPostalCodeSearch($event)\"\n (selectionChange)=\"onPostalCodeSelection($event)\">\n </cide-ele-select>\n \n <cide-ele-input \n label=\"Registered City\" \n formControlName=\"syen_registered_city_sypin\"\n placeholder=\"Enter city\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"Registered State\" \n formControlName=\"syen_registered_state_sypin\"\n placeholder=\"Enter state\">\n </cide-ele-input>\n \n <cide-ele-select \n label=\"Registered Country\" \n [options]=\"countries()\" \n formControlName=\"syen_registered_country_syctr\"\n placeholder=\"Select country\"\n [searchable]=\"true\"\n [loading]=\"countriesLoading()\"\n (searchChange)=\"onCountrySearch($event)\">\n </cide-ele-select>\n </div>\n\n <div class=\"grid grid-3\">\n <cide-ele-select \n label=\"Registered Contact Person\"\n [options]=\"users()\" \n formControlName=\"syen_registered_contact_person_user\"\n placeholder=\"Select contact person\"\n [searchable]=\"true\"\n [loading]=\"usersLoading()\"\n (searchChange)=\"onUserSearch($event)\">\n </cide-ele-select>\n \n <cide-ele-input \n label=\"Registered Phone\" \n formControlName=\"syen_registered_phone\"\n type=\"tel\"\n placeholder=\"Enter phone number\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"Registered Email\" \n formControlName=\"syen_registered_email\"\n type=\"email\"\n placeholder=\"Enter email\">\n </cide-ele-input>\n @if (hasError('syen_registered_email')) {\n <div class=\"error-message\">{{ getErrorMessage('syen_registered_email') }}</div>\n }\n </div>\n\n <div class=\"grid grid-1\">\n <cide-ele-input \n label=\"Registered Fax\" \n formControlName=\"syen_registered_fax\"\n placeholder=\"Enter fax number\">\n </cide-ele-input>\n </div>\n </div>\n }\n\n @case ('documents') {\n <!-- Documents Section -->\n <div class=\"form-section\">\n <!-- Photo ID Document -->\n <div class=\"grid grid-1 gap-md\">\n <cide-ele-select \n label=\"Photo ID Document\" \n [options]=\"photoIdDocuments()\" \n formControlName=\"syen_photo_id_cyfm\"\n placeholder=\"Select photo ID document\">\n </cide-ele-select>\n </div>\n\n <!-- Logo Upload -->\n <div class=\"grid grid-quarter-three gap-lg md-grid-1 align-center\">\n <div class=\"grid-item self-center justify-self-center\">\n <!-- Logo preview placeholder -->\n <div style=\"width: 120px; height: 120px; border: 2px dashed #cbd5e1; border-radius: 8px; display: flex; align-items: center; justify-content: center; color: #9ca3af; font-size: 0.875rem; text-align: center;\">\n Logo Preview\n </div>\n </div>\n <div class=\"grid-item self-stretch\">\n <cide-ele-file-input \n label=\"Upload Logo\" \n accept=\"image/*\" \n [multiple]=\"false\" \n (fileChange)=\"onFileChange($event)\"\n placeholder=\"Select institution logo or image\">\n </cide-ele-file-input>\n </div>\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button cideEleButton\n type=\"button\" \n variant=\"secondary\" \n (click)=\"onReset()\" \n leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n \n <button cideEleButton\n type=\"submit\" \n variant=\"primary\" \n [disabled]=\"loading() || entityForm.invalid\"\n [loading]=\"loading()\"\n leftIcon=\"check\">\n Create Entity\n </button>\n </div>\n </form>\n</div> ", styles: [".entity-form-container{background:transparent;padding:1rem;width:100%;box-sizing:border-box}.entity-form{max-width:1200px;margin:0 auto;background:transparent;border:none;box-shadow:none;width:100%}.entity-form.loading{opacity:.6;pointer-events:none}.form-header{background:transparent;color:#1f2937;padding:1.25rem 0;text-align:left}.form-header .form-title{font-size:1.5rem;font-weight:700;margin:0 0 .25rem;color:#1f2937}.form-header .form-subtitle{font-size:.95rem;opacity:.7;margin:0;font-weight:400;color:#6b7280}.form-section{padding:1.25rem 0;border-bottom:none;margin-bottom:1.5rem}.form-section:last-of-type{margin-bottom:0}.form-section .section-title{font-size:1.125rem;font-weight:600;color:#1f2937;margin:0 0 1rem;padding-bottom:.5rem;border-bottom:1px solid #e5e7eb;position:relative}.form-section .section-title:after{content:\"\";position:absolute;bottom:-1px;left:0;width:40px;height:1px;background:#667eea;border-radius:1px}.grid{display:grid;gap:1rem;margin-bottom:.75rem;transition:all .3s ease}.grid:last-child{margin-bottom:0}.grid.grid-1{grid-template-columns:1fr}.grid.grid-2{grid-template-columns:repeat(2,1fr)}.grid.grid-3{grid-template-columns:repeat(3,1fr)}.grid.grid-4{grid-template-columns:repeat(4,1fr)}.grid.grid-5{grid-template-columns:repeat(5,1fr)}.grid.grid-6{grid-template-columns:repeat(6,1fr)}.grid.grid-auto-fit-sm{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.grid.grid-auto-fit-md{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}.grid.grid-auto-fit-lg{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.grid.grid-auto-fit-xl{grid-template-columns:repeat(auto-fit,minmax(350px,1fr))}.grid.grid-auto-fill-sm{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.grid.grid-auto-fill-md{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.grid.grid-auto-fill-lg{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.grid.grid-ratio-1-2{grid-template-columns:1fr 2fr}.grid.grid-ratio-2-1{grid-template-columns:2fr 1fr}.grid.grid-ratio-1-3{grid-template-columns:1fr 3fr}.grid.grid-ratio-3-1{grid-template-columns:3fr 1fr}.grid.grid-ratio-1-2-1{grid-template-columns:1fr 2fr 1fr}.grid.grid-ratio-2-1-1{grid-template-columns:2fr 1fr 1fr}.grid.grid-quarter-three{grid-template-columns:1fr 3fr}.grid.grid-third-two{grid-template-columns:1fr 2fr}.grid.grid-half-half{grid-template-columns:1fr 1fr}.grid.gap-xs{gap:.25rem}.grid.gap-sm{gap:.5rem}.grid.gap-md{gap:1rem}.grid.gap-lg{gap:1.5rem}.grid.gap-xl{gap:2rem}.grid.row-gap-xs{row-gap:.25rem}.grid.row-gap-sm{row-gap:.5rem}.grid.row-gap-md{row-gap:1rem}.grid.row-gap-lg{row-gap:1.5rem}.grid.col-gap-xs{column-gap:.25rem}.grid.col-gap-sm{column-gap:.5rem}.grid.col-gap-md{column-gap:1rem}.grid.col-gap-lg{column-gap:1.5rem}.grid.align-start{align-items:start}.grid.align-center{align-items:center}.grid.align-end{align-items:end}.grid.align-stretch{align-items:stretch}.grid.justify-start{justify-items:start}.grid.justify-center{justify-items:center}.grid.justify-end{justify-items:end}.grid.justify-stretch{justify-items:stretch}.grid.grid-dense{grid-auto-flow:dense}.grid.grid-masonry{grid-auto-rows:min-content;align-items:start}@media (min-width: 1200px){.grid.xl-grid-1{grid-template-columns:1fr}.grid.xl-grid-2{grid-template-columns:repeat(2,1fr)}.grid.xl-grid-3{grid-template-columns:repeat(3,1fr)}.grid.xl-grid-4{grid-template-columns:repeat(4,1fr)}.grid.xl-grid-5{grid-template-columns:repeat(5,1fr)}.grid.xl-grid-6{grid-template-columns:repeat(6,1fr)}}@media (max-width: 1199px) and (min-width: 992px){.grid.lg-grid-1{grid-template-columns:1fr}.grid.lg-grid-2{grid-template-columns:repeat(2,1fr)}.grid.lg-grid-3{grid-template-columns:repeat(3,1fr)}.grid.lg-grid-4{grid-template-columns:repeat(4,1fr)}}@media (max-width: 991px) and (min-width: 768px){.grid.md-grid-1{grid-template-columns:1fr}.grid.md-grid-2{grid-template-columns:repeat(2,1fr)}.grid.md-grid-3{grid-template-columns:repeat(3,1fr)}}@media (max-width: 767px) and (min-width: 576px){.grid.sm-grid-1{grid-template-columns:1fr}.grid.sm-grid-2{grid-template-columns:repeat(2,1fr)}}@media (max-width: 575px){.grid.xs-grid-1{grid-template-columns:1fr}}@media (max-width: 1024px){.grid.grid-4:not([class*=lg-grid]):not([class*=md-grid]){grid-template-columns:repeat(2,1fr)}.grid.grid-5:not([class*=lg-grid]):not([class*=md-grid]),.grid.grid-6:not([class*=lg-grid]):not([class*=md-grid]){grid-template-columns:repeat(3,1fr)}}@media (max-width: 768px){.grid{gap:.75rem}.grid.grid-2:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-3:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-4:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-5:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-6:not([class*=sm-grid]):not([class*=xs-grid]){grid-template-columns:1fr}.grid.gap-lg{gap:1rem}.grid.gap-xl{gap:1.25rem}}@media (max-width: 480px){.grid{gap:.5rem}.grid:not([class*=xs-grid]){grid-template-columns:1fr!important}.grid.gap-md{gap:.75rem}.grid.gap-lg,.grid.gap-xl{gap:1rem}}.grid-item.span-1{grid-column:span 1}.grid-item.span-2{grid-column:span 2}.grid-item.span-3{grid-column:span 3}.grid-item.span-4{grid-column:span 4}.grid-item.span-5{grid-column:span 5}.grid-item.span-6{grid-column:span 6}.grid-item.span-full{grid-column:1/-1}.grid-item.row-span-1{grid-row:span 1}.grid-item.row-span-2{grid-row:span 2}.grid-item.row-span-3{grid-row:span 3}.grid-item.row-span-4{grid-row:span 4}.grid-item.start-1{grid-column-start:1}.grid-item.start-2{grid-column-start:2}.grid-item.start-3{grid-column-start:3}.grid-item.start-4{grid-column-start:4}.grid-item.end-1{grid-column-end:1}.grid-item.end-2{grid-column-end:2}.grid-item.end-3{grid-column-end:3}.grid-item.end-4{grid-column-end:4}.grid-item.end-auto{grid-column-end:auto}.grid-item.self-start{align-self:start}.grid-item.self-center{align-self:center}.grid-item.self-end{align-self:end}.grid-item.self-stretch{align-self:stretch}.grid-item.justify-self-start{justify-self:start}.grid-item.justify-self-center{justify-self:center}.grid-item.justify-self-end{justify-self:end}.grid-item.justify-self-stretch{justify-self:stretch}@media (max-width: 768px){.grid-item.md-span-1{grid-column:span 1}.grid-item.md-span-2{grid-column:span 2}.grid-item.md-span-full{grid-column:1/-1}}@media (max-width: 480px){.grid-item.sm-span-full{grid-column:1/-1}}.checkbox-field{margin:.25rem 0}.checkbox-label{display:flex;flex-direction:column;gap:.25rem;cursor:pointer;padding:.75rem 0;background:transparent;border:none;border-radius:0;transition:all .2s ease}.checkbox-label:hover{background:#667eea05}.checkbox-label .checkbox-input{width:1rem;height:1rem;accent-color:#667eea;border-radius:3px;margin-bottom:.125rem}.checkbox-label .checkbox-text{font-weight:600;color:#374151;font-size:.875rem}.checkbox-label .checkbox-description{font-size:.75rem;color:#6b7280;margin-top:.125rem}.alert{display:flex;align-items:center;gap:.5rem;padding:.75rem 0;margin:1rem 0;border-radius:0;font-weight:500;font-size:.875rem;border-left:3px solid}.alert .alert-icon{width:1rem;height:1rem;flex-shrink:0}.alert.alert-success{background:#dcfce74d;border-left-color:#22c55e;color:#166534}.alert.alert-error{background:#fef2f24d;border-left-color:#ef4444;color:#dc2626}.error-message{font-size:.75rem;color:#dc2626;margin-top:.25rem;padding-left:.125rem;font-weight:500}.form-tabs{padding:0;margin:1rem 0;border-bottom:1px solid #e5e7eb}.tab-content{transition:opacity .2s ease}.tab-content.loading{opacity:.6;pointer-events:none}.form-actions{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 0;background:#fff;border-top:1px solid #e5e7eb;margin-top:2rem;position:sticky;bottom:0}@media (max-width: 640px){.form-actions{flex-direction:column-reverse}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;padding:.5rem 1rem;font-weight:600;font-size:.8125rem;border-radius:6px;border:none;cursor:pointer;transition:all .2s ease;min-width:120px;position:relative}.btn .btn-icon{width:.875rem;height:.875rem}.btn:disabled{opacity:.6;cursor:not-allowed}.btn.btn-primary{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 4px 6px -1px #667eea4d}.btn.btn-primary:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 8px 12px -2px #667eea66}.btn.btn-primary:active:not(:disabled){transform:translateY(0)}.btn.btn-secondary{background:#fff;color:#6b7280;border:2px solid #e5e7eb}.btn.btn-secondary:hover:not(:disabled){background:#f9fafb;border-color:#d1d5db;color:#374151}.entity-type-selector{display:flex;flex-direction:column;gap:.375rem}.input-label{font-size:.875rem;font-weight:500;color:#374151;margin-bottom:.25rem}.entity-type-button{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.75rem;background:#fff;border:1px solid #d1d5db;border-radius:6px;cursor:pointer;transition:all .15s ease;text-align:left;font-size:.875rem;color:#6b7280}.entity-type-button:hover{border-color:#9ca3af;background:#f9fafb}.entity-type-button:focus{outline:none;border-color:var(--cide-theme-primary-color);box-shadow:0 0 0 3px #3b82f61a}.entity-type-button.has-value{color:#374151}.entity-type-button.invalid{border-color:#dc2626;color:#dc2626}.entity-type-button.invalid:hover{border-color:#b91c1c}.entity-type-button.invalid:focus{border-color:#dc2626;box-shadow:0 0 0 3px #dc26261a}.entity-type-button .button-text{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entity-type-button .button-icon{width:1rem;height:1rem;margin-left:.5rem;flex-shrink:0}.animate-spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}cide-ele-input,cide-ele-select,cide-ele-textarea,cide-ele-file-input{transition:all .2s ease}@media (max-width: 768px){.entity-form-container{padding:.75rem}.form-header{padding:1rem 0}.form-header .form-title{font-size:1.25rem}.form-header .form-subtitle{font-size:.875rem}.form-tabs{margin:.5rem 0}.tab-content{padding:1rem 0 5rem}.form-section{padding:1rem 0}.form-section .section-title{font-size:1rem}.form-actions{padding:1rem 0;margin-top:1.5rem}}@media (max-width: 480px){.entity-form-container{padding:.25rem}.form-header{padding:.75rem 0}.form-tabs{margin:.25rem 0}.tab-content{padding:.75rem 0 4rem}.form-section{padding:.75rem 0}.form-actions{padding:.75rem 0;margin-top:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideTextareaComponent, selector: "cide-ele-textarea", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "minlength", "maxlength", "rows", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput"], outputs: ["ngModelChange"] }, { kind: "component", type: CideEleFileInputComponent, selector: "cide-ele-file-input", inputs: ["label", "accept", "multiple", "disabled", "helperText", "errorText"], outputs: ["fileChange"] }, { kind: "component", type: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton]", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }] }); }
1143
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmEntityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1144
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideAdmEntityComponent, isStandalone: true, selector: "cide-adm-entity", ngImport: i0, template: "<!-- \n DYNAMIC GRID SYSTEM FEATURES:\n \n Basic Grids: grid-1, grid-2, grid-3, grid-4, grid-5, grid-6\n \n Auto-fit Grids: grid-auto-fit-sm/md/lg/xl (dynamic columns based on content)\n Auto-fill Grids: grid-auto-fill-sm/md/lg (always fill available space)\n \n Custom Ratios: grid-ratio-1-2, grid-ratio-2-1, grid-ratio-1-3, grid-ratio-3-1, etc.\n Fractional: grid-quarter-three, grid-third-two, grid-half-half\n \n Gap Control: gap-xs, gap-sm, gap-md, gap-lg, gap-xl\n Specific Gaps: row-gap-xs/sm/md/lg, col-gap-xs/sm/md/lg\n \n Alignment: align-start/center/end/stretch, justify-start/center/end/stretch\n \n Responsive: xl-grid-*, lg-grid-*, md-grid-*, sm-grid-*, xs-grid-*\n \n Grid Items: span-1/2/3/4/5/6/full, row-span-*, start-*, end-*\n Item Alignment: self-start/center/end/stretch, justify-self-*\n \n Special: grid-dense (auto-fills gaps), grid-masonry (masonry layout)\n-->\n\n<div class=\"entity-form-container\">\n <form class=\"entity-form\" [formGroup]=\"entityForm\" [class.loading]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n \n <!-- Header Section -->\n <div class=\"form-header\">\n <h2 class=\"form-title\">Create New Entity</h2>\n <p class=\"form-subtitle\">Add a new educational institution to the system</p>\n </div>\n\n <!-- Success and Error Messages -->\n @if (success()) {\n <div class=\"alert alert-success\">\n <svg class=\"alert-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"></path>\n </svg>\n {{ success() }}\n </div>\n }\n @if (error()) {\n <div class=\"alert alert-error\">\n <svg class=\"alert-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"></path>\n </svg>\n {{ error() }}\n </div>\n }\n\n <!-- Tab Navigation -->\n <div class=\"form-tabs\">\n <cide-ele-tab \n [tabs]=\"entityTabs()\"\n [activeTabId]=\"activeTab()\"\n size=\"md\"\n variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\"\n [class.loading]=\"loading()\">\n @switch (activeTab()) {\n \n @case ('basic') {\n <!-- Basic Information Section -->\n <div class=\"form-section\">\n <div class=\"grid grid-auto-fit-md gap-md lg-grid-2 md-grid-1\">\n <div class=\"grid-item span-2 md-span-full\">\n <cide-ele-input \n id=\"syen_name\" \n type=\"text\"\n label=\"Institution Name\" \n formControlName=\"syen_name\"\n placeholder=\"Enter full institution name\">\n </cide-ele-input>\n </div>\n \n <cide-ele-input \n label=\"Institution Code\" \n formControlName=\"syen_entity_code\"\n id=\"syen_entity_code\"\n placeholder=\"Enter unique code (max 40 characters)\">\n </cide-ele-input>\n </div>\n\n <div class=\"grid grid-ratio-2-1-1 gap-md lg-grid-3 md-grid-2 sm-grid-1\">\n <cide-ele-select \n label=\"Entity Type\" \n [options]=\"entityTypes()\" \n formControlName=\"syen_entity_type_gmst\"\n placeholder=\"Select entity type\">\n </cide-ele-select>\n \n <cide-ele-input \n label=\"UDISE Number\" \n formControlName=\"syen_udise_no\"\n placeholder=\"Enter UDISE number\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"Affiliation Number\" \n formControlName=\"syen_affiliation_no\"\n placeholder=\"Enter affiliation number\">\n </cide-ele-input>\n </div>\n\n <div class=\"grid grid-1 gap-sm\">\n <div class=\"checkbox-field\">\n <label class=\"checkbox-label\">\n <input \n type=\"checkbox\" \n formControlName=\"syen_isactive\"\n class=\"checkbox-input\" />\n <span class=\"checkbox-text\">Active Status</span>\n <span class=\"checkbox-description\">Enable this entity for system operations</span>\n </label>\n </div>\n </div>\n </div>\n }\n\n @case ('corporate') {\n <!-- Corporate Address Section -->\n <div class=\"form-section\">\n <div class=\"grid grid-1 gap-md\">\n <div class=\"grid-item span-full\">\n <cide-ele-textarea \n label=\"Corporate Address\" \n formControlName=\"syen_corporate_address\"\n placeholder=\"Enter complete corporate address\"\n [rows]=\"3\">\n </cide-ele-textarea>\n </div>\n </div>\n\n <div class=\"grid grid-auto-fit-sm gap-lg xl-grid-4 lg-grid-3 md-grid-2 sm-grid-1 align-end\">\n <cide-ele-select \n label=\"Postal Code\"\n [options]=\"postalCodes()\" \n formControlName=\"syen_corporate_pin_sypin\"\n placeholder=\"Select postal code\"\n [searchable]=\"true\"\n [loading]=\"postalCodesLoading()\"\n (searchChange)=\"onPostalCodeSearch($event)\"\n (selectionChange)=\"onPostalCodeSelection($event)\">\n </cide-ele-select>\n \n <cide-ele-input \n label=\"City\" \n formControlName=\"syen_corporate_city_sypin\"\n placeholder=\"Enter city\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"State\" \n formControlName=\"syen_corporate_state_sypin\"\n placeholder=\"Enter state\">\n </cide-ele-input>\n \n <cide-ele-select \n label=\"Country\" \n [options]=\"countries()\" \n formControlName=\"syen_corporate_country_syctr\"\n placeholder=\"Select country\"\n [searchable]=\"true\"\n [loading]=\"countriesLoading()\"\n (searchChange)=\"onCountrySearch($event)\">\n </cide-ele-select>\n </div>\n </div>\n }\n\n @case ('contact') {\n <!-- Contact Information Section -->\n <div class=\"form-section\">\n <div class=\"grid grid-ratio-3-1 gap-lg md-grid-2 sm-grid-1 justify-stretch\">\n <div class=\"grid-item justify-self-stretch\">\n <cide-ele-select \n label=\"Primary Contact Person\"\n [options]=\"users()\" \n formControlName=\"syen_corporate_contact_person_user\"\n placeholder=\"Select contact person\"\n [searchable]=\"true\"\n [loading]=\"usersLoading()\"\n (searchChange)=\"onUserSearch($event)\">\n </cide-ele-select>\n </div>\n \n <div class=\"grid-item justify-self-stretch\">\n <cide-ele-select \n label=\"Currency\" \n [options]=\"currencies()\" \n formControlName=\"syen_currency_sycr\"\n placeholder=\"Select currency\">\n </cide-ele-select>\n </div>\n </div>\n\n <div class=\"grid grid-auto-fill-md gap-md col-gap-lg row-gap-sm xl-grid-3 lg-grid-2 md-grid-1 grid-dense\">\n <cide-ele-input \n label=\"Primary Phone\" \n formControlName=\"syen_corporate_phone\"\n type=\"tel\"\n placeholder=\"Enter phone number\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"Alternate Phone\" \n formControlName=\"syen_corporate_phone_alt\"\n type=\"tel\"\n placeholder=\"Enter alternate phone\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"Fax Number\" \n formControlName=\"syen_corporate_fax\"\n placeholder=\"Enter fax number\">\n </cide-ele-input>\n </div>\n\n <div class=\"grid grid-ratio-1-2-1 gap-xl lg-grid-3 md-grid-2 sm-grid-1 align-center\">\n <div class=\"grid-item self-stretch\">\n <cide-ele-input \n label=\"Primary Email\" \n formControlName=\"syen_corporate_email\"\n type=\"email\"\n placeholder=\"Enter primary email\">\n </cide-ele-input>\n </div>\n \n <div class=\"grid-item span-2 lg-span-1 self-stretch\">\n <cide-ele-input \n label=\"Website URL\" \n formControlName=\"syen_website\"\n type=\"url\"\n placeholder=\"Enter website URL\">\n </cide-ele-input>\n </div>\n \n <div class=\"grid-item self-stretch\">\n <cide-ele-input \n label=\"Alternate Email\" \n formControlName=\"syen_corporate_email_alt\"\n type=\"email\"\n placeholder=\"Enter alternate email\">\n </cide-ele-input>\n </div>\n </div>\n </div>\n }\n\n @case ('registered') {\n <!-- Registered Address Section -->\n <div class=\"form-section\">\n <div class=\"grid grid-1\">\n <cide-ele-textarea \n label=\"Registered Address\" \n formControlName=\"syen_registered_address\"\n placeholder=\"Enter complete registered address\"\n [rows]=\"3\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"grid grid-4\">\n <cide-ele-select \n label=\"Registered Postal Code\"\n [options]=\"postalCodes()\" \n formControlName=\"syen_registered_pin_sypin\"\n placeholder=\"Select postal code\"\n [searchable]=\"true\"\n [loading]=\"postalCodesLoading()\"\n (searchChange)=\"onPostalCodeSearch($event)\"\n (selectionChange)=\"onPostalCodeSelection($event)\">\n </cide-ele-select>\n \n <cide-ele-input \n label=\"Registered City\" \n formControlName=\"syen_registered_city_sypin\"\n placeholder=\"Enter city\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"Registered State\" \n formControlName=\"syen_registered_state_sypin\"\n placeholder=\"Enter state\">\n </cide-ele-input>\n \n <cide-ele-select \n label=\"Registered Country\" \n [options]=\"countries()\" \n formControlName=\"syen_registered_country_syctr\"\n placeholder=\"Select country\"\n [searchable]=\"true\"\n [loading]=\"countriesLoading()\"\n (searchChange)=\"onCountrySearch($event)\">\n </cide-ele-select>\n </div>\n\n <div class=\"grid grid-3\">\n <cide-ele-select \n label=\"Registered Contact Person\"\n [options]=\"users()\" \n formControlName=\"syen_registered_contact_person_user\"\n placeholder=\"Select contact person\"\n [searchable]=\"true\"\n [loading]=\"usersLoading()\"\n (searchChange)=\"onUserSearch($event)\">\n </cide-ele-select>\n \n <cide-ele-input \n label=\"Registered Phone\" \n formControlName=\"syen_registered_phone\"\n type=\"tel\"\n placeholder=\"Enter phone number\">\n </cide-ele-input>\n \n <cide-ele-input \n label=\"Registered Email\" \n formControlName=\"syen_registered_email\"\n type=\"email\"\n placeholder=\"Enter email\">\n </cide-ele-input>\n @if (hasError('syen_registered_email')) {\n <div class=\"error-message\">{{ getErrorMessage('syen_registered_email') }}</div>\n }\n </div>\n\n <div class=\"grid grid-1\">\n <cide-ele-input \n label=\"Registered Fax\" \n formControlName=\"syen_registered_fax\"\n placeholder=\"Enter fax number\">\n </cide-ele-input>\n </div>\n </div>\n }\n\n @case ('documents') {\n <!-- Documents Section -->\n <div class=\"form-section\">\n <!-- Photo ID Document -->\n <div class=\"grid grid-1 gap-md\">\n <cide-ele-select \n label=\"Photo ID Document\" \n [options]=\"photoIdDocuments()\" \n formControlName=\"syen_photo_id_cyfm\"\n placeholder=\"Select photo ID document\">\n </cide-ele-select>\n </div>\n\n <!-- Logo Upload -->\n <div class=\"grid grid-quarter-three gap-lg md-grid-1 align-center\">\n <div class=\"grid-item self-center justify-self-center\">\n <!-- Logo preview placeholder -->\n <div style=\"width: 120px; height: 120px; border: 2px dashed #cbd5e1; border-radius: 8px; display: flex; align-items: center; justify-content: center; color: #9ca3af; font-size: 0.875rem; text-align: center;\">\n Logo Preview\n </div>\n </div>\n <div class=\"grid-item self-stretch\">\n <cide-ele-file-input \n label=\"Upload Logo\" \n accept=\"image/*\" \n [multiple]=\"false\" \n (fileChange)=\"onFileChange($event)\"\n placeholder=\"Select institution logo or image\">\n </cide-ele-file-input>\n </div>\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button cideEleButton\n type=\"button\" \n variant=\"secondary\" \n (click)=\"onReset()\" \n leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n \n <button cideEleButton\n type=\"submit\" \n variant=\"primary\" \n [disabled]=\"loading() || entityForm.invalid\"\n [loading]=\"loading()\"\n leftIcon=\"check\">\n Create Entity\n </button>\n </div>\n </form>\n</div> ", styles: [".entity-form-container{background:transparent;padding:1rem;width:100%;box-sizing:border-box}.entity-form{max-width:1200px;margin:0 auto;background:transparent;border:none;box-shadow:none;width:100%}.entity-form.loading{opacity:.6;pointer-events:none}.form-header{background:transparent;color:#1f2937;padding:1.25rem 0;text-align:left}.form-header .form-title{font-size:1.5rem;font-weight:700;margin:0 0 .25rem;color:#1f2937}.form-header .form-subtitle{font-size:.95rem;opacity:.7;margin:0;font-weight:400;color:#6b7280}.form-section{padding:1.25rem 0;border-bottom:none;margin-bottom:1.5rem}.form-section:last-of-type{margin-bottom:0}.form-section .section-title{font-size:1.125rem;font-weight:600;color:#1f2937;margin:0 0 1rem;padding-bottom:.5rem;border-bottom:1px solid #e5e7eb;position:relative}.form-section .section-title:after{content:\"\";position:absolute;bottom:-1px;left:0;width:40px;height:1px;background:#667eea;border-radius:1px}.grid{display:grid;gap:1rem;margin-bottom:.75rem;transition:all .3s ease}.grid:last-child{margin-bottom:0}.grid.grid-1{grid-template-columns:1fr}.grid.grid-2{grid-template-columns:repeat(2,1fr)}.grid.grid-3{grid-template-columns:repeat(3,1fr)}.grid.grid-4{grid-template-columns:repeat(4,1fr)}.grid.grid-5{grid-template-columns:repeat(5,1fr)}.grid.grid-6{grid-template-columns:repeat(6,1fr)}.grid.grid-auto-fit-sm{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.grid.grid-auto-fit-md{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}.grid.grid-auto-fit-lg{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.grid.grid-auto-fit-xl{grid-template-columns:repeat(auto-fit,minmax(350px,1fr))}.grid.grid-auto-fill-sm{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.grid.grid-auto-fill-md{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.grid.grid-auto-fill-lg{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.grid.grid-ratio-1-2{grid-template-columns:1fr 2fr}.grid.grid-ratio-2-1{grid-template-columns:2fr 1fr}.grid.grid-ratio-1-3{grid-template-columns:1fr 3fr}.grid.grid-ratio-3-1{grid-template-columns:3fr 1fr}.grid.grid-ratio-1-2-1{grid-template-columns:1fr 2fr 1fr}.grid.grid-ratio-2-1-1{grid-template-columns:2fr 1fr 1fr}.grid.grid-quarter-three{grid-template-columns:1fr 3fr}.grid.grid-third-two{grid-template-columns:1fr 2fr}.grid.grid-half-half{grid-template-columns:1fr 1fr}.grid.gap-xs{gap:.25rem}.grid.gap-sm{gap:.5rem}.grid.gap-md{gap:1rem}.grid.gap-lg{gap:1.5rem}.grid.gap-xl{gap:2rem}.grid.row-gap-xs{row-gap:.25rem}.grid.row-gap-sm{row-gap:.5rem}.grid.row-gap-md{row-gap:1rem}.grid.row-gap-lg{row-gap:1.5rem}.grid.col-gap-xs{column-gap:.25rem}.grid.col-gap-sm{column-gap:.5rem}.grid.col-gap-md{column-gap:1rem}.grid.col-gap-lg{column-gap:1.5rem}.grid.align-start{align-items:start}.grid.align-center{align-items:center}.grid.align-end{align-items:end}.grid.align-stretch{align-items:stretch}.grid.justify-start{justify-items:start}.grid.justify-center{justify-items:center}.grid.justify-end{justify-items:end}.grid.justify-stretch{justify-items:stretch}.grid.grid-dense{grid-auto-flow:dense}.grid.grid-masonry{grid-auto-rows:min-content;align-items:start}@media (min-width: 1200px){.grid.xl-grid-1{grid-template-columns:1fr}.grid.xl-grid-2{grid-template-columns:repeat(2,1fr)}.grid.xl-grid-3{grid-template-columns:repeat(3,1fr)}.grid.xl-grid-4{grid-template-columns:repeat(4,1fr)}.grid.xl-grid-5{grid-template-columns:repeat(5,1fr)}.grid.xl-grid-6{grid-template-columns:repeat(6,1fr)}}@media (max-width: 1199px) and (min-width: 992px){.grid.lg-grid-1{grid-template-columns:1fr}.grid.lg-grid-2{grid-template-columns:repeat(2,1fr)}.grid.lg-grid-3{grid-template-columns:repeat(3,1fr)}.grid.lg-grid-4{grid-template-columns:repeat(4,1fr)}}@media (max-width: 991px) and (min-width: 768px){.grid.md-grid-1{grid-template-columns:1fr}.grid.md-grid-2{grid-template-columns:repeat(2,1fr)}.grid.md-grid-3{grid-template-columns:repeat(3,1fr)}}@media (max-width: 767px) and (min-width: 576px){.grid.sm-grid-1{grid-template-columns:1fr}.grid.sm-grid-2{grid-template-columns:repeat(2,1fr)}}@media (max-width: 575px){.grid.xs-grid-1{grid-template-columns:1fr}}@media (max-width: 1024px){.grid.grid-4:not([class*=lg-grid]):not([class*=md-grid]){grid-template-columns:repeat(2,1fr)}.grid.grid-5:not([class*=lg-grid]):not([class*=md-grid]),.grid.grid-6:not([class*=lg-grid]):not([class*=md-grid]){grid-template-columns:repeat(3,1fr)}}@media (max-width: 768px){.grid{gap:.75rem}.grid.grid-2:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-3:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-4:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-5:not([class*=sm-grid]):not([class*=xs-grid]),.grid.grid-6:not([class*=sm-grid]):not([class*=xs-grid]){grid-template-columns:1fr}.grid.gap-lg{gap:1rem}.grid.gap-xl{gap:1.25rem}}@media (max-width: 480px){.grid{gap:.5rem}.grid:not([class*=xs-grid]){grid-template-columns:1fr!important}.grid.gap-md{gap:.75rem}.grid.gap-lg,.grid.gap-xl{gap:1rem}}.grid-item.span-1{grid-column:span 1}.grid-item.span-2{grid-column:span 2}.grid-item.span-3{grid-column:span 3}.grid-item.span-4{grid-column:span 4}.grid-item.span-5{grid-column:span 5}.grid-item.span-6{grid-column:span 6}.grid-item.span-full{grid-column:1/-1}.grid-item.row-span-1{grid-row:span 1}.grid-item.row-span-2{grid-row:span 2}.grid-item.row-span-3{grid-row:span 3}.grid-item.row-span-4{grid-row:span 4}.grid-item.start-1{grid-column-start:1}.grid-item.start-2{grid-column-start:2}.grid-item.start-3{grid-column-start:3}.grid-item.start-4{grid-column-start:4}.grid-item.end-1{grid-column-end:1}.grid-item.end-2{grid-column-end:2}.grid-item.end-3{grid-column-end:3}.grid-item.end-4{grid-column-end:4}.grid-item.end-auto{grid-column-end:auto}.grid-item.self-start{align-self:start}.grid-item.self-center{align-self:center}.grid-item.self-end{align-self:end}.grid-item.self-stretch{align-self:stretch}.grid-item.justify-self-start{justify-self:start}.grid-item.justify-self-center{justify-self:center}.grid-item.justify-self-end{justify-self:end}.grid-item.justify-self-stretch{justify-self:stretch}@media (max-width: 768px){.grid-item.md-span-1{grid-column:span 1}.grid-item.md-span-2{grid-column:span 2}.grid-item.md-span-full{grid-column:1/-1}}@media (max-width: 480px){.grid-item.sm-span-full{grid-column:1/-1}}.checkbox-field{margin:.25rem 0}.checkbox-label{display:flex;flex-direction:column;gap:.25rem;cursor:pointer;padding:.75rem 0;background:transparent;border:none;border-radius:0;transition:all .2s ease}.checkbox-label:hover{background:#667eea05}.checkbox-label .checkbox-input{width:1rem;height:1rem;accent-color:#667eea;border-radius:3px;margin-bottom:.125rem}.checkbox-label .checkbox-text{font-weight:600;color:#374151;font-size:.875rem}.checkbox-label .checkbox-description{font-size:.75rem;color:#6b7280;margin-top:.125rem}.alert{display:flex;align-items:center;gap:.5rem;padding:.75rem 0;margin:1rem 0;border-radius:0;font-weight:500;font-size:.875rem;border-left:3px solid}.alert .alert-icon{width:1rem;height:1rem;flex-shrink:0}.alert.alert-success{background:#dcfce74d;border-left-color:#22c55e;color:#166534}.alert.alert-error{background:#fef2f24d;border-left-color:#ef4444;color:#dc2626}.error-message{font-size:.75rem;color:#dc2626;margin-top:.25rem;padding-left:.125rem;font-weight:500}.form-tabs{padding:0;margin:1rem 0;border-bottom:1px solid #e5e7eb}.tab-content{transition:opacity .2s ease}.tab-content.loading{opacity:.6;pointer-events:none}.form-actions{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 0;background:#fff;border-top:1px solid #e5e7eb;margin-top:2rem;position:sticky;bottom:0}@media (max-width: 640px){.form-actions{flex-direction:column-reverse}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;padding:.5rem 1rem;font-weight:600;font-size:.8125rem;border-radius:6px;border:none;cursor:pointer;transition:all .2s ease;min-width:120px;position:relative}.btn .btn-icon{width:.875rem;height:.875rem}.btn:disabled{opacity:.6;cursor:not-allowed}.btn.btn-primary{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 4px 6px -1px #667eea4d}.btn.btn-primary:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 8px 12px -2px #667eea66}.btn.btn-primary:active:not(:disabled){transform:translateY(0)}.btn.btn-secondary{background:#fff;color:#6b7280;border:2px solid #e5e7eb}.btn.btn-secondary:hover:not(:disabled){background:#f9fafb;border-color:#d1d5db;color:#374151}.entity-type-selector{display:flex;flex-direction:column;gap:.375rem}.input-label{font-size:.875rem;font-weight:500;color:#374151;margin-bottom:.25rem}.entity-type-button{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.75rem;background:#fff;border:1px solid #d1d5db;border-radius:6px;cursor:pointer;transition:all .15s ease;text-align:left;font-size:.875rem;color:#6b7280}.entity-type-button:hover{border-color:#9ca3af;background:#f9fafb}.entity-type-button:focus{outline:none;border-color:var(--cide-theme-primary-color);box-shadow:0 0 0 3px #3b82f61a}.entity-type-button.has-value{color:#374151}.entity-type-button.invalid{border-color:#dc2626;color:#dc2626}.entity-type-button.invalid:hover{border-color:#b91c1c}.entity-type-button.invalid:focus{border-color:#dc2626;box-shadow:0 0 0 3px #dc26261a}.entity-type-button .button-text{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entity-type-button .button-icon{width:1rem;height:1rem;margin-left:.5rem;flex-shrink:0}.animate-spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}cide-ele-input,cide-ele-select,cide-ele-textarea,cide-ele-file-input{transition:all .2s ease}@media (max-width: 768px){.entity-form-container{padding:.75rem}.form-header{padding:1rem 0}.form-header .form-title{font-size:1.25rem}.form-header .form-subtitle{font-size:.875rem}.form-tabs{margin:.5rem 0}.tab-content{padding:1rem 0 5rem}.form-section{padding:1rem 0}.form-section .section-title{font-size:1rem}.form-actions{padding:1rem 0;margin-top:1.5rem}}@media (max-width: 480px){.entity-form-container{padding:.25rem}.form-header{padding:.75rem 0}.form-tabs{margin:.25rem 0}.tab-content{padding:.75rem 0 4rem}.form-section{padding:.75rem 0}.form-actions{padding:.75rem 0;margin-top:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideTextareaComponent, selector: "cide-ele-textarea", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "minlength", "maxlength", "rows", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput"], outputs: ["ngModelChange"] }, { kind: "component", type: CideEleFileInputComponent, selector: "cide-ele-file-input", inputs: ["label", "accept", "multiple", "disabled", "helperText", "errorText"], outputs: ["fileChange"] }, { kind: "component", type: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton]", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }] });
1154
1145
  }
1155
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityComponent, decorators: [{
1146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmEntityComponent, decorators: [{
1156
1147
  type: Component,
1157
1148
  args: [{ selector: 'cide-adm-entity', standalone: true, imports: [
1158
1149
  ReactiveFormsModule,
@@ -1171,9 +1162,7 @@ var cideAdmEntity_component = /*#__PURE__*/Object.freeze({
1171
1162
  });
1172
1163
 
1173
1164
  class CideAdmEntityListService {
1174
- constructor() {
1175
- this.http = inject(HttpClient);
1176
- }
1165
+ http = inject(HttpClient);
1177
1166
  /**
1178
1167
  * Get list of entities using the proper API endpoint
1179
1168
  * @param body - MEntity payload for filtering/pagination
@@ -1208,10 +1197,10 @@ class CideAdmEntityListService {
1208
1197
  const payload = { ...filters };
1209
1198
  return this.getEntityList(payload);
1210
1199
  }
1211
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1212
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityListService, providedIn: 'root' }); }
1200
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmEntityListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1201
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmEntityListService, providedIn: 'root' });
1213
1202
  }
1214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityListService, decorators: [{
1203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmEntityListService, decorators: [{
1215
1204
  type: Injectable,
1216
1205
  args: [{
1217
1206
  providedIn: 'root'
@@ -1219,151 +1208,159 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1219
1208
  }] });
1220
1209
 
1221
1210
  class CideAdmEntityListComponent {
1222
- constructor() {
1223
- // Modern dependency injection using inject()
1224
- this.router = inject(Router); // Made public for template access
1225
- this.entityService = inject(CideAdmEntityListService);
1226
- // State management using Angular Signals
1227
- this.entities = signal([]);
1228
- this.loading = signal(false);
1229
- this.error = signal(null);
1230
- this.searchQuery = signal('');
1231
- this.currentPage = signal(1);
1232
- this.pageSize = signal(10);
1233
- this.totalItems = signal(0);
1234
- this.selectedEntityType = signal('');
1235
- // Pagination calculations
1236
- this.totalPages = signal(0);
1237
- this.hasNextPage = signal(false);
1238
- this.hasPreviousPage = signal(false);
1239
- this.jumpToPage = 1;
1240
- this.loadStartTime = 0;
1241
- // Filter options
1242
- this.entityTypeOptions = signal([
1243
- { value: '', label: 'All Entity Types' },
1244
- { value: 'school', label: 'School' },
1245
- { value: 'college', label: 'College' },
1246
- { value: 'university', label: 'University' },
1247
- { value: 'institute', label: 'Institute' }
1248
- ]);
1249
- // Grid configuration signal
1250
- this.gridConfig = signal({
1251
- id: 'entity-list-grid',
1252
- title: '',
1253
- subtitle: '',
1254
- columns: [
1255
- {
1256
- key: 'details',
1257
- header: 'Entity Details',
1258
- type: 'custom',
1259
- width: 'lg',
1260
- truncate: true,
1261
- align: 'left',
1262
- renderer: 'entityDetailsRenderer'
1263
- },
1264
- {
1265
- key: 'contact',
1266
- header: 'Contact Information',
1267
- type: 'custom',
1268
- width: 'lg',
1269
- truncate: true,
1270
- align: 'left',
1271
- renderer: 'contactInfoRenderer'
1272
- },
1273
- {
1274
- key: 'syen_isactive',
1275
- header: 'Status',
1276
- type: 'status',
1277
- width: 'md',
1278
- truncate: false,
1279
- align: 'center',
1280
- statusConfig: {
1281
- activeValue: true,
1282
- activeLabel: 'Active',
1283
- inactiveLabel: 'Inactive',
1284
- activeClass: 'tw-bg-green-100 tw-text-green-800',
1285
- inactiveClass: 'tw-bg-red-100 tw-text-red-800'
1286
- }
1287
- },
1288
- {
1289
- key: 'syen_entity_type_gmst',
1290
- header: 'Entity Type',
1291
- type: 'text',
1292
- width: 'md',
1293
- truncate: false,
1294
- align: 'center'
1295
- },
1296
- {
1297
- key: 'actions',
1298
- header: 'Actions',
1299
- type: 'actions',
1300
- width: 'md',
1301
- truncate: false,
1302
- align: 'right',
1303
- actions: [
1304
- {
1305
- key: 'edit',
1306
- label: 'Edit',
1307
- icon: 'pencil',
1308
- variant: 'outline',
1309
- tooltip: 'Edit entity',
1310
- onClick: 'onEditEntity'
1311
- },
1312
- {
1313
- key: 'delete',
1314
- label: 'Delete',
1315
- icon: 'trash',
1316
- variant: 'danger',
1317
- tooltip: 'Delete entity',
1318
- onClick: 'onDeleteEntity'
1319
- }
1320
- ]
1321
- }
1322
- ],
1323
- data: [],
1324
- trackBy: '_id',
1325
- pagination: {
1326
- enabled: true,
1327
- pageSize: 10,
1328
- pageSizeOptions: [10, 25, 50, 100],
1329
- showQuickJump: true,
1330
- showPageInfo: true,
1331
- showRefresh: true
1211
+ // Modern dependency injection using inject()
1212
+ router = inject(Router); // Made public for template access
1213
+ entityService = inject(CideAdmEntityListService);
1214
+ // ViewChild reference to the grid component
1215
+ gridComponent;
1216
+ // State management using Angular Signals
1217
+ entities = signal([], ...(ngDevMode ? [{ debugName: "entities" }] : []));
1218
+ loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
1219
+ error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
1220
+ searchQuery = signal('', ...(ngDevMode ? [{ debugName: "searchQuery" }] : []));
1221
+ currentPage = signal(1, ...(ngDevMode ? [{ debugName: "currentPage" }] : []));
1222
+ pageSize = signal(10, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
1223
+ totalItems = signal(0, ...(ngDevMode ? [{ debugName: "totalItems" }] : []));
1224
+ selectedEntityType = signal('', ...(ngDevMode ? [{ debugName: "selectedEntityType" }] : []));
1225
+ // Getter and setter for ngModel compatibility
1226
+ get selectedEntityTypeValue() {
1227
+ return this.selectedEntityType();
1228
+ }
1229
+ set selectedEntityTypeValue(value) {
1230
+ this.selectedEntityType.set(value);
1231
+ }
1232
+ // Pagination calculations
1233
+ totalPages = signal(0, ...(ngDevMode ? [{ debugName: "totalPages" }] : []));
1234
+ hasNextPage = signal(false, ...(ngDevMode ? [{ debugName: "hasNextPage" }] : []));
1235
+ hasPreviousPage = signal(false, ...(ngDevMode ? [{ debugName: "hasPreviousPage" }] : []));
1236
+ jumpToPage = 1;
1237
+ loadStartTime = 0;
1238
+ // Filter options
1239
+ entityTypeOptions = signal([
1240
+ { value: '', label: 'All Entity Types' },
1241
+ { value: 'school', label: 'School' },
1242
+ { value: 'college', label: 'College' },
1243
+ { value: 'university', label: 'University' },
1244
+ { value: 'institute', label: 'Institute' }
1245
+ ], ...(ngDevMode ? [{ debugName: "entityTypeOptions" }] : []));
1246
+ // Grid configuration signal
1247
+ gridConfig = signal({
1248
+ id: 'entity-list-grid',
1249
+ title: '',
1250
+ subtitle: '',
1251
+ columns: [
1252
+ {
1253
+ key: 'details',
1254
+ header: 'Entity Details',
1255
+ type: 'custom',
1256
+ width: 'lg',
1257
+ truncate: true,
1258
+ align: 'left',
1259
+ renderer: 'entityDetailsRenderer'
1332
1260
  },
1333
- search: {
1334
- enabled: true,
1335
- placeholder: 'Search entities...',
1336
- searchableColumns: ['syen_name', 'syen_entity_code', 'syen_corporate_email'],
1337
- debounceMs: 300
1261
+ {
1262
+ key: 'contact',
1263
+ header: 'Contact Information',
1264
+ type: 'custom',
1265
+ width: 'lg',
1266
+ truncate: true,
1267
+ align: 'left',
1268
+ renderer: 'contactInfoRenderer'
1338
1269
  },
1339
- loading: {
1340
- useDefer: true,
1341
- skeletonRows: 5,
1342
- showOverlay: false
1270
+ {
1271
+ key: 'syen_isactive',
1272
+ header: 'Status',
1273
+ type: 'status',
1274
+ width: 'md',
1275
+ truncate: false,
1276
+ align: 'center',
1277
+ statusConfig: {
1278
+ activeValue: true,
1279
+ activeLabel: 'Active',
1280
+ inactiveLabel: 'Inactive',
1281
+ activeClass: 'tw-bg-green-100 tw-text-green-800',
1282
+ inactiveClass: 'tw-bg-red-100 tw-text-red-800'
1283
+ }
1343
1284
  },
1344
- responsive: true,
1345
- striped: false,
1346
- bordered: true,
1347
- compact: false,
1348
- fullHeight: true,
1349
- onRowClick: 'onEntityRowClick',
1350
- onRefresh: 'onEntityRefresh',
1351
- tree: {
1352
- enabled: true,
1353
- primaryKey: '_id',
1354
- foreignKey: 'syen_parent_entity_id',
1355
- childrenKey: 'children',
1356
- levelKey: 'level',
1357
- expandedKey: 'isExpanded',
1358
- hasChildrenKey: 'hasChildren'
1285
+ {
1286
+ key: 'syen_entity_type_gmst',
1287
+ header: 'Entity Type',
1288
+ type: 'text',
1289
+ width: 'md',
1290
+ truncate: false,
1291
+ align: 'center'
1292
+ },
1293
+ {
1294
+ key: 'actions',
1295
+ header: 'Actions',
1296
+ type: 'actions',
1297
+ width: 'md',
1298
+ truncate: false,
1299
+ align: 'right',
1300
+ actions: [
1301
+ {
1302
+ key: 'edit',
1303
+ label: 'Edit',
1304
+ icon: 'pencil',
1305
+ variant: 'outline',
1306
+ tooltip: 'Edit entity',
1307
+ onClick: 'onEditEntity'
1308
+ },
1309
+ {
1310
+ key: 'delete',
1311
+ label: 'Delete',
1312
+ icon: 'trash',
1313
+ variant: 'danger',
1314
+ tooltip: 'Delete entity',
1315
+ onClick: 'onDeleteEntity'
1316
+ }
1317
+ ]
1359
1318
  }
1360
- });
1361
- // Custom renderers for complex columns
1362
- this.customRenderers = {
1363
- entityDetailsRenderer: (value, row) => {
1364
- const entityCode = row.syen_entity_code || 'N/A';
1365
- const entityName = row.syen_name || 'Unknown Entity';
1366
- return `
1319
+ ],
1320
+ data: [],
1321
+ trackBy: '_id',
1322
+ pagination: {
1323
+ enabled: true,
1324
+ pageSize: 10,
1325
+ pageSizeOptions: [10, 25, 50, 100],
1326
+ showQuickJump: true,
1327
+ showPageInfo: true,
1328
+ showRefresh: true
1329
+ },
1330
+ search: {
1331
+ enabled: true,
1332
+ placeholder: 'Search entities...',
1333
+ searchableColumns: ['syen_name', 'syen_entity_code', 'syen_corporate_email'],
1334
+ debounceMs: 300
1335
+ },
1336
+ loading: {
1337
+ useDefer: true,
1338
+ skeletonRows: 5,
1339
+ showOverlay: false
1340
+ },
1341
+ responsive: true,
1342
+ striped: false,
1343
+ bordered: true,
1344
+ compact: false,
1345
+ fullHeight: true,
1346
+ onRowClick: 'onEntityRowClick',
1347
+ onRefresh: 'onEntityRefresh',
1348
+ tree: {
1349
+ enabled: true,
1350
+ primaryKey: '_id',
1351
+ foreignKey: 'syen_parent_entity_id',
1352
+ childrenKey: 'children',
1353
+ levelKey: 'level',
1354
+ expandedKey: 'isExpanded',
1355
+ hasChildrenKey: 'hasChildren'
1356
+ }
1357
+ }, ...(ngDevMode ? [{ debugName: "gridConfig" }] : []));
1358
+ // Custom renderers for complex columns
1359
+ customRenderers = {
1360
+ entityDetailsRenderer: (value, row) => {
1361
+ const entityCode = row.syen_entity_code || 'N/A';
1362
+ const entityName = row.syen_name || 'Unknown Entity';
1363
+ return `
1367
1364
  <div class="tw-flex tw-items-center tw-space-x-3">
1368
1365
  <div class="tw-flex-shrink-0 tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-full tw-flex tw-items-center tw-justify-center">
1369
1366
  <span class="tw-text-blue-600 tw-font-semibold tw-text-sm">
@@ -1380,12 +1377,12 @@ class CideAdmEntityListComponent {
1380
1377
  </div>
1381
1378
  </div>
1382
1379
  `;
1383
- },
1384
- contactInfoRenderer: (value, row) => {
1385
- const contactPerson = row.syen_corporate_contact_person_user || 'N/A';
1386
- const email = row.syen_corporate_email || 'N/A';
1387
- const phone = row.syen_corporate_phone ? String(row.syen_corporate_phone) : 'N/A';
1388
- return `
1380
+ },
1381
+ contactInfoRenderer: (value, row) => {
1382
+ const contactPerson = row.syen_corporate_contact_person_user || 'N/A';
1383
+ const email = row.syen_corporate_email || 'N/A';
1384
+ const phone = row.syen_corporate_phone ? String(row.syen_corporate_phone) : 'N/A';
1385
+ return `
1389
1386
  <div class="tw-space-y-1">
1390
1387
  <p class="tw-text-sm tw-text-gray-900 tw-truncate tw-flex tw-items-center" title="${contactPerson}">
1391
1388
  <svg class="tw-flex-shrink-0 tw-w-4 tw-h-4 tw-text-gray-400 tw-mr-2" fill="currentColor" viewBox="0 0 20 20">
@@ -1408,31 +1405,23 @@ class CideAdmEntityListComponent {
1408
1405
  </p>
1409
1406
  </div>
1410
1407
  `;
1408
+ }
1409
+ };
1410
+ // Action handlers
1411
+ actionHandlers = {
1412
+ onEditEntity: (entity) => {
1413
+ const query = generateStringFromObject({
1414
+ syen_id: entity._id
1415
+ });
1416
+ this.router.navigate(['control-panel', 'entity-create', query]);
1417
+ },
1418
+ onDeleteEntity: (entity) => {
1419
+ const entityName = entity.syen_name || 'this entity';
1420
+ if (confirm(`Are you sure you want to delete ${entityName}?`)) {
1421
+ this.onDeleteEntityConfirmed(entity._id || '');
1411
1422
  }
1412
- };
1413
- // Action handlers
1414
- this.actionHandlers = {
1415
- onEditEntity: (entity) => {
1416
- const query = generateStringFromObject({
1417
- syen_id: entity._id
1418
- });
1419
- this.router.navigate(['control-panel', 'entity-create', query]);
1420
- },
1421
- onDeleteEntity: (entity) => {
1422
- const entityName = entity.syen_name || 'this entity';
1423
- if (confirm(`Are you sure you want to delete ${entityName}?`)) {
1424
- this.onDeleteEntityConfirmed(entity._id || '');
1425
- }
1426
- }
1427
- };
1428
- }
1429
- // Getter and setter for ngModel compatibility
1430
- get selectedEntityTypeValue() {
1431
- return this.selectedEntityType();
1432
- }
1433
- set selectedEntityTypeValue(value) {
1434
- this.selectedEntityType.set(value);
1435
- }
1423
+ }
1424
+ };
1436
1425
  ngOnInit() {
1437
1426
  console.log('🔧 ENTITY LIST: Component initializing');
1438
1427
  this.updatePaginationState();
@@ -1787,10 +1776,10 @@ class CideAdmEntityListComponent {
1787
1776
  // TODO: Implement actual export functionality
1788
1777
  alert(`Exporting all ${this.totalItems()} entities`);
1789
1778
  }
1790
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1791
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: CideAdmEntityListComponent, isStandalone: true, selector: "cide-adm-entity-list", viewQueries: [{ propertyName: "gridComponent", first: true, predicate: CideEleDataGridComponent, descendants: true }], ngImport: i0, template: "<!-- Entity List Container -->\n<div class=\"entity-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-overflow-hidden\">\n \n <!-- Header Section with Filters -->\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\n \n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600\">apartment</cide-ele-icon>\n <div>\n <h5 class=\"tw-text-md tw-font-semibold tw-text-gray-900\">Entity Management</h5>\n <p class=\"tw-text-sm tw-text-gray-600\">Manage and view all entities in the system</p>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <!-- Entity Type Filter -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <label for=\"entityTypeFilter\" class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Type:</label>\n <cide-ele-select\n id=\"entityTypeFilter\"\n [options]=\"entityTypeOptions()\"\n [(ngModel)]=\"selectedEntityTypeValue\"\n (ngModelChange)=\"loadEntities()\"\n class=\"tw-min-w-40\">\n </cide-ele-select>\n </div>\n\n <!-- Add Entity Button -->\n <button\n cideEleButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"router.navigate(['control-panel', 'entity-create'])\"\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\n Add Entity\n </button>\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex\">\n <cide-ele-icon name=\"exclamation-triangle\" class=\"tw-text-red-400\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Data Grid Component -->\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [customRenderers]=\"customRenderers\"\n [actionHandlers]=\"actionHandlers\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n\n</div>", styles: [".entity-list-container table tr{transition:background-color .15s ease}.entity-list-container table th{font-weight:600;letter-spacing:.025em}.entity-list-container table td{vertical-align:top}.entity-list-container .tw-text-red-600:hover{background-color:theme(\"colors.red.50\")}.entity-list-container .tw-animate-spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.entity-list-container .tw-overflow-x-auto{scrollbar-width:thin;scrollbar-color:theme(\"colors.gray.300\") theme(\"colors.gray.100\")}.entity-list-container .tw-overflow-x-auto::-webkit-scrollbar{height:8px}.entity-list-container .tw-overflow-x-auto::-webkit-scrollbar-track{background:theme(\"colors.gray.100\");border-radius:4px}.entity-list-container .tw-overflow-x-auto::-webkit-scrollbar-thumb{background:theme(\"colors.gray.300\");border-radius:4px}.entity-list-container .tw-overflow-x-auto::-webkit-scrollbar-thumb:hover{background:theme(\"colors.gray.400\")}@media (max-width: 768px){.entity-list-container .tw-px-6{padding-left:theme(\"spacing.4\");padding-right:theme(\"spacing.4\")}}\n", ":host{height:100%;display:flex;flex-direction:column}.entity-list-container{height:100%;display:flex;flex-direction:column;overflow:hidden}.tw-overflow-auto{flex:1;min-height:0}cide-ele-data-grid{flex:1;min-height:0;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton]", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "customRenderers", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }] }); }
1779
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmEntityListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1780
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideAdmEntityListComponent, isStandalone: true, selector: "cide-adm-entity-list", viewQueries: [{ propertyName: "gridComponent", first: true, predicate: CideEleDataGridComponent, descendants: true }], ngImport: i0, template: "<!-- Entity List Container -->\n<div class=\"entity-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-overflow-hidden\">\n \n <!-- Header Section with Filters -->\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\n \n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600\">apartment</cide-ele-icon>\n <div>\n <h5 class=\"tw-text-md tw-font-semibold tw-text-gray-900\">Entity Management</h5>\n <p class=\"tw-text-sm tw-text-gray-600\">Manage and view all entities in the system</p>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <!-- Entity Type Filter -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <label for=\"entityTypeFilter\" class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Type:</label>\n <cide-ele-select\n id=\"entityTypeFilter\"\n [options]=\"entityTypeOptions()\"\n [(ngModel)]=\"selectedEntityTypeValue\"\n (ngModelChange)=\"loadEntities()\"\n class=\"tw-min-w-40\">\n </cide-ele-select>\n </div>\n\n <!-- Add Entity Button -->\n <button\n cideEleButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"router.navigate(['control-panel', 'entity-create'])\"\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\n Add Entity\n </button>\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex\">\n <cide-ele-icon name=\"exclamation-triangle\" class=\"tw-text-red-400\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Data Grid Component -->\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [customRenderers]=\"customRenderers\"\n [actionHandlers]=\"actionHandlers\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n\n</div>", styles: [".entity-list-container table tr{transition:background-color .15s ease}.entity-list-container table th{font-weight:600;letter-spacing:.025em}.entity-list-container table td{vertical-align:top}.entity-list-container .tw-text-red-600:hover{background-color:theme(\"colors.red.50\")}.entity-list-container .tw-animate-spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.entity-list-container .tw-overflow-x-auto{scrollbar-width:thin;scrollbar-color:theme(\"colors.gray.300\") theme(\"colors.gray.100\")}.entity-list-container .tw-overflow-x-auto::-webkit-scrollbar{height:8px}.entity-list-container .tw-overflow-x-auto::-webkit-scrollbar-track{background:theme(\"colors.gray.100\");border-radius:4px}.entity-list-container .tw-overflow-x-auto::-webkit-scrollbar-thumb{background:theme(\"colors.gray.300\");border-radius:4px}.entity-list-container .tw-overflow-x-auto::-webkit-scrollbar-thumb:hover{background:theme(\"colors.gray.400\")}@media (max-width: 768px){.entity-list-container .tw-px-6{padding-left:theme(\"spacing.4\");padding-right:theme(\"spacing.4\")}}\n", ":host{height:100%;display:flex;flex-direction:column}.entity-list-container{height:100%;display:flex;flex-direction:column;overflow:hidden}.tw-overflow-auto{flex:1;min-height:0}cide-ele-data-grid{flex:1;min-height:0;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton]", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "customRenderers", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }] });
1792
1781
  }
1793
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityListComponent, decorators: [{
1782
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAdmEntityListComponent, decorators: [{
1794
1783
  type: Component,
1795
1784
  args: [{ selector: 'cide-adm-entity-list', standalone: true, imports: [
1796
1785
  CommonModule,
@@ -1815,12 +1804,12 @@ var cideAdmEntityList_component = /*#__PURE__*/Object.freeze({
1815
1804
  // import { authGuard } from '../../../../src/app/guards/auth.guard';
1816
1805
  const adminRoutes = [{
1817
1806
  path: "admin-home",
1818
- loadComponent: () => import('./cloud-ide-admin-cide-adm-home-wrapper.component-Cu0sr3ST.mjs').then(c => c.CideAdmHomeWrapperComponent),
1807
+ loadComponent: () => import('./cloud-ide-admin-cide-adm-home-wrapper.component-DpAhYlMT.mjs').then(c => c.CideAdmHomeWrapperComponent),
1819
1808
  // canActivate: [authGuard],
1820
1809
  },
1821
1810
  {
1822
1811
  path: "home-admin",
1823
- loadComponent: () => import('./cloud-ide-admin-cide-adm-home-wrapper.component-Cu0sr3ST.mjs').then(c => c.CideAdmHomeWrapperComponent),
1812
+ loadComponent: () => import('./cloud-ide-admin-cide-adm-home-wrapper.component-DpAhYlMT.mjs').then(c => c.CideAdmHomeWrapperComponent),
1824
1813
  },
1825
1814
  {
1826
1815
  path: "entity-list",