valtech-components 4.0.963 → 4.0.964

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 (52) hide show
  1. package/esm2022/lib/components/atoms/notice/notice.component.mjs +3 -3
  2. package/esm2022/lib/components/atoms/rights-footer/rights-footer.component.mjs +2 -2
  3. package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +3 -3
  4. package/esm2022/lib/components/molecules/date-picker/date-picker.component.mjs +5 -5
  5. package/esm2022/lib/components/molecules/empty-state/empty-state.component.mjs +3 -3
  6. package/esm2022/lib/components/molecules/feedback-form/feedback-form.component.mjs +3 -3
  7. package/esm2022/lib/components/molecules/field-options-editor/field-options-editor.component.mjs +3 -3
  8. package/esm2022/lib/components/molecules/footer-links/footer-links.component.mjs +3 -3
  9. package/esm2022/lib/components/molecules/image-crop/image-crop.component.mjs +3 -3
  10. package/esm2022/lib/components/molecules/linked-providers/linked-providers.component.mjs +3 -3
  11. package/esm2022/lib/components/molecules/multi-select-search/multi-select-search.component.mjs +3 -3
  12. package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +3 -3
  13. package/esm2022/lib/components/molecules/option-cards/option-cards.component.mjs +3 -3
  14. package/esm2022/lib/components/molecules/permission-selector/permission-selector.component.mjs +3 -3
  15. package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +3 -3
  16. package/esm2022/lib/components/molecules/request-form/request-form.component.mjs +3 -3
  17. package/esm2022/lib/components/molecules/update-banner/update-banner.component.mjs +3 -3
  18. package/esm2022/lib/components/organisms/access-request-view/access-request-view.component.mjs +3 -3
  19. package/esm2022/lib/components/organisms/api-keys-modal/api-keys-modal.component.mjs +5 -5
  20. package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +3 -3
  21. package/esm2022/lib/components/organisms/cookie-settings/cookie-settings.component.mjs +3 -3
  22. package/esm2022/lib/components/organisms/delete-account-modal/delete-account-modal.component.mjs +3 -3
  23. package/esm2022/lib/components/organisms/field-list/field-list.component.mjs +3 -3
  24. package/esm2022/lib/components/organisms/form/form.component.mjs +3 -3
  25. package/esm2022/lib/components/organisms/infinite-list/infinite-list.component.mjs +5 -5
  26. package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +9 -9
  27. package/esm2022/lib/components/organisms/login-attempt-modal/login-attempt-modal.component.mjs +6 -6
  28. package/esm2022/lib/components/organisms/member-detail-modal/member-detail-modal.component.mjs +3 -3
  29. package/esm2022/lib/components/organisms/member-import-modal/member-import-modal.component.mjs +3 -3
  30. package/esm2022/lib/components/organisms/menu/menu.component.mjs +3 -3
  31. package/esm2022/lib/components/organisms/mfa-modal/mfa-modal.component.mjs +3 -3
  32. package/esm2022/lib/components/organisms/notification-preferences-view/notification-preferences-view.component.mjs +5 -5
  33. package/esm2022/lib/components/organisms/notifications-view/notifications-view.component.mjs +3 -3
  34. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +3 -3
  35. package/esm2022/lib/components/organisms/permissions-view/permissions-view.component.mjs +9 -9
  36. package/esm2022/lib/components/organisms/request-review-panel/request-review-panel.component.mjs +3 -3
  37. package/esm2022/lib/components/organisms/role-manager/role-manager.component.mjs +5 -5
  38. package/esm2022/lib/components/organisms/security-view/security-view.component.mjs +5 -5
  39. package/esm2022/lib/components/organisms/session-list-modal/session-list-modal.component.mjs +3 -3
  40. package/esm2022/lib/components/organisms/transfer-ownership-modal/transfer-ownership-modal.component.mjs +5 -5
  41. package/esm2022/lib/components/templates/page-content/page-content.component.mjs +3 -3
  42. package/esm2022/lib/services/confirmation-dialog/types.mjs +2 -2
  43. package/esm2022/lib/services/content/transformer.mjs +3 -3
  44. package/esm2022/lib/services/markdown-article/beautify-legal-article.mjs +2 -2
  45. package/esm2022/lib/services/markdown-article/markdown-article-parser.mjs +2 -2
  46. package/esm2022/lib/services/modal/types.mjs +2 -2
  47. package/esm2022/lib/version.mjs +2 -2
  48. package/fesm2022/valtech-components.mjs +117 -117
  49. package/fesm2022/valtech-components.mjs.map +1 -1
  50. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
  51. package/lib/version.d.ts +1 -1
  52. package/package.json +1 -1
@@ -67,7 +67,7 @@ import fixWebmDuration from 'fix-webm-duration';
67
67
  * Current version of valtech-components.
68
68
  * This is automatically updated during the publish process.
69
69
  */
70
- const VERSION = '4.0.963';
70
+ const VERSION = '4.0.964';
71
71
 
