angular-dumb-lib 0.0.6 → 0.0.9

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 (122) hide show
  1. package/esm2022/angular-dumb-lib.mjs +5 -0
  2. package/esm2022/lib/angular-dumb-lib.component.mjs +20 -0
  3. package/esm2022/lib/angular-dumb-lib.module.mjs +22 -0
  4. package/esm2022/lib/angular-dumb-lib.service.mjs +15 -0
  5. package/esm2022/lib/components/atoms/button/button.component.mjs +34 -0
  6. package/esm2022/lib/components/atoms/datetime-picker/datetime-picker.component.mjs +58 -0
  7. package/esm2022/lib/components/atoms/file-selection/file-selection.component.mjs +85 -0
  8. package/esm2022/lib/components/atoms/input/input.component.mjs +57 -0
  9. package/esm2022/lib/components/atoms/loading/loading.component.mjs +25 -0
  10. package/esm2022/lib/components/atoms/selection/selection.component.mjs +92 -0
  11. package/esm2022/lib/components/atoms/slider/slider.component.mjs +42 -0
  12. package/esm2022/lib/components/atoms/tags/tags.component.mjs +62 -0
  13. package/esm2022/lib/components/molecules/cards/cards.component.mjs +22 -0
  14. package/esm2022/lib/components/molecules/content-design/content-design.component.mjs +32 -0
  15. package/esm2022/lib/components/molecules/form/form.component.mjs +71 -0
  16. package/esm2022/lib/components/molecules/modal/modal.component.mjs +45 -0
  17. package/esm2022/lib/components/molecules/paginator/paginator.component.mjs +118 -0
  18. package/esm2022/lib/components/molecules/table/table.component.mjs +51 -0
  19. package/esm2022/lib/components/pages/footer/footer.component.mjs +15 -0
  20. package/esm2022/lib/components/pages/login/login.component.mjs +31 -0
  21. package/esm2022/lib/components/pages/menu/menu.component.mjs +31 -0
  22. package/esm2022/lib/components/pages/version/version.component.mjs +26 -0
  23. package/esm2022/lib/shared/constants/constant.mjs +6 -0
  24. package/esm2022/lib/shared/enums/enum.mjs +69 -0
  25. package/esm2022/lib/shared/interfaces/interface.mjs +2 -0
  26. package/esm2022/public-api.mjs +25 -0
  27. package/fesm2022/angular-dumb-lib.mjs +915 -0
  28. package/fesm2022/angular-dumb-lib.mjs.map +1 -0
  29. package/index.d.ts +5 -0
  30. package/lib/angular-dumb-lib.component.d.ts +5 -0
  31. package/lib/angular-dumb-lib.module.d.ts +7 -0
  32. package/lib/angular-dumb-lib.service.d.ts +6 -0
  33. package/lib/components/atoms/button/button.component.d.ts +12 -0
  34. package/lib/components/atoms/datetime-picker/datetime-picker.component.d.ts +17 -0
  35. package/lib/components/atoms/file-selection/file-selection.component.d.ts +25 -0
  36. package/lib/components/atoms/input/input.component.d.ts +19 -0
  37. package/lib/components/atoms/loading/loading.component.d.ts +11 -0
  38. package/lib/components/atoms/selection/selection.component.d.ts +28 -0
  39. package/lib/components/atoms/slider/slider.component.d.ts +14 -0
  40. package/lib/components/atoms/tags/tags.component.d.ts +19 -0
  41. package/lib/components/molecules/cards/cards.component.d.ts +10 -0
  42. package/lib/components/molecules/content-design/content-design.component.d.ts +12 -0
  43. package/lib/components/molecules/form/form.component.d.ts +23 -0
  44. package/lib/components/molecules/modal/modal.component.d.ts +17 -0
  45. package/lib/components/molecules/paginator/paginator.component.d.ts +29 -0
  46. package/lib/components/molecules/table/table.component.d.ts +20 -0
  47. package/lib/components/pages/footer/footer.component.d.ts +8 -0
  48. package/lib/components/pages/login/login.component.d.ts +11 -0
  49. package/lib/components/pages/menu/menu.component.d.ts +14 -0
  50. package/lib/components/pages/version/version.component.d.ts +10 -0
  51. package/lib/shared/constants/constant.d.ts +3 -0
  52. package/lib/shared/enums/enum.d.ts +59 -0
  53. package/lib/shared/interfaces/interface.d.ts +58 -0
  54. package/package.json +16 -3
  55. package/public-api.d.ts +21 -0
  56. package/ng-package.json +0 -7
  57. package/src/lib/angular-dumb-lib.component.spec.ts +0 -21
  58. package/src/lib/angular-dumb-lib.component.ts +0 -15
  59. package/src/lib/angular-dumb-lib.module.ts +0 -19
  60. package/src/lib/angular-dumb-lib.service.spec.ts +0 -16
  61. package/src/lib/angular-dumb-lib.service.ts +0 -9
  62. package/src/lib/components/atoms/button/button.component.html +0 -15
  63. package/src/lib/components/atoms/button/button.component.scss +0 -76
  64. package/src/lib/components/atoms/button/button.component.ts +0 -33
  65. package/src/lib/components/atoms/datetime-picker/datetime-picker.component.html +0 -7
  66. package/src/lib/components/atoms/datetime-picker/datetime-picker.component.scss +0 -24
  67. package/src/lib/components/atoms/datetime-picker/datetime-picker.component.ts +0 -59
  68. package/src/lib/components/atoms/file-selection/file-selection.component.html +0 -24
  69. package/src/lib/components/atoms/file-selection/file-selection.component.scss +0 -35
  70. package/src/lib/components/atoms/file-selection/file-selection.component.ts +0 -86
  71. package/src/lib/components/atoms/input/input.component.html +0 -28
  72. package/src/lib/components/atoms/input/input.component.scss +0 -64
  73. package/src/lib/components/atoms/input/input.component.ts +0 -57
  74. package/src/lib/components/atoms/loading/loading.component.html +0 -3
  75. package/src/lib/components/atoms/loading/loading.component.scss +0 -36
  76. package/src/lib/components/atoms/loading/loading.component.ts +0 -21
  77. package/src/lib/components/atoms/selection/selection.component.html +0 -38
  78. package/src/lib/components/atoms/selection/selection.component.scss +0 -65
  79. package/src/lib/components/atoms/selection/selection.component.ts +0 -84
  80. package/src/lib/components/atoms/slider/slider.component.html +0 -14
  81. package/src/lib/components/atoms/slider/slider.component.scss +0 -50
  82. package/src/lib/components/atoms/slider/slider.component.ts +0 -37
  83. package/src/lib/components/atoms/tags/tags.component.html +0 -25
  84. package/src/lib/components/atoms/tags/tags.component.scss +0 -58
  85. package/src/lib/components/atoms/tags/tags.component.ts +0 -62
  86. package/src/lib/components/molecules/cards/cards.component.html +0 -12
  87. package/src/lib/components/molecules/cards/cards.component.scss +0 -14
  88. package/src/lib/components/molecules/cards/cards.component.ts +0 -19
  89. package/src/lib/components/molecules/content-design/content-design.component.html +0 -14
  90. package/src/lib/components/molecules/content-design/content-design.component.scss +0 -68
  91. package/src/lib/components/molecules/content-design/content-design.component.ts +0 -32
  92. package/src/lib/components/molecules/form/form.component.html +0 -22
  93. package/src/lib/components/molecules/form/form.component.scss +0 -17
  94. package/src/lib/components/molecules/form/form.component.ts +0 -64
  95. package/src/lib/components/molecules/modal/modal.component.html +0 -16
  96. package/src/lib/components/molecules/modal/modal.component.scss +0 -83
  97. package/src/lib/components/molecules/modal/modal.component.ts +0 -48
  98. package/src/lib/components/molecules/paginator/paginator.component.html +0 -25
  99. package/src/lib/components/molecules/paginator/paginator.component.scss +0 -27
  100. package/src/lib/components/molecules/paginator/paginator.component.ts +0 -126
  101. package/src/lib/components/molecules/table/table.component.html +0 -45
  102. package/src/lib/components/molecules/table/table.component.scss +0 -169
  103. package/src/lib/components/molecules/table/table.component.ts +0 -40
  104. package/src/lib/components/pages/footer/footer.component.html +0 -32
  105. package/src/lib/components/pages/footer/footer.component.scss +0 -69
  106. package/src/lib/components/pages/footer/footer.component.ts +0 -16
  107. package/src/lib/components/pages/login/login.component.html +0 -10
  108. package/src/lib/components/pages/login/login.component.scss +0 -32
  109. package/src/lib/components/pages/login/login.component.ts +0 -32
  110. package/src/lib/components/pages/menu/menu.component.html +0 -18
  111. package/src/lib/components/pages/menu/menu.component.scss +0 -87
  112. package/src/lib/components/pages/menu/menu.component.ts +0 -26
  113. package/src/lib/components/pages/version/version.component.html +0 -3
  114. package/src/lib/components/pages/version/version.component.scss +0 -0
  115. package/src/lib/components/pages/version/version.component.ts +0 -28
  116. package/src/lib/shared/constants/constant.ts +0 -7
  117. package/src/lib/shared/enums/enum.ts +0 -68
  118. package/src/lib/shared/interfaces/interface.ts +0 -64
  119. package/src/public-api.ts +0 -10
  120. package/tsconfig.lib.json +0 -14
  121. package/tsconfig.lib.prod.json +0 -10
  122. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,915 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, Component, NgModule, EventEmitter, Input, Output, forwardRef, ContentChild, ViewContainerRef, ViewChild } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i2 from '@angular/forms';
