ngx-gccb 0.6.0 → 0.7.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.
Files changed (48) hide show
  1. package/esm2022/lib/components/form/form-input/form-input.component.mjs +4 -2
  2. package/esm2022/lib/components/modal/modal.component.mjs +3 -3
  3. package/esm2022/lib/components/off-canvas/off-canvas.component.mjs +2 -2
  4. package/esm2022/lib/decorators/log.decorator.mjs +4 -4
  5. package/esm2022/lib/directives/autofocus.directive.mjs +31 -0
  6. package/esm2022/lib/directives/dropdown.directive.mjs +5 -3
  7. package/esm2022/lib/directives/tooltip.directive.mjs +22 -0
  8. package/esm2022/lib/services/token.service.mjs +2 -4
  9. package/esm2022/lib/validators/dateAfter.validator.mjs +1 -1
  10. package/esm2022/lib/validators/match.validator.mjs +1 -1
  11. package/esm2022/lib/validators/timeAfter.validator.mjs +7 -5
  12. package/esm2022/public-api.mjs +19 -6
  13. package/fesm2022/ngx-gccb.mjs +431 -602
  14. package/fesm2022/ngx-gccb.mjs.map +1 -1
  15. package/lib/directives/autofocus.directive.d.ts +11 -0
  16. package/lib/directives/dropdown.directive.d.ts +1 -1
  17. package/lib/directives/tooltip.directive.d.ts +8 -0
  18. package/lib/validators/dateAfter.validator.d.ts +3 -1
  19. package/lib/validators/match.validator.d.ts +3 -1
  20. package/lib/validators/timeAfter.validator.d.ts +4 -2
  21. package/package.json +1 -4
  22. package/public-api.d.ts +18 -5
  23. package/esm2022/lib/directives/index.mjs +0 -11
  24. package/esm2022/lib/helpers/index.mjs +0 -2
  25. package/esm2022/lib/helpers/sort.helper.mjs +0 -31
  26. package/esm2022/lib/interfaces/dictionary.interface.mjs +0 -2
  27. package/esm2022/lib/interfaces/index.mjs +0 -2
  28. package/esm2022/lib/services/clipboard.service.mjs +0 -16
  29. package/esm2022/lib/services/file.service.mjs +0 -71
  30. package/esm2022/lib/services/index.mjs +0 -10
  31. package/esm2022/lib/services/logger.service.mjs +0 -36
  32. package/esm2022/lib/typings/array-extension.mjs +0 -39
  33. package/esm2022/lib/typings/date-extension.mjs +0 -34
  34. package/esm2022/lib/typings/index.mjs +0 -4
  35. package/esm2022/lib/typings/string-extensions.mjs +0 -5
  36. package/lib/directives/index.d.ts +0 -10
  37. package/lib/helpers/index.d.ts +0 -1
  38. package/lib/helpers/sort.helper.d.ts +0 -1
  39. package/lib/interfaces/dictionary.interface.d.ts +0 -3
  40. package/lib/interfaces/index.d.ts +0 -1
  41. package/lib/services/clipboard.service.d.ts +0 -6
  42. package/lib/services/file.service.d.ts +0 -13
  43. package/lib/services/index.d.ts +0 -9
  44. package/lib/services/logger.service.d.ts +0 -18
  45. package/lib/typings/array-extension.d.ts +0 -11
  46. package/lib/typings/date-extension.d.ts +0 -15
  47. package/lib/typings/index.d.ts +0 -8
  48. package/lib/typings/string-extensions.d.ts +0 -6
@@ -2,19 +2,15 @@ import { trigger, transition, style, animate } from '@angular/animations';
2
2
  import * as i1$2 from '@angular/common';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { Component, Input, inject, ElementRef, Renderer2, Directive, HostListener, ViewContainerRef, HostBinding, EventEmitter, Output, Pipe, Injectable, ComponentFactoryResolver } from '@angular/core';
5
+ import { Component, Input, inject, ElementRef, Directive, HostBinding, EventEmitter, Output, Renderer2, HostListener, ViewContainerRef, Pipe, Injectable, ComponentFactoryResolver } from '@angular/core';
6
6
  import * as i1 from '@angular/forms';
7
7
  import { ReactiveFormsModule } from '@angular/forms';
8
- import { createPopper } from '@popperjs/core';
9
8
  import * as i1$1 from '@fortawesome/angular-fontawesome';
10
9
  import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
11
10
  import { faSpinner, faTimes } from '@fortawesome/free-solid-svg-icons';
12
- import saveAs from 'file-saver';
13
- import { unparse, parse } from 'papaparse';
14
- import { BehaviorSubject, Subject } from 'rxjs';
11
+ import { createPopper } from '@popperjs/core';
12
+ import { BehaviorSubject } from 'rxjs';
15
13
  import { DomPortalOutlet, TemplatePortal, ComponentPortal } from '@angular/cdk/portal';
16
- import dayjs from 'dayjs';
17
- import localizedFormat from 'dayjs/plugin/localizedFormat';
18
14
 
