cloud-ide-core 2.0.52 → 2.0.53

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.
@@ -1,3 +1,4 @@
1
+ import { authGuard } from 'cloud-ide-auth';
1
2
  import * as i0 from '@angular/core';
2
3
  import { Injectable, Component, inject, DestroyRef, viewChild, signal, computed, ViewChild, ChangeDetectorRef } from '@angular/core';
3
4
  import * as i1$1 from '@angular/common';
@@ -15,275 +16,275 @@ import { NotificationService, CideEleDataGridComponent, CideEleButtonComponent,
15
16
  import { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
16
17
 
17
18
  const coreRoutes = [
18
- // {
19
- // path: 'menu-management',
20
- // loadComponent: () => import('./core/menu-management/components/menu-list/menu-list.component').then(c => c.MenuListComponent),
21
- // title: 'Menu Management',
22
- // canActivate: [authGuard],
23
- // data: {
24
- // reuseTab: true,
25
- // sypg_page_code: "core_menu_list"
26
- // }
27
- // },
28
- // {
29
- // path: 'department',
30
- // loadComponent: () => import('./core/department-management/components/department-list/department-list.component').then(c => c.CideCoreDepartmentListComponent),
31
- // title: 'Department Management',
32
- // canActivate: [authGuard],
33
- // data: {
34
- // reuseTab: true,
35
- // sypg_page_code: "core_department_list"
36
- // }
37
- // },
38
- // {
39
- // path: 'designation',
40
- // loadComponent: () => import('./core/designation-management/components/designation-list/designation-list.component').then(c => c.CideCoreDesignationListComponent),
41
- // title: 'Designation Management',
42
- // canActivate: [authGuard],
43
- // data: {
44
- // reuseTab: true,
45
- // sypg_page_code: "core_designation_list"
46
- // }
47
- // },
48
- // {
49
- // path: 'grade-level',
50
- // loadComponent: () => import('./core/grade-level-management/components/grade-level-list/grade-level-list.component').then(c => c.CideCoreGradeLevelListComponent),
51
- // title: 'Grade Level Management',
52
- // canActivate: [authGuard],
53
- // data: {
54
- // reuseTab: true,
55
- // sypg_page_code: "core_grade_level_list"
56
- // }
57
- // },
58
- // {
59
- // path: 'page',
60
- // loadComponent: () => import('./core/page-management/components/page-list/page-list.component').then(c => c.CideCorePageListComponent),
61
- // title: 'Page Management',
62
- // canActivate: [authGuard],
63
- // data: {
64
- // reuseTab: true,
65
- // sypg_page_code: "core_page_management"
66
- // }
67
- // },
68
- // {
69
- // path: 'page-form',
70
- // loadComponent: () => import('./core/page-management/components/page-form/page-form.component').then(c => c.CideCorePageFormComponent),
71
- // title: 'Page Form',
72
- // canActivate: [authGuard],
73
- // data: {
74
- // reuseTab: true,
75
- // sypg_page_code: "core_page_management"
76
- // }
77
- // },
78
- // {
79
- // path: 'page-form/:query',
80
- // loadComponent: () => import('./core/page-management/components/page-form/page-form.component').then(c => c.CideCorePageFormComponent),
81
- // title: 'Page Form',
82
- // canActivate: [authGuard],
83
- // data: {
84
- // reuseTab: true,
85
- // sypg_page_code: "core_page_management"
86
- // }
87
- // },
88
- // {
89
- // path: 'page-theme',
90
- // loadComponent: () => import('./core/page-management/components/page-theme/page-theme.component').then(c => c.CideCorePageThemeComponent),
91
- // title: 'Page Theme Management',
92
- // canActivate: [authGuard],
93
- // data: {
94
- // reuseTab: true,
95
- // sypg_page_code: "core_page_theme"
96
- // }
97
- // },
98
- // {
99
- // path: 'page-theme/:query',
100
- // loadComponent: () => import('./core/page-management/components/page-theme/page-theme.component').then(c => c.CideCorePageThemeComponent),
101
- // title: 'Page Theme Management',
102
- // canActivate: [authGuard],
103
- // data: {
104
- // reuseTab: true,
105
- // sypg_page_code: "core_page_theme"
106
- // }
107
- // },
108
- // {
109
- // path: 'page-controls',
110
- // loadComponent: () => import('./core/page-management/components/page-controls/page-controls.component').then(c => c.CideCorePageControlsComponent),
111
- // title: 'Page Controls Management',
112
- // canActivate: [authGuard],
113
- // data: {
114
- // reuseTab: true,
115
- // sypg_page_code: "core_page_controls"
116
- // }
117
- // },
118
- // {
119
- // path: 'page-controls/:query',
120
- // loadComponent: () => import('./core/page-management/components/page-controls/page-controls.component').then(c => c.CideCorePageControlsComponent),
121
- // title: 'Page Controls Management',
122
- // canActivate: [authGuard],
123
- // data: {
124
- // reuseTab: true,
125
- // sypg_page_code: "core_page_controls"
126
- // }
127
- // },
128
- // {
129
- // path: 'general_master_entry',
130
- // loadComponent: () => import('./core/general-master-management/components/general-master/general-master.component').then(c => c.CideCoreGeneralMasterComponent),
131
- // title: 'General Master Entry',
132
- // canActivate: [authGuard],
133
- // data: {
134
- // reuseTab: true,
135
- // sypg_page_code: "core_general_master"
136
- // }
137
- // },
138
- // {
139
- // path: 'general_master_entry/:query',
140
- // loadComponent: () => import('./core/general-master-management/components/general-master/general-master.component').then(c => c.CideCoreGeneralMasterComponent),
141
- // title: 'General Master Entry',
142
- // canActivate: [authGuard],
143
- // data: {
144
- // reuseTab: true,
145
- // sypg_page_code: "core_general_master"
146
- // }
147
- // },
148
- // {
149
- // path: 'general_type_entry',
150
- // loadComponent: () => import('./core/general-master-management/components/general-master-type/general-master-type.component').then(c => c.CideCoreGeneralMasterTypeComponent),
151
- // title: 'General Type Entry',
152
- // canActivate: [authGuard],
153
- // data: {
154
- // reuseTab: true,
155
- // sypg_page_code: "core_general_master_type"
156
- // }
157
- // },
158
- // {
159
- // path: 'general_type_entry/:query',
160
- // loadComponent: () => import('./core/general-master-management/components/general-master-type/general-master-type.component').then(c => c.CideCoreGeneralMasterTypeComponent),
161
- // title: 'General Type Entry',
162
- // canActivate: [authGuard],
163
- // data: {
164
- // reuseTab: true,
165
- // sypg_page_code: "core_general_master_type"
166
- // }
167
- // },
168
- // // User Management Routes
169
- // {
170
- // path: 'user-master',
171
- // loadComponent: () => import('./core/user-management/components/user-list/user-list.component').then(c => c.CideCoreUserListComponent),
172
- // title: 'User Management',
173
- // canActivate: [authGuard],
174
- // data: {
175
- // reuseTab: true,
176
- // sypg_page_code: "auth_user_mst"
177
- // }
178
- // },
179
- // {
180
- // path: 'user-master/create',
181
- // loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),
182
- // title: 'Create User',
183
- // canActivate: [authGuard],
184
- // data: {
185
- // reuseTab: true,
186
- // sypg_page_code: "core_user_management_create"
187
- // }
188
- // },
189
- // {
190
- // path: 'user-master/edit/:query',
191
- // loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),
192
- // title: 'Edit User',
193
- // canActivate: [authGuard],
194
- // data: {
195
- // reuseTab: true,
196
- // sypg_page_code: "core_user_management_create"
197
- // }
198
- // },
199
- // {
200
- // path: 'user-master/view/:query',
201
- // loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),
202
- // title: 'View User',
203
- // canActivate: [authGuard],
204
- // data: {
205
- // reuseTab: true,
206
- // sypg_page_code: "core_user_management_create"
207
- // }
208
- // },
209
- // {
210
- // path: "entity-list",
211
- // loadComponent: () => import('./core/entity-management/components/entity-list/entity-list.component').then(c => c.CideCoreEntityListComponent),
212
- // canActivate: [authGuard],
213
- // data: {
214
- // reuseTab: true,
215
- // sypg_page_code: "admin_entity_list"
216
- // }
217
- // },
218
- // {
219
- // path: "entity-create",
220
- // loadComponent: () => import('./core/entity-management/components/entity-create/entity-create.component').then(c => c.CideCoreEntityCreateComponent),
221
- // canActivate: [authGuard],
222
- // data: {
223
- // reuseTab: true,
224
- // sypg_page_code: "core_entity_form"
225
- // }
226
- // },
227
- // {
228
- // path: "entity-create/:query",
229
- // loadComponent: () => import('./core/entity-management/components/entity-create/entity-create.component').then(c => c.CideCoreEntityCreateComponent),
230
- // canActivate: [authGuard],
231
- // data: {
232
- // reuseTab: true,
233
- // sypg_page_code: "core_entity_form"
234
- // }
235
- // },
236
- // {
237
- // path: "org-structure",
238
- // loadComponent: () => import('./core/entity-management/components/org-structure/org-structure.component').then(c => c.CideCoreOrgStructureComponent),
239
- // title: 'Organization Structure',
240
- // canActivate: [authGuard],
241
- // data: {
242
- // reuseTab: true,
243
- // sypg_page_code: "core_org_structure"
244
- // }
245
- // },
246
- // // User Role Management Routes
247
- // {
248
- // path: 'user-role',
249
- // loadComponent: () => import('./core/user-role-management/components/user-role-list/user-role-list.component').then(c => c.CideCoreUserRoleListComponent),
250
- // title: 'User Role Management',
251
- // canActivate: [authGuard],
252
- // data: {
253
- // reuseTab: true,
254
- // sypg_page_code: "core_user_role"
255
- // }
256
- // },
257
- // {
258
- // path: 'user-role/create',
259
- // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),
260
- // title: 'Create User Role',
261
- // canActivate: [authGuard],
262
- // data: {
263
- // reuseTab: true,
264
- // sypg_page_code: "core_user_role"
265
- // }
266
- // },
267
- // {
268
- // path: 'user-role/edit/:query',
269
- // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),
270
- // title: 'Edit User Role',
271
- // canActivate: [authGuard],
272
- // data: {
273
- // reuseTab: true,
274
- // sypg_page_code: "core_user_role"
275
- // }
276
- // },
277
- // {
278
- // path: 'user-role/view/:query',
279
- // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),
280
- // title: 'View User Role',
281
- // canActivate: [authGuard],
282
- // data: {
283
- // reuseTab: true,
284
- // sypg_page_code: "core_user_role_view"
285
- // }
286
- // }
19
+ {
20
+ path: 'menu-management',
21
+ loadComponent: () => Promise.resolve().then(function () { return menuList_component; }).then(c => c.MenuListComponent),
22
+ title: 'Menu Management',
23
+ canActivate: [authGuard],
24
+ data: {
25
+ reuseTab: true,
26
+ sypg_page_code: "core_menu_list"
27
+ }
28
+ },
29
+ {
30
+ path: 'department',
31
+ loadComponent: () => Promise.resolve().then(function () { return departmentList_component; }).then(c => c.CideCoreDepartmentListComponent),
32
+ title: 'Department Management',
33
+ canActivate: [authGuard],
34
+ data: {
35
+ reuseTab: true,
36
+ sypg_page_code: "core_department_list"
37
+ }
38
+ },
39
+ {
40
+ path: 'designation',
41
+ loadComponent: () => Promise.resolve().then(function () { return designationList_component; }).then(c => c.CideCoreDesignationListComponent),
42
+ title: 'Designation Management',
43
+ canActivate: [authGuard],
44
+ data: {
45
+ reuseTab: true,
46
+ sypg_page_code: "core_designation_list"
47
+ }
48
+ },
49
+ {
50
+ path: 'grade-level',
51
+ loadComponent: () => Promise.resolve().then(function () { return gradeLevelList_component; }).then(c => c.CideCoreGradeLevelListComponent),
52
+ title: 'Grade Level Management',
53
+ canActivate: [authGuard],
54
+ data: {
55
+ reuseTab: true,
56
+ sypg_page_code: "core_grade_level_list"
57
+ }
58
+ },
59
+ {
60
+ path: 'page',
61
+ loadComponent: () => Promise.resolve().then(function () { return pageList_component; }).then(c => c.CideCorePageListComponent),
62
+ title: 'Page Management',
63
+ canActivate: [authGuard],
64
+ data: {
65
+ reuseTab: true,
66
+ sypg_page_code: "core_page_management"
67
+ }
68
+ },
69
+ {
70
+ path: 'page-form',
71
+ loadComponent: () => import('./cloud-ide-core-page-form.component-CQ-1TT27.mjs').then(c => c.CideCorePageFormComponent),
72
+ title: 'Page Form',
73
+ canActivate: [authGuard],
74
+ data: {
75
+ reuseTab: true,
76
+ sypg_page_code: "core_page_management"
77
+ }
78
+ },
79
+ {
80
+ path: 'page-form/:query',
81
+ loadComponent: () => import('./cloud-ide-core-page-form.component-CQ-1TT27.mjs').then(c => c.CideCorePageFormComponent),
82
+ title: 'Page Form',
83
+ canActivate: [authGuard],
84
+ data: {
85
+ reuseTab: true,
86
+ sypg_page_code: "core_page_management"
87
+ }
88
+ },
89
+ {
90
+ path: 'page-theme',
91
+ loadComponent: () => Promise.resolve().then(function () { return pageTheme_component; }).then(c => c.CideCorePageThemeComponent),
92
+ title: 'Page Theme Management',
93
+ canActivate: [authGuard],
94
+ data: {
95
+ reuseTab: true,
96
+ sypg_page_code: "core_page_theme"
97
+ }
98
+ },
99
+ {
100
+ path: 'page-theme/:query',
101
+ loadComponent: () => Promise.resolve().then(function () { return pageTheme_component; }).then(c => c.CideCorePageThemeComponent),
102
+ title: 'Page Theme Management',
103
+ canActivate: [authGuard],
104
+ data: {
105
+ reuseTab: true,
106
+ sypg_page_code: "core_page_theme"
107
+ }
108
+ },
109
+ {
110
+ path: 'page-controls',
111
+ loadComponent: () => Promise.resolve().then(function () { return pageControls_component; }).then(c => c.CideCorePageControlsComponent),
112
+ title: 'Page Controls Management',
113
+ canActivate: [authGuard],
114
+ data: {
115
+ reuseTab: true,
116
+ sypg_page_code: "core_page_controls"
117
+ }
118
+ },
119
+ {
120
+ path: 'page-controls/:query',
121
+ loadComponent: () => Promise.resolve().then(function () { return pageControls_component; }).then(c => c.CideCorePageControlsComponent),
122
+ title: 'Page Controls Management',
123
+ canActivate: [authGuard],
124
+ data: {
125
+ reuseTab: true,
126
+ sypg_page_code: "core_page_controls"
127
+ }
128
+ },
129
+ {
130
+ path: 'general_master_entry',
131
+ loadComponent: () => Promise.resolve().then(function () { return generalMaster_component; }).then(c => c.CideCoreGeneralMasterComponent),
132
+ title: 'General Master Entry',
133
+ canActivate: [authGuard],
134
+ data: {
135
+ reuseTab: true,
136
+ sypg_page_code: "core_general_master"
137
+ }
138
+ },
139
+ {
140
+ path: 'general_master_entry/:query',
141
+ loadComponent: () => Promise.resolve().then(function () { return generalMaster_component; }).then(c => c.CideCoreGeneralMasterComponent),
142
+ title: 'General Master Entry',
143
+ canActivate: [authGuard],
144
+ data: {
145
+ reuseTab: true,
146
+ sypg_page_code: "core_general_master"
147
+ }
148
+ },
149
+ {
150
+ path: 'general_type_entry',
151
+ loadComponent: () => Promise.resolve().then(function () { return generalMasterType_component; }).then(c => c.CideCoreGeneralMasterTypeComponent),
152
+ title: 'General Type Entry',
153
+ canActivate: [authGuard],
154
+ data: {
155
+ reuseTab: true,
156
+ sypg_page_code: "core_general_master_type"
157
+ }
158
+ },
159
+ {
160
+ path: 'general_type_entry/:query',
161
+ loadComponent: () => Promise.resolve().then(function () { return generalMasterType_component; }).then(c => c.CideCoreGeneralMasterTypeComponent),
162
+ title: 'General Type Entry',
163
+ canActivate: [authGuard],
164
+ data: {
165
+ reuseTab: true,
166
+ sypg_page_code: "core_general_master_type"
167
+ }
168
+ },
169
+ // User Management Routes
170
+ {
171
+ path: 'user-master',
172
+ loadComponent: () => Promise.resolve().then(function () { return userList_component; }).then(c => c.CideCoreUserListComponent),
173
+ title: 'User Management',
174
+ canActivate: [authGuard],
175
+ data: {
176
+ reuseTab: true,
177
+ sypg_page_code: "auth_user_mst"
178
+ }
179
+ },
180
+ {
181
+ path: 'user-master/create',
182
+ loadComponent: () => Promise.resolve().then(function () { return userCreate_component; }).then(c => c.CideCoreUserCreateComponent),
183
+ title: 'Create User',
184
+ canActivate: [authGuard],
185
+ data: {
186
+ reuseTab: true,
187
+ sypg_page_code: "core_user_management_create"
188
+ }
189
+ },
190
+ {
191
+ path: 'user-master/edit/:query',
192
+ loadComponent: () => Promise.resolve().then(function () { return userCreate_component; }).then(c => c.CideCoreUserCreateComponent),
193
+ title: 'Edit User',
194
+ canActivate: [authGuard],
195
+ data: {
196
+ reuseTab: true,
197
+ sypg_page_code: "core_user_management_create"
198
+ }
199
+ },
200
+ {
201
+ path: 'user-master/view/:query',
202
+ loadComponent: () => Promise.resolve().then(function () { return userCreate_component; }).then(c => c.CideCoreUserCreateComponent),
203
+ title: 'View User',
204
+ canActivate: [authGuard],
205
+ data: {
206
+ reuseTab: true,
207
+ sypg_page_code: "core_user_management_create"
208
+ }
209
+ },
210
+ {
211
+ path: "entity-list",
212
+ loadComponent: () => Promise.resolve().then(function () { return entityList_component; }).then(c => c.CideCoreEntityListComponent),
213
+ canActivate: [authGuard],
214
+ data: {
215
+ reuseTab: true,
216
+ sypg_page_code: "admin_entity_list"
217
+ }
218
+ },
219
+ {
220
+ path: "entity-create",
221
+ loadComponent: () => Promise.resolve().then(function () { return entityCreate_component; }).then(c => c.CideCoreEntityCreateComponent),
222
+ canActivate: [authGuard],
223
+ data: {
224
+ reuseTab: true,
225
+ sypg_page_code: "core_entity_form"
226
+ }
227
+ },
228
+ {
229
+ path: "entity-create/:query",
230
+ loadComponent: () => Promise.resolve().then(function () { return entityCreate_component; }).then(c => c.CideCoreEntityCreateComponent),
231
+ canActivate: [authGuard],
232
+ data: {
233
+ reuseTab: true,
234
+ sypg_page_code: "core_entity_form"
235
+ }
236
+ },
237
+ {
238
+ path: "org-structure",
239
+ loadComponent: () => Promise.resolve().then(function () { return orgStructure_component; }).then(c => c.CideCoreOrgStructureComponent),
240
+ title: 'Organization Structure',
241
+ canActivate: [authGuard],
242
+ data: {
243
+ reuseTab: true,
244
+ sypg_page_code: "core_org_structure"
245
+ }
246
+ },
247
+ // User Role Management Routes
248
+ {
249
+ path: 'user-role',
250
+ loadComponent: () => Promise.resolve().then(function () { return userRoleList_component; }).then(c => c.CideCoreUserRoleListComponent),
251
+ title: 'User Role Management',
252
+ canActivate: [authGuard],
253
+ data: {
254
+ reuseTab: true,
255
+ sypg_page_code: "core_user_role"
256
+ }
257
+ },
258
+ {
259
+ path: 'user-role/create',
260
+ loadComponent: () => Promise.resolve().then(function () { return userRoleForm_component; }).then(c => c.CideCoreUserRoleFormComponent),
261
+ title: 'Create User Role',
262
+ canActivate: [authGuard],
263
+ data: {
264
+ reuseTab: true,
265
+ sypg_page_code: "core_user_role"
266
+ }
267
+ },
268
+ {
269
+ path: 'user-role/edit/:query',
270
+ loadComponent: () => Promise.resolve().then(function () { return userRoleForm_component; }).then(c => c.CideCoreUserRoleFormComponent),
271
+ title: 'Edit User Role',
272
+ canActivate: [authGuard],
273
+ data: {
274
+ reuseTab: true,
275
+ sypg_page_code: "core_user_role"
276
+ }
277
+ },
278
+ {
279
+ path: 'user-role/view/:query',
280
+ loadComponent: () => Promise.resolve().then(function () { return userRoleForm_component; }).then(c => c.CideCoreUserRoleFormComponent),
281
+ title: 'View User Role',
282
+ canActivate: [authGuard],
283
+ data: {
284
+ reuseTab: true,
285
+ sypg_page_code: "core_user_role_view"
286
+ }
287
+ }
287
288
  ];
288
289
 
289
290
  class CloudIdeCoreService {
@@ -2204,6 +2205,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
2204
2205
  ], template: "<!-- Menu List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Menu Item' : 'Quick Add Menu Item' }}</h6>\n </div>\n @if (selectedParentItem()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentItem()?.syme_title }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParent()\" \n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" 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\"/>\n </svg>\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddMenuItem()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Menu Title -->\n <div>\n <cide-ele-input \n id=\"syme_title\" \n label=\"Title\" \n formControlName=\"syme_title\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Menu Type -->\n <div>\n <cide-ele-select \n label=\"Type*\" \n [options]=\"menuTypeOptions()\" \n formControlName=\"syme_type\"\n placeholder=\"Select type\"\n size=\"sm\"\n (ngModelChange)=\"onMenuTypeChange()\">\n </cide-ele-select>\n </div>\n \n <!-- Path -->\n <div>\n <cide-ele-input \n id=\"quickPath\" \n type=\"text\"\n label=\"Path\" \n formControlName=\"syme_path\"\n placeholder=\"/path/to/route\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Icon -->\n <div>\n <cide-ele-input \n id=\"quickIcon\" \n type=\"text\"\n label=\"Icon\" \n formControlName=\"syme_icon\"\n placeholder=\"Icon name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Empty div for spacing -->\n <div></div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"syme_desc\" \n label=\"Description\" \n formControlName=\"syme_desc\"\n placeholder=\"Menu description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n <!-- Permissions (only show for menu and title types) -->\n @if (quickAddForm.get('syme_type')?.value === 'menu') {\n <div>\n <cide-ele-select \n label=\"Permissions\" \n [options]=\"permissionOptions()\" \n formControlName=\"syme_permissions_id_sygms\"\n placeholder=\"Select permissions for this menu\"\n [multiple]=\"true\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n }\n \n <!-- Link -->\n <div>\n <cide-ele-input \n id=\"quickLink\" \n type=\"text\"\n label=\"Link\" \n formControlName=\"syme_link\"\n placeholder=\"External link\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status and Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <!-- Active Checkbox -->\n <cide-ele-input \n id=\"quickIsActive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"syme_isactive\"\n size=\"sm\">\n </cide-ele-input>\n \n <!-- Action Buttons -->\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative tw-p-0\">\n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-w-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [dragDropEnabled]=\"true\" \n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n\n </div>\n </div>\n\n</div>\n\n<!-- \n Angular Template References for Grid Renderers (Best Practice)\n \n These ng-template elements represent the Angular best practice for custom rendering.\n They provide:\n - Type safety with template context\n - Component lifecycle integration\n - Change detection optimization\n - Proper event handling\n - Accessibility features\n \n Note: Current data grid uses string renderers for compatibility.\n Templates are maintained for future component enhancement.\n-->\n\n\n\n<!-- Menu Details Renderer Template -->\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Menu Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n {{ row.syme_icon || 'folder_open' }}\n </cide-ele-icon>\n </div>\n \n <!-- Menu Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.syme_title\">\n {{ row.syme_title || 'Untitled' }}\n </div>\n @if (row.syme_desc) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.syme_desc\">\n {{ row.syme_desc }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Menu Type Renderer Template -->\n<ng-template #menuTypeRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getMenuTypeClass(row.syme_type)\">\n {{ getMenuTypeLabel(row.syme_type) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n\n<!-- Permissions Renderer Template -->\n<ng-template #permissionsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-flex-wrap tw-gap-1 tw-max-w-full tw-items-center\">\n @if (row.syme_type === 'menu') {\n @if (row.syme_permissions_id_sygms && row.syme_permissions_id_sygms.length > 0) {\n @for (permissionId of row.syme_permissions_id_sygms.slice(0, 3); track permissionId) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800 tw-whitespace-nowrap tw-h-5\">\n {{ getPermissionById(permissionId)?.sygms_title || getPermissionById(permissionId)?.sygms_code || 'Unknown' }}\n </span>\n }\n @if (row.syme_permissions_id_sygms.length > 3) {\n <span \n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-600 tw-whitespace-nowrap tw-cursor-help tw-h-5\"\n [title]=\"getAllPermissionNames(row.syme_permissions_id_sygms)\">\n +{{ row.syme_permissions_id_sygms.length - 3 }} more\n </span>\n }\n } @else {\n <span class=\"tw-text-xs tw-text-gray-500 tw-h-5 tw-flex tw-items-center\">No permissions</span>\n }\n } @else {\n <!-- Show N/A for module, section, and title types -->\n <span class=\"tw-text-xs tw-text-gray-400 tw-h-5 tw-flex tw-items-center\">N/A</span>\n }\n </div>\n</ng-template>\n\n" }]
