angular-dumb-lib 0.0.21 → 0.0.23

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 (36) hide show
  1. package/fesm2022/angular-dumb-lib.mjs +106 -106
  2. package/fesm2022/angular-dumb-lib.mjs.map +1 -1
  3. package/lib/angular-dumb-lib.component.d.ts +1 -1
  4. package/lib/angular-dumb-lib.module.d.ts +1 -1
  5. package/package.json +3 -5
  6. package/esm2022/angular-dumb-lib.mjs +0 -5
  7. package/esm2022/lib/angular-dumb-lib.component.mjs +0 -20
  8. package/esm2022/lib/angular-dumb-lib.module.mjs +0 -22
  9. package/esm2022/lib/angular-dumb-lib.service.mjs +0 -15
  10. package/esm2022/lib/components/atoms/button/button.component.mjs +0 -34
  11. package/esm2022/lib/components/atoms/datetime-picker/datetime-picker.component.mjs +0 -58
  12. package/esm2022/lib/components/atoms/file-selection/file-selection.component.mjs +0 -85
  13. package/esm2022/lib/components/atoms/input/input.component.mjs +0 -57
  14. package/esm2022/lib/components/atoms/loading/loading.component.mjs +0 -37
  15. package/esm2022/lib/components/atoms/menu-widget/menu-widget.component.mjs +0 -36
  16. package/esm2022/lib/components/atoms/scroll-to-top/scroll-to-top.component.mjs +0 -22
  17. package/esm2022/lib/components/atoms/selection/selection.component.mjs +0 -92
  18. package/esm2022/lib/components/atoms/slider/slider.component.mjs +0 -42
  19. package/esm2022/lib/components/atoms/tags/tags.component.mjs +0 -62
  20. package/esm2022/lib/components/molecules/cards/cards.component.mjs +0 -30
  21. package/esm2022/lib/components/molecules/content-design/content-design.component.mjs +0 -48
  22. package/esm2022/lib/components/molecules/form/form.component.mjs +0 -73
  23. package/esm2022/lib/components/molecules/formated-text/formated-text.component.mjs +0 -40
  24. package/esm2022/lib/components/molecules/modal/modal.component.mjs +0 -49
  25. package/esm2022/lib/components/molecules/paginator/paginator.component.mjs +0 -120
  26. package/esm2022/lib/components/molecules/table/table.component.mjs +0 -51
  27. package/esm2022/lib/components/pages/detail/detail.component.mjs +0 -22
  28. package/esm2022/lib/components/pages/footer/footer.component.mjs +0 -15
  29. package/esm2022/lib/components/pages/login/login.component.mjs +0 -29
  30. package/esm2022/lib/components/pages/menu/menu.component.mjs +0 -125
  31. package/esm2022/lib/components/pages/version/version.component.mjs +0 -26
  32. package/esm2022/lib/shared/constants/constant.mjs +0 -6
  33. package/esm2022/lib/shared/enums/enum.mjs +0 -86
  34. package/esm2022/lib/shared/interfaces/interface.mjs +0 -2
  35. package/esm2022/lib/shared/utils/common.utils.mjs +0 -42
  36. package/esm2022/public-api.mjs +0 -31