19
15
  const FadeRightAnimation = trigger('fadeRightAnimation', [
20
16
  transition(':enter', [style({ transform: 'translateX(-100%)', zIndex: 9999 }), animate('200ms ease-in', style({ transform: 'translateX(0%)' }))]),
@@ -117,23 +113,355 @@ class FormErrorsComponent {
117
113
  </div>
118
114
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
119
115
  }
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormErrorsComponent, decorators: [{
121
- type: Component,
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormErrorsComponent, decorators: [{
117
+ type: Component,
118
+ args: [{
119
+ selector: 'app-form-errors',
120
+ template: `
121
+ <div class="invalid-feedback d-block">
122
+ @if (errorMessages) {
123
+ @for (errorMessage of errorMessages; track $index) {
124
+ <div>{{ errorMessage }}</div>
125
+ }
126
+ }
127
+ </div>
128
+ `,
129
+ standalone: true,
130
+ imports: [CommonModule],
131
+ }]
132
+ }], propDecorators: { errors: [{
133
+ type: Input
134
+ }] } });
135
+
136
+ class FormInputDirective {
137
+ constructor() {
138
+ this.elementRef = inject((ElementRef));
139
+ }
140
+ set formInputInvalid(val) {
141
+ if (val === true) {
142
+ this.elementRef.nativeElement.classList.add('is-invalid');
143
+ }
144
+ else {
145
+ this.elementRef.nativeElement.classList.remove('is-invalid');
146
+ }
147
+ }
148
+ ngOnInit() {
149
+ this.elementRef.nativeElement.classList.add('form-control');
150
+ }
151
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
152
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: FormInputDirective, isStandalone: true, selector: "input,textarea[app-form-input]", inputs: { formInputInvalid: "formInputInvalid" }, ngImport: i0 }); }
153
+ }
154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormInputDirective, decorators: [{
155
+ type: Directive,
156
+ args: [{
157
+ selector: 'input,textarea[app-form-input]',
158
+ standalone: true,
159
+ }]
160
+ }], propDecorators: { formInputInvalid: [{
161
+ type: Input
162
+ }] } });
163
+
164
+ class FormLabelDirective {
165
+ constructor() {
166
+ this.elementClass = 'form-label';
167
+ }
168
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
169
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: FormLabelDirective, isStandalone: true, selector: "label[app-form-label]", host: { properties: { "class": "this.elementClass" } }, ngImport: i0 }); }
170
+ }
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormLabelDirective, decorators: [{
172
+ type: Directive,
173
+ args: [{
174
+ selector: 'label[app-form-label]',
175
+ standalone: true,
176
+ }]
177
+ }], propDecorators: { elementClass: [{
178
+ type: HostBinding,
179
+ args: ['class']
180
+ }] } });
181
+
182
+ class FormSelectDirective {
183
+ constructor() {
184
+ this.elementRef = inject((ElementRef));
185
+ }
186
+ set formInputInvalid(val) {
187
+ if (val === true) {
188
+ this.elementRef.nativeElement.classList.add('is-invalid');
189
+ }
190
+ else {
191
+ this.elementRef.nativeElement.classList.remove('is-invalid');
192
+ }
193
+ }
194
+ ngOnInit() {
195
+ this.elementRef.nativeElement.classList.add('form-select');
196
+ }
197
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormSelectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
198
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: FormSelectDirective, isStandalone: true, selector: "select[app-form-select]", inputs: { formInputInvalid: "formInputInvalid" }, ngImport: i0 }); }
199
+ }
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormSelectDirective, decorators: [{
201
+ type: Directive,
202
+ args: [{
203
+ selector: 'select[app-form-select]',
204
+ standalone: true,
205
+ }]
206
+ }], propDecorators: { formInputInvalid: [{
207
+ type: Input
208
+ }] } });
209
+
210
+ class FormInputComponent {
211
+ constructor() {
212
+ this.inputType = 'text';
213
+ this.isSubmitted = false;
214
+ this.selectOptions = [];
215
+ this.hintText = '';
216
+ this.onEnter = new EventEmitter();
217
+ this.onChange = new EventEmitter();
218
+ }
219
+ handleSelect(event) {
220
+ this.onChange.next(event);
221
+ }
222
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
223
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: FormInputComponent, isStandalone: true, selector: "app-form-input", inputs: { control: "control", inputType: "inputType", inputLabel: "inputLabel", inputPlaceholder: "inputPlaceholder", inputId: "inputId", inputName: "inputName", inputTabIndex: "inputTabIndex", isSubmitted: "isSubmitted", selectOptions: "selectOptions", hintText: "hintText" }, outputs: { onEnter: "onEnter", onChange: "onChange" }, ngImport: i0, template: "<div class=\"form-floating mb-3\">\n\t@if (\n\t\tinputType === 'text' ||\n\t\tinputType === 'number' ||\n\t\tinputType === 'password' ||\n\t\tinputType === 'email' ||\n\t\tinputType === 'date' ||\n\t\tinputType === 'datetime-local' ||\n\t\tinputType === 'time'\n\t) {\n\t\t<input\n\t\t\t[type]=\"inputType\"\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-input\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[placeholder]=\"inputPlaceholder\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\t(keydown.enter)=\"onEnter.next()\" />\n\t}\n\t@if (inputType === 'textarea') {\n\t\t<textarea\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-input\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[placeholder]=\"inputPlaceholder\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\tstyle=\"min-height: 100px\">\n\t\t</textarea>\n\t}\n\t@if (inputType === 'select') {\n\t\t<select\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-select\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\t(keydown.enter)=\"onEnter.next()\"\n\t\t\t(change)=\"handleSelect($event)\">\n\t\t\t<option value=\"\" disabled selected>Select your option</option>\n\n\t\t\t@for (option of selectOptions; track option.value) {\n\t\t\t\t<option [value]=\"option.value\" [disabled]=\"option.disabled\">\n\t\t\t\t\t{{ option.label }}\n\t\t\t\t</option>\n\t\t\t}\n\t\t</select>\n\t}\n\t<label app-form-label [attr.for]=\"inputName || inputId\"> {{ inputLabel }} </label>\n\n\t@if (hintText) {\n\t\t<div class=\"form-text\">\n\t\t\t{{ hintText }}\n\t\t</div>\n\t}\n\n\t@if (isSubmitted && control.errors) {\n\t\t<app-form-errors [errors]=\"control.errors\" />\n\t}\n</div>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: FormErrorsComponent, selector: "app-form-errors", inputs: ["errors"] }, { kind: "directive", type: FormLabelDirective, selector: "label[app-form-label]" }, { kind: "directive", type: FormInputDirective, selector: "input,textarea[app-form-input]", inputs: ["formInputInvalid"] }, { kind: "directive", type: FormSelectDirective, selector: "select[app-form-select]", inputs: ["formInputInvalid"] }] }); }
224
+ }
225
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormInputComponent, decorators: [{
226
+ type: Component,
227
+ args: [{ selector: 'app-form-input', standalone: true, imports: [ReactiveFormsModule, FormErrorsComponent, FormLabelDirective, FormInputDirective, FormSelectDirective], template: "<div class=\"form-floating mb-3\">\n\t@if (\n\t\tinputType === 'text' ||\n\t\tinputType === 'number' ||\n\t\tinputType === 'password' ||\n\t\tinputType === 'email' ||\n\t\tinputType === 'date' ||\n\t\tinputType === 'datetime-local' ||\n\t\tinputType === 'time'\n\t) {\n\t\t<input\n\t\t\t[type]=\"inputType\"\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-input\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[placeholder]=\"inputPlaceholder\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\t(keydown.enter)=\"onEnter.next()\" />\n\t}\n\t@if (inputType === 'textarea') {\n\t\t<textarea\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-input\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[placeholder]=\"inputPlaceholder\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\tstyle=\"min-height: 100px\">\n\t\t</textarea>\n\t}\n\t@if (inputType === 'select') {\n\t\t<select\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-select\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\t(keydown.enter)=\"onEnter.next()\"\n\t\t\t(change)=\"handleSelect($event)\">\n\t\t\t<option value=\"\" disabled selected>Select your option</option>\n\n\t\t\t@for (option of selectOptions; track option.value) {\n\t\t\t\t<option [value]=\"option.value\" [disabled]=\"option.disabled\">\n\t\t\t\t\t{{ option.label }}\n\t\t\t\t</option>\n\t\t\t}\n\t\t</select>\n\t}\n\t<label app-form-label [attr.for]=\"inputName || inputId\"> {{ inputLabel }} </label>\n\n\t@if (hintText) {\n\t\t<div class=\"form-text\">\n\t\t\t{{ hintText }}\n\t\t</div>\n\t}\n\n\t@if (isSubmitted && control.errors) {\n\t\t<app-form-errors [errors]=\"control.errors\" />\n\t}\n</div>\n" }]
228
+ }], propDecorators: { control: [{
229
+ type: Input,
230
+ args: [{ required: true }]
231
+ }], inputType: [{
232
+ type: Input
233
+ }], inputLabel: [{
234
+ type: Input,
235
+ args: [{ required: true }]
236
+ }], inputPlaceholder: [{
237
+ type: Input
238
+ }], inputId: [{
239
+ type: Input
240
+ }], inputName: [{
241
+ type: Input,
242
+ args: [{ required: true }]
243
+ }], inputTabIndex: [{
244
+ type: Input
245
+ }], isSubmitted: [{
246
+ type: Input
247
+ }], selectOptions: [{
248
+ type: Input
249
+ }], hintText: [{
250
+ type: Input
251
+ }], onEnter: [{
252
+ type: Output
253
+ }], onChange: [{
254
+ type: Output
255
+ }] } });
256
+
257
+ class LoadingIndicatorComponent {
258
+ constructor() {
259
+ this.faSpinner = faSpinner;
260
+ }
261
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LoadingIndicatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
262
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: LoadingIndicatorComponent, isStandalone: true, selector: "app-loading-indicator", ngImport: i0, template: "<fa-icon animation=\"spin\" size=\"2x\" [icon]=\"faSpinner\"></fa-icon>\n", styles: [":host{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);color:#495057}\n"], dependencies: [{ kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] }); }
263
+ }
264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LoadingIndicatorComponent, decorators: [{
265
+ type: Component,
266
+ args: [{ selector: 'app-loading-indicator', standalone: true, imports: [FontAwesomeModule], template: "<fa-icon animation=\"spin\" size=\"2x\" [icon]=\"faSpinner\"></fa-icon>\n", styles: [":host{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);color:#495057}\n"] }]
267
+ }] });
268
+
269
+ class BaseModalComponent {
270
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: BaseModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
271
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: BaseModalComponent, isStandalone: true, selector: "app-base-modal", ngImport: i0, template: ``, isInline: true }); }
272
+ }
273
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: BaseModalComponent, decorators: [{
274
+ type: Component,
275
+ args: [{
276
+ selector: 'app-base-modal',
277
+ template: ``,
278
+ standalone: true,
279
+ }]
280
+ }] });
281
+
282
+ class IconButtonDirective {
283
+ constructor() {
284
+ this.elementRef = inject((ElementRef));
285
+ }
286
+ set appIconButton(val) {
287
+ this.color = val || 'primary';
288
+ this.elementRef.nativeElement.classList.add(`icon-button-${this.color}`);
289
+ }
290
+ set shadow(val) {
291
+ if (val === true || val === undefined) {
292
+ this.elementRef.nativeElement.classList.add('shadow-sm');
293
+ }
294
+ else {
295
+ this.elementRef.nativeElement.classList.remove('shadow-sm');
296
+ }
297
+ }
298
+ ngOnInit() {
299
+ this.elementRef.nativeElement.classList.add('btn', 'icon-button');
300
+ }
301
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: IconButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
302
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: IconButtonDirective, isStandalone: true, selector: "button[app-icon-button]", inputs: { appIconButton: ["app-icon-button", "appIconButton"], shadow: "shadow" }, ngImport: i0 }); }
303
+ }
304
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: IconButtonDirective, decorators: [{
305
+ type: Directive,
306
+ args: [{
307
+ selector: 'button[app-icon-button]',
308
+ standalone: true,
309
+ }]
310
+ }], propDecorators: { appIconButton: [{
311
+ type: Input,
312
+ args: ['app-icon-button']
313
+ }], shadow: [{
314
+ type: Input
315
+ }] } });
316
+
317
+ class ModalComponent {
318
+ constructor() {
319
+ this.title = '';
320
+ this.showClose = true;
321
+ this.onClose = new EventEmitter();
322
+ this.dialogCssClasses = [];
323
+ this.faTimes = faTimes;
324
+ }
325
+ set fullScreen(val) {
326
+ if (val === true) {
327
+ this.dialogCssClasses.push(`modal-fullscreen`);
328
+ }
329
+ else {
330
+ this.dialogCssClasses = this.dialogCssClasses.filter(cssClass => cssClass !== 'modal-fullscreen');
331
+ }
332
+ }
333
+ handleClickClose() {
334
+ this.onClose.next();
335
+ }
336
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
337
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: ModalComponent, isStandalone: true, selector: "app-modal", inputs: { title: "title", showClose: "showClose", fullScreen: "fullScreen" }, outputs: { onClose: "onClose" }, ngImport: i0, template: "<div class=\"modal d-flex justify-content-center align-items-center\" tabindex=\"-1\">\n\t<div class=\"modal-dialog\" [ngClass]=\"dialogCssClasses\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header justify-content-between\">\n\t\t\t\t<h5 class=\"modal-title\">{{ title }}</h5>\n\t\t\t\t@if (showClose) {\n\t\t\t\t\t<button app-icon-button=\"secondary\" class=\"ms-2\" (click)=\"handleClickClose()\">\n\t\t\t\t\t\t<fa-icon [icon]=\"faTimes\" />\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t<div class=\"modal-body\">\n\t\t\t\t<ng-content />\n\t\t\t</div>\n\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<ng-content select=\"[footer]\"></ng-content>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n<div class=\"modal-backdrop fade show\"></div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IconButtonDirective, selector: "button[app-icon-button]", inputs: ["app-icon-button", "shadow"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] }); }
338
+ }
339
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ModalComponent, decorators: [{
340
+ type: Component,
341
+ args: [{ selector: 'app-modal', standalone: true, imports: [CommonModule, IconButtonDirective, FontAwesomeModule], template: "<div class=\"modal d-flex justify-content-center align-items-center\" tabindex=\"-1\">\n\t<div class=\"modal-dialog\" [ngClass]=\"dialogCssClasses\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header justify-content-between\">\n\t\t\t\t<h5 class=\"modal-title\">{{ title }}</h5>\n\t\t\t\t@if (showClose) {\n\t\t\t\t\t<button app-icon-button=\"secondary\" class=\"ms-2\" (click)=\"handleClickClose()\">\n\t\t\t\t\t\t<fa-icon [icon]=\"faTimes\" />\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t<div class=\"modal-body\">\n\t\t\t\t<ng-content />\n\t\t\t</div>\n\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<ng-content select=\"[footer]\"></ng-content>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n<div class=\"modal-backdrop fade show\"></div>\n" }]
342
+ }], propDecorators: { title: [{
343
+ type: Input
344
+ }], showClose: [{
345
+ type: Input
346
+ }], fullScreen: [{
347
+ type: Input
348
+ }], onClose: [{
349
+ type: Output
350
+ }] } });
351
+
352
+ class OffCanvasComponent {
353
+ constructor() {
354
+ this.title = '';
355
+ this.onClose = new EventEmitter();
356
+ this.faTimes = faTimes;
357
+ }
358
+ handleClickClose() {
359
+ this.onClose.next();
360
+ }
361
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: OffCanvasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
362
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: OffCanvasComponent, isStandalone: true, selector: "app-off-canvas", inputs: { title: "title" }, outputs: { onClose: "onClose" }, ngImport: i0, template: "<div class=\"offcanvas offcanvas-start show\" tabindex=\"-1\" id=\"offcanvas\" style=\"z-index: 1051\">\n\t<div class=\"offcanvas-header justify-content-between\">\n\t\t<h5 class=\"offcanvas-title\" id=\"offcanvasLabel\">{{ title }}</h5>\n\t\t<button app-icon-button=\"secondary\" class=\"ml-auto\" (click)=\"handleClickClose()\">\n\t\t\t<fa-icon [icon]=\"faTimes\" />\n\t\t</button>\n\t</div>\n\t<ng-content />\n</div>\n\n<div class=\"modal-backdrop fade show\" (click)=\"handleClickClose()\"></div>\n", styles: [":host{z-index:9999;display:block}\n"], dependencies: [{ kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "directive", type: IconButtonDirective, selector: "button[app-icon-button]", inputs: ["app-icon-button", "shadow"] }] }); }
363
+ }
364
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: OffCanvasComponent, decorators: [{
365
+ type: Component,
366
+ args: [{ selector: 'app-off-canvas', standalone: true, imports: [FontAwesomeModule, IconButtonDirective], template: "<div class=\"offcanvas offcanvas-start show\" tabindex=\"-1\" id=\"offcanvas\" style=\"z-index: 1051\">\n\t<div class=\"offcanvas-header justify-content-between\">\n\t\t<h5 class=\"offcanvas-title\" id=\"offcanvasLabel\">{{ title }}</h5>\n\t\t<button app-icon-button=\"secondary\" class=\"ml-auto\" (click)=\"handleClickClose()\">\n\t\t\t<fa-icon [icon]=\"faTimes\" />\n\t\t</button>\n\t</div>\n\t<ng-content />\n</div>\n\n<div class=\"modal-backdrop fade show\" (click)=\"handleClickClose()\"></div>\n", styles: [":host{z-index:9999;display:block}\n"] }]
367
+ }], propDecorators: { title: [{
368
+ type: Input
369
+ }], onClose: [{
370
+ type: Output
371
+ }] } });
372
+
373
+ class ToastComponent {
374
+ constructor() {
375
+ this.onClose = new EventEmitter();
376
+ }
377
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
378
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: ToastComponent, isStandalone: true, selector: "app-toast", inputs: { message: "message" }, outputs: { onClose: "onClose" }, ngImport: i0, template: `
379
+ <div class="toast align-items-center text-bg-dark border-0 show">
380
+ <div class="d-flex">
381
+ <div class="toast-body" [innerHTML]="message"></div>
382
+ <button class="btn-close btn-close-white me-2 m-auto" (click)="onClose.next()"></button>
383
+ </div>
384
+ </div>
385
+ `, isInline: true, styles: [":host{position:fixed;bottom:20px;left:50%;transform:translate(-50%);z-index:1051}\n"] }); }
386
+ }
387
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ToastComponent, decorators: [{
388
+ type: Component,
389
+ args: [{ selector: 'app-toast', template: `
390
+ <div class="toast align-items-center text-bg-dark border-0 show">
391
+ <div class="d-flex">
392
+ <div class="toast-body" [innerHTML]="message"></div>
393
+ <button class="btn-close btn-close-white me-2 m-auto" (click)="onClose.next()"></button>
394
+ </div>
395
+ </div>
396
+ `, standalone: true, styles: [":host{position:fixed;bottom:20px;left:50%;transform:translate(-50%);z-index:1051}\n"] }]
397
+ }], propDecorators: { message: [{
398
+ type: Input
399
+ }], onClose: [{
400
+ type: Output
401
+ }] } });
402
+
403
+ const Class = (className) => (obj) => {
404
+ Object.defineProperty(obj.prototype, 'className', {
405
+ value: className,
406
+ writable: false,
407
+ });
408
+ };
409
+
410
+ var LogType;
411
+ (function (LogType) {
412
+ LogType["log"] = "log";
413
+ LogType["info"] = "info";
414
+ LogType["warn"] = "warn";
415
+ LogType["debug"] = "debug";
416
+ LogType["error"] = "error";
417
+ })(LogType || (LogType = {}));
418
+
419
+ /* eslint-disable @typescript-eslint/naming-convention */
420
+ /* eslint-disable prefer-arrow/prefer-arrow-functions */
421
+ function Log(methodName, logType = LogType.log, logArgs) {
422
+ return function (target, key, descriptor) {
423
+ const method = descriptor.value;
424
+ descriptor.value = function (...args) {
425
+ const className = target.constructor.name;
426
+ const newMethodName = methodName || key;
427
+ let logStatements = [className, newMethodName];
428
+ if (logArgs && args && args.length > 0) {
429
+ logStatements = logStatements.concat(args);
430
+ }
431
+ // eslint-disable-next-line no-console
432
+ console[logType](...logStatements);
433
+ return method.apply(this, args);
434
+ };
435
+ return descriptor;
436
+ };
437
+ }
438
+
439
+ class AutofocusDirective {
440
+ constructor(el) {
441
+ this.el = el;
442
+ this.focus = true;
443
+ }
444
+ set autofocus(condition) {
445
+ this.focus = condition !== false;
446
+ }
447
+ ngAfterViewInit() {
448
+ if (this.focus) {
449
+ setTimeout(() => {
450
+ this.el.nativeElement.focus();
451
+ this.el.nativeElement.classList.add('focus-ring');
452
+ }, 100);
453
+ }
454
+ }
455
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AutofocusDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
456
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: AutofocusDirective, isStandalone: true, selector: "[autofocus]", inputs: { autofocus: "autofocus" }, ngImport: i0 }); }
457
+ }
458
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AutofocusDirective, decorators: [{
459
+ type: Directive,
122
460
  args: [{
123
- selector: 'app-form-errors',
124
- template: `
125
- <div class="invalid-feedback d-block">
126
- @if (errorMessages) {
127
- @for (errorMessage of errorMessages; track $index) {
128
- <div>{{ errorMessage }}</div>
129
- }
130
- }
131
- </div>
132
- `,
461
+ selector: '[autofocus]',
133
462
  standalone: true,
134
- imports: [CommonModule],
135
463
  }]
136
- }], propDecorators: { errors: [{
464
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { autofocus: [{
137
465
  type: Input
138
466
  }] } });
139
467
 
@@ -312,7 +640,9 @@ class DropdownDirective {
312
640
  this.isDropdownVisible = false;
313
641
  }
314
642
  onDocumentClick(event) {
315
- if (this.wrapperElement && !this.wrapperElement.contains(event.target) && !this.elementRef.nativeElement.contains(event.target)) {
643
+ if (this.wrapperElement &&
644
+ !this.wrapperElement.contains(event.target) &&
645
+ !this.elementRef.nativeElement.contains(event.target)) {
316
646
  this.closeDropdown();
317
647
  }
318
648
  }
@@ -339,424 +669,110 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
339
669
  }], placement: [{
340
670
  type: Input
341
671
  }], toggleDropdown: [{
342
- type: HostListener,
343
- args: ['click']
344
- }] } });
345
-
346
- class FormInputDirective {
347
- constructor() {
348
- this.elementRef = inject((ElementRef));
349
- }
350
- set formInputInvalid(val) {
351
- if (val === true) {
352
- this.elementRef.nativeElement.classList.add('is-invalid');
353
- }
354
- else {
355
- this.elementRef.nativeElement.classList.remove('is-invalid');
356
- }
357
- }
358
- ngOnInit() {
359
- this.elementRef.nativeElement.classList.add('form-control');
360
- }
361
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
362
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: FormInputDirective, isStandalone: true, selector: "input,textarea[app-form-input]", inputs: { formInputInvalid: "formInputInvalid" }, ngImport: i0 }); }
363
- }
364
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormInputDirective, decorators: [{
365
- type: Directive,
366
- args: [{
367
- selector: 'input,textarea[app-form-input]',
368
- standalone: true,
369
- }]
370
- }], propDecorators: { formInputInvalid: [{
371
- type: Input
372
- }] } });
373
-
374
- class FormLabelDirective {
375
- constructor() {
376
- this.elementClass = 'form-label';
377
- }
378
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
379
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: FormLabelDirective, isStandalone: true, selector: "label[app-form-label]", host: { properties: { "class": "this.elementClass" } }, ngImport: i0 }); }
380
- }
381
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormLabelDirective, decorators: [{
382
- type: Directive,
383
- args: [{
384
- selector: 'label[app-form-label]',
385
- standalone: true,
386
- }]
387
- }], propDecorators: { elementClass: [{
388
- type: HostBinding,
389
- args: ['class']
390
- }] } });
391
-
392
- class FormSelectDirective {
393
- constructor() {
394
- this.elementRef = inject((ElementRef));
395
- }
396
- set formInputInvalid(val) {
397
- if (val === true) {
398
- this.elementRef.nativeElement.classList.add('is-invalid');
399
- }
400
- else {
401
- this.elementRef.nativeElement.classList.remove('is-invalid');
402
- }
403
- }
404
- ngOnInit() {
405
- this.elementRef.nativeElement.classList.add('form-select');
406
- }
407
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormSelectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
408
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: FormSelectDirective, isStandalone: true, selector: "select[app-form-select]", inputs: { formInputInvalid: "formInputInvalid" }, ngImport: i0 }); }
409
- }
410
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormSelectDirective, decorators: [{
411
- type: Directive,
412
- args: [{
413
- selector: 'select[app-form-select]',
414
- standalone: true,
415
- }]
416
- }], propDecorators: { formInputInvalid: [{
417
- type: Input
418
- }] } });
419
-
420
- class IconButtonDirective {
421
- constructor() {
422
- this.elementRef = inject((ElementRef));
423
- }
424
- set appIconButton(val) {
425
- this.color = val || 'primary';
426
- this.elementRef.nativeElement.classList.add(`icon-button-${this.color}`);
427
- }
428
- set shadow(val) {
429
- if (val === true || val === undefined) {
430
- this.elementRef.nativeElement.classList.add('shadow-sm');
431
- }
432
- else {
433
- this.elementRef.nativeElement.classList.remove('shadow-sm');
434
- }
435
- }
436
- ngOnInit() {
437
- this.elementRef.nativeElement.classList.add('btn', 'icon-button');
438
- }
439
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: IconButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
440
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: IconButtonDirective, isStandalone: true, selector: "button[app-icon-button]", inputs: { appIconButton: ["app-icon-button", "appIconButton"], shadow: "shadow" }, ngImport: i0 }); }
441
- }
442
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: IconButtonDirective, decorators: [{
443
- type: Directive,
444
- args: [{
445
- selector: 'button[app-icon-button]',
446
- standalone: true,
447
- }]
448
- }], propDecorators: { appIconButton: [{
449
- type: Input,
450
- args: ['app-icon-button']
451
- }], shadow: [{
452
- type: Input
453
- }] } });
454
-
455
- class ListGroupItemAvatarDirective {
456
- constructor() {
457
- this.elementRef = inject((ElementRef));
458
- }
459
- ngOnInit() {
460
- this.elementRef.nativeElement.classList.add('list-group-item-avatar');
461
- }
462
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupItemAvatarDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
463
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: ListGroupItemAvatarDirective, isStandalone: true, selector: "[app-list-group-item-avatar]", ngImport: i0 }); }
464
- }
465
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupItemAvatarDirective, decorators: [{
466
- type: Directive,
467
- args: [{
468
- selector: '[app-list-group-item-avatar]',
469
- standalone: true,
470
- }]
471
- }] });
472
-
473
- class ListGroupItemDirective {
474
- constructor() {
475
- this.renderer = inject(Renderer2);
476
- this.elementRef = inject((ElementRef));
477
- this._isActive = false;
478
- this.onOutsideClick = new EventEmitter();
479
- }
480
- set isActive(val) {
481
- this._isActive = val;
482
- if (val) {
483
- this.elementRef.nativeElement.classList.add('focus-active');
484
- }
485
- else {
486
- this.elementRef.nativeElement.classList.remove('focus-active');
487
- }
488
- }
489
- ngOnInit() {
490
- this.elementRef.nativeElement.classList.add('list-group-item');
491
- this.elementRef.nativeElement.classList.add('list-group-item-action');
492
- this.elementRef.nativeElement.classList.add('d-flex', 'flex-row', 'align-items-center');
493
- this.renderer.listen('window', 'click', (e) => {
494
- if (e.target !== this.elementRef.nativeElement) {
495
- this._isActive = false;
496
- this.elementRef.nativeElement.classList.remove('focus-active');
497
- this.onOutsideClick.next();
498
- }
499
- });
500
- }
501
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
502
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: ListGroupItemDirective, isStandalone: true, selector: "li[app-list-group-item]", inputs: { isActive: "isActive" }, outputs: { onOutsideClick: "onOutsideClick" }, ngImport: i0 }); }
503
- }
504
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupItemDirective, decorators: [{
505
- type: Directive,
506
- args: [{
507
- selector: 'li[app-list-group-item]',
508
- standalone: true,
509
- }]
510
- }], propDecorators: { isActive: [{
511
- type: Input
512
- }], onOutsideClick: [{
513
- type: Output
514
- }] } });
515
-
516
- class ListGroupDirective {
517
- constructor() {
518
- this.elementRef = inject((ElementRef));
519
- }
520
- ngOnInit() {
521
- this.elementRef.nativeElement.classList.add('list-group');
522
- this.elementRef.nativeElement.classList.add('list-group-flush');
523
- }
524
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
525
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: ListGroupDirective, isStandalone: true, selector: "ul[app-list-group]", ngImport: i0 }); }
526
- }
527
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupDirective, decorators: [{
528
- type: Directive,
529
- args: [{
530
- selector: 'ul[app-list-group]',
531
- standalone: true,
532
- }]
533
- }] });
534
-
535
- class FormInputComponent {
536
- constructor() {
537
- this.inputType = 'text';
538
- this.isSubmitted = false;
539
- this.selectOptions = [];
540
- this.hintText = '';
541
- this.onEnter = new EventEmitter();
542
- this.onChange = new EventEmitter();
543
- }
544
- handleSelect(event) {
545
- this.onChange.next(event);
546
- }
547
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
548
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: FormInputComponent, isStandalone: true, selector: "app-form-input", inputs: { control: "control", inputType: "inputType", inputLabel: "inputLabel", inputPlaceholder: "inputPlaceholder", inputId: "inputId", inputName: "inputName", inputTabIndex: "inputTabIndex", isSubmitted: "isSubmitted", selectOptions: "selectOptions", hintText: "hintText" }, outputs: { onEnter: "onEnter", onChange: "onChange" }, ngImport: i0, template: "<div class=\"form-floating mb-3\">\n\t@if (\n\t\tinputType === 'text' ||\n\t\tinputType === 'number' ||\n\t\tinputType === 'password' ||\n\t\tinputType === 'email' ||\n\t\tinputType === 'date' ||\n\t\tinputType === 'datetime-local' ||\n\t\tinputType === 'time'\n\t) {\n\t\t<input\n\t\t\t[type]=\"inputType\"\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-input\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[placeholder]=\"inputPlaceholder\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\t(keydown.enter)=\"onEnter.next()\" />\n\t}\n\t@if (inputType === 'textarea') {\n\t\t<textarea\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-input\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[placeholder]=\"inputPlaceholder\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\tstyle=\"min-height: 100px\">\n\t\t</textarea>\n\t}\n\t@if (inputType === 'select') {\n\t\t<select\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-select\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\t(keydown.enter)=\"onEnter.next()\"\n\t\t\t(change)=\"handleSelect($event)\">\n\t\t\t<option value=\"\" disabled selected>Select your option</option>\n\n\t\t\t@for (option of selectOptions; track option.value) {\n\t\t\t\t<option [value]=\"option.value\" [disabled]=\"option.disabled\">\n\t\t\t\t\t{{ option.label }}\n\t\t\t\t</option>\n\t\t\t}\n\t\t</select>\n\t}\n\t<label app-form-label [attr.for]=\"inputName || inputId\"> {{ inputLabel }} </label>\n\n\t@if (hintText) {\n\t\t<div class=\"form-text\">\n\t\t\t{{ hintText }}\n\t\t</div>\n\t}\n\n\t@if (isSubmitted && control.errors) {\n\t\t<app-form-errors [errors]=\"control.errors\" />\n\t}\n</div>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: FormErrorsComponent, selector: "app-form-errors", inputs: ["errors"] }, { kind: "directive", type: FormLabelDirective, selector: "label[app-form-label]" }, { kind: "directive", type: FormInputDirective, selector: "input,textarea[app-form-input]", inputs: ["formInputInvalid"] }, { kind: "directive", type: FormSelectDirective, selector: "select[app-form-select]", inputs: ["formInputInvalid"] }] }); }
549
- }
550
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FormInputComponent, decorators: [{
551
- type: Component,
552
- args: [{ selector: 'app-form-input', standalone: true, imports: [ReactiveFormsModule, FormErrorsComponent, FormLabelDirective, FormInputDirective, FormSelectDirective], template: "<div class=\"form-floating mb-3\">\n\t@if (\n\t\tinputType === 'text' ||\n\t\tinputType === 'number' ||\n\t\tinputType === 'password' ||\n\t\tinputType === 'email' ||\n\t\tinputType === 'date' ||\n\t\tinputType === 'datetime-local' ||\n\t\tinputType === 'time'\n\t) {\n\t\t<input\n\t\t\t[type]=\"inputType\"\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-input\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[placeholder]=\"inputPlaceholder\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\t(keydown.enter)=\"onEnter.next()\" />\n\t}\n\t@if (inputType === 'textarea') {\n\t\t<textarea\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-input\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[placeholder]=\"inputPlaceholder\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\tstyle=\"min-height: 100px\">\n\t\t</textarea>\n\t}\n\t@if (inputType === 'select') {\n\t\t<select\n\t\t\t[attr.id]=\"inputId || inputName\"\n\t\t\t[attr.name]=\"inputName\"\n\t\t\t[formControl]=\"control\"\n\t\t\tapp-form-select\n\t\t\t[formInputInvalid]=\"isSubmitted && !!control.errors\"\n\t\t\t[tabIndex]=\"inputTabIndex\"\n\t\t\t(keydown.enter)=\"onEnter.next()\"\n\t\t\t(change)=\"handleSelect($event)\">\n\t\t\t<option value=\"\" disabled selected>Select your option</option>\n\n\t\t\t@for (option of selectOptions; track option.value) {\n\t\t\t\t<option [value]=\"option.value\" [disabled]=\"option.disabled\">\n\t\t\t\t\t{{ option.label }}\n\t\t\t\t</option>\n\t\t\t}\n\t\t</select>\n\t}\n\t<label app-form-label [attr.for]=\"inputName || inputId\"> {{ inputLabel }} </label>\n\n\t@if (hintText) {\n\t\t<div class=\"form-text\">\n\t\t\t{{ hintText }}\n\t\t</div>\n\t}\n\n\t@if (isSubmitted && control.errors) {\n\t\t<app-form-errors [errors]=\"control.errors\" />\n\t}\n</div>\n" }]
553
- }], propDecorators: { control: [{
554
- type: Input,
555
- args: [{ required: true }]
556
- }], inputType: [{
557
- type: Input
558
- }], inputLabel: [{
559
- type: Input,
560
- args: [{ required: true }]
561
- }], inputPlaceholder: [{
562
- type: Input
563
- }], inputId: [{
564
- type: Input
565
- }], inputName: [{
566
- type: Input,
567
- args: [{ required: true }]
568
- }], inputTabIndex: [{
569
- type: Input
570
- }], isSubmitted: [{
571
- type: Input
572
- }], selectOptions: [{
573
- type: Input
574
- }], hintText: [{
575
- type: Input
576
- }], onEnter: [{
577
- type: Output
578
- }], onChange: [{
579
- type: Output
672
+ type: HostListener,
673
+ args: ['click']
580
674
  }] } });
