@posiwise/smart-crm 0.0.49 → 0.0.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.mjs +5 -5
  2. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.mjs +4 -4
  3. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.mjs +9 -9
  4. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-invoices/smart-crm-account-invoices.component.mjs +4 -4
  5. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.mjs +4 -4
  6. package/esm2022/lib/private/components/smart-crm-actions/smart-crm-actions.component.mjs +5 -5
  7. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.mjs +4 -4
  8. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.mjs +4 -4
  9. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-configuration.component.mjs +3 -3
  10. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.mjs +4 -4
  11. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.mjs +4 -4
  12. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.mjs +4 -4
  13. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.mjs +5 -5
  14. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.mjs +4 -4
  15. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.mjs +4 -4
  16. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.mjs +4 -4
  17. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.mjs +6 -6
  18. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.mjs +7 -7
  19. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.mjs +6 -6
  20. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-account-insight/smart-crm-account-insight.component.mjs +5 -5
  21. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-contact-insight/smart-crm-contact-insight.component.mjs +4 -4
  22. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-marketing-insight/smart-crm-marketing-insight.component.mjs +4 -4
  23. package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.mjs +10 -9
  24. package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads.component.mjs +4 -4
  25. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.mjs +4 -4
  26. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.mjs +6 -6
  27. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.mjs +4 -4
  28. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.mjs +4 -4
  29. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.mjs +6 -6
  30. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.mjs +1 -1
  31. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.mjs +4 -4
  32. package/esm2022/lib/private/smart-crm-private.module.mjs +5 -2
  33. package/esm2022/lib/public/components/smart-crm-signup/smart-crm-signup.component.mjs +7 -4
  34. package/fesm2022/posiwise-smart-crm.mjs +67 -60
  35. package/fesm2022/posiwise-smart-crm.mjs.map +1 -1
  36. package/lib/private/smart-crm-private.module.d.ts +1 -0
  37. package/package.json +1 -1
@@ -465,7 +465,7 @@ export class SmartCrmOpportunitiesInfoComponent extends AppBaseComponent {
465
465
  super.ngOnDestroy();
466
466
  }
