@carefirst/library 2.0.31 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (24) hide show
  1. package/esm2022/lib/components/alert/alert.component.mjs +3 -3
  2. package/esm2022/lib/components/badge/badge.component.mjs +3 -3
  3. package/esm2022/lib/components/button/button.component.mjs +3 -3
  4. package/esm2022/lib/components/calendar/calendar.component.mjs +3 -3
  5. package/esm2022/lib/components/chat-bubble/chat-bubble.component.mjs +3 -3
  6. package/esm2022/lib/components/form-input/form-input.component.mjs +3 -3
  7. package/esm2022/lib/components/form-input-select/form-input-select.component.mjs +3 -3
  8. package/esm2022/lib/components/form-input-text-area/form-input-text-area.component.mjs +3 -3
  9. package/esm2022/lib/components/form-validation/form-validation.component.mjs +3 -3
  10. package/esm2022/lib/components/icon/icon.component.mjs +3 -3
  11. package/esm2022/lib/components/logo/logo.component.mjs +3 -3
  12. package/esm2022/lib/components/mix-p/mix-p.component.mjs +3 -3
  13. package/esm2022/lib/components/notification/notification.component.mjs +3 -3
  14. package/esm2022/lib/components/page/page.component.mjs +3 -3
  15. package/esm2022/lib/components/spacer/spacer.component.mjs +3 -3
  16. package/esm2022/lib/components/spinner/spinner.component.mjs +3 -3
  17. package/esm2022/lib/components/verification-code/verification-code.component.mjs +3 -3
  18. package/esm2022/lib/directives/button-loader.directive.mjs +6 -6
  19. package/esm2022/lib/library.module.mjs +4 -4
  20. package/esm2022/lib/utils/form-validators-utility.mjs +22 -1
  21. package/fesm2022/carefirst-library.mjs +82 -61
  22. package/fesm2022/carefirst-library.mjs.map +1 -1
  23. package/lib/utils/form-validators-utility.d.ts +1 -0
  24. package/package.json +1 -1