581
675
 
582
- class LoadingIndicatorComponent {
676
+ class ListGroupItemAvatarDirective {
583
677
  constructor() {
584
- this.faSpinner = faSpinner;
678
+ this.elementRef = inject((ElementRef));
585
679
  }
586
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LoadingIndicatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
587
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: LoadingIndicatorComponent, isStandalone: true, selector: "app-loading-indicator", ngImport: i0, template: "<fa-icon animation=\"spin\" size=\"2x\" [icon]=\"faSpinner\"></fa-icon>\n", styles: [":host{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);color:#495057}\n"], dependencies: [{ kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] }); }
588
- }
589
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LoadingIndicatorComponent, decorators: [{
590
- type: Component,
591
- args: [{ selector: 'app-loading-indicator', standalone: true, imports: [FontAwesomeModule], template: "<fa-icon animation=\"spin\" size=\"2x\" [icon]=\"faSpinner\"></fa-icon>\n", styles: [":host{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);color:#495057}\n"] }]
592
- }] });
593
-
594
- class BaseModalComponent {
595
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: BaseModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
596
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: BaseModalComponent, isStandalone: true, selector: "app-base-modal", ngImport: i0, template: ``, isInline: true }); }
680
+ ngOnInit() {
681
+ this.elementRef.nativeElement.classList.add('list-group-item-avatar');
682
+ }
683
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupItemAvatarDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
684
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: ListGroupItemAvatarDirective, isStandalone: true, selector: "[app-list-group-item-avatar]", ngImport: i0 }); }
597
685
  }
