cloud-ide-admin 1.0.0 → 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 -277
  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>
@@ -48,15 +45,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
48
45
  ` }]
49
46
  }] });
50
47
 
51
- var cideAdmAdmin_component = /*#__PURE__*/Object.freeze({
52
- __proto__: null,
53
- CideAdmAdminComponent: CideAdmAdminComponent
54
- });
55
-
56
48
  class CideAdmEntityService {
57
- constructor() {
58
- this.http = inject(HttpClient);
59
- }
49
+ http = inject(HttpClient);
60
50
  getEntityTypes() {
61
51
  return this.http.get('/api/core/entity-types');
62
52
  }
@@ -118,10 +108,10 @@ class CideAdmEntityService {
118
108
  console.log('🏢 ENTITY SERVICE: Making DELETE request to:', url);
119
109
  return this.http.delete(url);
120
110
  }
121
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
122
- 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' });
123
113
  }
124
- 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: [{
125
115
  type: Injectable,
126
116
  args: [{
127
117
  providedIn: 'root'
@@ -129,9 +119,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
129
119
  }] });
130
120
 
131
121
  class GeneralMasterSelectService {
132
- constructor() {
133
- this.http = inject(HttpClient);
134
- }
122
+ http = inject(HttpClient);
135
123
  /**
136
124
  * Get general master data from API
137
125
  * @param body - MGeneralMaster payload with sygmt_code
@@ -158,10 +146,10 @@ class GeneralMasterSelectService {
158
146
  };
159
147
  return this.getGeneralMasterData(payload);
160
148
  }
161
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GeneralMasterSelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
162
- 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' });
163
151
  }
164
- 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: [{
165
153
  type: Injectable,
166
154
  args: [{
167
155
  providedIn: 'root'
@@ -169,9 +157,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
169
157
  }] });
170
158
 
171
159
  class PinCodeSelectService {
172
- constructor() {
173
- this.http = inject(HttpClient);
174
- }
160
+ http = inject(HttpClient);
175
161
  /**
176
162
  * Get pin code data from API
177
163
  * @param body - MPinCodeSelect payload with sypin_pincode
@@ -214,10 +200,10 @@ class PinCodeSelectService {
214
200
  searchPinCodes(payload) {
215
201
  return this.getPinCodeData(payload);
216
202
  }
217
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PinCodeSelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
218
- 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' });
219
205
  }
220
- 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: [{
221
207
  type: Injectable,
222
208
  args: [{
223
209
  providedIn: 'root'
@@ -225,9 +211,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
225
211
  }] });
226
212
 
227
213
  class UserSelectService {
228
- constructor() {
229
- this.http = inject(HttpClient);
230
- }
214
+ http = inject(HttpClient);
231
215
  /**
232
216
  * Get user data from API
233
217
  * @param body - MUserSelect payload
@@ -268,10 +252,10 @@ class UserSelectService {
268
252
  const payload = { ...filters };
269
253
  return this.getUserData(payload);
270
254
  }
271
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UserSelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
272
- 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' });
273
257
  }
274
- 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: [{
275
259
  type: Injectable,
276
260
  args: [{
277
261
  providedIn: 'root'
@@ -279,9 +263,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
279
263
  }] });
280
264
 
281
265
  class CurrencySelectService {
282
- constructor() {
283
- this.http = inject(HttpClient);
284
- }
266
+ http = inject(HttpClient);
285
267
  /**
286
268
  * Get currency data from API
287
269
  * @returns Observable of currencyListControllerResponse
@@ -312,10 +294,10 @@ class CurrencySelectService {
312
294
  console.log('🔍 CURRENCY SERVICE: Filters:', filters);
313
295
  return this.http.post(url, filters);
314
296
  }
315
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CurrencySelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
316
- 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' });
317
299
  }
318
- 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: [{
319
301
  type: Injectable,
320
302
  args: [{
321
303
  providedIn: 'root'
@@ -323,9 +305,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
323
305
  }] });
324
306
 
325
307
  class CountrySelectService {
326
- constructor() {
327
- this.http = inject(HttpClient);
328
- }
308
+ http = inject(HttpClient);
329
309
  /**
330
310
  * Get country data from API
331
311
  * @returns Observable of country response
@@ -341,10 +321,10 @@ class CountrySelectService {
341
321
  console.log('🔍 COUNTRY SERVICE: Making API call to:', url);
342
322
  return this.http.get(url);
343
323
  }
344
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CountrySelectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
345
- 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' });
346
326
  }
347
- 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: [{
348
328
  type: Injectable,
349
329
  args: [{
350
330
  providedIn: 'root'
@@ -352,44 +332,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
352
332
  }] });
353
333
 
354
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;
355
378
  constructor() {
356
- this.entityTypes = signal([]);
357
- this.currencies = signal([]);
358
- this.users = signal([]);
359
- this.postalCodes = signal([]);
360
- this.photoIdDocuments = signal([]);
361
- this.countries = signal([]);
362
- // Store the full pin code data for auto-population
363
- this.pinCodeDataMap = new Map();
364
- this.loading = signal(false);
365
- this.error = signal(null);
366
- this.success = signal(null);
367
- // Loading states for individual dropdowns
368
- this.postalCodesLoading = signal(false);
369
- this.usersLoading = signal(false);
370
- this.countriesLoading = signal(false);
371
- // Entity mode and ID
372
- this.isEditMode = signal(false);
373
- this.entityId = signal(null);
374
- // Tab configuration
375
- this.activeTab = signal('basic');
376
- this.entityTabs = signal([
377
- { id: 'basic', label: 'Basic Information', icon: 'ℹ️' },
378
- { id: 'corporate', label: 'Corporate Address', icon: '🏢' },
379
- { id: 'contact', label: 'Contact Information', icon: '📧' },
380
- { id: 'registered', label: 'Registered Address', icon: '🏠' },
381
- { id: 'documents', label: 'Documents & Media', icon: '📄' }
382
- ]);
383
- // Modern dependency injection using inject()
384
- this.entityService = inject(CideAdmEntityService);
385
- this.generalMasterService = inject(GeneralMasterSelectService);
386
- this.pinCodeService = inject(PinCodeSelectService);
387
- this.userService = inject(UserSelectService);
388
- this.currencyService = inject(CurrencySelectService);
389
- this.countryService = inject(CountrySelectService);
390
- this.fb = inject(FormBuilder);
391
- this.route = inject(ActivatedRoute);
392
- this.destroy$ = new Subject();
393
379
  this.entityForm = this.fb.group({
394
380
  // Basic Information
395
381
  syen_name: ['', [Validators.required]],
@@ -1154,10 +1140,10 @@ class CideAdmEntityComponent {
1154
1140
  this.error.set(null);
1155
1141
  console.log('🔄 Form reset completed');
1156
1142
  }
1157
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1158
- 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"] }] });
1159
1145
  }
1160
- 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: [{
1161
1147
  type: Component,
1162
1148
  args: [{ selector: 'cide-adm-entity', standalone: true, imports: [
1163
1149
  ReactiveFormsModule,
@@ -1176,9 +1162,7 @@ var cideAdmEntity_component = /*#__PURE__*/Object.freeze({
1176
1162
  });
1177
1163
 
1178
1164
  class CideAdmEntityListService {
1179
- constructor() {
1180
- this.http = inject(HttpClient);
1181
- }
1165
+ http = inject(HttpClient);
1182
1166
  /**
1183
1167
  * Get list of entities using the proper API endpoint
1184
1168
  * @param body - MEntity payload for filtering/pagination
@@ -1213,10 +1197,10 @@ class CideAdmEntityListService {
1213
1197
  const payload = { ...filters };
1214
1198
  return this.getEntityList(payload);
1215
1199
  }
1216
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1217
- 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' });
1218
1202
  }
1219
- 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: [{
1220
1204
  type: Injectable,
1221
1205
  args: [{
1222
1206
  providedIn: 'root'
@@ -1224,151 +1208,159 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1224
1208
  }] });
1225
1209
 
1226
1210
  class CideAdmEntityListComponent {
1227
- constructor() {
1228
- // Modern dependency injection using inject()
1229
- this.router = inject(Router); // Made public for template access
1230
- this.entityService = inject(CideAdmEntityListService);
1231
- // State management using Angular Signals
1232
- this.entities = signal([]);
1233
- this.loading = signal(false);
1234
- this.error = signal(null);
1235
- this.searchQuery = signal('');
1236
- this.currentPage = signal(1);
1237
- this.pageSize = signal(10);
1238
- this.totalItems = signal(0);
1239
- this.selectedEntityType = signal('');
1240
- // Pagination calculations
1241
- this.totalPages = signal(0);
1242
- this.hasNextPage = signal(false);
1243
- this.hasPreviousPage = signal(false);
1244
- this.jumpToPage = 1;
1245
- this.loadStartTime = 0;
1246
- // Filter options
1247
- this.entityTypeOptions = signal([
1248
- { value: '', label: 'All Entity Types' },
1249
- { value: 'school', label: 'School' },
1250
- { value: 'college', label: 'College' },
1251
- { value: 'university', label: 'University' },
1252
- { value: 'institute', label: 'Institute' }
1253
- ]);
1254
- // Grid configuration signal
1255
- this.gridConfig = signal({
1256
- id: 'entity-list-grid',
1257
- title: '',
1258
- subtitle: '',
1259
- columns: [
1260
- {
1261
- key: 'details',
1262
- header: 'Entity Details',
1263
- type: 'custom',
1264
- width: 'lg',
1265
- truncate: true,
1266
- align: 'left',
1267
- renderer: 'entityDetailsRenderer'
1268
- },
1269
- {
1270
- key: 'contact',
1271
- header: 'Contact Information',
1272
- type: 'custom',
1273
- width: 'lg',
1274
- truncate: true,
1275
- align: 'left',
1276
- renderer: 'contactInfoRenderer'
1277
- },
1278
- {
1279
- key: 'syen_isactive',
1280
- header: 'Status',
1281
- type: 'status',
1282
- width: 'md',
1283
- truncate: false,
1284
- align: 'center',
1285
- statusConfig: {
1286
- activeValue: true,
1287
- activeLabel: 'Active',
1288
- inactiveLabel: 'Inactive',
1289
- activeClass: 'tw-bg-green-100 tw-text-green-800',
1290
- inactiveClass: 'tw-bg-red-100 tw-text-red-800'
1291
- }
1292
- },
1293
- {
1294
- key: 'syen_entity_type_gmst',
1295
- header: 'Entity Type',
1296
- type: 'text',
1297
- width: 'md',
1298
- truncate: false,
1299
- align: 'center'
1300
- },
1301
- {
1302
- key: 'actions',
1303
- header: 'Actions',
1304
- type: 'actions',
1305
- width: 'md',
1306
- truncate: false,
1307
- align: 'right',
1308
- actions: [
1309
- {
1310
- key: 'edit',
1311
- label: 'Edit',
1312
- icon: 'pencil',
1313
- variant: 'outline',
1314
- tooltip: 'Edit entity',
1315
- onClick: 'onEditEntity'
1316
- },
1317
- {
1318
- key: 'delete',
1319
- label: 'Delete',
1320
- icon: 'trash',
1321
- variant: 'danger',
1322
- tooltip: 'Delete entity',
1323
- onClick: 'onDeleteEntity'
1324
- }
1325
- ]
1326
- }
1327
- ],
1328
- data: [],
1329
- trackBy: '_id',
1330
- pagination: {
1331
- enabled: true,
1332
- pageSize: 10,
1333
- pageSizeOptions: [10, 25, 50, 100],
1334
- showQuickJump: true,
1335
- showPageInfo: true,
1336
- 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'
1260
+ },
1261
+ {
1262
+ key: 'contact',
1263
+ header: 'Contact Information',
1264
+ type: 'custom',
1265
+ width: 'lg',
1266
+ truncate: true,
1267
+ align: 'left',
1268
+ renderer: 'contactInfoRenderer'
1337
1269
  },
1338
- search: {
1339
- enabled: true,
1340
- placeholder: 'Search entities...',
1341
- searchableColumns: ['syen_name', 'syen_entity_code', 'syen_corporate_email'],
1342
- debounceMs: 300
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
- loading: {
1345
- useDefer: true,
1346
- skeletonRows: 5,
1347
- showOverlay: false
1285
+ {
1286
+ key: 'syen_entity_type_gmst',
1287
+ header: 'Entity Type',
1288
+ type: 'text',
1289
+ width: 'md',
1290
+ truncate: false,
1291
+ align: 'center'
1348
1292
  },
1349
- responsive: true,
1350
- striped: false,
1351
- bordered: true,
1352
- compact: false,
1353
- fullHeight: true,
1354
- onRowClick: 'onEntityRowClick',
1355
- onRefresh: 'onEntityRefresh',
1356
- tree: {
1357
- enabled: true,
1358
- primaryKey: '_id',
1359
- foreignKey: 'syen_parent_entity_id',
1360
- childrenKey: 'children',
1361
- levelKey: 'level',
1362
- expandedKey: 'isExpanded',
1363
- hasChildrenKey: 'hasChildren'
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
+ ]
1364
1318
  }
1365
- });
1366
- // Custom renderers for complex columns
1367
- this.customRenderers = {
1368
- entityDetailsRenderer: (value, row) => {
1369
- const entityCode = row.syen_entity_code || 'N/A';
1370
- const entityName = row.syen_name || 'Unknown Entity';
1371
- 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 `
1372
1364
  <div class="tw-flex tw-items-center tw-space-x-3">
