@codex-ts/core-lib 1.0.13 → 1.0.15

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,26 +1,25 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Inject, Injectable, Component, NgModule, Directive, Input, ViewChild, Pipe } from '@angular/core';
3
- import { map, retry, timeout, catchError, take, finalize as finalize$1, switchMap, takeUntil, mergeMap, tap, debounceTime, distinctUntilChanged } from 'rxjs/operators';
4
- import { BehaviorSubject, finalize, Observable, forkJoin, throwError, of, isObservable, Subject, take as take$1, tap as tap$1, map as map$1, catchError as catchError$1, takeUntil as takeUntil$1, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1 } from 'rxjs';
2
+ import { InjectionToken, inject, PLATFORM_ID, signal, computed, Injectable, importProvidersFrom, Component, NgModule, Directive, Input, ViewChild, Pipe } from '@angular/core';
5
3
  import * as i1 from '@angular/common/http';
6
- import { HttpParams } from '@angular/common/http';
7
- import * as i1$1 from '@angular/router';
8
- import * as i2 from 'primeng/api';
9
- import * as i1$2 from '@angular/forms';
4
+ import { HttpClient, HttpClientModule, HttpParams } from '@angular/common/http';
5
+ import * as i1$2 from '@angular/common';
6
+ import { isPlatformBrowser, CommonModule, formatDate } from '@angular/common';
7
+ import { BehaviorSubject, finalize, Observable, forkJoin, throwError, of, isObservable, Subject, take as take$1, tap as tap$1, map as map$1, catchError as catchError$1, takeUntil as takeUntil$1, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1 } from 'rxjs';
8
+ import { retry, timeout, catchError, take, map, finalize as finalize$1, switchMap, takeUntil, mergeMap, tap, debounceTime, distinctUntilChanged } from 'rxjs/operators';
9
+ import * as i4 from 'primeng/api';
10
+ import * as i1$1 from '@angular/forms';
10
11
  import { FormGroup, ReactiveFormsModule } from '@angular/forms';
11
- import * as i2$1 from '@ngx-formly/core';
12
+ import * as i2 from '@ngx-formly/core';
12
13
  import { FieldType, FormlyModule, FieldWrapper } from '@ngx-formly/core';
13
- import * as i1$3 from '@angular/common';
14
- import { CommonModule, formatDate } from '@angular/common';
15
14
  import * as i3 from 'primeng/inputtext';
16
15
  import { InputTextModule } from 'primeng/inputtext';
17
- import * as i4 from 'primeng/select';
16
+ import * as i4$1 from 'primeng/select';
18
17
  import { SelectModule } from 'primeng/select';
19
- import * as i4$1 from 'primeng/radiobutton';
18
+ import * as i4$2 from 'primeng/radiobutton';
20
19
  import { RadioButtonModule } from 'primeng/radiobutton';
21
20
  import * as i3$1 from 'primeng/inputnumber';
22
21
  import { InputNumberModule } from 'primeng/inputnumber';
23
- import * as i4$2 from 'primeng/multiselect';
22
+ import * as i4$3 from 'primeng/multiselect';
24
23
  import { MultiSelectModule } from 'primeng/multiselect';
25
24
  import * as i3$2 from 'primeng/datepicker';
26
25
  import { DatePickerModule } from 'primeng/datepicker';
@@ -28,8 +27,9 @@ import * as i3$3 from 'primeng/checkbox';
28
27
  import { CheckboxModule } from 'primeng/checkbox';
29
28
  import * as i3$4 from 'primeng/inputtextarea';
30
29
  import { Textarea } from 'primeng/inputtextarea';
31
- import * as i2$2 from 'primeng/tooltip';
30
+ import * as i2$1 from 'primeng/tooltip';
32
31
  import { TooltipModule } from 'primeng/tooltip';
32
+ import * as i1$3 from '@angular/router';
33
33
 