@@ -1,92 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';
2
- import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { SelectionType } from '../../../shared/enums/enum';
4
- import { CommonModule } from '@angular/common';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@angular/forms";
8
- class SelectionComponent {
9
- constructor() {
10
- this.label = ''; // Label for the dropdown
11
- this.options = []; // Array of options
12
- this.selectedValues = []; // Pre-selected values (multi-selection)
13
- this.isMultiSelect = false; // Enable multi-selection for dropdown
14
- this.displayType = SelectionType.dropdown; // Control the display type (dropdown, radio, or checkbox)
15
- this.selectedChange = new EventEmitter(); // Event emitter for value changes
16
- this.onChange = () => { };
17
- this.onTouched = () => { };
18
- }
19
- get value() {
20
- return this.selectedValue;
21
- }
22
- set value(value) {
23
- this.selectedValue = (this.isMultiSelect === false && Array.isArray(value)) ? value[0] : value;
24
- this.onChange(this.selectedValue);
25
- this.onTouched();
26
- }
27
- ngOnInit() {
28
- if (this.options && this.options.length > 0 && !this.isMultiSelect) {
29
- this.selectedValue = this.options[0].value;
30
- this.onChange(this.selectedValue);
31
- }
32
- }
33
- onSelectChange(event) {
34
- this.selectedChange.emit(this.selectedValue);
35
- }
36
- onMultiSelectChange(event) {
37
- const target = event.target;
38
- const value = target.value;
39
- if (target.checked) {
40
- this.selectedValues.push(value);
41
- }
42
- else {
43
- this.selectedValues = this.selectedValues.filter(v => v !== value);
44
- }
45
- this.selectedChange.emit(this.selectedValues);
46
- }
47
- isSelected(value) {
48
- return this.isMultiSelect ? this.selectedValues.includes(value) : value === this.selectedValue;
49
- }
50
- writeValue(value) {
51
- this.selectedValue = value;
52
- }
53
- registerOnChange(fn) {
54
- this.onChange = fn;
55
- }
56
- registerOnTouched(fn) {
57
- this.onTouched = fn;
58
- }
59
- setDisabledState(isDisabled) {
60
- // Implement if you need to handle disabled state
61
- }
62
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
63
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SelectionComponent, isStandalone: true, selector: "app-selection", inputs: { label: "label", options: "options", selectedValue: "selectedValue", selectedValues: "selectedValues", isMultiSelect: "isMultiSelect", displayType: "displayType" }, outputs: { selectedChange: "selectedChange" }, providers: [{
64
- provide: NG_VALUE_ACCESSOR,
65
- useExisting: forwardRef(() => SelectionComponent),
66
- multi: true
67
- }], ngImport: i0, template: "<div class=\"dropdown\" *ngIf=\"displayType === 'dropdown'\">\n <label *ngIf=\"label\">{{ label }}</label>\n <select\n (change)=\"onSelectChange($event)\"\n [multiple]=\"isMultiSelect\"\n [(ngModel)]=\"value\">\n <option *ngFor=\"let option of options\"\n [value]=\"option.value\"\n [selected]=\"isSelected(option.value)\">\n {{ option.label }}\n </option>\n </select>\n</div>\n\n<div class=\"radio-group\" *ngIf=\"displayType === 'radio'\">\n <label *ngIf=\"label\">{{ label }}</label>\n <div *ngFor=\"let option of options\">\n <input\n type=\"radio\"\n [value]=\"option.value\"\n [checked]=\"option.value === selectedValue\"\n (change)=\"onSelectChange($event)\"\n name=\"radioGroup\"/>\n <label>{{ option.label }}</label>\n </div>\n</div>\n\n<div class=\"checkbox-group\" *ngIf=\"displayType === 'checkbox'\">\n <label *ngIf=\"label\">{{ label }}</label>\n <div *ngFor=\"let option of options\">\n <input\n type=\"checkbox\"\n [value]=\"option.value\"\n [checked]=\"isSelected(option.value)\"\n (change)=\"onMultiSelectChange($event)\"/>\n <label>{{ option.label }}</label>\n </div>\n</div>\n", styles: [".dropdown,.radio-group,.checkbox-group{display:flex;flex-direction:column;width:100%;min-width:150px}.dropdown label,.radio-group label,.checkbox-group label{font-size:12px;color:#666;margin-bottom:4px;font-weight:700}.dropdown select{width:100%;padding:9px 8px;font-size:12px;color:#333;background-color:#fff;border:1px solid #ccc;border-radius:4px;appearance:none;cursor:pointer;transition:border-color .3s,box-shadow .3s}.dropdown select:hover{border-color:#888}.dropdown select:focus{border-color:#03a9f4;box-shadow:0 0 5px #03a9f480;outline:none}.radio-group div,.checkbox-group div{display:flex;align-items:center;margin-bottom:8px}.radio-group input[type=radio],.checkbox-group input[type=checkbox]{margin-right:8px;cursor:pointer}.radio-group label,.checkbox-group label{font-size:12px;color:#333;cursor:pointer}.radio-group input[type=radio]:focus,.checkbox-group input[type=checkbox]:focus{outline:2px solid #03A9F4;outline-offset:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
68
- }
69
- export { SelectionComponent };
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectionComponent, decorators: [{
71
- type: Component,
72
- args: [{ selector: 'app-selection', standalone: true, providers: [{
73
- provide: NG_VALUE_ACCESSOR,
74
- useExisting: forwardRef(() => SelectionComponent),
75
- multi: true
76
- }], imports: [CommonModule, FormsModule], template: "<div class=\"dropdown\" *ngIf=\"displayType === 'dropdown'\">\n <label *ngIf=\"label\">{{ label }}</label>\n <select\n (change)=\"onSelectChange($event)\"\n [multiple]=\"isMultiSelect\"\n [(ngModel)]=\"value\">\n <option *ngFor=\"let option of options\"\n [value]=\"option.value\"\n [selected]=\"isSelected(option.value)\">\n {{ option.label }}\n </option>\n </select>\n</div>\n\n<div class=\"radio-group\" *ngIf=\"displayType === 'radio'\">\n <label *ngIf=\"label\">{{ label }}</label>\n <div *ngFor=\"let option of options\">\n <input\n type=\"radio\"\n [value]=\"option.value\"\n [checked]=\"option.value === selectedValue\"\n (change)=\"onSelectChange($event)\"\n name=\"radioGroup\"/>\n <label>{{ option.label }}</label>\n </div>\n</div>\n\n<div class=\"checkbox-group\" *ngIf=\"displayType === 'checkbox'\">\n <label *ngIf=\"label\">{{ label }}</label>\n <div *ngFor=\"let option of options\">\n <input\n type=\"checkbox\"\n [value]=\"option.value\"\n [checked]=\"isSelected(option.value)\"\n (change)=\"onMultiSelectChange($event)\"/>\n <label>{{ option.label }}</label>\n </div>\n</div>\n", styles: [".dropdown,.radio-group,.checkbox-group{display:flex;flex-direction:column;width:100%;min-width:150px}.dropdown label,.radio-group label,.checkbox-group label{font-size:12px;color:#666;margin-bottom:4px;font-weight:700}.dropdown select{width:100%;padding:9px 8px;font-size:12px;color:#333;background-color:#fff;border:1px solid #ccc;border-radius:4px;appearance:none;cursor:pointer;transition:border-color .3s,box-shadow .3s}.dropdown select:hover{border-color:#888}.dropdown select:focus{border-color:#03a9f4;box-shadow:0 0 5px #03a9f480;outline:none}.radio-group div,.checkbox-group div{display:flex;align-items:center;margin-bottom:8px}.radio-group input[type=radio],.checkbox-group input[type=checkbox]{margin-right:8px;cursor:pointer}.radio-group label,.checkbox-group label{font-size:12px;color:#333;cursor:pointer}.radio-group input[type=radio]:focus,.checkbox-group input[type=checkbox]:focus{outline:2px solid #03A9F4;outline-offset:2px}\n"] }]
77
- }], propDecorators: { label: [{
78
- type: Input
79
- }], options: [{
80
- type: Input
81
- }], selectedValue: [{
82
- type: Input
83
- }], selectedValues: [{
84
- type: Input
85
- }], isMultiSelect: [{
86
- type: Input
87
- }], displayType: [{
88
- type: Input
89
- }], selectedChange: [{
90
- type: Output
91
- }] } });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZHVtYi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2F0b21zL3NlbGVjdGlvbi9zZWxlY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1kdW1iLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYXRvbXMvc2VsZWN0aW9uL3NlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFFL0MsTUFZYSxrQkFBa0I7SUFaL0I7UUFhVyxVQUFLLEdBQVcsRUFBRSxDQUFDLENBQUUseUJBQXlCO1FBQzlDLFlBQU8sR0FBa0MsRUFBRSxDQUFDLENBQUUsbUJBQW1CO1FBRWpFLG1CQUFjLEdBQVUsRUFBRSxDQUFDLENBQUUsd0NBQXdDO1FBQ3JFLGtCQUFhLEdBQVksS0FBSyxDQUFDLENBQUUsc0NBQXNDO1FBQ3ZFLGdCQUFXLEdBQWtCLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBRSwwREFBMEQ7UUFFL0csbUJBQWMsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQyxDQUFFLGtDQUFrQztRQUUxRyxhQUFRLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQ3pCLGNBQVMsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7S0FzRDNCO0lBcERDLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBVTtRQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLLElBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUUvRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFZO1FBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBWTtRQUM5QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUNoRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRTNCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztTQUNwRTtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDakcsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBRSxVQUFtQjtRQUNuQyxpREFBaUQ7SUFDbkQsQ0FBQzsrR0FoRVUsa0JBQWtCO21HQUFsQixrQkFBa0IseVJBUGxCLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDakQsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLDBCQ2ZKLGdxQ0FzQ0EsNCtCRHRCWSxZQUFZLCtQQUFFLFdBQVc7O1NBRXhCLGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQVo5QixTQUFTOytCQUNFLGVBQWUsY0FHYixJQUFJLGFBQ0wsQ0FBQzs0QkFDVixPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQyxXQUNPLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQzs4QkFHM0IsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9lbnVtcy9lbnVtJztcbmltcG9ydCB7IElEcm9wZG93bk9wdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtc2VsZWN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VsZWN0aW9uQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7ICAvLyBMYWJlbCBmb3IgdGhlIGRyb3Bkb3duXG4gIEBJbnB1dCgpIG9wdGlvbnM6IElEcm9wZG93bk9wdGlvbltdIHwgdW5kZWZpbmVkID0gW107ICAvLyBBcnJheSBvZiBvcHRpb25zXG4gIEBJbnB1dCgpIHNlbGVjdGVkVmFsdWU6IGFueTsgIC8vIFByZS1zZWxlY3RlZCB2YWx1ZSAoc2luZ2xlIHNlbGVjdGlvbilcbiAgQElucHV0KCkgc2VsZWN0ZWRWYWx1ZXM6IGFueVtdID0gW107ICAvLyBQcmUtc2VsZWN0ZWQgdmFsdWVzIChtdWx0aS1zZWxlY3Rpb24pXG4gIEBJbnB1dCgpIGlzTXVsdGlTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTsgIC8vIEVuYWJsZSBtdWx0aS1zZWxlY3Rpb24gZm9yIGRyb3Bkb3duXG4gIEBJbnB1dCgpIGRpc3BsYXlUeXBlOiBTZWxlY3Rpb25UeXBlID0gU2VsZWN0aW9uVHlwZS5kcm9wZG93bjsgIC8vIENvbnRyb2wgdGhlIGRpc3BsYXkgdHlwZSAoZHJvcGRvd24sIHJhZGlvLCBvciBjaGVja2JveClcblxuICBAT3V0cHV0KCkgc2VsZWN0ZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7ICAvLyBFdmVudCBlbWl0dGVyIGZvciB2YWx1ZSBjaGFuZ2VzXG5cbiAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAodGhpcy5pc011bHRpU2VsZWN0ID09PSBmYWxzZSAmJiAgQXJyYXkuaXNBcnJheSh2YWx1ZSkpPyB2YWx1ZVswXSA6IHZhbHVlO1xuXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwICYmICF0aGlzLmlzTXVsdGlTZWxlY3QpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMub3B0aW9uc1swXS52YWx1ZTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvblNlbGVjdENoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgfVxuXG4gIG9uTXVsdGlTZWxlY3RDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudmFsdWU7XG5cbiAgICBpZiAodGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLnNlbGVjdGVkVmFsdWVzLmZpbHRlcih2ID0+IHYgIT09IHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gIH1cblxuICBpc1NlbGVjdGVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc011bHRpU2VsZWN0ID8gdGhpcy5zZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkgOiB2YWx1ZSA9PT0gdGhpcy5zZWxlY3RlZFZhbHVlO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuXG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gSW1wbGVtZW50IGlmIHlvdSBuZWVkIHRvIGhhbmRsZSBkaXNhYmxlZCBzdGF0ZVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiAqbmdJZj1cImRpc3BsYXlUeXBlID09PSAnZHJvcGRvd24nXCI+XG4gIDxsYWJlbCAqbmdJZj1cImxhYmVsXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICA8c2VsZWN0XG4gIChjaGFuZ2UpPVwib25TZWxlY3RDaGFuZ2UoJGV2ZW50KVwiXG4gIFttdWx0aXBsZV09XCJpc011bHRpU2VsZWN0XCJcbiAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiPlxuICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCJcbiAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICBbc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChvcHRpb24udmFsdWUpXCI+XG4gICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICA8L29wdGlvbj5cbiAgPC9zZWxlY3Q+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInJhZGlvLWdyb3VwXCIgKm5nSWY9XCJkaXNwbGF5VHlwZSA9PT0gJ3JhZGlvJ1wiPlxuICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIj5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgIFtjaGVja2VkXT1cIm9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgbmFtZT1cInJhZGlvR3JvdXBcIi8+XG4gICAgPGxhYmVsPnt7IG9wdGlvbi5sYWJlbCB9fTwvbGFiZWw+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJjaGVja2JveC1ncm91cFwiICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIj57eyBsYWJlbCB9fTwvbGFiZWw+XG4gIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCI+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKG9wdGlvbi52YWx1ZSlcIlxuICAgICAgKGNoYW5nZSk9XCJvbk11bHRpU2VsZWN0Q2hhbmdlKCRldmVudClcIi8+XG4gICAgPGxhYmVsPnt7IG9wdGlvbi5sYWJlbCB9fTwvbGFiZWw+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,42 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, Input } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- class SliderComponent {
6
- constructor() {
7
- this.images = [];
8
- this.autoSlide = false;
9
- this.slideInterval = 3000; // Time interval for auto slide
10
- this.currentIndex = 0;
11
- }
12
- ngOnInit() {
13
- if (this.autoSlide) {
14
- this.startAutoSlide();
15
- }
16
- }
17
- startAutoSlide() {
18
- setInterval(() => {
19
- this.nextSlide();
20
- }, this.slideInterval);
21
- }
22
- prevSlide() {
23
- this.currentIndex = this.currentIndex === 0 ? this.images.length - 1 : this.currentIndex - 1;
24
- }
25
- nextSlide() {
26
- this.currentIndex = this.currentIndex === this.images.length - 1 ? 0 : this.currentIndex + 1;
27
- }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SliderComponent, isStandalone: true, selector: "app-slider", inputs: { images: "images", autoSlide: "autoSlide", slideInterval: "slideInterval" }, ngImport: i0, template: "<div class=\"slider-container\">\n <div class=\"slider-wrapper\">\n <div\n class=\"slide\"\n *ngFor=\"let image of images; let i = index\"\n [class.active]=\"i === currentIndex\"\n [ngStyle]=\"{'background-image': 'url(' + image + ')'}\">\n </div>\n </div>\n\n <!-- Navigation Buttons -->\n <button class=\"prev\" (click)=\"prevSlide()\">&#10094;</button>\n <button class=\"next\" (click)=\"nextSlide()\">&#10095;</button>\n</div>\n", styles: [".slider-container{position:relative;width:100%;margin:auto;overflow:hidden}.slider-wrapper{position:relative;width:100%;height:400px}.slide{position:absolute;width:100%;height:100%;background-size:cover;background-position:center;opacity:0;transition:opacity .5s ease-in-out}.slide.active{opacity:1}.prev,.next{position:absolute;top:50%;transform:translateY(-50%);background-color:#00000080;color:#fff;border:none;padding:10px;cursor:pointer;font-size:18px}.prev{left:10px}.next{right:10px}.prev:hover,.next:hover{background-color:#000c}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
30
- }
31
- export { SliderComponent };
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SliderComponent, decorators: [{
33
- type: Component,
34
- args: [{ selector: 'app-slider', standalone: true, imports: [CommonModule], template: "<div class=\"slider-container\">\n <div class=\"slider-wrapper\">\n <div\n class=\"slide\"\n *ngFor=\"let image of images; let i = index\"\n [class.active]=\"i === currentIndex\"\n [ngStyle]=\"{'background-image': 'url(' + image + ')'}\">\n </div>\n </div>\n\n <!-- Navigation Buttons -->\n <button class=\"prev\" (click)=\"prevSlide()\">&#10094;</button>\n <button class=\"next\" (click)=\"nextSlide()\">&#10095;</button>\n</div>\n", styles: [".slider-container{position:relative;width:100%;margin:auto;overflow:hidden}.slider-wrapper{position:relative;width:100%;height:400px}.slide{position:absolute;width:100%;height:100%;background-size:cover;background-position:center;opacity:0;transition:opacity .5s ease-in-out}.slide.active{opacity:1}.prev,.next{position:absolute;top:50%;transform:translateY(-50%);background-color:#00000080;color:#fff;border:none;padding:10px;cursor:pointer;font-size:18px}.prev{left:10px}.next{right:10px}.prev:hover,.next:hover{background-color:#000c}\n"] }]
35
- }], propDecorators: { images: [{
36
- type: Input
37
- }], autoSlide: [{
38
- type: Input
39
- }], slideInterval: [{
40
- type: Input
41
- }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZHVtYi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2F0b21zL3NsaWRlci9zbGlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1kdW1iLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYXRvbXMvc2xpZGVyL3NsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7OztBQUV6RCxNQU9hLGVBQWU7SUFQNUI7UUFRVyxXQUFNLEdBQWEsRUFBRSxDQUFDO1FBQ3RCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0Isa0JBQWEsR0FBVyxJQUFJLENBQUMsQ0FBRSwrQkFBK0I7UUFFdkUsaUJBQVksR0FBVyxDQUFDLENBQUM7S0FxQjFCO0lBbkJDLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUMvRixDQUFDOytHQXpCVSxlQUFlO21HQUFmLGVBQWUsNEpDVjVCLGlkQWNBLG9sQkROWSxZQUFZOztTQUVYLGVBQWU7NEZBQWYsZUFBZTtrQkFQM0IsU0FBUzsrQkFDRSxZQUFZLGNBQ1YsSUFBSSxXQUdQLENBQUMsWUFBWSxDQUFDOzhCQUdkLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zbGlkZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vc2xpZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2xpZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGltYWdlczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgYXV0b1NsaWRlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNsaWRlSW50ZXJ2YWw6IG51bWJlciA9IDMwMDA7ICAvLyBUaW1lIGludGVydmFsIGZvciBhdXRvIHNsaWRlXG5cbiAgY3VycmVudEluZGV4OiBudW1iZXIgPSAwO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9TbGlkZSkge1xuICAgICAgdGhpcy5zdGFydEF1dG9TbGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0QXV0b1NsaWRlKCk6IHZvaWQge1xuICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMubmV4dFNsaWRlKCk7XG4gICAgfSwgdGhpcy5zbGlkZUludGVydmFsKTtcbiAgfVxuXG4gIHByZXZTbGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudEluZGV4ID09PSAwID8gdGhpcy5pbWFnZXMubGVuZ3RoIC0gMSA6IHRoaXMuY3VycmVudEluZGV4IC0gMTtcbiAgfVxuXG4gIG5leHRTbGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudEluZGV4ID09PSB0aGlzLmltYWdlcy5sZW5ndGggLSAxID8gMCA6IHRoaXMuY3VycmVudEluZGV4ICsgMTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cInNsaWRlci13cmFwcGVyXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJzbGlkZVwiXG4gICAgICAqbmdGb3I9XCJsZXQgaW1hZ2Ugb2YgaW1hZ2VzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaSA9PT0gY3VycmVudEluZGV4XCJcbiAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoJyArIGltYWdlICsgJyknfVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIE5hdmlnYXRpb24gQnV0dG9ucyAtLT5cbiAgPGJ1dHRvbiBjbGFzcz1cInByZXZcIiAoY2xpY2spPVwicHJldlNsaWRlKClcIj4mIzEwMDk0OzwvYnV0dG9uPlxuICA8YnV0dG9uIGNsYXNzPVwibmV4dFwiIChjbGljayk9XCJuZXh0U2xpZGUoKVwiPiYjMTAwOTU7PC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
@@ -1,62 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, Input, forwardRef } from '@angular/core';
3
- import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- import * as i2 from "@angular/forms";
7
- class TagsComponent {
8
- constructor() {
9
- this.availableTags = ['abc', 'dce'];
10
- this.filteredTags = [];
11
- this.selectedTags = [];
12
- this.searchText = '';
13
- this.onChange = () => { };
14
- this.onTouched = () => { };
15
- }
16
- ngOnInit() {
17
- this.filteredTags = this.availableTags; // Initialize the filtered tags list
18
- }
19
- writeValue(value) {
20
- if (value) {
21
- this.selectedTags = value;
22
- }
23
- }
24
- registerOnChange(fn) {
25
- this.onChange = fn;
26
- }
27
- registerOnTouched(fn) {
28
- this.onTouched = fn;
29
- }
30
- onTagSelectionChange(tag) {
31
- if (!this.selectedTags.includes(tag)) {
32
- this.selectedTags = [...this.selectedTags, tag]; // Add the tag
33
- this.onChange(this.selectedTags);
34
- }
35
- }
36
- removeTag(tag) {
37
- this.selectedTags = this.selectedTags.filter(t => t !== tag); // Remove the tag
38
- this.onChange(this.selectedTags);
39
- }
40
- filterTags() {
41
- this.filteredTags = this.availableTags.filter(tag => tag.toLowerCase().includes(this.searchText.toLowerCase()) &&
42
- !this.selectedTags.includes(tag));
43
- }
44
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TagsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TagsComponent, isStandalone: true, selector: "app-tags", inputs: { availableTags: "availableTags" }, providers: [{
46
- provide: NG_VALUE_ACCESSOR,
47
- useExisting: forwardRef(() => TagsComponent),
48
- multi: true
49
- }], ngImport: i0, template: "<div class=\"tags-select-container\">\n <label for=\"searchTags\">Search and Select Tags:</label>\n <input\n id=\"searchTags\"\n type=\"text\"\n [(ngModel)]=\"searchText\"\n (input)=\"filterTags()\"\n placeholder=\"Search tags...\"\n />\n\n <div *ngIf=\"filteredTags.length > 0\">\n <ul class=\"tag-list\">\n <li *ngFor=\"let tag of filteredTags\" (click)=\"onTagSelectionChange(tag)\">\n {{ tag }}\n </li>\n </ul>\n </div>\n\n <div class=\"selected-tags\">\n <button *ngFor=\"let tag of selectedTags\" class=\"tag-button\">\n {{ tag }}\n <span class=\"remove-tag\" (click)=\"removeTag(tag)\">x</span>\n </button>\n </div>\n</div>\n", styles: [".tags-select-container{display:flex;flex-direction:column}input[type=text]{padding:5px;border:1px solid #ccc;border-radius:4px;width:200px;margin-bottom:10px}.tag-list{list-style-type:none;padding-left:0;margin:0;border:1px solid #ccc;max-height:100px;overflow-y:auto}.tag-list li{padding:5px;cursor:pointer;border-bottom:1px solid #ddd}.tag-list li:hover{background-color:#f1f1f1}.selected-tags{display:flex;flex-wrap:wrap;gap:5px}.tag-button{background-color:#007bff;color:#fff;border:none;border-radius:20px;padding:5px 10px;display:flex;align-items:center;cursor:pointer}.tag-button .remove-tag{margin-left:8px;background:none;border:none;font-size:1rem;font-weight:700;color:#fff;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
50
- }
51
- export { TagsComponent };
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TagsComponent, decorators: [{
53
- type: Component,
54
- args: [{ selector: 'app-tags', standalone: true, providers: [{
55
- provide: NG_VALUE_ACCESSOR,
56
- useExisting: forwardRef(() => TagsComponent),
57
- multi: true
58
- }], imports: [CommonModule, FormsModule], template: "<div class=\"tags-select-container\">\n <label for=\"searchTags\">Search and Select Tags:</label>\n <input\n id=\"searchTags\"\n type=\"text\"\n [(ngModel)]=\"searchText\"\n (input)=\"filterTags()\"\n placeholder=\"Search tags...\"\n />\n\n <div *ngIf=\"filteredTags.length > 0\">\n <ul class=\"tag-list\">\n <li *ngFor=\"let tag of filteredTags\" (click)=\"onTagSelectionChange(tag)\">\n {{ tag }}\n </li>\n </ul>\n </div>\n\n <div class=\"selected-tags\">\n <button *ngFor=\"let tag of selectedTags\" class=\"tag-button\">\n {{ tag }}\n <span class=\"remove-tag\" (click)=\"removeTag(tag)\">x</span>\n </button>\n </div>\n</div>\n", styles: [".tags-select-container{display:flex;flex-direction:column}input[type=text]{padding:5px;border:1px solid #ccc;border-radius:4px;width:200px;margin-bottom:10px}.tag-list{list-style-type:none;padding-left:0;margin:0;border:1px solid #ccc;max-height:100px;overflow-y:auto}.tag-list li{padding:5px;cursor:pointer;border-bottom:1px solid #ddd}.tag-list li:hover{background-color:#f1f1f1}.selected-tags{display:flex;flex-wrap:wrap;gap:5px}.tag-button{background-color:#007bff;color:#fff;border:none;border-radius:20px;padding:5px 10px;display:flex;align-items:center;cursor:pointer}.tag-button .remove-tag{margin-left:8px;background:none;border:none;font-size:1rem;font-weight:700;color:#fff;cursor:pointer}\n"] }]
59
- }], propDecorators: { availableTags: [{
60
- type: Input
61
- }] } });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWR1bWItbGliL3NyYy9saWIvY29tcG9uZW50cy9hdG9tcy90YWdzL3RhZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1kdW1iLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYXRvbXMvdGFncy90YWdzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUV0RixNQVlhLGFBQWE7SUFaMUI7UUFhVyxrQkFBYSxHQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xELGlCQUFZLEdBQWEsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQWEsRUFBRSxDQUFDO1FBQzVCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFFaEIsYUFBUSxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUN6QixjQUFTLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0tBc0NuQztJQXBDQyxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsb0NBQW9DO0lBQzlFLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBZTtRQUN4QixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQVc7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjO1lBQy9ELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFXO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7UUFDL0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ2xELEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6RCxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUNqQyxDQUFDO0lBQ0osQ0FBQzsrR0E1Q1UsYUFBYTttR0FBYixhQUFhLG1HQVBiLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7Z0JBQzVDLEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQywwQkNiSix1ckJBeUJBLHV2QkRYWSxZQUFZLCtQQUFFLFdBQVc7O1NBRXhCLGFBQWE7NEZBQWIsYUFBYTtrQkFaekIsU0FBUzsrQkFDRSxVQUFVLGNBQ1IsSUFBSSxhQUdMLENBQUM7NEJBQ1YsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDOzRCQUM1QyxLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDLFdBQ08sQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDOzhCQUczQixhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10YWdzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWdzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUYWdzQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFRhZ3NDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGF2YWlsYWJsZVRhZ3M6IHN0cmluZ1tdID0gWydhYmMnLCAnZGNlJ107XG4gIGZpbHRlcmVkVGFnczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRUYWdzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWFyY2hUZXh0OiBzdHJpbmcgPSAnJztcblxuICBwcml2YXRlIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRUYWdzID0gdGhpcy5hdmFpbGFibGVUYWdzOyAvLyBJbml0aWFsaXplIHRoZSBmaWx0ZXJlZCB0YWdzIGxpc3RcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFncyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgb25UYWdTZWxlY3Rpb25DaGFuZ2UodGFnOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUYWdzLmluY2x1ZGVzKHRhZykpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWdzID0gWy4uLnRoaXMuc2VsZWN0ZWRUYWdzLCB0YWddOyAvLyBBZGQgdGhlIHRhZ1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkVGFncyk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlVGFnKHRhZzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZFRhZ3MgPSB0aGlzLnNlbGVjdGVkVGFncy5maWx0ZXIodCA9PiB0ICE9PSB0YWcpOyAvLyBSZW1vdmUgdGhlIHRhZ1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFRhZ3MpO1xuICB9XG5cbiAgZmlsdGVyVGFncygpIHtcbiAgICB0aGlzLmZpbHRlcmVkVGFncyA9IHRoaXMuYXZhaWxhYmxlVGFncy5maWx0ZXIodGFnID0+XG4gICAgICB0YWcudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkgJiZcbiAgICAgICF0aGlzLnNlbGVjdGVkVGFncy5pbmNsdWRlcyh0YWcpXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhZ3Mtc2VsZWN0LWNvbnRhaW5lclwiPlxuICA8bGFiZWwgZm9yPVwic2VhcmNoVGFnc1wiPlNlYXJjaCBhbmQgU2VsZWN0IFRhZ3M6PC9sYWJlbD5cbiAgPGlucHV0XG4gICAgaWQ9XCJzZWFyY2hUYWdzXCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAoaW5wdXQpPVwiZmlsdGVyVGFncygpXCJcbiAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCB0YWdzLi4uXCJcbiAgLz5cblxuICA8ZGl2ICpuZ0lmPVwiZmlsdGVyZWRUYWdzLmxlbmd0aCA+IDBcIj5cbiAgICA8dWwgY2xhc3M9XCJ0YWctbGlzdFwiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCB0YWcgb2YgZmlsdGVyZWRUYWdzXCIgKGNsaWNrKT1cIm9uVGFnU2VsZWN0aW9uQ2hhbmdlKHRhZylcIj5cbiAgICAgICAge3sgdGFnIH19XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC10YWdzXCI+XG4gICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgdGFnIG9mIHNlbGVjdGVkVGFnc1wiIGNsYXNzPVwidGFnLWJ1dHRvblwiPlxuICAgICAge3sgdGFnIH19XG4gICAgICA8c3BhbiBjbGFzcz1cInJlbW92ZS10YWdcIiAoY2xpY2spPVwicmVtb3ZlVGFnKHRhZylcIj54PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,30 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { ContentDesignComponent } from '../content-design/content-design.component';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- class CardsComponent {
7
- constructor() {
8
- this.cardContents = [];
9
- this.getCardConfig = new EventEmitter();
10
- }
11
- ngOnInit() {
12
- }
13
- clickEvent(contentDesign) {
14
- if (contentDesign.id) {
15
- this.getCardConfig.emit(contentDesign);
16
- }
17
- }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CardsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CardsComponent, isStandalone: true, selector: "app-cards", inputs: { cardContents: "cardContents" }, outputs: { getCardConfig: "getCardConfig" }, ngImport: i0, template: "<div class=\"cards-content\">\n <ng-container *ngFor=\"let content of cardContents\">\n <div class=\"card {{content.name}}\">\n <app-content-design (clickEvent)=\"clickEvent($event)\"\n [content] = \"content\">\n </app-content-design>\n </div>\n </ng-container>\n</div>\n\n\n\n", styles: [".cards-content{display:flex;flex-direction:row;gap:20px}.content{width:33%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ContentDesignComponent, selector: "app-content-design", inputs: ["content", "contentLength"], outputs: ["clickEvent"] }] }); }
20
- }
21
- export { CardsComponent };
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CardsComponent, decorators: [{
23
- type: Component,
24
- args: [{ selector: 'app-cards', standalone: true, imports: [CommonModule, ContentDesignComponent], template: "<div class=\"cards-content\">\n <ng-container *ngFor=\"let content of cardContents\">\n <div class=\"card {{content.name}}\">\n <app-content-design (clickEvent)=\"clickEvent($event)\"\n [content] = \"content\">\n </app-content-design>\n </div>\n </ng-container>\n</div>\n\n\n\n", styles: [".cards-content{display:flex;flex-direction:row;gap:20px}.content{width:33%}\n"] }]
25
- }], ctorParameters: function () { return []; }, propDecorators: { cardContents: [{
26
- type: Input
27
- }], getCardConfig: [{
28
- type: Output
29
- }] } });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1kdW1iLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2NhcmRzL2NhcmRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZHVtYi1saWIvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9jYXJkcy9jYXJkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7O0FBRXBGLE1BT2EsY0FBYztJQUt6QjtRQUpTLGlCQUFZLEdBQXFCLEVBQUUsQ0FBQztRQUVuQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO0lBRTdDLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFFRCxVQUFVLENBQUMsYUFBNkI7UUFDdEMsSUFBRyxhQUFhLENBQUMsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1NBQ3ZDO0lBQ0gsQ0FBQzsrR0FkVSxjQUFjO21HQUFkLGNBQWMsNEpDWjNCLDhTQVlBLHNJREZZLFlBQVksNEpBQUUsc0JBQXNCOztTQUVuQyxjQUFjOzRGQUFkLGNBQWM7a0JBUDFCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FHUCxDQUFDLFlBQVksRUFBRSxzQkFBc0IsQ0FBQzswRUFHdEMsWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUNvbnRlbnREZXNpZ24gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRlbnREZXNpZ25Db21wb25lbnQgfSBmcm9tICcuLi9jb250ZW50LWRlc2lnbi9jb250ZW50LWRlc2lnbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2FyZHMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJkcy5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDb250ZW50RGVzaWduQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBDYXJkc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNhcmRDb250ZW50czogSUNvbnRlbnREZXNpZ25bXSA9IFtdO1xuXG4gIEBPdXRwdXQoKSBnZXRDYXJkQ29uZmlnID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29udGVudERlc2lnbj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgY2xpY2tFdmVudChjb250ZW50RGVzaWduOiBJQ29udGVudERlc2lnbikge1xuICAgIGlmKGNvbnRlbnREZXNpZ24uaWQpIHtcbiAgICAgIHRoaXMuZ2V0Q2FyZENvbmZpZy5lbWl0KGNvbnRlbnREZXNpZ24pXG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZHMtY29udGVudFwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIGNhcmRDb250ZW50c1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIHt7Y29udGVudC5uYW1lfX1cIj5cbiAgICAgIDxhcHAtY29udGVudC1kZXNpZ24gKGNsaWNrRXZlbnQpPVwiY2xpY2tFdmVudCgkZXZlbnQpXCJcbiAgICAgIFtjb250ZW50XSA9IFwiY29udGVudFwiPlxuICAgICAgPC9hcHAtY29udGVudC1kZXNpZ24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cblxuXG4iXX0=
@@ -1,48 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { ContentDirection } from '../../../shared/enums/enum';
3
- import { ButtonComponent } from '../../atoms/button/button.component';
4
- import { CommonModule } from '@angular/common';
5
- import { truncateContent } from '../../../shared/utils/common.utils';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/platform-browser";
8
- import * as i2 from "@angular/common";
9
- class ContentDesignComponent {
10
- constructor(sanitizer) {
11
- this.sanitizer = sanitizer;
12
- this.contentLength = 100;
13
- this.clickEvent = new EventEmitter();
14
- }
15
- ngOnInit() {
16
- this.content = {
17
- contentDirection: ContentDirection.left,
18
- ...this.content,
19
- };
20
- // Sanitize the map address if it exists
21
- if (this.content.mapAddress) {
22
- this.sanitizedMapAddress = this.sanitizer.bypassSecurityTrustResourceUrl(this.content.mapAddress);
23
- }
24
- }
25
- truncateContent(content) {
26
- return truncateContent(content, this.contentLength);
27
- }
28
- onButtonClick(action) {
29
- if (action) {
30
- this.content.contentAction = action;
31
- this.clickEvent.emit(this.content);
32
- }
33
- }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentDesignComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
35
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContentDesignComponent, isStandalone: true, selector: "app-content-design", inputs: { content: "content", contentLength: "contentLength" }, outputs: { clickEvent: "clickEvent" }, ngImport: i0, template: "<div class=\"content-designer\" [ngClass]=\"content.contentDirection\">\n <ng-container *ngIf=\"content?.mapAddress; else imageTemplate\">\n <div class=\"map\">\n <iframe\n width=\"600\"\n height=\"450\"\n style=\"border:0;\"\n allowfullscreen=\"\"\n loading=\"lazy\"\n referrerpolicy=\"no-referrer-when-downgrade\"\n [src]=\"sanitizedMapAddress\">\n </iframe>\n </div>\n </ng-container>\n\n <ng-template #imageTemplate>\n <div *ngIf=\"content.coverImage\" class=\"image\">\n <img [src]=\"content.coverImage\" alt=\"Cover Image\">\n </div>\n </ng-template>\n\n <div class=\"content\">\n <h2 *ngIf=\"content.title\">{{ content.title }}</h2>\n <p *ngIf=\"content.content\">{{ truncateContent(content.content) }}</p>\n <ng-container [ngTemplateOutlet]=\"content.template\"></ng-container>\n <app-button *ngIf=\"content.button\" [config] = \"content.button\"\n (clickEvent)=\"onButtonClick(content.button.action)\">\n </app-button>\n </div>\n</div>\n", styles: [".content-designer{display:flex;gap:20px;flex-wrap:wrap;justify-content:space-between;align-items:center;text-align:center}.content-designer img{max-width:100%;height:auto}.content-designer .content{display:flex;flex-direction:column}.content-designer .content p{text-align:justify}.content-designer.left,.content-designer.right{flex-direction:row}.content-designer.left .image,.content-designer.left .content,.content-designer.right .image,.content-designer.right .content{flex:1;width:50%}.content-designer.left .content,.content-designer.right .content{text-align:justify}.content-designer.left .image,.content-designer.right .image{display:flex}.content-designer.left{flex-direction:row-reverse}.content-designer.left .image{justify-content:end}.content-designer.right .image{justify-content:start}.content-designer.up,.content-designer.down{flex-direction:column}.content-designer.up .image,.content-designer.down .image{width:100%;height:300px;overflow:hidden;justify-content:center;align-items:center}.content-designer.up .image image,.content-designer.down .image image{height:100%;width:auto;object-fit:cover}.content-designer.up{flex-direction:column-reverse}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ButtonComponent, selector: "app-button", inputs: ["config"], outputs: ["clickEvent"] }] }); }
36
- }
37
- export { ContentDesignComponent };
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentDesignComponent, decorators: [{
39
- type: Component,
40
- args: [{ selector: 'app-content-design', standalone: true, imports: [CommonModule, ButtonComponent], template: "<div class=\"content-designer\" [ngClass]=\"content.contentDirection\">\n <ng-container *ngIf=\"content?.mapAddress; else imageTemplate\">\n <div class=\"map\">\n <iframe\n width=\"600\"\n height=\"450\"\n style=\"border:0;\"\n allowfullscreen=\"\"\n loading=\"lazy\"\n referrerpolicy=\"no-referrer-when-downgrade\"\n [src]=\"sanitizedMapAddress\">\n </iframe>\n </div>\n </ng-container>\n\n <ng-template #imageTemplate>\n <div *ngIf=\"content.coverImage\" class=\"image\">\n <img [src]=\"content.coverImage\" alt=\"Cover Image\">\n </div>\n </ng-template>\n\n <div class=\"content\">\n <h2 *ngIf=\"content.title\">{{ content.title }}</h2>\n <p *ngIf=\"content.content\">{{ truncateContent(content.content) }}</p>\n <ng-container [ngTemplateOutlet]=\"content.template\"></ng-container>\n <app-button *ngIf=\"content.button\" [config] = \"content.button\"\n (clickEvent)=\"onButtonClick(content.button.action)\">\n </app-button>\n </div>\n</div>\n", styles: [".content-designer{display:flex;gap:20px;flex-wrap:wrap;justify-content:space-between;align-items:center;text-align:center}.content-designer img{max-width:100%;height:auto}.content-designer .content{display:flex;flex-direction:column}.content-designer .content p{text-align:justify}.content-designer.left,.content-designer.right{flex-direction:row}.content-designer.left .image,.content-designer.left .content,.content-designer.right .image,.content-designer.right .content{flex:1;width:50%}.content-designer.left .content,.content-designer.right .content{text-align:justify}.content-designer.left .image,.content-designer.right .image{display:flex}.content-designer.left{flex-direction:row-reverse}.content-designer.left .image{justify-content:end}.content-designer.right .image{justify-content:start}.content-designer.up,.content-designer.down{flex-direction:column}.content-designer.up .image,.content-designer.down .image{width:100%;height:300px;overflow:hidden;justify-content:center;align-items:center}.content-designer.up .image image,.content-designer.down .image image{height:100%;width:auto;object-fit:cover}.content-designer.up{flex-direction:column-reverse}\n"] }]
41
- }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { content: [{
42
- type: Input
43
- }], contentLength: [{
44
- type: Input
45
- }], clickEvent: [{
46
- type: Output
47
- }] } });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1kZXNpZ24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1kdW1iLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2NvbnRlbnQtZGVzaWduL2NvbnRlbnQtZGVzaWduLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZHVtYi1saWIvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9jb250ZW50LWRlc2lnbi9jb250ZW50LWRlc2lnbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7O0FBRXJFLE1BT2Esc0JBQXNCO0lBTWpDLFlBQW9CLFNBQXVCO1FBQXZCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFKbEMsa0JBQWEsR0FBVyxHQUFHLENBQUM7UUFDM0IsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO0lBR1gsQ0FBQztJQUVoRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLElBQUk7WUFDdkMsR0FBRyxJQUFJLENBQUMsT0FBTztTQUNoQixDQUFBO1FBRUQsd0NBQXdDO1FBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNuRztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsT0FBZTtRQUM3QixPQUFPLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxhQUFhLENBQUMsTUFBMEI7UUFDdEMsSUFBRyxNQUFNLEVBQ1Q7WUFDRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQzsrR0E5QlUsc0JBQXNCO21HQUF0QixzQkFBc0IscUxDZm5DLHdoQ0E4QkEsMnNDRGpCWSxZQUFZLHdZQUFFLGVBQWU7O1NBRTVCLHNCQUFzQjs0RkFBdEIsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBR1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDO21HQUcvQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUNvbnRlbnREZXNpZ24gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29udGVudERpcmVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9lbnVtcy9lbnVtJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgdHJ1bmNhdGVDb250ZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL2NvbW1vbi51dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb250ZW50LWRlc2lnbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LWRlc2lnbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtZGVzaWduLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEJ1dHRvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudERlc2lnbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbnRlbnQhOiBJQ29udGVudERlc2lnbjtcbiAgQElucHV0KCkgY29udGVudExlbmd0aDogbnVtYmVyID0gMTAwO1xuICBAT3V0cHV0KCkgY2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbnRlbnREZXNpZ24+KCk7XG4gIHNhbml0aXplZE1hcEFkZHJlc3MhOiBTYWZlUmVzb3VyY2VVcmw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb250ZW50ID0ge1xuICAgICAgY29udGVudERpcmVjdGlvbjogQ29udGVudERpcmVjdGlvbi5sZWZ0LFxuICAgICAgLi4udGhpcy5jb250ZW50LFxuICAgIH1cblxuICAgIC8vIFNhbml0aXplIHRoZSBtYXAgYWRkcmVzcyBpZiBpdCBleGlzdHNcbiAgICBpZiAodGhpcy5jb250ZW50Lm1hcEFkZHJlc3MpIHtcbiAgICAgIHRoaXMuc2FuaXRpemVkTWFwQWRkcmVzcyA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0aGlzLmNvbnRlbnQubWFwQWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgdHJ1bmNhdGVDb250ZW50KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHJldHVybiB0cnVuY2F0ZUNvbnRlbnQoY29udGVudCwgdGhpcy5jb250ZW50TGVuZ3RoKTtcbiAgfVxuXG4gIG9uQnV0dG9uQ2xpY2soYWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZihhY3Rpb24pXG4gICAge1xuICAgICAgdGhpcy5jb250ZW50LmNvbnRlbnRBY3Rpb24gPSBhY3Rpb247XG4gICAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdCh0aGlzLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRlbnQtZGVzaWduZXJcIiBbbmdDbGFzc109XCJjb250ZW50LmNvbnRlbnREaXJlY3Rpb25cIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQ/Lm1hcEFkZHJlc3M7IGVsc2UgaW1hZ2VUZW1wbGF0ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYXBcIj5cbiAgICAgIDxpZnJhbWVcbiAgICAgICAgd2lkdGg9XCI2MDBcIlxuICAgICAgICBoZWlnaHQ9XCI0NTBcIlxuICAgICAgICBzdHlsZT1cImJvcmRlcjowO1wiXG4gICAgICAgIGFsbG93ZnVsbHNjcmVlbj1cIlwiXG4gICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgcmVmZXJyZXJwb2xpY3k9XCJuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZVwiXG4gICAgICAgIFtzcmNdPVwic2FuaXRpemVkTWFwQWRkcmVzc1wiPlxuICAgICAgPC9pZnJhbWU+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjaW1hZ2VUZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiY29udGVudC5jb3ZlckltYWdlXCIgY2xhc3M9XCJpbWFnZVwiPlxuICAgICAgPGltZyBbc3JjXT1cImNvbnRlbnQuY292ZXJJbWFnZVwiIGFsdD1cIkNvdmVyIEltYWdlXCI+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICA8aDIgKm5nSWY9XCJjb250ZW50LnRpdGxlXCI+e3sgY29udGVudC50aXRsZSB9fTwvaDI+XG4gICAgPHAgKm5nSWY9XCJjb250ZW50LmNvbnRlbnRcIj57eyB0cnVuY2F0ZUNvbnRlbnQoY29udGVudC5jb250ZW50KSB9fTwvcD5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnQudGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8YXBwLWJ1dHRvbiAqbmdJZj1cImNvbnRlbnQuYnV0dG9uXCIgW2NvbmZpZ10gPSBcImNvbnRlbnQuYnV0dG9uXCJcbiAgICAoY2xpY2tFdmVudCk9XCJvbkJ1dHRvbkNsaWNrKGNvbnRlbnQuYnV0dG9uLmFjdGlvbilcIj5cbiAgICA8L2FwcC1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,73 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { FormsModule, ReactiveFormsModule } from '@angular/forms';
3
- import { InputGroupType, InputType } from '../../../shared/enums/enum';
4
- import { selectionInputTypes, textualInputTypes } from '../../../shared/constants/constant';
5
- import { CommonModule } from '@angular/common';
6
- import { SelectionComponent } from '../../atoms/selection/selection.component';
7
- import { FileSelectionComponent } from '../../atoms/file-selection/file-selection.component';
8
- import { InputComponent } from '../../atoms/input/input.component';
9
- import { ButtonComponent } from '../../atoms/button/button.component';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@angular/common";
12
- import * as i2 from "@angular/forms";
13
- class FormComponent {
14
- constructor() {
15
- this.inputConfigs = [];
16
- this.buttonConfig = { label: "Submit" };
17
- this.validationMessages = {};
18
- this.formSubmit = new EventEmitter();
19
- this.formChange = new EventEmitter();
20
- // ✅ Expose InputGroupType to the template
21
- this.InputGroupType = InputGroupType;
22
- }
23
- onSubmit() {
24
- if (this.formGroup.valid) {
25
- this.formSubmit.emit(this.formGroup.value);
26
- }
27
- else {
28
- console.log('Form not valid');
29
- }
30
- }
31
- onValueChange(controlName, value) {
32
- this.formChange.emit({ controlName, value });
33
- }
34
- checkFormConfigType(inputType) {
35
- if (inputType) {
36
- if (textualInputTypes.includes(inputType))
37
- return InputGroupType.textual;
38
- if (selectionInputTypes.includes(inputType))
39
- return InputGroupType.selection;
40
- if (inputType === InputType.file)
41
- return InputGroupType.file;
42
- if (inputType === InputType.datetime)
43
- return InputGroupType.datetime;
44
- }
45
- return InputGroupType.textual;
46
- }
47
- trackByFn(index, item) {
48
- return item.name;
49
- }
50
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
51
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormComponent, isStandalone: true, selector: "app-form", inputs: { formGroup: "formGroup", inputConfigs: "inputConfigs", buttonConfig: "buttonConfig", validationMessages: "validationMessages" }, outputs: { formSubmit: "formSubmit", formChange: "formChange" }, ngImport: i0, template: "<form (ngSubmit)=\"onSubmit()\" [formGroup]=\"formGroup\">\n <ng-container *ngIf=\"inputConfigs && inputConfigs.length > 0; else noInputs\">\n <ng-container *ngFor=\"let inputConfig of inputConfigs; trackBy: trackByFn\">\n\n <!-- Input Field -->\n <app-input\n *ngIf=\"checkFormConfigType(inputConfig.type) === InputGroupType.textual\"\n [formControlName]=\"inputConfig.name\"\n [config]=\"inputConfig\"\n [required]=\"inputConfig.required\"\n (valueChange)=\"onValueChange(inputConfig.name, $event)\">\n </app-input>\n\n <!-- Selection Field -->\n <app-selection\n *ngIf=\"checkFormConfigType(inputConfig.type) === InputGroupType.selection\"\n [formControlName]=\"inputConfig.name\"\n [label]=\"inputConfig.label ?? ''\"\n [options]=\"inputConfig.options\"\n (valueChange)=\"onValueChange(inputConfig.name, $event)\">\n </app-selection>\n\n <!-- File Selection -->\n <app-file-selection\n *ngIf=\"checkFormConfigType(inputConfig.type) === InputGroupType.file\"\n [formControlName]=\"inputConfig.name\"\n [label]=\"inputConfig.label ?? inputConfig.name\"\n (valueChange)=\"onValueChange(inputConfig.name, $event)\">\n </app-file-selection>\n\n <!-- Validation Messages -->\n <div *ngIf=\"formGroup.controls[inputConfig.name]?.invalid && formGroup.controls[inputConfig.name]?.touched\" class=\"error-message\">\n {{ validationMessages[inputConfig.name] || 'Invalid input' }}\n </div>\n\n </ng-container>\n </ng-container>\n\n <!-- Submit Button -->\n <app-button [config]=\"buttonConfig\"></app-button>\n</form>\n\n<!-- No Inputs Placeholder -->\n<ng-template #noInputs>\n <p>No inputs configured.</p>\n</ng-template>\n", styles: ["form{display:flex;flex-direction:column;gap:15px}label{display:block;margin-bottom:.5rem}input,textarea{width:100%;padding:.5rem;border:1px solid #ccc;border-radius:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: InputComponent, selector: "app-input", inputs: ["config"] }, { kind: "component", type: SelectionComponent, selector: "app-selection", inputs: ["label", "options", "selectedValue", "selectedValues", "isMultiSelect", "displayType"], outputs: ["selectedChange"] }, { kind: "component", type: FileSelectionComponent, selector: "app-file-selection", inputs: ["label", "chooseFileLabel", "imageUrl", "fileName"] }, { kind: "component", type: ButtonComponent, selector: "app-button", inputs: ["config"], outputs: ["clickEvent"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
52
- }
53
- export { FormComponent };
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormComponent, decorators: [{
55
- type: Component,
56
- args: [{ selector: 'app-form', standalone: true, imports: [
57
- CommonModule, InputComponent, SelectionComponent,
58
- FileSelectionComponent, ButtonComponent, FormsModule, ReactiveFormsModule
59
- ], template: "<form (ngSubmit)=\"onSubmit()\" [formGroup]=\"formGroup\">\n <ng-container *ngIf=\"inputConfigs && inputConfigs.length > 0; else noInputs\">\n <ng-container *ngFor=\"let inputConfig of inputConfigs; trackBy: trackByFn\">\n\n <!-- Input Field -->\n <app-input\n *ngIf=\"checkFormConfigType(inputConfig.type) === InputGroupType.textual\"\n [formControlName]=\"inputConfig.name\"\n [config]=\"inputConfig\"\n [required]=\"inputConfig.required\"\n (valueChange)=\"onValueChange(inputConfig.name, $event)\">\n </app-input>\n\n <!-- Selection Field -->\n <app-selection\n *ngIf=\"checkFormConfigType(inputConfig.type) === InputGroupType.selection\"\n [formControlName]=\"inputConfig.name\"\n [label]=\"inputConfig.label ?? ''\"\n [options]=\"inputConfig.options\"\n (valueChange)=\"onValueChange(inputConfig.name, $event)\">\n </app-selection>\n\n <!-- File Selection -->\n <app-file-selection\n *ngIf=\"checkFormConfigType(inputConfig.type) === InputGroupType.file\"\n [formControlName]=\"inputConfig.name\"\n [label]=\"inputConfig.label ?? inputConfig.name\"\n (valueChange)=\"onValueChange(inputConfig.name, $event)\">\n </app-file-selection>\n\n <!-- Validation Messages -->\n <div *ngIf=\"formGroup.controls[inputConfig.name]?.invalid && formGroup.controls[inputConfig.name]?.touched\" class=\"error-message\">\n {{ validationMessages[inputConfig.name] || 'Invalid input' }}\n </div>\n\n </ng-container>\n </ng-container>\n\n <!-- Submit Button -->\n <app-button [config]=\"buttonConfig\"></app-button>\n</form>\n\n<!-- No Inputs Placeholder -->\n<ng-template #noInputs>\n <p>No inputs configured.</p>\n</ng-template>\n", styles: ["form{display:flex;flex-direction:column;gap:15px}label{display:block;margin-bottom:.5rem}input,textarea{width:100%;padding:.5rem;border:1px solid #ccc;border-radius:.25rem}\n"] }]
60
- }], propDecorators: { formGroup: [{
61
- type: Input
62
- }], inputConfigs: [{
63
- type: Input
64
- }], buttonConfig: [{
65
- type: Input
66
- }], validationMessages: [{
67
- type: Input
68
- }], formSubmit: [{
69
- type: Output
70
- }], formChange: [{
71
- type: Output
72
- }] } });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWR1bWItbGliL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvZm9ybS9mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZHVtYi1saWIvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9mb3JtL2Zvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQWEsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFFN0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7OztBQUV0RSxNQVVhLGFBQWE7SUFWMUI7UUFZVyxpQkFBWSxHQUF3QixFQUFFLENBQUM7UUFDdkMsaUJBQVksR0FBa0IsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDbEQsdUJBQWtCLEdBQThCLEVBQUUsQ0FBQztRQUVsRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXVDLENBQUM7UUFFL0UsMENBQTBDO1FBQzFDLG1CQUFjLEdBQUcsY0FBYyxDQUFDO0tBMkJqQztJQXpCQyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLFdBQW1CLEVBQUUsS0FBVTtRQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxTQUFnQztRQUNsRCxJQUFJLFNBQVMsRUFBRTtZQUNiLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFBRSxPQUFPLGNBQWMsQ0FBQyxPQUFPLENBQUM7WUFDekUsSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUFFLE9BQU8sY0FBYyxDQUFDLFNBQVMsQ0FBQztZQUM3RSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDN0QsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxjQUFjLENBQUMsUUFBUSxDQUFDO1NBQ3RFO1FBQ0QsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYSxFQUFFLElBQWtCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDOytHQXBDVSxhQUFhO21HQUFiLGFBQWEsK1FDckIxQixvd0RBOENBLHVPRDdCSSxZQUFZLGdRQUFFLGNBQWMsMEVBQUUsa0JBQWtCLHdMQUNoRCxzQkFBc0IsNkhBQUUsZUFBZSxtR0FBRSxXQUFXLHdtQkFBRSxtQkFBbUI7O1NBR2hFLGFBQWE7NEZBQWIsYUFBYTtrQkFWekIsU0FBUzsrQkFDRSxVQUFVLGNBQ1IsSUFBSSxXQUdQO3dCQUNQLFlBQVksRUFBRSxjQUFjLEVBQUUsa0JBQWtCO3dCQUNoRCxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLG1CQUFtQjtxQkFDMUU7OEJBR1EsU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW5wdXRHcm91cFR5cGUsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9lbnVtcy9lbnVtJztcbmltcG9ydCB7IHNlbGVjdGlvbklucHV0VHlwZXMsIHRleHR1YWxJbnB1dFR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbnN0YW50cy9jb25zdGFudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvc2VsZWN0aW9uL3NlbGVjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZVNlbGVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ZpbGUtc2VsZWN0aW9uL2ZpbGUtc2VsZWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJQnV0dG9uQ29uZmlnLCBJSW5wdXRDb25maWcgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9pbnB1dC9pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLCBJbnB1dENvbXBvbmVudCwgU2VsZWN0aW9uQ29tcG9uZW50LFxuICAgIEZpbGVTZWxlY3Rpb25Db21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZm9ybUdyb3VwITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBpbnB1dENvbmZpZ3M6IEFycmF5PElJbnB1dENvbmZpZz4gPSBbXTtcbiAgQElucHV0KCkgYnV0dG9uQ29uZmlnOiBJQnV0dG9uQ29uZmlnID0geyBsYWJlbDogXCJTdWJtaXRcIiB9O1xuICBASW5wdXQoKSB2YWxpZGF0aW9uTWVzc2FnZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICBAT3V0cHV0KCkgZm9ybVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZm9ybUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb250cm9sTmFtZTogc3RyaW5nOyB2YWx1ZTogYW55IH0+KCk7XG5cbiAgLy8g4pyFIEV4cG9zZSBJbnB1dEdyb3VwVHlwZSB0byB0aGUgdGVtcGxhdGVcbiAgSW5wdXRHcm91cFR5cGUgPSBJbnB1dEdyb3VwVHlwZTtcblxuICBvblN1Ym1pdCgpIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KHRoaXMuZm9ybUdyb3VwLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ0Zvcm0gbm90IHZhbGlkJyk7XG4gICAgfVxuICB9XG5cbiAgb25WYWx1ZUNoYW5nZShjb250cm9sTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5mb3JtQ2hhbmdlLmVtaXQoeyBjb250cm9sTmFtZSwgdmFsdWUgfSk7XG4gIH1cblxuICBjaGVja0Zvcm1Db25maWdUeXBlKGlucHV0VHlwZTogSW5wdXRUeXBlIHwgdW5kZWZpbmVkKTogSW5wdXRHcm91cFR5cGUge1xuICAgIGlmIChpbnB1dFR5cGUpIHtcbiAgICAgIGlmICh0ZXh0dWFsSW5wdXRUeXBlcy5pbmNsdWRlcyhpbnB1dFR5cGUpKSByZXR1cm4gSW5wdXRHcm91cFR5cGUudGV4dHVhbDtcbiAgICAgIGlmIChzZWxlY3Rpb25JbnB1dFR5cGVzLmluY2x1ZGVzKGlucHV0VHlwZSkpIHJldHVybiBJbnB1dEdyb3VwVHlwZS5zZWxlY3Rpb247XG4gICAgICBpZiAoaW5wdXRUeXBlID09PSBJbnB1dFR5cGUuZmlsZSkgcmV0dXJuIElucHV0R3JvdXBUeXBlLmZpbGU7XG4gICAgICBpZiAoaW5wdXRUeXBlID09PSBJbnB1dFR5cGUuZGF0ZXRpbWUpIHJldHVybiBJbnB1dEdyb3VwVHlwZS5kYXRldGltZTtcbiAgICB9XG4gICAgcmV0dXJuIElucHV0R3JvdXBUeXBlLnRleHR1YWw7XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogSUlucHV0Q29uZmlnKSB7XG4gICAgcmV0dXJuIGl0ZW0ubmFtZTtcbiAgfVxufVxuIiwiPGZvcm0gKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5wdXRDb25maWdzICYmIGlucHV0Q29uZmlncy5sZW5ndGggPiAwOyBlbHNlIG5vSW5wdXRzXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW5wdXRDb25maWcgb2YgaW5wdXRDb25maWdzOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cblxuICAgICAgPCEtLSBJbnB1dCBGaWVsZCAtLT5cbiAgICAgIDxhcHAtaW5wdXRcbiAgICAgICAgKm5nSWY9XCJjaGVja0Zvcm1Db25maWdUeXBlKGlucHV0Q29uZmlnLnR5cGUpID09PSBJbnB1dEdyb3VwVHlwZS50ZXh0dWFsXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJpbnB1dENvbmZpZy5uYW1lXCJcbiAgICAgICAgW2NvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgIFtyZXF1aXJlZF09XCJpbnB1dENvbmZpZy5yZXF1aXJlZFwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKGlucHV0Q29uZmlnLm5hbWUsICRldmVudClcIj5cbiAgICAgIDwvYXBwLWlucHV0PlxuXG4gICAgICA8IS0tIFNlbGVjdGlvbiBGaWVsZCAtLT5cbiAgICAgIDxhcHAtc2VsZWN0aW9uXG4gICAgICAgICpuZ0lmPVwiY2hlY2tGb3JtQ29uZmlnVHlwZShpbnB1dENvbmZpZy50eXBlKSA9PT0gSW5wdXRHcm91cFR5cGUuc2VsZWN0aW9uXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJpbnB1dENvbmZpZy5uYW1lXCJcbiAgICAgICAgW2xhYmVsXT1cImlucHV0Q29uZmlnLmxhYmVsID8/ICcnXCJcbiAgICAgICAgW29wdGlvbnNdPVwiaW5wdXRDb25maWcub3B0aW9uc1wiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKGlucHV0Q29uZmlnLm5hbWUsICRldmVudClcIj5cbiAgICAgIDwvYXBwLXNlbGVjdGlvbj5cblxuICAgICAgPCEtLSBGaWxlIFNlbGVjdGlvbiAtLT5cbiAgICAgIDxhcHAtZmlsZS1zZWxlY3Rpb25cbiAgICAgICAgKm5nSWY9XCJjaGVja0Zvcm1Db25maWdUeXBlKGlucHV0Q29uZmlnLnR5cGUpID09PSBJbnB1dEdyb3VwVHlwZS5maWxlXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJpbnB1dENvbmZpZy5uYW1lXCJcbiAgICAgICAgW2xhYmVsXT1cImlucHV0Q29uZmlnLmxhYmVsID8/IGlucHV0Q29uZmlnLm5hbWVcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZShpbnB1dENvbmZpZy5uYW1lLCAkZXZlbnQpXCI+XG4gICAgICA8L2FwcC1maWxlLXNlbGVjdGlvbj5cblxuICAgICAgPCEtLSBWYWxpZGF0aW9uIE1lc3NhZ2VzIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9sc1tpbnB1dENvbmZpZy5uYW1lXT8uaW52YWxpZCAmJiBmb3JtR3JvdXAuY29udHJvbHNbaW5wdXRDb25maWcubmFtZV0/LnRvdWNoZWRcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cbiAgICAgICAge3sgdmFsaWRhdGlvbk1lc3NhZ2VzW2lucHV0Q29uZmlnLm5hbWVdIHx8ICdJbnZhbGlkIGlucHV0JyB9fVxuICAgICAgPC9kaXY+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBTdWJtaXQgQnV0dG9uIC0tPlxuICA8YXBwLWJ1dHRvbiBbY29uZmlnXT1cImJ1dHRvbkNvbmZpZ1wiPjwvYXBwLWJ1dHRvbj5cbjwvZm9ybT5cblxuPCEtLSBObyBJbnB1dHMgUGxhY2Vob2xkZXIgLS0+XG48bmctdGVtcGxhdGUgI25vSW5wdXRzPlxuICA8cD5ObyBpbnB1dHMgY29uZmlndXJlZC48L3A+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,40 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { ContentDesignComponent } from '../content-design/content-design.component';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/platform-browser";
5
- class FormatedTextComponent {
6
- constructor(sanitizer) {
7
- this.sanitizer = sanitizer;
8
- }
9
- // Getter for content
10
- get content() {
11
- // Create a new variable based on _content
12
- const updatedContent = {
13
- ...this._content,
14
- content: undefined
15
- };
16
- return updatedContent;
17
- }
18
- // Setter for content
19
- set content(content) {
20
- this._content = content;
21
- // Sanitize the content only if it's defined and has non-empty content
22
- if (content?.content) {
23
- this.safeContent = this.sanitizer.bypassSecurityTrustHtml(content.content);
24
- }
25
- else {
26
- this.safeContent = ''; // Reset safeContent if there's no valid content
27
- }
28
- }
29
- ngOnInit() { }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormatedTextComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormatedTextComponent, isStandalone: true, selector: "app-formated-text", inputs: { content: "content" }, ngImport: i0, template: "<app-content-design [content] = \"content\"></app-content-design>\n<br/>\n<div [innerHTML]=\"safeContent\"></div>\n", styles: [""], dependencies: [{ kind: "component", type: ContentDesignComponent, selector: "app-content-design", inputs: ["content", "contentLength"], outputs: ["clickEvent"] }] }); }
32
- }
33
- export { FormatedTextComponent };
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormatedTextComponent, decorators: [{
35
- type: Component,
36
- args: [{ selector: 'app-formated-text', standalone: true, imports: [ContentDesignComponent], template: "<app-content-design [content] = \"content\"></app-content-design>\n<br/>\n<div [innerHTML]=\"safeContent\"></div>\n" }]
37
- }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { content: [{
38
- type: Input
39
- }] } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0ZWQtdGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWR1bWItbGliL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvZm9ybWF0ZWQtdGV4dC9mb3JtYXRlZC10ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZHVtYi1saWIvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9mb3JtYXRlZC10ZXh0L2Zvcm1hdGVkLXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHekQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7OztBQUVwRixNQU9hLHFCQUFxQjtJQUloQyxZQUFvQixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO0lBQUcsQ0FBQztJQUUvQyxxQkFBcUI7SUFDckIsSUFBSSxPQUFPO1FBQ1AsMENBQTBDO1FBQzFDLE1BQU0sY0FBYyxHQUFHO1lBQ3JCLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFDaEIsT0FBTyxFQUFFLFNBQVM7U0FDbkIsQ0FBQztRQUVOLE9BQU8sY0FBYyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsSUFDSSxPQUFPLENBQUMsT0FBdUI7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFFeEIsc0VBQXNFO1FBQ3RFLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRTtZQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVFO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGdEQUFnRDtTQUN4RTtJQUNILENBQUM7SUFFRCxRQUFRLEtBQVUsQ0FBQzsrR0E5QlIscUJBQXFCO21HQUFyQixxQkFBcUIsNkdDWmxDLHFIQUdBLDBERE9ZLHNCQUFzQjs7U0FFckIscUJBQXFCOzRGQUFyQixxQkFBcUI7a0JBUGpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FHUCxDQUFDLHNCQUFzQixDQUFDO21HQXFCN0IsT0FBTztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBJQ29udGVudERlc2lnbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBDb250ZW50RGVzaWduQ29tcG9uZW50IH0gZnJvbSAnLi4vY29udGVudC1kZXNpZ24vY29udGVudC1kZXNpZ24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZvcm1hdGVkLXRleHQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWF0ZWQtdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm1hdGVkLXRleHQuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW0NvbnRlbnREZXNpZ25Db21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1hdGVkVGV4dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgX2NvbnRlbnQhOiBJQ29udGVudERlc2lnbjsgLy8gUHJpdmF0ZSB2YXJpYWJsZSB0byBob2xkIGNvbnRlbnRcbiAgc2FmZUNvbnRlbnQhOiBTYWZlSHRtbDsgLy8gU2FmZSBIVE1MIHZhcmlhYmxlXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge31cblxuICAvLyBHZXR0ZXIgZm9yIGNvbnRlbnRcbiAgZ2V0IGNvbnRlbnQoKTogSUNvbnRlbnREZXNpZ24ge1xuICAgICAgLy8gQ3JlYXRlIGEgbmV3IHZhcmlhYmxlIGJhc2VkIG9uIF9jb250ZW50XG4gICAgICBjb25zdCB1cGRhdGVkQ29udGVudCA9IHtcbiAgICAgICAgLi4udGhpcy5fY29udGVudCxcbiAgICAgICAgY29udGVudDogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gIHJldHVybiB1cGRhdGVkQ29udGVudDtcbiAgfVxuXG4gIC8vIFNldHRlciBmb3IgY29udGVudFxuICBASW5wdXQoKVxuICBzZXQgY29udGVudChjb250ZW50OiBJQ29udGVudERlc2lnbikge1xuICAgIHRoaXMuX2NvbnRlbnQgPSBjb250ZW50O1xuXG4gICAgLy8gU2FuaXRpemUgdGhlIGNvbnRlbnQgb25seSBpZiBpdCdzIGRlZmluZWQgYW5kIGhhcyBub24tZW1wdHkgY29udGVudFxuICAgIGlmIChjb250ZW50Py5jb250ZW50KSB7XG4gICAgICB0aGlzLnNhZmVDb250ZW50ID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY29udGVudC5jb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zYWZlQ29udGVudCA9ICcnOyAvLyBSZXNldCBzYWZlQ29udGVudCBpZiB0aGVyZSdzIG5vIHZhbGlkIGNvbnRlbnRcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG59XG4iLCI8YXBwLWNvbnRlbnQtZGVzaWduIFtjb250ZW50XSA9IFwiY29udGVudFwiPjwvYXBwLWNvbnRlbnQtZGVzaWduPlxuPGJyLz5cbjxkaXYgW2lubmVySFRNTF09XCJzYWZlQ29udGVudFwiPjwvZGl2PlxuIl19
@@ -1,49 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { ButtonComponent } from '../../atoms/button/button.component';
4
- import { Size } from '../../../shared/enums/enum';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- class ModalComponent {
8
- constructor() {
9
- this.size = Size.Medium;
10
- this.okConfig = {
11
- label: "Ok"
12
- };
13
- this.cancelConfig = {
14
- label: "Cancel"
15
- };
16
- }
17
- ngOnInit() {
18
- }
19
- closeModal() {
20
- this.modalEvent.isModalVisible = false;
21
- }
22
- handleOverlayClick(event) {
23
- this.closeModal();
24
- }
25
- handleContentClick(event) {
26
- event.stopPropagation();
27
- }
28
- ok() {
29
- if (this.modalEvent && this.modalEvent.onOk) {
30
- this.modalEvent.onOk();
31
- this.closeModal();
32
- }
33
- }
34
- cancel() {
35
- this.closeModal();
36
- }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ModalComponent, isStandalone: true, selector: "app-modal", inputs: { modalEvent: "modalEvent", size: "size" }, ngImport: i0, template: "<div class=\"modal-overlay\" (click)=\"handleOverlayClick($event)\" *ngIf=\"modalEvent?.isModalVisible\">\n <div class=\"modal-content\" [ngClass]=\"size\" (click)=\"handleContentClick($event)\">\n <div class=\"modal-header\">\n <h2>{{modalEvent.title }}</h2>\n <button class=\"close-btn\" (click)=\"closeModal()\">\n <i class=\"material-icons\">close</i>\n </button>\n </div>\n <div class=\"modal-body\">\n <div *ngIf=\"modalEvent.params && modalEvent.params['content']\">{{modalEvent.params['content'] }}</div>\n <ng-container *ngTemplateOutlet=\"modalEvent.template; context: modalEvent.params\"></ng-container>\n <div *ngIf=\"!modalEvent?.isDialog\" class=\"buttons\">\n <app-button [config]=\"okConfig\" (clickEvent)=\"ok()\"></app-button>\n <app-button [config]=\"cancelConfig\" (clickEvent)=\"cancel()\"></app-button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal-overlay{display:flex;align-items:center;justify-content:center;position:fixed;inset:0;width:100%;height:100%;background-color:#00000080;z-index:50}.modal-content{display:flex;flex-direction:column;background-color:#fff;color:#000;border-radius:8px;padding:2rem;width:100%;max-height:calc(100vh - 10rem)}.modal-content.small{width:30%;max-width:300px}.modal-content.medium{width:50%;max-width:600px}.modal-content.large{width:80%;max-width:900px}.modal-content.dark-mode{background-color:#27272a;color:#d1d5db}.modal-content .modal-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;position:sticky;top:0;background-color:inherit;z-index:10;border-bottom:1px solid #e5e7eb}.modal-content .modal-header h2{font-size:2rem;font-weight:700;margin:0}.modal-content .modal-header .close-btn{background:none;border:none;font-size:1.5rem;cursor:pointer;display:flex;align-items:center}.modal-content .modal-header .close-btn i.material-icons{font-size:24px;color:#888;transition:color .2s}.modal-content .modal-header .close-btn:hover i.material-icons{color:#444}.modal-content .modal-body{flex-grow:1;overflow-y:auto;padding:1rem 0;scrollbar-width:thin;scrollbar-color:#888 #f1f1f1}.modal-content .modal-body::-webkit-scrollbar{width:10px}.modal-content .modal-body::-webkit-scrollbar-track{background:#f1f1f1;border-radius:10px}.modal-content .modal-body::-webkit-scrollbar-thumb{background:#888;border-radius:10px;border:2px solid #f1f1f1;-webkit-transition:background .2s;transition:background .2s}.modal-content .modal-body::-webkit-scrollbar-thumb:hover{background:#555}.modal-content .buttons{display:flex;justify-content:flex-end;gap:15px;padding:1.5rem 0;border-top:1px solid #e5e7eb}p{color:#4b5563;margin-bottom:1.5rem}.dark-mode p{color:#d1d5db}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ButtonComponent, selector: "app-button", inputs: ["config"], outputs: ["clickEvent"] }] }); }
39
- }
40
- export { ModalComponent };
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ModalComponent, decorators: [{
42
- type: Component,
43
- args: [{ selector: 'app-modal', standalone: true, imports: [CommonModule, ButtonComponent], template: "<div class=\"modal-overlay\" (click)=\"handleOverlayClick($event)\" *ngIf=\"modalEvent?.isModalVisible\">\n <div class=\"modal-content\" [ngClass]=\"size\" (click)=\"handleContentClick($event)\">\n <div class=\"modal-header\">\n <h2>{{modalEvent.title }}</h2>\n <button class=\"close-btn\" (click)=\"closeModal()\">\n <i class=\"material-icons\">close</i>\n </button>\n </div>\n <div class=\"modal-body\">\n <div *ngIf=\"modalEvent.params && modalEvent.params['content']\">{{modalEvent.params['content'] }}</div>\n <ng-container *ngTemplateOutlet=\"modalEvent.template; context: modalEvent.params\"></ng-container>\n <div *ngIf=\"!modalEvent?.isDialog\" class=\"buttons\">\n <app-button [config]=\"okConfig\" (clickEvent)=\"ok()\"></app-button>\n <app-button [config]=\"cancelConfig\" (clickEvent)=\"cancel()\"></app-button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal-overlay{display:flex;align-items:center;justify-content:center;position:fixed;inset:0;width:100%;height:100%;background-color:#00000080;z-index:50}.modal-content{display:flex;flex-direction:column;background-color:#fff;color:#000;border-radius:8px;padding:2rem;width:100%;max-height:calc(100vh - 10rem)}.modal-content.small{width:30%;max-width:300px}.modal-content.medium{width:50%;max-width:600px}.modal-content.large{width:80%;max-width:900px}.modal-content.dark-mode{background-color:#27272a;color:#d1d5db}.modal-content .modal-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;position:sticky;top:0;background-color:inherit;z-index:10;border-bottom:1px solid #e5e7eb}.modal-content .modal-header h2{font-size:2rem;font-weight:700;margin:0}.modal-content .modal-header .close-btn{background:none;border:none;font-size:1.5rem;cursor:pointer;display:flex;align-items:center}.modal-content .modal-header .close-btn i.material-icons{font-size:24px;color:#888;transition:color .2s}.modal-content .modal-header .close-btn:hover i.material-icons{color:#444}.modal-content .modal-body{flex-grow:1;overflow-y:auto;padding:1rem 0;scrollbar-width:thin;scrollbar-color:#888 #f1f1f1}.modal-content .modal-body::-webkit-scrollbar{width:10px}.modal-content .modal-body::-webkit-scrollbar-track{background:#f1f1f1;border-radius:10px}.modal-content .modal-body::-webkit-scrollbar-thumb{background:#888;border-radius:10px;border:2px solid #f1f1f1;-webkit-transition:background .2s;transition:background .2s}.modal-content .modal-body::-webkit-scrollbar-thumb:hover{background:#555}.modal-content .buttons{display:flex;justify-content:flex-end;gap:15px;padding:1.5rem 0;border-top:1px solid #e5e7eb}p{color:#4b5563;margin-bottom:1.5rem}.dark-mode p{color:#d1d5db}\n"] }]
44
- }], ctorParameters: function () { return []; }, propDecorators: { modalEvent: [{
45
- type: Input
46
- }], size: [{
47
- type: Input
48
- }] } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1kdW1iLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZHVtYi1saWIvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9tb2RhbC9tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBRWxELE1BT2EsY0FBYztJQVV6QjtRQVJTLFNBQUksR0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRWxDLGFBQVEsR0FBa0I7WUFDeEIsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFBO1FBQ0QsaUJBQVksR0FBa0I7WUFDNUIsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQTtJQUNlLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFpQjtRQUNsQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQWlCO1FBQ2xDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsRUFBRTtRQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7K0dBcENVLGNBQWM7bUdBQWQsY0FBYyx5SENiM0IscTZCQWtCQSw0ekREUFksWUFBWSx3WUFBRSxlQUFlOztTQUU1QixjQUFjOzRGQUFkLGNBQWM7a0JBUDFCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FHUCxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUM7MEVBRy9CLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQnV0dG9uQ29uZmlnLCBJTW9kYWxFdmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9lbnVtcy9lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQnV0dG9uQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIG1vZGFsRXZlbnQhOiBJTW9kYWxFdmVudDtcbiAgQElucHV0KCkgc2l6ZTogU2l6ZSA9IFNpemUuTWVkaXVtO1xuXG4gIG9rQ29uZmlnOiBJQnV0dG9uQ29uZmlnID0ge1xuICAgIGxhYmVsOiBcIk9rXCJcbiAgfVxuICBjYW5jZWxDb25maWc6IElCdXR0b25Db25maWcgPSB7XG4gICAgbGFiZWw6IFwiQ2FuY2VsXCJcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLm1vZGFsRXZlbnQuaXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZU92ZXJsYXlDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICB9XG5cbiAgaGFuZGxlQ29udGVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBvaygpIHtcbiAgICBpZiAodGhpcy5tb2RhbEV2ZW50ICYmIHRoaXMubW9kYWxFdmVudC5vbk9rKSB7XG4gICAgICB0aGlzLm1vZGFsRXZlbnQub25PaygpO1xuICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiIChjbGljayk9XCJoYW5kbGVPdmVybGF5Q2xpY2soJGV2ZW50KVwiICpuZ0lmPVwibW9kYWxFdmVudD8uaXNNb2RhbFZpc2libGVcIj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBbbmdDbGFzc109XCJzaXplXCIgKGNsaWNrKT1cImhhbmRsZUNvbnRlbnRDbGljaygkZXZlbnQpXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgPGgyPnt7bW9kYWxFdmVudC50aXRsZSB9fTwvaDI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiY2xvc2UtYnRuXCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiPlxuICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+Y2xvc2U8L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgPGRpdiAqbmdJZj1cIm1vZGFsRXZlbnQucGFyYW1zICYmIG1vZGFsRXZlbnQucGFyYW1zWydjb250ZW50J11cIj57e21vZGFsRXZlbnQucGFyYW1zWydjb250ZW50J10gfX08L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2RhbEV2ZW50LnRlbXBsYXRlOyBjb250ZXh0OiBtb2RhbEV2ZW50LnBhcmFtc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiAqbmdJZj1cIiFtb2RhbEV2ZW50Py5pc0RpYWxvZ1wiIGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICA8YXBwLWJ1dHRvbiBbY29uZmlnXT1cIm9rQ29uZmlnXCIgKGNsaWNrRXZlbnQpPVwib2soKVwiPjwvYXBwLWJ1dHRvbj5cbiAgICAgICAgPGFwcC1idXR0b24gW2NvbmZpZ109XCJjYW5jZWxDb25maWdcIiAoY2xpY2tFdmVudCk9XCJjYW5jZWwoKVwiPjwvYXBwLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19