2205
2206
  }], ctorParameters: () => [] });
2206
2207
 
2208
+ var menuList_component = /*#__PURE__*/Object.freeze({
2209
+ __proto__: null,
2210
+ MenuListComponent: MenuListComponent
2211
+ });
2212
+
2207
2213
  /*
2208
2214
  * Menu Management Module Exports
2209
2215
  */
@@ -3149,6 +3155,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
3149
3155
  ], template: "<!-- Department List with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_department_list' }\">\n <div class=\"tw-table tw-w-full tw-h-full\">\n\n<!-- Global Notifications -->\n<cide-ele-global-notifications></cide-ele-global-notifications>\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Department' : 'Quick Add Department' }}</h6>\n </div>\n @if (selectedParentDepartment()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParent()\" \n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" 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\"/>\n </svg>\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDepartment()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Department Code -->\n <div>\n <cide-ele-input \n id=\"sydept_code\" \n label=\"Code*\" \n formControlName=\"sydept_code\"\n placeholder=\"DEPT001\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Department Name -->\n <div>\n <cide-ele-input \n id=\"sydept_name\" \n label=\"Name*\" \n formControlName=\"sydept_name\"\n placeholder=\"Department name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"sydept_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"sydept_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"sydept_description\" \n label=\"Description\" \n formControlName=\"sydept_description\"\n placeholder=\"Department description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Search functionality is handled by the data grid -->\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 tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Department Details Renderer Template -->\n<ng-template #departmentDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Department Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n business\n </cide-ele-icon>\n </div>\n \n <!-- Department Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sydept_name\">\n {{ row.sydept_name || 'Untitled' }}\n </div>\n @if (row.sydept_description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sydept_description\">\n {{ row.sydept_description }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Department Status Renderer Template -->\n<ng-template #departmentStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.sydept_isactive)\">\n {{ getStatusDisplay(row.sydept_isactive) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n</cide-lyt-shared-wrapper> " }]
