ets-fe-ng-sdk 20.0.14 → 20.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.
@@ -3,12 +3,12 @@ import { FormControl, Validators, FormGroup, FormArray, FormBuilder, NG_VALUE_AC
3
3
  import { ReplaySubject, filter, debounceTime, lastValueFrom, Observable, BehaviorSubject, isObservable, of, merge, firstValueFrom, throwError, interval, map as map$1, startWith, switchMap, forkJoin, catchError as catchError$1, first, distinctUntilChanged, tap as tap$1, fromEvent, mergeMap, debounce, timer, Subject, distinct, concat } from 'rxjs';
4
4
  import 'zone.js/plugins/zone-error';
5
5
  import * as i0 from '@angular/core';
6
- import { signal, computed, Injectable, inject, APP_INITIALIZER, isDevMode, Pipe, NgModule, input, Directive, booleanAttribute, ChangeDetectorRef, model, output, effect, ViewChild, Input, Component, EventEmitter, Output, forwardRef, ChangeDetectionStrategy, HostListener, HostBinding, viewChild, linkedSignal, viewChildren, Inject, DestroyRef, contentChild, ElementRef, InjectionToken, ErrorHandler } from '@angular/core';
6
+ import { signal, computed, Injectable, inject, APP_INITIALIZER, isDevMode, Pipe, NgModule, input, Directive, booleanAttribute, ChangeDetectorRef, model, output, effect, ViewChild, Input, Component, EventEmitter, Output, forwardRef, ChangeDetectionStrategy, HostListener, HostBinding, viewChild, linkedSignal, viewChildren, Inject, DestroyRef, contentChild, ElementRef, Optional, InjectionToken, ErrorHandler } from '@angular/core';
7
7
  import { faSpoon, faTable, faCircleExclamation, faHandshake, faPercent, faPlay, faArrowsH, faBank, faReceipt, faTag, faTruck, faStop, faRecycle, faUsers, faUnlock, faUpload, faBellSlash, faEye, faSearch, faSave, faArrowLeft, faPen, faPause, faArrowRight, faLock, faInfoCircle, faFileImport, faHome, faHistory, faUserShield, faPenFancy, faFilter, faFile, faFileExport, faEdit, faDownload, faTrash, faCogs, faClone, faListAlt, faCheck, faCancel, faMoneyCheck, faSlidersH, faPlus } from '@fortawesome/free-solid-svg-icons';
8
8
  import { faPaperPlane } from '@fortawesome/free-regular-svg-icons';
9
9
  import { clone, uniqBy, uniq, cloneDeep, isEqual, isEmpty } from 'lodash-es';
10
10
  import * as i1$1 from '@angular/common';
11
- import { Location, CurrencyPipe, TitleCasePipe, DatePipe, DecimalPipe, CommonModule, NgClass, JsonPipe, AsyncPipe, UpperCasePipe, NgTemplateOutlet, NgFor, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault, NgStyle } from '@angular/common';
11
+ import { Location, CurrencyPipe, TitleCasePipe, DatePipe, DecimalPipe, CommonModule, NgClass, JsonPipe, AsyncPipe, UpperCasePipe, NgTemplateOutlet, NgStyle } from '@angular/common';
12
12
  import { map, tap, catchError, retry, filter as filter$1, debounceTime as debounceTime$1, switchMap as switchMap$1, startWith as startWith$1, first as first$1, timeout } from 'rxjs/operators';
13
13
  import { ToastNotificationsService } from '@serene-dev/toast-notifications';
14
14
  import { HttpClient, HttpHeaders, HttpRequest, HttpResponse, HttpErrorResponse } from '@angular/common/http';
@@ -1056,6 +1056,155 @@ var EETSPageBtnID;
1056
1056
  EETSPageBtnID["clientFutureActions"] = "PCFA23";
1057
1057
  })(EETSPageBtnID || (EETSPageBtnID = {}));
1058
1058
 
1059
+ // import '../prototypes/prototypes';
1060
+ /**
1061
+ * Represents a basic route item with path generation capabilities.
1062
+ * Handles route path construction with optional parameters.
1063
+ */
1064
+ class RouteItem {
1065
+ /**
1066
+ * Creates a new RouteItem instance.
1067
+ * @param base - The base route segment
1068
+ * @param parentPub - The parent public path (defaults to empty string)
1069
+ * @param params - Optional route parameters to append
1070
+ */
1071
+ constructor(base, parentPub = '', ...params) {
1072
+ // console.log(params);
1073
+ this._ = base + (params?.length ? '/:' + params.join('/:') : '');
1074
+ this.__ = base;
1075
+ this.pub = parentPub + '/' + base;
1076
+ }
1077
+ }
1078
+ /**
1079
+ * Extended route class that provides common application routes and utility methods.
1080
+ * Creates a standard set of routes for CRUD operations and navigation.
1081
+ */
1082
+ class AppRouteBase extends RouteItem {
1083
+ /**
1084
+ * Creates a new AppRouteBase with standard child routes.
1085
+ * @param base - The base route segment
1086
+ * @param parentPub - The parent public path (defaults to empty string)
1087
+ * @param params - Optional route parameters to append
1088
+ */
1089
+ constructor(base, parentPub = '', ...params) {
1090
+ super(base, parentPub, ...params);
1091
+ this.all = new RouteItem('all', this.pub);
1092
+ this.clone = new RouteItem('clone', this.pub, 'id');
1093
+ this.create = new CreateRoute('create', this.pub);
1094
+ this.edit = new RouteItem('edit', this.pub, 'id');
1095
+ this.find = new FindRoute('find', this.pub);
1096
+ this.index = new RouteItem('index', this.pub);
1097
+ this.overview = new RouteItem('overview', this.pub);
1098
+ this.show = new RouteItem('show', this.pub, 'id');
1099
+ this.start = new RouteItem('start', this.pub);
1100
+ }
1101
+ //#region funcs
1102
+ /**
1103
+ * Combines a route with a parent ID.
1104
+ * @param route - The base route
1105
+ * @param prtID - The parent ID to append
1106
+ * @returns The combined route string or null if route is falsy
1107
+ */
1108
+ routeIdPipe(route, prtID) {
1109
+ return route ? route + '/' + prtID : null;
1110
+ }
1111
+ /**
1112
+ * Creates a route with ID and formatted title.
1113
+ * @param route - The base route
1114
+ * @param id - The item ID
1115
+ * @param title - Optional title to format and append
1116
+ * @returns The formatted route string
1117
+ */
1118
+ routeIdTitlePipe(route, id, title) {
1119
+ return route + '/' + id + '/' + this.routeNamer(title);
1120
+ }
1121
+ /**
1122
+ * Creates a route with parent ID, item ID, and formatted title.
1123
+ * @param route - The base route
1124
+ * @param parentID - The parent item ID
1125
+ * @param id - The item ID
1126
+ * @param title - Optional title to format and append
1127
+ * @returns The formatted route string
1128
+ */
1129
+ routePIdIdTitlePipe(route, parentID, id, title) {
1130
+ return route + '/' + parentID + '/' + id + '/' + this.routeNamer(title);
1131
+ }
1132
+ /**
1133
+ * Creates a route with parent ID, sub-item ID, item ID, and formatted title.
1134
+ * @param route - The base route
1135
+ * @param parentID - The parent item ID
1136
+ * @param subID - The sub-item ID
1137
+ * @param id - The item ID
1138
+ * @param title - Optional title to format and append
1139
+ * @returns The formatted route string
1140
+ */
1141
+ routePidSidIdTitlePipe(route, parentID, subID, id, title) {
1142
+ return (route +
1143
+ '/' +
1144
+ parentID +
1145
+ '/' +
1146
+ subID +
1147
+ '/' +
1148
+ id +
1149
+ '/' +
1150
+ this.routeNamer(title));
1151
+ }
1152
+ /**
1153
+ * Formats a title for use in a URL.
1154
+ * Trims, removes special characters, converts to lowercase, and replaces spaces with hyphens.
1155
+ * @param title - The title to format
1156
+ * @returns The URL-friendly formatted title or empty string if no title provided
1157
+ */
1158
+ routeNamer(title) {
1159
+ return title
1160
+ ? title
1161
+ .substr(0, 30)
1162
+ .unChar('/')
1163
+ .trim()
1164
+ .toLowerCase()
1165
+ .split(' ')
1166
+ .filter((x) => x)
1167
+ .join('-')
1168
+ : '';
1169
+ }
1170
+ }
1171
+ /**
1172
+ * Specialized route for creation operations with different entity types.
1173
+ */
1174
+ class CreateRoute extends RouteItem {
1175
+ constructor() {
1176
+ super(...arguments);
1177
+ /** Route for corporate entity creation */
1178
+ this.corporate = new RouteItem('corporate', this.pub);
1179
+ /** Route for group entity creation */
1180
+ this.group = new RouteItem('group', this.pub);
1181
+ /** Route for individual entity creation */
1182
+ this.individual = new RouteItem('individual', this.pub);
1183
+ /** Route for provider entity creation with sub-routes */
1184
+ this.provider = new CreateProviderRoute('provider', this.pub);
1185
+ }
1186
+ }
1187
+ /**
1188
+ * Specialized route for provider creation operations.
1189
+ */
1190
+ class CreateProviderRoute extends RouteItem {
1191
+ constructor() {
1192
+ super(...arguments);
1193
+ /** Index route for provider creation */
1194
+ this.index = new RouteItem('index', this.pub);
1195
+ }
1196
+ }
1197
+ /**
1198
+ * Specialized route for find/search operations.
1199
+ */
1200
+ class FindRoute extends RouteItem {
1201
+ constructor() {
1202
+ super(...arguments);
1203
+ /** Route for search results list */
1204
+ this.searchList = new RouteItem('search-list', this.pub);
1205
+ }
1206
+ }
1207
+
1059
1208
  var EVFunctions;
1060
1209
  (function (EVFunctions) {
1061
1210
  /**
@@ -1605,154 +1754,6 @@ var prototypes = /*#__PURE__*/Object.freeze({
1605
1754
  __proto__: null
1606
1755
  });
1607
1756
 
1608
- /**
1609
- * Represents a basic route item with path generation capabilities.
1610
- * Handles route path construction with optional parameters.
1611
- */
1612
- class RouteItem {
1613
- /**
1614
- * Creates a new RouteItem instance.
1615
- * @param base - The base route segment
1616
- * @param parentPub - The parent public path (defaults to empty string)
1617
- * @param params - Optional route parameters to append
1618
- */
1619
- constructor(base, parentPub = '', ...params) {
1620
- // console.log(params);
1621
- this._ = base + (params?.length ? '/:' + params.join('/:') : '');
1622
- this.__ = base;
1623
- this.pub = parentPub + '/' + base;
1624
- }
1625
- }
1626
- /**
1627
- * Extended route class that provides common application routes and utility methods.
1628
- * Creates a standard set of routes for CRUD operations and navigation.
1629
- */
1630
- class AppRouteBase extends RouteItem {
1631
- /**
1632
- * Creates a new AppRouteBase with standard child routes.
1633
- * @param base - The base route segment
1634
- * @param parentPub - The parent public path (defaults to empty string)
1635
- * @param params - Optional route parameters to append
1636
- */
1637
- constructor(base, parentPub = '', ...params) {
1638
- super(base, parentPub, ...params);
1639
- this.all = new RouteItem('all', this.pub);
1640
- this.clone = new RouteItem('clone', this.pub, 'id');
1641
- this.create = new CreateRoute('create', this.pub);
1642
- this.edit = new RouteItem('edit', this.pub, 'id');
1643
- this.find = new FindRoute('find', this.pub);
1644
- this.index = new RouteItem('index', this.pub);
1645
- this.overview = new RouteItem('overview', this.pub);
1646
- this.show = new RouteItem('show', this.pub, 'id');
1647
- this.start = new RouteItem('start', this.pub);
1648
- }
1649
- //#region funcs
1650
- /**
1651
- * Combines a route with a parent ID.
1652
- * @param route - The base route
1653
- * @param prtID - The parent ID to append
1654
- * @returns The combined route string or null if route is falsy
1655
- */
1656
- routeIdPipe(route, prtID) {
1657
- return route ? route + '/' + prtID : null;
1658
- }
1659
- /**
1660
- * Creates a route with ID and formatted title.
1661
- * @param route - The base route
1662
- * @param id - The item ID
1663
- * @param title - Optional title to format and append
1664
- * @returns The formatted route string
1665
- */
1666
- routeIdTitlePipe(route, id, title) {
1667
- return route + '/' + id + '/' + this.routeNamer(title);
1668
- }
1669
- /**
1670
- * Creates a route with parent ID, item ID, and formatted title.
1671
- * @param route - The base route
1672
- * @param parentID - The parent item ID
1673
- * @param id - The item ID
1674
- * @param title - Optional title to format and append
1675
- * @returns The formatted route string
1676
- */
1677
- routePIdIdTitlePipe(route, parentID, id, title) {
1678
- return route + '/' + parentID + '/' + id + '/' + this.routeNamer(title);
1679
- }
1680
- /**
1681
- * Creates a route with parent ID, sub-item ID, item ID, and formatted title.
1682
- * @param route - The base route
1683
- * @param parentID - The parent item ID
1684
- * @param subID - The sub-item ID
1685
- * @param id - The item ID
1686
- * @param title - Optional title to format and append
1687
- * @returns The formatted route string
1688
- */
1689
- routePidSidIdTitlePipe(route, parentID, subID, id, title) {
1690
- return (route +
1691
- '/' +
1692
- parentID +
1693
- '/' +
1694
- subID +
1695
- '/' +
1696
- id +
1697
- '/' +
1698
- this.routeNamer(title));
1699
- }
1700
- /**
1701
- * Formats a title for use in a URL.
1702
- * Trims, removes special characters, converts to lowercase, and replaces spaces with hyphens.
1703
- * @param title - The title to format
1704
- * @returns The URL-friendly formatted title or empty string if no title provided
1705
- */
1706
- routeNamer(title) {
1707
- return title
1708
- ? title
1709
- .substr(0, 30)
1710
- .unChar('/')
1711
- .trim()
1712
- .toLowerCase()
1713
- .split(' ')
1714
- .filter((x) => x)
1715
- .join('-')
1716
- : '';
1717
- }
1718
- }
1719
- /**
1720
- * Specialized route for creation operations with different entity types.
1721
- */
1722
- class CreateRoute extends RouteItem {
1723
- constructor() {
1724
- super(...arguments);
1725
- /** Route for corporate entity creation */
1726
- this.corporate = new RouteItem('corporate', this.pub);
1727
- /** Route for group entity creation */
1728
- this.group = new RouteItem('group', this.pub);
1729
- /** Route for individual entity creation */
1730
- this.individual = new RouteItem('individual', this.pub);
1731
- /** Route for provider entity creation with sub-routes */
1732
- this.provider = new CreateProviderRoute('provider', this.pub);
1733
- }
1734
- }
1735
- /**
1736
- * Specialized route for provider creation operations.
1737
- */
1738
- class CreateProviderRoute extends RouteItem {
1739
- constructor() {
1740
- super(...arguments);
1741
- /** Index route for provider creation */
1742
- this.index = new RouteItem('index', this.pub);
1743
- }
1744
- }
1745
- /**
1746
- * Specialized route for find/search operations.
1747
- */
1748
- class FindRoute extends RouteItem {
1749
- constructor() {
1750
- super(...arguments);
1751
- /** Route for search results list */
1752
- this.searchList = new RouteItem('search-list', this.pub);
1753
- }
1754
- }
1755
-
1756
1757
  /**
1757
1758
  * Configuration class containing application-wide constants and settings
1758
1759
  */
@@ -2210,123 +2211,15 @@ class BtnService {
2210
2211
  activityDescription: btn.extractText,
2211
2212
  });
2212
2213
  }