598
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: BaseModalComponent, decorators: [{
599
- type: Component,
686
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupItemAvatarDirective, decorators: [{
687
+ type: Directive,
600
688
  args: [{
601
- selector: 'app-base-modal',
602
- template: ``,
689
+ selector: '[app-list-group-item-avatar]',
603
690
  standalone: true,
604
691
  }]
605
692
  }] });
606
693
 
607
- class ModalComponent {
694
+ class ListGroupItemDirective {
608
695
  constructor() {
609
- this.title = '';
610
- this.showClose = true;
611
- this.onClose = new EventEmitter();
612
- this.dialogCssClasses = [];
613
- this.faTimes = faTimes;
696
+ this.renderer = inject(Renderer2);
697
+ this.elementRef = inject((ElementRef));
698
+ this._isActive = false;
699
+ this.onOutsideClick = new EventEmitter();
614
700
  }
615
- set fullScreen(val) {
616
- if (val === true) {
617
- this.dialogCssClasses.push(`modal-fullscreen`);
701
+ set isActive(val) {
702
+ this._isActive = val;
703
+ if (val) {
704
+ this.elementRef.nativeElement.classList.add('focus-active');
618
705
  }
619
706
  else {
620
- this.dialogCssClasses = this.dialogCssClasses.removeBy((cssClass) => cssClass, 'modal-fullscreen');
707
+ this.elementRef.nativeElement.classList.remove('focus-active');
621
708
  }
622
709
  }
623
- handleClickClose() {
624
- this.onClose.next();
710
+ ngOnInit() {
711
+ this.elementRef.nativeElement.classList.add('list-group-item');
712
+ this.elementRef.nativeElement.classList.add('list-group-item-action');
713
+ this.elementRef.nativeElement.classList.add('d-flex', 'flex-row', 'align-items-center');
714
+ this.renderer.listen('window', 'click', (e) => {
715
+ if (e.target !== this.elementRef.nativeElement) {
716
+ this._isActive = false;
717
+ this.elementRef.nativeElement.classList.remove('focus-active');
718
+ this.onOutsideClick.next();
719
+ }
720
+ });
625
721
  }
626
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
627
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: ModalComponent, isStandalone: true, selector: "app-modal", inputs: { title: "title", showClose: "showClose", fullScreen: "fullScreen" }, outputs: { onClose: "onClose" }, ngImport: i0, template: "<div class=\"modal d-flex justify-content-center align-items-center\" tabindex=\"-1\">\n\t<div class=\"modal-dialog\" [ngClass]=\"dialogCssClasses\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header justify-content-between\">\n\t\t\t\t<h5 class=\"modal-title\">{{ title }}</h5>\n\t\t\t\t@if (showClose) {\n\t\t\t\t\t<button app-icon-button=\"secondary\" class=\"ms-2\" (click)=\"handleClickClose()\">\n\t\t\t\t\t\t<fa-icon [icon]=\"faTimes\" />\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t<div class=\"modal-body\">\n\t\t\t\t<ng-content />\n\t\t\t</div>\n\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<ng-content select=\"[footer]\"></ng-content>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n<div class=\"modal-backdrop fade show\"></div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IconButtonDirective, selector: "button[app-icon-button]", inputs: ["app-icon-button", "shadow"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] }); }
722
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
723
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: ListGroupItemDirective, isStandalone: true, selector: "li[app-list-group-item]", inputs: { isActive: "isActive" }, outputs: { onOutsideClick: "onOutsideClick" }, ngImport: i0 }); }
628
724
  }
629
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ModalComponent, decorators: [{
630
- type: Component,
631
- args: [{ selector: 'app-modal', standalone: true, imports: [CommonModule, IconButtonDirective, FontAwesomeModule], template: "<div class=\"modal d-flex justify-content-center align-items-center\" tabindex=\"-1\">\n\t<div class=\"modal-dialog\" [ngClass]=\"dialogCssClasses\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header justify-content-between\">\n\t\t\t\t<h5 class=\"modal-title\">{{ title }}</h5>\n\t\t\t\t@if (showClose) {\n\t\t\t\t\t<button app-icon-button=\"secondary\" class=\"ms-2\" (click)=\"handleClickClose()\">\n\t\t\t\t\t\t<fa-icon [icon]=\"faTimes\" />\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t<div class=\"modal-body\">\n\t\t\t\t<ng-content />\n\t\t\t</div>\n\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<ng-content select=\"[footer]\"></ng-content>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n<div class=\"modal-backdrop fade show\"></div>\n" }]
632
- }], propDecorators: { title: [{
633
- type: Input
634
- }], showClose: [{
635
- type: Input
636
- }], fullScreen: [{
725
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupItemDirective, decorators: [{
726
+ type: Directive,
727
+ args: [{
728
+ selector: 'li[app-list-group-item]',
729
+ standalone: true,
730
+ }]
731
+ }], propDecorators: { isActive: [{
637
732
  type: Input
638
- }], onClose: [{
733
+ }], onOutsideClick: [{
639
734
  type: Output
640
735
  }] } });
641
736
 
642
- class OffCanvasComponent {
737
+ class ListGroupDirective {
643
738
  constructor() {
644
- this.title = '';
645
- this.onClose = new EventEmitter();
646
- this.faTimes = faTimes;
739
+ this.elementRef = inject((ElementRef));
647
740
  }
648
- handleClickClose() {
649
- this.onClose.next();
741
+ ngOnInit() {
742
+ this.elementRef.nativeElement.classList.add('list-group');
743
+ this.elementRef.nativeElement.classList.add('list-group-flush');
650
744
  }
651
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: OffCanvasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
652
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: OffCanvasComponent, isStandalone: true, selector: "app-off-canvas", inputs: { title: "title" }, outputs: { onClose: "onClose" }, ngImport: i0, template: "<div class=\"offcanvas offcanvas-start show\" tabindex=\"-1\" id=\"offcanvas\" style=\"z-index: 1051\">\n\t<div class=\"offcanvas-header justify-content-between\">\n\t\t<h5 class=\"offcanvas-title\" id=\"offcanvasLabel\">{{ title }}</h5>\n\t\t<button app-icon-button=\"secondary\" class=\"ml-auto\" (click)=\"handleClickClose()\">\n\t\t\t<fa-icon [icon]=\"faTimes\" />\n\t\t</button>\n\t</div>\n\t<ng-content />\n</div>\n\n<div class=\"modal-backdrop fade show\" (click)=\"handleClickClose()\"></div>\n", styles: [":host{z-index:9999;display:block}\n"], dependencies: [{ kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "directive", type: IconButtonDirective, selector: "button[app-icon-button]", inputs: ["app-icon-button", "shadow"] }] }); }
745
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
746
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: ListGroupDirective, isStandalone: true, selector: "ul[app-list-group]", ngImport: i0 }); }
653
747
  }
