@wemake4u/form-player-se 1.0.0
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.
- package/README.md +17 -0
- package/esm2022/lib/controls/accordion.mjs +7 -0
- package/esm2022/lib/controls/button.mjs +7 -0
- package/esm2022/lib/controls/checkbox.mjs +7 -0
- package/esm2022/lib/controls/checklist.mjs +7 -0
- package/esm2022/lib/controls/chipchecklist.mjs +7 -0
- package/esm2022/lib/controls/chipradio.mjs +7 -0
- package/esm2022/lib/controls/control.mjs +65 -0
- package/esm2022/lib/controls/date.mjs +7 -0
- package/esm2022/lib/controls/dynamiclist.mjs +4 -0
- package/esm2022/lib/controls/factory.mjs +106 -0
- package/esm2022/lib/controls/filepicker.mjs +7 -0
- package/esm2022/lib/controls/form.mjs +4 -0
- package/esm2022/lib/controls/group.mjs +4 -0
- package/esm2022/lib/controls/html.mjs +4 -0
- package/esm2022/lib/controls/iframe.mjs +4 -0
- package/esm2022/lib/controls/image.mjs +4 -0
- package/esm2022/lib/controls/number.mjs +7 -0
- package/esm2022/lib/controls/radio.mjs +7 -0
- package/esm2022/lib/controls/select.mjs +7 -0
- package/esm2022/lib/controls/separator.mjs +4 -0
- package/esm2022/lib/controls/spacer.mjs +4 -0
- package/esm2022/lib/controls/tab.mjs +7 -0
- package/esm2022/lib/controls/table.mjs +13 -0
- package/esm2022/lib/controls/taglist.mjs +7 -0
- package/esm2022/lib/controls/text.mjs +4 -0
- package/esm2022/lib/controls/textarea.mjs +7 -0
- package/esm2022/lib/controls/textfield.mjs +18 -0
- package/esm2022/lib/controls/time.mjs +7 -0
- package/esm2022/lib/controls/toggle.mjs +7 -0
- package/esm2022/lib/dataSources/interfaces.mjs +2 -0
- package/esm2022/lib/dataSources/odata.mjs +131 -0
- package/esm2022/lib/dataSources/rest.mjs +48 -0
- package/esm2022/lib/directives/accordion.directive.mjs +52 -0
- package/esm2022/lib/directives/adorner.directive.mjs +130 -0
- package/esm2022/lib/directives/disable.directive.mjs +38 -0
- package/esm2022/lib/directives/display.directive.mjs +46 -0
- package/esm2022/lib/directives/dropdown.directive.mjs +233 -0
- package/esm2022/lib/directives/frame-security.directive.mjs +66 -0
- package/esm2022/lib/directives/grid.directive.mjs +68 -0
- package/esm2022/lib/directives/register.directive.mjs +86 -0
- package/esm2022/lib/directives/repeat.directive.mjs +38 -0
- package/esm2022/lib/directives/tab.directive.mjs +49 -0
- package/esm2022/lib/directives/updateblur.directive.mjs +32 -0
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +493 -0
- package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +395 -0
- package/esm2022/lib/locale/locale-it.mjs +13 -0
- package/esm2022/lib/services/data.service.mjs +29 -0
- package/esm2022/lib/services/event.service.mjs +19 -0
- package/esm2022/lib/services/feel.service.mjs +73 -0
- package/esm2022/lib/services/formatter.service.mjs +60 -0
- package/esm2022/lib/services/markdown.service.mjs +24 -0
- package/esm2022/lib/services/mime.service.mjs +32 -0
- package/esm2022/lib/services/programmability.service.mjs +221 -0
- package/esm2022/lib/services/proxy.service.mjs +131 -0
- package/esm2022/lib/services/register.service.mjs +60 -0
- package/esm2022/lib/services/sanitize.service.mjs +38 -0
- package/esm2022/lib/services/scope.service.mjs +46 -0
- package/esm2022/lib/services/toast.service.mjs +37 -0
- package/esm2022/lib/services/weak.service.mjs +60 -0
- package/esm2022/lib/utils/extractFiles.mjs +30 -0
- package/esm2022/lib/utils/gridCells.mjs +49 -0
- package/esm2022/lib/utils/groupByRow.mjs +30 -0
- package/esm2022/lib/utils/patchForm.mjs +55 -0
- package/esm2022/lib/utils/toFormData.mjs +11 -0
- package/esm2022/public-api.mjs +8 -0
- package/esm2022/wemake4u-form-player-se.mjs +5 -0
- package/fesm2022/wemake4u-form-player-se.mjs +3101 -0
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/controls/accordion.d.ts +4 -0
- package/lib/controls/button.d.ts +4 -0
- package/lib/controls/checkbox.d.ts +4 -0
- package/lib/controls/checklist.d.ts +4 -0
- package/lib/controls/chipchecklist.d.ts +4 -0
- package/lib/controls/chipradio.d.ts +4 -0
- package/lib/controls/control.d.ts +24 -0
- package/lib/controls/date.d.ts +4 -0
- package/lib/controls/dynamiclist.d.ts +3 -0
- package/lib/controls/factory.d.ts +4 -0
- package/lib/controls/filepicker.d.ts +4 -0
- package/lib/controls/form.d.ts +3 -0
- package/lib/controls/group.d.ts +3 -0
- package/lib/controls/html.d.ts +3 -0
- package/lib/controls/iframe.d.ts +3 -0
- package/lib/controls/image.d.ts +3 -0
- package/lib/controls/number.d.ts +4 -0
- package/lib/controls/radio.d.ts +4 -0
- package/lib/controls/select.d.ts +4 -0
- package/lib/controls/separator.d.ts +3 -0
- package/lib/controls/spacer.d.ts +3 -0
- package/lib/controls/tab.d.ts +4 -0
- package/lib/controls/table.d.ts +6 -0
- package/lib/controls/taglist.d.ts +4 -0
- package/lib/controls/text.d.ts +3 -0
- package/lib/controls/textarea.d.ts +4 -0
- package/lib/controls/textfield.d.ts +6 -0
- package/lib/controls/time.d.ts +4 -0
- package/lib/controls/toggle.d.ts +4 -0
- package/lib/dataSources/interfaces.d.ts +8 -0
- package/lib/dataSources/odata.d.ts +16 -0
- package/lib/dataSources/rest.d.ts +16 -0
- package/lib/directives/accordion.directive.d.ts +11 -0
- package/lib/directives/adorner.directive.d.ts +22 -0
- package/lib/directives/disable.directive.d.ts +12 -0
- package/lib/directives/display.directive.d.ts +12 -0
- package/lib/directives/dropdown.directive.d.ts +26 -0
- package/lib/directives/frame-security.directive.d.ts +14 -0
- package/lib/directives/grid.directive.d.ts +17 -0
- package/lib/directives/register.directive.d.ts +24 -0
- package/lib/directives/repeat.directive.d.ts +12 -0
- package/lib/directives/tab.directive.d.ts +11 -0
- package/lib/directives/updateblur.directive.d.ts +10 -0
- package/lib/dynamic-fields/dynamic-fields.component.d.ts +84 -0
- package/lib/dynamic-form/dynamic-form.component.d.ts +76 -0
- package/lib/locale/locale-it.d.ts +12 -0
- package/lib/services/data.service.d.ts +15 -0
- package/lib/services/event.service.d.ts +15 -0
- package/lib/services/feel.service.d.ts +10 -0
- package/lib/services/formatter.service.d.ts +10 -0
- package/lib/services/markdown.service.d.ts +7 -0
- package/lib/services/mime.service.d.ts +8 -0
- package/lib/services/programmability.service.d.ts +39 -0
- package/lib/services/proxy.service.d.ts +31 -0
- package/lib/services/register.service.d.ts +18 -0
- package/lib/services/sanitize.service.d.ts +12 -0
- package/lib/services/scope.service.d.ts +13 -0
- package/lib/services/toast.service.d.ts +13 -0
- package/lib/services/weak.service.d.ts +10 -0
- package/lib/utils/extractFiles.d.ts +4 -0
- package/lib/utils/gridCells.d.ts +19 -0
- package/lib/utils/groupByRow.d.ts +38 -0
- package/lib/utils/patchForm.d.ts +8 -0
- package/lib/utils/toFormData.d.ts +1 -0
- package/package.json +42 -0
- package/public-api.d.ts +4 -0
|
@@ -0,0 +1,3101 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, Optional, SkipSelf, Directive, Input, Host, ContentChild, ContentChildren, Component, ViewEncapsulation, EventEmitter, Output } from '@angular/core';
|
|
3
|
+
import * as i9 from '@angular/common';
|
|
4
|
+
import { CommonModule } from '@angular/common';
|
|
5
|
+
import * as i1$1 from '@angular/forms';
|
|
6
|
+
import { FormArray, FormControl as FormControl$1, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
7
|
+
import { isObservable, of, Subject, takeUntil } from 'rxjs';
|
|
8
|
+
import { evaluate } from 'feelers';
|
|
9
|
+
import { evaluate as evaluate$1, unaryTest, parseExpression } from 'feelin';
|
|
10
|
+
import { shareReplay, takeUntil as takeUntil$1, map } from 'rxjs/operators';
|
|
11
|
+
import * as i1 from 'ngx-sirio-lib';
|
|
12
|
+
import { SirioInputComponent, SirioValidationDirective, SirioSelectComponent, SirioSelectOptionComponent, SirioSelectPanelComponent, SirioCheckboxGroupComponent, SirioCheckboxComponent, SirioDatepickerComponent, SirioTimepickerComponent, SirioRadioGroupComponent, SirioRadioButtonComponent, SirioTabComponent, SirioTabItemComponent, SirioAccordionComponent, SirioAccordionPanelComponent, SirioAccordionHeaderComponent, SirioAccordionBodyComponent, SirioButtonComponent, SirioFileUploadComponent, SirioToggleComponent, SirioChipCheckboxGroupComponent, SirioChipRadioGroupComponent, SirioInputChipComponent, SirioTableModule, SirioAlertComponent, SirioAlertMessageComponent, SirioSliderComponent, SirioNotifyComponent, SirioNotifyBodyComponent, SirioTableComponent, SirioPaginatorComponent, SirioNotifyActionComponent, SirioNotifyLinkComponent, SirioSidenavMobileComponent, SirioSidenavComponent, SirioSidenavItemComponent, SirioStepperProgressBarComponent, SirioStepperProgressItemComponent } from 'ngx-sirio-lib';
|
|
13
|
+
import { Datepicker } from 'vanillajs-datepicker';
|
|
14
|
+
import * as i1$2 from 'ag-grid-angular';
|
|
15
|
+
import { AgGridAngular } from 'ag-grid-angular';
|
|
16
|
+
import { ClientSideRowModelModule, InfiniteRowModelModule, PaginationModule, LocaleModule, CellStyleModule, ClientSideRowModelApiModule, TextFilterModule, NumberFilterModule, DateFilterModule, themeQuartz, iconSetAlpine } from 'ag-grid-community';
|
|
17
|
+
import { AG_GRID_LOCALE_IT } from '@ag-grid-community/locale';
|
|
18
|
+
import sanitizeHtml from 'sanitize-html';
|
|
19
|
+
import * as i1$3 from '@angular/platform-browser';
|
|
20
|
+
import { marked } from 'marked';
|
|
21
|
+
import mimeDb from 'mime-db';
|
|
22
|
+
import * as i1$4 from '@angular/common/http';
|
|
23
|
+
import { HttpParams } from '@angular/common/http';
|
|
24
|
+
|
|
25
|
+
const IS_PROXY = Symbol("__isProxy$");
|
|
26
|
+
class ProxyService {
|
|
27
|
+
constructor() { }
|
|
28
|
+
getProxy(instance, options = null) {
|
|
29
|
+
return this.createProxy(instance, true, options);
|
|
30
|
+
}
|
|
31
|
+
createProxy(instance, root, options = null) {
|
|
32
|
+
if (!instance) {
|
|
33
|
+
return instance;
|
|
34
|
+
}
|
|
35
|
+
return new Proxy(instance, {
|
|
36
|
+
get: (target, property) => {
|
|
37
|
+
if (property === IS_PROXY) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
let value = undefined;
|
|
41
|
+
if (root && options && options.extend && property in options.extend) {
|
|
42
|
+
value = Reflect.get(options.extend, property, target);
|
|
43
|
+
}
|
|
44
|
+
else if (options && options.isCustom && options.getCustom && options.isCustom(target, property, root)) {
|
|
45
|
+
value = options.getCustom(target, property, root);
|
|
46
|
+
}
|
|
47
|
+
else if (property in target) {
|
|
48
|
+
value = Reflect.get(target, property, target);
|
|
49
|
+
}
|
|
50
|
+
if (options?.log) {
|
|
51
|
+
console.log(target, property, value);
|
|
52
|
+
}
|
|
53
|
+
if (this.isProxy(value))
|
|
54
|
+
return value;
|
|
55
|
+
if (typeof value === 'function') {
|
|
56
|
+
return this.createFunction(value, target);
|
|
57
|
+
}
|
|
58
|
+
else if (typeof value === 'object' && value !== null) {
|
|
59
|
+
return this.createProxy(value, false, options);
|
|
60
|
+
}
|
|
61
|
+
return value;
|
|
62
|
+
},
|
|
63
|
+
set: (target, property, value) => {
|
|
64
|
+
if (options && options.canSet && !options.canSet(target, property, root)) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
return Reflect.set(target, property, value, target);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
deleteProperty: (target, property) => {
|
|
72
|
+
if (options && options.canDelete && !options.canDelete(target, property, root)) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
else if (property in target) {
|
|
76
|
+
return delete target[property];
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
has: (target, property) => {
|
|
83
|
+
if (root && options && options.extend && property in options.extend) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
else if (options && options.isCustom && options.isCustom(target, property, root)) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
else if (property in target) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
createFunction(fn, target) {
|
|
99
|
+
return (...args) => {
|
|
100
|
+
return fn.bind(target)(...args);
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
isProxy(obj) {
|
|
104
|
+
return obj && obj[IS_PROXY] === true;
|
|
105
|
+
}
|
|
106
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
107
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyService, providedIn: 'root' });
|
|
108
|
+
}
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyService, decorators: [{
|
|
110
|
+
type: Injectable,
|
|
111
|
+
args: [{
|
|
112
|
+
providedIn: 'root'
|
|
113
|
+
}]
|
|
114
|
+
}], ctorParameters: () => [] });
|
|
115
|
+
class ProxyOptions {
|
|
116
|
+
_canDelete = () => true;
|
|
117
|
+
_canSet = () => true;
|
|
118
|
+
_isCustom = () => false;
|
|
119
|
+
_getCustom = () => undefined;
|
|
120
|
+
_extend = () => undefined;
|
|
121
|
+
set extend(fn) {
|
|
122
|
+
this._extend = fn;
|
|
123
|
+
}
|
|
124
|
+
get extend() {
|
|
125
|
+
return this._extend;
|
|
126
|
+
}
|
|
127
|
+
set canDelete(fn) {
|
|
128
|
+
this._canDelete = fn;
|
|
129
|
+
}
|
|
130
|
+
get canDelete() {
|
|
131
|
+
return this._canDelete;
|
|
132
|
+
}
|
|
133
|
+
set canSet(fn) {
|
|
134
|
+
this._canSet = fn;
|
|
135
|
+
}
|
|
136
|
+
get canSet() {
|
|
137
|
+
return this._canSet;
|
|
138
|
+
}
|
|
139
|
+
set isCustom(fn) {
|
|
140
|
+
this._isCustom = fn;
|
|
141
|
+
}
|
|
142
|
+
get isCustom() {
|
|
143
|
+
return this._isCustom;
|
|
144
|
+
}
|
|
145
|
+
set getCustom(fn) {
|
|
146
|
+
this._getCustom = fn;
|
|
147
|
+
}
|
|
148
|
+
get getCustom() {
|
|
149
|
+
return this._getCustom;
|
|
150
|
+
}
|
|
151
|
+
log = false;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
class FeelService {
|
|
155
|
+
constructor() { }
|
|
156
|
+
evalTemplate(template, context = {}) {
|
|
157
|
+
return evaluate(template, context);
|
|
158
|
+
}
|
|
159
|
+
;
|
|
160
|
+
evalExpression(expression, context = {}) {
|
|
161
|
+
return evaluate$1(expression, context);
|
|
162
|
+
}
|
|
163
|
+
;
|
|
164
|
+
evalUnaryTest(expression, context = {}, input = null) {
|
|
165
|
+
try {
|
|
166
|
+
context['?'] = input;
|
|
167
|
+
return unaryTest(expression, context);
|
|
168
|
+
}
|
|
169
|
+
finally {
|
|
170
|
+
delete context['?'];
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
;
|
|
174
|
+
getDependencies(expression, context = {}) {
|
|
175
|
+
const dependencies = [];
|
|
176
|
+
const uniqueSet = new Set();
|
|
177
|
+
const addSet = (text) => {
|
|
178
|
+
if (uniqueSet.has(text)) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
uniqueSet.add(text);
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
parseExpression(expression, context).iterate({
|
|
187
|
+
enter: (node) => {
|
|
188
|
+
if (node.name === 'VariableName') {
|
|
189
|
+
const text = expression.substring(node.from, node.to);
|
|
190
|
+
if (addSet(text)) {
|
|
191
|
+
dependencies.push(text);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else if (node.name === 'PathExpression') {
|
|
195
|
+
const text = expression.substring(node.from, node.to);
|
|
196
|
+
if (addSet(text)) {
|
|
197
|
+
const path = [];
|
|
198
|
+
node.iterate((subnode) => {
|
|
199
|
+
if (subnode.name === 'VariableName') {
|
|
200
|
+
const part = expression.substring(subnode.from, subnode.to);
|
|
201
|
+
path.push(part);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
dependencies.push(path);
|
|
205
|
+
}
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
return dependencies;
|
|
212
|
+
}
|
|
213
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
214
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelService, providedIn: 'root' });
|
|
215
|
+
}
|
|
216
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelService, decorators: [{
|
|
217
|
+
type: Injectable,
|
|
218
|
+
args: [{
|
|
219
|
+
providedIn: 'root'
|
|
220
|
+
}]
|
|
221
|
+
}], ctorParameters: () => [] });
|
|
222
|
+
|
|
223
|
+
class WeakService {
|
|
224
|
+
constructor() { }
|
|
225
|
+
cache = new WeakMap();
|
|
226
|
+
exists(source, key) {
|
|
227
|
+
if (this.cache.has(source)) {
|
|
228
|
+
const cachedObject = this.cache.get(source);
|
|
229
|
+
return (key in cachedObject);
|
|
230
|
+
}
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
call(source, key, func, reusable = null, store = null) {
|
|
234
|
+
if (!this.cache.has(source)) {
|
|
235
|
+
this.cache.set(source, {});
|
|
236
|
+
}
|
|
237
|
+
const cachedObject = this.cache.get(source);
|
|
238
|
+
if (key in cachedObject
|
|
239
|
+
&& (reusable == null
|
|
240
|
+
|| reusable(cachedObject[key]))) {
|
|
241
|
+
return cachedObject[key];
|
|
242
|
+
}
|
|
243
|
+
let result = func();
|
|
244
|
+
if (store != null) {
|
|
245
|
+
result = store(result);
|
|
246
|
+
}
|
|
247
|
+
const observable = isObservable(result);
|
|
248
|
+
if (observable) {
|
|
249
|
+
result = result.pipe(shareReplay(1));
|
|
250
|
+
const subscription = result
|
|
251
|
+
.subscribe({
|
|
252
|
+
next: (result) => {
|
|
253
|
+
subscription.unsubscribe();
|
|
254
|
+
cachedObject[key] = of(result);
|
|
255
|
+
},
|
|
256
|
+
error: (error) => console.error(error),
|
|
257
|
+
complete: () => console.log('Observable complete')
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
cachedObject[key] = result;
|
|
261
|
+
return result;
|
|
262
|
+
}
|
|
263
|
+
invalidate(source, key) {
|
|
264
|
+
if (this.cache.has(source)) {
|
|
265
|
+
const cachedObject = this.cache.get(source);
|
|
266
|
+
delete cachedObject[key];
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WeakService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
270
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WeakService, providedIn: 'root' });
|
|
271
|
+
}
|
|
272
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WeakService, decorators: [{
|
|
273
|
+
type: Injectable,
|
|
274
|
+
args: [{
|
|
275
|
+
providedIn: 'root'
|
|
276
|
+
}]
|
|
277
|
+
}], ctorParameters: () => [] });
|
|
278
|
+
|
|
279
|
+
class ToastService {
|
|
280
|
+
sirioToast;
|
|
281
|
+
constructor(sirioToast) {
|
|
282
|
+
this.sirioToast = sirioToast;
|
|
283
|
+
}
|
|
284
|
+
notifyInfo(message, delay = 2000) {
|
|
285
|
+
this.notify(message, "info", delay);
|
|
286
|
+
}
|
|
287
|
+
notifySuccess(message, delay = 2000) {
|
|
288
|
+
this.notify(message, "success", delay);
|
|
289
|
+
}
|
|
290
|
+
notifyWarning(message, delay = 2000) {
|
|
291
|
+
this.notify(message, "warning", delay);
|
|
292
|
+
}
|
|
293
|
+
notifyError(message, delay = 2000) {
|
|
294
|
+
this.notify(message, "danger", delay);
|
|
295
|
+
}
|
|
296
|
+
notify(message, type, delay = 2000) {
|
|
297
|
+
this.sirioToast.openToast({
|
|
298
|
+
delay: delay,
|
|
299
|
+
text: message,
|
|
300
|
+
type: type
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ToastService, deps: [{ token: i1.SirioToastService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
304
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ToastService, providedIn: 'root' });
|
|
305
|
+
}
|
|
306
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ToastService, decorators: [{
|
|
307
|
+
type: Injectable,
|
|
308
|
+
args: [{
|
|
309
|
+
providedIn: 'root'
|
|
310
|
+
}]
|
|
311
|
+
}], ctorParameters: () => [{ type: i1.SirioToastService }] });
|
|
312
|
+
|
|
313
|
+
class RegisterService {
|
|
314
|
+
proxyService;
|
|
315
|
+
parent;
|
|
316
|
+
constructor(proxyService, parent) {
|
|
317
|
+
this.proxyService = proxyService;
|
|
318
|
+
this.parent = parent;
|
|
319
|
+
}
|
|
320
|
+
controls = {};
|
|
321
|
+
register(name, control) {
|
|
322
|
+
this.controls[name] = control;
|
|
323
|
+
}
|
|
324
|
+
unregister(name) {
|
|
325
|
+
delete this.controls[name];
|
|
326
|
+
}
|
|
327
|
+
unregisterAll() {
|
|
328
|
+
this.controls = {};
|
|
329
|
+
}
|
|
330
|
+
getControl(name) {
|
|
331
|
+
return this.controls[name];
|
|
332
|
+
}
|
|
333
|
+
getControls() {
|
|
334
|
+
return Object.values(this.controls);
|
|
335
|
+
}
|
|
336
|
+
proxy() {
|
|
337
|
+
const parentName = "parent";
|
|
338
|
+
const options = new ProxyOptions();
|
|
339
|
+
options.isCustom = (target, property, root) => {
|
|
340
|
+
return root || (property === parentName);
|
|
341
|
+
};
|
|
342
|
+
options.getCustom = (target, property, root) => {
|
|
343
|
+
if (property === parentName) {
|
|
344
|
+
return this.parent?.proxy();
|
|
345
|
+
}
|
|
346
|
+
return this.resolve(property.toString());
|
|
347
|
+
};
|
|
348
|
+
options.canDelete = () => false;
|
|
349
|
+
options.canSet = () => false;
|
|
350
|
+
return this.proxyService.getProxy(this.controls, options);
|
|
351
|
+
}
|
|
352
|
+
resolve(name) {
|
|
353
|
+
const result = this.controls[name];
|
|
354
|
+
if (result)
|
|
355
|
+
return result;
|
|
356
|
+
return this.parent?.resolve(name);
|
|
357
|
+
}
|
|
358
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RegisterService, deps: [{ token: ProxyService }, { token: RegisterService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
359
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RegisterService });
|
|
360
|
+
}
|
|
361
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RegisterService, decorators: [{
|
|
362
|
+
type: Injectable
|
|
363
|
+
}], ctorParameters: () => [{ type: ProxyService }, { type: RegisterService, decorators: [{
|
|
364
|
+
type: Optional
|
|
365
|
+
}, {
|
|
366
|
+
type: SkipSelf
|
|
367
|
+
}] }] });
|
|
368
|
+
|
|
369
|
+
class ScopeService {
|
|
370
|
+
proxyService;
|
|
371
|
+
parent;
|
|
372
|
+
constructor(proxyService, parent) {
|
|
373
|
+
this.proxyService = proxyService;
|
|
374
|
+
this.parent = parent;
|
|
375
|
+
}
|
|
376
|
+
scope = null;
|
|
377
|
+
set(scope) {
|
|
378
|
+
this.scope = scope;
|
|
379
|
+
}
|
|
380
|
+
get() {
|
|
381
|
+
return this.scope;
|
|
382
|
+
}
|
|
383
|
+
proxy() {
|
|
384
|
+
const parentName = "parent";
|
|
385
|
+
const options = new ProxyOptions();
|
|
386
|
+
options.isCustom = (target, property, root) => {
|
|
387
|
+
return root && (property === parentName);
|
|
388
|
+
};
|
|
389
|
+
options.getCustom = (target, property, root) => {
|
|
390
|
+
return this.parent?.proxy();
|
|
391
|
+
};
|
|
392
|
+
options.canDelete = (target, property, root) => {
|
|
393
|
+
return !(root && property === parentName);
|
|
394
|
+
};
|
|
395
|
+
options.canSet = (target, property, root) => {
|
|
396
|
+
return !(root && property === parentName);
|
|
397
|
+
};
|
|
398
|
+
return this.proxyService.getProxy(this.scope ?? {}, options);
|
|
399
|
+
}
|
|
400
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScopeService, deps: [{ token: ProxyService }, { token: ScopeService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
401
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScopeService });
|
|
402
|
+
}
|
|
403
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScopeService, decorators: [{
|
|
404
|
+
type: Injectable
|
|
405
|
+
}], ctorParameters: () => [{ type: ProxyService }, { type: ScopeService, decorators: [{
|
|
406
|
+
type: Optional
|
|
407
|
+
}, {
|
|
408
|
+
type: SkipSelf
|
|
409
|
+
}] }] });
|
|
410
|
+
|
|
411
|
+
class ProgrammabilityService {
|
|
412
|
+
feelService;
|
|
413
|
+
weakService;
|
|
414
|
+
proxyService;
|
|
415
|
+
toastService;
|
|
416
|
+
register;
|
|
417
|
+
scope;
|
|
418
|
+
constructor(feelService, weakService, proxyService, toastService, register, scope) {
|
|
419
|
+
this.feelService = feelService;
|
|
420
|
+
this.weakService = weakService;
|
|
421
|
+
this.proxyService = proxyService;
|
|
422
|
+
this.toastService = toastService;
|
|
423
|
+
this.register = register;
|
|
424
|
+
this.scope = scope;
|
|
425
|
+
}
|
|
426
|
+
destroy$ = new Subject();
|
|
427
|
+
ngOnDestroy() {
|
|
428
|
+
this.destroy$.next();
|
|
429
|
+
this.destroy$.complete();
|
|
430
|
+
}
|
|
431
|
+
isExpression(text) {
|
|
432
|
+
return text != null && text.startsWith("=");
|
|
433
|
+
}
|
|
434
|
+
;
|
|
435
|
+
getExpression(text) {
|
|
436
|
+
if (this.isExpression(text))
|
|
437
|
+
return text.substring(1);
|
|
438
|
+
return "";
|
|
439
|
+
}
|
|
440
|
+
;
|
|
441
|
+
evaluateString(formGroup, value) {
|
|
442
|
+
if (this.isExpression(value)) {
|
|
443
|
+
return this.evalExpression(formGroup, this.getExpression(value));
|
|
444
|
+
}
|
|
445
|
+
return value ?? "";
|
|
446
|
+
}
|
|
447
|
+
evaluateBoolean(formGroup, value) {
|
|
448
|
+
if (typeof value === 'boolean') {
|
|
449
|
+
return value;
|
|
450
|
+
}
|
|
451
|
+
else if (typeof value === 'string') {
|
|
452
|
+
const strValue = value;
|
|
453
|
+
if (this.isExpression(strValue)) {
|
|
454
|
+
return this.evalExpression(formGroup, this.getExpression(strValue));
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return null;
|
|
458
|
+
}
|
|
459
|
+
evaluateNumber(formGroup, value) {
|
|
460
|
+
if (typeof value === 'number') {
|
|
461
|
+
return value;
|
|
462
|
+
}
|
|
463
|
+
else if (typeof value === 'string') {
|
|
464
|
+
const strValue = value;
|
|
465
|
+
if (this.isExpression(strValue)) {
|
|
466
|
+
return this.evalExpression(formGroup, this.getExpression(strValue));
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
return null;
|
|
470
|
+
}
|
|
471
|
+
evaluate(formGroup, value, cacheable = this.cacheable) {
|
|
472
|
+
if (this.isExpression(value)) {
|
|
473
|
+
return this.evalExpression(formGroup, this.getExpression(value), cacheable);
|
|
474
|
+
}
|
|
475
|
+
return null;
|
|
476
|
+
}
|
|
477
|
+
evaluateTemplate(formGroup, value) {
|
|
478
|
+
let template = null;
|
|
479
|
+
if (this.isExpression(value)) {
|
|
480
|
+
template = this.evalExpression(formGroup, this.getExpression(value));
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
template = value;
|
|
484
|
+
}
|
|
485
|
+
return this.evalTemplate(formGroup, template ?? "");
|
|
486
|
+
}
|
|
487
|
+
evaluateUnary(formGroup, value, input) {
|
|
488
|
+
if (this.isExpression(value)) {
|
|
489
|
+
return this.evalUnaryTest(formGroup, this.getExpression(value), input);
|
|
490
|
+
}
|
|
491
|
+
return null;
|
|
492
|
+
}
|
|
493
|
+
cacheable = true;
|
|
494
|
+
evalUnaryTest(formGroup, expression, input) {
|
|
495
|
+
try {
|
|
496
|
+
return this.feelService.evalUnaryTest(expression, this.getContext(formGroup), input);
|
|
497
|
+
}
|
|
498
|
+
catch (e) {
|
|
499
|
+
return null;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
evalExpression(formGroup, expression, cacheable = this.cacheable) {
|
|
503
|
+
const evaluate = () => {
|
|
504
|
+
try {
|
|
505
|
+
return this.feelService.evalExpression(expression, this.getContext(formGroup));
|
|
506
|
+
}
|
|
507
|
+
catch (e) {
|
|
508
|
+
console.log(expression, e);
|
|
509
|
+
return null;
|
|
510
|
+
}
|
|
511
|
+
};
|
|
512
|
+
if (cacheable) {
|
|
513
|
+
const watchKey = `:watch(${expression})`;
|
|
514
|
+
this.weakService.call(formGroup, watchKey, () => {
|
|
515
|
+
this.watchExpression(formGroup, expression, () => this.weakService.invalidate(formGroup, expression));
|
|
516
|
+
return true;
|
|
517
|
+
});
|
|
518
|
+
return this.weakService.call(formGroup, expression, evaluate);
|
|
519
|
+
}
|
|
520
|
+
else {
|
|
521
|
+
return evaluate();
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
evalTemplate(formGroup, expression) {
|
|
525
|
+
try {
|
|
526
|
+
return this.feelService.evalTemplate(expression, this.getContext(formGroup));
|
|
527
|
+
}
|
|
528
|
+
catch (e) {
|
|
529
|
+
return null;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
createProxy(formGroup) {
|
|
533
|
+
if (!formGroup) {
|
|
534
|
+
return null;
|
|
535
|
+
}
|
|
536
|
+
const options = new ProxyOptions();
|
|
537
|
+
options.extend = {
|
|
538
|
+
parent: this.getParent(formGroup),
|
|
539
|
+
getFormGroup: () => this.proxyService.getProxy(formGroup),
|
|
540
|
+
getScope: () => this.scope ? this.scope.proxy() : null,
|
|
541
|
+
controls: () => this.register ? this.register.proxy() : null,
|
|
542
|
+
notifyInfo: (message, delay) => this.toastService.notifyInfo(message, delay),
|
|
543
|
+
notifySuccess: (message, delay) => this.toastService.notifySuccess(message, delay),
|
|
544
|
+
notifyWarning: (message, delay) => this.toastService.notifyWarning(message, delay),
|
|
545
|
+
notifyError: (message, delay) => this.toastService.notifyError(message, delay)
|
|
546
|
+
};
|
|
547
|
+
return this.proxyService.getProxy(formGroup.value, options);
|
|
548
|
+
}
|
|
549
|
+
getParent(formGroup) {
|
|
550
|
+
let parent = formGroup.parent;
|
|
551
|
+
while (parent instanceof FormArray) {
|
|
552
|
+
parent = parent?.parent;
|
|
553
|
+
}
|
|
554
|
+
return parent;
|
|
555
|
+
}
|
|
556
|
+
getContext(control) {
|
|
557
|
+
const formGroup = control;
|
|
558
|
+
const context = this.createProxy(formGroup);
|
|
559
|
+
return context;
|
|
560
|
+
}
|
|
561
|
+
watchExpression(formGroup, expression, callback) {
|
|
562
|
+
const context = this.getContext(formGroup);
|
|
563
|
+
const dependencies = this.feelService.getDependencies(expression, context);
|
|
564
|
+
this.watchDependencies(formGroup, dependencies, callback);
|
|
565
|
+
}
|
|
566
|
+
;
|
|
567
|
+
watchDependencies(formGroup, dependencies, callback) {
|
|
568
|
+
const subscriptions = [];
|
|
569
|
+
const scopeName = "scope";
|
|
570
|
+
const parentName = "parent";
|
|
571
|
+
const invokeCallback = (control) => {
|
|
572
|
+
subscriptions.push(control.valueChanges
|
|
573
|
+
.pipe(takeUntil(this.destroy$))
|
|
574
|
+
.subscribe(() => {
|
|
575
|
+
setTimeout(() => {
|
|
576
|
+
callback();
|
|
577
|
+
});
|
|
578
|
+
}));
|
|
579
|
+
};
|
|
580
|
+
for (const dependence of dependencies) {
|
|
581
|
+
if (Array.isArray(dependence)) {
|
|
582
|
+
if (dependence[0] === scopeName)
|
|
583
|
+
continue;
|
|
584
|
+
let targetForm = formGroup;
|
|
585
|
+
let controlPath = dependence;
|
|
586
|
+
while (controlPath.length > 0 && controlPath[0] === parentName) {
|
|
587
|
+
if (!targetForm.parent)
|
|
588
|
+
break;
|
|
589
|
+
targetForm = targetForm.parent;
|
|
590
|
+
controlPath = controlPath.slice(1);
|
|
591
|
+
}
|
|
592
|
+
if (controlPath.length > 0 && targetForm) {
|
|
593
|
+
const control = targetForm.get(controlPath);
|
|
594
|
+
if (control) {
|
|
595
|
+
invokeCallback(control);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
else {
|
|
600
|
+
if (dependence === scopeName)
|
|
601
|
+
continue;
|
|
602
|
+
const control = formGroup.get(dependence);
|
|
603
|
+
if (control) {
|
|
604
|
+
invokeCallback(control);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
return subscriptions;
|
|
609
|
+
}
|
|
610
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProgrammabilityService, deps: [{ token: FeelService }, { token: WeakService }, { token: ProxyService }, { token: ToastService }, { token: RegisterService, optional: true }, { token: ScopeService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
611
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProgrammabilityService });
|
|
612
|
+
}
|
|
613
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProgrammabilityService, decorators: [{
|
|
614
|
+
type: Injectable
|
|
615
|
+
}], ctorParameters: () => [{ type: FeelService }, { type: WeakService }, { type: ProxyService }, { type: ToastService }, { type: RegisterService, decorators: [{
|
|
616
|
+
type: Optional
|
|
617
|
+
}] }, { type: ScopeService, decorators: [{
|
|
618
|
+
type: Optional
|
|
619
|
+
}] }] });
|
|
620
|
+
|
|
621
|
+
function patchForm(control, value, options) {
|
|
622
|
+
const defaultOptions = {
|
|
623
|
+
emitEvent: true,
|
|
624
|
+
validateType: false,
|
|
625
|
+
fallbackValue: null
|
|
626
|
+
};
|
|
627
|
+
const warn = (message) => {
|
|
628
|
+
if (options?.emitWarn)
|
|
629
|
+
console.warn(`[patchForm] ${message}`);
|
|
630
|
+
};
|
|
631
|
+
const error = (message) => {
|
|
632
|
+
if (options?.emitError)
|
|
633
|
+
throw new Error(message);
|
|
634
|
+
};
|
|
635
|
+
const { emitEvent, validateType, fallbackValue } = { ...defaultOptions, ...options };
|
|
636
|
+
if (control instanceof FormControl$1) {
|
|
637
|
+
if (validateType && typeof value !== typeof control.value) {
|
|
638
|
+
warn(`Value type mismatch: expected ${typeof control.value}, but received ${typeof value}`);
|
|
639
|
+
if (fallbackValue !== null) {
|
|
640
|
+
control.patchValue(fallbackValue, { emitEvent });
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
643
|
+
error('Invalid value type and no fallback value provided.');
|
|
644
|
+
return;
|
|
645
|
+
}
|
|
646
|
+
control.patchValue(value, { emitEvent });
|
|
647
|
+
}
|
|
648
|
+
else if (control instanceof FormGroup) {
|
|
649
|
+
Object.keys(value || {}).forEach((key) => {
|
|
650
|
+
if (control.controls[key]) {
|
|
651
|
+
patchForm(control.controls[key], value[key], options);
|
|
652
|
+
}
|
|
653
|
+
else {
|
|
654
|
+
warn(`Key "${key}" not found in the FormGroup.`);
|
|
655
|
+
}
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
else if (control instanceof FormArray) {
|
|
659
|
+
(value || []).forEach((item, index) => {
|
|
660
|
+
if (control.at(index)) {
|
|
661
|
+
patchForm(control.at(index), item, options);
|
|
662
|
+
}
|
|
663
|
+
else {
|
|
664
|
+
warn(`Index ${index} not found in the FormArray. Adding dynamically...`);
|
|
665
|
+
const newControl = control.addNewItem();
|
|
666
|
+
patchForm(newControl, item, options);
|
|
667
|
+
}
|
|
668
|
+
});
|
|
669
|
+
}
|
|
670
|
+
else {
|
|
671
|
+
error('Unsupported AbstractControl type.');
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
function groupByRow(forms) {
|
|
676
|
+
return forms.map(form => ({
|
|
677
|
+
id: form.id,
|
|
678
|
+
type: form.type,
|
|
679
|
+
name: form.name,
|
|
680
|
+
title: form.title,
|
|
681
|
+
path: form.path,
|
|
682
|
+
rows: groupRowsRecursively(form.components)
|
|
683
|
+
}));
|
|
684
|
+
}
|
|
685
|
+
function groupRowsRecursively(components) {
|
|
686
|
+
const groupedMap = new Map();
|
|
687
|
+
function processComponent(component) {
|
|
688
|
+
const row = component.layout.row;
|
|
689
|
+
if (!groupedMap.has(row)) {
|
|
690
|
+
groupedMap.set(row, []);
|
|
691
|
+
}
|
|
692
|
+
const { components, ...props } = component;
|
|
693
|
+
groupedMap.get(row).push({
|
|
694
|
+
...props,
|
|
695
|
+
rows: components ? groupRowsRecursively(components) : undefined
|
|
696
|
+
});
|
|
697
|
+
}
|
|
698
|
+
components.forEach(component => processComponent(component));
|
|
699
|
+
return Array.from(groupedMap.entries()).map(([row, components]) => ({
|
|
700
|
+
row,
|
|
701
|
+
components
|
|
702
|
+
}));
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
class EventService {
|
|
706
|
+
commandSubject = new Subject();
|
|
707
|
+
onCommand = this.commandSubject.asObservable();
|
|
708
|
+
emitCommand(data) {
|
|
709
|
+
this.commandSubject.next(data);
|
|
710
|
+
}
|
|
711
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
712
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EventService, providedIn: 'root' });
|
|
713
|
+
}
|
|
714
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EventService, decorators: [{
|
|
715
|
+
type: Injectable,
|
|
716
|
+
args: [{
|
|
717
|
+
providedIn: 'root'
|
|
718
|
+
}]
|
|
719
|
+
}] });
|
|
720
|
+
|
|
721
|
+
class AdornerDirective {
|
|
722
|
+
el;
|
|
723
|
+
renderer;
|
|
724
|
+
prefixAdorner = null;
|
|
725
|
+
suffixAdorner = null;
|
|
726
|
+
constructor(el, renderer) {
|
|
727
|
+
this.el = el;
|
|
728
|
+
this.renderer = renderer;
|
|
729
|
+
}
|
|
730
|
+
ngAfterViewInit() {
|
|
731
|
+
this.updatePrefix(this.prefixAdorner);
|
|
732
|
+
this.updateSuffix(this.suffixAdorner);
|
|
733
|
+
}
|
|
734
|
+
ngOnChanges(changes) {
|
|
735
|
+
if (changes["prefixAdorner"]) {
|
|
736
|
+
this.updatePrefix(changes["prefixAdorner"].currentValue);
|
|
737
|
+
}
|
|
738
|
+
if (changes["suffixAdorner"]) {
|
|
739
|
+
this.updateSuffix(changes["suffixAdorner"].currentValue);
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
getWrapper() {
|
|
743
|
+
return this.el.nativeElement.querySelector('div.sirio-input-group');
|
|
744
|
+
}
|
|
745
|
+
;
|
|
746
|
+
isPrepared() {
|
|
747
|
+
return this.getWrapper() !== null;
|
|
748
|
+
}
|
|
749
|
+
prepare() {
|
|
750
|
+
if (this.isPrepared())
|
|
751
|
+
return this.getWrapper();
|
|
752
|
+
const inputElement = this.el.nativeElement.querySelector('input');
|
|
753
|
+
if (!inputElement)
|
|
754
|
+
return null;
|
|
755
|
+
const wrapper = this.renderer.createElement('div');
|
|
756
|
+
this.renderer.addClass(wrapper, 'sirio-input-group');
|
|
757
|
+
const parent = inputElement.parentNode;
|
|
758
|
+
this.renderer.insertBefore(parent, wrapper, inputElement);
|
|
759
|
+
this.renderer.appendChild(wrapper, inputElement);
|
|
760
|
+
return wrapper;
|
|
761
|
+
}
|
|
762
|
+
updatePrefix(prefixAdorner) {
|
|
763
|
+
const prefixText = this.normalizeText(prefixAdorner);
|
|
764
|
+
this.remove("span.prefix");
|
|
765
|
+
if (prefixText !== null) {
|
|
766
|
+
const wrapper = this.prepare();
|
|
767
|
+
if (wrapper) {
|
|
768
|
+
const inputElement = wrapper.querySelector('input');
|
|
769
|
+
const prefixSpan = this.createSpanElement(prefixText);
|
|
770
|
+
this.renderer.addClass(prefixSpan, "prefix");
|
|
771
|
+
this.renderer.insertBefore(wrapper, prefixSpan, inputElement);
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
updateSuffix(suffixAdorner) {
|
|
776
|
+
const suffixText = this.normalizeText(suffixAdorner);
|
|
777
|
+
this.remove("span.suffix");
|
|
778
|
+
if (suffixText !== null) {
|
|
779
|
+
const wrapper = this.prepare();
|
|
780
|
+
if (wrapper) {
|
|
781
|
+
const suffixSpan = this.createSpanElement(suffixText);
|
|
782
|
+
this.renderer.addClass(suffixSpan, "suffix");
|
|
783
|
+
this.renderer.appendChild(wrapper, suffixSpan);
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
remove(selector) {
|
|
788
|
+
const wrapper = this.getWrapper();
|
|
789
|
+
if (!wrapper)
|
|
790
|
+
return;
|
|
791
|
+
const span = wrapper.querySelector(selector);
|
|
792
|
+
if (span)
|
|
793
|
+
this.renderer.removeChild(wrapper, span);
|
|
794
|
+
}
|
|
795
|
+
createSpanElement(adorner) {
|
|
796
|
+
const outerSpan = this.renderer.createElement('span');
|
|
797
|
+
this.renderer.addClass(outerSpan, 'sirio-input-group-text');
|
|
798
|
+
const innerSpan = this.renderer.createElement('span');
|
|
799
|
+
this.renderer.setAttribute(innerSpan, 'aria-hidden', 'true');
|
|
800
|
+
const iconClass = this.getIconClassName(adorner);
|
|
801
|
+
if (iconClass) {
|
|
802
|
+
this.renderer.addClass(innerSpan, 'fas');
|
|
803
|
+
this.renderer.addClass(innerSpan, iconClass);
|
|
804
|
+
}
|
|
805
|
+
else {
|
|
806
|
+
const strongElement = this.renderer.createElement('strong');
|
|
807
|
+
this.renderer.appendChild(innerSpan, strongElement);
|
|
808
|
+
const text = this.renderer.createText(adorner);
|
|
809
|
+
this.renderer.appendChild(strongElement, text);
|
|
810
|
+
}
|
|
811
|
+
this.renderer.appendChild(outerSpan, innerSpan);
|
|
812
|
+
return outerSpan;
|
|
813
|
+
}
|
|
814
|
+
;
|
|
815
|
+
getIconClassName(text) {
|
|
816
|
+
switch (text) {
|
|
817
|
+
case "%":
|
|
818
|
+
return "fa-percent";
|
|
819
|
+
case "@":
|
|
820
|
+
return "fa-envelope";
|
|
821
|
+
case "€":
|
|
822
|
+
return "fa-euro-sign";
|
|
823
|
+
}
|
|
824
|
+
return null;
|
|
825
|
+
}
|
|
826
|
+
;
|
|
827
|
+
normalizeText(text) {
|
|
828
|
+
if (text) {
|
|
829
|
+
const trimmedValue = text.trim();
|
|
830
|
+
return trimmedValue.length > 0 ? trimmedValue : null;
|
|
831
|
+
}
|
|
832
|
+
return null;
|
|
833
|
+
}
|
|
834
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AdornerDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
835
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AdornerDirective, isStandalone: true, selector: "[prefixAdorner], [suffixAdorner]", inputs: { prefixAdorner: "prefixAdorner", suffixAdorner: "suffixAdorner" }, usesOnChanges: true, ngImport: i0 });
|
|
836
|
+
}
|
|
837
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AdornerDirective, decorators: [{
|
|
838
|
+
type: Directive,
|
|
839
|
+
args: [{
|
|
840
|
+
selector: '[prefixAdorner], [suffixAdorner]',
|
|
841
|
+
standalone: true
|
|
842
|
+
}]
|
|
843
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { prefixAdorner: [{
|
|
844
|
+
type: Input
|
|
845
|
+
}], suffixAdorner: [{
|
|
846
|
+
type: Input
|
|
847
|
+
}] } });
|
|
848
|
+
|
|
849
|
+
class DisableDirective {
|
|
850
|
+
ngControl;
|
|
851
|
+
disableControl = null;
|
|
852
|
+
readonly = null;
|
|
853
|
+
constructor(ngControl) {
|
|
854
|
+
this.ngControl = ngControl;
|
|
855
|
+
}
|
|
856
|
+
ngOnChanges(changes) {
|
|
857
|
+
if (changes["disableControl"] || changes["readonly"]) {
|
|
858
|
+
if (this.ngControl.control) {
|
|
859
|
+
if (this.disableControl) {
|
|
860
|
+
this.ngControl.control.disable();
|
|
861
|
+
}
|
|
862
|
+
else {
|
|
863
|
+
this.ngControl.control.enable();
|
|
864
|
+
this.ngControl.valueAccessor?.setDisabledState(this.readonly === true);
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DisableDirective, deps: [{ token: i1$1.NgControl }], target: i0.ɵɵFactoryTarget.Directive });
|
|
870
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DisableDirective, isStandalone: true, selector: "[disableControl], [readonly]", inputs: { disableControl: "disableControl", readonly: "readonly" }, usesOnChanges: true, ngImport: i0 });
|
|
871
|
+
}
|
|
872
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DisableDirective, decorators: [{
|
|
873
|
+
type: Directive,
|
|
874
|
+
args: [{
|
|
875
|
+
selector: '[disableControl], [readonly]',
|
|
876
|
+
standalone: true
|
|
877
|
+
}]
|
|
878
|
+
}], ctorParameters: () => [{ type: i1$1.NgControl }], propDecorators: { disableControl: [{
|
|
879
|
+
type: Input
|
|
880
|
+
}], readonly: [{
|
|
881
|
+
type: Input
|
|
882
|
+
}] } });
|
|
883
|
+
|
|
884
|
+
class DisplayDirective {
|
|
885
|
+
el;
|
|
886
|
+
renderer;
|
|
887
|
+
hide = null;
|
|
888
|
+
show = null;
|
|
889
|
+
constructor(el, renderer) {
|
|
890
|
+
this.el = el;
|
|
891
|
+
this.renderer = renderer;
|
|
892
|
+
}
|
|
893
|
+
ngOnChanges(changes) {
|
|
894
|
+
if (changes["hide"]) {
|
|
895
|
+
const value = changes["hide"].currentValue;
|
|
896
|
+
if (value === true) {
|
|
897
|
+
this.renderer.setStyle(this.el.nativeElement, 'display', 'none');
|
|
898
|
+
}
|
|
899
|
+
else if (value === false) {
|
|
900
|
+
this.renderer.setStyle(this.el.nativeElement, 'display', 'block');
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
if (changes["show"]) {
|
|
904
|
+
const value = changes["show"].currentValue;
|
|
905
|
+
if (value === true) {
|
|
906
|
+
this.renderer.setStyle(this.el.nativeElement, 'display', 'block');
|
|
907
|
+
}
|
|
908
|
+
else if (value === false) {
|
|
909
|
+
this.renderer.setStyle(this.el.nativeElement, 'display', 'none');
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DisplayDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
914
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DisplayDirective, isStandalone: true, selector: "[hide], [show]", inputs: { hide: "hide", show: "show" }, usesOnChanges: true, ngImport: i0 });
|
|
915
|
+
}
|
|
916
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DisplayDirective, decorators: [{
|
|
917
|
+
type: Directive,
|
|
918
|
+
args: [{
|
|
919
|
+
selector: '[hide], [show]',
|
|
920
|
+
standalone: true
|
|
921
|
+
}]
|
|
922
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { hide: [{
|
|
923
|
+
type: Input
|
|
924
|
+
}], show: [{
|
|
925
|
+
type: Input
|
|
926
|
+
}] } });
|
|
927
|
+
|
|
928
|
+
class RepeatDirective {
|
|
929
|
+
controlContainer;
|
|
930
|
+
repeat = null;
|
|
931
|
+
constructor(controlContainer) {
|
|
932
|
+
this.controlContainer = controlContainer;
|
|
933
|
+
}
|
|
934
|
+
ngOnChanges(changes) {
|
|
935
|
+
if (changes["repeat"]) {
|
|
936
|
+
const formArray = this.controlContainer.control;
|
|
937
|
+
const value = changes["repeat"].currentValue;
|
|
938
|
+
if (Number.isInteger(value) && value >= 0)
|
|
939
|
+
this.resizeArray(formArray, value);
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
resizeArray(formArray, size) {
|
|
943
|
+
while (formArray.length < size) {
|
|
944
|
+
formArray.addNewItem();
|
|
945
|
+
}
|
|
946
|
+
while (formArray.length > size) {
|
|
947
|
+
formArray.removeAt(formArray.length - 1);
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RepeatDirective, deps: [{ token: i1$1.ControlContainer }], target: i0.ɵɵFactoryTarget.Directive });
|
|
951
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: RepeatDirective, isStandalone: true, selector: "[repeat]", inputs: { repeat: "repeat" }, usesOnChanges: true, ngImport: i0 });
|
|
952
|
+
}
|
|
953
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RepeatDirective, decorators: [{
|
|
954
|
+
type: Directive,
|
|
955
|
+
args: [{
|
|
956
|
+
selector: '[repeat]',
|
|
957
|
+
standalone: true
|
|
958
|
+
}]
|
|
959
|
+
}], ctorParameters: () => [{ type: i1$1.ControlContainer }], propDecorators: { repeat: [{
|
|
960
|
+
type: Input
|
|
961
|
+
}] } });
|
|
962
|
+
|
|
963
|
+
class FrameSecurityDirective {
|
|
964
|
+
el;
|
|
965
|
+
renderer;
|
|
966
|
+
frameSecurity = null;
|
|
967
|
+
constructor(el, renderer) {
|
|
968
|
+
this.el = el;
|
|
969
|
+
this.renderer = renderer;
|
|
970
|
+
}
|
|
971
|
+
ngAfterViewInit() {
|
|
972
|
+
const frame = this.el.nativeElement;
|
|
973
|
+
const sandbox = this.getSandBox(this.frameSecurity);
|
|
974
|
+
if (sandbox)
|
|
975
|
+
this.renderer.setAttribute(frame, 'sandbox', sandbox);
|
|
976
|
+
const allow = this.getAllow(this.frameSecurity);
|
|
977
|
+
if (allow)
|
|
978
|
+
this.renderer.setAttribute(frame, 'allow', allow);
|
|
979
|
+
}
|
|
980
|
+
getSandBox(security) {
|
|
981
|
+
let allowedProperties = [
|
|
982
|
+
"allowScripts",
|
|
983
|
+
"allowSameOrigin",
|
|
984
|
+
"allowForms",
|
|
985
|
+
"allowModals",
|
|
986
|
+
"allowPopups",
|
|
987
|
+
"allowTopNavigation",
|
|
988
|
+
"allowStorageAccessByUserActivation"
|
|
989
|
+
];
|
|
990
|
+
let sandBox = Object.entries(security)
|
|
991
|
+
.filter(([key, value]) => value === true && allowedProperties.includes(key))
|
|
992
|
+
.map(([key]) => this.camelToKebabCase(key))
|
|
993
|
+
.join(' ');
|
|
994
|
+
return sandBox;
|
|
995
|
+
}
|
|
996
|
+
;
|
|
997
|
+
getAllow(security) {
|
|
998
|
+
let allowedProperties = [
|
|
999
|
+
"fullscreen",
|
|
1000
|
+
"geolocation",
|
|
1001
|
+
"camera",
|
|
1002
|
+
"microphone"
|
|
1003
|
+
];
|
|
1004
|
+
let allow = Object.entries(security)
|
|
1005
|
+
.filter(([key, value]) => value === true && allowedProperties.includes(key))
|
|
1006
|
+
.map(([key]) => key)
|
|
1007
|
+
.join(' ');
|
|
1008
|
+
return allow;
|
|
1009
|
+
}
|
|
1010
|
+
;
|
|
1011
|
+
camelToKebabCase(str) {
|
|
1012
|
+
return str.replace(/[A-Z]/g, (match) => '-' + match.toLowerCase());
|
|
1013
|
+
}
|
|
1014
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FrameSecurityDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1015
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: FrameSecurityDirective, isStandalone: true, selector: "[frameSecurity]", inputs: { frameSecurity: "frameSecurity" }, ngImport: i0 });
|
|
1016
|
+
}
|
|
1017
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FrameSecurityDirective, decorators: [{
|
|
1018
|
+
type: Directive,
|
|
1019
|
+
args: [{
|
|
1020
|
+
selector: '[frameSecurity]',
|
|
1021
|
+
standalone: true
|
|
1022
|
+
}]
|
|
1023
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { frameSecurity: [{
|
|
1024
|
+
type: Input
|
|
1025
|
+
}] } });
|
|
1026
|
+
|
|
1027
|
+
class DropdownDirective {
|
|
1028
|
+
el;
|
|
1029
|
+
renderer;
|
|
1030
|
+
sirioSelect;
|
|
1031
|
+
constructor(el, renderer, sirioSelect) {
|
|
1032
|
+
this.el = el;
|
|
1033
|
+
this.renderer = renderer;
|
|
1034
|
+
this.sirioSelect = sirioSelect;
|
|
1035
|
+
}
|
|
1036
|
+
ngAfterViewInit() {
|
|
1037
|
+
this.handleNullValue();
|
|
1038
|
+
this.handleSearchable();
|
|
1039
|
+
}
|
|
1040
|
+
handleNullValue() {
|
|
1041
|
+
if (this.sirioSelect
|
|
1042
|
+
&& this.sirioSelect.value === null
|
|
1043
|
+
&& Array.isArray(this.sirioSelect.options)) {
|
|
1044
|
+
const nullOption = this.sirioSelect.options.find(option => option.value === null);
|
|
1045
|
+
if (nullOption) {
|
|
1046
|
+
nullOption.isSelected = true;
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
handleSearchable() {
|
|
1051
|
+
const searchable = this.el.nativeElement.querySelector('.searchable');
|
|
1052
|
+
if (searchable) {
|
|
1053
|
+
const dropDown = this.el.nativeElement.querySelector('.sirio-dropdown');
|
|
1054
|
+
const dropMenu = dropDown.querySelector('.sirio-dropdown-menu');
|
|
1055
|
+
const input = searchable.querySelector('input');
|
|
1056
|
+
this.renderer.insertBefore(dropDown, searchable, dropMenu);
|
|
1057
|
+
this.renderer.listen(input, 'blur', (event) => {
|
|
1058
|
+
this.sirioSelect.panel.close();
|
|
1059
|
+
});
|
|
1060
|
+
this.renderer.listen(input, 'keyup', (event) => {
|
|
1061
|
+
this.onKeyUp(event, input);
|
|
1062
|
+
});
|
|
1063
|
+
this.renderer.listen(input, 'keydown', (event) => {
|
|
1064
|
+
this.onKeyDown(event);
|
|
1065
|
+
});
|
|
1066
|
+
this.sirioSelect.panel.panelOpened.subscribe(() => {
|
|
1067
|
+
this.activate(searchable);
|
|
1068
|
+
});
|
|
1069
|
+
this.sirioSelect.panel.panelClosed.subscribe(() => {
|
|
1070
|
+
this.deactivate(searchable);
|
|
1071
|
+
});
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
deactivate(element) {
|
|
1075
|
+
this.renderer.setStyle(element, 'display', 'none');
|
|
1076
|
+
}
|
|
1077
|
+
activate(element) {
|
|
1078
|
+
let currentValue = "";
|
|
1079
|
+
if (this.sirioSelect.optionsSelected.length > 0) {
|
|
1080
|
+
currentValue = this.sirioSelect.optionsSelected[0].text;
|
|
1081
|
+
}
|
|
1082
|
+
const input = element.querySelector("input");
|
|
1083
|
+
if (!input)
|
|
1084
|
+
return;
|
|
1085
|
+
input.value = currentValue;
|
|
1086
|
+
const dropMenu = this.el.nativeElement.querySelector('.sirio-dropdown-menu');
|
|
1087
|
+
this.sirioSelect.options.forEach((option) => {
|
|
1088
|
+
this.show(option, true);
|
|
1089
|
+
if (currentValue == option.text) {
|
|
1090
|
+
dropMenu.scrollTop = this.native(option).offsetTop;
|
|
1091
|
+
}
|
|
1092
|
+
});
|
|
1093
|
+
this.renderer.setStyle(element, 'display', 'inline-block');
|
|
1094
|
+
setTimeout(() => {
|
|
1095
|
+
input.setSelectionRange(input.value.length, input.value.length);
|
|
1096
|
+
input.focus();
|
|
1097
|
+
});
|
|
1098
|
+
}
|
|
1099
|
+
onKeyUp(event, input) {
|
|
1100
|
+
const { code } = event;
|
|
1101
|
+
switch (code) {
|
|
1102
|
+
case 'Enter':
|
|
1103
|
+
case 'Space':
|
|
1104
|
+
case 'ArrowDown':
|
|
1105
|
+
case 'ArrowUp':
|
|
1106
|
+
case 'Escape':
|
|
1107
|
+
return;
|
|
1108
|
+
}
|
|
1109
|
+
const value = this.comparable(input.value);
|
|
1110
|
+
let firstMatch = true;
|
|
1111
|
+
this.sirioSelect.options.forEach((option, index) => {
|
|
1112
|
+
const match = this.comparable(option.text).includes(value);
|
|
1113
|
+
this.show(option, match);
|
|
1114
|
+
if (match && firstMatch) {
|
|
1115
|
+
option.setFocus();
|
|
1116
|
+
firstMatch = false;
|
|
1117
|
+
}
|
|
1118
|
+
else {
|
|
1119
|
+
option.removeFocus();
|
|
1120
|
+
}
|
|
1121
|
+
});
|
|
1122
|
+
}
|
|
1123
|
+
onKeyDown(event) {
|
|
1124
|
+
const panel = this.sirioSelect.panel;
|
|
1125
|
+
if (!panel) {
|
|
1126
|
+
return;
|
|
1127
|
+
}
|
|
1128
|
+
const panelIsOpen = panel.panelIsOpen;
|
|
1129
|
+
const { code } = event;
|
|
1130
|
+
if (panelIsOpen) {
|
|
1131
|
+
switch (code) {
|
|
1132
|
+
case 'Enter':
|
|
1133
|
+
case 'Space':
|
|
1134
|
+
if (panel.optionFocused) {
|
|
1135
|
+
panel.optionFocused?.onOptionSelected(event);
|
|
1136
|
+
}
|
|
1137
|
+
else {
|
|
1138
|
+
panel.close(event);
|
|
1139
|
+
event?.preventDefault();
|
|
1140
|
+
}
|
|
1141
|
+
break;
|
|
1142
|
+
case 'ArrowDown':
|
|
1143
|
+
this.scrollDown();
|
|
1144
|
+
event?.preventDefault();
|
|
1145
|
+
break;
|
|
1146
|
+
case 'ArrowUp':
|
|
1147
|
+
this.scrollUp();
|
|
1148
|
+
event?.preventDefault();
|
|
1149
|
+
break;
|
|
1150
|
+
case 'Escape':
|
|
1151
|
+
panel.close(event);
|
|
1152
|
+
break;
|
|
1153
|
+
default:
|
|
1154
|
+
break;
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
if (!panelIsOpen) {
|
|
1158
|
+
switch (code) {
|
|
1159
|
+
case 'Enter':
|
|
1160
|
+
case 'Space':
|
|
1161
|
+
panel.open(event);
|
|
1162
|
+
event?.preventDefault();
|
|
1163
|
+
break;
|
|
1164
|
+
default:
|
|
1165
|
+
break;
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
native(option) {
|
|
1170
|
+
return option.viewContainerRef.element.nativeElement;
|
|
1171
|
+
}
|
|
1172
|
+
isHidden(option) {
|
|
1173
|
+
return this.native(option).style.display === 'none';
|
|
1174
|
+
}
|
|
1175
|
+
show(option, value) {
|
|
1176
|
+
this.native(option).style.display = value ? '' : 'none';
|
|
1177
|
+
}
|
|
1178
|
+
comparable(text) {
|
|
1179
|
+
return text.toLowerCase().trim();
|
|
1180
|
+
}
|
|
1181
|
+
scrollDown() {
|
|
1182
|
+
const panel = this.sirioSelect.panel;
|
|
1183
|
+
if (!panel.optionFocused) {
|
|
1184
|
+
panel.scrollBarTop();
|
|
1185
|
+
panel.options.first.setFocus();
|
|
1186
|
+
return;
|
|
1187
|
+
}
|
|
1188
|
+
const nextOptionFocused = this.findNextVisibleOption(panel.optionFocusedIndex + 1, panel.options);
|
|
1189
|
+
panel.scrollBarDown();
|
|
1190
|
+
panel.optionFocused?.removeFocus();
|
|
1191
|
+
if (nextOptionFocused) {
|
|
1192
|
+
nextOptionFocused?.setFocus();
|
|
1193
|
+
return;
|
|
1194
|
+
}
|
|
1195
|
+
panel.scrollBarTop();
|
|
1196
|
+
const firstVisible = this.findNextVisibleOption(0, panel.options);
|
|
1197
|
+
if (firstVisible) {
|
|
1198
|
+
firstVisible.setFocus();
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
scrollUp() {
|
|
1202
|
+
const panel = this.sirioSelect.panel;
|
|
1203
|
+
if (!panel.optionFocused) {
|
|
1204
|
+
panel.scrollBarTop();
|
|
1205
|
+
panel.options.last.setFocus();
|
|
1206
|
+
return;
|
|
1207
|
+
}
|
|
1208
|
+
const nextOptionFocused = this.findPreviousVisibleOption(panel.optionFocusedIndex - 1, panel.options);
|
|
1209
|
+
if (nextOptionFocused) {
|
|
1210
|
+
panel.scrollBarUp();
|
|
1211
|
+
panel.optionFocused?.removeFocus();
|
|
1212
|
+
nextOptionFocused?.setFocus();
|
|
1213
|
+
return;
|
|
1214
|
+
}
|
|
1215
|
+
panel.optionFocused?.removeFocus();
|
|
1216
|
+
panel.scrollBarBottom();
|
|
1217
|
+
const lastVisible = this.findPreviousVisibleOption(panel.options.length - 1, panel.options);
|
|
1218
|
+
if (lastVisible) {
|
|
1219
|
+
lastVisible.setFocus();
|
|
1220
|
+
}
|
|
1221
|
+
}
|
|
1222
|
+
findPreviousVisibleOption(startIndex, options) {
|
|
1223
|
+
let i = startIndex;
|
|
1224
|
+
while (i >= 0) {
|
|
1225
|
+
const option = options.get(i);
|
|
1226
|
+
if (!this.isHidden(option)) {
|
|
1227
|
+
return option;
|
|
1228
|
+
}
|
|
1229
|
+
i--;
|
|
1230
|
+
}
|
|
1231
|
+
return null;
|
|
1232
|
+
}
|
|
1233
|
+
findNextVisibleOption(startIndex, options) {
|
|
1234
|
+
let i = startIndex;
|
|
1235
|
+
while (i < options.length) {
|
|
1236
|
+
const option = options.get(i);
|
|
1237
|
+
if (!this.isHidden(option)) {
|
|
1238
|
+
return option;
|
|
1239
|
+
}
|
|
1240
|
+
i++;
|
|
1241
|
+
}
|
|
1242
|
+
return null;
|
|
1243
|
+
}
|
|
1244
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropdownDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.SirioSelectComponent, host: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1245
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DropdownDirective, isStandalone: true, selector: "[dropdown]", ngImport: i0 });
|
|
1246
|
+
}
|
|
1247
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropdownDirective, decorators: [{
|
|
1248
|
+
type: Directive,
|
|
1249
|
+
args: [{
|
|
1250
|
+
selector: '[dropdown]',
|
|
1251
|
+
standalone: true
|
|
1252
|
+
}]
|
|
1253
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.SirioSelectComponent, decorators: [{
|
|
1254
|
+
type: Host
|
|
1255
|
+
}] }] });
|
|
1256
|
+
|
|
1257
|
+
class TabDirective {
|
|
1258
|
+
sirioTab;
|
|
1259
|
+
tabCount = 0;
|
|
1260
|
+
constructor(sirioTab) {
|
|
1261
|
+
this.sirioTab = sirioTab;
|
|
1262
|
+
}
|
|
1263
|
+
ngOnChanges(changes) {
|
|
1264
|
+
if (changes["tabCount"]) {
|
|
1265
|
+
const previous = changes["tabCount"].previousValue;
|
|
1266
|
+
if (previous === undefined)
|
|
1267
|
+
return;
|
|
1268
|
+
const current = changes["tabCount"].currentValue;
|
|
1269
|
+
setTimeout(() => {
|
|
1270
|
+
this.sirioTab.setContentItemIndex();
|
|
1271
|
+
this.sirioTab.showArrowIfNeeded();
|
|
1272
|
+
if (previous < current) {
|
|
1273
|
+
this.sirioTab.setActiveIndex(current - 1);
|
|
1274
|
+
}
|
|
1275
|
+
else {
|
|
1276
|
+
if (this.sirioTab.oldIndex == current) {
|
|
1277
|
+
// remove last
|
|
1278
|
+
this.sirioTab.setActiveIndex(current - 1);
|
|
1279
|
+
}
|
|
1280
|
+
else if (this.sirioTab.oldIndex < current) {
|
|
1281
|
+
// remove middle
|
|
1282
|
+
this.sirioTab.setActiveIndex(this.sirioTab.oldIndex);
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
});
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1288
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabDirective, deps: [{ token: i1.SirioTabComponent, host: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1289
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TabDirective, isStandalone: true, selector: "[tabCount]", inputs: { tabCount: "tabCount" }, usesOnChanges: true, ngImport: i0 });
|
|
1290
|
+
}
|
|
1291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabDirective, decorators: [{
|
|
1292
|
+
type: Directive,
|
|
1293
|
+
args: [{
|
|
1294
|
+
selector: '[tabCount]',
|
|
1295
|
+
standalone: true
|
|
1296
|
+
}]
|
|
1297
|
+
}], ctorParameters: () => [{ type: i1.SirioTabComponent, decorators: [{
|
|
1298
|
+
type: Host
|
|
1299
|
+
}] }], propDecorators: { tabCount: [{
|
|
1300
|
+
type: Input
|
|
1301
|
+
}] } });
|
|
1302
|
+
|
|
1303
|
+
class AccordionDirective {
|
|
1304
|
+
sirioAccordion;
|
|
1305
|
+
accordionCount = 0;
|
|
1306
|
+
constructor(sirioAccordion) {
|
|
1307
|
+
this.sirioAccordion = sirioAccordion;
|
|
1308
|
+
}
|
|
1309
|
+
ngOnChanges(changes) {
|
|
1310
|
+
if (changes["accordionCount"]) {
|
|
1311
|
+
const previous = changes["accordionCount"].previousValue;
|
|
1312
|
+
if (previous === undefined)
|
|
1313
|
+
return;
|
|
1314
|
+
const current = changes["accordionCount"].currentValue;
|
|
1315
|
+
const oldIndex = this.sirioAccordion.panels.toArray().findIndex(panel => panel.panelIsOpen);
|
|
1316
|
+
setTimeout(() => {
|
|
1317
|
+
const event = new Event("");
|
|
1318
|
+
this.sirioAccordion.closePanels(event);
|
|
1319
|
+
const panels = this.sirioAccordion.panels.toArray();
|
|
1320
|
+
const showPanel = (index) => panels[index].onPanelHeaderClicked(event);
|
|
1321
|
+
if (previous < current) {
|
|
1322
|
+
showPanel(current - 1);
|
|
1323
|
+
}
|
|
1324
|
+
else {
|
|
1325
|
+
if (oldIndex == current) {
|
|
1326
|
+
// remove last
|
|
1327
|
+
showPanel(current - 1);
|
|
1328
|
+
}
|
|
1329
|
+
else if (oldIndex < current) {
|
|
1330
|
+
// remove middle
|
|
1331
|
+
showPanel(oldIndex);
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
}, 100);
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AccordionDirective, deps: [{ token: i1.SirioAccordionComponent, host: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1338
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AccordionDirective, isStandalone: true, selector: "[accordionCount]", inputs: { accordionCount: "accordionCount" }, usesOnChanges: true, ngImport: i0 });
|
|
1339
|
+
}
|
|
1340
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AccordionDirective, decorators: [{
|
|
1341
|
+
type: Directive,
|
|
1342
|
+
args: [{
|
|
1343
|
+
selector: '[accordionCount]',
|
|
1344
|
+
standalone: true
|
|
1345
|
+
}]
|
|
1346
|
+
}], ctorParameters: () => [{ type: i1.SirioAccordionComponent, decorators: [{
|
|
1347
|
+
type: Host
|
|
1348
|
+
}] }], propDecorators: { accordionCount: [{
|
|
1349
|
+
type: Input
|
|
1350
|
+
}] } });
|
|
1351
|
+
|
|
1352
|
+
class GridDirective {
|
|
1353
|
+
grid;
|
|
1354
|
+
rowSource = null;
|
|
1355
|
+
constructor(grid) {
|
|
1356
|
+
this.grid = grid;
|
|
1357
|
+
grid.gridReady.subscribe(() => {
|
|
1358
|
+
this.isGridReady = true;
|
|
1359
|
+
});
|
|
1360
|
+
}
|
|
1361
|
+
ngOnChanges(changes) {
|
|
1362
|
+
if (changes["rowSource"]) {
|
|
1363
|
+
this.onRowChanges();
|
|
1364
|
+
}
|
|
1365
|
+
}
|
|
1366
|
+
isGridReady = false;
|
|
1367
|
+
onRowChanges() {
|
|
1368
|
+
if (this.isArray(this.rowSource)) {
|
|
1369
|
+
this.setRowData(this.rowSource);
|
|
1370
|
+
}
|
|
1371
|
+
else if (this.isDataSource(this.rowSource)) {
|
|
1372
|
+
this.setDataSource(this.rowSource);
|
|
1373
|
+
}
|
|
1374
|
+
else {
|
|
1375
|
+
this.setRowData([]);
|
|
1376
|
+
}
|
|
1377
|
+
}
|
|
1378
|
+
setRowData(rowSource) {
|
|
1379
|
+
this.grid.rowModelType = 'clientSide';
|
|
1380
|
+
if (this.isGridReady) {
|
|
1381
|
+
this.grid.api.setGridOption('rowData', rowSource);
|
|
1382
|
+
}
|
|
1383
|
+
else {
|
|
1384
|
+
this.grid.rowData = rowSource;
|
|
1385
|
+
}
|
|
1386
|
+
}
|
|
1387
|
+
setDataSource(rowSource) {
|
|
1388
|
+
this.grid.rowModelType = 'infinite';
|
|
1389
|
+
if (this.isGridReady) {
|
|
1390
|
+
this.grid.api.setGridOption('datasource', rowSource);
|
|
1391
|
+
}
|
|
1392
|
+
else {
|
|
1393
|
+
this.grid.datasource = rowSource;
|
|
1394
|
+
}
|
|
1395
|
+
}
|
|
1396
|
+
isArray(rowSource) {
|
|
1397
|
+
return Array.isArray(rowSource);
|
|
1398
|
+
}
|
|
1399
|
+
isDataSource(obj) {
|
|
1400
|
+
return typeof obj.getRows === "function";
|
|
1401
|
+
}
|
|
1402
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GridDirective, deps: [{ token: i1$2.AgGridAngular, host: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1403
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: GridDirective, isStandalone: true, selector: "[rowSource]", inputs: { rowSource: "rowSource" }, usesOnChanges: true, ngImport: i0 });
|
|
1404
|
+
}
|
|
1405
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GridDirective, decorators: [{
|
|
1406
|
+
type: Directive,
|
|
1407
|
+
args: [{
|
|
1408
|
+
selector: '[rowSource]',
|
|
1409
|
+
standalone: true
|
|
1410
|
+
}]
|
|
1411
|
+
}], ctorParameters: () => [{ type: i1$2.AgGridAngular, decorators: [{
|
|
1412
|
+
type: Host
|
|
1413
|
+
}] }], propDecorators: { rowSource: [{
|
|
1414
|
+
type: Input
|
|
1415
|
+
}] } });
|
|
1416
|
+
|
|
1417
|
+
class Control {
|
|
1418
|
+
name;
|
|
1419
|
+
metadata;
|
|
1420
|
+
componentRef;
|
|
1421
|
+
elementRef;
|
|
1422
|
+
constructor(name, metadata, componentRef, elementRef) {
|
|
1423
|
+
this.name = name;
|
|
1424
|
+
this.metadata = metadata;
|
|
1425
|
+
this.componentRef = componentRef;
|
|
1426
|
+
this.elementRef = elementRef;
|
|
1427
|
+
}
|
|
1428
|
+
getMetadata() {
|
|
1429
|
+
return this.metadata;
|
|
1430
|
+
}
|
|
1431
|
+
getComponentRef() {
|
|
1432
|
+
return this.componentRef;
|
|
1433
|
+
}
|
|
1434
|
+
getElementRef() {
|
|
1435
|
+
return this.elementRef;
|
|
1436
|
+
}
|
|
1437
|
+
}
|
|
1438
|
+
class ContainerControl extends Control {
|
|
1439
|
+
register;
|
|
1440
|
+
constructor(name, metadata, componentRef, elementRef, register) {
|
|
1441
|
+
super(name, metadata, componentRef, elementRef);
|
|
1442
|
+
this.register = register;
|
|
1443
|
+
}
|
|
1444
|
+
getControls() {
|
|
1445
|
+
return this.register?.getControls() ?? [];
|
|
1446
|
+
}
|
|
1447
|
+
getControl(name) {
|
|
1448
|
+
return this.register?.getControl(name);
|
|
1449
|
+
}
|
|
1450
|
+
findControl(name, type) {
|
|
1451
|
+
const control = this.getControl(name);
|
|
1452
|
+
if (control) {
|
|
1453
|
+
if (!type) {
|
|
1454
|
+
return control;
|
|
1455
|
+
}
|
|
1456
|
+
else if (control instanceof type) {
|
|
1457
|
+
return control;
|
|
1458
|
+
}
|
|
1459
|
+
else {
|
|
1460
|
+
return null;
|
|
1461
|
+
}
|
|
1462
|
+
}
|
|
1463
|
+
for (const child of this.getControls()) {
|
|
1464
|
+
if (child instanceof ContainerControl) {
|
|
1465
|
+
const found = child.findControl(name, type);
|
|
1466
|
+
if (found) {
|
|
1467
|
+
return found;
|
|
1468
|
+
}
|
|
1469
|
+
}
|
|
1470
|
+
}
|
|
1471
|
+
return null;
|
|
1472
|
+
}
|
|
1473
|
+
}
|
|
1474
|
+
class ItemControl extends ContainerControl {
|
|
1475
|
+
index;
|
|
1476
|
+
constructor(name, index, metadata, componentRef, elementRef, register) {
|
|
1477
|
+
super(name, metadata, componentRef, elementRef, register);
|
|
1478
|
+
this.index = index;
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
class FormControl extends ContainerControl {
|
|
1483
|
+
}
|
|
1484
|
+
|
|
1485
|
+
class TextFieldControl extends Control {
|
|
1486
|
+
setRandomColor() {
|
|
1487
|
+
this.getInput().sirioInput.nativeElement.style.backgroundColor = this.getRandomColor();
|
|
1488
|
+
}
|
|
1489
|
+
getInput() {
|
|
1490
|
+
return this.getComponentRef();
|
|
1491
|
+
}
|
|
1492
|
+
getRandomColor() {
|
|
1493
|
+
const letters = '0123456789ABCDEF';
|
|
1494
|
+
let color = '#';
|
|
1495
|
+
for (let i = 0; i < 6; i++) {
|
|
1496
|
+
color += letters[Math.floor(Math.random() * 16)];
|
|
1497
|
+
}
|
|
1498
|
+
return color;
|
|
1499
|
+
}
|
|
1500
|
+
}
|
|
1501
|
+
|
|
1502
|
+
class SelectControl extends Control {
|
|
1503
|
+
getSelect() {
|
|
1504
|
+
return this.getComponentRef();
|
|
1505
|
+
}
|
|
1506
|
+
}
|
|
1507
|
+
|
|
1508
|
+
class TagListControl extends Control {
|
|
1509
|
+
getSelect() {
|
|
1510
|
+
return this.getComponentRef();
|
|
1511
|
+
}
|
|
1512
|
+
}
|
|
1513
|
+
|
|
1514
|
+
class NumberControl extends Control {
|
|
1515
|
+
getInput() {
|
|
1516
|
+
return this.getComponentRef();
|
|
1517
|
+
}
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1520
|
+
class DateControl extends Control {
|
|
1521
|
+
getDatePicker() {
|
|
1522
|
+
return this.getComponentRef();
|
|
1523
|
+
}
|
|
1524
|
+
}
|
|
1525
|
+
|
|
1526
|
+
class TimeControl extends Control {
|
|
1527
|
+
getTimePicker() {
|
|
1528
|
+
return this.getComponentRef();
|
|
1529
|
+
}
|
|
1530
|
+
}
|
|
1531
|
+
|
|
1532
|
+
class ToggleControl extends Control {
|
|
1533
|
+
getToggle() {
|
|
1534
|
+
return this.getComponentRef();
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
|
|
1538
|
+
class CheckBoxControl extends Control {
|
|
1539
|
+
getCheckBox() {
|
|
1540
|
+
return this.getComponentRef();
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
|
|
1544
|
+
class ChipRadioControl extends Control {
|
|
1545
|
+
getChipRadio() {
|
|
1546
|
+
return this.getComponentRef();
|
|
1547
|
+
}
|
|
1548
|
+
}
|
|
1549
|
+
|
|
1550
|
+
class RadioControl extends Control {
|
|
1551
|
+
getRadio() {
|
|
1552
|
+
return this.getComponentRef();
|
|
1553
|
+
}
|
|
1554
|
+
}
|
|
1555
|
+
|
|
1556
|
+
class ChipCheckListControl extends Control {
|
|
1557
|
+
getChipCheckBoxGroup() {
|
|
1558
|
+
return this.getComponentRef();
|
|
1559
|
+
}
|
|
1560
|
+
}
|
|
1561
|
+
|
|
1562
|
+
class CheckListControl extends Control {
|
|
1563
|
+
getCheckboxGroup() {
|
|
1564
|
+
return this.getComponentRef();
|
|
1565
|
+
}
|
|
1566
|
+
}
|
|
1567
|
+
|
|
1568
|
+
class TextAreaControl extends Control {
|
|
1569
|
+
getInput() {
|
|
1570
|
+
return this.getComponentRef();
|
|
1571
|
+
}
|
|
1572
|
+
}
|
|
1573
|
+
|
|
1574
|
+
class FilePickerControl extends Control {
|
|
1575
|
+
getFileUpload() {
|
|
1576
|
+
return this.getComponentRef();
|
|
1577
|
+
}
|
|
1578
|
+
}
|
|
1579
|
+
|
|
1580
|
+
class TextControl extends Control {
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1583
|
+
class HtmlControl extends Control {
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
class ImageControl extends Control {
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1589
|
+
class TabControl extends ContainerControl {
|
|
1590
|
+
getTab() {
|
|
1591
|
+
return this.getComponentRef();
|
|
1592
|
+
}
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1595
|
+
class AccordionControl extends ContainerControl {
|
|
1596
|
+
getAccordion() {
|
|
1597
|
+
return this.getComponentRef();
|
|
1598
|
+
}
|
|
1599
|
+
}
|
|
1600
|
+
|
|
1601
|
+
class DynamicListControl extends ContainerControl {
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
class GroupControl extends ContainerControl {
|
|
1605
|
+
}
|
|
1606
|
+
|
|
1607
|
+
class TableControl extends Control {
|
|
1608
|
+
setFilter(filter) {
|
|
1609
|
+
this.getGrid().api.setFilterModel(filter);
|
|
1610
|
+
}
|
|
1611
|
+
clearFilter() {
|
|
1612
|
+
this.getGrid().api.setFilterModel(null);
|
|
1613
|
+
}
|
|
1614
|
+
getGrid() {
|
|
1615
|
+
return this.getComponentRef();
|
|
1616
|
+
}
|
|
1617
|
+
}
|
|
1618
|
+
|
|
1619
|
+
class ButtonControl extends Control {
|
|
1620
|
+
getButton() {
|
|
1621
|
+
return this.getComponentRef();
|
|
1622
|
+
}
|
|
1623
|
+
}
|
|
1624
|
+
|
|
1625
|
+
class SeparatorControl extends Control {
|
|
1626
|
+
}
|
|
1627
|
+
|
|
1628
|
+
class SpacerControl extends Control {
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1631
|
+
class IFrameControl extends Control {
|
|
1632
|
+
}
|
|
1633
|
+
|
|
1634
|
+
function createControl(name, metadata, componentRef, elementRef, register) {
|
|
1635
|
+
switch (metadata.type) {
|
|
1636
|
+
case "default":
|
|
1637
|
+
return new FormControl(name, metadata, componentRef, elementRef, register);
|
|
1638
|
+
case "textfield":
|
|
1639
|
+
return new TextFieldControl(name, metadata, componentRef, elementRef);
|
|
1640
|
+
case "select":
|
|
1641
|
+
return new SelectControl(name, metadata, componentRef, elementRef);
|
|
1642
|
+
case "taglist":
|
|
1643
|
+
return new TagListControl(name, metadata, componentRef, elementRef);
|
|
1644
|
+
case "number":
|
|
1645
|
+
return new NumberControl(name, metadata, componentRef, elementRef);
|
|
1646
|
+
case "datetime":
|
|
1647
|
+
switch (metadata.subtype) {
|
|
1648
|
+
case "date":
|
|
1649
|
+
return new DateControl(name, metadata, componentRef, elementRef);
|
|
1650
|
+
case "time":
|
|
1651
|
+
return new TimeControl(name, metadata, componentRef, elementRef);
|
|
1652
|
+
default:
|
|
1653
|
+
return new Control(name, metadata, componentRef, elementRef);
|
|
1654
|
+
}
|
|
1655
|
+
case "checkbox":
|
|
1656
|
+
switch (metadata.subtype) {
|
|
1657
|
+
case "toggle":
|
|
1658
|
+
return new ToggleControl(name, metadata, componentRef, elementRef);
|
|
1659
|
+
default:
|
|
1660
|
+
return new CheckBoxControl(name, metadata, componentRef, elementRef);
|
|
1661
|
+
}
|
|
1662
|
+
case "radio":
|
|
1663
|
+
switch (metadata.subtype) {
|
|
1664
|
+
case "chip":
|
|
1665
|
+
return new ChipRadioControl(name, metadata, componentRef, elementRef);
|
|
1666
|
+
default:
|
|
1667
|
+
return new RadioControl(name, metadata, componentRef, elementRef);
|
|
1668
|
+
}
|
|
1669
|
+
case "checklist":
|
|
1670
|
+
switch (metadata.subtype) {
|
|
1671
|
+
case "chip":
|
|
1672
|
+
return new ChipCheckListControl(name, metadata, componentRef, elementRef);
|
|
1673
|
+
default:
|
|
1674
|
+
return new CheckListControl(name, metadata, componentRef, elementRef);
|
|
1675
|
+
}
|
|
1676
|
+
case "textarea":
|
|
1677
|
+
return new TextAreaControl(name, metadata, componentRef, elementRef);
|
|
1678
|
+
case "filepicker":
|
|
1679
|
+
return new FilePickerControl(name, metadata, componentRef, elementRef);
|
|
1680
|
+
case "text":
|
|
1681
|
+
return new TextControl(name, metadata, componentRef, elementRef);
|
|
1682
|
+
case "html":
|
|
1683
|
+
return new HtmlControl(name, metadata, componentRef, elementRef);
|
|
1684
|
+
case "image":
|
|
1685
|
+
return new ImageControl(name, metadata, componentRef, elementRef);
|
|
1686
|
+
case "dynamiclist":
|
|
1687
|
+
switch (metadata.subtype) {
|
|
1688
|
+
case "tab":
|
|
1689
|
+
return new TabControl(name, metadata, componentRef, elementRef, register);
|
|
1690
|
+
case "accordion":
|
|
1691
|
+
return new AccordionControl(name, metadata, componentRef, elementRef, register);
|
|
1692
|
+
default:
|
|
1693
|
+
return new DynamicListControl(name, metadata, componentRef, elementRef, register);
|
|
1694
|
+
}
|
|
1695
|
+
case "group":
|
|
1696
|
+
return new GroupControl(name, metadata, componentRef, elementRef, register);
|
|
1697
|
+
case "table":
|
|
1698
|
+
return new TableControl(name, metadata, componentRef, elementRef);
|
|
1699
|
+
case "button":
|
|
1700
|
+
return new ButtonControl(name, metadata, componentRef, elementRef);
|
|
1701
|
+
case "separator":
|
|
1702
|
+
return new SeparatorControl(name, metadata, componentRef, elementRef);
|
|
1703
|
+
case "spacer":
|
|
1704
|
+
return new SpacerControl(name, metadata, componentRef, elementRef);
|
|
1705
|
+
case "iframe":
|
|
1706
|
+
return new IFrameControl(name, metadata, componentRef, elementRef);
|
|
1707
|
+
default:
|
|
1708
|
+
return new Control(name, metadata, componentRef, elementRef);
|
|
1709
|
+
}
|
|
1710
|
+
}
|
|
1711
|
+
|
|
1712
|
+
class RegisterDirective {
|
|
1713
|
+
el;
|
|
1714
|
+
registerService;
|
|
1715
|
+
proxyService;
|
|
1716
|
+
register = null;
|
|
1717
|
+
componentRef;
|
|
1718
|
+
dynamicField;
|
|
1719
|
+
itemFields;
|
|
1720
|
+
constructor(el, registerService, proxyService) {
|
|
1721
|
+
this.el = el;
|
|
1722
|
+
this.registerService = registerService;
|
|
1723
|
+
this.proxyService = proxyService;
|
|
1724
|
+
}
|
|
1725
|
+
ngAfterContentInit() {
|
|
1726
|
+
this.registerControl();
|
|
1727
|
+
}
|
|
1728
|
+
ngOnDestroy() {
|
|
1729
|
+
this.unregisterControl();
|
|
1730
|
+
this.destroy$.next();
|
|
1731
|
+
this.destroy$.complete();
|
|
1732
|
+
}
|
|
1733
|
+
destroy$ = new Subject();
|
|
1734
|
+
registerControl() {
|
|
1735
|
+
const name = this.getName();
|
|
1736
|
+
const register = (this.register.type === 'dynamiclist')
|
|
1737
|
+
? this.createDynamicRegister(name, this.register, this.componentRef, this.el, this.itemFields)
|
|
1738
|
+
: this.dynamicField?.getRegister();
|
|
1739
|
+
const control = createControl(name, this.register, this.componentRef, this.el, register);
|
|
1740
|
+
this.registerService.register(name, control);
|
|
1741
|
+
}
|
|
1742
|
+
unregisterControl() {
|
|
1743
|
+
this.registerService.unregister(this.getName());
|
|
1744
|
+
}
|
|
1745
|
+
getName() {
|
|
1746
|
+
return this.register.name ?? this.register.id;
|
|
1747
|
+
}
|
|
1748
|
+
createDynamicRegister(name, metadata, componentRef, el, itemFields) {
|
|
1749
|
+
const newRegister = new RegisterService(this.proxyService, null);
|
|
1750
|
+
const registerAll = (itemFields) => {
|
|
1751
|
+
newRegister.unregisterAll();
|
|
1752
|
+
itemFields.forEach((itemField, index) => {
|
|
1753
|
+
const register = itemField.getRegister();
|
|
1754
|
+
const newName = `${name}-${index}`;
|
|
1755
|
+
const control = new ItemControl(newName, index, metadata, componentRef, el, register);
|
|
1756
|
+
newRegister.register(newName, control);
|
|
1757
|
+
});
|
|
1758
|
+
};
|
|
1759
|
+
registerAll(itemFields);
|
|
1760
|
+
itemFields.changes
|
|
1761
|
+
.pipe(takeUntil$1(this.destroy$))
|
|
1762
|
+
.subscribe((itemFields) => {
|
|
1763
|
+
registerAll(itemFields);
|
|
1764
|
+
});
|
|
1765
|
+
return newRegister;
|
|
1766
|
+
}
|
|
1767
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RegisterDirective, deps: [{ token: i0.ElementRef }, { token: RegisterService }, { token: ProxyService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1768
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: RegisterDirective, isStandalone: true, selector: "[register]", inputs: { register: "register", componentRef: "componentRef" }, queries: [{ propertyName: "dynamicField", first: true, predicate: DynamicFieldsComponent, descendants: true }, { propertyName: "itemFields", predicate: DynamicFieldsComponent, descendants: true }], ngImport: i0 });
|
|
1769
|
+
}
|
|
1770
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RegisterDirective, decorators: [{
|
|
1771
|
+
type: Directive,
|
|
1772
|
+
args: [{
|
|
1773
|
+
selector: '[register]',
|
|
1774
|
+
standalone: true
|
|
1775
|
+
}]
|
|
1776
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: RegisterService }, { type: ProxyService }], propDecorators: { register: [{
|
|
1777
|
+
type: Input
|
|
1778
|
+
}], componentRef: [{
|
|
1779
|
+
type: Input
|
|
1780
|
+
}], dynamicField: [{
|
|
1781
|
+
type: ContentChild,
|
|
1782
|
+
args: [DynamicFieldsComponent]
|
|
1783
|
+
}], itemFields: [{
|
|
1784
|
+
type: ContentChildren,
|
|
1785
|
+
args: [DynamicFieldsComponent, { descendants: true }]
|
|
1786
|
+
}] } });
|
|
1787
|
+
|
|
1788
|
+
class UpdateBlurDirective {
|
|
1789
|
+
sirioInput;
|
|
1790
|
+
constructor(sirioInput) {
|
|
1791
|
+
this.sirioInput = sirioInput;
|
|
1792
|
+
}
|
|
1793
|
+
ngAfterViewInit() {
|
|
1794
|
+
if (this.sirioInput?.control?.updateOn === 'blur') {
|
|
1795
|
+
const writeValue = this.sirioInput.writeValue;
|
|
1796
|
+
this.sirioInput.writeValue = function (value, event = false) {
|
|
1797
|
+
writeValue.bind(this)(value, false);
|
|
1798
|
+
};
|
|
1799
|
+
this.sirioInput.onBlur = function (event) {
|
|
1800
|
+
writeValue.bind(this)(this.value, true);
|
|
1801
|
+
};
|
|
1802
|
+
}
|
|
1803
|
+
}
|
|
1804
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UpdateBlurDirective, deps: [{ token: i1.SirioInputComponent, host: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1805
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: UpdateBlurDirective, isStandalone: true, selector: "[updateBlur]", ngImport: i0 });
|
|
1806
|
+
}
|
|
1807
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UpdateBlurDirective, decorators: [{
|
|
1808
|
+
type: Directive,
|
|
1809
|
+
args: [{
|
|
1810
|
+
selector: '[updateBlur]',
|
|
1811
|
+
standalone: true
|
|
1812
|
+
}]
|
|
1813
|
+
}], ctorParameters: () => [{ type: i1.SirioInputComponent, decorators: [{
|
|
1814
|
+
type: Host
|
|
1815
|
+
}] }] });
|
|
1816
|
+
|
|
1817
|
+
class ObjectURLRendererComponent {
|
|
1818
|
+
params;
|
|
1819
|
+
agInit(params) {
|
|
1820
|
+
this.params = params;
|
|
1821
|
+
}
|
|
1822
|
+
onClick(event) {
|
|
1823
|
+
const fileURL = URL.createObjectURL(this.params.data);
|
|
1824
|
+
window.open(fileURL, '_blank');
|
|
1825
|
+
setTimeout(() => {
|
|
1826
|
+
URL.revokeObjectURL(fileURL);
|
|
1827
|
+
}, 1000);
|
|
1828
|
+
}
|
|
1829
|
+
refresh() {
|
|
1830
|
+
return false;
|
|
1831
|
+
}
|
|
1832
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ObjectURLRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1833
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ObjectURLRendererComponent, selector: "ng-component", ngImport: i0, template: `<a aria-label="View" title="View" href="javascript:void(0)" (click)="onClick($event)"><span class="fas fa-paperclip"></span></a>`, isInline: true });
|
|
1834
|
+
}
|
|
1835
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ObjectURLRendererComponent, decorators: [{
|
|
1836
|
+
type: Component,
|
|
1837
|
+
args: [{
|
|
1838
|
+
template: `<a aria-label="View" title="View" href="javascript:void(0)" (click)="onClick($event)"><span class="fas fa-paperclip"></span></a>`,
|
|
1839
|
+
}]
|
|
1840
|
+
}] });
|
|
1841
|
+
class DeleteRowCellRenderer {
|
|
1842
|
+
params;
|
|
1843
|
+
agInit(params) {
|
|
1844
|
+
this.params = params;
|
|
1845
|
+
}
|
|
1846
|
+
onClick(event) {
|
|
1847
|
+
if ('remove' in this.params.data && typeof this.params.data.remove === 'function') {
|
|
1848
|
+
this.params.data.remove();
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
refresh() {
|
|
1852
|
+
return false;
|
|
1853
|
+
}
|
|
1854
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DeleteRowCellRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1855
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DeleteRowCellRenderer, selector: "ng-component", ngImport: i0, template: `<button aria-label="Remove" title="Remove" class="sirio-btn sirio-btn-icon" (click)="onClick($event)"><span class="fas fa-trash"></span></button>`, isInline: true });
|
|
1856
|
+
}
|
|
1857
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DeleteRowCellRenderer, decorators: [{
|
|
1858
|
+
type: Component,
|
|
1859
|
+
args: [{
|
|
1860
|
+
template: `<button aria-label="Remove" title="Remove" class="sirio-btn sirio-btn-icon" (click)="onClick($event)"><span class="fas fa-trash"></span></button>`,
|
|
1861
|
+
}]
|
|
1862
|
+
}] });
|
|
1863
|
+
|
|
1864
|
+
const Texts = {
|
|
1865
|
+
TypeToSearch: "Digita per cercare...",
|
|
1866
|
+
Upload: "Upload",
|
|
1867
|
+
ScrollLeft: "Scorri a sinistra",
|
|
1868
|
+
ScrollRight: "Scorri a destra",
|
|
1869
|
+
AddItem: "Aggiungi",
|
|
1870
|
+
RemoveItem: "Rimuovi",
|
|
1871
|
+
PreviousSection: "Sezione precedente",
|
|
1872
|
+
NextSection: "Sezione successiva",
|
|
1873
|
+
Show: "Visualizza",
|
|
1874
|
+
Close: "Chiudi"
|
|
1875
|
+
};
|
|
1876
|
+
|
|
1877
|
+
class SanitizeService {
|
|
1878
|
+
sanitizer;
|
|
1879
|
+
constructor(sanitizer) {
|
|
1880
|
+
this.sanitizer = sanitizer;
|
|
1881
|
+
this.sanitizeOption = {
|
|
1882
|
+
allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img']),
|
|
1883
|
+
allowedAttributes: {
|
|
1884
|
+
...sanitizeHtml.defaults.allowedAttributes,
|
|
1885
|
+
'*': ['style']
|
|
1886
|
+
}
|
|
1887
|
+
};
|
|
1888
|
+
}
|
|
1889
|
+
sanitizeHtml(html) {
|
|
1890
|
+
return sanitizeHtml(html, this.sanitizeOption);
|
|
1891
|
+
}
|
|
1892
|
+
;
|
|
1893
|
+
sanitizeSafeHtml(html) {
|
|
1894
|
+
return this.sanitizer.bypassSecurityTrustHtml(this.sanitizeHtml(html));
|
|
1895
|
+
}
|
|
1896
|
+
;
|
|
1897
|
+
sanitizeSafeUrl(url) {
|
|
1898
|
+
return this.sanitizer.bypassSecurityTrustResourceUrl(url);
|
|
1899
|
+
}
|
|
1900
|
+
sanitizeOption;
|
|
1901
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SanitizeService, deps: [{ token: i1$3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1902
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SanitizeService, providedIn: 'root' });
|
|
1903
|
+
}
|
|
1904
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SanitizeService, decorators: [{
|
|
1905
|
+
type: Injectable,
|
|
1906
|
+
args: [{
|
|
1907
|
+
providedIn: 'root'
|
|
1908
|
+
}]
|
|
1909
|
+
}], ctorParameters: () => [{ type: i1$3.DomSanitizer }] });
|
|
1910
|
+
|
|
1911
|
+
marked.use({
|
|
1912
|
+
async: false,
|
|
1913
|
+
gfm: true,
|
|
1914
|
+
breaks: true
|
|
1915
|
+
});
|
|
1916
|
+
class MarkdownService {
|
|
1917
|
+
constructor() { }
|
|
1918
|
+
toHtml(text) {
|
|
1919
|
+
return marked.parse(text ?? "");
|
|
1920
|
+
}
|
|
1921
|
+
;
|
|
1922
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1923
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownService, providedIn: 'root' });
|
|
1924
|
+
}
|
|
1925
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownService, decorators: [{
|
|
1926
|
+
type: Injectable,
|
|
1927
|
+
args: [{
|
|
1928
|
+
providedIn: 'root'
|
|
1929
|
+
}]
|
|
1930
|
+
}], ctorParameters: () => [] });
|
|
1931
|
+
|
|
1932
|
+
class MimeService {
|
|
1933
|
+
constructor() { }
|
|
1934
|
+
getMimeTypes(extensions) {
|
|
1935
|
+
return (extensions ?? "")
|
|
1936
|
+
.split(',')
|
|
1937
|
+
.map(ext => this.getMimeType(ext.trim()))
|
|
1938
|
+
.filter(mime => mime !== null)
|
|
1939
|
+
.join(', ');
|
|
1940
|
+
}
|
|
1941
|
+
;
|
|
1942
|
+
getMimeType(extension) {
|
|
1943
|
+
const ext = extension.startsWith('.') ? extension.slice(1) : extension;
|
|
1944
|
+
for (const [mimeType, info] of Object.entries(mimeDb)) {
|
|
1945
|
+
if (info.extensions && info.extensions.includes(ext)) {
|
|
1946
|
+
return mimeType;
|
|
1947
|
+
}
|
|
1948
|
+
}
|
|
1949
|
+
return null;
|
|
1950
|
+
}
|
|
1951
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MimeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1952
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MimeService, providedIn: 'root' });
|
|
1953
|
+
}
|
|
1954
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MimeService, decorators: [{
|
|
1955
|
+
type: Injectable,
|
|
1956
|
+
args: [{
|
|
1957
|
+
providedIn: 'root'
|
|
1958
|
+
}]
|
|
1959
|
+
}], ctorParameters: () => [] });
|
|
1960
|
+
|
|
1961
|
+
//import { FeelService } from '../services/feel.service';
|
|
1962
|
+
class FormatterService {
|
|
1963
|
+
//constructor(private feelService: FeelService) { }
|
|
1964
|
+
constructor() { }
|
|
1965
|
+
formatCurrency(value, symbol = null) {
|
|
1966
|
+
if (isNaN(value) || value === null || value === undefined) {
|
|
1967
|
+
return value;
|
|
1968
|
+
}
|
|
1969
|
+
const numberValue = parseFloat(value);
|
|
1970
|
+
if (isNaN(numberValue)) {
|
|
1971
|
+
return value;
|
|
1972
|
+
}
|
|
1973
|
+
const result = numberValue.toFixed(2).replace(".", ",").replace(/\B(?=(\d{3})+(?!\d))/g, ".");
|
|
1974
|
+
if (symbol) {
|
|
1975
|
+
return symbol + ' ' + result;
|
|
1976
|
+
}
|
|
1977
|
+
else {
|
|
1978
|
+
return result;
|
|
1979
|
+
}
|
|
1980
|
+
}
|
|
1981
|
+
formatDate(value) {
|
|
1982
|
+
if (typeof value !== 'string' || !/^\d{4}-\d{2}-\d{2}(T|$)/.test(value)) {
|
|
1983
|
+
return value;
|
|
1984
|
+
}
|
|
1985
|
+
const date = new Date(value);
|
|
1986
|
+
if (isNaN(date.getTime())) {
|
|
1987
|
+
return value;
|
|
1988
|
+
}
|
|
1989
|
+
const day = date.getDate().toString().padStart(2, '0');
|
|
1990
|
+
const month = (date.getMonth() + 1).toString().padStart(2, '0');
|
|
1991
|
+
const year = date.getFullYear();
|
|
1992
|
+
return `${day}/${month}/${year}`;
|
|
1993
|
+
}
|
|
1994
|
+
formatInteger(value) {
|
|
1995
|
+
if (isNaN(value) || value === null || value === undefined) {
|
|
1996
|
+
return value;
|
|
1997
|
+
}
|
|
1998
|
+
const numberValue = parseInt(value, 10);
|
|
1999
|
+
if (isNaN(numberValue)) {
|
|
2000
|
+
return value;
|
|
2001
|
+
}
|
|
2002
|
+
return numberValue.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
|
|
2003
|
+
}
|
|
2004
|
+
formatExpression(value, expression) {
|
|
2005
|
+
return value;
|
|
2006
|
+
//const result = this.feelService.evalExpression(expression, { value: value }) as string;
|
|
2007
|
+
//return result;
|
|
2008
|
+
}
|
|
2009
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormatterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2010
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormatterService, providedIn: 'root' });
|
|
2011
|
+
}
|
|
2012
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormatterService, decorators: [{
|
|
2013
|
+
type: Injectable,
|
|
2014
|
+
args: [{
|
|
2015
|
+
providedIn: 'root'
|
|
2016
|
+
}]
|
|
2017
|
+
}], ctorParameters: () => [] });
|
|
2018
|
+
|
|
2019
|
+
class DynamicFieldsComponent {
|
|
2020
|
+
sanitizer;
|
|
2021
|
+
markdown;
|
|
2022
|
+
mime;
|
|
2023
|
+
programmability;
|
|
2024
|
+
events;
|
|
2025
|
+
formatter;
|
|
2026
|
+
weak;
|
|
2027
|
+
register;
|
|
2028
|
+
el;
|
|
2029
|
+
rows;
|
|
2030
|
+
formGroup;
|
|
2031
|
+
Texts = Texts;
|
|
2032
|
+
constructor(sanitizer, markdown, mime, programmability, events, formatter, weak, register, el) {
|
|
2033
|
+
this.sanitizer = sanitizer;
|
|
2034
|
+
this.markdown = markdown;
|
|
2035
|
+
this.mime = mime;
|
|
2036
|
+
this.programmability = programmability;
|
|
2037
|
+
this.events = events;
|
|
2038
|
+
this.formatter = formatter;
|
|
2039
|
+
this.weak = weak;
|
|
2040
|
+
this.register = register;
|
|
2041
|
+
this.el = el;
|
|
2042
|
+
}
|
|
2043
|
+
ngOnInit() {
|
|
2044
|
+
this.configureDatepicker();
|
|
2045
|
+
}
|
|
2046
|
+
ngAfterViewInit() {
|
|
2047
|
+
setTimeout(() => {
|
|
2048
|
+
this.focusFirst();
|
|
2049
|
+
});
|
|
2050
|
+
}
|
|
2051
|
+
getRegister() {
|
|
2052
|
+
return this.register;
|
|
2053
|
+
}
|
|
2054
|
+
getClass(component) {
|
|
2055
|
+
if (component.layout?.columns) {
|
|
2056
|
+
return "col-md-" + component.layout?.columns;
|
|
2057
|
+
}
|
|
2058
|
+
else {
|
|
2059
|
+
return "col";
|
|
2060
|
+
}
|
|
2061
|
+
}
|
|
2062
|
+
getTextFeedback(component) {
|
|
2063
|
+
const control = this.formGroup.get(component.key);
|
|
2064
|
+
return control.valid || !control.errors
|
|
2065
|
+
? ''
|
|
2066
|
+
: control.errors['message'];
|
|
2067
|
+
}
|
|
2068
|
+
isWarning(component) {
|
|
2069
|
+
const control = this.formGroup.get(component.key);
|
|
2070
|
+
return (control.errors && control.errors['warning']) || false;
|
|
2071
|
+
}
|
|
2072
|
+
evaluateString(value) {
|
|
2073
|
+
return this.programmability.evaluateString(this.formGroup, value);
|
|
2074
|
+
}
|
|
2075
|
+
evaluateBoolean(value) {
|
|
2076
|
+
return this.programmability.evaluateBoolean(this.formGroup, value);
|
|
2077
|
+
}
|
|
2078
|
+
evaluateNumber(value) {
|
|
2079
|
+
return this.programmability.evaluateNumber(this.formGroup, value);
|
|
2080
|
+
}
|
|
2081
|
+
evaluateUrl(value) {
|
|
2082
|
+
const url = this.programmability.evaluateString(this.formGroup, value);
|
|
2083
|
+
const watchKey = `:safeUrl(${url})`;
|
|
2084
|
+
return this.weak.call(this.formGroup, watchKey, () => {
|
|
2085
|
+
return this.sanitizer.sanitizeSafeUrl(url);
|
|
2086
|
+
});
|
|
2087
|
+
}
|
|
2088
|
+
evaluateTemplate(value) {
|
|
2089
|
+
return this.programmability.evaluateTemplate(this.formGroup, value);
|
|
2090
|
+
}
|
|
2091
|
+
evaluate(text, cacheable = true) {
|
|
2092
|
+
return this.programmability.evaluate(this.formGroup, text, cacheable);
|
|
2093
|
+
}
|
|
2094
|
+
evaluateColor(value) {
|
|
2095
|
+
const color = this.evaluateString(value);
|
|
2096
|
+
const watchKey = `:buttonColor(${color})`;
|
|
2097
|
+
return this.weak.call(this.formGroup, watchKey, () => {
|
|
2098
|
+
if (color === "ghost")
|
|
2099
|
+
return null;
|
|
2100
|
+
const validColors = ['primary', 'secondary', 'tertiary', 'tertiary-light', 'danger'];
|
|
2101
|
+
return validColors.includes(color) ? color : 'primary';
|
|
2102
|
+
});
|
|
2103
|
+
}
|
|
2104
|
+
getFormGroup(control) {
|
|
2105
|
+
if (!(control instanceof FormGroup)) {
|
|
2106
|
+
throw new Error('Control is not a FormGroup');
|
|
2107
|
+
}
|
|
2108
|
+
return control;
|
|
2109
|
+
}
|
|
2110
|
+
getFormArray(control) {
|
|
2111
|
+
if (!(control instanceof FormArray)) {
|
|
2112
|
+
throw new Error('Control is not a FormArray');
|
|
2113
|
+
}
|
|
2114
|
+
return control;
|
|
2115
|
+
}
|
|
2116
|
+
getControlFromPath(path) {
|
|
2117
|
+
return path
|
|
2118
|
+
? this.formGroup.get(path)
|
|
2119
|
+
: this.formGroup;
|
|
2120
|
+
}
|
|
2121
|
+
toHTML(text) {
|
|
2122
|
+
let html = this.markdown.toHtml(text);
|
|
2123
|
+
return this.sanitizer.sanitizeSafeHtml(html);
|
|
2124
|
+
}
|
|
2125
|
+
;
|
|
2126
|
+
sanitize(html) {
|
|
2127
|
+
return this.sanitizer.sanitizeSafeHtml(html);
|
|
2128
|
+
}
|
|
2129
|
+
;
|
|
2130
|
+
getMimeTypes(extensions) {
|
|
2131
|
+
return this.mime.getMimeTypes(extensions);
|
|
2132
|
+
}
|
|
2133
|
+
;
|
|
2134
|
+
clickButton(component, event) {
|
|
2135
|
+
if (component.click) {
|
|
2136
|
+
this.evaluate(component.click, false);
|
|
2137
|
+
}
|
|
2138
|
+
if (component.command) {
|
|
2139
|
+
const command = {
|
|
2140
|
+
name: this.evaluateString(component.command),
|
|
2141
|
+
component: component,
|
|
2142
|
+
formGroup: this.formGroup,
|
|
2143
|
+
event: event
|
|
2144
|
+
};
|
|
2145
|
+
this.events.emitCommand(command);
|
|
2146
|
+
}
|
|
2147
|
+
}
|
|
2148
|
+
getValues(component) {
|
|
2149
|
+
if (component.values) {
|
|
2150
|
+
// Static
|
|
2151
|
+
return of(component.values);
|
|
2152
|
+
}
|
|
2153
|
+
else if (component.valuesKey) {
|
|
2154
|
+
// Field value
|
|
2155
|
+
const result = this.evaluate(component.valuesKey);
|
|
2156
|
+
return this.getAsObservable(result);
|
|
2157
|
+
}
|
|
2158
|
+
else if (component.valuesExpression) {
|
|
2159
|
+
// Expression
|
|
2160
|
+
const result = this.evaluate(component.valuesExpression);
|
|
2161
|
+
return this.getAsObservable(result);
|
|
2162
|
+
}
|
|
2163
|
+
else {
|
|
2164
|
+
// Nothing
|
|
2165
|
+
return of([]);
|
|
2166
|
+
}
|
|
2167
|
+
}
|
|
2168
|
+
getGridOptions(component) {
|
|
2169
|
+
return this.weak.call(component, 'getGridOptions', () => {
|
|
2170
|
+
return {
|
|
2171
|
+
defaultColDef: {
|
|
2172
|
+
floatingFilter: (component.floatingFilter === true),
|
|
2173
|
+
headerClass: (component.floatingFilter === true)
|
|
2174
|
+
? 'show-filter' : 'hide-filter'
|
|
2175
|
+
},
|
|
2176
|
+
columnDefs: this.getGridColumns(component),
|
|
2177
|
+
pagination: this.getGridPaginable(component),
|
|
2178
|
+
paginationPageSize: this.getGridPageSize(component),
|
|
2179
|
+
paginationPageSizeSelector: [5, 10, 20, 50],
|
|
2180
|
+
localeText: this.getGridTexts(),
|
|
2181
|
+
theme: this.getGridTheme(),
|
|
2182
|
+
};
|
|
2183
|
+
});
|
|
2184
|
+
}
|
|
2185
|
+
getGridModules(component) {
|
|
2186
|
+
return this.weak.call(component, 'getGridModules', () => {
|
|
2187
|
+
return [
|
|
2188
|
+
ClientSideRowModelModule,
|
|
2189
|
+
InfiniteRowModelModule,
|
|
2190
|
+
PaginationModule,
|
|
2191
|
+
LocaleModule,
|
|
2192
|
+
CellStyleModule,
|
|
2193
|
+
ClientSideRowModelApiModule,
|
|
2194
|
+
TextFilterModule,
|
|
2195
|
+
NumberFilterModule,
|
|
2196
|
+
DateFilterModule
|
|
2197
|
+
];
|
|
2198
|
+
});
|
|
2199
|
+
}
|
|
2200
|
+
getGridData(component) {
|
|
2201
|
+
if (component.dataSource) {
|
|
2202
|
+
// Expression
|
|
2203
|
+
const result = this.evaluate(component.dataSource);
|
|
2204
|
+
return this.getAsObservable(result);
|
|
2205
|
+
}
|
|
2206
|
+
else {
|
|
2207
|
+
// Nothing
|
|
2208
|
+
return of([]);
|
|
2209
|
+
}
|
|
2210
|
+
}
|
|
2211
|
+
addNewItem(component) {
|
|
2212
|
+
const formArray = this.getFormArray(this.getControlFromPath(component.path));
|
|
2213
|
+
formArray.addNewItem();
|
|
2214
|
+
}
|
|
2215
|
+
removeItem(component, index) {
|
|
2216
|
+
const formArray = this.getFormArray(this.getControlFromPath(component.path));
|
|
2217
|
+
formArray.removeAt(index);
|
|
2218
|
+
}
|
|
2219
|
+
createUploadTables(component) {
|
|
2220
|
+
return this.weak.call(component, 'createUploadTables', () => {
|
|
2221
|
+
return [
|
|
2222
|
+
{
|
|
2223
|
+
components: [
|
|
2224
|
+
{
|
|
2225
|
+
"type": "table",
|
|
2226
|
+
"layout": {
|
|
2227
|
+
"columns": null
|
|
2228
|
+
},
|
|
2229
|
+
"columns": [
|
|
2230
|
+
{
|
|
2231
|
+
"label": "Name",
|
|
2232
|
+
"key": "name",
|
|
2233
|
+
"flex": 1
|
|
2234
|
+
},
|
|
2235
|
+
{
|
|
2236
|
+
"label": "Size",
|
|
2237
|
+
"key": "size",
|
|
2238
|
+
"format": "integer",
|
|
2239
|
+
"align": "right"
|
|
2240
|
+
},
|
|
2241
|
+
{
|
|
2242
|
+
"key": "type",
|
|
2243
|
+
"label": "Type"
|
|
2244
|
+
},
|
|
2245
|
+
{
|
|
2246
|
+
"key": "url",
|
|
2247
|
+
"label": "",
|
|
2248
|
+
"width": 50,
|
|
2249
|
+
"align": "center",
|
|
2250
|
+
"format": "objectURL"
|
|
2251
|
+
},
|
|
2252
|
+
{
|
|
2253
|
+
"label": "",
|
|
2254
|
+
"width": 50,
|
|
2255
|
+
"align": "center",
|
|
2256
|
+
"format": "deleteRow"
|
|
2257
|
+
}
|
|
2258
|
+
],
|
|
2259
|
+
"dataSource": "=" + component.key,
|
|
2260
|
+
"height": 200,
|
|
2261
|
+
"conditional": component.conditional,
|
|
2262
|
+
"disabled": component.disabled
|
|
2263
|
+
}
|
|
2264
|
+
]
|
|
2265
|
+
}
|
|
2266
|
+
];
|
|
2267
|
+
});
|
|
2268
|
+
}
|
|
2269
|
+
fileUploaded($event) {
|
|
2270
|
+
const removeFile = (file) => {
|
|
2271
|
+
if ($event.component.control) {
|
|
2272
|
+
const newFiles = $event.component.fileList.filter(f => f !== file);
|
|
2273
|
+
$event.component.control.setValue(newFiles);
|
|
2274
|
+
addRemove(newFiles);
|
|
2275
|
+
return newFiles;
|
|
2276
|
+
}
|
|
2277
|
+
return [];
|
|
2278
|
+
};
|
|
2279
|
+
const addRemove = (files) => {
|
|
2280
|
+
files.forEach(file => {
|
|
2281
|
+
if (!('remove' in file)) {
|
|
2282
|
+
Object.defineProperty(file, 'remove', {
|
|
2283
|
+
value: function () {
|
|
2284
|
+
removeFile(this);
|
|
2285
|
+
},
|
|
2286
|
+
writable: false,
|
|
2287
|
+
enumerable: false
|
|
2288
|
+
});
|
|
2289
|
+
}
|
|
2290
|
+
});
|
|
2291
|
+
};
|
|
2292
|
+
addRemove($event.component.fileList);
|
|
2293
|
+
}
|
|
2294
|
+
focusFirst() {
|
|
2295
|
+
const focusableElements = this.el.nativeElement.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
|
|
2296
|
+
for (let el of focusableElements) {
|
|
2297
|
+
if (!el.hasAttribute('disabled')) {
|
|
2298
|
+
el.focus();
|
|
2299
|
+
break;
|
|
2300
|
+
}
|
|
2301
|
+
}
|
|
2302
|
+
}
|
|
2303
|
+
gridTexts = {
|
|
2304
|
+
...AG_GRID_LOCALE_IT,
|
|
2305
|
+
"pageSizeSelectorLabel": "Elementi per pagina:",
|
|
2306
|
+
"to": "-",
|
|
2307
|
+
};
|
|
2308
|
+
gridTheme = themeQuartz
|
|
2309
|
+
.withPart(iconSetAlpine)
|
|
2310
|
+
.withParams({
|
|
2311
|
+
backgroundColor: "#FAFAFA",
|
|
2312
|
+
borderColor: "#D9E4F7",
|
|
2313
|
+
browserColorScheme: "light",
|
|
2314
|
+
cellTextColor: "#00121A",
|
|
2315
|
+
columnBorder: true,
|
|
2316
|
+
fontFamily: "inherit",
|
|
2317
|
+
fontSize: 16,
|
|
2318
|
+
headerBackgroundColor: "#002460",
|
|
2319
|
+
headerColumnBorder: true,
|
|
2320
|
+
headerColumnResizeHandleColor: "#F2F6FC",
|
|
2321
|
+
headerColumnResizeHandleWidth: 2,
|
|
2322
|
+
headerFontSize: 16,
|
|
2323
|
+
headerFontWeight: 600,
|
|
2324
|
+
headerRowBorder: false,
|
|
2325
|
+
headerTextColor: "#F2F6FC",
|
|
2326
|
+
rowBorder: true
|
|
2327
|
+
});
|
|
2328
|
+
getGridColumns(component) {
|
|
2329
|
+
if (Array.isArray(component.columns)) {
|
|
2330
|
+
return component.columns.map((column) => ({
|
|
2331
|
+
field: column.key,
|
|
2332
|
+
headerName: column.label,
|
|
2333
|
+
resizable: column.resize === true,
|
|
2334
|
+
sortable: column.sort === true,
|
|
2335
|
+
filter: column.filter === true,
|
|
2336
|
+
suppressMovable: !(column.move === true),
|
|
2337
|
+
...(column.flex === true && { flex: 1 }),
|
|
2338
|
+
...(column.align === "left" && { cellStyle: { textAlign: 'left' } }),
|
|
2339
|
+
...(column.align === "center" && { cellStyle: { textAlign: 'center' } }),
|
|
2340
|
+
...(column.align === "right" && { cellStyle: { textAlign: 'right' } }),
|
|
2341
|
+
...(typeof column.pinned === "string" && { pinned: column.pinned }),
|
|
2342
|
+
...(typeof column.flex === "number" && { flex: column.flex }),
|
|
2343
|
+
...(typeof column.width === "number" && { width: column.width }),
|
|
2344
|
+
...(typeof column.minWidth === "number" && { minWidth: column.minWidth }),
|
|
2345
|
+
...(typeof column.maxWidth === "number" && { maxWidth: column.maxWidth }),
|
|
2346
|
+
valueFormatter: this.getGridFormatter(column),
|
|
2347
|
+
cellRenderer: this.getGridRenderer(column)
|
|
2348
|
+
}));
|
|
2349
|
+
}
|
|
2350
|
+
else {
|
|
2351
|
+
return [];
|
|
2352
|
+
}
|
|
2353
|
+
}
|
|
2354
|
+
getGridPaginable(component) {
|
|
2355
|
+
return (typeof component.rowCount === 'number' && component.rowCount > 0);
|
|
2356
|
+
}
|
|
2357
|
+
getGridPageSize(component) {
|
|
2358
|
+
if (typeof component.rowCount === 'number') {
|
|
2359
|
+
return component.rowCount;
|
|
2360
|
+
}
|
|
2361
|
+
}
|
|
2362
|
+
getGridTexts() {
|
|
2363
|
+
return this.gridTexts;
|
|
2364
|
+
}
|
|
2365
|
+
getGridTheme() {
|
|
2366
|
+
return this.gridTheme;
|
|
2367
|
+
}
|
|
2368
|
+
getGridFormatter(column) {
|
|
2369
|
+
if (column.format) {
|
|
2370
|
+
switch (column.format) {
|
|
2371
|
+
case 'integer':
|
|
2372
|
+
return params => this.formatter.formatInteger(params.value);
|
|
2373
|
+
case 'currency':
|
|
2374
|
+
return params => this.formatter.formatCurrency(params.value);
|
|
2375
|
+
case 'date':
|
|
2376
|
+
return params => this.formatter.formatDate(params.value);
|
|
2377
|
+
}
|
|
2378
|
+
}
|
|
2379
|
+
return undefined;
|
|
2380
|
+
}
|
|
2381
|
+
getGridRenderer(column) {
|
|
2382
|
+
if (column.format) {
|
|
2383
|
+
switch (column.format) {
|
|
2384
|
+
case 'objectURL':
|
|
2385
|
+
return ObjectURLRendererComponent;
|
|
2386
|
+
case "deleteRow":
|
|
2387
|
+
return DeleteRowCellRenderer;
|
|
2388
|
+
}
|
|
2389
|
+
}
|
|
2390
|
+
return undefined;
|
|
2391
|
+
}
|
|
2392
|
+
getAsObservable(value) {
|
|
2393
|
+
if (isObservable(value))
|
|
2394
|
+
return value;
|
|
2395
|
+
return of(value);
|
|
2396
|
+
}
|
|
2397
|
+
configureDatepicker() {
|
|
2398
|
+
Datepicker.locales['it'] = {
|
|
2399
|
+
days: [
|
|
2400
|
+
'Domenica',
|
|
2401
|
+
'Lunedì',
|
|
2402
|
+
'Martedì',
|
|
2403
|
+
'Mercoledì',
|
|
2404
|
+
'Giovedì',
|
|
2405
|
+
'Venerdì',
|
|
2406
|
+
'Sabato',
|
|
2407
|
+
],
|
|
2408
|
+
daysMin: ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],
|
|
2409
|
+
months: [
|
|
2410
|
+
'Gennaio',
|
|
2411
|
+
'Febbraio',
|
|
2412
|
+
'Marzo',
|
|
2413
|
+
'Aprile',
|
|
2414
|
+
'Maggio',
|
|
2415
|
+
'Giugno',
|
|
2416
|
+
'Luglio',
|
|
2417
|
+
'Agosto',
|
|
2418
|
+
'Settembre',
|
|
2419
|
+
'Ottobre',
|
|
2420
|
+
'Novembre',
|
|
2421
|
+
'Dicembre',
|
|
2422
|
+
],
|
|
2423
|
+
monthsShort: [
|
|
2424
|
+
'Gen',
|
|
2425
|
+
'Feb',
|
|
2426
|
+
'Mar',
|
|
2427
|
+
'Apr',
|
|
2428
|
+
'Mag',
|
|
2429
|
+
'Giu',
|
|
2430
|
+
'Lug',
|
|
2431
|
+
'Ago',
|
|
2432
|
+
'Set',
|
|
2433
|
+
'Ott',
|
|
2434
|
+
'Nov',
|
|
2435
|
+
'Dic',
|
|
2436
|
+
],
|
|
2437
|
+
today: 'Oggi',
|
|
2438
|
+
clear: 'Pulisci',
|
|
2439
|
+
format: 'dd/mm/yyyy',
|
|
2440
|
+
weekStart: 1,
|
|
2441
|
+
};
|
|
2442
|
+
}
|
|
2443
|
+
;
|
|
2444
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicFieldsComponent, deps: [{ token: SanitizeService }, { token: MarkdownService }, { token: MimeService }, { token: ProgrammabilityService }, { token: EventService }, { token: FormatterService }, { token: WeakService }, { token: RegisterService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2445
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DynamicFieldsComponent, isStandalone: true, selector: "app-dynamic-fields", inputs: { rows: "rows", formGroup: "formGroup" }, providers: [
|
|
2446
|
+
RegisterService,
|
|
2447
|
+
ProgrammabilityService
|
|
2448
|
+
], ngImport: i0, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [formGroup]=\"formGroup\" [class]=\"getClass(component)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"Texts.TypeToSearch\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker ariaLabel=\"date\"\r\n [label]=\"evaluateString(component.dateLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker ariaLabel=\"time\"\r\n [label]=\"evaluateString(component.timeLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n ariaLabel=\"textarea\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload ariaLabel=\"filepicker\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ Texts.Upload }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\" [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div class=\"text-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(component.content))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(component.alt)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"component.label + ' ' + (i + 1)\">\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"component.label + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true}\"\r\n #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container> \r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addNewItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ Texts.AddItem }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label [for]=\"component.id\">{{ evaluateString(component.label) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(component.label)\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"Texts.Close\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(component.title)\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".field-set{align-items:center}.field-set>div{margin-top:10px;margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-cell-value button.sirio-btn.sirio-btn-icon{padding:0}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}\n"], dependencies: [{ kind: "component", type: DynamicFieldsComponent, selector: "app-dynamic-fields", inputs: ["rows", "formGroup"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i9.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: AdornerDirective, selector: "[prefixAdorner], [suffixAdorner]", inputs: ["prefixAdorner", "suffixAdorner"] }, { kind: "directive", type: DisableDirective, selector: "[disableControl], [readonly]", inputs: ["disableControl", "readonly"] }, { kind: "directive", type: DisplayDirective, selector: "[hide], [show]", inputs: ["hide", "show"] }, { kind: "directive", type: FrameSecurityDirective, selector: "[frameSecurity]", inputs: ["frameSecurity"] }, { kind: "directive", type: DropdownDirective, selector: "[dropdown]" }, { kind: "directive", type: UpdateBlurDirective, selector: "[updateBlur]" }, { kind: "directive", type: RepeatDirective, selector: "[repeat]", inputs: ["repeat"] }, { kind: "directive", type: TabDirective, selector: "[tabCount]", inputs: ["tabCount"] }, { kind: "directive", type: GridDirective, selector: "[rowSource]", inputs: ["rowSource"] }, { kind: "directive", type: RegisterDirective, selector: "[register]", inputs: ["register", "componentRef"] }, { kind: "directive", type: AccordionDirective, selector: "[accordionCount]", inputs: ["accordionCount"] }, { kind: "component", type: SirioInputComponent, selector: "ngx-sirio-input", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "type", "name", "placeholder", "textHelp", "textFeedback", "rows", "cols", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "role"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "directive", type: SirioValidationDirective, selector: "[validation]", inputs: ["canValidate", "isWarning", "showWhenValid"] }, { kind: "component", type: SirioSelectComponent, selector: "ngx-sirio-select", inputs: ["placeholder", "disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "isMultiple", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy"], outputs: ["focusEvent", "blurEvent", "keydownEvent"] }, { kind: "component", type: SirioSelectOptionComponent, selector: "ngx-sirio-select-option", inputs: ["value"], outputs: ["optionSelected", "blurEvent"] }, { kind: "component", type: SirioSelectPanelComponent, selector: "ngx-sirio-select-panel", outputs: ["optionSelected", "panelOpened", "panelClosed"] }, { kind: "component", type: SirioCheckboxGroupComponent, selector: "ngx-sirio-checkbox-group", inputs: ["textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioCheckboxComponent, selector: "ngx-sirio-checkbox", inputs: ["disabled", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "disabledState", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioDatepickerComponent, selector: "ngx-sirio-datepicker", inputs: ["name", "placeholder", "textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "value", "disabledState"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent", "datechangeEvent"] }, { kind: "component", type: SirioTimepickerComponent, selector: "ngx-sirio-timepicker", inputs: ["name", "label", "labelPopover", "ariaLabelPopoverButton", "placeholder", "textHelp", "textFeedback", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioRadioGroupComponent, selector: "ngx-sirio-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioRadioButtonComponent, selector: "ngx-sirio-radio-button", inputs: ["disabledState", "label", "name", "textHelp", "textFeedback", "ariaInvalid", "ariaDescribedBy", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioTabComponent, selector: "ngx-sirio-tab", inputs: ["isVertical", "isNavLine", "leftArrowLabel", "rightArrowLabel", "tabActive"], outputs: ["tabChange"] }, { kind: "component", type: SirioTabItemComponent, selector: "ngx-sirio-tab-item", inputs: ["label", "disabled", "icon"] }, { kind: "component", type: SirioAccordionComponent, selector: "ngx-sirio-accordion", inputs: ["dark"] }, { kind: "component", type: SirioAccordionPanelComponent, selector: "ngx-sirio-accordion-panel", inputs: ["active", "disabled"], outputs: ["opened", "closed"] }, { kind: "component", type: SirioAccordionHeaderComponent, selector: "ngx-sirio-accordion-header" }, { kind: "component", type: SirioAccordionBodyComponent, selector: "ngx-sirio-accordion-body" }, { kind: "component", type: SirioButtonComponent, selector: "ngx-sirio-button", inputs: ["ariaExpanded", "ariaControls", "ariaActivedescendant", "ariaHaspopup", "ariaLabel", "ariaRequired", "ariaInvalid", "ariaDescribedby", "icon", "title", "role", "color", "isFloating", "isExtended", "isLight", "isSmall", "disabled", "isDropdown", "type", "dismissType", "isBtnBlock"], outputs: ["clickEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: SirioFileUploadComponent, selector: "ngx-sirio-file-upload", inputs: ["multiple", "color", "accept", "maxFiles", "showFilelist", "label", "labelPopover", "ariaLabelPopoverButton", "name", "textHelp", "textFeedback", "ariaLabel", "ariaLabelDeleteFileButton", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "fileUploadedEvent", "fileDeletedEvent", "uploadErrorEvent", "blurEvent"] }, { kind: "component", type: SirioToggleComponent, selector: "ngx-sirio-toggle", inputs: ["name", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipCheckboxGroupComponent, selector: "ngx-sirio-chip-checkbox-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipRadioGroupComponent, selector: "ngx-sirio-chip-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioInputChipComponent, selector: "ngx-sirio-input-chip", inputs: ["disabledState", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "type", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "ngmodule", type: SirioTableModule }, { kind: "component", type: SirioAlertComponent, selector: "ngx-sirio-alert", inputs: ["type", "labelClose", "isVisible"], outputs: ["closeEvent"] }, { kind: "component", type: SirioAlertMessageComponent, selector: "ngx-sirio-alert-message" }, { kind: "component", type: SirioSliderComponent, selector: "ngx-sirio-slider", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "description", "min", "max", "ariaInvalid", "ariaDescribedBy", "textHelp", "textFeedback"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioNotifyComponent, selector: "ngx-sirio-notify", inputs: ["isDark"] }, { kind: "component", type: SirioNotifyBodyComponent, selector: "ngx-sirio-notify-body", inputs: ["title"] }, { kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
2449
|
+
}
|
|
2450
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicFieldsComponent, decorators: [{
|
|
2451
|
+
type: Component,
|
|
2452
|
+
args: [{ selector: 'app-dynamic-fields', standalone: true, imports: [CommonModule, ReactiveFormsModule,
|
|
2453
|
+
AdornerDirective, DisableDirective, DisplayDirective, FrameSecurityDirective,
|
|
2454
|
+
DropdownDirective, UpdateBlurDirective, RepeatDirective, TabDirective, GridDirective,
|
|
2455
|
+
RegisterDirective, AccordionDirective,
|
|
2456
|
+
SirioInputComponent, SirioValidationDirective,
|
|
2457
|
+
SirioSelectComponent, SirioSelectOptionComponent, SirioSelectPanelComponent,
|
|
2458
|
+
SirioCheckboxGroupComponent, SirioCheckboxComponent, SirioDatepickerComponent, SirioTimepickerComponent,
|
|
2459
|
+
SirioRadioGroupComponent, SirioRadioButtonComponent, SirioTabComponent, SirioTabItemComponent,
|
|
2460
|
+
SirioAccordionComponent, SirioAccordionPanelComponent, SirioAccordionHeaderComponent, SirioAccordionBodyComponent,
|
|
2461
|
+
SirioButtonComponent, SirioFileUploadComponent,
|
|
2462
|
+
SirioToggleComponent, SirioChipCheckboxGroupComponent, SirioChipRadioGroupComponent, SirioInputChipComponent,
|
|
2463
|
+
SirioTableModule, SirioTableComponent, SirioPaginatorComponent,
|
|
2464
|
+
SirioAlertComponent, SirioAlertMessageComponent, SirioSliderComponent,
|
|
2465
|
+
SirioNotifyComponent, SirioNotifyBodyComponent, SirioNotifyActionComponent, SirioNotifyLinkComponent,
|
|
2466
|
+
AgGridAngular], providers: [
|
|
2467
|
+
RegisterService,
|
|
2468
|
+
ProgrammabilityService
|
|
2469
|
+
], encapsulation: ViewEncapsulation.None, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [formGroup]=\"formGroup\" [class]=\"getClass(component)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"Texts.TypeToSearch\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker ariaLabel=\"date\"\r\n [label]=\"evaluateString(component.dateLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker ariaLabel=\"time\"\r\n [label]=\"evaluateString(component.timeLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n ariaLabel=\"textarea\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload ariaLabel=\"filepicker\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ Texts.Upload }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\" [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div class=\"text-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(component.content))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(component.alt)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"component.label + ' ' + (i + 1)\">\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"component.label + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true}\"\r\n #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container> \r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addNewItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ Texts.AddItem }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label [for]=\"component.id\">{{ evaluateString(component.label) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(component.label)\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"Texts.Close\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(component.title)\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".field-set{align-items:center}.field-set>div{margin-top:10px;margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-cell-value button.sirio-btn.sirio-btn-icon{padding:0}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}\n"] }]
|
|
2470
|
+
}], ctorParameters: () => [{ type: SanitizeService }, { type: MarkdownService }, { type: MimeService }, { type: ProgrammabilityService }, { type: EventService }, { type: FormatterService }, { type: WeakService }, { type: RegisterService }, { type: i0.ElementRef }], propDecorators: { rows: [{
|
|
2471
|
+
type: Input
|
|
2472
|
+
}], formGroup: [{
|
|
2473
|
+
type: Input
|
|
2474
|
+
}] } });
|
|
2475
|
+
|
|
2476
|
+
/// <reference path="../types/typings.d.ts" />
|
|
2477
|
+
class DynamicFormComponent {
|
|
2478
|
+
fb;
|
|
2479
|
+
programmabilityService;
|
|
2480
|
+
events;
|
|
2481
|
+
registerService;
|
|
2482
|
+
schema;
|
|
2483
|
+
formGroup;
|
|
2484
|
+
value = {};
|
|
2485
|
+
showNav = true;
|
|
2486
|
+
showNavButton = true;
|
|
2487
|
+
showProgress = false;
|
|
2488
|
+
progressStatus = true;
|
|
2489
|
+
valueChange = new EventEmitter();
|
|
2490
|
+
initialized = new EventEmitter();
|
|
2491
|
+
onCommand = new EventEmitter();
|
|
2492
|
+
activeNavChange = new EventEmitter();
|
|
2493
|
+
constructor(fb, programmabilityService, events, registerService) {
|
|
2494
|
+
this.fb = fb;
|
|
2495
|
+
this.programmabilityService = programmabilityService;
|
|
2496
|
+
this.events = events;
|
|
2497
|
+
this.registerService = registerService;
|
|
2498
|
+
}
|
|
2499
|
+
Texts = Texts;
|
|
2500
|
+
ngOnDestroy() {
|
|
2501
|
+
this.clearHandlers();
|
|
2502
|
+
}
|
|
2503
|
+
ngOnChanges(changes) {
|
|
2504
|
+
if (changes['schema']) {
|
|
2505
|
+
if (!this.formGroup) {
|
|
2506
|
+
this.formGroup = this.fb.group({});
|
|
2507
|
+
}
|
|
2508
|
+
this.clearControls();
|
|
2509
|
+
this.clearHandlers();
|
|
2510
|
+
const schema = changes['schema'].currentValue;
|
|
2511
|
+
this._forms = groupByRow(schema.forms ?? []);
|
|
2512
|
+
this.buildForm();
|
|
2513
|
+
if (this.value) {
|
|
2514
|
+
this.patchValue(this.formGroup, this.value);
|
|
2515
|
+
}
|
|
2516
|
+
if (this.initialized)
|
|
2517
|
+
this.initialized.emit(this.formGroup);
|
|
2518
|
+
this.registerHandlers();
|
|
2519
|
+
}
|
|
2520
|
+
}
|
|
2521
|
+
get forms() {
|
|
2522
|
+
return this._forms;
|
|
2523
|
+
}
|
|
2524
|
+
canPrevious() {
|
|
2525
|
+
return this.getPrevious() != -1;
|
|
2526
|
+
}
|
|
2527
|
+
goPrevious() {
|
|
2528
|
+
if (this.canPrevious()) {
|
|
2529
|
+
this.activeNav = this.getPrevious();
|
|
2530
|
+
}
|
|
2531
|
+
}
|
|
2532
|
+
canNext() {
|
|
2533
|
+
return this.getNext() != -1;
|
|
2534
|
+
}
|
|
2535
|
+
goNext() {
|
|
2536
|
+
if (this.canNext()) {
|
|
2537
|
+
this.activeNav = this.getNext();
|
|
2538
|
+
}
|
|
2539
|
+
}
|
|
2540
|
+
getControls() {
|
|
2541
|
+
return this.registerService.getControls();
|
|
2542
|
+
}
|
|
2543
|
+
getControl(name) {
|
|
2544
|
+
return this.registerService.getControl(name);
|
|
2545
|
+
}
|
|
2546
|
+
get activeNav() {
|
|
2547
|
+
return this._activeNav;
|
|
2548
|
+
}
|
|
2549
|
+
set activeNav(value) {
|
|
2550
|
+
if (value >= 0 && value < this.getMaxNav()) {
|
|
2551
|
+
this._activeNav = value;
|
|
2552
|
+
}
|
|
2553
|
+
setTimeout(() => {
|
|
2554
|
+
this.activeNavChange.emit(this._activeNav);
|
|
2555
|
+
});
|
|
2556
|
+
}
|
|
2557
|
+
getFormGroup(path) {
|
|
2558
|
+
const control = path ? this.formGroup.get(path) : this.formGroup;
|
|
2559
|
+
if (!(control instanceof FormGroup)) {
|
|
2560
|
+
throw new Error('Control is not a FormGroup');
|
|
2561
|
+
}
|
|
2562
|
+
return control;
|
|
2563
|
+
}
|
|
2564
|
+
getFormStatus(form) {
|
|
2565
|
+
const index = this._forms.findIndex(f => f.id === form.id);
|
|
2566
|
+
const current = index == this.activeNav;
|
|
2567
|
+
if (current) {
|
|
2568
|
+
return "active";
|
|
2569
|
+
}
|
|
2570
|
+
else if (this.progressStatus) {
|
|
2571
|
+
const formGroup = this.getFormGroup(form.path);
|
|
2572
|
+
return formGroup.valid ? "success" : "error";
|
|
2573
|
+
}
|
|
2574
|
+
else {
|
|
2575
|
+
return "active";
|
|
2576
|
+
}
|
|
2577
|
+
}
|
|
2578
|
+
activateForm(title) {
|
|
2579
|
+
const index = this.forms.findIndex(form => form.title === title);
|
|
2580
|
+
if (index != -1)
|
|
2581
|
+
this.activeNav = index;
|
|
2582
|
+
}
|
|
2583
|
+
valueChangesSubscription = null;
|
|
2584
|
+
onCommandSubscription = null;
|
|
2585
|
+
_forms = [];
|
|
2586
|
+
_activeNav = 0;
|
|
2587
|
+
getNext() {
|
|
2588
|
+
if (this.activeNav < this.getMaxNav() - 1) {
|
|
2589
|
+
return this.activeNav + 1;
|
|
2590
|
+
}
|
|
2591
|
+
else {
|
|
2592
|
+
return -1;
|
|
2593
|
+
}
|
|
2594
|
+
}
|
|
2595
|
+
getPrevious() {
|
|
2596
|
+
if (this.activeNav > 0) {
|
|
2597
|
+
return this.activeNav - 1;
|
|
2598
|
+
}
|
|
2599
|
+
else {
|
|
2600
|
+
return -1;
|
|
2601
|
+
}
|
|
2602
|
+
}
|
|
2603
|
+
getMaxNav() {
|
|
2604
|
+
return this._forms.length ?? 0;
|
|
2605
|
+
}
|
|
2606
|
+
;
|
|
2607
|
+
clearControls() {
|
|
2608
|
+
Object.keys(this.formGroup.controls).forEach(key => {
|
|
2609
|
+
this.formGroup.removeControl(key);
|
|
2610
|
+
});
|
|
2611
|
+
}
|
|
2612
|
+
registerHandlers() {
|
|
2613
|
+
this.valueChangesSubscription = this.formGroup.valueChanges.subscribe((value) => {
|
|
2614
|
+
this.valueChange.emit(value);
|
|
2615
|
+
});
|
|
2616
|
+
this.onCommandSubscription = this.events.onCommand.subscribe((data) => {
|
|
2617
|
+
if (this.onCommand)
|
|
2618
|
+
this.onCommand.emit(data);
|
|
2619
|
+
});
|
|
2620
|
+
}
|
|
2621
|
+
;
|
|
2622
|
+
clearHandlers() {
|
|
2623
|
+
if (this.valueChangesSubscription) {
|
|
2624
|
+
this.valueChangesSubscription.unsubscribe();
|
|
2625
|
+
}
|
|
2626
|
+
if (this.onCommandSubscription) {
|
|
2627
|
+
this.onCommandSubscription.unsubscribe();
|
|
2628
|
+
}
|
|
2629
|
+
}
|
|
2630
|
+
buildForm() {
|
|
2631
|
+
this.forms.forEach((form) => {
|
|
2632
|
+
const currentGroup = this.applyPath(this.fb, this.formGroup, form.path);
|
|
2633
|
+
form.rows?.forEach((row) => {
|
|
2634
|
+
this.addControls(this.fb, currentGroup, row.components);
|
|
2635
|
+
});
|
|
2636
|
+
});
|
|
2637
|
+
}
|
|
2638
|
+
addControls(formBuilder, formGroup, components) {
|
|
2639
|
+
let formComponent = this;
|
|
2640
|
+
components?.forEach((component) => {
|
|
2641
|
+
if (this.isFormComponent(component)) {
|
|
2642
|
+
if (component.type === 'dynamiclist') {
|
|
2643
|
+
if (component.path) {
|
|
2644
|
+
let formArray = formBuilder.array([]);
|
|
2645
|
+
formGroup.addControl(component.path, formArray);
|
|
2646
|
+
formArray.addNewItem = function () {
|
|
2647
|
+
let newGroup = formBuilder.group({});
|
|
2648
|
+
component.rows?.forEach((row) => {
|
|
2649
|
+
formComponent.addControls(formBuilder, newGroup, row.components);
|
|
2650
|
+
});
|
|
2651
|
+
formArray.push(newGroup);
|
|
2652
|
+
return newGroup;
|
|
2653
|
+
};
|
|
2654
|
+
}
|
|
2655
|
+
}
|
|
2656
|
+
else if (component.type === 'group') {
|
|
2657
|
+
const currentGroup = this.applyPath(formBuilder, formGroup, component.path);
|
|
2658
|
+
component.rows?.forEach((row) => {
|
|
2659
|
+
formComponent.addControls(formBuilder, currentGroup, row.components);
|
|
2660
|
+
});
|
|
2661
|
+
}
|
|
2662
|
+
else if (component.key) {
|
|
2663
|
+
let defaultValue = this.getDefaultValue(component);
|
|
2664
|
+
const programmability = this.getValidators(formGroup, component);
|
|
2665
|
+
const options = {
|
|
2666
|
+
validators: programmability?.validators || [],
|
|
2667
|
+
updateOn: this.getUpdateOn(component) || "change"
|
|
2668
|
+
};
|
|
2669
|
+
const control = formBuilder.control(defaultValue, options);
|
|
2670
|
+
formGroup.addControl(component.key, control);
|
|
2671
|
+
programmability?.watch(control);
|
|
2672
|
+
if (component.type === 'number') {
|
|
2673
|
+
this.useNumber(control);
|
|
2674
|
+
}
|
|
2675
|
+
}
|
|
2676
|
+
}
|
|
2677
|
+
});
|
|
2678
|
+
}
|
|
2679
|
+
applyPath(formBuilder, formGroup, path) {
|
|
2680
|
+
if (!path) {
|
|
2681
|
+
return formGroup;
|
|
2682
|
+
}
|
|
2683
|
+
let currentGroup = formGroup;
|
|
2684
|
+
this.splitPath(path).forEach((segment) => {
|
|
2685
|
+
let newGroup = formBuilder.group({});
|
|
2686
|
+
currentGroup.addControl(segment, newGroup);
|
|
2687
|
+
currentGroup = newGroup;
|
|
2688
|
+
});
|
|
2689
|
+
return currentGroup;
|
|
2690
|
+
}
|
|
2691
|
+
getValidators(formGroup, component) {
|
|
2692
|
+
const validators = [];
|
|
2693
|
+
const noWatch = (control) => { };
|
|
2694
|
+
if (component?.validate?.required === true) {
|
|
2695
|
+
validators.push(Validators.required);
|
|
2696
|
+
}
|
|
2697
|
+
if (!Array.isArray(component.validations)) {
|
|
2698
|
+
if (validators.length == 0)
|
|
2699
|
+
return null;
|
|
2700
|
+
return { validators: validators, watch: noWatch };
|
|
2701
|
+
}
|
|
2702
|
+
component.validations?.forEach((item) => {
|
|
2703
|
+
if (!this.programmabilityService.isExpression(item.expression))
|
|
2704
|
+
return;
|
|
2705
|
+
if (item.type === "validate") {
|
|
2706
|
+
validators.push(this.validateFn(formGroup, item));
|
|
2707
|
+
}
|
|
2708
|
+
else if (item.type === "invalidate") {
|
|
2709
|
+
validators.push(this.invalidateFn(formGroup, item));
|
|
2710
|
+
}
|
|
2711
|
+
});
|
|
2712
|
+
if (validators.length == 0)
|
|
2713
|
+
return null;
|
|
2714
|
+
return {
|
|
2715
|
+
validators: validators,
|
|
2716
|
+
watch: (control) => {
|
|
2717
|
+
//let formGroup = control.parent as FormGroup;
|
|
2718
|
+
//this.watch(formGroup, Array.from(set), () => {
|
|
2719
|
+
// control.updateValueAndValidity();
|
|
2720
|
+
//});
|
|
2721
|
+
}
|
|
2722
|
+
};
|
|
2723
|
+
}
|
|
2724
|
+
validateFn(formGroup, item) {
|
|
2725
|
+
return (control) => {
|
|
2726
|
+
//if (!control.touched)
|
|
2727
|
+
// return null;
|
|
2728
|
+
var valid = this.programmabilityService.evaluateUnary(formGroup, item.expression, control.value);
|
|
2729
|
+
if (!valid) {
|
|
2730
|
+
return { error: true, message: item.message };
|
|
2731
|
+
}
|
|
2732
|
+
return null;
|
|
2733
|
+
};
|
|
2734
|
+
}
|
|
2735
|
+
invalidateFn(formGroup, item) {
|
|
2736
|
+
return (control) => {
|
|
2737
|
+
//if (!control.touched)
|
|
2738
|
+
// return null;
|
|
2739
|
+
var invalid = this.programmabilityService.evaluateUnary(formGroup, item.expression, control.value);
|
|
2740
|
+
if (invalid) {
|
|
2741
|
+
return { error: true, message: item.message };
|
|
2742
|
+
}
|
|
2743
|
+
return null;
|
|
2744
|
+
};
|
|
2745
|
+
}
|
|
2746
|
+
useNumber(formControl) {
|
|
2747
|
+
/* Required for Siro Input because the type number was not implemented correctly */
|
|
2748
|
+
formControl.valueChanges.subscribe(value => {
|
|
2749
|
+
const numericValue = value === '' ? null : parseFloat(value);
|
|
2750
|
+
if (numericValue === null || !isNaN(numericValue)) {
|
|
2751
|
+
formControl.setValue(numericValue, { emitEvent: false });
|
|
2752
|
+
}
|
|
2753
|
+
});
|
|
2754
|
+
}
|
|
2755
|
+
isFormComponent(component) {
|
|
2756
|
+
switch (component.type) {
|
|
2757
|
+
case "checkbox":
|
|
2758
|
+
case "checklist":
|
|
2759
|
+
case "datetime":
|
|
2760
|
+
case "dynamiclist":
|
|
2761
|
+
case "filepicker":
|
|
2762
|
+
case "group":
|
|
2763
|
+
case "number":
|
|
2764
|
+
case "radio":
|
|
2765
|
+
case "select":
|
|
2766
|
+
case "taglist":
|
|
2767
|
+
case "textarea":
|
|
2768
|
+
case "textfield":
|
|
2769
|
+
case "range":
|
|
2770
|
+
return true;
|
|
2771
|
+
default:
|
|
2772
|
+
return false;
|
|
2773
|
+
}
|
|
2774
|
+
}
|
|
2775
|
+
getUpdateOn(component) {
|
|
2776
|
+
switch (component.type) {
|
|
2777
|
+
case "number":
|
|
2778
|
+
case "textarea":
|
|
2779
|
+
case "textfield":
|
|
2780
|
+
return "blur";
|
|
2781
|
+
default:
|
|
2782
|
+
return null;
|
|
2783
|
+
}
|
|
2784
|
+
}
|
|
2785
|
+
getDefaultValue(component) {
|
|
2786
|
+
switch (component.type) {
|
|
2787
|
+
case "textarea":
|
|
2788
|
+
case "textfield":
|
|
2789
|
+
case "radio":
|
|
2790
|
+
case "select":
|
|
2791
|
+
return component.defaultValue;
|
|
2792
|
+
case "number":
|
|
2793
|
+
return component.defaultValue;
|
|
2794
|
+
case "checkbox":
|
|
2795
|
+
return component.defaultValue;
|
|
2796
|
+
default:
|
|
2797
|
+
return null;
|
|
2798
|
+
}
|
|
2799
|
+
}
|
|
2800
|
+
splitPath(path) {
|
|
2801
|
+
if (!path) {
|
|
2802
|
+
return [];
|
|
2803
|
+
}
|
|
2804
|
+
return path
|
|
2805
|
+
.split('.')
|
|
2806
|
+
.map(segment => segment.trim())
|
|
2807
|
+
.filter(segment => segment.length > 0);
|
|
2808
|
+
}
|
|
2809
|
+
patchValue(formGroup, value) {
|
|
2810
|
+
patchForm(formGroup, value);
|
|
2811
|
+
}
|
|
2812
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicFormComponent, deps: [{ token: i1$1.FormBuilder }, { token: ProgrammabilityService }, { token: EventService }, { token: RegisterService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2813
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DynamicFormComponent, isStandalone: true, selector: "app-dynamic-form", inputs: { schema: "schema", formGroup: "formGroup", value: "value", showNav: "showNav", showNavButton: "showNavButton", showProgress: "showProgress", progressStatus: "progressStatus", activeNav: "activeNav" }, outputs: { valueChange: "valueChange", initialized: "initialized", onCommand: "onCommand", activeNavChange: "activeNavChange" }, providers: [
|
|
2814
|
+
EventService, ProgrammabilityService, RegisterService
|
|
2815
|
+
], usesOnChanges: true, ngImport: i0, template: "<form [formGroup]=\"formGroup\" class=\"ngs\">\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n\r\n <!-- #region progress -->\r\n <ngx-sirio-stepper-progress-bar *ngIf=\"showProgress\"\r\n (eventClick)=\"activateForm($event.data.label)\" \r\n [hasDropdown]=\"true\" \r\n [dropDownLabel]=\"Texts.Show\">\r\n <ngx-sirio-stepper-progress-item *ngFor=\"let form of forms\"\r\n [hasNavigation]=\"true\"\r\n [status]=\"getFormStatus(form)\"\r\n [label]=\"form.title\" />\r\n </ngx-sirio-stepper-progress-bar>\r\n <!-- #endregion -->\r\n\r\n <ng-container *ngIf=\"showNav\">\r\n\r\n <div class=\"col-md-4\">\r\n\r\n <!-- #region sidenav -->\r\n <ng-template #sidenavTemplate>\r\n <ngx-sirio-sidenav>\r\n <ng-container *ngFor=\"let form of forms, let sectionIndex = index\">\r\n <ngx-sirio-sidenav-item [isActive]=\"activeNav == sectionIndex\" (click)=\"activeNav = sectionIndex\">\r\n {{ form.title }}\r\n </ngx-sirio-sidenav-item>\r\n </ng-container>\r\n </ngx-sirio-sidenav>\r\n </ng-template>\r\n\r\n <ngx-sirio-sidenav-mobile class=\"d-block d-lg-none\"\r\n openMenuLabel=\"Apri Menu\"\r\n openMenuAriaLabel=\"Apri Menu\"\r\n closeMenuLabel=\"Chiudi Menu\"\r\n closeMenuAriaLabel=\"Chiudi Menu\">\r\n <ng-container *ngTemplateOutlet=\"sidenavTemplate\"></ng-container>\r\n </ngx-sirio-sidenav-mobile>\r\n <div class=\"d-none d-lg-block\">\r\n <ng-container *ngTemplateOutlet=\"sidenavTemplate\"></ng-container>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n </div>\r\n\r\n <div class=\"col-md-1\">\r\n <div class=\"separator-horizontal\"></div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <div class=\"content-element-form\" [ngClass]=\"showNav ? 'col-md-11' : 'col-md-16'\">\r\n\r\n <ng-container *ngFor=\"let form of forms, let sectionIndex = index\">\r\n <div *ngIf=\"activeNav == sectionIndex\"\r\n #default\r\n [register]=\"form\"\r\n [componentRef]=\"default\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(form.path)\" [rows]=\"form.rows\"></app-dynamic-fields>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showNavButton\">\r\n\r\n <div class=\"row section-navs\">\r\n <div class=\"col-8 col-md-8\">\r\n <ngx-sirio-button [color]=\"null\" [disabled]=\"!canNext()\" (click)=\"goNext()\" class=\"nextSection\">\r\n {{ Texts.NextSection }}\r\n <span class=\"fa-solid fa-chevron-right\" style=\"margin-left: 10px\"></span>\r\n </ngx-sirio-button>\r\n </div>\r\n <div class=\"col-8 col-md-8\">\r\n <ngx-sirio-button [color]=\"null\" [disabled]=\"!canPrevious()\" (click)=\"goPrevious()\" class=\"prevSection\">\r\n <span class=\"fa-solid fa-chevron-left\" style=\"margin-right: 10px\"></span>\r\n {{ Texts.PreviousSection }}\r\n </ngx-sirio-button>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</form>\r\n\r\n\r\n\r\n", styles: [".ngs .container,.ngs .container-fluid,.ngs .container-xxl,.ngs .container-xl,.ngs .container-lg,.ngs .container-md,.ngs .container-sm{--ngsgutter-x: 1.5rem;--ngsgutter-y: 0;width:100%;padding-right:calc(var(--ngsgutter-x) * .5);padding-left:calc(var(--ngsgutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.ngs .container-sm,.ngs .container{max-width:540px}}@media (min-width: 768px){.ngs .container-md,.ngs .container-sm,.ngs .container{max-width:720px}}@media (min-width: 992px){.ngs .container-lg,.ngs .container-md,.ngs .container-sm,.ngs .container{max-width:960px}}@media (min-width: 1200px){.ngs .container-xl,.ngs .container-lg,.ngs .container-md,.ngs .container-sm,.ngs .container{max-width:1140px}}@media (min-width: 1400px){.ngs .container-xxl,.ngs .container-xl,.ngs .container-lg,.ngs .container-md,.ngs .container-sm,.ngs .container{max-width:1320px}}.ngs :root{--ngsbreakpoint-xs: 0;--ngsbreakpoint-sm: 576px;--ngsbreakpoint-md: 768px;--ngsbreakpoint-lg: 992px;--ngsbreakpoint-xl: 1200px;--ngsbreakpoint-xxl: 1400px}.ngs .row{--ngsgutter-x: 1.5rem;--ngsgutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--ngsgutter-y));margin-right:calc(-.5 * var(--ngsgutter-x));margin-left:calc(-.5 * var(--ngsgutter-x))}.ngs .row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--ngsgutter-x) * .5);padding-left:calc(var(--ngsgutter-x) * .5);margin-top:var(--ngsgutter-y)}.ngs .col{flex:1 0 0%}.ngs .row-cols-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-auto{flex:0 0 auto;width:auto}.ngs .col-1{flex:0 0 auto;width:6.25%}.ngs .col-2{flex:0 0 auto;width:12.5%}.ngs .col-3{flex:0 0 auto;width:18.75%}.ngs .col-4{flex:0 0 auto;width:25%}.ngs .col-5{flex:0 0 auto;width:31.25%}.ngs .col-6{flex:0 0 auto;width:37.5%}.ngs .col-7{flex:0 0 auto;width:43.75%}.ngs .col-8{flex:0 0 auto;width:50%}.ngs .col-9{flex:0 0 auto;width:56.25%}.ngs .col-10{flex:0 0 auto;width:62.5%}.ngs .col-11{flex:0 0 auto;width:68.75%}.ngs .col-12{flex:0 0 auto;width:75%}.ngs .col-13{flex:0 0 auto;width:81.25%}.ngs .col-14{flex:0 0 auto;width:87.5%}.ngs .col-15{flex:0 0 auto;width:93.75%}.ngs .col-16{flex:0 0 auto;width:100%}.ngs .offset-1{margin-left:6.25%}.ngs .offset-2{margin-left:12.5%}.ngs .offset-3{margin-left:18.75%}.ngs .offset-4{margin-left:25%}.ngs .offset-5{margin-left:31.25%}.ngs .offset-6{margin-left:37.5%}.ngs .offset-7{margin-left:43.75%}.ngs .offset-8{margin-left:50%}.ngs .offset-9{margin-left:56.25%}.ngs .offset-10{margin-left:62.5%}.ngs .offset-11{margin-left:68.75%}.ngs .offset-12{margin-left:75%}.ngs .offset-13{margin-left:81.25%}.ngs .offset-14{margin-left:87.5%}.ngs .offset-15{margin-left:93.75%}.ngs .g-0,.ngs .gx-0{--ngsgutter-x: 0}.ngs .g-0,.ngs .gy-0{--ngsgutter-y: 0}.ngs .g-1,.ngs .gx-1{--ngsgutter-x: .25rem}.ngs .g-1,.ngs .gy-1{--ngsgutter-y: .25rem}.ngs .g-2,.ngs .gx-2{--ngsgutter-x: .5rem}.ngs .g-2,.ngs .gy-2{--ngsgutter-y: .5rem}.ngs .g-3,.ngs .gx-3{--ngsgutter-x: 1rem}.ngs .g-3,.ngs .gy-3{--ngsgutter-y: 1rem}.ngs .g-4,.ngs .gx-4{--ngsgutter-x: 1.5rem}.ngs .g-4,.ngs .gy-4{--ngsgutter-y: 1.5rem}.ngs .g-5,.ngs .gx-5{--ngsgutter-x: 3rem}.ngs .g-5,.ngs .gy-5{--ngsgutter-y: 3rem}@media (min-width: 576px){.ngs .col-sm{flex:1 0 0%}.ngs .row-cols-sm-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-sm-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-sm-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-sm-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-sm-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-sm-auto{flex:0 0 auto;width:auto}.ngs .col-sm-1{flex:0 0 auto;width:6.25%}.ngs .col-sm-2{flex:0 0 auto;width:12.5%}.ngs .col-sm-3{flex:0 0 auto;width:18.75%}.ngs .col-sm-4{flex:0 0 auto;width:25%}.ngs .col-sm-5{flex:0 0 auto;width:31.25%}.ngs .col-sm-6{flex:0 0 auto;width:37.5%}.ngs .col-sm-7{flex:0 0 auto;width:43.75%}.ngs .col-sm-8{flex:0 0 auto;width:50%}.ngs .col-sm-9{flex:0 0 auto;width:56.25%}.ngs .col-sm-10{flex:0 0 auto;width:62.5%}.ngs .col-sm-11{flex:0 0 auto;width:68.75%}.ngs .col-sm-12{flex:0 0 auto;width:75%}.ngs .col-sm-13{flex:0 0 auto;width:81.25%}.ngs .col-sm-14{flex:0 0 auto;width:87.5%}.ngs .col-sm-15{flex:0 0 auto;width:93.75%}.ngs .col-sm-16{flex:0 0 auto;width:100%}.ngs .offset-sm-0{margin-left:0}.ngs .offset-sm-1{margin-left:6.25%}.ngs .offset-sm-2{margin-left:12.5%}.ngs .offset-sm-3{margin-left:18.75%}.ngs .offset-sm-4{margin-left:25%}.ngs .offset-sm-5{margin-left:31.25%}.ngs .offset-sm-6{margin-left:37.5%}.ngs .offset-sm-7{margin-left:43.75%}.ngs .offset-sm-8{margin-left:50%}.ngs .offset-sm-9{margin-left:56.25%}.ngs .offset-sm-10{margin-left:62.5%}.ngs .offset-sm-11{margin-left:68.75%}.ngs .offset-sm-12{margin-left:75%}.ngs .offset-sm-13{margin-left:81.25%}.ngs .offset-sm-14{margin-left:87.5%}.ngs .offset-sm-15{margin-left:93.75%}.ngs .g-sm-0,.ngs .gx-sm-0{--ngsgutter-x: 0}.ngs .g-sm-0,.ngs .gy-sm-0{--ngsgutter-y: 0}.ngs .g-sm-1,.ngs .gx-sm-1{--ngsgutter-x: .25rem}.ngs .g-sm-1,.ngs .gy-sm-1{--ngsgutter-y: .25rem}.ngs .g-sm-2,.ngs .gx-sm-2{--ngsgutter-x: .5rem}.ngs .g-sm-2,.ngs .gy-sm-2{--ngsgutter-y: .5rem}.ngs .g-sm-3,.ngs .gx-sm-3{--ngsgutter-x: 1rem}.ngs .g-sm-3,.ngs .gy-sm-3{--ngsgutter-y: 1rem}.ngs .g-sm-4,.ngs .gx-sm-4{--ngsgutter-x: 1.5rem}.ngs .g-sm-4,.ngs .gy-sm-4{--ngsgutter-y: 1.5rem}.ngs .g-sm-5,.ngs .gx-sm-5{--ngsgutter-x: 3rem}.ngs .g-sm-5,.ngs .gy-sm-5{--ngsgutter-y: 3rem}}@media (min-width: 768px){.ngs .col-md{flex:1 0 0%}.ngs .row-cols-md-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-md-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-md-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-md-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-md-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-md-auto{flex:0 0 auto;width:auto}.ngs .col-md-1{flex:0 0 auto;width:6.25%}.ngs .col-md-2{flex:0 0 auto;width:12.5%}.ngs .col-md-3{flex:0 0 auto;width:18.75%}.ngs .col-md-4{flex:0 0 auto;width:25%}.ngs .col-md-5{flex:0 0 auto;width:31.25%}.ngs .col-md-6{flex:0 0 auto;width:37.5%}.ngs .col-md-7{flex:0 0 auto;width:43.75%}.ngs .col-md-8{flex:0 0 auto;width:50%}.ngs .col-md-9{flex:0 0 auto;width:56.25%}.ngs .col-md-10{flex:0 0 auto;width:62.5%}.ngs .col-md-11{flex:0 0 auto;width:68.75%}.ngs .col-md-12{flex:0 0 auto;width:75%}.ngs .col-md-13{flex:0 0 auto;width:81.25%}.ngs .col-md-14{flex:0 0 auto;width:87.5%}.ngs .col-md-15{flex:0 0 auto;width:93.75%}.ngs .col-md-16{flex:0 0 auto;width:100%}.ngs .offset-md-0{margin-left:0}.ngs .offset-md-1{margin-left:6.25%}.ngs .offset-md-2{margin-left:12.5%}.ngs .offset-md-3{margin-left:18.75%}.ngs .offset-md-4{margin-left:25%}.ngs .offset-md-5{margin-left:31.25%}.ngs .offset-md-6{margin-left:37.5%}.ngs .offset-md-7{margin-left:43.75%}.ngs .offset-md-8{margin-left:50%}.ngs .offset-md-9{margin-left:56.25%}.ngs .offset-md-10{margin-left:62.5%}.ngs .offset-md-11{margin-left:68.75%}.ngs .offset-md-12{margin-left:75%}.ngs .offset-md-13{margin-left:81.25%}.ngs .offset-md-14{margin-left:87.5%}.ngs .offset-md-15{margin-left:93.75%}.ngs .g-md-0,.ngs .gx-md-0{--ngsgutter-x: 0}.ngs .g-md-0,.ngs .gy-md-0{--ngsgutter-y: 0}.ngs .g-md-1,.ngs .gx-md-1{--ngsgutter-x: .25rem}.ngs .g-md-1,.ngs .gy-md-1{--ngsgutter-y: .25rem}.ngs .g-md-2,.ngs .gx-md-2{--ngsgutter-x: .5rem}.ngs .g-md-2,.ngs .gy-md-2{--ngsgutter-y: .5rem}.ngs .g-md-3,.ngs .gx-md-3{--ngsgutter-x: 1rem}.ngs .g-md-3,.ngs .gy-md-3{--ngsgutter-y: 1rem}.ngs .g-md-4,.ngs .gx-md-4{--ngsgutter-x: 1.5rem}.ngs .g-md-4,.ngs .gy-md-4{--ngsgutter-y: 1.5rem}.ngs .g-md-5,.ngs .gx-md-5{--ngsgutter-x: 3rem}.ngs .g-md-5,.ngs .gy-md-5{--ngsgutter-y: 3rem}}@media (min-width: 992px){.ngs .col-lg{flex:1 0 0%}.ngs .row-cols-lg-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-lg-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-lg-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-lg-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-lg-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-lg-auto{flex:0 0 auto;width:auto}.ngs .col-lg-1{flex:0 0 auto;width:6.25%}.ngs .col-lg-2{flex:0 0 auto;width:12.5%}.ngs .col-lg-3{flex:0 0 auto;width:18.75%}.ngs .col-lg-4{flex:0 0 auto;width:25%}.ngs .col-lg-5{flex:0 0 auto;width:31.25%}.ngs .col-lg-6{flex:0 0 auto;width:37.5%}.ngs .col-lg-7{flex:0 0 auto;width:43.75%}.ngs .col-lg-8{flex:0 0 auto;width:50%}.ngs .col-lg-9{flex:0 0 auto;width:56.25%}.ngs .col-lg-10{flex:0 0 auto;width:62.5%}.ngs .col-lg-11{flex:0 0 auto;width:68.75%}.ngs .col-lg-12{flex:0 0 auto;width:75%}.ngs .col-lg-13{flex:0 0 auto;width:81.25%}.ngs .col-lg-14{flex:0 0 auto;width:87.5%}.ngs .col-lg-15{flex:0 0 auto;width:93.75%}.ngs .col-lg-16{flex:0 0 auto;width:100%}.ngs .offset-lg-0{margin-left:0}.ngs .offset-lg-1{margin-left:6.25%}.ngs .offset-lg-2{margin-left:12.5%}.ngs .offset-lg-3{margin-left:18.75%}.ngs .offset-lg-4{margin-left:25%}.ngs .offset-lg-5{margin-left:31.25%}.ngs .offset-lg-6{margin-left:37.5%}.ngs .offset-lg-7{margin-left:43.75%}.ngs .offset-lg-8{margin-left:50%}.ngs .offset-lg-9{margin-left:56.25%}.ngs .offset-lg-10{margin-left:62.5%}.ngs .offset-lg-11{margin-left:68.75%}.ngs .offset-lg-12{margin-left:75%}.ngs .offset-lg-13{margin-left:81.25%}.ngs .offset-lg-14{margin-left:87.5%}.ngs .offset-lg-15{margin-left:93.75%}.ngs .g-lg-0,.ngs .gx-lg-0{--ngsgutter-x: 0}.ngs .g-lg-0,.ngs .gy-lg-0{--ngsgutter-y: 0}.ngs .g-lg-1,.ngs .gx-lg-1{--ngsgutter-x: .25rem}.ngs .g-lg-1,.ngs .gy-lg-1{--ngsgutter-y: .25rem}.ngs .g-lg-2,.ngs .gx-lg-2{--ngsgutter-x: .5rem}.ngs .g-lg-2,.ngs .gy-lg-2{--ngsgutter-y: .5rem}.ngs .g-lg-3,.ngs .gx-lg-3{--ngsgutter-x: 1rem}.ngs .g-lg-3,.ngs .gy-lg-3{--ngsgutter-y: 1rem}.ngs .g-lg-4,.ngs .gx-lg-4{--ngsgutter-x: 1.5rem}.ngs .g-lg-4,.ngs .gy-lg-4{--ngsgutter-y: 1.5rem}.ngs .g-lg-5,.ngs .gx-lg-5{--ngsgutter-x: 3rem}.ngs .g-lg-5,.ngs .gy-lg-5{--ngsgutter-y: 3rem}}@media (min-width: 1200px){.ngs .col-xl{flex:1 0 0%}.ngs .row-cols-xl-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-xl-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-xl-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-xl-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-xl-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-xl-auto{flex:0 0 auto;width:auto}.ngs .col-xl-1{flex:0 0 auto;width:6.25%}.ngs .col-xl-2{flex:0 0 auto;width:12.5%}.ngs .col-xl-3{flex:0 0 auto;width:18.75%}.ngs .col-xl-4{flex:0 0 auto;width:25%}.ngs .col-xl-5{flex:0 0 auto;width:31.25%}.ngs .col-xl-6{flex:0 0 auto;width:37.5%}.ngs .col-xl-7{flex:0 0 auto;width:43.75%}.ngs .col-xl-8{flex:0 0 auto;width:50%}.ngs .col-xl-9{flex:0 0 auto;width:56.25%}.ngs .col-xl-10{flex:0 0 auto;width:62.5%}.ngs .col-xl-11{flex:0 0 auto;width:68.75%}.ngs .col-xl-12{flex:0 0 auto;width:75%}.ngs .col-xl-13{flex:0 0 auto;width:81.25%}.ngs .col-xl-14{flex:0 0 auto;width:87.5%}.ngs .col-xl-15{flex:0 0 auto;width:93.75%}.ngs .col-xl-16{flex:0 0 auto;width:100%}.ngs .offset-xl-0{margin-left:0}.ngs .offset-xl-1{margin-left:6.25%}.ngs .offset-xl-2{margin-left:12.5%}.ngs .offset-xl-3{margin-left:18.75%}.ngs .offset-xl-4{margin-left:25%}.ngs .offset-xl-5{margin-left:31.25%}.ngs .offset-xl-6{margin-left:37.5%}.ngs .offset-xl-7{margin-left:43.75%}.ngs .offset-xl-8{margin-left:50%}.ngs .offset-xl-9{margin-left:56.25%}.ngs .offset-xl-10{margin-left:62.5%}.ngs .offset-xl-11{margin-left:68.75%}.ngs .offset-xl-12{margin-left:75%}.ngs .offset-xl-13{margin-left:81.25%}.ngs .offset-xl-14{margin-left:87.5%}.ngs .offset-xl-15{margin-left:93.75%}.ngs .g-xl-0,.ngs .gx-xl-0{--ngsgutter-x: 0}.ngs .g-xl-0,.ngs .gy-xl-0{--ngsgutter-y: 0}.ngs .g-xl-1,.ngs .gx-xl-1{--ngsgutter-x: .25rem}.ngs .g-xl-1,.ngs .gy-xl-1{--ngsgutter-y: .25rem}.ngs .g-xl-2,.ngs .gx-xl-2{--ngsgutter-x: .5rem}.ngs .g-xl-2,.ngs .gy-xl-2{--ngsgutter-y: .5rem}.ngs .g-xl-3,.ngs .gx-xl-3{--ngsgutter-x: 1rem}.ngs .g-xl-3,.ngs .gy-xl-3{--ngsgutter-y: 1rem}.ngs .g-xl-4,.ngs .gx-xl-4{--ngsgutter-x: 1.5rem}.ngs .g-xl-4,.ngs .gy-xl-4{--ngsgutter-y: 1.5rem}.ngs .g-xl-5,.ngs .gx-xl-5{--ngsgutter-x: 3rem}.ngs .g-xl-5,.ngs .gy-xl-5{--ngsgutter-y: 3rem}}@media (min-width: 1400px){.ngs .col-xxl{flex:1 0 0%}.ngs .row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-xxl-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-xxl-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-xxl-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-xxl-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-xxl-auto{flex:0 0 auto;width:auto}.ngs .col-xxl-1{flex:0 0 auto;width:6.25%}.ngs .col-xxl-2{flex:0 0 auto;width:12.5%}.ngs .col-xxl-3{flex:0 0 auto;width:18.75%}.ngs .col-xxl-4{flex:0 0 auto;width:25%}.ngs .col-xxl-5{flex:0 0 auto;width:31.25%}.ngs .col-xxl-6{flex:0 0 auto;width:37.5%}.ngs .col-xxl-7{flex:0 0 auto;width:43.75%}.ngs .col-xxl-8{flex:0 0 auto;width:50%}.ngs .col-xxl-9{flex:0 0 auto;width:56.25%}.ngs .col-xxl-10{flex:0 0 auto;width:62.5%}.ngs .col-xxl-11{flex:0 0 auto;width:68.75%}.ngs .col-xxl-12{flex:0 0 auto;width:75%}.ngs .col-xxl-13{flex:0 0 auto;width:81.25%}.ngs .col-xxl-14{flex:0 0 auto;width:87.5%}.ngs .col-xxl-15{flex:0 0 auto;width:93.75%}.ngs .col-xxl-16{flex:0 0 auto;width:100%}.ngs .offset-xxl-0{margin-left:0}.ngs .offset-xxl-1{margin-left:6.25%}.ngs .offset-xxl-2{margin-left:12.5%}.ngs .offset-xxl-3{margin-left:18.75%}.ngs .offset-xxl-4{margin-left:25%}.ngs .offset-xxl-5{margin-left:31.25%}.ngs .offset-xxl-6{margin-left:37.5%}.ngs .offset-xxl-7{margin-left:43.75%}.ngs .offset-xxl-8{margin-left:50%}.ngs .offset-xxl-9{margin-left:56.25%}.ngs .offset-xxl-10{margin-left:62.5%}.ngs .offset-xxl-11{margin-left:68.75%}.ngs .offset-xxl-12{margin-left:75%}.ngs .offset-xxl-13{margin-left:81.25%}.ngs .offset-xxl-14{margin-left:87.5%}.ngs .offset-xxl-15{margin-left:93.75%}.ngs .g-xxl-0,.ngs .gx-xxl-0{--ngsgutter-x: 0}.ngs .g-xxl-0,.ngs .gy-xxl-0{--ngsgutter-y: 0}.ngs .g-xxl-1,.ngs .gx-xxl-1{--ngsgutter-x: .25rem}.ngs .g-xxl-1,.ngs .gy-xxl-1{--ngsgutter-y: .25rem}.ngs .g-xxl-2,.ngs .gx-xxl-2{--ngsgutter-x: .5rem}.ngs .g-xxl-2,.ngs .gy-xxl-2{--ngsgutter-y: .5rem}.ngs .g-xxl-3,.ngs .gx-xxl-3{--ngsgutter-x: 1rem}.ngs .g-xxl-3,.ngs .gy-xxl-3{--ngsgutter-y: 1rem}.ngs .g-xxl-4,.ngs .gx-xxl-4{--ngsgutter-x: 1.5rem}.ngs .g-xxl-4,.ngs .gy-xxl-4{--ngsgutter-y: 1.5rem}.ngs .g-xxl-5,.ngs .gx-xxl-5{--ngsgutter-x: 3rem}.ngs .g-xxl-5,.ngs .gy-xxl-5{--ngsgutter-y: 3rem}}.ngs .d-inline{display:inline!important}.ngs .d-inline-block{display:inline-block!important}.ngs .d-block{display:block!important}.ngs .d-grid{display:grid!important}.ngs .d-inline-grid{display:inline-grid!important}.ngs .d-table{display:table!important}.ngs .d-table-row{display:table-row!important}.ngs .d-table-cell{display:table-cell!important}.ngs .d-flex{display:flex!important}.ngs .d-inline-flex{display:inline-flex!important}.ngs .d-none{display:none!important}.ngs .flex-fill{flex:1 1 auto!important}.ngs .flex-row{flex-direction:row!important}.ngs .flex-column{flex-direction:column!important}.ngs .flex-row-reverse{flex-direction:row-reverse!important}.ngs .flex-column-reverse{flex-direction:column-reverse!important}.ngs .flex-grow-0{flex-grow:0!important}.ngs .flex-grow-1{flex-grow:1!important}.ngs .flex-shrink-0{flex-shrink:0!important}.ngs .flex-shrink-1{flex-shrink:1!important}.ngs .flex-wrap{flex-wrap:wrap!important}.ngs .flex-nowrap{flex-wrap:nowrap!important}.ngs .flex-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-start{justify-content:flex-start!important}.ngs .justify-content-end{justify-content:flex-end!important}.ngs .justify-content-center{justify-content:center!important}.ngs .justify-content-between{justify-content:space-between!important}.ngs .justify-content-around{justify-content:space-around!important}.ngs .justify-content-evenly{justify-content:space-evenly!important}.ngs .align-items-start{align-items:flex-start!important}.ngs .align-items-end{align-items:flex-end!important}.ngs .align-items-center{align-items:center!important}.ngs .align-items-baseline{align-items:baseline!important}.ngs .align-items-stretch{align-items:stretch!important}.ngs .align-content-start{align-content:flex-start!important}.ngs .align-content-end{align-content:flex-end!important}.ngs .align-content-center{align-content:center!important}.ngs .align-content-between{align-content:space-between!important}.ngs .align-content-around{align-content:space-around!important}.ngs .align-content-stretch{align-content:stretch!important}.ngs .align-self-auto{align-self:auto!important}.ngs .align-self-start{align-self:flex-start!important}.ngs .align-self-end{align-self:flex-end!important}.ngs .align-self-center{align-self:center!important}.ngs .align-self-baseline{align-self:baseline!important}.ngs .align-self-stretch{align-self:stretch!important}.ngs .order-first{order:-1!important}.ngs .order-0{order:0!important}.ngs .order-1{order:1!important}.ngs .order-2{order:2!important}.ngs .order-3{order:3!important}.ngs .order-4{order:4!important}.ngs .order-5{order:5!important}.ngs .order-last{order:6!important}.ngs .m-0{margin:0!important}.ngs .m-1{margin:.25rem!important}.ngs .m-2{margin:.5rem!important}.ngs .m-3{margin:1rem!important}.ngs .m-4{margin:1.5rem!important}.ngs .m-5{margin:3rem!important}.ngs .m-auto{margin:auto!important}.ngs .mx-0{margin-right:0!important;margin-left:0!important}.ngs .mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-0{margin-top:0!important}.ngs .mt-1{margin-top:.25rem!important}.ngs .mt-2{margin-top:.5rem!important}.ngs .mt-3{margin-top:1rem!important}.ngs .mt-4{margin-top:1.5rem!important}.ngs .mt-5{margin-top:3rem!important}.ngs .mt-auto{margin-top:auto!important}.ngs .me-0{margin-right:0!important}.ngs .me-1{margin-right:.25rem!important}.ngs .me-2{margin-right:.5rem!important}.ngs .me-3{margin-right:1rem!important}.ngs .me-4{margin-right:1.5rem!important}.ngs .me-5{margin-right:3rem!important}.ngs .me-auto{margin-right:auto!important}.ngs .mb-0{margin-bottom:0!important}.ngs .mb-1{margin-bottom:.25rem!important}.ngs .mb-2{margin-bottom:.5rem!important}.ngs .mb-3{margin-bottom:1rem!important}.ngs .mb-4{margin-bottom:1.5rem!important}.ngs .mb-5{margin-bottom:3rem!important}.ngs .mb-auto{margin-bottom:auto!important}.ngs .ms-0{margin-left:0!important}.ngs .ms-1{margin-left:.25rem!important}.ngs .ms-2{margin-left:.5rem!important}.ngs .ms-3{margin-left:1rem!important}.ngs .ms-4{margin-left:1.5rem!important}.ngs .ms-5{margin-left:3rem!important}.ngs .ms-auto{margin-left:auto!important}.ngs .p-0{padding:0!important}.ngs .p-1{padding:.25rem!important}.ngs .p-2{padding:.5rem!important}.ngs .p-3{padding:1rem!important}.ngs .p-4{padding:1.5rem!important}.ngs .p-5{padding:3rem!important}.ngs .px-0{padding-right:0!important;padding-left:0!important}.ngs .px-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-0{padding-top:0!important}.ngs .pt-1{padding-top:.25rem!important}.ngs .pt-2{padding-top:.5rem!important}.ngs .pt-3{padding-top:1rem!important}.ngs .pt-4{padding-top:1.5rem!important}.ngs .pt-5{padding-top:3rem!important}.ngs .pe-0{padding-right:0!important}.ngs .pe-1{padding-right:.25rem!important}.ngs .pe-2{padding-right:.5rem!important}.ngs .pe-3{padding-right:1rem!important}.ngs .pe-4{padding-right:1.5rem!important}.ngs .pe-5{padding-right:3rem!important}.ngs .pb-0{padding-bottom:0!important}.ngs .pb-1{padding-bottom:.25rem!important}.ngs .pb-2{padding-bottom:.5rem!important}.ngs .pb-3{padding-bottom:1rem!important}.ngs .pb-4{padding-bottom:1.5rem!important}.ngs .pb-5{padding-bottom:3rem!important}.ngs .ps-0{padding-left:0!important}.ngs .ps-1{padding-left:.25rem!important}.ngs .ps-2{padding-left:.5rem!important}.ngs .ps-3{padding-left:1rem!important}.ngs .ps-4{padding-left:1.5rem!important}.ngs .ps-5{padding-left:3rem!important}@media (min-width: 576px){.ngs .d-sm-inline{display:inline!important}.ngs .d-sm-inline-block{display:inline-block!important}.ngs .d-sm-block{display:block!important}.ngs .d-sm-grid{display:grid!important}.ngs .d-sm-inline-grid{display:inline-grid!important}.ngs .d-sm-table{display:table!important}.ngs .d-sm-table-row{display:table-row!important}.ngs .d-sm-table-cell{display:table-cell!important}.ngs .d-sm-flex{display:flex!important}.ngs .d-sm-inline-flex{display:inline-flex!important}.ngs .d-sm-none{display:none!important}.ngs .flex-sm-fill{flex:1 1 auto!important}.ngs .flex-sm-row{flex-direction:row!important}.ngs .flex-sm-column{flex-direction:column!important}.ngs .flex-sm-row-reverse{flex-direction:row-reverse!important}.ngs .flex-sm-column-reverse{flex-direction:column-reverse!important}.ngs .flex-sm-grow-0{flex-grow:0!important}.ngs .flex-sm-grow-1{flex-grow:1!important}.ngs .flex-sm-shrink-0{flex-shrink:0!important}.ngs .flex-sm-shrink-1{flex-shrink:1!important}.ngs .flex-sm-wrap{flex-wrap:wrap!important}.ngs .flex-sm-nowrap{flex-wrap:nowrap!important}.ngs .flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-sm-start{justify-content:flex-start!important}.ngs .justify-content-sm-end{justify-content:flex-end!important}.ngs .justify-content-sm-center{justify-content:center!important}.ngs .justify-content-sm-between{justify-content:space-between!important}.ngs .justify-content-sm-around{justify-content:space-around!important}.ngs .justify-content-sm-evenly{justify-content:space-evenly!important}.ngs .align-items-sm-start{align-items:flex-start!important}.ngs .align-items-sm-end{align-items:flex-end!important}.ngs .align-items-sm-center{align-items:center!important}.ngs .align-items-sm-baseline{align-items:baseline!important}.ngs .align-items-sm-stretch{align-items:stretch!important}.ngs .align-content-sm-start{align-content:flex-start!important}.ngs .align-content-sm-end{align-content:flex-end!important}.ngs .align-content-sm-center{align-content:center!important}.ngs .align-content-sm-between{align-content:space-between!important}.ngs .align-content-sm-around{align-content:space-around!important}.ngs .align-content-sm-stretch{align-content:stretch!important}.ngs .align-self-sm-auto{align-self:auto!important}.ngs .align-self-sm-start{align-self:flex-start!important}.ngs .align-self-sm-end{align-self:flex-end!important}.ngs .align-self-sm-center{align-self:center!important}.ngs .align-self-sm-baseline{align-self:baseline!important}.ngs .align-self-sm-stretch{align-self:stretch!important}.ngs .order-sm-first{order:-1!important}.ngs .order-sm-0{order:0!important}.ngs .order-sm-1{order:1!important}.ngs .order-sm-2{order:2!important}.ngs .order-sm-3{order:3!important}.ngs .order-sm-4{order:4!important}.ngs .order-sm-5{order:5!important}.ngs .order-sm-last{order:6!important}.ngs .m-sm-0{margin:0!important}.ngs .m-sm-1{margin:.25rem!important}.ngs .m-sm-2{margin:.5rem!important}.ngs .m-sm-3{margin:1rem!important}.ngs .m-sm-4{margin:1.5rem!important}.ngs .m-sm-5{margin:3rem!important}.ngs .m-sm-auto{margin:auto!important}.ngs .mx-sm-0{margin-right:0!important;margin-left:0!important}.ngs .mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-sm-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-sm-0{margin-top:0!important}.ngs .mt-sm-1{margin-top:.25rem!important}.ngs .mt-sm-2{margin-top:.5rem!important}.ngs .mt-sm-3{margin-top:1rem!important}.ngs .mt-sm-4{margin-top:1.5rem!important}.ngs .mt-sm-5{margin-top:3rem!important}.ngs .mt-sm-auto{margin-top:auto!important}.ngs .me-sm-0{margin-right:0!important}.ngs .me-sm-1{margin-right:.25rem!important}.ngs .me-sm-2{margin-right:.5rem!important}.ngs .me-sm-3{margin-right:1rem!important}.ngs .me-sm-4{margin-right:1.5rem!important}.ngs .me-sm-5{margin-right:3rem!important}.ngs .me-sm-auto{margin-right:auto!important}.ngs .mb-sm-0{margin-bottom:0!important}.ngs .mb-sm-1{margin-bottom:.25rem!important}.ngs .mb-sm-2{margin-bottom:.5rem!important}.ngs .mb-sm-3{margin-bottom:1rem!important}.ngs .mb-sm-4{margin-bottom:1.5rem!important}.ngs .mb-sm-5{margin-bottom:3rem!important}.ngs .mb-sm-auto{margin-bottom:auto!important}.ngs .ms-sm-0{margin-left:0!important}.ngs .ms-sm-1{margin-left:.25rem!important}.ngs .ms-sm-2{margin-left:.5rem!important}.ngs .ms-sm-3{margin-left:1rem!important}.ngs .ms-sm-4{margin-left:1.5rem!important}.ngs .ms-sm-5{margin-left:3rem!important}.ngs .ms-sm-auto{margin-left:auto!important}.ngs .p-sm-0{padding:0!important}.ngs .p-sm-1{padding:.25rem!important}.ngs .p-sm-2{padding:.5rem!important}.ngs .p-sm-3{padding:1rem!important}.ngs .p-sm-4{padding:1.5rem!important}.ngs .p-sm-5{padding:3rem!important}.ngs .px-sm-0{padding-right:0!important;padding-left:0!important}.ngs .px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-sm-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-sm-0{padding-top:0!important}.ngs .pt-sm-1{padding-top:.25rem!important}.ngs .pt-sm-2{padding-top:.5rem!important}.ngs .pt-sm-3{padding-top:1rem!important}.ngs .pt-sm-4{padding-top:1.5rem!important}.ngs .pt-sm-5{padding-top:3rem!important}.ngs .pe-sm-0{padding-right:0!important}.ngs .pe-sm-1{padding-right:.25rem!important}.ngs .pe-sm-2{padding-right:.5rem!important}.ngs .pe-sm-3{padding-right:1rem!important}.ngs .pe-sm-4{padding-right:1.5rem!important}.ngs .pe-sm-5{padding-right:3rem!important}.ngs .pb-sm-0{padding-bottom:0!important}.ngs .pb-sm-1{padding-bottom:.25rem!important}.ngs .pb-sm-2{padding-bottom:.5rem!important}.ngs .pb-sm-3{padding-bottom:1rem!important}.ngs .pb-sm-4{padding-bottom:1.5rem!important}.ngs .pb-sm-5{padding-bottom:3rem!important}.ngs .ps-sm-0{padding-left:0!important}.ngs .ps-sm-1{padding-left:.25rem!important}.ngs .ps-sm-2{padding-left:.5rem!important}.ngs .ps-sm-3{padding-left:1rem!important}.ngs .ps-sm-4{padding-left:1.5rem!important}.ngs .ps-sm-5{padding-left:3rem!important}}@media (min-width: 768px){.ngs .d-md-inline{display:inline!important}.ngs .d-md-inline-block{display:inline-block!important}.ngs .d-md-block{display:block!important}.ngs .d-md-grid{display:grid!important}.ngs .d-md-inline-grid{display:inline-grid!important}.ngs .d-md-table{display:table!important}.ngs .d-md-table-row{display:table-row!important}.ngs .d-md-table-cell{display:table-cell!important}.ngs .d-md-flex{display:flex!important}.ngs .d-md-inline-flex{display:inline-flex!important}.ngs .d-md-none{display:none!important}.ngs .flex-md-fill{flex:1 1 auto!important}.ngs .flex-md-row{flex-direction:row!important}.ngs .flex-md-column{flex-direction:column!important}.ngs .flex-md-row-reverse{flex-direction:row-reverse!important}.ngs .flex-md-column-reverse{flex-direction:column-reverse!important}.ngs .flex-md-grow-0{flex-grow:0!important}.ngs .flex-md-grow-1{flex-grow:1!important}.ngs .flex-md-shrink-0{flex-shrink:0!important}.ngs .flex-md-shrink-1{flex-shrink:1!important}.ngs .flex-md-wrap{flex-wrap:wrap!important}.ngs .flex-md-nowrap{flex-wrap:nowrap!important}.ngs .flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-md-start{justify-content:flex-start!important}.ngs .justify-content-md-end{justify-content:flex-end!important}.ngs .justify-content-md-center{justify-content:center!important}.ngs .justify-content-md-between{justify-content:space-between!important}.ngs .justify-content-md-around{justify-content:space-around!important}.ngs .justify-content-md-evenly{justify-content:space-evenly!important}.ngs .align-items-md-start{align-items:flex-start!important}.ngs .align-items-md-end{align-items:flex-end!important}.ngs .align-items-md-center{align-items:center!important}.ngs .align-items-md-baseline{align-items:baseline!important}.ngs .align-items-md-stretch{align-items:stretch!important}.ngs .align-content-md-start{align-content:flex-start!important}.ngs .align-content-md-end{align-content:flex-end!important}.ngs .align-content-md-center{align-content:center!important}.ngs .align-content-md-between{align-content:space-between!important}.ngs .align-content-md-around{align-content:space-around!important}.ngs .align-content-md-stretch{align-content:stretch!important}.ngs .align-self-md-auto{align-self:auto!important}.ngs .align-self-md-start{align-self:flex-start!important}.ngs .align-self-md-end{align-self:flex-end!important}.ngs .align-self-md-center{align-self:center!important}.ngs .align-self-md-baseline{align-self:baseline!important}.ngs .align-self-md-stretch{align-self:stretch!important}.ngs .order-md-first{order:-1!important}.ngs .order-md-0{order:0!important}.ngs .order-md-1{order:1!important}.ngs .order-md-2{order:2!important}.ngs .order-md-3{order:3!important}.ngs .order-md-4{order:4!important}.ngs .order-md-5{order:5!important}.ngs .order-md-last{order:6!important}.ngs .m-md-0{margin:0!important}.ngs .m-md-1{margin:.25rem!important}.ngs .m-md-2{margin:.5rem!important}.ngs .m-md-3{margin:1rem!important}.ngs .m-md-4{margin:1.5rem!important}.ngs .m-md-5{margin:3rem!important}.ngs .m-md-auto{margin:auto!important}.ngs .mx-md-0{margin-right:0!important;margin-left:0!important}.ngs .mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-md-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-md-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-md-0{margin-top:0!important}.ngs .mt-md-1{margin-top:.25rem!important}.ngs .mt-md-2{margin-top:.5rem!important}.ngs .mt-md-3{margin-top:1rem!important}.ngs .mt-md-4{margin-top:1.5rem!important}.ngs .mt-md-5{margin-top:3rem!important}.ngs .mt-md-auto{margin-top:auto!important}.ngs .me-md-0{margin-right:0!important}.ngs .me-md-1{margin-right:.25rem!important}.ngs .me-md-2{margin-right:.5rem!important}.ngs .me-md-3{margin-right:1rem!important}.ngs .me-md-4{margin-right:1.5rem!important}.ngs .me-md-5{margin-right:3rem!important}.ngs .me-md-auto{margin-right:auto!important}.ngs .mb-md-0{margin-bottom:0!important}.ngs .mb-md-1{margin-bottom:.25rem!important}.ngs .mb-md-2{margin-bottom:.5rem!important}.ngs .mb-md-3{margin-bottom:1rem!important}.ngs .mb-md-4{margin-bottom:1.5rem!important}.ngs .mb-md-5{margin-bottom:3rem!important}.ngs .mb-md-auto{margin-bottom:auto!important}.ngs .ms-md-0{margin-left:0!important}.ngs .ms-md-1{margin-left:.25rem!important}.ngs .ms-md-2{margin-left:.5rem!important}.ngs .ms-md-3{margin-left:1rem!important}.ngs .ms-md-4{margin-left:1.5rem!important}.ngs .ms-md-5{margin-left:3rem!important}.ngs .ms-md-auto{margin-left:auto!important}.ngs .p-md-0{padding:0!important}.ngs .p-md-1{padding:.25rem!important}.ngs .p-md-2{padding:.5rem!important}.ngs .p-md-3{padding:1rem!important}.ngs .p-md-4{padding:1.5rem!important}.ngs .p-md-5{padding:3rem!important}.ngs .px-md-0{padding-right:0!important;padding-left:0!important}.ngs .px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-md-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-md-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-md-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-md-0{padding-top:0!important}.ngs .pt-md-1{padding-top:.25rem!important}.ngs .pt-md-2{padding-top:.5rem!important}.ngs .pt-md-3{padding-top:1rem!important}.ngs .pt-md-4{padding-top:1.5rem!important}.ngs .pt-md-5{padding-top:3rem!important}.ngs .pe-md-0{padding-right:0!important}.ngs .pe-md-1{padding-right:.25rem!important}.ngs .pe-md-2{padding-right:.5rem!important}.ngs .pe-md-3{padding-right:1rem!important}.ngs .pe-md-4{padding-right:1.5rem!important}.ngs .pe-md-5{padding-right:3rem!important}.ngs .pb-md-0{padding-bottom:0!important}.ngs .pb-md-1{padding-bottom:.25rem!important}.ngs .pb-md-2{padding-bottom:.5rem!important}.ngs .pb-md-3{padding-bottom:1rem!important}.ngs .pb-md-4{padding-bottom:1.5rem!important}.ngs .pb-md-5{padding-bottom:3rem!important}.ngs .ps-md-0{padding-left:0!important}.ngs .ps-md-1{padding-left:.25rem!important}.ngs .ps-md-2{padding-left:.5rem!important}.ngs .ps-md-3{padding-left:1rem!important}.ngs .ps-md-4{padding-left:1.5rem!important}.ngs .ps-md-5{padding-left:3rem!important}}@media (min-width: 992px){.ngs .d-lg-inline{display:inline!important}.ngs .d-lg-inline-block{display:inline-block!important}.ngs .d-lg-block{display:block!important}.ngs .d-lg-grid{display:grid!important}.ngs .d-lg-inline-grid{display:inline-grid!important}.ngs .d-lg-table{display:table!important}.ngs .d-lg-table-row{display:table-row!important}.ngs .d-lg-table-cell{display:table-cell!important}.ngs .d-lg-flex{display:flex!important}.ngs .d-lg-inline-flex{display:inline-flex!important}.ngs .d-lg-none{display:none!important}.ngs .flex-lg-fill{flex:1 1 auto!important}.ngs .flex-lg-row{flex-direction:row!important}.ngs .flex-lg-column{flex-direction:column!important}.ngs .flex-lg-row-reverse{flex-direction:row-reverse!important}.ngs .flex-lg-column-reverse{flex-direction:column-reverse!important}.ngs .flex-lg-grow-0{flex-grow:0!important}.ngs .flex-lg-grow-1{flex-grow:1!important}.ngs .flex-lg-shrink-0{flex-shrink:0!important}.ngs .flex-lg-shrink-1{flex-shrink:1!important}.ngs .flex-lg-wrap{flex-wrap:wrap!important}.ngs .flex-lg-nowrap{flex-wrap:nowrap!important}.ngs .flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-lg-start{justify-content:flex-start!important}.ngs .justify-content-lg-end{justify-content:flex-end!important}.ngs .justify-content-lg-center{justify-content:center!important}.ngs .justify-content-lg-between{justify-content:space-between!important}.ngs .justify-content-lg-around{justify-content:space-around!important}.ngs .justify-content-lg-evenly{justify-content:space-evenly!important}.ngs .align-items-lg-start{align-items:flex-start!important}.ngs .align-items-lg-end{align-items:flex-end!important}.ngs .align-items-lg-center{align-items:center!important}.ngs .align-items-lg-baseline{align-items:baseline!important}.ngs .align-items-lg-stretch{align-items:stretch!important}.ngs .align-content-lg-start{align-content:flex-start!important}.ngs .align-content-lg-end{align-content:flex-end!important}.ngs .align-content-lg-center{align-content:center!important}.ngs .align-content-lg-between{align-content:space-between!important}.ngs .align-content-lg-around{align-content:space-around!important}.ngs .align-content-lg-stretch{align-content:stretch!important}.ngs .align-self-lg-auto{align-self:auto!important}.ngs .align-self-lg-start{align-self:flex-start!important}.ngs .align-self-lg-end{align-self:flex-end!important}.ngs .align-self-lg-center{align-self:center!important}.ngs .align-self-lg-baseline{align-self:baseline!important}.ngs .align-self-lg-stretch{align-self:stretch!important}.ngs .order-lg-first{order:-1!important}.ngs .order-lg-0{order:0!important}.ngs .order-lg-1{order:1!important}.ngs .order-lg-2{order:2!important}.ngs .order-lg-3{order:3!important}.ngs .order-lg-4{order:4!important}.ngs .order-lg-5{order:5!important}.ngs .order-lg-last{order:6!important}.ngs .m-lg-0{margin:0!important}.ngs .m-lg-1{margin:.25rem!important}.ngs .m-lg-2{margin:.5rem!important}.ngs .m-lg-3{margin:1rem!important}.ngs .m-lg-4{margin:1.5rem!important}.ngs .m-lg-5{margin:3rem!important}.ngs .m-lg-auto{margin:auto!important}.ngs .mx-lg-0{margin-right:0!important;margin-left:0!important}.ngs .mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-lg-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-lg-0{margin-top:0!important}.ngs .mt-lg-1{margin-top:.25rem!important}.ngs .mt-lg-2{margin-top:.5rem!important}.ngs .mt-lg-3{margin-top:1rem!important}.ngs .mt-lg-4{margin-top:1.5rem!important}.ngs .mt-lg-5{margin-top:3rem!important}.ngs .mt-lg-auto{margin-top:auto!important}.ngs .me-lg-0{margin-right:0!important}.ngs .me-lg-1{margin-right:.25rem!important}.ngs .me-lg-2{margin-right:.5rem!important}.ngs .me-lg-3{margin-right:1rem!important}.ngs .me-lg-4{margin-right:1.5rem!important}.ngs .me-lg-5{margin-right:3rem!important}.ngs .me-lg-auto{margin-right:auto!important}.ngs .mb-lg-0{margin-bottom:0!important}.ngs .mb-lg-1{margin-bottom:.25rem!important}.ngs .mb-lg-2{margin-bottom:.5rem!important}.ngs .mb-lg-3{margin-bottom:1rem!important}.ngs .mb-lg-4{margin-bottom:1.5rem!important}.ngs .mb-lg-5{margin-bottom:3rem!important}.ngs .mb-lg-auto{margin-bottom:auto!important}.ngs .ms-lg-0{margin-left:0!important}.ngs .ms-lg-1{margin-left:.25rem!important}.ngs .ms-lg-2{margin-left:.5rem!important}.ngs .ms-lg-3{margin-left:1rem!important}.ngs .ms-lg-4{margin-left:1.5rem!important}.ngs .ms-lg-5{margin-left:3rem!important}.ngs .ms-lg-auto{margin-left:auto!important}.ngs .p-lg-0{padding:0!important}.ngs .p-lg-1{padding:.25rem!important}.ngs .p-lg-2{padding:.5rem!important}.ngs .p-lg-3{padding:1rem!important}.ngs .p-lg-4{padding:1.5rem!important}.ngs .p-lg-5{padding:3rem!important}.ngs .px-lg-0{padding-right:0!important;padding-left:0!important}.ngs .px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-lg-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-lg-0{padding-top:0!important}.ngs .pt-lg-1{padding-top:.25rem!important}.ngs .pt-lg-2{padding-top:.5rem!important}.ngs .pt-lg-3{padding-top:1rem!important}.ngs .pt-lg-4{padding-top:1.5rem!important}.ngs .pt-lg-5{padding-top:3rem!important}.ngs .pe-lg-0{padding-right:0!important}.ngs .pe-lg-1{padding-right:.25rem!important}.ngs .pe-lg-2{padding-right:.5rem!important}.ngs .pe-lg-3{padding-right:1rem!important}.ngs .pe-lg-4{padding-right:1.5rem!important}.ngs .pe-lg-5{padding-right:3rem!important}.ngs .pb-lg-0{padding-bottom:0!important}.ngs .pb-lg-1{padding-bottom:.25rem!important}.ngs .pb-lg-2{padding-bottom:.5rem!important}.ngs .pb-lg-3{padding-bottom:1rem!important}.ngs .pb-lg-4{padding-bottom:1.5rem!important}.ngs .pb-lg-5{padding-bottom:3rem!important}.ngs .ps-lg-0{padding-left:0!important}.ngs .ps-lg-1{padding-left:.25rem!important}.ngs .ps-lg-2{padding-left:.5rem!important}.ngs .ps-lg-3{padding-left:1rem!important}.ngs .ps-lg-4{padding-left:1.5rem!important}.ngs .ps-lg-5{padding-left:3rem!important}}@media (min-width: 1200px){.ngs .d-xl-inline{display:inline!important}.ngs .d-xl-inline-block{display:inline-block!important}.ngs .d-xl-block{display:block!important}.ngs .d-xl-grid{display:grid!important}.ngs .d-xl-inline-grid{display:inline-grid!important}.ngs .d-xl-table{display:table!important}.ngs .d-xl-table-row{display:table-row!important}.ngs .d-xl-table-cell{display:table-cell!important}.ngs .d-xl-flex{display:flex!important}.ngs .d-xl-inline-flex{display:inline-flex!important}.ngs .d-xl-none{display:none!important}.ngs .flex-xl-fill{flex:1 1 auto!important}.ngs .flex-xl-row{flex-direction:row!important}.ngs .flex-xl-column{flex-direction:column!important}.ngs .flex-xl-row-reverse{flex-direction:row-reverse!important}.ngs .flex-xl-column-reverse{flex-direction:column-reverse!important}.ngs .flex-xl-grow-0{flex-grow:0!important}.ngs .flex-xl-grow-1{flex-grow:1!important}.ngs .flex-xl-shrink-0{flex-shrink:0!important}.ngs .flex-xl-shrink-1{flex-shrink:1!important}.ngs .flex-xl-wrap{flex-wrap:wrap!important}.ngs .flex-xl-nowrap{flex-wrap:nowrap!important}.ngs .flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-xl-start{justify-content:flex-start!important}.ngs .justify-content-xl-end{justify-content:flex-end!important}.ngs .justify-content-xl-center{justify-content:center!important}.ngs .justify-content-xl-between{justify-content:space-between!important}.ngs .justify-content-xl-around{justify-content:space-around!important}.ngs .justify-content-xl-evenly{justify-content:space-evenly!important}.ngs .align-items-xl-start{align-items:flex-start!important}.ngs .align-items-xl-end{align-items:flex-end!important}.ngs .align-items-xl-center{align-items:center!important}.ngs .align-items-xl-baseline{align-items:baseline!important}.ngs .align-items-xl-stretch{align-items:stretch!important}.ngs .align-content-xl-start{align-content:flex-start!important}.ngs .align-content-xl-end{align-content:flex-end!important}.ngs .align-content-xl-center{align-content:center!important}.ngs .align-content-xl-between{align-content:space-between!important}.ngs .align-content-xl-around{align-content:space-around!important}.ngs .align-content-xl-stretch{align-content:stretch!important}.ngs .align-self-xl-auto{align-self:auto!important}.ngs .align-self-xl-start{align-self:flex-start!important}.ngs .align-self-xl-end{align-self:flex-end!important}.ngs .align-self-xl-center{align-self:center!important}.ngs .align-self-xl-baseline{align-self:baseline!important}.ngs .align-self-xl-stretch{align-self:stretch!important}.ngs .order-xl-first{order:-1!important}.ngs .order-xl-0{order:0!important}.ngs .order-xl-1{order:1!important}.ngs .order-xl-2{order:2!important}.ngs .order-xl-3{order:3!important}.ngs .order-xl-4{order:4!important}.ngs .order-xl-5{order:5!important}.ngs .order-xl-last{order:6!important}.ngs .m-xl-0{margin:0!important}.ngs .m-xl-1{margin:.25rem!important}.ngs .m-xl-2{margin:.5rem!important}.ngs .m-xl-3{margin:1rem!important}.ngs .m-xl-4{margin:1.5rem!important}.ngs .m-xl-5{margin:3rem!important}.ngs .m-xl-auto{margin:auto!important}.ngs .mx-xl-0{margin-right:0!important;margin-left:0!important}.ngs .mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-xl-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-xl-0{margin-top:0!important}.ngs .mt-xl-1{margin-top:.25rem!important}.ngs .mt-xl-2{margin-top:.5rem!important}.ngs .mt-xl-3{margin-top:1rem!important}.ngs .mt-xl-4{margin-top:1.5rem!important}.ngs .mt-xl-5{margin-top:3rem!important}.ngs .mt-xl-auto{margin-top:auto!important}.ngs .me-xl-0{margin-right:0!important}.ngs .me-xl-1{margin-right:.25rem!important}.ngs .me-xl-2{margin-right:.5rem!important}.ngs .me-xl-3{margin-right:1rem!important}.ngs .me-xl-4{margin-right:1.5rem!important}.ngs .me-xl-5{margin-right:3rem!important}.ngs .me-xl-auto{margin-right:auto!important}.ngs .mb-xl-0{margin-bottom:0!important}.ngs .mb-xl-1{margin-bottom:.25rem!important}.ngs .mb-xl-2{margin-bottom:.5rem!important}.ngs .mb-xl-3{margin-bottom:1rem!important}.ngs .mb-xl-4{margin-bottom:1.5rem!important}.ngs .mb-xl-5{margin-bottom:3rem!important}.ngs .mb-xl-auto{margin-bottom:auto!important}.ngs .ms-xl-0{margin-left:0!important}.ngs .ms-xl-1{margin-left:.25rem!important}.ngs .ms-xl-2{margin-left:.5rem!important}.ngs .ms-xl-3{margin-left:1rem!important}.ngs .ms-xl-4{margin-left:1.5rem!important}.ngs .ms-xl-5{margin-left:3rem!important}.ngs .ms-xl-auto{margin-left:auto!important}.ngs .p-xl-0{padding:0!important}.ngs .p-xl-1{padding:.25rem!important}.ngs .p-xl-2{padding:.5rem!important}.ngs .p-xl-3{padding:1rem!important}.ngs .p-xl-4{padding:1.5rem!important}.ngs .p-xl-5{padding:3rem!important}.ngs .px-xl-0{padding-right:0!important;padding-left:0!important}.ngs .px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-xl-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-xl-0{padding-top:0!important}.ngs .pt-xl-1{padding-top:.25rem!important}.ngs .pt-xl-2{padding-top:.5rem!important}.ngs .pt-xl-3{padding-top:1rem!important}.ngs .pt-xl-4{padding-top:1.5rem!important}.ngs .pt-xl-5{padding-top:3rem!important}.ngs .pe-xl-0{padding-right:0!important}.ngs .pe-xl-1{padding-right:.25rem!important}.ngs .pe-xl-2{padding-right:.5rem!important}.ngs .pe-xl-3{padding-right:1rem!important}.ngs .pe-xl-4{padding-right:1.5rem!important}.ngs .pe-xl-5{padding-right:3rem!important}.ngs .pb-xl-0{padding-bottom:0!important}.ngs .pb-xl-1{padding-bottom:.25rem!important}.ngs .pb-xl-2{padding-bottom:.5rem!important}.ngs .pb-xl-3{padding-bottom:1rem!important}.ngs .pb-xl-4{padding-bottom:1.5rem!important}.ngs .pb-xl-5{padding-bottom:3rem!important}.ngs .ps-xl-0{padding-left:0!important}.ngs .ps-xl-1{padding-left:.25rem!important}.ngs .ps-xl-2{padding-left:.5rem!important}.ngs .ps-xl-3{padding-left:1rem!important}.ngs .ps-xl-4{padding-left:1.5rem!important}.ngs .ps-xl-5{padding-left:3rem!important}}@media (min-width: 1400px){.ngs .d-xxl-inline{display:inline!important}.ngs .d-xxl-inline-block{display:inline-block!important}.ngs .d-xxl-block{display:block!important}.ngs .d-xxl-grid{display:grid!important}.ngs .d-xxl-inline-grid{display:inline-grid!important}.ngs .d-xxl-table{display:table!important}.ngs .d-xxl-table-row{display:table-row!important}.ngs .d-xxl-table-cell{display:table-cell!important}.ngs .d-xxl-flex{display:flex!important}.ngs .d-xxl-inline-flex{display:inline-flex!important}.ngs .d-xxl-none{display:none!important}.ngs .flex-xxl-fill{flex:1 1 auto!important}.ngs .flex-xxl-row{flex-direction:row!important}.ngs .flex-xxl-column{flex-direction:column!important}.ngs .flex-xxl-row-reverse{flex-direction:row-reverse!important}.ngs .flex-xxl-column-reverse{flex-direction:column-reverse!important}.ngs .flex-xxl-grow-0{flex-grow:0!important}.ngs .flex-xxl-grow-1{flex-grow:1!important}.ngs .flex-xxl-shrink-0{flex-shrink:0!important}.ngs .flex-xxl-shrink-1{flex-shrink:1!important}.ngs .flex-xxl-wrap{flex-wrap:wrap!important}.ngs .flex-xxl-nowrap{flex-wrap:nowrap!important}.ngs .flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-xxl-start{justify-content:flex-start!important}.ngs .justify-content-xxl-end{justify-content:flex-end!important}.ngs .justify-content-xxl-center{justify-content:center!important}.ngs .justify-content-xxl-between{justify-content:space-between!important}.ngs .justify-content-xxl-around{justify-content:space-around!important}.ngs .justify-content-xxl-evenly{justify-content:space-evenly!important}.ngs .align-items-xxl-start{align-items:flex-start!important}.ngs .align-items-xxl-end{align-items:flex-end!important}.ngs .align-items-xxl-center{align-items:center!important}.ngs .align-items-xxl-baseline{align-items:baseline!important}.ngs .align-items-xxl-stretch{align-items:stretch!important}.ngs .align-content-xxl-start{align-content:flex-start!important}.ngs .align-content-xxl-end{align-content:flex-end!important}.ngs .align-content-xxl-center{align-content:center!important}.ngs .align-content-xxl-between{align-content:space-between!important}.ngs .align-content-xxl-around{align-content:space-around!important}.ngs .align-content-xxl-stretch{align-content:stretch!important}.ngs .align-self-xxl-auto{align-self:auto!important}.ngs .align-self-xxl-start{align-self:flex-start!important}.ngs .align-self-xxl-end{align-self:flex-end!important}.ngs .align-self-xxl-center{align-self:center!important}.ngs .align-self-xxl-baseline{align-self:baseline!important}.ngs .align-self-xxl-stretch{align-self:stretch!important}.ngs .order-xxl-first{order:-1!important}.ngs .order-xxl-0{order:0!important}.ngs .order-xxl-1{order:1!important}.ngs .order-xxl-2{order:2!important}.ngs .order-xxl-3{order:3!important}.ngs .order-xxl-4{order:4!important}.ngs .order-xxl-5{order:5!important}.ngs .order-xxl-last{order:6!important}.ngs .m-xxl-0{margin:0!important}.ngs .m-xxl-1{margin:.25rem!important}.ngs .m-xxl-2{margin:.5rem!important}.ngs .m-xxl-3{margin:1rem!important}.ngs .m-xxl-4{margin:1.5rem!important}.ngs .m-xxl-5{margin:3rem!important}.ngs .m-xxl-auto{margin:auto!important}.ngs .mx-xxl-0{margin-right:0!important;margin-left:0!important}.ngs .mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-xxl-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-xxl-0{margin-top:0!important}.ngs .mt-xxl-1{margin-top:.25rem!important}.ngs .mt-xxl-2{margin-top:.5rem!important}.ngs .mt-xxl-3{margin-top:1rem!important}.ngs .mt-xxl-4{margin-top:1.5rem!important}.ngs .mt-xxl-5{margin-top:3rem!important}.ngs .mt-xxl-auto{margin-top:auto!important}.ngs .me-xxl-0{margin-right:0!important}.ngs .me-xxl-1{margin-right:.25rem!important}.ngs .me-xxl-2{margin-right:.5rem!important}.ngs .me-xxl-3{margin-right:1rem!important}.ngs .me-xxl-4{margin-right:1.5rem!important}.ngs .me-xxl-5{margin-right:3rem!important}.ngs .me-xxl-auto{margin-right:auto!important}.ngs .mb-xxl-0{margin-bottom:0!important}.ngs .mb-xxl-1{margin-bottom:.25rem!important}.ngs .mb-xxl-2{margin-bottom:.5rem!important}.ngs .mb-xxl-3{margin-bottom:1rem!important}.ngs .mb-xxl-4{margin-bottom:1.5rem!important}.ngs .mb-xxl-5{margin-bottom:3rem!important}.ngs .mb-xxl-auto{margin-bottom:auto!important}.ngs .ms-xxl-0{margin-left:0!important}.ngs .ms-xxl-1{margin-left:.25rem!important}.ngs .ms-xxl-2{margin-left:.5rem!important}.ngs .ms-xxl-3{margin-left:1rem!important}.ngs .ms-xxl-4{margin-left:1.5rem!important}.ngs .ms-xxl-5{margin-left:3rem!important}.ngs .ms-xxl-auto{margin-left:auto!important}.ngs .p-xxl-0{padding:0!important}.ngs .p-xxl-1{padding:.25rem!important}.ngs .p-xxl-2{padding:.5rem!important}.ngs .p-xxl-3{padding:1rem!important}.ngs .p-xxl-4{padding:1.5rem!important}.ngs .p-xxl-5{padding:3rem!important}.ngs .px-xxl-0{padding-right:0!important;padding-left:0!important}.ngs .px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-xxl-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-xxl-0{padding-top:0!important}.ngs .pt-xxl-1{padding-top:.25rem!important}.ngs .pt-xxl-2{padding-top:.5rem!important}.ngs .pt-xxl-3{padding-top:1rem!important}.ngs .pt-xxl-4{padding-top:1.5rem!important}.ngs .pt-xxl-5{padding-top:3rem!important}.ngs .pe-xxl-0{padding-right:0!important}.ngs .pe-xxl-1{padding-right:.25rem!important}.ngs .pe-xxl-2{padding-right:.5rem!important}.ngs .pe-xxl-3{padding-right:1rem!important}.ngs .pe-xxl-4{padding-right:1.5rem!important}.ngs .pe-xxl-5{padding-right:3rem!important}.ngs .pb-xxl-0{padding-bottom:0!important}.ngs .pb-xxl-1{padding-bottom:.25rem!important}.ngs .pb-xxl-2{padding-bottom:.5rem!important}.ngs .pb-xxl-3{padding-bottom:1rem!important}.ngs .pb-xxl-4{padding-bottom:1.5rem!important}.ngs .pb-xxl-5{padding-bottom:3rem!important}.ngs .ps-xxl-0{padding-left:0!important}.ngs .ps-xxl-1{padding-left:.25rem!important}.ngs .ps-xxl-2{padding-left:.5rem!important}.ngs .ps-xxl-3{padding-left:1rem!important}.ngs .ps-xxl-4{padding-left:1.5rem!important}.ngs .ps-xxl-5{padding-left:3rem!important}}@media print{.ngs .d-print-inline{display:inline!important}.ngs .d-print-inline-block{display:inline-block!important}.ngs .d-print-block{display:block!important}.ngs .d-print-grid{display:grid!important}.ngs .d-print-inline-grid{display:inline-grid!important}.ngs .d-print-table{display:table!important}.ngs .d-print-table-row{display:table-row!important}.ngs .d-print-table-cell{display:table-cell!important}.ngs .d-print-flex{display:flex!important}.ngs .d-print-inline-flex{display:inline-flex!important}.ngs .d-print-none{display:none!important}}\n", ".prevSection button{padding:5px 10px;float:left;margin-left:0}.nextSection button{padding:5px 10px;float:right;margin-left:0}.separator-horizontal{width:1px;height:100%;background-color:#d6cece;margin:0 auto}.content-element-form{position:relative;padding-bottom:70px}.section-navs{width:100%;position:absolute;bottom:0;background-color:#f2f6fc;padding:10px;flex-direction:row-reverse}.sirio-nav-item a{cursor:pointer}@media (max-width: 991px){.content-element-form{width:100%!important}}ngx-sirio-input-chip{margin-right:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: RegisterDirective, selector: "[register]", inputs: ["register", "componentRef"] }, { kind: "component", type: SirioSidenavMobileComponent, selector: "ngx-sirio-sidenav-mobile", inputs: ["openMenuLabel", "openMenuLabelSubtitile", "openMenuAriaLabel", "closeMenuLabel", "closeMenuAriaLabel", "closeMenuLabelSubtitile", "userProfileLabel", "userProfileType", "userProfileName", "userProfileSurname", "showUserInfo", "opened"] }, { kind: "component", type: SirioSidenavComponent, selector: "ngx-sirio-sidenav", inputs: ["sidenavTitle", "ariaLabel"] }, { kind: "component", type: SirioSidenavItemComponent, selector: "ngx-sirio-sidenav-item", inputs: ["labelTrigger", "isCustomNavItem", "isTrigger", "routerLinkUrl", "routerLinkFragment", "routerLinkQueryParams", "routerLinkQueryParamsHandling", "routerLinkState", "routerLinkRelativeTo", "routerLinkPreserveFragment", "routerLinkReplaceUrl", "href", "hrefTarget", "ariaLabelDesc", "isOpen", "isActive", "withTag", "tagType", "tagValue", "disabledState"] }, { kind: "component", type: SirioButtonComponent, selector: "ngx-sirio-button", inputs: ["ariaExpanded", "ariaControls", "ariaActivedescendant", "ariaHaspopup", "ariaLabel", "ariaRequired", "ariaInvalid", "ariaDescribedby", "icon", "title", "role", "color", "isFloating", "isExtended", "isLight", "isSmall", "disabled", "isDropdown", "type", "dismissType", "isBtnBlock"], outputs: ["clickEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: SirioStepperProgressBarComponent, selector: "ngx-sirio-stepper-progress-bar", inputs: ["ariaLabel", "hasDropdown", "dropDownLabel", "dropDownText"], outputs: ["eventClick"] }, { kind: "component", type: SirioStepperProgressItemComponent, selector: "ngx-sirio-stepper-progress-item", inputs: ["status", "hasNavigation", "screenReaderText", "label"] }, { kind: "component", type: DynamicFieldsComponent, selector: "app-dynamic-fields", inputs: ["rows", "formGroup"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
2816
|
+
}
|
|
2817
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicFormComponent, decorators: [{
|
|
2818
|
+
type: Component,
|
|
2819
|
+
args: [{ selector: 'app-dynamic-form', standalone: true, imports: [CommonModule, ReactiveFormsModule,
|
|
2820
|
+
RegisterDirective,
|
|
2821
|
+
SirioSidenavMobileComponent, SirioSidenavComponent, SirioSidenavItemComponent,
|
|
2822
|
+
SirioButtonComponent, SirioStepperProgressBarComponent, SirioStepperProgressItemComponent,
|
|
2823
|
+
DynamicFieldsComponent], providers: [
|
|
2824
|
+
EventService, ProgrammabilityService, RegisterService
|
|
2825
|
+
], encapsulation: ViewEncapsulation.None, template: "<form [formGroup]=\"formGroup\" class=\"ngs\">\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n\r\n <!-- #region progress -->\r\n <ngx-sirio-stepper-progress-bar *ngIf=\"showProgress\"\r\n (eventClick)=\"activateForm($event.data.label)\" \r\n [hasDropdown]=\"true\" \r\n [dropDownLabel]=\"Texts.Show\">\r\n <ngx-sirio-stepper-progress-item *ngFor=\"let form of forms\"\r\n [hasNavigation]=\"true\"\r\n [status]=\"getFormStatus(form)\"\r\n [label]=\"form.title\" />\r\n </ngx-sirio-stepper-progress-bar>\r\n <!-- #endregion -->\r\n\r\n <ng-container *ngIf=\"showNav\">\r\n\r\n <div class=\"col-md-4\">\r\n\r\n <!-- #region sidenav -->\r\n <ng-template #sidenavTemplate>\r\n <ngx-sirio-sidenav>\r\n <ng-container *ngFor=\"let form of forms, let sectionIndex = index\">\r\n <ngx-sirio-sidenav-item [isActive]=\"activeNav == sectionIndex\" (click)=\"activeNav = sectionIndex\">\r\n {{ form.title }}\r\n </ngx-sirio-sidenav-item>\r\n </ng-container>\r\n </ngx-sirio-sidenav>\r\n </ng-template>\r\n\r\n <ngx-sirio-sidenav-mobile class=\"d-block d-lg-none\"\r\n openMenuLabel=\"Apri Menu\"\r\n openMenuAriaLabel=\"Apri Menu\"\r\n closeMenuLabel=\"Chiudi Menu\"\r\n closeMenuAriaLabel=\"Chiudi Menu\">\r\n <ng-container *ngTemplateOutlet=\"sidenavTemplate\"></ng-container>\r\n </ngx-sirio-sidenav-mobile>\r\n <div class=\"d-none d-lg-block\">\r\n <ng-container *ngTemplateOutlet=\"sidenavTemplate\"></ng-container>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n </div>\r\n\r\n <div class=\"col-md-1\">\r\n <div class=\"separator-horizontal\"></div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <div class=\"content-element-form\" [ngClass]=\"showNav ? 'col-md-11' : 'col-md-16'\">\r\n\r\n <ng-container *ngFor=\"let form of forms, let sectionIndex = index\">\r\n <div *ngIf=\"activeNav == sectionIndex\"\r\n #default\r\n [register]=\"form\"\r\n [componentRef]=\"default\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(form.path)\" [rows]=\"form.rows\"></app-dynamic-fields>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showNavButton\">\r\n\r\n <div class=\"row section-navs\">\r\n <div class=\"col-8 col-md-8\">\r\n <ngx-sirio-button [color]=\"null\" [disabled]=\"!canNext()\" (click)=\"goNext()\" class=\"nextSection\">\r\n {{ Texts.NextSection }}\r\n <span class=\"fa-solid fa-chevron-right\" style=\"margin-left: 10px\"></span>\r\n </ngx-sirio-button>\r\n </div>\r\n <div class=\"col-8 col-md-8\">\r\n <ngx-sirio-button [color]=\"null\" [disabled]=\"!canPrevious()\" (click)=\"goPrevious()\" class=\"prevSection\">\r\n <span class=\"fa-solid fa-chevron-left\" style=\"margin-right: 10px\"></span>\r\n {{ Texts.PreviousSection }}\r\n </ngx-sirio-button>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</form>\r\n\r\n\r\n\r\n", styles: [".ngs .container,.ngs .container-fluid,.ngs .container-xxl,.ngs .container-xl,.ngs .container-lg,.ngs .container-md,.ngs .container-sm{--ngsgutter-x: 1.5rem;--ngsgutter-y: 0;width:100%;padding-right:calc(var(--ngsgutter-x) * .5);padding-left:calc(var(--ngsgutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.ngs .container-sm,.ngs .container{max-width:540px}}@media (min-width: 768px){.ngs .container-md,.ngs .container-sm,.ngs .container{max-width:720px}}@media (min-width: 992px){.ngs .container-lg,.ngs .container-md,.ngs .container-sm,.ngs .container{max-width:960px}}@media (min-width: 1200px){.ngs .container-xl,.ngs .container-lg,.ngs .container-md,.ngs .container-sm,.ngs .container{max-width:1140px}}@media (min-width: 1400px){.ngs .container-xxl,.ngs .container-xl,.ngs .container-lg,.ngs .container-md,.ngs .container-sm,.ngs .container{max-width:1320px}}.ngs :root{--ngsbreakpoint-xs: 0;--ngsbreakpoint-sm: 576px;--ngsbreakpoint-md: 768px;--ngsbreakpoint-lg: 992px;--ngsbreakpoint-xl: 1200px;--ngsbreakpoint-xxl: 1400px}.ngs .row{--ngsgutter-x: 1.5rem;--ngsgutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--ngsgutter-y));margin-right:calc(-.5 * var(--ngsgutter-x));margin-left:calc(-.5 * var(--ngsgutter-x))}.ngs .row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--ngsgutter-x) * .5);padding-left:calc(var(--ngsgutter-x) * .5);margin-top:var(--ngsgutter-y)}.ngs .col{flex:1 0 0%}.ngs .row-cols-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-auto{flex:0 0 auto;width:auto}.ngs .col-1{flex:0 0 auto;width:6.25%}.ngs .col-2{flex:0 0 auto;width:12.5%}.ngs .col-3{flex:0 0 auto;width:18.75%}.ngs .col-4{flex:0 0 auto;width:25%}.ngs .col-5{flex:0 0 auto;width:31.25%}.ngs .col-6{flex:0 0 auto;width:37.5%}.ngs .col-7{flex:0 0 auto;width:43.75%}.ngs .col-8{flex:0 0 auto;width:50%}.ngs .col-9{flex:0 0 auto;width:56.25%}.ngs .col-10{flex:0 0 auto;width:62.5%}.ngs .col-11{flex:0 0 auto;width:68.75%}.ngs .col-12{flex:0 0 auto;width:75%}.ngs .col-13{flex:0 0 auto;width:81.25%}.ngs .col-14{flex:0 0 auto;width:87.5%}.ngs .col-15{flex:0 0 auto;width:93.75%}.ngs .col-16{flex:0 0 auto;width:100%}.ngs .offset-1{margin-left:6.25%}.ngs .offset-2{margin-left:12.5%}.ngs .offset-3{margin-left:18.75%}.ngs .offset-4{margin-left:25%}.ngs .offset-5{margin-left:31.25%}.ngs .offset-6{margin-left:37.5%}.ngs .offset-7{margin-left:43.75%}.ngs .offset-8{margin-left:50%}.ngs .offset-9{margin-left:56.25%}.ngs .offset-10{margin-left:62.5%}.ngs .offset-11{margin-left:68.75%}.ngs .offset-12{margin-left:75%}.ngs .offset-13{margin-left:81.25%}.ngs .offset-14{margin-left:87.5%}.ngs .offset-15{margin-left:93.75%}.ngs .g-0,.ngs .gx-0{--ngsgutter-x: 0}.ngs .g-0,.ngs .gy-0{--ngsgutter-y: 0}.ngs .g-1,.ngs .gx-1{--ngsgutter-x: .25rem}.ngs .g-1,.ngs .gy-1{--ngsgutter-y: .25rem}.ngs .g-2,.ngs .gx-2{--ngsgutter-x: .5rem}.ngs .g-2,.ngs .gy-2{--ngsgutter-y: .5rem}.ngs .g-3,.ngs .gx-3{--ngsgutter-x: 1rem}.ngs .g-3,.ngs .gy-3{--ngsgutter-y: 1rem}.ngs .g-4,.ngs .gx-4{--ngsgutter-x: 1.5rem}.ngs .g-4,.ngs .gy-4{--ngsgutter-y: 1.5rem}.ngs .g-5,.ngs .gx-5{--ngsgutter-x: 3rem}.ngs .g-5,.ngs .gy-5{--ngsgutter-y: 3rem}@media (min-width: 576px){.ngs .col-sm{flex:1 0 0%}.ngs .row-cols-sm-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-sm-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-sm-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-sm-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-sm-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-sm-auto{flex:0 0 auto;width:auto}.ngs .col-sm-1{flex:0 0 auto;width:6.25%}.ngs .col-sm-2{flex:0 0 auto;width:12.5%}.ngs .col-sm-3{flex:0 0 auto;width:18.75%}.ngs .col-sm-4{flex:0 0 auto;width:25%}.ngs .col-sm-5{flex:0 0 auto;width:31.25%}.ngs .col-sm-6{flex:0 0 auto;width:37.5%}.ngs .col-sm-7{flex:0 0 auto;width:43.75%}.ngs .col-sm-8{flex:0 0 auto;width:50%}.ngs .col-sm-9{flex:0 0 auto;width:56.25%}.ngs .col-sm-10{flex:0 0 auto;width:62.5%}.ngs .col-sm-11{flex:0 0 auto;width:68.75%}.ngs .col-sm-12{flex:0 0 auto;width:75%}.ngs .col-sm-13{flex:0 0 auto;width:81.25%}.ngs .col-sm-14{flex:0 0 auto;width:87.5%}.ngs .col-sm-15{flex:0 0 auto;width:93.75%}.ngs .col-sm-16{flex:0 0 auto;width:100%}.ngs .offset-sm-0{margin-left:0}.ngs .offset-sm-1{margin-left:6.25%}.ngs .offset-sm-2{margin-left:12.5%}.ngs .offset-sm-3{margin-left:18.75%}.ngs .offset-sm-4{margin-left:25%}.ngs .offset-sm-5{margin-left:31.25%}.ngs .offset-sm-6{margin-left:37.5%}.ngs .offset-sm-7{margin-left:43.75%}.ngs .offset-sm-8{margin-left:50%}.ngs .offset-sm-9{margin-left:56.25%}.ngs .offset-sm-10{margin-left:62.5%}.ngs .offset-sm-11{margin-left:68.75%}.ngs .offset-sm-12{margin-left:75%}.ngs .offset-sm-13{margin-left:81.25%}.ngs .offset-sm-14{margin-left:87.5%}.ngs .offset-sm-15{margin-left:93.75%}.ngs .g-sm-0,.ngs .gx-sm-0{--ngsgutter-x: 0}.ngs .g-sm-0,.ngs .gy-sm-0{--ngsgutter-y: 0}.ngs .g-sm-1,.ngs .gx-sm-1{--ngsgutter-x: .25rem}.ngs .g-sm-1,.ngs .gy-sm-1{--ngsgutter-y: .25rem}.ngs .g-sm-2,.ngs .gx-sm-2{--ngsgutter-x: .5rem}.ngs .g-sm-2,.ngs .gy-sm-2{--ngsgutter-y: .5rem}.ngs .g-sm-3,.ngs .gx-sm-3{--ngsgutter-x: 1rem}.ngs .g-sm-3,.ngs .gy-sm-3{--ngsgutter-y: 1rem}.ngs .g-sm-4,.ngs .gx-sm-4{--ngsgutter-x: 1.5rem}.ngs .g-sm-4,.ngs .gy-sm-4{--ngsgutter-y: 1.5rem}.ngs .g-sm-5,.ngs .gx-sm-5{--ngsgutter-x: 3rem}.ngs .g-sm-5,.ngs .gy-sm-5{--ngsgutter-y: 3rem}}@media (min-width: 768px){.ngs .col-md{flex:1 0 0%}.ngs .row-cols-md-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-md-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-md-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-md-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-md-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-md-auto{flex:0 0 auto;width:auto}.ngs .col-md-1{flex:0 0 auto;width:6.25%}.ngs .col-md-2{flex:0 0 auto;width:12.5%}.ngs .col-md-3{flex:0 0 auto;width:18.75%}.ngs .col-md-4{flex:0 0 auto;width:25%}.ngs .col-md-5{flex:0 0 auto;width:31.25%}.ngs .col-md-6{flex:0 0 auto;width:37.5%}.ngs .col-md-7{flex:0 0 auto;width:43.75%}.ngs .col-md-8{flex:0 0 auto;width:50%}.ngs .col-md-9{flex:0 0 auto;width:56.25%}.ngs .col-md-10{flex:0 0 auto;width:62.5%}.ngs .col-md-11{flex:0 0 auto;width:68.75%}.ngs .col-md-12{flex:0 0 auto;width:75%}.ngs .col-md-13{flex:0 0 auto;width:81.25%}.ngs .col-md-14{flex:0 0 auto;width:87.5%}.ngs .col-md-15{flex:0 0 auto;width:93.75%}.ngs .col-md-16{flex:0 0 auto;width:100%}.ngs .offset-md-0{margin-left:0}.ngs .offset-md-1{margin-left:6.25%}.ngs .offset-md-2{margin-left:12.5%}.ngs .offset-md-3{margin-left:18.75%}.ngs .offset-md-4{margin-left:25%}.ngs .offset-md-5{margin-left:31.25%}.ngs .offset-md-6{margin-left:37.5%}.ngs .offset-md-7{margin-left:43.75%}.ngs .offset-md-8{margin-left:50%}.ngs .offset-md-9{margin-left:56.25%}.ngs .offset-md-10{margin-left:62.5%}.ngs .offset-md-11{margin-left:68.75%}.ngs .offset-md-12{margin-left:75%}.ngs .offset-md-13{margin-left:81.25%}.ngs .offset-md-14{margin-left:87.5%}.ngs .offset-md-15{margin-left:93.75%}.ngs .g-md-0,.ngs .gx-md-0{--ngsgutter-x: 0}.ngs .g-md-0,.ngs .gy-md-0{--ngsgutter-y: 0}.ngs .g-md-1,.ngs .gx-md-1{--ngsgutter-x: .25rem}.ngs .g-md-1,.ngs .gy-md-1{--ngsgutter-y: .25rem}.ngs .g-md-2,.ngs .gx-md-2{--ngsgutter-x: .5rem}.ngs .g-md-2,.ngs .gy-md-2{--ngsgutter-y: .5rem}.ngs .g-md-3,.ngs .gx-md-3{--ngsgutter-x: 1rem}.ngs .g-md-3,.ngs .gy-md-3{--ngsgutter-y: 1rem}.ngs .g-md-4,.ngs .gx-md-4{--ngsgutter-x: 1.5rem}.ngs .g-md-4,.ngs .gy-md-4{--ngsgutter-y: 1.5rem}.ngs .g-md-5,.ngs .gx-md-5{--ngsgutter-x: 3rem}.ngs .g-md-5,.ngs .gy-md-5{--ngsgutter-y: 3rem}}@media (min-width: 992px){.ngs .col-lg{flex:1 0 0%}.ngs .row-cols-lg-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-lg-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-lg-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-lg-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-lg-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-lg-auto{flex:0 0 auto;width:auto}.ngs .col-lg-1{flex:0 0 auto;width:6.25%}.ngs .col-lg-2{flex:0 0 auto;width:12.5%}.ngs .col-lg-3{flex:0 0 auto;width:18.75%}.ngs .col-lg-4{flex:0 0 auto;width:25%}.ngs .col-lg-5{flex:0 0 auto;width:31.25%}.ngs .col-lg-6{flex:0 0 auto;width:37.5%}.ngs .col-lg-7{flex:0 0 auto;width:43.75%}.ngs .col-lg-8{flex:0 0 auto;width:50%}.ngs .col-lg-9{flex:0 0 auto;width:56.25%}.ngs .col-lg-10{flex:0 0 auto;width:62.5%}.ngs .col-lg-11{flex:0 0 auto;width:68.75%}.ngs .col-lg-12{flex:0 0 auto;width:75%}.ngs .col-lg-13{flex:0 0 auto;width:81.25%}.ngs .col-lg-14{flex:0 0 auto;width:87.5%}.ngs .col-lg-15{flex:0 0 auto;width:93.75%}.ngs .col-lg-16{flex:0 0 auto;width:100%}.ngs .offset-lg-0{margin-left:0}.ngs .offset-lg-1{margin-left:6.25%}.ngs .offset-lg-2{margin-left:12.5%}.ngs .offset-lg-3{margin-left:18.75%}.ngs .offset-lg-4{margin-left:25%}.ngs .offset-lg-5{margin-left:31.25%}.ngs .offset-lg-6{margin-left:37.5%}.ngs .offset-lg-7{margin-left:43.75%}.ngs .offset-lg-8{margin-left:50%}.ngs .offset-lg-9{margin-left:56.25%}.ngs .offset-lg-10{margin-left:62.5%}.ngs .offset-lg-11{margin-left:68.75%}.ngs .offset-lg-12{margin-left:75%}.ngs .offset-lg-13{margin-left:81.25%}.ngs .offset-lg-14{margin-left:87.5%}.ngs .offset-lg-15{margin-left:93.75%}.ngs .g-lg-0,.ngs .gx-lg-0{--ngsgutter-x: 0}.ngs .g-lg-0,.ngs .gy-lg-0{--ngsgutter-y: 0}.ngs .g-lg-1,.ngs .gx-lg-1{--ngsgutter-x: .25rem}.ngs .g-lg-1,.ngs .gy-lg-1{--ngsgutter-y: .25rem}.ngs .g-lg-2,.ngs .gx-lg-2{--ngsgutter-x: .5rem}.ngs .g-lg-2,.ngs .gy-lg-2{--ngsgutter-y: .5rem}.ngs .g-lg-3,.ngs .gx-lg-3{--ngsgutter-x: 1rem}.ngs .g-lg-3,.ngs .gy-lg-3{--ngsgutter-y: 1rem}.ngs .g-lg-4,.ngs .gx-lg-4{--ngsgutter-x: 1.5rem}.ngs .g-lg-4,.ngs .gy-lg-4{--ngsgutter-y: 1.5rem}.ngs .g-lg-5,.ngs .gx-lg-5{--ngsgutter-x: 3rem}.ngs .g-lg-5,.ngs .gy-lg-5{--ngsgutter-y: 3rem}}@media (min-width: 1200px){.ngs .col-xl{flex:1 0 0%}.ngs .row-cols-xl-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-xl-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-xl-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-xl-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-xl-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-xl-auto{flex:0 0 auto;width:auto}.ngs .col-xl-1{flex:0 0 auto;width:6.25%}.ngs .col-xl-2{flex:0 0 auto;width:12.5%}.ngs .col-xl-3{flex:0 0 auto;width:18.75%}.ngs .col-xl-4{flex:0 0 auto;width:25%}.ngs .col-xl-5{flex:0 0 auto;width:31.25%}.ngs .col-xl-6{flex:0 0 auto;width:37.5%}.ngs .col-xl-7{flex:0 0 auto;width:43.75%}.ngs .col-xl-8{flex:0 0 auto;width:50%}.ngs .col-xl-9{flex:0 0 auto;width:56.25%}.ngs .col-xl-10{flex:0 0 auto;width:62.5%}.ngs .col-xl-11{flex:0 0 auto;width:68.75%}.ngs .col-xl-12{flex:0 0 auto;width:75%}.ngs .col-xl-13{flex:0 0 auto;width:81.25%}.ngs .col-xl-14{flex:0 0 auto;width:87.5%}.ngs .col-xl-15{flex:0 0 auto;width:93.75%}.ngs .col-xl-16{flex:0 0 auto;width:100%}.ngs .offset-xl-0{margin-left:0}.ngs .offset-xl-1{margin-left:6.25%}.ngs .offset-xl-2{margin-left:12.5%}.ngs .offset-xl-3{margin-left:18.75%}.ngs .offset-xl-4{margin-left:25%}.ngs .offset-xl-5{margin-left:31.25%}.ngs .offset-xl-6{margin-left:37.5%}.ngs .offset-xl-7{margin-left:43.75%}.ngs .offset-xl-8{margin-left:50%}.ngs .offset-xl-9{margin-left:56.25%}.ngs .offset-xl-10{margin-left:62.5%}.ngs .offset-xl-11{margin-left:68.75%}.ngs .offset-xl-12{margin-left:75%}.ngs .offset-xl-13{margin-left:81.25%}.ngs .offset-xl-14{margin-left:87.5%}.ngs .offset-xl-15{margin-left:93.75%}.ngs .g-xl-0,.ngs .gx-xl-0{--ngsgutter-x: 0}.ngs .g-xl-0,.ngs .gy-xl-0{--ngsgutter-y: 0}.ngs .g-xl-1,.ngs .gx-xl-1{--ngsgutter-x: .25rem}.ngs .g-xl-1,.ngs .gy-xl-1{--ngsgutter-y: .25rem}.ngs .g-xl-2,.ngs .gx-xl-2{--ngsgutter-x: .5rem}.ngs .g-xl-2,.ngs .gy-xl-2{--ngsgutter-y: .5rem}.ngs .g-xl-3,.ngs .gx-xl-3{--ngsgutter-x: 1rem}.ngs .g-xl-3,.ngs .gy-xl-3{--ngsgutter-y: 1rem}.ngs .g-xl-4,.ngs .gx-xl-4{--ngsgutter-x: 1.5rem}.ngs .g-xl-4,.ngs .gy-xl-4{--ngsgutter-y: 1.5rem}.ngs .g-xl-5,.ngs .gx-xl-5{--ngsgutter-x: 3rem}.ngs .g-xl-5,.ngs .gy-xl-5{--ngsgutter-y: 3rem}}@media (min-width: 1400px){.ngs .col-xxl{flex:1 0 0%}.ngs .row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.ngs .row-cols-xxl-1>*{flex:0 0 auto;width:100%}.ngs .row-cols-xxl-2>*{flex:0 0 auto;width:50%}.ngs .row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.ngs .row-cols-xxl-4>*{flex:0 0 auto;width:25%}.ngs .row-cols-xxl-5>*{flex:0 0 auto;width:20%}.ngs .row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.ngs .col-xxl-auto{flex:0 0 auto;width:auto}.ngs .col-xxl-1{flex:0 0 auto;width:6.25%}.ngs .col-xxl-2{flex:0 0 auto;width:12.5%}.ngs .col-xxl-3{flex:0 0 auto;width:18.75%}.ngs .col-xxl-4{flex:0 0 auto;width:25%}.ngs .col-xxl-5{flex:0 0 auto;width:31.25%}.ngs .col-xxl-6{flex:0 0 auto;width:37.5%}.ngs .col-xxl-7{flex:0 0 auto;width:43.75%}.ngs .col-xxl-8{flex:0 0 auto;width:50%}.ngs .col-xxl-9{flex:0 0 auto;width:56.25%}.ngs .col-xxl-10{flex:0 0 auto;width:62.5%}.ngs .col-xxl-11{flex:0 0 auto;width:68.75%}.ngs .col-xxl-12{flex:0 0 auto;width:75%}.ngs .col-xxl-13{flex:0 0 auto;width:81.25%}.ngs .col-xxl-14{flex:0 0 auto;width:87.5%}.ngs .col-xxl-15{flex:0 0 auto;width:93.75%}.ngs .col-xxl-16{flex:0 0 auto;width:100%}.ngs .offset-xxl-0{margin-left:0}.ngs .offset-xxl-1{margin-left:6.25%}.ngs .offset-xxl-2{margin-left:12.5%}.ngs .offset-xxl-3{margin-left:18.75%}.ngs .offset-xxl-4{margin-left:25%}.ngs .offset-xxl-5{margin-left:31.25%}.ngs .offset-xxl-6{margin-left:37.5%}.ngs .offset-xxl-7{margin-left:43.75%}.ngs .offset-xxl-8{margin-left:50%}.ngs .offset-xxl-9{margin-left:56.25%}.ngs .offset-xxl-10{margin-left:62.5%}.ngs .offset-xxl-11{margin-left:68.75%}.ngs .offset-xxl-12{margin-left:75%}.ngs .offset-xxl-13{margin-left:81.25%}.ngs .offset-xxl-14{margin-left:87.5%}.ngs .offset-xxl-15{margin-left:93.75%}.ngs .g-xxl-0,.ngs .gx-xxl-0{--ngsgutter-x: 0}.ngs .g-xxl-0,.ngs .gy-xxl-0{--ngsgutter-y: 0}.ngs .g-xxl-1,.ngs .gx-xxl-1{--ngsgutter-x: .25rem}.ngs .g-xxl-1,.ngs .gy-xxl-1{--ngsgutter-y: .25rem}.ngs .g-xxl-2,.ngs .gx-xxl-2{--ngsgutter-x: .5rem}.ngs .g-xxl-2,.ngs .gy-xxl-2{--ngsgutter-y: .5rem}.ngs .g-xxl-3,.ngs .gx-xxl-3{--ngsgutter-x: 1rem}.ngs .g-xxl-3,.ngs .gy-xxl-3{--ngsgutter-y: 1rem}.ngs .g-xxl-4,.ngs .gx-xxl-4{--ngsgutter-x: 1.5rem}.ngs .g-xxl-4,.ngs .gy-xxl-4{--ngsgutter-y: 1.5rem}.ngs .g-xxl-5,.ngs .gx-xxl-5{--ngsgutter-x: 3rem}.ngs .g-xxl-5,.ngs .gy-xxl-5{--ngsgutter-y: 3rem}}.ngs .d-inline{display:inline!important}.ngs .d-inline-block{display:inline-block!important}.ngs .d-block{display:block!important}.ngs .d-grid{display:grid!important}.ngs .d-inline-grid{display:inline-grid!important}.ngs .d-table{display:table!important}.ngs .d-table-row{display:table-row!important}.ngs .d-table-cell{display:table-cell!important}.ngs .d-flex{display:flex!important}.ngs .d-inline-flex{display:inline-flex!important}.ngs .d-none{display:none!important}.ngs .flex-fill{flex:1 1 auto!important}.ngs .flex-row{flex-direction:row!important}.ngs .flex-column{flex-direction:column!important}.ngs .flex-row-reverse{flex-direction:row-reverse!important}.ngs .flex-column-reverse{flex-direction:column-reverse!important}.ngs .flex-grow-0{flex-grow:0!important}.ngs .flex-grow-1{flex-grow:1!important}.ngs .flex-shrink-0{flex-shrink:0!important}.ngs .flex-shrink-1{flex-shrink:1!important}.ngs .flex-wrap{flex-wrap:wrap!important}.ngs .flex-nowrap{flex-wrap:nowrap!important}.ngs .flex-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-start{justify-content:flex-start!important}.ngs .justify-content-end{justify-content:flex-end!important}.ngs .justify-content-center{justify-content:center!important}.ngs .justify-content-between{justify-content:space-between!important}.ngs .justify-content-around{justify-content:space-around!important}.ngs .justify-content-evenly{justify-content:space-evenly!important}.ngs .align-items-start{align-items:flex-start!important}.ngs .align-items-end{align-items:flex-end!important}.ngs .align-items-center{align-items:center!important}.ngs .align-items-baseline{align-items:baseline!important}.ngs .align-items-stretch{align-items:stretch!important}.ngs .align-content-start{align-content:flex-start!important}.ngs .align-content-end{align-content:flex-end!important}.ngs .align-content-center{align-content:center!important}.ngs .align-content-between{align-content:space-between!important}.ngs .align-content-around{align-content:space-around!important}.ngs .align-content-stretch{align-content:stretch!important}.ngs .align-self-auto{align-self:auto!important}.ngs .align-self-start{align-self:flex-start!important}.ngs .align-self-end{align-self:flex-end!important}.ngs .align-self-center{align-self:center!important}.ngs .align-self-baseline{align-self:baseline!important}.ngs .align-self-stretch{align-self:stretch!important}.ngs .order-first{order:-1!important}.ngs .order-0{order:0!important}.ngs .order-1{order:1!important}.ngs .order-2{order:2!important}.ngs .order-3{order:3!important}.ngs .order-4{order:4!important}.ngs .order-5{order:5!important}.ngs .order-last{order:6!important}.ngs .m-0{margin:0!important}.ngs .m-1{margin:.25rem!important}.ngs .m-2{margin:.5rem!important}.ngs .m-3{margin:1rem!important}.ngs .m-4{margin:1.5rem!important}.ngs .m-5{margin:3rem!important}.ngs .m-auto{margin:auto!important}.ngs .mx-0{margin-right:0!important;margin-left:0!important}.ngs .mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-0{margin-top:0!important}.ngs .mt-1{margin-top:.25rem!important}.ngs .mt-2{margin-top:.5rem!important}.ngs .mt-3{margin-top:1rem!important}.ngs .mt-4{margin-top:1.5rem!important}.ngs .mt-5{margin-top:3rem!important}.ngs .mt-auto{margin-top:auto!important}.ngs .me-0{margin-right:0!important}.ngs .me-1{margin-right:.25rem!important}.ngs .me-2{margin-right:.5rem!important}.ngs .me-3{margin-right:1rem!important}.ngs .me-4{margin-right:1.5rem!important}.ngs .me-5{margin-right:3rem!important}.ngs .me-auto{margin-right:auto!important}.ngs .mb-0{margin-bottom:0!important}.ngs .mb-1{margin-bottom:.25rem!important}.ngs .mb-2{margin-bottom:.5rem!important}.ngs .mb-3{margin-bottom:1rem!important}.ngs .mb-4{margin-bottom:1.5rem!important}.ngs .mb-5{margin-bottom:3rem!important}.ngs .mb-auto{margin-bottom:auto!important}.ngs .ms-0{margin-left:0!important}.ngs .ms-1{margin-left:.25rem!important}.ngs .ms-2{margin-left:.5rem!important}.ngs .ms-3{margin-left:1rem!important}.ngs .ms-4{margin-left:1.5rem!important}.ngs .ms-5{margin-left:3rem!important}.ngs .ms-auto{margin-left:auto!important}.ngs .p-0{padding:0!important}.ngs .p-1{padding:.25rem!important}.ngs .p-2{padding:.5rem!important}.ngs .p-3{padding:1rem!important}.ngs .p-4{padding:1.5rem!important}.ngs .p-5{padding:3rem!important}.ngs .px-0{padding-right:0!important;padding-left:0!important}.ngs .px-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-0{padding-top:0!important}.ngs .pt-1{padding-top:.25rem!important}.ngs .pt-2{padding-top:.5rem!important}.ngs .pt-3{padding-top:1rem!important}.ngs .pt-4{padding-top:1.5rem!important}.ngs .pt-5{padding-top:3rem!important}.ngs .pe-0{padding-right:0!important}.ngs .pe-1{padding-right:.25rem!important}.ngs .pe-2{padding-right:.5rem!important}.ngs .pe-3{padding-right:1rem!important}.ngs .pe-4{padding-right:1.5rem!important}.ngs .pe-5{padding-right:3rem!important}.ngs .pb-0{padding-bottom:0!important}.ngs .pb-1{padding-bottom:.25rem!important}.ngs .pb-2{padding-bottom:.5rem!important}.ngs .pb-3{padding-bottom:1rem!important}.ngs .pb-4{padding-bottom:1.5rem!important}.ngs .pb-5{padding-bottom:3rem!important}.ngs .ps-0{padding-left:0!important}.ngs .ps-1{padding-left:.25rem!important}.ngs .ps-2{padding-left:.5rem!important}.ngs .ps-3{padding-left:1rem!important}.ngs .ps-4{padding-left:1.5rem!important}.ngs .ps-5{padding-left:3rem!important}@media (min-width: 576px){.ngs .d-sm-inline{display:inline!important}.ngs .d-sm-inline-block{display:inline-block!important}.ngs .d-sm-block{display:block!important}.ngs .d-sm-grid{display:grid!important}.ngs .d-sm-inline-grid{display:inline-grid!important}.ngs .d-sm-table{display:table!important}.ngs .d-sm-table-row{display:table-row!important}.ngs .d-sm-table-cell{display:table-cell!important}.ngs .d-sm-flex{display:flex!important}.ngs .d-sm-inline-flex{display:inline-flex!important}.ngs .d-sm-none{display:none!important}.ngs .flex-sm-fill{flex:1 1 auto!important}.ngs .flex-sm-row{flex-direction:row!important}.ngs .flex-sm-column{flex-direction:column!important}.ngs .flex-sm-row-reverse{flex-direction:row-reverse!important}.ngs .flex-sm-column-reverse{flex-direction:column-reverse!important}.ngs .flex-sm-grow-0{flex-grow:0!important}.ngs .flex-sm-grow-1{flex-grow:1!important}.ngs .flex-sm-shrink-0{flex-shrink:0!important}.ngs .flex-sm-shrink-1{flex-shrink:1!important}.ngs .flex-sm-wrap{flex-wrap:wrap!important}.ngs .flex-sm-nowrap{flex-wrap:nowrap!important}.ngs .flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-sm-start{justify-content:flex-start!important}.ngs .justify-content-sm-end{justify-content:flex-end!important}.ngs .justify-content-sm-center{justify-content:center!important}.ngs .justify-content-sm-between{justify-content:space-between!important}.ngs .justify-content-sm-around{justify-content:space-around!important}.ngs .justify-content-sm-evenly{justify-content:space-evenly!important}.ngs .align-items-sm-start{align-items:flex-start!important}.ngs .align-items-sm-end{align-items:flex-end!important}.ngs .align-items-sm-center{align-items:center!important}.ngs .align-items-sm-baseline{align-items:baseline!important}.ngs .align-items-sm-stretch{align-items:stretch!important}.ngs .align-content-sm-start{align-content:flex-start!important}.ngs .align-content-sm-end{align-content:flex-end!important}.ngs .align-content-sm-center{align-content:center!important}.ngs .align-content-sm-between{align-content:space-between!important}.ngs .align-content-sm-around{align-content:space-around!important}.ngs .align-content-sm-stretch{align-content:stretch!important}.ngs .align-self-sm-auto{align-self:auto!important}.ngs .align-self-sm-start{align-self:flex-start!important}.ngs .align-self-sm-end{align-self:flex-end!important}.ngs .align-self-sm-center{align-self:center!important}.ngs .align-self-sm-baseline{align-self:baseline!important}.ngs .align-self-sm-stretch{align-self:stretch!important}.ngs .order-sm-first{order:-1!important}.ngs .order-sm-0{order:0!important}.ngs .order-sm-1{order:1!important}.ngs .order-sm-2{order:2!important}.ngs .order-sm-3{order:3!important}.ngs .order-sm-4{order:4!important}.ngs .order-sm-5{order:5!important}.ngs .order-sm-last{order:6!important}.ngs .m-sm-0{margin:0!important}.ngs .m-sm-1{margin:.25rem!important}.ngs .m-sm-2{margin:.5rem!important}.ngs .m-sm-3{margin:1rem!important}.ngs .m-sm-4{margin:1.5rem!important}.ngs .m-sm-5{margin:3rem!important}.ngs .m-sm-auto{margin:auto!important}.ngs .mx-sm-0{margin-right:0!important;margin-left:0!important}.ngs .mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-sm-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-sm-0{margin-top:0!important}.ngs .mt-sm-1{margin-top:.25rem!important}.ngs .mt-sm-2{margin-top:.5rem!important}.ngs .mt-sm-3{margin-top:1rem!important}.ngs .mt-sm-4{margin-top:1.5rem!important}.ngs .mt-sm-5{margin-top:3rem!important}.ngs .mt-sm-auto{margin-top:auto!important}.ngs .me-sm-0{margin-right:0!important}.ngs .me-sm-1{margin-right:.25rem!important}.ngs .me-sm-2{margin-right:.5rem!important}.ngs .me-sm-3{margin-right:1rem!important}.ngs .me-sm-4{margin-right:1.5rem!important}.ngs .me-sm-5{margin-right:3rem!important}.ngs .me-sm-auto{margin-right:auto!important}.ngs .mb-sm-0{margin-bottom:0!important}.ngs .mb-sm-1{margin-bottom:.25rem!important}.ngs .mb-sm-2{margin-bottom:.5rem!important}.ngs .mb-sm-3{margin-bottom:1rem!important}.ngs .mb-sm-4{margin-bottom:1.5rem!important}.ngs .mb-sm-5{margin-bottom:3rem!important}.ngs .mb-sm-auto{margin-bottom:auto!important}.ngs .ms-sm-0{margin-left:0!important}.ngs .ms-sm-1{margin-left:.25rem!important}.ngs .ms-sm-2{margin-left:.5rem!important}.ngs .ms-sm-3{margin-left:1rem!important}.ngs .ms-sm-4{margin-left:1.5rem!important}.ngs .ms-sm-5{margin-left:3rem!important}.ngs .ms-sm-auto{margin-left:auto!important}.ngs .p-sm-0{padding:0!important}.ngs .p-sm-1{padding:.25rem!important}.ngs .p-sm-2{padding:.5rem!important}.ngs .p-sm-3{padding:1rem!important}.ngs .p-sm-4{padding:1.5rem!important}.ngs .p-sm-5{padding:3rem!important}.ngs .px-sm-0{padding-right:0!important;padding-left:0!important}.ngs .px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-sm-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-sm-0{padding-top:0!important}.ngs .pt-sm-1{padding-top:.25rem!important}.ngs .pt-sm-2{padding-top:.5rem!important}.ngs .pt-sm-3{padding-top:1rem!important}.ngs .pt-sm-4{padding-top:1.5rem!important}.ngs .pt-sm-5{padding-top:3rem!important}.ngs .pe-sm-0{padding-right:0!important}.ngs .pe-sm-1{padding-right:.25rem!important}.ngs .pe-sm-2{padding-right:.5rem!important}.ngs .pe-sm-3{padding-right:1rem!important}.ngs .pe-sm-4{padding-right:1.5rem!important}.ngs .pe-sm-5{padding-right:3rem!important}.ngs .pb-sm-0{padding-bottom:0!important}.ngs .pb-sm-1{padding-bottom:.25rem!important}.ngs .pb-sm-2{padding-bottom:.5rem!important}.ngs .pb-sm-3{padding-bottom:1rem!important}.ngs .pb-sm-4{padding-bottom:1.5rem!important}.ngs .pb-sm-5{padding-bottom:3rem!important}.ngs .ps-sm-0{padding-left:0!important}.ngs .ps-sm-1{padding-left:.25rem!important}.ngs .ps-sm-2{padding-left:.5rem!important}.ngs .ps-sm-3{padding-left:1rem!important}.ngs .ps-sm-4{padding-left:1.5rem!important}.ngs .ps-sm-5{padding-left:3rem!important}}@media (min-width: 768px){.ngs .d-md-inline{display:inline!important}.ngs .d-md-inline-block{display:inline-block!important}.ngs .d-md-block{display:block!important}.ngs .d-md-grid{display:grid!important}.ngs .d-md-inline-grid{display:inline-grid!important}.ngs .d-md-table{display:table!important}.ngs .d-md-table-row{display:table-row!important}.ngs .d-md-table-cell{display:table-cell!important}.ngs .d-md-flex{display:flex!important}.ngs .d-md-inline-flex{display:inline-flex!important}.ngs .d-md-none{display:none!important}.ngs .flex-md-fill{flex:1 1 auto!important}.ngs .flex-md-row{flex-direction:row!important}.ngs .flex-md-column{flex-direction:column!important}.ngs .flex-md-row-reverse{flex-direction:row-reverse!important}.ngs .flex-md-column-reverse{flex-direction:column-reverse!important}.ngs .flex-md-grow-0{flex-grow:0!important}.ngs .flex-md-grow-1{flex-grow:1!important}.ngs .flex-md-shrink-0{flex-shrink:0!important}.ngs .flex-md-shrink-1{flex-shrink:1!important}.ngs .flex-md-wrap{flex-wrap:wrap!important}.ngs .flex-md-nowrap{flex-wrap:nowrap!important}.ngs .flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-md-start{justify-content:flex-start!important}.ngs .justify-content-md-end{justify-content:flex-end!important}.ngs .justify-content-md-center{justify-content:center!important}.ngs .justify-content-md-between{justify-content:space-between!important}.ngs .justify-content-md-around{justify-content:space-around!important}.ngs .justify-content-md-evenly{justify-content:space-evenly!important}.ngs .align-items-md-start{align-items:flex-start!important}.ngs .align-items-md-end{align-items:flex-end!important}.ngs .align-items-md-center{align-items:center!important}.ngs .align-items-md-baseline{align-items:baseline!important}.ngs .align-items-md-stretch{align-items:stretch!important}.ngs .align-content-md-start{align-content:flex-start!important}.ngs .align-content-md-end{align-content:flex-end!important}.ngs .align-content-md-center{align-content:center!important}.ngs .align-content-md-between{align-content:space-between!important}.ngs .align-content-md-around{align-content:space-around!important}.ngs .align-content-md-stretch{align-content:stretch!important}.ngs .align-self-md-auto{align-self:auto!important}.ngs .align-self-md-start{align-self:flex-start!important}.ngs .align-self-md-end{align-self:flex-end!important}.ngs .align-self-md-center{align-self:center!important}.ngs .align-self-md-baseline{align-self:baseline!important}.ngs .align-self-md-stretch{align-self:stretch!important}.ngs .order-md-first{order:-1!important}.ngs .order-md-0{order:0!important}.ngs .order-md-1{order:1!important}.ngs .order-md-2{order:2!important}.ngs .order-md-3{order:3!important}.ngs .order-md-4{order:4!important}.ngs .order-md-5{order:5!important}.ngs .order-md-last{order:6!important}.ngs .m-md-0{margin:0!important}.ngs .m-md-1{margin:.25rem!important}.ngs .m-md-2{margin:.5rem!important}.ngs .m-md-3{margin:1rem!important}.ngs .m-md-4{margin:1.5rem!important}.ngs .m-md-5{margin:3rem!important}.ngs .m-md-auto{margin:auto!important}.ngs .mx-md-0{margin-right:0!important;margin-left:0!important}.ngs .mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-md-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-md-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-md-0{margin-top:0!important}.ngs .mt-md-1{margin-top:.25rem!important}.ngs .mt-md-2{margin-top:.5rem!important}.ngs .mt-md-3{margin-top:1rem!important}.ngs .mt-md-4{margin-top:1.5rem!important}.ngs .mt-md-5{margin-top:3rem!important}.ngs .mt-md-auto{margin-top:auto!important}.ngs .me-md-0{margin-right:0!important}.ngs .me-md-1{margin-right:.25rem!important}.ngs .me-md-2{margin-right:.5rem!important}.ngs .me-md-3{margin-right:1rem!important}.ngs .me-md-4{margin-right:1.5rem!important}.ngs .me-md-5{margin-right:3rem!important}.ngs .me-md-auto{margin-right:auto!important}.ngs .mb-md-0{margin-bottom:0!important}.ngs .mb-md-1{margin-bottom:.25rem!important}.ngs .mb-md-2{margin-bottom:.5rem!important}.ngs .mb-md-3{margin-bottom:1rem!important}.ngs .mb-md-4{margin-bottom:1.5rem!important}.ngs .mb-md-5{margin-bottom:3rem!important}.ngs .mb-md-auto{margin-bottom:auto!important}.ngs .ms-md-0{margin-left:0!important}.ngs .ms-md-1{margin-left:.25rem!important}.ngs .ms-md-2{margin-left:.5rem!important}.ngs .ms-md-3{margin-left:1rem!important}.ngs .ms-md-4{margin-left:1.5rem!important}.ngs .ms-md-5{margin-left:3rem!important}.ngs .ms-md-auto{margin-left:auto!important}.ngs .p-md-0{padding:0!important}.ngs .p-md-1{padding:.25rem!important}.ngs .p-md-2{padding:.5rem!important}.ngs .p-md-3{padding:1rem!important}.ngs .p-md-4{padding:1.5rem!important}.ngs .p-md-5{padding:3rem!important}.ngs .px-md-0{padding-right:0!important;padding-left:0!important}.ngs .px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-md-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-md-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-md-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-md-0{padding-top:0!important}.ngs .pt-md-1{padding-top:.25rem!important}.ngs .pt-md-2{padding-top:.5rem!important}.ngs .pt-md-3{padding-top:1rem!important}.ngs .pt-md-4{padding-top:1.5rem!important}.ngs .pt-md-5{padding-top:3rem!important}.ngs .pe-md-0{padding-right:0!important}.ngs .pe-md-1{padding-right:.25rem!important}.ngs .pe-md-2{padding-right:.5rem!important}.ngs .pe-md-3{padding-right:1rem!important}.ngs .pe-md-4{padding-right:1.5rem!important}.ngs .pe-md-5{padding-right:3rem!important}.ngs .pb-md-0{padding-bottom:0!important}.ngs .pb-md-1{padding-bottom:.25rem!important}.ngs .pb-md-2{padding-bottom:.5rem!important}.ngs .pb-md-3{padding-bottom:1rem!important}.ngs .pb-md-4{padding-bottom:1.5rem!important}.ngs .pb-md-5{padding-bottom:3rem!important}.ngs .ps-md-0{padding-left:0!important}.ngs .ps-md-1{padding-left:.25rem!important}.ngs .ps-md-2{padding-left:.5rem!important}.ngs .ps-md-3{padding-left:1rem!important}.ngs .ps-md-4{padding-left:1.5rem!important}.ngs .ps-md-5{padding-left:3rem!important}}@media (min-width: 992px){.ngs .d-lg-inline{display:inline!important}.ngs .d-lg-inline-block{display:inline-block!important}.ngs .d-lg-block{display:block!important}.ngs .d-lg-grid{display:grid!important}.ngs .d-lg-inline-grid{display:inline-grid!important}.ngs .d-lg-table{display:table!important}.ngs .d-lg-table-row{display:table-row!important}.ngs .d-lg-table-cell{display:table-cell!important}.ngs .d-lg-flex{display:flex!important}.ngs .d-lg-inline-flex{display:inline-flex!important}.ngs .d-lg-none{display:none!important}.ngs .flex-lg-fill{flex:1 1 auto!important}.ngs .flex-lg-row{flex-direction:row!important}.ngs .flex-lg-column{flex-direction:column!important}.ngs .flex-lg-row-reverse{flex-direction:row-reverse!important}.ngs .flex-lg-column-reverse{flex-direction:column-reverse!important}.ngs .flex-lg-grow-0{flex-grow:0!important}.ngs .flex-lg-grow-1{flex-grow:1!important}.ngs .flex-lg-shrink-0{flex-shrink:0!important}.ngs .flex-lg-shrink-1{flex-shrink:1!important}.ngs .flex-lg-wrap{flex-wrap:wrap!important}.ngs .flex-lg-nowrap{flex-wrap:nowrap!important}.ngs .flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-lg-start{justify-content:flex-start!important}.ngs .justify-content-lg-end{justify-content:flex-end!important}.ngs .justify-content-lg-center{justify-content:center!important}.ngs .justify-content-lg-between{justify-content:space-between!important}.ngs .justify-content-lg-around{justify-content:space-around!important}.ngs .justify-content-lg-evenly{justify-content:space-evenly!important}.ngs .align-items-lg-start{align-items:flex-start!important}.ngs .align-items-lg-end{align-items:flex-end!important}.ngs .align-items-lg-center{align-items:center!important}.ngs .align-items-lg-baseline{align-items:baseline!important}.ngs .align-items-lg-stretch{align-items:stretch!important}.ngs .align-content-lg-start{align-content:flex-start!important}.ngs .align-content-lg-end{align-content:flex-end!important}.ngs .align-content-lg-center{align-content:center!important}.ngs .align-content-lg-between{align-content:space-between!important}.ngs .align-content-lg-around{align-content:space-around!important}.ngs .align-content-lg-stretch{align-content:stretch!important}.ngs .align-self-lg-auto{align-self:auto!important}.ngs .align-self-lg-start{align-self:flex-start!important}.ngs .align-self-lg-end{align-self:flex-end!important}.ngs .align-self-lg-center{align-self:center!important}.ngs .align-self-lg-baseline{align-self:baseline!important}.ngs .align-self-lg-stretch{align-self:stretch!important}.ngs .order-lg-first{order:-1!important}.ngs .order-lg-0{order:0!important}.ngs .order-lg-1{order:1!important}.ngs .order-lg-2{order:2!important}.ngs .order-lg-3{order:3!important}.ngs .order-lg-4{order:4!important}.ngs .order-lg-5{order:5!important}.ngs .order-lg-last{order:6!important}.ngs .m-lg-0{margin:0!important}.ngs .m-lg-1{margin:.25rem!important}.ngs .m-lg-2{margin:.5rem!important}.ngs .m-lg-3{margin:1rem!important}.ngs .m-lg-4{margin:1.5rem!important}.ngs .m-lg-5{margin:3rem!important}.ngs .m-lg-auto{margin:auto!important}.ngs .mx-lg-0{margin-right:0!important;margin-left:0!important}.ngs .mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-lg-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-lg-0{margin-top:0!important}.ngs .mt-lg-1{margin-top:.25rem!important}.ngs .mt-lg-2{margin-top:.5rem!important}.ngs .mt-lg-3{margin-top:1rem!important}.ngs .mt-lg-4{margin-top:1.5rem!important}.ngs .mt-lg-5{margin-top:3rem!important}.ngs .mt-lg-auto{margin-top:auto!important}.ngs .me-lg-0{margin-right:0!important}.ngs .me-lg-1{margin-right:.25rem!important}.ngs .me-lg-2{margin-right:.5rem!important}.ngs .me-lg-3{margin-right:1rem!important}.ngs .me-lg-4{margin-right:1.5rem!important}.ngs .me-lg-5{margin-right:3rem!important}.ngs .me-lg-auto{margin-right:auto!important}.ngs .mb-lg-0{margin-bottom:0!important}.ngs .mb-lg-1{margin-bottom:.25rem!important}.ngs .mb-lg-2{margin-bottom:.5rem!important}.ngs .mb-lg-3{margin-bottom:1rem!important}.ngs .mb-lg-4{margin-bottom:1.5rem!important}.ngs .mb-lg-5{margin-bottom:3rem!important}.ngs .mb-lg-auto{margin-bottom:auto!important}.ngs .ms-lg-0{margin-left:0!important}.ngs .ms-lg-1{margin-left:.25rem!important}.ngs .ms-lg-2{margin-left:.5rem!important}.ngs .ms-lg-3{margin-left:1rem!important}.ngs .ms-lg-4{margin-left:1.5rem!important}.ngs .ms-lg-5{margin-left:3rem!important}.ngs .ms-lg-auto{margin-left:auto!important}.ngs .p-lg-0{padding:0!important}.ngs .p-lg-1{padding:.25rem!important}.ngs .p-lg-2{padding:.5rem!important}.ngs .p-lg-3{padding:1rem!important}.ngs .p-lg-4{padding:1.5rem!important}.ngs .p-lg-5{padding:3rem!important}.ngs .px-lg-0{padding-right:0!important;padding-left:0!important}.ngs .px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-lg-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-lg-0{padding-top:0!important}.ngs .pt-lg-1{padding-top:.25rem!important}.ngs .pt-lg-2{padding-top:.5rem!important}.ngs .pt-lg-3{padding-top:1rem!important}.ngs .pt-lg-4{padding-top:1.5rem!important}.ngs .pt-lg-5{padding-top:3rem!important}.ngs .pe-lg-0{padding-right:0!important}.ngs .pe-lg-1{padding-right:.25rem!important}.ngs .pe-lg-2{padding-right:.5rem!important}.ngs .pe-lg-3{padding-right:1rem!important}.ngs .pe-lg-4{padding-right:1.5rem!important}.ngs .pe-lg-5{padding-right:3rem!important}.ngs .pb-lg-0{padding-bottom:0!important}.ngs .pb-lg-1{padding-bottom:.25rem!important}.ngs .pb-lg-2{padding-bottom:.5rem!important}.ngs .pb-lg-3{padding-bottom:1rem!important}.ngs .pb-lg-4{padding-bottom:1.5rem!important}.ngs .pb-lg-5{padding-bottom:3rem!important}.ngs .ps-lg-0{padding-left:0!important}.ngs .ps-lg-1{padding-left:.25rem!important}.ngs .ps-lg-2{padding-left:.5rem!important}.ngs .ps-lg-3{padding-left:1rem!important}.ngs .ps-lg-4{padding-left:1.5rem!important}.ngs .ps-lg-5{padding-left:3rem!important}}@media (min-width: 1200px){.ngs .d-xl-inline{display:inline!important}.ngs .d-xl-inline-block{display:inline-block!important}.ngs .d-xl-block{display:block!important}.ngs .d-xl-grid{display:grid!important}.ngs .d-xl-inline-grid{display:inline-grid!important}.ngs .d-xl-table{display:table!important}.ngs .d-xl-table-row{display:table-row!important}.ngs .d-xl-table-cell{display:table-cell!important}.ngs .d-xl-flex{display:flex!important}.ngs .d-xl-inline-flex{display:inline-flex!important}.ngs .d-xl-none{display:none!important}.ngs .flex-xl-fill{flex:1 1 auto!important}.ngs .flex-xl-row{flex-direction:row!important}.ngs .flex-xl-column{flex-direction:column!important}.ngs .flex-xl-row-reverse{flex-direction:row-reverse!important}.ngs .flex-xl-column-reverse{flex-direction:column-reverse!important}.ngs .flex-xl-grow-0{flex-grow:0!important}.ngs .flex-xl-grow-1{flex-grow:1!important}.ngs .flex-xl-shrink-0{flex-shrink:0!important}.ngs .flex-xl-shrink-1{flex-shrink:1!important}.ngs .flex-xl-wrap{flex-wrap:wrap!important}.ngs .flex-xl-nowrap{flex-wrap:nowrap!important}.ngs .flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-xl-start{justify-content:flex-start!important}.ngs .justify-content-xl-end{justify-content:flex-end!important}.ngs .justify-content-xl-center{justify-content:center!important}.ngs .justify-content-xl-between{justify-content:space-between!important}.ngs .justify-content-xl-around{justify-content:space-around!important}.ngs .justify-content-xl-evenly{justify-content:space-evenly!important}.ngs .align-items-xl-start{align-items:flex-start!important}.ngs .align-items-xl-end{align-items:flex-end!important}.ngs .align-items-xl-center{align-items:center!important}.ngs .align-items-xl-baseline{align-items:baseline!important}.ngs .align-items-xl-stretch{align-items:stretch!important}.ngs .align-content-xl-start{align-content:flex-start!important}.ngs .align-content-xl-end{align-content:flex-end!important}.ngs .align-content-xl-center{align-content:center!important}.ngs .align-content-xl-between{align-content:space-between!important}.ngs .align-content-xl-around{align-content:space-around!important}.ngs .align-content-xl-stretch{align-content:stretch!important}.ngs .align-self-xl-auto{align-self:auto!important}.ngs .align-self-xl-start{align-self:flex-start!important}.ngs .align-self-xl-end{align-self:flex-end!important}.ngs .align-self-xl-center{align-self:center!important}.ngs .align-self-xl-baseline{align-self:baseline!important}.ngs .align-self-xl-stretch{align-self:stretch!important}.ngs .order-xl-first{order:-1!important}.ngs .order-xl-0{order:0!important}.ngs .order-xl-1{order:1!important}.ngs .order-xl-2{order:2!important}.ngs .order-xl-3{order:3!important}.ngs .order-xl-4{order:4!important}.ngs .order-xl-5{order:5!important}.ngs .order-xl-last{order:6!important}.ngs .m-xl-0{margin:0!important}.ngs .m-xl-1{margin:.25rem!important}.ngs .m-xl-2{margin:.5rem!important}.ngs .m-xl-3{margin:1rem!important}.ngs .m-xl-4{margin:1.5rem!important}.ngs .m-xl-5{margin:3rem!important}.ngs .m-xl-auto{margin:auto!important}.ngs .mx-xl-0{margin-right:0!important;margin-left:0!important}.ngs .mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-xl-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-xl-0{margin-top:0!important}.ngs .mt-xl-1{margin-top:.25rem!important}.ngs .mt-xl-2{margin-top:.5rem!important}.ngs .mt-xl-3{margin-top:1rem!important}.ngs .mt-xl-4{margin-top:1.5rem!important}.ngs .mt-xl-5{margin-top:3rem!important}.ngs .mt-xl-auto{margin-top:auto!important}.ngs .me-xl-0{margin-right:0!important}.ngs .me-xl-1{margin-right:.25rem!important}.ngs .me-xl-2{margin-right:.5rem!important}.ngs .me-xl-3{margin-right:1rem!important}.ngs .me-xl-4{margin-right:1.5rem!important}.ngs .me-xl-5{margin-right:3rem!important}.ngs .me-xl-auto{margin-right:auto!important}.ngs .mb-xl-0{margin-bottom:0!important}.ngs .mb-xl-1{margin-bottom:.25rem!important}.ngs .mb-xl-2{margin-bottom:.5rem!important}.ngs .mb-xl-3{margin-bottom:1rem!important}.ngs .mb-xl-4{margin-bottom:1.5rem!important}.ngs .mb-xl-5{margin-bottom:3rem!important}.ngs .mb-xl-auto{margin-bottom:auto!important}.ngs .ms-xl-0{margin-left:0!important}.ngs .ms-xl-1{margin-left:.25rem!important}.ngs .ms-xl-2{margin-left:.5rem!important}.ngs .ms-xl-3{margin-left:1rem!important}.ngs .ms-xl-4{margin-left:1.5rem!important}.ngs .ms-xl-5{margin-left:3rem!important}.ngs .ms-xl-auto{margin-left:auto!important}.ngs .p-xl-0{padding:0!important}.ngs .p-xl-1{padding:.25rem!important}.ngs .p-xl-2{padding:.5rem!important}.ngs .p-xl-3{padding:1rem!important}.ngs .p-xl-4{padding:1.5rem!important}.ngs .p-xl-5{padding:3rem!important}.ngs .px-xl-0{padding-right:0!important;padding-left:0!important}.ngs .px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-xl-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-xl-0{padding-top:0!important}.ngs .pt-xl-1{padding-top:.25rem!important}.ngs .pt-xl-2{padding-top:.5rem!important}.ngs .pt-xl-3{padding-top:1rem!important}.ngs .pt-xl-4{padding-top:1.5rem!important}.ngs .pt-xl-5{padding-top:3rem!important}.ngs .pe-xl-0{padding-right:0!important}.ngs .pe-xl-1{padding-right:.25rem!important}.ngs .pe-xl-2{padding-right:.5rem!important}.ngs .pe-xl-3{padding-right:1rem!important}.ngs .pe-xl-4{padding-right:1.5rem!important}.ngs .pe-xl-5{padding-right:3rem!important}.ngs .pb-xl-0{padding-bottom:0!important}.ngs .pb-xl-1{padding-bottom:.25rem!important}.ngs .pb-xl-2{padding-bottom:.5rem!important}.ngs .pb-xl-3{padding-bottom:1rem!important}.ngs .pb-xl-4{padding-bottom:1.5rem!important}.ngs .pb-xl-5{padding-bottom:3rem!important}.ngs .ps-xl-0{padding-left:0!important}.ngs .ps-xl-1{padding-left:.25rem!important}.ngs .ps-xl-2{padding-left:.5rem!important}.ngs .ps-xl-3{padding-left:1rem!important}.ngs .ps-xl-4{padding-left:1.5rem!important}.ngs .ps-xl-5{padding-left:3rem!important}}@media (min-width: 1400px){.ngs .d-xxl-inline{display:inline!important}.ngs .d-xxl-inline-block{display:inline-block!important}.ngs .d-xxl-block{display:block!important}.ngs .d-xxl-grid{display:grid!important}.ngs .d-xxl-inline-grid{display:inline-grid!important}.ngs .d-xxl-table{display:table!important}.ngs .d-xxl-table-row{display:table-row!important}.ngs .d-xxl-table-cell{display:table-cell!important}.ngs .d-xxl-flex{display:flex!important}.ngs .d-xxl-inline-flex{display:inline-flex!important}.ngs .d-xxl-none{display:none!important}.ngs .flex-xxl-fill{flex:1 1 auto!important}.ngs .flex-xxl-row{flex-direction:row!important}.ngs .flex-xxl-column{flex-direction:column!important}.ngs .flex-xxl-row-reverse{flex-direction:row-reverse!important}.ngs .flex-xxl-column-reverse{flex-direction:column-reverse!important}.ngs .flex-xxl-grow-0{flex-grow:0!important}.ngs .flex-xxl-grow-1{flex-grow:1!important}.ngs .flex-xxl-shrink-0{flex-shrink:0!important}.ngs .flex-xxl-shrink-1{flex-shrink:1!important}.ngs .flex-xxl-wrap{flex-wrap:wrap!important}.ngs .flex-xxl-nowrap{flex-wrap:nowrap!important}.ngs .flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.ngs .justify-content-xxl-start{justify-content:flex-start!important}.ngs .justify-content-xxl-end{justify-content:flex-end!important}.ngs .justify-content-xxl-center{justify-content:center!important}.ngs .justify-content-xxl-between{justify-content:space-between!important}.ngs .justify-content-xxl-around{justify-content:space-around!important}.ngs .justify-content-xxl-evenly{justify-content:space-evenly!important}.ngs .align-items-xxl-start{align-items:flex-start!important}.ngs .align-items-xxl-end{align-items:flex-end!important}.ngs .align-items-xxl-center{align-items:center!important}.ngs .align-items-xxl-baseline{align-items:baseline!important}.ngs .align-items-xxl-stretch{align-items:stretch!important}.ngs .align-content-xxl-start{align-content:flex-start!important}.ngs .align-content-xxl-end{align-content:flex-end!important}.ngs .align-content-xxl-center{align-content:center!important}.ngs .align-content-xxl-between{align-content:space-between!important}.ngs .align-content-xxl-around{align-content:space-around!important}.ngs .align-content-xxl-stretch{align-content:stretch!important}.ngs .align-self-xxl-auto{align-self:auto!important}.ngs .align-self-xxl-start{align-self:flex-start!important}.ngs .align-self-xxl-end{align-self:flex-end!important}.ngs .align-self-xxl-center{align-self:center!important}.ngs .align-self-xxl-baseline{align-self:baseline!important}.ngs .align-self-xxl-stretch{align-self:stretch!important}.ngs .order-xxl-first{order:-1!important}.ngs .order-xxl-0{order:0!important}.ngs .order-xxl-1{order:1!important}.ngs .order-xxl-2{order:2!important}.ngs .order-xxl-3{order:3!important}.ngs .order-xxl-4{order:4!important}.ngs .order-xxl-5{order:5!important}.ngs .order-xxl-last{order:6!important}.ngs .m-xxl-0{margin:0!important}.ngs .m-xxl-1{margin:.25rem!important}.ngs .m-xxl-2{margin:.5rem!important}.ngs .m-xxl-3{margin:1rem!important}.ngs .m-xxl-4{margin:1.5rem!important}.ngs .m-xxl-5{margin:3rem!important}.ngs .m-xxl-auto{margin:auto!important}.ngs .mx-xxl-0{margin-right:0!important;margin-left:0!important}.ngs .mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.ngs .mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.ngs .mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.ngs .mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.ngs .mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.ngs .mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.ngs .my-xxl-0{margin-top:0!important;margin-bottom:0!important}.ngs .my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.ngs .my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.ngs .my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.ngs .my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.ngs .my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.ngs .my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.ngs .mt-xxl-0{margin-top:0!important}.ngs .mt-xxl-1{margin-top:.25rem!important}.ngs .mt-xxl-2{margin-top:.5rem!important}.ngs .mt-xxl-3{margin-top:1rem!important}.ngs .mt-xxl-4{margin-top:1.5rem!important}.ngs .mt-xxl-5{margin-top:3rem!important}.ngs .mt-xxl-auto{margin-top:auto!important}.ngs .me-xxl-0{margin-right:0!important}.ngs .me-xxl-1{margin-right:.25rem!important}.ngs .me-xxl-2{margin-right:.5rem!important}.ngs .me-xxl-3{margin-right:1rem!important}.ngs .me-xxl-4{margin-right:1.5rem!important}.ngs .me-xxl-5{margin-right:3rem!important}.ngs .me-xxl-auto{margin-right:auto!important}.ngs .mb-xxl-0{margin-bottom:0!important}.ngs .mb-xxl-1{margin-bottom:.25rem!important}.ngs .mb-xxl-2{margin-bottom:.5rem!important}.ngs .mb-xxl-3{margin-bottom:1rem!important}.ngs .mb-xxl-4{margin-bottom:1.5rem!important}.ngs .mb-xxl-5{margin-bottom:3rem!important}.ngs .mb-xxl-auto{margin-bottom:auto!important}.ngs .ms-xxl-0{margin-left:0!important}.ngs .ms-xxl-1{margin-left:.25rem!important}.ngs .ms-xxl-2{margin-left:.5rem!important}.ngs .ms-xxl-3{margin-left:1rem!important}.ngs .ms-xxl-4{margin-left:1.5rem!important}.ngs .ms-xxl-5{margin-left:3rem!important}.ngs .ms-xxl-auto{margin-left:auto!important}.ngs .p-xxl-0{padding:0!important}.ngs .p-xxl-1{padding:.25rem!important}.ngs .p-xxl-2{padding:.5rem!important}.ngs .p-xxl-3{padding:1rem!important}.ngs .p-xxl-4{padding:1.5rem!important}.ngs .p-xxl-5{padding:3rem!important}.ngs .px-xxl-0{padding-right:0!important;padding-left:0!important}.ngs .px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.ngs .px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.ngs .px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.ngs .px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.ngs .px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.ngs .py-xxl-0{padding-top:0!important;padding-bottom:0!important}.ngs .py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.ngs .py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.ngs .py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.ngs .py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.ngs .py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.ngs .pt-xxl-0{padding-top:0!important}.ngs .pt-xxl-1{padding-top:.25rem!important}.ngs .pt-xxl-2{padding-top:.5rem!important}.ngs .pt-xxl-3{padding-top:1rem!important}.ngs .pt-xxl-4{padding-top:1.5rem!important}.ngs .pt-xxl-5{padding-top:3rem!important}.ngs .pe-xxl-0{padding-right:0!important}.ngs .pe-xxl-1{padding-right:.25rem!important}.ngs .pe-xxl-2{padding-right:.5rem!important}.ngs .pe-xxl-3{padding-right:1rem!important}.ngs .pe-xxl-4{padding-right:1.5rem!important}.ngs .pe-xxl-5{padding-right:3rem!important}.ngs .pb-xxl-0{padding-bottom:0!important}.ngs .pb-xxl-1{padding-bottom:.25rem!important}.ngs .pb-xxl-2{padding-bottom:.5rem!important}.ngs .pb-xxl-3{padding-bottom:1rem!important}.ngs .pb-xxl-4{padding-bottom:1.5rem!important}.ngs .pb-xxl-5{padding-bottom:3rem!important}.ngs .ps-xxl-0{padding-left:0!important}.ngs .ps-xxl-1{padding-left:.25rem!important}.ngs .ps-xxl-2{padding-left:.5rem!important}.ngs .ps-xxl-3{padding-left:1rem!important}.ngs .ps-xxl-4{padding-left:1.5rem!important}.ngs .ps-xxl-5{padding-left:3rem!important}}@media print{.ngs .d-print-inline{display:inline!important}.ngs .d-print-inline-block{display:inline-block!important}.ngs .d-print-block{display:block!important}.ngs .d-print-grid{display:grid!important}.ngs .d-print-inline-grid{display:inline-grid!important}.ngs .d-print-table{display:table!important}.ngs .d-print-table-row{display:table-row!important}.ngs .d-print-table-cell{display:table-cell!important}.ngs .d-print-flex{display:flex!important}.ngs .d-print-inline-flex{display:inline-flex!important}.ngs .d-print-none{display:none!important}}\n", ".prevSection button{padding:5px 10px;float:left;margin-left:0}.nextSection button{padding:5px 10px;float:right;margin-left:0}.separator-horizontal{width:1px;height:100%;background-color:#d6cece;margin:0 auto}.content-element-form{position:relative;padding-bottom:70px}.section-navs{width:100%;position:absolute;bottom:0;background-color:#f2f6fc;padding:10px;flex-direction:row-reverse}.sirio-nav-item a{cursor:pointer}@media (max-width: 991px){.content-element-form{width:100%!important}}ngx-sirio-input-chip{margin-right:.5rem}\n"] }]
|
|
2826
|
+
}], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: ProgrammabilityService }, { type: EventService }, { type: RegisterService }], propDecorators: { schema: [{
|
|
2827
|
+
type: Input
|
|
2828
|
+
}], formGroup: [{
|
|
2829
|
+
type: Input
|
|
2830
|
+
}], value: [{
|
|
2831
|
+
type: Input
|
|
2832
|
+
}], showNav: [{
|
|
2833
|
+
type: Input
|
|
2834
|
+
}], showNavButton: [{
|
|
2835
|
+
type: Input
|
|
2836
|
+
}], showProgress: [{
|
|
2837
|
+
type: Input
|
|
2838
|
+
}], progressStatus: [{
|
|
2839
|
+
type: Input
|
|
2840
|
+
}], valueChange: [{
|
|
2841
|
+
type: Output
|
|
2842
|
+
}], initialized: [{
|
|
2843
|
+
type: Output
|
|
2844
|
+
}], onCommand: [{
|
|
2845
|
+
type: Output
|
|
2846
|
+
}], activeNavChange: [{
|
|
2847
|
+
type: Output
|
|
2848
|
+
}], activeNav: [{
|
|
2849
|
+
type: Input
|
|
2850
|
+
}] } });
|
|
2851
|
+
|
|
2852
|
+
function extractFiles(data) {
|
|
2853
|
+
let files = [];
|
|
2854
|
+
const rewrite = (obj) => {
|
|
2855
|
+
if (Array.isArray(obj)) {
|
|
2856
|
+
return obj.map(item => rewrite(item));
|
|
2857
|
+
}
|
|
2858
|
+
else if (obj instanceof File) {
|
|
2859
|
+
files.push(obj);
|
|
2860
|
+
return {
|
|
2861
|
+
name: obj.name,
|
|
2862
|
+
size: obj.size,
|
|
2863
|
+
type: obj.type,
|
|
2864
|
+
lastModified: obj.lastModified,
|
|
2865
|
+
_fileIndex: files.length - 1
|
|
2866
|
+
};
|
|
2867
|
+
}
|
|
2868
|
+
else if (typeof obj === 'object' && obj !== null) {
|
|
2869
|
+
const rewritten = {};
|
|
2870
|
+
for (const key in obj) {
|
|
2871
|
+
if (obj.hasOwnProperty(key)) {
|
|
2872
|
+
rewritten[key] = rewrite(obj[key]);
|
|
2873
|
+
}
|
|
2874
|
+
}
|
|
2875
|
+
return rewritten;
|
|
2876
|
+
}
|
|
2877
|
+
return obj;
|
|
2878
|
+
};
|
|
2879
|
+
return { data: rewrite(data), files: files };
|
|
2880
|
+
}
|
|
2881
|
+
|
|
2882
|
+
function toFormData(data) {
|
|
2883
|
+
const formData = new FormData();
|
|
2884
|
+
var result = extractFiles(data);
|
|
2885
|
+
formData.append("data", JSON.stringify(result.data));
|
|
2886
|
+
result.files.forEach((file) => {
|
|
2887
|
+
formData.append("files", file);
|
|
2888
|
+
});
|
|
2889
|
+
return formData;
|
|
2890
|
+
}
|
|
2891
|
+
|
|
2892
|
+
class ODataSource {
|
|
2893
|
+
url;
|
|
2894
|
+
http;
|
|
2895
|
+
constructor(url, http) {
|
|
2896
|
+
this.url = url;
|
|
2897
|
+
this.http = http;
|
|
2898
|
+
}
|
|
2899
|
+
getRows(params) {
|
|
2900
|
+
const queryString = this.getQueryString(params);
|
|
2901
|
+
let queryUrl = `${this.url}${queryString}`;
|
|
2902
|
+
this.http.get(queryUrl, { observe: 'response' }).subscribe({
|
|
2903
|
+
next: response => {
|
|
2904
|
+
const data = response.body ?? [];
|
|
2905
|
+
const count = response.headers.get('X-Total-Count');
|
|
2906
|
+
params.successCallback(data, this.toNumber(count));
|
|
2907
|
+
},
|
|
2908
|
+
error: error => {
|
|
2909
|
+
console.log(error);
|
|
2910
|
+
params.failCallback();
|
|
2911
|
+
}
|
|
2912
|
+
});
|
|
2913
|
+
}
|
|
2914
|
+
getQueryString(params) {
|
|
2915
|
+
let queryParams = new HttpParams();
|
|
2916
|
+
queryParams = this.addCount(queryParams);
|
|
2917
|
+
queryParams = this.addSkipAndTake(params, queryParams);
|
|
2918
|
+
queryParams = this.addOrderBy(params, queryParams);
|
|
2919
|
+
queryParams = this.addFilterBy(params, queryParams);
|
|
2920
|
+
const queryString = queryParams.toString();
|
|
2921
|
+
return queryString ? "?" + queryString : queryString;
|
|
2922
|
+
}
|
|
2923
|
+
addCount(queryParams) {
|
|
2924
|
+
return queryParams.set("$count", "true");
|
|
2925
|
+
}
|
|
2926
|
+
addSkipAndTake(params, queryParams) {
|
|
2927
|
+
return queryParams
|
|
2928
|
+
.set("$top", `${params.endRow - params.startRow}`)
|
|
2929
|
+
.set("$skip", `${params.startRow}`);
|
|
2930
|
+
}
|
|
2931
|
+
addOrderBy(params, queryParams) {
|
|
2932
|
+
if (!params.sortModel || params.sortModel.length === 0) {
|
|
2933
|
+
return queryParams;
|
|
2934
|
+
}
|
|
2935
|
+
const orderByParams = params.sortModel
|
|
2936
|
+
.map(sort => `${sort.colId} ${sort.sort}`)
|
|
2937
|
+
.join(",");
|
|
2938
|
+
return queryParams.set("$orderby", orderByParams);
|
|
2939
|
+
}
|
|
2940
|
+
addFilterBy(params, queryParams) {
|
|
2941
|
+
const filterModel = params.filterModel;
|
|
2942
|
+
if (!filterModel || Object.keys(filterModel).length === 0) {
|
|
2943
|
+
return queryParams;
|
|
2944
|
+
}
|
|
2945
|
+
const filters = [];
|
|
2946
|
+
for (const column in filterModel) {
|
|
2947
|
+
const filter = filterModel[column];
|
|
2948
|
+
const condition = this.getCondition(column, filter);
|
|
2949
|
+
if (condition) {
|
|
2950
|
+
filters.push(condition);
|
|
2951
|
+
}
|
|
2952
|
+
}
|
|
2953
|
+
return queryParams.set("$filter", filters.join(" and "));
|
|
2954
|
+
}
|
|
2955
|
+
getCondition(column, filter) {
|
|
2956
|
+
if (filter.operator === "AND" || filter.operator === "OR") {
|
|
2957
|
+
if (Array.isArray(filter.conditions)) {
|
|
2958
|
+
return "(" + filter.conditions.map((subfilter) => this.getCondition(column, subfilter))
|
|
2959
|
+
.join(` ${filter.operator.toLowerCase()} `) + ")";
|
|
2960
|
+
}
|
|
2961
|
+
return null;
|
|
2962
|
+
}
|
|
2963
|
+
const value = filter.filter;
|
|
2964
|
+
switch (filter.filterType) {
|
|
2965
|
+
case "text":
|
|
2966
|
+
const text = (value ?? "").replace(/'/g, "''");
|
|
2967
|
+
if (filter.type === "contains") {
|
|
2968
|
+
return `contains(${column}, '${text}')`;
|
|
2969
|
+
}
|
|
2970
|
+
else if (filter.type === "notContains") {
|
|
2971
|
+
return `not contains(${column}, '${text}')`;
|
|
2972
|
+
}
|
|
2973
|
+
else if (filter.type === "equals") {
|
|
2974
|
+
return `${column} eq '${text}'`;
|
|
2975
|
+
}
|
|
2976
|
+
else if (filter.type === "notEqual") {
|
|
2977
|
+
return `${column} ne '${text}'`;
|
|
2978
|
+
}
|
|
2979
|
+
else if (filter.type === "startsWith") {
|
|
2980
|
+
return `startswith(${column}, '${text}')`;
|
|
2981
|
+
}
|
|
2982
|
+
else if (filter.type === "endsWith") {
|
|
2983
|
+
return `endswith(${column}, '${text}')`;
|
|
2984
|
+
}
|
|
2985
|
+
else if (filter.type === "blank") {
|
|
2986
|
+
return `${column} eq null`;
|
|
2987
|
+
}
|
|
2988
|
+
else if (filter.type === "notBlank") {
|
|
2989
|
+
return `${column} ne null`;
|
|
2990
|
+
}
|
|
2991
|
+
break;
|
|
2992
|
+
case "number":
|
|
2993
|
+
if (filter.type === "equals") {
|
|
2994
|
+
return `${column} eq ${value}`;
|
|
2995
|
+
}
|
|
2996
|
+
else if (filter.type === "greaterThan") {
|
|
2997
|
+
return `${column} gt ${value}`;
|
|
2998
|
+
}
|
|
2999
|
+
else if (filter.type === "lessThan") {
|
|
3000
|
+
return `${column} lt ${value}`;
|
|
3001
|
+
}
|
|
3002
|
+
else if (filter.type === "greaterThanOrEqual") {
|
|
3003
|
+
return `${column} ge ${value}`;
|
|
3004
|
+
}
|
|
3005
|
+
else if (filter.type === "lessThanOrEqual") {
|
|
3006
|
+
return `${column} le ${value}`;
|
|
3007
|
+
}
|
|
3008
|
+
break;
|
|
3009
|
+
case "date":
|
|
3010
|
+
return `${column} eq ${value}`; // Modifica se OData usa formati ISO
|
|
3011
|
+
}
|
|
3012
|
+
return null;
|
|
3013
|
+
}
|
|
3014
|
+
toNumber(value) {
|
|
3015
|
+
if (!value)
|
|
3016
|
+
return undefined;
|
|
3017
|
+
const num = parseFloat(value);
|
|
3018
|
+
return isNaN(num) ? undefined : num;
|
|
3019
|
+
}
|
|
3020
|
+
}
|
|
3021
|
+
|
|
3022
|
+
class RestDataSource {
|
|
3023
|
+
http;
|
|
3024
|
+
baseUrl;
|
|
3025
|
+
params = {};
|
|
3026
|
+
mapFn;
|
|
3027
|
+
constructor(http, baseUrl) {
|
|
3028
|
+
this.http = http;
|
|
3029
|
+
this.baseUrl = baseUrl;
|
|
3030
|
+
}
|
|
3031
|
+
setParam(key, value) {
|
|
3032
|
+
if (value !== undefined && value !== null) {
|
|
3033
|
+
this.params[key] = value;
|
|
3034
|
+
}
|
|
3035
|
+
else {
|
|
3036
|
+
delete this.params[key];
|
|
3037
|
+
}
|
|
3038
|
+
return this;
|
|
3039
|
+
}
|
|
3040
|
+
setParams(params) {
|
|
3041
|
+
this.params = { ...params };
|
|
3042
|
+
return this;
|
|
3043
|
+
}
|
|
3044
|
+
setMapFunction(mapFn) {
|
|
3045
|
+
this.mapFn = mapFn;
|
|
3046
|
+
return this;
|
|
3047
|
+
}
|
|
3048
|
+
getMapFunction() {
|
|
3049
|
+
return this.mapFn;
|
|
3050
|
+
}
|
|
3051
|
+
getParam(key) {
|
|
3052
|
+
return this.params[key];
|
|
3053
|
+
}
|
|
3054
|
+
getParams() {
|
|
3055
|
+
return this.params;
|
|
3056
|
+
}
|
|
3057
|
+
getData() {
|
|
3058
|
+
let httpParams = new HttpParams();
|
|
3059
|
+
Object.keys(this.params).forEach(key => {
|
|
3060
|
+
if (this.params[key] !== undefined && this.params[key] !== null) {
|
|
3061
|
+
httpParams = httpParams.set(key, this.params[key].toString());
|
|
3062
|
+
}
|
|
3063
|
+
});
|
|
3064
|
+
return this.http.get(this.baseUrl, { params: httpParams }).pipe(map(responseArray => this.mapFn ? responseArray.map(item => this.mapFn(item)) : responseArray));
|
|
3065
|
+
}
|
|
3066
|
+
}
|
|
3067
|
+
|
|
3068
|
+
class DataService {
|
|
3069
|
+
http;
|
|
3070
|
+
constructor(http) {
|
|
3071
|
+
this.http = http;
|
|
3072
|
+
}
|
|
3073
|
+
queryOData(url) {
|
|
3074
|
+
return this.createOData(url);
|
|
3075
|
+
}
|
|
3076
|
+
createRest(url) {
|
|
3077
|
+
return new RestDataSource(this.http, url);
|
|
3078
|
+
}
|
|
3079
|
+
createOData(url) {
|
|
3080
|
+
return new ODataSource(url, this.http);
|
|
3081
|
+
}
|
|
3082
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, deps: [{ token: i1$4.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3083
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, providedIn: 'root' });
|
|
3084
|
+
}
|
|
3085
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, decorators: [{
|
|
3086
|
+
type: Injectable,
|
|
3087
|
+
args: [{
|
|
3088
|
+
providedIn: 'root'
|
|
3089
|
+
}]
|
|
3090
|
+
}], ctorParameters: () => [{ type: i1$4.HttpClient }] });
|
|
3091
|
+
|
|
3092
|
+
/*
|
|
3093
|
+
* Public API Surface of sirio
|
|
3094
|
+
*/
|
|
3095
|
+
|
|
3096
|
+
/**
|
|
3097
|
+
* Generated bundle index. Do not edit.
|
|
3098
|
+
*/
|
|
3099
|
+
|
|
3100
|
+
export { DataService, DynamicFormComponent, ScopeService, toFormData };
|
|
3101
|
+
//# sourceMappingURL=wemake4u-form-player-se.mjs.map
|