2213
- /**
2214
- * Validates forms associated with a button when the button is disabled
2215
- * Marks all form controls as touched to display validation errors
2216
- * @param btn - The button component associated with forms
2217
- */
2218
- checkForm(btn) {
2219
- // debugger;
2220
- if (btn.isDisabled() && btn.form()) {
2221
- btn.form().markAllAsTouched();
2222
- const form = btn.form();
2223
- console.log(form);
2224
- if (form instanceof FormGroup) {
2225
- console.log(Object.keys(form.controls)
2226
- .filter((x) => !form.controls[x].valid)
2227
- .map((x) => form.controls[x]));
2228
- }
2229
- }
2230
- if (btn.isDisabled() && btn.forms()) {
2231
- btn.forms().forEach((form) => form.markAllAsTouched());
2232
- // this.cdr.detectChanges();
2233
- console.log(btn.forms());
2234
- }
2235
- }
2236
2214
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: BtnService, deps: [{ token: UserActivityService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2237
2215
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: BtnService, providedIn: 'root' }); }
2238
2216
  }
2239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: BtnService, decorators: [{
2240
- type: Injectable,
2241
- args: [{
2242
- providedIn: 'root',
2243
- }]
2244
- }], ctorParameters: () => [{ type: UserActivityService }] });
2245
-
2246
- /**
2247
- * Service for handling reactive form inputs and form schema conversions.
2248
- * @template TIFormSchema Type for form schema, defaults to IFormSchema
2249
- * @template TFCInput Type for form control inputs, defaults to FCInput
2250
- */
2251
- class ETSReactiveFormInputService {
2252
- constructor() {
2253
- /**
2254
- * Binds form controls from a FormGroup to an array of input objects
2255
- * @template TFCInput Type of form control inputs
2256
- * @param inputs Array of input objects to bind controls to
2257
- * @param form FormGroup containing the controls to bind
2258
- * @returns void
2259
- */
2260
- this.bindFormControlToInputs = (inputs, form) => {
2261
- inputs.forEach((x) => {
2262
- x.form = form;
2263
- x.formControl = form.controls[x.name];
2264
- });
2265
- };
2266
- }
2267
- /**
2268
- * Converts an array of form control inputs to a controls object for FormGroup
2269
- * @template TFCInput Type of form control inputs
2270
- * @param inputs Array of form control inputs
2271
- * @returns Object with control names as keys and AbstractControls as values
2272
- */
2273
- formFieldsFromFCInputsArr(inputs) {
2274
- const controls = {};
2275
- for (const inp of inputs) {
2276
- controls[inp.name] = inp.formControl;
2277
- }
2278
- return controls;
2279
- }
2280
- /**
2281
- * Converts a form schema array to form controls object
2282
- * @template TIFormSchema Type of form schema
2283
- * @param formFields Array of form schema objects
2284
- * @returns Object with field names as keys and FormControls as values
2285
- */
2286
- formSchemaToFormControls(formFields) {
2287
- const controls = {};
2288
- formFields?.forEach((inp) => {
2289
- controls[inp.field?.toString()] = new FormControl(inp.value, inp.validators?.map((v) => v.bind(this)), inp.asyncValidators?.map((v) => v.bind(this)));
2290
- });
2291
- // controls['__rowID']=new FormControl('id'+Math.round(Math.random()*10000000))
2292
- return controls;
2293
- }
2294
- /**
2295
- * Adds form controls from a form schema array to an existing FormGroup
2296
- * @template TIFormSchema Type of form schema
2297
- * @param formFields Array of form schema objects
2298
- * @param form Existing FormGroup to add controls to
2299
- * @returns Updated FormGroup with added controls
2300
- */
2301
- addFormSchemaToForm(formFields, form) {
2302
- formFields?.forEach((inp) => {
2303
- form.addControl(inp.field?.toString(), new FormControl(inp.value, inp.validators?.map((v) => v.bind(this)), inp.asyncValidators?.map((v) => v.bind(this))));
2304
- });
2305
- // controls['__rowID']=new FormControl('id'+Math.round(Math.random()*10000000))
2306
- return form;
2307
- }
2308
- /**
2309
- * Creates form controls from a plain object
2310
- * @template T Type of the input object
2311
- * @param obj Object with properties to convert to form controls
2312
- * @returns Object with same keys as input and FormControls as values
2313
- */
2314
- formFieldsFromObj(obj) {
2315
- const controls = {};
2316
- for (const inp in obj) {
2317
- controls[inp] = new FormControl(obj[inp]);
2318
- }
2319
- return controls;
2320
- }
2321
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ETSReactiveFormInputService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2322
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ETSReactiveFormInputService, providedIn: 'root' }); }
2323
- }
2324
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ETSReactiveFormInputService, decorators: [{
2217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: BtnService, decorators: [{
2325
2218
  type: Injectable,
2326
2219
  args: [{
2327
2220
  providedIn: 'root',
2328
2221
  }]
2329
- }], ctorParameters: () => [] });
2222
+ }], ctorParameters: () => [{ type: UserActivityService }] });
2330
2223
 