654
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: OffCanvasComponent, decorators: [{
655
- type: Component,
656
- args: [{ selector: 'app-off-canvas', standalone: true, imports: [FontAwesomeModule, IconButtonDirective], template: "<div class=\"offcanvas offcanvas-start show\" tabindex=\"-1\" id=\"offcanvas\" style=\"z-index: 1051\">\n\t<div class=\"offcanvas-header justify-content-between\">\n\t\t<h5 class=\"offcanvas-title\" id=\"offcanvasLabel\">{{ title }}</h5>\n\t\t<button app-icon-button=\"secondary\" class=\"ml-auto\" (click)=\"handleClickClose()\">\n\t\t\t<fa-icon [icon]=\"faTimes\" />\n\t\t</button>\n\t</div>\n\t<ng-content />\n</div>\n\n<div class=\"modal-backdrop fade show\" (click)=\"handleClickClose()\"></div>\n", styles: [":host{z-index:9999;display:block}\n"] }]
657
- }], propDecorators: { title: [{
658
- type: Input
659
- }], onClose: [{
660
- type: Output
661
- }] } });
748
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ListGroupDirective, decorators: [{
749
+ type: Directive,
750
+ args: [{
751
+ selector: 'ul[app-list-group]',
752
+ standalone: true,
753
+ }]
754
+ }] });
662
755
 