34
34
  class AppConstants {
35
35
  static FORM = {
@@ -137,23 +137,46 @@ var TaskRole;
137
137
  const KEYCLOAK_CONFIG = new InjectionToken('KEYCLOAK_CONFIG');
138
138
 
139
139
  class KeycloakService {
140
- config;
141
- http;
142
- keycloak;
143
- isAuthenticated$ = new BehaviorSubject(false);
144
- userProfile$ = new BehaviorSubject(null);
145
- constructor(config, http) {
146
- this.config = config;
147
- this.http = http;
140
+ http = inject(HttpClient);
141
+ platformId = inject(PLATFORM_ID);
142
+ config = inject(KEYCLOAK_CONFIG);
143
+ isBrowser = isPlatformBrowser(this.platformId);
144
+ #keycloakInstance = signal(null);
145
+ #isAuthenticated = signal(false);
146
+ #userProfile = signal(null);
147
+ isAuthenticated$ = computed(() => this.#isAuthenticated());
148
+ userProfile$ = computed(() => this.#userProfile());
149
+ loadKeycloakScript() {
150
+ if (!this.isBrowser)
151
+ return Promise.resolve();
152
+ if (typeof Keycloak !== 'undefined')
153
+ return Promise.resolve();
154
+ return new Promise((resolve, reject) => {
155
+ const script = document.createElement('script');
156
+ script.src = `${this.config.authServerUrl}/js/keycloak.js`;
157
+ script.async = true;
158
+ script.onload = () => resolve();
159
+ script.onerror = () => reject(new Error('Failed to load Keycloak script'));
160
+ document.head.appendChild(script);
161
+ });
162
+ }
163
+ getSilentCheckUrl() {
164
+ if (!this.isBrowser)
165
+ return '';
166
+ return `${window.location.origin}/node_modules/@codex-ts/core-lib/assets/keycloak/silent-check-sso.html`;
148
167
  }
149
168
  async initialize() {
169
+ if (!this.isBrowser)
170
+ return false;
150
171
  try {
151
- this.keycloak = new Keycloak(this.config);
152
- const authenticated = await this.keycloak.init({
172
+ await this.loadKeycloakScript();
173
+ const keycloak = new Keycloak(this.config);
174
+ this.#keycloakInstance.set(keycloak);
175
+ const authenticated = await keycloak.init({
153
176
  onLoad: 'check-sso',
154
- silentCheckSsoRedirectUri: this.config.silentCheckSsoRedirectUri
177
+ silentCheckSsoRedirectUri: this.getSilentCheckUrl()
155
178
  });
156
- this.isAuthenticated$.next(authenticated);
179
+ this.#isAuthenticated.set(authenticated);
157
180
  if (authenticated) {
158
181
  await this.loadUserProfile();
159
182
  }
@@ -169,18 +192,15 @@ class KeycloakService {
169
192
  ...this.config.loginOptions,
170
193
  ...options
171
194
  };
172
- return this.keycloak.login(loginOptions);
195
+ return this.#keycloakInstance()?.login(loginOptions);
173
196
  }
174
197
  logout() {
175
- return this.keycloak.logout();
176
- }
177
- isLoggedIn() {
178
- return this.isAuthenticated$.asObservable();
198
+ return this.#keycloakInstance()?.logout();
179
199
  }
180
200
  async getToken() {
181
201
  try {
182
202
  await this.updateToken(this.config.tokenValidityInSeconds || 60);
183
- return this.keycloak.token;
203
+ return this.#keycloakInstance()?.token;
184
204
  }
185
205
  catch (error) {
186
206
  console.error('Failed to get token:', error);
@@ -188,24 +208,23 @@ class KeycloakService {
188
208
  }
189
209
  }
190
210
  getRoles() {
191
- if (!this.keycloak?.realmAccess?.roles) {
211
+ const keycloak = this.#keycloakInstance();
212
+ if (!keycloak?.realmAccess?.roles) {
192
213
  return [];
193
214
  }
194
- return this.keycloak.realmAccess.roles;
215
+ return keycloak.realmAccess.roles;
195
216
  }
196
217
  hasRole(role) {
197
218
  return this.getRoles().includes(role);
198
219
  }
199
- getUserProfile() {
200
- return this.userProfile$.asObservable();
201
- }
202
220
  updateToken(minValidity = 60) {
203
221
  return new Promise((resolve, reject) => {
204
- if (!this.keycloak?.token) {
222
+ const keycloak = this.#keycloakInstance();
223
+ if (!keycloak?.token) {
205
224
  resolve(false);
206
225
  return;
207
226
  }
208
- this.keycloak.updateToken(minValidity)
227
+ keycloak.updateToken(minValidity)
209
228
  .then((refreshed) => {
210
229
  resolve(refreshed);
211
230
  })
@@ -217,80 +236,34 @@ class KeycloakService {
217
236
  }
218
237
  async loadUserProfile() {
219
238
  try {
220
- const profile = await this.keycloak.loadUserProfile();
221
- this.userProfile$.next(profile);
239
+ const keycloak = this.#keycloakInstance();
240
+ if (!keycloak)
241
+ return;
242
+ const profile = await keycloak.loadUserProfile();
243
+ this.#userProfile.set(profile);
222
244
  }
223
245
  catch (error) {
224
246
  console.error('Failed to load user profile:', error);
225
247
  }
226
248
  }
227
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: KeycloakService, deps: [{ token: KEYCLOAK_CONFIG }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
249
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: KeycloakService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
228
250
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: KeycloakService, providedIn: 'root' });
229
251
  }
230
252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: KeycloakService, decorators: [{
231
253
  type: Injectable,
232
254
  args: [{ providedIn: 'root' }]
233
- }], ctorParameters: () => [{ type: undefined, decorators: [{
234
- type: Inject,
235
- args: [KEYCLOAK_CONFIG]
236
- }] }, { type: i1.HttpClient }] });
255
+ }] });
237
256
 
238
- class KeycloakAuthGuard {
239
- keycloakService;
240
- router;
241
- constructor(keycloakService, router) {
242
- this.keycloakService = keycloakService;
243
- this.router = router;
244
- }
245
- canActivate(route, state) {
246
- return this.keycloakService.isLoggedIn().pipe(map(authenticated => {
247
- // Handle authentication check
248
- if (!authenticated) {
249
- this.keycloakService.login({
250
- redirectUri: window.location.origin + state.url
251
- });
252
- return false;
253
- }
254
- // Handle role-based access
255
- const requiredRoles = route.data['roles'];
256
- if (requiredRoles && !this.hasRequiredRoles(requiredRoles)) {
257
- // Redirect to unauthorized page if roles don't match
258
- return this.router.createUrlTree(['/unauthorized']);
259
- }
260
- return true;
261
- }));
262
- }
263
- hasRequiredRoles(requiredRoles) {
264
- const userRoles = this.keycloakService.getRoles();
265
- return requiredRoles.every(role => userRoles.includes(role));
266
- }
267
- /**
268
- * Checks if all required roles are present
269
- * @param route Route being activated
270
- * @returns true if no roles are required or if all required roles are present
271
- */
272
- checkRoles(route) {
273
- const requiredRoles = route.data['roles'];
274
- if (!requiredRoles || requiredRoles.length === 0) {
275
- return true;
276
- }
277
- return this.hasRequiredRoles(requiredRoles);
278
- }
279
- /**
280
- * Gets redirect URL from route if present
281
- * @param state Router state
282
- * @returns URL to redirect to after login or undefined
283
- */
284
- getLoginRedirectUrl(state) {
285
- return window.location.origin + state.url;
286
- }
287
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: KeycloakAuthGuard, deps: [{ token: KeycloakService }, { token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
288
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: KeycloakAuthGuard, providedIn: 'root' });
257
+ function provideKeycloak(config) {
258
+ return [
259
+ importProvidersFrom(HttpClientModule),
260
+ {
261
+ provide: KEYCLOAK_CONFIG,
262
+ useValue: config
263
+ },
264
+ KeycloakService
265
+ ];
289
266
  }
290
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: KeycloakAuthGuard, decorators: [{
291
- type: Injectable,
292
- args: [{ providedIn: 'root' }]
293
- }], ctorParameters: () => [{ type: KeycloakService }, { type: i1$1.Router }] });
294
267
 
295
268
  /**
296
269
  * A general-purpose HTTP utility service that provides enhanced HTTP operations
@@ -570,7 +543,7 @@ class HttpUtilityService {
570
543
  });
571
544
  }
572
545
  }
573
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: HttpUtilityService, deps: [{ token: i1.HttpClient }, { token: i2.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
546
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: HttpUtilityService, deps: [{ token: i1.HttpClient }, { token: i4.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
574
547
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: HttpUtilityService, providedIn: 'root' });
575
548
  }
576
549
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: HttpUtilityService, decorators: [{
@@ -578,7 +551,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
578
551
  args: [{
579
552
  providedIn: 'root'
580
553
  }]
581
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.MessageService }] });
554
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i4.MessageService }] });
582
555
 
583
556
  /**
584
557
  * A utility service that provides common reusable functionality
@@ -753,12 +726,12 @@ class NotificationService {
753
726
  clearMessage() {
754
727
  this.messageSubject.next(null);
755
728
  }
756
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: NotificationService, deps: [{ token: i2.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
729
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: NotificationService, deps: [{ token: i4.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
757
730
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: NotificationService });
758
731
  }
759
732
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: NotificationService, decorators: [{
760
733
  type: Injectable
761
- }], ctorParameters: () => [{ type: i2.MessageService }] });
734
+ }], ctorParameters: () => [{ type: i4.MessageService }] });
762
735
 
763
736
  class BaseCrudService {
764
737
  httpUtility;
@@ -1144,7 +1117,7 @@ class TextInputType extends FieldType {
1144
1117
  [placeholder]="props['placeholder'] || ''"
1145
1118
  [attr.aria-label]="props['label'] || props['placeholder'] || ''"
1146
1119
  class="w-full"/>
1147
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2$1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }] });
1120
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }] });
1148
1121
  }
1149
1122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: TextInputType, decorators: [{
1150
1123
  type: Component,
@@ -1198,7 +1171,7 @@ class SelectType extends FieldType {
1198
1171
  styleClass="w-full">
1199
1172
  </p-select>
1200
1173
  </ng-container>
1201
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2$1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i4.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }] });
1174
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i4$1.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }] });
1202
1175
  }
1203
1176
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: SelectType, decorators: [{
1204
1177
  type: Component,
@@ -1251,7 +1224,7 @@ class RadioType extends FieldType {
1251
1224
  </div>
1252
1225
  </ng-container>
1253
1226
  </div>
1254
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2$1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: RadioButtonModule }, { kind: "component", type: i4$1.RadioButton, selector: "p-radioButton, p-radiobutton, p-radio-button", inputs: ["value", "formControlName", "name", "disabled", "variant", "size", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "autofocus", "binary"], outputs: ["onClick", "onFocus", "onBlur"] }] });
1227
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: RadioButtonModule }, { kind: "component", type: i4$2.RadioButton, selector: "p-radioButton, p-radiobutton, p-radio-button", inputs: ["value", "formControlName", "name", "disabled", "variant", "size", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "autofocus", "binary"], outputs: ["onClick", "onFocus", "onBlur"] }] });
1255
1228
  }
1256
1229
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: RadioType, decorators: [{
1257
1230
  type: Component,
@@ -1314,7 +1287,7 @@ class NumericInputType extends FieldType {
1314
1287
  [showButtons]="true"
1315
1288
  class="w-full">
1316
1289
  </p-inputNumber>
1317
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2$1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i3$1.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled", "fluid"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }] });
1290
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i3$1.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled", "fluid"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }] });
1318
1291
  }
1319
1292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: NumericInputType, decorators: [{
1320
1293
  type: Component,
@@ -1382,7 +1355,7 @@ class MultiselectType extends FieldType {
1382
1355
  styleClass="w-full">
1383
1356
  </p-multiSelect>
1384
1357
  </ng-container>
1385
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2$1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i4$2.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }] });
1358
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i4$3.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }] });
1386
1359
  }
1387
1360
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: MultiselectType, decorators: [{
1388
1361
  type: Component,
@@ -1483,7 +1456,7 @@ class DateType extends FieldType {
1483
1456
  (onSelect)="onDateSelect($event)"
1484
1457
  (onInput)="onDateInput($event)">
1485
1458
  </p-datepicker>
1486
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2$1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i3$2.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }] });
1459
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i3$2.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }] });
1487
1460
  }
1488
1461
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: DateType, decorators: [{
1489
1462
  type: Component,
@@ -1537,7 +1510,7 @@ class CheckboxType extends FieldType {
1537
1510
  {{props['checkboxLabel'] || ''}}
1538
1511
  </p-checkbox>
1539
1512
  </div>
1540
- `, isInline: true, styles: [".checkbox-container{display:flex;align-items:center;height:40px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2$1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i3$3.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }] });
1513
+ `, isInline: true, styles: [".checkbox-container{display:flex;align-items:center;height:40px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i3$3.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }] });
1541
1514
  }
1542
1515
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: CheckboxType, decorators: [{
1543
1516
  type: Component,
@@ -1580,7 +1553,7 @@ class TextareaType extends FieldType {
1580
1553
  [placeholder]="props['placeholder'] || ''"
1581
1554
  class="w-full">
1582
1555
  </textarea>
1583
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2$1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: Textarea }, { kind: "directive", type: i3$4.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant", "fluid"], outputs: ["onResize"] }] });
1556
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: Textarea }, { kind: "directive", type: i3$4.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant", "fluid"], outputs: ["onResize"] }] });
1584
1557
  }
1585
1558
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: TextareaType, decorators: [{
1586
1559
  type: Component,
@@ -1647,7 +1620,7 @@ class FormFieldWrapper extends FieldWrapper {
1647
1620
  {{ errorMessage }}
1648
1621
  </small>
1649
1622
  </div>
1650
- `, isInline: true, styles: [":is() .required-star{color:var(--red-500);margin-left:.25rem}:is() .p-input-error :where(input,.p-inputtext){border-color:var(--red-500)}:is() .p-input-error :where(input:enabled:focus,.p-inputtext:enabled:focus){border-color:var(--red-500);box-shadow:0 0 0 1px var(--red-500)}:is() .p-error{color:var(--red-500);margin-top:.5rem}:is() small{color:var(--text-color-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i2$2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] });
1623
+ `, isInline: true, styles: [":is() .required-star{color:var(--red-500);margin-left:.25rem}:is() .p-input-error :where(input,.p-inputtext){border-color:var(--red-500)}:is() .p-input-error :where(input:enabled:focus,.p-inputtext:enabled:focus){border-color:var(--red-500);box-shadow:0 0 0 1px var(--red-500)}:is() .p-error{color:var(--red-500);margin-top:.5rem}:is() small{color:var(--text-color-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i2$1.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] });
1651
1624
  }
1652
1625
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: FormFieldWrapper, decorators: [{
1653
1626
  type: Component,
@@ -1694,7 +1667,7 @@ const FORMLY_WRAPPERS = {
1694
1667
 
1695
1668
  class CoreFormlyModule {
1696
1669
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: CoreFormlyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1697
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.6", ngImport: i0, type: CoreFormlyModule, imports: [i2$1.FormlyModule], exports: [FormlyModule] });
1670
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.6", ngImport: i0, type: CoreFormlyModule, imports: [i2.FormlyModule], exports: [FormlyModule] });
1698
1671
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: CoreFormlyModule, imports: [FormlyModule.forRoot({
1699
1672
  types: [
1700
1673
  { name: FORMLY_TYPES.TEXT, component: TextInputType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },
@@ -2023,7 +1996,7 @@ class BaseFormComponent extends BasePageComponent {
2023
1996
  isInContext(contextType) {
2024
1997
  return this.state.context === contextType;
2025
1998
  }
2026
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseFormComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i1$1.Router }, { token: NotificationService }, { token: UtilsService }, { token: FormlyConfigService }], target: i0.ɵɵFactoryTarget.Component });
1999
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseFormComponent, deps: [{ token: i1$3.ActivatedRoute }, { token: i1$3.Router }, { token: NotificationService }, { token: UtilsService }, { token: FormlyConfigService }], target: i0.ɵɵFactoryTarget.Component });
2027
2000
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.6", type: BaseFormComponent, isStandalone: true, selector: "ng-component", inputs: { formData: "formData" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
2028
2001
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseFormComponent });
2029
2002
  }
@@ -2034,7 +2007,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
2034
2007
  args: [{
2035
2008
  template: ''
2036
2009
  }]
2037
- }], ctorParameters: () => [{ type: i1$1.ActivatedRoute }, { type: i1$1.Router }, { type: NotificationService }, { type: UtilsService }, { type: FormlyConfigService }], propDecorators: { formData: [{
2010
+ }], ctorParameters: () => [{ type: i1$3.ActivatedRoute }, { type: i1$3.Router }, { type: NotificationService }, { type: UtilsService }, { type: FormlyConfigService }], propDecorators: { formData: [{
2038
2011
  type: Input
2039
2012
  }] } });
2040
2013
 
@@ -2326,12 +2299,12 @@ class BaseListPageComponent extends BaseTableComponent {
2326
2299
  }
2327
2300
  return true;
2328
2301
  }
2329
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseListPageComponent, deps: [{ token: i1$1.Router }, { token: NotificationService }, { token: UtilsService }, { token: i2.ConfirmationService }], target: i0.ɵɵFactoryTarget.Directive });
2302
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseListPageComponent, deps: [{ token: i1$3.Router }, { token: NotificationService }, { token: UtilsService }, { token: i4.ConfirmationService }], target: i0.ɵɵFactoryTarget.Directive });
2330
2303
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.6", type: BaseListPageComponent, isStandalone: true, usesInheritance: true, ngImport: i0 });
2331
2304
  }
2332
2305
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseListPageComponent, decorators: [{
2333
2306
  type: Directive
2334
- }], ctorParameters: () => [{ type: i1$1.Router }, { type: NotificationService }, { type: UtilsService }, { type: i2.ConfirmationService }] });
2307
+ }], ctorParameters: () => [{ type: i1$3.Router }, { type: NotificationService }, { type: UtilsService }, { type: i4.ConfirmationService }] });
2335
2308
 
2336
2309
  class BaseTabbedFormComponent extends BasePageComponent {
2337
2310
  route;
@@ -2619,7 +2592,7 @@ class BaseTabbedFormComponent extends BasePageComponent {
2619
2592
  getTabTitle(data) {
2620
2593
  throw new Error('Method not implemented.');
2621
2594
  }
2622
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseTabbedFormComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i1$1.Router }, { token: NotificationService }, { token: UtilsService }], target: i0.ɵɵFactoryTarget.Component });
2595
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseTabbedFormComponent, deps: [{ token: i1$3.ActivatedRoute }, { token: i1$3.Router }, { token: NotificationService }, { token: UtilsService }], target: i0.ɵɵFactoryTarget.Component });
2623
2596
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.6", type: BaseTabbedFormComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true });
2624
2597
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseTabbedFormComponent });
2625
2598
  }
@@ -2630,7 +2603,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
2630
2603
  args: [{
2631
2604
  template: ''
2632
2605
  }]
2633
- }], ctorParameters: () => [{ type: i1$1.ActivatedRoute }, { type: i1$1.Router }, { type: NotificationService }, { type: UtilsService }] });
2606
+ }], ctorParameters: () => [{ type: i1$3.ActivatedRoute }, { type: i1$3.Router }, { type: NotificationService }, { type: UtilsService }] });
2634
2607
 
2635
2608
  class BaseListTabbedFormComponent extends BasePageComponent {
2636
2609
  route;
@@ -2802,7 +2775,7 @@ class BaseListTabbedFormComponent extends BasePageComponent {
2802
2775
  isValidPageMode(mode) {
2803
2776
  return Object.values(AppConstants.PAGE_MODE).includes(mode);
2804
2777
  }
2805
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseListTabbedFormComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i1$1.Router }, { token: NotificationService }, { token: UtilsService }], target: i0.ɵɵFactoryTarget.Component });
2778
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseListTabbedFormComponent, deps: [{ token: i1$3.ActivatedRoute }, { token: i1$3.Router }, { token: NotificationService }, { token: UtilsService }], target: i0.ɵɵFactoryTarget.Component });
2806
2779
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.6", type: BaseListTabbedFormComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true });
2807
2780
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseListTabbedFormComponent });
2808
2781
  }
@@ -2813,7 +2786,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
2813
2786
  args: [{
2814
2787
  template: ''
2815
2788
  }]
2816
- }], ctorParameters: () => [{ type: i1$1.ActivatedRoute }, { type: i1$1.Router }, { type: NotificationService }, { type: UtilsService }] });
2789
+ }], ctorParameters: () => [{ type: i1$3.ActivatedRoute }, { type: i1$3.Router }, { type: NotificationService }, { type: UtilsService }] });
2817
2790
 
2818
2791
  /**
2819
2792
  * Base component for all task detail components in the application.
@@ -2928,12 +2901,139 @@ class BaseTaskDetailsComponent extends BasePageComponent {
2928
2901
  this.destroyed$.next();
2929
2902
  this.destroyed$.complete();
2930
2903
  }
2931
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseTaskDetailsComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i1$1.Router }, { token: NotificationService }, { token: UtilsService }, { token: FormlyConfigService }], target: i0.ɵɵFactoryTarget.Directive });
2904
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseTaskDetailsComponent, deps: [{ token: i1$3.ActivatedRoute }, { token: i1$3.Router }, { token: NotificationService }, { token: UtilsService }, { token: FormlyConfigService }], target: i0.ɵɵFactoryTarget.Directive });
2932
2905
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.6", type: BaseTaskDetailsComponent, isStandalone: true, usesInheritance: true, ngImport: i0 });
2933
2906
  }
2934
2907
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseTaskDetailsComponent, decorators: [{
2935
2908
  type: Directive
2936
- }], ctorParameters: () => [{ type: i1$1.ActivatedRoute }, { type: i1$1.Router }, { type: NotificationService }, { type: UtilsService }, { type: FormlyConfigService }] });
2909
+ }], ctorParameters: () => [{ type: i1$3.ActivatedRoute }, { type: i1$3.Router }, { type: NotificationService }, { type: UtilsService }, { type: FormlyConfigService }] });
2910
+
2911
+ /**
2912
+ * Base component for all task dashboard components in the application.
2913
+ * Provides common functionality for task management operations while
2914
+ * inheriting table functionality from BaseTableComponent.
2915
+ */
2916
+ class BaseTaskDashboardComponent extends BaseTableComponent {
2917
+ router;
2918
+ notificationService;
2919
+ utilsService;
2920
+ confirmationService;
2921
+ actionLoading = false;
2922
+ taskStatuses = [];
2923
+ taskPriorities = [];
2924
+ assignedToOptions = [];
2925
+ dateRange = {
2926
+ start: null,
2927
+ end: null
2928
+ };
2929
+ constructor(router, notificationService, utilsService, confirmationService) {
2930
+ super(utilsService, notificationService);
2931
+ this.router = router;
2932
+ this.notificationService = notificationService;
2933
+ this.utilsService = utilsService;
2934
+ this.confirmationService = confirmationService;
2935
+ }
2936
+ /**
2937
+ * Initialize the component and load reference data
2938
+ */
2939
+ ngOnInit() {
2940
+ super.ngOnInit();
2941
+ this.loadReferenceData();
2942
+ }
2943
+ /**
2944
+ * Load all reference data needed for the task dashboard
2945
+ */
2946
+ loadReferenceData() {
2947
+ }
2948
+ /**
2949
+ * Create a new task
2950
+ */
2951
+ onCreate() {
2952
+ this.navigateTo([this.getFormRoute()], { [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.CREATE });
2953
+ }
2954
+ /**
2955
+ * Navigate to view a task
2956
+ * @param item The task to view
2957
+ */
2958
+ onView(item) {
2959
+ if (!this.validateItemUuid(item, 'view'))
2960
+ return;
2961
+ this.navigateTo([this.getFormRoute()], {
2962
+ [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.VIEW,
2963
+ [AppConstants.FORM.UUID]: item.uuid
2964
+ });
2965
+ }
2966
+ /**
2967
+ * Navigate to edit a task
2968
+ * @param item The task to edit
2969
+ */
2970
+ onEdit(item) {
2971
+ if (!this.validateItemUuid(item, 'edit'))
2972
+ return;
2973
+ this.navigateTo([this.getFormRoute()], {
2974
+ [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.EDIT,
2975
+ [AppConstants.FORM.UUID]: item.uuid
2976
+ });
2977
+ }
2978
+ /**
2979
+ * Delete a task with confirmation
2980
+ * @param item The task to delete
2981
+ */
2982
+ onDelete(item) {
2983
+ if (!this.validateItemUuid(item, 'delete'))
2984
+ return;
2985
+ this.confirmationService.confirm({
2986
+ message: `Are you sure you want to delete this ${this.getEntityName()}?`,
2987
+ header: 'Confirm Deletion',
2988
+ icon: 'pi pi-exclamation-triangle',
2989
+ accept: () => {
2990
+ this.actionLoading = true;
2991
+ this.getEntityService().delete(item.uuid)
2992
+ .pipe(finalize$1(() => this.actionLoading = false))
2993
+ .subscribe({
2994
+ next: () => {
2995
+ this.showSuccess(`${this.getEntityName()} ${AppMessages.LIST.SUCCESS.DELETE}`);
2996
+ this.loadData();
2997
+ },
2998
+ error: (error) => {
2999
+ console.error('Delete failed:', error);
3000
+ this.showError(`${AppMessages.LIST.ERROR.DELETE} ${this.getEntityName()}`);
3001
+ }
3002
+ });
3003
+ }
3004
+ });
3005
+ }
3006
+ /**
3007
+ * Navigate to a route with error handling
3008
+ * @param path The route path
3009
+ * @param matrixParams Optional matrix parameters
3010
+ */
3011
+ navigateTo(path, matrixParams) {
3012
+ this.router.navigate(path, { queryParams: matrixParams })
3013
+ .catch(error => {
3014
+ console.error('Navigation error:', error);
3015
+ this.showError(AppMessages.LIST.ERROR.NAVIGATION);
3016
+ });
3017
+ }
3018
+ /**
3019
+ * Validate that an item has a UUID
3020
+ * @param item The item to validate
3021
+ * @param action The action being performed
3022
+ * @returns true if valid, false otherwise
3023
+ */
3024
+ validateItemUuid(item, action) {
3025
+ if (!item?.uuid) {
3026
+ this.showError(`${AppMessages.LIST.ERROR.INVALID_ID} ${action}`);
3027
+ return false;
3028
+ }
3029
+ return true;
3030
+ }
3031
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseTaskDashboardComponent, deps: [{ token: i1$3.Router }, { token: NotificationService }, { token: UtilsService }, { token: i4.ConfirmationService }], target: i0.ɵɵFactoryTarget.Directive });
3032
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.6", type: BaseTaskDashboardComponent, isStandalone: true, usesInheritance: true, ngImport: i0 });
3033
+ }
3034
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: BaseTaskDashboardComponent, decorators: [{
3035
+ type: Directive
3036
+ }], ctorParameters: () => [{ type: i1$3.Router }, { type: NotificationService }, { type: UtilsService }, { type: i4.ConfirmationService }] });
2937
3037
 
2938
3038
  class IndianDatePipe {
2939
3039
  datePipe;
@@ -2969,7 +3069,7 @@ class IndianDatePipe {
2969
3069
  return value; // original dd-MM-yyyy
2970
3070
  }
2971
3071
  }
2972
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: IndianDatePipe, deps: [{ token: i1$3.DatePipe }], target: i0.ɵɵFactoryTarget.Pipe });
3072
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: IndianDatePipe, deps: [{ token: i1$2.DatePipe }], target: i0.ɵɵFactoryTarget.Pipe });
2973
3073
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.6", ngImport: i0, type: IndianDatePipe, isStandalone: true, name: "indianDate" });
2974
3074
  }