2331
2224
  class PageLoaderService extends PageLoader {
2332
2225
  constructor() {
@@ -3184,8 +3077,6 @@ class UtilityService {
3184
3077
  this.titleS = inject(Title);
3185
3078
  /** Angular Location service for browser location management */
3186
3079
  this.location = inject(Location);
3187
- /** Service for handling form input operations */
3188
- this.inputService = inject(ETSReactiveFormInputService);
3189
3080
  /** Service for managing page loading states */
3190
3081
  this.pS = inject(PageLoaderService);
3191
3082
  /** Angular CurrencyPipe for currency formatting */
@@ -3602,11 +3493,6 @@ class UtilityService {
3602
3493
  else
3603
3494
  return `${item} - ${obj[labelField || 'title'] || obj[labelField || 'description']}`;
3604
3495
  };
3605
- this.formFieldsFromArr = this.inputService.formFieldsFromFCInputsArr;
3606
- this.objToFormControls = this.inputService.formFieldsFromObj;
3607
- this.formSchemaToFormControls = this.inputService.formSchemaToFormControls;
3608
- this.addFormSchemaToForm = this.inputService.addFormSchemaToForm;
3609
- this.bindFormControlToInputs = this.inputService.bindFormControlToInputs;
3610
3496
  this.go = (value, extra) => {
3611
3497
  this.router.navigate([value], extra);
3612
3498
  };
@@ -4102,20 +3988,6 @@ class UtilityService {
4102
3988
  form.addControl(key, new FormControl(data[key]));
4103
3989
  return form;
4104
3990
  };
4105
- /**
4106
- * Converts a form schema to a FormGroup
4107
- * @param schema Form schema definition
4108
- * @param data Optional initial data
4109
- * @returns FormGroup built from the schema
4110
- */
4111
- this.formSchemaToFormGroup = (schema, data) => {
4112
- const form = new FormGroup({});
4113
- for (const item of schema)
4114
- form.addControl(item.field.toString(), new FormControl(data[item.field.toString()], item.isRequired
4115
- ? (item.validators || [])?.concat([Validators.required])
4116
- : item.validators, item.asyncValidators));
4117
- return form;
4118
- };
4119
3991
  /**
4120
3992
  * Times the execution of a code block
4121
3993
  * @param label Label for the timing log
@@ -6144,8 +6016,31 @@ class BtnComponent {
6144
6016
  enable() {
6145
6017
  this.disabled.set(false);
6146
6018
  }
6019
+ /**
6020
+ * Validates forms associated with a button when the button is disabled
6021
+ * Marks all form controls as touched to display validation errors
6022
+ * @param btn - The button component associated with forms
6023
+ */
6024
+ checkForm() {
6025
+ // debugger;
6026
+ if (this.isDisabled() && this.form()) {
6027
+ this.form().markAllAsTouched();
6028
+ const form = this.form();
6029
+ console.log(form);
6030
+ if (form instanceof FormGroup) {
6031
+ console.log(Object.keys(form.controls)
6032
+ .filter((x) => !form.controls[x].valid)
6033
+ .map((x) => form.controls[x]));
6034
+ }
6035
+ }
6036
+ if (this.isDisabled() && this.forms()) {
6037
+ this.forms().forEach((form) => form.markAllAsTouched());
6038
+ // this.cdr.detectChanges();
6039
+ console.log(this.forms());
6040
+ }
6041
+ }
6147
6042
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: BtnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6148
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: BtnComponent, isStandalone: true, selector: "app-btn", inputs: { formSchema: { classPropertyName: "formSchema", publicName: "formSchema", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null }, centerBtn: { classPropertyName: "centerBtn", publicName: "centerBtn", isSignal: true, isRequired: false, transformFunction: null }, danger: { classPropertyName: "danger", publicName: "danger", isSignal: true, isRequired: false, transformFunction: null }, warning: { classPropertyName: "warning", publicName: "warning", isSignal: true, isRequired: false, transformFunction: null }, verbose: { classPropertyName: "verbose", publicName: "verbose", isSignal: true, isRequired: false, transformFunction: null }, translatorOptions: { classPropertyName: "translatorOptions", publicName: "translatorOptions", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, _icon: { classPropertyName: "_icon", publicName: "icon", isSignal: false, isRequired: false, transformFunction: null }, _rightIcon: { classPropertyName: "_rightIcon", publicName: "rightIcon", isSignal: false, isRequired: false, transformFunction: null }, _leftIcon: { classPropertyName: "_leftIcon", publicName: "leftIcon", isSignal: false, isRequired: false, transformFunction: null }, _type: { classPropertyName: "_type", publicName: "type", isSignal: false, isRequired: false, transformFunction: null }, _group: { classPropertyName: "_group", publicName: "group", isSignal: false, isRequired: false, transformFunction: null }, actionType: { classPropertyName: "actionType", publicName: "actionType", isSignal: true, isRequired: false, transformFunction: null }, animate: { classPropertyName: "animate", publicName: "animate", isSignal: true, isRequired: false, transformFunction: null }, excludeLogging: { classPropertyName: "excludeLogging", publicName: "excludeLogging", isSignal: false, isRequired: false, transformFunction: booleanAttribute2 }, loggingValue: { classPropertyName: "loggingValue", publicName: "loggingValue", isSignal: false, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, customIcon: { classPropertyName: "customIcon", publicName: "customIcon", isSignal: false, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, forms: { classPropertyName: "forms", publicName: "forms", isSignal: true, isRequired: false, transformFunction: null }, help: { classPropertyName: "help", publicName: "help", isSignal: true, isRequired: false, transformFunction: null }, helpShowDelay: { classPropertyName: "helpShowDelay", publicName: "helpShowDelay", isSignal: true, isRequired: false, transformFunction: null }, _iconBtn: { classPropertyName: "_iconBtn", publicName: "iconBtn", isSignal: false, isRequired: false, transformFunction: booleanAttribute2 }, mclass: { classPropertyName: "mclass", publicName: "mclass", isSignal: true, isRequired: false, transformFunction: null }, showHelpIcon: { classPropertyName: "showHelpIcon", publicName: "showHelpIcon", isSignal: true, isRequired: false, transformFunction: null }, _rightCustomIcon: { classPropertyName: "_rightCustomIcon", publicName: "rightCustomIcon", isSignal: false, isRequired: false, transformFunction: null }, leftCustomIcon: { classPropertyName: "leftCustomIcon", publicName: "leftCustomIcon", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: true, isRequired: false, transformFunction: null }, mini: { classPropertyName: "mini", publicName: "mini", isSignal: true, isRequired: false, transformFunction: null }, onFormInvalid: { classPropertyName: "onFormInvalid", publicName: "onFormInvalid", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loading: "loadingChange", leftCustomIcon: "leftCustomIconChange", mclick: "mclick", disabled: "disabledChange" }, viewQueries: [{ propertyName: "innerText", first: true, predicate: ["innerText"], descendants: true }], ngImport: i0, template: "@if (verbose()) {\n <div class=\"\">formState():{{ formState() | json }}</div>\n <div class=\"\">form():{{ form()?.getRawValue() | json }}</div>\n}\n<span\n class=\"{{ class() }} d-flex align-items-center justify-content-center\"\n [ngClass]=\"{ disabled: isDisabled(), mini: mini() }\"\n (click)=\"btnS.checkForm(this)\">\n @if (showHelpIcon() && help()) {\n <i\n class=\"fa fa-info-circle me-2 text-primary\"\n [matTooltipShowDelay]=\"helpShowDelay()\"\n [matTooltip]=\"help() | appTranslate: translatorOptions() | async\"></i>\n }\n <button\n type=\"{{ actionType() }}\"\n class=\"{{ mclass() }} {{ _mclass() || 'btn' }} d-flex align-items-center \"\n [matBadge]=\"badge()\"\n [ngClass]=\"ngClass()\"\n [disabled]=\"isDisabled()\"\n (click)=\"click($event)\"\n [matTooltipShowDelay]=\"helpShowDelay()\"\n [matTooltip]=\"showHelpIcon() ? null : (help() | appTranslate: translatorOptions() | async)\">\n @if (showLeftDisabledIcon()) {\n <fa-icon [icon]=\"lockedIcon()\" />\n } @else if (showLeftCustomIcon()) {\n <i class=\"{{ leftCustomIcon() }}\"></i>\n } @else if (showLeftIcon()) {\n <fa-icon [icon]=\"leftIcon()\" />\n }\n\n @if (computedText()) {\n <span\n class=\"\"\n [ngClass]=\"{\n 'ms-1': leftIcon() || leftCustomIcon(),\n 'me-1': rightIcon() || rightCustomIcon(),\n }\">\n {{ computedText() | appTranslate: translatorOptions() | async }}\n </span>\n } @else {\n <span\n class=\" \"\n [ngClass]=\"{\n 'ms-1': innerText.innerText && (leftIcon() || leftCustomIcon()),\n 'me-1': innerText.innerText && (rightIcon() || rightCustomIcon()),\n }\"\n #innerText\n [debug]=\"debug()\"\n appTranslator>\n <ng-content></ng-content>\n </span>\n }\n\n @if (loading()) {\n <span class=\"fa fa-spinner ms-{{ iconBtn() ? '' : '2' }} fa-spin\"></span>\n } @else if (showRightDisabledIcon()) {\n <fa-icon [icon]=\"lockedIcon()\" />\n } @else if (showRightCustomIcon()) {\n <i class=\"{{ rightCustomIcon() }}\"></i>\n } @else if (showRightIcon()) {\n <fa-icon [icon]=\"rightIcon()\" />\n }\n </button>\n</span>\n", styles: [".lite{padding:0}.disabled{cursor:not-allowed}.invalid{border:3px solid var(--bs-danger)}.mini button{height:auto!important;min-height:unset;padding:2px 5px}@keyframes animateDanger{0%{background-color:red;border-color:red;background-image:none;color:#fff}50%{background-color:red;border-color:red;background-image:none;color:#fff}}@keyframes animateWarning{0%{background-color:#ff8107;border-color:#ff8107;background-image:none;color:#000}50%{background-color:#ff8107;border-color:#ff8107;background-image:none;color:#000}}.isDanger{animation-name:animateDanger;animation-duration:1s;animation-iteration-count:infinite}.isWarning{animation-name:animateWarning;animation-duration:1s;animation-iteration-count:infinite}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i2.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i2$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }, { kind: "directive", type: TranslatorDirective, selector: "[appTranslator]", inputs: ["appTranslator", "debug", "translateOptions"] }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
6043
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: BtnComponent, isStandalone: true, selector: "app-btn", inputs: { formSchema: { classPropertyName: "formSchema", publicName: "formSchema", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null }, centerBtn: { classPropertyName: "centerBtn", publicName: "centerBtn", isSignal: true, isRequired: false, transformFunction: null }, danger: { classPropertyName: "danger", publicName: "danger", isSignal: true, isRequired: false, transformFunction: null }, warning: { classPropertyName: "warning", publicName: "warning", isSignal: true, isRequired: false, transformFunction: null }, verbose: { classPropertyName: "verbose", publicName: "verbose", isSignal: true, isRequired: false, transformFunction: null }, translatorOptions: { classPropertyName: "translatorOptions", publicName: "translatorOptions", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, _icon: { classPropertyName: "_icon", publicName: "icon", isSignal: false, isRequired: false, transformFunction: null }, _rightIcon: { classPropertyName: "_rightIcon", publicName: "rightIcon", isSignal: false, isRequired: false, transformFunction: null }, _leftIcon: { classPropertyName: "_leftIcon", publicName: "leftIcon", isSignal: false, isRequired: false, transformFunction: null }, _type: { classPropertyName: "_type", publicName: "type", isSignal: false, isRequired: false, transformFunction: null }, _group: { classPropertyName: "_group", publicName: "group", isSignal: false, isRequired: false, transformFunction: null }, actionType: { classPropertyName: "actionType", publicName: "actionType", isSignal: true, isRequired: false, transformFunction: null }, animate: { classPropertyName: "animate", publicName: "animate", isSignal: true, isRequired: false, transformFunction: null }, excludeLogging: { classPropertyName: "excludeLogging", publicName: "excludeLogging", isSignal: false, isRequired: false, transformFunction: booleanAttribute2 }, loggingValue: { classPropertyName: "loggingValue", publicName: "loggingValue", isSignal: false, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, customIcon: { classPropertyName: "customIcon", publicName: "customIcon", isSignal: false, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, forms: { classPropertyName: "forms", publicName: "forms", isSignal: true, isRequired: false, transformFunction: null }, help: { classPropertyName: "help", publicName: "help", isSignal: true, isRequired: false, transformFunction: null }, helpShowDelay: { classPropertyName: "helpShowDelay", publicName: "helpShowDelay", isSignal: true, isRequired: false, transformFunction: null }, _iconBtn: { classPropertyName: "_iconBtn", publicName: "iconBtn", isSignal: false, isRequired: false, transformFunction: booleanAttribute2 }, mclass: { classPropertyName: "mclass", publicName: "mclass", isSignal: true, isRequired: false, transformFunction: null }, showHelpIcon: { classPropertyName: "showHelpIcon", publicName: "showHelpIcon", isSignal: true, isRequired: false, transformFunction: null }, _rightCustomIcon: { classPropertyName: "_rightCustomIcon", publicName: "rightCustomIcon", isSignal: false, isRequired: false, transformFunction: null }, leftCustomIcon: { classPropertyName: "leftCustomIcon", publicName: "leftCustomIcon", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: true, isRequired: false, transformFunction: null }, mini: { classPropertyName: "mini", publicName: "mini", isSignal: true, isRequired: false, transformFunction: null }, onFormInvalid: { classPropertyName: "onFormInvalid", publicName: "onFormInvalid", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loading: "loadingChange", leftCustomIcon: "leftCustomIconChange", mclick: "mclick", disabled: "disabledChange" }, viewQueries: [{ propertyName: "innerText", first: true, predicate: ["innerText"], descendants: true }], ngImport: i0, template: "@if (verbose()) {\n <div class=\"\">formState():{{ formState() | json }}</div>\n <div class=\"\">form():{{ form()?.getRawValue() | json }}</div>\n}\n<span\n class=\"{{ class() }} d-flex align-items-center justify-content-center\"\n [ngClass]=\"{ disabled: isDisabled(), mini: mini() }\"\n (click)=\"checkForm()\">\n @if (showHelpIcon() && help()) {\n <i\n class=\"fa fa-info-circle me-2 text-primary\"\n [matTooltipShowDelay]=\"helpShowDelay()\"\n [matTooltip]=\"help() | appTranslate: translatorOptions() | async\"></i>\n }\n <button\n type=\"{{ actionType() }}\"\n class=\"{{ mclass() }} {{ _mclass() || 'btn' }} d-flex align-items-center \"\n [matBadge]=\"badge()\"\n [ngClass]=\"ngClass()\"\n [disabled]=\"isDisabled()\"\n (click)=\"click($event)\"\n [matTooltipShowDelay]=\"helpShowDelay()\"\n [matTooltip]=\"showHelpIcon() ? null : (help() | appTranslate: translatorOptions() | async)\">\n @if (showLeftDisabledIcon()) {\n <fa-icon [icon]=\"lockedIcon()\" />\n } @else if (showLeftCustomIcon()) {\n <i class=\"{{ leftCustomIcon() }}\"></i>\n } @else if (showLeftIcon()) {\n <fa-icon [icon]=\"leftIcon()\" />\n }\n\n @if (computedText()) {\n <span\n class=\"\"\n [ngClass]=\"{\n 'ms-1': leftIcon() || leftCustomIcon(),\n 'me-1': rightIcon() || rightCustomIcon(),\n }\">\n {{ computedText() | appTranslate: translatorOptions() | async }}\n </span>\n } @else {\n <span\n class=\" \"\n [ngClass]=\"{\n 'ms-1': innerText.innerText && (leftIcon() || leftCustomIcon()),\n 'me-1': innerText.innerText && (rightIcon() || rightCustomIcon()),\n }\"\n #innerText\n [debug]=\"debug()\"\n appTranslator>\n <ng-content></ng-content>\n </span>\n }\n\n @if (loading()) {\n <span class=\"fa fa-spinner ms-{{ iconBtn() ? '' : '2' }} fa-spin\"></span>\n } @else if (showRightDisabledIcon()) {\n <fa-icon [icon]=\"lockedIcon()\" />\n } @else if (showRightCustomIcon()) {\n <i class=\"{{ rightCustomIcon() }}\"></i>\n } @else if (showRightIcon()) {\n <fa-icon [icon]=\"rightIcon()\" />\n }\n </button>\n</span>\n", styles: [".lite{padding:0}.disabled{cursor:not-allowed}.invalid{border:3px solid var(--bs-danger)}.mini button{height:auto!important;min-height:unset;padding:2px 5px}@keyframes animateDanger{0%{background-color:red;border-color:red;background-image:none;color:#fff}50%{background-color:red;border-color:red;background-image:none;color:#fff}}@keyframes animateWarning{0%{background-color:#ff8107;border-color:#ff8107;background-image:none;color:#000}50%{background-color:#ff8107;border-color:#ff8107;background-image:none;color:#000}}.isDanger{animation-name:animateDanger;animation-duration:1s;animation-iteration-count:infinite}.isWarning{animation-name:animateWarning;animation-duration:1s;animation-iteration-count:infinite}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i2.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i2$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }, { kind: "directive", type: TranslatorDirective, selector: "[appTranslator]", inputs: ["appTranslator", "debug", "translateOptions"] }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
6149
6044
  }
6150
6045
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: BtnComponent, decorators: [{
6151
6046
  type: Component,
@@ -6158,7 +6053,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
6158
6053
  TranslatorDirective,
6159
6054
  AsyncPipe,
6160
6055
  SDKTranslatePipe,
6161
- ], template: "@if (verbose()) {\n <div class=\"\">formState():{{ formState() | json }}</div>\n <div class=\"\">form():{{ form()?.getRawValue() | json }}</div>\n}\n<span\n class=\"{{ class() }} d-flex align-items-center justify-content-center\"\n [ngClass]=\"{ disabled: isDisabled(), mini: mini() }\"\n (click)=\"btnS.checkForm(this)\">\n @if (showHelpIcon() && help()) {\n <i\n class=\"fa fa-info-circle me-2 text-primary\"\n [matTooltipShowDelay]=\"helpShowDelay()\"\n [matTooltip]=\"help() | appTranslate: translatorOptions() | async\"></i>\n }\n <button\n type=\"{{ actionType() }}\"\n class=\"{{ mclass() }} {{ _mclass() || 'btn' }} d-flex align-items-center \"\n [matBadge]=\"badge()\"\n [ngClass]=\"ngClass()\"\n [disabled]=\"isDisabled()\"\n (click)=\"click($event)\"\n [matTooltipShowDelay]=\"helpShowDelay()\"\n [matTooltip]=\"showHelpIcon() ? null : (help() | appTranslate: translatorOptions() | async)\">\n @if (showLeftDisabledIcon()) {\n <fa-icon [icon]=\"lockedIcon()\" />\n } @else if (showLeftCustomIcon()) {\n <i class=\"{{ leftCustomIcon() }}\"></i>\n } @else if (showLeftIcon()) {\n <fa-icon [icon]=\"leftIcon()\" />\n }\n\n @if (computedText()) {\n <span\n class=\"\"\n [ngClass]=\"{\n 'ms-1': leftIcon() || leftCustomIcon(),\n 'me-1': rightIcon() || rightCustomIcon(),\n }\">\n {{ computedText() | appTranslate: translatorOptions() | async }}\n </span>\n } @else {\n <span\n class=\" \"\n [ngClass]=\"{\n 'ms-1': innerText.innerText && (leftIcon() || leftCustomIcon()),\n 'me-1': innerText.innerText && (rightIcon() || rightCustomIcon()),\n }\"\n #innerText\n [debug]=\"debug()\"\n appTranslator>\n <ng-content></ng-content>\n </span>\n }\n\n @if (loading()) {\n <span class=\"fa fa-spinner ms-{{ iconBtn() ? '' : '2' }} fa-spin\"></span>\n } @else if (showRightDisabledIcon()) {\n <fa-icon [icon]=\"lockedIcon()\" />\n } @else if (showRightCustomIcon()) {\n <i class=\"{{ rightCustomIcon() }}\"></i>\n } @else if (showRightIcon()) {\n <fa-icon [icon]=\"rightIcon()\" />\n }\n </button>\n</span>\n", styles: [".lite{padding:0}.disabled{cursor:not-allowed}.invalid{border:3px solid var(--bs-danger)}.mini button{height:auto!important;min-height:unset;padding:2px 5px}@keyframes animateDanger{0%{background-color:red;border-color:red;background-image:none;color:#fff}50%{background-color:red;border-color:red;background-image:none;color:#fff}}@keyframes animateWarning{0%{background-color:#ff8107;border-color:#ff8107;background-image:none;color:#000}50%{background-color:#ff8107;border-color:#ff8107;background-image:none;color:#000}}.isDanger{animation-name:animateDanger;animation-duration:1s;animation-iteration-count:infinite}.isWarning{animation-name:animateWarning;animation-duration:1s;animation-iteration-count:infinite}\n"] }]
6056
+ ], template: "@if (verbose()) {\n <div class=\"\">formState():{{ formState() | json }}</div>\n <div class=\"\">form():{{ form()?.getRawValue() | json }}</div>\n}\n<span\n class=\"{{ class() }} d-flex align-items-center justify-content-center\"\n [ngClass]=\"{ disabled: isDisabled(), mini: mini() }\"\n (click)=\"checkForm()\">\n @if (showHelpIcon() && help()) {\n <i\n class=\"fa fa-info-circle me-2 text-primary\"\n [matTooltipShowDelay]=\"helpShowDelay()\"\n [matTooltip]=\"help() | appTranslate: translatorOptions() | async\"></i>\n }\n <button\n type=\"{{ actionType() }}\"\n class=\"{{ mclass() }} {{ _mclass() || 'btn' }} d-flex align-items-center \"\n [matBadge]=\"badge()\"\n [ngClass]=\"ngClass()\"\n [disabled]=\"isDisabled()\"\n (click)=\"click($event)\"\n [matTooltipShowDelay]=\"helpShowDelay()\"\n [matTooltip]=\"showHelpIcon() ? null : (help() | appTranslate: translatorOptions() | async)\">\n @if (showLeftDisabledIcon()) {\n <fa-icon [icon]=\"lockedIcon()\" />\n } @else if (showLeftCustomIcon()) {\n <i class=\"{{ leftCustomIcon() }}\"></i>\n } @else if (showLeftIcon()) {\n <fa-icon [icon]=\"leftIcon()\" />\n }\n\n @if (computedText()) {\n <span\n class=\"\"\n [ngClass]=\"{\n 'ms-1': leftIcon() || leftCustomIcon(),\n 'me-1': rightIcon() || rightCustomIcon(),\n }\">\n {{ computedText() | appTranslate: translatorOptions() | async }}\n </span>\n } @else {\n <span\n class=\" \"\n [ngClass]=\"{\n 'ms-1': innerText.innerText && (leftIcon() || leftCustomIcon()),\n 'me-1': innerText.innerText && (rightIcon() || rightCustomIcon()),\n }\"\n #innerText\n [debug]=\"debug()\"\n appTranslator>\n <ng-content></ng-content>\n </span>\n }\n\n @if (loading()) {\n <span class=\"fa fa-spinner ms-{{ iconBtn() ? '' : '2' }} fa-spin\"></span>\n } @else if (showRightDisabledIcon()) {\n <fa-icon [icon]=\"lockedIcon()\" />\n } @else if (showRightCustomIcon()) {\n <i class=\"{{ rightCustomIcon() }}\"></i>\n } @else if (showRightIcon()) {\n <fa-icon [icon]=\"rightIcon()\" />\n }\n </button>\n</span>\n", styles: [".lite{padding:0}.disabled{cursor:not-allowed}.invalid{border:3px solid var(--bs-danger)}.mini button{height:auto!important;min-height:unset;padding:2px 5px}@keyframes animateDanger{0%{background-color:red;border-color:red;background-image:none;color:#fff}50%{background-color:red;border-color:red;background-image:none;color:#fff}}@keyframes animateWarning{0%{background-color:#ff8107;border-color:#ff8107;background-image:none;color:#000}50%{background-color:#ff8107;border-color:#ff8107;background-image:none;color:#000}}.isDanger{animation-name:animateDanger;animation-duration:1s;animation-iteration-count:infinite}.isWarning{animation-name:animateWarning;animation-duration:1s;animation-iteration-count:infinite}\n"] }]
6162
6057
  }], ctorParameters: () => [], propDecorators: { _icon: [{
6163
6058
  type: Input,
6164
6059
  args: ['icon']
@@ -6493,44 +6388,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
6493
6388
  standalone: true,
6494
6389
  }]
6495
6390
  }] });
6496
- /**
6497
- * Converts an object to an array of labels for display
6498
- */
6499
- class ObjectToLabelsPipe {
6500
- /**
6501
- * Converts an object to an array of labels with optional custom field mapping
6502
- * @param value The source object to convert
6503
- * @param customFieldMap Optional mapping of object keys to ITextCase2 properties
6504
- * @param exclusionList Optional map of field names to exclude
6505
- * @returns Array of ITextCase2 objects representing the object's fields
6506
- */
6507
- transform(value, customFieldMap, exclusionList) {
6508
- // debugger;
6509
- const _exclusionList = {
6510
- id: true,
6511
- ...exclusionList,
6512
- };
6513
- return Object.keys(value || {})
6514
- .filter((x) => !_exclusionList[x])
6515
- .map((f) => ({
6516
- ...customFieldMap?.[f],
6517
- label: customFieldMap?.[f]?.label || this.uS.formatField(f),
6518
- value: value[f],
6519
- }));
6520
- }
6521
- constructor(uS) {
6522
- this.uS = uS;
6523
- }
6524
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ObjectToLabelsPipe, deps: [{ token: UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6525
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: ObjectToLabelsPipe, isStandalone: true, name: "objectToLabels" }); }
6526
- }
6527
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ObjectToLabelsPipe, decorators: [{
6528
- type: Pipe,
6529
- args: [{
6530
- name: 'objectToLabels',
6531
- standalone: true,
6532
- }]
6533
- }], ctorParameters: () => [{ type: UtilityService }] });
6534
6391
  /**
6535
6392
  * Retrieves a label for a value from a list of options
6536
6393
  */
@@ -7235,42 +7092,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
7235
7092
  standalone: true,
7236
7093
  }]
7237
7094
  }] });
