valtech-components 2.0.19 → 2.0.21

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 (153) hide show
  1. package/esm2022/lib/components/atoms/avatar/types.mjs +1 -1
  2. package/esm2022/lib/components/atoms/box/box.component.mjs +47 -0
  3. package/esm2022/lib/components/atoms/box/types.mjs +2 -0
  4. package/esm2022/lib/components/atoms/button/button.component.mjs +1 -1
  5. package/esm2022/lib/components/atoms/button/factory.mjs +1 -1
  6. package/esm2022/lib/components/atoms/display/display.component.mjs +28 -0
  7. package/esm2022/lib/components/atoms/display/types.mjs +2 -0
  8. package/esm2022/lib/components/atoms/divider/divider.component.mjs +17 -0
  9. package/esm2022/lib/components/atoms/divider/types.mjs +2 -0
  10. package/esm2022/lib/components/atoms/href/href.component.mjs +51 -0
  11. package/esm2022/lib/components/atoms/href/types.mjs +2 -0
  12. package/esm2022/lib/components/atoms/icon/icon.component.mjs +18 -0
  13. package/esm2022/lib/components/atoms/icon/types.mjs +2 -0
  14. package/esm2022/lib/components/atoms/image/image.component.mjs +50 -0
  15. package/esm2022/lib/components/atoms/image/types.mjs +2 -0
  16. package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +36 -0
  17. package/esm2022/lib/components/atoms/progress-bar/types.mjs +2 -0
  18. package/esm2022/lib/components/atoms/text/text.component.mjs +24 -0
  19. package/esm2022/lib/components/atoms/text/types.mjs +2 -0
  20. package/esm2022/lib/components/atoms/title/title.component.mjs +31 -0
  21. package/esm2022/lib/components/atoms/title/types.mjs +2 -0
  22. package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +32 -0
  23. package/esm2022/lib/components/molecules/alert-box/types.mjs +2 -0
  24. package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +49 -0
  25. package/esm2022/lib/components/molecules/button-group/types.mjs +2 -0
  26. package/esm2022/lib/components/molecules/card/card.component.mjs +369 -0
  27. package/esm2022/lib/components/molecules/card/types.mjs +16 -0
  28. package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +15 -0
  29. package/esm2022/lib/components/molecules/comment-input/comment-input.component.mjs +23 -0
  30. package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +32 -0
  31. package/esm2022/lib/components/molecules/content-loader/types.mjs +2 -0
  32. package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +73 -0
  33. package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +19 -0
  34. package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +69 -0
  35. package/esm2022/lib/components/molecules/hint/hint.component.mjs +52 -0
  36. package/esm2022/lib/components/molecules/hour-input/hour-input.component.mjs +18 -0
  37. package/esm2022/lib/components/molecules/link/link.component.mjs +37 -0
  38. package/esm2022/lib/components/molecules/link/types.mjs +2 -0
  39. package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +37 -0
  40. package/esm2022/lib/components/molecules/links-cake/types.mjs +2 -0
  41. package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +33 -0
  42. package/esm2022/lib/components/molecules/notes-box/types.mjs +2 -0
  43. package/esm2022/lib/components/molecules/number-input/number-input.component.mjs +18 -0
  44. package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +44 -0
  45. package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +45 -0
  46. package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +94 -0
  47. package/esm2022/lib/components/molecules/progress-status/types.mjs +2 -0
  48. package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +84 -0
  49. package/esm2022/lib/components/molecules/prompter/types.mjs +2 -0
  50. package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +33 -0
  51. package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +61 -0
  52. package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +18 -0
  53. package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +77 -0
  54. package/esm2022/lib/components/molecules/title-block/types.mjs +2 -0
  55. package/esm2022/lib/components/organisms/banner/banner.component.mjs +75 -0
  56. package/esm2022/lib/components/organisms/banner/types.mjs +2 -0
  57. package/esm2022/lib/components/organisms/footer/footer.component.mjs +50 -0
  58. package/esm2022/lib/components/organisms/footer/types.mjs +2 -0
  59. package/esm2022/lib/components/organisms/form/factory.mjs +8 -0
  60. package/esm2022/lib/components/organisms/form/form-footer/form-footer.component.mjs +76 -0
  61. package/esm2022/lib/components/organisms/form/form.component.mjs +230 -0
  62. package/esm2022/lib/components/organisms/header/header.component.mjs +33 -0
  63. package/esm2022/lib/components/organisms/header/types.mjs +2 -0
  64. package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +34 -0
  65. package/esm2022/lib/components/organisms/no-content/types.mjs +2 -0
  66. package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +168 -0
  67. package/esm2022/lib/components/organisms/toolbar/types.mjs +2 -0
  68. package/esm2022/lib/components/organisms/wizard/types.mjs +7 -0
  69. package/esm2022/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.mjs +107 -0
  70. package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +103 -0
  71. package/esm2022/lib/components/templates/simple/simple.component.mjs +64 -0
  72. package/esm2022/lib/components/templates/simple/types.mjs +2 -0
  73. package/esm2022/lib/components/types.mjs +8 -1
  74. package/esm2022/public-api.mjs +71 -4
  75. package/fesm2022/valtech-components.mjs +2529 -159
  76. package/fesm2022/valtech-components.mjs.map +1 -1
  77. package/lib/components/atoms/avatar/types.d.ts +1 -1
  78. package/lib/components/atoms/box/box.component.d.ts +12 -0
  79. package/lib/components/atoms/box/types.d.ts +7 -0
  80. package/lib/components/atoms/button/button.component.d.ts +1 -1
  81. package/lib/components/atoms/button/factory.d.ts +1 -1
  82. package/lib/components/atoms/display/display.component.d.ts +10 -0
  83. package/lib/components/atoms/display/types.d.ts +6 -0
  84. package/lib/components/atoms/divider/divider.component.d.ts +10 -0
  85. package/lib/components/atoms/divider/types.d.ts +5 -0
  86. package/lib/components/atoms/href/href.component.d.ts +15 -0
  87. package/lib/components/atoms/href/types.d.ts +9 -0
  88. package/lib/components/atoms/icon/icon.component.d.ts +10 -0
  89. package/lib/components/atoms/icon/types.d.ts +6 -0
  90. package/lib/components/atoms/image/image.component.d.ts +12 -0
  91. package/lib/components/atoms/image/types.d.ts +11 -0
  92. package/lib/components/atoms/progress-bar/progress-bar.component.d.ts +10 -0
  93. package/lib/components/atoms/progress-bar/types.d.ts +9 -0
  94. package/lib/components/atoms/text/text.component.d.ts +10 -0
  95. package/lib/components/atoms/text/types.d.ts +7 -0
  96. package/lib/components/atoms/title/title.component.d.ts +10 -0
  97. package/lib/components/atoms/title/types.d.ts +7 -0
  98. package/lib/components/molecules/alert-box/alert-box.component.d.ts +10 -0
  99. package/lib/components/molecules/alert-box/types.d.ts +8 -0
  100. package/lib/components/molecules/button-group/button-group.component.d.ts +13 -0
  101. package/lib/components/molecules/button-group/types.d.ts +6 -0
  102. package/lib/components/molecules/card/card.component.d.ts +16 -0
  103. package/lib/components/molecules/card/types.d.ts +33 -0
  104. package/lib/components/molecules/check-input/check-input.component.d.ts +8 -0
  105. package/lib/components/molecules/comment-input/comment-input.component.d.ts +10 -0
  106. package/lib/components/molecules/content-loader/content-loader.component.d.ts +10 -0
  107. package/lib/components/molecules/content-loader/types.d.ts +7 -0
  108. package/lib/components/molecules/date-input/date-input.component.d.ts +10 -0
  109. package/lib/components/molecules/email-input/email-input.component.d.ts +10 -0
  110. package/lib/components/molecules/file-input/file-input.component.d.ts +15 -0
  111. package/lib/components/molecules/hint/hint.component.d.ts +11 -0
  112. package/lib/components/molecules/hour-input/hour-input.component.d.ts +10 -0
  113. package/lib/components/molecules/link/link.component.d.ts +12 -0
  114. package/lib/components/molecules/link/types.d.ts +6 -0
  115. package/lib/components/molecules/links-cake/links-cake.component.d.ts +10 -0
  116. package/lib/components/molecules/links-cake/types.d.ts +6 -0
  117. package/lib/components/molecules/notes-box/notes-box.component.d.ts +10 -0
  118. package/lib/components/molecules/notes-box/types.d.ts +8 -0
  119. package/lib/components/molecules/number-input/number-input.component.d.ts +10 -0
  120. package/lib/components/molecules/password-input/password-input.component.d.ts +11 -0
  121. package/lib/components/molecules/pin-input/pin-input.component.d.ts +15 -0
  122. package/lib/components/molecules/progress-status/progress-status.component.d.ts +14 -0
  123. package/lib/components/molecules/progress-status/types.d.ts +10 -0
  124. package/lib/components/molecules/prompter/prompter.component.d.ts +12 -0
  125. package/lib/components/molecules/prompter/types.d.ts +11 -0
  126. package/lib/components/molecules/radio-input/radio-input.component.d.ts +10 -0
  127. package/lib/components/molecules/searchbar/searchbar.component.d.ts +14 -0
  128. package/lib/components/molecules/text-input/text-input.component.d.ts +10 -0
  129. package/lib/components/molecules/title-block/title-block.component.d.ts +10 -0
  130. package/lib/components/molecules/title-block/types.d.ts +12 -0
  131. package/lib/components/organisms/banner/banner.component.d.ts +14 -0
  132. package/lib/components/organisms/banner/types.d.ts +11 -0
  133. package/lib/components/organisms/footer/footer.component.d.ts +12 -0
  134. package/lib/components/organisms/footer/types.d.ts +6 -0
  135. package/lib/components/organisms/form/factory.d.ts +5 -0
  136. package/lib/components/organisms/form/form-footer/form-footer.component.d.ts +15 -0
  137. package/lib/components/organisms/form/form.component.d.ts +23 -0
  138. package/lib/components/organisms/header/header.component.d.ts +12 -0
  139. package/lib/components/organisms/header/types.d.ts +6 -0
  140. package/lib/components/organisms/no-content/no-content.component.d.ts +12 -0
  141. package/lib/components/organisms/no-content/types.d.ts +6 -0
  142. package/lib/components/organisms/toolbar/toolbar.component.d.ts +21 -0
  143. package/lib/components/organisms/toolbar/types.d.ts +11 -0
  144. package/lib/components/organisms/wizard/types.d.ts +20 -0
  145. package/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.d.ts +21 -0
  146. package/lib/components/organisms/wizard/wizard.component.d.ts +22 -0
  147. package/lib/components/templates/simple/simple.component.d.ts +7 -0
  148. package/lib/components/templates/simple/types.d.ts +7 -0
  149. package/lib/components/types.d.ts +37 -2
  150. package/package.json +1 -1
  151. package/public-api.d.ts +70 -3
  152. package/esm2022/lib/components/atoms/button/types.mjs +0 -2
  153. package/lib/components/atoms/button/types.d.ts +0 -22
@@ -1,10 +1,85 @@
1
- import * as i2 from '@angular/common';
2
- import { CommonModule } from '@angular/common';
3
1
  import * as i0 from '@angular/core';
4
- import { Injectable, EventEmitter, Component, Input, Output, InjectionToken, Inject } from '@angular/core';
5
- import { IonButton, IonIcon, IonSpinner, IonText, IonAvatar } from '@ionic/angular/standalone';
2
+ import { EventEmitter, Component, Input, Output, Injectable, ViewChild, InjectionToken, Inject } from '@angular/core';
3
+ import { IonAvatar, IonCard, IonIcon, IonButton, IonSpinner, IonText, IonProgressBar, IonCardContent, IonCardHeader, IonCardTitle, IonCardSubtitle, IonCheckbox, IonButtons, IonTextarea, IonDatetime, IonDatetimeButton, IonModal, IonInput, IonRadioGroup, IonRadio, IonSearchbar, IonToolbar, IonTitle, IonFooter, IonHeader, IonContent } from '@ionic/angular/standalone';
4
+ import * as i1 from '@angular/common';
5
+ import { CommonModule, NgIf, NgFor, NgClass } from '@angular/common';
6
+ import * as i1$1 from '@angular/forms';
7
+ import { ReactiveFormsModule, Validators } from '@angular/forms';
8
+ import * as i1$2 from 'ng-otp-input';
9
+ import { NgOtpInputComponent, NgOtpInputModule } from 'ng-otp-input';
10
+ import * as i1$3 from '@ionic/angular';
6
11
  import { BehaviorSubject } from 'rxjs';
7
12
 
13
+ class AvatarComponent {
14
+ constructor() {
15
+ this.onClick = new EventEmitter();
16
+ }
17
+ ngOnInit() { }
18
+ onClickHandler() {
19
+ this.onClick.emit();
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AvatarComponent, isStandalone: true, selector: "val-avatar", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
23
+ <ion-avatar [class]="props.size" [class.box]="props.box" (click)="onClickHandler()">
24
+ <img alt="profile image" [src]="props.image || props.default" />
25
+ </ion-avatar>
26
+ `, isInline: true, styles: [".box{--border-radius: pxToRem(4)}.small{width:1.75rem;height:1.75rem}.medium{width:2.375rem;height:2.375rem}.large{width:3rem;height:3rem}\n"], dependencies: [{ kind: "component", type: IonAvatar, selector: "ion-avatar" }] }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AvatarComponent, decorators: [{
29
+ type: Component,
30
+ args: [{ selector: 'val-avatar', standalone: true, imports: [IonAvatar], template: `
31
+ <ion-avatar [class]="props.size" [class.box]="props.box" (click)="onClickHandler()">
32
+ <img alt="profile image" [src]="props.image || props.default" />
33
+ </ion-avatar>
34
+ `, styles: [".box{--border-radius: pxToRem(4)}.small{width:1.75rem;height:1.75rem}.medium{width:2.375rem;height:2.375rem}.large{width:3rem;height:3rem}\n"] }]
35
+ }], ctorParameters: () => [], propDecorators: { props: [{
36
+ type: Input
37
+ }], onClick: [{
38
+ type: Output
39
+ }] } });
40
+
41
+ class BoxComponent {
42
+ constructor() {
43
+ this.onClick = new EventEmitter();
44
+ }
45
+ ngOnInit() { }
46
+ clickHandler() {
47
+ this.onClick.emit();
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BoxComponent, isStandalone: true, selector: "val-box", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
51
+ <ion-card
52
+ class="box"
53
+ [color]="props.color"
54
+ [class.bordered]="props.bordered"
55
+ [class.transparent]="!props.color"
56
+ [class.left-border]="props.leftBorder"
57
+ >
58
+ <ion-icon *ngIf="!!props.icon" class="icon" [name]="props.icon" (click)="clickHandler()"></ion-icon>
59
+ <ng-content select="[body]"></ng-content>
60
+ </ion-card>
61
+ `, isInline: true, styles: [".bordered{border:.0625rem solid var(--ion-color-medium)}.box{width:100%;margin:0rem;border-radius:0rem;box-shadow:none;padding:.25rem}@media (min-width: 768px){.box{padding:.5rem}}.icon{cursor:pointer;margin:0rem;padding:0rem;position:absolute;right:.25rem;top:.25rem;font-size:1rem}@media (min-width: 768px){.icon{right:.5rem;top:.5rem;font-size:1.5rem}}.left-border{border-left:.1875rem solid #dde3ed}.left-border.small{border-width:.1875rem}.left-border.medium{border-width:.375rem}.left-border.large{border-width:.4375rem}.left-border.xlarge{border-width:.5rem}.transparent{--background: transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
62
+ }
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BoxComponent, decorators: [{
64
+ type: Component,
65
+ args: [{ selector: 'val-box', standalone: true, imports: [CommonModule, IonCard, IonIcon], template: `
66
+ <ion-card
67
+ class="box"
68
+ [color]="props.color"
69
+ [class.bordered]="props.bordered"
70
+ [class.transparent]="!props.color"
71
+ [class.left-border]="props.leftBorder"
72
+ >
73
+ <ion-icon *ngIf="!!props.icon" class="icon" [name]="props.icon" (click)="clickHandler()"></ion-icon>
74
+ <ng-content select="[body]"></ng-content>
75
+ </ion-card>
76
+ `, styles: [".bordered{border:.0625rem solid var(--ion-color-medium)}.box{width:100%;margin:0rem;border-radius:0rem;box-shadow:none;padding:.25rem}@media (min-width: 768px){.box{padding:.5rem}}.icon{cursor:pointer;margin:0rem;padding:0rem;position:absolute;right:.25rem;top:.25rem;font-size:1rem}@media (min-width: 768px){.icon{right:.5rem;top:.5rem;font-size:1.5rem}}.left-border{border-left:.1875rem solid #dde3ed}.left-border.small{border-width:.1875rem}.left-border.medium{border-width:.375rem}.left-border.large{border-width:.4375rem}.left-border.xlarge{border-width:.5rem}.transparent{--background: transparent}\n"] }]
77
+ }], ctorParameters: () => [], propDecorators: { props: [{
78
+ type: Input
79
+ }], onClick: [{
80
+ type: Output
81
+ }] } });
82
+
8
83
  const ENABLED = 'ENABLED';
9
84
  const DISABLED = 'DISABLED';
10
85
  const WORKING = 'WORKING';
@@ -33,6 +108,13 @@ var InputType;
33
108
  InputType[InputType["SELECT"] = 10] = "SELECT";
34
109
  InputType[InputType["FILE"] = 11] = "FILE";
35
110
  })(InputType || (InputType = {}));
111
+ var ToolbarActionType;
112
+ (function (ToolbarActionType) {
113
+ ToolbarActionType["AVATAR"] = "AVATAR";
114
+ ToolbarActionType["ICON"] = "ICON";
115
+ ToolbarActionType["IMAGE"] = "IMAGE";
116
+ ToolbarActionType["BUTTON"] = "BUTTON";
117
+ })(ToolbarActionType || (ToolbarActionType = {}));
36
118
 