72
72
  function evaluateValtechAccess(rule, context, features = {}, visitedFeatures = new Set()) {
73
73
  if (rule == null)
@@ -8770,7 +8770,7 @@ const DEFAULT_CONFIRM_BUTTON = {
8770
8770
  const DEFAULT_CANCEL_BUTTON = {
8771
8771
  text: 'Cancel',
8772
8772
  role: 'cancel',
8773
- color: 'medium',
8773
+ color: 'dark',
8774
8774
  };
8775
8775
 
8776
8776
  /**
@@ -8795,7 +8795,7 @@ const DEFAULT_MODAL_CONFIRM_BUTTON = {
8795
8795
  const DEFAULT_MODAL_CANCEL_BUTTON = {
8796
8796
  text: 'Cancel',
8797
8797
  role: 'cancel',
8798
- color: 'medium',
8798
+ color: 'dark',
8799
8799
  fill: 'clear',
8800
8800
  };
8801
8801
 
@@ -16116,7 +16116,7 @@ class NoticeComponent {
16116
16116
  </div>
16117
16117
  </aside>
16118
16118
  }
16119
- `, isInline: true, styles: [":host{display:block}.notice{display:flex;align-items:flex-start;gap:10px;margin:0;padding:12px 14px;border-radius:12px;border-left:3px solid transparent;font-size:.9rem;line-height:1.4;color:var(--ion-text-color, #000);background:rgba(var(--ion-color-secondary-rgb),.08);border-left-color:rgb(var(--ion-color-secondary-rgb))}.notice ion-icon{flex-shrink:0;font-size:1.1rem;margin-top:1px;color:var(--ion-color-secondary)}.notice__body{display:flex;flex-direction:column;gap:2px}.notice__title{font-weight:700;color:var(--ion-text-color, #000)}.tone-neutral{background:rgba(var(--ion-color-medium-rgb),.08);border-left-color:rgb(var(--ion-color-medium-rgb));color:var(--ion-color-medium)}.tone-neutral ion-icon{color:var(--ion-color-medium)}.tone-warning{background:rgba(var(--ion-color-warning-rgb),.12);border-left-color:rgb(var(--ion-color-warning-rgb))}.tone-warning ion-icon{color:var(--ion-color-warning-shade)}.tone-success{background:rgba(var(--ion-color-success-rgb),.1);border-left-color:rgb(var(--ion-color-success-rgb))}.tone-success ion-icon{color:var(--ion-color-success-shade)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
16119
+ `, isInline: true, styles: [":host{display:block}.notice{display:flex;align-items:flex-start;gap:10px;margin:0;padding:12px 14px;border-radius:12px;border-left:3px solid transparent;font-size:.9rem;line-height:1.4;color:var(--ion-text-color, #000);background:rgba(var(--ion-color-secondary-rgb),.08);border-left-color:rgb(var(--ion-color-secondary-rgb))}.notice ion-icon{flex-shrink:0;font-size:1.1rem;margin-top:1px;color:var(--ion-color-secondary)}.notice__body{display:flex;flex-direction:column;gap:2px}.notice__title{font-weight:700;color:var(--ion-text-color, #000)}.tone-neutral{background:rgba(var(--ion-color-dark-rgb),.08);border-left-color:rgb(var(--ion-color-dark-rgb));color:var(--ion-color-dark)}.tone-neutral ion-icon{color:var(--ion-color-dark)}.tone-warning{background:rgba(var(--ion-color-warning-rgb),.12);border-left-color:rgb(var(--ion-color-warning-rgb))}.tone-warning ion-icon{color:var(--ion-color-warning-shade)}.tone-success{background:rgba(var(--ion-color-success-rgb),.1);border-left-color:rgb(var(--ion-color-success-rgb))}.tone-success ion-icon{color:var(--ion-color-success-shade)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
16120
16120
  }
16121
16121
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NoticeComponent, decorators: [{
16122
16122
  type: Component,
@@ -16143,7 +16143,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
16143
16143
  </div>
16144
16144
  </aside>
16145
16145
  }
16146
- `, styles: [":host{display:block}.notice{display:flex;align-items:flex-start;gap:10px;margin:0;padding:12px 14px;border-radius:12px;border-left:3px solid transparent;font-size:.9rem;line-height:1.4;color:var(--ion-text-color, #000);background:rgba(var(--ion-color-secondary-rgb),.08);border-left-color:rgb(var(--ion-color-secondary-rgb))}.notice ion-icon{flex-shrink:0;font-size:1.1rem;margin-top:1px;color:var(--ion-color-secondary)}.notice__body{display:flex;flex-direction:column;gap:2px}.notice__title{font-weight:700;color:var(--ion-text-color, #000)}.tone-neutral{background:rgba(var(--ion-color-medium-rgb),.08);border-left-color:rgb(var(--ion-color-medium-rgb));color:var(--ion-color-medium)}.tone-neutral ion-icon{color:var(--ion-color-medium)}.tone-warning{background:rgba(var(--ion-color-warning-rgb),.12);border-left-color:rgb(var(--ion-color-warning-rgb))}.tone-warning ion-icon{color:var(--ion-color-warning-shade)}.tone-success{background:rgba(var(--ion-color-success-rgb),.1);border-left-color:rgb(var(--ion-color-success-rgb))}.tone-success ion-icon{color:var(--ion-color-success-shade)}\n"] }]
16146
+ `, styles: [":host{display:block}.notice{display:flex;align-items:flex-start;gap:10px;margin:0;padding:12px 14px;border-radius:12px;border-left:3px solid transparent;font-size:.9rem;line-height:1.4;color:var(--ion-text-color, #000);background:rgba(var(--ion-color-secondary-rgb),.08);border-left-color:rgb(var(--ion-color-secondary-rgb))}.notice ion-icon{flex-shrink:0;font-size:1.1rem;margin-top:1px;color:var(--ion-color-secondary)}.notice__body{display:flex;flex-direction:column;gap:2px}.notice__title{font-weight:700;color:var(--ion-text-color, #000)}.tone-neutral{background:rgba(var(--ion-color-dark-rgb),.08);border-left-color:rgb(var(--ion-color-dark-rgb));color:var(--ion-color-dark)}.tone-neutral ion-icon{color:var(--ion-color-dark)}.tone-warning{background:rgba(var(--ion-color-warning-rgb),.12);border-left-color:rgb(var(--ion-color-warning-rgb))}.tone-warning ion-icon{color:var(--ion-color-warning-shade)}.tone-success{background:rgba(var(--ion-color-success-rgb),.1);border-left-color:rgb(var(--ion-color-success-rgb))}.tone-success ion-icon{color:var(--ion-color-success-shade)}\n"] }]
16147
16147
  }], propDecorators: { props: [{
16148
16148
  type: Input
16149
16149
  }] } });
@@ -16694,7 +16694,7 @@ function resolveCopyrightTemplate(lang) {
16694
16694
  * [props]="{
16695
16695
  * companyName: 'My Company',
16696
16696
  * rightsText: 'All rights reserved.',
16697
- * color: 'medium',
16697
+ * color: 'dark',
16698
16698
  * align: 'left'
16699
16699
  * }"
16700
16700
  * ></val-rights-footer>
@@ -19023,7 +19023,7 @@ class DateInputComponent {
19023
19023
  [id]="triggerId"
19024
19024
  class="action date-trigger"
19025
19025
  fill="outline"
19026
- color="medium"
19026
+ color="dark"
19027
19027
  [class.is-placeholder]="!displayValue"
19028
19028
  >
19029
19029
  {{ displayValue || placeholderText }}
@@ -19066,7 +19066,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
19066
19066
  [id]="triggerId"
19067
19067
  class="action date-trigger"
19068
19068
  fill="outline"
19069
- color="medium"
19069
+ color="dark"
19070
19070
  [class.is-placeholder]="!displayValue"
19071
19071
  >
19072
19072
  {{ displayValue || placeholderText }}
@@ -19487,7 +19487,7 @@ class FieldOptionsEditorComponent {
19487
19487
  <ion-button
19488
19488
  type="button"
19489
19489
  fill="clear"
19490
- color="medium"
19490
+ color="dark"
19491
19491
  [disabled]="disabled"
19492
19492
  [attr.aria-label]="resolved.removeOptionLabel"
19493
19493
  (click)="removeOption(option.id)"
@@ -19572,7 +19572,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
19572
19572
  <ion-button
19573
19573
  type="button"
19574
19574
  fill="clear"
19575
- color="medium"
19575
+ color="dark"
19576
19576
  [disabled]="disabled"
19577
19577
  [attr.aria-label]="resolved.removeOptionLabel"
19578
19578
  (click)="removeOption(option.id)"
@@ -21084,7 +21084,7 @@ class NotesBoxComponent {
21084
21084
  ></val-text>
21085
21085
  </div>
21086
21086
  </div>
21087
- `, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-dark: #9e9e9e;--ion-color-dark-rgb: 158, 158, 158;--ion-color-dark-contrast: #000000;--ion-color-dark-contrast-rgb: 0, 0, 0;--ion-color-dark-shade: #8b8b8b;--ion-color-dark-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}:host{display:block}.val-notes-box{--notes-rgb: var(--ion-color-primary-rgb, 112, 38, 223);--notes-bg: rgba(var(--notes-rgb), .07);--notes-border: rgba(var(--notes-rgb), .18);--notes-accent: rgb(var(--notes-rgb));--notes-text: var(--ion-text-color, #0a0612);--notes-link: rgb(var(--notes-rgb));position:relative;display:block;padding:14px 18px 14px 20px;background:var(--notes-bg);border:1px solid var(--notes-border);border-left:4px solid var(--notes-accent);border-radius:10px;color:var(--notes-text);margin:0;line-height:1.55}.val-notes-box.is-rounded{border-radius:12px}.val-notes-box[data-color=primary]{--notes-rgb: var(--ion-color-primary-rgb)}.val-notes-box[data-color=secondary]{--notes-rgb: var(--ion-color-secondary-rgb)}.val-notes-box[data-color=tertiary]{--notes-rgb: var(--ion-color-tertiary-rgb)}.val-notes-box[data-color=success]{--notes-rgb: var(--ion-color-success-rgb)}.val-notes-box[data-color=warning]{--notes-rgb: var(--ion-color-warning-rgb)}.val-notes-box[data-color=danger]{--notes-rgb: var(--ion-color-danger-rgb)}.val-notes-box[data-color=medium],.val-notes-box[data-color=dark],.val-notes-box[data-color=light]{--notes-rgb: var(--ion-color-dark-rgb)}.val-notes-box__header{display:block;margin:0 0 6px;font-weight:700;font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--notes-accent);font-family:var(--ion-font-family, inherit)}.val-notes-box__body{display:block;color:var(--notes-text);font-size:.875rem;line-height:1.6;white-space:pre-line}.val-notes-box__body.size-small{font-size:.8125rem;line-height:1.55}.val-notes-box__body.size-large{font-size:.9375rem;line-height:1.6}.val-notes-box__body.size-xlarge{font-size:1rem;line-height:1.55}.val-notes-box__body ::ng-deep val-text{display:block;color:var(--notes-text)}.val-notes-box__body ::ng-deep val-text p{margin:0;color:inherit}.val-notes-box__body ::ng-deep val-text ion-text{color:var(--notes-text)!important}.val-notes-box__body ::ng-deep val-text strong,.val-notes-box__body ::ng-deep val-text b,.val-notes-box__body ::ng-deep .partial-bold{color:var(--notes-text);font-weight:700}.val-notes-box__body ::ng-deep val-text a{color:var(--notes-link);text-decoration:underline;text-underline-offset:2px;font-weight:600}.val-notes-box__body ::ng-deep val-text a:hover{opacity:.85}.val-notes-box.align-center,.val-notes-box.align-center .val-notes-box__header{text-align:center}.val-notes-box.align-right,.val-notes-box.align-right .val-notes-box__header{text-align:right}.val-notes-box.is-compact{display:inline-block;width:fit-content;max-width:100%;padding:5px 12px;border-left-width:1px;border-radius:999px;font-size:.75rem;line-height:1.3}.val-notes-box.is-compact .val-notes-box__header{display:inline;margin:0 6px 0 0;font-size:.6875rem;letter-spacing:.06em}.val-notes-box.is-compact .val-notes-box__body{display:inline;font-size:.75rem}.val-notes-box.is-compact ::ng-deep val-text{display:inline}.val-notes-box.is-compact ::ng-deep val-text p{display:inline}@media (prefers-color-scheme: dark){:host-context(body:not(.light)) .val-notes-box{--notes-bg: rgba(var(--notes-rgb), .16);--notes-border: rgba(var(--notes-rgb), .3)}}:host-context(body.dark) .val-notes-box,:host-context(.theme-dark) .val-notes-box,:host-context([data-theme=dark]) .val-notes-box{--notes-bg: rgba(var(--notes-rgb), .16);--notes-border: rgba(var(--notes-rgb), .3)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
21087
+ `, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-dark: #9e9e9e;--ion-color-dark-rgb: 158, 158, 158;--ion-color-dark-contrast: #000000;--ion-color-dark-contrast-rgb: 0, 0, 0;--ion-color-dark-shade: #8b8b8b;--ion-color-dark-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}:host{display:block}.val-notes-box{--notes-rgb: var(--ion-color-primary-rgb, 112, 38, 223);--notes-bg: rgba(var(--notes-rgb), .07);--notes-border: rgba(var(--notes-rgb), .18);--notes-accent: rgb(var(--notes-rgb));--notes-text: var(--ion-text-color, #0a0612);--notes-link: rgb(var(--notes-rgb));position:relative;display:block;padding:14px 18px 14px 20px;background:var(--notes-bg);border:1px solid var(--notes-border);border-left:4px solid var(--notes-accent);border-radius:10px;color:var(--notes-text);margin:0;line-height:1.55}.val-notes-box.is-rounded{border-radius:12px}.val-notes-box[data-color=primary]{--notes-rgb: var(--ion-color-primary-rgb)}.val-notes-box[data-color=secondary]{--notes-rgb: var(--ion-color-secondary-rgb)}.val-notes-box[data-color=tertiary]{--notes-rgb: var(--ion-color-tertiary-rgb)}.val-notes-box[data-color=success]{--notes-rgb: var(--ion-color-success-rgb)}.val-notes-box[data-color=warning]{--notes-rgb: var(--ion-color-warning-rgb)}.val-notes-box[data-color=danger]{--notes-rgb: var(--ion-color-danger-rgb)}.val-notes-box[data-color=dark],.val-notes-box[data-color=light]{--notes-rgb: var(--ion-color-dark-rgb)}.val-notes-box__header{display:block;margin:0 0 6px;font-weight:700;font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--notes-accent);font-family:var(--ion-font-family, inherit)}.val-notes-box__body{display:block;color:var(--notes-text);font-size:.875rem;line-height:1.6;white-space:pre-line}.val-notes-box__body.size-small{font-size:.8125rem;line-height:1.55}.val-notes-box__body.size-large{font-size:.9375rem;line-height:1.6}.val-notes-box__body.size-xlarge{font-size:1rem;line-height:1.55}.val-notes-box__body ::ng-deep val-text{display:block;color:var(--notes-text)}.val-notes-box__body ::ng-deep val-text p{margin:0;color:inherit}.val-notes-box__body ::ng-deep val-text ion-text{color:var(--notes-text)!important}.val-notes-box__body ::ng-deep val-text strong,.val-notes-box__body ::ng-deep val-text b,.val-notes-box__body ::ng-deep .partial-bold{color:var(--notes-text);font-weight:700}.val-notes-box__body ::ng-deep val-text a{color:var(--notes-link);text-decoration:underline;text-underline-offset:2px;font-weight:600}.val-notes-box__body ::ng-deep val-text a:hover{opacity:.85}.val-notes-box.align-center,.val-notes-box.align-center .val-notes-box__header{text-align:center}.val-notes-box.align-right,.val-notes-box.align-right .val-notes-box__header{text-align:right}.val-notes-box.is-compact{display:inline-block;width:fit-content;max-width:100%;padding:5px 12px;border-left-width:1px;border-radius:999px;font-size:.75rem;line-height:1.3}.val-notes-box.is-compact .val-notes-box__header{display:inline;margin:0 6px 0 0;font-size:.6875rem;letter-spacing:.06em}.val-notes-box.is-compact .val-notes-box__body{display:inline;font-size:.75rem}.val-notes-box.is-compact ::ng-deep val-text{display:inline}.val-notes-box.is-compact ::ng-deep val-text p{display:inline}@media (prefers-color-scheme: dark){:host-context(body:not(.light)) .val-notes-box{--notes-bg: rgba(var(--notes-rgb), .16);--notes-border: rgba(var(--notes-rgb), .3)}}:host-context(body.dark) .val-notes-box,:host-context(.theme-dark) .val-notes-box,:host-context([data-theme=dark]) .val-notes-box{--notes-bg: rgba(var(--notes-rgb), .16);--notes-border: rgba(var(--notes-rgb), .3)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
21088
21088
  }
21089
21089
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NotesBoxComponent, decorators: [{
21090
21090
  type: Component,
@@ -21114,7 +21114,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
21114
21114
  ></val-text>
21115
21115
  </div>
21116
21116
  </div>
21117
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-dark: #9e9e9e;--ion-color-dark-rgb: 158, 158, 158;--ion-color-dark-contrast: #000000;--ion-color-dark-contrast-rgb: 0, 0, 0;--ion-color-dark-shade: #8b8b8b;--ion-color-dark-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}:host{display:block}.val-notes-box{--notes-rgb: var(--ion-color-primary-rgb, 112, 38, 223);--notes-bg: rgba(var(--notes-rgb), .07);--notes-border: rgba(var(--notes-rgb), .18);--notes-accent: rgb(var(--notes-rgb));--notes-text: var(--ion-text-color, #0a0612);--notes-link: rgb(var(--notes-rgb));position:relative;display:block;padding:14px 18px 14px 20px;background:var(--notes-bg);border:1px solid var(--notes-border);border-left:4px solid var(--notes-accent);border-radius:10px;color:var(--notes-text);margin:0;line-height:1.55}.val-notes-box.is-rounded{border-radius:12px}.val-notes-box[data-color=primary]{--notes-rgb: var(--ion-color-primary-rgb)}.val-notes-box[data-color=secondary]{--notes-rgb: var(--ion-color-secondary-rgb)}.val-notes-box[data-color=tertiary]{--notes-rgb: var(--ion-color-tertiary-rgb)}.val-notes-box[data-color=success]{--notes-rgb: var(--ion-color-success-rgb)}.val-notes-box[data-color=warning]{--notes-rgb: var(--ion-color-warning-rgb)}.val-notes-box[data-color=danger]{--notes-rgb: var(--ion-color-danger-rgb)}.val-notes-box[data-color=medium],.val-notes-box[data-color=dark],.val-notes-box[data-color=light]{--notes-rgb: var(--ion-color-dark-rgb)}.val-notes-box__header{display:block;margin:0 0 6px;font-weight:700;font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--notes-accent);font-family:var(--ion-font-family, inherit)}.val-notes-box__body{display:block;color:var(--notes-text);font-size:.875rem;line-height:1.6;white-space:pre-line}.val-notes-box__body.size-small{font-size:.8125rem;line-height:1.55}.val-notes-box__body.size-large{font-size:.9375rem;line-height:1.6}.val-notes-box__body.size-xlarge{font-size:1rem;line-height:1.55}.val-notes-box__body ::ng-deep val-text{display:block;color:var(--notes-text)}.val-notes-box__body ::ng-deep val-text p{margin:0;color:inherit}.val-notes-box__body ::ng-deep val-text ion-text{color:var(--notes-text)!important}.val-notes-box__body ::ng-deep val-text strong,.val-notes-box__body ::ng-deep val-text b,.val-notes-box__body ::ng-deep .partial-bold{color:var(--notes-text);font-weight:700}.val-notes-box__body ::ng-deep val-text a{color:var(--notes-link);text-decoration:underline;text-underline-offset:2px;font-weight:600}.val-notes-box__body ::ng-deep val-text a:hover{opacity:.85}.val-notes-box.align-center,.val-notes-box.align-center .val-notes-box__header{text-align:center}.val-notes-box.align-right,.val-notes-box.align-right .val-notes-box__header{text-align:right}.val-notes-box.is-compact{display:inline-block;width:fit-content;max-width:100%;padding:5px 12px;border-left-width:1px;border-radius:999px;font-size:.75rem;line-height:1.3}.val-notes-box.is-compact .val-notes-box__header{display:inline;margin:0 6px 0 0;font-size:.6875rem;letter-spacing:.06em}.val-notes-box.is-compact .val-notes-box__body{display:inline;font-size:.75rem}.val-notes-box.is-compact ::ng-deep val-text{display:inline}.val-notes-box.is-compact ::ng-deep val-text p{display:inline}@media (prefers-color-scheme: dark){:host-context(body:not(.light)) .val-notes-box{--notes-bg: rgba(var(--notes-rgb), .16);--notes-border: rgba(var(--notes-rgb), .3)}}:host-context(body.dark) .val-notes-box,:host-context(.theme-dark) .val-notes-box,:host-context([data-theme=dark]) .val-notes-box{--notes-bg: rgba(var(--notes-rgb), .16);--notes-border: rgba(var(--notes-rgb), .3)}\n"] }]
21117
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-dark: #9e9e9e;--ion-color-dark-rgb: 158, 158, 158;--ion-color-dark-contrast: #000000;--ion-color-dark-contrast-rgb: 0, 0, 0;--ion-color-dark-shade: #8b8b8b;--ion-color-dark-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}:host{display:block}.val-notes-box{--notes-rgb: var(--ion-color-primary-rgb, 112, 38, 223);--notes-bg: rgba(var(--notes-rgb), .07);--notes-border: rgba(var(--notes-rgb), .18);--notes-accent: rgb(var(--notes-rgb));--notes-text: var(--ion-text-color, #0a0612);--notes-link: rgb(var(--notes-rgb));position:relative;display:block;padding:14px 18px 14px 20px;background:var(--notes-bg);border:1px solid var(--notes-border);border-left:4px solid var(--notes-accent);border-radius:10px;color:var(--notes-text);margin:0;line-height:1.55}.val-notes-box.is-rounded{border-radius:12px}.val-notes-box[data-color=primary]{--notes-rgb: var(--ion-color-primary-rgb)}.val-notes-box[data-color=secondary]{--notes-rgb: var(--ion-color-secondary-rgb)}.val-notes-box[data-color=tertiary]{--notes-rgb: var(--ion-color-tertiary-rgb)}.val-notes-box[data-color=success]{--notes-rgb: var(--ion-color-success-rgb)}.val-notes-box[data-color=warning]{--notes-rgb: var(--ion-color-warning-rgb)}.val-notes-box[data-color=danger]{--notes-rgb: var(--ion-color-danger-rgb)}.val-notes-box[data-color=dark],.val-notes-box[data-color=light]{--notes-rgb: var(--ion-color-dark-rgb)}.val-notes-box__header{display:block;margin:0 0 6px;font-weight:700;font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--notes-accent);font-family:var(--ion-font-family, inherit)}.val-notes-box__body{display:block;color:var(--notes-text);font-size:.875rem;line-height:1.6;white-space:pre-line}.val-notes-box__body.size-small{font-size:.8125rem;line-height:1.55}.val-notes-box__body.size-large{font-size:.9375rem;line-height:1.6}.val-notes-box__body.size-xlarge{font-size:1rem;line-height:1.55}.val-notes-box__body ::ng-deep val-text{display:block;color:var(--notes-text)}.val-notes-box__body ::ng-deep val-text p{margin:0;color:inherit}.val-notes-box__body ::ng-deep val-text ion-text{color:var(--notes-text)!important}.val-notes-box__body ::ng-deep val-text strong,.val-notes-box__body ::ng-deep val-text b,.val-notes-box__body ::ng-deep .partial-bold{color:var(--notes-text);font-weight:700}.val-notes-box__body ::ng-deep val-text a{color:var(--notes-link);text-decoration:underline;text-underline-offset:2px;font-weight:600}.val-notes-box__body ::ng-deep val-text a:hover{opacity:.85}.val-notes-box.align-center,.val-notes-box.align-center .val-notes-box__header{text-align:center}.val-notes-box.align-right,.val-notes-box.align-right .val-notes-box__header{text-align:right}.val-notes-box.is-compact{display:inline-block;width:fit-content;max-width:100%;padding:5px 12px;border-left-width:1px;border-radius:999px;font-size:.75rem;line-height:1.3}.val-notes-box.is-compact .val-notes-box__header{display:inline;margin:0 6px 0 0;font-size:.6875rem;letter-spacing:.06em}.val-notes-box.is-compact .val-notes-box__body{display:inline;font-size:.75rem}.val-notes-box.is-compact ::ng-deep val-text{display:inline}.val-notes-box.is-compact ::ng-deep val-text p{display:inline}@media (prefers-color-scheme: dark){:host-context(body:not(.light)) .val-notes-box{--notes-bg: rgba(var(--notes-rgb), .16);--notes-border: rgba(var(--notes-rgb), .3)}}:host-context(body.dark) .val-notes-box,:host-context(.theme-dark) .val-notes-box,:host-context([data-theme=dark]) .val-notes-box{--notes-bg: rgba(var(--notes-rgb), .16);--notes-border: rgba(var(--notes-rgb), .3)}\n"] }]
21118
21118
  }], propDecorators: { props: [{
21119
21119
  type: Input
21120
21120
  }] } });
@@ -21687,7 +21687,7 @@ class ProgressStatusComponent {
21687
21687
  </div>
21688
21688
  <div class="subtitle-container">
21689
21689
  <div class="subtitle" [class.blink]="blinking">
21690
- <val-text [props]="{ content: Content, color: 'medium', bold: false, size: props.size }"></val-text>
21690
+ <val-text [props]="{ content: Content, color: 'dark', bold: false, size: props.size }"></val-text>
21691
21691
  </div>
21692
21692
  </div>
21693
21693
  </div>
@@ -21721,7 +21721,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
21721
21721
  </div>
21722
21722
  <div class="subtitle-container">
21723
21723
  <div class="subtitle" [class.blink]="blinking">
21724
- <val-text [props]="{ content: Content, color: 'medium', bold: false, size: props.size }"></val-text>
21724
+ <val-text [props]="{ content: Content, color: 'dark', bold: false, size: props.size }"></val-text>
21725
21725
  </div>
21726
21726
  </div>
21727
21727
  </div>
@@ -21858,7 +21858,7 @@ class OptionCardsComponent {
21858
21858
  @if (!item.disabled) {
21859
21859
  <ion-radio [value]="item.value" />
21860
21860
  } @else if (item.badge) {
21861
- <ion-chip color="medium" [disabled]="true">
21861
+ <ion-chip color="dark" [disabled]="true">
21862
21862
  <ion-label>{{ item.badge }}</ion-label>
21863
21863
  </ion-chip>
21864
21864
  }
@@ -21889,7 +21889,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
21889
21889
  @if (!item.disabled) {
21890
21890
  <ion-radio [value]="item.value" />
21891
21891
  } @else if (item.badge) {
21892
- <ion-chip color="medium" [disabled]="true">
21892
+ <ion-chip color="dark" [disabled]="true">
21893
21893
  <ion-label>{{ item.badge }}</ion-label>
21894
21894
  </ion-chip>
21895
21895
  }
@@ -26854,7 +26854,7 @@ class MultiSelectSearchComponent {
26854
26854
  <ion-button
26855
26855
  fill="clear"
26856
26856
  size="small"
26857
- color="medium"
26857
+ color="dark"
26858
26858
  (click)="clearAll()"
26859
26859
  [disabled]="selectedItems.length === 0"
26860
26860
  >
@@ -26918,7 +26918,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
26918
26918
  <ion-button
26919
26919
  fill="clear"
26920
26920
  size="small"
26921
- color="medium"
26921
+ color="dark"
26922
26922
  (click)="clearAll()"
26923
26923
  [disabled]="selectedItems.length === 0"
26924
26924
  >
@@ -30902,7 +30902,7 @@ class FooterLinksComponent {
30902
30902
  <ion-col size="12">
30903
30903
  <val-divider
30904
30904
  *ngIf="props.divider !== false"
30905
- [props]="props.divider || { size: 'small', color: 'medium', fill: 'solid' }"
30905
+ [props]="props.divider || { size: 'small', color: 'dark', fill: 'solid' }"
30906
30906
  />
30907
30907
  </ion-col>
30908
30908
  <ion-col size-xs="12" size-md="6">
@@ -31079,7 +31079,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
31079
31079
  <ion-col size="12">
31080
31080
  <val-divider
31081
31081
  *ngIf="props.divider !== false"
31082
- [props]="props.divider || { size: 'small', color: 'medium', fill: 'solid' }"
31082
+ [props]="props.divider || { size: 'small', color: 'dark', fill: 'solid' }"
31083
31083
  />
31084
31084
  </ion-col>
31085
31085
  <ion-col size-xs="12" size-md="6">
@@ -32640,7 +32640,7 @@ class UpdateBannerComponent {
32640
32640
  content: t().message,
32641
32641
  size: 'small',
32642
32642
  bold: false,
32643
- color: 'medium',
32643
+ color: 'dark',
32644
32644
  }"
32645
32645
  />
32646
32646
  </div>
@@ -32717,7 +32717,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
32717
32717
  content: t().message,
32718
32718
  size: 'small',
32719
32719
  bold: false,
32720
- color: 'medium',
32720
+ color: 'dark',
32721
32721
  }"
32722
32722
  />
32723
32723
  </div>
@@ -35220,7 +35220,7 @@ class PermissionSelectorComponent {
35220
35220
  </div>
35221
35221
  }
35222
35222
  @if (groups().length === 0) {
35223
- <val-text [props]="{ content: tt('empty'), size: 'medium', color: 'medium', bold: false }" />
35223
+ <val-text [props]="{ content: tt('empty'), size: 'medium', color: 'dark', bold: false }" />
35224
35224
  } @else {
35225
35225
  <div class="perm-selector">
35226
35226
  @for (g of groups(); track g.resource) {
@@ -35269,7 +35269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
35269
35269
  </div>
35270
35270
  }
35271
35271
  @if (groups().length === 0) {
35272
- <val-text [props]="{ content: tt('empty'), size: 'medium', color: 'medium', bold: false }" />
35272
+ <val-text [props]="{ content: tt('empty'), size: 'medium', color: 'dark', bold: false }" />
35273
35273
  } @else {
35274
35274
  <div class="perm-selector">
35275
35275
  @for (g of groups(); track g.resource) {
@@ -35722,7 +35722,7 @@ class LinkedProvidersComponent {
35722
35722
  @if (props.allowUnlink !== false && canUnlink()) {
35723
35723
  <ion-button
35724
35724
  fill="clear"
35725
- color="medium"
35725
+ color="dark"
35726
35726
  slot="end"
35727
35727
  (click)="confirmUnlink(provider.provider)"
35728
35728
  class="unlink-btn"
@@ -35808,7 +35808,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
35808
35808
  @if (props.allowUnlink !== false && canUnlink()) {
35809
35809
  <ion-button
35810
35810
  fill="clear"
35811
- color="medium"
35811
+ color="dark"
35812
35812
  slot="end"
35813
35813
  (click)="confirmUnlink(provider.provider)"
35814
35814
  class="unlink-btn"
@@ -36174,7 +36174,7 @@ class DatePickerComponent {
36174
36174
  [id]="triggerId"
36175
36175
  class="vdp__trigger"
36176
36176
  fill="outline"
36177
- color="medium"
36177
+ color="dark"
36178
36178
  expand="block"
36179
36179
  [class.is-placeholder]="!displayValue"
36180
36180
  (click)="sheetOpen.set(true)"
@@ -36221,7 +36221,7 @@ class DatePickerComponent {
36221
36221
  <div #cal class="vdp-sheet__cal" [class.is-ready]="calReady()"></div>
36222
36222
 
36223
36223
  @if (props.clearable && displayValue) {
36224
- <ion-button expand="block" fill="clear" color="medium" (click)="clear()">
36224
+ <ion-button expand="block" fill="clear" color="dark" (click)="clear()">
36225
36225
  {{ t('clear') }}
36226
36226
  </ion-button>
36227
36227
  }
@@ -36264,7 +36264,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
36264
36264
  [id]="triggerId"
36265
36265
  class="vdp__trigger"
36266
36266
  fill="outline"
36267
- color="medium"
36267
+ color="dark"
36268
36268
  expand="block"
36269
36269
  [class.is-placeholder]="!displayValue"
36270
36270
  (click)="sheetOpen.set(true)"
@@ -36311,7 +36311,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
36311
36311
  <div #cal class="vdp-sheet__cal" [class.is-ready]="calReady()"></div>
36312
36312
 
36313
36313
  @if (props.clearable && displayValue) {
36314
- <ion-button expand="block" fill="clear" color="medium" (click)="clear()">
36314
+ <ion-button expand="block" fill="clear" color="dark" (click)="clear()">
36315
36315
  {{ t('clear') }}
36316
36316
  </ion-button>
36317
36317
  }
@@ -37631,7 +37631,7 @@ class FormComponent {
37631
37631
  </div>
37632
37632
  }
37633
37633
  @if (props.showDividers !== false) {
37634
- <val-divider [props]="{ fill: 'solid', size: 'medium', color: 'medium' }"></val-divider>
37634
+ <val-divider [props]="{ fill: 'solid', size: 'medium', color: 'dark' }"></val-divider>
37635
37635
  }
37636
37636
  <ng-content></ng-content>
37637
37637
  </div>
@@ -37806,7 +37806,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
37806
37806
  </div>
37807
37807
  }
37808
37808
  @if (props.showDividers !== false) {
37809
- <val-divider [props]="{ fill: 'solid', size: 'medium', color: 'medium' }"></val-divider>
37809
+ <val-divider [props]="{ fill: 'solid', size: 'medium', color: 'dark' }"></val-divider>
37810
37810
  }
37811
37811
  <ng-content></ng-content>
37812
37812
  </div>
@@ -37939,7 +37939,7 @@ class EmptyStateComponent {
37939
37939
  <val-text
37940
37940
  [props]="{
37941
37941
  size: 'large',
37942
- color: 'medium',
37942
+ color: 'dark',
37943
37943
  bold: false,
37944
37944
  content: desc,
37945
37945
  }"
@@ -37989,7 +37989,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
37989
37989
  <val-text
37990
37990
  [props]="{
37991
37991
  size: 'large',
37992
- color: 'medium',
37992
+ color: 'dark',
37993
37993
  bold: false,
37994
37994
  content: desc,
37995
37995
  }"
@@ -38344,7 +38344,7 @@ class AccessRequestViewComponent {
38344
38344
  <section class="access-request">
38345
38345
  <span class="access-request__eyebrow">{{ t('eyebrow') }}</span>
38346
38346
  <val-display [props]="{ content: t('title'), size: 'small', color: 'dark' }" />
38347
- <val-text [props]="{ content: t('body'), color: 'medium', size: 'medium', bold: false }" />
38347
+ <val-text [props]="{ content: t('body'), color: 'dark', size: 'medium', bold: false }" />
38348
38348
 
38349
38349
  <val-form [props]="form()" (onSubmit)="submit($event)" />
38350
38350
  </section>
@@ -38360,7 +38360,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
38360
38360
  <section class="access-request">
38361
38361
  <span class="access-request__eyebrow">{{ t('eyebrow') }}</span>
38362
38362
  <val-display [props]="{ content: t('title'), size: 'small', color: 'dark' }" />
38363
- <val-text [props]="{ content: t('body'), color: 'medium', size: 'medium', bold: false }" />
38363
+ <val-text [props]="{ content: t('body'), color: 'dark', size: 'medium', bold: false }" />
38364
38364
 
38365
38365
  <val-form [props]="form()" (onSubmit)="submit($event)" />
38366
38366
  </section>
@@ -38507,7 +38507,7 @@ class ImageCropComponent {
38507
38507
  <ion-header>
38508
38508
  <ion-toolbar>
38509
38509
  <ion-buttons slot="start">
38510
- <ion-button (click)="cancel.emit()" color="medium">
38510
+ <ion-button (click)="cancel.emit()" color="dark">
38511
38511
  {{ cancelText() }}
38512
38512
  </ion-button>
38513
38513
  </ion-buttons>
@@ -38547,7 +38547,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
38547
38547
  <ion-header>
38548
38548
  <ion-toolbar>
38549
38549
  <ion-buttons slot="start">
38550
- <ion-button (click)="cancel.emit()" color="medium">
38550
+ <ion-button (click)="cancel.emit()" color="dark">
38551
38551
  {{ cancelText() }}
38552
38552
  </ion-button>
38553
38553
  </ion-buttons>
@@ -42113,7 +42113,7 @@ class RequestFormComponent {
42113
42113
  </val-form>
42114
42114
 
42115
42115
  @if (props.cancelButtonText) {
42116
- <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
42116
+ <ion-button fill="outline" color="dark" expand="block" class="cancel-button" (click)="onCancelClick()">
42117
42117
  {{ props.cancelButtonText }}
42118
42118
  </ion-button>
42119
42119
  }
@@ -42141,7 +42141,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
42141
42141
  </val-form>
42142
42142
 
42143
42143
  @if (props.cancelButtonText) {
42144
- <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
42144
+ <ion-button fill="outline" color="dark" expand="block" class="cancel-button" (click)="onCancelClick()">
42145
42145
  {{ props.cancelButtonText }}
42146
42146
  </ion-button>
42147
42147
  }
@@ -42494,7 +42494,7 @@ class RequestReviewPanelComponent {
42494
42494
  [props]="{
42495
42495
  token: 'reject',
42496
42496
  text: t('reject'),
42497
- color: 'medium',
42497
+ color: 'dark',
42498
42498
  fill: 'outline',
42499
42499
  shape: 'round',
42500
42500
  size: 'small',
@@ -42656,7 +42656,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
42656
42656
  [props]="{
42657
42657
  token: 'reject',
42658
42658
  text: t('reject'),
42659
- color: 'medium',
42659
+ color: 'dark',
42660
42660
  fill: 'outline',
42661
42661
  shape: 'round',
42662
42662
  size: 'small',
@@ -43115,7 +43115,7 @@ class CookieSettingsComponent {
43115
43115
  </div>
43116
43116
 
43117
43117
  <div class="vcs__actions">
43118
- <ion-button fill="outline" size="small" color="medium" (click)="onRejectAll()">{{ t('rejectAll') }}</ion-button>
43118
+ <ion-button fill="outline" size="small" color="dark" (click)="onRejectAll()">{{ t('rejectAll') }}</ion-button>
43119
43119
 
43120
43120
  <ion-button fill="outline" size="small" color="dark" (click)="onSave()">{{ t('save') }}</ion-button>
43121
43121
 
@@ -43161,7 +43161,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
43161
43161
  </div>
43162
43162
 
43163
43163
  <div class="vcs__actions">
43164
- <ion-button fill="outline" size="small" color="medium" (click)="onRejectAll()">{{ t('rejectAll') }}</ion-button>
43164
+ <ion-button fill="outline" size="small" color="dark" (click)="onRejectAll()">{{ t('rejectAll') }}</ion-button>
43165
43165
 
43166
43166
  <ion-button fill="outline" size="small" color="dark" (click)="onSave()">{{ t('save') }}</ion-button>
43167
43167
 
@@ -45012,7 +45012,7 @@ class MfaModalComponent {
45012
45012
  this.toast.show({ message, duration: 3500 });
45013
45013
  }
45014
45014
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MfaModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45015
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MfaModalComponent, isStandalone: true, selector: "val-mfa-modal", inputs: { isOpen: "isOpen", prefillCode: "prefillCode" }, outputs: { changed: "changed", enabledViaDeeplink: "enabledViaDeeplink", dismissed: "dismissed" }, ngImport: i0, template: "<ion-modal [isOpen]=\"isOpen\" (didDismiss)=\"close()\" cssClass=\"val-modal-adaptive\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" color=\"dark\" shape=\"round\" (click)=\"close()\">\n <strong>{{ t('close') }}</strong>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-content class=\"ion-padding\">\n <section class=\"mfa-modal\">\n <val-display [props]=\"{ content: t('mfaManageTitle'), size: 'small', color: 'dark' }\" />\n\n @switch (step()) { @case ('loading') {\n <div class=\"mfa-loading\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @case ('status') { @if (mfaEnabled()) {\n <p class=\"mfa-status mfa-status--on\">{{ t('mfaEnabledLabel') }} \u00B7 {{ methodLabel(mfaMethod()) }}</p>\n\n @if (mfaMethod() === 'TOTP') {\n <div class=\"mfa-block\">\n <val-title [props]=\"{ size: 'small', color: 'dark', bold: true, content: t('mfaBackupCodesTitle') }\" />\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaBackupCodesAvailable') + ': ' + backupCodesCount() }\"\n />\n\n @if (regeneratedCodes(); as codes) {\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesSaveWarning') }} {{ t('mfaBackupCodesExplain') }}</p>\n </div>\n <div class=\"mfa-codes\">\n @for (code of codes; track code) {\n <code class=\"mfa-code\">{{ code }}</code>\n }\n </div>\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"copyCodes(codes)\">\n {{ t('mfaCopyCodes') }}\n </ion-button>\n } @else { @if (backupCodesCount() < 3) {\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesLow') }}</p>\n </div>\n }\n <ion-button\n expand=\"block\"\n color=\"dark\"\n fill=\"outline\"\n shape=\"round\"\n [disabled]=\"working()\"\n (click)=\"regenerateBackupCodes()\"\n >\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaRegenerateCodes') }} }\n </ion-button>\n }\n </div>\n }\n\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"goToDisable()\">\n {{ t('mfaDisableButton') }}\n </ion-button>\n } @else {\n <p class=\"mfa-status mfa-status--off\">{{ t('mfaDisabledLabel') }}</p>\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisabledHint') }\" />\n <ion-button expand=\"block\" shape=\"round\" (click)=\"goToMethodSelect()\"> {{ t('mfaEnableButton') }} </ion-button>\n } } @case ('method-select') {\n <val-title [props]=\"{ content: t('mfaEnableTitle'), size: 'large', color: 'dark', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaMethodPrompt') }\" />\n\n <div class=\"mfa-method-list\" role=\"radiogroup\">\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'TOTP'\"\n (click)=\"selectedMethod.set('TOTP')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'TOTP'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodTotp') }}</strong>\n <span>{{ t('mfaMethodTotpHint') }}</span>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'EMAIL'\"\n (click)=\"selectedMethod.set('EMAIL')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'EMAIL'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodEmail') }}</strong>\n <span>{{ t('mfaMethodEmailHint') }}</span>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'SMS'\"\n (click)=\"selectedMethod.set('SMS')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'SMS'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodSms') }}</strong>\n <span>{{ t('mfaMethodSmsHint') }}</span>\n </span>\n </button>\n </div>\n\n @if (selectedMethod() === 'SMS' && !userPhone()) {\n <val-phone-input\n [props]=\"{ control: phoneControl, label: t('mfaPhoneLabel'), placeholder: '912345678', defaultCountry: 'CL' }\"\n />\n @if (phoneControl.invalid && phoneControl.touched) {\n <p class=\"mfa-error\">{{ t('mfaPhoneInvalid') }}</p>\n } } @if (selectedMethod() === 'SMS' && userPhone(); as phone) {\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaPhoneRegistered') + ': ' + phone }\"\n />\n }\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"proceedWithMethod()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaContinue') }} }\n </ion-button>\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('totp-setup') {\n <val-title [props]=\"{ content: t('mfaTotpSetupTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpStep1') }\" />\n\n @if (totpQr(); as qr) {\n <div class=\"mfa-qr\">\n <val-qr-code [props]=\"{ qr: qr }\" />\n </div>\n } @if (totpSetup(); as setup) {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpManualEntry') }\" />\n <div class=\"mfa-secret-row\">\n <code class=\"mfa-secret\">{{ setup.secret }}</code>\n <ion-button fill=\"clear\" size=\"small\" (click)=\"copySecret(setup.secret)\" [attr.aria-label]=\"t('copy')\">\n @if (copiedSecret()) {\n <ion-icon name=\"checkmark-outline\"></ion-icon>\n } @else {\n <ion-icon name=\"copy-outline\"></ion-icon>\n }\n </ion-button>\n </div>\n\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpStep2') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"verifyTotp()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaTotpVerify') }} }\n </ion-button>\n\n <div class=\"mfa-backup\">\n <val-title [props]=\"{ size: 'small', color: 'dark', bold: true, content: t('mfaBackupCodesTitle') }\" />\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesSaveWarning') }} {{ t('mfaBackupCodesExplain') }}</p>\n </div>\n <div class=\"mfa-codes\">\n @for (code of setup.backupCodes; track code) {\n <code class=\"mfa-code\">{{ code }}</code>\n }\n </div>\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"copyCodes(setup.backupCodes)\">\n {{ t('mfaCopyCodes') }}\n </ion-button>\n </div>\n }\n\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('code-confirm') {\n <val-title [props]=\"{ content: t('mfaConfirmTitle'), size: 'large', color: '', bold: false }\" />\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: selectedMethod() === 'EMAIL' ? t('mfaConfirmPromptEmail') : t('mfaConfirmPromptSms') }\"\n />\n\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"confirmCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaConfirmButton') }} }\n </ion-button>\n\n <p class=\"mfa-resend\">\n {{ t('mfaNoCode') }} @if (resendCooldown() > 0) {\n <span>{{ t('mfaResendIn') }} {{ resendCooldown() }}s</span>\n } @else {\n <a (click)=\"resendCode()\">{{ t('mfaResend') }}</a>\n }\n </p>\n\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('disable') { @if (hasPassword()) {\n <val-form [props]=\"disableFormProps()\" (onSubmit)=\"onDisableSubmit($event)\" />\n } @else if (mfaMethod() === 'TOTP') {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableTotpPrompt') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"disableWithMfaCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableButton') }} }\n </ion-button>\n } @else if (mfaMethod() === 'EMAIL' || mfaMethod() === 'SMS') {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n @if (!disableCodeSent()) {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableCodePrompt') }\" />\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"sendDisableCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableSendCode') }} }\n </ion-button>\n } @else {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableCodePrompt') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"disableWithMfaCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableButton') }} }\n </ion-button>\n <ion-button\n expand=\"block\"\n fill=\"clear\"\n color=\"medium\"\n shape=\"round\"\n [disabled]=\"working()\"\n (click)=\"sendDisableCode()\"\n >\n {{ t('mfaDisableResendCode') }}\n </ion-button>\n } } @else {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableNeedsPassword') }\" />\n }\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } }\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".mfa-modal{display:flex;flex-direction:column;gap:14px;padding-top:4px}.mfa-loading{display:flex;justify-content:center;padding:40px 0}.mfa-status{display:inline-flex;align-items:center;width:fit-content;padding:4px 10px;border-radius:999px;font-size:.8125rem;font-weight:600;margin:0}.mfa-status--on{color:var(--ion-color-success-shade);background:rgba(var(--ion-color-success-rgb),.12)}.mfa-status--off{color:var(--ion-color-dark-shade);background:var(--ion-color-light)}.mfa-secret-row{display:flex;align-items:center;gap:8px}.mfa-secret-row .mfa-secret{flex:1;margin:0}.mfa-secret-row ion-button{flex-shrink:0;--color: var(--ion-color-dark);margin:0}.mfa-error{color:var(--ion-color-danger);font-size:.8125rem;margin:4px 0 0}.mfa-block,.mfa-backup{display:flex;flex-direction:column;gap:12px}.mfa-block{padding:16px;border-radius:14px;background:var(--ion-color-light)}.mfa-alert{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:10px;background:var(--ion-color-light);border-left:3px solid var(--ion-color-primary)}.mfa-alert ion-icon{font-size:1.25rem;color:var(--ion-color-primary);flex-shrink:0;margin-top:1px}.mfa-alert p{margin:0;font-size:.8125rem;line-height:1.45;color:var(--ion-color-dark)}.mfa-qr{display:flex;justify-content:center;padding:8px 0}.mfa-secret{display:block;padding:10px 12px;border-radius:8px;background:var(--ion-color-light);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9375rem;letter-spacing:.04em;word-break:break-all;text-align:center}.mfa-pin{display:flex;justify-content:center;padding:8px 0}.mfa-codes{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;padding:12px;border-radius:12px;background:var(--ion-color-light)}.mfa-code{padding:8px;border-radius:6px;background:var(--ion-background-color, #fff);color:var(--ion-color-dark);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8125rem;text-align:center}.mfa-method-list{display:flex;flex-direction:column;gap:8px}.mfa-method-card{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-radius:12px;border:1.5px solid var(--ion-border-color, rgba(var(--ion-color-dark-rgb), .14));background:transparent;cursor:pointer;text-align:left;width:100%;transition:border-color .15s ease,background .15s ease}.mfa-method-card--active{border-color:var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.07)}.mfa-method-card__dot{flex-shrink:0;width:18px;height:18px;border-radius:50%;border:2px solid var(--ion-color-dark);margin-top:2px;transition:border-color .15s,box-shadow .15s}.mfa-method-card--active .mfa-method-card__dot{border-color:var(--ion-color-primary);box-shadow:inset 0 0 0 4px var(--ion-color-primary)}.mfa-method-card__body{display:flex;flex-direction:column;gap:3px}.mfa-method-card__body strong{font-size:.9375rem;font-weight:600;color:var(--ion-color-dark)}.mfa-method-card__body span{font-size:.8125rem;color:var(--ion-color-dark);line-height:1.4}.mfa-resend{text-align:center;font-size:.875rem;color:var(--ion-color-dark);margin:4px 0}.mfa-resend a{color:var(--ion-color-primary);cursor:pointer;font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { 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: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onValueChange", "onInvalid", "onSelectChange"] }, { kind: "component", type: QrCodeComponent, selector: "val-qr-code", inputs: ["props"], outputs: ["actionComplete", "imageLoad", "imageError"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: PinInputComponent, selector: "val-pin-input", inputs: ["props"] }, { kind: "component", type: PhoneInputComponent, selector: "val-phone-input", inputs: ["preset", "props"], outputs: ["phoneChange"] }] }); }
45015
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MfaModalComponent, isStandalone: true, selector: "val-mfa-modal", inputs: { isOpen: "isOpen", prefillCode: "prefillCode" }, outputs: { changed: "changed", enabledViaDeeplink: "enabledViaDeeplink", dismissed: "dismissed" }, ngImport: i0, template: "<ion-modal [isOpen]=\"isOpen\" (didDismiss)=\"close()\" cssClass=\"val-modal-adaptive\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" color=\"dark\" shape=\"round\" (click)=\"close()\">\n <strong>{{ t('close') }}</strong>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-content class=\"ion-padding\">\n <section class=\"mfa-modal\">\n <val-display [props]=\"{ content: t('mfaManageTitle'), size: 'small', color: 'dark' }\" />\n\n @switch (step()) { @case ('loading') {\n <div class=\"mfa-loading\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @case ('status') { @if (mfaEnabled()) {\n <p class=\"mfa-status mfa-status--on\">{{ t('mfaEnabledLabel') }} \u00B7 {{ methodLabel(mfaMethod()) }}</p>\n\n @if (mfaMethod() === 'TOTP') {\n <div class=\"mfa-block\">\n <val-title [props]=\"{ size: 'small', color: 'dark', bold: true, content: t('mfaBackupCodesTitle') }\" />\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaBackupCodesAvailable') + ': ' + backupCodesCount() }\"\n />\n\n @if (regeneratedCodes(); as codes) {\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesSaveWarning') }} {{ t('mfaBackupCodesExplain') }}</p>\n </div>\n <div class=\"mfa-codes\">\n @for (code of codes; track code) {\n <code class=\"mfa-code\">{{ code }}</code>\n }\n </div>\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"copyCodes(codes)\">\n {{ t('mfaCopyCodes') }}\n </ion-button>\n } @else { @if (backupCodesCount() < 3) {\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesLow') }}</p>\n </div>\n }\n <ion-button\n expand=\"block\"\n color=\"dark\"\n fill=\"outline\"\n shape=\"round\"\n [disabled]=\"working()\"\n (click)=\"regenerateBackupCodes()\"\n >\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaRegenerateCodes') }} }\n </ion-button>\n }\n </div>\n }\n\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"goToDisable()\">\n {{ t('mfaDisableButton') }}\n </ion-button>\n } @else {\n <p class=\"mfa-status mfa-status--off\">{{ t('mfaDisabledLabel') }}</p>\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisabledHint') }\" />\n <ion-button expand=\"block\" shape=\"round\" (click)=\"goToMethodSelect()\"> {{ t('mfaEnableButton') }} </ion-button>\n } } @case ('method-select') {\n <val-title [props]=\"{ content: t('mfaEnableTitle'), size: 'large', color: 'dark', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaMethodPrompt') }\" />\n\n <div class=\"mfa-method-list\" role=\"radiogroup\">\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'TOTP'\"\n (click)=\"selectedMethod.set('TOTP')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'TOTP'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodTotp') }}</strong>\n <span>{{ t('mfaMethodTotpHint') }}</span>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'EMAIL'\"\n (click)=\"selectedMethod.set('EMAIL')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'EMAIL'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodEmail') }}</strong>\n <span>{{ t('mfaMethodEmailHint') }}</span>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'SMS'\"\n (click)=\"selectedMethod.set('SMS')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'SMS'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodSms') }}</strong>\n <span>{{ t('mfaMethodSmsHint') }}</span>\n </span>\n </button>\n </div>\n\n @if (selectedMethod() === 'SMS' && !userPhone()) {\n <val-phone-input\n [props]=\"{ control: phoneControl, label: t('mfaPhoneLabel'), placeholder: '912345678', defaultCountry: 'CL' }\"\n />\n @if (phoneControl.invalid && phoneControl.touched) {\n <p class=\"mfa-error\">{{ t('mfaPhoneInvalid') }}</p>\n } } @if (selectedMethod() === 'SMS' && userPhone(); as phone) {\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaPhoneRegistered') + ': ' + phone }\"\n />\n }\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"proceedWithMethod()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaContinue') }} }\n </ion-button>\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('totp-setup') {\n <val-title [props]=\"{ content: t('mfaTotpSetupTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpStep1') }\" />\n\n @if (totpQr(); as qr) {\n <div class=\"mfa-qr\">\n <val-qr-code [props]=\"{ qr: qr }\" />\n </div>\n } @if (totpSetup(); as setup) {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpManualEntry') }\" />\n <div class=\"mfa-secret-row\">\n <code class=\"mfa-secret\">{{ setup.secret }}</code>\n <ion-button fill=\"clear\" size=\"small\" (click)=\"copySecret(setup.secret)\" [attr.aria-label]=\"t('copy')\">\n @if (copiedSecret()) {\n <ion-icon name=\"checkmark-outline\"></ion-icon>\n } @else {\n <ion-icon name=\"copy-outline\"></ion-icon>\n }\n </ion-button>\n </div>\n\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpStep2') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"verifyTotp()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaTotpVerify') }} }\n </ion-button>\n\n <div class=\"mfa-backup\">\n <val-title [props]=\"{ size: 'small', color: 'dark', bold: true, content: t('mfaBackupCodesTitle') }\" />\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesSaveWarning') }} {{ t('mfaBackupCodesExplain') }}</p>\n </div>\n <div class=\"mfa-codes\">\n @for (code of setup.backupCodes; track code) {\n <code class=\"mfa-code\">{{ code }}</code>\n }\n </div>\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"copyCodes(setup.backupCodes)\">\n {{ t('mfaCopyCodes') }}\n </ion-button>\n </div>\n }\n\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('code-confirm') {\n <val-title [props]=\"{ content: t('mfaConfirmTitle'), size: 'large', color: '', bold: false }\" />\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: selectedMethod() === 'EMAIL' ? t('mfaConfirmPromptEmail') : t('mfaConfirmPromptSms') }\"\n />\n\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"confirmCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaConfirmButton') }} }\n </ion-button>\n\n <p class=\"mfa-resend\">\n {{ t('mfaNoCode') }} @if (resendCooldown() > 0) {\n <span>{{ t('mfaResendIn') }} {{ resendCooldown() }}s</span>\n } @else {\n <a (click)=\"resendCode()\">{{ t('mfaResend') }}</a>\n }\n </p>\n\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('disable') { @if (hasPassword()) {\n <val-form [props]=\"disableFormProps()\" (onSubmit)=\"onDisableSubmit($event)\" />\n } @else if (mfaMethod() === 'TOTP') {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableTotpPrompt') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"disableWithMfaCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableButton') }} }\n </ion-button>\n } @else if (mfaMethod() === 'EMAIL' || mfaMethod() === 'SMS') {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n @if (!disableCodeSent()) {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableCodePrompt') }\" />\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"sendDisableCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableSendCode') }} }\n </ion-button>\n } @else {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableCodePrompt') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"disableWithMfaCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableButton') }} }\n </ion-button>\n <ion-button\n expand=\"block\"\n fill=\"clear\"\n color=\"dark\"\n shape=\"round\"\n [disabled]=\"working()\"\n (click)=\"sendDisableCode()\"\n >\n {{ t('mfaDisableResendCode') }}\n </ion-button>\n } } @else {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableNeedsPassword') }\" />\n }\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } }\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".mfa-modal{display:flex;flex-direction:column;gap:14px;padding-top:4px}.mfa-loading{display:flex;justify-content:center;padding:40px 0}.mfa-status{display:inline-flex;align-items:center;width:fit-content;padding:4px 10px;border-radius:999px;font-size:.8125rem;font-weight:600;margin:0}.mfa-status--on{color:var(--ion-color-success-shade);background:rgba(var(--ion-color-success-rgb),.12)}.mfa-status--off{color:var(--ion-color-dark-shade);background:var(--ion-color-light)}.mfa-secret-row{display:flex;align-items:center;gap:8px}.mfa-secret-row .mfa-secret{flex:1;margin:0}.mfa-secret-row ion-button{flex-shrink:0;--color: var(--ion-color-dark);margin:0}.mfa-error{color:var(--ion-color-danger);font-size:.8125rem;margin:4px 0 0}.mfa-block,.mfa-backup{display:flex;flex-direction:column;gap:12px}.mfa-block{padding:16px;border-radius:14px;background:var(--ion-color-light)}.mfa-alert{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:10px;background:var(--ion-color-light);border-left:3px solid var(--ion-color-primary)}.mfa-alert ion-icon{font-size:1.25rem;color:var(--ion-color-primary);flex-shrink:0;margin-top:1px}.mfa-alert p{margin:0;font-size:.8125rem;line-height:1.45;color:var(--ion-color-dark)}.mfa-qr{display:flex;justify-content:center;padding:8px 0}.mfa-secret{display:block;padding:10px 12px;border-radius:8px;background:var(--ion-color-light);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9375rem;letter-spacing:.04em;word-break:break-all;text-align:center}.mfa-pin{display:flex;justify-content:center;padding:8px 0}.mfa-codes{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;padding:12px;border-radius:12px;background:var(--ion-color-light)}.mfa-code{padding:8px;border-radius:6px;background:var(--ion-background-color, #fff);color:var(--ion-color-dark);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8125rem;text-align:center}.mfa-method-list{display:flex;flex-direction:column;gap:8px}.mfa-method-card{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-radius:12px;border:1.5px solid var(--ion-border-color, rgba(var(--ion-color-dark-rgb), .14));background:transparent;cursor:pointer;text-align:left;width:100%;transition:border-color .15s ease,background .15s ease}.mfa-method-card--active{border-color:var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.07)}.mfa-method-card__dot{flex-shrink:0;width:18px;height:18px;border-radius:50%;border:2px solid var(--ion-color-dark);margin-top:2px;transition:border-color .15s,box-shadow .15s}.mfa-method-card--active .mfa-method-card__dot{border-color:var(--ion-color-primary);box-shadow:inset 0 0 0 4px var(--ion-color-primary)}.mfa-method-card__body{display:flex;flex-direction:column;gap:3px}.mfa-method-card__body strong{font-size:.9375rem;font-weight:600;color:var(--ion-color-dark)}.mfa-method-card__body span{font-size:.8125rem;color:var(--ion-color-dark);line-height:1.4}.mfa-resend{text-align:center;font-size:.875rem;color:var(--ion-color-dark);margin:4px 0}.mfa-resend a{color:var(--ion-color-primary);cursor:pointer;font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { 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: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onValueChange", "onInvalid", "onSelectChange"] }, { kind: "component", type: QrCodeComponent, selector: "val-qr-code", inputs: ["props"], outputs: ["actionComplete", "imageLoad", "imageError"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: PinInputComponent, selector: "val-pin-input", inputs: ["props"] }, { kind: "component", type: PhoneInputComponent, selector: "val-phone-input", inputs: ["preset", "props"], outputs: ["phoneChange"] }] }); }
45016
45016
  }
45017
45017
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MfaModalComponent, decorators: [{
45018
45018
  type: Component,
@@ -45038,7 +45038,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
45038
45038
  TitleComponent,
45039
45039
  PinInputComponent,
45040
45040
  PhoneInputComponent,
45041
- ], template: "<ion-modal [isOpen]=\"isOpen\" (didDismiss)=\"close()\" cssClass=\"val-modal-adaptive\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" color=\"dark\" shape=\"round\" (click)=\"close()\">\n <strong>{{ t('close') }}</strong>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-content class=\"ion-padding\">\n <section class=\"mfa-modal\">\n <val-display [props]=\"{ content: t('mfaManageTitle'), size: 'small', color: 'dark' }\" />\n\n @switch (step()) { @case ('loading') {\n <div class=\"mfa-loading\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @case ('status') { @if (mfaEnabled()) {\n <p class=\"mfa-status mfa-status--on\">{{ t('mfaEnabledLabel') }} \u00B7 {{ methodLabel(mfaMethod()) }}</p>\n\n @if (mfaMethod() === 'TOTP') {\n <div class=\"mfa-block\">\n <val-title [props]=\"{ size: 'small', color: 'dark', bold: true, content: t('mfaBackupCodesTitle') }\" />\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaBackupCodesAvailable') + ': ' + backupCodesCount() }\"\n />\n\n @if (regeneratedCodes(); as codes) {\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesSaveWarning') }} {{ t('mfaBackupCodesExplain') }}</p>\n </div>\n <div class=\"mfa-codes\">\n @for (code of codes; track code) {\n <code class=\"mfa-code\">{{ code }}</code>\n }\n </div>\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"copyCodes(codes)\">\n {{ t('mfaCopyCodes') }}\n </ion-button>\n } @else { @if (backupCodesCount() < 3) {\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesLow') }}</p>\n </div>\n }\n <ion-button\n expand=\"block\"\n color=\"dark\"\n fill=\"outline\"\n shape=\"round\"\n [disabled]=\"working()\"\n (click)=\"regenerateBackupCodes()\"\n >\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaRegenerateCodes') }} }\n </ion-button>\n }\n </div>\n }\n\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"goToDisable()\">\n {{ t('mfaDisableButton') }}\n </ion-button>\n } @else {\n <p class=\"mfa-status mfa-status--off\">{{ t('mfaDisabledLabel') }}</p>\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisabledHint') }\" />\n <ion-button expand=\"block\" shape=\"round\" (click)=\"goToMethodSelect()\"> {{ t('mfaEnableButton') }} </ion-button>\n } } @case ('method-select') {\n <val-title [props]=\"{ content: t('mfaEnableTitle'), size: 'large', color: 'dark', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaMethodPrompt') }\" />\n\n <div class=\"mfa-method-list\" role=\"radiogroup\">\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'TOTP'\"\n (click)=\"selectedMethod.set('TOTP')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'TOTP'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodTotp') }}</strong>\n <span>{{ t('mfaMethodTotpHint') }}</span>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'EMAIL'\"\n (click)=\"selectedMethod.set('EMAIL')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'EMAIL'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodEmail') }}</strong>\n <span>{{ t('mfaMethodEmailHint') }}</span>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'SMS'\"\n (click)=\"selectedMethod.set('SMS')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'SMS'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodSms') }}</strong>\n <span>{{ t('mfaMethodSmsHint') }}</span>\n </span>\n </button>\n </div>\n\n @if (selectedMethod() === 'SMS' && !userPhone()) {\n <val-phone-input\n [props]=\"{ control: phoneControl, label: t('mfaPhoneLabel'), placeholder: '912345678', defaultCountry: 'CL' }\"\n />\n @if (phoneControl.invalid && phoneControl.touched) {\n <p class=\"mfa-error\">{{ t('mfaPhoneInvalid') }}</p>\n } } @if (selectedMethod() === 'SMS' && userPhone(); as phone) {\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaPhoneRegistered') + ': ' + phone }\"\n />\n }\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"proceedWithMethod()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaContinue') }} }\n </ion-button>\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('totp-setup') {\n <val-title [props]=\"{ content: t('mfaTotpSetupTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpStep1') }\" />\n\n @if (totpQr(); as qr) {\n <div class=\"mfa-qr\">\n <val-qr-code [props]=\"{ qr: qr }\" />\n </div>\n } @if (totpSetup(); as setup) {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpManualEntry') }\" />\n <div class=\"mfa-secret-row\">\n <code class=\"mfa-secret\">{{ setup.secret }}</code>\n <ion-button fill=\"clear\" size=\"small\" (click)=\"copySecret(setup.secret)\" [attr.aria-label]=\"t('copy')\">\n @if (copiedSecret()) {\n <ion-icon name=\"checkmark-outline\"></ion-icon>\n } @else {\n <ion-icon name=\"copy-outline\"></ion-icon>\n }\n </ion-button>\n </div>\n\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpStep2') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"verifyTotp()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaTotpVerify') }} }\n </ion-button>\n\n <div class=\"mfa-backup\">\n <val-title [props]=\"{ size: 'small', color: 'dark', bold: true, content: t('mfaBackupCodesTitle') }\" />\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesSaveWarning') }} {{ t('mfaBackupCodesExplain') }}</p>\n </div>\n <div class=\"mfa-codes\">\n @for (code of setup.backupCodes; track code) {\n <code class=\"mfa-code\">{{ code }}</code>\n }\n </div>\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"copyCodes(setup.backupCodes)\">\n {{ t('mfaCopyCodes') }}\n </ion-button>\n </div>\n }\n\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('code-confirm') {\n <val-title [props]=\"{ content: t('mfaConfirmTitle'), size: 'large', color: '', bold: false }\" />\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: selectedMethod() === 'EMAIL' ? t('mfaConfirmPromptEmail') : t('mfaConfirmPromptSms') }\"\n />\n\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"confirmCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaConfirmButton') }} }\n </ion-button>\n\n <p class=\"mfa-resend\">\n {{ t('mfaNoCode') }} @if (resendCooldown() > 0) {\n <span>{{ t('mfaResendIn') }} {{ resendCooldown() }}s</span>\n } @else {\n <a (click)=\"resendCode()\">{{ t('mfaResend') }}</a>\n }\n </p>\n\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('disable') { @if (hasPassword()) {\n <val-form [props]=\"disableFormProps()\" (onSubmit)=\"onDisableSubmit($event)\" />\n } @else if (mfaMethod() === 'TOTP') {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableTotpPrompt') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"disableWithMfaCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableButton') }} }\n </ion-button>\n } @else if (mfaMethod() === 'EMAIL' || mfaMethod() === 'SMS') {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n @if (!disableCodeSent()) {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableCodePrompt') }\" />\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"sendDisableCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableSendCode') }} }\n </ion-button>\n } @else {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableCodePrompt') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"disableWithMfaCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableButton') }} }\n </ion-button>\n <ion-button\n expand=\"block\"\n fill=\"clear\"\n color=\"medium\"\n shape=\"round\"\n [disabled]=\"working()\"\n (click)=\"sendDisableCode()\"\n >\n {{ t('mfaDisableResendCode') }}\n </ion-button>\n } } @else {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableNeedsPassword') }\" />\n }\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } }\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".mfa-modal{display:flex;flex-direction:column;gap:14px;padding-top:4px}.mfa-loading{display:flex;justify-content:center;padding:40px 0}.mfa-status{display:inline-flex;align-items:center;width:fit-content;padding:4px 10px;border-radius:999px;font-size:.8125rem;font-weight:600;margin:0}.mfa-status--on{color:var(--ion-color-success-shade);background:rgba(var(--ion-color-success-rgb),.12)}.mfa-status--off{color:var(--ion-color-dark-shade);background:var(--ion-color-light)}.mfa-secret-row{display:flex;align-items:center;gap:8px}.mfa-secret-row .mfa-secret{flex:1;margin:0}.mfa-secret-row ion-button{flex-shrink:0;--color: var(--ion-color-dark);margin:0}.mfa-error{color:var(--ion-color-danger);font-size:.8125rem;margin:4px 0 0}.mfa-block,.mfa-backup{display:flex;flex-direction:column;gap:12px}.mfa-block{padding:16px;border-radius:14px;background:var(--ion-color-light)}.mfa-alert{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:10px;background:var(--ion-color-light);border-left:3px solid var(--ion-color-primary)}.mfa-alert ion-icon{font-size:1.25rem;color:var(--ion-color-primary);flex-shrink:0;margin-top:1px}.mfa-alert p{margin:0;font-size:.8125rem;line-height:1.45;color:var(--ion-color-dark)}.mfa-qr{display:flex;justify-content:center;padding:8px 0}.mfa-secret{display:block;padding:10px 12px;border-radius:8px;background:var(--ion-color-light);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9375rem;letter-spacing:.04em;word-break:break-all;text-align:center}.mfa-pin{display:flex;justify-content:center;padding:8px 0}.mfa-codes{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;padding:12px;border-radius:12px;background:var(--ion-color-light)}.mfa-code{padding:8px;border-radius:6px;background:var(--ion-background-color, #fff);color:var(--ion-color-dark);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8125rem;text-align:center}.mfa-method-list{display:flex;flex-direction:column;gap:8px}.mfa-method-card{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-radius:12px;border:1.5px solid var(--ion-border-color, rgba(var(--ion-color-dark-rgb), .14));background:transparent;cursor:pointer;text-align:left;width:100%;transition:border-color .15s ease,background .15s ease}.mfa-method-card--active{border-color:var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.07)}.mfa-method-card__dot{flex-shrink:0;width:18px;height:18px;border-radius:50%;border:2px solid var(--ion-color-dark);margin-top:2px;transition:border-color .15s,box-shadow .15s}.mfa-method-card--active .mfa-method-card__dot{border-color:var(--ion-color-primary);box-shadow:inset 0 0 0 4px var(--ion-color-primary)}.mfa-method-card__body{display:flex;flex-direction:column;gap:3px}.mfa-method-card__body strong{font-size:.9375rem;font-weight:600;color:var(--ion-color-dark)}.mfa-method-card__body span{font-size:.8125rem;color:var(--ion-color-dark);line-height:1.4}.mfa-resend{text-align:center;font-size:.875rem;color:var(--ion-color-dark);margin:4px 0}.mfa-resend a{color:var(--ion-color-primary);cursor:pointer;font-weight:600}\n"] }]
45041
+ ], template: "<ion-modal [isOpen]=\"isOpen\" (didDismiss)=\"close()\" cssClass=\"val-modal-adaptive\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" color=\"dark\" shape=\"round\" (click)=\"close()\">\n <strong>{{ t('close') }}</strong>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-content class=\"ion-padding\">\n <section class=\"mfa-modal\">\n <val-display [props]=\"{ content: t('mfaManageTitle'), size: 'small', color: 'dark' }\" />\n\n @switch (step()) { @case ('loading') {\n <div class=\"mfa-loading\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @case ('status') { @if (mfaEnabled()) {\n <p class=\"mfa-status mfa-status--on\">{{ t('mfaEnabledLabel') }} \u00B7 {{ methodLabel(mfaMethod()) }}</p>\n\n @if (mfaMethod() === 'TOTP') {\n <div class=\"mfa-block\">\n <val-title [props]=\"{ size: 'small', color: 'dark', bold: true, content: t('mfaBackupCodesTitle') }\" />\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaBackupCodesAvailable') + ': ' + backupCodesCount() }\"\n />\n\n @if (regeneratedCodes(); as codes) {\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesSaveWarning') }} {{ t('mfaBackupCodesExplain') }}</p>\n </div>\n <div class=\"mfa-codes\">\n @for (code of codes; track code) {\n <code class=\"mfa-code\">{{ code }}</code>\n }\n </div>\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"copyCodes(codes)\">\n {{ t('mfaCopyCodes') }}\n </ion-button>\n } @else { @if (backupCodesCount() < 3) {\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesLow') }}</p>\n </div>\n }\n <ion-button\n expand=\"block\"\n color=\"dark\"\n fill=\"outline\"\n shape=\"round\"\n [disabled]=\"working()\"\n (click)=\"regenerateBackupCodes()\"\n >\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaRegenerateCodes') }} }\n </ion-button>\n }\n </div>\n }\n\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"goToDisable()\">\n {{ t('mfaDisableButton') }}\n </ion-button>\n } @else {\n <p class=\"mfa-status mfa-status--off\">{{ t('mfaDisabledLabel') }}</p>\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisabledHint') }\" />\n <ion-button expand=\"block\" shape=\"round\" (click)=\"goToMethodSelect()\"> {{ t('mfaEnableButton') }} </ion-button>\n } } @case ('method-select') {\n <val-title [props]=\"{ content: t('mfaEnableTitle'), size: 'large', color: 'dark', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaMethodPrompt') }\" />\n\n <div class=\"mfa-method-list\" role=\"radiogroup\">\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'TOTP'\"\n (click)=\"selectedMethod.set('TOTP')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'TOTP'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodTotp') }}</strong>\n <span>{{ t('mfaMethodTotpHint') }}</span>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'EMAIL'\"\n (click)=\"selectedMethod.set('EMAIL')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'EMAIL'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodEmail') }}</strong>\n <span>{{ t('mfaMethodEmailHint') }}</span>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"mfa-method-card\"\n [class.mfa-method-card--active]=\"selectedMethod() === 'SMS'\"\n (click)=\"selectedMethod.set('SMS')\"\n role=\"radio\"\n [attr.aria-checked]=\"selectedMethod() === 'SMS'\"\n >\n <span class=\"mfa-method-card__dot\"></span>\n <span class=\"mfa-method-card__body\">\n <strong>{{ t('mfaMethodSms') }}</strong>\n <span>{{ t('mfaMethodSmsHint') }}</span>\n </span>\n </button>\n </div>\n\n @if (selectedMethod() === 'SMS' && !userPhone()) {\n <val-phone-input\n [props]=\"{ control: phoneControl, label: t('mfaPhoneLabel'), placeholder: '912345678', defaultCountry: 'CL' }\"\n />\n @if (phoneControl.invalid && phoneControl.touched) {\n <p class=\"mfa-error\">{{ t('mfaPhoneInvalid') }}</p>\n } } @if (selectedMethod() === 'SMS' && userPhone(); as phone) {\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaPhoneRegistered') + ': ' + phone }\"\n />\n }\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"proceedWithMethod()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaContinue') }} }\n </ion-button>\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('totp-setup') {\n <val-title [props]=\"{ content: t('mfaTotpSetupTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpStep1') }\" />\n\n @if (totpQr(); as qr) {\n <div class=\"mfa-qr\">\n <val-qr-code [props]=\"{ qr: qr }\" />\n </div>\n } @if (totpSetup(); as setup) {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpManualEntry') }\" />\n <div class=\"mfa-secret-row\">\n <code class=\"mfa-secret\">{{ setup.secret }}</code>\n <ion-button fill=\"clear\" size=\"small\" (click)=\"copySecret(setup.secret)\" [attr.aria-label]=\"t('copy')\">\n @if (copiedSecret()) {\n <ion-icon name=\"checkmark-outline\"></ion-icon>\n } @else {\n <ion-icon name=\"copy-outline\"></ion-icon>\n }\n </ion-button>\n </div>\n\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaTotpStep2') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"verifyTotp()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaTotpVerify') }} }\n </ion-button>\n\n <div class=\"mfa-backup\">\n <val-title [props]=\"{ size: 'small', color: 'dark', bold: true, content: t('mfaBackupCodesTitle') }\" />\n <div class=\"mfa-alert\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>{{ t('mfaBackupCodesSaveWarning') }} {{ t('mfaBackupCodesExplain') }}</p>\n </div>\n <div class=\"mfa-codes\">\n @for (code of setup.backupCodes; track code) {\n <code class=\"mfa-code\">{{ code }}</code>\n }\n </div>\n <ion-button expand=\"block\" color=\"dark\" fill=\"outline\" shape=\"round\" (click)=\"copyCodes(setup.backupCodes)\">\n {{ t('mfaCopyCodes') }}\n </ion-button>\n </div>\n }\n\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('code-confirm') {\n <val-title [props]=\"{ content: t('mfaConfirmTitle'), size: 'large', color: '', bold: false }\" />\n <val-text\n [props]=\"{ size: 'medium', color: 'dark', bold: false, content: selectedMethod() === 'EMAIL' ? t('mfaConfirmPromptEmail') : t('mfaConfirmPromptSms') }\"\n />\n\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"confirmCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaConfirmButton') }} }\n </ion-button>\n\n <p class=\"mfa-resend\">\n {{ t('mfaNoCode') }} @if (resendCooldown() > 0) {\n <span>{{ t('mfaResendIn') }} {{ resendCooldown() }}s</span>\n } @else {\n <a (click)=\"resendCode()\">{{ t('mfaResend') }}</a>\n }\n </p>\n\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } @case ('disable') { @if (hasPassword()) {\n <val-form [props]=\"disableFormProps()\" (onSubmit)=\"onDisableSubmit($event)\" />\n } @else if (mfaMethod() === 'TOTP') {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableTotpPrompt') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"disableWithMfaCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableButton') }} }\n </ion-button>\n } @else if (mfaMethod() === 'EMAIL' || mfaMethod() === 'SMS') {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n @if (!disableCodeSent()) {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableCodePrompt') }\" />\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"sendDisableCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableSendCode') }} }\n </ion-button>\n } @else {\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableCodePrompt') }\" />\n <div class=\"mfa-pin\">\n <val-pin-input [props]=\"pinInputProps\" />\n </div>\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"working()\" (click)=\"disableWithMfaCode()\">\n @if (working()) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ t('mfaDisableButton') }} }\n </ion-button>\n <ion-button\n expand=\"block\"\n fill=\"clear\"\n color=\"dark\"\n shape=\"round\"\n [disabled]=\"working()\"\n (click)=\"sendDisableCode()\"\n >\n {{ t('mfaDisableResendCode') }}\n </ion-button>\n } } @else {\n <val-title [props]=\"{ content: t('mfaDisableTitle'), size: 'large', color: '', bold: false }\" />\n <val-text [props]=\"{ size: 'medium', color: 'dark', bold: false, content: t('mfaDisableNeedsPassword') }\" />\n }\n <ion-button expand=\"block\" fill=\"outline\" color=\"dark\" shape=\"round\" (click)=\"backToStatus()\">\n {{ t('mfaCancel') }}\n </ion-button>\n } }\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".mfa-modal{display:flex;flex-direction:column;gap:14px;padding-top:4px}.mfa-loading{display:flex;justify-content:center;padding:40px 0}.mfa-status{display:inline-flex;align-items:center;width:fit-content;padding:4px 10px;border-radius:999px;font-size:.8125rem;font-weight:600;margin:0}.mfa-status--on{color:var(--ion-color-success-shade);background:rgba(var(--ion-color-success-rgb),.12)}.mfa-status--off{color:var(--ion-color-dark-shade);background:var(--ion-color-light)}.mfa-secret-row{display:flex;align-items:center;gap:8px}.mfa-secret-row .mfa-secret{flex:1;margin:0}.mfa-secret-row ion-button{flex-shrink:0;--color: var(--ion-color-dark);margin:0}.mfa-error{color:var(--ion-color-danger);font-size:.8125rem;margin:4px 0 0}.mfa-block,.mfa-backup{display:flex;flex-direction:column;gap:12px}.mfa-block{padding:16px;border-radius:14px;background:var(--ion-color-light)}.mfa-alert{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:10px;background:var(--ion-color-light);border-left:3px solid var(--ion-color-primary)}.mfa-alert ion-icon{font-size:1.25rem;color:var(--ion-color-primary);flex-shrink:0;margin-top:1px}.mfa-alert p{margin:0;font-size:.8125rem;line-height:1.45;color:var(--ion-color-dark)}.mfa-qr{display:flex;justify-content:center;padding:8px 0}.mfa-secret{display:block;padding:10px 12px;border-radius:8px;background:var(--ion-color-light);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9375rem;letter-spacing:.04em;word-break:break-all;text-align:center}.mfa-pin{display:flex;justify-content:center;padding:8px 0}.mfa-codes{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;padding:12px;border-radius:12px;background:var(--ion-color-light)}.mfa-code{padding:8px;border-radius:6px;background:var(--ion-background-color, #fff);color:var(--ion-color-dark);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8125rem;text-align:center}.mfa-method-list{display:flex;flex-direction:column;gap:8px}.mfa-method-card{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-radius:12px;border:1.5px solid var(--ion-border-color, rgba(var(--ion-color-dark-rgb), .14));background:transparent;cursor:pointer;text-align:left;width:100%;transition:border-color .15s ease,background .15s ease}.mfa-method-card--active{border-color:var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.07)}.mfa-method-card__dot{flex-shrink:0;width:18px;height:18px;border-radius:50%;border:2px solid var(--ion-color-dark);margin-top:2px;transition:border-color .15s,box-shadow .15s}.mfa-method-card--active .mfa-method-card__dot{border-color:var(--ion-color-primary);box-shadow:inset 0 0 0 4px var(--ion-color-primary)}.mfa-method-card__body{display:flex;flex-direction:column;gap:3px}.mfa-method-card__body strong{font-size:.9375rem;font-weight:600;color:var(--ion-color-dark)}.mfa-method-card__body span{font-size:.8125rem;color:var(--ion-color-dark);line-height:1.4}.mfa-resend{text-align:center;font-size:.875rem;color:var(--ion-color-dark);margin:4px 0}.mfa-resend a{color:var(--ion-color-primary);cursor:pointer;font-weight:600}\n"] }]
45042
45042
  }], ctorParameters: () => [], propDecorators: { isOpen: [{
45043
45043
  type: Input
45044
45044
  }], prefillCode: [{
@@ -45129,7 +45129,7 @@ class ItemListComponent {
45129
45129
  <h2>{{ item.text }}</h2>
45130
45130
 
45131
45131
  @if (item.comments) {
45132
- <ion-note color="medium"> {{ item.comments }} </ion-note>
45132
+ <ion-note color="dark"> {{ item.comments }} </ion-note>
45133
45133
  }
45134
45134
 
45135
45135
  @if (item.subtitle) {
@@ -45159,11 +45159,11 @@ class ItemListComponent {
45159
45159
  }
45160
45160
 
45161
45161
  @if (item.subtitle) {
45162
- <ion-note color="medium"> {{ item.subtitle }} </ion-note>
45162
+ <ion-note color="dark"> {{ item.subtitle }} </ion-note>
45163
45163
  }
45164
45164
 
45165
45165
  @if (item.comments) {
45166
- <ion-note color="medium"> {{ item.comments }} </ion-note>
45166
+ <ion-note color="dark"> {{ item.comments }} </ion-note>
45167
45167
  }
45168
45168
  </ion-label>
45169
45169
 
@@ -45214,7 +45214,7 @@ class ItemListComponent {
45214
45214
  <h2>{{ item.text }}</h2>
45215
45215
 
45216
45216
  @if (item.comments) {
45217
- <ion-note color="medium"> {{ item.comments }} </ion-note>
45217
+ <ion-note color="dark"> {{ item.comments }} </ion-note>
45218
45218
  }
45219
45219
  </ion-label>
45220
45220
  </ion-item>
@@ -45314,7 +45314,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
45314
45314
  <h2>{{ item.text }}</h2>
45315
45315
 
45316
45316
  @if (item.comments) {
45317
- <ion-note color="medium"> {{ item.comments }} </ion-note>
45317
+ <ion-note color="dark"> {{ item.comments }} </ion-note>
45318
45318
  }
45319
45319
 
45320
45320
  @if (item.subtitle) {
@@ -45344,11 +45344,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
45344
45344
  }
45345
45345
 
45346
45346
  @if (item.subtitle) {
45347
- <ion-note color="medium"> {{ item.subtitle }} </ion-note>
45347
+ <ion-note color="dark"> {{ item.subtitle }} </ion-note>
45348
45348
  }
45349
45349
 
45350
45350
  @if (item.comments) {
45351
- <ion-note color="medium"> {{ item.comments }} </ion-note>
45351
+ <ion-note color="dark"> {{ item.comments }} </ion-note>
45352
45352
  }
45353
45353
  </ion-label>
45354
45354
 
@@ -45399,7 +45399,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
45399
45399
  <h2>{{ item.text }}</h2>
45400
45400
 
45401
45401
  @if (item.comments) {
45402
- <ion-note color="medium"> {{ item.comments }} </ion-note>
45402
+ <ion-note color="dark"> {{ item.comments }} </ion-note>
45403
45403
  }
45404
45404
  </ion-label>
45405
45405
  </ion-item>
@@ -45945,7 +45945,7 @@ class CommentSectionComponent {
45945
45945
  <ion-icon name="chatbubbles-outline" class="title-icon"></ion-icon>
45946
45946
  <h3 class="title">{{ displayTitle }}</h3>
45947
45947
  @if (props.showCount !== false && props.count !== undefined) {
45948
- <ion-badge color="medium" class="count-badge">
45948
+ <ion-badge color="dark" class="count-badge">
45949
45949
  {{ formatCount(props.count) }}
45950
45950
  </ion-badge>
45951
45951
  }
@@ -46107,7 +46107,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
46107
46107
  <ion-icon name="chatbubbles-outline" class="title-icon"></ion-icon>
46108
46108
  <h3 class="title">{{ displayTitle }}</h3>
46109
46109
  @if (props.showCount !== false && props.count !== undefined) {
46110
- <ion-badge color="medium" class="count-badge">
46110
+ <ion-badge color="dark" class="count-badge">
46111
46111
  {{ formatCount(props.count) }}
46112
46112
  </ion-badge>
46113
46113
  }
@@ -48697,7 +48697,7 @@ class MenuComponent {
48697
48697
  [attr.aria-pressed]="isDesktopCollapsed()"
48698
48698
  (click)="toggleDesktopCollapse()"
48699
48699
  >
48700
- <ion-icon color="medium" slot="icon-only" [name]="desktopCollapseIcon()"></ion-icon>
48700
+ <ion-icon color="dark" slot="icon-only" [name]="desktopCollapseIcon()"></ion-icon>
48701
48701
  </ion-button>
48702
48702
  </div>
48703
48703
  }
@@ -48805,7 +48805,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
48805
48805
  [attr.aria-pressed]="isDesktopCollapsed()"
48806
48806
  (click)="toggleDesktopCollapse()"
48807
48807
  >
48808
- <ion-icon color="medium" slot="icon-only" [name]="desktopCollapseIcon()"></ion-icon>
48808
+ <ion-icon color="dark" slot="icon-only" [name]="desktopCollapseIcon()"></ion-icon>
48809
48809
  </ion-button>
48810
48810
  </div>
48811
48811
  }
@@ -49900,7 +49900,7 @@ class InfiniteListComponent {
49900
49900
  {{ mergedProps.loadMoreText || i18n.t('loadMore') }}
49901
49901
  </ion-button>
49902
49902
  } @else {
49903
- <ion-text color="medium">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
49903
+ <ion-text color="dark">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
49904
49904
  }
49905
49905
  </div>
49906
49906
  } @else {
@@ -49920,7 +49920,7 @@ class InfiniteListComponent {
49920
49920
  <!-- No more items indicator -->
49921
49921
  @if (!hasMoreBottom() && items().length > 0 && !mergedProps.useLoadMoreButton) {
49922
49922
  <div class="infinite-list-end">
49923
- <ion-text color="medium">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
49923
+ <ion-text color="dark">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
49924
49924
  </div>
49925
49925
  }
49926
49926
  </div>
@@ -50067,7 +50067,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
50067
50067
  {{ mergedProps.loadMoreText || i18n.t('loadMore') }}
50068
50068
  </ion-button>
50069
50069
  } @else {
50070
- <ion-text color="medium">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
50070
+ <ion-text color="dark">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
50071
50071
  }
50072
50072
  </div>
50073
50073
  } @else {
@@ -50087,7 +50087,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
50087
50087
  <!-- No more items indicator -->
50088
50088
  @if (!hasMoreBottom() && items().length > 0 && !mergedProps.useLoadMoreButton) {
50089
50089
  <div class="infinite-list-end">
50090
- <ion-text color="medium">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
50090
+ <ion-text color="dark">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
50091
50091
  </div>
50092
50092
  }
50093
50093
  </div>
@@ -55404,7 +55404,7 @@ class LoginAttemptModalComponent {
55404
55404
  get mineBtn() {
55405
55405
  return {
55406
55406
  text: this.mineLabel,
55407
- color: 'medium',
55407
+ color: 'dark',
55408
55408
  fill: 'outline',
55409
55409
  size: 'default',
55410
55410
  type: 'button',
@@ -55477,7 +55477,7 @@ class LoginAttemptModalComponent {
55477
55477
  [props]="{
55478
55478
  content: metaLabel,
55479
55479
  size: 'small',
55480
- color: 'medium',
55480
+ color: 'dark',
55481
55481
  bold: false,
55482
55482
  }"
55483
55483
  />
@@ -55492,7 +55492,7 @@ class LoginAttemptModalComponent {
55492
55492
  [props]="{
55493
55493
  content: doneLabel,
55494
55494
  size: 'small',
55495
- color: 'medium',
55495
+ color: 'dark',
55496
55496
  bold: false,
55497
55497
  }"
55498
55498
  />
@@ -55568,7 +55568,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
55568
55568
  [props]="{
55569
55569
  content: metaLabel,
55570
55570
  size: 'small',
55571
- color: 'medium',
55571
+ color: 'dark',
55572
55572
  bold: false,
55573
55573
  }"
55574
55574
  />
@@ -55583,7 +55583,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
55583
55583
  [props]="{
55584
55584
  content: doneLabel,
55585
55585
  size: 'small',
55586
- color: 'medium',
55586
+ color: 'dark',
55587
55587
  bold: false,
55588
55588
  }"
55589
55589
  />
@@ -55733,7 +55733,7 @@ class SessionListModalComponent {
55733
55733
  [props]="{
55734
55734
  content: formatMeta(s),
55735
55735
  size: 'small',
55736
- color: 'medium',
55736
+ color: 'dark',
55737
55737
  bold: false,
55738
55738
  }"
55739
55739
  />
@@ -55793,7 +55793,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
55793
55793
  [props]="{
55794
55794
  content: formatMeta(s),
55795
55795
  size: 'small',
55796
- color: 'medium',
55796
+ color: 'dark',
55797
55797
  bold: false,
55798
55798
  }"
55799
55799
  />
@@ -56472,7 +56472,7 @@ class SecurityViewComponent {
56472
56472
  [props]="{
56473
56473
  content: sessionsEmptyLabel(),
56474
56474
  size: 'small',
56475
- color: 'medium',
56475
+ color: 'dark',
56476
56476
  bold: false,
56477
56477
  }"
56478
56478
  />
@@ -56494,7 +56494,7 @@ class SecurityViewComponent {
56494
56494
  [props]="{
56495
56495
  content: formatSessionMeta(s),
56496
56496
  size: 'small',
56497
- color: 'medium',
56497
+ color: 'dark',
56498
56498
  bold: false,
56499
56499
  }"
56500
56500
  />
@@ -56624,7 +56624,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
56624
56624
  [props]="{
56625
56625
  content: sessionsEmptyLabel(),
56626
56626
  size: 'small',
56627
- color: 'medium',
56627
+ color: 'dark',
56628
56628
  bold: false,
56629
56629
  }"
56630
56630
  />
@@ -56646,7 +56646,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
56646
56646
  [props]="{
56647
56647
  content: formatSessionMeta(s),
56648
56648
  size: 'small',
56649
- color: 'medium',
56649
+ color: 'dark',
56650
56650
  bold: false,
56651
56651
  }"
56652
56652
  />
@@ -57421,7 +57421,7 @@ class DeleteAccountModalComponent {
57421
57421
  <div class="resend-row">
57422
57422
  <ion-button
57423
57423
  fill="clear"
57424
- color="medium"
57424
+ color="dark"
57425
57425
  size="small"
57426
57426
  [disabled]="formState() === 'WORKING'"
57427
57427
  (click)="onResendCode()"
@@ -57466,7 +57466,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
57466
57466
  <div class="resend-row">
57467
57467
  <ion-button
57468
57468
  fill="clear"
57469
- color="medium"
57469
+ color="dark"
57470
57470
  size="small"
57471
57471
  [disabled]="formState() === 'WORKING'"
57472
57472
  (click)="onResendCode()"
@@ -60154,7 +60154,7 @@ class MemberDetailModalComponent {
60154
60154
  [props]="{
60155
60155
  content: t('roleHint'),
60156
60156
  size: 'small',
60157
- color: 'medium',
60157
+ color: 'dark',
60158
60158
  bold: false,
60159
60159
  }"
60160
60160
  />
@@ -60269,7 +60269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
60269
60269
  [props]="{
60270
60270
  content: t('roleHint'),
60271
60271
  size: 'small',
60272
- color: 'medium',
60272
+ color: 'dark',
60273
60273
  bold: false,
60274
60274
  }"
60275
60275
  />
@@ -60626,7 +60626,7 @@ class PermissionsViewComponent {
60626
60626
  [props]="{
60627
60627
  content: tt('errorTitle'),
60628
60628
  size: 'medium',
60629
- color: 'medium',
60629
+ color: 'dark',
60630
60630
  bold: false,
60631
60631
  }"
60632
60632
  />
@@ -60648,7 +60648,7 @@ class PermissionsViewComponent {
60648
60648
  [props]="{
60649
60649
  content: tt('systemRolesHint'),
60650
60650
  size: 'medium',
60651
- color: 'medium',
60651
+ color: 'dark',
60652
60652
  bold: false,
60653
60653
  }"
60654
60654
  />
@@ -60719,7 +60719,7 @@ class PermissionsViewComponent {
60719
60719
  [props]="{
60720
60720
  content: tt('customRolesHint'),
60721
60721
  size: 'medium',
60722
- color: 'medium',
60722
+ color: 'dark',
60723
60723
  bold: false,
60724
60724
  }"
60725
60725
  />
@@ -60729,7 +60729,7 @@ class PermissionsViewComponent {
60729
60729
  [props]="{
60730
60730
  content: tt('noCustomRoles'),
60731
60731
  size: 'medium',
60732
- color: 'medium',
60732
+ color: 'dark',
60733
60733
  bold: false,
60734
60734
  }"
60735
60735
  />
@@ -60817,7 +60817,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
60817
60817
  [props]="{
60818
60818
  content: tt('errorTitle'),
60819
60819
  size: 'medium',
60820
- color: 'medium',
60820
+ color: 'dark',
60821
60821
  bold: false,
60822
60822
  }"
60823
60823
  />
@@ -60839,7 +60839,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
60839
60839
  [props]="{
60840
60840
  content: tt('systemRolesHint'),
60841
60841
  size: 'medium',
60842
- color: 'medium',
60842
+ color: 'dark',
60843
60843
  bold: false,
60844
60844
  }"
60845
60845
  />
@@ -60910,7 +60910,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
60910
60910
  [props]="{
60911
60911
  content: tt('customRolesHint'),
60912
60912
  size: 'medium',
60913
- color: 'medium',
60913
+ color: 'dark',
60914
60914
  bold: false,
60915
60915
  }"
60916
60916
  />
@@ -60920,7 +60920,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
60920
60920
  [props]="{
60921
60921
  content: tt('noCustomRoles'),
60922
60922
  size: 'medium',
60923
- color: 'medium',
60923
+ color: 'dark',
60924
60924
  bold: false,
60925
60925
  }"
60926
60926
  />
@@ -61156,7 +61156,7 @@ class TransferOwnershipModalComponent {
61156
61156
  [props]="{
61157
61157
  content: t('empty'),
61158
61158
  size: 'medium',
61159
- color: 'medium',
61159
+ color: 'dark',
61160
61160
  bold: false,
61161
61161
  }"
61162
61162
  />
@@ -61165,7 +61165,7 @@ class TransferOwnershipModalComponent {
61165
61165
  [props]="{
61166
61166
  content: noResultsLabel(),
61167
61167
  size: 'medium',
61168
- color: 'medium',
61168
+ color: 'dark',
61169
61169
  bold: false,
61170
61170
  }"
61171
61171
  />
@@ -61245,7 +61245,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
61245
61245
  [props]="{
61246
61246
  content: t('empty'),
61247
61247
  size: 'medium',
61248
- color: 'medium',
61248
+ color: 'dark',
61249
61249
  bold: false,
61250
61250
  }"
61251
61251
  />
@@ -61254,7 +61254,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
61254
61254
  [props]="{
61255
61255
  content: noResultsLabel(),
61256
61256
  size: 'medium',
61257
- color: 'medium',
61257
+ color: 'dark',
61258
61258
  bold: false,
61259
61259
  }"
61260
61260
  />
@@ -61551,7 +61551,7 @@ class MemberImportModalComponent {
61551
61551
  @if (rolesHint()) {
61552
61552
  <val-text
61553
61553
  class="import-roles-hint"
61554
- [props]="{ content: rolesHint(), size: 'small', color: 'medium', bold: false }"
61554
+ [props]="{ content: rolesHint(), size: 'small', color: 'dark', bold: false }"
61555
61555
  />
61556
61556
  }
61557
61557
 
@@ -61709,7 +61709,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
61709
61709
  @if (rolesHint()) {
61710
61710
  <val-text
61711
61711
  class="import-roles-hint"
61712
- [props]="{ content: rolesHint(), size: 'small', color: 'medium', bold: false }"
61712
+ [props]="{ content: rolesHint(), size: 'small', color: 'dark', bold: false }"
61713
61713
  />
61714
61714
  }
61715
61715
 
@@ -63509,7 +63509,7 @@ class OrganizationViewComponent {
63509
63509
  [props]="{
63510
63510
  content: 'RBAC (live)',
63511
63511
  size: 'small',
63512
- color: 'medium',
63512
+ color: 'dark',
63513
63513
  bold: false,
63514
63514
  }"
63515
63515
  />
@@ -63827,7 +63827,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
63827
63827
  [props]="{
63828
63828
  content: 'RBAC (live)',
63829
63829
  size: 'small',
63830
- color: 'medium',
63830
+ color: 'dark',
63831
63831
  bold: false,
63832
63832
  }"
63833
63833
  />
@@ -64417,7 +64417,7 @@ class NotificationPreferencesViewComponent {
64417
64417
  <val-text
64418
64418
  [props]="{
64419
64419
  size: 'small',
64420
- color: 'medium',
64420
+ color: 'dark',
64421
64421
  bold: false,
64422
64422
  content: tt('iosInstallHint'),
64423
64423
  }"
@@ -64449,7 +64449,7 @@ class NotificationPreferencesViewComponent {
64449
64449
  <val-text
64450
64450
  [props]="{
64451
64451
  size: 'small',
64452
- color: 'medium',
64452
+ color: 'dark',
64453
64453
  bold: false,
64454
64454
  content: tt('simpleDescription'),
64455
64455
  }"
@@ -64551,7 +64551,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
64551
64551
  <val-text
64552
64552
  [props]="{
64553
64553
  size: 'small',
64554
- color: 'medium',
64554
+ color: 'dark',
64555
64555
  bold: false,
64556
64556
  content: tt('iosInstallHint'),
64557
64557
  }"
@@ -64583,7 +64583,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
64583
64583
  <val-text
64584
64584
  [props]="{
64585
64585
  size: 'small',
64586
- color: 'medium',
64586
+ color: 'dark',
64587
64587
  bold: false,
64588
64588
  content: tt('simpleDescription'),
64589
64589
  }"
@@ -66273,7 +66273,7 @@ class NotificationsViewComponent {
66273
66273
  [props]="{
66274
66274
  content: ctaHint(),
66275
66275
  size: 'small',
66276
- color: 'medium',
66276
+ color: 'dark',
66277
66277
  bold: false,
66278
66278
  }"
66279
66279
  />
@@ -66433,7 +66433,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
66433
66433
  [props]="{
66434
66434
  content: ctaHint(),
66435
66435
  size: 'small',
66436
- color: 'medium',
66436
+ color: 'dark',
66437
66437
  bold: false,
66438
66438
  }"
66439
66439
  />
@@ -68033,7 +68033,7 @@ class RoleManagerComponent {
68033
68033
  {{ t('save') }}
68034
68034
  }
68035
68035
  </ion-button>
68036
- <ion-button type="button" fill="clear" size="small" color="medium" (click)="closeRoleForm()">
68036
+ <ion-button type="button" fill="clear" size="small" color="dark" (click)="closeRoleForm()">
68037
68037
  {{ t('cancel') }}
68038
68038
  </ion-button>
68039
68039
  </div>
@@ -68099,7 +68099,7 @@ class RoleManagerComponent {
68099
68099
  }
68100
68100
  </ion-list>
68101
68101
  <div class="rm-sheet-footer">
68102
- <ion-button fill="clear" color="medium" expand="block" (click)="closeRoleSelector()">
68102
+ <ion-button fill="clear" color="dark" expand="block" (click)="closeRoleSelector()">
68103
68103
  {{ t('cancel') }}
68104
68104
  </ion-button>
68105
68105
  </div>
@@ -68239,7 +68239,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68239
68239
  {{ t('save') }}
68240
68240
  }
68241
68241
  </ion-button>
68242
- <ion-button type="button" fill="clear" size="small" color="medium" (click)="closeRoleForm()">
68242
+ <ion-button type="button" fill="clear" size="small" color="dark" (click)="closeRoleForm()">
68243
68243
  {{ t('cancel') }}
68244
68244
  </ion-button>
68245
68245
  </div>
@@ -68305,7 +68305,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68305
68305
  }
68306
68306
  </ion-list>
68307
68307
  <div class="rm-sheet-footer">
68308
- <ion-button fill="clear" color="medium" expand="block" (click)="closeRoleSelector()">
68308
+ <ion-button fill="clear" color="dark" expand="block" (click)="closeRoleSelector()">
68309
68309
  {{ t('cancel') }}
68310
68310
  </ion-button>
68311
68311
  </div>
@@ -72047,7 +72047,7 @@ class FieldListComponent {
72047
72047
  <ion-button
72048
72048
  class="fl-remove"
72049
72049
  fill="clear"
72050
- color="medium"
72050
+ color="dark"
72051
72051
  size="small"
72052
72052
  [attr.aria-label]="removeText()"
72053
72053
  (click)="removeRow($index)"
@@ -72103,7 +72103,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
72103
72103
  <ion-button
72104
72104
  class="fl-remove"
72105
72105
  fill="clear"
72106
- color="medium"
72106
+ color="dark"
72107
72107
  size="small"
72108
72108
  [attr.aria-label]="removeText()"
72109
72109
  (click)="removeRow($index)"
@@ -72386,7 +72386,7 @@ class ApiKeysModalComponent {
72386
72386
  } @else {
72387
72387
  <!-- Lista -->
72388
72388
  @if (keys().length === 0) {
72389
- <val-text [props]="{ content: t('empty'), size: 'medium', color: 'medium', bold: false }" />
72389
+ <val-text [props]="{ content: t('empty'), size: 'medium', color: 'dark', bold: false }" />
72390
72390
  } @else {
72391
72391
  <div class="apikey-list">
72392
72392
  @for (k of keys(); track k.keyId) {
@@ -72421,7 +72421,7 @@ class ApiKeysModalComponent {
72421
72421
  (selectedChange)="selectedPerms.set($event)"
72422
72422
  />
72423
72423
  <val-form [props]="createForm()" (onSubmit)="onCreateSubmit($event)" />
72424
- <ion-button expand="block" fill="clear" color="medium" shape="round" (click)="showCreate.set(false)">
72424
+ <ion-button expand="block" fill="clear" color="dark" shape="round" (click)="showCreate.set(false)">
72425
72425
  {{ t('cancel') }}
72426
72426
  </ion-button>
72427
72427
  </div>
@@ -72489,7 +72489,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
72489
72489
  } @else {
72490
72490
  <!-- Lista -->
72491
72491
  @if (keys().length === 0) {
72492
- <val-text [props]="{ content: t('empty'), size: 'medium', color: 'medium', bold: false }" />
72492
+ <val-text [props]="{ content: t('empty'), size: 'medium', color: 'dark', bold: false }" />
72493
72493
  } @else {
72494
72494
  <div class="apikey-list">
72495
72495
  @for (k of keys(); track k.keyId) {
@@ -72524,7 +72524,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
72524
72524
  (selectedChange)="selectedPerms.set($event)"
72525
72525
  />
72526
72526
  <val-form [props]="createForm()" (onSubmit)="onCreateSubmit($event)" />
72527
- <ion-button expand="block" fill="clear" color="medium" shape="round" (click)="showCreate.set(false)">
72527
+ <ion-button expand="block" fill="clear" color="dark" shape="round" (click)="showCreate.set(false)">
72528
72528
  {{ t('cancel') }}
72529
72529
  </ion-button>
72530
72530
  </div>
@@ -72800,7 +72800,7 @@ function makeQuoteOrCallout(block, labels) {
72800
72800
  props: {
72801
72801
  content: text,
72802
72802
  size: 'medium',
72803
- color: 'medium',
72803
+ color: 'dark',
72804
72804
  bold: false,
72805
72805
  showQuoteMark: true,
72806
72806
  alignment: 'left',
@@ -73834,7 +73834,7 @@ class PageContentComponent {
73834
73834
  El input hideRightsFooter existe para el caso raro (un kiosco a
73835
73835
  pantalla completa), no para que cada vista decida. -->
73836
73836
  @if (!hideRightsFooter) {
73837
- <val-rights-footer [props]="{ align: 'center', color: 'medium' }" />
73837
+ <val-rights-footer [props]="{ align: 'center', color: 'dark' }" />
73838
73838
  }
73839
73839
  </div>
73840
73840
  </ion-content>
@@ -73892,7 +73892,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
73892
73892
  El input hideRightsFooter existe para el caso raro (un kiosco a
73893
73893
  pantalla completa), no para que cada vista decida. -->
73894
73894
  @if (!hideRightsFooter) {
73895
- <val-rights-footer [props]="{ align: 'center', color: 'medium' }" />
73895
+ <val-rights-footer [props]="{ align: 'center', color: 'dark' }" />
73896
73896
  }
73897
73897
  </div>
73898
73898
  </ion-content>
@@ -75661,7 +75661,7 @@ function metaToInlineText(el) {
75661
75661
  props: {
75662
75662
  content: text,
75663
75663
  size: 'small',
75664
- color: 'medium',
75664
+ color: 'dark',
75665
75665
  bold: false,
75666
75666
  allowPartialBold: true,
75667
75667
  processLinks: true,
@@ -79019,7 +79019,7 @@ class ContentTransformer {
79019
79019
  builder.paragraph({
79020
79020
  content: `Tags: ${doc.meta.tags.join(', ')}`,
79021
79021
  size: 'small',
79022
- color: 'medium',
79022
+ color: 'dark',
79023
79023
  bold: false,
79024
79024
  });
79025
79025
  }
@@ -79039,7 +79039,7 @@ class ContentTransformer {
79039
79039
  builder.paragraph({
79040
79040
  content: authorText,
79041
79041
  size: 'small',
79042
- color: 'medium',
79042
+ color: 'dark',
79043
79043
  bold: false,
79044
79044
  });
79045
79045
  }
@@ -81044,7 +81044,7 @@ class FeedbackFormComponent {
81044
81044
  <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)" />
81045
81045
 
81046
81046
  @if (props.cancelButtonText) {
81047
- <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
81047
+ <ion-button fill="outline" color="dark" expand="block" class="cancel-button" (click)="onCancelClick()">
81048
81048
  {{ props.cancelButtonText }}
81049
81049
  </ion-button>
81050
81050
  }
@@ -81066,7 +81066,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
81066
81066
  <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)" />
81067
81067
 
81068
81068
  @if (props.cancelButtonText) {
81069
- <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
81069
+ <ion-button fill="outline" color="dark" expand="block" class="cancel-button" (click)="onCancelClick()">
81070
81070
  {{ props.cancelButtonText }}
81071
81071
  </ion-button>
81072
81072
  }