7238
- /**
7239
- * Converts a form.value to string
7240
- */
7241
- class FormValuePipe {
7242
- transform(formValue, formSchema) {
7243
- // debugger;
7244
- return formValue
7245
- ? (formSchema?.length && typeof formSchema[0] != 'string'
7246
- ? formSchema.map((field) => {
7247
- // debugger;
7248
- const val = field.type == 'select' || field.type == 'autocomplete'
7249
- ? field.selectedOptionLabel || formValue[field.field]
7250
- : formValue[field.field];
7251
- return val != null ? `${field.label}: ${val}` : null;
7252
- })
7253
- : (formSchema || Object.keys(formValue)).map((x) => {
7254
- const val = formValue[x];
7255
- return `${this.uS.formatField(x)}: ${val != null ? val : '-'}`;
7256
- }))
7257
- .filter((x) => x)
7258
- .join('\n')
7259
- : '';
7260
- }
7261
- constructor(uS) {
7262
- this.uS = uS;
7263
- }
7264
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FormValuePipe, deps: [{ token: UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7265
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: FormValuePipe, isStandalone: true, name: "formValue" }); }
7266
- }
7267
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FormValuePipe, decorators: [{
7268
- type: Pipe,
7269
- args: [{
7270
- name: 'formValue',
7271
- standalone: true,
7272
- }]
7273
- }], ctorParameters: () => [{ type: UtilityService }] });
7274
7095
  /**
7275
7096
  * Converts a field name to a formatted label
7276
7097
  */
@@ -7462,25 +7283,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
7462
7283
  type: Pipe,
7463
7284
  args: [{ name: 'objectToArray', standalone: true }]
7464
7285
  }] });
7465
- /**
7466
- * Converts form schema to table columns
7467
- */
7468
- class FormSchemaToTableColumnsPipe {
7469
- /**
7470
- * Converts form schema to table columns configuration
7471
- * @param value Array of form schema definitions
7472
- * @returns Array of table column configurations
7473
- */
7474
- transform(value) {
7475
- return value?.map((x) => ({ f: x.field, t: x.label })) || [];
7476
- }
7477
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FormSchemaToTableColumnsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
7478
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: FormSchemaToTableColumnsPipe, isStandalone: true, name: "formSchemaToCols" }); }
7479
- }
7480
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FormSchemaToTableColumnsPipe, decorators: [{
7481
- type: Pipe,
7482
- args: [{ name: 'formSchemaToCols', standalone: true }]
7483
- }] });
7484
7286
  /**
7485
7287
  * Provides responsive values based on screen size
7486
7288
  */
@@ -7526,8 +7328,6 @@ const comps$3 = [
7526
7328
  FilterArrayPipe,
7527
7329
  FilterFormArrayGroupPipe,
7528
7330
  FormInvalidClassPipe,
7529
- FormSchemaToTableColumnsPipe,
7530
- FormValuePipe,
7531
7331
  FunctionCaller,
7532
7332
  FunctionCaller1,
7533
7333
  FunctionCaller2,
@@ -7563,7 +7363,7 @@ const comps$3 = [
7563
7363
  const modules = [];
7564
7364
  class UtilityPipesModule {
7565
7365
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UtilityPipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7566
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: UtilityPipesModule, imports: [CommonModule, ArraySplitter, CustomDatePipe, FieldToLabelPipe, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayGroupPipe, FormInvalidClassPipe, FormSchemaToTableColumnsPipe, FormValuePipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetValueLabel, HasFormValuePipe, HasValuePipe, CodeTitleDescPipe, HttpListCaller, HttpListCaller1, HttpListCaller2, IsClonePage, IsShowPage, ObjectToArrayPipe, RefresherPipe, RemoveUsedOptionsPipe, ReplaceAllPipe, ResponsiveValPipe, RoundPipe, SecondsToTimePipe, SortPipe, StrConcatenatorPipe, ToAnyArrayPipe, ToAnyPipe, SDKTranslatePipe, TrimPipe, TrimTextPipe, ValueFormatterPipe, ValueOrXPipe, XOrYPipe], exports: [ArraySplitter, CustomDatePipe, FieldToLabelPipe, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayGroupPipe, FormInvalidClassPipe, FormSchemaToTableColumnsPipe, FormValuePipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetValueLabel, HasFormValuePipe, HasValuePipe, CodeTitleDescPipe, HttpListCaller, HttpListCaller1, HttpListCaller2, IsClonePage, IsShowPage, ObjectToArrayPipe, RefresherPipe, RemoveUsedOptionsPipe, ReplaceAllPipe, ResponsiveValPipe, RoundPipe, SecondsToTimePipe, SortPipe, StrConcatenatorPipe, ToAnyArrayPipe, ToAnyPipe, SDKTranslatePipe, TrimPipe, TrimTextPipe, ValueFormatterPipe, ValueOrXPipe, XOrYPipe] }); }
7366
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: UtilityPipesModule, imports: [CommonModule, ArraySplitter, CustomDatePipe, FieldToLabelPipe, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayGroupPipe, FormInvalidClassPipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetValueLabel, HasFormValuePipe, HasValuePipe, CodeTitleDescPipe, HttpListCaller, HttpListCaller1, HttpListCaller2, IsClonePage, IsShowPage, ObjectToArrayPipe, RefresherPipe, RemoveUsedOptionsPipe, ReplaceAllPipe, ResponsiveValPipe, RoundPipe, SecondsToTimePipe, SortPipe, StrConcatenatorPipe, ToAnyArrayPipe, ToAnyPipe, SDKTranslatePipe, TrimPipe, TrimTextPipe, ValueFormatterPipe, ValueOrXPipe, XOrYPipe], exports: [ArraySplitter, CustomDatePipe, FieldToLabelPipe, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayGroupPipe, FormInvalidClassPipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetValueLabel, HasFormValuePipe, HasValuePipe, CodeTitleDescPipe, HttpListCaller, HttpListCaller1, HttpListCaller2, IsClonePage, IsShowPage, ObjectToArrayPipe, RefresherPipe, RemoveUsedOptionsPipe, ReplaceAllPipe, ResponsiveValPipe, RoundPipe, SecondsToTimePipe, SortPipe, StrConcatenatorPipe, ToAnyArrayPipe, ToAnyPipe, SDKTranslatePipe, TrimPipe, TrimTextPipe, ValueFormatterPipe, ValueOrXPipe, XOrYPipe] }); }
7567
7367
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UtilityPipesModule, imports: [CommonModule, modules] }); }
7568
7368
  }
7569
7369
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UtilityPipesModule, decorators: [{
@@ -8298,6 +8098,7 @@ class ValidationMessageComponent {
8298
8098
  /** Whether to show validation errors regardless of the control's dirty state */
8299
8099
  this.ignoreDirtiness = input(...(ngDevMode ? [undefined, { debugName: "ignoreDirtiness" }] : []));
8300
8100
  /** InputBasicComponent that contains the control to validate */
8101
+ // readonly input = input<InputBasicComponent | undefined>();
8301
8102
  this.input = input(...(ngDevMode ? [undefined, { debugName: "input" }] : []));
8302
8103
  /** Label for the input field */
8303
8104
  this.label = model(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
@@ -8394,7 +8195,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
8394
8195
  SDKTranslatePipe,
8395
8196
  forwardRef(() => ErrorMessagePipe),
8396
8197
  MatTooltipModule,
8397
- SDKTranslateNoLoaderPipe
8198
+ SDKTranslateNoLoaderPipe,
8398
8199
  ], template: "<div class=\"text-danger\" [class.applyMargin]=\"applyMargin()\" (click)=\"logErrors()\" [ngClass]=\"{ hideOverflow: hideOverflow() }\" #el>\n @for (error of computedErrors(); track error) {\n <div class=\"d-flex gap-1\">\n <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i>\n <span\n class=\"me-2 errormssg\"\n [matTooltip]=\"ele.innerText\"\n [matTooltipDisabled]=\"\n ele.scrollHeight <= ele.offsetHeight && ele.scrollWidth <= ele.offsetWidth\n \"\n [innerHTML]=\"error | appTranslateNL: translationConfig | async\"\n #ele></span>\n </div>\n }\n</div>\n", styles: [".text-danger{min-height:25px;position:relative}.applyMargin{margin-top:5px}.errormssg{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%;font-size:.8rem}.hideOverflow{height:25px;overflow:hidden}\n"] }]
8399
8200
  }] });
8400
8201
  /**
@@ -10258,11 +10059,6 @@ const InputSharedModules = [
10258
10059
  MatSelectModule,
10259
10060
  MatTooltipModule,
10260
10061
  NgClass,
10261
- NgFor,
10262
- NgIf,
10263
- NgSwitch,
10264
- NgSwitchCase,
10265
- NgSwitchDefault,
10266
10062
  ReactiveFormsModule,
10267
10063
  ToAnyPipe,
10268
10064
  SDKTranslatePipe,
@@ -16232,7 +16028,134 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
16232
16028
  template: '',
16233
16029
  standalone: false
16234
16030
  }]
16235
- }], ctorParameters: () => [] });
16031
+ }], ctorParameters: () => [] });
16032
+
16033
+ /**
16034
+ * Component for displaying information dialogs with customizable content and actions.
16035
+ * Supports different status types (success, info, danger, warning) and configurable buttons.
16036
+ */
16037
+ class InfoDialogComponent {
16038
+ /**
16039
+ * @param data Configuration data for the dialog
16040
+ * @param data.text Main content text to display
16041
+ * @param data.heading Dialog title/heading
16042
+ * @param data.status Status code determining the dialog's visual style (0=danger, 1=success, 2=info, 3=warning)
16043
+ * @param data.btns Array of button configurations to display
16044
+ * @param dialogRef Reference to the dialog instance
16045
+ */
16046
+ constructor(data, dialogRef) {
16047
+ this.data = data;
16048
+ this.dialogRef = dialogRef;
16049
+ /**
16050
+ * Handles custom button actions
16051
+ * @param event The pointer event that triggered the action
16052
+ * @param item The button configuration
16053
+ */
16054
+ this.handleAction = (event, item) => {
16055
+ item?.action(event);
16056
+ if (item?.closeBoxOnClick)
16057
+ this.dialogRef.close();
16058
+ };
16059
+ /**
16060
+ * Returns the CSS class name based on the status code
16061
+ * @param status Status code (0=danger, 1=success, 2=info, 3=warning)
16062
+ * @returns CSS class name corresponding to the status
16063
+ */
16064
+ this.cls = (status = this.data.status) => {
16065
+ switch (status) {
16066
+ case 1:
16067
+ return 'success';
16068
+ case 2:
16069
+ return 'info';
16070
+ case 0:
16071
+ return 'danger';
16072
+ case 3:
16073
+ return 'warning';
16074
+ default:
16075
+ return '';
16076
+ }
16077
+ };
16078
+ }
16079
+ /** Lifecycle hook that is called after data-bound properties are initialized */
16080
+ ngOnInit() { }
16081
+ /**
16082
+ * Handles the affirmative action for the dialog
16083
+ * @param btn Optional button configuration that triggered this action
16084
+ */
16085
+ yes(btn) {
16086
+ if (btn && btn.closeBoxOnClick === false)
16087
+ return;
16088
+ this.dialogRef.close(true);
16089
+ }
16090
+ /**
16091
+ * Handles the negative action for the dialog
16092
+ * Closes the dialog with a false result
16093
+ */
16094
+ no() {
16095
+ this.dialogRef.close(false);
16096
+ }
16097
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InfoDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1$3.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
16098
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: InfoDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div class=\"d-flex justify-content-between align-items-center\">\n <div class=\"text-{{ cls() }} ms-3 font-weight-bold text-uppercase\">\n <i class=\"fa fa-{{ data?.status ? 'check-circle' : 'exclamation-circle' }}\"></i>\n {{ data?.heading || 'Notice' | appTranslate | async }}\n </div>\n <button mat-icon-button (click)=\"yes()\" class=\"btn-outline-danger\">\n <i class=\"material-icons\">close</i>\n </button>\n</div>\n\n<div class=\"info-body\" [innerHTML]=\"data?.text | appTranslate | async\"></div>\n\n@if (data?.btns?.length) {\n <div class=\"info-buttons\">\n <div class=\"row justify-content-center\">\n @for (item of data?.btns; track item) {\n <div class=\"col-md-auto my-1\">\n <app-btn\n [type]=\"item.type || 'secondary'\"\n text=\"{{ item.value || item.label }}\"\n [icon]=\"item.icon\"\n (mclick)=\"item.action($event); yes(item)\"></app-btn>\n </div>\n }\n </div>\n </div>\n}\n<div class=\"bg-{{ cls() }} mt-2 rounded bar\"></div>\n", styles: [":host{text-align:center}:host .bar{height:5px}:host .info-body{overflow-wrap:anywhere;white-space:pre-line;padding:1rem}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "translatorOptions", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "helpShowDelay", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
16099
+ }
16100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InfoDialogComponent, decorators: [{
16101
+ type: Component,
16102
+ args: [{ imports: [MatButtonModule, BtnComponent, AsyncPipe, SDKTranslatePipe], template: "<div class=\"d-flex justify-content-between align-items-center\">\n <div class=\"text-{{ cls() }} ms-3 font-weight-bold text-uppercase\">\n <i class=\"fa fa-{{ data?.status ? 'check-circle' : 'exclamation-circle' }}\"></i>\n {{ data?.heading || 'Notice' | appTranslate | async }}\n </div>\n <button mat-icon-button (click)=\"yes()\" class=\"btn-outline-danger\">\n <i class=\"material-icons\">close</i>\n </button>\n</div>\n\n<div class=\"info-body\" [innerHTML]=\"data?.text | appTranslate | async\"></div>\n\n@if (data?.btns?.length) {\n <div class=\"info-buttons\">\n <div class=\"row justify-content-center\">\n @for (item of data?.btns; track item) {\n <div class=\"col-md-auto my-1\">\n <app-btn\n [type]=\"item.type || 'secondary'\"\n text=\"{{ item.value || item.label }}\"\n [icon]=\"item.icon\"\n (mclick)=\"item.action($event); yes(item)\"></app-btn>\n </div>\n }\n </div>\n </div>\n}\n<div class=\"bg-{{ cls() }} mt-2 rounded bar\"></div>\n", styles: [":host{text-align:center}:host .bar{height:5px}:host .info-body{overflow-wrap:anywhere;white-space:pre-line;padding:1rem}\n"] }]
16103
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
16104
+ type: Inject,
16105
+ args: [MAT_DIALOG_DATA]
16106
+ }] }, { type: i1$3.MatDialogRef }] });
16107
+
16108
+ class InfoDialogService {
16109
+ constructor(dialog) {
16110
+ this.dialog = dialog;
16111
+ this.overrideDialogConfig = {};
16112
+ this.errorReporterService = inject(ErrorReporterService);
16113
+ this.info = (text, status = 1, heading, btns, disableClose = false) => {
16114
+ if (status == 0)
16115
+ if (typeof text != 'string') {
16116
+ console.error(text);
16117
+ this.errorReporterService.reportError(text);
16118
+ text = 'An error occurred';
16119
+ }
16120
+ else
16121
+ this.errorReporterService.reportMessage(text);
16122
+ return this.dialog
16123
+ .open(InfoDialogComponent, {
16124
+ data: {
16125
+ text,
16126
+ status: +status,
16127
+ heading: heading || (status ? 'Success!' : 'Oops!'),
16128
+ btns: btns?.filter((b) => b),
16129
+ },
16130
+ height: 'auto',
16131
+ minWidth: '450px',
16132
+ maxWidth: '90vw',
16133
+ maxHeight: '90vh',
16134
+ autoFocus: false,
16135
+ disableClose,
16136
+ ...this.overrideDialogConfig,
16137
+ })
16138
+ .afterClosed()
16139
+ .toPromise()
16140
+ .then((r) => {
16141
+ if (r) {
16142
+ return true;
16143
+ }
16144
+ else {
16145
+ return false;
16146
+ }
16147
+ });
16148
+ };
16149
+ }
16150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InfoDialogService, deps: [{ token: i1$3.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable }); }
16151
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InfoDialogService, providedIn: 'root' }); }
16152
+ }
16153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InfoDialogService, decorators: [{
16154
+ type: Injectable,
16155
+ args: [{
16156
+ providedIn: 'root',
16157
+ }]
16158
+ }], ctorParameters: () => [{ type: i1$3.MatDialog }] });
16236
16159
 