@@ -24,10 +24,10 @@ export class MixPComponent {
24
24
  updateClass() {
25
25
  this.pClass = (this.getScreenWidth < 768 ? this.inputMobile : this.inputDesktop) || 'body-standard';
26
26
  }
27
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: MixPComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: MixPComponent, selector: "cf-mix-p", inputs: { mobile: "mobile", desktop: "desktop" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, usesOnChanges: true, ngImport: i0, template: "<!-- Desktop -->\n<p [ngClass]=\"pClass\"><ng-content></ng-content></p>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: MixPComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: MixPComponent, selector: "cf-mix-p", inputs: { mobile: "mobile", desktop: "desktop" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, usesOnChanges: true, ngImport: i0, template: "<!-- Desktop -->\n<p [ngClass]=\"pClass\"><ng-content></ng-content></p>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
29
29
  }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: MixPComponent, decorators: [{
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: MixPComponent, decorators: [{
31
31
  type: Component,
32
32
  args: [{ selector: 'cf-mix-p', template: "<!-- Desktop -->\n<p [ngClass]=\"pClass\"><ng-content></ng-content></p>\n" }]
33
33
  }], propDecorators: { mobile: [{
@@ -8,10 +8,10 @@ import * as i5 from "../icon/icon.component";
8
8
  export class NotificationComponent {
9
9
  data;
10
10
  buttonClick = new EventEmitter();
11
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: NotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: NotificationComponent, selector: "cf-notification", inputs: { data: "data" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<div *ngIf=\"data\">\n <cf-spacer mobile=\"16\" desktop=\"24\"></cf-spacer>\n <ion-grid>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col size=\"12\">\n <div [ngClass]=\"data.status\" id=\"notification-container\">\n <ion-grid>\n <ion-row>\n <ion-col class=\"ion-align-self-center ion-text-start\">\n <p class=\"body-medium bold\">{{ data.heading }}</p>\n </ion-col>\n <ion-col size=\"auto\">\n <cf-icon icon=\"close\" *ngIf=\"data.canClose\" (click)=\"data = undefined\" [height]=\"10\" [iconColor]=\"data.status\"></cf-icon>\n </ion-col>\n <ion-col *ngIf=\"data.message\" size=\"12\">\n <cf-spacer default=\"8\"></cf-spacer>\n <p class=\"body-small\">{{ data.message }}</p>\n </ion-col>\n <ion-col *ngIf=\"data.button?.buttonHeading\">\n <cf-spacer default=\"8\"></cf-spacer>\n <p class=\"body-medium bold\">{{ data.button?.buttonHeading }}</p>\n </ion-col>\n <ion-col size=\"12\">\n <ng-content></ng-content>\n </ion-col>\n <ion-col size=\"12\" *ngIf=\"data.button\">\n <cf-spacer default=\"8\"></cf-spacer>\n <cf-btn type=\"primary\" fontSize=\"large\" action snug (click)=\"buttonClick.emit(data.button.buttonClickIdentifier)\">{{\n data.button.buttonText\n }}</cf-btn>\n </ion-col>\n </ion-row>\n </ion-grid>\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n</div>\n", styles: ["#notification-container{border-radius:4px;text-align:start;padding:12px;margin-inline:auto;max-width:640px}#notification-container.success{border:1.5px solid var(--cf-app-system-color-success);background-color:var(--cf-app-system-color-light-success)}#notification-container.warning{border:1.5px solid var(--cf-app-system-color-warning);background-color:var(--cf-app-system-color-light-warning)}#notification-container.error{border:1.5px solid var(--cf-app-system-color-error);background-color:var(--cf-app-system-color-light-error)}\n"], dependencies: [{ kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "cf-btn", inputs: ["type", "disabled", "alert", "action", "snug", "accent", "fontSize", "iconStart", "iconEnd", "loading", "customColor"] }, { kind: "component", type: i4.SpacerComponent, selector: "cf-spacer", inputs: ["default", "mobile", "desktop"] }, { kind: "component", type: i5.IconComponent, selector: "cf-icon", inputs: ["icon", "height", "heightMobile", "heightDesktop", "iconColor"] }] });
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: NotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: NotificationComponent, selector: "cf-notification", inputs: { data: "data" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<div *ngIf=\"data\">\n <cf-spacer mobile=\"16\" desktop=\"24\"></cf-spacer>\n <ion-grid>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col size=\"12\">\n <div [ngClass]=\"data.status\" id=\"notification-container\">\n <ion-grid>\n <ion-row>\n <ion-col class=\"ion-align-self-center ion-text-start\">\n <p class=\"body-medium bold\">{{ data.heading }}</p>\n </ion-col>\n <ion-col size=\"auto\">\n <cf-icon icon=\"close\" *ngIf=\"data.canClose\" (click)=\"data = undefined\" [height]=\"10\" [iconColor]=\"data.status\"></cf-icon>\n </ion-col>\n <ion-col *ngIf=\"data.message\" size=\"12\">\n <cf-spacer default=\"8\"></cf-spacer>\n <p class=\"body-small\">{{ data.message }}</p>\n </ion-col>\n <ion-col *ngIf=\"data.button?.buttonHeading\">\n <cf-spacer default=\"8\"></cf-spacer>\n <p class=\"body-medium bold\">{{ data.button?.buttonHeading }}</p>\n </ion-col>\n <ion-col size=\"12\">\n <ng-content></ng-content>\n </ion-col>\n <ion-col size=\"12\" *ngIf=\"data.button\">\n <cf-spacer default=\"8\"></cf-spacer>\n <cf-btn type=\"primary\" fontSize=\"large\" action snug (click)=\"buttonClick.emit(data.button.buttonClickIdentifier)\">{{\n data.button.buttonText\n }}</cf-btn>\n </ion-col>\n </ion-row>\n </ion-grid>\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n</div>\n", styles: ["#notification-container{border-radius:4px;text-align:start;padding:12px;margin-inline:auto;max-width:640px}#notification-container.success{border:1.5px solid var(--cf-app-system-color-success);background-color:var(--cf-app-system-color-light-success)}#notification-container.warning{border:1.5px solid var(--cf-app-system-color-warning);background-color:var(--cf-app-system-color-light-warning)}#notification-container.error{border:1.5px solid var(--cf-app-system-color-error);background-color:var(--cf-app-system-color-light-error)}\n"], dependencies: [{ kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "cf-btn", inputs: ["type", "disabled", "alert", "action", "snug", "accent", "fontSize", "iconStart", "iconEnd", "loading", "customColor"] }, { kind: "component", type: i4.SpacerComponent, selector: "cf-spacer", inputs: ["default", "mobile", "desktop"] }, { kind: "component", type: i5.IconComponent, selector: "cf-icon", inputs: ["icon", "height", "heightMobile", "heightDesktop", "iconColor"] }] });
13
13
  }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: NotificationComponent, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: NotificationComponent, decorators: [{
15
15
  type: Component,
16
16
  args: [{ selector: 'cf-notification', template: "<div *ngIf=\"data\">\n <cf-spacer mobile=\"16\" desktop=\"24\"></cf-spacer>\n <ion-grid>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col size=\"12\">\n <div [ngClass]=\"data.status\" id=\"notification-container\">\n <ion-grid>\n <ion-row>\n <ion-col class=\"ion-align-self-center ion-text-start\">\n <p class=\"body-medium bold\">{{ data.heading }}</p>\n </ion-col>\n <ion-col size=\"auto\">\n <cf-icon icon=\"close\" *ngIf=\"data.canClose\" (click)=\"data = undefined\" [height]=\"10\" [iconColor]=\"data.status\"></cf-icon>\n </ion-col>\n <ion-col *ngIf=\"data.message\" size=\"12\">\n <cf-spacer default=\"8\"></cf-spacer>\n <p class=\"body-small\">{{ data.message }}</p>\n </ion-col>\n <ion-col *ngIf=\"data.button?.buttonHeading\">\n <cf-spacer default=\"8\"></cf-spacer>\n <p class=\"body-medium bold\">{{ data.button?.buttonHeading }}</p>\n </ion-col>\n <ion-col size=\"12\">\n <ng-content></ng-content>\n </ion-col>\n <ion-col size=\"12\" *ngIf=\"data.button\">\n <cf-spacer default=\"8\"></cf-spacer>\n <cf-btn type=\"primary\" fontSize=\"large\" action snug (click)=\"buttonClick.emit(data.button.buttonClickIdentifier)\">{{\n data.button.buttonText\n }}</cf-btn>\n </ion-col>\n </ion-row>\n </ion-grid>\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n</div>\n", styles: ["#notification-container{border-radius:4px;text-align:start;padding:12px;margin-inline:auto;max-width:640px}#notification-container.success{border:1.5px solid var(--cf-app-system-color-success);background-color:var(--cf-app-system-color-light-success)}#notification-container.warning{border:1.5px solid var(--cf-app-system-color-warning);background-color:var(--cf-app-system-color-light-warning)}#notification-container.error{border:1.5px solid var(--cf-app-system-color-error);background-color:var(--cf-app-system-color-light-error)}\n"] }]
17
17
  }], propDecorators: { data: [{
@@ -31,10 +31,10 @@ export class PageComponent {
31
31
  this.inputNoStickyButtonFade = checkTruthAttribute(changes, 'noStickyButtonFade', this.inputNoStickyButtonFade);
32
32
  this.inputStickyButtonOn = checkTruthAttribute(changes, 'stickyButtonOn', this.inputStickyButtonOn);
33
33
  }
34
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: PageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: PageComponent, selector: "cf-page", inputs: { centerH: "centerH", centerV: "centerV", dark: "dark", noScroll: "noScroll", devMode: "devMode", buttonsVertical: "buttonsVertical", stickyButtonOn: "stickyButtonOn", noStickyButtonFade: "noStickyButtonFade" }, outputs: { scrollEvent: "scrollEvent" }, usesOnChanges: true, ngImport: i0, template: "<ion-content\n scrollEvents=\"true\"\n class=\"ion-page cf-page\"\n [ngClass]=\"{ 'bg-dark': inputDark, 'no-scroll': inputNoScroll, 'dev-mode': inputDevMode }\"\n (ionScroll)=\"scrollEvent.emit($event)\">\n <div id=\"page-setup\" [ngClass]=\"{ 'center-v': inputCenterV }\">\n <!-- Header -->\n <div id=\"header\" class=\"ion-no-border\">\n <div class=\"content\">\n <ng-content select=\"[cf-page-header]\"></ng-content>\n </div>\n </div>\n <!-- Content and Buttons -->\n <div id=\"device-spacing\" [ngClass]=\"{ 'center-h': inputCenterH, 'center-v': inputCenterV }\">\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n <div id=\"page-buttons\">\n <div class=\"content\" [ngClass]=\"{ 'vertical-buttons': inputButtonsVertical }\">\n <ng-content select=\"[cf-page-buttons]\"></ng-content>\n </div>\n </div>\n </div>\n <!-- Footer -->\n <div id=\"footer\">\n <div class=\"content\">\n <ng-content select=\"[cf-page-footer]\"></ng-content>\n </div>\n </div>\n <!-- Sticky-buttons -->\n <div id=\"sticky-buttons\" *ngIf=\"inputStickyButtonOn\">\n <div id=\"overlay\" [ngClass]=\"{ off: inputNoStickyButtonFade }\"> </div>\n <div id=\"buttons-container-background\">\n <div id=\"buttons-container\">\n <div class=\"content\" [ngClass]=\"{ 'vertical-buttons': inputButtonsVertical }\">\n <ng-content select=\"[cf-page-sticky-buttons]\"></ng-content>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ion-content>\n", styles: ["ion-content.cf-page{--page-background-color: var(--cf-page-main-bg-color, var(--cf-app-background-light))}ion-content.cf-page.bg-dark{--page-background-color: var(--cf-app-background-dark)}ion-content.cf-page::part(scroll){background-color:var(--page-background-color);-ms-overflow-style:none;scrollbar-width:none}ion-content.cf-page::part(scroll)::-webkit-scrollbar{display:none}ion-content.cf-page.no-scroll::part(scroll){overflow:hidden}ion-content.cf-page{--main-page-block-padding: 24px}@media (min-width: 768px){ion-content.cf-page{--main-page-block-padding: 48px}}ion-content.cf-page #page-setup{position:relative;width:100%;min-height:100%;height:fit-content;flex-direction:column;display:flex}ion-content.cf-page #page-setup>*{width:100%;padding-inline:var(--cf-page-inline-padding, 16px)}@media (min-width: 768px){ion-content.cf-page #page-setup>*{padding-inline:var(--cf-page-inline-padding, 72px)}}ion-content.cf-page #page-setup .content{display:flex;flex-direction:column;width:100%;max-width:var(--cf-page-mobile-max-width, 358px)}@media (min-width: 768px){ion-content.cf-page #page-setup .content{max-width:var(--cf-page-desktop-max-width, 1296px)}}ion-content.cf-page #page-setup .content>*{max-width:100%}ion-content.cf-page #page-setup #header{display:flex;flex-direction:column;align-items:center;position:sticky;top:0;z-index:10;background-color:var(--page-background-color)}ion-content.cf-page #page-setup #device-spacing{flex-grow:1;display:flex;flex-direction:column}ion-content.cf-page #page-setup #device-spacing>.content:first-child{flex-grow:1;width:min(var(--cf-page-content-mobile-max-width, 100%),100%)}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing>.content:first-child{flex-grow:0;width:min(var(--cf-page-content-desktop-max-width, 100%),100%)}}ion-content.cf-page #page-setup #device-spacing #page-buttons{width:100%;max-width:var(--cf-page-mobile-max-width, 358px)}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing #page-buttons{max-width:var(--cf-page-desktop-max-width, 1296px)}}ion-content.cf-page #page-setup #device-spacing #page-buttons>.content{justify-content:center;flex-wrap:nowrap;gap:16px;width:min(var(--cf-page-content-mobile-max-width, 100%),100%);margin-inline:auto}ion-content.cf-page #page-setup #device-spacing #page-buttons>.content:not(:empty){padding-bottom:var(--main-page-block-padding)}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing #page-buttons>.content{flex-direction:row;width:min(var(--cf-page-content-desktop-max-width, 100%),100%)}}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing #page-buttons>.content.vertical-buttons{flex-direction:column;align-items:center}}ion-content.cf-page #page-setup #device-spacing.center-h,ion-content.cf-page #page-setup #device-spacing.center-h>.content{align-items:center;text-align:center}ion-content.cf-page #page-setup #device-spacing.center-v,ion-content.cf-page #page-setup #device-spacing.center-v>.content{justify-content:center}ion-content.cf-page #page-setup #footer{display:flex;flex-direction:column;align-items:center;background-color:var(--cf-page-footer-bg-color, transparent)}ion-content.cf-page #page-setup #sticky-buttons{--fade-height: var(--cf-page-sticky-button-fade-height, 48px);display:flex;flex-direction:column;align-items:center;position:sticky;bottom:0;z-index:10;background-color:transparent;margin-inline:auto;padding-inline:0px}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background{background-color:var(--page-background-color);width:100%;display:flex;flex-direction:column;align-items:center;margin-top:var(--fade-height);padding-inline:var(--cf-page-inline-padding, 16px)}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background{padding-inline:var(--cf-page-inline-padding, 72px)}}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container{width:100%;max-width:var(--cf-page-mobile-max-width, 358px);padding-top:12px}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container{max-width:var(--cf-page-desktop-max-width, 1296px)}}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content{justify-content:center;flex-wrap:nowrap;gap:16px;width:min(var(--cf-page-content-mobile-max-width, 100%),100%);margin-inline:auto}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content:not(:empty){padding-bottom:var(--main-page-block-padding)}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content{flex-direction:row;width:min(var(--cf-page-content-desktop-max-width, 100%),100%)}}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content.vertical-buttons{flex-direction:column;align-items:center}}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container{padding-top:24px}}ion-content.cf-page #page-setup #sticky-buttons #overlay{width:100%;height:var(--fade-height);position:absolute;background-image:linear-gradient(to bottom,transparent,var(--page-background-color) 80%)}ion-content.cf-page #page-setup #sticky-buttons #overlay.off{background-color:var(--page-background-color)}#page-setup.center-v{justify-content:center}ion-content.cf-page.dev-mode #page-setup{background-color:#0ff}ion-content.cf-page.dev-mode #page-setup #header{background-color:#00f}ion-content.cf-page.dev-mode #page-setup .content{background-color:green}ion-content.cf-page.dev-mode #page-setup #page-buttons>.content{background-color:tomato}ion-content.cf-page.dev-mode #page-setup #footer{background-color:brown}ion-content.cf-page.dev-mode #page-setup #sticky-buttons #buttons-container-background{background-color:#7fff00}\n"], dependencies: [{ kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
34
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: PageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: PageComponent, selector: "cf-page", inputs: { centerH: "centerH", centerV: "centerV", dark: "dark", noScroll: "noScroll", devMode: "devMode", buttonsVertical: "buttonsVertical", stickyButtonOn: "stickyButtonOn", noStickyButtonFade: "noStickyButtonFade" }, outputs: { scrollEvent: "scrollEvent" }, usesOnChanges: true, ngImport: i0, template: "<ion-content\n scrollEvents=\"true\"\n class=\"ion-page cf-page\"\n [ngClass]=\"{ 'bg-dark': inputDark, 'no-scroll': inputNoScroll, 'dev-mode': inputDevMode }\"\n (ionScroll)=\"scrollEvent.emit($event)\">\n <div id=\"page-setup\" [ngClass]=\"{ 'center-v': inputCenterV }\">\n <!-- Header -->\n <div id=\"header\" class=\"ion-no-border\">\n <div class=\"content\">\n <ng-content select=\"[cf-page-header]\"></ng-content>\n </div>\n </div>\n <!-- Content and Buttons -->\n <div id=\"device-spacing\" [ngClass]=\"{ 'center-h': inputCenterH, 'center-v': inputCenterV }\">\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n <div id=\"page-buttons\">\n <div class=\"content\" [ngClass]=\"{ 'vertical-buttons': inputButtonsVertical }\">\n <ng-content select=\"[cf-page-buttons]\"></ng-content>\n </div>\n </div>\n </div>\n <!-- Footer -->\n <div id=\"footer\">\n <div class=\"content\">\n <ng-content select=\"[cf-page-footer]\"></ng-content>\n </div>\n </div>\n <!-- Sticky-buttons -->\n <div id=\"sticky-buttons\" *ngIf=\"inputStickyButtonOn\">\n <div id=\"overlay\" [ngClass]=\"{ off: inputNoStickyButtonFade }\"> </div>\n <div id=\"buttons-container-background\">\n <div id=\"buttons-container\">\n <div class=\"content\" [ngClass]=\"{ 'vertical-buttons': inputButtonsVertical }\">\n <ng-content select=\"[cf-page-sticky-buttons]\"></ng-content>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ion-content>\n", styles: ["ion-content.cf-page{--page-background-color: var(--cf-page-main-bg-color, var(--cf-app-background-light))}ion-content.cf-page.bg-dark{--page-background-color: var(--cf-app-background-dark)}ion-content.cf-page::part(scroll){background-color:var(--page-background-color);-ms-overflow-style:none;scrollbar-width:none}ion-content.cf-page::part(scroll)::-webkit-scrollbar{display:none}ion-content.cf-page.no-scroll::part(scroll){overflow:hidden}ion-content.cf-page{--main-page-block-padding: 24px}@media (min-width: 768px){ion-content.cf-page{--main-page-block-padding: 48px}}ion-content.cf-page #page-setup{position:relative;width:100%;min-height:100%;height:fit-content;flex-direction:column;display:flex}ion-content.cf-page #page-setup>*{width:100%;padding-inline:var(--cf-page-inline-padding, 16px)}@media (min-width: 768px){ion-content.cf-page #page-setup>*{padding-inline:var(--cf-page-inline-padding, 72px)}}ion-content.cf-page #page-setup .content{display:flex;flex-direction:column;width:100%;max-width:var(--cf-page-mobile-max-width, 358px)}@media (min-width: 768px){ion-content.cf-page #page-setup .content{max-width:var(--cf-page-desktop-max-width, 1296px)}}ion-content.cf-page #page-setup .content>*{max-width:100%}ion-content.cf-page #page-setup #header{display:flex;flex-direction:column;align-items:center;position:sticky;top:0;z-index:10;background-color:var(--page-background-color)}ion-content.cf-page #page-setup #device-spacing{flex-grow:1;display:flex;flex-direction:column}ion-content.cf-page #page-setup #device-spacing>.content:first-child{flex-grow:1;width:min(var(--cf-page-content-mobile-max-width, 100%),100%)}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing>.content:first-child{flex-grow:0;width:min(var(--cf-page-content-desktop-max-width, 100%),100%)}}ion-content.cf-page #page-setup #device-spacing #page-buttons{width:100%;max-width:var(--cf-page-mobile-max-width, 358px)}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing #page-buttons{max-width:var(--cf-page-desktop-max-width, 1296px)}}ion-content.cf-page #page-setup #device-spacing #page-buttons>.content{justify-content:center;flex-wrap:nowrap;gap:16px;width:min(var(--cf-page-content-mobile-max-width, 100%),100%);margin-inline:auto}ion-content.cf-page #page-setup #device-spacing #page-buttons>.content:not(:empty){padding-bottom:var(--main-page-block-padding)}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing #page-buttons>.content{flex-direction:row;width:min(var(--cf-page-content-desktop-max-width, 100%),100%)}}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing #page-buttons>.content.vertical-buttons{flex-direction:column;align-items:center}}ion-content.cf-page #page-setup #device-spacing.center-h,ion-content.cf-page #page-setup #device-spacing.center-h>.content{align-items:center;text-align:center}ion-content.cf-page #page-setup #device-spacing.center-v,ion-content.cf-page #page-setup #device-spacing.center-v>.content{justify-content:center}ion-content.cf-page #page-setup #footer{display:flex;flex-direction:column;align-items:center;background-color:var(--cf-page-footer-bg-color, transparent)}ion-content.cf-page #page-setup #sticky-buttons{--fade-height: var(--cf-page-sticky-button-fade-height, 48px);display:flex;flex-direction:column;align-items:center;position:sticky;bottom:0;z-index:10;background-color:transparent;margin-inline:auto;padding-inline:0px}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background{background-color:var(--page-background-color);width:100%;display:flex;flex-direction:column;align-items:center;margin-top:var(--fade-height);padding-inline:var(--cf-page-inline-padding, 16px)}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background{padding-inline:var(--cf-page-inline-padding, 72px)}}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container{width:100%;max-width:var(--cf-page-mobile-max-width, 358px);padding-top:12px}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container{max-width:var(--cf-page-desktop-max-width, 1296px)}}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content{justify-content:center;flex-wrap:nowrap;gap:16px;width:min(var(--cf-page-content-mobile-max-width, 100%),100%);margin-inline:auto}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content:not(:empty){padding-bottom:var(--main-page-block-padding)}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content{flex-direction:row;width:min(var(--cf-page-content-desktop-max-width, 100%),100%)}}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content.vertical-buttons{flex-direction:column;align-items:center}}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container{padding-top:24px}}ion-content.cf-page #page-setup #sticky-buttons #overlay{width:100%;height:var(--fade-height);position:absolute;background-image:linear-gradient(to bottom,transparent,var(--page-background-color) 80%)}ion-content.cf-page #page-setup #sticky-buttons #overlay.off{background-color:var(--page-background-color)}#page-setup.center-v{justify-content:center}ion-content.cf-page.dev-mode #page-setup{background-color:#0ff}ion-content.cf-page.dev-mode #page-setup #header{background-color:#00f}ion-content.cf-page.dev-mode #page-setup .content{background-color:green}ion-content.cf-page.dev-mode #page-setup #page-buttons>.content{background-color:tomato}ion-content.cf-page.dev-mode #page-setup #footer{background-color:brown}ion-content.cf-page.dev-mode #page-setup #sticky-buttons #buttons-container-background{background-color:#7fff00}\n"], dependencies: [{ kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
36
36
  }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: PageComponent, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: PageComponent, decorators: [{
38
38
  type: Component,
39
39
  args: [{ selector: 'cf-page', template: "<ion-content\n scrollEvents=\"true\"\n class=\"ion-page cf-page\"\n [ngClass]=\"{ 'bg-dark': inputDark, 'no-scroll': inputNoScroll, 'dev-mode': inputDevMode }\"\n (ionScroll)=\"scrollEvent.emit($event)\">\n <div id=\"page-setup\" [ngClass]=\"{ 'center-v': inputCenterV }\">\n <!-- Header -->\n <div id=\"header\" class=\"ion-no-border\">\n <div class=\"content\">\n <ng-content select=\"[cf-page-header]\"></ng-content>\n </div>\n </div>\n <!-- Content and Buttons -->\n <div id=\"device-spacing\" [ngClass]=\"{ 'center-h': inputCenterH, 'center-v': inputCenterV }\">\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n <div id=\"page-buttons\">\n <div class=\"content\" [ngClass]=\"{ 'vertical-buttons': inputButtonsVertical }\">\n <ng-content select=\"[cf-page-buttons]\"></ng-content>\n </div>\n </div>\n </div>\n <!-- Footer -->\n <div id=\"footer\">\n <div class=\"content\">\n <ng-content select=\"[cf-page-footer]\"></ng-content>\n </div>\n </div>\n <!-- Sticky-buttons -->\n <div id=\"sticky-buttons\" *ngIf=\"inputStickyButtonOn\">\n <div id=\"overlay\" [ngClass]=\"{ off: inputNoStickyButtonFade }\"> </div>\n <div id=\"buttons-container-background\">\n <div id=\"buttons-container\">\n <div class=\"content\" [ngClass]=\"{ 'vertical-buttons': inputButtonsVertical }\">\n <ng-content select=\"[cf-page-sticky-buttons]\"></ng-content>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ion-content>\n", styles: ["ion-content.cf-page{--page-background-color: var(--cf-page-main-bg-color, var(--cf-app-background-light))}ion-content.cf-page.bg-dark{--page-background-color: var(--cf-app-background-dark)}ion-content.cf-page::part(scroll){background-color:var(--page-background-color);-ms-overflow-style:none;scrollbar-width:none}ion-content.cf-page::part(scroll)::-webkit-scrollbar{display:none}ion-content.cf-page.no-scroll::part(scroll){overflow:hidden}ion-content.cf-page{--main-page-block-padding: 24px}@media (min-width: 768px){ion-content.cf-page{--main-page-block-padding: 48px}}ion-content.cf-page #page-setup{position:relative;width:100%;min-height:100%;height:fit-content;flex-direction:column;display:flex}ion-content.cf-page #page-setup>*{width:100%;padding-inline:var(--cf-page-inline-padding, 16px)}@media (min-width: 768px){ion-content.cf-page #page-setup>*{padding-inline:var(--cf-page-inline-padding, 72px)}}ion-content.cf-page #page-setup .content{display:flex;flex-direction:column;width:100%;max-width:var(--cf-page-mobile-max-width, 358px)}@media (min-width: 768px){ion-content.cf-page #page-setup .content{max-width:var(--cf-page-desktop-max-width, 1296px)}}ion-content.cf-page #page-setup .content>*{max-width:100%}ion-content.cf-page #page-setup #header{display:flex;flex-direction:column;align-items:center;position:sticky;top:0;z-index:10;background-color:var(--page-background-color)}ion-content.cf-page #page-setup #device-spacing{flex-grow:1;display:flex;flex-direction:column}ion-content.cf-page #page-setup #device-spacing>.content:first-child{flex-grow:1;width:min(var(--cf-page-content-mobile-max-width, 100%),100%)}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing>.content:first-child{flex-grow:0;width:min(var(--cf-page-content-desktop-max-width, 100%),100%)}}ion-content.cf-page #page-setup #device-spacing #page-buttons{width:100%;max-width:var(--cf-page-mobile-max-width, 358px)}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing #page-buttons{max-width:var(--cf-page-desktop-max-width, 1296px)}}ion-content.cf-page #page-setup #device-spacing #page-buttons>.content{justify-content:center;flex-wrap:nowrap;gap:16px;width:min(var(--cf-page-content-mobile-max-width, 100%),100%);margin-inline:auto}ion-content.cf-page #page-setup #device-spacing #page-buttons>.content:not(:empty){padding-bottom:var(--main-page-block-padding)}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing #page-buttons>.content{flex-direction:row;width:min(var(--cf-page-content-desktop-max-width, 100%),100%)}}@media (min-width: 768px){ion-content.cf-page #page-setup #device-spacing #page-buttons>.content.vertical-buttons{flex-direction:column;align-items:center}}ion-content.cf-page #page-setup #device-spacing.center-h,ion-content.cf-page #page-setup #device-spacing.center-h>.content{align-items:center;text-align:center}ion-content.cf-page #page-setup #device-spacing.center-v,ion-content.cf-page #page-setup #device-spacing.center-v>.content{justify-content:center}ion-content.cf-page #page-setup #footer{display:flex;flex-direction:column;align-items:center;background-color:var(--cf-page-footer-bg-color, transparent)}ion-content.cf-page #page-setup #sticky-buttons{--fade-height: var(--cf-page-sticky-button-fade-height, 48px);display:flex;flex-direction:column;align-items:center;position:sticky;bottom:0;z-index:10;background-color:transparent;margin-inline:auto;padding-inline:0px}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background{background-color:var(--page-background-color);width:100%;display:flex;flex-direction:column;align-items:center;margin-top:var(--fade-height);padding-inline:var(--cf-page-inline-padding, 16px)}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background{padding-inline:var(--cf-page-inline-padding, 72px)}}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container{width:100%;max-width:var(--cf-page-mobile-max-width, 358px);padding-top:12px}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container{max-width:var(--cf-page-desktop-max-width, 1296px)}}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content{justify-content:center;flex-wrap:nowrap;gap:16px;width:min(var(--cf-page-content-mobile-max-width, 100%),100%);margin-inline:auto}ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content:not(:empty){padding-bottom:var(--main-page-block-padding)}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content{flex-direction:row;width:min(var(--cf-page-content-desktop-max-width, 100%),100%)}}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container>.content.vertical-buttons{flex-direction:column;align-items:center}}@media (min-width: 768px){ion-content.cf-page #page-setup #sticky-buttons #buttons-container-background #buttons-container{padding-top:24px}}ion-content.cf-page #page-setup #sticky-buttons #overlay{width:100%;height:var(--fade-height);position:absolute;background-image:linear-gradient(to bottom,transparent,var(--page-background-color) 80%)}ion-content.cf-page #page-setup #sticky-buttons #overlay.off{background-color:var(--page-background-color)}#page-setup.center-v{justify-content:center}ion-content.cf-page.dev-mode #page-setup{background-color:#0ff}ion-content.cf-page.dev-mode #page-setup #header{background-color:#00f}ion-content.cf-page.dev-mode #page-setup .content{background-color:green}ion-content.cf-page.dev-mode #page-setup #page-buttons>.content{background-color:tomato}ion-content.cf-page.dev-mode #page-setup #footer{background-color:brown}ion-content.cf-page.dev-mode #page-setup #sticky-buttons #buttons-container-background{background-color:#7fff00}\n"] }]
40
40
  }], propDecorators: { centerH: [{
@@ -14,10 +14,10 @@ export class SpacerComponent {
14
14
  this.inputMobile = validateNumberValue(changes, 'mobile', this.inputMobile);
15
15
  this.inputDesktop = validateNumberValue(changes, 'desktop', this.inputDesktop);
16
16
  }
17
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: SpacerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: SpacerComponent, selector: "cf-spacer", inputs: { default: "default", mobile: "mobile", desktop: "desktop" }, usesOnChanges: true, ngImport: i0, template: "<!-- Mobile Only OR Default -->\n<div *ngIf=\"inputMobile || inputDefault\" class=\"mobile-only\" [ngStyle]=\"{ height: (inputMobile || inputDefault || 0) + 'px' }\"> </div>\n<!-- Desktop Only OR Default-->\n<div *ngIf=\"inputDesktop || inputDefault\" class=\"desktop-only\" [ngStyle]=\"{ height: (inputDesktop || inputDefault || 0) + 'px' }\"> </div>\n", styles: ["@media not (min-width: 768px){div.mobile-only{display:block}div.desktop-only{display:none}}@media (min-width: 768px){div.mobile-only{display:none}div.desktop-only{display:block}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
17
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SpacerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: SpacerComponent, selector: "cf-spacer", inputs: { default: "default", mobile: "mobile", desktop: "desktop" }, usesOnChanges: true, ngImport: i0, template: "<!-- Mobile Only OR Default -->\n<div *ngIf=\"inputMobile || inputDefault\" class=\"mobile-only\" [ngStyle]=\"{ height: (inputMobile || inputDefault || 0) + 'px' }\"> </div>\n<!-- Desktop Only OR Default-->\n<div *ngIf=\"inputDesktop || inputDefault\" class=\"desktop-only\" [ngStyle]=\"{ height: (inputDesktop || inputDefault || 0) + 'px' }\"> </div>\n", styles: ["@media not (min-width: 768px){div.mobile-only{display:block}div.desktop-only{display:none}}@media (min-width: 768px){div.mobile-only{display:none}div.desktop-only{display:block}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
19
19
  }
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: SpacerComponent, decorators: [{
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SpacerComponent, decorators: [{
21
21
  type: Component,
22
22
  args: [{ selector: 'cf-spacer', template: "<!-- Mobile Only OR Default -->\n<div *ngIf=\"inputMobile || inputDefault\" class=\"mobile-only\" [ngStyle]=\"{ height: (inputMobile || inputDefault || 0) + 'px' }\"> </div>\n<!-- Desktop Only OR Default-->\n<div *ngIf=\"inputDesktop || inputDefault\" class=\"desktop-only\" [ngStyle]=\"{ height: (inputDesktop || inputDefault || 0) + 'px' }\"> </div>\n", styles: ["@media not (min-width: 768px){div.mobile-only{display:block}div.desktop-only{display:none}}@media (min-width: 768px){div.mobile-only{display:none}div.desktop-only{display:block}}\n"] }]
23
23
  }], propDecorators: { default: [{
@@ -7,10 +7,10 @@ export class SpinnerComponent {
7
7
  ngOnChanges(changes) {
8
8
  this.inputSize = validateNumberValue(changes, 'size', this.inputSize) || this.inputSize;
9
9
  }
10
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: SpinnerComponent, selector: "cf-spinner", inputs: { size: "size" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"spinner\" [style]=\"'font-size: ' + inputSize + 'px'\"></div>\n", styles: ["#spinner{width:1em;height:1em;border:.15em solid var(--cf-app-system-color-outline);border-radius:50%;border-top-color:var(--cf-app-color-accent);animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] });
10
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: SpinnerComponent, selector: "cf-spinner", inputs: { size: "size" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"spinner\" [style]=\"'font-size: ' + inputSize + 'px'\"></div>\n", styles: ["#spinner{width:1em;height:1em;border:.15em solid var(--cf-app-system-color-outline);border-radius:50%;border-top-color:var(--cf-app-color-accent);animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] });
12
12
  }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: SpinnerComponent, decorators: [{
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SpinnerComponent, decorators: [{
14
14
  type: Component,
15
15
  args: [{ selector: 'cf-spinner', template: "<div id=\"spinner\" [style]=\"'font-size: ' + inputSize + 'px'\"></div>\n", styles: ["#spinner{width:1em;height:1em;border:.15em solid var(--cf-app-system-color-outline);border-radius:50%;border-top-color:var(--cf-app-color-accent);animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] }]
16
16
  }], propDecorators: { size: [{
@@ -108,10 +108,10 @@ export class VerificationCodeComponent {
108
108
  ionViewWillLeave() {
109
109
  this.statusSub$?.unsubscribe();
110
110
  }
111
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: VerificationCodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
112
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: VerificationCodeComponent, selector: "cf-verification-code", inputs: { valueToVerify: "valueToVerify", status: "status", userFeedbackMessages: "userFeedbackMessages" }, outputs: { outcome: "outcome", resendClickEvent: "resendClickEvent" }, viewQueries: [{ propertyName: "myInput1", first: true, predicate: ["input1"], descendants: true }, { propertyName: "myInput2", first: true, predicate: ["input2"], descendants: true }, { propertyName: "myInput3", first: true, predicate: ["input3"], descendants: true }, { propertyName: "myInput4", first: true, predicate: ["input4"], descendants: true }, { propertyName: "myInput5", first: true, predicate: ["input5"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <!-- Input boxes for verification code 5 numeric digits -->\n <ion-row class=\"ion-justify-content-center\">\n <ion-col *ngIf=\"validationCodeError\" size=\"auto\">\n <p\n class=\"body-small error ion-text-center\"\n *ngFor=\"let string of userFeedbackMessages?.error?.errorMessage || ['Invalid Code - Please Retry']\"\n >{{ string }}</p\n >\n <cf-spacer default=\"16\"></cf-spacer>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col>\n <div class=\"single-container\" [ngClass]=\"{ error: validationCodeError }\">\n <ion-input\n #input1\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 1)\"></ion-input>\n <ion-input\n #input2\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 2)\"></ion-input>\n <ion-input\n #input3\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 3)\"></ion-input>\n <ion-input\n #input4\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 4)\"></ion-input>\n <ion-input\n #input5\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 5)\"></ion-input>\n </div>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col size=\"auto\">\n <cf-spacer default=\"16\"></cf-spacer>\n <ng-container *ngIf=\"!loading\">\n <button *ngIf=\"commsSentCount < 3\" (click)=\"resendVerificationCode()\" style=\"background-color: transparent\">\n <ng-container *ngIf=\"validationCodeError\">\n <p class=\"body-small ion-text-center\" *ngFor=\"let string of userFeedbackMessages?.error?.resend || ['Resend Code']\">\n {{ string }}\n </p>\n </ng-container>\n <ng-container *ngIf=\"!validationCodeError\">\n <p\n class=\"body-small ion-text-center\"\n *ngFor=\"let string of userFeedbackMessages?.standardResend || ['Didn`t get a code? Please resend the code']\">\n {{ string }}\n </p>\n </ng-container>\n </button>\n <ng-container *ngIf=\"commsSentCount >= 3\">\n <p\n class=\"body-small ion-text-center\"\n *ngFor=\"let string of userFeedbackMessages?.limitReached || ['Still struggling with your code?', 'Please contact support for assistance']\"\n >{{ string }}</p\n >\n </ng-container>\n </ng-container>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col size=\"auto\">\n <cf-spinner [size]=\"50\" [ngClass]=\"{ 'block-hidden': !loading }\"></cf-spinner>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: [".single-container{display:flex;justify-content:space-between}.single-container .single-digit-input{font-family:Roboto,sans-serif;font-weight:400;font-style:normal;font-size:1.6rem;height:60px;width:60px;--border-radius: 12px;--background: var(--cf-app-system-color-outline);--highlight-color-focused: var(--cf-app-color-accent)}.single-container.error .single-digit-input{--border-color: var(--cf-app-system-color-error)}.block-hidden{display:none}p.error{color:var(--cf-app-system-color-error)}\n"], dependencies: [{ kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "directive", type: i1.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar,ion-range" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SpacerComponent, selector: "cf-spacer", inputs: ["default", "mobile", "desktop"] }, { kind: "component", type: i4.SpinnerComponent, selector: "cf-spinner", inputs: ["size"] }] });
111
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: VerificationCodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
112
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: VerificationCodeComponent, selector: "cf-verification-code", inputs: { valueToVerify: "valueToVerify", status: "status", userFeedbackMessages: "userFeedbackMessages" }, outputs: { outcome: "outcome", resendClickEvent: "resendClickEvent" }, viewQueries: [{ propertyName: "myInput1", first: true, predicate: ["input1"], descendants: true }, { propertyName: "myInput2", first: true, predicate: ["input2"], descendants: true }, { propertyName: "myInput3", first: true, predicate: ["input3"], descendants: true }, { propertyName: "myInput4", first: true, predicate: ["input4"], descendants: true }, { propertyName: "myInput5", first: true, predicate: ["input5"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <!-- Input boxes for verification code 5 numeric digits -->\n <ion-row class=\"ion-justify-content-center\">\n <ion-col *ngIf=\"validationCodeError\" size=\"auto\">\n <p\n class=\"body-small error ion-text-center\"\n *ngFor=\"let string of userFeedbackMessages?.error?.errorMessage || ['Invalid Code - Please Retry']\"\n >{{ string }}</p\n >\n <cf-spacer default=\"16\"></cf-spacer>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col>\n <div class=\"single-container\" [ngClass]=\"{ error: validationCodeError }\">\n <ion-input\n #input1\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 1)\"></ion-input>\n <ion-input\n #input2\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 2)\"></ion-input>\n <ion-input\n #input3\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 3)\"></ion-input>\n <ion-input\n #input4\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 4)\"></ion-input>\n <ion-input\n #input5\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 5)\"></ion-input>\n </div>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col size=\"auto\">\n <cf-spacer default=\"16\"></cf-spacer>\n <ng-container *ngIf=\"!loading\">\n <button *ngIf=\"commsSentCount < 3\" (click)=\"resendVerificationCode()\" style=\"background-color: transparent\">\n <ng-container *ngIf=\"validationCodeError\">\n <p class=\"body-small ion-text-center\" *ngFor=\"let string of userFeedbackMessages?.error?.resend || ['Resend Code']\">\n {{ string }}\n </p>\n </ng-container>\n <ng-container *ngIf=\"!validationCodeError\">\n <p\n class=\"body-small ion-text-center\"\n *ngFor=\"let string of userFeedbackMessages?.standardResend || ['Didn`t get a code? Please resend the code']\">\n {{ string }}\n </p>\n </ng-container>\n </button>\n <ng-container *ngIf=\"commsSentCount >= 3\">\n <p\n class=\"body-small ion-text-center\"\n *ngFor=\"let string of userFeedbackMessages?.limitReached || ['Still struggling with your code?', 'Please contact support for assistance']\"\n >{{ string }}</p\n >\n </ng-container>\n </ng-container>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col size=\"auto\">\n <cf-spinner [size]=\"50\" [ngClass]=\"{ 'block-hidden': !loading }\"></cf-spinner>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: [".single-container{display:flex;justify-content:space-between}.single-container .single-digit-input{font-family:Roboto,sans-serif;font-weight:400;font-style:normal;font-size:1.6rem;height:60px;width:60px;--border-radius: 12px;--background: var(--cf-app-system-color-outline);--highlight-color-focused: var(--cf-app-color-accent)}.single-container.error .single-digit-input{--border-color: var(--cf-app-system-color-error)}.block-hidden{display:none}p.error{color:var(--cf-app-system-color-error)}\n"], dependencies: [{ kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "directive", type: i1.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar,ion-range" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SpacerComponent, selector: "cf-spacer", inputs: ["default", "mobile", "desktop"] }, { kind: "component", type: i4.SpinnerComponent, selector: "cf-spinner", inputs: ["size"] }] });
113
113
  }
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: VerificationCodeComponent, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: VerificationCodeComponent, decorators: [{
115
115
  type: Component,
116
116
  args: [{ selector: 'cf-verification-code', template: "<ion-grid>\n <!-- Input boxes for verification code 5 numeric digits -->\n <ion-row class=\"ion-justify-content-center\">\n <ion-col *ngIf=\"validationCodeError\" size=\"auto\">\n <p\n class=\"body-small error ion-text-center\"\n *ngFor=\"let string of userFeedbackMessages?.error?.errorMessage || ['Invalid Code - Please Retry']\"\n >{{ string }}</p\n >\n <cf-spacer default=\"16\"></cf-spacer>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col>\n <div class=\"single-container\" [ngClass]=\"{ error: validationCodeError }\">\n <ion-input\n #input1\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 1)\"></ion-input>\n <ion-input\n #input2\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 2)\"></ion-input>\n <ion-input\n #input3\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 3)\"></ion-input>\n <ion-input\n #input4\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 4)\"></ion-input>\n <ion-input\n #input5\n class=\"single-digit-input ion-text-center\"\n [disabled]=\"loading\"\n fill=\"outline\"\n maxlength=\"1\"\n clearOnEdit=\"true\"\n inputmode=\"numeric\"\n mode=\"md\"\n (ionInput)=\"formulateAndCheckVerificationCode($event, 5)\"></ion-input>\n </div>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col size=\"auto\">\n <cf-spacer default=\"16\"></cf-spacer>\n <ng-container *ngIf=\"!loading\">\n <button *ngIf=\"commsSentCount < 3\" (click)=\"resendVerificationCode()\" style=\"background-color: transparent\">\n <ng-container *ngIf=\"validationCodeError\">\n <p class=\"body-small ion-text-center\" *ngFor=\"let string of userFeedbackMessages?.error?.resend || ['Resend Code']\">\n {{ string }}\n </p>\n </ng-container>\n <ng-container *ngIf=\"!validationCodeError\">\n <p\n class=\"body-small ion-text-center\"\n *ngFor=\"let string of userFeedbackMessages?.standardResend || ['Didn`t get a code? Please resend the code']\">\n {{ string }}\n </p>\n </ng-container>\n </button>\n <ng-container *ngIf=\"commsSentCount >= 3\">\n <p\n class=\"body-small ion-text-center\"\n *ngFor=\"let string of userFeedbackMessages?.limitReached || ['Still struggling with your code?', 'Please contact support for assistance']\"\n >{{ string }}</p\n >\n </ng-container>\n </ng-container>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-justify-content-center\">\n <ion-col size=\"auto\">\n <cf-spinner [size]=\"50\" [ngClass]=\"{ 'block-hidden': !loading }\"></cf-spinner>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: [".single-container{display:flex;justify-content:space-between}.single-container .single-digit-input{font-family:Roboto,sans-serif;font-weight:400;font-style:normal;font-size:1.6rem;height:60px;width:60px;--border-radius: 12px;--background: var(--cf-app-system-color-outline);--highlight-color-focused: var(--cf-app-color-accent)}.single-container.error .single-digit-input{--border-color: var(--cf-app-system-color-error)}.block-hidden{display:none}p.error{color:var(--cf-app-system-color-error)}\n"] }]
117
117
  }], ctorParameters: () => [], propDecorators: { valueToVerify: [{
@@ -19,10 +19,10 @@ export class ButtonLoaderDirective {
19
19
  this.renderer.setStyle(this.elementRef.nativeElement.parentElement, 'position', 'relative');
20
20
  }
21
21
  }
22
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ButtonLoaderDirective, deps: [{ token: i0.TemplateRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
23
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.3", type: ButtonLoaderDirective, selector: "[cfButtonLoader]", inputs: { cfButtonLoader: "cfButtonLoader" }, ngImport: i0 });
22
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: ButtonLoaderDirective, deps: [{ token: i0.TemplateRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
23
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.7", type: ButtonLoaderDirective, selector: "[cfButtonLoader]", inputs: { cfButtonLoader: "cfButtonLoader" }, ngImport: i0 });
24
24
  }
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ButtonLoaderDirective, decorators: [{
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: ButtonLoaderDirective, decorators: [{
26
26
  type: Directive,
27
27
  args: [{
28
28
  selector: '[cfButtonLoader]',
@@ -31,10 +31,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
31
31
  type: Input
32
32
  }] } });
33
33
  class SpinnerComponent {
34
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: SpinnerComponent, selector: "ng-component", ngImport: i0, template: '<div class="loading-spinner"></div>', isInline: true, styles: ["@keyframes spinner{to{transform:rotate(360deg)}}.loading-spinner{position:absolute;top:calc(50% - 1em);left:calc(50% - 1em);width:2em;height:2em;border-radius:50%;border:3px solid var(--cf-app-system-color-outline);border-top-color:var(--cf-app-color-accent);animation:spinner 1s linear infinite}\n"] });
34
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: SpinnerComponent, selector: "ng-component", ngImport: i0, template: '<div class="loading-spinner"></div>', isInline: true, styles: ["@keyframes spinner{to{transform:rotate(360deg)}}.loading-spinner{position:absolute;top:calc(50% - 1em);left:calc(50% - 1em);width:2em;height:2em;border-radius:50%;border:3px solid var(--cf-app-system-color-outline);border-top-color:var(--cf-app-color-accent);animation:spinner 1s linear infinite}\n"] });
36
36
  }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: SpinnerComponent, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SpinnerComponent, decorators: [{
38
38
  type: Component,
39
39
  args: [{ template: '<div class="loading-spinner"></div>', styles: ["@keyframes spinner{to{transform:rotate(360deg)}}.loading-spinner{position:absolute;top:calc(50% - 1em);left:calc(50% - 1em);width:2em;height:2em;border-radius:50%;border:3px solid var(--cf-app-system-color-outline);border-top-color:var(--cf-app-color-accent);animation:spinner 1s linear infinite}\n"] }]
40
40
  }] });
@@ -22,8 +22,8 @@ import { VerificationCodeComponent } from './components/verification-code/verifi
22
22
  import { MixPComponent } from './components/mix-p/mix-p.component';
23
23
  import * as i0 from "@angular/core";
24
24
  export class CareFirstLibraryModule {
25
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CareFirstLibraryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
26
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: CareFirstLibraryModule, declarations: [PageComponent,
25
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CareFirstLibraryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
26
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.7", ngImport: i0, type: CareFirstLibraryModule, declarations: [PageComponent,
27
27
  ButtonComponent,
28
28
  SpacerComponent,
29
29
  IconComponent,
@@ -58,9 +58,9 @@ export class CareFirstLibraryModule {
58
58
  SpinnerComponent,
59
59
  VerificationCodeComponent,
60
60
  MixPComponent] });
61
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CareFirstLibraryModule, imports: [IonicModule, CommonModule, ReactiveFormsModule] });
61
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CareFirstLibraryModule, imports: [IonicModule, CommonModule, ReactiveFormsModule] });
62
62
  }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CareFirstLibraryModule, decorators: [{
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CareFirstLibraryModule, decorators: [{
64
64
  type: NgModule,
65
65
  args: [{
66
66
  declarations: [
@@ -118,5 +118,26 @@ export class CFPFormValidators {
118
118
  return null;
119
119
  };
120
120
  }
121
+ static isValidCellNumber(dialCodes) {
122
+ return (control) => {
123
+ const value = control.value;
124
+ if (!value)
125
+ return null;
126
+ if (!dialCodes || !dialCodes.length)
127
+ dialCodes = ['27'];
128
+ if (!value.startsWith('+'))
129
+ return { errorMessage: `Please start your number with a '+' followed by a valid dial code for eg. +${dialCodes[0]}` };
130
+ if (!dialCodes.map((code) => value.slice(1).startsWith(code)).some((code) => code)) {
131
+ return { errorMessage: 'No valid dial code received' };
132
+ }
133
+ if (dialCodes.map((code) => value.slice(1).startsWith(code + '0')).some((code) => code))
134
+ return { errorMessage: `Please make sure that there are no 0's behind your dial code for eg. +${dialCodes[0]}0` };
135
+ if (value.slice(dialCodes && dialCodes.length ? 1 : 0).match(/[^0-9]/g))
136
+ return { errorMessage: 'No special characters or letters permitted in number' };
137
+ if (value.length < 12)
138
+ return { errorMessage: `Length required ${12 - value.length}` };
139
+ return null;
140
+ };
141
+ }
121
142
  }
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWxpZGF0b3JzLXV0aWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYXJlZmlyc3QvbGlicmFyeS9zcmMvbGliL3V0aWxzL2Zvcm0tdmFsaWRhdG9ycy11dGlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLGlCQUFpQixNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELEtBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUloQyxNQUFNLE9BQU8saUJBQWlCO0lBUTVCLE1BQU0sQ0FBQyxTQUFTLENBQUMseUJBQWlDO1FBQ2hELE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1lBRTNELE1BQU0sZ0JBQWdCLEdBQTJCLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLHlCQUF5QixDQUFDLElBQUksSUFBSSxDQUFDO1lBR3pHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLO2dCQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztpQkFFdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dCQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQztpQkFFOUUsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sRUFBRSxLQUFLLEtBQUssZ0JBQWdCLEVBQUUsS0FBSztnQkFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLHdCQUF3QixFQUFFLENBQUM7WUFFeEgsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBUUQsTUFBTSxDQUFDLFVBQVU7UUFDZixPQUFPLENBQUMsT0FBd0IsRUFBMkIs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RSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEQsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQVVELE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBc0IsRUFBRSxPQUF1QjtRQUNoRSxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtZQUUzRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQkFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLDZCQUE2QixFQUFFLENBQUM7WUFFdEcsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0gsT0FBTyxFQUFFLFlBQVksRUFBRSxtREFBbUQsRUFBRSxDQUFDO1lBQy9FLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3JtIHZhbGlkYXRvcnNcbiAqXG4gKiBAZmlsZSAgICAgICAgICBmb3JtLXZhbGlkYXRvcnNcbiAqIEBkZXNjcmlwdGlvbiAgIFZhcmlvdXMgZm9ybSB2YWxpZGF0b3JzXG4gKiBAYXV0aG9yICAgICAgICBKYWNxdWVzIENvZXR6ZWVcbiAqIEBzaW5jZSAgICAgICAgIDIwMjIgLSAwMSAtIDIwXG4gKiBAdXNhZ2UgICAgICAgICBEaXNwbGF5IFwiZXJyb3JNZXNzYWdlXCIga2V5IHZhbHVlIGFzIHZhbGlkYXRvciByZXNwb25zZSBtZXNzYWdlXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHBhc3N3b3JkVmFsaWRhdG9yIGZyb20gJ3Bhc3N3b3JkLXZhbGlkYXRvcic7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IGN1c3RvbVBhcnNlRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCc7XG5kYXlqcy5leHRlbmQoY3VzdG9tUGFyc2VGb3JtYXQpO1xuLy8tLS0gSW50ZXJmYWNlc1xuaW1wb3J0IHR5cGUgeyBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuZXhwb3J0IGNsYXNzIENGUEZvcm1WYWxpZGF0b3JzIHtcbiAgLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBAbmFtZSAgICAgICAgICBjaGVja1BTV1JldHlwZVxuICAgKiBAZGVzY3JpcHRpb24gICBDaGVjayBpZiBwYXNzd29yZHMgbWF0Y2hcbiAgICogQHBhcmFtICAgICAgICAge3N0cmluZ30gY29udHJvbE5hbWVUb0NoZWNrQWdhaW5zdFxuICAgKiBAcmV0dXJucyAgICAgICB7VmFsaWRhdG9yRm59XG4gICAqIEB1c2FnZSAgICAgICAgIEZvcm1WYWxpZGF0b3JzLmNvbXBhcmVUbygncGFzc3dvcmQnKVxuICAgKi9cbiAgc3RhdGljIGNvbXBhcmVUbyhjb250cm9sTmFtZVRvQ2hlY2tBZ2FpbnN0OiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICAvLy0tLSBDb21wYXJlIGNvbnRyb2xzXG4gICAgICBjb25zdCBjb250cm9sVG9DaGVja1RvOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gY29udHJvbD8ucGFyZW50Py5nZXQoY29udHJvbE5hbWVUb0NoZWNrQWdhaW5zdCkgfHwgbnVsbDtcblxuICAgICAgLy8tLS0gQ2hlY2sgcHJpbWFyeSBjb250cm9sIHZhbHVlXG4gICAgICBpZiAoIWNvbnRyb2xUb0NoZWNrVG8/LnZhbHVlKSByZXR1cm4geyBlcnJvck1lc3NhZ2U6IGBQYXNzd29yZCBSZXF1aXJlZGAgfTtcbiAgICAgIC8vLS0tIENoZWNrIHNlY29uZGFyeSBjb250cm9sIHZhbHVlXG4gICAgICBlbHNlIGlmICghY29udHJvbC52YWx1ZSkgcmV0dXJuIHsgZXJyb3JNZXNzYWdlOiBgUGFzc3dvcmQgY29uZmlybWF0aW9uIHJlcXVpcmVkYCB9O1xuICAgICAgLy8tLS0gQ29tcGFyZSBjb250cm9sc1xuICAgICAgZWxzZSBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sPy52YWx1ZSAhPT0gY29udHJvbFRvQ2hlY2tUbz8udmFsdWUpIHJldHVybiB7IGVycm9yTWVzc2FnZTogYFBhc3N3b3JkcyBkbyBub3QgbWF0Y2hgIH07XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEBuYW1lICAgICAgICAgIGFzUGFzc3dvcmRcbiAgICogQGRlc2NyaXB0aW9uICAgVmFsaWRhdGUgY29udHJvbCBhcyBwYXNzd29yZFxuICAgKiBAcmV0dXJucyAgICAgICB7VmFsaWRhdG9yRm59XG4gICAqIEB1c2FnZSAgICAgICAgIEZvcm1WYWxpZGF0b3JzLmFzUGFzc3dvcmQoKVxuICAgKi9cbiAgc3RhdGljIGFzUGFzc3dvcmQoKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gbmV3IHBhc3N3b3JkVmFsaWRhdG9yKCk7XG5cbiAgICAgIC8vLS0tIFNldHVwIHBhc3N3b3JkIHJlcXVpcmVtZW50c1xuICAgICAgc2NoZW1hXG4gICAgICAgIC8vLS0tIE1pbmltdW0gbGVuZ3RoIDhcbiAgICAgICAgLmlzKClcbiAgICAgICAgLm1pbig4LCAnTWluaW11bSBvZiA4IGNoYXJhY3RlcnMnKVxuICAgICAgICAvLy0tLSBNYXhpbXVtIGxlbmd0aCA1MFxuICAgICAgICAuaXMoKVxuICAgICAgICAubWF4KDMwLCAnTWF4aW11bSBvZiAzMCBjaGFyYWN0ZXJzJylcbiAgICAgICAgLy8tLS0gTXVzdCBoYXZlIHVwcGVyY2FzZSBsZXR0ZXJzXG4gICAgICAgIC5oYXMoKVxuICAgICAgICAudXBwZXJjYXNlKHVuZGVmaW5lZCwgJ0F0IGxlYXN0IG9uZSBVUFBFUkNBU0UgY2hhcmFjdGVyJylcbiAgICAgICAgLy8tLS0gTXVzdCBoYXZlIGxvd2VyY2FzZSBsZXR0ZXJzXG4gICAgICAgIC5oYXMoKVxuICAgICAgICAubG93ZXJjYXNlKHVuZGVmaW5lZCwgJ0F0IGxlYXN0IG9uZSBsb3dlcmNhc2UgY2hhcmFjdGVyJylcbiAgICAgICAgLy8tLS0gTXVzdCBoYXZlIGF0IGxlYXN0IDEgZGlnaXRzXG4gICAgICAgIC5oYXMoKVxuICAgICAgICAuZGlnaXRzKHVuZGVmaW5lZCwgJ0F0IGxlYXN0IG9uZSBkaWdpdCcpXG4gICAgICAgIC8vLS0tIFNwZWNpYWwgY2hhcmFjdGVyc1xuICAgICAgICAuaGFzKClcbiAgICAgICAgLnN5bWJvbHModW5kZWZpbmVkLCAnQXQgbGVhc3Qgb25lIHNwZWNpYWwgY2hhcmFjdGVyJyk7XG5cbiAgICAgIC8vLS0tIFZhbGlkYXRlIHN0cmluZ1xuICAgICAgY29uc3QgaW5WYWxpZCA9IHNjaGVtYS52YWxpZGF0ZShjb250cm9sLnZhbHVlLCB7IGRldGFpbHM6IHRydWUgfSkgYXMge1xuICAgICAgICB2YWxpZGF0aW9uOiBzdHJpbmc7XG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICAgICAgYXJndW1lbnRzPzogbnVtYmVyO1xuICAgICAgfVtdO1xuXG4gICAgICBjb25zdCByZXR1cm5SZXNwb25zZTogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7fTtcbiAgICAgIGluVmFsaWQuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuUmVzcG9uc2VbJ3Bhc3N3b3JkLScgKyBlcnJvci52YWxpZGF0aW9uXSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpblZhbGlkLmxlbmd0aCA/IHJldHVyblJlc3BvbnNlIDogbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBAbmFtZSAgICAgICAgICBhc0VtYWlsXG4gICAqIEBkZXNjcmlwdGlvbiAgIFZhbGlkYXRlIGNvbnRyb2wgYXMgZW1haWxcbiAgICogQHBhcmFtICAgICAgICAge3RydWV9IGNhbkJlRW1wdHlcbiAgICogQHJldHVybnMgICAgICAge1ZhbGlkYXRvckZufVxuICAgKiBAdXNhZ2UgICAgICAgICBGb3JtVmFsaWRhdG9ycy5hc0VtYWlsKHRydWU/KVxuICAgKi9cbiAgc3RhdGljIGFzRW1haWwoY2FuQmVFbXB0eT86IHRydWUpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBsZXQgc2V0RXJyb3JzID0gbnVsbDtcbiAgICAgIGNvbnN0IGVtYWlsUmVnRXggPSBuZXcgUmVnRXhwKCdeW1xcXFx3LS5dK0BbXFxcXHddK1xcXFwuW1xcXFx3XSsnKTtcblxuICAgICAgLy8tLS0gQ2hlY2sgaWYgZW1haWwgY2FuIGJlIGVtcHR5XG4gICAgICBpZiAoY2FuQmVFbXB0eSAmJiAoY29udHJvbC52YWx1ZSA9PT0gbnVsbCB8fCBjb250cm9sLnZhbHVlID09PSAnJykpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vLS0tIFRlc3QgUmVnRXhwXG4gICAgICBpZiAoIShjb250cm9sLnZhbHVlICYmIGVtYWlsUmVnRXgudGVzdChjb250cm9sLnZhbHVlKSAmJiB0eXBlb2YgY29udHJvbC52YWx1ZSA9PT0gJ3N0cmluZycgJiYgIWNvbnRyb2wudmFsdWUuaW5jbHVkZXMoJyAnKSkpIHtcbiAgICAgICAgc2V0RXJyb3JzID0geyBlcnJvck1lc3NhZ2U6IGBOb3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzYCB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2V0RXJyb3JzO1xuICAgIH07XG4gIH1cblxuICAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEBuYW1lICAgICAgICAgIGlzSW5cbiAgICogQGRlc2NyaXB0aW9uICAgVmFsaWRhdGUgY29udHJvbCB2YWx1ZSBpcyBwYXJ0IG9mIGEgZ2l2ZW4gbGlzdFxuICAgKiBAcGFyYW0gICAgICAgICB7KHN0cmluZyB8IG51bWJlcilbXX0gbGlzdFxuICAgKiBAcmV0dXJucyAgICAgICB7VmFsaWRhdG9yRm59XG4gICAqIEB1c2FnZSAgICAgICAgIEZvcm1WYWxpZGF0b3JzLmlzSW4oKVxuICAgKi9cbiAgc3RhdGljIGlzSW4obGlzdDogKHN0cmluZyB8IG51bWJlcilbXSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmICghbGlzdC5pbmNsdWRlcyhjb250cm9sLnZhbHVlKSkgcmV0dXJuIHsgZXJyb3JNZXNzYWdlOiAnQ29udHJvbCB2YWx1ZSBub3QgcGFydCBvZiBlbGlnaWJsZSB2YWx1ZXMnIH07XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBAbmFtZSAgICAgICAgICBpc1NBSUROdW1iZXJcbiAgICogQGRlc2NyaXB0aW9uICAgVmFsaWRhdGUgY29udHJvbCB2YWx1ZSBpcyBhIHZhbGlkIFJTQSBJRCBOdW1iZXJcbiAgICogQHBhcmFtICAgICAgICAge3RydWV9IGNhbkJlRW1wdHlcbiAgICogQHJldHVybnMgICAgICAge1ZhbGlkYXRvckZufVxuICAgKiBAdXNhZ2UgICAgICAgICBGb3JtVmFsaWRhdG9ycy5pc1NBSUROdW1iZXIodHJ1ZT8pXG4gICAqL1xuICBzdGF0aWMgaXNTQUlETnVtYmVyKGNhbkJlRW1wdHk/OiB0cnVlKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGVEYXRlID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRyb2wudmFsdWUgIT09ICdzdHJpbmcnIHx8IGNvbnRyb2wudmFsdWUubGVuZ3RoIDwgNikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBtb250aCA9IGNvbnRyb2wudmFsdWUuc2xpY2UoMiwgNCk7XG4gICAgICAgIGNvbnN0IGRheSA9IGNvbnRyb2wudmFsdWUuc2xpY2UoNCwgNik7XG4gICAgICAgIGlmICgrbW9udGggPCAwICYmICttb250aCA+IDEzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICgrZGF5IDwgMCAmJiArZGF5ID4gMzEpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFkYXlqcyhjb250cm9sLnZhbHVlLnNsaWNlKDAsIDYpLCAnWVlNTUREJywgdHJ1ZSkuaXNWYWxpZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgY2hlY2tzdW0gPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSAhPT0gJ3N0cmluZycgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggIT09IDEzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGxldCBuU3VtID0gMDsgLy8tLS0gVG90YWwgc3VtIG9mIGFsbCB0aGUgdmFsdWVzXG4gICAgICAgIGxldCBpc1NlY29uZCA9IGZhbHNlOyAvLy0tLSBUbyBkb3VibGUgZXZlcnkgb3RoZXIgdmFsdWVcbiAgICAgICAgLy8tLS0gU3RhcnQgZnJvbSB0aGUgZW5kXG4gICAgICAgIGZvciAobGV0IGkgPSBjb250cm9sLnZhbHVlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgY29uc3QgdmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBjb250cm9sLnZhbHVlW2ldO1xuICAgICAgICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgLy8tLS0gR2V0IG51bWVyaWNhbCB2YWx1ZSBmcm9tIGFzY2lpIHN0cmluZ1xuICAgICAgICAgIGxldCBkOiBudW1iZXIgPSB2YWwuY2hhckNvZGVBdCgwKSAtICcwJy5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgIC8vLS0tIERvdWJsZSBldmVyeSBvdGhlciB2YWx1ZVxuICAgICAgICAgIGlmIChpc1NlY29uZCA9PSB0cnVlKSBkID0gZCAqIDI7XG4gICAgICAgICAgLy8tLS0gU3VtIHRoZSB0b3RhbCBvZiB0aGUgZG91YmxlZCB2YWx1ZXMgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgblN1bSArPSBNYXRoLmZsb29yKGQgLyAxMCk7XG4gICAgICAgICAgblN1bSArPSBkICUgMTA7XG4gICAgICAgICAgLy8tLS0gSW52ZXJzZSBzZWNvbmQgdG8gZGV0ZXJtaW5lIGV2ZXJ5IG90aGVyIGluZGV4IHZhbHVlXG4gICAgICAgICAgaXNTZWNvbmQgPSAhaXNTZWNvbmQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8tLS0gUmV0dXJuIHRoZSBtb2R1bHVzIDEwIG9mIHRoZSBzdW1tYXRpb25cbiAgICAgICAgcmV0dXJuIG5TdW0gJSAxMCA9PSAwO1xuICAgICAgfTtcblxuICAgICAgbGV0IGVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChjYW5CZUVtcHR5ICYmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlPy5sZW5ndGggPT09IDApKSByZXR1cm4gbnVsbDtcbiAgICAgIC8vLS0tIHN0cmluZ1xuICAgICAgZWxzZSBpZiAodHlwZW9mIGNvbnRyb2wudmFsdWUgIT09ICdzdHJpbmcnKSBlcnJvciA9ICdJbnZhbGlkIFJTQSBJRCBOdW1iZXInO1xuICAgICAgLy8tLS0gTGVuZ3RoID0gMTNcbiAgICAgIGVsc2UgaWYgKGNvbnRyb2wudmFsdWUubGVuZ3RoICE9PSAxMykgZXJyb3IgPSBgTGVuZ3RoIHJlcXVpcmVkOiAkezEzIC0gY29udHJvbC52YWx1ZS5sZW5ndGh9YDtcbiAgICAgIC8vLS0tIFZhbGlkYXRlIGRhdGVcbiAgICAgIGVsc2UgaWYgKCF2YWxpZGF0ZURhdGUoKSkgZXJyb3IgPSBgSW52YWxpZCBkYXRlIG9mIGJpcnRoYDtcbiAgICAgIC8vLS0tIENpdGl6ZW5zaGlwXG4gICAgICBlbHNlIGlmICghWycwJywgJzEnXS5pbmNsdWRlcyhjb250cm9sLnZhbHVlLnNsaWNlKDEwLCAxMSkpKSBlcnJvciA9IGBJbnZhbGlkIGNpdGl6ZW5zaGlwIHZhbHVlYDtcbiAgICAgIC8vLS0tIENoZWNrc3VtXG4gICAgICBlbHNlIGlmICghY2hlY2tzdW0oKSkgZXJyb3IgPSBgSW52YWxpZCBSU0EgSUQgbnVtYmVyIGNoZWNrc3VtYDtcblxuICAgICAgcmV0dXJuIGVycm9yID8geyBlcnJvck1lc3NhZ2U6IGVycm9yIH0gOiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEBuYW1lICAgICAgICAgIGlzVmFsaWREYXRlXG4gICAqIEBkZXNjcmlwdGlvbiAgIFZhbGlkYXRlIGNvbnRyb2wgdmFsdWUgaXMgcGFydCBvZiBhIGdpdmVuIGxpc3RcbiAgICogQHBhcmFtICAgICAgICAge3N0cmluZyB8IG51bGx9IG1pbkRhdGVcbiAgICogQHBhcmFtICAgICAgICAge3N0cmluZyB8IG51bGx9IG1heERhdGVcbiAgICogQHJldHVybnMgICAgICAge1ZhbGlkYXRvckZufVxuICAgKiBAdXNhZ2UgICAgICAgICBGb3JtVmFsaWRhdG9ycy5pc1ZhbGlkRGF0ZSgnMTk5OS0wMS0wMScsICcyMDIwLTAxLTAxJylcbiAgICovXG4gIHN0YXRpYyBpc1ZhbGlkRGF0ZShtaW5EYXRlOiBzdHJpbmcgfCBudWxsLCBtYXhEYXRlPzogc3RyaW5nIHwgbnVsbCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIC8vLS0tIENoZWNrIHRvIHNlZSBpZiBhIGludmFsaWQgZGF0ZSBpcyByZWNlaXZlZCBsaWtlICgzMSBGZWIpXG4gICAgICBpZiAoIWRheWpzKG5ldyBEYXRlKGNvbnRyb2wudmFsdWUpKS5pc1ZhbGlkKCkpIHJldHVybiB7IGVycm9yTWVzc2FnZTogJ1RoZSBnaXZlbiBkYXRlIGlzIG5vdCB2YWxpZCcgfTtcbiAgICAgIC8vLS0tIENoZWNrIGRhdGUgaXMgbm90IGxlc3MgdGhhbiBtaW5EYXRlIGFuZCBkYXRlIGRvZXNuJ3QgZXhjZWVkIG1heERhdGVcbiAgICAgIGlmICgobWluRGF0ZSAmJiBkYXlqcyhuZXcgRGF0ZShjb250cm9sLnZhbHVlKSkuaXNCZWZvcmUobWluRGF0ZSkpIHx8IChtYXhEYXRlICYmIGRheWpzKG5ldyBEYXRlKGNvbnRyb2wudmFsdWUpKS5pc0FmdGVyKG1heERhdGUpKSlcbiAgICAgICAgcmV0dXJuIHsgZXJyb3JNZXNzYWdlOiAnVGhlIGdpdmVuIGRhdGUgaXMgbm90IHdpdGhpbiB0aGUgdmFsaWQgcGFyYW1ldGVycycgfTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWxpZGF0b3JzLXV0aWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYXJlZmlyc3QvbGlicmFyeS9zcmMvbGliL3V0aWxzL2Zvcm0tdmFsaWRhdG9ycy11dGlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLGlCQUFpQixNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELEtBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUloQyxNQUFNLE9BQU8saUJBQWlCO0lBUTVCLE1BQU0sQ0FBQyxTQUFTLENBQUMseUJBQWlDO1FBQ2hELE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1lBRTNELE1BQU0sZ0JBQWdCLEdBQTJCLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLHlCQUF5QixDQUFDLElBQUksSUFBSSxDQUFDO1lBR3pHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLO2dCQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztpQkFFdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dCQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQztpQkFFOUUsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sRUFBRSxLQUFLLEtBQUssZ0JBQWdCLEVBQUUsS0FBSztnQkFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLHdCQUF3QixFQUFFLENBQUM7WUFFeEgsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBUUQsTUFBTSxDQUFDLFVBQVU7UUFDZixPQUFPLENBQUMsT0FBd0IsRUFBMkIs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SUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLDZCQUE2QixFQUFFLENBQUM7WUFDekQsQ0FBQztZQUdELElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUseUVBQXlFLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7WUFHcEgsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsc0RBQXNELEVBQUUsQ0FBQztZQUdsRixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRTtnQkFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFFdkYsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvcm0gdmFsaWRhdG9yc1xuICpcbiAqIEBmaWxlICAgICAgICAgIGZvcm0tdmFsaWRhdG9yc1xuICogQGRlc2NyaXB0aW9uICAgVmFyaW91cyBmb3JtIHZhbGlkYXRvcnNcbiAqIEBhdXRob3IgICAgICAgIEphY3F1ZXMgQ29ldHplZVxuICogQHNpbmNlICAgICAgICAgMjAyMiAtIDAxIC0gMjBcbiAqIEB1c2FnZSAgICAgICAgIERpc3BsYXkgXCJlcnJvck1lc3NhZ2VcIiBrZXkgdmFsdWUgYXMgdmFsaWRhdG9yIHJlc3BvbnNlIG1lc3NhZ2VcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgcGFzc3dvcmRWYWxpZGF0b3IgZnJvbSAncGFzc3dvcmQtdmFsaWRhdG9yJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgY3VzdG9tUGFyc2VGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0JztcbmRheWpzLmV4dGVuZChjdXN0b21QYXJzZUZvcm1hdCk7XG4vLy0tLSBJbnRlcmZhY2VzXG5pbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgY2xhc3MgQ0ZQRm9ybVZhbGlkYXRvcnMge1xuICAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEBuYW1lICAgICAgICAgIGNoZWNrUFNXUmV0eXBlXG4gICAqIEBkZXNjcmlwdGlvbiAgIENoZWNrIGlmIHBhc3N3b3JkcyBtYXRjaFxuICAgKiBAcGFyYW0gICAgICAgICB7c3RyaW5nfSBjb250cm9sTmFtZVRvQ2hlY2tBZ2FpbnN0XG4gICAqIEByZXR1cm5zICAgICAgIHtWYWxpZGF0b3JGbn1cbiAgICogQHVzYWdlICAgICAgICAgRm9ybVZhbGlkYXRvcnMuY29tcGFyZVRvKCdwYXNzd29yZCcpXG4gICAqL1xuICBzdGF0aWMgY29tcGFyZVRvKGNvbnRyb2xOYW1lVG9DaGVja0FnYWluc3Q6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIC8vLS0tIENvbXBhcmUgY29udHJvbHNcbiAgICAgIGNvbnN0IGNvbnRyb2xUb0NoZWNrVG86IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBjb250cm9sPy5wYXJlbnQ/LmdldChjb250cm9sTmFtZVRvQ2hlY2tBZ2FpbnN0KSB8fCBudWxsO1xuXG4gICAgICAvLy0tLSBDaGVjayBwcmltYXJ5IGNvbnRyb2wgdmFsdWVcbiAgICAgIGlmICghY29udHJvbFRvQ2hlY2tUbz8udmFsdWUpIHJldHVybiB7IGVycm9yTWVzc2FnZTogYFBhc3N3b3JkIFJlcXVpcmVkYCB9O1xuICAgICAgLy8tLS0gQ2hlY2sgc2Vjb25kYXJ5IGNvbnRyb2wgdmFsdWVcbiAgICAgIGVsc2UgaWYgKCFjb250cm9sLnZhbHVlKSByZXR1cm4geyBlcnJvck1lc3NhZ2U6IGBQYXNzd29yZCBjb25maXJtYXRpb24gcmVxdWlyZWRgIH07XG4gICAgICAvLy0tLSBDb21wYXJlIGNvbnRyb2xzXG4gICAgICBlbHNlIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2w/LnZhbHVlICE9PSBjb250cm9sVG9DaGVja1RvPy52YWx1ZSkgcmV0dXJuIHsgZXJyb3JNZXNzYWdlOiBgUGFzc3dvcmRzIGRvIG5vdCBtYXRjaGAgfTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQG5hbWUgICAgICAgICAgYXNQYXNzd29yZFxuICAgKiBAZGVzY3JpcHRpb24gICBWYWxpZGF0ZSBjb250cm9sIGFzIHBhc3N3b3JkXG4gICAqIEByZXR1cm5zICAgICAgIHtWYWxpZGF0b3JGbn1cbiAgICogQHVzYWdlICAgICAgICAgRm9ybVZhbGlkYXRvcnMuYXNQYXNzd29yZCgpXG4gICAqL1xuICBzdGF0aWMgYXNQYXNzd29yZCgpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzY2hlbWEgPSBuZXcgcGFzc3dvcmRWYWxpZGF0b3IoKTtcblxuICAgICAgLy8tLS0gU2V0dXAgcGFzc3dvcmQgcmVxdWlyZW1lbnRzXG4gICAgICBzY2hlbWFcbiAgICAgICAgLy8tLS0gTWluaW11bSBsZW5ndGggOFxuICAgICAgICAuaXMoKVxuICAgICAgICAubWluKDgsICdNaW5pbXVtIG9mIDggY2hhcmFjdGVycycpXG4gICAgICAgIC8vLS0tIE1heGltdW0gbGVuZ3RoIDUwXG4gICAgICAgIC5pcygpXG4gICAgICAgIC5tYXgoMzAsICdNYXhpbXVtIG9mIDMwIGNoYXJhY3RlcnMnKVxuICAgICAgICAvLy0tLSBNdXN0IGhhdmUgdXBwZXJjYXNlIGxldHRlcnNcbiAgICAgICAgLmhhcygpXG4gICAgICAgIC51cHBlcmNhc2UodW5kZWZpbmVkLCAnQXQgbGVhc3Qgb25lIFVQUEVSQ0FTRSBjaGFyYWN0ZXInKVxuICAgICAgICAvLy0tLSBNdXN0IGhhdmUgbG93ZXJjYXNlIGxldHRlcnNcbiAgICAgICAgLmhhcygpXG4gICAgICAgIC5sb3dlcmNhc2UodW5kZWZpbmVkLCAnQXQgbGVhc3Qgb25lIGxvd2VyY2FzZSBjaGFyYWN0ZXInKVxuICAgICAgICAvLy0tLSBNdXN0IGhhdmUgYXQgbGVhc3QgMSBkaWdpdHNcbiAgICAgICAgLmhhcygpXG4gICAgICAgIC5kaWdpdHModW5kZWZpbmVkLCAnQXQgbGVhc3Qgb25lIGRpZ2l0JylcbiAgICAgICAgLy8tLS0gU3BlY2lhbCBjaGFyYWN0ZXJzXG4gICAgICAgIC5oYXMoKVxuICAgICAgICAuc3ltYm9scyh1bmRlZmluZWQsICdBdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXInKTtcblxuICAgICAgLy8tLS0gVmFsaWRhdGUgc3RyaW5nXG4gICAgICBjb25zdCBpblZhbGlkID0gc2NoZW1hLnZhbGlkYXRlKGNvbnRyb2wudmFsdWUsIHsgZGV0YWlsczogdHJ1ZSB9KSBhcyB7XG4gICAgICAgIHZhbGlkYXRpb246IHN0cmluZztcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nO1xuICAgICAgICBhcmd1bWVudHM/OiBudW1iZXI7XG4gICAgICB9W107XG5cbiAgICAgIGNvbnN0IHJldHVyblJlc3BvbnNlOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHt9O1xuICAgICAgaW5WYWxpZC5mb3JFYWNoKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm5SZXNwb25zZVsncGFzc3dvcmQtJyArIGVycm9yLnZhbGlkYXRpb25dID0gZXJyb3IubWVzc2FnZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGluVmFsaWQubGVuZ3RoID8gcmV0dXJuUmVzcG9uc2UgOiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEBuYW1lICAgICAgICAgIGFzRW1haWxcbiAgICogQGRlc2NyaXB0aW9uICAgVmFsaWRhdGUgY29udHJvbCBhcyBlbWFpbFxuICAgKiBAcGFyYW0gICAgICAgICB7dHJ1ZX0gY2FuQmVFbXB0eVxuICAgKiBAcmV0dXJucyAgICAgICB7VmFsaWRhdG9yRm59XG4gICAqIEB1c2FnZSAgICAgICAgIEZvcm1WYWxpZGF0b3JzLmFzRW1haWwodHJ1ZT8pXG4gICAqL1xuICBzdGF0aWMgYXNFbWFpbChjYW5CZUVtcHR5PzogdHJ1ZSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCBzZXRFcnJvcnMgPSBudWxsO1xuICAgICAgY29uc3QgZW1haWxSZWdFeCA9IG5ldyBSZWdFeHAoJ15bXFxcXHctLl0rQFtcXFxcd10rXFxcXC5bXFxcXHddKycpO1xuXG4gICAgICAvLy0tLSBDaGVjayBpZiBlbWFpbCBjYW4gYmUgZW1wdHlcbiAgICAgIGlmIChjYW5CZUVtcHR5ICYmIChjb250cm9sLnZhbHVlID09PSBudWxsIHx8IGNvbnRyb2wudmFsdWUgPT09ICcnKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8tLS0gVGVzdCBSZWdFeHBcbiAgICAgIGlmICghKGNvbnRyb2wudmFsdWUgJiYgZW1haWxSZWdFeC50ZXN0KGNvbnRyb2wudmFsdWUpICYmIHR5cGVvZiBjb250cm9sLnZhbHVlID09PSAnc3RyaW5nJyAmJiAhY29udHJvbC52YWx1ZS5pbmNsdWRlcygnICcpKSkge1xuICAgICAgICBzZXRFcnJvcnMgPSB7IGVycm9yTWVzc2FnZTogYE5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3NgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXRFcnJvcnM7XG4gICAgfTtcbiAgfVxuXG4gIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQG5hbWUgICAgICAgICAgaXNJblxuICAgKiBAZGVzY3JpcHRpb24gICBWYWxpZGF0ZSBjb250cm9sIHZhbHVlIGlzIHBhcnQgb2YgYSBnaXZlbiBsaXN0XG4gICAqIEBwYXJhbSAgICAgICAgIHsoc3RyaW5nIHwgbnVtYmVyKVtdfSBsaXN0XG4gICAqIEByZXR1cm5zICAgICAgIHtWYWxpZGF0b3JGbn1cbiAgICogQHVzYWdlICAgICAgICAgRm9ybVZhbGlkYXRvcnMuaXNJbigpXG4gICAqL1xuICBzdGF0aWMgaXNJbihsaXN0OiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKCFsaXN0LmluY2x1ZGVzKGNvbnRyb2wudmFsdWUpKSByZXR1cm4geyBlcnJvck1lc3NhZ2U6ICdDb250cm9sIHZhbHVlIG5vdCBwYXJ0IG9mIGVsaWdpYmxlIHZhbHVlcycgfTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEBuYW1lICAgICAgICAgIGlzU0FJRE51bWJlclxuICAgKiBAZGVzY3JpcHRpb24gICBWYWxpZGF0ZSBjb250cm9sIHZhbHVlIGlzIGEgdmFsaWQgUlNBIElEIE51bWJlclxuICAgKiBAcGFyYW0gICAgICAgICB7dHJ1ZX0gY2FuQmVFbXB0eVxuICAgKiBAcmV0dXJucyAgICAgICB7VmFsaWRhdG9yRm59XG4gICAqIEB1c2FnZSAgICAgICAgIEZvcm1WYWxpZGF0b3JzLmlzU0FJRE51bWJlcih0cnVlPylcbiAgICovXG4gIHN0YXRpYyBpc1NBSUROdW1iZXIoY2FuQmVFbXB0eT86IHRydWUpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZURhdGUgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSAhPT0gJ3N0cmluZycgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggPCA2KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gY29udHJvbC52YWx1ZS5zbGljZSgyLCA0KTtcbiAgICAgICAgY29uc3QgZGF5ID0gY29udHJvbC52YWx1ZS5zbGljZSg0LCA2KTtcbiAgICAgICAgaWYgKCttb250aCA8IDAgJiYgK21vbnRoID4gMTMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCtkYXkgPCAwICYmICtkYXkgPiAzMSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWRheWpzKGNvbnRyb2wudmFsdWUuc2xpY2UoMCwgNiksICdZWU1NREQnLCB0cnVlKS5pc1ZhbGlkKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjaGVja3N1bSA9ICgpOiBib29sZWFuID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250cm9sLnZhbHVlICE9PSAnc3RyaW5nJyB8fCBjb250cm9sLnZhbHVlLmxlbmd0aCAhPT0gMTMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgbGV0IG5TdW0gPSAwOyAvLy0tLSBUb3RhbCBzdW0gb2YgYWxsIHRoZSB2YWx1ZXNcbiAgICAgICAgbGV0IGlzU2Vjb25kID0gZmFsc2U7IC8vLS0tIFRvIGRvdWJsZSBldmVyeSBvdGhlciB2YWx1ZVxuICAgICAgICAvLy0tLSBTdGFydCBmcm9tIHRoZSBlbmRcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvbnRyb2wudmFsdWUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBjb25zdCB2YWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNvbnRyb2wudmFsdWVbaV07XG4gICAgICAgICAgaWYgKCF2YWwpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAvLy0tLSBHZXQgbnVtZXJpY2FsIHZhbHVlIGZyb20gYXNjaWkgc3RyaW5nXG4gICAgICAgICAgbGV0IGQ6IG51bWJlciA9IHZhbC5jaGFyQ29kZUF0KDApIC0gJzAnLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgLy8tLS0gRG91YmxlIGV2ZXJ5IG90aGVyIHZhbHVlXG4gICAgICAgICAgaWYgKGlzU2Vjb25kID09IHRydWUpIGQgPSBkICogMjtcbiAgICAgICAgICAvLy0tLSBTdW0gdGhlIHRvdGFsIG9mIHRoZSBkb3VibGVkIHZhbHVlcyBpZiBhdmFpbGFibGVcbiAgICAgICAgICBuU3VtICs9IE1hdGguZmxvb3IoZCAvIDEwKTtcbiAgICAgICAgICBuU3VtICs9IGQgJSAxMDtcbiAgICAgICAgICAvLy0tLSBJbnZlcnNlIHNlY29uZCB0byBkZXRlcm1pbmUgZXZlcnkgb3RoZXIgaW5kZXggdmFsdWVcbiAgICAgICAgICBpc1NlY29uZCA9ICFpc1NlY29uZDtcbiAgICAgICAgfVxuICAgICAgICAvLy0tLSBSZXR1cm4gdGhlIG1vZHVsdXMgMTAgb2YgdGhlIHN1bW1hdGlvblxuICAgICAgICByZXR1cm4gblN1bSAlIDEwID09IDA7XG4gICAgICB9O1xuXG4gICAgICBsZXQgZXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKGNhbkJlRW1wdHkgJiYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWU/Lmxlbmd0aCA9PT0gMCkpIHJldHVybiBudWxsO1xuICAgICAgLy8tLS0gc3RyaW5nXG4gICAgICBlbHNlIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSAhPT0gJ3N0cmluZycpIGVycm9yID0gJ0ludmFsaWQgUlNBIElEIE51bWJlcic7XG4gICAgICAvLy0tLSBMZW5ndGggPSAxM1xuICAgICAgZWxzZSBpZiAoY29udHJvbC52YWx1ZS5sZW5ndGggIT09IDEzKSBlcnJvciA9IGBMZW5ndGggcmVxdWlyZWQ6ICR7MTMgLSBjb250cm9sLnZhbHVlLmxlbmd0aH1gO1xuICAgICAgLy8tLS0gVmFsaWRhdGUgZGF0ZVxuICAgICAgZWxzZSBpZiAoIXZhbGlkYXRlRGF0ZSgpKSBlcnJvciA9IGBJbnZhbGlkIGRhdGUgb2YgYmlydGhgO1xuICAgICAgLy8tLS0gQ2l0aXplbnNoaXBcbiAgICAgIGVsc2UgaWYgKCFbJzAnLCAnMSddLmluY2x1ZGVzKGNvbnRyb2wudmFsdWUuc2xpY2UoMTAsIDExKSkpIGVycm9yID0gYEludmFsaWQgY2l0aXplbnNoaXAgdmFsdWVgO1xuICAgICAgLy8tLS0gQ2hlY2tzdW1cbiAgICAgIGVsc2UgaWYgKCFjaGVja3N1bSgpKSBlcnJvciA9IGBJbnZhbGlkIFJTQSBJRCBudW1iZXIgY2hlY2tzdW1gO1xuXG4gICAgICByZXR1cm4gZXJyb3IgPyB7IGVycm9yTWVzc2FnZTogZXJyb3IgfSA6IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQG5hbWUgICAgICAgICAgaXNWYWxpZERhdGVcbiAgICogQGRlc2NyaXB0aW9uICAgVmFsaWRhdGUgY29udHJvbCB2YWx1ZSBpcyBwYXJ0IG9mIGEgZ2l2ZW4gbGlzdFxuICAgKiBAcGFyYW0gICAgICAgICB7c3RyaW5nIHwgbnVsbH0gbWluRGF0ZVxuICAgKiBAcGFyYW0gICAgICAgICB7c3RyaW5nIHwgbnVsbH0gbWF4RGF0ZVxuICAgKiBAcmV0dXJucyAgICAgICB7VmFsaWRhdG9yRm59XG4gICAqIEB1c2FnZSAgICAgICAgIEZvcm1WYWxpZGF0b3JzLmlzVmFsaWREYXRlKCcxOTk5LTAxLTAxJywgJzIwMjAtMDEtMDEnKVxuICAgKi9cbiAgc3RhdGljIGlzVmFsaWREYXRlKG1pbkRhdGU6IHN0cmluZyB8IG51bGwsIG1heERhdGU/OiBzdHJpbmcgfCBudWxsKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgLy8tLS0gQ2hlY2sgdG8gc2VlIGlmIGEgaW52YWxpZCBkYXRlIGlzIHJlY2VpdmVkIGxpa2UgKDMxIEZlYilcbiAgICAgIGlmICghZGF5anMobmV3IERhdGUoY29udHJvbC52YWx1ZSkpLmlzVmFsaWQoKSkgcmV0dXJuIHsgZXJyb3JNZXNzYWdlOiAnVGhlIGdpdmVuIGRhdGUgaXMgbm90IHZhbGlkJyB9O1xuICAgICAgLy8tLS0gQ2hlY2sgZGF0ZSBpcyBub3QgbGVzcyB0aGFuIG1pbkRhdGUgYW5kIGRhdGUgZG9lc24ndCBleGNlZWQgbWF4RGF0ZVxuICAgICAgaWYgKChtaW5EYXRlICYmIGRheWpzKG5ldyBEYXRlKGNvbnRyb2wudmFsdWUpKS5pc0JlZm9yZShtaW5EYXRlKSkgfHwgKG1heERhdGUgJiYgZGF5anMobmV3IERhdGUoY29udHJvbC52YWx1ZSkpLmlzQWZ0ZXIobWF4RGF0ZSkpKVxuICAgICAgICByZXR1cm4geyBlcnJvck1lc3NhZ2U6ICdUaGUgZ2l2ZW4gZGF0ZSBpcyBub3Qgd2l0aGluIHRoZSB2YWxpZCBwYXJhbWV0ZXJzJyB9O1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQG5hbWUgICAgICAgICAgaXNWYWxpZENlbGxOdW1iZXJcbiAgICogQGRlc2NyaXB0aW9uICAgVmFsaWRhdGUgY29udHJvbCB2YWx1ZSBpcyBhIHZhbGlkIGNlbGxwaG9uZSBudW1iZXIgYW5kIGNvbnRhaW5pbmcgYSB2YWxpZCBkaWFsIGNvZGVcbiAgICogQHBhcmFtICAgICAgICAge3N0cmluZ1tdfSBkaWFsQ29kZXNcbiAgICogQHJldHVybnMgICAgICAge1ZhbGlkYXRvckZufVxuICAgKiBAdXNhZ2UgICAgICAgICBGb3JtVmFsaWRhdG9ycy5pc1ZhbGlkQ2VsbE51bWJlcihbJzI3J10pXG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZENlbGxOdW1iZXIoZGlhbENvZGVzPzogc3RyaW5nW10pOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZTogc3RyaW5nID0gY29udHJvbC52YWx1ZTtcbiAgICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuXG4gICAgICAvLy0tLSBEZWZhdWx0IHRvIFNvdXRoIEFmcmljYW4gZGlhbCBjb2RlIGlmIG5vbmUgZ2l2ZW5cbiAgICAgIGlmICghZGlhbENvZGVzIHx8ICFkaWFsQ29kZXMubGVuZ3RoKSBkaWFsQ29kZXMgPSBbJzI3J107XG5cbiAgICAgIC8vLS0tIFZhbHVlIG11c3Qgc3RhcnQgd2l0aCBhICtcbiAgICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aCgnKycpKVxuICAgICAgICByZXR1cm4geyBlcnJvck1lc3NhZ2U6IGBQbGVhc2Ugc3RhcnQgeW91ciBudW1iZXIgd2l0aCBhICcrJyBmb2xsb3dlZCBieSBhIHZhbGlkIGRpYWwgY29kZSBmb3IgZWcuICske2RpYWxDb2Rlc1swXX1gIH07XG5cbiAgICAgIC8vLS0tIENoZWNrIHZhbGlkIGRpYWwgY29kZVxuICAgICAgaWYgKCFkaWFsQ29kZXMubWFwKChjb2RlKSA9PiB2YWx1ZS5zbGljZSgxKS5zdGFydHNXaXRoKGNvZGUpKS5zb21lKChjb2RlKSA9PiBjb2RlKSkge1xuICAgICAgICByZXR1cm4geyBlcnJvck1lc3NhZ2U6ICdObyB2YWxpZCBkaWFsIGNvZGUgcmVjZWl2ZWQnIH07XG4gICAgICB9XG5cbiAgICAgIC8vLS0tIENoZWNrIG5vIHplcm8gYWZ0ZXIgZGlhbCBjb2RlXG4gICAgICBpZiAoZGlhbENvZGVzLm1hcCgoY29kZSkgPT4gdmFsdWUuc2xpY2UoMSkuc3RhcnRzV2l0aChjb2RlICsgJzAnKSkuc29tZSgoY29kZSkgPT4gY29kZSkpXG4gICAgICAgIHJldHVybiB7IGVycm9yTWVzc2FnZTogYFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gMCdzIGJlaGluZCB5b3VyIGRpYWwgY29kZSBmb3IgZWcuICske2RpYWxDb2Rlc1swXX0wYCB9O1xuXG4gICAgICAvLy0tLSBDaGVjayB2YWx1ZSBkb2Vzbid0IGNvbnRhaW4gc3BlY2lhbCBjaGFyYWN0ZXJzIG9yIGxldHRlcnNcbiAgICAgIGlmICh2YWx1ZS5zbGljZShkaWFsQ29kZXMgJiYgZGlhbENvZGVzLmxlbmd0aCA/IDEgOiAwKS5tYXRjaCgvW14wLTldL2cpKVxuICAgICAgICByZXR1cm4geyBlcnJvck1lc3NhZ2U6ICdObyBzcGVjaWFsIGNoYXJhY3RlcnMgb3IgbGV0dGVycyBwZXJtaXR0ZWQgaW4gbnVtYmVyJyB9O1xuXG4gICAgICAvLy0tLSBNaW5pbXVtIGxlbmd0aCBvZiAxMlxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IDEyKSByZXR1cm4geyBlcnJvck1lc3NhZ2U6IGBMZW5ndGggcmVxdWlyZWQgJHsxMiAtIHZhbHVlLmxlbmd0aH1gIH07XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==