6
+ import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
7
+ import * as i2$1 from 'primeng/table';
8
+ import { TableModule } from 'primeng/table';
9
+ import * as i3 from 'primeng/api';
10
+
11
+ class AngularDumbLibService {
12
+ constructor() { }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularDumbLibService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularDumbLibService, providedIn: 'root' }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularDumbLibService, decorators: [{
17
+ type: Injectable,
18
+ args: [{
19
+ providedIn: 'root'
20
+ }]
21
+ }], ctorParameters: function () { return []; } });
22
+
23
+ class AngularDumbLibComponent {
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularDumbLibComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AngularDumbLibComponent, selector: "lib-angular-dumb-lib", ngImport: i0, template: `
26
+ <p>
27
+ angular-dumb-lib works!
28
+ </p>
29
+ `, isInline: true }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularDumbLibComponent, decorators: [{
32
+ type: Component,
33
+ args: [{ selector: 'lib-angular-dumb-lib', template: `
34
+ <p>
35
+ angular-dumb-lib works!
36
+ </p>
37
+ ` }]
38
+ }] });
39
+
40
+ class AngularDumbLibModule {
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularDumbLibModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
42
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AngularDumbLibModule, declarations: [AngularDumbLibComponent], exports: [AngularDumbLibComponent] }); }
43
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularDumbLibModule }); }
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularDumbLibModule, decorators: [{
46
+ type: NgModule,
47
+ args: [{
48
+ declarations: [
49
+ AngularDumbLibComponent,
50
+ ],
51
+ imports: [],
52
+ exports: [
53
+ AngularDumbLibComponent,
54
+ ]
55
+ }]
56
+ }] });
57
+
58
+ var DesignType;
59
+ (function (DesignType) {
60
+ DesignType["normal"] = "normal";
61
+ DesignType["contrast"] = "contrast";
62
+ })(DesignType || (DesignType = {}));
63
+ var ButtonType;
64
+ (function (ButtonType) {
65
+ ButtonType["submit"] = "submit";
66
+ ButtonType["button"] = "button";
67
+ })(ButtonType || (ButtonType = {}));
68
+ var InputGroupType;
69
+ (function (InputGroupType) {
70
+ InputGroupType["textual"] = "textual";
71
+ InputGroupType["datetime"] = "datetime";
72
+ InputGroupType["selection"] = "selection";
73
+ InputGroupType["file"] = "file";
74
+ })(InputGroupType || (InputGroupType = {}));
75
+ var InputDirection;
76
+ (function (InputDirection) {
77
+ InputDirection["horizontal"] = "horizontal";
78
+ InputDirection["vertical"] = "vertical";
79
+ })(InputDirection || (InputDirection = {}));
80
+ var InputType;
81
+ (function (InputType) {
82
+ InputType["image"] = "image";
83
+ InputType["text"] = "text";
84
+ InputType["richText"] = "richText";
85
+ InputType["password"] = "password";
86
+ InputType["email"] = "email";
87
+ InputType["url"] = "url";
88
+ InputType["tel"] = "tel";
89
+ InputType["search"] = "search";
90
+ InputType["number"] = "number";
91
+ InputType["range"] = "range";
92
+ InputType["hidden"] = "hidden";
93
+ InputType["textarea"] = "textarea";
94
+ InputType["datetime"] = "datetime";
95
+ InputType["checkbox"] = "checkbox";
96
+ InputType["radio"] = "radio";
97
+ InputType["select"] = "select";
98
+ InputType["file"] = "file";
99
+ })(InputType || (InputType = {}));
100
+ var ContentDirection;
101
+ (function (ContentDirection) {
102
+ ContentDirection["left"] = "left";
103
+ ContentDirection["right"] = "right";
104
+ ContentDirection["up"] = "up";
105
+ ContentDirection["down"] = "down";
106
+ })(ContentDirection || (ContentDirection = {}));
107
+ var SelectionType;
108
+ (function (SelectionType) {
109
+ SelectionType["dropdown"] = "dropdown";
110
+ SelectionType["radio"] = "radio";
111
+ SelectionType["checkbox"] = "checkbox";
112
+ })(SelectionType || (SelectionType = {}));
113
+ var LoadingSize;
114
+ (function (LoadingSize) {
115
+ LoadingSize["Xbig"] = "xbig";
116
+ LoadingSize["Big"] = "big";
117
+ LoadingSize["Medium"] = "medium";
118
+ LoadingSize["Small"] = "small";
119
+ LoadingSize["Xsmall"] = "xsmall";
120
+ })(LoadingSize || (LoadingSize = {}));
121
+ var MenuDirection;
122
+ (function (MenuDirection) {
123
+ MenuDirection["vertical"] = "vertical";
124
+ MenuDirection["horizontal"] = "horizontal";
125
+ })(MenuDirection || (MenuDirection = {}));
126
+
127
+ class ButtonComponent {
128
+ constructor() {
129
+ this.clickEvent = new EventEmitter();
130
+ }
131
+ ngOnInit() {
132
+ this.config = {
133
+ isDisabled: false,
134
+ isActive: false,
135
+ designType: DesignType.normal,
136
+ type: ButtonType.submit,
137
+ ...this.config,
138
+ };
139
+ }
140
+ onButtonClick() {
141
+ this.clickEvent.emit();
142
+ }
143
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
144
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ButtonComponent, isStandalone: true, selector: "app-button", inputs: { config: "config" }, outputs: { clickEvent: "clickEvent" }, ngImport: i0, template: "<button\n type=\"{{config.type}}\"\n class=\"btn btn-primary\"\n [disabled]=\"config.isDisabled\"\n [ngClass]=\"{'active': config.isActive,\n 'normal': config.designType === 'normal',\n 'contrast': config.designType === 'contrast'}\"\n (click)=\"onButtonClick()\">\n <div class=\"button-content\">\n <ng-container *ngIf=\"config.iconValue\">\n <i class=\"material-icons\" data-toggle=\"tooltip\" title=\"Delete\">{{config.iconValue}}</i>\n </ng-container>\n <span>{{ config.label }}</span>\n </div>\n</button>\n", styles: ["button.btn.btn-primary{padding:.5rem 1rem;border:none;border-radius:.25rem;cursor:pointer;height:3rem}button.btn.btn-primary .button-content{display:flex;flex-direction:row;justify-content:center;align-items:center;height:100%}button.btn.btn-primary:disabled{background-color:#ccc!important;color:#666!important;cursor:not-allowed!important;border-color:#666!important}button.btn.btn-primary.normal{background-color:#007bff;color:#fff}button.btn.btn-primary.normal:hover:not(:disabled){background-color:#0056d2}button.btn.btn-primary.contrast{color:#007bff;border:1px solid #4A90E2}button.btn.btn-primary.contrast:hover:not(:disabled){background-color:#e6f0fa;color:#1a1a1a}button.btn.btn-primary.active{background-color:#003d99;color:#fff}button.btn.btn-primary.active:hover:not(:disabled){background-color:#0056d2;color:#fff}\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"] }] }); }
145
+ }
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ButtonComponent, decorators: [{
147
+ type: Component,
148
+ args: [{ selector: 'app-button', standalone: true, imports: [CommonModule], template: "<button\n type=\"{{config.type}}\"\n class=\"btn btn-primary\"\n [disabled]=\"config.isDisabled\"\n [ngClass]=\"{'active': config.isActive,\n 'normal': config.designType === 'normal',\n 'contrast': config.designType === 'contrast'}\"\n (click)=\"onButtonClick()\">\n <div class=\"button-content\">\n <ng-container *ngIf=\"config.iconValue\">\n <i class=\"material-icons\" data-toggle=\"tooltip\" title=\"Delete\">{{config.iconValue}}</i>\n </ng-container>\n <span>{{ config.label }}</span>\n </div>\n</button>\n", styles: ["button.btn.btn-primary{padding:.5rem 1rem;border:none;border-radius:.25rem;cursor:pointer;height:3rem}button.btn.btn-primary .button-content{display:flex;flex-direction:row;justify-content:center;align-items:center;height:100%}button.btn.btn-primary:disabled{background-color:#ccc!important;color:#666!important;cursor:not-allowed!important;border-color:#666!important}button.btn.btn-primary.normal{background-color:#007bff;color:#fff}button.btn.btn-primary.normal:hover:not(:disabled){background-color:#0056d2}button.btn.btn-primary.contrast{color:#007bff;border:1px solid #4A90E2}button.btn.btn-primary.contrast:hover:not(:disabled){background-color:#e6f0fa;color:#1a1a1a}button.btn.btn-primary.active{background-color:#003d99;color:#fff}button.btn.btn-primary.active:hover:not(:disabled){background-color:#0056d2;color:#fff}\n"] }]
149
+ }], ctorParameters: function () { return []; }, propDecorators: { config: [{
150
+ type: Input
151
+ }], clickEvent: [{
152
+ type: Output
153
+ }] } });
154
+
155
+ class DatetimePickerComponent {
156
+ constructor() {
157
+ this.selectedDate = null;
158
+ this.selectedTime = null;
159
+ this.onChange = () => { };
160
+ this.onTouched = () => { };
161
+ }
162
+ writeValue(value) {
163
+ if (value) {
164
+ const date = new Date(value);
165
+ this.selectedDate = date.toISOString().split('T')[0]; // Extract the date part (YYYY-MM-DD)
166
+ this.selectedTime = date.toTimeString().split(' ')[0]; // Extract the time part (HH:mm:ss)
167
+ }
168
+ }
169
+ registerOnChange(fn) {
170
+ this.onChange = fn;
171
+ }
172
+ registerOnTouched(fn) {
173
+ this.onTouched = fn;
174
+ }
175
+ setDisabledState(isDisabled) {
176
+ // Handle disabled state
177
+ }
178
+ onDateChange(event) {
179
+ this.selectedDate = event.target.value;
180
+ this.emitChange();
181
+ }
182
+ onTimeChange(event) {
183
+ this.selectedTime = event.target.value;
184
+ this.emitChange();
185
+ }
186
+ emitChange() {
187
+ if (this.selectedDate && this.selectedTime) {
188
+ const dateTime = `${this.selectedDate}T${this.selectedTime}`;
189
+ this.onChange(new Date(dateTime));
190
+ }
191
+ }
192
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatetimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
193
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DatetimePickerComponent, isStandalone: true, selector: "app-datetime-picker", providers: [{
194
+ provide: NG_VALUE_ACCESSOR,
195
+ useExisting: forwardRef(() => DatetimePickerComponent),
196
+ multi: true
197
+ }], ngImport: i0, template: "<div class=\"datetime-picker-container\">\n <label for=\"date\">Datetime:</label>\n <div class=\"inputs-container\">\n <input id=\"date\" type=\"date\" [(ngModel)]=\"selectedDate\" (ngModelChange)=\"onDateChange($event)\" (blur)=\"onTouched()\">\n <input id=\"time\" type=\"time\" [(ngModel)]=\"selectedTime\" (ngModelChange)=\"onTimeChange($event)\" (blur)=\"onTouched()\">\n </div>\n</div>\n", styles: [".datetime-picker-container{display:flex;flex-direction:column;margin-bottom:1rem}.datetime-picker-container label{margin-bottom:.5rem;font-weight:700}.inputs-container{display:flex;gap:1rem}.inputs-container input[type=date],.inputs-container input[type=time]{padding:.5rem;font-size:1rem;border:1px solid #ccc;border-radius:4px;width:150px}\n"], dependencies: [{ 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"] }] }); }
198
+ }
199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatetimePickerComponent, decorators: [{
200
+ type: Component,
201
+ args: [{ selector: 'app-datetime-picker', standalone: true, providers: [{
202
+ provide: NG_VALUE_ACCESSOR,
203
+ useExisting: forwardRef(() => DatetimePickerComponent),
204
+ multi: true
205
+ }], imports: [FormsModule], template: "<div class=\"datetime-picker-container\">\n <label for=\"date\">Datetime:</label>\n <div class=\"inputs-container\">\n <input id=\"date\" type=\"date\" [(ngModel)]=\"selectedDate\" (ngModelChange)=\"onDateChange($event)\" (blur)=\"onTouched()\">\n <input id=\"time\" type=\"time\" [(ngModel)]=\"selectedTime\" (ngModelChange)=\"onTimeChange($event)\" (blur)=\"onTouched()\">\n </div>\n</div>\n", styles: [".datetime-picker-container{display:flex;flex-direction:column;margin-bottom:1rem}.datetime-picker-container label{margin-bottom:.5rem;font-weight:700}.inputs-container{display:flex;gap:1rem}.inputs-container input[type=date],.inputs-container input[type=time]{padding:.5rem;font-size:1rem;border:1px solid #ccc;border-radius:4px;width:150px}\n"] }]
206
+ }] });
207
+
208
+ class FileSelectionComponent {
209
+ constructor() {
210
+ this.imageUrl = null; // Allow imageUrl to be passed externally
211
+ this.fileName = null; // Allow fileName to be passed externally
212
+ this.onChange = () => { };
213
+ this.onTouched = () => { };
214
+ this._value = undefined;
215
+ }
216
+ get value() {
217
+ return this._value;
218
+ }
219
+ set value(value) {
220
+ this._value = value;
221
+ this.onChange(this._value);
222
+ this.onTouched();
223
+ }
224
+ ngOnInit() {
225
+ this.config = {
226
+ type: ButtonType.button,
227
+ label: this.chooseFileLabel
228
+ };
229
+ }
230
+ onFileSelected(event) {
231
+ const input = event.target;
232
+ if (input.files && input.files.length > 0) {
233
+ const file = input.files[0];
234
+ // Store the file name to display it in the UI
235
+ this.fileName = file.name;
236
+ this.value = file;
237
+ // Generate image preview URL if it's an image
238
+ const reader = new FileReader();
239
+ reader.onload = (e) => {
240
+ this.imageUrl = e.target.result; // Set image URL for preview
241
+ };
242
+ reader.readAsDataURL(file);
243
+ }
244
+ }
245
+ triggerFileInput() {
246
+ const fileInput = document.getElementById('fileInput');
247
+ fileInput.click(); // Programmatically click the hidden file input
248
+ }
249
+ writeValue(value) {
250
+ this._value = value;
251
+ }
252
+ registerOnChange(fn) {
253
+ this.onChange = fn;
254
+ }
255
+ registerOnTouched(fn) {
256
+ this.onTouched = fn;
257
+ }
258
+ setDisabledState(isDisabled) {
259
+ // Implement if you need to handle disabled state
260
+ }
261
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FileSelectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
262
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FileSelectionComponent, isStandalone: true, selector: "app-file-selection", inputs: { label: "label", chooseFileLabel: "chooseFileLabel", imageUrl: "imageUrl", fileName: "fileName" }, providers: [{
263
+ provide: NG_VALUE_ACCESSOR,
264
+ useExisting: forwardRef(() => FileSelectionComponent),
265
+ multi: true
266
+ }], ngImport: i0, template: "<div class=\"file-selector\">\n <label *ngIf=\"label\">{{ label }}</label>\n <input\n id=\"fileInput\"\n type=\"file\"\n (change)=\"onFileSelected($event)\"\n accept=\"image/*\"\n class=\"hidden-file-input\">\n <div class=\"file-selection\">\n <!-- Custom button to trigger file input -->\n <app-button [config]=\"config\"\n class=\"custom-file-button\"\n (clickEvent)=\"triggerFileInput()\">\n Select Image\n </app-button>\n <div *ngIf=\"fileName\" class=\"file-name\">\n {{ fileName }}\n </div>\n </div>\n\n <div *ngIf=\"imageUrl\">\n <img [src]=\"imageUrl\" alt=\"Selected Image\" class=\"preview-image\"/>\n </div>\n</div>\n", styles: [".file-selector{display:flex;flex-direction:column;align-items:flex-start}.file-selector label{font-size:14px;color:#666;margin-bottom:8px;font-weight:700}.file-selector input[type=file]{margin-bottom:16px}.file-selector .preview-image{max-width:150px;max-height:150px;border:1px solid #ccc;margin-top:8px}.file-selector .hidden-file-input{opacity:0;position:absolute;z-index:-1}.file-selector .file-selection{display:flex;align-items:center;gap:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "app-button", inputs: ["config"], outputs: ["clickEvent"] }] }); }
267
+ }
268
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FileSelectionComponent, decorators: [{
269
+ type: Component,
270
+ args: [{ selector: 'app-file-selection', standalone: true, providers: [{
271
+ provide: NG_VALUE_ACCESSOR,
272
+ useExisting: forwardRef(() => FileSelectionComponent),
273
+ multi: true
274
+ }], imports: [CommonModule, ButtonComponent], template: "<div class=\"file-selector\">\n <label *ngIf=\"label\">{{ label }}</label>\n <input\n id=\"fileInput\"\n type=\"file\"\n (change)=\"onFileSelected($event)\"\n accept=\"image/*\"\n class=\"hidden-file-input\">\n <div class=\"file-selection\">\n <!-- Custom button to trigger file input -->\n <app-button [config]=\"config\"\n class=\"custom-file-button\"\n (clickEvent)=\"triggerFileInput()\">\n Select Image\n </app-button>\n <div *ngIf=\"fileName\" class=\"file-name\">\n {{ fileName }}\n </div>\n </div>\n\n <div *ngIf=\"imageUrl\">\n <img [src]=\"imageUrl\" alt=\"Selected Image\" class=\"preview-image\"/>\n </div>\n</div>\n", styles: [".file-selector{display:flex;flex-direction:column;align-items:flex-start}.file-selector label{font-size:14px;color:#666;margin-bottom:8px;font-weight:700}.file-selector input[type=file]{margin-bottom:16px}.file-selector .preview-image{max-width:150px;max-height:150px;border:1px solid #ccc;margin-top:8px}.file-selector .hidden-file-input{opacity:0;position:absolute;z-index:-1}.file-selector .file-selection{display:flex;align-items:center;gap:10px}\n"] }]
275
+ }], propDecorators: { label: [{
276
+ type: Input
277
+ }], chooseFileLabel: [{
278
+ type: Input
279
+ }], imageUrl: [{
280
+ type: Input
281
+ }], fileName: [{
282
+ type: Input
283
+ }] } });
284
+
285
+ class InputComponent {
286
+ get value() {
287
+ return this._value;
288
+ }
289
+ set value(value) {
290
+ this._value = value;
291
+ this.onChange(this._value);
292
+ this.onTouched();
293
+ }
294
+ constructor() {
295
+ this._value = '';
296
+ this.onChange = () => { };
297
+ this.onTouched = () => { };
298
+ }
299
+ writeValue(value) {
300
+ this._value = value;
301
+ }
302
+ registerOnChange(fn) {
303
+ this.onChange = fn;
304
+ }
305
+ registerOnTouched(fn) {
306
+ this.onTouched = fn;
307
+ }
308
+ ngOnInit() {
309
+ this.config = {
310
+ type: InputType.text,
311
+ direction: InputDirection.vertical,
312
+ isValid: true,
313
+ ...this.config,
314
+ };
315
+ }
316
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
317
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: InputComponent, isStandalone: true, selector: "app-input", inputs: { config: "config" }, providers: [{
318
+ provide: NG_VALUE_ACCESSOR,
319
+ useExisting: forwardRef(() => InputComponent),
320
+ multi: true
321
+ }], ngImport: i0, template: "<div class=\"input-item\" [ngClass]=\"config.direction\">\n <label *ngIf=\"config.label\">\n {{ config.label }}\n <span *ngIf=\"config.required\" class=\"required-indicator\">*</span>\n </label>\n\n <div class=\"input-container\">\n <input *ngIf=\"config.type !== 'textarea' && config.type !== 'richText' && config.type !== 'image'\"\n [type]=\"config.type\"\n [name]=\"config.name\"\n [required]=\"config.required\"\n [(ngModel)]=\"value\"\n [placeholder] = \"config.placeholder\"\n [ngClass]=\"{'input-error': !config.isValid}\">\n <textarea *ngIf=\"config.type === 'textarea'\"\n [name]=\"config.name\"\n [required]=\"config.required\"\n [(ngModel)]=\"value\"\n [placeholder] = \"config.placeholder\"\n [ngClass]=\"{'input-error': !config.isValid}\">\n </textarea>\n <i *ngIf=\"!config.isValid\" class=\"material-icons warning-icon\">error</i>\n </div>\n\n <div *ngIf=\"config.type === 'image'\">\n <img *ngIf=\"value\" [src]=\"value\" alt=\"Selected Image\" class=\"preview-image\"/>\n </div>\n</div>\n", styles: [".input-item{display:flex;width:100%;gap:10px}.input-item .input-container{display:flex;width:inherit}.input-item .input-container .input-error{border-color:red}.input-item label{display:flex;align-items:center}.input-item.horizontal{flex-direction:row}.input-item.horizontal label{width:30%}.input-item.vertical{flex-direction:column}.input-item .preview-image{max-width:150px;max-height:150px;border:1px solid #ccc;margin-top:8px}.input-item .required-indicator,.input-item .warning-icon{display:flex;align-items:center;color:red;margin-left:4px}.input-item .warning-icon{font-weight:700}.input-item input,.input-item textarea{padding:.5rem;border:1px solid #ccc;border-radius:.25rem;width:-webkit-fill-available}.input-item quill-editor{width:100%}\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: "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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
322
+ }
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputComponent, decorators: [{
324
+ type: Component,
325
+ args: [{ selector: 'app-input', standalone: true, providers: [{
326
+ provide: NG_VALUE_ACCESSOR,
327
+ useExisting: forwardRef(() => InputComponent),
328
+ multi: true
329
+ }], imports: [CommonModule, FormsModule], template: "<div class=\"input-item\" [ngClass]=\"config.direction\">\n <label *ngIf=\"config.label\">\n {{ config.label }}\n <span *ngIf=\"config.required\" class=\"required-indicator\">*</span>\n </label>\n\n <div class=\"input-container\">\n <input *ngIf=\"config.type !== 'textarea' && config.type !== 'richText' && config.type !== 'image'\"\n [type]=\"config.type\"\n [name]=\"config.name\"\n [required]=\"config.required\"\n [(ngModel)]=\"value\"\n [placeholder] = \"config.placeholder\"\n [ngClass]=\"{'input-error': !config.isValid}\">\n <textarea *ngIf=\"config.type === 'textarea'\"\n [name]=\"config.name\"\n [required]=\"config.required\"\n [(ngModel)]=\"value\"\n [placeholder] = \"config.placeholder\"\n [ngClass]=\"{'input-error': !config.isValid}\">\n </textarea>\n <i *ngIf=\"!config.isValid\" class=\"material-icons warning-icon\">error</i>\n </div>\n\n <div *ngIf=\"config.type === 'image'\">\n <img *ngIf=\"value\" [src]=\"value\" alt=\"Selected Image\" class=\"preview-image\"/>\n </div>\n</div>\n", styles: [".input-item{display:flex;width:100%;gap:10px}.input-item .input-container{display:flex;width:inherit}.input-item .input-container .input-error{border-color:red}.input-item label{display:flex;align-items:center}.input-item.horizontal{flex-direction:row}.input-item.horizontal label{width:30%}.input-item.vertical{flex-direction:column}.input-item .preview-image{max-width:150px;max-height:150px;border:1px solid #ccc;margin-top:8px}.input-item .required-indicator,.input-item .warning-icon{display:flex;align-items:center;color:red;margin-left:4px}.input-item .warning-icon{font-weight:700}.input-item input,.input-item textarea{padding:.5rem;border:1px solid #ccc;border-radius:.25rem;width:-webkit-fill-available}.input-item quill-editor{width:100%}\n"] }]
330
+ }], ctorParameters: function () { return []; }, propDecorators: { config: [{
331
+ type: Input
332
+ }] } });
333
+
334
+ class LoadingComponent {
335
+ constructor() {
336
+ this.size = LoadingSize.Medium;
337
+ this.imageSrc = '';
338
+ }
339
+ ngOnInit() {
340
+ }
341
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
342
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LoadingComponent, isStandalone: true, selector: "app-loading", inputs: { size: "size", imageSrc: "imageSrc" }, ngImport: i0, template: "<div [ngClass]=\"size\" class=\"loading-content\">\n <img [src]=\"imageSrc\" />\n</div>\n", styles: [":host{width:100%;height:100%;display:table;text-align:center}.loading-content{display:table-cell;vertical-align:middle}.xbig img{width:256px;height:256px}.big img{width:128px;height:128px}.medium img{width:64px;height:64px}.small img{width:32px;height:32px}.xsmall img{width:16px;height:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
343
+ }
344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoadingComponent, decorators: [{
345
+ type: Component,
346
+ args: [{ selector: 'app-loading', standalone: true, imports: [CommonModule], template: "<div [ngClass]=\"size\" class=\"loading-content\">\n <img [src]=\"imageSrc\" />\n</div>\n", styles: [":host{width:100%;height:100%;display:table;text-align:center}.loading-content{display:table-cell;vertical-align:middle}.xbig img{width:256px;height:256px}.big img{width:128px;height:128px}.medium img{width:64px;height:64px}.small img{width:32px;height:32px}.xsmall img{width:16px;height:16px}\n"] }]
347
+ }], ctorParameters: function () { return []; }, propDecorators: { size: [{
348
+ type: Input
349
+ }], imageSrc: [{
350
+ type: Input
351
+ }] } });
352
+
353
+ class SelectionComponent {
354
+ constructor() {
355
+ this.label = ''; // Label for the dropdown
356
+ this.options = []; // Array of options
357
+ this.selectedValues = []; // Pre-selected values (multi-selection)
358
+ this.isMultiSelect = false; // Enable multi-selection for dropdown
359
+ this.displayType = SelectionType.dropdown; // Control the display type (dropdown, radio, or checkbox)
360
+ this.selectedChange = new EventEmitter(); // Event emitter for value changes
361
+ this.onChange = () => { };
362
+ this.onTouched = () => { };
363
+ }
364
+ get value() {
365
+ return this.selectedValue;
366
+ }
367
+ set value(value) {
368
+ this.selectedValue = (this.isMultiSelect === false && Array.isArray(value)) ? value[0] : value;
369
+ this.onChange(this.selectedValue);
370
+ this.onTouched();
371
+ }
372
+ ngOnInit() {
373
+ if (this.options && this.options.length > 0 && !this.isMultiSelect) {
374
+ this.selectedValue = this.options[0].value;
375
+ this.onChange(this.selectedValue);
376
+ }
377
+ }
378
+ onSelectChange(event) {
379
+ this.selectedChange.emit(this.selectedValue);
380
+ }
381
+ onMultiSelectChange(event) {
382
+ const target = event.target;
383
+ const value = target.value;
384
+ if (target.checked) {
385
+ this.selectedValues.push(value);
386
+ }
387
+ else {
388
+ this.selectedValues = this.selectedValues.filter(v => v !== value);
389
+ }
390
+ this.selectedChange.emit(this.selectedValues);
391
+ }
392
+ isSelected(value) {
393
+ return this.isMultiSelect ? this.selectedValues.includes(value) : value === this.selectedValue;
394
+ }
395
+ writeValue(value) {
396
+ this.selectedValue = value;
397
+ }
398
+ registerOnChange(fn) {
399
+ this.onChange = fn;
400
+ }
401
+ registerOnTouched(fn) {
402
+ this.onTouched = fn;
403
+ }
404
+ setDisabledState(isDisabled) {
405
+ // Implement if you need to handle disabled state
406
+ }
407
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
408
+ 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: [{
409
+ provide: NG_VALUE_ACCESSOR,
410
+ useExisting: forwardRef(() => SelectionComponent),
411
+ multi: true
412
+ }], 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"] }] }); }
413
+ }
414
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectionComponent, decorators: [{
415
+ type: Component,
416
+ args: [{ selector: 'app-selection', standalone: true, providers: [{
417
+ provide: NG_VALUE_ACCESSOR,
418
+ useExisting: forwardRef(() => SelectionComponent),
419
+ multi: true
420
+ }], 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"] }]
421
+ }], propDecorators: { label: [{
422
+ type: Input
423
+ }], options: [{
424
+ type: Input
425
+ }], selectedValue: [{
426
+ type: Input
427
+ }], selectedValues: [{
428
+ type: Input
429
+ }], isMultiSelect: [{
430
+ type: Input
431
+ }], displayType: [{
432
+ type: Input
433
+ }], selectedChange: [{
434
+ type: Output
435
+ }] } });
436
+
437
+ class SliderComponent {
438
+ constructor() {
439
+ this.images = [];
440
+ this.autoSlide = false;
441
+ this.slideInterval = 3000; // Time interval for auto slide
442
+ this.currentIndex = 0;
443
+ }
444
+ ngOnInit() {
445
+ if (this.autoSlide) {
446
+ this.startAutoSlide();
447
+ }
448
+ }
449
+ startAutoSlide() {
450
+ setInterval(() => {
451
+ this.nextSlide();
452
+ }, this.slideInterval);
453
+ }
454
+ prevSlide() {
455
+ this.currentIndex = this.currentIndex === 0 ? this.images.length - 1 : this.currentIndex - 1;
456
+ }
457
+ nextSlide() {
458
+ this.currentIndex = this.currentIndex === this.images.length - 1 ? 0 : this.currentIndex + 1;
459
+ }
460
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
461
+ 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"] }] }); }
462
+ }
463
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SliderComponent, decorators: [{
464
+ type: Component,
465
+ 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"] }]
466
+ }], propDecorators: { images: [{
467
+ type: Input
468
+ }], autoSlide: [{
469
+ type: Input
470
+ }], slideInterval: [{
471
+ type: Input
472
+ }] } });
473
+
474
+ class TagsComponent {
475
+ constructor() {
476
+ this.availableTags = ['abc', 'dce'];
477
+ this.filteredTags = [];
478
+ this.selectedTags = [];
479
+ this.searchText = '';
480
+ this.onChange = () => { };
481
+ this.onTouched = () => { };
482
+ }
483
+ ngOnInit() {
484
+ this.filteredTags = this.availableTags; // Initialize the filtered tags list
485
+ }
486
+ writeValue(value) {
487
+ if (value) {
488
+ this.selectedTags = value;
489
+ }
490
+ }
491
+ registerOnChange(fn) {
492
+ this.onChange = fn;
493
+ }
494
+ registerOnTouched(fn) {
495
+ this.onTouched = fn;
496
+ }
497
+ onTagSelectionChange(tag) {
498
+ if (!this.selectedTags.includes(tag)) {
499
+ this.selectedTags = [...this.selectedTags, tag]; // Add the tag
500
+ this.onChange(this.selectedTags);
501
+ }
502
+ }
503
+ removeTag(tag) {
504
+ this.selectedTags = this.selectedTags.filter(t => t !== tag); // Remove the tag
505
+ this.onChange(this.selectedTags);
506
+ }
507
+ filterTags() {
508
+ this.filteredTags = this.availableTags.filter(tag => tag.toLowerCase().includes(this.searchText.toLowerCase()) &&
509
+ !this.selectedTags.includes(tag));
510
+ }
511
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TagsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
512
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TagsComponent, isStandalone: true, selector: "app-tags", inputs: { availableTags: "availableTags" }, providers: [{
513
+ provide: NG_VALUE_ACCESSOR,
514
+ useExisting: forwardRef(() => TagsComponent),
515
+ multi: true
516
+ }], 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"] }] }); }
517
+ }
518
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TagsComponent, decorators: [{
519
+ type: Component,
520
+ args: [{ selector: 'app-tags', standalone: true, providers: [{
521
+ provide: NG_VALUE_ACCESSOR,
522
+ useExisting: forwardRef(() => TagsComponent),
523
+ multi: true
524
+ }], 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"] }]
525
+ }], propDecorators: { availableTags: [{
526
+ type: Input
527
+ }] } });
528
+
529
+ class ContentDesignComponent {
530
+ constructor() {
531
+ this.clickEvent = new EventEmitter();
532
+ }
533
+ ngOnInit() {
534
+ this.content = {
535
+ contentDirection: ContentDirection.left,
536
+ ...this.content,
537
+ };
538
+ }
539
+ onButtonClick() {
540
+ this.clickEvent.emit();
541
+ }
542
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentDesignComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
543
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContentDesignComponent, isStandalone: true, selector: "app-content-design", inputs: { content: "content" }, outputs: { clickEvent: "clickEvent" }, ngImport: i0, template: "<div class=\"content-designer\" [ngClass]=\"content.contentDirection\">\n <div *ngIf=\"content.coverImage\" class=\"image\">\n <img [src]=\"content.coverImage\" alt=\"Cover Image\">\n </div>\n\n <div class=\"content\">\n <h2>{{ content.title }}</h2>\n <p>{{ content.content }}</p>\n <ng-container [ngTemplateOutlet]=\"content.template\"></ng-container>\n <app-button *ngIf=\"content.button\" [config] = \"content.button\"\n (clickEvent)=\"onButtonClick()\">\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 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%;padding:0 20px}.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%;justify-content:center}.content-designer.up{flex-direction:column-reverse}\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"] }] }); }
544
+ }
545
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentDesignComponent, decorators: [{
546
+ type: Component,
547
+ args: [{ selector: 'app-content-design', standalone: true, imports: [CommonModule, ButtonComponent], template: "<div class=\"content-designer\" [ngClass]=\"content.contentDirection\">\n <div *ngIf=\"content.coverImage\" class=\"image\">\n <img [src]=\"content.coverImage\" alt=\"Cover Image\">\n </div>\n\n <div class=\"content\">\n <h2>{{ content.title }}</h2>\n <p>{{ content.content }}</p>\n <ng-container [ngTemplateOutlet]=\"content.template\"></ng-container>\n <app-button *ngIf=\"content.button\" [config] = \"content.button\"\n (clickEvent)=\"onButtonClick()\">\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 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%;padding:0 20px}.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%;justify-content:center}.content-designer.up{flex-direction:column-reverse}\n"] }]
548
+ }], ctorParameters: function () { return []; }, propDecorators: { content: [{
549
+ type: Input
550
+ }], clickEvent: [{
551
+ type: Output
552
+ }] } });
553
+
554
+ class CardsComponent {
555
+ constructor() {
556
+ this.cardContents = [];
557
+ }
558
+ ngOnInit() {
559
+ }
560
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CardsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
561
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CardsComponent, isStandalone: true, selector: "app-cards", inputs: { cardContents: "cardContents" }, 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\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}.content{width:33%}.card ::ng-deep .content{padding:0 20px}\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"], outputs: ["clickEvent"] }] }); }
562
+ }
563
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CardsComponent, decorators: [{
564
+ type: Component,
565
+ 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\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}.content{width:33%}.card ::ng-deep .content{padding:0 20px}\n"] }]
566
+ }], ctorParameters: function () { return []; }, propDecorators: { cardContents: [{
567
+ type: Input
568
+ }] } });
569
+
570
+ const textualInputTypes = [InputType.text, InputType.password, InputType.email, InputType.url,
571
+ InputType.tel, InputType.search, InputType.number, InputType.range,
572
+ InputType.hidden, InputType.textarea, InputType.richText, InputType.image];
573
+ const selectionInputTypes = [InputType.checkbox, InputType.radio, InputType.select];
574
+
575
+ class FormComponent {
576
+ constructor() {
577
+ this.buttonConfig = {
578
+ label: "Submit"
579
+ };
580
+ this.formSubmit = new EventEmitter();
581
+ this.formChange = new EventEmitter();
582
+ }
583
+ // Define the editor configuration
584
+ onSubmit() {
585
+ if (this.formGroup.valid) {
586
+ this.formSubmit.emit(this.formGroup.value);
587
+ }
588
+ else {
589
+ console.log('Form not valid');
590
+ }
591
+ }
592
+ onValueChange(controlName, value) {
593
+ this.formChange.emit({ controlName, value });
594
+ }
595
+ checkFormConfigType(inputType) {
596
+ if (inputType) {
597
+ if (textualInputTypes.includes(inputType)) {
598
+ return InputGroupType.textual;
599
+ }
600
+ if (selectionInputTypes.includes(inputType)) {
601
+ return InputGroupType.selection;
602
+ }
603
+ if (inputType === InputType.file) {
604
+ return InputGroupType.file;
605
+ }
606
+ if (inputType === InputType.datetime) {
607
+ return InputGroupType.datetime;
608
+ }
609
+ }
610
+ return InputGroupType.textual;
611
+ }
612
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
613
+ 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()\" #form=\"ngForm\" [formGroup]=\"formGroup\">\n <ng-container *ngFor=\"let inputConfig of inputConfigs\">\n <app-input *ngIf=\"checkFormConfigType(inputConfig.type) === 'textual'\"\n [formControlName]=\"inputConfig.name\"\n [config]=\"inputConfig\"\n [required]=\"inputConfig.required\"></app-input>\n\n <app-selection *ngIf=\"checkFormConfigType(inputConfig.type) === 'selection'\"\n [formControlName]=\"inputConfig.name\"\n [label]=\"inputConfig.label?? ''\"\n [options]= \"inputConfig.options\">\n </app-selection>\n\n <app-file-selection\n [formControlName]=\"inputConfig.name\"\n *ngIf=\"checkFormConfigType(inputConfig.type) === 'file'\"\n [label]=\"inputConfig.name \">\n </app-file-selection>\n </ng-container>\n\n <app-button [config]=\"buttonConfig\"></app-button>\n</form>\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"] }] }); }
614
+ }
615
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormComponent, decorators: [{
616
+ type: Component,
617
+ args: [{ selector: 'app-form', standalone: true, imports: [CommonModule, InputComponent, SelectionComponent,
618
+ FileSelectionComponent, ButtonComponent, FormsModule, ReactiveFormsModule], template: "<form (ngSubmit)=\"onSubmit()\" #form=\"ngForm\" [formGroup]=\"formGroup\">\n <ng-container *ngFor=\"let inputConfig of inputConfigs\">\n <app-input *ngIf=\"checkFormConfigType(inputConfig.type) === 'textual'\"\n [formControlName]=\"inputConfig.name\"\n [config]=\"inputConfig\"\n [required]=\"inputConfig.required\"></app-input>\n\n <app-selection *ngIf=\"checkFormConfigType(inputConfig.type) === 'selection'\"\n [formControlName]=\"inputConfig.name\"\n [label]=\"inputConfig.label?? ''\"\n [options]= \"inputConfig.options\">\n </app-selection>\n\n <app-file-selection\n [formControlName]=\"inputConfig.name\"\n *ngIf=\"checkFormConfigType(inputConfig.type) === 'file'\"\n [label]=\"inputConfig.name \">\n </app-file-selection>\n </ng-container>\n\n <app-button [config]=\"buttonConfig\"></app-button>\n</form>\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"] }]
619
+ }], propDecorators: { formGroup: [{
620
+ type: Input
621
+ }], inputConfigs: [{
622
+ type: Input
623
+ }], buttonConfig: [{
624
+ type: Input
625
+ }], validationMessages: [{
626
+ type: Input
627
+ }], formSubmit: [{
628
+ type: Output
629
+ }], formChange: [{
630
+ type: Output
631
+ }] } });
632
+
633
+ class ModalComponent {
634
+ constructor() {
635
+ this.okConfig = {
636
+ label: "Ok"
637
+ };
638
+ this.cancelConfig = {
639
+ label: "Cancel"
640
+ };
641
+ }
642
+ ngOnInit() {
643
+ }
644
+ closeModal() {
645
+ this.modalEvent.isModalVisible = false;
646
+ }
647
+ handleOverlayClick(event) {
648
+ this.closeModal();
649
+ }
650
+ handleContentClick(event) {
651
+ event.stopPropagation();
652
+ }
653
+ ok() {
654
+ if (this.modalEvent && this.modalEvent.onOk) {
655
+ this.modalEvent.onOk();
656
+ this.closeModal();
657
+ }
658
+ }
659
+ cancel() {
660
+ this.closeModal();
661
+ }
662
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
663
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ModalComponent, isStandalone: true, selector: "app-modal", inputs: { modalEvent: "modalEvent" }, ngImport: i0, template: "<div class=\"modal-overlay\" (click)=\"handleOverlayClick($event)\" *ngIf=\"modalEvent?.isModalVisible\">\n <div class=\"modal-content\" (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 *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", styles: [".modal-overlay{display:flex;align-items:center;justify-content:center;position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;z-index:50}.modal-content{display:flex;flex-direction:column;gap:20px;background-color:#fff;color:#000;border-radius:.5rem;padding:2rem;max-width:600px;width:100%;max-height:calc(100vh - 7rem);overflow-y:auto}.modal-content.dark-mode{background-color:#27272a;color:#d1d5db}.modal-content .modal-header{display:flex;flex-direction:row;justify-content:space-between}h2{font-size:2rem;font-weight:700;margin:unset}p{color:#4b5563;margin-bottom:1.5rem}p.dark-mode{color:#d1d5db}.modal-actions{display:flex;justify-content:flex-end}.close-btn{background-color:transparent;border:none;font-size:1.5rem;cursor:pointer;padding:0;display:flex;align-items:center}.close-btn i.material-icons{font-size:24px;color:#888}.close-btn:hover i.material-icons{color:#444}.buttons{display:flex;flex-direction:row;justify-content:end;gap:15px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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"] }] }); }
664
+ }
665
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ModalComponent, decorators: [{
666
+ type: Component,
667
+ 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\" (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 *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", styles: [".modal-overlay{display:flex;align-items:center;justify-content:center;position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;z-index:50}.modal-content{display:flex;flex-direction:column;gap:20px;background-color:#fff;color:#000;border-radius:.5rem;padding:2rem;max-width:600px;width:100%;max-height:calc(100vh - 7rem);overflow-y:auto}.modal-content.dark-mode{background-color:#27272a;color:#d1d5db}.modal-content .modal-header{display:flex;flex-direction:row;justify-content:space-between}h2{font-size:2rem;font-weight:700;margin:unset}p{color:#4b5563;margin-bottom:1.5rem}p.dark-mode{color:#d1d5db}.modal-actions{display:flex;justify-content:flex-end}.close-btn{background-color:transparent;border:none;font-size:1.5rem;cursor:pointer;padding:0;display:flex;align-items:center}.close-btn i.material-icons{font-size:24px;color:#888}.close-btn:hover i.material-icons{color:#444}.buttons{display:flex;flex-direction:row;justify-content:end;gap:15px}\n"] }]
668
+ }], ctorParameters: function () { return []; }, propDecorators: { modalEvent: [{
669
+ type: Input
670
+ }] } });
671
+
672
+ class PaginatorComponent {
673
+ constructor() {
674
+ this.itemsPerPageList = [];
675
+ this.inputConfig = {
676
+ label: 'Go to page',
677
+ direction: InputDirection.horizontal,
678
+ name: 'inputConfig',
679
+ required: false
680
+ };
681
+ this.previousButtonConfig = {
682
+ iconValue: 'chevron_left',
683
+ type: ButtonType.button,
684
+ isDisabled: true
685
+ };
686
+ this.nextButtonConfig = {
687
+ iconValue: 'chevron_right',
688
+ type: ButtonType.button,
689
+ isDisabled: false
690
+ };
691
+ this.numberOfPage = 0;
692
+ this.itemsPerPage = 0;
693
+ this.selectedPage = 0;
694
+ this.totalRecords = 0;
695
+ this.paginator = new EventEmitter();
696
+ }
697
+ get pageNumbers() {
698
+ return Array.from({ length: this.numberOfPage }, (_, i) => i + 1);
699
+ }
700
+ ngOnInit() {
701
+ this.itemsPerPageList = [
702
+ {
703
+ label: "3",
704
+ value: 1
705
+ },
706
+ {
707
+ label: "5",
708
+ value: 2
709
+ },
710
+ {
711
+ label: "20",
712
+ value: 3
713
+ }
714
+ ];
715
+ this.selectedPage = 1;
716
+ this.buttonType = ButtonType.button;
717
+ this.inputDirection = InputDirection.horizontal;
718
+ this.itemsPerPage = parseInt(this.itemsPerPageList[0].label);
719
+ this.calculateNumberOfPage(this.totalRecords, this.itemsPerPage);
720
+ this.updateButtonConfigs();
721
+ this.emitPaging();
722
+ }
723
+ ngOnChanges() {
724
+ this.calculateNumberOfPage(this.totalRecords, this.itemsPerPage);
725
+ }
726
+ selectPage(i) {
727
+ this.selectedPage = i;
728
+ this.updateButtonConfigs();
729
+ this.emitPaging();
730
+ }
731
+ onChangeNumberOfPage(itemsPerPageId) {
732
+ this.selectedPage = 1;
733
+ this.itemsPerPage = parseInt(this.itemsPerPageList.find(i => i.value === parseInt(itemsPerPageId))?.label ??
734
+ this.itemsPerPage.toString());
735
+ this.calculateNumberOfPage(this.totalRecords, this.itemsPerPage);
736
+ this.updateButtonConfigs();
737
+ this.emitPaging();
738
+ }
739
+ emitPaging() {
740
+ let paging = {
741
+ itemsPerPage: this.itemsPerPage,
742
+ selectedPage: this.selectedPage
743
+ };
744
+ this.paginator.emit(paging);
745
+ }
746
+ calculateNumberOfPage(totalRecords, itemsPerPage) {
747
+ return this.numberOfPage = Math.ceil(totalRecords / itemsPerPage);
748
+ }
749
+ updateButtonConfigs() {
750
+ // Re-assign the button configuration to trigger change detection
751
+ this.previousButtonConfig = {
752
+ ...this.previousButtonConfig,
753
+ isDisabled: this.selectedPage <= 1
754
+ };
755
+ this.nextButtonConfig = {
756
+ ...this.nextButtonConfig,
757
+ isDisabled: this.selectedPage >= this.numberOfPage
758
+ };
759
+ }
760
+ // Method to return config for page number buttons
761
+ getPageButtonConfig(page) {
762
+ return {
763
+ label: page.toString(),
764
+ type: ButtonType.button,
765
+ isActive: page === this.selectedPage,
766
+ isDisabled: false // Page buttons are never disabled
767
+ };
768
+ }
769
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
770
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PaginatorComponent, isStandalone: true, selector: "app-paginator", inputs: { totalRecords: "totalRecords" }, outputs: { paginator: "paginator" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"table-footer\">\n <div class=\"number-of-page\">\n <app-selection [options] = \"itemsPerPageList\"\n [selectedValue]=\"this.itemsPerPage\"\n (selectedChange) = \"onChangeNumberOfPage($event)\">\n </app-selection>\n <app-input [config]=\"inputConfig\"></app-input>\n </div>\n <div class=\"paginator\">\n <app-button (clickEvent)=\"selectPage(selectedPage - 1)\"\n [config]=\"previousButtonConfig\"/>\n\n <!-- Page Numbers -->\n <ng-container *ngFor=\"let page of pageNumbers\">\n <app-button\n (clickEvent)=\"selectPage(page)\"\n [config]=\"getPageButtonConfig(page)\">\n </app-button>\n </ng-container>\n\n <!-- Next Button -->\n <app-button (clickEvent)=\"selectPage(selectedPage + 1)\"\n [config]=\"nextButtonConfig\"/>\n </div>\n</div>\n", styles: ["body{color:#566787;background:#f5f5f5;font-family:Varela Round,sans-serif;font-size:13px}.table-footer{display:flex}.table-footer .number-of-page{width:70%;display:flex;align-items:center;gap:20px}.table-footer .paginator{display:flex;justify-content:flex-end;width:100%}.table-footer .paginator app-button{margin:0 2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ButtonComponent, selector: "app-button", inputs: ["config"], outputs: ["clickEvent"] }, { kind: "component", type: SelectionComponent, selector: "app-selection", inputs: ["label", "options", "selectedValue", "selectedValues", "isMultiSelect", "displayType"], outputs: ["selectedChange"] }, { kind: "component", type: InputComponent, selector: "app-input", inputs: ["config"] }] }); }
771
+ }
772
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PaginatorComponent, decorators: [{
773
+ type: Component,
774
+ args: [{ selector: 'app-paginator', standalone: true, imports: [CommonModule, ButtonComponent, SelectionComponent, InputComponent], template: "<div class=\"table-footer\">\n <div class=\"number-of-page\">\n <app-selection [options] = \"itemsPerPageList\"\n [selectedValue]=\"this.itemsPerPage\"\n (selectedChange) = \"onChangeNumberOfPage($event)\">\n </app-selection>\n <app-input [config]=\"inputConfig\"></app-input>\n </div>\n <div class=\"paginator\">\n <app-button (clickEvent)=\"selectPage(selectedPage - 1)\"\n [config]=\"previousButtonConfig\"/>\n\n <!-- Page Numbers -->\n <ng-container *ngFor=\"let page of pageNumbers\">\n <app-button\n (clickEvent)=\"selectPage(page)\"\n [config]=\"getPageButtonConfig(page)\">\n </app-button>\n </ng-container>\n\n <!-- Next Button -->\n <app-button (clickEvent)=\"selectPage(selectedPage + 1)\"\n [config]=\"nextButtonConfig\"/>\n </div>\n</div>\n", styles: ["body{color:#566787;background:#f5f5f5;font-family:Varela Round,sans-serif;font-size:13px}.table-footer{display:flex}.table-footer .number-of-page{width:70%;display:flex;align-items:center;gap:20px}.table-footer .paginator{display:flex;justify-content:flex-end;width:100%}.table-footer .paginator app-button{margin:0 2px}\n"] }]
775
+ }], ctorParameters: function () { return []; }, propDecorators: { totalRecords: [{
776
+ type: Input
777
+ }], paginator: [{
778
+ type: Output
779
+ }] } });
780
+
781
+ class TableComponent {
782
+ constructor(cdRef) {
783
+ this.cdRef = cdRef;
784
+ this.items = [];
785
+ this.columns = [];
786
+ this.totalRecords = 0;
787
+ this.tableName = '';
788
+ this.paginator = new EventEmitter();
789
+ this.allSelected = false;
790
+ }
791
+ ngOnInit() {
792
+ this.loadingState.subscribe(() => {
793
+ this.cdRef.detectChanges(); // Explicitly mark for change detection
794
+ });
795
+ }
796
+ changePaginator(paging) {
797
+ this.paginator.emit(paging);
798
+ }
799
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
800
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableComponent, isStandalone: true, selector: "app-table", inputs: { items: "items", columns: "columns", totalRecords: "totalRecords", tableName: "tableName", loadingState: "loadingState" }, outputs: { paginator: "paginator" }, queries: [{ propertyName: "bodyTemplate", first: true, predicate: ["bodyTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"container-xl table-wrapper\">\n <div class=\"table-title\">\n <h2><b>{{tableName }}</b></h2>\n </div>\n <div class=\"loading-wrapper\">\n <ng-container *ngIf=\"!(loadingState | async); else loading; then table\">\n </ng-container>\n </div>\n <app-paginator [totalRecords] = \"totalRecords\" (paginator)=\"changePaginator($event)\"></app-paginator>\n</div>\n\n<ng-template #loading>\n <div class=\"loading-wrapper\">\n <app-loading></app-loading>\n </div>\n</ng-template>\n\n<ng-template #table>\n <ng-container *ngIf=\"totalRecords == 0; then emptyContent; else tableContent\">\n </ng-container>\n</ng-template>\n\n<ng-template #tableContent>\n <p-table [value]=\"items\" class=\"table table-striped table-hover\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>\n <ng-content select=\"[selectAllCheckbox]\"></ng-content>\n </th>\n <ng-container *ngFor=\" let col of columns\">\n <th>{{col.name }}</th>\n </ng-container>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-item>\n <ng-container [ngTemplateOutlet]=\"bodyTemplate\" [ngTemplateOutletContext]=\"{item:item}\"></ng-container>\n </ng-template>\n </p-table>\n</ng-template>\n\n<ng-template #emptyContent>\n <div class=\"no-record-message\">\n <div>No records</div>\n </div>\n</ng-template>\n", styles: [":host{width:100%}body{color:#566787;background:#f5f5f5;font-family:Varela Round,sans-serif;font-size:13px}.table-responsive{margin:30px 0}.table-wrapper{background:#fff;border-radius:3px;min-width:1000px;box-shadow:0 1px 1px #0000000d}.table-title{background:#435d7d;color:#fff;border-radius:3px 3px 0 0;padding:0 12px;display:flex}.table-title .table-name{width:70%}.table-title .table-add{width:30%;display:flex;align-items:center;justify-content:flex-end}.table-title .table-add a{cursor:pointer}.table-title h2{font-size:24px}.table-title .btn-group{float:right}.table-title .btn{color:#fff;float:right;font-size:13px;min-width:50px;border-radius:2px;border:none;outline:none!important;margin-left:10px}.table-title .btn i{float:left;font-size:21px;margin-right:5px}.table-title .btn span{float:left;margin-top:2px}::ng-deep .table tr th,::ng-deep .table tr td{border-color:#e9e9e9;padding:12px 15px;vertical-align:middle}::ng-deep .table tr th:first-child{width:60px;display:flex}::ng-deep .table tr th:last-child{width:150px}table.table-striped tbody tr:nth-of-type(odd){background-color:#fcfcfc}table.table-striped.table-hover tbody tr:hover{background:#f5f5f5}::ng-deep .table th{text-align:left}::ng-deep .table th i{font-size:13px;margin:0 5px;cursor:pointer}::ng-deep .table td:last-child i{opacity:.9;font-size:22px;margin:0 5px}::ng-deep .table td a{font-weight:700;color:#566787;display:inline-block;text-decoration:none;outline:none!important}.hint-text{float:left;margin-top:10px;font-size:13px}.no-record-message{width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.excel{display:flex}.excel a{display:inline-flex;align-items:center}.loading-wrapper{height:calc(100vh - 220px);display:flex;flex-direction:column;width:100%;overflow-y:auto;overflow-x:hidden}.loading-wrapper::-webkit-scrollbar{width:12px}.loading-wrapper::-webkit-scrollbar-track{background:#f1f1f1;border-radius:10px;box-shadow:inset 0 0 5px #0000001a}.loading-wrapper::-webkit-scrollbar-thumb{background:#888;border-radius:10px;border:3px solid #f1f1f1;-webkit-transition:background .3s;transition:background .3s}.loading-wrapper::-webkit-scrollbar-thumb:hover{background:#555}\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: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i2$1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: LoadingComponent, selector: "app-loading", inputs: ["size", "imageSrc"] }, { kind: "component", type: PaginatorComponent, selector: "app-paginator", inputs: ["totalRecords"], outputs: ["paginator"] }] }); }
801
+ }
802
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, decorators: [{
803
+ type: Component,
804
+ args: [{ selector: 'app-table', standalone: true, imports: [CommonModule, TableModule, LoadingComponent, PaginatorComponent], template: "<div class=\"container-xl table-wrapper\">\n <div class=\"table-title\">\n <h2><b>{{tableName }}</b></h2>\n </div>\n <div class=\"loading-wrapper\">\n <ng-container *ngIf=\"!(loadingState | async); else loading; then table\">\n </ng-container>\n </div>\n <app-paginator [totalRecords] = \"totalRecords\" (paginator)=\"changePaginator($event)\"></app-paginator>\n</div>\n\n<ng-template #loading>\n <div class=\"loading-wrapper\">\n <app-loading></app-loading>\n </div>\n</ng-template>\n\n<ng-template #table>\n <ng-container *ngIf=\"totalRecords == 0; then emptyContent; else tableContent\">\n </ng-container>\n</ng-template>\n\n<ng-template #tableContent>\n <p-table [value]=\"items\" class=\"table table-striped table-hover\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>\n <ng-content select=\"[selectAllCheckbox]\"></ng-content>\n </th>\n <ng-container *ngFor=\" let col of columns\">\n <th>{{col.name }}</th>\n </ng-container>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-item>\n <ng-container [ngTemplateOutlet]=\"bodyTemplate\" [ngTemplateOutletContext]=\"{item:item}\"></ng-container>\n </ng-template>\n </p-table>\n</ng-template>\n\n<ng-template #emptyContent>\n <div class=\"no-record-message\">\n <div>No records</div>\n </div>\n</ng-template>\n", styles: [":host{width:100%}body{color:#566787;background:#f5f5f5;font-family:Varela Round,sans-serif;font-size:13px}.table-responsive{margin:30px 0}.table-wrapper{background:#fff;border-radius:3px;min-width:1000px;box-shadow:0 1px 1px #0000000d}.table-title{background:#435d7d;color:#fff;border-radius:3px 3px 0 0;padding:0 12px;display:flex}.table-title .table-name{width:70%}.table-title .table-add{width:30%;display:flex;align-items:center;justify-content:flex-end}.table-title .table-add a{cursor:pointer}.table-title h2{font-size:24px}.table-title .btn-group{float:right}.table-title .btn{color:#fff;float:right;font-size:13px;min-width:50px;border-radius:2px;border:none;outline:none!important;margin-left:10px}.table-title .btn i{float:left;font-size:21px;margin-right:5px}.table-title .btn span{float:left;margin-top:2px}::ng-deep .table tr th,::ng-deep .table tr td{border-color:#e9e9e9;padding:12px 15px;vertical-align:middle}::ng-deep .table tr th:first-child{width:60px;display:flex}::ng-deep .table tr th:last-child{width:150px}table.table-striped tbody tr:nth-of-type(odd){background-color:#fcfcfc}table.table-striped.table-hover tbody tr:hover{background:#f5f5f5}::ng-deep .table th{text-align:left}::ng-deep .table th i{font-size:13px;margin:0 5px;cursor:pointer}::ng-deep .table td:last-child i{opacity:.9;font-size:22px;margin:0 5px}::ng-deep .table td a{font-weight:700;color:#566787;display:inline-block;text-decoration:none;outline:none!important}.hint-text{float:left;margin-top:10px;font-size:13px}.no-record-message{width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.excel{display:flex}.excel a{display:inline-flex;align-items:center}.loading-wrapper{height:calc(100vh - 220px);display:flex;flex-direction:column;width:100%;overflow-y:auto;overflow-x:hidden}.loading-wrapper::-webkit-scrollbar{width:12px}.loading-wrapper::-webkit-scrollbar-track{background:#f1f1f1;border-radius:10px;box-shadow:inset 0 0 5px #0000001a}.loading-wrapper::-webkit-scrollbar-thumb{background:#888;border-radius:10px;border:3px solid #f1f1f1;-webkit-transition:background .3s;transition:background .3s}.loading-wrapper::-webkit-scrollbar-thumb:hover{background:#555}\n"] }]
805
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { items: [{
806
+ type: Input
807
+ }], columns: [{
808
+ type: Input
809
+ }], totalRecords: [{
810
+ type: Input
811
+ }], tableName: [{
812
+ type: Input
813
+ }], loadingState: [{
814
+ type: Input
815
+ }], paginator: [{
816
+ type: Output
817
+ }], bodyTemplate: [{
818
+ type: ContentChild,
819
+ args: ['bodyTemplate']
820
+ }] } });
821
+
822
+ class FooterComponent {
823
+ constructor() { }
824
+ ngOnInit() {
825
+ }
826
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
827
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FooterComponent, isStandalone: true, selector: "app-footer", ngImport: i0, template: "<footer class=\"footer\">\n <div class=\"footer-container\">\n <div class=\"footer-section\">\n <h3>About Us</h3>\n <p>We are a company dedicated to providing excellent services and products to our customers.</p>\n </div>\n\n <div class=\"footer-section\">\n <h3>Quick Links</h3>\n <ul>\n <li><a href=\"#\">Home</a></li>\n <li><a href=\"#\">Services</a></li>\n <li><a href=\"#\">Contact</a></li>\n <li><a href=\"#\">Privacy Policy</a></li>\n </ul>\n </div>\n\n <div class=\"footer-section\">\n <h3>Follow Us</h3>\n <div class=\"social-icons\">\n <a href=\"#\" aria-label=\"Facebook\"><i class=\"fab fa-facebook-f\"></i></a>\n <a href=\"#\" aria-label=\"Twitter\"><i class=\"fab fa-twitter\"></i></a>\n <a href=\"#\" aria-label=\"Instagram\"><i class=\"fab fa-instagram\"></i></a>\n <a href=\"#\" aria-label=\"LinkedIn\"><i class=\"fab fa-linkedin-in\"></i></a>\n </div>\n </div>\n </div>\n\n <div class=\"footer-bottom\">\n <p>&copy; 2024 Your Company. All Rights Reserved.</p>\n </div>\n</footer>\n", styles: [".footer{background-color:#333;color:#fff;padding:20px 0;text-align:center;font-family:Roboto,sans-serif}.footer-container{display:flex;justify-content:space-around;flex-wrap:wrap;max-width:1200px;margin:0 auto}.footer-section{flex:1;margin:15px;min-width:200px}.footer-section h3{margin-bottom:15px;font-size:18px}.footer-section p,.footer-section ul,.footer-section a{font-size:14px;color:#ccc;text-decoration:none}.footer-section ul{list-style:none;padding:0}.footer-section ul li{margin:5px 0}.footer-section ul li a:hover{color:#fff}.social-icons{margin-top:10px}.social-icons a{display:inline-block;color:#ccc;margin:0 10px;font-size:20px}.social-icons a:hover{color:#fff}.footer-bottom{margin-top:20px;border-top:1px solid #444;padding-top:10px;font-size:12px}\n"] }); }
828
+ }
829
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FooterComponent, decorators: [{
830
+ type: Component,
831
+ args: [{ selector: 'app-footer', standalone: true, template: "<footer class=\"footer\">\n <div class=\"footer-container\">\n <div class=\"footer-section\">\n <h3>About Us</h3>\n <p>We are a company dedicated to providing excellent services and products to our customers.</p>\n </div>\n\n <div class=\"footer-section\">\n <h3>Quick Links</h3>\n <ul>\n <li><a href=\"#\">Home</a></li>\n <li><a href=\"#\">Services</a></li>\n <li><a href=\"#\">Contact</a></li>\n <li><a href=\"#\">Privacy Policy</a></li>\n </ul>\n </div>\n\n <div class=\"footer-section\">\n <h3>Follow Us</h3>\n <div class=\"social-icons\">\n <a href=\"#\" aria-label=\"Facebook\"><i class=\"fab fa-facebook-f\"></i></a>\n <a href=\"#\" aria-label=\"Twitter\"><i class=\"fab fa-twitter\"></i></a>\n <a href=\"#\" aria-label=\"Instagram\"><i class=\"fab fa-instagram\"></i></a>\n <a href=\"#\" aria-label=\"LinkedIn\"><i class=\"fab fa-linkedin-in\"></i></a>\n </div>\n </div>\n </div>\n\n <div class=\"footer-bottom\">\n <p>&copy; 2024 Your Company. All Rights Reserved.</p>\n </div>\n</footer>\n", styles: [".footer{background-color:#333;color:#fff;padding:20px 0;text-align:center;font-family:Roboto,sans-serif}.footer-container{display:flex;justify-content:space-around;flex-wrap:wrap;max-width:1200px;margin:0 auto}.footer-section{flex:1;margin:15px;min-width:200px}.footer-section h3{margin-bottom:15px;font-size:18px}.footer-section p,.footer-section ul,.footer-section a{font-size:14px;color:#ccc;text-decoration:none}.footer-section ul{list-style:none;padding:0}.footer-section ul li{margin:5px 0}.footer-section ul li a:hover{color:#fff}.social-icons{margin-top:10px}.social-icons a{display:inline-block;color:#ccc;margin:0 10px;font-size:20px}.social-icons a:hover{color:#fff}.footer-bottom{margin-top:20px;border-top:1px solid #444;padding-top:10px;font-size:12px}\n"] }]
832
+ }], ctorParameters: function () { return []; } });
833
+
834
+ class LoginComponent {
835
+ constructor() {
836
+ }
837
+ ngOnInit() {
838
+ }
839
+ // After the view initializes, we render the button
840
+ ngAfterViewInit() {
841
+ // Clear any existing content in the container
842
+ this.buttonContainer.clear();
843
+ // Render the provided button template inside the container
844
+ if (this.buttonTemplate) {
845
+ this.buttonContainer.createEmbeddedView(this.buttonTemplate);
846
+ }
847
+ }
848
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
849
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LoginComponent, isStandalone: true, selector: "app-login", inputs: { buttonTemplate: "buttonTemplate" }, viewQueries: [{ propertyName: "buttonContainer", first: true, predicate: ["buttonContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div class=\"login-page\">\n <div class=\"icon-area\">\n <div class=\"icon\">\n <span>innocons</span>\n </div>\n </div>\n <div class=\"login-button\" id=\"buttonDiv\">\n <ng-template #buttonContainer></ng-template>\n </div>\n</div>\n", styles: [".login-button{width:100%;align-items:center;justify-content:center;display:flex}.login-page{height:100%;width:100%;flex-direction:row;display:flex}.icon-area{width:38%;background-color:#2a76d7;height:100%;display:flex}.icon{width:100%;align-items:center;justify-content:center;display:flex}.icon span{color:#fff;font-size:xxx-large;font-family:fantasy}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
850
+ }
851
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoginComponent, decorators: [{
852
+ type: Component,
853
+ args: [{ selector: 'app-login', standalone: true, imports: [CommonModule], template: "<div class=\"login-page\">\n <div class=\"icon-area\">\n <div class=\"icon\">\n <span>innocons</span>\n </div>\n </div>\n <div class=\"login-button\" id=\"buttonDiv\">\n <ng-template #buttonContainer></ng-template>\n </div>\n</div>\n", styles: [".login-button{width:100%;align-items:center;justify-content:center;display:flex}.login-page{height:100%;width:100%;flex-direction:row;display:flex}.icon-area{width:38%;background-color:#2a76d7;height:100%;display:flex}.icon{width:100%;align-items:center;justify-content:center;display:flex}.icon span{color:#fff;font-size:xxx-large;font-family:fantasy}\n"] }]
854
+ }], ctorParameters: function () { return []; }, propDecorators: { buttonTemplate: [{
855
+ type: Input
856
+ }], buttonContainer: [{
857
+ type: ViewChild,
858
+ args: ['buttonContainer', { read: ViewContainerRef }]
859
+ }] } });
860
+
861
+ class MenuComponent {
862
+ constructor() {
863
+ this.menuItems = [];
864
+ this.logoUrl = "";
865
+ this.direction = MenuDirection.horizontal;
866
+ }
867
+ ngOnInit() {
868
+ }
869
+ get isVertical() {
870
+ return this.direction === MenuDirection.vertical;
871
+ }
872
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
873
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MenuComponent, isStandalone: true, selector: "app-menu", inputs: { menuItems: "menuItems", logoUrl: "logoUrl", direction: "direction" }, ngImport: i0, template: "<nav class=\"menu\" [ngClass]=\"{'vertical': isVertical, 'horizontal': !isVertical}\">\n <div class=\"logo\">\n <img src=\"{{logoUrl}}\" alt=\"Logo\" />\n </div>\n <ul>\n <li *ngFor=\"let item of menuItems\">\n <a [href]=\"item.route\">{{ item.label }}</a>\n </li>\n </ul>\n <div class=\"actions\">\n <div class=\"language\">\n <span class=\"material-icons\" aria-hidden=\"true\">language</span>\n </div>\n <div class=\"login\">\n <span class=\"material-icons\" aria-hidden=\"true\">person</span>\n </div>\n </div>\n</nav>\n", styles: [":host{display:flex}.menu{background-color:#f8f9fa;padding:10px;box-shadow:0 2px 5px #0000001a}.menu.vertical{display:flex;justify-content:space-between;flex-direction:column;width:200px}.menu.vertical ul{list-style-type:none;padding:0;height:100%}.menu.vertical ul li{padding:8px 0}.menu.vertical ul li:hover{background-color:#e9ecef;cursor:pointer}.menu.vertical .actions{display:flex;flex-direction:column;align-items:baseline}.menu.horizontal{display:flex;flex-direction:row;width:100%;height:80px}.menu.horizontal ul{display:flex;list-style-type:none;padding:0;margin:0;flex-grow:1;align-items:center}.menu.horizontal ul li{padding:8px 16px}.menu.horizontal ul li:hover{background-color:#e9ecef;cursor:pointer}.menu .logo img{width:100%;height:100%}.menu .actions{display:flex;align-items:center}.menu .actions .language,.menu .actions .login{margin-left:10px}a{text-decoration:none;color:inherit;display:block;padding:10px;transition:background-color .3s ease}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
874
+ }
875
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MenuComponent, decorators: [{
876
+ type: Component,
877
+ args: [{ selector: 'app-menu', standalone: true, imports: [CommonModule], template: "<nav class=\"menu\" [ngClass]=\"{'vertical': isVertical, 'horizontal': !isVertical}\">\n <div class=\"logo\">\n <img src=\"{{logoUrl}}\" alt=\"Logo\" />\n </div>\n <ul>\n <li *ngFor=\"let item of menuItems\">\n <a [href]=\"item.route\">{{ item.label }}</a>\n </li>\n </ul>\n <div class=\"actions\">\n <div class=\"language\">\n <span class=\"material-icons\" aria-hidden=\"true\">language</span>\n </div>\n <div class=\"login\">\n <span class=\"material-icons\" aria-hidden=\"true\">person</span>\n </div>\n </div>\n</nav>\n", styles: [":host{display:flex}.menu{background-color:#f8f9fa;padding:10px;box-shadow:0 2px 5px #0000001a}.menu.vertical{display:flex;justify-content:space-between;flex-direction:column;width:200px}.menu.vertical ul{list-style-type:none;padding:0;height:100%}.menu.vertical ul li{padding:8px 0}.menu.vertical ul li:hover{background-color:#e9ecef;cursor:pointer}.menu.vertical .actions{display:flex;flex-direction:column;align-items:baseline}.menu.horizontal{display:flex;flex-direction:row;width:100%;height:80px}.menu.horizontal ul{display:flex;list-style-type:none;padding:0;margin:0;flex-grow:1;align-items:center}.menu.horizontal ul li{padding:8px 16px}.menu.horizontal ul li:hover{background-color:#e9ecef;cursor:pointer}.menu .logo img{width:100%;height:100%}.menu .actions{display:flex;align-items:center}.menu .actions .language,.menu .actions .login{margin-left:10px}a{text-decoration:none;color:inherit;display:block;padding:10px;transition:background-color .3s ease}\n"] }]
878
+ }], ctorParameters: function () { return []; }, propDecorators: { menuItems: [{
879
+ type: Input
880
+ }], logoUrl: [{
881
+ type: Input
882
+ }], direction: [{
883
+ type: Input
884
+ }] } });
885
+
886
+ class VersionComponent {
887
+ constructor() {
888
+ this.content = {
889
+ title: 'Card 2 Title',
890
+ content: 'This is an example of left-aligned content.',
891
+ coverImage: 'https://via.placeholder.com/150',
892
+ contentDirection: ContentDirection.right,
893
+ template: null
894
+ };
895
+ }
896
+ ngOnInit() {
897
+ }
898
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VersionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
899
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: VersionComponent, isStandalone: true, selector: "app-version", ngImport: i0, template: "<app-content-design\n[content] = \"content\">\n</app-content-design>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ContentDesignComponent, selector: "app-content-design", inputs: ["content"], outputs: ["clickEvent"] }] }); }
900
+ }
901
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VersionComponent, decorators: [{
902
+ type: Component,
903
+ args: [{ selector: 'app-version', standalone: true, imports: [CommonModule, ContentDesignComponent], template: "<app-content-design\n[content] = \"content\">\n</app-content-design>\n" }]
904
+ }], ctorParameters: function () { return []; } });
905
+
906
+ /*
907
+ * Public API Surface of angular-dumb-lib
908
+ */
909
+
910
+ /**
911
+ * Generated bundle index. Do not edit.
912
+ */
913
+
914
+ export { AngularDumbLibComponent, AngularDumbLibModule, AngularDumbLibService, ButtonComponent, CardsComponent, ContentDesignComponent, DatetimePickerComponent, FileSelectionComponent, FooterComponent, FormComponent, InputComponent, LoadingComponent, LoginComponent, MenuComponent, ModalComponent, PaginatorComponent, SelectionComponent, SliderComponent, TableComponent, TagsComponent, VersionComponent };
915
+ //# sourceMappingURL=angular-dumb-lib.mjs.map