16237
16160
  /**
16238
16161
  * Form Generator Component
@@ -16283,6 +16206,7 @@ class FormGeneratorComponent extends BaseFormGenerator {
16283
16206
  }
16284
16207
  constructor() {
16285
16208
  super();
16209
+ this.infoDialogService = inject(InfoDialogService);
16286
16210
  /** Determines which field to use as the key - 'field' or 'label' */
16287
16211
  this.keyField = 'field';
16288
16212
  /** Whether to preset value for single option */
@@ -16515,11 +16439,11 @@ class FormGeneratorComponent extends BaseFormGenerator {
16515
16439
  try {
16516
16440
  this.submissionResponse = await this.submitFunc(formVal);
16517
16441
  if (this.submitSuccessText())
16518
- this.utilityService.info(this.submitSuccessText(), 1);
16442
+ this.infoDialogService.info(this.submitSuccessText(), 1);
16519
16443
  this.saved.emit(this.submissionResponse);
16520
16444
  }
16521
16445
  catch (error) {
16522
- this.utilityService.info(error, 0);
16446
+ this.infoDialogService.info(error, 0);
16523
16447
  }
16524
16448
  this._loading.set(false);
16525
16449
  btn?.setLoader(false);
@@ -17702,7 +17626,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
17702
17626
  TextCase2Component,
17703
17627
  ToAnyPipe,
17704
17628
  ValidationMessageComponent,
17705
- ValueOrXPipe
17629
+ ValueOrXPipe,
17706
17630
  ], providers: [ListOptionFinderPipe], template: "<loader [loading]=\"computedLoading()\">\n <form>\n <div\n class=\"row row-cols-{{ gridStyle() }} row-cols-md-{{ gridMDStyle() }} row-cols-lg-{{\n gridLGStyle()\n }} row-cols-xxl-{{ gridXXLStyle() }} align-items-center {{ formGridClass() }}\">\n @for (scheme of computedListValue(); track scheme.field) {\n <div class=\"col {{ scheme.cls }} \">\n @switch (true) {\n @case (scheme.type == 'tel') {\n <app-phone-number\n [form]=\"form()\"\n [label]=\"scheme.label\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [name]=\"scheme.field\"\n [showLabel]=\"false\"\n [noFormat]=\"scheme.noFormat\"\n [debug]=\"scheme.debug\"\n [showValidation]=\"scheme.showValidation\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [showRequiredTag]=\"scheme.showRequiredTag\"\n [showValidationIcon]=\"scheme.showValidationIcon\"\n [countryCode3]=\"scheme.countryCode3\"\n #inputTag />\n } \n @default {\n <div class=\"\">\n <div class=\"text-primary\">\n {{ scheme.label }}\n </div>\n <div class=\" \">\n {{ scheme.formattedValue | valueOrX: '-' }}\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n </form>\n</loader>\n\n<ng-template #labelValue let-obj>\n <div class=\"\">\n <div class=\"text-primary\">\n {{ obj.scheme.label }}\n </div>\n <div class=\" \">\n {{ formatValue | functionCaller2: obj.scheme : obj.value | valueOrX: '-' }}\n </div>\n </div>\n</ng-template>\n", styles: [":host ::ng-deep input:not([type=checkbox]),:host ::ng-deep .control-bg-gray.form-control,:host ::ng-deep textarea{border:none!important;background-color:transparent!important;padding:0!important;height:auto!important}\n"] }]
17707
17631
  }], ctorParameters: () => [] });
17708
17632
 
@@ -17764,135 +17688,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
17764
17688
  type: Output
17765
17689
  }] } });
17766
17690
 
17767
- /**
17768
- * Component for displaying information dialogs with customizable content and actions.
17769
- * Supports different status types (success, info, danger, warning) and configurable buttons.
17770
- */
17771
- class InfoDialogComponent {
17772
- /**
17773
- * @param data Configuration data for the dialog
17774
- * @param data.text Main content text to display
17775
- * @param data.heading Dialog title/heading
17776
- * @param data.status Status code determining the dialog's visual style (0=danger, 1=success, 2=info, 3=warning)
17777
- * @param data.btns Array of button configurations to display
17778
- * @param dialogRef Reference to the dialog instance
17779
- */
17780
- constructor(data, dialogRef) {
17781
- this.data = data;
17782
- this.dialogRef = dialogRef;
17783
- /**
17784
- * Handles custom button actions
17785
- * @param event The pointer event that triggered the action
17786
- * @param item The button configuration
17787
- */
17788
- this.handleAction = (event, item) => {
17789
- item?.action(event);
17790
- if (item?.closeBoxOnClick)
17791
- this.dialogRef.close();
17792
- };
17793
- /**
17794
- * Returns the CSS class name based on the status code
17795
- * @param status Status code (0=danger, 1=success, 2=info, 3=warning)
17796
- * @returns CSS class name corresponding to the status
17797
- */
17798
- this.cls = (status = this.data.status) => {
17799
- switch (status) {
17800
- case 1:
17801
- return 'success';
17802
- case 2:
17803
- return 'info';
17804
- case 0:
17805
- return 'danger';
17806
- case 3:
17807
- return 'warning';
17808
- default:
17809
- return '';
17810
- }
17811
- };
17812
- }
17813
- /** Lifecycle hook that is called after data-bound properties are initialized */
17814
- ngOnInit() { }
17815
- /**
17816
- * Handles the affirmative action for the dialog
17817
- * @param btn Optional button configuration that triggered this action
17818
- */
17819
- yes(btn) {
17820
- if (btn && btn.closeBoxOnClick === false)
17821
- return;
17822
- this.dialogRef.close(true);
17823
- }
17824
- /**
17825
- * Handles the negative action for the dialog
17826
- * Closes the dialog with a false result
17827
- */
17828
- no() {
17829
- this.dialogRef.close(false);
17830
- }
17831
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InfoDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1$3.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
17832
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: InfoDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div class=\"d-flex justify-content-between align-items-center\">\n <div class=\"text-{{ cls() }} ms-3 font-weight-bold text-uppercase\">\n <i class=\"fa fa-{{ data?.status ? 'check-circle' : 'exclamation-circle' }}\"></i>\n {{ data?.heading || 'Notice' | appTranslate | async }}\n </div>\n <button mat-icon-button (click)=\"yes()\" class=\"btn-outline-danger\">\n <i class=\"material-icons\">close</i>\n </button>\n</div>\n\n<div class=\"info-body\" [innerHTML]=\"data?.text | appTranslate | async\"></div>\n\n@if (data?.btns?.length) {\n <div class=\"info-buttons\">\n <div class=\"row justify-content-center\">\n @for (item of data?.btns; track item) {\n <div class=\"col-md-auto my-1\">\n <app-btn\n [type]=\"item.type || 'secondary'\"\n text=\"{{ item.value || item.label }}\"\n [icon]=\"item.icon\"\n (mclick)=\"item.action($event); yes(item)\"></app-btn>\n </div>\n }\n </div>\n </div>\n}\n<div class=\"bg-{{ cls() }} mt-2 rounded bar\"></div>\n", styles: [":host{text-align:center}:host .bar{height:5px}:host .info-body{overflow-wrap:anywhere;white-space:pre-line;padding:1rem}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "translatorOptions", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "helpShowDelay", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
17833
- }
17834
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InfoDialogComponent, decorators: [{
17835
- type: Component,
17836
- args: [{ imports: [MatButtonModule, BtnComponent, AsyncPipe, SDKTranslatePipe], template: "<div class=\"d-flex justify-content-between align-items-center\">\n <div class=\"text-{{ cls() }} ms-3 font-weight-bold text-uppercase\">\n <i class=\"fa fa-{{ data?.status ? 'check-circle' : 'exclamation-circle' }}\"></i>\n {{ data?.heading || 'Notice' | appTranslate | async }}\n </div>\n <button mat-icon-button (click)=\"yes()\" class=\"btn-outline-danger\">\n <i class=\"material-icons\">close</i>\n </button>\n</div>\n\n<div class=\"info-body\" [innerHTML]=\"data?.text | appTranslate | async\"></div>\n\n@if (data?.btns?.length) {\n <div class=\"info-buttons\">\n <div class=\"row justify-content-center\">\n @for (item of data?.btns; track item) {\n <div class=\"col-md-auto my-1\">\n <app-btn\n [type]=\"item.type || 'secondary'\"\n text=\"{{ item.value || item.label }}\"\n [icon]=\"item.icon\"\n (mclick)=\"item.action($event); yes(item)\"></app-btn>\n </div>\n }\n </div>\n </div>\n}\n<div class=\"bg-{{ cls() }} mt-2 rounded bar\"></div>\n", styles: [":host{text-align:center}:host .bar{height:5px}:host .info-body{overflow-wrap:anywhere;white-space:pre-line;padding:1rem}\n"] }]
17837
- }], ctorParameters: () => [{ type: undefined, decorators: [{
17838
- type: Inject,
17839
- args: [MAT_DIALOG_DATA]
17840
- }] }, { type: i1$3.MatDialogRef }] });
17841
-
17842
17691
  const InfoDialogModule = [InfoDialogComponent];
17843
17692
 
17844
- class InfoDialogService {
17845
- constructor(dialog) {
17846
- this.dialog = dialog;
17847
- this.overrideDialogConfig = {};
17848
- this.errorReporterService = inject(ErrorReporterService);
17849
- this.info = (text, status = 1, heading, btns, disableClose = false) => {
17850
- if (status == 0)
17851
- if (typeof text != 'string') {
17852
- console.error(text);
17853
- this.errorReporterService.reportError(text);
17854
- text = 'An error occurred';
17855
- }
17856
- else
17857
- this.errorReporterService.reportMessage(text);
17858
- return this.dialog
17859
- .open(InfoDialogComponent, {
17860
- data: {
17861
- text,
17862
- status: +status,
17863
- heading: heading || (status ? 'Success!' : 'Oops!'),
17864
- btns: btns?.filter((b) => b),
17865
- },
17866
- height: 'auto',
17867
- minWidth: '450px',
17868
- maxWidth: '90vw',
17869
- maxHeight: '90vh',
17870
- autoFocus: false,
17871
- disableClose,
17872
- ...this.overrideDialogConfig,
17873
- })
17874
- .afterClosed()
17875
- .toPromise()
17876
- .then((r) => {
17877
- if (r) {
17878
- return true;
17879
- }
17880
- else {
17881
- return false;
17882
- }
17883
- });
17884
- };
17885
- }
17886
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InfoDialogService, deps: [{ token: i1$3.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable }); }
17887
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InfoDialogService, providedIn: 'root' }); }
17888
- }
17889
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InfoDialogService, decorators: [{
17890
- type: Injectable,
17891
- args: [{
17892
- providedIn: 'root',
17893
- }]
17894
- }], ctorParameters: () => [{ type: i1$3.MatDialog }] });
17895
-
17896
17693
  /**
17897
17694
  * @deprecated The method should not be used. Use app-input-td-rf instead
17898
17695
  *
@@ -19047,46 +18844,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
19047
18844
  args: [{ required: true }]
19048
18845
  }] } });
19049
18846
 
19050
- class NotificationsService {
19051
- constructor(dialog) {
19052
- this.dialog = dialog;
19053
- }
19054
- open() {
19055
- Promise.resolve().then(function () { return notifications_component; }).then((c) => {
19056
- this.dialog.open(c.NotificationsComponent, {
19057
- width: '350px',
19058
- position: { right: '-10px', top: '80px', bottom: '50px' },
19059
- height: '100vh',
19060
- hasBackdrop: false,
19061
- });
19062
- });
19063
- }
19064
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NotificationsService, deps: [{ token: i1$3.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable }); }
19065
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NotificationsService, providedIn: 'root' }); }
19066
- }
19067
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NotificationsService, decorators: [{
19068
- type: Injectable,
19069
- args: [{ providedIn: 'root' }]
19070
- }], ctorParameters: () => [{ type: i1$3.MatDialog }] });
19071
-
19072
- class NotificationsComponent {
19073
- constructor(nS, dialogRef) {
19074
- this.nS = nS;
19075
- this.dialogRef = dialogRef;
19076
- }
19077
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NotificationsComponent, deps: [{ token: NotificationsService }, { token: i1$3.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
19078
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: NotificationsComponent, isStandalone: true, selector: "notifications", ngImport: i0, template: "<modal-header header=\"Notifications\" [dialogRef]=\"dialogRef\"/>\n\n<div class=\"notif-case\" mat-dialog-content >\n\n</div>", styles: [""], dependencies: [{ kind: "component", type: ModalHeaderComponent, selector: "modal-header", inputs: ["dialogRef", "header", "onCloseValue"], outputs: ["close"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] }); }
19079
- }
19080
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NotificationsComponent, decorators: [{
19081
- type: Component,
19082
- args: [{ selector: 'notifications', imports: [ModalHeaderComponent, MatDialogModule], template: "<modal-header header=\"Notifications\" [dialogRef]=\"dialogRef\"/>\n\n<div class=\"notif-case\" mat-dialog-content >\n\n</div>" }]
19083
- }], ctorParameters: () => [{ type: NotificationsService }, { type: i1$3.MatDialogRef }] });
19084
-
19085
- var notifications_component = /*#__PURE__*/Object.freeze({
19086
- __proto__: null,
19087
- NotificationsComponent: NotificationsComponent
19088
- });
19089
-
19090
18847
  class PageCenterBodyComponent {
19091
18848
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: PageCenterBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19092
18849
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: PageCenterBodyComponent, isStandalone: true, selector: "page-center-body", ngImport: i0, template: "<div class=\"page-height center\">\n <div class=\"w-100\">\n <ng-content>\n\n </ng-content>\n </div>\n</div>", styles: [".page-height{height:calc(100vh - 245px)}\n"] }); }
@@ -19921,60 +19678,159 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
19921
19678
  */
