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.
- package/esm2022/lib/components/atoms/notice/notice.component.mjs +3 -3
- package/esm2022/lib/components/atoms/rights-footer/rights-footer.component.mjs +2 -2
- package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/date-picker/date-picker.component.mjs +5 -5
- package/esm2022/lib/components/molecules/empty-state/empty-state.component.mjs +3 -3
- package/esm2022/lib/components/molecules/feedback-form/feedback-form.component.mjs +3 -3
- package/esm2022/lib/components/molecules/field-options-editor/field-options-editor.component.mjs +3 -3
- package/esm2022/lib/components/molecules/footer-links/footer-links.component.mjs +3 -3
- package/esm2022/lib/components/molecules/image-crop/image-crop.component.mjs +3 -3
- package/esm2022/lib/components/molecules/linked-providers/linked-providers.component.mjs +3 -3
- package/esm2022/lib/components/molecules/multi-select-search/multi-select-search.component.mjs +3 -3
- package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +3 -3
- package/esm2022/lib/components/molecules/option-cards/option-cards.component.mjs +3 -3
- package/esm2022/lib/components/molecules/permission-selector/permission-selector.component.mjs +3 -3
- package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +3 -3
- package/esm2022/lib/components/molecules/request-form/request-form.component.mjs +3 -3
- package/esm2022/lib/components/molecules/update-banner/update-banner.component.mjs +3 -3
- package/esm2022/lib/components/organisms/access-request-view/access-request-view.component.mjs +3 -3
- package/esm2022/lib/components/organisms/api-keys-modal/api-keys-modal.component.mjs +5 -5
- package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +3 -3
- package/esm2022/lib/components/organisms/cookie-settings/cookie-settings.component.mjs +3 -3
- package/esm2022/lib/components/organisms/delete-account-modal/delete-account-modal.component.mjs +3 -3
- package/esm2022/lib/components/organisms/field-list/field-list.component.mjs +3 -3
- package/esm2022/lib/components/organisms/form/form.component.mjs +3 -3
- package/esm2022/lib/components/organisms/infinite-list/infinite-list.component.mjs +5 -5
- package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +9 -9
- package/esm2022/lib/components/organisms/login-attempt-modal/login-attempt-modal.component.mjs +6 -6
- package/esm2022/lib/components/organisms/member-detail-modal/member-detail-modal.component.mjs +3 -3
- package/esm2022/lib/components/organisms/member-import-modal/member-import-modal.component.mjs +3 -3
- package/esm2022/lib/components/organisms/menu/menu.component.mjs +3 -3
- package/esm2022/lib/components/organisms/mfa-modal/mfa-modal.component.mjs +3 -3
- package/esm2022/lib/components/organisms/notification-preferences-view/notification-preferences-view.component.mjs +5 -5
- package/esm2022/lib/components/organisms/notifications-view/notifications-view.component.mjs +3 -3
- package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +3 -3
- package/esm2022/lib/components/organisms/permissions-view/permissions-view.component.mjs +9 -9
- package/esm2022/lib/components/organisms/request-review-panel/request-review-panel.component.mjs +3 -3
- package/esm2022/lib/components/organisms/role-manager/role-manager.component.mjs +5 -5
- package/esm2022/lib/components/organisms/security-view/security-view.component.mjs +5 -5
- package/esm2022/lib/components/organisms/session-list-modal/session-list-modal.component.mjs +3 -3
- package/esm2022/lib/components/organisms/transfer-ownership-modal/transfer-ownership-modal.component.mjs +5 -5
- package/esm2022/lib/components/templates/page-content/page-content.component.mjs +3 -3
- package/esm2022/lib/services/confirmation-dialog/types.mjs +2 -2
- package/esm2022/lib/services/content/transformer.mjs +3 -3
- package/esm2022/lib/services/markdown-article/beautify-legal-article.mjs +2 -2
- package/esm2022/lib/services/markdown-article/markdown-article-parser.mjs +2 -2
- package/esm2022/lib/services/modal/types.mjs +2 -2
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +117 -117
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
- package/lib/version.d.ts +1 -1
- 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.
|
|
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: '
|
|
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: '
|
|
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-
|
|
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-
|
|
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: '
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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=
|
|
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=
|
|
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: '
|
|
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: '
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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: '
|
|
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: '
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
45162
|
+
<ion-note color="dark"> {{ item.subtitle }} </ion-note>
|
|
45163
45163
|
}
|
|
45164
45164
|
|
|
45165
45165
|
@if (item.comments) {
|
|
45166
|
-
<ion-note color="
|
|
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="
|
|
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="
|
|
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="
|
|
45347
|
+
<ion-note color="dark"> {{ item.subtitle }} </ion-note>
|
|
45348
45348
|
}
|
|
45349
45349
|
|
|
45350
45350
|
@if (item.comments) {
|
|
45351
|
-
<ion-note color="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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="
|
|
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="
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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: '
|
|
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="
|
|
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: '
|
|
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="
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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="
|
|
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="
|
|
81069
|
+
<ion-button fill="outline" color="dark" expand="block" class="cancel-button" (click)="onCancelClick()">
|
|
81070
81070
|
{{ props.cancelButtonText }}
|
|
81071
81071
|
</ion-button>
|
|
81072
81072
|
}
|