3150
3156
  }], ctorParameters: () => [] });
3151
3157
 
3158
+ var departmentList_component = /*#__PURE__*/Object.freeze({
3159
+ __proto__: null,
3160
+ CideCoreDepartmentListComponent: CideCoreDepartmentListComponent
3161
+ });
3162
+
3152
3163
  // Department Management Components
3153
3164
 
3154
3165
  class CideCoreDesignationManagementService {
@@ -4907,6 +4918,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
4907
4918
  ], template: "<!-- Designation List with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_designation_list' }\">\n <div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Designation' : 'Quick Add Designation' }}</h6>\n </div>\n @if (selectedParentDesignation()) {\n <div\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDesignation()?.sydsg_name\n }}</span>\n </div>\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearSelectedParent()\"\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\n </svg>\n </button>\n </div>\n }\n @if (selectedParentDepartment()) {\n <div\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-green-50 tw-border tw-border-green-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">business</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-green-600 tw-font-medium\">{{ isEditMode() ? 'Department:' : 'Department:'\n }}</span>\n <span class=\"tw-text-sm tw-text-green-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name\n }}</span>\n </div>\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearSelectedParentDepartment()\"\n class=\"tw-text-green-400 hover:tw-text-green-600\">\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\n </svg>\n </button>\n </div>\n }\n </div>\n\n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDesignation()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-5 tw-gap-3 tw-mb-3\">\n <!-- Designation Name -->\n <div>\n <cide-ele-input id=\"sydsg_name\" label=\"Name*\" formControlName=\"sydsg_name\" placeholder=\"Designation name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Designation Code -->\n <div>\n <cide-ele-input id=\"sydsg_code\" label=\"Code*\" formControlName=\"sydsg_code\" placeholder=\"DESG001\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Grade Level -->\n <div>\n <cide-ele-select id=\"sydsg_grade_level_id_sydsgl\" label=\"Grade Level*\" [options]=\"gradeLevelOptions()\"\n formControlName=\"sydsg_grade_level_id_sydsgl\" placeholder=\"Select grade level\" size=\"sm\">\n </cide-ele-select>\n </div>\n\n <!-- Department -->\n <div>\n <cide-ele-select id=\"sydsg_department_id_sydpt\" label=\"Department*\" [options]=\"departmentOptions()\"\n formControlName=\"sydsg_department_id_sydpt\" placeholder=\"Select department\" size=\"sm\">\n </cide-ele-select>\n </div>\n\n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input id=\"sydsg_isactive\" type=\"checkbox\" label=\"Active\" formControlName=\"sydsg_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea id=\"sydsg_description\" label=\"Description\" formControlName=\"sydsg_description\"\n placeholder=\"Designation description\" rows=\"2\" size=\"sm\">\n </cide-ele-textarea>\n </div>\n\n <!-- Entity ID (Hidden) -->\n <div class=\"tw-hidden\">\n <cide-ele-input id=\"desg_entity_id_syen\" label=\"Entity ID*\" formControlName=\"desg_entity_id_syen\"\n placeholder=\"Entity ID\" size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"submit\" [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add'\n }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button cideEleButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Search functionality is handled by the data grid -->\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 tw-items-start\">\n <cide-ele-icon name=\"error\"\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n\n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\" [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\"\n [currentServerPage]=\"currentPage()\" [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n </div>\n\n <!-- Designation Details Renderer Template -->\n <ng-template #designationDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Dynamic Icon based on type -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon [class]=\"row.type === 'department' ? 'tw-text-green-500' : 'tw-text-blue-500'\" size=\"xs\">\n {{ row.type === 'department' ? 'business' : 'work' }}\n </cide-ele-icon>\n </div>\n\n <!-- Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"row.name\">\n {{ row.name || 'Untitled' }}\n </div>\n @if (row.type === 'department') {\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n Department\n </span>\n }\n </div>\n @if (row.description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"row.description\">\n {{ row.description }}\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Designation Status Renderer Template -->\n <ng-template #designationStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.status)\">\n {{ getStatusDisplay(row.status) }}\n </span>\n </ng-template>\n\n <!-- Actions Dropdown Renderer Template -->\n <ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown [items]=\"getDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n </ng-template>\n</cide-lyt-shared-wrapper>" }]
4908
4919
  }], ctorParameters: () => [] });
4909
4920
 
4921
+ var designationList_component = /*#__PURE__*/Object.freeze({
4922
+ __proto__: null,
4923
+ CideCoreDesignationListComponent: CideCoreDesignationListComponent
4924
+ });
4925
+
4910
4926
  // Designation Management Components
4911
4927
 
4912
4928
  class CideCoreGradeLevelListComponent {
@@ -5761,6 +5777,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
5761
5777
  ], template: "<!-- Grade Level List with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_grade_level_list' }\">\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Grade Level' : 'Quick Add Grade Level' }}</h6>\n </div>\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddGradeLevel()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Grade Level Name -->\n <div>\n <cide-ele-input \n id=\"sydsgl_name\" \n label=\"Name*\" \n formControlName=\"sydsgl_name\"\n placeholder=\"Grade level name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"sydsgl_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"sydsgl_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"sydsgl_description\" \n label=\"Description\" \n formControlName=\"sydsgl_description\"\n placeholder=\"Grade level description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n <!-- Entity ID (Hidden) -->\n <div class=\"tw-hidden\">\n <cide-ele-input \n id=\"sydsgl_entity_id_syen\" \n label=\"Entity ID*\" \n formControlName=\"sydsgl_entity_id_syen\"\n placeholder=\"Entity ID\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n [dragDropEnabled]=\"true\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Drag Handle Renderer Template -->\n<ng-template #dragHandleRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-full tw-h-full tw-cursor-move drag-handle\">\n <cide-ele-icon \n class=\"tw-text-gray-400 hover:tw-text-gray-600 tw-transition-colors\" \n size=\"xs\">\n drag_indicator\n </cide-ele-icon>\n </div>\n</ng-template>\n\n<!-- Grade Level Details Renderer Template -->\n<ng-template #gradeLevelDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Grade Level Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n school\n </cide-ele-icon>\n </div>\n \n <!-- Grade Level Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sydsgl_name\">\n {{ row.sydsgl_name || 'Untitled' }}\n </div>\n @if (row.sydsgl_description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sydsgl_description\">\n {{ row.sydsgl_description }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Grade Level Status Renderer Template -->\n<ng-template #gradeLevelStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.sydsgl_isactive)\">\n {{ getStatusDisplay(row.sydsgl_isactive) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n\n<!-- Confirmation Modal -->\n</cide-lyt-shared-wrapper>\n<cide-ele-confirmation-modal></cide-ele-confirmation-modal> " }]
5762
5778
  }], ctorParameters: () => [] });
5763
5779
 
5780
+ var gradeLevelList_component = /*#__PURE__*/Object.freeze({
5781
+ __proto__: null,
5782
+ CideCoreGradeLevelListComponent: CideCoreGradeLevelListComponent
5783
+ });
5784
+
5764
5785
  // Grade Level Management Components
5765
5786
 
5766
5787
  class CideCorePageManagementService {
@@ -6238,6 +6259,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
6238
6259
  ], template: "<!-- Page List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">web</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Page Management</h5>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Add Page Button -->\n <button\n cideEleButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"createPage()\"\n leftIcon=\"add\"\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\n Create New Page\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 tw-items-start\">\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\">error</cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\"\n [totalServerItems]=\"totalItems()\"\n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Page Details Renderer Template -->\n<ng-template #pageDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Page Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon class=\"tw-text-gray-400 tw-w-4 tw-h-4\">web</cide-ele-icon>\n </div>\n \n <!-- Page Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sypg_title\">\n {{ row.sypg_title || 'Untitled' }}\n </div>\n @if (row.sypg_desc) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sypg_desc\">\n {{ row.sypg_desc }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Page Status Renderer Template -->\n<ng-template #pageStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"row.sypg_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\n {{ row.sypg_isactive ? 'Active' : 'Inactive' }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> " }]
6239
6260
  }], ctorParameters: () => [] });
6240
6261
 