19922
19679
  class TableToStringPipe {
19923
19680
  /**
19924
- * Transforms table data into a string representation.
19925
- * @param arr - Array of column configurations
19926
- * @param obj - The data object to format
19927
- * @returns Promise resolving to a formatted string representation of the table data
19681
+ * Transforms table data into a string representation.
19682
+ * @param arr - Array of column configurations
19683
+ * @param obj - The data object to format
19684
+ * @returns Promise resolving to a formatted string representation of the table data
19685
+ */
19686
+ async transform(arr, obj) {
19687
+ // console.log(arr)
19688
+ if (!arr?.length)
19689
+ return '';
19690
+ return (await Promise.all(arr.map(async (col) => {
19691
+ let res = this.cfS.transform(obj, col);
19692
+ // const val1 = typeof res == 'object';
19693
+ // if (res) {
19694
+ // const val2 = await lastValueFrom(res as any);
19695
+ // }
19696
+ const val = typeof res == 'object' && res != null ? await lastValueFrom(res) : res;
19697
+ // console.log('tableToString',val);
19698
+ return `${col.t}: ${val == null ? '-' : val}`;
19699
+ })))?.join('\n');
19700
+ }
19701
+ /**
19702
+ * @param cfS - Injected GetColFormattedPipe for formatting column values
19703
+ */
19704
+ constructor(cfS) {
19705
+ this.cfS = cfS;
19706
+ }
19707
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TableToStringPipe, deps: [{ token: GetColFormattedPipe }], target: i0.ɵɵFactoryTarget.Pipe }); }
19708
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: TableToStringPipe, isStandalone: true, name: "tableToString" }); }
19709
+ }
19710
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TableToStringPipe, decorators: [{
19711
+ type: Pipe,
19712
+ args: [{
19713
+ name: 'tableToString',
19714
+ standalone: true,
19715
+ }]
19716
+ }], ctorParameters: () => [{ type: GetColFormattedPipe }] });
19717
+ /** Collection of all table-related pipes */
19718
+ const pipes = [GetColFormattedPipe, GetHeadersPipe, GetRawFieldsPipe, TableToStringPipe, GetColFormattedEPipe];
19719
+ /**
19720
+ * Module that bundles all table-related pipes for easy import.
19721
+ */
19722
+ class TablePipesModule {
19723
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TablePipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
19724
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: TablePipesModule, imports: [CommonModule, GetColFormattedPipe, GetHeadersPipe, GetRawFieldsPipe, TableToStringPipe, GetColFormattedEPipe], exports: [GetColFormattedPipe, GetHeadersPipe, GetRawFieldsPipe, TableToStringPipe, GetColFormattedEPipe] }); }
19725
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TablePipesModule, providers: [GetColFormattedPipe], imports: [CommonModule] }); }
19726
+ }
19727
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TablePipesModule, decorators: [{
19728
+ type: NgModule,
19729
+ args: [{
19730
+ exports: pipes,
19731
+ imports: [CommonModule, ...pipes],
19732
+ providers: [GetColFormattedPipe],
19733
+ }]
19734
+ }] });
19735
+
19736
+ /**
19737
+ * Service for handling reactive form inputs and form schema conversions.
19738
+ * @template TIFormSchema Type for form schema, defaults to IFormSchema
19739
+ * @template TFCInput Type for form control inputs, defaults to FCInput
19740
+ */
19741
+ class ETSReactiveFormInputService {
19742
+ constructor() {
19743
+ /**
19744
+ * Binds form controls from a FormGroup to an array of input objects
19745
+ * @template TFCInput Type of form control inputs
19746
+ * @param inputs Array of input objects to bind controls to
19747
+ * @param form FormGroup containing the controls to bind
19748
+ * @returns void
19749
+ */
19750
+ this.bindFormControlToInputs = (inputs, form) => {
19751
+ inputs.forEach((x) => {
19752
+ x.form = form;
19753
+ x.formControl = form.controls[x.name];
19754
+ });
19755
+ };
19756
+ /**
19757
+ * Converts a form schema to a FormGroup
19758
+ * @param schema Form schema definition
19759
+ * @param data Optional initial data
19760
+ * @returns FormGroup built from the schema
19761
+ */
19762
+ this.formSchemaToFormGroup = (schema, data) => {
19763
+ const form = new FormGroup({});
19764
+ for (const item of schema)
19765
+ form.addControl(item.field.toString(), new FormControl(data[item.field.toString()], item.isRequired
19766
+ ? (item.validators || [])?.concat([Validators.required])
19767
+ : item.validators, item.asyncValidators));
19768
+ return form;
19769
+ };
19770
+ }
19771
+ /**
19772
+ * Converts an array of form control inputs to a controls object for FormGroup
19773
+ * @template TFCInput Type of form control inputs
19774
+ * @param inputs Array of form control inputs
19775
+ * @returns Object with control names as keys and AbstractControls as values
19776
+ */
19777
+ formFieldsFromFCInputsArr(inputs) {
19778
+ const controls = {};
19779
+ for (const inp of inputs) {
19780
+ controls[inp.name] = inp.formControl;
19781
+ }
19782
+ return controls;
19783
+ }
19784
+ /**
19785
+ * Converts a form schema array to form controls object
19786
+ * @template TIFormSchema Type of form schema
19787
+ * @param formFields Array of form schema objects
19788
+ * @returns Object with field names as keys and FormControls as values
19789
+ */
19790
+ formSchemaToFormControls(formFields) {
19791
+ const controls = {};
19792
+ formFields?.forEach((inp) => {
19793
+ controls[inp.field?.toString()] = new FormControl(inp.value, inp.validators?.map((v) => v.bind(this)), inp.asyncValidators?.map((v) => v.bind(this)));
19794
+ });
19795
+ // controls['__rowID']=new FormControl('id'+Math.round(Math.random()*10000000))
19796
+ return controls;
19797
+ }
19798
+ /**
19799
+ * Adds form controls from a form schema array to an existing FormGroup
19800
+ * @template TIFormSchema Type of form schema
19801
+ * @param formFields Array of form schema objects
19802
+ * @param form Existing FormGroup to add controls to
19803
+ * @returns Updated FormGroup with added controls
19928
19804
  */
19929
- async transform(arr, obj) {
19930
- // console.log(arr)
19931
- if (!arr?.length)
19932
- return '';
19933
- return (await Promise.all(arr.map(async (col) => {
19934
- let res = this.cfS.transform(obj, col);
19935
- // const val1 = typeof res == 'object';
19936
- // if (res) {
19937
- // const val2 = await lastValueFrom(res as any);
19938
- // }
19939
- const val = typeof res == 'object' && res != null ? await lastValueFrom(res) : res;
19940
- // console.log('tableToString',val);
19941
- return `${col.t}: ${val == null ? '-' : val}`;
19942
- })))?.join('\n');
19805
+ addFormSchemaToForm(formFields, form) {
19806
+ formFields?.forEach((inp) => {
19807
+ form.addControl(inp.field?.toString(), new FormControl(inp.value, inp.validators?.map((v) => v.bind(this)), inp.asyncValidators?.map((v) => v.bind(this))));
19808
+ });
19809
+ // controls['__rowID']=new FormControl('id'+Math.round(Math.random()*10000000))
19810
+ return form;
19943
19811
  }
19944
19812
  /**
19945
- * @param cfS - Injected GetColFormattedPipe for formatting column values
19813
+ * Creates form controls from a plain object
19814
+ * @template T Type of the input object
19815
+ * @param obj Object with properties to convert to form controls
19816
+ * @returns Object with same keys as input and FormControls as values
19946
19817
  */
19947
- constructor(cfS) {
19948
- this.cfS = cfS;
19818
+ formFieldsFromObj(obj) {
19819
+ const controls = {};
19820
+ for (const inp in obj) {
19821
+ controls[inp] = new FormControl(obj[inp]);
19822
+ }
19823
+ return controls;
19949
19824
  }
19950
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TableToStringPipe, deps: [{ token: GetColFormattedPipe }], target: i0.ɵɵFactoryTarget.Pipe }); }
19951
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: TableToStringPipe, isStandalone: true, name: "tableToString" }); }
19952
- }
19953
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TableToStringPipe, decorators: [{
19954
- type: Pipe,
19955
- args: [{
19956
- name: 'tableToString',
19957
- standalone: true,
19958
- }]
19959
- }], ctorParameters: () => [{ type: GetColFormattedPipe }] });
19960
- /** Collection of all table-related pipes */
19961
- const pipes = [GetColFormattedPipe, GetHeadersPipe, GetRawFieldsPipe, TableToStringPipe, GetColFormattedEPipe];
19962
- /**
19963
- * Module that bundles all table-related pipes for easy import.
19964
- */
19965
- class TablePipesModule {
19966
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TablePipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
19967
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: TablePipesModule, imports: [CommonModule, GetColFormattedPipe, GetHeadersPipe, GetRawFieldsPipe, TableToStringPipe, GetColFormattedEPipe], exports: [GetColFormattedPipe, GetHeadersPipe, GetRawFieldsPipe, TableToStringPipe, GetColFormattedEPipe] }); }
19968
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TablePipesModule, providers: [GetColFormattedPipe], imports: [CommonModule] }); }
19825
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ETSReactiveFormInputService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
19826
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ETSReactiveFormInputService, providedIn: 'root' }); }
19969
19827
  }
19970
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TablePipesModule, decorators: [{
19971
- type: NgModule,
19828
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ETSReactiveFormInputService, decorators: [{
19829
+ type: Injectable,
19972
19830
  args: [{
19973
- exports: pipes,
19974
- imports: [CommonModule, ...pipes],
19975
- providers: [GetColFormattedPipe],
19831
+ providedIn: 'root',
19976
19832
  }]
19977
- }] });
19833
+ }], ctorParameters: () => [] });
19978
19834
 
19979
19835
  /**
19980
19836
  * Base component for table functionality with selection, pagination, sorting, and customization options.
@@ -19983,6 +19839,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
19983
19839
  class TableBaseComponent {
19984
19840
  constructor() {
19985
19841
  this.cdr = inject(ChangeDetectorRef);
19842
+ this.reactiveFormInputService = inject(ETSReactiveFormInputService);
19986
19843
  /** Options for actions that can be performed on each row */
19987
19844
  this._rowOptions = input(null, ...(ngDevMode ? [{ debugName: "_rowOptions", alias: 'rowOptions' }] : [{ alias: 'rowOptions' }]));
19988
19845
  /** Function that returns row-specific options based on the row data */
@@ -20837,6 +20694,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
20837
20694
  type: Input
20838
20695
  }] } });
20839
20696
 
20697
+ /**
20698
+ * Converts form schema to table columns
20699
+ */
20700
+ class FormSchemaToTableColumnsPipe {
20701
+ /**
20702
+ * Converts form schema to table columns configuration
20703
+ * @param value Array of form schema definitions
20704
+ * @returns Array of table column configurations
20705
+ */
20706
+ transform(value) {
20707
+ return value?.map((x) => ({ f: x.field, t: x.label })) || [];
20708
+ }
20709
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FormSchemaToTableColumnsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
20710
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: FormSchemaToTableColumnsPipe, isStandalone: true, name: "formSchemaToCols" }); }
20711
+ }
20712
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FormSchemaToTableColumnsPipe, decorators: [{
20713
+ type: Pipe,
20714
+ args: [{ name: 'formSchemaToCols', standalone: true }]
20715
+ }] });
20716
+ /**
20717
+ * Converts a form.value to string
20718
+ */
20719
+ class FormValuePipe {
20720
+ transform(formValue, formSchema) {
20721
+ // debugger;
20722
+ return formValue
20723
+ ? (formSchema?.length && typeof formSchema[0] != 'string'
20724
+ ? formSchema.map((field) => {
20725
+ // debugger;
20726
+ const val = field.type == 'select' || field.type == 'autocomplete'
20727
+ ? field.selectedOptionLabel || formValue[field.field]
20728
+ : formValue[field.field];
20729
+ return val != null ? `${field.label}: ${val}` : null;
20730
+ })
20731
+ : (formSchema || Object.keys(formValue)).map((x) => {
20732
+ const val = formValue[x];
20733
+ return `${this.uS.formatField(x)}: ${val != null ? val : '-'}`;
20734
+ }))
20735
+ .filter((x) => x)
20736
+ .join('\n')
20737
+ : '';
20738
+ }
20739
+ constructor(uS) {
20740
+ this.uS = uS;
20741
+ }
20742
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FormValuePipe, deps: [{ token: UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
20743
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: FormValuePipe, isStandalone: true, name: "formValue" }); }
20744
+ }
20745
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FormValuePipe, decorators: [{
20746
+ type: Pipe,
20747
+ args: [{
20748
+ name: 'formValue',
20749
+ standalone: true,
20750
+ }]
20751
+ }], ctorParameters: () => [{ type: UtilityService }] });
20752
+
20840
20753
  /**
20841
20754
  * Component representing a row in a table with input capabilities.
20842
20755
  * Extends FormGeneratorComponent to provide form functionality within table rows.
@@ -21206,7 +21119,7 @@ class TableInputComponent extends FormGeneratorComponent {
21206
21119
  this.singleFormStructure?.controls[scheme.field]?.hasValidator(Validators.required);
21207
21120
  }
21208
21121
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TableInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
21209
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { formArray: { classPropertyName: "formArray", publicName: "formArray", isSignal: true, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, classFunction: { classPropertyName: "classFunction", publicName: "classFunction", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, noWrap: { classPropertyName: "noWrap", publicName: "noWrap", isSignal: true, isRequired: false, transformFunction: null }, filterLikeMatch: { classPropertyName: "filterLikeMatch", publicName: "filterLikeMatch", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, hideDelete: { classPropertyName: "hideDelete", publicName: "hideDelete", isSignal: true, isRequired: false, transformFunction: null }, hideAdd: { classPropertyName: "hideAdd", publicName: "hideAdd", isSignal: true, isRequired: false, transformFunction: null }, borderedInput: { classPropertyName: "borderedInput", publicName: "borderedInput", isSignal: true, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterFormschema()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator\n [form]=\"filterForm()\"\n [formSchema]=\"filterFormschema()\"\n [gridLGStyle]=\"3\"\n [showSubmitBtn]=\"false\"\n (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm().reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border(), noWrap: noWrap() }\">\n <div class=\" \">\n <table\n class=\" {{ tableClass() }} {{ inputClass() }} \"\n [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th\n class=\"{{ item.cls }}\"\n [ngClass]=\"{ stickyColumn: item.sticky }\"\n [style.minWidth]=\"item.width\"\n id=\"th_{{ item.field }}\"\n [style.left.px]=\"item.sticky ? thEl.offsetLeft : null\"\n #thEl\n (click)=\"logColumn(item)\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n @if (!hideAdd()) {\n <th class=\"w-1\"></th>\n }\n @if (!hideDelete()) {\n <th class=\"w-1\"></th>\n }\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th class=\"w-1\"></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [hideDelete]=\"hideDelete()\"\n [hideAdd]=\"hideAdd()\"\n [borderedInput]=\"borderedInput()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n class=\"{{ subForm.form | tableInputClassFunction: classFunction() | async }}\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn,\n })\n \"\n (onActionButtonClick)=\"\n handleActionButtonClick(subForm.index, subForm.form, $event)\n \"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div\n class=\"\"\n [hidden]=\"\n !usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\n \">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}:host ::ng-deep .noWrap{display:block;max-width:100%;width:100%;overflow:auto}:host ::ng-deep .noWrap th,:host ::ng-deep .noWrap td{white-space:nowrap}:host ::ng-deep table tr{position:relative}:host ::ng-deep .stickyColumn{position:sticky;left:0;z-index:100}:host ::ng-deep .plainInput input,:host ::ng-deep .plainInput .control-bg-gray,:host ::ng-deep .plainInput .form-control{border:none!important;border-radius:0!important}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => BtnComponent), selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "translatorOptions", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "helpShowDelay", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: i0.forwardRef(() => FormGeneratorComponent), selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: i0.forwardRef(() => FormsModule) }, { kind: "ngmodule", type: i0.forwardRef(() => MatExpansionModule) }, { kind: "ngmodule", type: i0.forwardRef(() => MatTabsModule) }, { kind: "ngmodule", type: i0.forwardRef(() => MatTooltipModule) }, { kind: "directive", type: i0.forwardRef(() => NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i0.forwardRef(() => PaginatorComponent), selector: "paginator", inputs: ["arrayLength", "pageSize", "pageIndex", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageSizeChange", "pageIndexChange", "pageChanged"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "component", type: i0.forwardRef(() => TableInputRowComponent), selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "hideDelete", "borderedInput", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: i0.forwardRef(() => AsyncPipe), name: "async" }, { kind: "pipe", type: i0.forwardRef(() => SDKTranslatePipe), name: "appTranslate" }, { kind: "pipe", type: i0.forwardRef(() => TableInputClassFunctionPipe), name: "tableInputClassFunction" }] }); }
21122
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { formArray: { classPropertyName: "formArray", publicName: "formArray", isSignal: true, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, classFunction: { classPropertyName: "classFunction", publicName: "classFunction", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, noWrap: { classPropertyName: "noWrap", publicName: "noWrap", isSignal: true, isRequired: false, transformFunction: null }, filterLikeMatch: { classPropertyName: "filterLikeMatch", publicName: "filterLikeMatch", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, hideDelete: { classPropertyName: "hideDelete", publicName: "hideDelete", isSignal: true, isRequired: false, transformFunction: null }, hideAdd: { classPropertyName: "hideAdd", publicName: "hideAdd", isSignal: true, isRequired: false, transformFunction: null }, borderedInput: { classPropertyName: "borderedInput", publicName: "borderedInput", isSignal: true, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterFormschema()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator\n [form]=\"filterForm()\"\n [formSchema]=\"filterFormschema()\"\n [gridLGStyle]=\"3\"\n [showSubmitBtn]=\"false\"\n (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm().reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border(), noWrap: noWrap() }\">\n <div class=\" \">\n <table\n class=\" {{ tableClass() }} {{ inputClass() }} \"\n [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead>\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th\n class=\"{{ item.cls }}\"\n [ngClass]=\"{ stickyColumn: item.sticky }\"\n [style.minWidth]=\"item.width\"\n id=\"th_{{ item.field }}\"\n [style.left.px]=\"item.sticky ? thEl.offsetLeft : null\"\n #thEl\n (click)=\"logColumn(item)\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n @if (!hideAdd()) {\n <th class=\"w-1\"></th>\n }\n @if (!hideDelete()) {\n <th class=\"w-1\"></th>\n }\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th class=\"w-1\"></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [hideDelete]=\"hideDelete()\"\n [hideAdd]=\"hideAdd()\"\n [borderedInput]=\"borderedInput()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n class=\"{{ subForm.form | tableInputClassFunction: classFunction() | async }}\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn,\n })\n \"\n (onActionButtonClick)=\"\n handleActionButtonClick(subForm.index, subForm.form, $event)\n \"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div\n class=\"\"\n [hidden]=\"\n !usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\n \">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}:host ::ng-deep .noWrap{display:block;max-width:100%;width:100%;overflow:auto}:host ::ng-deep .noWrap th,:host ::ng-deep .noWrap td{white-space:nowrap}:host ::ng-deep table tr{position:relative}:host ::ng-deep .stickyColumn{position:sticky;left:0;z-index:100}:host ::ng-deep .plainInput input,:host ::ng-deep .plainInput .control-bg-gray,:host ::ng-deep .plainInput .form-control{border:none!important;border-radius:0!important}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => BtnComponent), selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "translatorOptions", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "helpShowDelay", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: i0.forwardRef(() => FormGeneratorComponent), selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: i0.forwardRef(() => FormsModule) }, { kind: "ngmodule", type: i0.forwardRef(() => MatExpansionModule) }, { kind: "ngmodule", type: i0.forwardRef(() => MatTabsModule) }, { kind: "ngmodule", type: i0.forwardRef(() => MatTooltipModule) }, { kind: "directive", type: i0.forwardRef(() => NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i0.forwardRef(() => PaginatorComponent), selector: "paginator", inputs: ["arrayLength", "pageSize", "pageIndex", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageSizeChange", "pageIndexChange", "pageChanged"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "component", type: i0.forwardRef(() => TableInputRowComponent), selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "hideDelete", "borderedInput", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: i0.forwardRef(() => AsyncPipe), name: "async" }, { kind: "pipe", type: i0.forwardRef(() => SDKTranslatePipe), name: "appTranslate" }, { kind: "pipe", type: i0.forwardRef(() => TableInputClassFunctionPipe), name: "tableInputClassFunction" }] }); }
21210
21123
  }
21211
21124
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TableInputComponent, decorators: [{
21212
21125
  type: Component,
@@ -21224,7 +21137,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
21224
21137
  TableInputRowComponent,
21225
21138
  SDKTranslatePipe,
21226
21139
  forwardRef(() => TableInputClassFunctionPipe),
21227
- ], providers: [FilterFormArrayGroupPipe, PaginatorPipe], template: "<div class=\"table-input\">\n @if (filterFormschema()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator\n [form]=\"filterForm()\"\n [formSchema]=\"filterFormschema()\"\n [gridLGStyle]=\"3\"\n [showSubmitBtn]=\"false\"\n (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm().reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border(), noWrap: noWrap() }\">\n <div class=\" \">\n <table\n class=\" {{ tableClass() }} {{ inputClass() }} \"\n [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th\n class=\"{{ item.cls }}\"\n [ngClass]=\"{ stickyColumn: item.sticky }\"\n [style.minWidth]=\"item.width\"\n id=\"th_{{ item.field }}\"\n [style.left.px]=\"item.sticky ? thEl.offsetLeft : null\"\n #thEl\n (click)=\"logColumn(item)\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n @if (!hideAdd()) {\n <th class=\"w-1\"></th>\n }\n @if (!hideDelete()) {\n <th class=\"w-1\"></th>\n }\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th class=\"w-1\"></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [hideDelete]=\"hideDelete()\"\n [hideAdd]=\"hideAdd()\"\n [borderedInput]=\"borderedInput()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n class=\"{{ subForm.form | tableInputClassFunction: classFunction() | async }}\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn,\n })\n \"\n (onActionButtonClick)=\"\n handleActionButtonClick(subForm.index, subForm.form, $event)\n \"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div\n class=\"\"\n [hidden]=\"\n !usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\n \">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}:host ::ng-deep .noWrap{display:block;max-width:100%;width:100%;overflow:auto}:host ::ng-deep .noWrap th,:host ::ng-deep .noWrap td{white-space:nowrap}:host ::ng-deep table tr{position:relative}:host ::ng-deep .stickyColumn{position:sticky;left:0;z-index:100}:host ::ng-deep .plainInput input,:host ::ng-deep .plainInput .control-bg-gray,:host ::ng-deep .plainInput .form-control{border:none!important;border-radius:0!important}\n"] }]
21140
+ ], providers: [FilterFormArrayGroupPipe, PaginatorPipe], template: "<div class=\"table-input\">\n @if (filterFormschema()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator\n [form]=\"filterForm()\"\n [formSchema]=\"filterFormschema()\"\n [gridLGStyle]=\"3\"\n [showSubmitBtn]=\"false\"\n (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm().reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border(), noWrap: noWrap() }\">\n <div class=\" \">\n <table\n class=\" {{ tableClass() }} {{ inputClass() }} \"\n [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead>\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th\n class=\"{{ item.cls }}\"\n [ngClass]=\"{ stickyColumn: item.sticky }\"\n [style.minWidth]=\"item.width\"\n id=\"th_{{ item.field }}\"\n [style.left.px]=\"item.sticky ? thEl.offsetLeft : null\"\n #thEl\n (click)=\"logColumn(item)\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n @if (!hideAdd()) {\n <th class=\"w-1\"></th>\n }\n @if (!hideDelete()) {\n <th class=\"w-1\"></th>\n }\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th class=\"w-1\"></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [hideDelete]=\"hideDelete()\"\n [hideAdd]=\"hideAdd()\"\n [borderedInput]=\"borderedInput()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n class=\"{{ subForm.form | tableInputClassFunction: classFunction() | async }}\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn,\n })\n \"\n (onActionButtonClick)=\"\n handleActionButtonClick(subForm.index, subForm.form, $event)\n \"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div\n class=\"\"\n [hidden]=\"\n !usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\n \">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}:host ::ng-deep .noWrap{display:block;max-width:100%;width:100%;overflow:auto}:host ::ng-deep .noWrap th,:host ::ng-deep .noWrap td{white-space:nowrap}:host ::ng-deep table tr{position:relative}:host ::ng-deep .stickyColumn{position:sticky;left:0;z-index:100}:host ::ng-deep .plainInput input,:host ::ng-deep .plainInput .control-bg-gray,:host ::ng-deep .plainInput .form-control{border:none!important;border-radius:0!important}\n"] }]
21228
21141
  }], propDecorators: { _pageSize: [{
21229
21142
  type: Input,
21230
21143
  args: ['pageSize']
@@ -21295,7 +21208,7 @@ class TablePlainComponent extends TableBaseComponent {
21295
21208
  */