2975
3075
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: IndianDatePipe, decorators: [{
@@ -2978,7 +3078,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
2978
3078
  name: 'indianDate',
2979
3079
  standalone: true
2980
3080
  }]
2981
- }], ctorParameters: () => [{ type: i1$3.DatePipe }] });
3081
+ }], ctorParameters: () => [{ type: i1$2.DatePipe }] });
2982
3082
 
2983
3083
  /*
2984
3084
  * Public API Surface of core-lib
@@ -2989,5 +3089,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImpor
2989
3089
  * Generated bundle index. Do not edit.
2990
3090
  */
2991
3091
 
2992
- export { AppConstants, AppMessages, BaseCrudService, BaseFormComponent, BaseListPageComponent, BaseListTabbedFormComponent, BasePageComponent, BaseTabbedFormComponent, BaseTaskDetailsComponent, BaseTaskService, ComponentContext, CoreFormlyModule, FormService, FormlyConfigService, HttpUtilityService, IndianDatePipe, KEYCLOAK_CONFIG, KeycloakAuthGuard, KeycloakService, NotificationService, TabbedFormType, TaskRole, UtilsService };
3092
+ export { AppConstants, AppMessages, BaseCrudService, BaseFormComponent, BaseListPageComponent, BaseListTabbedFormComponent, BasePageComponent, BaseTabbedFormComponent, BaseTaskDashboardComponent, BaseTaskDetailsComponent, BaseTaskService, ComponentContext, CoreFormlyModule, FormService, FormlyConfigService, HttpUtilityService, IndianDatePipe, KEYCLOAK_CONFIG, KeycloakService, NotificationService, TabbedFormType, TaskRole, UtilsService, provideKeycloak };
2993
3093
  //# sourceMappingURL=codex-ts-core-lib.mjs.map