663
- class ToastComponent {
756
+ class TooltipDirective {
664
757
  constructor() {
665
- this.onClose = new EventEmitter();
758
+ this.placement = 'bottom-start';
666
759
  }
667
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
668
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: ToastComponent, isStandalone: true, selector: "app-toast", inputs: { message: "message" }, outputs: { onClose: "onClose" }, ngImport: i0, template: `
669
- <div class="toast align-items-center text-bg-dark border-0 show">
670
- <div class="d-flex">
671
- <div class="toast-body" [innerHTML]="message"></div>
672
- <button class="btn-close btn-close-white me-2 m-auto" (click)="onClose.next()"></button>
673
- </div>
674
- </div>
675
- `, isInline: true, styles: [":host{position:fixed;bottom:20px;left:50%;transform:translate(-50%);z-index:1051}\n"] }); }
760
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: TooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
761
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: TooltipDirective, isStandalone: true, selector: "[appTooltip]", inputs: { tooltip: ["appTooltip", "tooltip"], placement: "placement" }, ngImport: i0 }); }
676
762
  }
677
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ToastComponent, decorators: [{
678
- type: Component,
679
- args: [{ selector: 'app-toast', template: `
680
- <div class="toast align-items-center text-bg-dark border-0 show">
681
- <div class="d-flex">
682
- <div class="toast-body" [innerHTML]="message"></div>
683
- <button class="btn-close btn-close-white me-2 m-auto" (click)="onClose.next()"></button>
684
- </div>
685
- </div>
686
- `, standalone: true, styles: [":host{position:fixed;bottom:20px;left:50%;transform:translate(-50%);z-index:1051}\n"] }]
687
- }], propDecorators: { message: [{
763
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: TooltipDirective, decorators: [{
764
+ type: Directive,
765
+ args: [{
766
+ selector: '[appTooltip]',
767
+ standalone: true,
768
+ }]
769
+ }], propDecorators: { tooltip: [{
770
+ type: Input,
771
+ args: ['appTooltip']
772
+ }], placement: [{
688
773
  type: Input
689
- }], onClose: [{
690
- type: Output
691
774
  }] } });
692
775
 
693
- const Class = (className) => (obj) => {
694
- Object.defineProperty(obj.prototype, 'className', {
695
- value: className,
696
- writable: false,
697
- });
698
- };
699
-
700
- var LogType;
701
- (function (LogType) {
702
- LogType["log"] = "log";
703
- LogType["info"] = "info";
704
- LogType["warn"] = "warn";
705
- LogType["debug"] = "debug";
706
- LogType["error"] = "error";
707
- })(LogType || (LogType = {}));
708
-
709
- /* eslint-disable @typescript-eslint/naming-convention */
710
- /* eslint-disable prefer-arrow/prefer-arrow-functions */
711
- function Log(methodName, logType = LogType.log, logArgs) {
712
- return function (target, key, descriptor) {
713
- const method = descriptor.value;
714
- descriptor.value = function (...args) {
715
- const className = target.className || target.constructor.name;
716
- const newMethodName = methodName || key;
717
- let logStatements = [className, newMethodName];
718
- if (logArgs && args && args.length > 0) {
719
- logStatements = logStatements.concat([...args]);
720
- }
721
- // eslint-disable-next-line no-console
722
- console[logType].apply(console, [...logStatements]);
723
- return method.apply(this, args);
724
- };
725
- return descriptor;
726
- };
727
- }
728
-
729
- var SortOrder;
730
- (function (SortOrder) {
731
- SortOrder[SortOrder["NONE"] = 0] = "NONE";
732
- SortOrder[SortOrder["ASC"] = 1] = "ASC";
733
- SortOrder[SortOrder["DESC"] = -1] = "DESC";
734
- })(SortOrder || (SortOrder = {}));
735
- const compareString = (valA, valB, ascending) => {
736
- return valA.localeCompare(valB) * (ascending ? SortOrder.ASC : SortOrder.DESC);
737
- };
738
- const getSortOrder = (valA, valB) => {
739
- return valA < valB ? SortOrder.DESC : valA === valB ? SortOrder.NONE : SortOrder.ASC;
740
- };
741
- const compareNonString = (valA, valB, ascending) => {
742
- return getSortOrder(valA, valB) * (ascending ? SortOrder.ASC : SortOrder.DESC);
743
- };
744
- const getValue = (valA, valB, ascending) => {
745
- let result = 0;
746
- if (typeof valA === 'string' && typeof valB === 'string') {
747
- result = compareString(valA, valB, ascending);
748
- }
749
- else {
750
- result = compareNonString(valA, valB, ascending);
751
- }
752
- return result;
753
- };
754
- const sortHelper = (a, b, valueGetter, ascending) => {
755
- const valA = valueGetter(a);
756
- const valB = valueGetter(b);
757
- return getValue(valA, valB, ascending);
758
- };
759
-
760
776
  class FormControlPipe {
761
777
  transform(value) {
762
778
  return value;
@@ -772,87 +788,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
772
788
  }]
773
789
  }] });
