tudu-components 0.2.24 → 0.2.25

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.
@@ -13,6 +13,7 @@ export class CustomModalComponent {
13
13
  this.errorDetails = null;
14
14
  this.modalClosed = new EventEmitter();
15
15
  this.modalAction = new EventEmitter();
16
+ this.closeAction = new EventEmitter();
16
17
  this.showModal = false;
17
18
  this.messageTitle = 'Pagamento Aprovado!';
18
19
  this.showBtn = true;
@@ -40,39 +41,41 @@ export class CustomModalComponent {
40
41
  this.paymentMethod = paymentMethod;
41
42
  this.openModal();
42
43
  }
43
- configureModal(type, message = '') {
44
+ configureModal(type, message = '', title) {
45
+ if (this.isLoadingBtn !== undefined) {
46
+ this.isLoadingBtn = false;
47
+ }
44
48
  switch (type) {
45
49
  case 'success':
46
- this.setSuccessStyles(message);
50
+ this.setSuccessStyles(message, title);
47
51
  break;
48
52
  case 'error':
49
- this.setErrorStyles(message);
53
+ this.setErrorStyles(message, title);
50
54
  break;
51
55
  case 'warning':
52
- this.setWarningStyles(message);
56
+ this.setWarningStyles(message, title);
53
57
  break;
54
58
  }
55
59
  }
56
- setSuccessStyles(message) {
60
+ setSuccessStyles(message, title) {
57
61
  this.modalIcon = 'fa-check-circle';
58
62
  this.modalIconColor = 'modal-icon-success';
59
63
  this.modalBgColor = 'modal-bg-success';
60
- this.messageTitle = 'Sucesso!';
64
+ this.messageTitle = title || 'Sucesso!';
61
65
  this.messageBody = message || 'Operação realizada com sucesso.';
62
66
  }
63
- setErrorStyles(message) {
67
+ setErrorStyles(message, title) {
64
68
  this.modalIcon = 'fa-times-circle';
65
69
  this.modalIconColor = 'modal-icon-error';
66
70
  this.modalBgColor = 'modal-bg-error';
67
- this.messageTitle = 'Ops! Algo deu errado';
71
+ this.messageTitle = title || 'Ops! Algo deu errado';
68
72
  this.messageBody = message || 'Não conseguimos processar sua solicitação.';
69
73
  }
70
- setWarningStyles(message) {
74
+ setWarningStyles(message, title) {
71
75
  this.modalIcon = 'fa-info-circle';
72
- // Usando classes nativas do Tailwind
73
- this.modalIconColor = 'text-blue-600'; // Azul vibrante, mais amigável que o 800
76
+ this.modalIconColor = 'text-blue-600';
74
77
  this.modalBgColor = 'bg-blue-50';
75
- this.messageTitle = 'Atenção';
78
+ this.messageTitle = title || 'Atenção';
76
79
  this.messageBody = message || 'Verifique os dados antes de continuar.';
77
80
  }
78
81
  actionModal() {
@@ -82,14 +85,16 @@ export class CustomModalComponent {
82
85
  }
83
86
  else {
84
87
  this.modalAction.emit();
85
- this.isLoadingBtn = false;
86
88
  this.closeModal();
87
89
  }
88
90
  }
89
- closeModal() {
91
+ closeModal(fromButton = false) {
90
92
  if (!this.showModal || this.isClosing)
91
93
  return;
92
94
  this.isClosing = true;
95
+ if (fromButton) {
96
+ this.closeAction.emit();
97
+ }
93
98
  setTimeout(() => {
94
99
  this.showModal = false;
95
100
  this.isClosing = false;
@@ -111,10 +116,10 @@ export class CustomModalComponent {
111
116
  }
112
117
  }
113
118
  CustomModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, deps: [{ token: i1.Location }], target: i0.ɵɵFactoryTarget.Component });
114
- CustomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomModalComponent, selector: "lib-custom-modal", inputs: { modalId: "modalId", title: "title", message: "message", closeButtonText: "closeButtonText", actionButtonText: "actionButtonText", paymentMethod: "paymentMethod", errorDetails: "errorDetails", showModal: "showModal", messageTitle: "messageTitle", showBtn: "showBtn", priceNegotiated: "priceNegotiated", messageBody: "messageBody", isLoadingBtn: "isLoadingBtn", disabledBtn: "disabledBtn", isLocked: "isLocked" }, outputs: { modalClosed: "modalClosed", modalAction: "modalAction" }, host: { listeners: { "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-surface w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-border-light flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30\">\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal()\"\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-overlay-fixed{position:fixed;inset:0;background-color:#0009!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;display:flex;align-items:flex-end;justify-content:center;z-index:9999;transition:opacity .3s ease;opacity:1}.overlay-hide{opacity:0;pointer-events:none}.modal-scroll-area{max-height:60vh;overflow-y:auto;overflow-x:hidden;transition:max-height .4s cubic-bezier(.25,1,.5,1)}.modal-scroll-area:has(.animate-fade-in),.modal-scroll-area:focus-within{max-height:85vh}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background:#f1f1f1;border-radius:10px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.btn-primary-custom:hover:not(:disabled){filter:brightness(.9);transition:filter .2s ease}.btn-primary-custom:disabled{opacity:.6;cursor:not-allowed}.modal-bg-success{background-color:#d1fae5!important}.modal-icon-success{color:#10b981!important}.modal-bg-error{background-color:#fee2e2!important}.modal-icon-error{color:#ef4444!important}.modal-bg-warning{background-color:#fef3c7!important}.modal-icon-warning{color:#f59e0b!important}@media (min-width: 768px){.modal-overlay-fixed{align-items:center}.animate-slide-up,.animate-slide-down{border-radius:2.5rem;width:90%;margin-bottom:0}@keyframes slideUp{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}@keyframes slideDown{0%{transform:scale(1);opacity:1}to{transform:scale(.9);opacity:0}}}:host-context(body:has(.modal-overlay-fixed)){overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }] });
119
+ CustomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomModalComponent, selector: "lib-custom-modal", inputs: { modalId: "modalId", title: "title", message: "message", closeButtonText: "closeButtonText", actionButtonText: "actionButtonText", paymentMethod: "paymentMethod", errorDetails: "errorDetails", showModal: "showModal", messageTitle: "messageTitle", showBtn: "showBtn", priceNegotiated: "priceNegotiated", messageBody: "messageBody", isLoadingBtn: "isLoadingBtn", disabledBtn: "disabledBtn", isLocked: "isLocked" }, outputs: { modalClosed: "modalClosed", modalAction: "modalAction", closeAction: "closeAction" }, host: { listeners: { "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-surface w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-border-light flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30\">\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal(true)\"\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-overlay-fixed{position:fixed;inset:0;background-color:#0009!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;display:flex;align-items:flex-end;justify-content:center;z-index:9999;transition:opacity .3s ease;opacity:1}.overlay-hide{opacity:0;pointer-events:none}.modal-scroll-area{max-height:60vh;overflow-y:auto;overflow-x:hidden;transition:max-height .4s cubic-bezier(.25,1,.5,1)}.modal-scroll-area:has(.animate-fade-in),.modal-scroll-area:focus-within{max-height:85vh}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background:#f1f1f1;border-radius:10px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.btn-primary-custom:hover:not(:disabled){filter:brightness(.9);transition:filter .2s ease}.btn-primary-custom:disabled{opacity:.6;cursor:not-allowed}.modal-bg-success{background-color:#d1fae5!important}.modal-icon-success{color:#10b981!important}.modal-bg-error{background-color:#fee2e2!important}.modal-icon-error{color:#ef4444!important}.modal-bg-warning{background-color:#fef3c7!important}.modal-icon-warning{color:#f59e0b!important}@media (min-width: 768px){.modal-overlay-fixed{align-items:center}.animate-slide-up,.animate-slide-down{border-radius:2.5rem;width:90%;margin-bottom:0}@keyframes slideUp{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}@keyframes slideDown{0%{transform:scale(1);opacity:1}to{transform:scale(.9);opacity:0}}}:host-context(body:has(.modal-overlay-fixed)){overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }] });
115
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, decorators: [{
116
121
  type: Component,
117
- args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-surface w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-border-light flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30\">\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal()\"\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-overlay-fixed{position:fixed;inset:0;background-color:#0009!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;display:flex;align-items:flex-end;justify-content:center;z-index:9999;transition:opacity .3s ease;opacity:1}.overlay-hide{opacity:0;pointer-events:none}.modal-scroll-area{max-height:60vh;overflow-y:auto;overflow-x:hidden;transition:max-height .4s cubic-bezier(.25,1,.5,1)}.modal-scroll-area:has(.animate-fade-in),.modal-scroll-area:focus-within{max-height:85vh}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background:#f1f1f1;border-radius:10px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.btn-primary-custom:hover:not(:disabled){filter:brightness(.9);transition:filter .2s ease}.btn-primary-custom:disabled{opacity:.6;cursor:not-allowed}.modal-bg-success{background-color:#d1fae5!important}.modal-icon-success{color:#10b981!important}.modal-bg-error{background-color:#fee2e2!important}.modal-icon-error{color:#ef4444!important}.modal-bg-warning{background-color:#fef3c7!important}.modal-icon-warning{color:#f59e0b!important}@media (min-width: 768px){.modal-overlay-fixed{align-items:center}.animate-slide-up,.animate-slide-down{border-radius:2.5rem;width:90%;margin-bottom:0}@keyframes slideUp{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}@keyframes slideDown{0%{transform:scale(1);opacity:1}to{transform:scale(.9);opacity:0}}}:host-context(body:has(.modal-overlay-fixed)){overflow:hidden}\n"] }]
122
+ args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-surface w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-border-light flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30\">\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal(true)\"\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-overlay-fixed{position:fixed;inset:0;background-color:#0009!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;display:flex;align-items:flex-end;justify-content:center;z-index:9999;transition:opacity .3s ease;opacity:1}.overlay-hide{opacity:0;pointer-events:none}.modal-scroll-area{max-height:60vh;overflow-y:auto;overflow-x:hidden;transition:max-height .4s cubic-bezier(.25,1,.5,1)}.modal-scroll-area:has(.animate-fade-in),.modal-scroll-area:focus-within{max-height:85vh}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background:#f1f1f1;border-radius:10px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.btn-primary-custom:hover:not(:disabled){filter:brightness(.9);transition:filter .2s ease}.btn-primary-custom:disabled{opacity:.6;cursor:not-allowed}.modal-bg-success{background-color:#d1fae5!important}.modal-icon-success{color:#10b981!important}.modal-bg-error{background-color:#fee2e2!important}.modal-icon-error{color:#ef4444!important}.modal-bg-warning{background-color:#fef3c7!important}.modal-icon-warning{color:#f59e0b!important}@media (min-width: 768px){.modal-overlay-fixed{align-items:center}.animate-slide-up,.animate-slide-down{border-radius:2.5rem;width:90%;margin-bottom:0}@keyframes slideUp{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}@keyframes slideDown{0%{transform:scale(1);opacity:1}to{transform:scale(.9);opacity:0}}}:host-context(body:has(.modal-overlay-fixed)){overflow:hidden}\n"] }]
118
123
  }], ctorParameters: function () { return [{ type: i1.Location }]; }, propDecorators: { modalId: [{
119
124
  type: Input
120
125
  }], title: [{
@@ -133,6 +138,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
133
138
  type: Output
134
139
  }], modalAction: [{
135
140
  type: Output
141
+ }], closeAction: [{
142
+ type: Output
136
143
  }], showModal: [{
137
144
  type: Input
138
145
  }], messageTitle: [{
@@ -153,4 +160,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
153
160
  type: HostListener,
154
161
  args: ['window:popstate']
155
162
  }] } });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLW1vZGFsL2N1c3RvbS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1tb2RhbC9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7OztBQVd2QixNQUFNLE9BQU8sb0JBQW9CO0lBNEIvQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBM0I3QixZQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3hCLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLG9CQUFlLEdBQUcsUUFBUSxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUE0QixJQUFJLENBQUM7UUFDOUMsaUJBQVksR0FBUSxJQUFJLENBQUM7UUFFeEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV4QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGlCQUFZLEdBQVcscUJBQXFCLENBQUM7UUFDN0MsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGdCQUFXLEdBQVcsMkNBQTJDLENBQUM7UUFFbEUsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFdEMsbURBQW1EO1FBQzFD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Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQTZGTixVQUFVO3NCQURULFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxudHlwZSBNb2RhbFR5cGUgPSAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ3dhcm5pbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY3VzdG9tLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tbW9kYWwuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIG1vZGFsSWQgPSAnY3VzdG9tTW9kYWwnO1xuICBASW5wdXQoKSB0aXRsZSA9ICdBdmlzbyc7XG4gIEBJbnB1dCgpIG1lc3NhZ2UgPSAnJztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25UZXh0ID0gJ0ZlY2hhcic7XG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvblRleHQgPSAnJztcbiAgQElucHV0KCkgcGF5bWVudE1ldGhvZDogJ3BpeCcgfCAnY3JlZGl0JyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBlcnJvckRldGFpbHM6IGFueSA9IG51bGw7XG5cbiAgQE91dHB1dCgpIG1vZGFsQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbW9kYWxBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQElucHV0KCkgc2hvd01vZGFsID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUaXRsZTogc3RyaW5nID0gJ1BhZ2FtZW50byBBcHJvdmFkbyEnO1xuICBASW5wdXQoKSBzaG93QnRuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHJpY2VOZWdvdGlhdGVkID0gMDtcbiAgQElucHV0KCkgbWVzc2FnZUJvZHk6IHN0cmluZyA9ICdTZXUgcGFnYW1lbnRvIGZvaSBwcm9jZXNzYWRvIGNvbSBzdWNlc3NvLic7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ0J0bjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgZGlzYWJsZWRCdG46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyDwn5SSIE5PVkEgUFJPUFJJRURBREU6IFRyYXZhIG8gZmVjaGFtZW50byBkbyBtb2RhbFxuICBASW5wdXQoKSBpc0xvY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIG1vZGFsSWNvbjogc3RyaW5nID0gJ2ZhLWNoZWNrJztcbiAgbW9kYWxJY29uQ29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTYwMCc7XG4gIG1vZGFsQmdDb2xvcjogc3RyaW5nID0gJ2JnLWdyZWVuLTEwMCc7XG4gIGlzQ2xvc2luZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBvcGVuTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93TW9kYWwgPSB0cnVlO1xuICAgIHRoaXMuaXNDbG9zaW5nID0gZmFsc2U7XG4gICAgaWYgKCF3aW5kb3cubG9jYXRpb24uaGFzaC5pbmNsdWRlcygnbW9kYWxPcGVuJykpIHtcbiAgICAgIHRoaXMubG9jYXRpb24uZ28odGhpcy5sb2NhdGlvbi5wYXRoKCkgKyAnI21vZGFsT3BlbicpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW4oXG4gICAgdHlwZTogTW9kYWxUeXBlLFxuICAgIG1lc3NhZ2U6IHN0cmluZyA9ICcnLFxuICAgIHBheW1lbnRNZXRob2Q/OiAncGl4JyB8ICdjcmVkaXQnLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyZU1vZGFsKHR5cGUsIG1lc3NhZ2UpO1xuICAgIGlmIChwYXltZW50TWV0aG9kKSB0aGlzLnBheW1lbnRNZXRob2QgPSBwYXltZW50TWV0aG9kO1xuICAgIHRoaXMub3Blbk1vZGFsKCk7XG4gIH1cblxuICBjb25maWd1cmVNb2RhbCh0eXBlOiBNb2RhbFR5cGUsIG1lc3NhZ2U6IHN0cmluZyA9ICcnKTogdm9pZCB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgdGhpcy5zZXRTdWNjZXNzU3R5bGVzKG1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgdGhpcy5zZXRFcnJvclN0eWxlcyhtZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgdGhpcy5zZXRXYXJuaW5nU3R5bGVzKG1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFN1Y2Nlc3NTdHlsZXMobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbEljb24gPSAnZmEtY2hlY2stY2lyY2xlJztcbiAgICB0aGlzLm1vZGFsSWNvbkNvbG9yID0gJ21vZGFsLWljb24tc3VjY2Vzcyc7XG4gICAgdGhpcy5tb2RhbEJnQ29sb3IgPSAnbW9kYWwtYmctc3VjY2Vzcyc7XG4gICAgdGhpcy5tZXNzYWdlVGl0bGUgPSAnU3VjZXNzbyEnO1xuICAgIHRoaXMubWVzc2FnZUJvZHkgPSBtZXNzYWdlIHx8ICdPcGVyYcOnw6NvIHJlYWxpemFkYSBjb20gc3VjZXNzby4nO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFcnJvclN0eWxlcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsSWNvbiA9ICdmYS10aW1lcy1jaXJjbGUnO1xuICAgIHRoaXMubW9kYWxJY29uQ29sb3IgPSAnbW9kYWwtaWNvbi1lcnJvcic7XG4gICAgdGhpcy5tb2RhbEJnQ29sb3IgPSAnbW9kYWwtYmctZXJyb3InO1xuICAgIHRoaXMubWVzc2FnZVRpdGxlID0gJ09wcyEgQWxnbyBkZXUgZXJyYWRvJztcbiAgICB0aGlzLm1lc3NhZ2VCb2R5ID0gbWVzc2FnZSB8fCAnTsOjbyBjb25zZWd1aW1vcyBwcm9jZXNzYXIgc3VhIHNvbGljaXRhw6fDo28uJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0V2FybmluZ1N0eWxlcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsSWNvbiA9ICdmYS1pbmZvLWNpcmNsZSc7XG5cbiAgICAvLyDinIUgVXNhbmRvIGNsYXNzZXMgbmF0aXZhcyBkbyBUYWlsd2luZFxuICAgIHRoaXMubW9kYWxJY29uQ29sb3IgPSAndGV4dC1ibHVlLTYwMCc7IC8vIEF6dWwgdmlicmFudGUsIG1haXMgYW1pZ8OhdmVsIHF1ZSBvIDgwMFxuICAgIHRoaXMubW9kYWxCZ0NvbG9yID0gJ2JnLWJsdWUtNTAnO1xuXG4gICAgdGhpcy5tZXNzYWdlVGl0bGUgPSAnQXRlbsOnw6NvJztcbiAgICB0aGlzLm1lc3NhZ2VCb2R5ID0gbWVzc2FnZSB8fCAnVmVyaWZpcXVlIG9zIGRhZG9zIGFudGVzIGRlIGNvbnRpbnVhci4nO1xuICB9XG5cbiAgYWN0aW9uTW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nQnRuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nQnRuID0gdHJ1ZTtcbiAgICAgIHRoaXMubW9kYWxBY3Rpb24uZW1pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGFsQWN0aW9uLmVtaXQoKTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nQnRuID0gZmFsc2U7XG4gICAgICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG93TW9kYWwgfHwgdGhpcy5pc0Nsb3NpbmcpIHJldHVybjtcblxuICAgIHRoaXMuaXNDbG9zaW5nID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd01vZGFsID0gZmFsc2U7XG4gICAgICB0aGlzLmlzQ2xvc2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tb2RhbENsb3NlZC5lbWl0KCk7XG4gICAgfSwgMzAwKTtcbiAgfVxuICAvLyDinIUgSW50ZXJjZXB0YSBvIGJvdMOjbyB2b2x0YXIgZG8gY2VsdWxhci9icm93c2VyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb3BzdGF0ZScpXG4gIG9uUG9wU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvd01vZGFsKSB7XG4gICAgICBpZiAodGhpcy5pc0xvY2tlZCkge1xuICAgICAgICAvLyDwn5SSIFNlIGVzdGl2ZXIgdHJhdmFkbywgXCJhbnVsYW1vc1wiIG8gdm9sdGFyIGFkaWNpb25hbmRvIG8gaGFzaCBkZSBub3ZvXG4gICAgICAgIHRoaXMubG9jYXRpb24uZ28odGhpcy5sb2NhdGlvbi5wYXRoKCkgKyAnI21vZGFsT3BlbicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93TW9kYWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tb2RhbENsb3NlZC5lbWl0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gICpuZ0lmPVwic2hvd01vZGFsXCJcbiAgY2xhc3M9XCJtb2RhbC1vdmVybGF5LWZpeGVkXCJcbiAgW25nQ2xhc3NdPVwieyAnb3ZlcmxheS1oaWRlJzogaXNDbG9zaW5nIH1cIlxuICAoY2xpY2spPVwiIWlzTG9ja2VkICYmIGNsb3NlTW9kYWwoKVwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImJnLXN1cmZhY2Ugdy1mdWxsIG1heC13LTJ4bCByb3VuZGVkLXQtWzIuNXJlbV0gcC02IHNoYWRvdy0yeGwgYm9yZGVyLXQgYm9yZGVyLWJvcmRlci1saWdodCBmbGV4IGZsZXgtY29sXCJcbiAgICBbbmdDbGFzc109XCJpc0Nsb3NpbmcgPyAnYW5pbWF0ZS1zbGlkZS1kb3duJyA6ICdhbmltYXRlLXNsaWRlLXVwJ1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInctZnVsbCBweS00IC1tdC0yIGZsZXgganVzdGlmeS1jZW50ZXJcIlxuICAgICAgW25nQ2xhc3NdPVwiaXNMb2NrZWQgPyAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAnIDogJ2N1cnNvci1wb2ludGVyJ1wiXG4gICAgICAoY2xpY2spPVwiIWlzTG9ja2VkICYmIGNsb3NlTW9kYWwoKVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInctMTIgaC0xLjUgYmctbWVkaXVtIHJvdW5kZWQtZnVsbFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgbWItNFwiPlxuICAgICAgICA8ZGl2IFtjbGFzc109XCJtb2RhbEJnQ29sb3JcIiBjbGFzcz1cInctMjAgaC0yMCByb3VuZGVkLWZ1bGwgb3BhY2l0eS00MFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxpIFtjbGFzc109XCJtb2RhbEljb24gKyAnICcgKyBtb2RhbEljb25Db2xvclwiIGNsYXNzPVwiZmFzIHRleHQtM3hsXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8aDIgY2xhc3M9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC10ZXh0LXByaW1hcnkgbWItMlwiPnt7IG1lc3NhZ2VUaXRsZSB9fTwvaDI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbW9kYWwtc2Nyb2xsLWFyZWEgcHgtMiBjdXN0b20tc2Nyb2xsYmFyXCI+XG4gICAgICAgIDxwICpuZ0lmPVwibWVzc2FnZUJvZHlcIiBjbGFzcz1cInRleHQtdGV4dC1zZWNvbmRhcnkgbWItNFwiPnt7IG1lc3NhZ2VCb2R5IH19PC9wPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1keW5hbWljLWNvbnRlbnQgdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW29wdGlvbmFsLWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JEZXRhaWxzXCIgY2xhc3M9XCJtdC00IHAtNCBiZy1yZWQtNTAgZGFyazpiZy1yZWQtOTUwLzIwIHJvdW5kZWQtMnhsIHRleHQtbGVmdCBib3JkZXIgYm9yZGVyLXJlZC0xMDAgZGFyazpib3JkZXItcmVkLTkwMC8zMFwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtcmVkLTcwMCBkYXJrOnRleHQtcmVkLTQwMCB1cHBlcmNhc2UgbWItMVwiPkxvZyBkbyBzaXN0ZW1hOjwvcD5cbiAgICAgICAgICA8cHJlIGNsYXNzPVwidGV4dC1bMTFweF0gdGV4dC1yZWQtNjAwIGRhcms6dGV4dC1yZWQtMzAwIGZvbnQtbW9ubyB3aGl0ZXNwYWNlLXByZS13cmFwXCI+e3sgZXJyb3JEZXRhaWxzIHwganNvbiB9fTwvcHJlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtNiBmbGV4IGZsZXgtY29sIHctZnVsbCBnYXAtMyBwYi00XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRCdG4gfHwgKHByaWNlTmVnb3RpYXRlZCA8PSAwICYmIGFjdGlvbkJ1dHRvblRleHQgPT09ICdOZWdvY2lhcicpXCJcbiAgICAgICAgICAqbmdJZj1cImFjdGlvbkJ1dHRvblRleHRcIlxuICAgICAgICAgIChjbGljayk9XCJhY3Rpb25Nb2RhbCgpXCJcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBweS00IHRleHQtd2hpdGUgcm91bmRlZC0yeGwgZm9udC1ib2xkIGFjdGl2ZTpzY2FsZS1bMC45OF0gdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTMgc2hhZG93LWxnIGJ0bi1wcmltYXJ5LWN1c3RvbVwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3ZhcigtLXByaW1hcnkpJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0xvYWRpbmdCdG5cIj57eyBhY3Rpb25CdXR0b25UZXh0IH19PC9zcGFuPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdCdG5cIj5cbiAgICAgICAgICAgIDxzcGFuPlByb2Nlc3NhbmRvPC9zcGFuPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlLW5vdGNoIGZhLXNwaW5cIj48L2k+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dCdG5cIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZU1vZGFsKClcIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB5LTIgdGV4dC10ZXh0LW11dGVkIGZvbnQtc2VtaWJvbGQgaG92ZXI6dGV4dC10ZXh0LXByaW1hcnkgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY2xvc2VCdXR0b25UZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLW1vZGFsL2N1c3RvbS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1tb2RhbC9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7OztBQVd2QixNQUFNLE9BQU8sb0JBQW9CO0lBNkIvQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBNUI3QixZQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3hCLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLG9CQUFlLEdBQUcsUUFBUSxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUE0QixJQUFJLENBQUM7UUFDOUMsaUJBQVksR0FBUSxJQUFJLENBQUM7UUFFeEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN2QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFeEMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixpQkFBWSxHQUFXLHFCQUFxQixDQUFDO1FBQzdDLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUNwQixnQkFBVyxHQUFXLDJDQUEyQyxDQUFDO1FBRWxFLGdC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cUdBQXBCLG9CQUFvQiwybkJDbEJqQyxvM0ZBbUVNOzJGRGpETyxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLEtBQUs7K0ZBS1IsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQWtHTixVQUFVO3NCQURULFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG50eXBlIE1vZGFsVHlwZSA9ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnd2FybmluZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jdXN0b20tbW9kYWwnLFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1tb2RhbC5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgbW9kYWxJZCA9ICdjdXN0b21Nb2RhbCc7XHJcbiAgQElucHV0KCkgdGl0bGUgPSAnQXZpc28nO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2UgPSAnJztcclxuICBASW5wdXQoKSBjbG9zZUJ1dHRvblRleHQgPSAnRmVjaGFyJztcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25UZXh0ID0gJyc7XHJcbiAgQElucHV0KCkgcGF5bWVudE1ldGhvZDogJ3BpeCcgfCAnY3JlZGl0JyB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGVycm9yRGV0YWlsczogYW55ID0gbnVsbDtcclxuXHJcbiAgQE91dHB1dCgpIG1vZGFsQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBtb2RhbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgY2xvc2VBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dNb2RhbCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2VUaXRsZTogc3RyaW5nID0gJ1BhZ2FtZW50byBBcHJvdmFkbyEnO1xyXG4gIEBJbnB1dCgpIHNob3dCdG4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHByaWNlTmVnb3RpYXRlZCA9IDA7XHJcbiAgQElucHV0KCkgbWVzc2FnZUJvZHk6IHN0cmluZyA9ICdTZXUgcGFnYW1lbnRvIGZvaSBwcm9jZXNzYWRvIGNvbSBzdWNlc3NvLic7XHJcbiAgQElucHV0KCkgaXNMb2FkaW5nQnRuOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkQnRuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIPCflJIgTk9WQSBQUk9QUklFREFERTogVHJhdmEgbyBmZWNoYW1lbnRvIGRvIG1vZGFsXHJcbiAgQElucHV0KCkgaXNMb2NrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbW9kYWxJY29uOiBzdHJpbmcgPSAnZmEtY2hlY2snO1xyXG4gIG1vZGFsSWNvbkNvbG9yOiBzdHJpbmcgPSAndGV4dC1ncmVlbi02MDAnO1xyXG4gIG1vZGFsQmdDb2xvcjogc3RyaW5nID0gJ2JnLWdyZWVuLTEwMCc7XHJcbiAgaXNDbG9zaW5nID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIG9wZW5Nb2RhbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd01vZGFsID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDbG9zaW5nID0gZmFsc2U7XHJcbiAgICBpZiAoIXdpbmRvdy5sb2NhdGlvbi5oYXNoLmluY2x1ZGVzKCdtb2RhbE9wZW4nKSkge1xyXG4gICAgICB0aGlzLmxvY2F0aW9uLmdvKHRoaXMubG9jYXRpb24ucGF0aCgpICsgJyNtb2RhbE9wZW4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW4oXHJcbiAgICB0eXBlOiBNb2RhbFR5cGUsXHJcbiAgICBtZXNzYWdlOiBzdHJpbmcgPSAnJyxcclxuICAgIHBheW1lbnRNZXRob2Q/OiAncGl4JyB8ICdjcmVkaXQnLFxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWd1cmVNb2RhbCh0eXBlLCBtZXNzYWdlKTtcclxuICAgIGlmIChwYXltZW50TWV0aG9kKSB0aGlzLnBheW1lbnRNZXRob2QgPSBwYXltZW50TWV0aG9kO1xyXG4gICAgdGhpcy5vcGVuTW9kYWwoKTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZU1vZGFsKHR5cGU6IE1vZGFsVHlwZSwgbWVzc2FnZTogc3RyaW5nID0gJycsIHRpdGxlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdCdG4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZ0J0biA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdzdWNjZXNzJzpcclxuICAgICAgICB0aGlzLnNldFN1Y2Nlc3NTdHlsZXMobWVzc2FnZSwgdGl0bGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdlcnJvcic6XHJcbiAgICAgICAgdGhpcy5zZXRFcnJvclN0eWxlcyhtZXNzYWdlLCB0aXRsZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxyXG4gICAgICAgIHRoaXMuc2V0V2FybmluZ1N0eWxlcyhtZXNzYWdlLCB0aXRsZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFN1Y2Nlc3NTdHlsZXMobWVzc2FnZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RhbEljb24gPSAnZmEtY2hlY2stY2lyY2xlJztcclxuICAgIHRoaXMubW9kYWxJY29uQ29sb3IgPSAnbW9kYWwtaWNvbi1zdWNjZXNzJztcclxuICAgIHRoaXMubW9kYWxCZ0NvbG9yID0gJ21vZGFsLWJnLXN1Y2Nlc3MnO1xyXG4gICAgdGhpcy5tZXNzYWdlVGl0bGUgPSB0aXRsZSB8fCAnU3VjZXNzbyEnO1xyXG4gICAgdGhpcy5tZXNzYWdlQm9keSA9IG1lc3NhZ2UgfHwgJ09wZXJhw6fDo28gcmVhbGl6YWRhIGNvbSBzdWNlc3NvLic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEVycm9yU3R5bGVzKG1lc3NhZ2U6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kYWxJY29uID0gJ2ZhLXRpbWVzLWNpcmNsZSc7XHJcbiAgICB0aGlzLm1vZGFsSWNvbkNvbG9yID0gJ21vZGFsLWljb24tZXJyb3InO1xyXG4gICAgdGhpcy5tb2RhbEJnQ29sb3IgPSAnbW9kYWwtYmctZXJyb3InO1xyXG4gICAgdGhpcy5tZXNzYWdlVGl0bGUgPSB0aXRsZSB8fCAnT3BzISBBbGdvIGRldSBlcnJhZG8nO1xyXG4gICAgdGhpcy5tZXNzYWdlQm9keSA9IG1lc3NhZ2UgfHwgJ07Do28gY29uc2VndWltb3MgcHJvY2Vzc2FyIHN1YSBzb2xpY2l0YcOnw6NvLic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdhcm5pbmdTdHlsZXMobWVzc2FnZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RhbEljb24gPSAnZmEtaW5mby1jaXJjbGUnO1xyXG4gICAgdGhpcy5tb2RhbEljb25Db2xvciA9ICd0ZXh0LWJsdWUtNjAwJztcclxuICAgIHRoaXMubW9kYWxCZ0NvbG9yID0gJ2JnLWJsdWUtNTAnO1xyXG5cclxuICAgIHRoaXMubWVzc2FnZVRpdGxlID0gdGl0bGUgfHwgJ0F0ZW7Dp8Ojbyc7XHJcbiAgICB0aGlzLm1lc3NhZ2VCb2R5ID0gbWVzc2FnZSB8fCAnVmVyaWZpcXVlIG9zIGRhZG9zIGFudGVzIGRlIGNvbnRpbnVhci4nO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uTW9kYWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdCdG4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZ0J0biA9IHRydWU7XHJcbiAgICAgIHRoaXMubW9kYWxBY3Rpb24uZW1pdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tb2RhbEFjdGlvbi5lbWl0KCk7XHJcbiAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VNb2RhbChmcm9tQnV0dG9uOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zaG93TW9kYWwgfHwgdGhpcy5pc0Nsb3NpbmcpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzQ2xvc2luZyA9IHRydWU7XHJcbiAgICBpZiAoZnJvbUJ1dHRvbikge1xyXG4gICAgICB0aGlzLmNsb3NlQWN0aW9uLmVtaXQoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd01vZGFsID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNDbG9zaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubW9kYWxDbG9zZWQuZW1pdCgpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcbiAgLy8g4pyFIEludGVyY2VwdGEgbyBib3TDo28gdm9sdGFyIGRvIGNlbHVsYXIvYnJvd3NlclxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb3BzdGF0ZScpXHJcbiAgb25Qb3BTdGF0ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3dNb2RhbCkge1xyXG4gICAgICBpZiAodGhpcy5pc0xvY2tlZCkge1xyXG4gICAgICAgIC8vIPCflJIgU2UgZXN0aXZlciB0cmF2YWRvLCBcImFudWxhbW9zXCIgbyB2b2x0YXIgYWRpY2lvbmFuZG8gbyBoYXNoIGRlIG5vdm9cclxuICAgICAgICB0aGlzLmxvY2F0aW9uLmdvKHRoaXMubG9jYXRpb24ucGF0aCgpICsgJyNtb2RhbE9wZW4nKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNob3dNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW9kYWxDbG9zZWQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcbiAgKm5nSWY9XCJzaG93TW9kYWxcIlxuICBjbGFzcz1cIm1vZGFsLW92ZXJsYXktZml4ZWRcIlxuICBbbmdDbGFzc109XCJ7ICdvdmVybGF5LWhpZGUnOiBpc0Nsb3NpbmcgfVwiXG4gIChjbGljayk9XCIhaXNMb2NrZWQgJiYgY2xvc2VNb2RhbCgpXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYmctc3VyZmFjZSB3LWZ1bGwgbWF4LXctMnhsIHJvdW5kZWQtdC1bMi41cmVtXSBwLTYgc2hhZG93LTJ4bCBib3JkZXItdCBib3JkZXItYm9yZGVyLWxpZ2h0IGZsZXggZmxleC1jb2xcIlxuICAgIFtuZ0NsYXNzXT1cImlzQ2xvc2luZyA/ICdhbmltYXRlLXNsaWRlLWRvd24nIDogJ2FuaW1hdGUtc2xpZGUtdXAnXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidy1mdWxsIHB5LTQgLW10LTIgZmxleCBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICBbbmdDbGFzc109XCJpc0xvY2tlZCA/ICdjdXJzb3Itbm90LWFsbG93ZWQgb3BhY2l0eS01MCcgOiAnY3Vyc29yLXBvaW50ZXInXCJcbiAgICAgIChjbGljayk9XCIhaXNMb2NrZWQgJiYgY2xvc2VNb2RhbCgpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwidy0xMiBoLTEuNSBiZy1tZWRpdW0gcm91bmRlZC1mdWxsXCI+PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBtYi00XCI+XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cIm1vZGFsQmdDb2xvclwiIGNsYXNzPVwidy0yMCBoLTIwIHJvdW5kZWQtZnVsbCBvcGFjaXR5LTQwXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgPGkgW2NsYXNzXT1cIm1vZGFsSWNvbiArICcgJyArIG1vZGFsSWNvbkNvbG9yXCIgY2xhc3M9XCJmYXMgdGV4dC0zeGxcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxoMiBjbGFzcz1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LXRleHQtcHJpbWFyeSBtYi0yXCI+e3sgbWVzc2FnZVRpdGxlIH19PC9oMj5cblxuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBtb2RhbC1zY3JvbGwtYXJlYSBweC0yIGN1c3RvbS1zY3JvbGxiYXJcIj5cbiAgICAgICAgPHAgKm5nSWY9XCJtZXNzYWdlQm9keVwiIGNsYXNzPVwidGV4dC10ZXh0LXNlY29uZGFyeSBtYi00XCI+e3sgbWVzc2FnZUJvZHkgfX08L3A+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWR5bmFtaWMtY29udGVudCB0ZXh0LWxlZnRcIj5cbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbb3B0aW9uYWwtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJlcnJvckRldGFpbHNcIiBjbGFzcz1cIm10LTQgcC00IGJnLXJlZC01MCBkYXJrOmJnLXJlZC05NTAvMjAgcm91bmRlZC0yeGwgdGV4dC1sZWZ0IGJvcmRlciBib3JkZXItcmVkLTEwMCBkYXJrOmJvcmRlci1yZWQtOTAwLzMwXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LVsxMHB4XSBmb250LWJvbGQgdGV4dC1yZWQtNzAwIGRhcms6dGV4dC1yZWQtNDAwIHVwcGVyY2FzZSBtYi0xXCI+TG9nIGRvIHNpc3RlbWE6PC9wPlxuICAgICAgICAgIDxwcmUgY2xhc3M9XCJ0ZXh0LVsxMXB4XSB0ZXh0LXJlZC02MDAgZGFyazp0ZXh0LXJlZC0zMDAgZm9udC1tb25vIHdoaXRlc3BhY2UtcHJlLXdyYXBcIj57eyBlcnJvckRldGFpbHMgfCBqc29uIH19PC9wcmU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdC02IGZsZXggZmxleC1jb2wgdy1mdWxsIGdhcC0zIHBiLTRcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZEJ0biB8fCAocHJpY2VOZWdvdGlhdGVkIDw9IDAgJiYgYWN0aW9uQnV0dG9uVGV4dCA9PT0gJ05lZ29jaWFyJylcIlxuICAgICAgICAgICpuZ0lmPVwiYWN0aW9uQnV0dG9uVGV4dFwiXG4gICAgICAgICAgKGNsaWNrKT1cImFjdGlvbk1vZGFsKClcIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB5LTQgdGV4dC13aGl0ZSByb3VuZGVkLTJ4bCBmb250LWJvbGQgYWN0aXZlOnNjYWxlLVswLjk4XSB0cmFuc2l0aW9uLWFsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBzaGFkb3ctbGcgYnRuLXByaW1hcnktY3VzdG9tXCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIndmFyKC0tcHJpbWFyeSknXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzTG9hZGluZ0J0blwiPnt7IGFjdGlvbkJ1dHRvblRleHQgfX08L3NwYW4+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ0J0blwiPlxuICAgICAgICAgICAgPHNwYW4+UHJvY2Vzc2FuZG88L3NwYW4+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jaXJjbGUtbm90Y2ggZmEtc3BpblwiPjwvaT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0J0blwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsb3NlTW9kYWwodHJ1ZSlcIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB5LTIgdGV4dC10ZXh0LW11dGVkIGZvbnQtc2VtaWJvbGQgaG92ZXI6dGV4dC10ZXh0LXByaW1hcnkgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY2xvc2VCdXR0b25UZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
@@ -92,10 +92,10 @@ export class NavComponent {
92
92
  }
93
93
  }
94
94
  NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
95
- NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavComponent, selector: "lib-nav", host: { listeners: { "window:resize": "onResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}:host ::ng-deep i.fas.fa-arrow-left{color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
95
+ NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavComponent, selector: "lib-nav", host: { listeners: { "window:resize": "onResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em;padding-top:calc(1em + env(safe-area-inset-top))}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}:host ::ng-deep i.fas.fa-arrow-left{color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
96
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, decorators: [{
97
97
  type: Component,
98
- args: [{ selector: 'lib-nav', template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}:host ::ng-deep i.fas.fa-arrow-left{color:#fff!important}\n"] }]
98
+ args: [{ selector: 'lib-nav', template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em;padding-top:calc(1em + env(safe-area-inset-top))}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}:host ::ng-deep i.fas.fa-arrow-left{color:#fff!important}\n"] }]
99
99
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i0.ElementRef }]; }, propDecorators: { onResize: [{
100
100
  type: HostListener,
101
101
  args: ['window:resize']
@@ -173,10 +173,10 @@ class NavComponent {
173
173
  }
174
174
  }
175
175
  NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
176
- NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavComponent, selector: "lib-nav", host: { listeners: { "window:resize": "onResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}:host ::ng-deep i.fas.fa-arrow-left{color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
176
+ NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavComponent, selector: "lib-nav", host: { listeners: { "window:resize": "onResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em;padding-top:calc(1em + env(safe-area-inset-top))}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}:host ::ng-deep i.fas.fa-arrow-left{color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
177
177
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, decorators: [{
178
178
  type: Component,
179
- args: [{ selector: 'lib-nav', template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}:host ::ng-deep i.fas.fa-arrow-left{color:#fff!important}\n"] }]
179
+ args: [{ selector: 'lib-nav', template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em;padding-top:calc(1em + env(safe-area-inset-top))}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}:host ::ng-deep i.fas.fa-arrow-left{color:#fff!important}\n"] }]
180
180
  }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i0.ElementRef }]; }, propDecorators: { onResize: [{
181
181
  type: HostListener,
182
182
  args: ['window:resize']
@@ -325,6 +325,7 @@ class CustomModalComponent {
325
325
  this.errorDetails = null;
326
326
  this.modalClosed = new EventEmitter();
327
327
  this.modalAction = new EventEmitter();
328
+ this.closeAction = new EventEmitter();
328
329
  this.showModal = false;
329
330
  this.messageTitle = 'Pagamento Aprovado!';
330
331
  this.showBtn = true;
@@ -352,39 +353,41 @@ class CustomModalComponent {
352
353
  this.paymentMethod = paymentMethod;
353
354
  this.openModal();
354
355
  }
355
- configureModal(type, message = '') {
356
+ configureModal(type, message = '', title) {
357
+ if (this.isLoadingBtn !== undefined) {
358
+ this.isLoadingBtn = false;
359
+ }
356
360
  switch (type) {
357
361
  case 'success':
358
- this.setSuccessStyles(message);
362
+ this.setSuccessStyles(message, title);
359
363
  break;
360
364
  case 'error':
361
- this.setErrorStyles(message);
365
+ this.setErrorStyles(message, title);
362
366
  break;
363
367
  case 'warning':
364
- this.setWarningStyles(message);
368
+ this.setWarningStyles(message, title);
365
369
  break;
366
370
  }
367
371
  }
368
- setSuccessStyles(message) {
372
+ setSuccessStyles(message, title) {
369
373
  this.modalIcon = 'fa-check-circle';
370
374
  this.modalIconColor = 'modal-icon-success';
371
375
  this.modalBgColor = 'modal-bg-success';
372
- this.messageTitle = 'Sucesso!';
376
+ this.messageTitle = title || 'Sucesso!';
373
377
  this.messageBody = message || 'Operação realizada com sucesso.';
374
378
  }
375
- setErrorStyles(message) {
379
+ setErrorStyles(message, title) {
376
380
  this.modalIcon = 'fa-times-circle';
377
381
  this.modalIconColor = 'modal-icon-error';
378
382
  this.modalBgColor = 'modal-bg-error';
379
- this.messageTitle = 'Ops! Algo deu errado';
383
+ this.messageTitle = title || 'Ops! Algo deu errado';
380
384
  this.messageBody = message || 'Não conseguimos processar sua solicitação.';
381
385
  }
382
- setWarningStyles(message) {
386
+ setWarningStyles(message, title) {
383
387
  this.modalIcon = 'fa-info-circle';
384
- // Usando classes nativas do Tailwind
385
- this.modalIconColor = 'text-blue-600'; // Azul vibrante, mais amigável que o 800
388
+ this.modalIconColor = 'text-blue-600';
386
389
  this.modalBgColor = 'bg-blue-50';
387
- this.messageTitle = 'Atenção';
390
+ this.messageTitle = title || 'Atenção';
388
391
  this.messageBody = message || 'Verifique os dados antes de continuar.';
389
392
  }
390
393
  actionModal() {
@@ -394,14 +397,16 @@ class CustomModalComponent {
394
397
  }
395
398
  else {
396
399
  this.modalAction.emit();
397
- this.isLoadingBtn = false;
398
400
  this.closeModal();
399
401
  }
400
402
  }
401
- closeModal() {
403
+ closeModal(fromButton = false) {
402
404
  if (!this.showModal || this.isClosing)
403
405
  return;
404
406
  this.isClosing = true;
407
+ if (fromButton) {
408
+ this.closeAction.emit();
409
+ }
405
410
  setTimeout(() => {
406
411
  this.showModal = false;
407
412
  this.isClosing = false;
@@ -423,10 +428,10 @@ class CustomModalComponent {
423
428
  }
424
429
  }
425
430
  CustomModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, deps: [{ token: i1.Location }], target: i0.ɵɵFactoryTarget.Component });
426
- CustomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomModalComponent, selector: "lib-custom-modal", inputs: { modalId: "modalId", title: "title", message: "message", closeButtonText: "closeButtonText", actionButtonText: "actionButtonText", paymentMethod: "paymentMethod", errorDetails: "errorDetails", showModal: "showModal", messageTitle: "messageTitle", showBtn: "showBtn", priceNegotiated: "priceNegotiated", messageBody: "messageBody", isLoadingBtn: "isLoadingBtn", disabledBtn: "disabledBtn", isLocked: "isLocked" }, outputs: { modalClosed: "modalClosed", modalAction: "modalAction" }, host: { listeners: { "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-surface w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-border-light flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30\">\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal()\"\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-overlay-fixed{position:fixed;inset:0;background-color:#0009!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;display:flex;align-items:flex-end;justify-content:center;z-index:9999;transition:opacity .3s ease;opacity:1}.overlay-hide{opacity:0;pointer-events:none}.modal-scroll-area{max-height:60vh;overflow-y:auto;overflow-x:hidden;transition:max-height .4s cubic-bezier(.25,1,.5,1)}.modal-scroll-area:has(.animate-fade-in),.modal-scroll-area:focus-within{max-height:85vh}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background:#f1f1f1;border-radius:10px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.btn-primary-custom:hover:not(:disabled){filter:brightness(.9);transition:filter .2s ease}.btn-primary-custom:disabled{opacity:.6;cursor:not-allowed}.modal-bg-success{background-color:#d1fae5!important}.modal-icon-success{color:#10b981!important}.modal-bg-error{background-color:#fee2e2!important}.modal-icon-error{color:#ef4444!important}.modal-bg-warning{background-color:#fef3c7!important}.modal-icon-warning{color:#f59e0b!important}@media (min-width: 768px){.modal-overlay-fixed{align-items:center}.animate-slide-up,.animate-slide-down{border-radius:2.5rem;width:90%;margin-bottom:0}@keyframes slideUp{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}@keyframes slideDown{0%{transform:scale(1);opacity:1}to{transform:scale(.9);opacity:0}}}:host-context(body:has(.modal-overlay-fixed)){overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }] });
431
+ CustomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomModalComponent, selector: "lib-custom-modal", inputs: { modalId: "modalId", title: "title", message: "message", closeButtonText: "closeButtonText", actionButtonText: "actionButtonText", paymentMethod: "paymentMethod", errorDetails: "errorDetails", showModal: "showModal", messageTitle: "messageTitle", showBtn: "showBtn", priceNegotiated: "priceNegotiated", messageBody: "messageBody", isLoadingBtn: "isLoadingBtn", disabledBtn: "disabledBtn", isLocked: "isLocked" }, outputs: { modalClosed: "modalClosed", modalAction: "modalAction", closeAction: "closeAction" }, host: { listeners: { "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-surface w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-border-light flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30\">\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal(true)\"\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-overlay-fixed{position:fixed;inset:0;background-color:#0009!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;display:flex;align-items:flex-end;justify-content:center;z-index:9999;transition:opacity .3s ease;opacity:1}.overlay-hide{opacity:0;pointer-events:none}.modal-scroll-area{max-height:60vh;overflow-y:auto;overflow-x:hidden;transition:max-height .4s cubic-bezier(.25,1,.5,1)}.modal-scroll-area:has(.animate-fade-in),.modal-scroll-area:focus-within{max-height:85vh}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background:#f1f1f1;border-radius:10px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.btn-primary-custom:hover:not(:disabled){filter:brightness(.9);transition:filter .2s ease}.btn-primary-custom:disabled{opacity:.6;cursor:not-allowed}.modal-bg-success{background-color:#d1fae5!important}.modal-icon-success{color:#10b981!important}.modal-bg-error{background-color:#fee2e2!important}.modal-icon-error{color:#ef4444!important}.modal-bg-warning{background-color:#fef3c7!important}.modal-icon-warning{color:#f59e0b!important}@media (min-width: 768px){.modal-overlay-fixed{align-items:center}.animate-slide-up,.animate-slide-down{border-radius:2.5rem;width:90%;margin-bottom:0}@keyframes slideUp{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}@keyframes slideDown{0%{transform:scale(1);opacity:1}to{transform:scale(.9);opacity:0}}}:host-context(body:has(.modal-overlay-fixed)){overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }] });
427
432
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, decorators: [{
428
433
  type: Component,
429
- args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-surface w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-border-light flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30\">\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal()\"\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-overlay-fixed{position:fixed;inset:0;background-color:#0009!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;display:flex;align-items:flex-end;justify-content:center;z-index:9999;transition:opacity .3s ease;opacity:1}.overlay-hide{opacity:0;pointer-events:none}.modal-scroll-area{max-height:60vh;overflow-y:auto;overflow-x:hidden;transition:max-height .4s cubic-bezier(.25,1,.5,1)}.modal-scroll-area:has(.animate-fade-in),.modal-scroll-area:focus-within{max-height:85vh}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background:#f1f1f1;border-radius:10px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.btn-primary-custom:hover:not(:disabled){filter:brightness(.9);transition:filter .2s ease}.btn-primary-custom:disabled{opacity:.6;cursor:not-allowed}.modal-bg-success{background-color:#d1fae5!important}.modal-icon-success{color:#10b981!important}.modal-bg-error{background-color:#fee2e2!important}.modal-icon-error{color:#ef4444!important}.modal-bg-warning{background-color:#fef3c7!important}.modal-icon-warning{color:#f59e0b!important}@media (min-width: 768px){.modal-overlay-fixed{align-items:center}.animate-slide-up,.animate-slide-down{border-radius:2.5rem;width:90%;margin-bottom:0}@keyframes slideUp{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}@keyframes slideDown{0%{transform:scale(1);opacity:1}to{transform:scale(.9);opacity:0}}}:host-context(body:has(.modal-overlay-fixed)){overflow:hidden}\n"] }]
434
+ args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-surface w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-border-light flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30\">\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal(true)\"\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-overlay-fixed{position:fixed;inset:0;background-color:#0009!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;display:flex;align-items:flex-end;justify-content:center;z-index:9999;transition:opacity .3s ease;opacity:1}.overlay-hide{opacity:0;pointer-events:none}.modal-scroll-area{max-height:60vh;overflow-y:auto;overflow-x:hidden;transition:max-height .4s cubic-bezier(.25,1,.5,1)}.modal-scroll-area:has(.animate-fade-in),.modal-scroll-area:focus-within{max-height:85vh}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background:#f1f1f1;border-radius:10px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.btn-primary-custom:hover:not(:disabled){filter:brightness(.9);transition:filter .2s ease}.btn-primary-custom:disabled{opacity:.6;cursor:not-allowed}.modal-bg-success{background-color:#d1fae5!important}.modal-icon-success{color:#10b981!important}.modal-bg-error{background-color:#fee2e2!important}.modal-icon-error{color:#ef4444!important}.modal-bg-warning{background-color:#fef3c7!important}.modal-icon-warning{color:#f59e0b!important}@media (min-width: 768px){.modal-overlay-fixed{align-items:center}.animate-slide-up,.animate-slide-down{border-radius:2.5rem;width:90%;margin-bottom:0}@keyframes slideUp{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}@keyframes slideDown{0%{transform:scale(1);opacity:1}to{transform:scale(.9);opacity:0}}}:host-context(body:has(.modal-overlay-fixed)){overflow:hidden}\n"] }]
430
435
  }], ctorParameters: function () { return [{ type: i1.Location }]; }, propDecorators: { modalId: [{
431
436
  type: Input
432
437
  }], title: [{
@@ -445,6 +450,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
445
450
  type: Output
446
451
  }], modalAction: [{
447
452
  type: Output
453
+ }], closeAction: [{
454
+ type: Output
448
455
  }], showModal: [{
449
456
  type: Input
450
457
  }], messageTitle: [{