6262
+ var pageList_component = /*#__PURE__*/Object.freeze({
6263
+ __proto__: null,
6264
+ CideCorePageListComponent: CideCorePageListComponent
6265
+ });
6266
+
6241
6267
  class CideCorePageThemeService {
6242
6268
  http;
6243
6269
  apiUrl = `${coreRoutesUrl?.pageTheme}`;
@@ -7116,6 +7142,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
7116
7142
  ], template: "<!-- Page Theme Container -->\r\n<div class=\"tw-flex tw-h-full tw-w-full\">\r\n \r\n <!-- Left: Form and header (60%) -->\r\n <div class=\"tw-w-full lg:tw-w-3/5 tw-flex tw-flex-col tw-border-r tw-border-gray-200\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-px-6 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\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-2 sm:tw-space-y-0\">\r\n\r\n <!-- Title and Back Button -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" (click)=\"goBack();\" class=\"tw-text-gray-600 hover:tw-text-gray-900\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">arrow_back</cide-ele-icon>\r\n </button>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">palette</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Theme Management</h5>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-m-0\">Page: {{ pageTitle() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Quick Add/Edit Form Section -->\r\n <div class=\"tw-px-6 tw-py-3 tw-bg-white tw-overflow-auto\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Theme' : 'Quick Add Theme' }}</h6>\r\n </div>\r\n </div>\r\n\r\n <!-- Form (kept as-is) -->\r\n <form [formGroup]=\"themeForm\" (ngSubmit)=\"saveTheme()\" class=\"tw-space-y-4\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: All Input Fields -->\r\n <div class=\"tw-space-y-4\">\r\n <!-- Row 1: Theme Title and Theme Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_title\" formControlName=\"sytm_title\" placeholder=\"Enter theme title\" label=\"Theme Title*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_theme_code\" formControlName=\"sytm_theme_code\" placeholder=\"Enter theme code\" label=\"Theme Code*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Row 2: Sub Title and Active Status -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_sub_title\" formControlName=\"sytm_sub_title\" placeholder=\"Enter sub title\" label=\"Sub Title\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <div class=\"tw-space-y-2 tw-flex tw-items-center\">\r\n <cide-ele-input\r\n id=\"sytm_isactive_cb\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isactive\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Row 3: Description -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-textarea id=\"sytm_desc\" formControlName=\"sytm_desc\" placeholder=\"Enter theme description\" rows=\"2\" label=\"Description\" size=\"sm\"></cide-ele-textarea>\r\n </div>\r\n </div>\r\n \r\n <!-- Right Side: File Upload -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-start tw-items-center tw-p-0\">\r\n <cide-ele-file-input \r\n id=\"sytm_preview_id_fm\" \r\n formControlName=\"sytm_preview_id_fm\"\r\n accept=\"image/*\"\r\n [showPreview]=\"true\"\r\n [previewBoxMode]=\"true\"\r\n [showFileName]=\"false\"\r\n previewWidth=\"180px\"\r\n previewHeight=\"120px\"\r\n placeholderText=\"Upload Preview Image\"\r\n placeholderIcon=\"image\"\r\n [autoUpload]=\"true\"\r\n [uploadData]=\"getPreviewImageUploadData()\"\r\n (uploadSuccess)=\"onPreviewImageUploadSuccess($event)\"\r\n (uploadError)=\"onPreviewImageUploadError($event)\"\r\n (uploadProgressChange)=\"onPreviewImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Configuration JSON -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-json-editor label=\"Configuration JSON\" formControlName=\"sytm_configuration\" [required]=\"true\" [config]=\"{\r\n showLineNumbers: true,\r\n autoFormat: true,\r\n validateOnChange: true,\r\n minHeight: 150,\r\n maxHeight: 300,\r\n placeholder: 'Enter theme configuration JSON...'\r\n }\" helperText=\"Enter valid JSON configuration for the theme\"></cide-ele-json-editor>\r\n </div>\r\n <!-- Layout Configuration + Selection -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Layout & Selection</div>\r\n <!-- Selected toggle -->\r\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-px-3 tw-py-2\">\r\n <cide-ele-input\r\n id=\"sytm_isselected\"\r\n type=\"checkbox\"\r\n label=\"Selected (Default)\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isselected\">\r\n </cide-ele-input>\r\n </div>\r\n <div formGroupName=\"sytm_layout\" class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-divide-y tw-overflow-hidden\">\r\n <!-- Sidebar -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_sidebar\">\r\n <cide-ele-input id=\"layout_sidebar_status\" type=\"checkbox\" label=\"Sidebar\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Header -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_header\">\r\n <cide-ele-input id=\"layout_header_status\" type=\"checkbox\" label=\"Header\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Footer -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_footer\">\r\n <cide-ele-input id=\"layout_footer_status\" type=\"checkbox\" label=\"Footer\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Breadcrumb -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_breadcrumb\">\r\n <cide-ele-input id=\"layout_breadcrumb_status\" type=\"checkbox\" label=\"Breadcrumb\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Console -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_console\">\r\n <cide-ele-input id=\"layout_console_status\" type=\"checkbox\" label=\"Console\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Request -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_request\">\r\n <cide-ele-input id=\"layout_request_status\" type=\"checkbox\" label=\"Request\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-pt-1\">Toggle active sections. Only one theme can be selected as default. More options can be added here later.</p>\r\n </div>\r\n \r\n <!-- Drawer Configuration -->\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Drawers</div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"outline\" (click)=\"addDrawer()\">\r\n Add Drawer\r\n </button>\r\n </div>\r\n\r\n <div formGroupName=\"sytm_layout\">\r\n <div class=\"tw-space-y-2\" formArrayName=\"sytm_layout_drawer\">\r\n <div *ngFor=\"let drawerGrp of drawerArray.controls; let i = index\" [formGroupName]=\"i\" class=\"tw-border tw-border-gray-200 tw-rounded-md tw-p-3 tw-flex tw-items-center tw-gap-3\">\r\n <cide-ele-input id=\"drawer_active_{{i}}\" type=\"checkbox\" label=\"Active\" size=\"sm\" formControlName=\"syth_status\"></cide-ele-input>\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select\r\n id=\"drawer_config_{{i}}\"\r\n label=\"Drawer For\"\r\n size=\"sm\"\r\n [options]=\"drawerConfigOptions\"\r\n formControlName=\"syth_config_syco_for\">\r\n </cide-ele-select>\r\n </div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"ghost\" (click)=\"removeDrawer(i)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Configure multiple drawers as needed.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-flex-col tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-flex tw-items-center tw-justify-end tw-space-x-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" (click)=\"cancelForm()\" [disabled]=\"loading()\">Cancel</button>\r\n <button cideEleButton type=\"submit\" variant=\"primary\" leftIcon=\"add\" [disabled]=\"!themeForm.valid || loading()\" [loading]=\"loading()\">\r\n {{ isEditMode() ? 'Update Theme' : 'Create Theme' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Right: Theme gallery (40%) -->\r\n <div class=\"tw-hidden lg:tw-flex tw-w-2/5 tw-flex-col\">\r\n <!-- (Header consolidated above) -->\r\n\r\n <!-- Gallery list -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-bg-gray-50\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-p-4\">\r\n @for (theme of filteredThemes(); track theme._id) {\r\n <div class=\"tw-rounded-md tw-transition tw-cursor-pointer tw-relative\"\r\n [ngClass]=\"theme.sytm_isselected\r\n ? 'tw-border tw-border-blue-500 tw-ring-2 tw-ring-blue-200 tw-bg-blue-50/50'\r\n : 'tw-bg-white tw-border tw-border-gray-200 hover:tw-shadow-sm'\"\r\n (click)=\"editTheme(theme)\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-selected]=\"theme.sytm_isselected ? 'true' : 'false'\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\"\r\n (keydown.enter)=\"editTheme(theme)\"\r\n (keydown.space)=\"$event.preventDefault(); editTheme(theme)\">\r\n\r\n <!-- Selected badge -->\r\n <div *ngIf=\"theme.sytm_isselected\"\r\n class=\"tw-absolute tw-top-2 tw-right-2 tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-rounded-full tw-bg-blue-600 tw-text-white\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">check</cide-ele-icon>\r\n </div>\r\n \r\n <div class=\"tw-aspect-[16/9] tw-bg-gray-100 tw-rounded-t-md tw-overflow-hidden tw-flex tw-items-center tw-justify-center\">\r\n @if (theme.sytm_preview_id_fm) {\r\n <img \r\n cideEleFileImage \r\n [fileId]=\"theme.sytm_preview_id_fm\" \r\n [altText]=\"'Theme Preview'\"\r\n class=\"tw-w-full tw-h-full tw-object-cover\" />\r\n } @else {\r\n <div class=\"tw-text-gray-400 tw-text-xs\">No preview</div>\r\n }\r\n </div>\r\n <div class=\"tw-p-3 tw-space-y-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"theme.sytm_title\">{{ theme.sytm_title || 'Untitled Theme' }}</div>\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"theme.sytm_theme_code\">{{ theme.sytm_theme_code }}</div>\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-pt-1\">\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-text-xs\" [ngClass]=\"theme.sytm_isactive ? 'tw-text-green-700' : 'tw-text-red-700'\">\r\n <span class=\"tw-w-1.5 tw-h-1.5 tw-rounded-full\" [ngClass]=\"theme.sytm_isactive ? 'tw-bg-green-500' : 'tw-bg-red-500'\"></span>\r\n {{ theme.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <!-- Set Selected Button - Clear and Simple -->\r\n @if (theme.sytm_isselected) {\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-px-2 tw-py-1 tw-bg-green-100 tw-text-green-800 tw-rounded-md tw-text-xs tw-font-medium\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3\">check</cide-ele-icon>\r\n Selected\r\n </span>\r\n } @else {\r\n <button cideEleButton \r\n variant=\"outline\" \r\n size=\"xs\"\r\n (click)=\"$event.stopPropagation(); setSelectedTheme(theme)\"\r\n [attr.aria-label]=\"'Select ' + (theme.sytm_title || theme.sytm_theme_code) + ' theme'\"\r\n class=\"tw-text-xs\">\r\n Select\r\n </button>\r\n }\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); editTheme(theme)\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">edit</cide-ele-icon>\r\n </button>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); deleteTheme(theme)\"\r\n [attr.aria-label]=\"'Delete theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!loading() && filteredThemes().length === 0) {\r\n <div class=\"tw-col-span-full tw-text-center tw-text-xs tw-text-gray-500 tw-py-8\">No themes found</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Template References for Grid Renderers (Best Practice)\r\n \r\n These ng-template elements represent the Angular best practice for custom rendering.\r\n They provide:\r\n - Type safety with template context\r\n - Component lifecycle integration\r\n - Change detection optimization\r\n - Proper event handling\r\n - Accessibility features\r\n \r\n Note: Current data grid uses string renderers for compatibility.\r\n Templates are maintained for future component enhancement.\r\n-->\r\n\r\n<!-- Theme Details Renderer Template -->\r\n<ng-template #themeDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Theme Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-purple-600\" \r\n size=\"xs\">\r\n palette\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Theme Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sytm_title\">\r\n {{ row.sytm_title || 'Untitled' }}\r\n </div>\r\n @if (row.sytm_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sytm_desc\">\r\n {{ row.sytm_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Theme Status Renderer Template -->\r\n<ng-template #themeStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"row.sytm_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\r\n {{ row.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template> " }]
7117
7143
  }] });
7118
7144
 