1373
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">
1374
1366
  <span class="tw-text-blue-600 tw-font-semibold tw-text-sm">
@@ -1385,12 +1377,12 @@ class CideAdmEntityListComponent {
1385
1377
  </div>
1386
1378
  </div>
1387
1379
  `;
1388
- },
1389
- contactInfoRenderer: (value, row) => {
1390
- const contactPerson = row.syen_corporate_contact_person_user || 'N/A';
1391
- const email = row.syen_corporate_email || 'N/A';
1392
- const phone = row.syen_corporate_phone ? String(row.syen_corporate_phone) : 'N/A';
1393
- 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 `
1394
1386
  <div class="tw-space-y-1">
1395
1387
  <p class="tw-text-sm tw-text-gray-900 tw-truncate tw-flex tw-items-center" title="${contactPerson}">
1396
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">
@@ -1413,31 +1405,23 @@ class CideAdmEntityListComponent {
1413
1405
  </p>
1414
1406
  </div>
1415
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 || '');
1416
1422
  }
1417
- };
1418
- // Action handlers
1419
- this.actionHandlers = {
1420
- onEditEntity: (entity) => {
1421
- const query = generateStringFromObject({
1422
- syen_id: entity._id
1423
- });
1424
- this.router.navigate(['control-panel', 'entity-create', query]);
1425
- },
1426
- onDeleteEntity: (entity) => {
1427
- const entityName = entity.syen_name || 'this entity';
1428
- if (confirm(`Are you sure you want to delete ${entityName}?`)) {
1429
- this.onDeleteEntityConfirmed(entity._id || '');
1430
- }
1431
- }
1432
- };
1433
- }
1434
- // Getter and setter for ngModel compatibility
1435
- get selectedEntityTypeValue() {
1436
- return this.selectedEntityType();
1437
- }
1438
- set selectedEntityTypeValue(value) {
1439
- this.selectedEntityType.set(value);
1440
- }
1423
+ }
1424
+ };
1441
1425
  ngOnInit() {
1442
1426
  console.log('🔧 ENTITY LIST: Component initializing');
1443
1427
  this.updatePaginationState();
@@ -1792,10 +1776,10 @@ class CideAdmEntityListComponent {
1792
1776
  // TODO: Implement actual export functionality
1793
1777
  alert(`Exporting all ${this.totalItems()} entities`);
1794
1778
  }
1795
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAdmEntityListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1796
- 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"] }] });
1797
1781
  }
1798
- 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: [{
1799
1783
  type: Component,
1800
1784
  args: [{ selector: 'cide-adm-entity-list', standalone: true, imports: [
1801
1785
  CommonModule,
@@ -1820,12 +1804,12 @@ var cideAdmEntityList_component = /*#__PURE__*/Object.freeze({
1820
1804
  // import { authGuard } from '../../../../src/app/guards/auth.guard';
1821
1805
  const adminRoutes = [{
1822
1806
  path: "admin-home",
1823
- loadComponent: () => Promise.resolve().then(function () { return cideAdmAdmin_component; }).then(c => c.CideAdmAdminComponent),
1807
+ loadComponent: () => import('./cloud-ide-admin-cide-adm-home-wrapper.component-DpAhYlMT.mjs').then(c => c.CideAdmHomeWrapperComponent),
1824
1808
  // canActivate: [authGuard],
1825
1809
  },
1826
1810
  {
1827
1811
  path: "home-admin",
1828
- 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),
1829
1813
  },
1830
1814
  {
1831
1815
  path: "entity-list",