21296
21209
  set _filterFields(v) {
21297
21210
  const _v = v || [];
21298
- this.uS.addFormSchemaToForm(_v, this.filterForm);
21211
+ this.reactiveFormInputService.addFormSchemaToForm(_v, this.filterForm);
21299
21212
  this.filterFields.set(_v);
21300
21213
  for (const scheme of _v)
21301
21214
  scheme.optionsInitFunc?.subscribe((r) => (this.cellOptions[scheme.field?.toString()] = r));
@@ -22460,6 +22373,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
22460
22373
  }]
22461
22374
  }], ctorParameters: () => [] });
22462
22375
 
22376
+ /**
22377
+ * Component that displays an idle timeout dialog to the user.
22378
+ * Shows remaining time before session expiration and allows user interaction.
22379
+ */
22380
+ class IdlerComponent {
22381
+ /**
22382
+ * Creates an instance of IdlerComponent.
22383
+ * @param dialogRef - Reference to the dialog opened by the Material Dialog service
22384
+ * @param uS - Utility service for time formatting and other helper functions
22385
+ */
22386
+ constructor(dialogRef, uS, data) {
22387
+ this.dialogRef = dialogRef;
22388
+ this.uS = uS;
22389
+ this.data = data;
22390
+ /**
22391
+ * Computed property that formats the remaining time into hours, minutes, and seconds.
22392
+ * Uses the utility service to convert seconds to a formatted object.
22393
+ */
22394
+ this.timeLeftFormatted = computed(() => this.uS.secondsToHourMinSec(this.data.timeLeft()), ...(ngDevMode ? [{ debugName: "timeLeftFormatted" }] : []));
22395
+ /**
22396
+ * Computed property that creates a human-readable string of the remaining time.
22397
+ * @returns A formatted string representation of the time remaining (e.g. "2hrs 30min 15s")
22398
+ */
22399
+ this.timeLeftString = computed(() => {
22400
+ const { hours, mins, secs } = this.timeLeftFormatted() || {};
22401
+ return `${hours ? hours + 'hrs' : ''} ${mins ? mins + 'min' : ''} ${secs ? secs + 's' : ''}`;
22402
+ }, ...(ngDevMode ? [{ debugName: "timeLeftString" }] : []));
22403
+ }
22404
+ /**
22405
+ * Closes the idle timeout dialog.
22406
+ * This typically indicates user activity and resets the idle timer.
22407
+ */
22408
+ close() {
22409
+ this.dialogRef.close();
22410
+ }
22411
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: IdlerComponent, deps: [{ token: i1$3.MatDialogRef }, { token: UtilityService }, { token: MAT_DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
22412
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: IdlerComponent, isStandalone: true, selector: "app-idler", ngImport: i0, template: "@if (timeLeftString(); as timeLeft) {\n<div class=\"center h-100 text-center caution\">\n You will be logged out in {{timeLeft}}\n</div>\n}\n", styles: [""] }); }
22413
+ }
22414
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: IdlerComponent, decorators: [{
22415
+ type: Component,
22416
+ args: [{ selector: 'app-idler', imports: [], template: "@if (timeLeftString(); as timeLeft) {\n<div class=\"center h-100 text-center caution\">\n You will be logged out in {{timeLeft}}\n</div>\n}\n" }]
22417
+ }], ctorParameters: () => [{ type: i1$3.MatDialogRef }, { type: UtilityService }, { type: undefined, decorators: [{
22418
+ type: Optional
22419
+ }, {
22420
+ type: Inject,
22421
+ args: [MAT_DIALOG_DATA]
22422
+ }] }] });
22423
+
22463
22424
  /**
22464
22425
  * Service that manages user idle state detection and timeout warnings.
22465
22426
  *
@@ -22562,8 +22523,9 @@ class IdlerService {
22562
22523
  */
22563
22524
  openTimeWarningModal() {
22564
22525
  this.idlerModal = this.dialog.open(IdlerComponent, {
22565
- // height: 'auto',
22566
- // width: 'auto',
22526
+ // height: 'auto',
22527
+ // width: 'auto',
22528
+ data: { timeLeft: this.timeLeft },
22567
22529
  });
22568
22530
  }
22569
22531
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: IdlerService, deps: [{ token: i1$8.Idle }, { token: i1$3.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -22573,50 +22535,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
22573
22535
  type: Injectable
22574
22536
  }], ctorParameters: () => [{ type: i1$8.Idle }, { type: i1$3.MatDialog }] });
22575
22537
 
22576
- /**
22577
- * Component that displays an idle timeout dialog to the user.
22578
- * Shows remaining time before session expiration and allows user interaction.
22579
- */
22580
- class IdlerComponent {
22581
- /**
22582
- * Creates an instance of IdlerComponent.
22583
- * @param dialogRef - Reference to the dialog opened by the Material Dialog service
22584
- * @param idlerService - Service that tracks idle time and manages the timeout
22585
- * @param uS - Utility service for time formatting and other helper functions
22586
- */
22587
- constructor(dialogRef, idlerService, uS) {
22588
- this.dialogRef = dialogRef;
22589
- this.idlerService = idlerService;
22590
- this.uS = uS;
22591
- /**
22592
- * Computed property that formats the remaining time into hours, minutes, and seconds.
22593
- * Uses the utility service to convert seconds to a formatted object.
22594
- */
22595
- this.timeLeftFormatted = computed(() => this.uS.secondsToHourMinSec(this.idlerService.timeLeft()), ...(ngDevMode ? [{ debugName: "timeLeftFormatted" }] : []));
22596
- /**
22597
- * Computed property that creates a human-readable string of the remaining time.
22598
- * @returns A formatted string representation of the time remaining (e.g. "2hrs 30min 15s")
22599
- */
22600
- this.timeLeftString = computed(() => {
22601
- const { hours, mins, secs } = this.timeLeftFormatted() || {};
22602
- return `${hours ? hours + 'hrs' : ''} ${mins ? mins + 'min' : ''} ${secs ? secs + 's' : ''}`;
22603
- }, ...(ngDevMode ? [{ debugName: "timeLeftString" }] : []));
22604
- }
22605
- /**
22606
- * Closes the idle timeout dialog.
22607
- * This typically indicates user activity and resets the idle timer.
22608
- */
22609
- close() {
22610
- this.dialogRef.close();
22611
- }
22612
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: IdlerComponent, deps: [{ token: i1$3.MatDialogRef }, { token: IdlerService }, { token: UtilityService }], target: i0.ɵɵFactoryTarget.Component }); }
22613
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: IdlerComponent, isStandalone: true, selector: "app-idler", providers: [IdlerService], ngImport: i0, template: "@if (timeLeftString(); as timeLeft) {\n<div class=\"center h-100 text-center caution\">\n You will be logged out in {{timeLeft}}\n</div>\n}\n", styles: [""] }); }
22614
- }
22615
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: IdlerComponent, decorators: [{
22616
- type: Component,
22617
- args: [{ selector: 'app-idler', imports: [], providers: [IdlerService], template: "@if (timeLeftString(); as timeLeft) {\n<div class=\"center h-100 text-center caution\">\n You will be logged out in {{timeLeft}}\n</div>\n}\n" }]
22618
- }], ctorParameters: () => [{ type: i1$3.MatDialogRef }, { type: IdlerService }, { type: UtilityService }] });
22619
-
22620
22538
  /**
22621
22539
  * Directive that formats numbers with commas in input fields.
22622
22540
  *
@@ -22903,6 +22821,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
22903
22821
  }]
22904
22822
  }], ctorParameters: () => [{ type: i1$1.DecimalPipe }, { type: UtilityService }] });
22905
22823
 
22824
+ /**
22825
+ * Converts an object to an array of labels for display
22826
+ */
22827
+ class ObjectToLabelsPipe {
22828
+ /**
22829
+ * Converts an object to an array of labels with optional custom field mapping
22830
+ * @param value The source object to convert
22831
+ * @param customFieldMap Optional mapping of object keys to ITextCase2 properties
22832
+ * @param exclusionList Optional map of field names to exclude
22833
+ * @returns Array of ITextCase2 objects representing the object's fields
22834
+ */
22835
+ transform(value, customFieldMap, exclusionList) {
22836
+ // debugger;
22837
+ const _exclusionList = {
22838
+ id: true,
22839
+ ...exclusionList,
22840
+ };
22841
+ return Object.keys(value || {})
22842
+ .filter((x) => !_exclusionList[x])
22843
+ .map((f) => ({
22844
+ ...customFieldMap?.[f],
22845
+ label: customFieldMap?.[f]?.label || this.uS.formatField(f),
22846
+ value: value[f],
22847
+ }));
22848
+ }
22849
+ constructor(uS) {
22850
+ this.uS = uS;
22851
+ }
22852
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ObjectToLabelsPipe, deps: [{ token: UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
22853
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.1.4", ngImport: i0, type: ObjectToLabelsPipe, isStandalone: true, name: "objectToLabels" }); }
22854
+ }
22855
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ObjectToLabelsPipe, decorators: [{
22856
+ type: Pipe,
22857
+ args: [{
22858
+ name: 'objectToLabels',
22859
+ standalone: true,
22860
+ }]
22861
+ }], ctorParameters: () => [{ type: UtilityService }] });
22862
+
22906
22863
  /**
22907
22864
  * Core application service that manages system state, navigation menus, and UI theming.
22908
22865
  * @template TESystem - The system enum type (defaults to ESystem)
@@ -25896,5 +25853,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
25896
25853
  * Generated bundle index. Do not edit.
25897
25854
  */