7145
+ var pageTheme_component = /*#__PURE__*/Object.freeze({
7146
+ __proto__: null,
7147
+ CideCorePageThemeComponent: CideCorePageThemeComponent
7148
+ });
7149
+
7119
7150
  class CideCorePageControlsService {
7120
7151
  http;
7121
7152
  constructor(http) {
@@ -7716,6 +7747,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
7716
7747
  ], template: "<!-- Page Controls Container -->\n<div class=\"tw-flex tw-flex-col tw-h-full tw-bg-gray-50\">\n <!-- Header Section -->\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\n <div class=\"tw-flex tw-items-center tw-justify-between\">\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"goBack()\"\n class=\"tw-flex tw-items-center tw-justify-center tw-w-8 tw-h-8 tw-text-gray-600 hover:tw-text-gray-900 hover:tw-bg-gray-100 tw-rounded-md tw-transition-colors\">\n <cide-ele-icon>arrow_back</cide-ele-icon>\n </button>\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xl\">settings</cide-ele-icon>\n <div>\n <h1 class=\"tw-text-xl tw-font-semibold tw-text-gray-900 tw-mb-0\">Control Management</h1>\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Page: {{ pageTitle() }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Message -->\n <div class=\"tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md tw-p-4 tw-mx-6 tw-mt-4 tw-flex tw-items-start tw-space-x-3\" *ngIf=\"error()\">\n <cide-ele-icon class=\"tw-text-red-500 tw-flex-shrink-0 tw-mt-0.5\">error</cide-ele-icon>\n <div>\n <h3 class=\"tw-text-red-800 tw-font-medium tw-mb-1\">Error</h3>\n <p class=\"tw-text-red-700 tw-text-sm tw-mb-0\">{{ error() }}</p>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-flex tw-flex-1 tw-gap-6 tw-p-6 tw-overflow-hidden lg:tw-flex-row tw-flex-col\">\n <!-- Form Section -->\n <div class=\"tw-w-full lg:tw-w-3/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-p-6 tw-border-b tw-border-gray-200\">\n <cide-ele-icon class=\"tw-text-blue-600\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-0\">{{ isEditMode() ? 'Edit Control' : 'Quick Add Control' }}</h3>\n </div>\n\n <!-- Form -->\n <form [formGroup]=\"controlForm\" (ngSubmit)=\"saveControl()\" class=\"tw-flex tw-flex-col tw-flex-1 tw-p-6 tw-overflow-y-auto\">\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4 tw-mb-6\">\n \n <!-- Basic Information Section -->\n <!-- Control Key -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_key\"\n formControlName=\"sype_key\"\n placeholder=\"Enter control key\"\n label=\"Control Key\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Control Label -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_label\"\n formControlName=\"sype_label\"\n placeholder=\"Enter control label\"\n label=\"Control Label\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Control Type -->\n <div class=\"tw-space-y-1\">\n <cide-ele-select\n id=\"sype_type\"\n formControlName=\"sype_type\"\n [options]=\"[\n { value: 'text', label: 'Text Input' },\n { value: 'textarea', label: 'Text Area' },\n { value: 'select', label: 'Select' },\n { value: 'checkbox', label: 'Checkbox' },\n { value: 'radio', label: 'Radio' },\n { value: 'date', label: 'Date' },\n { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' },\n { value: 'password', label: 'Password' },\n { value: 'file', label: 'File Upload' }\n ]\"\n label=\"Control Type\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n\n <!-- Status - Checkbox aligned properly -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_isactive\"\n type=\"checkbox\"\n formControlName=\"sype_isactive\"\n label=\"Active Status\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Placeholder -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_placeholder\"\n formControlName=\"sype_placeholder\"\n placeholder=\"Enter placeholder text\"\n label=\"Placeholder\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Auto Complete - Checkbox aligned properly -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_auto_complete\"\n type=\"checkbox\"\n formControlName=\"sype_auto_complete\"\n label=\"Auto Complete\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Tooltip -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_tooltip\"\n formControlName=\"sype_tooltip\"\n placeholder=\"Enter tooltip text\"\n label=\"Tooltip\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Validation & Sizing Section -->\n <!-- Min/Max Length - Side by side -->\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-input\n id=\"sype_min_length\"\n type=\"number\"\n formControlName=\"sype_min_length\"\n placeholder=\"0\"\n label=\"Min Length\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-input\n id=\"sype_max_length\"\n type=\"number\"\n formControlName=\"sype_max_length\"\n placeholder=\"20\"\n label=\"Max Length\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Size & Label Placement - Side by side -->\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-select\n id=\"sype_size\"\n formControlName=\"sype_size\"\n label=\"Size\"\n size=\"xs\"\n [options]=\"[\n { value: 'xs', label: 'XS' },\n { value: 'sm', label: 'SM' },\n { value: 'md', label: 'MD' },\n { value: 'lg', label: 'LG' },\n { value: 'xl', label: 'XL' },\n { value: 'xxl', label: 'XXL' }\n ]\">\n </cide-ele-select>\n </div>\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-select\n id=\"sype_label_placement\"\n formControlName=\"sype_label_placement\"\n label=\"Label Placement\"\n size=\"xs\"\n [options]=\"[\n { value: 'left', label: 'Left' },\n { value: 'floating', label: 'Floating' },\n { value: 'fixed', label: 'Fixed' }\n ]\">\n </cide-ele-select>\n </div>\n </div>\n\n <!-- Width & Height - Side by side -->\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-input\n id=\"sype_width\"\n type=\"text\"\n formControlName=\"sype_width\"\n placeholder=\"20px\"\n label=\"Width\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-input\n id=\"sype_height\"\n type=\"text\"\n formControlName=\"sype_height\"\n placeholder=\"20px\"\n label=\"Height\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Leading Icon -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_leading_icon\"\n formControlName=\"sype_leading_icon\"\n placeholder=\"Enter icon name\"\n label=\"Leading Icon\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Default Value -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_default\"\n formControlName=\"sype_default\"\n placeholder=\"Enter default value\"\n label=\"Default Value\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Regex Pattern -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_regex\"\n formControlName=\"sype_regex\"\n placeholder=\"Enter regex pattern\"\n label=\"Regex Pattern\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Option Key -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_option_key\"\n formControlName=\"sype_option_key\"\n placeholder=\"Enter option key\"\n label=\"Option Key\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Entity ID (Auto-assigned from AppState) - Hidden -->\n <div class=\"tw-space-y-1\" style=\"display: none;\">\n <cide-ele-input\n id=\"sype_entity_id_syen\"\n formControlName=\"sype_entity_id_syen\"\n placeholder=\"Auto-assigned from system\"\n label=\"Entity ID (Auto-assigned)\"\n size=\"sm\"\n readonly>\n </cide-ele-input>\n </div>\n\n <!-- Control Options -->\n <div class=\"tw-col-span-2 tw-space-y-1\">\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-3\">Control Options</h6>\n <div class=\"tw-grid tw-grid-cols-1 sm:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-3\">\n \n <!-- Required -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-input\n id=\"sype_required\"\n type=\"checkbox\"\n formControlName=\"sype_required\"\n label=\"Required\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Disabled -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-input\n id=\"sype_disabled\"\n type=\"checkbox\"\n formControlName=\"sype_disabled\"\n label=\"Disabled\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Hide Label -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-input\n id=\"sype_label_hide\"\n type=\"checkbox\"\n formControlName=\"sype_label_hide\"\n label=\"Hide Label\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Hide Helper Text -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-input\n id=\"sype_hide_helper_and_error_text\"\n type=\"checkbox\"\n formControlName=\"sype_hide_helper_and_error_text\"\n label=\"Hide Helper Text\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Helper Text Collapse -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-input\n id=\"sype_helper_text_collapse\"\n type=\"checkbox\"\n formControlName=\"sype_helper_text_collapse\"\n label=\"Collapse Helper\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n </div>\n </div>\n\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-flex tw-justify-between tw-items-center tw-pt-4 tw-border-t tw-border-gray-200 tw-mt-auto\">\n <!-- Error Message (Left Side) -->\n <cide-form-field-error [formGroup]=\"controlForm\"></cide-form-field-error>\n \n <!-- Action Buttons (Right Side) -->\n <div class=\"tw-flex tw-gap-3\">\n <button \n cideEleButton\n type=\"button\"\n variant=\"outline\"\n (click)=\"cancelForm()\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n <button \n cideEleButton\n type=\"submit\"\n variant=\"primary\"\n [disabled]=\"loading()\">\n {{ isEditMode() ? 'Update Control' : 'Create Control' }}\n </button>\n </div>\n </div>\n </form>\n </div>\n\n <!-- Controls List Section -->\n <div class=\"tw-w-full lg:tw-w-2/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col lg:tw-max-h-none tw-max-h-96\">\n <div class=\"tw-p-6 tw-border-b tw-border-gray-200\">\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-1\">Page Controls</h3>\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Controls connected to this page</p>\n </div>\n \n <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-4\" *ngIf=\"!loading() && controls().length > 0\">\n <div \n class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-4 tw-mb-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-gray-300 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-ring-offset-2\" \n *ngFor=\"let control of controls(); trackBy: trackByControlId\"\n [class.tw-bg-blue-50]=\"selectedControlId() === control._id\"\n [class.tw-border-blue-300]=\"selectedControlId() === control._id\"\n [class.tw-shadow-md]=\"selectedControlId() === control._id\"\n (click)=\"selectControl(control)\"\n (keyup.enter)=\"selectControl(control)\"\n (keyup.space)=\"selectControl(control)\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Select control ' + (control.sype_label || control.sype_key)\">\n <div class=\"tw-flex tw-items-start tw-space-x-3\">\n <div class=\"tw-flex-shrink-0 tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-blue-600\">settings_input_component</cide-ele-icon>\n </div>\n <div class=\"tw-flex-1 tw-min-w-0\">\n <h4 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-1 tw-truncate\">{{ control.sype_label || control.sype_key }}</h4>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mb-2 tw-truncate\">{{ control.sype_tooltip || 'No tooltip' }}</p>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800\">{{ control.sype_type }}</span>\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\" \n [class.tw-bg-red-100]=\"!control.sype_isactive\"\n [class.tw-text-red-800]=\"!control.sype_isactive\"\n [class.tw-bg-green-100]=\"control.sype_isactive\"\n [class.tw-text-green-800]=\"control.sype_isactive\">\n {{ control.sype_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n <div class=\"tw-flex tw-items-center tw-space-x-1 tw-opacity-0 tw-transition-opacity tw-duration-200 group-hover:tw-opacity-100\" \n [class.tw-opacity-100]=\"selectedControlId() === control._id\">\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"editControl(control); $event.stopPropagation()\">\n <cide-ele-icon>edit</cide-ele-icon>\n </button>\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"deleteControl(control); $event.stopPropagation()\">\n <cide-ele-icon>delete</cide-ele-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"!loading() && controls().length === 0\">\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-mb-4\">settings_input_component</cide-ele-icon>\n <p class=\"tw-text-gray-500 tw-font-medium tw-mb-1\">No controls available</p>\n <small class=\"tw-text-gray-400\">Create controls using the form on the left</small>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"loading()\">\n <cide-ele-icon class=\"tw-text-2xl tw-text-blue-500 tw-mb-4 tw-animate-spin\">refresh</cide-ele-icon>\n <p class=\"tw-text-gray-500\">Loading controls...</p>\n </div>\n </div>\n </div>\n</div>\n\n ", styles: [".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}@media (max-width: 640px){.main-content{padding:1rem;gap:1rem}}\n"] }]
7717
7748
  }] });
7718
7749
 
7750
+ var pageControls_component = /*#__PURE__*/Object.freeze({
7751
+ __proto__: null,
7752
+ CideCorePageControlsComponent: CideCorePageControlsComponent
7753
+ });
7754
+
7719
7755
  // Page Management Components
7720
7756
  // Page Management Interfaces - Now using model interfaces from cloud-ide-lms-model
7721
7757
 
@@ -7742,6 +7778,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
7742
7778
  ], template: "" }]
7743
7779
  }] });
7744
7780
 
7781
+ var userCreate_component = /*#__PURE__*/Object.freeze({
7782
+ __proto__: null,
7783
+ CideCoreUserCreateComponent: CideCoreUserCreateComponent
7784
+ });
7785
+
7745
7786
  class CideCoreUserMasterService {
7746
7787
  http = inject(HttpClient);
7747
7788
  /**
@@ -8397,6 +8438,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
8397
8438
  args: ['statusTemplate', { static: true }]
8398
8439
  }] } });
8399
8440
 
8441
+ var userList_component = /*#__PURE__*/Object.freeze({
8442
+ __proto__: null,
8443
+ CideCoreUserListComponent: CideCoreUserListComponent
8444
+ });
8445
+
8400
8446
  class CideCoreRoleSelectService {
8401
8447
  http = inject(HttpClient);
8402
8448
  /**
@@ -11170,6 +11216,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
11170
11216
  ], template: "<!-- User Role List with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_user_role' }\">\n <div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">admin_panel_settings</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">User Role Management</h5>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <button cideEleButton variant=\"primary\" size=\"md\" leftIcon=\"add\" (click)=\"createUserRole()\">\n Create User Role\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 tw-items-start\">\n <cide-ele-icon name=\"error\"\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n\n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n </div>\n\n <!-- Template Renderers -->\n <ng-template #userRoleDetailsRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-w-full\">\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.syusrol_role_name || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.syusrol_role_description || 'No description' }}</div>\n </div>\n </ng-template>\n\n <ng-template #entityRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-text-sm\">\n <span class=\"tw-text-gray-900\">{{ getEntityName(row.syusrol_role_entity_id_syen) }}</span>\n </div>\n </ng-template>\n\n <ng-template #statusRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-items-center tw-justify-center\">\n <!-- Active/Inactive Status Badge -->\n <span\n class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-text-center\"\n [ngClass]=\"getStatusBadgeClass(row)\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\n {{ row.syusrol_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ getStatusText(row) }}\n </span>\n </div>\n </ng-template>\n\n <ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n </ng-template>\n</cide-lyt-shared-wrapper>", styles: [".user-role-listing-container{@apply tw-w-full tw-h-full;}:host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"] }]
11171
11217
  }] });
11172
11218
 
11219
+ var userRoleList_component = /*#__PURE__*/Object.freeze({
11220
+ __proto__: null,
11221
+ CideCoreUserRoleListComponent: CideCoreUserRoleListComponent
11222
+ });
11223
+
11173
11224
  class CideCoreUserRoleFormComponent {
11174
11225
  // Dependency injection
11175
11226
  destroyRef = inject(DestroyRef);
@@ -12077,6 +12128,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
12077
12128
  ], template: "<!-- User Role Form Container -->\n<div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-max-w-7xl tw-mx-auto tw-bg-transparent tw-h-full tw-flex tw-flex-col\" [formGroup]=\"userRoleForm\" [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n <!-- User Role Basic Information Section -->\n <div class=\"tw-py-2 tw-border-b-0 tw-mb-0 tw-p-3\">\n\n <!-- Basic Fields -->\n <div class=\"tw-grid tw-grid-cols-1 xl:tw-grid-cols-2 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6 tw-mb-0\">\n <!-- Left Column: Role Name -->\n <div>\n <cide-ele-input \n id=\"syusrol_role_name\" \n label=\"Role Name *\" \n formControlName=\"syusrol_role_name\"\n placeholder=\"Enter role name\" \n [maxlength]=\"50\" \n size=\"md\"\n [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n\n <!-- Right Column: Description -->\n <div>\n <cide-ele-textarea \n id=\"syusrol_role_description\" \n label=\"Description *\" \n formControlName=\"syusrol_role_description\"\n placeholder=\"Enter role description\" \n rows=\"3\"\n [maxlength]=\"200\"\n [disabled]=\"isViewMode()\">\n </cide-ele-textarea>\n </div>\n </div>\n\n <!-- Active Status Row -->\n <div class=\"tw-mb-0\">\n <cide-ele-input \n id=\"syusrol_isactive\" \n label=\"Active Status\" \n formControlName=\"syusrol_isactive\"\n type=\"checkbox\" \n size=\"md\"\n [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Role Rights Section -->\n <div class=\"tw-pt-2 tw-border-b-0 tw-mb-0 tw-flex-1 tw-flex tw-flex-col tw-min-h-0\">\n\n <!-- Role Rights Grid -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-w-full\" style=\"height: 400px; max-height: 900px;\">\n <cide-ele-data-grid \n [config]=\"roleRightsGridConfig()\" \n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onRoleRightsGridEvent($event)\"\n class=\"tw-h-full tw-w-full\">\n </cide-ele-data-grid>\n </div>\n\n <!-- Role Rights Form (Hidden but functional) -->\n <div [formGroup]=\"roleRightsForm\" class=\"tw-hidden\">\n <div formArrayName=\"roleRights\">\n @for (right of roleRightsArray.controls; track $index; let i = $index) {\n <div [formGroupName]=\"i\">\n <cide-ele-select formControlName=\"syusrgt_menu_id_syme\">\n <option value=\"\">Select Menu</option>\n @for (menu of menus(); track menu._id) {\n <option [value]=\"menu._id\">{{ menu.syme_title }}</option>\n }\n </cide-ele-select>\n <cide-ele-select formControlName=\"syusrgt_role_permissions_id_sygms\">\n <option value=\"\">Select Permission</option>\n @for (permission of permissions(); track permission._id) {\n <option [value]=\"permission._id\">{{ permission.sygms_name }}</option>\n }\n </cide-ele-select>\n <cide-ele-input formControlName=\"syusrgt_isactive\" type=\"checkbox\"></cide-ele-input>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-flex tw-justify-between tw-items-center tw-p-3 tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\n <!-- Error Message (Left Side) -->\n <cide-form-field-error [formGroup]=\"userRoleForm\"></cide-form-field-error>\n \n <!-- Action Buttons (Right Side) -->\n <div class=\"tw-flex tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"arrow_back\"\n [disabled]=\"loading()\">\n {{ isViewMode() ? 'Close' : 'Cancel' }}\n </button>\n\n @if (!isViewMode()) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || !isFormReadyToSave\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ submitButtonText }}\n </button>\n }\n </div>\n </div>\n </form>\n</div>\n\n<!-- Template Renderers for Role Rights Grid -->\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Menu Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n {{ row.syme_icon || 'folder_open' }}\n </cide-ele-icon>\n </div>\n \n <!-- Menu Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.syme_title\">\n {{ row.syme_title || row.menu?.syme_title || row.menu?.syme_menu_name || 'Untitled' }}\n </div>\n <!-- Green pill indicator for parent menus with child permissions -->\n @if (row.syme_type === 'module' || row.syme_type === 'section') {\n @if (hasChildMenusWithPermissions(row._id)) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 tw-whitespace-nowrap\">\n Assigned\n </span>\n }\n }\n </div>\n @if (row.permission?.sygms_name) {\n <div class=\"tw-text-xs tw-text-blue-500 tw-truncate\" \n [title]=\"row.permission?.sygms_name\">\n {{ row.permission?.sygms_name }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n\n<!-- Permissions Checkbox Renderer Template -->\n<ng-template #permissionsCheckboxRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\n @if (row.syme_type === 'menu' && row?.syme_permissions_id_sygms && row?.syme_permissions_id_sygms.length > 0) {\n @for (permissionId of row?.syme_permissions_id_sygms || []; track permissionId) {\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\n <cide-ele-input \n type=\"checkbox\"\n [label]=\"getPermissionById(permissionId)?.sygms_name || 'Unknown'\"\n [ngModel]=\"isPermissionSelected(row._id, permissionId)\"\n (ngModelChange)=\"onPermissionCheckboxChange(row._id, permissionId, $event)\"\n size=\"xs\"\n [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n }\n } @else {\n <!-- Show green checkmark for parent menus with child permissions -->\n @if (row.syme_type === 'module' || row.syme_type === 'section' || row.syme_type === 'title') {\n @if (hasChildMenusWithPermissions(row._id)) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-bg-green-100 tw-rounded-full\" \n [title]=\"hasParentViewRight(row._id) ? 'View right automatically enabled' : 'Child permissions assigned'\">\n <cide-ele-icon \n class=\"tw-text-green-600\" \n size=\"xs\">\n check\n </cide-ele-icon>\n </div>\n } @else if (hasParentViewRight(row._id)) {\n <!-- Show green checkmark for parent with view right -->\n <cide-ele-icon \n class=\"tw-text-green-600\" \n size=\"xs\"\n title=\"View right automatically enabled\">\n check\n </cide-ele-icon>\n } @else {\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\n }\n } @else {\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\n }\n }\n </div>\n</ng-template>", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"] }]
12078
12129
  }] });