774
790
 
775
- class ClipboardService {
776
- copy(text) {
777
- return navigator.clipboard.writeText(text);
778
- }
779
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ClipboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
780
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ClipboardService, providedIn: 'root' }); }
781
- }
782
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ClipboardService, decorators: [{
783
- type: Injectable,
784
- args: [{
785
- providedIn: 'root',
786
- }]
787
- }] });
788
-
789
- class FileService {
790
- readAsText(file) {
791
- const fileReader = new FileReader();
792
- return new Promise((resolve, reject) => {
793
- fileReader.onload = (event) => {
794
- resolve(event);
795
- };
796
- fileReader.onerror = (event) => {
797
- reject(event);
798
- };
799
- fileReader.readAsText(file);
800
- });
801
- }
802
- readAsBinaryString(file) {
803
- const fileReader = new FileReader();
804
- return new Promise((resolve, reject) => {
805
- fileReader.onload = (event) => {
806
- resolve(event);
807
- };
808
- fileReader.onerror = (event) => {
809
- reject(event);
810
- };
811
- fileReader.readAsBinaryString(file);
812
- });
813
- }
814
- readAsDataUrl(file) {
815
- const reader = new FileReader();
816
- return new Promise((resolve, reject) => {
817
- reader.onload = (event) => {
818
- resolve(event);
819
- };
820
- reader.onerror = (error) => reject(error);
821
- reader.readAsDataURL(file);
822
- });
823
- }
824
- unparse(data, config) {
825
- return unparse(data, config);
826
- }
827
- parse(content) {
828
- return new Promise((resolve, reject) => {
829
- parse(content, {
830
- header: true,
831
- complete: (results) => resolve(results),
832
- error: (err) => reject(err),
833
- });
834
- });
835
- }
836
- getFileExtension(filename) {
837
- let result = '-';
838
- if (/[.]/.exec(filename)) {
839
- const regexp = /[^.]+$/.exec(filename);
840
- result = `.${regexp?.[0]}`;
841
- }
842
- return result;
843
- }
844
- saveAs(content, fileName, fileType) {
845
- const blob = new Blob([content], { type: fileType });
846
- saveAs(blob, fileName, { autoBom: true });
847
- }
848
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FileService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
849
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FileService, providedIn: 'root' }); }
850
- }
851
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: FileService, decorators: [{
852
- type: Injectable,
853
- args: [{ providedIn: 'root' }]
854
- }] });
855
-
856
791
  class ImageService {
857
792
  async compress(imageBase64, quality = 0.8, fileType = 'image/jpeg') {
858
793
  const img = await this.load(imageBase64);
@@ -939,38 +874,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
939
874
  args: [{ providedIn: 'root' }]
940
875
  }] });