25898
25855
 
25899
- export { AddItemComponent, ApiService, AppRouteBase, AppRouteService, AppRouteState, AppService, ArraySplitter, AuthenticationInterceptorService, AutocompleteComponent, AutocompleteModule, AutocompleteService, AutocompleteTdRfComponent, BaseFormGenerator, BaseNativeEventListenerDirective, BlinkingBlocksComponent, BouncingBallComponent, Btn, BtnComponent, BtnLg, BtnLgComponent, BtnLinkComponent, BtnModule, BtnService, ButtonComponent, CETSInput, CacheService, CacheUpdaterService, CardComponent, CardComponent as CardModule, CodeTitleDescPipe, CommafyNumberDirective, ButtonComponent as ComponentsModule, Config, ConfirmDialogComponent, ConfirmDialogComponent as ConfirmDialogModule, Constant, CustomDatePipe, DEFAULT_TIMEOUT, DateInputComponent, Day, DayHourMinInputComponent, DebouncerService, DesktopClassDirective, DetailsBtnComponent, DetailsBtnComponent as DetailsBtnModule, DirectivesModule, DocumentsNameDisplayComponent, DocumentsNameDisplayComponent as DocumentsNameDisplayModule, DragDropFileUploadDirective, EETSPageBtnID, ELanguage, EMenuLocation, EMenuType, EPageType, ESubSystem, ESystem, ESystemBusLine, ETSCheckForUpdateService, ETSConfirmDialogService, ETSExtraPagesModule, ETSFKVP, ETSForms, ETSHandleUnrecoverableStateService, ETSKVP, ETSLogUpdateService, ETSLoggerModule, ETSMenuItem, ETSMenuItemDivider, ETSPageNotFoundComponent, ETSPromptUpdateService, ETSReactiveFormInputService, ETSResetModule, ETSResponsivenessDirectiveModule, ETSRobotModule, ETSServiceWorkerService, ETSStorageService, ETSThemeService, ETSTimeoutTesterModule, ETSVersionModule, ETSWindowSecurityService, EUA, EVFunctions, EValidationType, EditableTextCaseComponent, EditableTextCaseComponent as EditableTextCaseModule, SDKEnvironment as Environment, EqualChildrenDirective, ErrorMessagePipe, ErrorReporterService, ExportTableComponent, ExportTableComponent as ExportTableModule, FCInput, FadingBarsComponent, FadingCirclesComponent, FieldToLabelPipe, FieldsToDisplayComponent, FileUploadComponent, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayControlPipe, FilterFormArrayGroupPipe, FilterOptions, FindItemComponent, FormErrorComponent, FormGeneratedValueComponent, FormGeneratorComponent, FormGeneratorComponent as FormGeneratorModule, FormGeneratorService, FormInvalidClassDirective, FormInvalidClassPipe, FormLinkComponent, FormLinkComponent as FormLinkModule, FormSchemaToTableColumnsPipe, FormTabHeadersComponent, FormTabHeadersComponent as FormTabHeadersModule, FormValuePipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetColFormattedEPipe, GetColFormattedPipe, GetHeadersPipe, GetRawFieldsPipe, GetValueLabel, GlobalErrorHandlerService, HasFormValuePipe, HasValuePipe, HideDesktopDirective, HideMobileDirective, HtmlerService, HttpListCaller, HttpListCaller1, HttpListCaller2, IdlerComponent, IdlerService, ImageLoaderDirective, ImageUpload, IndexCompLayoutComponent, InfoDialogComponent, InfoDialogModule, InfoDialogService, InfoIconComponent, InfoIconComponent as InfoIconModule, InputBasicComponent, InputClassPipe, InputComponent, InputComponents, InputControlComponent, InputFormatDirective, InputFormatService, InputLabelComponent, InputModule, InputNGModelComponent, InputNGModelComponent as InputNGModelModule, InputPipesModule, InputService, InputTD_RFComponent, InputTableComponent, InputTableService, IntegerOnlyDirective, IsClonePage, IsShowPage, LabelComponent, LabelComponent as LabelModule, Lbl, ListOptionFinderPipe, LoaderComponent, LoaderComponent as LoaderModule, LoaderService, LocalCacheService, Log, LoggerComponent, LoggerInterceptorService, LoggerRoutingModule, LoggerService, MHrefDirective, MobileClassDirective, ModalBodyDirective, ModalComponent, ModalComponents, ModalFooterDirective, ModalFormComponent, ModalFormComponent as ModalFormModule, ModalHeaderComponent, ModalHeaderComponent as ModalHeaderModule, ModalComponent as ModalModule, MouseClickListenerDirective, MouseEnterListenerDirective, MouseLeaveListenerDirective, MrouterLinkirective, NELEventName, NarrationHistoryCompComponent, NativeEventListenerDirectives, NegativeNumberOnlyDirective, NotificationsComponent, NotificationsService, NumberFormatService, NumberPipe, ObjectToArrayPipe, ObjectToLabelsPipe, OnClickDirective, OptionLabeller, OptionerPipe, OptionsFormatter, PSDirective, PageCenterBodyComponent, PageLoader, PageLoaderService, PageModal, PageService, PageTemplateComponent, PageTemplateComponent as PageTemplateModule, PageToComponentComponent, PageToComponentDirective, PageToComponentComponent as PageToComponentModule, PageToComponentService, PaginatorComponent, PaginatorPipe, PhoneNumberComponent, PhoneNumberService, PointerMoveListenerDirective, prototypes as Prototypes, RefresherPipe, RemoveUsedOptionsPipe, RemoveUsedOptionsReactivePipe, ReplaceAllPipe, RequestLoggerInterceptorService, RequestTimeoutInterceptorService, ResizeGridPipe, ResponsiveValPipe, ResponsivenessDirective, ReverseTranslateSingleNLPipe, RichTextEditorComponent, RichTextEditorRFComponent, RingRipplesComponent, RoundPipe, RouteItem, RowActionsComponent, RowActionsComponent as RowActionsModule, BaseEffect as SDKBaseEffect, BaseFacadeService as SDKBaseFacadeService, BaseService as SDKBaseService, SDKTranslateNoLoaderPipe, SDKTranslatePipe, SDKTranslateSingleNoLoaderPipe, SDKTranslateSinglePipe, SaverClass, SaverService, SecondsToTimePipe, SharedModule, SortPipe, SpinnerComponent, StorageClass, StrConcatenatorPipe, SvgIconComponent, SvgIconService, TableBaseComponent, TableCol, TableHttpsComponent, TableInputClassFunctionPipe, TableInputComponent, TableInputRowComponent, TablePipesModule, TablePlainComponent, TableService, TableToStringPipe, TextAreaModalComponent, TextAreaModalService, TextCase1Component, TextCase2Component, TextCase2ForObject, TextCaseInputComponent, TextCaseService, TextComponent, ToAnyArrayPipe, ToAnyPipe, ToggleInputFormComponent, TranslatePipeModule, TranslationService, TranslatorCaseComponent, TranslatorDirective, TrimPipe, TrimTextPipe, TyperPipe, UserActivity, UserActivityService, UtilityPipesModule, UtilityService, ValidationMessageComponent, ValidationMessageNgmodelComponent, ValidationMsg, Validator, ValueFormatterPipe, ValueOrXPipe, VersionService, VerticalNavComponent, ViewFormButtonsComponent, ViewFormButtonsComponent as ViewFormButtonsModule, WatermarkComponent, WebUserAuthenticationService, WebUserForgotPasswordComponent, WebUserLoginComponent, WebUserResetPasswordComponent, WebcamMediaComponent, XOrYPipe, YearMonthTdRfComponent, _SharedModule, configForms, configPatterns, configValidationMessages, environment, pageErrorRouter, webUserAuthenticationGuard, webUserAuthenticationInterceptor, widthOffsetPipe };
25856
+ export { AddItemComponent, ApiService, AppRouteBase, AppRouteService, AppRouteState, AppService, ArraySplitter, AuthenticationInterceptorService, AutocompleteComponent, AutocompleteModule, AutocompleteService, AutocompleteTdRfComponent, BaseFormGenerator, BaseNativeEventListenerDirective, BlinkingBlocksComponent, BouncingBallComponent, Btn, BtnComponent, BtnLg, BtnLgComponent, BtnLinkComponent, BtnModule, BtnService, ButtonComponent, CETSInput, CacheService, CacheUpdaterService, CardComponent, CardComponent as CardModule, CodeTitleDescPipe, CommafyNumberDirective, ButtonComponent as ComponentsModule, Config, ConfirmDialogComponent, ConfirmDialogComponent as ConfirmDialogModule, Constant, CustomDatePipe, DEFAULT_TIMEOUT, DateInputComponent, Day, DayHourMinInputComponent, DebouncerService, DesktopClassDirective, DetailsBtnComponent, DetailsBtnComponent as DetailsBtnModule, DirectivesModule, DocumentsNameDisplayComponent, DocumentsNameDisplayComponent as DocumentsNameDisplayModule, DragDropFileUploadDirective, EETSPageBtnID, ELanguage, EMenuLocation, EMenuType, EPageType, ESubSystem, ESystem, ESystemBusLine, ETSCheckForUpdateService, ETSConfirmDialogService, ETSExtraPagesModule, ETSFKVP, ETSForms, ETSHandleUnrecoverableStateService, ETSKVP, ETSLogUpdateService, ETSLoggerModule, ETSMenuItem, ETSMenuItemDivider, ETSPageNotFoundComponent, ETSPromptUpdateService, ETSReactiveFormInputService, ETSResetModule, ETSResponsivenessDirectiveModule, ETSRobotModule, ETSServiceWorkerService, ETSStorageService, ETSThemeService, ETSTimeoutTesterModule, ETSVersionModule, ETSWindowSecurityService, EUA, EVFunctions, EValidationType, EditableTextCaseComponent, EditableTextCaseComponent as EditableTextCaseModule, SDKEnvironment as Environment, EqualChildrenDirective, ErrorMessagePipe, ErrorReporterService, ExportTableComponent, ExportTableComponent as ExportTableModule, FCInput, FadingBarsComponent, FadingCirclesComponent, FieldToLabelPipe, FieldsToDisplayComponent, FileUploadComponent, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayControlPipe, FilterFormArrayGroupPipe, FilterOptions, FindItemComponent, FormErrorComponent, FormGeneratedValueComponent, FormGeneratorComponent, FormGeneratorComponent as FormGeneratorModule, FormGeneratorService, FormInvalidClassDirective, FormInvalidClassPipe, FormLinkComponent, FormLinkComponent as FormLinkModule, FormSchemaToTableColumnsPipe, FormTabHeadersComponent, FormTabHeadersComponent as FormTabHeadersModule, FormValuePipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetColFormattedEPipe, GetColFormattedPipe, GetHeadersPipe, GetRawFieldsPipe, GetValueLabel, GlobalErrorHandlerService, HasFormValuePipe, HasValuePipe, HideDesktopDirective, HideMobileDirective, HtmlerService, HttpListCaller, HttpListCaller1, HttpListCaller2, IdlerComponent, IdlerService, ImageLoaderDirective, ImageUpload, IndexCompLayoutComponent, InfoDialogComponent, InfoDialogModule, InfoDialogService, InfoIconComponent, InfoIconComponent as InfoIconModule, InputBasicComponent, InputClassPipe, InputComponent, InputComponents, InputControlComponent, InputFormatDirective, InputFormatService, InputLabelComponent, InputModule, InputNGModelComponent, InputNGModelComponent as InputNGModelModule, InputPipesModule, InputService, InputTD_RFComponent, InputTableComponent, InputTableService, IntegerOnlyDirective, IsClonePage, IsShowPage, LabelComponent, LabelComponent as LabelModule, Lbl, ListOptionFinderPipe, LoaderComponent, LoaderComponent as LoaderModule, LoaderService, LocalCacheService, Log, LoggerComponent, LoggerInterceptorService, LoggerRoutingModule, LoggerService, MHrefDirective, MobileClassDirective, ModalBodyDirective, ModalComponent, ModalComponents, ModalFooterDirective, ModalFormComponent, ModalFormComponent as ModalFormModule, ModalHeaderComponent, ModalHeaderComponent as ModalHeaderModule, ModalComponent as ModalModule, MouseClickListenerDirective, MouseEnterListenerDirective, MouseLeaveListenerDirective, MrouterLinkirective, NELEventName, NarrationHistoryCompComponent, NativeEventListenerDirectives, NegativeNumberOnlyDirective, NumberFormatService, NumberPipe, ObjectToArrayPipe, ObjectToLabelsPipe, OnClickDirective, OptionLabeller, OptionerPipe, OptionsFormatter, PSDirective, PageCenterBodyComponent, PageLoader, PageLoaderService, PageModal, PageService, PageTemplateComponent, PageTemplateComponent as PageTemplateModule, PageToComponentComponent, PageToComponentDirective, PageToComponentComponent as PageToComponentModule, PageToComponentService, PaginatorComponent, PaginatorPipe, PhoneNumberComponent, PhoneNumberService, PointerMoveListenerDirective, prototypes as Prototypes, RefresherPipe, RemoveUsedOptionsPipe, RemoveUsedOptionsReactivePipe, ReplaceAllPipe, RequestLoggerInterceptorService, RequestTimeoutInterceptorService, ResizeGridPipe, ResponsiveValPipe, ResponsivenessDirective, ReverseTranslateSingleNLPipe, RichTextEditorComponent, RichTextEditorRFComponent, RingRipplesComponent, RoundPipe, RouteItem, RowActionsComponent, RowActionsComponent as RowActionsModule, BaseEffect as SDKBaseEffect, BaseFacadeService as SDKBaseFacadeService, BaseService as SDKBaseService, SDKTranslateNoLoaderPipe, SDKTranslatePipe, SDKTranslateSingleNoLoaderPipe, SDKTranslateSinglePipe, SaverClass, SaverService, SecondsToTimePipe, SharedModule, SortPipe, SpinnerComponent, StorageClass, StrConcatenatorPipe, SvgIconComponent, SvgIconService, TableBaseComponent, TableCol, TableHttpsComponent, TableInputClassFunctionPipe, TableInputComponent, TableInputRowComponent, TablePipesModule, TablePlainComponent, TableService, TableToStringPipe, TextAreaModalComponent, TextAreaModalService, TextCase1Component, TextCase2Component, TextCase2ForObject, TextCaseInputComponent, TextCaseService, TextComponent, ToAnyArrayPipe, ToAnyPipe, ToggleInputFormComponent, TranslatePipeModule, TranslationService, TranslatorCaseComponent, TranslatorDirective, TrimPipe, TrimTextPipe, TyperPipe, UserActivity, UserActivityService, UtilityPipesModule, UtilityService, ValidationMessageComponent, ValidationMessageNgmodelComponent, ValidationMsg, Validator, ValueFormatterPipe, ValueOrXPipe, VersionService, VerticalNavComponent, ViewFormButtonsComponent, ViewFormButtonsComponent as ViewFormButtonsModule, WatermarkComponent, WebUserAuthenticationService, WebUserForgotPasswordComponent, WebUserLoginComponent, WebUserResetPasswordComponent, WebcamMediaComponent, XOrYPipe, YearMonthTdRfComponent, _SharedModule, configForms, configPatterns, configValidationMessages, environment, pageErrorRouter, webUserAuthenticationGuard, webUserAuthenticationInterceptor, widthOffsetPipe };
25900
25857
  //# sourceMappingURL=ets-fe-ng-sdk.mjs.map