12079
12130
 
12131
+ var userRoleForm_component = /*#__PURE__*/Object.freeze({
12132
+ __proto__: null,
12133
+ CideCoreUserRoleFormComponent: CideCoreUserRoleFormComponent
12134
+ });
12135
+
12080
12136
  // DeleteUserRolePayload is now imported from cloud-ide-lms-model as MUserRoleDeletePayload
12081
12137
  // ToggleUserRolePayload is now imported from cloud-ide-lms-model as MUserRoleToggleStatusPayload
12082
12138
  // UserRoleWithRightsPayload is now imported from cloud-ide-lms-model as MUserRoleWithRightsPayload
@@ -12765,6 +12821,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
12765
12821
  ], template: "<!-- General Master Type Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Type' : 'General Master\n Type Management' }}</h6>\n </div>\n\n <!-- Parent Type Info (shown when adding child) -->\n @if (typeForm.get('sygmt_id_sygmt')?.value) {\n <div\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child\n under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ getParentTypeDisplay() }}</span>\n </div>\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearParentType()\"\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" 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\" />\n </svg>\n </button>\n </div>\n }\n </div>\n\n <form [formGroup]=\"typeForm\" (ngSubmit)=\"onSubmit($event)\" class=\"tw-space-y-2 tw-relative\">\n <!-- Hidden field for parent type ID -->\n <input type=\"hidden\" formControlName=\"sygmt_id_sygmt\">\n\n <!-- First Row - Basic fields -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\n <!-- Type Code -->\n <div class=\"lg:tw-col-span-1\">\n <cide-ele-input formControlName=\"sygmt_code\" label=\"Type Code*\" placeholder=\"Enter type code\" size=\"sm\"\n [maxlength]=\"40\">\n </cide-ele-input>\n </div>\n\n <!-- Type Title -->\n <div class=\"lg:tw-col-span-2\">\n <cide-ele-input formControlName=\"sygmt_title\" label=\"Type Title*\" placeholder=\"Enter type title\" size=\"sm\"\n [maxlength]=\"100\">\n </cide-ele-input>\n </div>\n\n <!-- Active Status -->\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\n <cide-ele-input formControlName=\"sygmt_isactive\" type=\"checkbox\" label=\"Active\" size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n <!-- Second Row - JSON Configuration and Description/Save side by side -->\n <div class=\"tw-flex tw-gap-4\">\n <!-- JSON Configuration (60% width) -->\n <div class=\"tw-w-3/5\">\n <cide-ele-json-editor formControlName=\"sygmt_configuration\" label=\"Configuration*\" size=\"sm\">\n </cide-ele-json-editor>\n </div>\n\n <!-- Description and Save Button (40% width) -->\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\n <!-- Description -->\n <div class=\"tw-flex-1\">\n <cide-ele-textarea formControlName=\"sygmt_desc\" label=\"Description\" placeholder=\"Enter description\"\n size=\"sm\" [maxlength]=\"255\" [rows]=\"4\">\n </cide-ele-textarea>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\n <button cideEleButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"cancelForm()\"\n [disabled]=\"loading()\" class=\"tw-px-4 tw-py-2\">\n Cancel\n </button>\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"submit\" [disabled]=\"loading()\"\n class=\"tw-px-4 tw-py-2\" [leftIcon]=\"isEditMode() ? 'edit' : 'add'\">\n {{ isEditMode() ? 'Update' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-2\">\n <h3 class=\"tw-text-xs tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-xs tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n\n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Template Renderers -->\n<ng-template #typeDetailsRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col\">\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygmt_title || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate tw-max-w-xs\" title=\"{{ row.sygmt_desc || 'No description' }}\">{{\n row.sygmt_desc || 'No description' }}</div>\n </div>\n</ng-template>\n\n<ng-template #typeStatusRendererTemplate let-row=\"row\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\n [class.tw-bg-green-100]=\"row.sygmt_isactive\" [class.tw-text-green-800]=\"row.sygmt_isactive\"\n [class.tw-bg-red-100]=\"!row.sygmt_isactive\" [class.tw-text-red-800]=\"!row.sygmt_isactive\">\n {{ row.sygmt_isactive ? 'Active' : 'Inactive' }}\n </span>\n</ng-template>\n\n\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" [config]=\"getDropdownConfig()\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>" }]
12766
12822
  }] });
12767
12823
 
12824
+ var generalMasterType_component = /*#__PURE__*/Object.freeze({
12825
+ __proto__: null,
12826
+ CideCoreGeneralMasterTypeComponent: CideCoreGeneralMasterTypeComponent
12827
+ });
12828
+
12768
12829
  /**
12769
12830
  * General Master Component
12770
12831
  *
@@ -13494,6 +13555,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
13494
13555
  ], template: "<!-- General Master with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_general_master' }\">\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Master' : 'Quick Add Master' }}</h6>\n </div>\n \n <!-- Parent Master Info Box -->\n @if (masterForm.get('sygms_id_sygms')?.value) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-blue-800\">Adding Child</span>\n <span class=\"tw-text-xs tw-text-blue-700\">\n Parent: <span class=\"tw-font-medium\">{{ getParentMasterDisplay() }}</span>\n </span>\n <button \n type=\"button\"\n (click)=\"clearParentMaster()\"\n class=\"tw-text-sm tw-text-blue-600 hover:tw-text-blue-800 hover:tw-bg-blue-100 tw-rounded tw-px-1\">\n \u00D7\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"masterForm\" class=\"tw-space-y-2\">\n \n <!-- First Row - Basic fields -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\n <!-- Master Code -->\n <div class=\"lg:tw-col-span-1\">\n <cide-ele-input \n formControlName=\"sygms_code\" \n label=\"Master Code*\" \n placeholder=\"Enter master code\"\n size=\"sm\"\n [required]=\"true\" \n [maxlength]=\"40\">\n </cide-ele-input>\n </div>\n \n <!-- Master Title -->\n <div class=\"lg:tw-col-span-3\">\n <cide-ele-input \n formControlName=\"sygms_title\" \n label=\"Master Title*\" \n placeholder=\"Enter master title\"\n size=\"sm\"\n [required]=\"true\" \n [maxlength]=\"150\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status -->\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\n <cide-ele-input \n formControlName=\"sygms_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Third Row - JSON Configuration and Description/Save side by side -->\n <div class=\"tw-flex tw-gap-4\">\n <!-- JSON Configuration (60% width) -->\n <div class=\"tw-w-3/5\">\n <cide-ele-json-editor \n formControlName=\"sygms_configuration\" \n label=\"Configuration*\" \n size=\"sm\"\n [required]=\"true\">\n </cide-ele-json-editor>\n </div>\n \n <!-- Description and Save Button (40% width) -->\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\n <!-- Description -->\n <div class=\"tw-flex-1\">\n <cide-ele-textarea \n formControlName=\"sygms_desc\" \n label=\"Description\" \n placeholder=\"Enter description\"\n size=\"sm\"\n [maxlength]=\"500\" \n [rows]=\"4\">\n </cide-ele-textarea>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\" \n (click)=\"resetForm()\"\n [disabled]=\"loading()\"\n class=\"tw-px-4 tw-py-2\">\n Reset\n </button>\n @if (isEditMode()) {\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\" \n (click)=\"cancelForm()\"\n [disabled]=\"loading()\"\n class=\"tw-px-4 tw-py-2\">\n Cancel\n </button>\n }\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n (click)=\"saveMaster()\"\n [disabled]=\"!masterForm.valid || loading()\"\n class=\"tw-px-4 tw-py-2\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-py-2 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-2 sm:tw-space-y-0\">\n \n <!-- Title and Back Button -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (typeTitle()) {\n <div>\n <p class=\"tw-text-xs tw-text-gray-500 tw-m-0\">Type: {{ typeTitle() }}</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Actions can be added here in the future -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Template Renderers -->\n<ng-template #masterDetailsRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-w-full\">\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygms_title || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.sygms_desc || 'No description' }}</div>\n </div>\n</ng-template>\n\n<ng-template #masterStatusRendererTemplate let-row=\"row\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\n [class.tw-bg-green-100]=\"row.sygms_isactive\"\n [class.tw-text-green-800]=\"row.sygms_isactive\"\n [class.tw-bg-red-100]=\"!row.sygms_isactive\"\n [class.tw-text-red-800]=\"!row.sygms_isactive\">\n {{ row.sygms_isactive ? 'Active' : 'Inactive' }}\n </span>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n [config]=\"getDropdownConfig()\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n</cide-lyt-shared-wrapper> " }]
13495
13556
  }] });
13496
13557
 
13558
+ var generalMaster_component = /*#__PURE__*/Object.freeze({
13559
+ __proto__: null,
13560
+ CideCoreGeneralMasterComponent: CideCoreGeneralMasterComponent
13561
+ });
13562
+
13497
13563
  // Components
13498
13564
 