941
876
 
942
- class LoggerService {
943
- constructor() {
944
- this.onLog = new Subject();
945
- }
946
- log(...args) {
947
- this._doLog(LogType.log, args);
948
- }
949
- info(...args) {
950
- this._doLog(LogType.info, args);
951
- }
952
- warn(...args) {
953
- this._doLog(LogType.warn, args);
954
- }
955
- debug(...args) {
956
- this._doLog(LogType.debug, args);
957
- }
958
- error(...args) {
959
- this._doLog(LogType.error, args);
960
- }
961
- _doLog(logType, ...args) {
962
- // eslint-disable-next-line no-console
963
- console[logType].apply(console, args);
964
- this.onLog.next({ logType: logType, args: args });
965
- }
966
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LoggerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
967
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LoggerService, providedIn: 'root' }); }
968
- }
969
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LoggerService, decorators: [{
970
- type: Injectable,
971
- args: [{ providedIn: 'root' }]
972
- }] });
973
-
974
877
  class ModalService {
975
878
  init(viewContainerRef) {
976
879
  this.portalHost = new DomPortalOutlet(document.body);
@@ -1058,85 +961,9 @@ class TokenService {
1058
961
  }
1059
962
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: TokenService, decorators: [{
1060
963
  type: Injectable,
1061
- args: [{
1062
- providedIn: 'root',
1063
- }]
964
+ args: [{ providedIn: 'root' }]
1064
965
  }], ctorParameters: () => [{ type: LocalService }] });
1065
966
 
1066
- Array.prototype.groupBy = function (valueGetter) {
1067
- return this.reduce((curr, obj) => {
1068
- const key = valueGetter(obj);
1069
- (curr[key] = curr[key] || []).push(obj);
1070
- return curr;
1071
- }, {});
1072
- };
1073
- Array.prototype.removeBy = function (valueGetter, val) {
1074
- return this.filter((curr) => {
1075
- const key = valueGetter(curr);
1076
- // change to split to remove only first item found
1077
- return key !== val;
1078
- });
1079
- };
1080
- Array.prototype.orderBy = function (valueGetter, ascending = true) {
1081
- this?.sort((a, b) => sortHelper(a, b, valueGetter, ascending));
1082
- return this;
1083
- };
1084
- Array.prototype.filterBy = function (key) {
1085
- return this.filter((a) => {
1086
- let result = false;
1087
- if (key && a[key]) {
1088
- result = a[key] === key;
1089
- }
1090
- else {
1091
- result = a === key;
1092
- }
1093
- return result;
1094
- });
1095
- };
1096
- Array.prototype.distinct = function (comparator) {
1097
- const thisAsArray = this;
1098
- const result = comparator
1099
- ? thisAsArray.filter((value, index, array) => array.findIndex((o) => comparator(o, value)) === index)
1100
- : thisAsArray.filter((value, index, array) => array.indexOf(value) === index);
1101
- return result;
1102
- };
1103
-
1104
- dayjs.extend(localizedFormat);
1105
- Date.prototype.isAfter = function (date, unit) {
1106
- return dayjs(this).isAfter(date, unit);
1107
- };
1108
- Date.prototype.isBefore = function (date, unit) {
1109
- return dayjs(this).isBefore(date, unit);
1110
- };
1111
- Date.prototype.format = function (template) {
1112
- return dayjs(this).format(template);
1113
- };
1114
- Date.prototype.isValid = function () {
1115
- return dayjs(this).isValid();
1116
- };
1117
- Date.prototype.add = function (value, unit) {
1118
- return dayjs(this).add(value, unit).toDate();
1119
- };
1120
- Date.prototype.subtract = function (value, unit) {
1121
- return dayjs(this).subtract(value, unit).toDate();
1122
- };
1123
- Date.prototype.firstDayOfMonth = function () {
1124
- return dayjs(this).startOf('month').toDate();
1125
- };
1126
- Date.prototype.lastDayOfMonth = function () {
1127
- return dayjs(this).endOf('month').toDate();
1128
- };
1129
- Date.prototype.set = function (unit, value) {
1130
- return dayjs(this).set(unit, value).toDate();
1131
- };
1132
- Date.prototype.diff = function (date, unit) {
1133
- return dayjs(this).diff(date, unit);
1134
- };
1135
-
1136
- String.prototype.capitalize = function () {
1137
- return this.charAt(0).toUpperCase() + this.slice(1);
1138
- };
1139
-
1140
967
  function dateAfterValidator(startDateControlKey) {
1141
968
  return (endDateControl) => {
1142
969
  let result = null;
@@ -1188,10 +1015,12 @@ function timeAfterValidator(startTimeControlKey) {
1188
1015
  const startTime = startTimeControl.value;
1189
1016
  const endTime = control.value;
1190
1017
  // Umwandlung der Zeit in Minuten (z.B. 20:00 Uhr = 1200 Minuten)
1191
- const startMinutes = convertToMinutes(startTime);
1192
- const endMinutes = convertToMinutes(endTime);
1193
- if (endMinutes <= startMinutes) {
1194
- result = { timeAfterError: startTimeControl.value };
1018
+ if (startTime && endTime) {
1019
+ const startMinutes = convertToMinutes(startTime);
1020
+ const endMinutes = convertToMinutes(endTime);
1021
+ if (endMinutes <= startMinutes) {
1022
+ result = { timeAfterError: startTimeControl.value };
1023
+ }
1195
1024
  }
1196
1025
  }
1197
1026
  }
@@ -1212,5 +1041,5 @@ function convertToMinutes(time) {
1212
1041
  * Generated bundle index. Do not edit.
1213
1042
  */
1214
1043
 
1215
- export { BaseModalComponent, ButtonDirective, Class, ClipboardService, ColDirective, DatePickerComponent, DropdownDirective, FadeAnimation, FadeRightAnimation, FileService, FormControlPipe, FormErrorsComponent, FormInputComponent, FormInputDirective, FormLabelDirective, FormSelectDirective, IconButtonDirective, ImageService, ListGroupDirective, ListGroupItemAvatarDirective, ListGroupItemDirective, LoadingIndicatorComponent, LoadingIndicatorService, LocalService, Log, LogType, LoggerService, ModalComponent, ModalService, OffCanvasComponent, ToastComponent, ToastService, TokenService, dateAfterValidator, matchValidator, sortHelper, timeAfterValidator };
1044
+ export { AutofocusDirective, BaseModalComponent, ButtonDirective, Class, ColDirective, DatePickerComponent, DropdownDirective, FadeAnimation, FadeRightAnimation, FormControlPipe, FormErrorsComponent, FormInputComponent, FormInputDirective, FormLabelDirective, FormSelectDirective, IconButtonDirective, ImageService, ListGroupDirective, ListGroupItemAvatarDirective, ListGroupItemDirective, LoadingIndicatorComponent, LoadingIndicatorService, LocalService, Log, LogType, ModalComponent, ModalService, OffCanvasComponent, ToastComponent, ToastService, TokenService, TooltipDirective, dateAfterValidator, matchValidator, timeAfterValidator };
1216
1045
  //# sourceMappingURL=ngx-gccb.mjs.map