467
467
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmOpportunitiesInfoComponent, deps: [{ token: i0.Injector }, { token: i1.CrmService }, { token: i2.NgbModal }, { token: i3.AuthService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
468
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartCrmOpportunitiesInfoComponent, selector: "pw-smart-crm-opportunities-info", usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <div class=\"me-auto mb-0\">\n <h2 class=\"mb-0\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n Opportunity Info\n </h2>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"user-info p-3 card pb-0 h-auto\">\n <div class=\"mb-2 text-center\">\n <a class=\"profile-image\">\n <img width=\"100\"\n height=\"100\"\n class=\"rounded-circle img-border width-100\"\n alt=\"user\"\n src=\"assets/img/icons/male.png\" />\n </a>\n </div>\n <div class=\"mb-4 d-flex justify-content-between align-items-center\">\n <h4 class=\"d-inline-block\">\n About <span *ngIf=\"data?.id\">{{ data.title }}</span>\n </h4>\n <a href=\"javascript:void(0);\"\n *ngIf=\"isFormEdit\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"\n isFormEdit = !isFormEdit; getAccountsBySubscription(); getAllContacts()\n \">Edit</a>\n </div>\n <form [formGroup]=\"aboutControls\"\n [class.isDisabled]=\"isFormEdit\">\n <div class=\"mb-3\">\n <label class=\"label mb-0\" for=\"Title\">{{\n 'Crm.OpportunitiesMessage.Title' | transloco\n }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\"\n *ngIf=\"data?.crm_contact_id\">\n <label class=\"label mb-2\" for=\"Contact\">{{\n 'Crm.OpportunitiesMessage.Contact' | transloco\n }}</label>\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n data.crm_contact_id\n ]\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.crm_contact_id\">{{ data?.crm_contact?.first_name }} {{ data?.crm_contact?.last_name }}</a>\n <p-autoComplete *ngIf=\"!isFormEdit || !data?.crm_contact_id\"\n [suggestions]=\"filteredContacts\"\n formControlName=\"crm_contact_id\"\n dataKey=\"id\"\n field=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"onContactSearch($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search contacts\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\">\n <label class=\"label mb-2\" for=\"Account\">{{\n 'Crm.OpportunitiesMessage.Account' | transloco\n }}</label>\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n data.crm_account_id\n ]\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.crm_account_id\">{{ data?.crm_account?.name }}</a>\n <p-autoComplete *ngIf=\"!isFormEdit || !data?.crm_account_id\"\n [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"accountSearch($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search accounts\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\" for=\"OneTimeAmount\">{{\n 'Crm.OpportunitiesMessage.OneTimeAmount' | transloco\n }}</label>\n <span class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.one_time_amount\">{{ data?.one_time_amount | currency }}</span>\n <input *ngIf=\"!isFormEdit || !data?.one_time_amount\"\n type=\"number\"\n numbersOnly\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"one_time_amount\"\n id=\"one_time_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['one_time_amount'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\" for=\"monthlyAmount\">{{\n 'Crm.OpportunitiesMessage.MonthlyAmount' | transloco\n }}</label>\n <span class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.monthly_amount\">{{ data?.monthly_amount | currency }}</span>\n <input *ngIf=\"!isFormEdit || !data?.monthly_amount\"\n type=\"number\"\n numbersOnly\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"monthly_amount\"\n id=\"monthly_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['monthly_amount'].errors }\" />\n </div>\n <div *ngIf=\"!isFormEdit\"\n class=\"text-end form-action-buttons\">\n <input type=\"button\"\n class=\"btn btn-outline-primary\"\n (click)=\"isFormEdit = !isFormEdit; getOpportunityDetails()\"\n value=\"Cancel\" />\n <input type=\"button\"\n class=\"btn btn-primary ms-3\"\n value=\"Submit\"\n (click)=\"updateOpportunities()\" />\n </div>\n </form>\n </div>\n </div>\n <div class=\"col-12 col-md-8\">\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Notes</a>\n <ng-template ngbNavContent>\n <form [formGroup]=\"actionControls\"\n (ngSubmit)=\"onCommentSave()\">\n <textarea class=\"form-control\"\n formControlName=\"comment\"\n rows=\"6\"></textarea>\n <p class=\"text-danger\"\n *ngIf=\"\n actionControls.get('comment').touched &&\n actionControls.get('comment').invalid\n \">\n Note Required\n </p>\n <div *ngIf=\"actions?.length\"\n class=\"d-block clear-both pt-3\">\n <ng-container *ngFor=\"let action of actions; index as i\">\n <button *ngIf=\"action.visible\"\n type=\"button\"\n [class.active]=\"\"\n class=\"btn btn-sm me-2 btn-outline-primary mb-2 action-btn\"\n (click)=\"showDatePicker($event, action.id); d.toggle()\">\n {{ action.name }}\n </button>\n </ng-container>\n <div class=\"text-danger\"\n *ngIf=\"submitAction && actionFormControls.crm_action_id.invalid\">\n Please select an action\n </div>\n <div class=\"row mt-3\">\n <div class=\"col-12 col-sm-4\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"when\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.toggle()\" />\n </div>\n </div>\n <div class=\"col-sm-4 pe-0 completed-toggle\">\n <div class=\"mb-3\">\n <ui-switch checkedLabel=\"completed\"\n uncheckedLabel=\"open\"\n formControlName=\"completed\"\n name=\"completed\">\n </ui-switch>\n </div>\n </div>\n </div>\n </div>\n <div class=\"float-end\">\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n [disabled]=\"buttonDisable\"\n class=\"btn btn-primary mt-2 mb-2 float-end\"\n >Submit Note</button>\n <a class=\"btn btn-outline-primary mt-2 mb-2 me-0 me-sm-2 float-end\"\n (click)=\"openModal(content)\">{{ 'Upload file' | transloco }}</a>\n </div>\n <div *ngIf=\"buttonDisable\"\n class=\"no-actions pt-4\">\n <pw-no-data [withImage]=\"true\" [message]=\"\n 'Crm.OpportunitiesMessage.NoActionsInOpportunitiesInfoMessage'\n | transloco\n \">\n </pw-no-data>\n </div>\n </form>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"!opportunitiesComments?.length && isLoaded\"\n class=\"no-actions pt-3\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoActionsMessage' | transloco\">\n </pw-no-data>\n </div>\n <div *ngIf=\"opportunitiesComments?.length\"\n id=\"timeline\"\n class=\"pt-3 clear-both timeline-center timeline-wrapper\">\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n </ul>\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n <li class=\"timeline-item\"\n [ngClass]=\"{ 'mt-5': odd }\"\n *ngFor=\"\n let item of opportunitiesComments;\n index as i;\n let odd = odd;\n let even = even\n \">\n <div class=\"timeline-badge\">\n <span class=\"bg-red bg-lighten-1\">\n <span class=\"timeline-year\">\n <span class=\"d-block date-year\">{{\n item.when | date: 'medium' | slice: 0:3\n }}</span>\n <span>{{ item.year }}</span>\n </span>\n </span>\n </div>\n <div class=\"timeline-card shadow card pb-0 rounded border-grey border-lighten-2 position-static\">\n <div class=\"card-header py-4\">\n <div class=\"mb-0 clearfix\">\n <textarea type=\"text\"\n name=\"comment\"\n class=\"comment-field form-control p-0\"\n [(ngModel)]=\"item.comment\">{{ item.comment }}</textarea>\n <p class=\"float-start mb-0\"\n *ngIf=\"!showFullComment || item.id !== commentId\">\n {{ item.comment | slice: 0:170\n }}<a *ngIf=\"item.comment.length > 170\"\n class=\"text-secondary\"\n (click)=\"\n showFullComment = true; commentId = item.id\n \">...show more</a>\n </p>\n <p class=\"float-start mb-0\"\n *ngIf=\"showFullComment && item.id === commentId\">\n {{ item.comment }}\n <a *ngIf=\"\n item.comment.length > 170 && showFullComment\n \"\n (click)=\"showFullComment = false\"\n class=\"text-secondary\">...show less</a>\n </p>\n <button class=\"btn btn-md edit-btn float-end py-0\"\n (click)=\"showEditControls($event)\"\n *ngIf=\"userId === item.owner_id || hasAccess\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <div class=\"card-subtitle text-muted my-0 clearfix\">\n <div class=\"float-start\">\n <span *ngIf=\"!updating || actionId !== item.id\"\n class=\"font-small-3\">\n {{ item.when }}</span>\n <input *ngIf=\"updating && actionId === item.id\"\n placeholder=\"dd-mmm-yyyy\"\n value=\"{{ item.when }}\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (focus)=\"d.toggle()\"\n (dateSelect)=\"onDateSelect($event, item)\" />\n </div>\n <button type=\" button\"\n class=\"btn btn-sm float-end when-btn py-0\"\n *ngIf=\"userId === item.owner_id || hasAccess\"\n (click)=\"showDatePickerUpdate(item.id)\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <p [class.text-danger]=\"!item.color\"\n *ngIf=\"!item.cancelled && !item.completed\"\n class=\"mb-0\">\n {{ item.due }}\n </p>\n <p>\n {{\n item?.owner?.first_name +\n ' ' +\n item?.owner?.last_name\n }}\n </p>\n <span class=\"badge bg-primary\">{{\n item?.crm_action?.name\n }}</span>\n <span *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n class=\"badge bg-success ms-2\">Open</span>\n <a *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as completed\"\n aria-label=\"Set as completed\"\n class=\"me-3 ms-3\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \">\n <i class=\"fa fa-tasks completed\" aria-hidden=\"true\"></i>\n </a>\n <a *ngIf=\"\n !item.cancelled &&\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as cancelled\"\n aria-label=\"Set as cancelled\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCancelled(item.id, item)\">\n <i\n class=\"fa fa-times delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <a *ngIf=\"\n item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as UnCompleted\"\n aria-label=\"Set as UnCompleted\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \"\n class=\"ms-2\">\n <i class=\"far fa-window-close\" aria-hidden=\"true\"></i>\n </a>\n <div class=\"control-btns mt-3 text-end\">\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-default me-2\"\n (click)=\"showEditControls(undefined)\">\n Cancel\n </button>\n <button class=\"btn btn-sm btn-primary\"\n type=\"button\"\n (click)=\"updateComment(item)\">\n Submit\n </button>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Versioning</a>\n <ng-template ngbNavContent>\n <div *ngFor=\"let version of opportunitiesVersioning\">\n <p>\n <strong>Event: </strong>{{ version.event }} | <strong>Author: </strong><a *ngIf=\"version?.author\"\n [routerLink]=\"['/members', version?.author?.slug]\">{{ version?.author | ifNameNullShowEmail }}</a>\n | <strong>Created at: </strong>{{ version.created_at }}<br />\n <strong>Object: </strong>{{ version.object | json }}\n </p>\n <hr />\n </div>\n <div *ngIf=\"opportunitiesVersioning?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoVersionsMessage' | transloco\">\n </pw-no-data>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"3\">\n <a ngbNavLink>Files</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-company-files [contactId]=\"contactId\"\n [accountId]=\"accountId\"\n [opportunityId]=\"opportunitiesId\">\n </pw-smart-crm-company-files>\n </ng-template>\n </li>\n </ul>\n\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n</div>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'Upload File' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <div class=\"row p-2\">\n <div class=\"col-12\">\n <div class=\"upload-box\">\n <div class=\"upload-box-content\">\n <div class=\"drop-container\"\n ngFileDrop\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\">\n <p>\n Drag files here or\n <label class=\"upload-button\">\n <input type=\"file\"\n ngFileSelect\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\"\n multiple />\n browse\n </label>\n to upload.\n </p>\n </div>\n <div class=\"upload-item\"\n *ngFor=\"let f of files; let i = index\">\n <div class=\"upload-item-content\">\n <div class=\"filename\">\n <div class=\"filename-left\">\n <i class=\"ionicon ion-ios-copy\" aria-hidden=\"true\"></i>\n <span>{{ f.name }}</span>\n </div>\n </div>\n <div class=\"progress-content\">\n <div class=\"progress\">\n <span class=\"bar\"\n [style.width]=\"f?.progress?.data?.percentage + '%'\"\n [class.is-done]=\"f['uploaded']\"></span>\n </div>\n </div>\n <div class=\"progress-text-content\">\n <span class=\"progress-text\"\n [class.is-done]=\"f['uploaded']\">\n <span *ngIf=\"!f['uploaded']\">{{ f.progress?.data?.percentage - 1 }}%\n </span>\n <span *ngIf=\"f['uploaded']\">100 %</span>\n <span *ngIf=\"!f['uploaded']\">Uploading...</span>\n <span *ngIf=\"f['uploaded']\">Done</span>\n </span>\n <span class=\"speed-and-eta-text\"\n *ngIf=\"f.progress?.data?.percentage !== 0 && !f['uploaded']\">\n <span>{{ f.progress?.data?.speedHuman }} </span>\n <span>ETA {{ f.progress?.data?.etaHuman }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.user-info .label{color:#777;font-size:14px;text-transform:capitalize}.user-info .user-value{border:0;border-bottom:1px solid rgb(119,119,119)}.user-info .user-value:focus{box-shadow:none}.user-info .user-value.is-invalid{border-color:#ff586b}.action-btn.active{color:#fff!important;background-color:var(--first)}.control-btns{display:none}.comment-field{border:0;border-bottom:1px solid rgb(242,242,242);color:#1769e1;display:none;font-size:15px;min-height:100px;padding:2px 5px!important}.comment-field:focus{border:1px solid rgb(23,105,225)!important;border-bottom:0;box-shadow:none}p{max-width:85%;white-space:pre-wrap}.show-controls .comment-field,.show-controls .control-btns{display:block}.show-controls p,.show-controls .edit-btn{display:none}select{appearance:none}textarea{resize:none}.clear-both{clear:both}.isDisabled input[type=text],.isDisabled select{pointer-events:none}.timeline-card.card{min-height:auto}@media (max-width: 768px){.completed-toggle{padding-top:10px}}.when-btn:focus{border:0;box-shadow:none}.no-actions{clear:both}.form-action-buttons{margin-bottom:14px;margin-top:15px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i6.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "directive", type: i7.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i7.NumberDirective, selector: "input[numbersOnly]" }, { kind: "directive", type: i7.LazyImgDirective, selector: "img" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i9.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i10.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i11.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i12.NgFileDropDirective, selector: "[ngFileDrop]", inputs: ["options", "uploadInput"], outputs: ["uploadOutput"] }, { kind: "directive", type: i12.NgFileSelectDirective, selector: "[ngFileSelect]", inputs: ["options", "uploadInput"], outputs: ["uploadOutput"] }, { kind: "directive", type: i2.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i2.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i2.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i2.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i2.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i2.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i2.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i13.SmartCrmCompanyFilesComponent, selector: "pw-smart-crm-company-files", inputs: ["accountId", "contactId", "opportunityId"] }, { kind: "pipe", type: i4.JsonPipe, name: "json" }, { kind: "pipe", type: i4.SlicePipe, name: "slice" }, { kind: "pipe", type: i4.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i4.DatePipe, name: "date" }, { kind: "pipe", type: i14.IfNameNullShowEmailPipe, name: "ifNameNullShowEmail" }, { kind: "pipe", type: i15.TranslocoPipe, name: "transloco" }] }); }
468
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartCrmOpportunitiesInfoComponent, selector: "pw-smart-crm-opportunities-info", usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <div class=\"me-auto mb-0\">\n <h2 class=\"mb-0\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n Opportunity Info\n </h2>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"user-info p-3 card pb-0 h-auto\">\n <div class=\"mb-2 text-center\">\n <a class=\"profile-image\">\n <img width=\"100\"\n height=\"100\"\n class=\"rounded-circle img-border width-100\"\n alt=\"user\"\n src=\"assets/img/icons/male.png\" />\n </a>\n </div>\n <div class=\"mb-4 d-flex justify-content-between align-items-center\">\n <h4 class=\"d-inline-block\">\n About <span *ngIf=\"data?.id\">{{ data.title }}</span>\n </h4>\n <a href=\"javascript:void(0);\"\n *ngIf=\"isFormEdit\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"\n isFormEdit = !isFormEdit; getAccountsBySubscription(); getAllContacts()\n \">Edit</a>\n </div>\n <form [formGroup]=\"aboutControls\"\n [class.isDisabled]=\"isFormEdit\">\n <div class=\"mb-3\">\n <label class=\"label mb-0\" for=\"Title\">{{\n 'Crm.OpportunitiesMessage.Title' | transloco\n }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\"\n *ngIf=\"data?.crm_contact_id\">\n <label class=\"label mb-2\" for=\"Contact\">{{\n 'Crm.OpportunitiesMessage.Contact' | transloco\n }}</label>\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n data.crm_contact_id\n ]\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.crm_contact_id\">{{ data?.crm_contact?.first_name }} {{ data?.crm_contact?.last_name }}</a>\n <p-autoComplete *ngIf=\"!isFormEdit || !data?.crm_contact_id\"\n [suggestions]=\"filteredContacts\"\n formControlName=\"crm_contact_id\"\n dataKey=\"id\"\n field=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"onContactSearch($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search contacts\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\">\n <label class=\"label mb-2\" for=\"Account\">{{\n 'Crm.OpportunitiesMessage.Account' | transloco\n }}</label>\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n data.crm_account_id\n ]\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.crm_account_id\">{{ data?.crm_account?.name }}</a>\n <p-autoComplete *ngIf=\"!isFormEdit || !data?.crm_account_id\"\n [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"accountSearch($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search accounts\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\" for=\"OneTimeAmount\">{{\n 'Crm.OpportunitiesMessage.OneTimeAmount' | transloco\n }}</label>\n <span class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.one_time_amount\">{{ data?.one_time_amount | currency }}</span>\n <input *ngIf=\"!isFormEdit || !data?.one_time_amount\"\n type=\"number\"\n numbersOnly\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"one_time_amount\"\n id=\"one_time_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['one_time_amount'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\" for=\"monthlyAmount\">{{\n 'Crm.OpportunitiesMessage.MonthlyAmount' | transloco\n }}</label>\n <span class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.monthly_amount\">{{ data?.monthly_amount | currency }}</span>\n <input *ngIf=\"!isFormEdit || !data?.monthly_amount\"\n type=\"number\"\n numbersOnly\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"monthly_amount\"\n id=\"monthly_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['monthly_amount'].errors }\" />\n </div>\n <div *ngIf=\"!isFormEdit\"\n class=\"text-end form-action-buttons\">\n <input type=\"button\"\n class=\"btn btn-outline-primary\"\n (click)=\"isFormEdit = !isFormEdit; getOpportunityDetails()\"\n value=\"Cancel\" />\n <input type=\"button\"\n class=\"btn btn-primary ms-3\"\n value=\"Submit\"\n (click)=\"updateOpportunities()\" />\n </div>\n </form>\n </div>\n </div>\n <div class=\"col-12 col-md-8\">\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Notes</a>\n <ng-template ngbNavContent>\n <form [formGroup]=\"actionControls\"\n (ngSubmit)=\"onCommentSave()\">\n <textarea class=\"form-control\"\n formControlName=\"comment\"\n rows=\"6\"></textarea>\n <p class=\"text-danger\"\n *ngIf=\"\n actionControls.get('comment').touched &&\n actionControls.get('comment').invalid\n \">\n Note Required\n </p>\n <div *ngIf=\"actions?.length\"\n class=\"d-block clear-both pt-3\">\n <ng-container *ngFor=\"let action of actions; index as i\">\n <button *ngIf=\"action.visible\"\n type=\"button\"\n [class.active]=\"\"\n class=\"btn btn-sm me-2 btn-outline-primary mb-2 action-btn\"\n (click)=\"showDatePicker($event, action.id); d.toggle()\">\n {{ action.name }}\n </button>\n </ng-container>\n <div class=\"text-danger\"\n *ngIf=\"submitAction && actionFormControls.crm_action_id.invalid\">\n Please select an action\n </div>\n <div class=\"row mt-3\">\n <div class=\"col-12 col-sm-4\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"when\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.toggle()\" />\n </div>\n </div>\n <div class=\"col-sm-4 pe-0 completed-toggle\">\n <div class=\"mb-3\">\n <ui-switch checkedLabel=\"completed\"\n uncheckedLabel=\"open\"\n formControlName=\"completed\"\n name=\"completed\">\n </ui-switch>\n </div>\n </div>\n </div>\n </div>\n <div class=\"float-end\">\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n [disabled]=\"buttonDisable\"\n class=\"btn btn-primary mt-2 mb-2 float-end\"\n >Submit Note</button>\n <a class=\"btn btn-outline-primary mt-2 mb-2 me-0 me-sm-2 float-end\"\n (click)=\"openModal(content)\">{{ 'Upload file' | transloco }}</a>\n </div>\n <div *ngIf=\"buttonDisable\"\n class=\"no-actions pt-4\">\n <pw-no-data [withImage]=\"true\" [message]=\"\n 'Crm.OpportunitiesMessage.NoActionsInOpportunitiesInfoMessage'\n | transloco\n \">\n </pw-no-data>\n </div>\n </form>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"!opportunitiesComments?.length && isLoaded\"\n class=\"no-actions pt-3\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoActionsMessage' | transloco\">\n </pw-no-data>\n </div>\n <div *ngIf=\"opportunitiesComments?.length\"\n id=\"timeline\"\n class=\"pt-3 clear-both timeline-center timeline-wrapper\">\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n </ul>\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n <li class=\"timeline-item\"\n [ngClass]=\"{ 'mt-5': odd }\"\n *ngFor=\"\n let item of opportunitiesComments;\n index as i;\n let odd = odd;\n let even = even\n \">\n <div class=\"timeline-badge\">\n <span class=\"bg-red bg-lighten-1\">\n <span class=\"timeline-year\">\n <span class=\"d-block date-year\">{{\n item.when | date: 'medium' | slice: 0:3\n }}</span>\n <span>{{ item.year }}</span>\n </span>\n </span>\n </div>\n <div class=\"timeline-card shadow card pb-0 rounded border-grey border-lighten-2 position-static\">\n <div class=\"card-header py-4\">\n <div class=\"mb-0 clearfix\">\n <textarea type=\"text\"\n name=\"comment\"\n class=\"comment-field form-control p-0\"\n [(ngModel)]=\"item.comment\">{{ item.comment }}</textarea>\n <p class=\"float-start mb-0\"\n *ngIf=\"!showFullComment || item.id !== commentId\">\n {{ item.comment | slice: 0:170\n }}<a *ngIf=\"item.comment.length > 170\"\n class=\"text-secondary\"\n (click)=\"\n showFullComment = true; commentId = item.id\n \">...show more</a>\n </p>\n <p class=\"float-start mb-0\"\n *ngIf=\"showFullComment && item.id === commentId\">\n {{ item.comment }}\n <a *ngIf=\"\n item.comment.length > 170 && showFullComment\n \"\n (click)=\"showFullComment = false\"\n class=\"text-secondary\">...show less</a>\n </p>\n <button class=\"btn btn-md edit-btn float-end py-0\"\n (click)=\"showEditControls($event)\"\n *ngIf=\"userId === item.owner_id || hasAccess\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <div class=\"card-subtitle text-muted my-0 clearfix\">\n <div class=\"float-start\">\n <span *ngIf=\"!updating || actionId !== item.id\"\n class=\"font-small-3\">\n {{ item.when }}</span>\n <input *ngIf=\"updating && actionId === item.id\"\n placeholder=\"dd-mmm-yyyy\"\n value=\"{{ item.when }}\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (focus)=\"d.toggle()\"\n (dateSelect)=\"onDateSelect($event, item)\" />\n </div>\n <button type=\" button\"\n class=\"btn btn-sm float-end when-btn py-0\"\n *ngIf=\"userId === item.owner_id || hasAccess\"\n (click)=\"showDatePickerUpdate(item.id)\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <p [class.text-danger]=\"!item.color\"\n *ngIf=\"!item.cancelled && !item.completed\"\n class=\"mb-0\">\n {{ item.due }}\n </p>\n <p>\n {{\n item?.owner?.first_name +\n ' ' +\n item?.owner?.last_name\n }}\n </p>\n <span class=\"badge bg-primary\">{{\n item?.crm_action?.name\n }}</span>\n <span *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n class=\"badge bg-success ms-2\">Open</span>\n <a *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as completed\"\n aria-label=\"Set as completed\"\n class=\"me-3 ms-3\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \">\n <i class=\"fa fa-tasks completed\" aria-hidden=\"true\"></i>\n </a>\n <a *ngIf=\"\n !item.cancelled &&\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as cancelled\"\n aria-label=\"Set as cancelled\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCancelled(item.id, item)\">\n <i\n class=\"fa fa-times delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <a *ngIf=\"\n item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as UnCompleted\"\n aria-label=\"Set as UnCompleted\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \"\n class=\"ms-2\">\n <i class=\"far fa-window-close\" aria-hidden=\"true\"></i>\n </a>\n <div class=\"control-btns mt-3 text-end\">\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-default me-2\"\n (click)=\"showEditControls(undefined)\">\n Cancel\n </button>\n <button class=\"btn btn-sm btn-primary\"\n type=\"button\"\n (click)=\"updateComment(item)\">\n Submit\n </button>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Versioning</a>\n <ng-template ngbNavContent>\n <div *ngFor=\"let version of opportunitiesVersioning\">\n <p>\n <strong>Event: </strong>{{ version.event }} | <strong>Author: </strong><a *ngIf=\"version?.author\"\n [routerLink]=\"['/members', version?.author?.slug]\">{{ version?.author | ifNameNullShowEmail }}</a>\n | <strong>Created at: </strong>{{ version.created_at }}<br />\n <strong>Object: </strong>{{ version.object | json }}\n </p>\n <hr />\n </div>\n <div *ngIf=\"opportunitiesVersioning?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoVersionsMessage' | transloco\">\n </pw-no-data>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"3\">\n <a ngbNavLink>Files</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-company-files [contactId]=\"contactId\"\n [accountId]=\"accountId\"\n [opportunityId]=\"opportunitiesId\">\n </pw-smart-crm-company-files>\n </ng-template>\n </li>\n </ul>\n\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n</div>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'Upload File' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <div class=\"row p-2\">\n <div class=\"col-12\">\n <div class=\"upload-box\">\n <div class=\"upload-box-content\">\n <div class=\"drop-container\"\n ngFileDrop\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\">\n <p>\n Drag files here or\n <label class=\"upload-button\">\n <input type=\"file\"\n ngFileSelect\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\"\n multiple />\n browse\n </label>\n to upload.\n </p>\n </div>\n <div class=\"upload-item\"\n *ngFor=\"let f of files; let i = index\">\n <div class=\"upload-item-content\">\n <div class=\"filename\">\n <div class=\"filename-left\">\n <i class=\"ionicon ion-ios-copy\" aria-hidden=\"true\"></i>\n <span>{{ f.name }}</span>\n </div>\n </div>\n <div class=\"progress-content\">\n <div class=\"progress\">\n <span class=\"bar\"\n [style.width]=\"f?.progress?.data?.percentage + '%'\"\n [class.is-done]=\"f['uploaded']\"></span>\n </div>\n </div>\n <div class=\"progress-text-content\">\n <span class=\"progress-text\"\n [class.is-done]=\"f['uploaded']\">\n <span *ngIf=\"!f['uploaded']\">{{ f.progress?.data?.percentage - 1 }}%\n </span>\n <span *ngIf=\"f['uploaded']\">100 %</span>\n <span *ngIf=\"!f['uploaded']\">Uploading...</span>\n <span *ngIf=\"f['uploaded']\">Done</span>\n </span>\n <span class=\"speed-and-eta-text\"\n *ngIf=\"f.progress?.data?.percentage !== 0 && !f['uploaded']\">\n <span>{{ f.progress?.data?.speedHuman }} </span>\n <span>ETA {{ f.progress?.data?.etaHuman }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.user-info .label{color:#777;font-size:14px;text-transform:capitalize}.user-info .user-value{border:0;border-bottom:1px solid rgb(119,119,119)}.user-info .user-value:focus{box-shadow:none}.user-info .user-value.is-invalid{border-color:#ff586b}.action-btn.active{color:#fff!important;background-color:var(--first)}.control-btns{display:none}.comment-field{border:0;border-bottom:1px solid rgb(242,242,242);color:#1769e1;display:none;font-size:15px;min-height:100px;padding:2px 5px!important}.comment-field:focus{border:1px solid rgb(23,105,225)!important;border-bottom:0;box-shadow:none}p{max-width:85%;white-space:pre-wrap}.show-controls .comment-field,.show-controls .control-btns{display:block}.show-controls p,.show-controls .edit-btn{display:none}select{appearance:none}textarea{resize:none}.clear-both{clear:both}.isDisabled input[type=text],.isDisabled select{pointer-events:none}.timeline-card.card{min-height:auto}@media (max-width: 768px){.completed-toggle{padding-top:10px}}.when-btn:focus{border:0;box-shadow:none}.no-actions{clear:both}.form-action-buttons{margin-bottom:14px;margin-top:15px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i6.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "directive", type: i7.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i7.NumberDirective, selector: "input[numbersOnly]" }, { kind: "directive", type: i7.LazyImgDirective, selector: "img" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i2.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i2.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i2.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i2.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i2.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i2.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "component", type: i9.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i10.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i11.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i12.NgFileDropDirective, selector: "[ngFileDrop]", inputs: ["options", "uploadInput"], outputs: ["uploadOutput"] }, { kind: "directive", type: i12.NgFileSelectDirective, selector: "[ngFileSelect]", inputs: ["options", "uploadInput"], outputs: ["uploadOutput"] }, { kind: "directive", type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i13.SmartCrmCompanyFilesComponent, selector: "pw-smart-crm-company-files", inputs: ["accountId", "contactId", "opportunityId"] }, { kind: "pipe", type: i4.JsonPipe, name: "json" }, { kind: "pipe", type: i4.SlicePipe, name: "slice" }, { kind: "pipe", type: i4.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i4.DatePipe, name: "date" }, { kind: "pipe", type: i14.IfNameNullShowEmailPipe, name: "ifNameNullShowEmail" }, { kind: "pipe", type: i15.TranslocoPipe, name: "transloco" }] }); }
469
469
  }
470
470
  __decorate([
471
471
  ValidateForm('actionControls'),
@@ -15,10 +15,10 @@ import * as i6 from "@ng-bootstrap/ng-bootstrap";
15
15
  import * as i7 from "@posiwise/directives";
16
16
  import * as i8 from "angular-plotly.js";
17
17
  import * as i9 from "@angular/router";
18
- import * as i10 from "primeng/multiselect";
18
+ import * as i10 from "primeng/table";
19
19
  import * as i11 from "primeng/api";
20
- import * as i12 from "primeng/progressspinner";
21
- import * as i13 from "primeng/table";
20
+ import * as i12 from "primeng/multiselect";
21
+ import * as i13 from "primeng/progressspinner";
22
22
  import * as i14 from "@posiwise/shared-components";
23
23
  import * as i15 from "@posiwise/pipes";
24
24
  import * as i16 from "@jsverse/transloco";
@@ -210,7 +210,7 @@ export class SmartCrmOpportunitiesListComponent extends AppBaseComponent {
210
210
  super.ngOnDestroy();
211
211
  }
212
212
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmOpportunitiesListComponent, deps: [{ token: i1.CrmService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i2.ProductService }], target: i0.ɵɵFactoryTarget.Component }); }
213
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartCrmOpportunitiesListComponent, selector: "pw-smart-crm-opportunities-list", usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\" data-cy=\"add-opportunities\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt [value]=\"data.crm_opportunities\" [paginator]=\"data.object_count !== 0\" [lazy]=\"true\" [rows]=\"PAGE_SIZE\"\n class=\"contact-table\" [totalRecords]=\"data.object_count\" [loading]=\"loading\" filterDelay=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\" [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row\">\n <div class=\"col-sm-3 col-6\">\n <p-multiSelect placeholder=\"Select Category\" [options]=\"categories\" [(ngModel)]=\"filterByCategories\"\n (onChange)=\"onSearchOptionChange($event, 'category')\" [filter]=\"true\" [showHeader]=\"true\" [showToggleAll]=\"true\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-3 col-6 mb-2 mb-sm-0\">\n <p-multiSelect placeholder=\"Select Stage\" [options]=\"searchStages\" [(ngModel)]=\"filterByStages\"\n (onChange)=\"onSearchOptionChange($event, 'stage')\" [filter]=\"true\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <!-- Empty column occupying the same space -->\n <div class=\"col-sm-3 col-6\"></div>\n <div class=\"col-sm-3 col-md-4 col-lg-3 d-flex justify-content-end\">\n <div class=\"d-flex w-100\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText placeholder=\"Search opportunities..\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" class=\"form-control search-opportunities-search-input\" />\n </div>\n </div>\n </div>\n <div class=\"search-filter\">\n <a class=\"mt-3 ms-3 text-start btn-filter-primary\" (click)=\"clearFilters()\">Clear all filters</a>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\" pSortableColumn=\"title\"> {{ 'Crm.OpportunitiesMessage.Title' | transloco }} <p-sortIcon\n field=\"title\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_contact_id\"> {{ 'Crm.OpportunitiesMessage.Contact' | transloco }}\n <p-sortIcon field=\"crm_contact_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_account_id\"> {{ 'Crm.OpportunitiesMessage.Account' | transloco }}\n <p-sortIcon field=\"crm_account_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"one_time_amount\"> {{ 'Crm.OpportunitiesMessage.OneTimeAmount' | transloco\n }} <p-sortIcon field=\"one_time_amount\"></p-sortIcon>\n </th>\n <th class=\"mrr-header\" scope=\"true\" pSortableColumn=\"monthly_amount\"> {{ 'Crm.OpportunitiesMessage.MRR' | transloco\n }} <p-sortIcon field=\"monthly_amount\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"win_chances\"> {{ 'Crm.OpportunitiesMessage.WinChance' | transloco }}\n <p-sortIcon field=\"win_chances\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_opportunity_category_ids\"> {{ 'Crm.OpportunitiesMessage.Categories' |\n transloco }} <p-sortIcon field=\"crm_opportunity_category_ids\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_opportunity_stage_id\"> {{ 'Crm.OpportunitiesMessage.Stage' | transloco\n }} <p-sortIcon field=\"crm_opportunity_stage_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"starting_at\"> {{ 'Crm.OpportunitiesMessage.StartingAt' | transloco }}\n <p-sortIcon field=\"starting_at\"></p-sortIcon>\n </th>\n <th class=\"actions-list-two\" scope=\"true\"> {{ 'Label.Actions' | transloco }} </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-opportunities>\n <tr>\n <td data-head=\"Title\">\n <a [ngbTooltip]=\"opportunities?.title\" *ngIf=\"\n hasAccess ||\n opportunities?.owner_id === userId ||\n checkPermission('Pages.Product.CRM.Role.Admin')\n \" [routerLink]=\"[\n '/' + subscription?.slug + routers.opportunityInfo,\n opportunities.id\n ]\">\n <span>{{ opportunities?.title | textTruncate: 15 }} </span>\n </a>\n <a *ngIf=\"\n !hasAccess &&\n opportunities?.owner_id !== userId &&\n checkPermission('Pages.Product.CRM.Role.Admin')\n \"> {{ opportunities?.title | textTruncate: 15 }} </a>\n </td>\n <td class=\"contactname\" data-head=\"Crm Contact\">\n <a *ngIf=\"opportunities?.crm_contact_id\" [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n opportunities.crm_contact_id.id\n ]\">{{ opportunities.crm_contact?.first_name + ' ' +\n opportunities.crm_contact?.last_name }}</a>\n </td>\n <td data-head=\"Account\">\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n opportunities.crm_account.id\n ]\">{{ opportunities.crm_account.name }}</a>\n </td>\n <td data-head=\"Amount\"> {{ opportunities.one_time_amount / 100 | currency: opportunities?.currency }} </td>\n <td data-head=\"MRR\" class=\"expected-mrr\"> {{ opportunities.monthly_amount / 100 | currency: opportunities?.currency }} </td>\n <td data-head=\"WinChance\">\n <span [ngClass]=\"{'text-danger': opportunities.win_chances < 30, 'text-success fw-bold': opportunities.win_chances >70}\">\n {{ opportunities.win_chances / 100 | percent }}\n </span>\n <span class=\"text-danger\"\n *ngIf=\"opportunities.cancelled\">!Cancelled!</span>\n </td>\n <td data-head=\"Categories\">\n <span *ngFor=\"let category of opportunities?.crm_opportunity_categories\" class=\"badge ms-1\"\n [appDynamicBadge]=\"{ itemsArray: categories, item: category?.name }\" color=\"blue-grey\">{{ category?.name\n }}</span>\n </td>\n <td data-head=\"Stage\">\n <span class=\"badge\" [appDynamicBadge]=\"{\n itemsArray: stages,\n item: opportunities?.crm_opportunity_stage?.name\n }\" color=\"cyan\">{{ opportunities?.crm_opportunity_stage?.name }}</span>\n </td>\n <td data-head=\"Starting At\" [ngClass]=\"{'text-danger': isPastDate(opportunities.starting_at)}\"> {{ opportunities.starting_at | dateFormat }} </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <ng-container *ngIf=\"hasAccess || opportunities?.owner_id === userId\">\n <ng-container *rbacAllow=\"'SubscriptionAdmin'\">\n <li ngbTooltip=\"Edit\" class=\"me-2 me-sm-3\" [routerLink]=\"[\n '/' + subscription?.slug + routers.opportunities,\n opportunities.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ng-container>\n <ng-container *rbacAllow=\"'SubscriptionAdmin'\">\n <li ngbTooltip=\"Delete\" class=\"me-2 me-sm-3\">\n <i class=\"fa fa-trash delete-icon\" (keydown.enter)=\"onDelete(opportunities.id)\"\n (keydown.space)=\"onDelete(opportunities.id)\"\n (click)=\"onDelete(opportunities.id)\" aria-hidden=\"true\"></i>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoOpportunitiesMessage' | transloco\">\n </pw-no-data>\n</div>\n<ng-container>\n <div class=\"row mt-5\" *ngIf=\"isLoaded\">\n <!-- Drill Down -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Watch Closely</h5>\n <div class=\"primeng-datatable-container table-responsive\" *ngIf=\"opportunitiesInsight?.length\">\n <p-table class=\"table\" #dt [value]=\"opportunitiesInsight\" [paginator]=\"opportunitiesInsight?.length !== 0\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"opportunitiesInsight.length\" [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Account' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Title' | transloco }}</th>\n <th scope=\"true\"> {{ 'Crm.OpportunitiesMessage.Reason' | transloco }} </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-insight>\n <tr>\n <td data-head=\"Account\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.accountInfo, insight.crm_account_id]\" class=\"name-link\">\n <span [ngbTooltip]=\"insight?.name\">{{ insight?.name | textTruncate:20 }}</span>\n </a>\n </td>\n <td data-head=\"Title\">\n <span\n [ngbTooltip]=\"insight?.title\"\n container=\"body\"\n tooltipClass=\"custom-tooltip\"\n placement=\"bottom\"\n >\n {{ insight?.title | textTruncate: 20 }}\n </span>\n </td>\n <td data-head=\"Reason\"> {{ insight.reason }} </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"opportunitiesInsight?.length !== 0\">{{ 'Label.Total' | transloco }}: {{ opportunitiesInsight.length }}</span>\n </div>\n <div *ngIf=\"opportunitiesInsight?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Geography -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Opportunities Location</h5>\n <div>\n <ng-template [ngIf]=\"opportunitiesGeography\">\n <plotly-plot [data]=\"opportunitiesGeography?.data\" [layout]=\"opportunitiesGeography?.layout\" [config]=\"opportunitiesGeography?.config\" [useResizeHandler]=\"opportunitiesGeography ? true : false\">\n </plotly-plot>\n </ng-template>\n </div>\n <div *ngIf=\"!opportunitiesGeography\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </div>\n</ng-container>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}@media (min-width: 640px) and (max-width: 768px){.primeng-datatable-container tr td{width:350px}}.search-opportunities-search-input{background-color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i7.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "component", type: i8.PlotlyComponent, selector: "plotly-plot", inputs: ["data", "layout", "config", "frames", "style", "theme", "divId", "revision", "className", "debug", "useResizeHandler", "updateOnLayoutChange", "updateOnDataChange", "updateOnlyWithRevision"], outputs: ["initialized", "update", "purge", "error", "afterExport", "afterPlot", "animated", "animatingFrame", "animationInterrupted", "autoSize", "beforeExport", "beforeHover", "buttonClicked", "click", "plotlyClick", "clickAnnotation", "deselect", "doubleClick", "framework", "hover", "legendClick", "legendDoubleClick", "react", "relayout", "relayouting", "restyle", "redraw", "selected", "selecting", "sliderChange", "sliderEnd", "sliderStart", "sunburstclick", "transitioning", "transitionInterrupted", "unhover", "treemapclick", "webglcontextlost"] }, { kind: "directive", type: i9.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i10.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i11.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i12.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i13.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i13.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i13.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i14.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i3.PercentPipe, name: "percent" }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i15.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i15.TextTruncatePipe, name: "textTruncate" }, { kind: "pipe", type: i16.TranslocoPipe, name: "transloco" }] }); }
213
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartCrmOpportunitiesListComponent, selector: "pw-smart-crm-opportunities-list", usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\" data-cy=\"add-opportunities\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt [value]=\"data.crm_opportunities\" [paginator]=\"data.object_count !== 0\" [lazy]=\"true\" [rows]=\"PAGE_SIZE\"\n class=\"contact-table\" [totalRecords]=\"data.object_count\" [loading]=\"loading\" filterDelay=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\" [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row\">\n <div class=\"col-sm-3 col-6\">\n <p-multiSelect placeholder=\"Select Category\" [options]=\"categories\" [(ngModel)]=\"filterByCategories\"\n (onChange)=\"onSearchOptionChange($event, 'category')\" [filter]=\"true\" [showHeader]=\"true\" [showToggleAll]=\"true\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-3 col-6 mb-2 mb-sm-0\">\n <p-multiSelect placeholder=\"Select Stage\" [options]=\"searchStages\" [(ngModel)]=\"filterByStages\"\n (onChange)=\"onSearchOptionChange($event, 'stage')\" [filter]=\"true\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <!-- Empty column occupying the same space -->\n <div class=\"col-sm-3 col-6\"></div>\n <div class=\"col-sm-3 col-md-4 col-lg-3 d-flex justify-content-end\">\n <div class=\"d-flex w-100\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText placeholder=\"Search opportunities..\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" class=\"form-control search-opportunities-search-input\" />\n </div>\n </div>\n </div>\n <div class=\"search-filter\">\n <a class=\"mt-3 ms-3 text-start btn-filter-primary\" (click)=\"clearFilters()\">Clear all filters</a>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\" pSortableColumn=\"title\"> {{ 'Crm.OpportunitiesMessage.Title' | transloco }} <p-sortIcon\n field=\"title\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_contact_id\"> {{ 'Crm.OpportunitiesMessage.Contact' | transloco }}\n <p-sortIcon field=\"crm_contact_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_account_id\"> {{ 'Crm.OpportunitiesMessage.Account' | transloco }}\n <p-sortIcon field=\"crm_account_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"one_time_amount\"> {{ 'Crm.OpportunitiesMessage.OneTimeAmount' | transloco\n }} <p-sortIcon field=\"one_time_amount\"></p-sortIcon>\n </th>\n <th class=\"mrr-header\" scope=\"true\" pSortableColumn=\"monthly_amount\"> {{ 'Crm.OpportunitiesMessage.MRR' | transloco\n }} <p-sortIcon field=\"monthly_amount\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"win_chances\"> {{ 'Crm.OpportunitiesMessage.WinChance' | transloco }}\n <p-sortIcon field=\"win_chances\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_opportunity_category_ids\"> {{ 'Crm.OpportunitiesMessage.Categories' |\n transloco }} <p-sortIcon field=\"crm_opportunity_category_ids\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_opportunity_stage_id\"> {{ 'Crm.OpportunitiesMessage.Stage' | transloco\n }} <p-sortIcon field=\"crm_opportunity_stage_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"starting_at\"> {{ 'Crm.OpportunitiesMessage.StartingAt' | transloco }}\n <p-sortIcon field=\"starting_at\"></p-sortIcon>\n </th>\n <th class=\"actions-list-two\" scope=\"true\"> {{ 'Label.Actions' | transloco }} </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-opportunities>\n <tr>\n <td data-head=\"Title\">\n <a [ngbTooltip]=\"opportunities?.title\" *ngIf=\"\n hasAccess ||\n opportunities?.owner_id === userId ||\n checkPermission('Pages.Product.CRM.Role.Admin')\n \" [routerLink]=\"[\n '/' + subscription?.slug + routers.opportunityInfo,\n opportunities.id\n ]\">\n <span>{{ opportunities?.title | textTruncate: 15 }} </span>\n </a>\n <a *ngIf=\"\n !hasAccess &&\n opportunities?.owner_id !== userId &&\n checkPermission('Pages.Product.CRM.Role.Admin')\n \"> {{ opportunities?.title | textTruncate: 15 }} </a>\n </td>\n <td class=\"contactname\" data-head=\"Crm Contact\">\n <a *ngIf=\"opportunities?.crm_contact_id\" [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n opportunities.crm_contact_id.id\n ]\">{{ opportunities.crm_contact?.first_name + ' ' +\n opportunities.crm_contact?.last_name }}</a>\n </td>\n <td data-head=\"Account\">\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n opportunities.crm_account.id\n ]\">{{ opportunities.crm_account.name }}</a>\n </td>\n <td data-head=\"Amount\"> {{ opportunities.one_time_amount / 100 | currency: opportunities?.currency }} </td>\n <td data-head=\"MRR\" class=\"expected-mrr\"> {{ opportunities.monthly_amount / 100 | currency: opportunities?.currency }} </td>\n <td data-head=\"WinChance\">\n <span [ngClass]=\"{'text-danger': opportunities.win_chances < 30, 'text-success fw-bold': opportunities.win_chances >70}\">\n {{ opportunities.win_chances / 100 | percent }}\n </span>\n <span class=\"text-danger\"\n *ngIf=\"opportunities.cancelled\">!Cancelled!</span>\n </td>\n <td data-head=\"Categories\">\n <span *ngFor=\"let category of opportunities?.crm_opportunity_categories\" class=\"badge ms-1\"\n [appDynamicBadge]=\"{ itemsArray: categories, item: category?.name }\" color=\"blue-grey\">{{ category?.name\n }}</span>\n </td>\n <td data-head=\"Stage\">\n <span class=\"badge\" [appDynamicBadge]=\"{\n itemsArray: stages,\n item: opportunities?.crm_opportunity_stage?.name\n }\" color=\"cyan\">{{ opportunities?.crm_opportunity_stage?.name }}</span>\n </td>\n <td data-head=\"Starting At\" [ngClass]=\"{'text-danger': isPastDate(opportunities.starting_at)}\"> {{ opportunities.starting_at | dateFormat }} </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <ng-container *ngIf=\"hasAccess || opportunities?.owner_id === userId\">\n <ng-container *rbacAllow=\"'SubscriptionAdmin'\">\n <li ngbTooltip=\"Edit\" class=\"me-2 me-sm-3\" [routerLink]=\"[\n '/' + subscription?.slug + routers.opportunities,\n opportunities.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ng-container>\n <ng-container *rbacAllow=\"'SubscriptionAdmin'\">\n <li ngbTooltip=\"Delete\" class=\"me-2 me-sm-3\">\n <i class=\"fa fa-trash delete-icon\" (keydown.enter)=\"onDelete(opportunities.id)\"\n (keydown.space)=\"onDelete(opportunities.id)\"\n (click)=\"onDelete(opportunities.id)\" aria-hidden=\"true\"></i>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoOpportunitiesMessage' | transloco\">\n </pw-no-data>\n</div>\n<ng-container>\n <div class=\"row mt-5\" *ngIf=\"isLoaded\">\n <!-- Drill Down -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Watch Closely</h5>\n <div class=\"primeng-datatable-container table-responsive\" *ngIf=\"opportunitiesInsight?.length\">\n <p-table class=\"table\" #dt [value]=\"opportunitiesInsight\" [paginator]=\"opportunitiesInsight?.length !== 0\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"opportunitiesInsight.length\" [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Account' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Title' | transloco }}</th>\n <th scope=\"true\"> {{ 'Crm.OpportunitiesMessage.Reason' | transloco }} </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-insight>\n <tr>\n <td data-head=\"Account\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.accountInfo, insight.crm_account_id]\" class=\"name-link\">\n <span [ngbTooltip]=\"insight?.name\">{{ insight?.name | textTruncate:20 }}</span>\n </a>\n </td>\n <td data-head=\"Title\">\n <span\n [ngbTooltip]=\"insight?.title\"\n container=\"body\"\n tooltipClass=\"custom-tooltip\"\n placement=\"bottom\"\n >\n {{ insight?.title | textTruncate: 20 }}\n </span>\n </td>\n <td data-head=\"Reason\"> {{ insight.reason }} </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"opportunitiesInsight?.length !== 0\">{{ 'Label.Total' | transloco }}: {{ opportunitiesInsight.length }}</span>\n </div>\n <div *ngIf=\"opportunitiesInsight?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Geography -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Opportunities Location</h5>\n <div>\n <ng-template [ngIf]=\"opportunitiesGeography\">\n <plotly-plot [data]=\"opportunitiesGeography?.data\" [layout]=\"opportunitiesGeography?.layout\" [config]=\"opportunitiesGeography?.config\" [useResizeHandler]=\"opportunitiesGeography ? true : false\">\n </plotly-plot>\n </ng-template>\n </div>\n <div *ngIf=\"!opportunitiesGeography\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </div>\n</ng-container>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}@media (min-width: 640px) and (max-width: 768px){.primeng-datatable-container tr td{width:350px}}.search-opportunities-search-input{background-color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i7.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "component", type: i8.PlotlyComponent, selector: "plotly-plot", inputs: ["data", "layout", "config", "frames", "style", "theme", "divId", "revision", "className", "debug", "useResizeHandler", "updateOnLayoutChange", "updateOnDataChange", "updateOnlyWithRevision"], outputs: ["initialized", "update", "purge", "error", "afterExport", "afterPlot", "animated", "animatingFrame", "animationInterrupted", "autoSize", "beforeExport", "beforeHover", "buttonClicked", "click", "plotlyClick", "clickAnnotation", "deselect", "doubleClick", "framework", "hover", "legendClick", "legendDoubleClick", "react", "relayout", "relayouting", "restyle", "redraw", "selected", "selecting", "sliderChange", "sliderEnd", "sliderStart", "sunburstclick", "transitioning", "transitionInterrupted", "unhover", "treemapclick", "webglcontextlost"] }, { kind: "directive", type: i9.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i10.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i11.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i10.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i10.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i12.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i13.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i14.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i3.PercentPipe, name: "percent" }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i15.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i15.TextTruncatePipe, name: "textTruncate" }, { kind: "pipe", type: i16.TranslocoPipe, name: "transloco" }] }); }
214
214
  }
215
215
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmOpportunitiesListComponent, decorators: [{
216
216
  type: Component,
@@ -66,6 +66,9 @@ import * as i0 from "@angular/core";
66
66
  import * as i1 from "ngx-quill";
67
67
  PlotlyViaCDNModule.setPlotlyVersion('1.55.2');
68
68
  export class SmartCrmPrivateModule {
69
+ constructor() {
70
+ console.log('🚀 SMART CRM MODULE LOADED! - User is authenticated');
71
+ }
69
72
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmPrivateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
70
73
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmPrivateModule, declarations: [SmartCrmTabsComponent,
71
74
  SmartCrmCompaniesComponent,
@@ -349,5 +352,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
349
352
  SmartCrmOpportunityCategoriesDetailsComponent
350
353
  ]
351
354
  }]
352
- }] });
353
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLXByaXZhdGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zbWFydC1jcm0vc3JjL2xpYi9wcml2YXRlL3NtYXJ0LWNybS1wcml2YXRlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8s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Qjt3QkFDL0IscUNBQXFDO3dCQUNyQywrQkFBK0I7d0JBQy9CLG1CQUFtQjt3QkFDbkIsc0NBQXNDO3dCQUN0Qyx5Q0FBeUM7d0JBQ3pDLDZCQUE2Qjt3QkFDN0IsbUNBQW1DO3dCQUNuQyx1QkFBdUI7d0JBQ3ZCLDZCQUE2Qjt3QkFDN0IsOEJBQThCO3dCQUM5QixzQ0FBc0M7d0JBQ3RDLDZDQUE2QztxQkFDaEQ7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLHFCQUFxQjt3QkFDckIsMEJBQTBCO3dCQUMxQix3QkFBd0I7d0JBQ3hCLDhCQUE4Qjt3QkFDOUIsZ0NBQWdDO3dCQUNoQywrQkFBK0I7d0JBQy9CLCtCQUErQjt3QkFDL0Isd0JBQXdCO3dCQUN4QiwrQkFBK0I7d0JBQy9CLHFDQUFxQzt3QkFDckMsK0JBQStCO3dCQUMvQix5QkFBeUI7d0JBQ3pCLDRCQUE0Qjt3QkFDNUIsc0JBQXNCO3dCQUN0Qiw4QkFBOEI7d0JBQzlCLHFDQUFxQzt3QkFDckMsc0JBQXNCO3dCQUN0QiwrQkFBK0I7d0JBQy9CLHNDQUFzQzt3QkFDdEMsNEJBQTRCO3dCQUM1Qiw4QkFBOEI7d0JBQzlCLHNDQUFzQzt3QkFDdEMsNkJBQTZCO3dCQUM3Qix3QkFBd0I7d0JBQ3hCLGdDQUFnQzt3QkFDaEMsNEJBQTRCO3dCQUM1Qiw0QkFBNEI7d0JBQzVCLGtDQUFrQzt3QkFDbEMsOEJBQThCO3dCQUM5QiwrQkFBK0I7d0JBQy9CLHdCQUF3Qjt3QkFDeEIsa0NBQWtDO3dCQUNsQyxtQkFBbUI7d0JBQ25CLHNDQUFzQzt3QkFDdEMseUNBQXlDO3dCQUN6Qyw2QkFBNkI7d0JBQzdCLG1DQUFtQzt3QkFDbkMsdUJBQXVCO3dCQUN2Qiw2QkFBNkI7d0JBQzdCLDhCQUE4Qjt3QkFDOUIsc0NBQXNDO3dCQUN0Qyw2Q0FBNkM7cUJBQ2hEO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ3hHcEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyLW1hZ2ljL25neC1ncC1hdXRvY29tcGxldGUnO1xuXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1jb25maWctc2VydmljZSc7XG5pbXBvcnQgeyBDb3JlVHJhbnNsb2NvTW9kdWxlIH0gZnJvbSAnQHBvc2l3aXNlL2NvcmUtdHJhbnNsb2NvJztcbmltcG9ydCB7IERpcmVjdGl2ZXNNb2R1bGUgfSBmcm9tICdAcG9zaXdpc2UvZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBQaXBlc01vZHVsZSB9IGZyb20gJ0Bwb3Npd2lzZS9waXBlcyc7XG5pbXBvcnQgeyBTaGFyZWRDb21wb25lbnRzTW9kdWxlIH0gZnJvbSAnQHBvc2l3aXNlL3NoYXJlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHsgUGxvdGx5VmlhQ0ROTW9kdWxlIH0gZnJvbSAnYW5ndWxhci1wbG90bHkuanMnO1xuaW1wb3J0IHsgSW5maW5pdGVTY3JvbGxNb2R1bGUgfSBmcm9tICduZ3gtaW5maW5pdGUtc2Nyb2xsJztcbmltcG9ydCB7IE5neFBhZ2luYXRpb25Nb2R1bGUgfSBmcm9tICduZ3gtcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBRdWlsbE1vZHVsZSB9IGZyb20gJ25neC1xdWlsbCc7XG5pbXBvcnQgeyBVaVN3aXRjaE1vZHVsZSB9IGZyb20gJ25neC11aS1zd2l0Y2gnO1xuaW1wb3J0IHsgTmd4VXBsb2FkZXJNb2R1bGUgfSBmcm9tICduZ3gtdXBsb2FkZXInO1xuaW1wb3J0IHsgRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2Ryb3Bkb3duJztcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcblxuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnQGdvb2dsZW1hcHMvanMtYXBpLWxvYWRlcic7XG5pbXBvcnQgeyBUUkFOU0xPQ09fU0NPUEUgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nO1xuaW1wb3J0IHsgTmdiRGF0ZXBpY2tlck1vZHVsZSwgTmdiTmF2TW9kdWxlLCBOZ2JUb29sdGlwTW9kdWxlIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG5pbXBvcnQgeyBTbWFydENybUNvbXBhbnlEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1hY2NvdW50cy9zbWFydC1jcm0tYWNjb3VudC1kZXRhaWxzL3NtYXJ0LWNybS1hY2NvdW50LWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQ29tcGFueUZpbGVzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1hY2NvdW50cy9zbWFydC1jcm0tYWNjb3VudC1maWxlcy9zbWFydC1jcm0tYWNjb3VudC1maWxlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1Db21wYW55SW5mb0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnQtaW5mby9zbWFydC1jcm0tYWNjb3VudC1pbmZvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbXBhbnlBY2NvdW50SW52b2ljZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnQtaW52b2ljZXMvc21hcnQtY3JtLWFjY291bnQtaW52b2ljZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQ29tcGFuaWVzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1hY2NvdW50cy9zbWFydC1jcm0tYWNjb3VudHMuY29tcG9uZW50JztcbmltcG9ydCB7IENybUFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWFjdGlvbnMvc21hcnQtY3JtLWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQ29tcGV0aXRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbXBldGl0aW9uL3NtYXJ0LWNybS1jb21wZXRpdGlvbi9zbWFydC1jcm0tY29tcGV0aXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tYWN0aW9ucy9zbWFydC1jcm0tYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1TZXR0aW5nc0RldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLWFjdGlvbnMvc21hcnQtY3JtLWFjdGlvbnMtZGV0YWlscy9zbWFydC1jcm0tYWN0aW9ucy1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbmZpZ3VyYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtT3Bwb3J0dW5pdHlDYXRlZ29yaWVzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1jb25maWd1cmF0aW9uL3NtYXJ0LWNybS1vcHBvcnR1bml0eS1jYXRlZ29yaWVzL3NtYXJ0LWNybS1vcHBvcnR1bml0eS1jYXRlZ29yaWVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybU9wcG9ydHVuaXR5Q2F0ZWdvcmllc0RldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLW9wcG9ydHVuaXR5LWNhdGVnb3JpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXR5LWNhdGVnb3JpZXMtZGV0YWlscy9zbWFydC1jcm0tb3Bwb3J0dW5pdHktY2F0ZWdvcmllcy1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbXBhbnlTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXNvdXJjZS9zbWFydC1jcm0tc291cmNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybVNvdXJjZURldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXNvdXJjZS9zbWFydC1jcm0tc291cmNlLWRldGFpbHMvc21hcnQtY3JtLXNvdXJjZS1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybVN0YWdlRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tc3RhZ2VzL3NtYXJ0LWNybS1zdGFnZS1kZXRhaWxzL3NtYXJ0LWNybS1zdGFnZS1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybVN0YWdlc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tc3RhZ2VzL3NtYXJ0LWNybS1zdGFnZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtV2lkZ2V0c0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0td2lkZ2V0cy9zbWFydC1jcm0td2lkZ2V0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1XaWRnZXRzRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0td2lkZ2V0cy9zbWFydC1jcm0td2lkZ2V0cy1kZXRhaWxzL3NtYXJ0LWNybS13aWRnZXRzLWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQ29udGFjdERldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbnRhY3RzL3NtYXJ0LWNybS1jb250YWN0LWRldGFpbHMvc21hcnQtY3JtLWNvbnRhY3QtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1Db250YWN0SW5mb0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tY29udGFjdHMvc21hcnQtY3JtLWNvbnRhY3QtaW5mby9zbWFydC1jcm0tY29udGFjdC1pbmZvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbnRhY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbnRhY3RzL3NtYXJ0LWNybS1jb250YWN0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1DdXN0b21lclN1Y2Nlc3NDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWN1c3RvbWVyL3NtYXJ0LWNybS1jdXN0b21lci1zdWNjZXNzL3NtYXJ0LWNybS1jdXN0b21lci1zdWNjZXNzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUFjY291bnRJbnNpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1pbnNpZ2h0L3NtYXJ0LWNybS1hY2NvdW50LWluc2lnaHQvc21hcnQtY3JtLWFjY291bnQtaW5zaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1BbmFseXNpc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tYW5hbHlzaXMtaW5zaWdodC9zbWFydC1jcm0tYW5hbHlzaXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQ29udGFjdEluc2lnaHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWluc2lnaHQvc21hcnQtY3JtLWNvbnRhY3QtaW5zaWdodC9zbWFydC1jcm0tY29udGFjdC1pbnNpZ2h0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUluc2lnaHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWluc2lnaHQvc21hcnQtY3JtLWluc2lnaHQuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQ29tbXVuaWNhdGlvbnNJbnNpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1pbnNpZ2h0L3NtYXJ0LWNybS1tYXJrZXRpbmctaW5zaWdodC9zbWFydC1jcm0tbWFya2V0aW5nLWluc2lnaHQuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0luc2lnaHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWluc2lnaHQvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5zaWdodC9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1pbnNpZ2h0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUxlYWRzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1sZWFkcy9zbWFydC1jcm0tbGVhZHMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtTGVhZHNEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1sZWFkcy9zbWFydC1jcm0tbGVhZHMtZGV0YWlscy9zbWFydC1jcm0tbGVhZHMtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1NYXJrZXRpbmdWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1NYXJrZXRpbmdVc2Vyc0xpc3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLW1hcmtldGluZy9zbWFydC1jcm0tbWFya2V0aW5nLWxpc3Qvc21hcnQtY3JtLW1hcmtldGluZy1jb250YWN0cy9zbWFydC1jcm0tbWFya2V0aW5nLWNvbnRhY3RzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbW11bmljYXRpb25zRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tbWFya2V0aW5nL3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC9zbWFydC1jcm0tbWFya2V0aW5nLWRldGFpbHMvc21hcnQtY3JtLW1hcmtldGluZy1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbW11bmljYXRpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy1saXN0L3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1Db21tdW5pY2F0aW9uVmlld0RldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLW1hcmtldGluZy9zbWFydC1jcm0tbWFya2V0aW5nLWxpc3Qvc21hcnQtY3JtLW1hcmtldGluZy12aWV3LWRldGFpbHMvc21hcnQtY3JtLW1hcmtldGluZy12aWV3LWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtU29jaWFsTWVkaWFDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLW1lZGlhL3NtYXJ0LWNybS1zb2NpYWwtbWVkaWEvc21hcnQtY3JtLXNvY2lhbC1tZWRpYS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1Cb2FyZENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy9zbWFydC1jcm0tYm9hcmQvc21hcnQtY3JtLWJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybU9wcG9ydHVuaXRpZXNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0RldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtbGlzdC9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1kZXRhaWxzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0luZm9Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtbGlzdC9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1pbmZvL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWluZm8uY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0xpc3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtbGlzdC9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybVRhYnNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLXRhYnMvc21hcnQtY3JtLXRhYnMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtUHJpdmF0ZVJvdXRpbmdNb2R1bGUgfSBmcm9tICcuL3NtYXJ0LWNybS1wcml2YXRlLnJvdXRpbmcubW9kdWxlJztcblBsb3RseVZpYUNETk1vZHVsZS5zZXRQbG90bHlWZXJzaW9uKCcxLjU1LjInKTtcbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBOZ3hQYWdpbmF0aW9uTW9kdWxlLFxuICAgICAgICBQaXBlc01vZHVsZSxcbiAgICAgICAgSW5wdXRUZXh0TW9kdWxlLFxuICAgICAgICBOZ2JUb29sdGlwTW9kdWxlLFxuICAgICAgICBVaVN3aXRjaE1vZHVsZSxcbiAgICAgICAgRGlyZWN0aXZlc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgUGxvdGx5VmlhQ0ROTW9kdWxlLFxuICAgICAgICBOZ3hHcEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICAgICAgU21hcnRDcm1Qcml2YXRlUm91dGluZ01vZHVsZSxcbiAgICAgICAgU2hhcmVkQ29tcG9uZW50c01vZHVsZSxcbiAgICAgICAgQ29yZVRyYW5zbG9jb01vZHVsZSxcbiAgICAgICAgRHJhZ0Ryb3BNb2R1bGUsXG4gICAgICAgIC8vIFNoYXJlZE1vZHVsZSxcbiAgICAgICAgUXVpbGxNb2R1bGUuZm9yUm9vdCgpLFxuICAgICAgICBOZ3hVcGxvYWRlck1vZHVsZSxcbiAgICAgICAgSW5maW5pdGVTY3JvbGxNb2R1bGUsXG4gICAgICAgIERyb3Bkb3duTW9kdWxlLFxuICAgICAgICBOZ2JOYXZNb2R1bGUsXG4gICAgICAgIE5nYkRhdGVwaWNrZXJNb2R1bGVcbiAgICAgICAgLy8gTGF6eUxvYWRNb2R1bGVzXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVFJBTlNMT0NPX1NDT1BFLFxuICAgICAgICAgICAgdXNlVmFsdWU6IHtcbiAgICAgICAgICAgICAgICBzY29wZTogJ3NtYXJ0LWNybScsXG4gICAgICAgICAgICAgICAgYWxpYXM6ICdDcm0nXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IExvYWRlcixcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IChhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb2FkZXIoe1xuICAgICAgICAgICAgICAgICAgICBhcGlLZXk6IGFwcENvbmZpZ1NlcnZpY2UuZ2V0R29vZ2xlQXBpS2V5KCksXG4gICAgICAgICAgICAgICAgICAgIGxpYnJhcmllczogWydwbGFjZXMnXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlcHM6IFtBcHBDb25maWdTZXJ2aWNlXVxuICAgICAgICB9XG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgU21hcnRDcm1UYWJzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbXBhbmllc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db250YWN0Q29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbmZpZ3VyYXRpb25Db21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtU2V0dGluZ3NEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbnRhY3REZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbXBhbnlEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUluc2lnaHRDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29udGFjdEluZm9Db21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtTGVhZHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1PcHBvcnR1bml0aWVzRGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Cb2FyZENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21tdW5pY2F0aW9uc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21tdW5pY2F0aW9uc0luc2lnaHRDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQW5hbHlzaXNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tcGFueUluZm9Db21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tcGFueVNvdXJjZUNvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21wYW55RmlsZXNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tcGFueUFjY291bnRJbnZvaWNlQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybVdpZGdldHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ3VzdG9tZXJTdWNjZXNzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybVNvY2lhbE1lZGlhQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbXBldGl0aW9uQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybU9wcG9ydHVuaXRpZXNJbmZvQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybVNvdXJjZURldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtV2lkZ2V0c0RldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQWN0aW9uc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1PcHBvcnR1bml0aWVzTGlzdENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db250YWN0SW5zaWdodENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1PcHBvcnR1bml0aWVzSW5zaWdodENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1BY2NvdW50SW5zaWdodENvbXBvbmVudCxcbiAgICAgICAgQ3JtQWN0aW9uc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21tdW5pY2F0aW9uc0RldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tbXVuaWNhdGlvblZpZXdEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUxlYWRzRGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1NYXJrZXRpbmdVc2Vyc0xpc3RDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtU3RhZ2VzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybVN0YWdlRGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1NYXJrZXRpbmdWaWV3Q29tcG9uZW50LFxuICAgICAgICBTbWFydENybU9wcG9ydHVuaXR5Q2F0ZWdvcmllc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1PcHBvcnR1bml0eUNhdGVnb3JpZXNEZXRhaWxzQ29tcG9uZW50XG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIFNtYXJ0Q3JtVGFic0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21wYW5pZXNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29udGFjdENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db25maWd1cmF0aW9uQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybVNldHRpbmdzRGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db250YWN0RGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21wYW55RGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1JbnNpZ2h0Q29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbnRhY3RJbnNpZ2h0Q29tcG9uZW50LFxuICAgICAgICBTbWFydENybU9wcG9ydHVuaXRpZXNJbnNpZ2h0Q29tcG9uZW50LFxuICAgICAgICBTbWFydENybUFjY291bnRJbnNpZ2h0Q29tcG9uZW50LFxuICAgICAgICBTbWFydENybUFuYWx5c2lzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbnRhY3RJbmZvQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUxlYWRzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybU9wcG9ydHVuaXRpZXNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0RldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQm9hcmRDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tbXVuaWNhdGlvbnNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tbXVuaWNhdGlvbnNJbnNpZ2h0Q29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbXBhbnlJbmZvQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbXBhbnlTb3VyY2VDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tcGFueUFjY291bnRJbnZvaWNlQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbXBhbnlGaWxlc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1XaWRnZXRzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUN1c3RvbWVyU3VjY2Vzc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Tb2NpYWxNZWRpYUNvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21wZXRpdGlvbkNvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1PcHBvcnR1bml0aWVzSW5mb0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Tb3VyY2VEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybVdpZGdldHNEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUFjdGlvbnNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0xpc3RDb21wb25lbnQsXG4gICAgICAgIENybUFjdGlvbnNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tbXVuaWNhdGlvbnNEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbW11bmljYXRpb25WaWV3RGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1MZWFkc0RldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtTWFya2V0aW5nVXNlcnNMaXN0Q29tcG9uZW50LFxuICAgICAgICBTbWFydENybVN0YWdlc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1TdGFnZURldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtTWFya2V0aW5nVmlld0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1PcHBvcnR1bml0eUNhdGVnb3JpZXNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtT3Bwb3J0dW5pdHlDYXRlZ29yaWVzRGV0YWlsc0NvbXBvbmVudFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRDcm1Qcml2YXRlTW9kdWxlIHt9XG4iXX0=
355
+ }], ctorParameters: () => [] });
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLXByaXZhdGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zbWFydC1jcm0vc3JjL2xpYi9wcml2YXRlL3NtYXJ0LWNybS1wcml2YXRlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8s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bSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmd4R3BBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci1tYWdpYy9uZ3gtZ3AtYXV0b2NvbXBsZXRlJztcblxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtY29uZmlnLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ29yZVRyYW5zbG9jb01vZHVsZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb3JlLXRyYW5zbG9jbyc7XG5pbXBvcnQgeyBEaXJlY3RpdmVzTW9kdWxlIH0gZnJvbSAnQHBvc2l3aXNlL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgUGlwZXNNb2R1bGUgfSBmcm9tICdAcG9zaXdpc2UvcGlwZXMnO1xuaW1wb3J0IHsgU2hhcmVkQ29tcG9uZW50c01vZHVsZSB9IGZyb20gJ0Bwb3Npd2lzZS9zaGFyZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7IFBsb3RseVZpYUNETk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItcGxvdGx5LmpzJztcbmltcG9ydCB7IEluZmluaXRlU2Nyb2xsTW9kdWxlIH0gZnJvbSAnbmd4LWluZmluaXRlLXNjcm9sbCc7XG5pbXBvcnQgeyBOZ3hQYWdpbmF0aW9uTW9kdWxlIH0gZnJvbSAnbmd4LXBhZ2luYXRpb24nO1xuaW1wb3J0IHsgUXVpbGxNb2R1bGUgfSBmcm9tICduZ3gtcXVpbGwnO1xuaW1wb3J0IHsgVWlTd2l0Y2hNb2R1bGUgfSBmcm9tICduZ3gtdWktc3dpdGNoJztcbmltcG9ydCB7IE5neFVwbG9hZGVyTW9kdWxlIH0gZnJvbSAnbmd4LXVwbG9hZGVyJztcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XG5pbXBvcnQgeyBJbnB1dFRleHRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XG5cbmltcG9ydCB7IExvYWRlciB9IGZyb20gJ0Bnb29nbGVtYXBzL2pzLWFwaS1sb2FkZXInO1xuaW1wb3J0IHsgVFJBTlNMT0NPX1NDT1BFIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcbmltcG9ydCB7IE5nYkRhdGVwaWNrZXJNb2R1bGUsIE5nYk5hdk1vZHVsZSwgTmdiVG9vbHRpcE1vZHVsZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuaW1wb3J0IHsgU21hcnRDcm1Db21wYW55RGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnQtZGV0YWlscy9zbWFydC1jcm0tYWNjb3VudC1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbXBhbnlGaWxlc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnQtZmlsZXMvc21hcnQtY3JtLWFjY291bnQtZmlsZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQ29tcGFueUluZm9Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWFjY291bnRzL3NtYXJ0LWNybS1hY2NvdW50LWluZm8vc21hcnQtY3JtLWFjY291bnQtaW5mby5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1Db21wYW55QWNjb3VudEludm9pY2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWFjY291bnRzL3NtYXJ0LWNybS1hY2NvdW50LWludm9pY2VzL3NtYXJ0LWNybS1hY2NvdW50LWludm9pY2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbXBhbmllc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnRzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcm1BY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1hY3Rpb25zL3NtYXJ0LWNybS1hY3Rpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbXBldGl0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1jb21wZXRpdGlvbi9zbWFydC1jcm0tY29tcGV0aXRpb24vc21hcnQtY3JtLWNvbXBldGl0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLWFjdGlvbnMvc21hcnQtY3JtLWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtU2V0dGluZ3NEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1jb25maWd1cmF0aW9uL3NtYXJ0LWNybS1hY3Rpb25zL3NtYXJ0LWNybS1hY3Rpb25zLWRldGFpbHMvc21hcnQtY3JtLWFjdGlvbnMtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1Db25maWd1cmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1jb25maWd1cmF0aW9uL3NtYXJ0LWNybS1jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybU9wcG9ydHVuaXR5Q2F0ZWdvcmllc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tb3Bwb3J0dW5pdHktY2F0ZWdvcmllcy9zbWFydC1jcm0tb3Bwb3J0dW5pdHktY2F0ZWdvcmllcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1PcHBvcnR1bml0eUNhdGVnb3JpZXNEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1jb25maWd1cmF0aW9uL3NtYXJ0LWNybS1vcHBvcnR1bml0eS1jYXRlZ29yaWVzL3NtYXJ0LWNybS1vcHBvcnR1bml0eS1jYXRlZ29yaWVzLWRldGFpbHMvc21hcnQtY3JtLW9wcG9ydHVuaXR5LWNhdGVnb3JpZXMtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1Db21wYW55U291cmNlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1jb25maWd1cmF0aW9uL3NtYXJ0LWNybS1zb3VyY2Uvc21hcnQtY3JtLXNvdXJjZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1Tb3VyY2VEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1jb25maWd1cmF0aW9uL3NtYXJ0LWNybS1zb3VyY2Uvc21hcnQtY3JtLXNvdXJjZS1kZXRhaWxzL3NtYXJ0LWNybS1zb3VyY2UtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1TdGFnZURldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXN0YWdlcy9zbWFydC1jcm0tc3RhZ2UtZGV0YWlscy9zbWFydC1jcm0tc3RhZ2UtZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1TdGFnZXNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXN0YWdlcy9zbWFydC1jcm0tc3RhZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybVdpZGdldHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXdpZGdldHMvc21hcnQtY3JtLXdpZGdldHMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtV2lkZ2V0c0RldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXdpZGdldHMvc21hcnQtY3JtLXdpZGdldHMtZGV0YWlscy9zbWFydC1jcm0td2lkZ2V0cy1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbnRhY3REZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1jb250YWN0cy9zbWFydC1jcm0tY29udGFjdC1kZXRhaWxzL3NtYXJ0LWNybS1jb250YWN0LWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQ29udGFjdEluZm9Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbnRhY3RzL3NtYXJ0LWNybS1jb250YWN0LWluZm8vc21hcnQtY3JtLWNvbnRhY3QtaW5mby5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1Db250YWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1jb250YWN0cy9zbWFydC1jcm0tY29udGFjdHMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQ3VzdG9tZXJTdWNjZXNzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1jdXN0b21lci9zbWFydC1jcm0tY3VzdG9tZXItc3VjY2Vzcy9zbWFydC1jcm0tY3VzdG9tZXItc3VjY2Vzcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1BY2NvdW50SW5zaWdodENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tYWNjb3VudC1pbnNpZ2h0L3NtYXJ0LWNybS1hY2NvdW50LWluc2lnaHQuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQW5hbHlzaXNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLWluc2lnaHQvc21hcnQtY3JtLWFuYWx5c2lzLWluc2lnaHQvc21hcnQtY3JtLWFuYWx5c2lzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbnRhY3RJbnNpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1pbnNpZ2h0L3NtYXJ0LWNybS1jb250YWN0LWluc2lnaHQvc21hcnQtY3JtLWNvbnRhY3QtaW5zaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1JbnNpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1pbnNpZ2h0L3NtYXJ0LWNybS1pbnNpZ2h0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUNvbW11bmljYXRpb25zSW5zaWdodENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tbWFya2V0aW5nLWluc2lnaHQvc21hcnQtY3JtLW1hcmtldGluZy1pbnNpZ2h0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybU9wcG9ydHVuaXRpZXNJbnNpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1pbnNpZ2h0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWluc2lnaHQvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5zaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1MZWFkc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tbGVhZHMvc21hcnQtY3JtLWxlYWRzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybUxlYWRzRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tbGVhZHMvc21hcnQtY3JtLWxlYWRzLWRldGFpbHMvc21hcnQtY3JtLWxlYWRzLWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtTWFya2V0aW5nVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tbWFya2V0aW5nL3NtYXJ0LWNybS1tYXJrZXRpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtTWFya2V0aW5nVXNlcnNMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy1saXN0L3NtYXJ0LWNybS1tYXJrZXRpbmctY29udGFjdHMvc21hcnQtY3JtLW1hcmtldGluZy1jb250YWN0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1Db21tdW5pY2F0aW9uc0RldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLW1hcmtldGluZy9zbWFydC1jcm0tbWFya2V0aW5nLWxpc3Qvc21hcnQtY3JtLW1hcmtldGluZy1kZXRhaWxzL3NtYXJ0LWNybS1tYXJrZXRpbmctZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1Db21tdW5pY2F0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1jcm0tbWFya2V0aW5nL3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC9zbWFydC1jcm0tbWFya2V0aW5nLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQ29tbXVuaWNhdGlvblZpZXdEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy1saXN0L3NtYXJ0LWNybS1tYXJrZXRpbmctdmlldy1kZXRhaWxzL3NtYXJ0LWNybS1tYXJrZXRpbmctdmlldy1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybVNvY2lhbE1lZGlhQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1tZWRpYS9zbWFydC1jcm0tc29jaWFsLW1lZGlhL3NtYXJ0LWNybS1zb2NpYWwtbWVkaWEuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0Q3JtQm9hcmRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLWJvYXJkL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1PcHBvcnR1bml0aWVzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybU9wcG9ydHVuaXRpZXNEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWxpc3Qvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtZGV0YWlscy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybU9wcG9ydHVuaXRpZXNJbmZvQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWxpc3Qvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mby9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1pbmZvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybU9wcG9ydHVuaXRpZXNMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWxpc3Qvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRDcm1UYWJzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NtYXJ0LWNybS10YWJzL3NtYXJ0LWNybS10YWJzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydENybVByaXZhdGVSb3V0aW5nTW9kdWxlIH0gZnJvbSAnLi9zbWFydC1jcm0tcHJpdmF0ZS5yb3V0aW5nLm1vZHVsZSc7XG5QbG90bHlWaWFDRE5Nb2R1bGUuc2V0UGxvdGx5VmVyc2lvbignMS41NS4yJyk7XG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTmd4UGFnaW5hdGlvbk1vZHVsZSxcbiAgICAgICAgUGlwZXNNb2R1bGUsXG4gICAgICAgIElucHV0VGV4dE1vZHVsZSxcbiAgICAgICAgTmdiVG9vbHRpcE1vZHVsZSxcbiAgICAgICAgVWlTd2l0Y2hNb2R1bGUsXG4gICAgICAgIERpcmVjdGl2ZXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFBsb3RseVZpYUNETk1vZHVsZSxcbiAgICAgICAgTmd4R3BBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgICAgIFNtYXJ0Q3JtUHJpdmF0ZVJvdXRpbmdNb2R1bGUsXG4gICAgICAgIFNoYXJlZENvbXBvbmVudHNNb2R1bGUsXG4gICAgICAgIENvcmVUcmFuc2xvY29Nb2R1bGUsXG4gICAgICAgIERyYWdEcm9wTW9kdWxlLFxuICAgICAgICAvLyBTaGFyZWRNb2R1bGUsXG4gICAgICAgIFF1aWxsTW9kdWxlLmZvclJvb3QoKSxcbiAgICAgICAgTmd4VXBsb2FkZXJNb2R1bGUsXG4gICAgICAgIEluZmluaXRlU2Nyb2xsTW9kdWxlLFxuICAgICAgICBEcm9wZG93bk1vZHVsZSxcbiAgICAgICAgTmdiTmF2TW9kdWxlLFxuICAgICAgICBOZ2JEYXRlcGlja2VyTW9kdWxlXG4gICAgICAgIC8vIExhenlMb2FkTW9kdWxlc1xuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRSQU5TTE9DT19TQ09QRSxcbiAgICAgICAgICAgIHVzZVZhbHVlOiB7XG4gICAgICAgICAgICAgICAgc2NvcGU6ICdzbWFydC1jcm0nLFxuICAgICAgICAgICAgICAgIGFsaWFzOiAnQ3JtJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBMb2FkZXIsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9hZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgYXBpS2V5OiBhcHBDb25maWdTZXJ2aWNlLmdldEdvb2dsZUFwaUtleSgpLFxuICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM6IFsncGxhY2VzJ11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXBzOiBbQXBwQ29uZmlnU2VydmljZV1cbiAgICAgICAgfVxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIFNtYXJ0Q3JtVGFic0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21wYW5pZXNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29udGFjdENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db25maWd1cmF0aW9uQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybVNldHRpbmdzRGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db250YWN0RGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21wYW55RGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1JbnNpZ2h0Q29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbnRhY3RJbmZvQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUxlYWRzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybU9wcG9ydHVuaXRpZXNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0RldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQm9hcmRDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tbXVuaWNhdGlvbnNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tbXVuaWNhdGlvbnNJbnNpZ2h0Q29tcG9uZW50LFxuICAgICAgICBTbWFydENybUFuYWx5c2lzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbXBhbnlJbmZvQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbXBhbnlTb3VyY2VDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tcGFueUZpbGVzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbXBhbnlBY2NvdW50SW52b2ljZUNvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1XaWRnZXRzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUN1c3RvbWVyU3VjY2Vzc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Tb2NpYWxNZWRpYUNvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21wZXRpdGlvbkNvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1PcHBvcnR1bml0aWVzSW5mb0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Tb3VyY2VEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybVdpZGdldHNEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUFjdGlvbnNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0xpc3RDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29udGFjdEluc2lnaHRDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0luc2lnaHRDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQWNjb3VudEluc2lnaHRDb21wb25lbnQsXG4gICAgICAgIENybUFjdGlvbnNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tbXVuaWNhdGlvbnNEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbW11bmljYXRpb25WaWV3RGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1MZWFkc0RldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtTWFya2V0aW5nVXNlcnNMaXN0Q29tcG9uZW50LFxuICAgICAgICBTbWFydENybVN0YWdlc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1TdGFnZURldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtTWFya2V0aW5nVmlld0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1PcHBvcnR1bml0eUNhdGVnb3JpZXNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtT3Bwb3J0dW5pdHlDYXRlZ29yaWVzRGV0YWlsc0NvbXBvbmVudFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBTbWFydENybVRhYnNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tcGFuaWVzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbnRhY3RDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29uZmlndXJhdGlvbkNvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1TZXR0aW5nc0RldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29udGFjdERldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tcGFueURldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtSW5zaWdodENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db250YWN0SW5zaWdodENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1PcHBvcnR1bml0aWVzSW5zaWdodENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1BY2NvdW50SW5zaWdodENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1BbmFseXNpc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db250YWN0SW5mb0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1MZWFkc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1PcHBvcnR1bml0aWVzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybU9wcG9ydHVuaXRpZXNEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUJvYXJkQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbW11bmljYXRpb25zQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbW11bmljYXRpb25zSW5zaWdodENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21wYW55SW5mb0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21wYW55U291cmNlQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbXBhbnlBY2NvdW50SW52b2ljZUNvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21wYW55RmlsZXNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtV2lkZ2V0c0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1DdXN0b21lclN1Y2Nlc3NDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtU29jaWFsTWVkaWFDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtQ29tcGV0aXRpb25Db21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0luZm9Db21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtU291cmNlRGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1XaWRnZXRzRGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1BY3Rpb25zQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybU9wcG9ydHVuaXRpZXNMaXN0Q29tcG9uZW50LFxuICAgICAgICBDcm1BY3Rpb25zQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybUNvbW11bmljYXRpb25zRGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1Db21tdW5pY2F0aW9uVmlld0RldGFpbHNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtTGVhZHNEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybU1hcmtldGluZ1VzZXJzTGlzdENvbXBvbmVudCxcbiAgICAgICAgU21hcnRDcm1TdGFnZXNDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtU3RhZ2VEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybU1hcmtldGluZ1ZpZXdDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0Q3JtT3Bwb3J0dW5pdHlDYXRlZ29yaWVzQ29tcG9uZW50LFxuICAgICAgICBTbWFydENybU9wcG9ydHVuaXR5Q2F0ZWdvcmllc0RldGFpbHNDb21wb25lbnRcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Q3JtUHJpdmF0ZU1vZHVsZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfwn5qAIFNNQVJUIENSTSBNT0RVTEUgTE9BREVEISAtIFVzZXIgaXMgYXV0aGVudGljYXRlZCcpO1xuICAgIH1cbn1cbiJdfQ==