13499
13565
  /**
@@ -14901,6 +14967,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
14901
14967
  ], template: "<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_entity_form' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n <!-- Modern Entity Create Form -->\n <div class=\"tw-min-h-screen\">\n <div class=\"tw-mx-auto\">\n\n <form [formGroup]=\"entityForm\" [class.tw-opacity-60]=\"loading()\" [class.tw-pointer-events-none]=\"loading()\"\n (ngSubmit)=\"onSubmit()\">\n\n <!-- Breadcrumb is now rendered by shared wrapper; inline breadcrumb removed -->\n\n <!-- Basic Information Section -->\n <div class=\"tw-p-2 tw-pb-0\">\n <div class=\"tw-space-y-6\">\n <!-- Top Section: Image on Right, Form Fields on Left -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\n <!-- Left Side: Form Fields -->\n <div class=\"tw-space-y-6\">\n <!-- Institution Name, Entity Type & Active Status -->\n <div\n class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_250px_120px] tw-gap-4 tw-items-end\">\n <cide-ele-input id=\"syen_name\" type=\"text\" label=\"Institution Name\" formControlName=\"syen_name\"\n placeholder=\"Enter institution name\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-select label=\"Entity Type\" labelPlacement=\"floating\" [options]=\"entityTypes()\"\n formControlName=\"syen_entity_type_sygms\" placeholder=\"Select institution type\" size=\"sm\">\n </cide-ele-select>\n\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-1 tw-h-full\">\n <cide-ele-input type=\"checkbox\" formControlName=\"syen_isactive\" size=\"sm\" label=\"Is Active\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Parent Entity ID (for child entities) -->\n @if (parentEntityId()) {\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <cide-ele-input label=\"Parent Entity ID\" formControlName=\"syen_id_syen\" \n placeholder=\"Parent entity ID\" size=\"sm\">\n </cide-ele-input>\n \n <div class=\"tw-flex tw-items-center tw-gap-2 tw-text-sm tw-text-gray-600\">\n <cide-ele-icon size=\"xs\">info</cide-ele-icon>\n <span>Creating child entity under: <strong>{{ parentEntityName() }}</strong></span>\n </div>\n </div>\n }\n\n <!-- UDISE, Affiliation & Institution Code -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\n <cide-ele-input label=\"UDISE Number\" formControlName=\"syen_udise_no\" placeholder=\"Enter UDISE number\"\n size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Affiliation Number\" formControlName=\"syen_affiliation_no\"\n placeholder=\"Enter affiliation number\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Institution Code\" formControlName=\"syen_entity_code\"\n placeholder=\"Enter unique code\" size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Right Side: Entity Image Upload -->\n <div class=\"tw-flex tw-items-start tw-justify-center tw-pt-0\">\n <cide-ele-file-input id=\"entity_image_upload\" formControlName=\"syen_photo_id_cyfm\" accept=\"image/*\"\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\n previewHeight=\"120px\" [required]=\"true\" placeholderText=\"Upload Logo\" placeholderIcon=\"cloud_upload\"\n [autoUpload]=\"true\" [uploadData]=\"getUploadData()\" (uploadSuccess)=\"onImageUploadSuccess($event)\"\n (uploadError)=\"onImageUploadError($event)\" (uploadProgressChange)=\"onImageUploadProgress($event)\">\n </cide-ele-file-input>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"tw-px-4 !tw-mt-0\">\n <cide-ele-tab [tabs]=\"entityTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out !tw-mt-2\" [class.tw-opacity-60]=\"loading()\"\n [class.tw-pointer-events-none]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('corporate') {\n <div class=\"tw-p-4\">\n <div class=\"tw-space-y-6\">\n <!-- Corporate Address - Full Width -->\n <div class=\"tw-w-full\">\n <cide-ele-textarea label=\"Corporate Address\" formControlName=\"syen_corporate_address\"\n placeholder=\"Enter complete corporate address\" [rows]=\"4\">\n </cide-ele-textarea>\n </div>\n\n <!-- Postal Code, City, State & Country - Four Columns -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\n formControlName=\"syen_corporate_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\n </cide-ele-select>\n\n <cide-ele-input label=\"City\" formControlName=\"syen_corporate_city_sypin\" placeholder=\"Enter city name\">\n </cide-ele-input>\n\n <cide-ele-input label=\"State\" formControlName=\"syen_corporate_state_sypin\"\n placeholder=\"Enter state name\">\n </cide-ele-input>\n\n <cide-ele-select label=\"Country\" [options]=\"corporateCountries()\"\n formControlName=\"syen_corporate_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\n (searchChange)=\"onCorporateCountrySearch($event)\" [loading]=\"corporateCountriesLoading()\" size=\"sm\">\n </cide-ele-select>\n </div>\n\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\n formControlName=\"syen_corporate_contact_person_user\" placeholder=\"Select contact person\"\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\n </cide-ele-select>\n\n <cide-ele-input label=\"Phone\" formControlName=\"syen_corporate_phone\" type=\"tel\"\n placeholder=\"Enter phone number\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Email\" formControlName=\"syen_corporate_email\" type=\"email\"\n placeholder=\"Enter email address\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Fax\" formControlName=\"syen_corporate_fax\" placeholder=\"Enter fax number\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n </div>\n }\n\n @case ('contact') {\n <div class=\"tw-p-4\">\n <div class=\"tw-space-y-6\">\n <!-- Currency Selection -->\n <div class=\"tw-w-full\">\n <cide-ele-select label=\"Currency\" [options]=\"currencies()\" formControlName=\"syen_currency_sycr\"\n placeholder=\"Select currency\">\n </cide-ele-select>\n </div>\n\n <!-- Alternate Phone & Website - Two Columns -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"syen_corporate_phone_alt\" type=\"tel\"\n placeholder=\"Enter alternate phone number\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Website URL\" formControlName=\"syen_website\" type=\"url\"\n placeholder=\"https://example.com\" autocomplete=\"url\" leadingIcon=\"language\"\n helperText=\"Enter a valid website URL starting with http:// or https://\">\n </cide-ele-input>\n </div>\n\n <!-- Alternate Email - Full Width -->\n <div class=\"tw-w-full\">\n <cide-ele-input label=\"Alternate Email\" formControlName=\"syen_corporate_email_alt\" type=\"email\"\n placeholder=\"Enter alternate email address\">\n </cide-ele-input>\n </div>\n </div>\n </div>\n }\n\n @case ('registered') {\n <div class=\"tw-p-4\">\n <div class=\"tw-space-y-6\">\n <!-- Registered Address - Full Width -->\n <div class=\"tw-w-full\">\n <cide-ele-textarea label=\"Registered Address\" formControlName=\"syen_registered_address\"\n placeholder=\"Enter complete registered address\" [rows]=\"4\">\n </cide-ele-textarea>\n </div>\n\n <!-- Postal Code, City, State & Country - Four Columns -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\n formControlName=\"syen_registered_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\n </cide-ele-select>\n\n <cide-ele-input label=\"City\" formControlName=\"syen_registered_city_sypin\" placeholder=\"Enter city name\">\n </cide-ele-input>\n\n <cide-ele-input label=\"State\" formControlName=\"syen_registered_state_sypin\"\n placeholder=\"Enter state name\">\n </cide-ele-input>\n\n <cide-ele-select label=\"Country\" [options]=\"registeredCountries()\"\n formControlName=\"syen_registered_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\n (searchChange)=\"onRegisteredCountrySearch($event)\" [loading]=\"registeredCountriesLoading()\" size=\"sm\">\n </cide-ele-select>\n </div>\n\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\n formControlName=\"syen_registered_contact_person_user\" placeholder=\"Select contact person\"\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\n </cide-ele-select>\n\n <cide-ele-input label=\"Phone\" formControlName=\"syen_registered_phone\" type=\"tel\"\n placeholder=\"Enter phone number\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Email\" formControlName=\"syen_registered_email\" type=\"email\"\n placeholder=\"Enter email address\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Fax\" formControlName=\"syen_registered_fax\" placeholder=\"Enter fax number\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n </div>\n }\n\n @case ('user-mapping') {\n <div class=\"tw-p-2\">\n <div class=\"tw-space-y-4\">\n <!-- Add User Mapping Form -->\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">person_add</cide-ele-icon>\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Add User to Entity</h3>\n </div>\n\n <form [formGroup]=\"userMappingForm\" (ngSubmit)=\"addUserMapping()\">\n <div class=\"tw-flex tw-items-end tw-gap-3\">\n <div class=\"tw-flex-1\">\n <cide-ele-select label=\"Select User\" [options]=\"availableUsers()\" formControlName=\"syenm_id_user\"\n placeholder=\"Choose user to add to entity\" [searchable]=\"true\"\n [loading]=\"availableUsersLoading()\" size=\"md\">\n </cide-ele-select>\n </div>\n\n <!-- Add Button -->\n <div class=\"tw-flex tw-items-end\">\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\"\n [disabled]=\"userMappingForm.invalid || availableUsersLoading()\"\n class=\"tw-shadow-sm tw-h-8 tw-px-3\">\n <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\n <span class=\"tw-text-xs\">Add</span>\n </button>\n </div>\n </div>\n </form>\n </div>\n\n <!-- User Mappings Grid -->\n <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\n @if (userEntityMappingsLoading()) {\n <div class=\"tw-p-4 tw-text-center\">\n <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\n <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\n <span class=\"tw-text-xs\">Loading...</span>\n </div>\n </div>\n } @else if (userEntityMappings().length === 0) {\n <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\n <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">people_outline</cide-ele-icon>\n <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No users mapped yet</p>\n <p class=\"tw-text-xs tw-text-gray-400\">Add users above to grant them access to this entity</p>\n </div>\n } @else {\n <cide-ele-data-grid [config]=\"userMappingsGridConfig\" [templateRenderers]=\"getUserMappingsTemplateRenderers()\">\n\n <!-- Custom user cell template -->\n <ng-template #userCell let-row=\"row\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <div\n class=\"tw-w-6 tw-h-6 tw-bg-gradient-to-br tw-from-blue-100 tw-to-indigo-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-shadow-sm\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xs\">person</cide-ele-icon>\n </div>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-font-medium tw-text-gray-900 tw-text-xs\">\n {{ row?._displayUserName }}\n </span>\n </div>\n </div>\n </ng-template>\n\n <!-- Custom actions cell template -->\n <ng-template #actionsCell let-row=\"row\">\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\n <button\n (click)=\"updateUserMapping(row._id!, { syenm_isactive: !row.syenm_isactive })\"\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300\"\n [class.tw-bg-green-100]=\"row.syenm_isactive\"\n [class.tw-text-green-700]=\"row.syenm_isactive\"\n [class.tw-bg-gray-100]=\"!row.syenm_isactive\"\n [class.tw-text-gray-600]=\"!row.syenm_isactive\"\n [title]=\"row.syenm_isactive ? 'Deactivate' : 'Activate'\">\n <cide-ele-icon class=\"tw-text-sm\">\n {{ row.syenm_isactive ? 'pause' : 'play_arrow' }}\n </cide-ele-icon>\n </button>\n\n <button (click)=\"removeUserMapping(row._id!)\"\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-bg-red-100 tw-text-red-600 hover:tw-bg-red-200 tw-transition-colors tw-border tw-border-transparent hover:tw-border-red-300\"\n title=\"Remove User\">\n <cide-ele-icon class=\"tw-text-sm\">delete</cide-ele-icon>\n </button>\n </div>\n </ng-template>\n </cide-ele-data-grid>\n }\n </div>\n </div>\n </div>\n }\n\n }\n\n <!-- Form Actions -->\n <div class=\"tw-p-4\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-3\">\n <!-- Error Message (Left Side) -->\n <cide-form-field-error [formGroup]=\"entityForm\"></cide-form-field-error>\n\n <!-- Action Buttons (Right Side) -->\n <div class=\"tw-flex tw-gap-3\">\n <button cideEleButton type=\"button\" variant=\"outline\" size=\"md\" (click)=\"onBack()\"\n [disabled]=\"loading()\">\n <cide-ele-icon>arrow_back</cide-ele-icon>\n Back\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"md\" (click)=\"onReset()\"\n [disabled]=\"loading()\">\n <cide-ele-icon>refresh</cide-ele-icon>\n Reset Form\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"md\"\n [disabled]=\"loading() || entityForm.invalid\" [loading]=\"loading()\">\n <cide-ele-icon>{{ isEditMode() ? 'save' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update Entity' : 'Create Entity' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n</cide-lyt-shared-wrapper>" }]
14902
14968
  }], ctorParameters: () => [] });
14903
14969
 
14970
+ var entityCreate_component = /*#__PURE__*/Object.freeze({
14971
+ __proto__: null,
14972
+ CideCoreEntityCreateComponent: CideCoreEntityCreateComponent
14973
+ });
14974
+
14904
14975
  class CideCoreEntityListComponent {
14905
14976
  // Modern dependency injection using inject()
14906
14977
  router = inject(Router); // Made public for template access
@@ -15482,6 +15553,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
15482
15553
  ], 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-sm tw-font-semibold tw-text-gray-900\">Entity Management</h5>\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 <!-- Org Structure Button -->\n <button\n cideEleButton\n variant=\"secondary\"\n size=\"sm\"\n (click)=\"onOrgStructure()\"\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\">account_tree</cide-ele-icon>\n Org Structure\n </button>\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 [templateRenderers]=\"templateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n\n</div>\n\n<!-- Custom Renderer Templates -->\n\n<!-- Entity Details Renderer Template -->\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\n<ng-template #entityDetailsRenderer let-value=\"value\" let-entity=\"row\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <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\">\n <span class=\"tw-text-blue-600 tw-font-semibold tw-text-sm\">\n {{ (entity.syen_entity_code || 'NA').substring(0, 2).toUpperCase() }}\n </span>\n </div>\n <div class=\"tw-flex-1 tw-min-w-0\">\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"entity.syen_name || 'Unknown Entity'\">\n {{ entity.syen_name || 'Unknown Entity' }}\n </p>\n <p class=\"tw-text-sm tw-text-gray-500 tw-truncate\" [title]=\"entity.syen_entity_code || 'N/A'\">\n Code: {{ entity.syen_entity_code || 'N/A' }}\n </p>\n </div>\n </div>\n</ng-template>\n\n\n<!-- Entity Type Renderer Template -->\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\n<ng-template #entityTypeRenderer let-value=\"value\" let-entity=\"row\">\n <div class=\"tw-flex tw-flex-col tw-items-center tw-space-y-1\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"getEntityTypeName(entity)\">\n {{ getEntityTypeName(entity) }}\n </span>\n </div>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\n<ng-template #actionsDropdownRenderer let-value=\"value\" let-entity=\"row\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(entity)\"\n [config]=\"getDropdownConfig()\"\n (itemClick)=\"onDropdownItemClick($event, entity)\">\n </cide-ele-dropdown>\n</ng-template>\n\n", styles: [":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"] }]