37
119
  class DownloadService {
38
120
  getFileNameFromUrl(url) {
@@ -129,7 +211,7 @@ class ButtonComponent {
129
211
  <ion-spinner *ngIf="props.state === states.WORKING" name="circular"></ion-spinner>
130
212
  <ion-text *ngIf="props.state !== states.WORKING">{{ props.text }}</ion-text>
131
213
  </ion-button>
132
- `, isInline: true, styles: ["ion-button{font-family:var(--ion-default-font),Arial,sans-serif}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
214
+ `, isInline: true, styles: ["ion-button{font-family:var(--ion-default-font),Arial,sans-serif}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
133
215
  }
134
216
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonComponent, decorators: [{
135
217
  type: Component,
@@ -374,172 +456,2477 @@ const SecondarySolidBlockIconHrefButton = (text, icon, href, target) => {
374
456
  return { ...SecondarySolidBlockIconButton(text, icon), href, target };
375
457
  };
376
458
 
377
- class AvatarComponent {
378
- constructor() {
459
+ class DisplayComponent {
460
+ constructor() { }
461
+ ngOnInit() { }
462
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
463
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DisplayComponent, isStandalone: true, selector: "val-display", inputs: { props: "props" }, ngImport: i0, template: `
464
+ <ion-text [color]="props.color">
465
+ <p [class]="props.size">
466
+ {{ props.content }}
467
+ </p>
468
+ </ion-text>
469
+ `, isInline: true, styles: [".small{font-size:1.5rem;line-height:2rem;font-weight:800}@media (min-width: 768px){.small{font-size:2rem;line-height:2.5rem}}.medium{font-size:2rem;line-height:2.5rem;font-weight:800}@media (min-width: 768px){.medium{font-size:2.5rem;line-height:3rem}}.large{font-size:2.5rem;line-height:3rem;font-weight:800}@media (min-width: 768px){.large{font-size:3rem;line-height:3.5rem}}.xlarge{font-size:3rem;line-height:3.5rem;font-weight:800}@media (min-width: 768px){.xlarge{font-size:3.5rem;line-height:4rem}}\n"], dependencies: [{ kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
470
+ }
471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DisplayComponent, decorators: [{
472
+ type: Component,
473
+ args: [{ selector: 'val-display', standalone: true, imports: [IonText], template: `
474
+ <ion-text [color]="props.color">
475
+ <p [class]="props.size">
476
+ {{ props.content }}
477
+ </p>
478
+ </ion-text>
479
+ `, styles: [".small{font-size:1.5rem;line-height:2rem;font-weight:800}@media (min-width: 768px){.small{font-size:2rem;line-height:2.5rem}}.medium{font-size:2rem;line-height:2.5rem;font-weight:800}@media (min-width: 768px){.medium{font-size:2.5rem;line-height:3rem}}.large{font-size:2.5rem;line-height:3rem;font-weight:800}@media (min-width: 768px){.large{font-size:3rem;line-height:3.5rem}}.xlarge{font-size:3rem;line-height:3.5rem;font-weight:800}@media (min-width: 768px){.xlarge{font-size:3.5rem;line-height:4rem}}\n"] }]
480
+ }], ctorParameters: () => [], propDecorators: { props: [{
481
+ type: Input
482
+ }] } });
483
+
484
+ class DividerComponent {
485
+ constructor() { }
486
+ ngOnInit() { }
487
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
488
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DividerComponent, isStandalone: true, selector: "val-divider", inputs: { props: "props" }, ngImport: i0, template: ` <div [ngClass]="['divider', props.size, props.color, props.fill]"></div> `, isInline: true, styles: [".solid{border-top:.0625rem solid #878ca0}.gradient{height:.125rem}.gradient.primary{background:linear-gradient(to right,var(--ion-color-primary),var(--ion-color-light))}.gradient.secondary{background:linear-gradient(to right,var(--ion-color-secondary),var(--ion-color-light))}.gradient.dark{background:linear-gradient(to right,var(--ion-color-dark),var(--ion-color-light))}.gradient.light{background:linear-gradient(to right,var(--ion-color-light),#ffffff)}.gradient.medium{background:linear-gradient(to right,var(--ion-color-medium),#ffffff)}.small{margin:1rem}.medium{margin:1.5rem 1rem}.large{margin:2.25rem 1rem}.primary{border-color:var(--ion-color-primary)}.secondary{border-color:var(--ion-color-secondary)}.dark{border-color:var(--ion-color-dark)}.light{border-color:var(--ion-color-light)}.medium{border-color:var(--ion-color-medium)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
489
+ }
490
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DividerComponent, decorators: [{
491
+ type: Component,
492
+ args: [{ selector: 'val-divider', standalone: true, imports: [CommonModule], template: ` <div [ngClass]="['divider', props.size, props.color, props.fill]"></div> `, styles: [".solid{border-top:.0625rem solid #878ca0}.gradient{height:.125rem}.gradient.primary{background:linear-gradient(to right,var(--ion-color-primary),var(--ion-color-light))}.gradient.secondary{background:linear-gradient(to right,var(--ion-color-secondary),var(--ion-color-light))}.gradient.dark{background:linear-gradient(to right,var(--ion-color-dark),var(--ion-color-light))}.gradient.light{background:linear-gradient(to right,var(--ion-color-light),#ffffff)}.gradient.medium{background:linear-gradient(to right,var(--ion-color-medium),#ffffff)}.small{margin:1rem}.medium{margin:1.5rem 1rem}.large{margin:2.25rem 1rem}.primary{border-color:var(--ion-color-primary)}.secondary{border-color:var(--ion-color-secondary)}.dark{border-color:var(--ion-color-dark)}.light{border-color:var(--ion-color-light)}.medium{border-color:var(--ion-color-medium)}\n"] }]
493
+ }], ctorParameters: () => [], propDecorators: { props: [{
494
+ type: Input
495
+ }] } });
496
+
497
+ class HrefComponent {
498
+ constructor(downloadService) {
499
+ this.downloadService = downloadService;
379
500
  this.onClick = new EventEmitter();
380
501
  }
381
502
  ngOnInit() { }
382
- onClickHandler() {
383
- this.onClick.emit();
503
+ getFileName() {
504
+ return this.downloadService.getFileNameFromUrl(this.props.url);
384
505
  }
385
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
386
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AvatarComponent, isStandalone: true, selector: "val-avatar", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
387
- <ion-avatar [class]="props.size" [class.box]="props.box" (click)="onClickHandler()">
388
- <img alt="profile image" [src]="props.image || props.default" />
389
- </ion-avatar>
390
- `, isInline: true, styles: [".box{--border-radius: pxToRem(4)}.small{width:1.75rem;height:1.75rem}.medium{width:2.375rem;height:2.375rem}.large{width:3rem;height:3rem}\n"], dependencies: [{ kind: "component", type: IonAvatar, selector: "ion-avatar" }] }); }
506
+ onClickHandler(event) {
507
+ if (this.props.download && this.props.url) {
508
+ event.preventDefault();
509
+ this.downloadService.downloadLinkFromBrowser(this.props.url);
510
+ }
511
+ this.onClick.emit(this.props.token);
512
+ }
513
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HrefComponent, deps: [{ token: DownloadService }], target: i0.ɵɵFactoryTarget.Component }); }
514
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HrefComponent, isStandalone: true, selector: "val-href", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
515
+ <a
516
+ [ngClass]="[props.color]"
517
+ [class.hoverable]="props.hoverable"
518
+ [href]="props.url"
519
+ target="_blank"
520
+ (click)="onClickHandler($event)"
521
+ >{{ props.text }}</a
522
+ >
523
+ `, isInline: true, styles: [".primary{color:var(--ion-color-primary)}.secondary{color:var(--ion-color-secondary)}.dark{color:var(--ion-color-dark)}.medium{color:var(--ion-color-medium)}.hoverable{text-decoration:none}.hoverable:hover{text-decoration:underline}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
391
524
  }
392
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AvatarComponent, decorators: [{
525
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HrefComponent, decorators: [{
393
526
  type: Component,
394
- args: [{ selector: 'val-avatar', standalone: true, imports: [IonAvatar], template: `
395
- <ion-avatar [class]="props.size" [class.box]="props.box" (click)="onClickHandler()">
396
- <img alt="profile image" [src]="props.image || props.default" />
397
- </ion-avatar>
398
- `, styles: [".box{--border-radius: pxToRem(4)}.small{width:1.75rem;height:1.75rem}.medium{width:2.375rem;height:2.375rem}.large{width:3rem;height:3rem}\n"] }]
399
- }], ctorParameters: () => [], propDecorators: { props: [{
527
+ args: [{ selector: 'val-href', standalone: true, imports: [CommonModule], template: `
528
+ <a
529
+ [ngClass]="[props.color]"
530
+ [class.hoverable]="props.hoverable"
531
+ [href]="props.url"
532
+ target="_blank"
533
+ (click)="onClickHandler($event)"
534
+ >{{ props.text }}</a
535
+ >
536
+ `, styles: [".primary{color:var(--ion-color-primary)}.secondary{color:var(--ion-color-secondary)}.dark{color:var(--ion-color-dark)}.medium{color:var(--ion-color-medium)}.hoverable{text-decoration:none}.hoverable:hover{text-decoration:underline}\n"] }]
537
+ }], ctorParameters: () => [{ type: DownloadService }], propDecorators: { props: [{
400
538
  type: Input
401
539
  }], onClick: [{
402
540
  type: Output
403
541
  }] } });
404
542
 
405
- class LayoutComponent {
406
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
407
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LayoutComponent, isStandalone: true, selector: "val-layout", ngImport: i0, template: `
408
- <div class="layout-container">
409
- <ng-content></ng-content>
410
- </div>
411
- `, isInline: true, styles: [".layout-container{margin:0 auto;padding:0 1rem;width:100%;box-sizing:border-box;margin-bottom:1rem}@media (max-width: 768px){.layout-container{max-width:100%}}@media (min-width: 768px){.layout-container{max-width:60rem;margin-bottom:1.5rem}}@media (min-width: 1200px){.layout-container{max-width:75rem}}\n"] }); }
543
+ class IconComponent {
544
+ constructor() { }
545
+ ngOnInit() { }
546
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
547
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: IconComponent, isStandalone: true, selector: "val-icon", inputs: { props: "props" }, ngImport: i0, template: ` <ion-icon [ngClass]="[props.size]" [name]="props.name" [color]="props.color"></ion-icon> `, isInline: true, styles: [".small{font-size:.75rem;line-height:1.25rem;font-weight:400}.small.bold{font-size:.75rem;line-height:1.25rem;font-weight:700}.medium{font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.medium{font-size:1rem;line-height:1.5rem}}.medium.bold{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium.bold{font-size:1rem;line-height:1.5rem}}.large{font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.large{font-size:1.125rem;line-height:1.5rem}}.large.bold{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large.bold{font-size:1.125rem;line-height:1.5rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}.xlarge.bold{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge.bold{font-size:1.5rem;line-height:2rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
412
548
  }
413
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutComponent, decorators: [{
549
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IconComponent, decorators: [{
414
550
  type: Component,
415
- args: [{ selector: 'val-layout', standalone: true, imports: [], template: `
416
- <div class="layout-container">
417
- <ng-content></ng-content>
418
- </div>
419
- `, styles: [".layout-container{margin:0 auto;padding:0 1rem;width:100%;box-sizing:border-box;margin-bottom:1rem}@media (max-width: 768px){.layout-container{max-width:100%}}@media (min-width: 768px){.layout-container{max-width:60rem;margin-bottom:1.5rem}}@media (min-width: 1200px){.layout-container{max-width:75rem}}\n"] }]
420
- }] });
551
+ args: [{ selector: 'val-icon', standalone: true, imports: [CommonModule, IonIcon], template: ` <ion-icon [ngClass]="[props.size]" [name]="props.name" [color]="props.color"></ion-icon> `, styles: [".small{font-size:.75rem;line-height:1.25rem;font-weight:400}.small.bold{font-size:.75rem;line-height:1.25rem;font-weight:700}.medium{font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.medium{font-size:1rem;line-height:1.5rem}}.medium.bold{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium.bold{font-size:1rem;line-height:1.5rem}}.large{font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.large{font-size:1.125rem;line-height:1.5rem}}.large.bold{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large.bold{font-size:1.125rem;line-height:1.5rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}.xlarge.bold{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge.bold{font-size:1.5rem;line-height:2rem}}\n"] }]
552
+ }], ctorParameters: () => [], propDecorators: { props: [{
553
+ type: Input
554
+ }] } });
421
555
 
422
- class TextContent {
423
- constructor(text) {
424
- this.text = text;
556
+ class ImageComponent {
557
+ constructor() {
558
+ this.available = true;
425
559
  }
426
- get Content() {
427
- return this.text;
560
+ ngOnInit() { }
561
+ changeToVisible() {
562
+ setInterval(() => {
563
+ this.available = true;
564
+ }, 100);
428
565
  }
566
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
567
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ImageComponent, isStandalone: true, selector: "val-image", inputs: { props: "props" }, ngImport: i0, template: `
568
+ <img
569
+ [ngClass]="['image', props.mode, props.size]"
570
+ [class.bordered]="props.bordered"
571
+ [class.shaded]="props.shaded"
572
+ [class.limited]="props.limited"
573
+ [class.visible]="available"
574
+ [src]="props.src"
575
+ [alt]="props.alt"
576
+ [style.width.px]="props.width"
577
+ [style.max-width.px]="props.width"
578
+ [style.height.px]="props.height"
579
+ />
580
+ `, isInline: true, styles: [".small{width:30%}.small.limited{max-width:6.25rem}.medium{width:50%}.medium.limited{max-width:15rem}.large{width:70%}.large.limited{max-width:28.125rem}.xlarge{width:100%}.xlarge.limited{max-width:43.75rem}.image{opacity:0;height:0;display:block}.visible{animation:appereance ease-in 1s forwards}@keyframes appereance{0%{opacity:0;height:0}to{opacity:1;height:auto}}.rounded{border-radius:.5rem}.circular{border-radius:50%}.bordered{border:.0625rem solid var(--ion-color-medium)}.shaded{box-shadow:.1875rem .625rem .5rem #1219541a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
429
581
  }
430
- var LangOption;
431
- (function (LangOption) {
432
- LangOption["ES"] = "es";
433
- LangOption["EN"] = "en";
434
- })(LangOption || (LangOption = {}));
582
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImageComponent, decorators: [{
583
+ type: Component,
584
+ args: [{ selector: 'val-image', standalone: true, imports: [CommonModule], template: `
585
+ <img
586
+ [ngClass]="['image', props.mode, props.size]"
587
+ [class.bordered]="props.bordered"
588
+ [class.shaded]="props.shaded"
589
+ [class.limited]="props.limited"
590
+ [class.visible]="available"
591
+ [src]="props.src"
592
+ [alt]="props.alt"
593
+ [style.width.px]="props.width"
594
+ [style.max-width.px]="props.width"
595
+ [style.height.px]="props.height"
596
+ />
597
+ `, styles: [".small{width:30%}.small.limited{max-width:6.25rem}.medium{width:50%}.medium.limited{max-width:15rem}.large{width:70%}.large.limited{max-width:28.125rem}.xlarge{width:100%}.xlarge.limited{max-width:43.75rem}.image{opacity:0;height:0;display:block}.visible{animation:appereance ease-in 1s forwards}@keyframes appereance{0%{opacity:0;height:0}to{opacity:1;height:auto}}.rounded{border-radius:.5rem}.circular{border-radius:50%}.bordered{border:.0625rem solid var(--ion-color-medium)}.shaded{box-shadow:.1875rem .625rem .5rem #1219541a}\n"] }]
598
+ }], ctorParameters: () => [], propDecorators: { props: [{
599
+ type: Input
600
+ }] } });
435
601
 
436
- class LocalStorageService {
437
- static set(reference, value) {
438
- localStorage.setItem(reference, JSON.stringify(value));
439
- }
440
- static get(reference) {
441
- const value = localStorage.getItem(reference);
442
- return JSON.parse(value);
443
- }
444
- static remove(reference) {
445
- localStorage.removeItem(reference);
446
- }
447
- static clear() {
448
- localStorage.clear();
449
- }
602
+ class ProgressBarComponent {
603
+ constructor() { }
604
+ ngOnInit() { }
605
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
606
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ProgressBarComponent, isStandalone: true, selector: "val-progress-bar", inputs: { props: "props" }, ngImport: i0, template: `
607
+ <ion-progress-bar
608
+ [ngClass]="[props.size]"
609
+ [class.rounded]="props.rounded"
610
+ [value]="props.progress"
611
+ [color]="props.color"
612
+ [buffer]="props.buffer"
613
+ [type]="props.type"
614
+ ></ion-progress-bar>
615
+ `, isInline: true, styles: ["ion-progress-bar.rounded{border-radius:.5rem}.medium{height:.25rem}.large{height:.375rem}.xlarge{height:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IonProgressBar, selector: "ion-progress-bar", inputs: ["buffer", "color", "mode", "reversed", "type", "value"] }] }); }
450
616
  }
617
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProgressBarComponent, decorators: [{
618
+ type: Component,
619
+ args: [{ selector: 'val-progress-bar', standalone: true, imports: [CommonModule, IonProgressBar], template: `
620
+ <ion-progress-bar
621
+ [ngClass]="[props.size]"
622
+ [class.rounded]="props.rounded"
623
+ [value]="props.progress"
624
+ [color]="props.color"
625
+ [buffer]="props.buffer"
626
+ [type]="props.type"
627
+ ></ion-progress-bar>
628
+ `, styles: ["ion-progress-bar.rounded{border-radius:.5rem}.medium{height:.25rem}.large{height:.375rem}.xlarge{height:.5rem}\n"] }]
629
+ }], ctorParameters: () => [], propDecorators: { props: [{
630
+ type: Input
631
+ }] } });
451
632
 
452
- const LANG = 'LANG';
453
- const THEME = 'THEME';
633
+ class TextComponent {
634
+ constructor() { }
635
+ ngOnInit() { }
636
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
637
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TextComponent, isStandalone: true, selector: "val-text", inputs: { props: "props" }, ngImport: i0, template: `
638
+ <ion-text [color]="props.color">
639
+ <p [class]="props.size" [class.bold]="props.bold">{{ props.content }}</p>
640
+ </ion-text>
641
+ `, isInline: true, styles: [".small{font-size:.75rem;line-height:1.25rem;font-weight:400}.small.bold{font-size:.75rem;line-height:1.25rem;font-weight:700}.medium{font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.medium{font-size:1rem;line-height:1.5rem}}.medium.bold{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium.bold{font-size:1rem;line-height:1.5rem}}.large{font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.large{font-size:1.125rem;line-height:1.5rem}}.large.bold{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large.bold{font-size:1.125rem;line-height:1.5rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}.xlarge.bold{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge.bold{font-size:1.5rem;line-height:2rem}}\n"], dependencies: [{ kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
642
+ }
643
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextComponent, decorators: [{
644
+ type: Component,
645
+ args: [{ selector: 'val-text', standalone: true, imports: [IonText], template: `
646
+ <ion-text [color]="props.color">
647
+ <p [class]="props.size" [class.bold]="props.bold">{{ props.content }}</p>
648
+ </ion-text>
649
+ `, styles: [".small{font-size:.75rem;line-height:1.25rem;font-weight:400}.small.bold{font-size:.75rem;line-height:1.25rem;font-weight:700}.medium{font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.medium{font-size:1rem;line-height:1.5rem}}.medium.bold{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium.bold{font-size:1rem;line-height:1.5rem}}.large{font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.large{font-size:1.125rem;line-height:1.5rem}}.large.bold{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large.bold{font-size:1.125rem;line-height:1.5rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}.xlarge.bold{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge.bold{font-size:1.5rem;line-height:2rem}}\n"] }]
650
+ }], ctorParameters: () => [], propDecorators: { props: [{
651
+ type: Input
652
+ }] } });
454
653
 
455
- const ValtechConfigService = new InjectionToken('ValtechConfig');
654
+ class TitleComponent {
655
+ constructor() { }
656
+ ngOnInit() { }
657
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
658
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TitleComponent, isStandalone: true, selector: "val-title", inputs: { props: "props" }, ngImport: i0, template: `
659
+ <ion-text [color]="props.color">
660
+ <p *ngIf="!props.bold" [class]="props.size">{{ props.content }}</p>
661
+ <b *ngIf="props.bold">
662
+ <p [class]="props.size">{{ props.content }}</p>
663
+ </b>
664
+ </ion-text>
665
+ `, isInline: true, styles: [".small{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.small{font-size:1rem;line-height:1.5rem}}.medium{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium{font-size:1.125rem;line-height:1.5rem}}.large{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large{font-size:1.5rem;line-height:2rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
666
+ }
667
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TitleComponent, decorators: [{
668
+ type: Component,
669
+ args: [{ selector: 'val-title', standalone: true, imports: [NgIf, IonText], template: `
670
+ <ion-text [color]="props.color">
671
+ <p *ngIf="!props.bold" [class]="props.size">{{ props.content }}</p>
672
+ <b *ngIf="props.bold">
673
+ <p [class]="props.size">{{ props.content }}</p>
674
+ </b>
675
+ </ion-text>
676
+ `, styles: [".small{font-size:.875rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.small{font-size:1rem;line-height:1.5rem}}.medium{font-size:1rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.medium{font-size:1.125rem;line-height:1.5rem}}.large{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.large{font-size:1.5rem;line-height:2rem}}.xlarge{font-size:1.125rem;line-height:1.5rem;font-weight:700}@media (min-width: 768px){.xlarge{font-size:1.5rem;line-height:2rem}}\n"] }]
677
+ }], ctorParameters: () => [], propDecorators: { props: [{
678
+ type: Input
679
+ }] } });
456
680
 
457
- class LangService {
458
- constructor(config) {
459
- this.default = LangOption.ES;
460
- console.log('injected config: ', config);
461
- this.content = config.content;
462
- this.config = config;
463
- const current = LocalStorageService.get(LANG);
464
- this.selectedLang = new BehaviorSubject(current || this.default);
465
- }
466
- Text(className) {
467
- return this.content[className].Content[this.selectedLang.value];
468
- }
469
- get Lang() {
470
- return this.selectedLang.value;
471
- }
472
- set Lang(lang) {
473
- this.selectedLang.next(lang);
474
- LocalStorageService.set(LANG, lang);
475
- }
476
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LangService, deps: [{ token: ValtechConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
477
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LangService, providedIn: 'root' }); }
681
+ class AlertBoxComponent {
682
+ constructor() { }
683
+ ngOnInit() { }
684
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AlertBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
685
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AlertBoxComponent, isStandalone: true, selector: "val-alert-box", inputs: { props: "props" }, ngImport: i0, template: `
686
+ <val-box [props]="props.box">
687
+ <div class="content-container" body>
688
+ <val-icon [props]="props.icon"></val-icon>
689
+ <val-text class="text" [props]="props.text"></val-text>
690
+ </div>
691
+ </val-box>
692
+ `, isInline: true, styles: [".text{margin-left:.25rem}.content-container{display:flex;align-items:flex-start}\n"], dependencies: [{ kind: "component", type: BoxComponent, selector: "val-box", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: IconComponent, selector: "val-icon", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
478
693
  }
479
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LangService, decorators: [{
480
- type: Injectable,
481
- args: [{
482
- providedIn: 'root',
483
- }]
484
- }], ctorParameters: () => [{ type: undefined, decorators: [{
485
- type: Inject,
486
- args: [ValtechConfigService]
487
- }] }] });
694
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AlertBoxComponent, decorators: [{
695
+ type: Component,
696
+ args: [{ selector: 'val-alert-box', standalone: true, imports: [BoxComponent, IconComponent, TextComponent], template: `
697
+ <val-box [props]="props.box">
698
+ <div class="content-container" body>
699
+ <val-icon [props]="props.icon"></val-icon>
700
+ <val-text class="text" [props]="props.text"></val-text>
701
+ </div>
702
+ </val-box>
703
+ `, styles: [".text{margin-left:.25rem}.content-container{display:flex;align-items:flex-start}\n"] }]
704
+ }], ctorParameters: () => [], propDecorators: { props: [{
705
+ type: Input
706
+ }] } });
488
707
 
489
- var ThemeOption;
490
- (function (ThemeOption) {
491
- ThemeOption["LIGHT"] = "light";
492
- ThemeOption["DARK"] = "dark";
493
- ThemeOption["AUTO"] = "auto";
494
- })(ThemeOption || (ThemeOption = {}));
495
- class ThemeService {
708
+ class ButtonGroupComponent {
496
709
  constructor() {
497
- this.lightToggle = false;
498
- this.darkToggle = false;
499
- this.autoToggle = false;
500
- this.currentOption = ThemeOption.AUTO;
501
- this.themeOptions = ThemeOption;
502
- this.prefersDark = false;
503
- this.default = ThemeOption.AUTO;
504
- const current = LocalStorageService.get(THEME);
505
- console.log('💡 ThemeConfig current::: ', current);
506
- this.theme = new BehaviorSubject(current || this.default);
507
- this.currentOption = this.Theme;
508
- console.log('💡 ThemeConfig this.currentOption::: ', this.currentOption);
509
- this.toggleUserPreference(this.currentOption);
510
- const prefersDarkQuery = window.matchMedia('(prefers-color-scheme: dark)');
511
- this.prefersDark = prefersDarkQuery.matches;
512
- this.handleAutoConfiguration();
513
- prefersDarkQuery.addEventListener('change', mediaQuery => {
514
- console.log('💡 ThemeConfig addEventListener change::: ', mediaQuery);
515
- this.prefersDark = mediaQuery.matches;
516
- this.handleAutoConfiguration();
517
- });
710
+ this.onClick = new EventEmitter();
518
711
  }
519
- handleAutoConfiguration() {
520
- if (this.prefersDark && this.currentOption === ThemeOption.AUTO) {
521
- console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);
522
- this.toggleUserPreference(ThemeOption.AUTO);
523
- }
524
- if (!this.prefersDark && this.currentOption === ThemeOption.AUTO) {
525
- console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);
526
- this.toggleUserPreference(ThemeOption.AUTO);
527
- }
712
+ ngOnInit() { }
713
+ clickHandler(token) {
714
+ this.onClick.emit(token);
528
715
  }
529
- handleDarkPreference() {
530
- this.toggleTheme(ThemeOption.DARK, true);
531
- this.toggleTheme(ThemeOption.LIGHT, false);
716
+ get Position() {
717
+ if (this.props.buttons.length === 1 && this.props.position === 'spaced') {
718
+ return 'right';
719
+ }
720
+ return this.props.position;
532
721
  }
533
- handleLightPreference() {
534
- this.toggleTheme(ThemeOption.LIGHT, true);
535
- this.toggleTheme(ThemeOption.DARK, false);
722
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
723
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ButtonGroupComponent, isStandalone: true, selector: "val-button-group", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
724
+ <div [ngClass]="['group-container', Position]" [class.column]="props.columned" style="width: 100%;">
725
+ <val-button
726
+ *ngFor="let b of props.buttons"
727
+ [props]="b"
728
+ (click)="clickHandler(b?.token)"
729
+ [ngStyle]="{ width: props.buttons.length === 1 ? '100%' : 'auto' }"
730
+ ></val-button>
731
+ </div>
732
+ `, isInline: true, styles: ["val-button{display:inline-block}.group-container{width:100%}.group-container.left{text-align:left}.group-container.center{text-align:center}.group-container.right{text-align:right}.group-container.column{display:flex;flex-direction:column-reverse}.group-container.spaced{display:flex;justify-content:space-between}\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"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["props"], outputs: ["onClick"] }] }); }
733
+ }
734
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonGroupComponent, decorators: [{
735
+ type: Component,
736
+ args: [{ selector: 'val-button-group', standalone: true, imports: [CommonModule, ButtonComponent], template: `
737
+ <div [ngClass]="['group-container', Position]" [class.column]="props.columned" style="width: 100%;">
738
+ <val-button
739
+ *ngFor="let b of props.buttons"
740
+ [props]="b"
741
+ (click)="clickHandler(b?.token)"
742
+ [ngStyle]="{ width: props.buttons.length === 1 ? '100%' : 'auto' }"
743
+ ></val-button>
744
+ </div>
745
+ `, styles: ["val-button{display:inline-block}.group-container{width:100%}.group-container.left{text-align:left}.group-container.center{text-align:center}.group-container.right{text-align:right}.group-container.column{display:flex;flex-direction:column-reverse}.group-container.spaced{display:flex;justify-content:space-between}\n"] }]
746
+ }], ctorParameters: () => [], propDecorators: { props: [{
747
+ type: Input
748
+ }], onClick: [{
749
+ type: Output
750
+ }] } });
751
+
752
+ var CardType;
753
+ (function (CardType) {
754
+ CardType["native"] = "native";
755
+ CardType["checker"] = "checker";
756
+ CardType["tappable"] = "tappable";
757
+ CardType["complex"] = "complex";
758
+ })(CardType || (CardType = {}));
759
+ var CardSection;
760
+ (function (CardSection) {
761
+ CardSection[CardSection["headerLeft"] = 0] = "headerLeft";
762
+ CardSection[CardSection["headerRight"] = 1] = "headerRight";
763
+ CardSection[CardSection["content"] = 2] = "content";
764
+ CardSection[CardSection["footer"] = 3] = "footer";
765
+ CardSection[CardSection["footerExtra"] = 4] = "footerExtra";
766
+ })(CardSection || (CardSection = {}));
767
+
768
+ class CardComponent {
769
+ constructor() {
770
+ this.onClick = new EventEmitter();
771
+ this.types = CardType;
772
+ this.actionTypes = ToolbarActionType;
773
+ this.sections = CardSection;
536
774
  }
537
- get Theme() {
538
- return this.theme.value;
775
+ ngOnInit() { }
776
+ clickHandler(section, token) {
777
+ this.onClick.emit({ section, token });
539
778
  }
540
- set Theme(theme) {
541
- this.theme.next(theme);
542
- LocalStorageService.set(THEME, theme);
779
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
780
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CardComponent, isStandalone: true, selector: "val-card", inputs: { metadata: "metadata" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
781
+ <ion-card *ngIf="metadata.type === types.native">
782
+ <img alt="image" [src]="metadata.image" />
783
+ <ion-card-header *ngIf="metadata.title || metadata.overtitle">
784
+ <ion-card-title *ngIf="metadata.title">{{ metadata.title }}</ion-card-title>
785
+ <ion-card-subtitle *ngIf="metadata.overtitle">{{ metadata.overtitle }}</ion-card-subtitle>
786
+ </ion-card-header>
787
+
788
+ <ion-card-content *ngIf="metadata.content">{{ metadata.content }}</ion-card-content>
789
+
790
+ <val-button
791
+ *ngFor="let b of metadata.footerActions"
792
+ [props]="b"
793
+ (click)="clickHandler(sections.footer, b.token)"
794
+ ></val-button>
795
+ </ion-card>
796
+
797
+ <ion-card
798
+ *ngIf="metadata.type === types.tappable"
799
+ (click)="clickHandler(sections.content, metadata.token)"
800
+ class="tapable"
801
+ >
802
+ <img alt="image" [src]="metadata.image" />
803
+ <ion-card-header *ngIf="metadata.title || metadata.overtitle">
804
+ <ion-card-title *ngIf="metadata.title">{{ metadata.title }}</ion-card-title>
805
+ <ion-card-subtitle *ngIf="metadata.overtitle">{{ metadata.overtitle }}</ion-card-subtitle>
806
+ </ion-card-header>
807
+
808
+ <ion-card-content *ngIf="metadata.content">{{ metadata.content }}</ion-card-content>
809
+ </ion-card>
810
+
811
+ <ion-card
812
+ *ngIf="metadata.type === types.checker"
813
+ (click)="clickHandler(sections.content, metadata.token)"
814
+ class="tapable"
815
+ >
816
+ <ion-card-header *ngIf="metadata.title || metadata.overtitle" class="checker">
817
+ <div>
818
+ <ion-card-subtitle *ngIf="metadata.overtitle">{{ metadata.overtitle }}</ion-card-subtitle>
819
+ <ion-card-title *ngIf="metadata.title">{{ metadata.title }}</ion-card-title>
820
+ </div>
821
+ <div>
822
+ <ion-checkbox [checked]="metadata.selected"></ion-checkbox>
823
+ </div>
824
+ </ion-card-header>
825
+
826
+ <ion-card-content *ngIf="metadata.content">{{ metadata.content }}</ion-card-content>
827
+ </ion-card>
828
+
829
+ <ion-card *ngIf="metadata.type === types.complex" class="complex">
830
+ <ion-card-header class="complex-header">
831
+ <ion-buttons style="display: flex; align-items: center" *ngIf="metadata.leftActions.length > 0">
832
+ <ng-container *ngFor="let action of metadata.leftActions">
833
+ <ion-button
834
+ *ngIf="action.type === actionTypes.ICON"
835
+ (click)="clickHandler(sections.headerLeft, action.token)"
836
+ >
837
+ <ion-icon slot="icon-only" [name]="action.description" color="dark"></ion-icon>
838
+ </ion-button>
839
+ <val-avatar
840
+ style="margin-right: 4px; cursor: pointer"
841
+ *ngIf="action.type === actionTypes.AVATAR"
842
+ [props]="{ size: 'small', image: action.description, default: '' }"
843
+ (onClick)="clickHandler(sections.headerLeft, action.token)"
844
+ ></val-avatar>
845
+ <val-image
846
+ *ngIf="action.type === actionTypes.IMAGE"
847
+ [props]="action.image"
848
+ (click)="clickHandler(sections.headerLeft, action.token)"
849
+ ></val-image>
850
+ <ion-button
851
+ *ngIf="action.type === actionTypes.BUTTON"
852
+ (click)="clickHandler(sections.headerLeft, action.token)"
853
+ >
854
+ {{ action.description }}
855
+ </ion-button>
856
+ <div *ngIf="metadata.headerText">
857
+ <val-text
858
+ [props]="{ content: metadata.headerText, color: 'dark', bold: true, size: 'medium' }"
859
+ ></val-text>
860
+ </div>
861
+ </ng-container>
862
+ </ion-buttons>
863
+ <ion-buttons style="display: flex; align-items: center" *ngIf="metadata.rightActions.length > 0">
864
+ <ng-container *ngFor="let action of metadata.rightActions">
865
+ <ion-button
866
+ *ngIf="action.type === actionTypes.ICON"
867
+ (click)="clickHandler(sections.headerRight, action.token)"
868
+ >
869
+ <ion-icon slot="icon-only" [name]="action.description" color="dark"></ion-icon>
870
+ </ion-button>
871
+ <val-avatar
872
+ style="margin-right: 4px; cursor: pointer"
873
+ *ngIf="action.type === actionTypes.AVATAR"
874
+ [props]="{ size: 'small', image: action.description, default: '' }"
875
+ (onClick)="clickHandler(sections.headerRight, action.token)"
876
+ ></val-avatar>
877
+ <val-image
878
+ *ngIf="action.type === actionTypes.IMAGE"
879
+ [props]="action.image"
880
+ (click)="clickHandler(sections.headerRight, action.token)"
881
+ ></val-image>
882
+ <ion-button
883
+ *ngIf="action.type === actionTypes.BUTTON"
884
+ (click)="clickHandler(sections.headerRight, action.token)"
885
+ >
886
+ {{ action.description }}
887
+ </ion-button>
888
+ </ng-container>
889
+ </ion-buttons>
890
+ </ion-card-header>
891
+
892
+ <div class="tapable" (click)="clickHandler(sections.content, metadata.token)">
893
+ <ion-card-header *ngIf="metadata.title || metadata.overtitle" class="complex-header">
894
+ <div>
895
+ <ion-card-subtitle *ngIf="metadata.overtitle">{{ metadata.overtitle }}</ion-card-subtitle>
896
+ <ion-card-title *ngIf="metadata.title">{{ metadata.title }}</ion-card-title>
897
+ </div>
898
+ </ion-card-header>
899
+
900
+ <img alt="image" [src]="metadata.image" />
901
+ <ion-card-content *ngIf="metadata.content" class="complex-content">{{ metadata.content }}</ion-card-content>
902
+ </div>
903
+ <val-button
904
+ *ngFor="let b of metadata.footerActions"
905
+ [props]="b"
906
+ (click)="clickHandler(sections.footer, b.token)"
907
+ ></val-button>
908
+ <ion-buttons
909
+ style="display: flex; align-items: center; justify-content: flex-end; margin: 8px"
910
+ *ngIf="metadata.footerComplexActions.length > 0"
911
+ >
912
+ <ng-container *ngFor="let action of metadata.footerComplexActions">
913
+ <ion-button
914
+ *ngIf="action.type === actionTypes.ICON"
915
+ (click)="clickHandler(sections.footerExtra, action.token)"
916
+ >
917
+ <ion-icon slot="icon-only" [name]="action.description" color="dark"></ion-icon>
918
+ </ion-button>
919
+ <val-avatar
920
+ style="margin-right: 4px; cursor: pointer"
921
+ *ngIf="action.type === actionTypes.AVATAR"
922
+ [props]="{ size: 'small', image: action.description, default: '' }"
923
+ (onClick)="clickHandler(sections.footerExtra, action.token)"
924
+ ></val-avatar>
925
+ <val-image
926
+ *ngIf="action.type === actionTypes.IMAGE"
927
+ [props]="action.image"
928
+ (click)="clickHandler(sections.footerExtra, action.token)"
929
+ ></val-image>
930
+ <ion-button
931
+ *ngIf="action.type === actionTypes.BUTTON"
932
+ (click)="clickHandler(sections.footerExtra, action.token)"
933
+ color="dark"
934
+ >
935
+ {{ action.description }}
936
+ </ion-button>
937
+ </ng-container>
938
+ </ion-buttons>
939
+ </ion-card>
940
+ `, isInline: true, styles: [".tapable{cursor:pointer}.checker{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.complex-header{padding:10px;display:flex;flex-direction:row;justify-content:space-between;align-items:center}.complex-content{padding-left:10px;padding-top:4px;padding-bottom:10px}.complex{border-radius:16px}\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: ButtonComponent, selector: "val-button", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: AvatarComponent, selector: "val-avatar", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
941
+ }
942
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardComponent, decorators: [{
943
+ type: Component,
944
+ args: [{ selector: 'val-card', standalone: true, imports: [
945
+ CommonModule,
946
+ ButtonComponent,
947
+ AvatarComponent,
948
+ ImageComponent,
949
+ TextComponent,
950
+ IonCard,
951
+ IonCardContent,
952
+ IonCardHeader,
953
+ IonCardTitle,
954
+ IonCardSubtitle,
955
+ IonCheckbox,
956
+ IonButtons,
957
+ IonButton,
958
+ IonIcon,
959
+ ], template: `
960
+ <ion-card *ngIf="metadata.type === types.native">
961
+ <img alt="image" [src]="metadata.image" />
962
+ <ion-card-header *ngIf="metadata.title || metadata.overtitle">
963
+ <ion-card-title *ngIf="metadata.title">{{ metadata.title }}</ion-card-title>
964
+ <ion-card-subtitle *ngIf="metadata.overtitle">{{ metadata.overtitle }}</ion-card-subtitle>
965
+ </ion-card-header>
966
+
967
+ <ion-card-content *ngIf="metadata.content">{{ metadata.content }}</ion-card-content>
968
+
969
+ <val-button
970
+ *ngFor="let b of metadata.footerActions"
971
+ [props]="b"
972
+ (click)="clickHandler(sections.footer, b.token)"
973
+ ></val-button>
974
+ </ion-card>
975
+
976
+ <ion-card
977
+ *ngIf="metadata.type === types.tappable"
978
+ (click)="clickHandler(sections.content, metadata.token)"
979
+ class="tapable"
980
+ >
981
+ <img alt="image" [src]="metadata.image" />
982
+ <ion-card-header *ngIf="metadata.title || metadata.overtitle">
983
+ <ion-card-title *ngIf="metadata.title">{{ metadata.title }}</ion-card-title>
984
+ <ion-card-subtitle *ngIf="metadata.overtitle">{{ metadata.overtitle }}</ion-card-subtitle>
985
+ </ion-card-header>
986
+
987
+ <ion-card-content *ngIf="metadata.content">{{ metadata.content }}</ion-card-content>
988
+ </ion-card>
989
+
990
+ <ion-card
991
+ *ngIf="metadata.type === types.checker"
992
+ (click)="clickHandler(sections.content, metadata.token)"
993
+ class="tapable"
994
+ >
995
+ <ion-card-header *ngIf="metadata.title || metadata.overtitle" class="checker">
996
+ <div>
997
+ <ion-card-subtitle *ngIf="metadata.overtitle">{{ metadata.overtitle }}</ion-card-subtitle>
998
+ <ion-card-title *ngIf="metadata.title">{{ metadata.title }}</ion-card-title>
999
+ </div>
1000
+ <div>
1001
+ <ion-checkbox [checked]="metadata.selected"></ion-checkbox>
1002
+ </div>
1003
+ </ion-card-header>
1004
+
1005
+ <ion-card-content *ngIf="metadata.content">{{ metadata.content }}</ion-card-content>
1006
+ </ion-card>
1007
+
1008
+ <ion-card *ngIf="metadata.type === types.complex" class="complex">
1009
+ <ion-card-header class="complex-header">
1010
+ <ion-buttons style="display: flex; align-items: center" *ngIf="metadata.leftActions.length > 0">
1011
+ <ng-container *ngFor="let action of metadata.leftActions">
1012
+ <ion-button
1013
+ *ngIf="action.type === actionTypes.ICON"
1014
+ (click)="clickHandler(sections.headerLeft, action.token)"
1015
+ >
1016
+ <ion-icon slot="icon-only" [name]="action.description" color="dark"></ion-icon>
1017
+ </ion-button>
1018
+ <val-avatar
1019
+ style="margin-right: 4px; cursor: pointer"
1020
+ *ngIf="action.type === actionTypes.AVATAR"
1021
+ [props]="{ size: 'small', image: action.description, default: '' }"
1022
+ (onClick)="clickHandler(sections.headerLeft, action.token)"
1023
+ ></val-avatar>
1024
+ <val-image
1025
+ *ngIf="action.type === actionTypes.IMAGE"
1026
+ [props]="action.image"
1027
+ (click)="clickHandler(sections.headerLeft, action.token)"
1028
+ ></val-image>
1029
+ <ion-button
1030
+ *ngIf="action.type === actionTypes.BUTTON"
1031
+ (click)="clickHandler(sections.headerLeft, action.token)"
1032
+ >
1033
+ {{ action.description }}
1034
+ </ion-button>
1035
+ <div *ngIf="metadata.headerText">
1036
+ <val-text
1037
+ [props]="{ content: metadata.headerText, color: 'dark', bold: true, size: 'medium' }"
1038
+ ></val-text>
1039
+ </div>
1040
+ </ng-container>
1041
+ </ion-buttons>
1042
+ <ion-buttons style="display: flex; align-items: center" *ngIf="metadata.rightActions.length > 0">
1043
+ <ng-container *ngFor="let action of metadata.rightActions">
1044
+ <ion-button
1045
+ *ngIf="action.type === actionTypes.ICON"
1046
+ (click)="clickHandler(sections.headerRight, action.token)"
1047
+ >
1048
+ <ion-icon slot="icon-only" [name]="action.description" color="dark"></ion-icon>
1049
+ </ion-button>
1050
+ <val-avatar
1051
+ style="margin-right: 4px; cursor: pointer"
1052
+ *ngIf="action.type === actionTypes.AVATAR"
1053
+ [props]="{ size: 'small', image: action.description, default: '' }"
1054
+ (onClick)="clickHandler(sections.headerRight, action.token)"
1055
+ ></val-avatar>
1056
+ <val-image
1057
+ *ngIf="action.type === actionTypes.IMAGE"
1058
+ [props]="action.image"
1059
+ (click)="clickHandler(sections.headerRight, action.token)"
1060
+ ></val-image>
1061
+ <ion-button
1062
+ *ngIf="action.type === actionTypes.BUTTON"
1063
+ (click)="clickHandler(sections.headerRight, action.token)"
1064
+ >
1065
+ {{ action.description }}
1066
+ </ion-button>
1067
+ </ng-container>
1068
+ </ion-buttons>
1069
+ </ion-card-header>
1070
+
1071
+ <div class="tapable" (click)="clickHandler(sections.content, metadata.token)">
1072
+ <ion-card-header *ngIf="metadata.title || metadata.overtitle" class="complex-header">
1073
+ <div>
1074
+ <ion-card-subtitle *ngIf="metadata.overtitle">{{ metadata.overtitle }}</ion-card-subtitle>
1075
+ <ion-card-title *ngIf="metadata.title">{{ metadata.title }}</ion-card-title>
1076
+ </div>
1077
+ </ion-card-header>
1078
+
1079
+ <img alt="image" [src]="metadata.image" />
1080
+ <ion-card-content *ngIf="metadata.content" class="complex-content">{{ metadata.content }}</ion-card-content>
1081
+ </div>
1082
+ <val-button
1083
+ *ngFor="let b of metadata.footerActions"
1084
+ [props]="b"
1085
+ (click)="clickHandler(sections.footer, b.token)"
1086
+ ></val-button>
1087
+ <ion-buttons
1088
+ style="display: flex; align-items: center; justify-content: flex-end; margin: 8px"
1089
+ *ngIf="metadata.footerComplexActions.length > 0"
1090
+ >
1091
+ <ng-container *ngFor="let action of metadata.footerComplexActions">
1092
+ <ion-button
1093
+ *ngIf="action.type === actionTypes.ICON"
1094
+ (click)="clickHandler(sections.footerExtra, action.token)"
1095
+ >
1096
+ <ion-icon slot="icon-only" [name]="action.description" color="dark"></ion-icon>
1097
+ </ion-button>
1098
+ <val-avatar
1099
+ style="margin-right: 4px; cursor: pointer"
1100
+ *ngIf="action.type === actionTypes.AVATAR"
1101
+ [props]="{ size: 'small', image: action.description, default: '' }"
1102
+ (onClick)="clickHandler(sections.footerExtra, action.token)"
1103
+ ></val-avatar>
1104
+ <val-image
1105
+ *ngIf="action.type === actionTypes.IMAGE"
1106
+ [props]="action.image"
1107
+ (click)="clickHandler(sections.footerExtra, action.token)"
1108
+ ></val-image>
1109
+ <ion-button
1110
+ *ngIf="action.type === actionTypes.BUTTON"
1111
+ (click)="clickHandler(sections.footerExtra, action.token)"
1112
+ color="dark"
1113
+ >
1114
+ {{ action.description }}
1115
+ </ion-button>
1116
+ </ng-container>
1117
+ </ion-buttons>
1118
+ </ion-card>
1119
+ `, styles: [".tapable{cursor:pointer}.checker{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.complex-header{padding:10px;display:flex;flex-direction:row;justify-content:space-between;align-items:center}.complex-content{padding-left:10px;padding-top:4px;padding-bottom:10px}.complex{border-radius:16px}\n"] }]
1120
+ }], ctorParameters: () => [], propDecorators: { metadata: [{
1121
+ type: Input
1122
+ }], onClick: [{
1123
+ type: Output
1124
+ }] } });
1125
+
1126
+ class CheckInputComponent {
1127
+ constructor() { }
1128
+ ngOnInit() { }
1129
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CheckInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1130
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CheckInputComponent, isStandalone: true, selector: "val-check-input", ngImport: i0, template: ` <ion-checkbox>I agree to the terms and conditions</ion-checkbox> `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }] }); }
1131
+ }
1132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CheckInputComponent, decorators: [{
1133
+ type: Component,
1134
+ args: [{ selector: 'val-check-input', standalone: true, imports: [CommonModule, IonCheckbox], template: ` <ion-checkbox>I agree to the terms and conditions</ion-checkbox> ` }]
1135
+ }], ctorParameters: () => [] });
1136
+
1137
+ class CommentInputComponent {
1138
+ constructor() { }
1139
+ ngOnInit() { }
1140
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CommentInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1141
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CommentInputComponent, isStandalone: true, selector: "val-comment-input", inputs: { props: "props" }, ngImport: i0, template: `
1142
+ <ion-textarea [formControl]="props.control" [counter]="true" [maxlength]="props.range.max"></ion-textarea>
1143
+ `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }] }); }
1144
+ }
1145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CommentInputComponent, decorators: [{
1146
+ type: Component,
1147
+ args: [{ selector: 'val-comment-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, IonCheckbox, IonTextarea], template: `
1148
+ <ion-textarea [formControl]="props.control" [counter]="true" [maxlength]="props.range.max"></ion-textarea>
1149
+ ` }]
1150
+ }], ctorParameters: () => [], propDecorators: { props: [{
1151
+ type: Input
1152
+ }] } });
1153
+
1154
+ class ContentLoaderComponent {
1155
+ constructor() { }
1156
+ ngOnInit() { }
1157
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContentLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1158
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ContentLoaderComponent, isStandalone: true, selector: "val-content-loader", inputs: { props: "props" }, ngImport: i0, template: `
1159
+ <div [ngClass]="['spinner-wrapper', props.size]">
1160
+ <ion-spinner [ngClass]="[props.size]" [name]="props.name" [color]="props.color"></ion-spinner>
1161
+ <ion-text [color]="props.color">
1162
+ <p>{{ props.text }}</p>
1163
+ </ion-text>
1164
+ </div>
1165
+ `, isInline: true, styles: [".small{width:1.5rem;height:1.5rem}.medium{width:2.375rem;height:2.375rem}.large{width:3rem;height:3rem}.spinner-wrapper{width:100%;text-align:center}.spinner-wrapper.small{height:4.5rem;padding-top:1.5rem;font-size:.75rem;line-height:1.25rem;font-weight:400}.spinner-wrapper.medium{height:6.125rem;padding-top:2rem;font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.spinner-wrapper.medium{font-size:1rem;line-height:1.5rem}}.spinner-wrapper.large{height:6.75rem;padding-top:2.625rem;font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.spinner-wrapper.large{font-size:1.125rem;line-height:1.5rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
1166
+ }
1167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContentLoaderComponent, decorators: [{
1168
+ type: Component,
1169
+ args: [{ selector: 'val-content-loader', standalone: true, imports: [CommonModule, IonSpinner, IonText], template: `
1170
+ <div [ngClass]="['spinner-wrapper', props.size]">
1171
+ <ion-spinner [ngClass]="[props.size]" [name]="props.name" [color]="props.color"></ion-spinner>
1172
+ <ion-text [color]="props.color">
1173
+ <p>{{ props.text }}</p>
1174
+ </ion-text>
1175
+ </div>
1176
+ `, styles: [".small{width:1.5rem;height:1.5rem}.medium{width:2.375rem;height:2.375rem}.large{width:3rem;height:3rem}.spinner-wrapper{width:100%;text-align:center}.spinner-wrapper.small{height:4.5rem;padding-top:1.5rem;font-size:.75rem;line-height:1.25rem;font-weight:400}.spinner-wrapper.medium{height:6.125rem;padding-top:2rem;font-size:.875rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.spinner-wrapper.medium{font-size:1rem;line-height:1.5rem}}.spinner-wrapper.large{height:6.75rem;padding-top:2.625rem;font-size:1rem;line-height:1.5rem;font-weight:400}@media (min-width: 768px){.spinner-wrapper.large{font-size:1.125rem;line-height:1.5rem}}\n"] }]
1177
+ }], ctorParameters: () => [], propDecorators: { props: [{
1178
+ type: Input
1179
+ }] } });
1180
+
1181
+ class DateInputComponent {
1182
+ constructor() { }
1183
+ ngOnInit() { }
1184
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1185
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DateInputComponent, isStandalone: true, selector: "val-date-input", inputs: { props: "props" }, ngImport: i0, template: `
1186
+ <div class="button-container">
1187
+ <ion-datetime-button class="action" datetime="datetime"></ion-datetime-button>
1188
+ </div>
1189
+ <ion-modal [keepContentsMounted]="true">
1190
+ <ng-template>
1191
+ <ion-datetime
1192
+ [formControl]="props.control"
1193
+ id="datetime"
1194
+ presentation="date"
1195
+ locale="es-ES"
1196
+ [firstDayOfWeek]="1"
1197
+ [showDefaultButtons]="true"
1198
+ doneText="Aceptar"
1199
+ cancelText="Cancelar"
1200
+ formatOptions="{
1201
+ date: { weekday: 'short', month: 'long', day: '2-digit' },
1202
+ time: {
1203
+ hour: '2-digit',
1204
+ minute: '2-digit',
1205
+ },
1206
+ }"
1207
+ >
1208
+ <span slot="title">{{ props.hint }}</span>
1209
+ </ion-datetime>
1210
+ </ng-template>
1211
+ </ion-modal>
1212
+ `, isInline: true, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.button-container{display:flex;flex-direction:column;align-items:flex-start}.action{margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonDatetime, selector: "ion-datetime", inputs: ["cancelText", "clearText", "color", "dayValues", "disabled", "doneText", "firstDayOfWeek", "highlightedDates", "hourCycle", "hourValues", "isDateEnabled", "locale", "max", "min", "minuteValues", "mode", "monthValues", "multiple", "name", "preferWheel", "presentation", "readonly", "showClearButton", "showDefaultButtons", "showDefaultTimeLabel", "showDefaultTitle", "size", "titleSelectedDatesFormatter", "value", "yearValues"] }, { kind: "component", type: IonDatetimeButton, selector: "ion-datetime-button", inputs: ["color", "datetime", "disabled", "mode"] }, { kind: "component", type: IonModal, selector: "ion-modal" }] }); }
1213
+ }
1214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateInputComponent, decorators: [{
1215
+ type: Component,
1216
+ args: [{ selector: 'val-date-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, IonDatetime, IonDatetimeButton, IonModal], template: `
1217
+ <div class="button-container">
1218
+ <ion-datetime-button class="action" datetime="datetime"></ion-datetime-button>
1219
+ </div>
1220
+ <ion-modal [keepContentsMounted]="true">
1221
+ <ng-template>
1222
+ <ion-datetime
1223
+ [formControl]="props.control"
1224
+ id="datetime"
1225
+ presentation="date"
1226
+ locale="es-ES"
1227
+ [firstDayOfWeek]="1"
1228
+ [showDefaultButtons]="true"
1229
+ doneText="Aceptar"
1230
+ cancelText="Cancelar"
1231
+ formatOptions="{
1232
+ date: { weekday: 'short', month: 'long', day: '2-digit' },
1233
+ time: {
1234
+ hour: '2-digit',
1235
+ minute: '2-digit',
1236
+ },
1237
+ }"
1238
+ >
1239
+ <span slot="title">{{ props.hint }}</span>
1240
+ </ion-datetime>
1241
+ </ng-template>
1242
+ </ion-modal>
1243
+ `, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.button-container{display:flex;flex-direction:column;align-items:flex-start}.action{margin-top:.25rem}\n"] }]
1244
+ }], ctorParameters: () => [], propDecorators: { props: [{
1245
+ type: Input
1246
+ }] } });
1247
+
1248
+ class EmailInputComponent {
1249
+ constructor() { }
1250
+ ngOnInit() { }
1251
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EmailInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1252
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: EmailInputComponent, isStandalone: true, selector: "val-email-input", inputs: { props: "props" }, ngImport: i0, template: ` <ion-input [formControl]="props.control" type="email" [placeholder]="props.placeholder"></ion-input> `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }] }); }
1253
+ }
1254
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EmailInputComponent, decorators: [{
1255
+ type: Component,
1256
+ args: [{ selector: 'val-email-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, IonInput], template: ` <ion-input [formControl]="props.control" type="email" [placeholder]="props.placeholder"></ion-input> ` }]
1257
+ }], ctorParameters: () => [], propDecorators: { props: [{
1258
+ type: Input
1259
+ }] } });
1260
+
1261
+ class FileInputComponent {
1262
+ constructor() {
1263
+ this.contrastButton = {
1264
+ ...PrimarySolidDefaultRoundButton('Subir archivo'),
1265
+ color: 'light',
1266
+ };
1267
+ }
1268
+ ngOnInit() { }
1269
+ onFileSelected(event) {
1270
+ this.selectedFile = event.target.files[0];
1271
+ this.props.control.setValue(this.selectedFile);
1272
+ }
1273
+ reset() {
1274
+ this.selectedFile = null;
1275
+ this.fileInput.nativeElement.value = '';
1276
+ }
1277
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FileInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1278
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FileInputComponent, isStandalone: true, selector: "val-file-input", inputs: { props: "props" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: `
1279
+ <div class="file-container">
1280
+ <input style="display: none" type="file" (change)="onFileSelected($event)" #fileInput />
1281
+ <div class="name-container">
1282
+ <ion-icon [name]="selectedFile ? 'checkmark-circle-outline' : 'alert-circle-outline'"></ion-icon>
1283
+ <val-text
1284
+ style="margin-left: 4px;"
1285
+ [props]="{
1286
+ content: selectedFile ? selectedFile.name : 'No has seleccionado archivo',
1287
+ color: 'dark',
1288
+ bold: false,
1289
+ size: 'medium',
1290
+ }"
1291
+ ></val-text>
1292
+ </div>
1293
+ <val-button [props]="contrastButton" (onClick)="fileInput.click()"></val-button>
1294
+ </div>
1295
+ `, isInline: true, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.file-container{margin-top:.25rem}.name-container{display:flex;flex-direction:row;align-items:flex-start}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["props"], outputs: ["onClick"] }] }); }
1296
+ }
1297
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FileInputComponent, decorators: [{
1298
+ type: Component,
1299
+ args: [{ selector: 'val-file-input', standalone: true, imports: [IonIcon, TextComponent, ButtonComponent], template: `
1300
+ <div class="file-container">
1301
+ <input style="display: none" type="file" (change)="onFileSelected($event)" #fileInput />
1302
+ <div class="name-container">
1303
+ <ion-icon [name]="selectedFile ? 'checkmark-circle-outline' : 'alert-circle-outline'"></ion-icon>
1304
+ <val-text
1305
+ style="margin-left: 4px;"
1306
+ [props]="{
1307
+ content: selectedFile ? selectedFile.name : 'No has seleccionado archivo',
1308
+ color: 'dark',
1309
+ bold: false,
1310
+ size: 'medium',
1311
+ }"
1312
+ ></val-text>
1313
+ </div>
1314
+ <val-button [props]="contrastButton" (onClick)="fileInput.click()"></val-button>
1315
+ </div>
1316
+ `, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.file-container{margin-top:.25rem}.name-container{display:flex;flex-direction:row;align-items:flex-start}\n"] }]
1317
+ }], ctorParameters: () => [], propDecorators: { fileInput: [{
1318
+ type: ViewChild,
1319
+ args: ['fileInput']
1320
+ }], props: [{
1321
+ type: Input
1322
+ }] } });
1323
+
1324
+ class HintComponent {
1325
+ constructor() { }
1326
+ ngOnInit() { }
1327
+ get Errors() {
1328
+ const keys = Object.keys(this.props.errors);
1329
+ const errors = [];
1330
+ keys.map((e) => {
1331
+ if (this.props.control.hasError(e)) {
1332
+ errors.push(this.props.errors[e]);
1333
+ }
1334
+ });
1335
+ return errors;
1336
+ }
1337
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HintComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1338
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HintComponent, isStandalone: true, selector: "val-hint", inputs: { props: "props" }, ngImport: i0, template: `
1339
+ <div class="hint-container" *ngIf="props.control.invalid && (props.control.touched || props.control.dirty)">
1340
+ <val-text
1341
+ *ngFor="let e of Errors"
1342
+ [props]="{
1343
+ content: e,
1344
+ color: 'danger',
1345
+ bold: false,
1346
+ size: 'small',
1347
+ }"
1348
+ ></val-text>
1349
+ </div>
1350
+ `, isInline: true, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.hint-container{margin-top:.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: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
1351
+ }
1352
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HintComponent, decorators: [{
1353
+ type: Component,
1354
+ args: [{ selector: 'val-hint', standalone: true, imports: [CommonModule, TextComponent], template: `
1355
+ <div class="hint-container" *ngIf="props.control.invalid && (props.control.touched || props.control.dirty)">
1356
+ <val-text
1357
+ *ngFor="let e of Errors"
1358
+ [props]="{
1359
+ content: e,
1360
+ color: 'danger',
1361
+ bold: false,
1362
+ size: 'small',
1363
+ }"
1364
+ ></val-text>
1365
+ </div>
1366
+ `, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.hint-container{margin-top:.25rem}\n"] }]
1367
+ }], ctorParameters: () => [], propDecorators: { props: [{
1368
+ type: Input
1369
+ }] } });
1370
+
1371
+ class HourInputComponent {
1372
+ constructor() { }
1373
+ ngOnInit() { }
1374
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HourInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1375
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HourInputComponent, isStandalone: true, selector: "val-hour-input", inputs: { props: "props" }, ngImport: i0, template: ` <ion-datetime [formControl]="props.control" presentation="time"></ion-datetime>`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonDatetime, selector: "ion-datetime", inputs: ["cancelText", "clearText", "color", "dayValues", "disabled", "doneText", "firstDayOfWeek", "highlightedDates", "hourCycle", "hourValues", "isDateEnabled", "locale", "max", "min", "minuteValues", "mode", "monthValues", "multiple", "name", "preferWheel", "presentation", "readonly", "showClearButton", "showDefaultButtons", "showDefaultTimeLabel", "showDefaultTitle", "size", "titleSelectedDatesFormatter", "value", "yearValues"] }] }); }
1376
+ }
1377
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HourInputComponent, decorators: [{
1378
+ type: Component,
1379
+ args: [{ selector: 'val-hour-input', standalone: true, imports: [ReactiveFormsModule, IonDatetime], template: ` <ion-datetime [formControl]="props.control" presentation="time"></ion-datetime>` }]
1380
+ }], ctorParameters: () => [], propDecorators: { props: [{
1381
+ type: Input
1382
+ }] } });
1383
+
1384
+ class LinkComponent {
1385
+ constructor() {
1386
+ this.onClick = new EventEmitter();
1387
+ }
1388
+ ngOnInit() { }
1389
+ onClickHandler() {
1390
+ this.onClick.emit();
1391
+ }
1392
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1393
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LinkComponent, isStandalone: true, selector: "val-link", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
1394
+ <div>
1395
+ <ion-button type="button" [color]="props.color" fill="clear" [size]="props.size" (click)="onClickHandler()">
1396
+ <ion-icon slot="end" name="chevron-forward-outline"></ion-icon>
1397
+ <ion-text>{{ props.text }}</ion-text>
1398
+ </ion-button>
1399
+ </div>
1400
+ `, isInline: true, styles: ["ion-button{font-family:var(--ion-default-font),Arial,sans-serif}\n"], dependencies: [{ kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
1401
+ }
1402
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LinkComponent, decorators: [{
1403
+ type: Component,
1404
+ args: [{ selector: 'val-link', standalone: true, imports: [IonButton, IonIcon, IonText], template: `
1405
+ <div>
1406
+ <ion-button type="button" [color]="props.color" fill="clear" [size]="props.size" (click)="onClickHandler()">
1407
+ <ion-icon slot="end" name="chevron-forward-outline"></ion-icon>
1408
+ <ion-text>{{ props.text }}</ion-text>
1409
+ </ion-button>
1410
+ </div>
1411
+ `, styles: ["ion-button{font-family:var(--ion-default-font),Arial,sans-serif}\n"] }]
1412
+ }], ctorParameters: () => [], propDecorators: { props: [{
1413
+ type: Input
1414
+ }], onClick: [{
1415
+ type: Output
1416
+ }] } });
1417
+
1418
+ class LinksCakeComponent {
1419
+ constructor() { }
1420
+ ngOnInit() { }
1421
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LinksCakeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1422
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LinksCakeComponent, isStandalone: true, selector: "val-links-cake", inputs: { props: "props" }, ngImport: i0, template: `
1423
+ <div>
1424
+ <div class="title">
1425
+ <val-title [props]="{ content: props.title, color: 'dark', bold: false, size: props.size }"></val-title>
1426
+ </div>
1427
+ <div class="link" *ngFor="let l of props.links">
1428
+ <val-href [props]="l"></val-href>
1429
+ </div>
1430
+ </div>
1431
+ `, isInline: true, styles: [".title{margin:1rem 0}.link{margin-bottom:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: HrefComponent, selector: "val-href", inputs: ["props"], outputs: ["onClick"] }] }); }
1432
+ }
1433
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LinksCakeComponent, decorators: [{
1434
+ type: Component,
1435
+ args: [{ selector: 'val-links-cake', standalone: true, imports: [CommonModule, TitleComponent, HrefComponent], template: `
1436
+ <div>
1437
+ <div class="title">
1438
+ <val-title [props]="{ content: props.title, color: 'dark', bold: false, size: props.size }"></val-title>
1439
+ </div>
1440
+ <div class="link" *ngFor="let l of props.links">
1441
+ <val-href [props]="l"></val-href>
1442
+ </div>
1443
+ </div>
1444
+ `, styles: [".title{margin:1rem 0}.link{margin-bottom:.5rem}\n"] }]
1445
+ }], ctorParameters: () => [], propDecorators: { props: [{
1446
+ type: Input
1447
+ }] } });
1448
+
1449
+ class NotesBoxComponent {
1450
+ constructor() { }
1451
+ ngOnInit() { }
1452
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotesBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1453
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NotesBoxComponent, isStandalone: true, selector: "val-notes-box", inputs: { props: "props" }, ngImport: i0, template: `
1454
+ <val-box [props]="{ icon: '', bordered: false, color: props.color, leftBorder: true }">
1455
+ <div [ngClass]="['content-container', props.size]" body>
1456
+ <val-text [props]="{ content: props.prefix, color: props.textColor, bold: true, size: props.size }"></val-text>
1457
+ <val-text [props]="{ content: props.text, color: props.textColor, bold: false, size: props.size }"></val-text>
1458
+ </div>
1459
+ </val-box>
1460
+ `, isInline: true, styles: [".content-container{display:inline-grid}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: BoxComponent, selector: "val-box", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
1461
+ }
1462
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotesBoxComponent, decorators: [{
1463
+ type: Component,
1464
+ args: [{ selector: 'val-notes-box', standalone: true, imports: [CommonModule, BoxComponent, TextComponent], template: `
1465
+ <val-box [props]="{ icon: '', bordered: false, color: props.color, leftBorder: true }">
1466
+ <div [ngClass]="['content-container', props.size]" body>
1467
+ <val-text [props]="{ content: props.prefix, color: props.textColor, bold: true, size: props.size }"></val-text>
1468
+ <val-text [props]="{ content: props.text, color: props.textColor, bold: false, size: props.size }"></val-text>
1469
+ </div>
1470
+ </val-box>
1471
+ `, styles: [".content-container{display:inline-grid}\n"] }]
1472
+ }], ctorParameters: () => [], propDecorators: { props: [{
1473
+ type: Input
1474
+ }] } });
1475
+
1476
+ class NumberInputComponent {
1477
+ constructor() { }
1478
+ ngOnInit() { }
1479
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1480
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NumberInputComponent, isStandalone: true, selector: "val-number-input", inputs: { props: "props" }, ngImport: i0, template: ` <ion-input [formControl]="props.control" type="number" [placeholder]="props.placeholder"></ion-input> `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }] }); }
1481
+ }
1482
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NumberInputComponent, decorators: [{
1483
+ type: Component,
1484
+ args: [{ selector: 'val-number-input', standalone: true, imports: [ReactiveFormsModule, IonInput], template: ` <ion-input [formControl]="props.control" type="number" [placeholder]="props.placeholder"></ion-input> ` }]
1485
+ }], ctorParameters: () => [], propDecorators: { props: [{
1486
+ type: Input
1487
+ }] } });
1488
+
1489
+ class PasswordInputComponent {
1490
+ constructor() {
1491
+ this.hidePassword = true;
1492
+ }
1493
+ ngOnInit() { }
1494
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PasswordInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1495
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PasswordInputComponent, isStandalone: true, selector: "val-password-input", inputs: { props: "props" }, ngImport: i0, template: `
1496
+ <div class="input-container">
1497
+ <ion-input
1498
+ class="sign-in__input-password"
1499
+ [formControl]="props.control"
1500
+ [type]="hidePassword ? 'password' : 'text'"
1501
+ [placeholder]="props.placeholder"
1502
+ ></ion-input>
1503
+ <ion-button color="dark" fill="clear" (click)="hidePassword = !hidePassword" size="small">
1504
+ <ion-icon slot="icon-only" [name]="hidePassword ? 'eye-off-outline' : 'eye-outline'"></ion-icon>
1505
+ </ion-button>
1506
+ </div>
1507
+ `, isInline: true, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.input-container{display:flex;align-items:center;flex-direction:row}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
1508
+ }
1509
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PasswordInputComponent, decorators: [{
1510
+ type: Component,
1511
+ args: [{ selector: 'val-password-input', standalone: true, imports: [ReactiveFormsModule, IonInput, IonButton, IonIcon], template: `
1512
+ <div class="input-container">
1513
+ <ion-input
1514
+ class="sign-in__input-password"
1515
+ [formControl]="props.control"
1516
+ [type]="hidePassword ? 'password' : 'text'"
1517
+ [placeholder]="props.placeholder"
1518
+ ></ion-input>
1519
+ <ion-button color="dark" fill="clear" (click)="hidePassword = !hidePassword" size="small">
1520
+ <ion-icon slot="icon-only" [name]="hidePassword ? 'eye-off-outline' : 'eye-outline'"></ion-icon>
1521
+ </ion-button>
1522
+ </div>
1523
+ `, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.input-container{display:flex;align-items:center;flex-direction:row}\n"] }]
1524
+ }], ctorParameters: () => [], propDecorators: { props: [{
1525
+ type: Input
1526
+ }] } });
1527
+
1528
+ class PinInputComponent {
1529
+ constructor() {
1530
+ this.codeLength = 5;
1531
+ this.otpInputConfig = {
1532
+ inputStyles: {
1533
+ 'font-size': '36px',
1534
+ width: '55px',
1535
+ height: '55px',
1536
+ },
1537
+ inputClass: 'otp-input-box',
1538
+ length: this.codeLength,
1539
+ allowNumbersOnly: true,
1540
+ };
1541
+ }
1542
+ ngOnInit() { }
1543
+ reset() {
1544
+ if (this.pinCode) {
1545
+ this.pinCode.setValue('');
1546
+ }
1547
+ }
1548
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PinInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1549
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PinInputComponent, isStandalone: true, selector: "val-pin-input", inputs: { props: "props" }, viewQueries: [{ propertyName: "pinCode", first: true, predicate: NgOtpInputComponent, descendants: true }], ngImport: i0, template: `
1550
+ <div class="otp">
1551
+ <ng-otp-input [formCtrl]="props.control" [config]="otpInputConfig"></ng-otp-input>
1552
+ </div>
1553
+ `, isInline: true, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.otp{text-align:center;margin-top:.25rem;font-family:var(--ion-default-font),Arial,sans-serif}.otp-input-box:focus{border-color:#0ff}\n"], dependencies: [{ kind: "ngmodule", type: NgOtpInputModule }, { kind: "component", type: i1$2.NgOtpInputComponent, selector: "ng-otp-input", inputs: ["config", "formCtrl"], outputs: ["onInputChange"] }] }); }
1554
+ }
1555
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PinInputComponent, decorators: [{
1556
+ type: Component,
1557
+ args: [{ selector: 'val-pin-input', standalone: true, imports: [NgOtpInputModule], template: `
1558
+ <div class="otp">
1559
+ <ng-otp-input [formCtrl]="props.control" [config]="otpInputConfig"></ng-otp-input>
1560
+ </div>
1561
+ `, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.otp{text-align:center;margin-top:.25rem;font-family:var(--ion-default-font),Arial,sans-serif}.otp-input-box:focus{border-color:#0ff}\n"] }]
1562
+ }], ctorParameters: () => [], propDecorators: { pinCode: [{
1563
+ type: ViewChild,
1564
+ args: [NgOtpInputComponent, { static: false }]
1565
+ }], props: [{
1566
+ type: Input
1567
+ }] } });
1568
+
1569
+ class TitleBlockComponent {
1570
+ constructor() { }
1571
+ ngOnInit() { }
1572
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TitleBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1573
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TitleBlockComponent, isStandalone: true, selector: "val-title-block", inputs: { props: "props" }, ngImport: i0, template: `
1574
+ <div [ngClass]="['titles-container', props.position]">
1575
+ <val-title
1576
+ *ngIf="props.aboveTitle"
1577
+ [props]="{
1578
+ content: props.aboveTitle.text | uppercase,
1579
+ color: props.aboveTitle.color,
1580
+ bold: false,
1581
+ size: props.aboveTitle.size,
1582
+ }"
1583
+ ></val-title>
1584
+ <val-display
1585
+ *ngIf="props.title"
1586
+ [props]="{
1587
+ content: props.title.text,
1588
+ color: props.title.color,
1589
+ size: props.title.size,
1590
+ }"
1591
+ ></val-display>
1592
+ <val-title
1593
+ *ngIf="props.bellowTitle"
1594
+ [props]="{
1595
+ content: props.bellowTitle.text,
1596
+ color: props.bellowTitle.color,
1597
+ bold: false,
1598
+ size: props.bellowTitle.size,
1599
+ }"
1600
+ ></val-title>
1601
+ </div>
1602
+ `, isInline: true, styles: ["val-button,val-title,val-display{display:inline-block}.titles-container{width:100%;padding:.25rem;display:flex;flex-direction:column;flex-wrap:wrap}.titles-container.left{align-content:flex-start;align-items:start}.titles-container.center{align-content:center;align-items:center;text-align:center}.titles-container.right{align-content:flex-end;align-items:end;text-align:end}@media (min-width: 768px){.titles-container{padding:.5rem}}\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: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }] }); }
1603
+ }
1604
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TitleBlockComponent, decorators: [{
1605
+ type: Component,
1606
+ args: [{ selector: 'val-title-block', standalone: true, imports: [CommonModule, TitleComponent, DisplayComponent], template: `
1607
+ <div [ngClass]="['titles-container', props.position]">
1608
+ <val-title
1609
+ *ngIf="props.aboveTitle"
1610
+ [props]="{
1611
+ content: props.aboveTitle.text | uppercase,
1612
+ color: props.aboveTitle.color,
1613
+ bold: false,
1614
+ size: props.aboveTitle.size,
1615
+ }"
1616
+ ></val-title>
1617
+ <val-display
1618
+ *ngIf="props.title"
1619
+ [props]="{
1620
+ content: props.title.text,
1621
+ color: props.title.color,
1622
+ size: props.title.size,
1623
+ }"
1624
+ ></val-display>
1625
+ <val-title
1626
+ *ngIf="props.bellowTitle"
1627
+ [props]="{
1628
+ content: props.bellowTitle.text,
1629
+ color: props.bellowTitle.color,
1630
+ bold: false,
1631
+ size: props.bellowTitle.size,
1632
+ }"
1633
+ ></val-title>
1634
+ </div>
1635
+ `, styles: ["val-button,val-title,val-display{display:inline-block}.titles-container{width:100%;padding:.25rem;display:flex;flex-direction:column;flex-wrap:wrap}.titles-container.left{align-content:flex-start;align-items:start}.titles-container.center{align-content:center;align-items:center;text-align:center}.titles-container.right{align-content:flex-end;align-items:end;text-align:end}@media (min-width: 768px){.titles-container{padding:.5rem}}\n"] }]
1636
+ }], ctorParameters: () => [], propDecorators: { props: [{
1637
+ type: Input
1638
+ }] } });
1639
+
1640
+ class ProgressStatusComponent {
1641
+ constructor() {
1642
+ this.currentIndex = 0;
1643
+ this.blinking = false;
1644
+ }
1645
+ ngOnInit() {
1646
+ setInterval(() => {
1647
+ this.blinking = !this.blinking;
1648
+ }, 1000);
1649
+ setInterval(() => {
1650
+ this.getNextMessage();
1651
+ }, 9000);
1652
+ }
1653
+ get Content() {
1654
+ return this.props.messages[this.currentIndex];
1655
+ }
1656
+ getNextMessage() {
1657
+ this.currentIndex = (this.currentIndex + 1) % this.props.messages.length;
1658
+ }
1659
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProgressStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1660
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ProgressStatusComponent, isStandalone: true, selector: "val-progress-status", inputs: { props: "props" }, ngImport: i0, template: `
1661
+ <div class="status-container">
1662
+ <div class="title-container">
1663
+ <val-title-block
1664
+ [props]="{
1665
+ position: 'center',
1666
+ aboveTitle: props.titles.aboveTitle,
1667
+ title: props.titles.title,
1668
+ bellowTitle: props.titles.bellowTitle,
1669
+ }"
1670
+ ></val-title-block>
1671
+ </div>
1672
+ <div class="progress-bar-container">
1673
+ <val-progress-bar
1674
+ [props]="{
1675
+ progress: props.progress,
1676
+ size: 'xlarge',
1677
+ color: props.color,
1678
+ rounded: true,
1679
+ type: 'determinate',
1680
+ buffer: 1,
1681
+ }"
1682
+ ></val-progress-bar>
1683
+ </div>
1684
+ <div class="subtitle-container">
1685
+ <div class="subtitle" [class.blink]="blinking">
1686
+ <val-text [props]="{ content: Content, color: 'medium', bold: false, size: props.size }"></val-text>
1687
+ </div>
1688
+ </div>
1689
+ </div>
1690
+ `, isInline: true, styles: [".status-container{min-height:6.25rem;margin:1rem .5rem}.progress-bar-container{max-width:60%;margin:0 auto}.title-container{margin-bottom:.5rem}.subtitle-container{width:100%;display:flex}.subtitle{padding:1rem;margin:0 auto;height:1rem}.blink{animation:blink 1s infinite alternate ease-in}@keyframes blink{0%{opacity:0;margin-top:6px}to{opacity:1;margin-top:0}}\n"], dependencies: [{ kind: "component", type: TitleBlockComponent, selector: "val-title-block", inputs: ["props"] }, { kind: "component", type: ProgressBarComponent, selector: "val-progress-bar", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
1691
+ }
1692
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProgressStatusComponent, decorators: [{
1693
+ type: Component,
1694
+ args: [{ selector: 'val-progress-status', standalone: true, imports: [TitleBlockComponent, ProgressBarComponent, TextComponent], template: `
1695
+ <div class="status-container">
1696
+ <div class="title-container">
1697
+ <val-title-block
1698
+ [props]="{
1699
+ position: 'center',
1700
+ aboveTitle: props.titles.aboveTitle,
1701
+ title: props.titles.title,
1702
+ bellowTitle: props.titles.bellowTitle,
1703
+ }"
1704
+ ></val-title-block>
1705
+ </div>
1706
+ <div class="progress-bar-container">
1707
+ <val-progress-bar
1708
+ [props]="{
1709
+ progress: props.progress,
1710
+ size: 'xlarge',
1711
+ color: props.color,
1712
+ rounded: true,
1713
+ type: 'determinate',
1714
+ buffer: 1,
1715
+ }"
1716
+ ></val-progress-bar>
1717
+ </div>
1718
+ <div class="subtitle-container">
1719
+ <div class="subtitle" [class.blink]="blinking">
1720
+ <val-text [props]="{ content: Content, color: 'medium', bold: false, size: props.size }"></val-text>
1721
+ </div>
1722
+ </div>
1723
+ </div>
1724
+ `, styles: [".status-container{min-height:6.25rem;margin:1rem .5rem}.progress-bar-container{max-width:60%;margin:0 auto}.title-container{margin-bottom:.5rem}.subtitle-container{width:100%;display:flex}.subtitle{padding:1rem;margin:0 auto;height:1rem}.blink{animation:blink 1s infinite alternate ease-in}@keyframes blink{0%{opacity:0;margin-top:6px}to{opacity:1;margin-top:0}}\n"] }]
1725
+ }], ctorParameters: () => [], propDecorators: { props: [{
1726
+ type: Input
1727
+ }] } });
1728
+
1729
+ class PrompterComponent {
1730
+ constructor() {
1731
+ this.onClick = new EventEmitter();
1732
+ }
1733
+ ngOnInit() { }
1734
+ clickHandler(token) {
1735
+ this.onClick.emit(token);
1736
+ }
1737
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PrompterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1738
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PrompterComponent, isStandalone: true, selector: "val-prompter", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
1739
+ <val-box
1740
+ class="teleprompter-container"
1741
+ [props]="{ icon: '', bordered: props.bordered, color: props.color, leftBorder: false }"
1742
+ >
1743
+ <div class="container" [class.teleprompter-content]="props.teleprompter" body>
1744
+ <div>
1745
+ <val-text
1746
+ [props]="{
1747
+ content: props.content,
1748
+ color: '',
1749
+ bold: true,
1750
+ size: 'large',
1751
+ }"
1752
+ ></val-text>
1753
+ </div>
1754
+ <div *ngIf="props.buttons">
1755
+ <val-button-group
1756
+ class="buttons-container"
1757
+ [props]="{ buttons: props.buttons, position: 'left', columned: false }"
1758
+ (onClick)="clickHandler($event)"
1759
+ ></val-button-group>
1760
+ </div>
1761
+ <div *ngIf="props.hrefs">
1762
+ <val-href class="link" *ngFor="let l of props.hrefs" [props]="l" (onClick)="clickHandler($event)"></val-href>
1763
+ </div>
1764
+ </div>
1765
+ </val-box>
1766
+ `, isInline: true, styles: ["@charset \"UTF-8\";.container{display:flex;align-items:center;justify-content:center}.teleprompter-container{overflow:hidden;width:100%}.teleprompter-content{white-space:nowrap;animation:scroll-left 15s linear infinite}@keyframes scroll-left{0%{transform:translate(100%)}to{transform:translate(-100%)}}.link{margin:0 .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: BoxComponent, selector: "val-box", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: HrefComponent, selector: "val-href", inputs: ["props"], outputs: ["onClick"] }] }); }
1767
+ }
1768
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PrompterComponent, decorators: [{
1769
+ type: Component,
1770
+ args: [{ selector: 'val-prompter', standalone: true, imports: [CommonModule, BoxComponent, ButtonGroupComponent, TextComponent, HrefComponent], template: `
1771
+ <val-box
1772
+ class="teleprompter-container"
1773
+ [props]="{ icon: '', bordered: props.bordered, color: props.color, leftBorder: false }"
1774
+ >
1775
+ <div class="container" [class.teleprompter-content]="props.teleprompter" body>
1776
+ <div>
1777
+ <val-text
1778
+ [props]="{
1779
+ content: props.content,
1780
+ color: '',
1781
+ bold: true,
1782
+ size: 'large',
1783
+ }"
1784
+ ></val-text>
1785
+ </div>
1786
+ <div *ngIf="props.buttons">
1787
+ <val-button-group
1788
+ class="buttons-container"
1789
+ [props]="{ buttons: props.buttons, position: 'left', columned: false }"
1790
+ (onClick)="clickHandler($event)"
1791
+ ></val-button-group>
1792
+ </div>
1793
+ <div *ngIf="props.hrefs">
1794
+ <val-href class="link" *ngFor="let l of props.hrefs" [props]="l" (onClick)="clickHandler($event)"></val-href>
1795
+ </div>
1796
+ </div>
1797
+ </val-box>
1798
+ `, styles: ["@charset \"UTF-8\";.container{display:flex;align-items:center;justify-content:center}.teleprompter-container{overflow:hidden;width:100%}.teleprompter-content{white-space:nowrap;animation:scroll-left 15s linear infinite}@keyframes scroll-left{0%{transform:translate(100%)}to{transform:translate(-100%)}}.link{margin:0 .25rem}\n"] }]
1799
+ }], ctorParameters: () => [], propDecorators: { props: [{
1800
+ type: Input
1801
+ }], onClick: [{
1802
+ type: Output
1803
+ }] } });
1804
+
1805
+ class RadioInputComponent {
1806
+ constructor() { }
1807
+ ngOnInit() { }
1808
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RadioInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1809
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: RadioInputComponent, isStandalone: true, selector: "val-radio-input", inputs: { props: "props" }, ngImport: i0, template: `
1810
+ <ion-radio-group [allowEmptySelection]="true" [formControl]="props.control">
1811
+ <ng-container *ngFor="let o of props.options">
1812
+ <ion-radio [value]="o.id">{{ o.name }}</ion-radio>
1813
+ <br />
1814
+ </ng-container>
1815
+ </ion-radio-group>
1816
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonRadioGroup, selector: "ion-radio-group", inputs: ["allowEmptySelection", "name", "value"] }, { kind: "component", type: IonRadio, selector: "ion-radio", inputs: ["alignment", "color", "disabled", "justify", "labelPlacement", "mode", "name", "value"] }] }); }
1817
+ }
1818
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RadioInputComponent, decorators: [{
1819
+ type: Component,
1820
+ args: [{ selector: 'val-radio-input', standalone: true, imports: [NgFor, ReactiveFormsModule, IonRadioGroup, IonRadio], template: `
1821
+ <ion-radio-group [allowEmptySelection]="true" [formControl]="props.control">
1822
+ <ng-container *ngFor="let o of props.options">
1823
+ <ion-radio [value]="o.id">{{ o.name }}</ion-radio>
1824
+ <br />
1825
+ </ng-container>
1826
+ </ion-radio-group>
1827
+ ` }]
1828
+ }], ctorParameters: () => [], propDecorators: { props: [{
1829
+ type: Input
1830
+ }] } });
1831
+
1832
+ class SearchbarComponent {
1833
+ constructor() {
1834
+ this.focusEvent = new EventEmitter();
1835
+ this.blurEvent = new EventEmitter();
1836
+ this.filterEvent = new EventEmitter();
1837
+ }
1838
+ onSearch($event) {
1839
+ const searchTerm = $event.detail.value;
1840
+ this.filterEvent.emit(searchTerm);
1841
+ }
1842
+ onFocus() {
1843
+ this.focusEvent.emit();
1844
+ }
1845
+ onBlur() {
1846
+ this.blurEvent.emit();
1847
+ }
1848
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1849
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchbarComponent, isStandalone: true, selector: "app-searchbar", inputs: { disabled: "disabled" }, outputs: { focusEvent: "focusEvent", blurEvent: "blurEvent", filterEvent: "filterEvent" }, ngImport: i0, template: `
1850
+ <ion-searchbar
1851
+ mode="ios"
1852
+ debounce="500"
1853
+ placeholder="Búsqueda"
1854
+ [disabled]="disabled"
1855
+ showCancelButton="focus"
1856
+ cancelButtonText="Cancelar"
1857
+ (ionInput)="onSearch($event)"
1858
+ (ionBlur)="onBlur()"
1859
+ (ionFocus)="onFocus()"
1860
+ >
1861
+ </ion-searchbar>
1862
+ `, isInline: true, styles: ["ion-searchbar{--cancel-button-color: var(--ion-color-dark);--background: var(--ion-color-light);font-family:var(--ion-default-font),Arial,sans-serif}\n"], dependencies: [{ kind: "component", type: IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }] }); }
1863
+ }
1864
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchbarComponent, decorators: [{
1865
+ type: Component,
1866
+ args: [{ selector: 'app-searchbar', standalone: true, imports: [IonSearchbar], template: `
1867
+ <ion-searchbar
1868
+ mode="ios"
1869
+ debounce="500"
1870
+ placeholder="Búsqueda"
1871
+ [disabled]="disabled"
1872
+ showCancelButton="focus"
1873
+ cancelButtonText="Cancelar"
1874
+ (ionInput)="onSearch($event)"
1875
+ (ionBlur)="onBlur()"
1876
+ (ionFocus)="onFocus()"
1877
+ >
1878
+ </ion-searchbar>
1879
+ `, styles: ["ion-searchbar{--cancel-button-color: var(--ion-color-dark);--background: var(--ion-color-light);font-family:var(--ion-default-font),Arial,sans-serif}\n"] }]
1880
+ }], ctorParameters: () => [], propDecorators: { disabled: [{
1881
+ type: Input
1882
+ }], focusEvent: [{
1883
+ type: Output
1884
+ }], blurEvent: [{
1885
+ type: Output
1886
+ }], filterEvent: [{
1887
+ type: Output
1888
+ }] } });
1889
+
1890
+ class TextInputComponent {
1891
+ constructor() { }
1892
+ ngOnInit() { }
1893
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1894
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TextInputComponent, isStandalone: true, selector: "val-text-input", inputs: { props: "props" }, ngImport: i0, template: ` <ion-input [formControl]="props.control" type="text" [placeholder]="props.placeholder"></ion-input> `, isInline: true, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }] }); }
1895
+ }
1896
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextInputComponent, decorators: [{
1897
+ type: Component,
1898
+ args: [{ selector: 'val-text-input', standalone: true, imports: [ReactiveFormsModule, IonInput], template: ` <ion-input [formControl]="props.control" type="text" [placeholder]="props.placeholder"></ion-input> `, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"] }]
1899
+ }], ctorParameters: () => [], propDecorators: { props: [{
1900
+ type: Input
1901
+ }] } });
1902
+
1903
+ class BannerComponent {
1904
+ constructor() {
1905
+ this.onClick = new EventEmitter();
1906
+ this.onClose = new EventEmitter();
1907
+ }
1908
+ ngOnInit() { }
1909
+ clickHandler(token) {
1910
+ this.onClick.emit(token);
1911
+ }
1912
+ closeHandler() {
1913
+ this.onClose.emit();
1914
+ }
1915
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1916
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BannerComponent, isStandalone: true, selector: "val-banner", inputs: { props: "props" }, outputs: { onClick: "onClick", onClose: "onClose" }, ngImport: i0, template: `
1917
+ <val-box
1918
+ [props]="{ icon: props.closable ? 'close-outline' : '', bordered: props.bordered, color: '' }"
1919
+ (onClick)="closeHandler()"
1920
+ >
1921
+ <div [ngClass]="['content-container', props.mode]" body>
1922
+ <val-title-block
1923
+ [props]="{
1924
+ position: props.mode === 'center' ? 'center' : 'left',
1925
+ aboveTitle: props.content.aboveTitle,
1926
+ title: props.content.title,
1927
+ bellowTitle: props.content.bellowTitle,
1928
+ }"
1929
+ ></val-title-block>
1930
+ <val-button-group
1931
+ class="buttons-container"
1932
+ [props]="{ position: props.mode === 'center' ? 'center' : 'left', buttons: props.actions, columned: false }"
1933
+ (onClick)="clickHandler($event)"
1934
+ ></val-button-group>
1935
+ </div>
1936
+ </val-box>
1937
+ `, isInline: true, styles: [".content-container{display:flex;justify-content:space-between}.content-container.center{flex-direction:column}.content-container.column{flex-direction:row}.content-container.row,.content-container.hybrid{flex-direction:column}@media (min-width: 768px){.content-container.hybrid{flex-direction:row}}.buttons-container{align-items:center;display:flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: BoxComponent, selector: "val-box", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: TitleBlockComponent, selector: "val-title-block", inputs: ["props"] }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }] }); }
1938
+ }
1939
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BannerComponent, decorators: [{
1940
+ type: Component,
1941
+ args: [{ selector: 'val-banner', standalone: true, imports: [CommonModule, BoxComponent, TitleBlockComponent, ButtonGroupComponent], template: `
1942
+ <val-box
1943
+ [props]="{ icon: props.closable ? 'close-outline' : '', bordered: props.bordered, color: '' }"
1944
+ (onClick)="closeHandler()"
1945
+ >
1946
+ <div [ngClass]="['content-container', props.mode]" body>
1947
+ <val-title-block
1948
+ [props]="{
1949
+ position: props.mode === 'center' ? 'center' : 'left',
1950
+ aboveTitle: props.content.aboveTitle,
1951
+ title: props.content.title,
1952
+ bellowTitle: props.content.bellowTitle,
1953
+ }"
1954
+ ></val-title-block>
1955
+ <val-button-group
1956
+ class="buttons-container"
1957
+ [props]="{ position: props.mode === 'center' ? 'center' : 'left', buttons: props.actions, columned: false }"
1958
+ (onClick)="clickHandler($event)"
1959
+ ></val-button-group>
1960
+ </div>
1961
+ </val-box>
1962
+ `, styles: [".content-container{display:flex;justify-content:space-between}.content-container.center{flex-direction:column}.content-container.column{flex-direction:row}.content-container.row,.content-container.hybrid{flex-direction:column}@media (min-width: 768px){.content-container.hybrid{flex-direction:row}}.buttons-container{align-items:center;display:flex}\n"] }]
1963
+ }], ctorParameters: () => [], propDecorators: { props: [{
1964
+ type: Input
1965
+ }], onClick: [{
1966
+ type: Output
1967
+ }], onClose: [{
1968
+ type: Output
1969
+ }] } });
1970
+
1971
+ class ToolbarComponent {
1972
+ constructor(navCtrl) {
1973
+ this.navCtrl = navCtrl;
1974
+ this.onClick = new EventEmitter();
1975
+ this.actionTypes = ToolbarActionType;
1976
+ }
1977
+ ngOnInit() { }
1978
+ goBack() {
1979
+ this.navCtrl.back();
1980
+ }
1981
+ rightActions() {
1982
+ return this.props.actions.filter(x => x.position === 'right');
1983
+ }
1984
+ leftActions() {
1985
+ return this.props.actions.filter(x => x.position === 'left');
1986
+ }
1987
+ someInRight() {
1988
+ return !!this.props.actions.find(x => x.position === 'right');
1989
+ }
1990
+ someInLeft() {
1991
+ return !!this.props.actions.find(x => x.position === 'left');
1992
+ }
1993
+ clickHandler(token) {
1994
+ this.onClick.emit(token);
1995
+ }
1996
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToolbarComponent, deps: [{ token: i1$3.NavController }], target: i0.ɵɵFactoryTarget.Component }); }
1997
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ToolbarComponent, isStandalone: true, selector: "val-toolbar", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
1998
+ <ion-toolbar [color]="props.color" [class.background]="props.color === 'background'">
1999
+ <ng-container *ngIf="props.withBack">
2000
+ <ion-buttons class="left-buttons" slot="start" *ngIf="props.withBack">
2001
+ <ion-button fill="clear" (click)="goBack()" [color]="props.textColor">
2002
+ <ion-icon name="chevron-back-outline" [slot]="props.backText ? 'start' : 'icon-only'"></ion-icon>
2003
+ <ion-text *ngIf="props.backText">{{ props.backText }}</ion-text>
2004
+ </ion-button>
2005
+ </ion-buttons>
2006
+ </ng-container>
2007
+ <ng-container *ngIf="props.withActions">
2008
+ <ion-buttons slot="end" *ngIf="someInRight()">
2009
+ <ng-container *ngFor="let action of rightActions()">
2010
+ <ion-button *ngIf="action.type === actionTypes.ICON" (click)="clickHandler(action.token)">
2011
+ <ion-icon slot="icon-only" [name]="action.description" color="dark"></ion-icon>
2012
+ </ion-button>
2013
+ <val-avatar
2014
+ *ngIf="action.type === actionTypes.AVATAR"
2015
+ [props]="{ size: 'small', image: action.description, default: '' }"
2016
+ (onClick)="clickHandler(action.token)"
2017
+ ></val-avatar>
2018
+ <val-image
2019
+ *ngIf="action.type === actionTypes.IMAGE"
2020
+ [props]="action.image"
2021
+ (click)="clickHandler(action.token)"
2022
+ ></val-image>
2023
+ <ion-button *ngIf="action.type === actionTypes.BUTTON" (click)="clickHandler(action.token)">{{
2024
+ action.description
2025
+ }}</ion-button>
2026
+ </ng-container>
2027
+ </ion-buttons>
2028
+ <ion-buttons slot="start" *ngIf="someInLeft()">
2029
+ <ng-container *ngFor="let action of leftActions()">
2030
+ <ion-button *ngIf="action.type === actionTypes.ICON" (click)="clickHandler(action.token)">
2031
+ <ion-icon slot="icon-only" [name]="action.description" color="dark"></ion-icon>
2032
+ </ion-button>
2033
+ <val-avatar
2034
+ *ngIf="action.type === actionTypes.AVATAR"
2035
+ [props]="{ size: 'small', image: action.description, default: '' }"
2036
+ (onClick)="clickHandler(action.token)"
2037
+ ></val-avatar>
2038
+ <val-image
2039
+ *ngIf="action.type === actionTypes.IMAGE"
2040
+ [props]="action.image"
2041
+ (click)="clickHandler(action.token)"
2042
+ ></val-image>
2043
+ <ion-button *ngIf="action.type === actionTypes.BUTTON" (click)="clickHandler(action.token)">{{
2044
+ action.description
2045
+ }}</ion-button>
2046
+ </ng-container>
2047
+ </ion-buttons>
2048
+ </ng-container>
2049
+ <ion-title *ngIf="props.title" [color]="props.textColor">{{ props.title }}</ion-title>
2050
+ <!-- experimental -->
2051
+ <ng-content select="[toolbar-bottom]"></ng-content>
2052
+ </ion-toolbar>
2053
+ `, isInline: true, styles: ["ion-button{font-family:var(--ion-default-font),Arial,sans-serif}.left-buttons{margin-left:-1rem}.background{background:var(--ion-background-color)}\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: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: AvatarComponent, selector: "val-avatar", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }] }); }
2054
+ }
2055
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToolbarComponent, decorators: [{
2056
+ type: Component,
2057
+ args: [{ selector: 'val-toolbar', standalone: true, imports: [
2058
+ CommonModule,
2059
+ IonToolbar,
2060
+ IonButtons,
2061
+ IonButton,
2062
+ IonIcon,
2063
+ IonText,
2064
+ IonTitle,
2065
+ AvatarComponent,
2066
+ ImageComponent,
2067
+ ], template: `
2068
+ <ion-toolbar [color]="props.color" [class.background]="props.color === 'background'">
2069
+ <ng-container *ngIf="props.withBack">
2070
+ <ion-buttons class="left-buttons" slot="start" *ngIf="props.withBack">
2071
+ <ion-button fill="clear" (click)="goBack()" [color]="props.textColor">
2072
+ <ion-icon name="chevron-back-outline" [slot]="props.backText ? 'start' : 'icon-only'"></ion-icon>
2073
+ <ion-text *ngIf="props.backText">{{ props.backText }}</ion-text>
2074
+ </ion-button>
2075
+ </ion-buttons>
2076
+ </ng-container>
2077
+ <ng-container *ngIf="props.withActions">
2078
+ <ion-buttons slot="end" *ngIf="someInRight()">
2079
+ <ng-container *ngFor="let action of rightActions()">
2080
+ <ion-button *ngIf="action.type === actionTypes.ICON" (click)="clickHandler(action.token)">
2081
+ <ion-icon slot="icon-only" [name]="action.description" color="dark"></ion-icon>
2082
+ </ion-button>
2083
+ <val-avatar
2084
+ *ngIf="action.type === actionTypes.AVATAR"
2085
+ [props]="{ size: 'small', image: action.description, default: '' }"
2086
+ (onClick)="clickHandler(action.token)"
2087
+ ></val-avatar>
2088
+ <val-image
2089
+ *ngIf="action.type === actionTypes.IMAGE"
2090
+ [props]="action.image"
2091
+ (click)="clickHandler(action.token)"
2092
+ ></val-image>
2093
+ <ion-button *ngIf="action.type === actionTypes.BUTTON" (click)="clickHandler(action.token)">{{
2094
+ action.description
2095
+ }}</ion-button>
2096
+ </ng-container>
2097
+ </ion-buttons>
2098
+ <ion-buttons slot="start" *ngIf="someInLeft()">
2099
+ <ng-container *ngFor="let action of leftActions()">
2100
+ <ion-button *ngIf="action.type === actionTypes.ICON" (click)="clickHandler(action.token)">
2101
+ <ion-icon slot="icon-only" [name]="action.description" color="dark"></ion-icon>
2102
+ </ion-button>
2103
+ <val-avatar
2104
+ *ngIf="action.type === actionTypes.AVATAR"
2105
+ [props]="{ size: 'small', image: action.description, default: '' }"
2106
+ (onClick)="clickHandler(action.token)"
2107
+ ></val-avatar>
2108
+ <val-image
2109
+ *ngIf="action.type === actionTypes.IMAGE"
2110
+ [props]="action.image"
2111
+ (click)="clickHandler(action.token)"
2112
+ ></val-image>
2113
+ <ion-button *ngIf="action.type === actionTypes.BUTTON" (click)="clickHandler(action.token)">{{
2114
+ action.description
2115
+ }}</ion-button>
2116
+ </ng-container>
2117
+ </ion-buttons>
2118
+ </ng-container>
2119
+ <ion-title *ngIf="props.title" [color]="props.textColor">{{ props.title }}</ion-title>
2120
+ <!-- experimental -->
2121
+ <ng-content select="[toolbar-bottom]"></ng-content>
2122
+ </ion-toolbar>
2123
+ `, styles: ["ion-button{font-family:var(--ion-default-font),Arial,sans-serif}.left-buttons{margin-left:-1rem}.background{background:var(--ion-background-color)}\n"] }]
2124
+ }], ctorParameters: () => [{ type: i1$3.NavController }], propDecorators: { props: [{
2125
+ type: Input
2126
+ }], onClick: [{
2127
+ type: Output
2128
+ }] } });
2129
+
2130
+ class FooterComponent {
2131
+ constructor() {
2132
+ this.onClick = new EventEmitter();
2133
+ }
2134
+ ngOnInit() { }
2135
+ clickHandler(token) {
2136
+ this.onClick.emit(token);
2137
+ }
2138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FooterComponent, isStandalone: true, selector: "val-footer", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
2140
+ <ion-footer
2141
+ [class.ion-no-border]="!props.bordered"
2142
+ [translucent]="props.translucent"
2143
+ [class.background]="props.toolbar.color === 'background'"
2144
+ >
2145
+ <val-toolbar
2146
+ *ngIf="props.toolbar.title || props.toolbar.withActions || props.toolbar.withBack"
2147
+ [props]="props.toolbar"
2148
+ (onClick)="clickHandler($event)"
2149
+ ></val-toolbar>
2150
+ <ng-content select="[extra]"></ng-content>
2151
+ </ion-footer>
2152
+ `, isInline: true, styles: [".background{background:var(--ion-background-color)}\n"], dependencies: [{ kind: "component", type: IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: ToolbarComponent, selector: "val-toolbar", inputs: ["props"], outputs: ["onClick"] }] }); }
2153
+ }
2154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FooterComponent, decorators: [{
2155
+ type: Component,
2156
+ args: [{ selector: 'val-footer', standalone: true, imports: [IonFooter, ToolbarComponent], template: `
2157
+ <ion-footer
2158
+ [class.ion-no-border]="!props.bordered"
2159
+ [translucent]="props.translucent"
2160
+ [class.background]="props.toolbar.color === 'background'"
2161
+ >
2162
+ <val-toolbar
2163
+ *ngIf="props.toolbar.title || props.toolbar.withActions || props.toolbar.withBack"
2164
+ [props]="props.toolbar"
2165
+ (onClick)="clickHandler($event)"
2166
+ ></val-toolbar>
2167
+ <ng-content select="[extra]"></ng-content>
2168
+ </ion-footer>
2169
+ `, styles: [".background{background:var(--ion-background-color)}\n"] }]
2170
+ }], ctorParameters: () => [], propDecorators: { props: [{
2171
+ type: Input
2172
+ }], onClick: [{
2173
+ type: Output
2174
+ }] } });
2175
+
2176
+ const maxLength = (field, max) => {
2177
+ return {
2178
+ validator: Validators.maxLength(max),
2179
+ error: `El campo ${field} no debe superar los ${max} caracteres.`,
2180
+ };
2181
+ };
2182
+
2183
+ class FormFooterComponent {
2184
+ constructor() {
2185
+ this.onSubmit = new EventEmitter();
2186
+ }
2187
+ ngOnInit() { }
2188
+ async submitHandler(token) {
2189
+ this.onSubmit.emit({ fields: this.form.value, token });
2190
+ }
2191
+ get actions() {
2192
+ if (!this.form) {
2193
+ return [];
2194
+ }
2195
+ if (this.form.valid) {
2196
+ this.action.state = ComponentStates.ENABLED;
2197
+ }
2198
+ return [this.action];
2199
+ }
2200
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2201
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormFooterComponent, isStandalone: true, selector: "val-form-footer", inputs: { form: "form", action: "action" }, outputs: { onSubmit: "onSubmit" }, ngImport: i0, template: `
2202
+ <val-footer
2203
+ [props]="{
2204
+ bordered: false,
2205
+ translucent: false,
2206
+ toolbar: {
2207
+ title: '',
2208
+ actions: [],
2209
+ color: 'background',
2210
+ withBack: false,
2211
+ withActions: false,
2212
+ },
2213
+ }"
2214
+ >
2215
+ <val-button-group
2216
+ extra
2217
+ [props]="{ buttons: actions, position: 'center', columned: false }"
2218
+ (onClick)="submitHandler($event)"
2219
+ ></val-button-group>
2220
+ </val-footer>
2221
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: FooterComponent, selector: "val-footer", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }] }); }
2222
+ }
2223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormFooterComponent, decorators: [{
2224
+ type: Component,
2225
+ args: [{ selector: 'val-form-footer', standalone: true, imports: [FooterComponent, ButtonGroupComponent], template: `
2226
+ <val-footer
2227
+ [props]="{
2228
+ bordered: false,
2229
+ translucent: false,
2230
+ toolbar: {
2231
+ title: '',
2232
+ actions: [],
2233
+ color: 'background',
2234
+ withBack: false,
2235
+ withActions: false,
2236
+ },
2237
+ }"
2238
+ >
2239
+ <val-button-group
2240
+ extra
2241
+ [props]="{ buttons: actions, position: 'center', columned: false }"
2242
+ (onClick)="submitHandler($event)"
2243
+ ></val-button-group>
2244
+ </val-footer>
2245
+ ` }]
2246
+ }], ctorParameters: () => [], propDecorators: { form: [{
2247
+ type: Input
2248
+ }], action: [{
2249
+ type: Input
2250
+ }], onSubmit: [{
2251
+ type: Output
2252
+ }] } });
2253
+
2254
+ const goToTop = (id) => {
2255
+ const element = document.getElementById(id);
2256
+ if (element) {
2257
+ element.scrollIntoView({
2258
+ block: 'start',
2259
+ inline: 'nearest',
2260
+ behavior: 'smooth',
2261
+ });
2262
+ }
2263
+ };
2264
+ const isAtEnd = (elementRef) => {
2265
+ const formElement = elementRef.nativeElement;
2266
+ const rect = formElement.getBoundingClientRect();
2267
+ const windowHeight = window.innerHeight;
2268
+ return rect.bottom <= windowHeight;
2269
+ };
2270
+
2271
+ class FormComponent {
2272
+ constructor(fb, elementRef) {
2273
+ this.fb = fb;
2274
+ this.elementRef = elementRef;
2275
+ this.onSubmit = new EventEmitter();
2276
+ this.onInvalid = new EventEmitter();
2277
+ this.types = InputType;
2278
+ }
2279
+ ngOnInit() {
2280
+ const formControls = {};
2281
+ this.props.sections.forEach(section => {
2282
+ section.fields.forEach(field => {
2283
+ formControls[field.name] = [undefined, field.validators || []];
2284
+ });
2285
+ });
2286
+ this.form = this.fb.group(formControls);
2287
+ }
2288
+ async submitHandler(token) {
2289
+ this.onSubmit.emit({ fields: this.form.value, token });
2290
+ }
2291
+ getControl(field) {
2292
+ return this.Form.get(field);
2293
+ }
2294
+ getFieldProp(field) {
2295
+ return {
2296
+ ...field,
2297
+ control: this.getControl(field.name),
2298
+ };
2299
+ }
2300
+ get isAtEndOfForm() {
2301
+ return isAtEnd(this.elementRef);
2302
+ }
2303
+ get Form() {
2304
+ return this.form;
2305
+ }
2306
+ get actions() {
2307
+ if (!this.form) {
2308
+ return [];
2309
+ }
2310
+ if (this.form.valid) {
2311
+ this.props.actions.state = ComponentStates.ENABLED;
2312
+ }
2313
+ if (this.props.state === ComponentStates.WORKING) {
2314
+ this.props.actions.state = ComponentStates.WORKING;
2315
+ }
2316
+ if (this.props.state === ComponentStates.ENABLED) {
2317
+ this.props.actions.state = ComponentStates.ENABLED;
2318
+ }
2319
+ if (this.props.state === ComponentStates.DISABLED) {
2320
+ this.props.actions.state = ComponentStates.DISABLED;
2321
+ }
2322
+ return [this.props.actions];
2323
+ }
2324
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormComponent, deps: [{ token: i1$1.FormBuilder }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
2325
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormComponent, isStandalone: true, selector: "val-form", inputs: { props: "props" }, outputs: { onSubmit: "onSubmit", onInvalid: "onInvalid" }, ngImport: i0, template: `
2326
+ <div class="container">
2327
+ <form [formGroup]="form">
2328
+ <val-display
2329
+ [props]="{
2330
+ content: props.name,
2331
+ color: 'dark',
2332
+ size: 'large',
2333
+ }"
2334
+ ></val-display>
2335
+ <div class="section" *ngFor="let s of props.sections">
2336
+ <val-title [props]="{ content: s.name, size: 'large', color: '', bold: false }"></val-title>
2337
+ <div class="input" *ngFor="let f of s.fields">
2338
+ <val-title [props]="{ content: f.label, size: 'small', color: 'dark', bold: false }"></val-title>
2339
+ <ng-container *ngIf="f.type === types.TEXT">
2340
+ <val-text-input [props]="getFieldProp(f)"></val-text-input>
2341
+ </ng-container>
2342
+ <ng-container *ngIf="f.type === types.CHECK">
2343
+ <val-check-input></val-check-input>
2344
+ </ng-container>
2345
+ <ng-container *ngIf="f.type === types.COMMENT">
2346
+ <val-comment-input [props]="getFieldProp(f)"></val-comment-input>
2347
+ </ng-container>
2348
+ <ng-container *ngIf="f.type === types.DATE">
2349
+ <val-date-input [props]="getFieldProp(f)"></val-date-input>
2350
+ </ng-container>
2351
+ <ng-container *ngIf="f.type === types.EMAIL">
2352
+ <val-email-input [props]="getFieldProp(f)"></val-email-input>
2353
+ </ng-container>
2354
+ <ng-container *ngIf="f.type === types.FILE">
2355
+ <val-file-input [props]="getFieldProp(f)"></val-file-input>
2356
+ </ng-container>
2357
+ <ng-container *ngIf="f.type === types.HOUR">
2358
+ <val-hour-input [props]="getFieldProp(f)"></val-hour-input>
2359
+ </ng-container>
2360
+ <ng-container *ngIf="f.type === types.NUMBER">
2361
+ <val-number-input [props]="getFieldProp(f)"></val-number-input>
2362
+ </ng-container>
2363
+ <ng-container *ngIf="f.type === types.PASSWORD">
2364
+ <val-password-input [props]="getFieldProp(f)"></val-password-input>
2365
+ </ng-container>
2366
+ <ng-container *ngIf="f.type === types.PIN_CODE">
2367
+ <val-pin-input [props]="getFieldProp(f)"></val-pin-input>
2368
+ </ng-container>
2369
+ <ng-container *ngIf="f.type === types.RADIO">
2370
+ <val-radio-input [props]="getFieldProp(f)"></val-radio-input>
2371
+ </ng-container>
2372
+ <ng-container *ngIf="f.type === types.SELECT">
2373
+ <!-- <val-select-input></val-select-input> -->
2374
+ </ng-container>
2375
+ <val-hint [props]="getFieldProp(f)"></val-hint>
2376
+ </div>
2377
+ <val-divider [props]="{ fill: 'solid', size: 'medium', color: 'medium' }"></val-divider>
2378
+ </div>
2379
+ <val-button-group
2380
+ [props]="{ buttons: actions, position: 'center', columned: false }"
2381
+ (onClick)="submitHandler($event)"
2382
+ ></val-button-group>
2383
+ </form>
2384
+ </div>
2385
+ `, isInline: true, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\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: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["props"] }, { kind: "component", type: CheckInputComponent, selector: "val-check-input" }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: DividerComponent, selector: "val-divider", inputs: ["props"] }, { kind: "component", type: HintComponent, selector: "val-hint", inputs: ["props"] }, { kind: "component", type: CommentInputComponent, selector: "val-comment-input", inputs: ["props"] }, { kind: "component", type: DateInputComponent, selector: "val-date-input", inputs: ["props"] }, { kind: "component", type: FileInputComponent, selector: "val-file-input", inputs: ["props"] }, { kind: "component", type: HourInputComponent, selector: "val-hour-input", inputs: ["props"] }, { kind: "component", type: EmailInputComponent, selector: "val-email-input", inputs: ["props"] }, { kind: "component", type: NumberInputComponent, selector: "val-number-input", inputs: ["props"] }, { kind: "component", type: RadioInputComponent, selector: "val-radio-input", inputs: ["props"] }, { kind: "component", type: PasswordInputComponent, selector: "val-password-input", inputs: ["props"] }, { kind: "component", type: PinInputComponent, selector: "val-pin-input", inputs: ["props"] }] }); }
2386
+ }
2387
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormComponent, decorators: [{
2388
+ type: Component,
2389
+ args: [{ selector: 'val-form', standalone: true, imports: [
2390
+ CommonModule,
2391
+ ReactiveFormsModule,
2392
+ DisplayComponent,
2393
+ TitleComponent,
2394
+ TextInputComponent,
2395
+ CheckInputComponent,
2396
+ ButtonGroupComponent,
2397
+ DividerComponent,
2398
+ HintComponent,
2399
+ CommentInputComponent,
2400
+ DateInputComponent,
2401
+ FileInputComponent,
2402
+ HourInputComponent,
2403
+ EmailInputComponent,
2404
+ NumberInputComponent,
2405
+ RadioInputComponent,
2406
+ PasswordInputComponent,
2407
+ PinInputComponent,
2408
+ ], template: `
2409
+ <div class="container">
2410
+ <form [formGroup]="form">
2411
+ <val-display
2412
+ [props]="{
2413
+ content: props.name,
2414
+ color: 'dark',
2415
+ size: 'large',
2416
+ }"
2417
+ ></val-display>
2418
+ <div class="section" *ngFor="let s of props.sections">
2419
+ <val-title [props]="{ content: s.name, size: 'large', color: '', bold: false }"></val-title>
2420
+ <div class="input" *ngFor="let f of s.fields">
2421
+ <val-title [props]="{ content: f.label, size: 'small', color: 'dark', bold: false }"></val-title>
2422
+ <ng-container *ngIf="f.type === types.TEXT">
2423
+ <val-text-input [props]="getFieldProp(f)"></val-text-input>
2424
+ </ng-container>
2425
+ <ng-container *ngIf="f.type === types.CHECK">
2426
+ <val-check-input></val-check-input>
2427
+ </ng-container>
2428
+ <ng-container *ngIf="f.type === types.COMMENT">
2429
+ <val-comment-input [props]="getFieldProp(f)"></val-comment-input>
2430
+ </ng-container>
2431
+ <ng-container *ngIf="f.type === types.DATE">
2432
+ <val-date-input [props]="getFieldProp(f)"></val-date-input>
2433
+ </ng-container>
2434
+ <ng-container *ngIf="f.type === types.EMAIL">
2435
+ <val-email-input [props]="getFieldProp(f)"></val-email-input>
2436
+ </ng-container>
2437
+ <ng-container *ngIf="f.type === types.FILE">
2438
+ <val-file-input [props]="getFieldProp(f)"></val-file-input>
2439
+ </ng-container>
2440
+ <ng-container *ngIf="f.type === types.HOUR">
2441
+ <val-hour-input [props]="getFieldProp(f)"></val-hour-input>
2442
+ </ng-container>
2443
+ <ng-container *ngIf="f.type === types.NUMBER">
2444
+ <val-number-input [props]="getFieldProp(f)"></val-number-input>
2445
+ </ng-container>
2446
+ <ng-container *ngIf="f.type === types.PASSWORD">
2447
+ <val-password-input [props]="getFieldProp(f)"></val-password-input>
2448
+ </ng-container>
2449
+ <ng-container *ngIf="f.type === types.PIN_CODE">
2450
+ <val-pin-input [props]="getFieldProp(f)"></val-pin-input>
2451
+ </ng-container>
2452
+ <ng-container *ngIf="f.type === types.RADIO">
2453
+ <val-radio-input [props]="getFieldProp(f)"></val-radio-input>
2454
+ </ng-container>
2455
+ <ng-container *ngIf="f.type === types.SELECT">
2456
+ <!-- <val-select-input></val-select-input> -->
2457
+ </ng-container>
2458
+ <val-hint [props]="getFieldProp(f)"></val-hint>
2459
+ </div>
2460
+ <val-divider [props]="{ fill: 'solid', size: 'medium', color: 'medium' }"></val-divider>
2461
+ </div>
2462
+ <val-button-group
2463
+ [props]="{ buttons: actions, position: 'center', columned: false }"
2464
+ (onClick)="submitHandler($event)"
2465
+ ></val-button-group>
2466
+ </form>
2467
+ </div>
2468
+ `, styles: [".section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"] }]
2469
+ }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: i0.ElementRef }], propDecorators: { props: [{
2470
+ type: Input
2471
+ }], onSubmit: [{
2472
+ type: Output
2473
+ }], onInvalid: [{
2474
+ type: Output
2475
+ }] } });
2476
+
2477
+ class HeaderComponent {
2478
+ constructor() {
2479
+ this.onClick = new EventEmitter();
2480
+ }
2481
+ ngOnInit() { }
2482
+ clickHandler(token) {
2483
+ this.onClick.emit(token);
2484
+ }
2485
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2486
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HeaderComponent, isStandalone: true, selector: "val-header", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
2487
+ <ion-header [class.ion-no-border]="!props.bordered" [translucent]="props.translucent">
2488
+ <val-toolbar [props]="props.toolbar" (onClick)="clickHandler($event)"></val-toolbar>
2489
+ </ion-header>
2490
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: ToolbarComponent, selector: "val-toolbar", inputs: ["props"], outputs: ["onClick"] }] }); }
2491
+ }
2492
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HeaderComponent, decorators: [{
2493
+ type: Component,
2494
+ args: [{ selector: 'val-header', standalone: true, imports: [NgClass, IonHeader, ToolbarComponent], template: `
2495
+ <ion-header [class.ion-no-border]="!props.bordered" [translucent]="props.translucent">
2496
+ <val-toolbar [props]="props.toolbar" (onClick)="clickHandler($event)"></val-toolbar>
2497
+ </ion-header>
2498
+ ` }]
2499
+ }], ctorParameters: () => [], propDecorators: { props: [{
2500
+ type: Input
2501
+ }], onClick: [{
2502
+ type: Output
2503
+ }] } });
2504
+
2505
+ class NoContentComponent {
2506
+ constructor() {
2507
+ this.onClick = new EventEmitter();
2508
+ }
2509
+ ngOnInit() { }
2510
+ onClickHandler(token) {
2511
+ this.onClick.emit(token);
2512
+ }
2513
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NoContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2514
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NoContentComponent, isStandalone: true, selector: "val-no-content", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
2515
+ <val-image class="image-container" [props]="props.image"></val-image>
2516
+ <div>
2517
+ <val-banner [props]="props.content" (onClick)="onClickHandler($event)"></val-banner>
2518
+ </div>
2519
+ `, isInline: true, styles: [".image-container{display:flex;justify-content:center;margin-bottom:1rem}val-image .image{margin:0 auto}\n"], dependencies: [{ kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }, { kind: "component", type: BannerComponent, selector: "val-banner", inputs: ["props"], outputs: ["onClick", "onClose"] }] }); }
2520
+ }
2521
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NoContentComponent, decorators: [{
2522
+ type: Component,
2523
+ args: [{ selector: 'val-no-content', standalone: true, imports: [ImageComponent, BannerComponent], template: `
2524
+ <val-image class="image-container" [props]="props.image"></val-image>
2525
+ <div>
2526
+ <val-banner [props]="props.content" (onClick)="onClickHandler($event)"></val-banner>
2527
+ </div>
2528
+ `, styles: [".image-container{display:flex;justify-content:center;margin-bottom:1rem}val-image .image{margin:0 auto}\n"] }]
2529
+ }], ctorParameters: () => [], propDecorators: { props: [{
2530
+ type: Input
2531
+ }], onClick: [{
2532
+ type: Output
2533
+ }] } });
2534
+
2535
+ var MOTION;
2536
+ (function (MOTION) {
2537
+ MOTION[MOTION["BACKWARD"] = 0] = "BACKWARD";
2538
+ MOTION[MOTION["FORWARD"] = 1] = "FORWARD";
2539
+ MOTION[MOTION["RETRY"] = 2] = "RETRY";
2540
+ })(MOTION || (MOTION = {}));
2541
+
2542
+ class WizardFooterComponent {
2543
+ constructor() {
2544
+ this.onClick = new EventEmitter();
2545
+ this.wrapperId = 'wizard-wrapper';
2546
+ }
2547
+ ngOnInit() { }
2548
+ clickHandler(token) {
2549
+ if (!token) {
2550
+ return;
2551
+ }
2552
+ if (token.includes('right')) {
2553
+ this.tryToStep(MOTION.FORWARD);
2554
+ }
2555
+ if (token.includes('left')) {
2556
+ this.tryToStep(MOTION.BACKWARD);
2557
+ }
2558
+ }
2559
+ get Current() {
2560
+ return this.props.steps[this.props.current];
2561
+ }
2562
+ get Progress() {
2563
+ if (this.props.steps && this.props.current) {
2564
+ return this.props.current / Object.keys(this.props.steps).length;
2565
+ }
2566
+ return 0;
2567
+ }
2568
+ get actions() {
2569
+ if (this.props.state === ComponentStates.ERROR && this.Current.buttons.length > 1) {
2570
+ this.Current.buttons[1].state = ComponentStates.DISABLED;
2571
+ }
2572
+ if (this.props.current === 1 && this.Current.buttons.length > 1) {
2573
+ return [this.Current.buttons[1]];
2574
+ }
2575
+ return this.Current.buttons;
2576
+ }
2577
+ tryToStep(motion) {
2578
+ this.onClick.emit({ current: this.props.current, motion });
2579
+ }
2580
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2581
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: WizardFooterComponent, isStandalone: true, selector: "val-wizard-footer", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
2582
+ <val-footer
2583
+ [props]="{
2584
+ bordered: false,
2585
+ translucent: false,
2586
+ toolbar: {
2587
+ title: '',
2588
+ actions: [],
2589
+ color: 'background',
2590
+ withBack: false,
2591
+ withActions: false,
2592
+ },
2593
+ }"
2594
+ >
2595
+ <val-progress-bar
2596
+ extra
2597
+ [props]="{ progress: Progress, color: '', type: 'determinate', buffer: 1, size: 'small', rounded: false }"
2598
+ ></val-progress-bar>
2599
+ <val-button-group
2600
+ extra
2601
+ [props]="{ buttons: actions, position: 'left', columned: false }"
2602
+ position="spaced"
2603
+ (onClick)="clickHandler($event)"
2604
+ ></val-button-group>
2605
+ </val-footer>
2606
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: FooterComponent, selector: "val-footer", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: ProgressBarComponent, selector: "val-progress-bar", inputs: ["props"] }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }] }); }
2607
+ }
2608
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardFooterComponent, decorators: [{
2609
+ type: Component,
2610
+ args: [{ selector: 'val-wizard-footer', standalone: true, imports: [FooterComponent, ProgressBarComponent, ButtonGroupComponent], template: `
2611
+ <val-footer
2612
+ [props]="{
2613
+ bordered: false,
2614
+ translucent: false,
2615
+ toolbar: {
2616
+ title: '',
2617
+ actions: [],
2618
+ color: 'background',
2619
+ withBack: false,
2620
+ withActions: false,
2621
+ },
2622
+ }"
2623
+ >
2624
+ <val-progress-bar
2625
+ extra
2626
+ [props]="{ progress: Progress, color: '', type: 'determinate', buffer: 1, size: 'small', rounded: false }"
2627
+ ></val-progress-bar>
2628
+ <val-button-group
2629
+ extra
2630
+ [props]="{ buttons: actions, position: 'left', columned: false }"
2631
+ position="spaced"
2632
+ (onClick)="clickHandler($event)"
2633
+ ></val-button-group>
2634
+ </val-footer>
2635
+ ` }]
2636
+ }], ctorParameters: () => [], propDecorators: { props: [{
2637
+ type: Input
2638
+ }], onClick: [{
2639
+ type: Output
2640
+ }] } });
2641
+
2642
+ class WizardComponent {
2643
+ constructor() {
2644
+ this.onClick = new EventEmitter();
2645
+ this.wrapperId = 'wizard-wrapper';
2646
+ }
2647
+ ngOnInit() { }
2648
+ working() {
2649
+ this.props.state = ComponentStates.WORKING;
2650
+ this.Current.buttons.map(x => {
2651
+ x.state = ComponentStates.DISABLED;
2652
+ });
2653
+ }
2654
+ done() {
2655
+ if (this.props.state === ComponentStates.ENABLED) {
2656
+ return;
2657
+ }
2658
+ this.props.state = ComponentStates.ENABLED;
2659
+ this.Current.buttons.map(x => {
2660
+ x.state = ComponentStates.ENABLED;
2661
+ });
2662
+ }
2663
+ get Current() {
2664
+ return this.props.steps[this.props.current];
2665
+ }
2666
+ setCurrent(newStep) {
2667
+ if (newStep === this.props.current) {
2668
+ return;
2669
+ }
2670
+ this.props.current = newStep;
2671
+ goToTop(this.wrapperId);
2672
+ }
2673
+ setError(error) {
2674
+ if (this.props.state === ComponentStates.ERROR) {
2675
+ return;
2676
+ }
2677
+ this.props.error.titles.content.content.bellowTitle.text = error;
2678
+ this.props.state = ComponentStates.ERROR;
2679
+ goToTop(this.wrapperId);
2680
+ }
2681
+ reset() {
2682
+ this.props.error.titles.content.content.bellowTitle.text = '';
2683
+ this.done();
2684
+ }
2685
+ clickHandler(token) {
2686
+ if (!token) {
2687
+ return;
2688
+ }
2689
+ if (token.includes('retry')) {
2690
+ this.reset();
2691
+ }
2692
+ this.onClick.emit({ current: this.props.current, motion: MOTION.RETRY });
2693
+ }
2694
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2695
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: WizardComponent, isStandalone: true, selector: "val-wizard", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
2696
+ <div [id]="wrapperId" class="wrapper">
2697
+ <ng-container *ngIf="props.state !== 'ERROR'">
2698
+ <val-no-content [props]="Current.titles"></val-no-content>
2699
+ <div class="step">
2700
+ <div *ngIf="props.state === 'WORKING'">
2701
+ <val-content-loader color="dark" size="large" text="Por favor espere..."></val-content-loader>
2702
+ </div>
2703
+ <ng-content select="[step]"></ng-content>
2704
+ </div>
2705
+ </ng-container>
2706
+ <ng-container *ngIf="props.state === 'ERROR'">
2707
+ <val-no-content [props]="props.error.titles" (onClick)="clickHandler($event)"></val-no-content>
2708
+ </ng-container>
2709
+ </div>
2710
+ `, isInline: true, styles: [".wrapper{height:auto;display:flex;flex-direction:column;justify-content:space-between;position:relative}.step{min-height:9.375rem;margin:16px 0;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NoContentComponent, selector: "val-no-content", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: ContentLoaderComponent, selector: "val-content-loader", inputs: ["props"] }] }); }
2711
+ }
2712
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardComponent, decorators: [{
2713
+ type: Component,
2714
+ args: [{ selector: 'val-wizard', standalone: true, imports: [CommonModule, NoContentComponent, ContentLoaderComponent], template: `
2715
+ <div [id]="wrapperId" class="wrapper">
2716
+ <ng-container *ngIf="props.state !== 'ERROR'">
2717
+ <val-no-content [props]="Current.titles"></val-no-content>
2718
+ <div class="step">
2719
+ <div *ngIf="props.state === 'WORKING'">
2720
+ <val-content-loader color="dark" size="large" text="Por favor espere..."></val-content-loader>
2721
+ </div>
2722
+ <ng-content select="[step]"></ng-content>
2723
+ </div>
2724
+ </ng-container>
2725
+ <ng-container *ngIf="props.state === 'ERROR'">
2726
+ <val-no-content [props]="props.error.titles" (onClick)="clickHandler($event)"></val-no-content>
2727
+ </ng-container>
2728
+ </div>
2729
+ `, styles: [".wrapper{height:auto;display:flex;flex-direction:column;justify-content:space-between;position:relative}.step{min-height:9.375rem;margin:16px 0;text-align:center}\n"] }]
2730
+ }], ctorParameters: () => [], propDecorators: { props: [{
2731
+ type: Input
2732
+ }], onClick: [{
2733
+ type: Output
2734
+ }] } });
2735
+
2736
+ class LayoutComponent {
2737
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2738
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LayoutComponent, isStandalone: true, selector: "val-layout", ngImport: i0, template: `
2739
+ <div class="layout-container">
2740
+ <ng-content></ng-content>
2741
+ </div>
2742
+ `, isInline: true, styles: [".layout-container{margin:0 auto;padding:0 1rem;width:100%;box-sizing:border-box;margin-bottom:1rem}@media (max-width: 768px){.layout-container{max-width:100%}}@media (min-width: 768px){.layout-container{max-width:60rem;margin-bottom:1.5rem}}@media (min-width: 1200px){.layout-container{max-width:75rem}}\n"] }); }
2743
+ }
2744
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutComponent, decorators: [{
2745
+ type: Component,
2746
+ args: [{ selector: 'val-layout', standalone: true, imports: [], template: `
2747
+ <div class="layout-container">
2748
+ <ng-content></ng-content>
2749
+ </div>
2750
+ `, styles: [".layout-container{margin:0 auto;padding:0 1rem;width:100%;box-sizing:border-box;margin-bottom:1rem}@media (max-width: 768px){.layout-container{max-width:100%}}@media (min-width: 768px){.layout-container{max-width:60rem;margin-bottom:1.5rem}}@media (min-width: 1200px){.layout-container{max-width:75rem}}\n"] }]
2751
+ }] });
2752
+
2753
+ class SimpleComponent {
2754
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2755
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SimpleComponent, isStandalone: true, selector: "val-simple", inputs: { props: "props" }, ngImport: i0, template: `
2756
+ <val-header [props]="props.header" />
2757
+
2758
+ <ion-content [fullscreen]="true">
2759
+ <ion-header collapse="condense">
2760
+ <ion-toolbar>
2761
+ <ion-title size="large">{{ props.pageTitle }}</ion-title>
2762
+ </ion-toolbar>
2763
+ </ion-header>
2764
+ <div *ngIf="props.pageDescription">
2765
+ <ion-text>{{ props.pageDescription }}</ion-text>
2766
+ </div>
2767
+ <val-divider *ngIf="props.withDivider" [props]="{ fill: 'solid', size: 'medium', color: 'dark' }" />
2768
+ <val-layout>
2769
+ <ng-content></ng-content>
2770
+ </val-layout>
2771
+ </ion-content>
2772
+ `, isInline: true, styles: [".layout-container{margin:0 auto;padding:0 1rem;width:100%;box-sizing:border-box;margin-bottom:1rem}@media (max-width: 768px){.layout-container{max-width:100%}}@media (min-width: 768px){.layout-container{max-width:60rem;margin-bottom:1.5rem}}@media (min-width: 1200px){.layout-container{max-width:75rem}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: HeaderComponent, selector: "val-header", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: LayoutComponent, selector: "val-layout" }, { kind: "component", type: DividerComponent, selector: "val-divider", inputs: ["props"] }] }); }
2773
+ }
2774
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SimpleComponent, decorators: [{
2775
+ type: Component,
2776
+ args: [{ selector: 'val-simple', standalone: true, imports: [
2777
+ NgIf,
2778
+ IonHeader,
2779
+ IonToolbar,
2780
+ IonTitle,
2781
+ IonText,
2782
+ IonContent,
2783
+ ButtonComponent,
2784
+ HeaderComponent,
2785
+ LayoutComponent,
2786
+ DividerComponent,
2787
+ ], template: `
2788
+ <val-header [props]="props.header" />
2789
+
2790
+ <ion-content [fullscreen]="true">
2791
+ <ion-header collapse="condense">
2792
+ <ion-toolbar>
2793
+ <ion-title size="large">{{ props.pageTitle }}</ion-title>
2794
+ </ion-toolbar>
2795
+ </ion-header>
2796
+ <div *ngIf="props.pageDescription">
2797
+ <ion-text>{{ props.pageDescription }}</ion-text>
2798
+ </div>
2799
+ <val-divider *ngIf="props.withDivider" [props]="{ fill: 'solid', size: 'medium', color: 'dark' }" />
2800
+ <val-layout>
2801
+ <ng-content></ng-content>
2802
+ </val-layout>
2803
+ </ion-content>
2804
+ `, styles: [".layout-container{margin:0 auto;padding:0 1rem;width:100%;box-sizing:border-box;margin-bottom:1rem}@media (max-width: 768px){.layout-container{max-width:100%}}@media (min-width: 768px){.layout-container{max-width:60rem;margin-bottom:1.5rem}}@media (min-width: 1200px){.layout-container{max-width:75rem}}\n"] }]
2805
+ }], propDecorators: { props: [{
2806
+ type: Input
2807
+ }] } });
2808
+
2809
+ class TextContent {
2810
+ constructor(text) {
2811
+ this.text = text;
2812
+ }
2813
+ get Content() {
2814
+ return this.text;
2815
+ }
2816
+ }
2817
+ var LangOption;
2818
+ (function (LangOption) {
2819
+ LangOption["ES"] = "es";
2820
+ LangOption["EN"] = "en";
2821
+ })(LangOption || (LangOption = {}));
2822
+
2823
+ class LocalStorageService {
2824
+ static set(reference, value) {
2825
+ localStorage.setItem(reference, JSON.stringify(value));
2826
+ }
2827
+ static get(reference) {
2828
+ const value = localStorage.getItem(reference);
2829
+ return JSON.parse(value);
2830
+ }
2831
+ static remove(reference) {
2832
+ localStorage.removeItem(reference);
2833
+ }
2834
+ static clear() {
2835
+ localStorage.clear();
2836
+ }
2837
+ }
2838
+
2839
+ const LANG = 'LANG';
2840
+ const THEME = 'THEME';
2841
+
2842
+ const ValtechConfigService = new InjectionToken('ValtechConfig');
2843
+
2844
+ class LangService {
2845
+ constructor(config) {
2846
+ this.default = LangOption.ES;
2847
+ console.log('injected config: ', config);
2848
+ this.content = config.content;
2849
+ this.config = config;
2850
+ const current = LocalStorageService.get(LANG);
2851
+ this.selectedLang = new BehaviorSubject(current || this.default);
2852
+ }
2853
+ Text(className) {
2854
+ return this.content[className].Content[this.selectedLang.value];
2855
+ }
2856
+ get Lang() {
2857
+ return this.selectedLang.value;
2858
+ }
2859
+ set Lang(lang) {
2860
+ this.selectedLang.next(lang);
2861
+ LocalStorageService.set(LANG, lang);
2862
+ }
2863
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LangService, deps: [{ token: ValtechConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2864
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LangService, providedIn: 'root' }); }
2865
+ }
2866
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LangService, decorators: [{
2867
+ type: Injectable,
2868
+ args: [{
2869
+ providedIn: 'root',
2870
+ }]
2871
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
2872
+ type: Inject,
2873
+ args: [ValtechConfigService]
2874
+ }] }] });
2875
+
2876
+ var ThemeOption;
2877
+ (function (ThemeOption) {
2878
+ ThemeOption["LIGHT"] = "light";
2879
+ ThemeOption["DARK"] = "dark";
2880
+ ThemeOption["AUTO"] = "auto";
2881
+ })(ThemeOption || (ThemeOption = {}));
2882
+ class ThemeService {
2883
+ constructor() {
2884
+ this.lightToggle = false;
2885
+ this.darkToggle = false;
2886
+ this.autoToggle = false;
2887
+ this.currentOption = ThemeOption.AUTO;
2888
+ this.themeOptions = ThemeOption;
2889
+ this.prefersDark = false;
2890
+ this.default = ThemeOption.AUTO;
2891
+ const current = LocalStorageService.get(THEME);
2892
+ console.log('💡 ThemeConfig current::: ', current);
2893
+ this.theme = new BehaviorSubject(current || this.default);
2894
+ this.currentOption = this.Theme;
2895
+ console.log('💡 ThemeConfig this.currentOption::: ', this.currentOption);
2896
+ this.toggleUserPreference(this.currentOption);
2897
+ const prefersDarkQuery = window.matchMedia('(prefers-color-scheme: dark)');
2898
+ this.prefersDark = prefersDarkQuery.matches;
2899
+ this.handleAutoConfiguration();
2900
+ prefersDarkQuery.addEventListener('change', mediaQuery => {
2901
+ console.log('💡 ThemeConfig addEventListener change::: ', mediaQuery);
2902
+ this.prefersDark = mediaQuery.matches;
2903
+ this.handleAutoConfiguration();
2904
+ });
2905
+ }
2906
+ handleAutoConfiguration() {
2907
+ if (this.prefersDark && this.currentOption === ThemeOption.AUTO) {
2908
+ console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);
2909
+ this.toggleUserPreference(ThemeOption.AUTO);
2910
+ }
2911
+ if (!this.prefersDark && this.currentOption === ThemeOption.AUTO) {
2912
+ console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);
2913
+ this.toggleUserPreference(ThemeOption.AUTO);
2914
+ }
2915
+ }
2916
+ handleDarkPreference() {
2917
+ this.toggleTheme(ThemeOption.DARK, true);
2918
+ this.toggleTheme(ThemeOption.LIGHT, false);
2919
+ }
2920
+ handleLightPreference() {
2921
+ this.toggleTheme(ThemeOption.LIGHT, true);
2922
+ this.toggleTheme(ThemeOption.DARK, false);
2923
+ }
2924
+ get Theme() {
2925
+ return this.theme.value;
2926
+ }
2927
+ set Theme(theme) {
2928
+ this.theme.next(theme);
2929
+ LocalStorageService.set(THEME, theme);
543
2930
  }
544
2931
  toggleTheme(name, shouldAdd) {
545
2932
  console.log('toggleTheme::: ', name, shouldAdd);
@@ -578,23 +2965,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
578
2965
  }]
579
2966
  }], ctorParameters: () => [] });
580
2967
 
581
- const goToTop = (id) => {
582
- const element = document.getElementById(id);
583
- if (element) {
584
- element.scrollIntoView({
585
- block: 'start',
586
- inline: 'nearest',
587
- behavior: 'smooth',
588
- });
589
- }
590
- };
591
- const isAtEnd = (elementRef) => {
592
- const formElement = elementRef.nativeElement;
593
- const rect = formElement.getBoundingClientRect();
594
- const windowHeight = window.innerHeight;
595
- return rect.bottom <= windowHeight;
596
- };
597
-
598
2968
  /*
599
2969
  * Public API Surface of valtech-components
600
2970
  */
@@ -606,5 +2976,5 @@ const isAtEnd = (elementRef) => {
606
2976
  * Generated bundle index. Do not edit.
607
2977
  */
608
2978
 
609
- export { ActionType, AvatarComponent, BaseDefault, ButtonComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, ComponentStates, DownloadService, Icon, InputType, LangOption, LangService, LayoutComponent, LocalStorageService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, TextContent, ThemeOption, ThemeService, ValtechConfigService, goToTop, isAtEnd };
2979
+ export { ActionType, AlertBoxComponent, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CardSection, CardType, CheckInputComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CommentInputComponent, ComponentStates, ContentLoaderComponent, DateInputComponent, DisplayComponent, DividerComponent, DownloadService, EmailInputComponent, FileInputComponent, FooterComponent, FormComponent, FormFooterComponent, HeaderComponent, HintComponent, HourInputComponent, HrefComponent, Icon, IconComponent, ImageComponent, InputType, LangOption, LangService, LayoutComponent, LinkComponent, LinksCakeComponent, LocalStorageService, MOTION, NoContentComponent, NotesBoxComponent, NumberInputComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PasswordInputComponent, PinInputComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProgressBarComponent, ProgressStatusComponent, PrompterComponent, RadioInputComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SimpleComponent, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, TextComponent, TextContent, TextInputComponent, ThemeOption, ThemeService, TitleBlockComponent, TitleComponent, ToolbarActionType, ToolbarComponent, ValtechConfigService, WizardComponent, WizardFooterComponent, goToTop, isAtEnd, maxLength };
610
2980
  //# sourceMappingURL=valtech-components.mjs.map