15483
15554
  }] });
15484
15555
 
15556
+ var entityList_component = /*#__PURE__*/Object.freeze({
15557
+ __proto__: null,
15558
+ CideCoreEntityListComponent: CideCoreEntityListComponent
15559
+ });
15560
+
15485
15561
  class CideCoreOrgStructureComponent {
15486
15562
  entityService = inject(CideCoreEntityManagementService);
15487
15563
  router = inject(Router);
@@ -15623,6 +15699,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
15623
15699
  ], template: "<!-- Organization Structure with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'org_structure' }\">\n \n <!-- Back Button using standard content projection -->\n <div breadcrumb-actions>\n <button\n cideEleButton\n variant=\"outline\"\n size=\"xs\"\n (click)=\"onBack()\"\n class=\"tw-whitespace-nowrap tw-flex tw-items-center\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">arrow_back</cide-ele-icon>\n Back to Entities\n </button>\n </div>\n\n <!-- Content Area -->\n <div class=\"tw-flex-1 tw-overflow-hidden\">\n @if (loading()) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-py-12\">\n <cide-ele-spinner size=\"md\"></cide-ele-spinner>\n <span class=\"tw-ml-3 tw-text-gray-600 tw-text-sm\">Loading organization structure...</span>\n </div>\n } @else if (error()) {\n <div class=\"tw-text-center tw-py-12\">\n <div class=\"tw-w-16 tw-h-16 tw-bg-red-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-mx-auto tw-mb-4\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-red-500\">error</cide-ele-icon>\n </div>\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-2\">Error Loading Structure</h3>\n <p class=\"tw-text-gray-600 tw-mb-4\">{{ error() }}</p>\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"loadOrgStructure()\">\n <cide-ele-icon>refresh</cide-ele-icon>\n Try Again\n </button>\n </div>\n } @else if (orgStructure().length === 0) {\n <div class=\"tw-text-center tw-py-12\">\n <div class=\"tw-w-16 tw-h-16 tw-bg-gray-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-mx-auto tw-mb-4\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-gray-400\">account_tree</cide-ele-icon>\n </div>\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-2\">No Entities Found</h3>\n <p class=\"tw-text-gray-600 tw-mb-4\">No entities are available to display in the organization structure.</p>\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"router.navigate(['/control-panel/entity-list'])\">\n <cide-ele-icon>add</cide-ele-icon>\n Create First Entity\n </button>\n </div>\n } @else {\n <!-- Organization Chart Container -->\n <div class=\"tw-relative tw-min-h-screen tw-bg-gray-50 tw-py-8\">\n <!-- Background Grid Pattern -->\n <div class=\"tw-absolute tw-inset-0 tw-opacity-30\" style=\"background-image: radial-gradient(circle, #e5e7eb 1px, transparent 1px); background-size: 20px 20px;\"></div>\n \n <!-- Chart Content -->\n <div class=\"tw-relative tw-z-10\">\n @for (rootNode of orgStructure(); track rootNode._id) {\n <div class=\"tw-flex tw-flex-col tw-items-center tw-mb-12\">\n <!-- Render node recursively with unlimited depth -->\n <ng-container [ngTemplateOutlet]=\"entityNodeTemplate\" [ngTemplateOutletContext]=\"{ $implicit: rootNode, level: 0 }\"></ng-container>\n </div>\n }\n </div>\n </div>\n }\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Entity Node Template (Recursive) -->\n<ng-template #entityNodeTemplate let-node let-level=\"level\">\n <div class=\"tw-flex tw-flex-col tw-items-center\">\n \n <!-- Entity Card -->\n <div class=\"tw-bg-white tw-shadow-lg tw-rounded-lg tw-p-4 tw-min-w-64 tw-max-w-72 tw-border-t-4 tw-transition-shadow tw-cursor-pointer hover:tw-shadow-xl\"\n [class.level-0]=\"level === 0\"\n [class.level-1]=\"level === 1\"\n [class.level-2]=\"level === 2\"\n [class.level-3]=\"level === 3\"\n [class.level-4]=\"level === 4\"\n [class.level-5]=\"level === 5\"\n (click)=\"viewEntity(node._id)\">\n \n <!-- Card Content -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <!-- Avatar -->\n <div class=\"tw-w-12 tw-h-12 tw-bg-purple-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-flex-shrink-0\">\n <cide-ele-icon class=\"tw-w-6 tw-h-6 tw-text-purple-600\">person</cide-ele-icon>\n </div>\n \n <!-- Entity Info -->\n <div class=\"tw-flex-1 tw-min-w-0\">\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-whitespace-nowrap tw-overflow-hidden tw-text-ellipsis\">{{ node.syen_name }}</h3>\n <p class=\"tw-text-xs tw-text-gray-600 tw-mt-1\">{{ node.syen_entity_code }}</p>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">{{ node.syen_entity_type_sygms }}</p>\n </div>\n </div>\n \n <!-- Action Icons -->\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mt-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <!-- Phone Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">phone</cide-ele-icon>\n </button>\n \n <!-- Email Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">email</cide-ele-icon>\n </button>\n \n <!-- LinkedIn Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-blue-100 tw-flex tw-items-center tw-justify-center tw-text-blue-600 hover:tw-bg-blue-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">attach_money</cide-ele-icon>\n </button>\n \n <!-- Document Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">description</cide-ele-icon>\n </button>\n \n <!-- More Options Icon -->\n <button class=\"tw-w-6 tw-h-6 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-600 hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon class=\"tw-text-xs\">more_horiz</cide-ele-icon>\n </button>\n </div>\n \n <!-- Status Badge -->\n <div class=\"tw-flex-shrink-0\">\n @if (node.syen_isactive) {\n <div class=\"tw-inline-flex tw-items-center tw-px-1.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-green-500 tw-rounded-full tw-mr-1\"></div>\n Active\n </div>\n } @else {\n <div class=\"tw-inline-flex tw-items-center tw-px-1.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-bg-red-500 tw-rounded-full tw-mr-1\"></div>\n Inactive\n </div>\n }\n </div>\n </div>\n </div>\n \n <!-- Children Entities (Recursive) -->\n @if (node.children && node.children.length > 0) {\n <!-- Ultra-Compact Connection Lines -->\n <div class=\"tw-relative tw-flex tw-flex-col tw-items-center tw-mt-2\">\n <!-- Minimal connection dot -->\n <div class=\"tw-absolute tw-left-1/2 tw-transform tw--translate-x-1/2\" style=\"top: -8px;\">\n <div class=\"tw-w-2 tw-h-2 tw-bg-purple-600 tw-rounded-full tw-border tw-border-white\"></div>\n </div>\n \n <!-- Ultra-Compact SVG Lines -->\n <div class=\"tw-relative tw-w-full\" style=\"height: 30px;\">\n @if (node.children && node.children.length === 1) {\n <!-- Single child - minimal line -->\n <svg class=\"tw-absolute tw-left-1/2 connection-line-compact\" style=\"transform: translateX(-50%); width: 2px; height: 30px; top: 0;\">\n <line x1=\"1\" y1=\"0\" x2=\"1\" y2=\"30\" stroke=\"#9333ea\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n </svg>\n }\n @else if (node.children && node.children.length > 1) {\n <!-- Multiple children - minimal design -->\n <svg class=\"tw-absolute tw-left-1/2 connection-line-compact\" [attr.style]=\"'transform: translateX(-50%); width: ' + ((node.children.length - 1) * 336 + 256) + 'px; height: 30px; top: 0;'\">\n <!-- Vertical line -->\n <line [attr.x1]=\"((node.children.length - 1) * 336 + 256) / 2\" \n y1=\"0\" \n [attr.x2]=\"((node.children.length - 1) * 336 + 256) / 2\" \n y2=\"12\" \n stroke=\"#9333ea\" \n stroke-width=\"2\" \n stroke-linecap=\"round\"/>\n \n <!-- Horizontal line -->\n <path [attr.d]=\"'M 128 15 L ' + ((node.children.length - 1) * 336 + 128) + ' 15'\" \n stroke=\"#9333ea\" \n stroke-width=\"2\" \n stroke-linecap=\"round\"/>\n \n <!-- Vertical lines to children -->\n @for (child of node.children; track child._id; let i = $index) {\n <line [attr.x1]=\"(i * 336) + 128\" \n y1=\"15\" \n [attr.x2]=\"(i * 336) + 128\" \n y2=\"28\" \n stroke=\"#9333ea\" \n stroke-width=\"2\" \n stroke-linecap=\"round\"/>\n <!-- Tiny dot -->\n <circle [attr.cx]=\"(i * 336) + 128\" cy=\"28\" r=\"2.5\" fill=\"#9333ea\" stroke=\"#fff\" stroke-width=\"1\"/>\n }\n </svg>\n }\n </div>\n \n <!-- Children -->\n <div class=\"tw-flex tw-justify-center tw-gap-20\">\n @for (child of node.children; track child._id) {\n <div class=\"tw-flex tw-flex-col tw-items-center\">\n <!-- Child node -->\n <ng-container [ngTemplateOutlet]=\"entityNodeTemplate\" [ngTemplateOutletContext]=\"{ $implicit: child, level: level + 1 }\"></ng-container>\n </div>\n }\n </div>\n </div>\n }\n </div>\n</ng-template>", styles: [":host{height:100%;display:flex;flex-direction:column}.tw-overflow-y-auto::-webkit-scrollbar{width:6px}.tw-overflow-y-auto::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.tw-overflow-y-auto::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.tw-overflow-y-auto::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tw-transition-shadow{transition:box-shadow .2s ease-in-out}.tw-shadow-lg:hover{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;transform:translateY(-2px);transition:all .2s ease-in-out}.tw-bg-purple-300,.tw-bg-purple-400{transition:all .3s ease-in-out}.connection-line-compact{display:block;overflow:visible}.connection-line-compact path,.connection-line-compact line{stroke-linecap:round;stroke-linejoin:round;transition:stroke-width .2s ease}.connection-line-compact:hover path,.connection-line-compact:hover line{stroke-width:3}.connection-line-compact circle{transition:all .2s ease}.connection-line-compact circle:hover{filter:drop-shadow(0 2px 4px rgba(147,51,234,.4))}.level-0{border-color:#fb923c!important}.level-1{border-color:#60a5fa!important}.level-2{border-color:#a78bfa!important}.level-3{border-color:#4ade80!important}.level-4{border-color:#818cf8!important}.level-5{border-color:#f472b6!important}@media (max-width: 1200px){.tw-max-w-7xl{max-width:100%}.tw-gap-6{gap:1rem}.tw-min-w-64{min-width:14rem}.tw-max-w-72{max-width:16rem}}@media (max-width: 768px){.tw-min-w-64{min-width:12rem}.tw-max-w-72{max-width:14rem}.tw-max-w-7xl{max-width:100%}.tw-gap-6{gap:.75rem}.tw-p-4{padding:.75rem}.tw-mb-4{margin-bottom:.75rem}.tw-space-x-3{gap:.5rem}.tw-space-x-2{gap:.375rem}.tw-w-12{width:2.5rem}.tw-h-12{height:2.5rem}}@media (max-width: 480px){.tw-min-w-72{min-width:12rem}.tw-max-w-80{max-width:14rem}.tw-p-4{padding:.5rem}.tw-space-x-3{gap:.375rem}.tw-space-x-2{gap:.25rem}.tw-mb-3{margin-bottom:.5rem}.tw-w-12{width:2rem}.tw-h-12{height:2rem}.tw-w-8{width:1.5rem}.tw-h-8{height:1.5rem}}@media print{.tw-bg-gray-50{background:#fff!important}.tw-shadow-lg{box-shadow:none!important;border:1px solid #e5e7eb!important}.tw-bg-purple-300{background:#6b7280!important}.tw-border-purple-300{border-color:#6b7280!important}}\n"] }]
15624
15700
  }] });
15625
15701
 
15702
+ var orgStructure_component = /*#__PURE__*/Object.freeze({
15703
+ __proto__: null,
15704
+ CideCoreOrgStructureComponent: CideCoreOrgStructureComponent
15705
+ });
15706
+
15626
15707
  // Entity Management Components
15627
15708
 
15628
15709
  /*