tudu-components 0.2.13 → 0.2.15

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.
@@ -18,6 +18,7 @@ export class CustomModalComponent {
18
18
  this.showBtn = true;
19
19
  this.priceNegotiated = 0;
20
20
  this.messageBody = 'Seu pagamento foi processado com sucesso.';
21
+ this.disabledBtn = false;
21
22
  // Configuração dinâmica
22
23
  this.modalIcon = 'fa-check';
23
24
  this.modalIconColor = 'text-green-600';
@@ -107,10 +108,10 @@ export class CustomModalComponent {
107
108
  }
108
109
  }
109
110
  CustomModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, deps: [{ token: i1.Location }], target: i0.ɵɵFactoryTarget.Component });
110
- 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" }, 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)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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" }] });
111
+ 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" }, 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)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"\n disabledBtn ||\n (priceNegotiated <= 0 && actionButtonText === 'Negociar')\n \"\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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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" }] });
111
112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, decorators: [{
112
113
  type: Component,
113
- args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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"] }]
114
+ args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"\n disabledBtn ||\n (priceNegotiated <= 0 && actionButtonText === 'Negociar')\n \"\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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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"] }]
114
115
  }], ctorParameters: function () { return [{ type: i1.Location }]; }, propDecorators: { modalId: [{
115
116
  type: Input
116
117
  }], title: [{
@@ -141,8 +142,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
141
142
  type: Input
142
143
  }], isLoadingBtn: [{
143
144
  type: Input
145
+ }], disabledBtn: [{
146
+ type: Input
144
147
  }], onPopState: [{
145
148
  type: HostListener,
146
149
  args: ['window:popstate']
147
150
  }] } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLW1vZGFsL2N1c3RvbS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1tb2RhbC9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7OztBQVd2QixNQUFNLE9BQU8sb0JBQW9CO0lBeUIvQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBeEI3QixZQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3hCLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLG9CQUFlLEdBQUcsUUFBUSxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUE0QixJQUFJLENBQUM7UUFDOUMsaUJBQVksR0FBUSxJQUFJLENBQUM7UUFFeEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV4QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGlCQUFZLEdBQVcscUJBQXFCLENBQUM7UUFDN0MsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGdCQUFXLEdBQVcsMkNBQTJDLENBQUM7UUFHM0Usd0JBQXdCO1FBQ3hCLGNBQVMsR0FBVyxVQUFVLENBQUM7UUFDL0Is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c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQW1HTixVQUFVO3NCQURULFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJzsgLy8gSW1wb3J0YcOnw6NvIGNvcnJldGFcblxudHlwZSBNb2RhbFR5cGUgPSAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ3dhcm5pbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY3VzdG9tLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tbW9kYWwuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIG1vZGFsSWQgPSAnY3VzdG9tTW9kYWwnO1xuICBASW5wdXQoKSB0aXRsZSA9ICdBdmlzbyc7XG4gIEBJbnB1dCgpIG1lc3NhZ2UgPSAnJztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25UZXh0ID0gJ0ZlY2hhcic7XG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvblRleHQgPSAnJztcbiAgQElucHV0KCkgcGF5bWVudE1ldGhvZDogJ3BpeCcgfCAnY3JlZGl0JyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBlcnJvckRldGFpbHM6IGFueSA9IG51bGw7XG5cbiAgQE91dHB1dCgpIG1vZGFsQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbW9kYWxBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQElucHV0KCkgc2hvd01vZGFsID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUaXRsZTogc3RyaW5nID0gJ1BhZ2FtZW50byBBcHJvdmFkbyEnO1xuICBASW5wdXQoKSBzaG93QnRuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHJpY2VOZWdvdGlhdGVkID0gMDtcbiAgQElucHV0KCkgbWVzc2FnZUJvZHk6IHN0cmluZyA9ICdTZXUgcGFnYW1lbnRvIGZvaSBwcm9jZXNzYWRvIGNvbSBzdWNlc3NvLic7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ0J0bjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvLyBDb25maWd1cmHDp8OjbyBkaW7Dom1pY2FcbiAgbW9kYWxJY29uOiBzdHJpbmcgPSAnZmEtY2hlY2snO1xuICBtb2RhbEljb25Db2xvcjogc3RyaW5nID0gJ3RleHQtZ3JlZW4tNjAwJztcbiAgbW9kYWxCZ0NvbG9yOiBzdHJpbmcgPSAnYmctZ3JlZW4tMTAwJztcbiAgaXNDbG9zaW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24pIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIC8vIENlbnRyYWxpemEgYSBhYmVydHVyYSBkbyBtb2RhbCBjb20gc3Vwb3J0ZSBhbyBib3TDo28gdm9sdGFyXG4gIG9wZW5Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dNb2RhbCA9IHRydWU7XG4gICAgLy8gQWRpY2lvbmEgdW0gZXN0YWRvIG5vIGhpc3TDs3JpY28gcGFyYSBvIGJvdMOjbyB2b2x0YXIgZnVuY2lvbmFyXG4gICAgdGhpcy5sb2NhdGlvbi5nbyh0aGlzLmxvY2F0aW9uLnBhdGgoKSArICcjbW9kYWxPcGVuJyk7XG4gIH1cblxuICAvLyBBdGFsaG8gcGFyYSBhYnJpciBjb20gdGlwb3MgZXNwZWPDrWZpY29zXG4gIG9wZW4oXG4gICAgdHlwZTogTW9kYWxUeXBlLFxuICAgIG1lc3NhZ2U6IHN0cmluZyA9ICcnLFxuICAgIHBheW1lbnRNZXRob2Q/OiAncGl4JyB8ICdjcmVkaXQnXG4gICk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJlTW9kYWwodHlwZSwgbWVzc2FnZSk7XG4gICAgaWYgKHBheW1lbnRNZXRob2QpIHtcbiAgICAgIHRoaXMucGF5bWVudE1ldGhvZCA9IHBheW1lbnRNZXRob2Q7XG4gICAgfVxuICAgIHRoaXMub3Blbk1vZGFsKCk7XG4gIH1cblxuICBjb25maWd1cmVNb2RhbCh0eXBlOiBNb2RhbFR5cGUsIG1lc3NhZ2U6IHN0cmluZyA9ICcnKTogdm9pZCB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgdGhpcy5zZXRTdWNjZXNzU3R5bGVzKG1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgdGhpcy5zZXRFcnJvclN0eWxlcyhtZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgdGhpcy5zZXRXYXJuaW5nU3R5bGVzKG1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFN1Y2Nlc3NTdHlsZXMobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbEljb24gPSAnZmEtY2hlY2stY2lyY2xlJztcbiAgICB0aGlzLm1vZGFsSWNvbkNvbG9yID0gJ21vZGFsLWljb24tc3VjY2Vzcyc7XG4gICAgdGhpcy5tb2RhbEJnQ29sb3IgPSAnbW9kYWwtYmctc3VjY2Vzcyc7XG4gICAgdGhpcy5tZXNzYWdlVGl0bGUgPSAnU3VjZXNzbyEnO1xuICAgIHRoaXMubWVzc2FnZUJvZHkgPSBtZXNzYWdlIHx8ICdPcGVyYcOnw6NvIHJlYWxpemFkYSBjb20gc3VjZXNzby4nO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFcnJvclN0eWxlcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsSWNvbiA9ICdmYS10aW1lcy1jaXJjbGUnO1xuICAgIHRoaXMubW9kYWxJY29uQ29sb3IgPSAnbW9kYWwtaWNvbi1lcnJvcic7XG4gICAgdGhpcy5tb2RhbEJnQ29sb3IgPSAnbW9kYWwtYmctZXJyb3InO1xuICAgIHRoaXMubWVzc2FnZVRpdGxlID0gJ09wcyEgQWxnbyBkZXUgZXJyYWRvJztcbiAgICB0aGlzLm1lc3NhZ2VCb2R5ID0gbWVzc2FnZSB8fCAnTsOjbyBjb25zZWd1aW1vcyBwcm9jZXNzYXIgc3VhIHNvbGljaXRhw6fDo28uJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0V2FybmluZ1N0eWxlcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsSWNvbiA9ICdmYS1leGNsYW1hdGlvbi1jaXJjbGUnO1xuICAgIHRoaXMubW9kYWxJY29uQ29sb3IgPSAnbW9kYWwtaWNvbi13YXJuaW5nJztcbiAgICB0aGlzLm1vZGFsQmdDb2xvciA9ICdtb2RhbC1iZy13YXJuaW5nJztcbiAgICB0aGlzLm1lc3NhZ2VUaXRsZSA9ICdBdGVuw6fDo28nO1xuICAgIHRoaXMubWVzc2FnZUJvZHkgPSBtZXNzYWdlIHx8ICdWZXJpZmlxdWUgb3MgZGFkb3MgYW50ZXMgZGUgY29udGludWFyLic7XG4gIH1cblxuICBhY3Rpb25Nb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdCdG4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmdCdG4gPSB0cnVlO1xuICAgICAgdGhpcy5tb2RhbEFjdGlvbi5lbWl0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kYWxBY3Rpb24uZW1pdCgpO1xuICAgICAgdGhpcy5pc0xvYWRpbmdCdG4gPSBmYWxzZTtcbiAgICAgIHRoaXMuY2xvc2VNb2RhbCgpOyAvLyBVc2EgbyBtw6l0b2RvIGRlIGZlY2hhciBwYXJhIGxpbXBhciBvIGhpc3TDs3JpY29cbiAgICB9XG4gIH1cblxuICBjbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNDbG9zaW5nID0gdHJ1ZTsgLy8gQXRpdmEgYSBhbmltYcOnw6NvIGRlIGRlc2NpZGFcblxuICAgIC8vIEFndWFyZGEgbyB0ZW1wbyBkYSBhbmltYcOnw6NvICgzMDBtcykgYW50ZXMgZGUgcmVtb3ZlciBkbyBET01cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd01vZGFsID0gZmFsc2U7XG4gICAgICB0aGlzLmlzQ2xvc2luZyA9IGZhbHNlOyAvLyBSZXNldGEgcGFyYSBhIHByw7N4aW1hIGFiZXJ0dXJhXG4gICAgICB0aGlzLm1vZGFsQ2xvc2VkLmVtaXQoKTtcblxuICAgICAgLy8gTMOzZ2ljYSBkbyBoaXN0w7NyaWNvIHF1ZSBqw6EgZml6ZW1vc1xuICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAnI21vZGFsT3BlbicpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSB0aGlzLmxvY2F0aW9uLnBhdGgoKS5zcGxpdCgnIycpWzBdO1xuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShjdXJyZW50UGF0aCk7XG4gICAgICB9XG4gICAgfSwgMzAwKTtcbiAgfVxuICAvLyBFc2N1dGEgbyBib3TDo28gdm9sdGFyIGRvIG5hdmVnYWRvciBvdSBjZWx1bGFyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb3BzdGF0ZScpXG4gIG9uUG9wU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvd01vZGFsKSB7XG4gICAgICB0aGlzLnNob3dNb2RhbCA9IGZhbHNlO1xuICAgICAgdGhpcy5tb2RhbENsb3NlZC5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gICpuZ0lmPVwic2hvd01vZGFsXCJcbiAgY2xhc3M9XCJtb2RhbC1vdmVybGF5LWZpeGVkXCJcbiAgW25nQ2xhc3NdPVwieyAnb3ZlcmxheS1oaWRlJzogaXNDbG9zaW5nIH1cIlxuICAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYmctd2hpdGUgdy1mdWxsIG1heC13LTJ4bCByb3VuZGVkLXQtWzIuNXJlbV0gcC02IHNoYWRvdy0yeGwgYm9yZGVyLXQgYm9yZGVyLWdyYXktMTAwIGZsZXggZmxleC1jb2xcIlxuICAgIFtuZ0NsYXNzXT1cImlzQ2xvc2luZyA/ICdhbmltYXRlLXNsaWRlLWRvd24nIDogJ2FuaW1hdGUtc2xpZGUtdXAnXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidy1mdWxsIHB5LTQgLW10LTIgY3Vyc29yLXBvaW50ZXIgZmxleCBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwidy0xMiBoLTEuNSBiZy1ncmF5LTIwMCByb3VuZGVkLWZ1bGxcIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG1iLTRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtjbGFzc109XCJtb2RhbEJnQ29sb3JcIlxuICAgICAgICAgIGNsYXNzPVwidy0yMCBoLTIwIHJvdW5kZWQtZnVsbCBvcGFjaXR5LTQwXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBbY2xhc3NdPVwibW9kYWxJY29uICsgJyAnICsgbW9kYWxJY29uQ29sb3JcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYXMgdGV4dC0zeGxcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxoMiBjbGFzcz1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTJcIj57eyBtZXNzYWdlVGl0bGUgfX08L2gyPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1vZGFsLXNjcm9sbC1hcmVhIHB4LTIgY3VzdG9tLXNjcm9sbGJhclwiPlxuICAgICAgICA8cCAqbmdJZj1cIm1lc3NhZ2VCb2R5XCIgY2xhc3M9XCJ0ZXh0LWdyYXktNjAwIG1iLTRcIj57eyBtZXNzYWdlQm9keSB9fTwvcD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZHluYW1pYy1jb250ZW50IHRleHQtbGVmdFwiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvcHRpb25hbC1jb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiZXJyb3JEZXRhaWxzXCJcbiAgICAgICAgICBjbGFzcz1cIm10LTQgcC00IGJnLXJlZC01MCByb3VuZGVkLTJ4bCB0ZXh0LWxlZnQgYm9yZGVyIGJvcmRlci1yZWQtMTAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtcmVkLTcwMCB1cHBlcmNhc2UgbWItMVwiPlxuICAgICAgICAgICAgTG9nIGRvIHNpc3RlbWE6XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxwcmUgY2xhc3M9XCJ0ZXh0LVsxMXB4XSB0ZXh0LXJlZC02MDAgZm9udC1tb25vIHdoaXRlc3BhY2UtcHJlLXdyYXBcIj57e1xuICAgICAgICAgICAgZXJyb3JEZXRhaWxzIHwganNvblxuICAgICAgICAgIH19PC9wcmU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdC02IGZsZXggZmxleC1jb2wgdy1mdWxsIGdhcC0zIHBiLTRcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmljZU5lZ290aWF0ZWQgPD0gMCAmJiBhY3Rpb25CdXR0b25UZXh0ID09PSAnTmVnb2NpYXInXCJcbiAgICAgICAgICAqbmdJZj1cImFjdGlvbkJ1dHRvblRleHRcIlxuICAgICAgICAgIChjbGljayk9XCJhY3Rpb25Nb2RhbCgpXCJcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBweS00IHRleHQtd2hpdGUgcm91bmRlZC0yeGwgZm9udC1ib2xkIGFjdGl2ZTpzY2FsZS1bMC45OF0gdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTMgc2hhZG93LWxnIGJ0bi1wcmltYXJ5LWN1c3RvbVwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3ZhcigtLXByaW1hcnkpJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0xvYWRpbmdCdG5cIj57eyBhY3Rpb25CdXR0b25UZXh0IH19PC9zcGFuPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdCdG5cIj5cbiAgICAgICAgICAgIDxzcGFuPlByb2Nlc3NhbmRvPC9zcGFuPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlLW5vdGNoIGZhLXNwaW5cIj48L2k+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dCdG5cIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZU1vZGFsKClcIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB5LTIgdGV4dC1ncmF5LTUwMCBmb250LXNlbWlib2xkIGhvdmVyOnRleHQtZ3JheS04MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY2xvc2VCdXR0b25UZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLW1vZGFsL2N1c3RvbS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1tb2RhbC9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7OztBQVd2QixNQUFNLE9BQU8sb0JBQW9CO0lBMEIvQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBekI3QixZQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3hCLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLG9CQUFlLEdBQUcsUUFBUSxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUE0QixJQUFJLENBQUM7UUFDOUMsaUJBQVksR0FBUSxJQUFJLENBQUM7UUFFeEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV4QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGlCQUFZLEdBQVcscUJBQXFCLENBQUM7UUFDN0MsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGdCQUFXLEdBQVcsMkNBQTJDLENBQUM7UUFFbEUsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFdEMsd0JBQXdCO1FBQ3hC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QUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBbUdOLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nOyAvLyBJbXBvcnRhw6fDo28gY29ycmV0YVxuXG50eXBlIE1vZGFsVHlwZSA9ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnd2FybmluZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1jdXN0b20tbW9kYWwnLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1tb2RhbC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbW9kYWxJZCA9ICdjdXN0b21Nb2RhbCc7XG4gIEBJbnB1dCgpIHRpdGxlID0gJ0F2aXNvJztcbiAgQElucHV0KCkgbWVzc2FnZSA9ICcnO1xuICBASW5wdXQoKSBjbG9zZUJ1dHRvblRleHQgPSAnRmVjaGFyJztcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uVGV4dCA9ICcnO1xuICBASW5wdXQoKSBwYXltZW50TWV0aG9kOiAncGl4JyB8ICdjcmVkaXQnIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGVycm9yRGV0YWlsczogYW55ID0gbnVsbDtcblxuICBAT3V0cHV0KCkgbW9kYWxDbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBtb2RhbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBASW5wdXQoKSBzaG93TW9kYWwgPSBmYWxzZTtcbiAgQElucHV0KCkgbWVzc2FnZVRpdGxlOiBzdHJpbmcgPSAnUGFnYW1lbnRvIEFwcm92YWRvISc7XG4gIEBJbnB1dCgpIHNob3dCdG4gPSB0cnVlO1xuICBASW5wdXQoKSBwcmljZU5lZ290aWF0ZWQgPSAwO1xuICBASW5wdXQoKSBtZXNzYWdlQm9keTogc3RyaW5nID0gJ1NldSBwYWdhbWVudG8gZm9pIHByb2Nlc3NhZG8gY29tIHN1Y2Vzc28uJztcbiAgQElucHV0KCkgaXNMb2FkaW5nQnRuOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBkaXNhYmxlZEJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIENvbmZpZ3VyYcOnw6NvIGRpbsOibWljYVxuICBtb2RhbEljb246IHN0cmluZyA9ICdmYS1jaGVjayc7XG4gIG1vZGFsSWNvbkNvbG9yOiBzdHJpbmcgPSAndGV4dC1ncmVlbi02MDAnO1xuICBtb2RhbEJnQ29sb3I6IHN0cmluZyA9ICdiZy1ncmVlbi0xMDAnO1xuICBpc0Nsb3NpbmcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgLy8gQ2VudHJhbGl6YSBhIGFiZXJ0dXJhIGRvIG1vZGFsIGNvbSBzdXBvcnRlIGFvIGJvdMOjbyB2b2x0YXJcbiAgb3Blbk1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd01vZGFsID0gdHJ1ZTtcbiAgICAvLyBBZGljaW9uYSB1bSBlc3RhZG8gbm8gaGlzdMOzcmljbyBwYXJhIG8gYm90w6NvIHZvbHRhciBmdW5jaW9uYXJcbiAgICB0aGlzLmxvY2F0aW9uLmdvKHRoaXMubG9jYXRpb24ucGF0aCgpICsgJyNtb2RhbE9wZW4nKTtcbiAgfVxuXG4gIC8vIEF0YWxobyBwYXJhIGFicmlyIGNvbSB0aXBvcyBlc3BlY8OtZmljb3NcbiAgb3BlbihcbiAgICB0eXBlOiBNb2RhbFR5cGUsXG4gICAgbWVzc2FnZTogc3RyaW5nID0gJycsXG4gICAgcGF5bWVudE1ldGhvZD86ICdwaXgnIHwgJ2NyZWRpdCdcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWd1cmVNb2RhbCh0eXBlLCBtZXNzYWdlKTtcbiAgICBpZiAocGF5bWVudE1ldGhvZCkge1xuICAgICAgdGhpcy5wYXltZW50TWV0aG9kID0gcGF5bWVudE1ldGhvZDtcbiAgICB9XG4gICAgdGhpcy5vcGVuTW9kYWwoKTtcbiAgfVxuXG4gIGNvbmZpZ3VyZU1vZGFsKHR5cGU6IE1vZGFsVHlwZSwgbWVzc2FnZTogc3RyaW5nID0gJycpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICB0aGlzLnNldFN1Y2Nlc3NTdHlsZXMobWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICB0aGlzLnNldEVycm9yU3R5bGVzKG1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICB0aGlzLnNldFdhcm5pbmdTdHlsZXMobWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0U3VjY2Vzc1N0eWxlcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsSWNvbiA9ICdmYS1jaGVjay1jaXJjbGUnO1xuICAgIHRoaXMubW9kYWxJY29uQ29sb3IgPSAnbW9kYWwtaWNvbi1zdWNjZXNzJztcbiAgICB0aGlzLm1vZGFsQmdDb2xvciA9ICdtb2RhbC1iZy1zdWNjZXNzJztcbiAgICB0aGlzLm1lc3NhZ2VUaXRsZSA9ICdTdWNlc3NvISc7XG4gICAgdGhpcy5tZXNzYWdlQm9keSA9IG1lc3NhZ2UgfHwgJ09wZXJhw6fDo28gcmVhbGl6YWRhIGNvbSBzdWNlc3NvLic7XG4gIH1cblxuICBwcml2YXRlIHNldEVycm9yU3R5bGVzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxJY29uID0gJ2ZhLXRpbWVzLWNpcmNsZSc7XG4gICAgdGhpcy5tb2RhbEljb25Db2xvciA9ICdtb2RhbC1pY29uLWVycm9yJztcbiAgICB0aGlzLm1vZGFsQmdDb2xvciA9ICdtb2RhbC1iZy1lcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlVGl0bGUgPSAnT3BzISBBbGdvIGRldSBlcnJhZG8nO1xuICAgIHRoaXMubWVzc2FnZUJvZHkgPSBtZXNzYWdlIHx8ICdOw6NvIGNvbnNlZ3VpbW9zIHByb2Nlc3NhciBzdWEgc29saWNpdGHDp8Ojby4nO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRXYXJuaW5nU3R5bGVzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxJY29uID0gJ2ZhLWV4Y2xhbWF0aW9uLWNpcmNsZSc7XG4gICAgdGhpcy5tb2RhbEljb25Db2xvciA9ICdtb2RhbC1pY29uLXdhcm5pbmcnO1xuICAgIHRoaXMubW9kYWxCZ0NvbG9yID0gJ21vZGFsLWJnLXdhcm5pbmcnO1xuICAgIHRoaXMubWVzc2FnZVRpdGxlID0gJ0F0ZW7Dp8Ojbyc7XG4gICAgdGhpcy5tZXNzYWdlQm9keSA9IG1lc3NhZ2UgfHwgJ1ZlcmlmaXF1ZSBvcyBkYWRvcyBhbnRlcyBkZSBjb250aW51YXIuJztcbiAgfVxuXG4gIGFjdGlvbk1vZGFsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0J0biAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZ0J0biA9IHRydWU7XG4gICAgICB0aGlzLm1vZGFsQWN0aW9uLmVtaXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb2RhbEFjdGlvbi5lbWl0KCk7XG4gICAgICB0aGlzLmlzTG9hZGluZ0J0biA9IGZhbHNlO1xuICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7IC8vIFVzYSBvIG3DqXRvZG8gZGUgZmVjaGFyIHBhcmEgbGltcGFyIG8gaGlzdMOzcmljb1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0Nsb3NpbmcgPSB0cnVlOyAvLyBBdGl2YSBhIGFuaW1hw6fDo28gZGUgZGVzY2lkYVxuXG4gICAgLy8gQWd1YXJkYSBvIHRlbXBvIGRhIGFuaW1hw6fDo28gKDMwMG1zKSBhbnRlcyBkZSByZW1vdmVyIGRvIERPTVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93TW9kYWwgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNDbG9zaW5nID0gZmFsc2U7IC8vIFJlc2V0YSBwYXJhIGEgcHLDs3hpbWEgYWJlcnR1cmFcbiAgICAgIHRoaXMubW9kYWxDbG9zZWQuZW1pdCgpO1xuXG4gICAgICAvLyBMw7NnaWNhIGRvIGhpc3TDs3JpY28gcXVlIGrDoSBmaXplbW9zXG4gICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2ggPT09ICcjbW9kYWxPcGVuJykge1xuICAgICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHRoaXMubG9jYXRpb24ucGF0aCgpLnNwbGl0KCcjJylbMF07XG4gICAgICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGN1cnJlbnRQYXRoKTtcbiAgICAgIH1cbiAgICB9LCAzMDApO1xuICB9XG4gIC8vIEVzY3V0YSBvIGJvdMOjbyB2b2x0YXIgZG8gbmF2ZWdhZG9yIG91IGNlbHVsYXJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnBvcHN0YXRlJylcbiAgb25Qb3BTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaG93TW9kYWwpIHtcbiAgICAgIHRoaXMuc2hvd01vZGFsID0gZmFsc2U7XG4gICAgICB0aGlzLm1vZGFsQ2xvc2VkLmVtaXQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCJzaG93TW9kYWxcIlxuICBjbGFzcz1cIm1vZGFsLW92ZXJsYXktZml4ZWRcIlxuICBbbmdDbGFzc109XCJ7ICdvdmVybGF5LWhpZGUnOiBpc0Nsb3NpbmcgfVwiXG4gIChjbGljayk9XCJjbG9zZU1vZGFsKClcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJiZy13aGl0ZSB3LWZ1bGwgbWF4LXctMnhsIHJvdW5kZWQtdC1bMi41cmVtXSBwLTYgc2hhZG93LTJ4bCBib3JkZXItdCBib3JkZXItZ3JheS0xMDAgZmxleCBmbGV4LWNvbFwiXG4gICAgW25nQ2xhc3NdPVwiaXNDbG9zaW5nID8gJ2FuaW1hdGUtc2xpZGUtZG93bicgOiAnYW5pbWF0ZS1zbGlkZS11cCdcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHktNCAtbXQtMiBjdXJzb3ItcG9pbnRlciBmbGV4IGp1c3RpZnktY2VudGVyXCJcbiAgICAgIChjbGljayk9XCJjbG9zZU1vZGFsKClcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTEyIGgtMS41IGJnLWdyYXktMjAwIHJvdW5kZWQtZnVsbFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgbWItNFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2NsYXNzXT1cIm1vZGFsQmdDb2xvclwiXG4gICAgICAgICAgY2xhc3M9XCJ3LTIwIGgtMjAgcm91bmRlZC1mdWxsIG9wYWNpdHktNDBcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIFtjbGFzc109XCJtb2RhbEljb24gKyAnICcgKyBtb2RhbEljb25Db2xvclwiXG4gICAgICAgICAgICBjbGFzcz1cImZhcyB0ZXh0LTN4bFwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGgyIGNsYXNzPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgbWItMlwiPnt7IG1lc3NhZ2VUaXRsZSB9fTwvaDI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbW9kYWwtc2Nyb2xsLWFyZWEgcHgtMiBjdXN0b20tc2Nyb2xsYmFyXCI+XG4gICAgICAgIDxwICpuZ0lmPVwibWVzc2FnZUJvZHlcIiBjbGFzcz1cInRleHQtZ3JheS02MDAgbWItNFwiPnt7IG1lc3NhZ2VCb2R5IH19PC9wPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1keW5hbWljLWNvbnRlbnQgdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW29wdGlvbmFsLWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJlcnJvckRldGFpbHNcIlxuICAgICAgICAgIGNsYXNzPVwibXQtNCBwLTQgYmctcmVkLTUwIHJvdW5kZWQtMnhsIHRleHQtbGVmdCBib3JkZXIgYm9yZGVyLXJlZC0xMDBcIlxuICAgICAgICA+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LVsxMHB4XSBmb250LWJvbGQgdGV4dC1yZWQtNzAwIHVwcGVyY2FzZSBtYi0xXCI+XG4gICAgICAgICAgICBMb2cgZG8gc2lzdGVtYTpcbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHByZSBjbGFzcz1cInRleHQtWzExcHhdIHRleHQtcmVkLTYwMCBmb250LW1vbm8gd2hpdGVzcGFjZS1wcmUtd3JhcFwiPnt7XG4gICAgICAgICAgICBlcnJvckRldGFpbHMgfCBqc29uXG4gICAgICAgICAgfX08L3ByZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm10LTYgZmxleCBmbGV4LWNvbCB3LWZ1bGwgZ2FwLTMgcGItNFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgZGlzYWJsZWRCdG4gfHxcbiAgICAgICAgICAgIChwcmljZU5lZ290aWF0ZWQgPD0gMCAmJiBhY3Rpb25CdXR0b25UZXh0ID09PSAnTmVnb2NpYXInKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgKm5nSWY9XCJhY3Rpb25CdXR0b25UZXh0XCJcbiAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uTW9kYWwoKVwiXG4gICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHktNCB0ZXh0LXdoaXRlIHJvdW5kZWQtMnhsIGZvbnQtYm9sZCBhY3RpdmU6c2NhbGUtWzAuOThdIHRyYW5zaXRpb24tYWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0zIHNoYWRvdy1sZyBidG4tcHJpbWFyeS1jdXN0b21cIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIid2YXIoLS1wcmltYXJ5KSdcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNMb2FkaW5nQnRuXCI+e3sgYWN0aW9uQnV0dG9uVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkaW5nQnRuXCI+XG4gICAgICAgICAgICA8c3Bhbj5Qcm9jZXNzYW5kbzwvc3Bhbj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNpcmNsZS1ub3RjaCBmYS1zcGluXCI+PC9pPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93QnRuXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCJcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBweS0yIHRleHQtZ3JheS01MDAgZm9udC1zZW1pYm9sZCBob3Zlcjp0ZXh0LWdyYXktODAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNsb3NlQnV0dG9uVGV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -60,24 +60,28 @@ export class NavComponent {
60
60
  onWindowScroll() {
61
61
  const scroll = window.pageYOffset || document.documentElement.scrollTop;
62
62
  const isScrollingDown = scroll > this.lastScrollPosition;
63
- /* =========================
64
- * VISIBILIDADE
65
- * ========================= */
66
- if (scroll <= 10) {
67
- // TOPO
68
- this.isHeaderVisible = !isScrollingDown;
69
- }
70
- else if (isScrollingDown && scroll > 50) {
71
- // SCROLL DOWN
72
- this.isHeaderVisible = false;
63
+ // --- REGRA DE VISIBILIDADE ---
64
+ if (this.allowTransparency) {
65
+ // Comportamento especial para Showcase (sua regra atual)
66
+ if (scroll <= 10) {
67
+ // No topo: fica invisível (se você quer que suma ao chegar no topo,
68
+ // isHeaderVisible deve ser false ou a cor deve ser transparente)
69
+ this.isHeaderVisible = !isScrollingDown;
70
+ }
71
+ else if (isScrollingDown && scroll > 50) {
72
+ // Scroll Down: esconde
73
+ this.isHeaderVisible = false;
74
+ }
75
+ else {
76
+ // Scroll Up: mostra
77
+ this.isHeaderVisible = true;
78
+ }
73
79
  }
74
80
  else {
75
- // SCROLL UP
81
+ // REGRA PARA DEMAIS COMPONENTES: Sempre visível
76
82
  this.isHeaderVisible = true;
77
83
  }
78
- /* =========================
79
- * COR
80
- * ========================= */
84
+ // --- REGRA DE COR (Mantida) ---
81
85
  if (!this.allowTransparency) {
82
86
  this.changeNavColor = true;
83
87
  }
@@ -99,4 +103,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
99
103
  type: HostListener,
100
104
  args: ['window:scroll', []]
101
105
  }] } });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbmF2L25hdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL25hdi9uYXYuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEdBR2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFPN0MsTUFBTSxPQUFPLFlBQVk7SUFjdkIsWUFDVSxNQUFjLEVBQ2QsY0FBOEIsRUFDOUIsRUFBYztRQUZkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQWhCeEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFaEMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBRXJCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN2QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBT3hCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNmLElBQUksQ0FDSCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMs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QVksNElDZnpCLDJvQ0FvQ0E7MkZEckJhLFlBQVk7a0JBTHhCLFNBQVM7K0JBQ0UsU0FBUzttSkEwRG5CLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlO2dCQW1CN0IsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW5hdicsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXYuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uYXYuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBOYXZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjaGFuZ2VOYXZDb2xvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIG9wZW5DbG9zZTogYm9vbGVhbiA9IGZhbHNlO1xuICBtZXNzYWdlOiBzdHJpbmcgPSAnJztcblxuICBsYXN0U2Nyb2xsUG9zaXRpb24gPSAwO1xuICBpc0hlYWRlclZpc2libGUgPSB0cnVlO1xuICBoZWFkZXJIZWlnaHQgPSAwO1xuICBpc01vYmlsZSA9IGZhbHNlO1xuXG4gIGhhc09mZmVyOiBib29sZWFuID0gZmFsc2U7XG4gIGFsbG93VHJhbnNwYXJlbmN5ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmFjdGl2YXRlZFJvdXRlKSxcbiAgICAgICAgbWFwKChyb3V0ZSkgPT4ge1xuICAgICAgICAgIHdoaWxlIChyb3V0ZS5maXJzdENoaWxkKSByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgcmV0dXJuIHJvdXRlO1xuICAgICAgICB9KSxcbiAgICAgICAgbWVyZ2VNYXAoKHJvdXRlKSA9PiByb3V0ZS5kYXRhKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLmFsbG93VHJhbnNwYXJlbmN5ID0gISFkYXRhWyd0cmFuc3BhcmVudE5hdiddO1xuXG4gICAgICAgIHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uID0gMDtcblxuICAgICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRydWU7IC8vIGZvcsOnYSBhcGFyZWNlciBubyBsb2FkXG4gICAgICAgIHRoaXMuY2hhbmdlTmF2Q29sb3IgPSAhdGhpcy5hbGxvd1RyYW5zcGFyZW5jeTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2hlY2tNb2JpbGUoKTtcblxuICAgIC8vIE9idMOpbSBhIGFsdHVyYSBkbyBoZWFkZXItbWVudSBhcMOzcyBhIHZpZXcgc2VyIGluaWNpYWxpemFkYVxuICAgIGNvbnN0IGhlYWRlck1lbnUgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW2hlYWRlci1tZW51XScpO1xuICAgIGlmIChoZWFkZXJNZW51KSB7XG4gICAgICB0aGlzLmhlYWRlckhlaWdodCA9IGhlYWRlck1lbnUub2Zmc2V0SGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFzT2ZmZXIgPSB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJ29mZmVyJyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgb25SZXNpemUoKSB7XG4gICAgdGhpcy5jaGVja01vYmlsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja01vYmlsZSgpIHtcbiAgICB0aGlzLmlzTW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCA3Njg7IC8vIDc2OHB4IMOpIG8gYnJlYWtwb2ludCBwYWRyw6NvIGRvIFRhaWx3aW5kIHBhcmEgbWRcbiAgICBpZiAoIXRoaXMuaXNNb2JpbGUpIHtcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTsgLy8gR2FyYW50ZSBxdWUgZmlxdWUgdmlzw612ZWwgZW0gZGVza3RvcFxuICAgIH1cbiAgfVxuICBwdWJsaWMgbWVudSgpIHtcbiAgICB0aGlzLm9wZW5DbG9zZSA9ICF0aGlzLm9wZW5DbG9zZTtcbiAgfVxuXG4gIHJlY2VpdmVNZXNzYWdlKGV2ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBldmVudDtcbiAgfVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgW10pXG4gIG9uV2luZG93U2Nyb2xsKCkge1xuICAgIGNvbnN0IHNjcm9sbCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgY29uc3QgaXNTY3JvbGxpbmdEb3duID0gc2Nyb2xsID4gdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb247XG5cbiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICogVklTSUJJTElEQURFXG4gICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4gICAgaWYgKHNjcm9sbCA8PSAxMCkge1xuICAgICAgLy8gVE9QT1xuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSAhaXNTY3JvbGxpbmdEb3duO1xuICAgIH0gZWxzZSBpZiAoaXNTY3JvbGxpbmdEb3duICYmIHNjcm9sbCA+IDUwKSB7XG4gICAgICAvLyBTQ1JPTEwgRE9XTlxuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU0NST0xMIFVQXG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAqIENPUlxuICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbiAgICBpZiAoIXRoaXMuYWxsb3dUcmFuc3BhcmVuY3kpIHtcbiAgICAgIHRoaXMuY2hhbmdlTmF2Q29sb3IgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoYW5nZU5hdkNvbG9yID0gc2Nyb2xsID4gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGw7XG4gIH1cbn1cbiIsIjwhLS0gT3ZlcmxheSAtLT5cbjxkaXZcbiAgKm5nSWY9XCJvcGVuQ2xvc2VcIlxuICAoY2xpY2spPVwib3BlbkNsb3NlID0gZmFsc2VcIlxuICBjbGFzcz1cImZpeGVkIGluc2V0LTAgYmctYmxhY2sgYmctb3BhY2l0eS00MCB6LTQwIG1kOmhpZGRlblwiXG4+PC9kaXY+XG5cbjxkaXZcbiAgY2xhc3M9XCJmaXhlZCB0b3AtMCBsZWZ0LTAgcmlnaHQtMCB6LTUwIHNoYWRvdy1ub25lIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMCB3LWZ1bGxcIlxuICBbY2xhc3MuLXRyYW5zbGF0ZS15LWZ1bGxdPVwiIWlzSGVhZGVyVmlzaWJsZVwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImNoYW5nZU5hdkNvbG9yID8gJ3ZhcigtLXByaW1hcnkpJyA6ICd0cmFuc3BhcmVudCdcIlxuPlxuICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cIm14LWF1dG8gcHgtMiBoLTE2IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPCEtLSBMZWZ0IENvbnRlbnQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIGZsZXgganVzdGlmeS1zdGFydFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGVmdC1jb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENlbnRlciBDb250ZW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMSBmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjZW50cmFsLWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUmlnaHQgQ29udGVudCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTFcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogZmxleC1lbmRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3JpZ2h0LWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gSGVhZGVyIE1lbnUgKFN1Ym1lbnUpIC0tPlxuICA8ZGl2IGhlYWRlci1tZW51IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hlYWRlci1tZW51XVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbmF2L25hdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL25hdi9uYXYuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEdBR2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFPN0MsTUFBTSxPQUFPLFlBQVk7SUFjdkIsWUFDVSxNQUFjLEVBQ2QsY0FBOEIsRUFDOUIsRUFBYztRQUZkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQWhCeEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFaEMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBRXJCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN2QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBT3hCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNmLElBQUksQ0FDSCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMs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QUksQ0FBQztTQUM1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ25DO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztJQUNuQyxDQUFDOzt5R0F4R1UsWUFBWTs2RkFBWixZQUFZLDRJQ2Z6Qiwyb0NBb0NBOzJGRHJCYSxZQUFZO2tCQUx4QixTQUFTOytCQUNFLFNBQVM7bUpBMERuQixRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZTtnQkFvQjdCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1uYXYnLFxuICB0ZW1wbGF0ZVVybDogJy4vbmF2LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmF2LmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF2Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY2hhbmdlTmF2Q29sb3I6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBvcGVuQ2xvc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbWVzc2FnZTogc3RyaW5nID0gJyc7XG5cbiAgbGFzdFNjcm9sbFBvc2l0aW9uID0gMDtcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcbiAgaGVhZGVySGVpZ2h0ID0gMDtcbiAgaXNNb2JpbGUgPSBmYWxzZTtcblxuICBoYXNPZmZlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxvd1RyYW5zcGFyZW5jeSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZlxuICApIHtcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5hY3RpdmF0ZWRSb3V0ZSksXG4gICAgICAgIG1hcCgocm91dGUpID0+IHtcbiAgICAgICAgICB3aGlsZSAocm91dGUuZmlyc3RDaGlsZCkgcm91dGUgPSByb3V0ZS5maXJzdENoaWxkO1xuICAgICAgICAgIHJldHVybiByb3V0ZTtcbiAgICAgICAgfSksXG4gICAgICAgIG1lcmdlTWFwKChyb3V0ZSkgPT4gcm91dGUuZGF0YSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5hbGxvd1RyYW5zcGFyZW5jeSA9ICEhZGF0YVsndHJhbnNwYXJlbnROYXYnXTtcblxuICAgICAgICB0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiA9IDA7XG5cbiAgICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0cnVlOyAvLyBmb3LDp2EgYXBhcmVjZXIgbm8gbG9hZFxuICAgICAgICB0aGlzLmNoYW5nZU5hdkNvbG9yID0gIXRoaXMuYWxsb3dUcmFuc3BhcmVuY3k7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNoZWNrTW9iaWxlKCk7XG5cbiAgICAvLyBPYnTDqW0gYSBhbHR1cmEgZG8gaGVhZGVyLW1lbnUgYXDDs3MgYSB2aWV3IHNlciBpbmljaWFsaXphZGFcbiAgICBjb25zdCBoZWFkZXJNZW51ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1toZWFkZXItbWVudV0nKTtcbiAgICBpZiAoaGVhZGVyTWVudSkge1xuICAgICAgdGhpcy5oZWFkZXJIZWlnaHQgPSBoZWFkZXJNZW51Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhc09mZmVyID0gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCdvZmZlcicpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIG9uUmVzaXplKCkge1xuICAgIHRoaXMuY2hlY2tNb2JpbGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tNb2JpbGUoKSB7XG4gICAgdGhpcy5pc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4OyAvLyA3NjhweCDDqSBvIGJyZWFrcG9pbnQgcGFkcsOjbyBkbyBUYWlsd2luZCBwYXJhIG1kXG4gICAgaWYgKCF0aGlzLmlzTW9iaWxlKSB7XG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRydWU7IC8vIEdhcmFudGUgcXVlIGZpcXVlIHZpc8OtdmVsIGVtIGRlc2t0b3BcbiAgICB9XG4gIH1cbiAgcHVibGljIG1lbnUoKSB7XG4gICAgdGhpcy5vcGVuQ2xvc2UgPSAhdGhpcy5vcGVuQ2xvc2U7XG4gIH1cblxuICByZWNlaXZlTWVzc2FnZShldmVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gZXZlbnQ7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgW10pXG4gIG9uV2luZG93U2Nyb2xsKCkge1xuICAgIGNvbnN0IHNjcm9sbCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IGlzU2Nyb2xsaW5nRG93biA9IHNjcm9sbCA+IHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uO1xuXG4gICAgLy8gLS0tIFJFR1JBIERFIFZJU0lCSUxJREFERSAtLS1cbiAgICBpZiAodGhpcy5hbGxvd1RyYW5zcGFyZW5jeSkge1xuICAgICAgLy8gQ29tcG9ydGFtZW50byBlc3BlY2lhbCBwYXJhIFNob3djYXNlIChzdWEgcmVncmEgYXR1YWwpXG4gICAgICBpZiAoc2Nyb2xsIDw9IDEwKSB7XG4gICAgICAgIC8vIE5vIHRvcG86IGZpY2EgaW52aXPDrXZlbCAoc2Ugdm9jw6ogcXVlciBxdWUgc3VtYSBhbyBjaGVnYXIgbm8gdG9wbyxcbiAgICAgICAgLy8gaXNIZWFkZXJWaXNpYmxlIGRldmUgc2VyIGZhbHNlIG91IGEgY29yIGRldmUgc2VyIHRyYW5zcGFyZW50ZSlcbiAgICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSAhaXNTY3JvbGxpbmdEb3duO1xuICAgICAgfSBlbHNlIGlmIChpc1Njcm9sbGluZ0Rvd24gJiYgc2Nyb2xsID4gNTApIHtcbiAgICAgICAgLy8gU2Nyb2xsIERvd246IGVzY29uZGVcbiAgICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNjcm9sbCBVcDogbW9zdHJhXG4gICAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUkVHUkEgUEFSQSBERU1BSVMgQ09NUE9ORU5URVM6IFNlbXByZSB2aXPDrXZlbFxuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIC0tLSBSRUdSQSBERSBDT1IgKE1hbnRpZGEpIC0tLVxuICAgIGlmICghdGhpcy5hbGxvd1RyYW5zcGFyZW5jeSkge1xuICAgICAgdGhpcy5jaGFuZ2VOYXZDb2xvciA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhbmdlTmF2Q29sb3IgPSBzY3JvbGwgPiAyMDtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbDtcbiAgfVxufVxuIiwiPCEtLSBPdmVybGF5IC0tPlxuPGRpdlxuICAqbmdJZj1cIm9wZW5DbG9zZVwiXG4gIChjbGljayk9XCJvcGVuQ2xvc2UgPSBmYWxzZVwiXG4gIGNsYXNzPVwiZml4ZWQgaW5zZXQtMCBiZy1ibGFjayBiZy1vcGFjaXR5LTQwIHotNDAgbWQ6aGlkZGVuXCJcbj48L2Rpdj5cblxuPGRpdlxuICBjbGFzcz1cImZpeGVkIHRvcC0wIGxlZnQtMCByaWdodC0wIHotNTAgc2hhZG93LW5vbmUgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwIHctZnVsbFwiXG4gIFtjbGFzcy4tdHJhbnNsYXRlLXktZnVsbF09XCIhaXNIZWFkZXJWaXNpYmxlXCJcbiAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiY2hhbmdlTmF2Q29sb3IgPyAndmFyKC0tcHJpbWFyeSknIDogJ3RyYW5zcGFyZW50J1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtYXV0byBweC0yIGgtMTYgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICA8IS0tIExlZnQgQ29udGVudCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgZmxleCBqdXN0aWZ5LXN0YXJ0XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltsZWZ0LWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ2VudGVyIENvbnRlbnQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIGZsZXgganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NlbnRyYWwtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBSaWdodCBDb250ZW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcmlnaHQtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBIZWFkZXIgTWVudSAoU3VibWVudSkgLS0+XG4gIDxkaXYgaGVhZGVyLW1lbnUgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaGVhZGVyLW1lbnVdXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -117,6 +117,7 @@ class CustomModalComponent {
117
117
  this.showBtn = true;
118
118
  this.priceNegotiated = 0;
119
119
  this.messageBody = 'Seu pagamento foi processado com sucesso.';
120
+ this.disabledBtn = false;
120
121
  // Configuração dinâmica
121
122
  this.modalIcon = 'fa-check';
122
123
  this.modalIconColor = 'text-green-600';
@@ -206,10 +207,10 @@ class CustomModalComponent {
206
207
  }
207
208
  }
208
209
  CustomModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, deps: [{ token: i1$1.Location }], target: i0.ɵɵFactoryTarget.Component });
209
- 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" }, 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)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.JsonPipe, name: "json" }] });
210
+ 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" }, 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)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"\n disabledBtn ||\n (priceNegotiated <= 0 && actionButtonText === 'Negociar')\n \"\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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.JsonPipe, name: "json" }] });
210
211
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, decorators: [{
211
212
  type: Component,
212
- args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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"] }]
213
+ args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"\n disabledBtn ||\n (priceNegotiated <= 0 && actionButtonText === 'Negociar')\n \"\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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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"] }]
213
214
  }], ctorParameters: function () { return [{ type: i1$1.Location }]; }, propDecorators: { modalId: [{
214
215
  type: Input
215
216
  }], title: [{
@@ -240,6 +241,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
240
241
  type: Input
241
242
  }], isLoadingBtn: [{
242
243
  type: Input
244
+ }], disabledBtn: [{
245
+ type: Input
243
246
  }], onPopState: [{
244
247
  type: HostListener,
245
248
  args: ['window:popstate']
@@ -429,24 +432,28 @@ class NavComponent {
429
432
  onWindowScroll() {
430
433
  const scroll = window.pageYOffset || document.documentElement.scrollTop;
431
434
  const isScrollingDown = scroll > this.lastScrollPosition;
432
- /* =========================
433
- * VISIBILIDADE
434
- * ========================= */
435
- if (scroll <= 10) {
436
- // TOPO
437
- this.isHeaderVisible = !isScrollingDown;
438
- }
439
- else if (isScrollingDown && scroll > 50) {
440
- // SCROLL DOWN
441
- this.isHeaderVisible = false;
435
+ // --- REGRA DE VISIBILIDADE ---
436
+ if (this.allowTransparency) {
437
+ // Comportamento especial para Showcase (sua regra atual)
438
+ if (scroll <= 10) {
439
+ // No topo: fica invisível (se você quer que suma ao chegar no topo,
440
+ // isHeaderVisible deve ser false ou a cor deve ser transparente)
441
+ this.isHeaderVisible = !isScrollingDown;
442
+ }
443
+ else if (isScrollingDown && scroll > 50) {
444
+ // Scroll Down: esconde
445
+ this.isHeaderVisible = false;
446
+ }
447
+ else {
448
+ // Scroll Up: mostra
449
+ this.isHeaderVisible = true;
450
+ }
442
451
  }
443
452
  else {
444
- // SCROLL UP
453
+ // REGRA PARA DEMAIS COMPONENTES: Sempre visível
445
454
  this.isHeaderVisible = true;
446
455
  }
447
- /* =========================
448
- * COR
449
- * ========================= */
456
+ // --- REGRA DE COR (Mantida) ---
450
457
  if (!this.allowTransparency) {
451
458
  this.changeNavColor = true;
452
459
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.html","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.ts","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.html","../../../projects/tudu-components/src/lib/components/fallback-message/fallback-message.component.ts","../../../projects/tudu-components/src/lib/components/fallback-message/fallback-message.component.html","../../../projects/tudu-components/src/lib/components/nav/nav.component.ts","../../../projects/tudu-components/src/lib/components/nav/nav.component.html","../../../projects/tudu-components/src/lib/tudu-components.module.ts","../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-tudu-components',\n template: `\n <p>\n tudu-components works!sss\n </p>\n `,\n styles: [\n ]\n})\nexport class TuduComponentsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent implements OnInit {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0; // 1 para serviço, 2 para candidatura\n @Input() hideHeader: boolean = false; // 1 para serviço, 2 para candidatura\n\n tags: string[] = ['Residencial', 'Urgente', 'Elétrica'];\n\n statusOptions = [\n { class: 'status-active', text: 'Ativo', icon: 'fa-circle' },\n { class: 'status-pending', text: 'Em andamento', icon: 'fa-spinner' },\n { class: 'status-completed', text: 'Concluído', icon: 'fa-check' },\n { class: 'status-cancelled', text: 'Cancelado', icon: 'fa-times' },\n ];\n\n currentStatus = this.statusOptions[0];\n private statusInterval: any;\n flowIndicator: string = '1';\n\n constructor(private route: Router) {\n this.route.events.subscribe(() => {\n if (this.route.url.includes('budgets')) {\n this.flowIndicator = 'budgets';\n console.log('asdasdadsasda', this.flowIndicator);\n }\n });\n }\n\n ngOnInit() {\n let index = 0;\n this.statusInterval = setInterval(() => {\n index = (index + 1) % this.statusOptions.length;\n this.currentStatus = this.statusOptions[index];\n }, 3000);\n\n console.log('cardTemplateIndicator', this.cardTemplateIndicator);\n }\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: '#4caf5020', color: '#4caf50' }; // verde suave\n case 'concluido':\n return { backgroundColor: '#0096881c', color: '#009688' }; // teal\n case 'cancelado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'publicado':\n return { backgroundColor: '#0096ff1c', color: '#25a5ff' }; // azul suave\n case 'recusado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'em negociacao':\n return { backgroundColor: '#ffab251f', color: '#ff9800' }; // laranja suave\n case 'pendente':\n return { backgroundColor: '#9a1fad1c', color: '#7e57c2' }; // roxo claro\n default:\n return { backgroundColor: '#e0e0e01c', color: '#757575' }; // cinza padrão\n }\n }\n\n ngOnDestroy() {\n if (this.statusInterval) {\n clearInterval(this.statusInterval);\n }\n }\n\n verDetalhes() {\n alert('Abrir detalhes do serviço...');\n }\n}\n","<div\n class=\"service-card rounded-xl shadow-md overflow-hidden bg-white hover:shadow-lg transition-all duration-300 relative mb-5\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"service-card-header flex items-center justify-between p-3 border-b border-gray-200\"\n >\n <div class=\"flex items-center gap-3 w-full min-w-0\">\n <div class=\"icon-style flex-shrink-0\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center gap-3 w-full min-w-0\">\n <div class=\"service-title truncate flex-1 min-w-0\">\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate w-full\"\n style=\"\n font-size: 12px;\n color: var(--tab-link);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n \"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"service-card-body p-4 space-y-3\">\n <div>\n <div\n class=\"flex flex-col items-start gap-3 border-b border-gray-100 pb-3 mb-3\"\n *ngIf=\"cardTemplateIndicator === 1\"\n >\n <div class=\"flex justify-between w-full pb-2\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n\n <div\n class=\"text-xs text-gray-50 font-semibold\"\n style=\"\n background-color: #d3d3d32c;\n color: grey;\n border-radius: 25px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px 10px;\n \"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-2 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div class=\"fw-semibold\" *ngIf=\"statusPedido === 'finalizado'\">\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n </div>\n <ng-content select=\"[info-row]\"></ng-content>\n\n <ng-content select=\"[description]\"></ng-content>\n </div>\n\n <div\n class=\"service-card-footer flex justify-center items-center p-3 border-t border-gray-100 bg-gray-50 gap-1\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div\n class=\"fw-semibold col-6\"\n style=\"display: flex; justify-content: flex-end\"\n >\n <ng-content select=\"[price]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Location } from '@angular/common'; // Importação correta\n\ntype ModalType = 'success' | 'error' | 'warning';\n\n@Component({\n selector: 'lib-custom-modal',\n standalone: false,\n templateUrl: './custom-modal.component.html',\n styleUrls: ['./custom-modal.component.css'],\n})\nexport class CustomModalComponent implements OnInit {\n @Input() modalId = 'customModal';\n @Input() title = 'Aviso';\n @Input() message = '';\n @Input() closeButtonText = 'Fechar';\n @Input() actionButtonText = '';\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\n @Input() errorDetails: any = null;\n\n @Output() modalClosed = new EventEmitter<void>();\n @Output() modalAction = new EventEmitter<void>();\n\n @Input() showModal = false;\n @Input() messageTitle: string = 'Pagamento Aprovado!';\n @Input() showBtn = true;\n @Input() priceNegotiated = 0;\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\n @Input() isLoadingBtn: boolean | undefined;\n\n // Configuração dinâmica\n modalIcon: string = 'fa-check';\n modalIconColor: string = 'text-green-600';\n modalBgColor: string = 'bg-green-100';\n isClosing = false;\n\n constructor(private location: Location) {}\n\n ngOnInit(): void {}\n\n // Centraliza a abertura do modal com suporte ao botão voltar\n openModal(): void {\n this.showModal = true;\n // Adiciona um estado no histórico para o botão voltar funcionar\n this.location.go(this.location.path() + '#modalOpen');\n }\n\n // Atalho para abrir com tipos específicos\n open(\n type: ModalType,\n message: string = '',\n paymentMethod?: 'pix' | 'credit'\n ): void {\n this.configureModal(type, message);\n if (paymentMethod) {\n this.paymentMethod = paymentMethod;\n }\n this.openModal();\n }\n\n configureModal(type: ModalType, message: string = ''): void {\n switch (type) {\n case 'success':\n this.setSuccessStyles(message);\n break;\n case 'error':\n this.setErrorStyles(message);\n break;\n case 'warning':\n this.setWarningStyles(message);\n break;\n }\n }\n\n private setSuccessStyles(message: string): void {\n this.modalIcon = 'fa-check-circle';\n this.modalIconColor = 'modal-icon-success';\n this.modalBgColor = 'modal-bg-success';\n this.messageTitle = 'Sucesso!';\n this.messageBody = message || 'Operação realizada com sucesso.';\n }\n\n private setErrorStyles(message: string): void {\n this.modalIcon = 'fa-times-circle';\n this.modalIconColor = 'modal-icon-error';\n this.modalBgColor = 'modal-bg-error';\n this.messageTitle = 'Ops! Algo deu errado';\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\n }\n\n private setWarningStyles(message: string): void {\n this.modalIcon = 'fa-exclamation-circle';\n this.modalIconColor = 'modal-icon-warning';\n this.modalBgColor = 'modal-bg-warning';\n this.messageTitle = 'Atenção';\n this.messageBody = message || 'Verifique os dados antes de continuar.';\n }\n\n actionModal(): void {\n if (this.isLoadingBtn !== undefined) {\n this.isLoadingBtn = true;\n this.modalAction.emit();\n } else {\n this.modalAction.emit();\n this.isLoadingBtn = false;\n this.closeModal(); // Usa o método de fechar para limpar o histórico\n }\n }\n\n closeModal(): void {\n this.isClosing = true; // Ativa a animação de descida\n\n // Aguarda o tempo da animação (300ms) antes de remover do DOM\n setTimeout(() => {\n this.showModal = false;\n this.isClosing = false; // Reseta para a próxima abertura\n this.modalClosed.emit();\n\n // Lógica do histórico que já fizemos\n if (window.location.hash === '#modalOpen') {\n const currentPath = this.location.path().split('#')[0];\n this.location.replaceState(currentPath);\n }\n }, 300);\n }\n // Escuta o botão voltar do navegador ou celular\n @HostListener('window:popstate')\n onPopState(): void {\n if (this.showModal) {\n this.showModal = false;\n this.modalClosed.emit();\n }\n }\n}\n","<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\ninterface EmptyStateConfig {\n title: string;\n description: string;\n icon: string;\n iconColor: string;\n bgColor: string;\n primaryActionText?: string;\n secondaryActionText?: string;\n}\n\n@Component({\n selector: 'lib-fallback-message',\n templateUrl: './fallback-message.component.html',\n styleUrls: ['./fallback-message.component.css'],\n})\nexport class FallbackMessageComponent {\n @Input() card: any[] = [];\n @Input() statusPedido: string = '';\n @Input() customTitle?: string;\n @Input() customDescription?: string;\n @Input() primaryActionText?: string;\n @Input() secondaryActionText?: string;\n @Input() hideBtn?: boolean = false;\n\n @Output() primaryAction = new EventEmitter<void>();\n @Output() secondaryAction = new EventEmitter<void>();\n\n get emptyStateConfig(): EmptyStateConfig {\n // Se não há propostas\n // if (this.card.length === 0) {\n // return {\n // title: 'Nenhuma Proposta',\n // description:\n // 'Você ainda não possui negociações ou propostas recebidas.',\n // icon: '📄',\n // iconColor: 'text-gray-500',\n // bgColor: 'bg-gray-100',\n // primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n // secondaryActionText: this.secondaryActionText,\n // };\n // }\n\n // Se há status de pedido\n if (this.statusPedido) {\n switch (this.statusPedido.toLowerCase()) {\n case 'finalizado':\n return {\n title: this.customTitle || 'Serviço Concluído! 🎉',\n description:\n this.customDescription ||\n 'O serviço foi finalizado com sucesso. Agradecemos pela confiança!',\n icon: '✅',\n iconColor: 'text-green-500',\n bgColor: 'bg-green-100',\n primaryActionText: this.primaryActionText || 'Ver Detalhes',\n secondaryActionText: this.secondaryActionText || 'Avaliar Serviço',\n };\n\n // case 'cancelado':\n // return {\n // title: this.customTitle || 'Serviço Cancelado',\n // description:\n // this.customDescription ||\n // 'O serviço foi cancelado pelo prestador. Você pode buscar outros profissionais disponíveis.',\n // icon: '❌',\n // iconColor: 'text-red-500',\n // bgColor: 'bg-red-100',\n // primaryActionText: this.primaryActionText || 'Buscar Profissionais',\n // secondaryActionText: this.secondaryActionText || 'Voltar ao Início',\n // };\n\n case 'sem servicos':\n return {\n title: this.customTitle || 'Sem serviço',\n description:\n this.customDescription || 'Não há serviços disponíveis aqui.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Procurar serviços',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n case 'indisponivel':\n return {\n title: this.customTitle || 'Proposta Indisponível',\n description:\n this.customDescription ||\n 'Esta proposta não está mais disponível para visualização.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Ver Outras Propostas',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n\n default:\n return this.getDefaultConfig();\n }\n }\n\n return this.getDefaultConfig();\n }\n\n private getDefaultConfig(): EmptyStateConfig {\n return {\n title: this.customTitle || 'Nenhuma Proposta',\n description:\n this.customDescription || 'Você ainda não possui negociações.',\n icon: '📄',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n secondaryActionText: this.secondaryActionText,\n };\n }\n\n // Método para determinar se deve mostrar o componente\n shouldShowEmptyState(): boolean {\n return (\n this.card.length === 0 ||\n ['finalizado', 'cancelado', 'indisponível', 'indisponivel'].includes(\n this.statusPedido?.toLowerCase()\n )\n );\n }\n\n onPrimaryAction() {\n this.primaryAction.emit();\n }\n\n onSecondaryAction() {\n this.secondaryAction.emit();\n }\n}\n","<div *ngIf=\"shouldShowEmptyState()\" class=\"empty-state-container\">\n <div\n class=\"empty-state-card max-w-md mx-auto bg-white shadow-xl rounded-3xl p-8 border border-gray-100\"\n >\n <!-- Ícone dinâmico -->\n <div class=\"empty-state-icon mb-6 flex justify-center\">\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\n {{ emptyStateConfig.icon }}\n </div>\n </div>\n\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div\n [class]=\"emptyStateConfig.bgColor\"\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\n ></div>\n </div>\n </div>\n </div>\n\n <!-- Conteúdo da mensagem -->\n <div class=\"empty-state-content text-center space-y-4\">\n <!-- Título -->\n <h3 class=\"text-2xl font-bold text-gray-900 mb-2\">\n {{ emptyStateConfig.title }}\n </h3>\n\n <!-- Descrição -->\n <p class=\"text-gray-600 text-lg leading-relaxed px-4\">\n {{ emptyStateConfig.description }}\n </p>\n\n <!-- Informações adicionais baseadas no status -->\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-green-50 text-green-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-check-circle\"></i>\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\n </div>\n </div>\n\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-red-50 text-red-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-exclamation-circle\"></i>\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\n </div>\n </div>\n </div>\n\n <!-- Ações -->\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\n <!-- Ação Primária -->\n <button\n *ngIf=\"hideBtn\"\n (click)=\"onPrimaryAction()\"\n [ngClass]=\"{\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\n 'bg-blue-600 ':\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\n }\"\n class=\"col-12 btn btn-primary\"\n >\n {{ emptyStateConfig.primaryActionText }}\n </button>\n\n <!-- Ação Secundária -->\n <button\n *ngIf=\"emptyStateConfig.secondaryActionText\"\n (click)=\"onSecondaryAction()\"\n class=\"col-12 btn btn-outline-primary\"\n >\n {{ emptyStateConfig.secondaryActionText }}\n </button>\n </div>\n\n <!-- Link de ajuda (opcional) -->\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\n <a\n href=\"#\"\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n <i class=\"fas fa-question-circle mr-2\"></i>\n Precisa de ajuda? Entre em contato com o suporte\n </a>\n </div>\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { filter, map, mergeMap } from 'rxjs';\n\n@Component({\n selector: 'lib-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.css'],\n})\nexport class NavComponent implements OnInit {\n changeNavColor: boolean = false;\n\n openClose: boolean = false;\n message: string = '';\n\n lastScrollPosition = 0;\n isHeaderVisible = true;\n headerHeight = 0;\n isMobile = false;\n\n hasOffer: boolean = false;\n allowTransparency = false;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private el: ElementRef\n ) {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n map(() => this.activatedRoute),\n map((route) => {\n while (route.firstChild) route = route.firstChild;\n return route;\n }),\n mergeMap((route) => route.data)\n )\n .subscribe((data) => {\n this.allowTransparency = !!data['transparentNav'];\n\n this.lastScrollPosition = 0;\n\n this.isHeaderVisible = true; // força aparecer no load\n this.changeNavColor = !this.allowTransparency;\n });\n }\n\n ngAfterViewInit() {\n this.checkMobile();\n\n // Obtém a altura do header-menu após a view ser inicializada\n const headerMenu = this.el.nativeElement.querySelector('[header-menu]');\n if (headerMenu) {\n this.headerHeight = headerMenu.offsetHeight;\n }\n }\n\n ngOnInit(): void {\n this.hasOffer = this.router.url.includes('offer');\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n }\n\n private checkMobile() {\n this.isMobile = window.innerWidth < 768; // 768px é o breakpoint padrão do Tailwind para md\n if (!this.isMobile) {\n this.isHeaderVisible = true; // Garante que fique visível em desktop\n }\n }\n public menu() {\n this.openClose = !this.openClose;\n }\n\n receiveMessage(event: string) {\n this.message = event;\n }\n @HostListener('window:scroll', [])\n onWindowScroll() {\n const scroll = window.pageYOffset || document.documentElement.scrollTop;\n\n const isScrollingDown = scroll > this.lastScrollPosition;\n\n /* =========================\n * VISIBILIDADE\n * ========================= */\n\n if (scroll <= 10) {\n // TOPO\n this.isHeaderVisible = !isScrollingDown;\n } else if (isScrollingDown && scroll > 50) {\n // SCROLL DOWN\n this.isHeaderVisible = false;\n } else {\n // SCROLL UP\n this.isHeaderVisible = true;\n }\n\n /* =========================\n * COR\n * ========================= */\n if (!this.allowTransparency) {\n this.changeNavColor = true;\n } else {\n this.changeNavColor = scroll > 20;\n }\n\n this.lastScrollPosition = scroll;\n }\n}\n","<!-- 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","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\nimport { CustomModalComponent } from './components/custom-modal/custom-modal.component';\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\nimport { NavComponent } from './components/nav/nav.component';\nimport { TuduComponentsComponent } from './tudu-components.component';\n\n@NgModule({\n declarations: [\n TuduComponentsComponent,\n CardLayoutComponent,\n NavComponent,\n FallbackMessageComponent,\n CustomModalComponent,\n ],\n imports: [CommonModule],\n exports: [\n TuduComponentsComponent,\n CardLayoutComponent,\n NavComponent,\n FallbackMessageComponent,\n CustomModalComponent,\n ],\n})\nexport class TuduComponentsModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","/*\n * Public API Surface of tudu-components\n */\nexport * from './lib/tudu-components.component';\nexport * from './lib/tudu-components.module'; // ← Se criou este módulo\n\nexport * from './lib/components/card-layout/card-layout.component';\nexport * from './lib/components/nav/nav.component';\nexport * from './lib/components/fallback-message/fallback-message.component';\nexport * from './lib/components/custom-modal/custom-modal.component';\nexport * from './lib/tudu-components.service';\n// export * from './lib/card-layout.module'; // ← Ou se usou CardLayoutModule\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":"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"}
1
+ {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.html","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.ts","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.html","../../../projects/tudu-components/src/lib/components/fallback-message/fallback-message.component.ts","../../../projects/tudu-components/src/lib/components/fallback-message/fallback-message.component.html","../../../projects/tudu-components/src/lib/components/nav/nav.component.ts","../../../projects/tudu-components/src/lib/components/nav/nav.component.html","../../../projects/tudu-components/src/lib/tudu-components.module.ts","../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-tudu-components',\n template: `\n <p>\n tudu-components works!sss\n </p>\n `,\n styles: [\n ]\n})\nexport class TuduComponentsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent implements OnInit {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0; // 1 para serviço, 2 para candidatura\n @Input() hideHeader: boolean = false; // 1 para serviço, 2 para candidatura\n\n tags: string[] = ['Residencial', 'Urgente', 'Elétrica'];\n\n statusOptions = [\n { class: 'status-active', text: 'Ativo', icon: 'fa-circle' },\n { class: 'status-pending', text: 'Em andamento', icon: 'fa-spinner' },\n { class: 'status-completed', text: 'Concluído', icon: 'fa-check' },\n { class: 'status-cancelled', text: 'Cancelado', icon: 'fa-times' },\n ];\n\n currentStatus = this.statusOptions[0];\n private statusInterval: any;\n flowIndicator: string = '1';\n\n constructor(private route: Router) {\n this.route.events.subscribe(() => {\n if (this.route.url.includes('budgets')) {\n this.flowIndicator = 'budgets';\n console.log('asdasdadsasda', this.flowIndicator);\n }\n });\n }\n\n ngOnInit() {\n let index = 0;\n this.statusInterval = setInterval(() => {\n index = (index + 1) % this.statusOptions.length;\n this.currentStatus = this.statusOptions[index];\n }, 3000);\n\n console.log('cardTemplateIndicator', this.cardTemplateIndicator);\n }\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: '#4caf5020', color: '#4caf50' }; // verde suave\n case 'concluido':\n return { backgroundColor: '#0096881c', color: '#009688' }; // teal\n case 'cancelado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'publicado':\n return { backgroundColor: '#0096ff1c', color: '#25a5ff' }; // azul suave\n case 'recusado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'em negociacao':\n return { backgroundColor: '#ffab251f', color: '#ff9800' }; // laranja suave\n case 'pendente':\n return { backgroundColor: '#9a1fad1c', color: '#7e57c2' }; // roxo claro\n default:\n return { backgroundColor: '#e0e0e01c', color: '#757575' }; // cinza padrão\n }\n }\n\n ngOnDestroy() {\n if (this.statusInterval) {\n clearInterval(this.statusInterval);\n }\n }\n\n verDetalhes() {\n alert('Abrir detalhes do serviço...');\n }\n}\n","<div\n class=\"service-card rounded-xl shadow-md overflow-hidden bg-white hover:shadow-lg transition-all duration-300 relative mb-5\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"service-card-header flex items-center justify-between p-3 border-b border-gray-200\"\n >\n <div class=\"flex items-center gap-3 w-full min-w-0\">\n <div class=\"icon-style flex-shrink-0\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center gap-3 w-full min-w-0\">\n <div class=\"service-title truncate flex-1 min-w-0\">\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate w-full\"\n style=\"\n font-size: 12px;\n color: var(--tab-link);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n \"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"service-card-body p-4 space-y-3\">\n <div>\n <div\n class=\"flex flex-col items-start gap-3 border-b border-gray-100 pb-3 mb-3\"\n *ngIf=\"cardTemplateIndicator === 1\"\n >\n <div class=\"flex justify-between w-full pb-2\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n\n <div\n class=\"text-xs text-gray-50 font-semibold\"\n style=\"\n background-color: #d3d3d32c;\n color: grey;\n border-radius: 25px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px 10px;\n \"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-2 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div class=\"fw-semibold\" *ngIf=\"statusPedido === 'finalizado'\">\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n </div>\n <ng-content select=\"[info-row]\"></ng-content>\n\n <ng-content select=\"[description]\"></ng-content>\n </div>\n\n <div\n class=\"service-card-footer flex justify-center items-center p-3 border-t border-gray-100 bg-gray-50 gap-1\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div\n class=\"fw-semibold col-6\"\n style=\"display: flex; justify-content: flex-end\"\n >\n <ng-content select=\"[price]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Location } from '@angular/common'; // Importação correta\n\ntype ModalType = 'success' | 'error' | 'warning';\n\n@Component({\n selector: 'lib-custom-modal',\n standalone: false,\n templateUrl: './custom-modal.component.html',\n styleUrls: ['./custom-modal.component.css'],\n})\nexport class CustomModalComponent implements OnInit {\n @Input() modalId = 'customModal';\n @Input() title = 'Aviso';\n @Input() message = '';\n @Input() closeButtonText = 'Fechar';\n @Input() actionButtonText = '';\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\n @Input() errorDetails: any = null;\n\n @Output() modalClosed = new EventEmitter<void>();\n @Output() modalAction = new EventEmitter<void>();\n\n @Input() showModal = false;\n @Input() messageTitle: string = 'Pagamento Aprovado!';\n @Input() showBtn = true;\n @Input() priceNegotiated = 0;\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\n @Input() isLoadingBtn: boolean | undefined;\n @Input() disabledBtn: boolean = false;\n\n // Configuração dinâmica\n modalIcon: string = 'fa-check';\n modalIconColor: string = 'text-green-600';\n modalBgColor: string = 'bg-green-100';\n isClosing = false;\n\n constructor(private location: Location) {}\n\n ngOnInit(): void {}\n\n // Centraliza a abertura do modal com suporte ao botão voltar\n openModal(): void {\n this.showModal = true;\n // Adiciona um estado no histórico para o botão voltar funcionar\n this.location.go(this.location.path() + '#modalOpen');\n }\n\n // Atalho para abrir com tipos específicos\n open(\n type: ModalType,\n message: string = '',\n paymentMethod?: 'pix' | 'credit'\n ): void {\n this.configureModal(type, message);\n if (paymentMethod) {\n this.paymentMethod = paymentMethod;\n }\n this.openModal();\n }\n\n configureModal(type: ModalType, message: string = ''): void {\n switch (type) {\n case 'success':\n this.setSuccessStyles(message);\n break;\n case 'error':\n this.setErrorStyles(message);\n break;\n case 'warning':\n this.setWarningStyles(message);\n break;\n }\n }\n\n private setSuccessStyles(message: string): void {\n this.modalIcon = 'fa-check-circle';\n this.modalIconColor = 'modal-icon-success';\n this.modalBgColor = 'modal-bg-success';\n this.messageTitle = 'Sucesso!';\n this.messageBody = message || 'Operação realizada com sucesso.';\n }\n\n private setErrorStyles(message: string): void {\n this.modalIcon = 'fa-times-circle';\n this.modalIconColor = 'modal-icon-error';\n this.modalBgColor = 'modal-bg-error';\n this.messageTitle = 'Ops! Algo deu errado';\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\n }\n\n private setWarningStyles(message: string): void {\n this.modalIcon = 'fa-exclamation-circle';\n this.modalIconColor = 'modal-icon-warning';\n this.modalBgColor = 'modal-bg-warning';\n this.messageTitle = 'Atenção';\n this.messageBody = message || 'Verifique os dados antes de continuar.';\n }\n\n actionModal(): void {\n if (this.isLoadingBtn !== undefined) {\n this.isLoadingBtn = true;\n this.modalAction.emit();\n } else {\n this.modalAction.emit();\n this.isLoadingBtn = false;\n this.closeModal(); // Usa o método de fechar para limpar o histórico\n }\n }\n\n closeModal(): void {\n this.isClosing = true; // Ativa a animação de descida\n\n // Aguarda o tempo da animação (300ms) antes de remover do DOM\n setTimeout(() => {\n this.showModal = false;\n this.isClosing = false; // Reseta para a próxima abertura\n this.modalClosed.emit();\n\n // Lógica do histórico que já fizemos\n if (window.location.hash === '#modalOpen') {\n const currentPath = this.location.path().split('#')[0];\n this.location.replaceState(currentPath);\n }\n }, 300);\n }\n // Escuta o botão voltar do navegador ou celular\n @HostListener('window:popstate')\n onPopState(): void {\n if (this.showModal) {\n this.showModal = false;\n this.modalClosed.emit();\n }\n }\n}\n","<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"\n disabledBtn ||\n (priceNegotiated <= 0 && actionButtonText === 'Negociar')\n \"\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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\ninterface EmptyStateConfig {\n title: string;\n description: string;\n icon: string;\n iconColor: string;\n bgColor: string;\n primaryActionText?: string;\n secondaryActionText?: string;\n}\n\n@Component({\n selector: 'lib-fallback-message',\n templateUrl: './fallback-message.component.html',\n styleUrls: ['./fallback-message.component.css'],\n})\nexport class FallbackMessageComponent {\n @Input() card: any[] = [];\n @Input() statusPedido: string = '';\n @Input() customTitle?: string;\n @Input() customDescription?: string;\n @Input() primaryActionText?: string;\n @Input() secondaryActionText?: string;\n @Input() hideBtn?: boolean = false;\n\n @Output() primaryAction = new EventEmitter<void>();\n @Output() secondaryAction = new EventEmitter<void>();\n\n get emptyStateConfig(): EmptyStateConfig {\n // Se não há propostas\n // if (this.card.length === 0) {\n // return {\n // title: 'Nenhuma Proposta',\n // description:\n // 'Você ainda não possui negociações ou propostas recebidas.',\n // icon: '📄',\n // iconColor: 'text-gray-500',\n // bgColor: 'bg-gray-100',\n // primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n // secondaryActionText: this.secondaryActionText,\n // };\n // }\n\n // Se há status de pedido\n if (this.statusPedido) {\n switch (this.statusPedido.toLowerCase()) {\n case 'finalizado':\n return {\n title: this.customTitle || 'Serviço Concluído! 🎉',\n description:\n this.customDescription ||\n 'O serviço foi finalizado com sucesso. Agradecemos pela confiança!',\n icon: '✅',\n iconColor: 'text-green-500',\n bgColor: 'bg-green-100',\n primaryActionText: this.primaryActionText || 'Ver Detalhes',\n secondaryActionText: this.secondaryActionText || 'Avaliar Serviço',\n };\n\n // case 'cancelado':\n // return {\n // title: this.customTitle || 'Serviço Cancelado',\n // description:\n // this.customDescription ||\n // 'O serviço foi cancelado pelo prestador. Você pode buscar outros profissionais disponíveis.',\n // icon: '❌',\n // iconColor: 'text-red-500',\n // bgColor: 'bg-red-100',\n // primaryActionText: this.primaryActionText || 'Buscar Profissionais',\n // secondaryActionText: this.secondaryActionText || 'Voltar ao Início',\n // };\n\n case 'sem servicos':\n return {\n title: this.customTitle || 'Sem serviço',\n description:\n this.customDescription || 'Não há serviços disponíveis aqui.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Procurar serviços',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n case 'indisponivel':\n return {\n title: this.customTitle || 'Proposta Indisponível',\n description:\n this.customDescription ||\n 'Esta proposta não está mais disponível para visualização.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Ver Outras Propostas',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n\n default:\n return this.getDefaultConfig();\n }\n }\n\n return this.getDefaultConfig();\n }\n\n private getDefaultConfig(): EmptyStateConfig {\n return {\n title: this.customTitle || 'Nenhuma Proposta',\n description:\n this.customDescription || 'Você ainda não possui negociações.',\n icon: '📄',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n secondaryActionText: this.secondaryActionText,\n };\n }\n\n // Método para determinar se deve mostrar o componente\n shouldShowEmptyState(): boolean {\n return (\n this.card.length === 0 ||\n ['finalizado', 'cancelado', 'indisponível', 'indisponivel'].includes(\n this.statusPedido?.toLowerCase()\n )\n );\n }\n\n onPrimaryAction() {\n this.primaryAction.emit();\n }\n\n onSecondaryAction() {\n this.secondaryAction.emit();\n }\n}\n","<div *ngIf=\"shouldShowEmptyState()\" class=\"empty-state-container\">\n <div\n class=\"empty-state-card max-w-md mx-auto bg-white shadow-xl rounded-3xl p-8 border border-gray-100\"\n >\n <!-- Ícone dinâmico -->\n <div class=\"empty-state-icon mb-6 flex justify-center\">\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\n {{ emptyStateConfig.icon }}\n </div>\n </div>\n\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div\n [class]=\"emptyStateConfig.bgColor\"\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\n ></div>\n </div>\n </div>\n </div>\n\n <!-- Conteúdo da mensagem -->\n <div class=\"empty-state-content text-center space-y-4\">\n <!-- Título -->\n <h3 class=\"text-2xl font-bold text-gray-900 mb-2\">\n {{ emptyStateConfig.title }}\n </h3>\n\n <!-- Descrição -->\n <p class=\"text-gray-600 text-lg leading-relaxed px-4\">\n {{ emptyStateConfig.description }}\n </p>\n\n <!-- Informações adicionais baseadas no status -->\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-green-50 text-green-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-check-circle\"></i>\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\n </div>\n </div>\n\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-red-50 text-red-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-exclamation-circle\"></i>\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\n </div>\n </div>\n </div>\n\n <!-- Ações -->\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\n <!-- Ação Primária -->\n <button\n *ngIf=\"hideBtn\"\n (click)=\"onPrimaryAction()\"\n [ngClass]=\"{\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\n 'bg-blue-600 ':\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\n }\"\n class=\"col-12 btn btn-primary\"\n >\n {{ emptyStateConfig.primaryActionText }}\n </button>\n\n <!-- Ação Secundária -->\n <button\n *ngIf=\"emptyStateConfig.secondaryActionText\"\n (click)=\"onSecondaryAction()\"\n class=\"col-12 btn btn-outline-primary\"\n >\n {{ emptyStateConfig.secondaryActionText }}\n </button>\n </div>\n\n <!-- Link de ajuda (opcional) -->\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\n <a\n href=\"#\"\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n <i class=\"fas fa-question-circle mr-2\"></i>\n Precisa de ajuda? Entre em contato com o suporte\n </a>\n </div>\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { filter, map, mergeMap } from 'rxjs';\n\n@Component({\n selector: 'lib-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.css'],\n})\nexport class NavComponent implements OnInit {\n changeNavColor: boolean = false;\n\n openClose: boolean = false;\n message: string = '';\n\n lastScrollPosition = 0;\n isHeaderVisible = true;\n headerHeight = 0;\n isMobile = false;\n\n hasOffer: boolean = false;\n allowTransparency = false;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private el: ElementRef\n ) {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n map(() => this.activatedRoute),\n map((route) => {\n while (route.firstChild) route = route.firstChild;\n return route;\n }),\n mergeMap((route) => route.data)\n )\n .subscribe((data) => {\n this.allowTransparency = !!data['transparentNav'];\n\n this.lastScrollPosition = 0;\n\n this.isHeaderVisible = true; // força aparecer no load\n this.changeNavColor = !this.allowTransparency;\n });\n }\n\n ngAfterViewInit() {\n this.checkMobile();\n\n // Obtém a altura do header-menu após a view ser inicializada\n const headerMenu = this.el.nativeElement.querySelector('[header-menu]');\n if (headerMenu) {\n this.headerHeight = headerMenu.offsetHeight;\n }\n }\n\n ngOnInit(): void {\n this.hasOffer = this.router.url.includes('offer');\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n }\n\n private checkMobile() {\n this.isMobile = window.innerWidth < 768; // 768px é o breakpoint padrão do Tailwind para md\n if (!this.isMobile) {\n this.isHeaderVisible = true; // Garante que fique visível em desktop\n }\n }\n public menu() {\n this.openClose = !this.openClose;\n }\n\n receiveMessage(event: string) {\n this.message = event;\n }\n\n @HostListener('window:scroll', [])\n onWindowScroll() {\n const scroll = window.pageYOffset || document.documentElement.scrollTop;\n const isScrollingDown = scroll > this.lastScrollPosition;\n\n // --- REGRA DE VISIBILIDADE ---\n if (this.allowTransparency) {\n // Comportamento especial para Showcase (sua regra atual)\n if (scroll <= 10) {\n // No topo: fica invisível (se você quer que suma ao chegar no topo,\n // isHeaderVisible deve ser false ou a cor deve ser transparente)\n this.isHeaderVisible = !isScrollingDown;\n } else if (isScrollingDown && scroll > 50) {\n // Scroll Down: esconde\n this.isHeaderVisible = false;\n } else {\n // Scroll Up: mostra\n this.isHeaderVisible = true;\n }\n } else {\n // REGRA PARA DEMAIS COMPONENTES: Sempre visível\n this.isHeaderVisible = true;\n }\n\n // --- REGRA DE COR (Mantida) ---\n if (!this.allowTransparency) {\n this.changeNavColor = true;\n } else {\n this.changeNavColor = scroll > 20;\n }\n\n this.lastScrollPosition = scroll;\n }\n}\n","<!-- 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","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\nimport { CustomModalComponent } from './components/custom-modal/custom-modal.component';\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\nimport { NavComponent } from './components/nav/nav.component';\nimport { TuduComponentsComponent } from './tudu-components.component';\n\n@NgModule({\n declarations: [\n TuduComponentsComponent,\n CardLayoutComponent,\n NavComponent,\n FallbackMessageComponent,\n CustomModalComponent,\n ],\n imports: [CommonModule],\n exports: [\n TuduComponentsComponent,\n CardLayoutComponent,\n NavComponent,\n FallbackMessageComponent,\n CustomModalComponent,\n ],\n})\nexport class TuduComponentsModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","/*\n * Public API Surface of tudu-components\n */\nexport * from './lib/tudu-components.component';\nexport * from './lib/tudu-components.module'; // ← Se criou este módulo\n\nexport * from './lib/components/card-layout/card-layout.component';\nexport * from './lib/components/nav/nav.component';\nexport * from './lib/components/fallback-message/fallback-message.component';\nexport * from './lib/components/custom-modal/custom-modal.component';\nexport * from './lib/tudu-components.service';\n// export * from './lib/card-layout.module'; // ← Ou se usou CardLayoutModule\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":"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"}
@@ -116,6 +116,7 @@ class CustomModalComponent {
116
116
  this.showBtn = true;
117
117
  this.priceNegotiated = 0;
118
118
  this.messageBody = 'Seu pagamento foi processado com sucesso.';
119
+ this.disabledBtn = false;
119
120
  // Configuração dinâmica
120
121
  this.modalIcon = 'fa-check';
121
122
  this.modalIconColor = 'text-green-600';
@@ -205,10 +206,10 @@ class CustomModalComponent {
205
206
  }
206
207
  }
207
208
  CustomModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, deps: [{ token: i1$1.Location }], target: i0.ɵɵFactoryTarget.Component });
208
- 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" }, 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)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.JsonPipe, name: "json" }] });
209
+ 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" }, 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)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"\n disabledBtn ||\n (priceNegotiated <= 0 && actionButtonText === 'Negociar')\n \"\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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.JsonPipe, name: "json" }] });
209
210
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, decorators: [{
210
211
  type: Component,
211
- args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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"] }]
212
+ args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"\n disabledBtn ||\n (priceNegotiated <= 0 && actionButtonText === 'Negociar')\n \"\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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", 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"] }]
212
213
  }], ctorParameters: function () { return [{ type: i1$1.Location }]; }, propDecorators: { modalId: [{
213
214
  type: Input
214
215
  }], title: [{
@@ -239,6 +240,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
239
240
  type: Input
240
241
  }], isLoadingBtn: [{
241
242
  type: Input
243
+ }], disabledBtn: [{
244
+ type: Input
242
245
  }], onPopState: [{
243
246
  type: HostListener,
244
247
  args: ['window:popstate']
@@ -427,24 +430,28 @@ class NavComponent {
427
430
  onWindowScroll() {
428
431
  const scroll = window.pageYOffset || document.documentElement.scrollTop;
429
432
  const isScrollingDown = scroll > this.lastScrollPosition;
430
- /* =========================
431
- * VISIBILIDADE
432
- * ========================= */
433
- if (scroll <= 10) {
434
- // TOPO
435
- this.isHeaderVisible = !isScrollingDown;
436
- }
437
- else if (isScrollingDown && scroll > 50) {
438
- // SCROLL DOWN
439
- this.isHeaderVisible = false;
433
+ // --- REGRA DE VISIBILIDADE ---
434
+ if (this.allowTransparency) {
435
+ // Comportamento especial para Showcase (sua regra atual)
436
+ if (scroll <= 10) {
437
+ // No topo: fica invisível (se você quer que suma ao chegar no topo,
438
+ // isHeaderVisible deve ser false ou a cor deve ser transparente)
439
+ this.isHeaderVisible = !isScrollingDown;
440
+ }
441
+ else if (isScrollingDown && scroll > 50) {
442
+ // Scroll Down: esconde
443
+ this.isHeaderVisible = false;
444
+ }
445
+ else {
446
+ // Scroll Up: mostra
447
+ this.isHeaderVisible = true;
448
+ }
440
449
  }
441
450
  else {
442
- // SCROLL UP
451
+ // REGRA PARA DEMAIS COMPONENTES: Sempre visível
443
452
  this.isHeaderVisible = true;
444
453
  }
445
- /* =========================
446
- * COR
447
- * ========================= */
454
+ // --- REGRA DE COR (Mantida) ---
448
455
  if (!this.allowTransparency) {
449
456
  this.changeNavColor = true;
450
457
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.html","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.ts","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.html","../../../projects/tudu-components/src/lib/components/fallback-message/fallback-message.component.ts","../../../projects/tudu-components/src/lib/components/fallback-message/fallback-message.component.html","../../../projects/tudu-components/src/lib/components/nav/nav.component.ts","../../../projects/tudu-components/src/lib/components/nav/nav.component.html","../../../projects/tudu-components/src/lib/tudu-components.module.ts","../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-tudu-components',\n template: `\n <p>\n tudu-components works!sss\n </p>\n `,\n styles: [\n ]\n})\nexport class TuduComponentsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent implements OnInit {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0; // 1 para serviço, 2 para candidatura\n @Input() hideHeader: boolean = false; // 1 para serviço, 2 para candidatura\n\n tags: string[] = ['Residencial', 'Urgente', 'Elétrica'];\n\n statusOptions = [\n { class: 'status-active', text: 'Ativo', icon: 'fa-circle' },\n { class: 'status-pending', text: 'Em andamento', icon: 'fa-spinner' },\n { class: 'status-completed', text: 'Concluído', icon: 'fa-check' },\n { class: 'status-cancelled', text: 'Cancelado', icon: 'fa-times' },\n ];\n\n currentStatus = this.statusOptions[0];\n private statusInterval: any;\n flowIndicator: string = '1';\n\n constructor(private route: Router) {\n this.route.events.subscribe(() => {\n if (this.route.url.includes('budgets')) {\n this.flowIndicator = 'budgets';\n console.log('asdasdadsasda', this.flowIndicator);\n }\n });\n }\n\n ngOnInit() {\n let index = 0;\n this.statusInterval = setInterval(() => {\n index = (index + 1) % this.statusOptions.length;\n this.currentStatus = this.statusOptions[index];\n }, 3000);\n\n console.log('cardTemplateIndicator', this.cardTemplateIndicator);\n }\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: '#4caf5020', color: '#4caf50' }; // verde suave\n case 'concluido':\n return { backgroundColor: '#0096881c', color: '#009688' }; // teal\n case 'cancelado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'publicado':\n return { backgroundColor: '#0096ff1c', color: '#25a5ff' }; // azul suave\n case 'recusado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'em negociacao':\n return { backgroundColor: '#ffab251f', color: '#ff9800' }; // laranja suave\n case 'pendente':\n return { backgroundColor: '#9a1fad1c', color: '#7e57c2' }; // roxo claro\n default:\n return { backgroundColor: '#e0e0e01c', color: '#757575' }; // cinza padrão\n }\n }\n\n ngOnDestroy() {\n if (this.statusInterval) {\n clearInterval(this.statusInterval);\n }\n }\n\n verDetalhes() {\n alert('Abrir detalhes do serviço...');\n }\n}\n","<div\n class=\"service-card rounded-xl shadow-md overflow-hidden bg-white hover:shadow-lg transition-all duration-300 relative mb-5\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"service-card-header flex items-center justify-between p-3 border-b border-gray-200\"\n >\n <div class=\"flex items-center gap-3 w-full min-w-0\">\n <div class=\"icon-style flex-shrink-0\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center gap-3 w-full min-w-0\">\n <div class=\"service-title truncate flex-1 min-w-0\">\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate w-full\"\n style=\"\n font-size: 12px;\n color: var(--tab-link);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n \"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"service-card-body p-4 space-y-3\">\n <div>\n <div\n class=\"flex flex-col items-start gap-3 border-b border-gray-100 pb-3 mb-3\"\n *ngIf=\"cardTemplateIndicator === 1\"\n >\n <div class=\"flex justify-between w-full pb-2\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n\n <div\n class=\"text-xs text-gray-50 font-semibold\"\n style=\"\n background-color: #d3d3d32c;\n color: grey;\n border-radius: 25px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px 10px;\n \"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-2 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div class=\"fw-semibold\" *ngIf=\"statusPedido === 'finalizado'\">\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n </div>\n <ng-content select=\"[info-row]\"></ng-content>\n\n <ng-content select=\"[description]\"></ng-content>\n </div>\n\n <div\n class=\"service-card-footer flex justify-center items-center p-3 border-t border-gray-100 bg-gray-50 gap-1\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div\n class=\"fw-semibold col-6\"\n style=\"display: flex; justify-content: flex-end\"\n >\n <ng-content select=\"[price]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Location } from '@angular/common'; // Importação correta\n\ntype ModalType = 'success' | 'error' | 'warning';\n\n@Component({\n selector: 'lib-custom-modal',\n standalone: false,\n templateUrl: './custom-modal.component.html',\n styleUrls: ['./custom-modal.component.css'],\n})\nexport class CustomModalComponent implements OnInit {\n @Input() modalId = 'customModal';\n @Input() title = 'Aviso';\n @Input() message = '';\n @Input() closeButtonText = 'Fechar';\n @Input() actionButtonText = '';\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\n @Input() errorDetails: any = null;\n\n @Output() modalClosed = new EventEmitter<void>();\n @Output() modalAction = new EventEmitter<void>();\n\n @Input() showModal = false;\n @Input() messageTitle: string = 'Pagamento Aprovado!';\n @Input() showBtn = true;\n @Input() priceNegotiated = 0;\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\n @Input() isLoadingBtn: boolean | undefined;\n\n // Configuração dinâmica\n modalIcon: string = 'fa-check';\n modalIconColor: string = 'text-green-600';\n modalBgColor: string = 'bg-green-100';\n isClosing = false;\n\n constructor(private location: Location) {}\n\n ngOnInit(): void {}\n\n // Centraliza a abertura do modal com suporte ao botão voltar\n openModal(): void {\n this.showModal = true;\n // Adiciona um estado no histórico para o botão voltar funcionar\n this.location.go(this.location.path() + '#modalOpen');\n }\n\n // Atalho para abrir com tipos específicos\n open(\n type: ModalType,\n message: string = '',\n paymentMethod?: 'pix' | 'credit'\n ): void {\n this.configureModal(type, message);\n if (paymentMethod) {\n this.paymentMethod = paymentMethod;\n }\n this.openModal();\n }\n\n configureModal(type: ModalType, message: string = ''): void {\n switch (type) {\n case 'success':\n this.setSuccessStyles(message);\n break;\n case 'error':\n this.setErrorStyles(message);\n break;\n case 'warning':\n this.setWarningStyles(message);\n break;\n }\n }\n\n private setSuccessStyles(message: string): void {\n this.modalIcon = 'fa-check-circle';\n this.modalIconColor = 'modal-icon-success';\n this.modalBgColor = 'modal-bg-success';\n this.messageTitle = 'Sucesso!';\n this.messageBody = message || 'Operação realizada com sucesso.';\n }\n\n private setErrorStyles(message: string): void {\n this.modalIcon = 'fa-times-circle';\n this.modalIconColor = 'modal-icon-error';\n this.modalBgColor = 'modal-bg-error';\n this.messageTitle = 'Ops! Algo deu errado';\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\n }\n\n private setWarningStyles(message: string): void {\n this.modalIcon = 'fa-exclamation-circle';\n this.modalIconColor = 'modal-icon-warning';\n this.modalBgColor = 'modal-bg-warning';\n this.messageTitle = 'Atenção';\n this.messageBody = message || 'Verifique os dados antes de continuar.';\n }\n\n actionModal(): void {\n if (this.isLoadingBtn !== undefined) {\n this.isLoadingBtn = true;\n this.modalAction.emit();\n } else {\n this.modalAction.emit();\n this.isLoadingBtn = false;\n this.closeModal(); // Usa o método de fechar para limpar o histórico\n }\n }\n\n closeModal(): void {\n this.isClosing = true; // Ativa a animação de descida\n\n // Aguarda o tempo da animação (300ms) antes de remover do DOM\n setTimeout(() => {\n this.showModal = false;\n this.isClosing = false; // Reseta para a próxima abertura\n this.modalClosed.emit();\n\n // Lógica do histórico que já fizemos\n if (window.location.hash === '#modalOpen') {\n const currentPath = this.location.path().split('#')[0];\n this.location.replaceState(currentPath);\n }\n }, 300);\n }\n // Escuta o botão voltar do navegador ou celular\n @HostListener('window:popstate')\n onPopState(): void {\n if (this.showModal) {\n this.showModal = false;\n this.modalClosed.emit();\n }\n }\n}\n","<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\ninterface EmptyStateConfig {\n title: string;\n description: string;\n icon: string;\n iconColor: string;\n bgColor: string;\n primaryActionText?: string;\n secondaryActionText?: string;\n}\n\n@Component({\n selector: 'lib-fallback-message',\n templateUrl: './fallback-message.component.html',\n styleUrls: ['./fallback-message.component.css'],\n})\nexport class FallbackMessageComponent {\n @Input() card: any[] = [];\n @Input() statusPedido: string = '';\n @Input() customTitle?: string;\n @Input() customDescription?: string;\n @Input() primaryActionText?: string;\n @Input() secondaryActionText?: string;\n @Input() hideBtn?: boolean = false;\n\n @Output() primaryAction = new EventEmitter<void>();\n @Output() secondaryAction = new EventEmitter<void>();\n\n get emptyStateConfig(): EmptyStateConfig {\n // Se não há propostas\n // if (this.card.length === 0) {\n // return {\n // title: 'Nenhuma Proposta',\n // description:\n // 'Você ainda não possui negociações ou propostas recebidas.',\n // icon: '📄',\n // iconColor: 'text-gray-500',\n // bgColor: 'bg-gray-100',\n // primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n // secondaryActionText: this.secondaryActionText,\n // };\n // }\n\n // Se há status de pedido\n if (this.statusPedido) {\n switch (this.statusPedido.toLowerCase()) {\n case 'finalizado':\n return {\n title: this.customTitle || 'Serviço Concluído! 🎉',\n description:\n this.customDescription ||\n 'O serviço foi finalizado com sucesso. Agradecemos pela confiança!',\n icon: '✅',\n iconColor: 'text-green-500',\n bgColor: 'bg-green-100',\n primaryActionText: this.primaryActionText || 'Ver Detalhes',\n secondaryActionText: this.secondaryActionText || 'Avaliar Serviço',\n };\n\n // case 'cancelado':\n // return {\n // title: this.customTitle || 'Serviço Cancelado',\n // description:\n // this.customDescription ||\n // 'O serviço foi cancelado pelo prestador. Você pode buscar outros profissionais disponíveis.',\n // icon: '❌',\n // iconColor: 'text-red-500',\n // bgColor: 'bg-red-100',\n // primaryActionText: this.primaryActionText || 'Buscar Profissionais',\n // secondaryActionText: this.secondaryActionText || 'Voltar ao Início',\n // };\n\n case 'sem servicos':\n return {\n title: this.customTitle || 'Sem serviço',\n description:\n this.customDescription || 'Não há serviços disponíveis aqui.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Procurar serviços',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n case 'indisponivel':\n return {\n title: this.customTitle || 'Proposta Indisponível',\n description:\n this.customDescription ||\n 'Esta proposta não está mais disponível para visualização.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Ver Outras Propostas',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n\n default:\n return this.getDefaultConfig();\n }\n }\n\n return this.getDefaultConfig();\n }\n\n private getDefaultConfig(): EmptyStateConfig {\n return {\n title: this.customTitle || 'Nenhuma Proposta',\n description:\n this.customDescription || 'Você ainda não possui negociações.',\n icon: '📄',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n secondaryActionText: this.secondaryActionText,\n };\n }\n\n // Método para determinar se deve mostrar o componente\n shouldShowEmptyState(): boolean {\n return (\n this.card.length === 0 ||\n ['finalizado', 'cancelado', 'indisponível', 'indisponivel'].includes(\n this.statusPedido?.toLowerCase()\n )\n );\n }\n\n onPrimaryAction() {\n this.primaryAction.emit();\n }\n\n onSecondaryAction() {\n this.secondaryAction.emit();\n }\n}\n","<div *ngIf=\"shouldShowEmptyState()\" class=\"empty-state-container\">\n <div\n class=\"empty-state-card max-w-md mx-auto bg-white shadow-xl rounded-3xl p-8 border border-gray-100\"\n >\n <!-- Ícone dinâmico -->\n <div class=\"empty-state-icon mb-6 flex justify-center\">\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\n {{ emptyStateConfig.icon }}\n </div>\n </div>\n\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div\n [class]=\"emptyStateConfig.bgColor\"\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\n ></div>\n </div>\n </div>\n </div>\n\n <!-- Conteúdo da mensagem -->\n <div class=\"empty-state-content text-center space-y-4\">\n <!-- Título -->\n <h3 class=\"text-2xl font-bold text-gray-900 mb-2\">\n {{ emptyStateConfig.title }}\n </h3>\n\n <!-- Descrição -->\n <p class=\"text-gray-600 text-lg leading-relaxed px-4\">\n {{ emptyStateConfig.description }}\n </p>\n\n <!-- Informações adicionais baseadas no status -->\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-green-50 text-green-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-check-circle\"></i>\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\n </div>\n </div>\n\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-red-50 text-red-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-exclamation-circle\"></i>\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\n </div>\n </div>\n </div>\n\n <!-- Ações -->\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\n <!-- Ação Primária -->\n <button\n *ngIf=\"hideBtn\"\n (click)=\"onPrimaryAction()\"\n [ngClass]=\"{\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\n 'bg-blue-600 ':\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\n }\"\n class=\"col-12 btn btn-primary\"\n >\n {{ emptyStateConfig.primaryActionText }}\n </button>\n\n <!-- Ação Secundária -->\n <button\n *ngIf=\"emptyStateConfig.secondaryActionText\"\n (click)=\"onSecondaryAction()\"\n class=\"col-12 btn btn-outline-primary\"\n >\n {{ emptyStateConfig.secondaryActionText }}\n </button>\n </div>\n\n <!-- Link de ajuda (opcional) -->\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\n <a\n href=\"#\"\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n <i class=\"fas fa-question-circle mr-2\"></i>\n Precisa de ajuda? Entre em contato com o suporte\n </a>\n </div>\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { filter, map, mergeMap } from 'rxjs';\n\n@Component({\n selector: 'lib-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.css'],\n})\nexport class NavComponent implements OnInit {\n changeNavColor: boolean = false;\n\n openClose: boolean = false;\n message: string = '';\n\n lastScrollPosition = 0;\n isHeaderVisible = true;\n headerHeight = 0;\n isMobile = false;\n\n hasOffer: boolean = false;\n allowTransparency = false;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private el: ElementRef\n ) {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n map(() => this.activatedRoute),\n map((route) => {\n while (route.firstChild) route = route.firstChild;\n return route;\n }),\n mergeMap((route) => route.data)\n )\n .subscribe((data) => {\n this.allowTransparency = !!data['transparentNav'];\n\n this.lastScrollPosition = 0;\n\n this.isHeaderVisible = true; // força aparecer no load\n this.changeNavColor = !this.allowTransparency;\n });\n }\n\n ngAfterViewInit() {\n this.checkMobile();\n\n // Obtém a altura do header-menu após a view ser inicializada\n const headerMenu = this.el.nativeElement.querySelector('[header-menu]');\n if (headerMenu) {\n this.headerHeight = headerMenu.offsetHeight;\n }\n }\n\n ngOnInit(): void {\n this.hasOffer = this.router.url.includes('offer');\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n }\n\n private checkMobile() {\n this.isMobile = window.innerWidth < 768; // 768px é o breakpoint padrão do Tailwind para md\n if (!this.isMobile) {\n this.isHeaderVisible = true; // Garante que fique visível em desktop\n }\n }\n public menu() {\n this.openClose = !this.openClose;\n }\n\n receiveMessage(event: string) {\n this.message = event;\n }\n @HostListener('window:scroll', [])\n onWindowScroll() {\n const scroll = window.pageYOffset || document.documentElement.scrollTop;\n\n const isScrollingDown = scroll > this.lastScrollPosition;\n\n /* =========================\n * VISIBILIDADE\n * ========================= */\n\n if (scroll <= 10) {\n // TOPO\n this.isHeaderVisible = !isScrollingDown;\n } else if (isScrollingDown && scroll > 50) {\n // SCROLL DOWN\n this.isHeaderVisible = false;\n } else {\n // SCROLL UP\n this.isHeaderVisible = true;\n }\n\n /* =========================\n * COR\n * ========================= */\n if (!this.allowTransparency) {\n this.changeNavColor = true;\n } else {\n this.changeNavColor = scroll > 20;\n }\n\n this.lastScrollPosition = scroll;\n }\n}\n","<!-- 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","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\nimport { CustomModalComponent } from './components/custom-modal/custom-modal.component';\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\nimport { NavComponent } from './components/nav/nav.component';\nimport { TuduComponentsComponent } from './tudu-components.component';\n\n@NgModule({\n declarations: [\n TuduComponentsComponent,\n CardLayoutComponent,\n NavComponent,\n FallbackMessageComponent,\n CustomModalComponent,\n ],\n imports: [CommonModule],\n exports: [\n TuduComponentsComponent,\n CardLayoutComponent,\n NavComponent,\n FallbackMessageComponent,\n CustomModalComponent,\n ],\n})\nexport class TuduComponentsModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","/*\n * Public API Surface of tudu-components\n */\nexport * from './lib/tudu-components.component';\nexport * from './lib/tudu-components.module'; // ← Se criou este módulo\n\nexport * from './lib/components/card-layout/card-layout.component';\nexport * from './lib/components/nav/nav.component';\nexport * from './lib/components/fallback-message/fallback-message.component';\nexport * from './lib/components/custom-modal/custom-modal.component';\nexport * from './lib/tudu-components.service';\n// export * from './lib/card-layout.module'; // ← Ou se usou CardLayoutModule\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":"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"}
1
+ {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.html","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.ts","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.html","../../../projects/tudu-components/src/lib/components/fallback-message/fallback-message.component.ts","../../../projects/tudu-components/src/lib/components/fallback-message/fallback-message.component.html","../../../projects/tudu-components/src/lib/components/nav/nav.component.ts","../../../projects/tudu-components/src/lib/components/nav/nav.component.html","../../../projects/tudu-components/src/lib/tudu-components.module.ts","../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-tudu-components',\n template: `\n <p>\n tudu-components works!sss\n </p>\n `,\n styles: [\n ]\n})\nexport class TuduComponentsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent implements OnInit {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0; // 1 para serviço, 2 para candidatura\n @Input() hideHeader: boolean = false; // 1 para serviço, 2 para candidatura\n\n tags: string[] = ['Residencial', 'Urgente', 'Elétrica'];\n\n statusOptions = [\n { class: 'status-active', text: 'Ativo', icon: 'fa-circle' },\n { class: 'status-pending', text: 'Em andamento', icon: 'fa-spinner' },\n { class: 'status-completed', text: 'Concluído', icon: 'fa-check' },\n { class: 'status-cancelled', text: 'Cancelado', icon: 'fa-times' },\n ];\n\n currentStatus = this.statusOptions[0];\n private statusInterval: any;\n flowIndicator: string = '1';\n\n constructor(private route: Router) {\n this.route.events.subscribe(() => {\n if (this.route.url.includes('budgets')) {\n this.flowIndicator = 'budgets';\n console.log('asdasdadsasda', this.flowIndicator);\n }\n });\n }\n\n ngOnInit() {\n let index = 0;\n this.statusInterval = setInterval(() => {\n index = (index + 1) % this.statusOptions.length;\n this.currentStatus = this.statusOptions[index];\n }, 3000);\n\n console.log('cardTemplateIndicator', this.cardTemplateIndicator);\n }\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: '#4caf5020', color: '#4caf50' }; // verde suave\n case 'concluido':\n return { backgroundColor: '#0096881c', color: '#009688' }; // teal\n case 'cancelado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'publicado':\n return { backgroundColor: '#0096ff1c', color: '#25a5ff' }; // azul suave\n case 'recusado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'em negociacao':\n return { backgroundColor: '#ffab251f', color: '#ff9800' }; // laranja suave\n case 'pendente':\n return { backgroundColor: '#9a1fad1c', color: '#7e57c2' }; // roxo claro\n default:\n return { backgroundColor: '#e0e0e01c', color: '#757575' }; // cinza padrão\n }\n }\n\n ngOnDestroy() {\n if (this.statusInterval) {\n clearInterval(this.statusInterval);\n }\n }\n\n verDetalhes() {\n alert('Abrir detalhes do serviço...');\n }\n}\n","<div\n class=\"service-card rounded-xl shadow-md overflow-hidden bg-white hover:shadow-lg transition-all duration-300 relative mb-5\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"service-card-header flex items-center justify-between p-3 border-b border-gray-200\"\n >\n <div class=\"flex items-center gap-3 w-full min-w-0\">\n <div class=\"icon-style flex-shrink-0\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center gap-3 w-full min-w-0\">\n <div class=\"service-title truncate flex-1 min-w-0\">\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate w-full\"\n style=\"\n font-size: 12px;\n color: var(--tab-link);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n \"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"service-card-body p-4 space-y-3\">\n <div>\n <div\n class=\"flex flex-col items-start gap-3 border-b border-gray-100 pb-3 mb-3\"\n *ngIf=\"cardTemplateIndicator === 1\"\n >\n <div class=\"flex justify-between w-full pb-2\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n\n <div\n class=\"text-xs text-gray-50 font-semibold\"\n style=\"\n background-color: #d3d3d32c;\n color: grey;\n border-radius: 25px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px 10px;\n \"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-2 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div class=\"fw-semibold\" *ngIf=\"statusPedido === 'finalizado'\">\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n </div>\n <ng-content select=\"[info-row]\"></ng-content>\n\n <ng-content select=\"[description]\"></ng-content>\n </div>\n\n <div\n class=\"service-card-footer flex justify-center items-center p-3 border-t border-gray-100 bg-gray-50 gap-1\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div\n class=\"fw-semibold col-6\"\n style=\"display: flex; justify-content: flex-end\"\n >\n <ng-content select=\"[price]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Location } from '@angular/common'; // Importação correta\n\ntype ModalType = 'success' | 'error' | 'warning';\n\n@Component({\n selector: 'lib-custom-modal',\n standalone: false,\n templateUrl: './custom-modal.component.html',\n styleUrls: ['./custom-modal.component.css'],\n})\nexport class CustomModalComponent implements OnInit {\n @Input() modalId = 'customModal';\n @Input() title = 'Aviso';\n @Input() message = '';\n @Input() closeButtonText = 'Fechar';\n @Input() actionButtonText = '';\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\n @Input() errorDetails: any = null;\n\n @Output() modalClosed = new EventEmitter<void>();\n @Output() modalAction = new EventEmitter<void>();\n\n @Input() showModal = false;\n @Input() messageTitle: string = 'Pagamento Aprovado!';\n @Input() showBtn = true;\n @Input() priceNegotiated = 0;\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\n @Input() isLoadingBtn: boolean | undefined;\n @Input() disabledBtn: boolean = false;\n\n // Configuração dinâmica\n modalIcon: string = 'fa-check';\n modalIconColor: string = 'text-green-600';\n modalBgColor: string = 'bg-green-100';\n isClosing = false;\n\n constructor(private location: Location) {}\n\n ngOnInit(): void {}\n\n // Centraliza a abertura do modal com suporte ao botão voltar\n openModal(): void {\n this.showModal = true;\n // Adiciona um estado no histórico para o botão voltar funcionar\n this.location.go(this.location.path() + '#modalOpen');\n }\n\n // Atalho para abrir com tipos específicos\n open(\n type: ModalType,\n message: string = '',\n paymentMethod?: 'pix' | 'credit'\n ): void {\n this.configureModal(type, message);\n if (paymentMethod) {\n this.paymentMethod = paymentMethod;\n }\n this.openModal();\n }\n\n configureModal(type: ModalType, message: string = ''): void {\n switch (type) {\n case 'success':\n this.setSuccessStyles(message);\n break;\n case 'error':\n this.setErrorStyles(message);\n break;\n case 'warning':\n this.setWarningStyles(message);\n break;\n }\n }\n\n private setSuccessStyles(message: string): void {\n this.modalIcon = 'fa-check-circle';\n this.modalIconColor = 'modal-icon-success';\n this.modalBgColor = 'modal-bg-success';\n this.messageTitle = 'Sucesso!';\n this.messageBody = message || 'Operação realizada com sucesso.';\n }\n\n private setErrorStyles(message: string): void {\n this.modalIcon = 'fa-times-circle';\n this.modalIconColor = 'modal-icon-error';\n this.modalBgColor = 'modal-bg-error';\n this.messageTitle = 'Ops! Algo deu errado';\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\n }\n\n private setWarningStyles(message: string): void {\n this.modalIcon = 'fa-exclamation-circle';\n this.modalIconColor = 'modal-icon-warning';\n this.modalBgColor = 'modal-bg-warning';\n this.messageTitle = 'Atenção';\n this.messageBody = message || 'Verifique os dados antes de continuar.';\n }\n\n actionModal(): void {\n if (this.isLoadingBtn !== undefined) {\n this.isLoadingBtn = true;\n this.modalAction.emit();\n } else {\n this.modalAction.emit();\n this.isLoadingBtn = false;\n this.closeModal(); // Usa o método de fechar para limpar o histórico\n }\n }\n\n closeModal(): void {\n this.isClosing = true; // Ativa a animação de descida\n\n // Aguarda o tempo da animação (300ms) antes de remover do DOM\n setTimeout(() => {\n this.showModal = false;\n this.isClosing = false; // Reseta para a próxima abertura\n this.modalClosed.emit();\n\n // Lógica do histórico que já fizemos\n if (window.location.hash === '#modalOpen') {\n const currentPath = this.location.path().split('#')[0];\n this.location.replaceState(currentPath);\n }\n }, 300);\n }\n // Escuta o botão voltar do navegador ou celular\n @HostListener('window:popstate')\n onPopState(): void {\n if (this.showModal) {\n this.showModal = false;\n this.modalClosed.emit();\n }\n }\n}\n","<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 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 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 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\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"\n disabledBtn ||\n (priceNegotiated <= 0 && actionButtonText === 'Negociar')\n \"\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-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\ninterface EmptyStateConfig {\n title: string;\n description: string;\n icon: string;\n iconColor: string;\n bgColor: string;\n primaryActionText?: string;\n secondaryActionText?: string;\n}\n\n@Component({\n selector: 'lib-fallback-message',\n templateUrl: './fallback-message.component.html',\n styleUrls: ['./fallback-message.component.css'],\n})\nexport class FallbackMessageComponent {\n @Input() card: any[] = [];\n @Input() statusPedido: string = '';\n @Input() customTitle?: string;\n @Input() customDescription?: string;\n @Input() primaryActionText?: string;\n @Input() secondaryActionText?: string;\n @Input() hideBtn?: boolean = false;\n\n @Output() primaryAction = new EventEmitter<void>();\n @Output() secondaryAction = new EventEmitter<void>();\n\n get emptyStateConfig(): EmptyStateConfig {\n // Se não há propostas\n // if (this.card.length === 0) {\n // return {\n // title: 'Nenhuma Proposta',\n // description:\n // 'Você ainda não possui negociações ou propostas recebidas.',\n // icon: '📄',\n // iconColor: 'text-gray-500',\n // bgColor: 'bg-gray-100',\n // primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n // secondaryActionText: this.secondaryActionText,\n // };\n // }\n\n // Se há status de pedido\n if (this.statusPedido) {\n switch (this.statusPedido.toLowerCase()) {\n case 'finalizado':\n return {\n title: this.customTitle || 'Serviço Concluído! 🎉',\n description:\n this.customDescription ||\n 'O serviço foi finalizado com sucesso. Agradecemos pela confiança!',\n icon: '✅',\n iconColor: 'text-green-500',\n bgColor: 'bg-green-100',\n primaryActionText: this.primaryActionText || 'Ver Detalhes',\n secondaryActionText: this.secondaryActionText || 'Avaliar Serviço',\n };\n\n // case 'cancelado':\n // return {\n // title: this.customTitle || 'Serviço Cancelado',\n // description:\n // this.customDescription ||\n // 'O serviço foi cancelado pelo prestador. Você pode buscar outros profissionais disponíveis.',\n // icon: '❌',\n // iconColor: 'text-red-500',\n // bgColor: 'bg-red-100',\n // primaryActionText: this.primaryActionText || 'Buscar Profissionais',\n // secondaryActionText: this.secondaryActionText || 'Voltar ao Início',\n // };\n\n case 'sem servicos':\n return {\n title: this.customTitle || 'Sem serviço',\n description:\n this.customDescription || 'Não há serviços disponíveis aqui.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Procurar serviços',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n case 'indisponivel':\n return {\n title: this.customTitle || 'Proposta Indisponível',\n description:\n this.customDescription ||\n 'Esta proposta não está mais disponível para visualização.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Ver Outras Propostas',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n\n default:\n return this.getDefaultConfig();\n }\n }\n\n return this.getDefaultConfig();\n }\n\n private getDefaultConfig(): EmptyStateConfig {\n return {\n title: this.customTitle || 'Nenhuma Proposta',\n description:\n this.customDescription || 'Você ainda não possui negociações.',\n icon: '📄',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n secondaryActionText: this.secondaryActionText,\n };\n }\n\n // Método para determinar se deve mostrar o componente\n shouldShowEmptyState(): boolean {\n return (\n this.card.length === 0 ||\n ['finalizado', 'cancelado', 'indisponível', 'indisponivel'].includes(\n this.statusPedido?.toLowerCase()\n )\n );\n }\n\n onPrimaryAction() {\n this.primaryAction.emit();\n }\n\n onSecondaryAction() {\n this.secondaryAction.emit();\n }\n}\n","<div *ngIf=\"shouldShowEmptyState()\" class=\"empty-state-container\">\n <div\n class=\"empty-state-card max-w-md mx-auto bg-white shadow-xl rounded-3xl p-8 border border-gray-100\"\n >\n <!-- Ícone dinâmico -->\n <div class=\"empty-state-icon mb-6 flex justify-center\">\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\n {{ emptyStateConfig.icon }}\n </div>\n </div>\n\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div\n [class]=\"emptyStateConfig.bgColor\"\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\n ></div>\n </div>\n </div>\n </div>\n\n <!-- Conteúdo da mensagem -->\n <div class=\"empty-state-content text-center space-y-4\">\n <!-- Título -->\n <h3 class=\"text-2xl font-bold text-gray-900 mb-2\">\n {{ emptyStateConfig.title }}\n </h3>\n\n <!-- Descrição -->\n <p class=\"text-gray-600 text-lg leading-relaxed px-4\">\n {{ emptyStateConfig.description }}\n </p>\n\n <!-- Informações adicionais baseadas no status -->\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-green-50 text-green-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-check-circle\"></i>\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\n </div>\n </div>\n\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-red-50 text-red-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-exclamation-circle\"></i>\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\n </div>\n </div>\n </div>\n\n <!-- Ações -->\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\n <!-- Ação Primária -->\n <button\n *ngIf=\"hideBtn\"\n (click)=\"onPrimaryAction()\"\n [ngClass]=\"{\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\n 'bg-blue-600 ':\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\n }\"\n class=\"col-12 btn btn-primary\"\n >\n {{ emptyStateConfig.primaryActionText }}\n </button>\n\n <!-- Ação Secundária -->\n <button\n *ngIf=\"emptyStateConfig.secondaryActionText\"\n (click)=\"onSecondaryAction()\"\n class=\"col-12 btn btn-outline-primary\"\n >\n {{ emptyStateConfig.secondaryActionText }}\n </button>\n </div>\n\n <!-- Link de ajuda (opcional) -->\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\n <a\n href=\"#\"\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n <i class=\"fas fa-question-circle mr-2\"></i>\n Precisa de ajuda? Entre em contato com o suporte\n </a>\n </div>\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { filter, map, mergeMap } from 'rxjs';\n\n@Component({\n selector: 'lib-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.css'],\n})\nexport class NavComponent implements OnInit {\n changeNavColor: boolean = false;\n\n openClose: boolean = false;\n message: string = '';\n\n lastScrollPosition = 0;\n isHeaderVisible = true;\n headerHeight = 0;\n isMobile = false;\n\n hasOffer: boolean = false;\n allowTransparency = false;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private el: ElementRef\n ) {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n map(() => this.activatedRoute),\n map((route) => {\n while (route.firstChild) route = route.firstChild;\n return route;\n }),\n mergeMap((route) => route.data)\n )\n .subscribe((data) => {\n this.allowTransparency = !!data['transparentNav'];\n\n this.lastScrollPosition = 0;\n\n this.isHeaderVisible = true; // força aparecer no load\n this.changeNavColor = !this.allowTransparency;\n });\n }\n\n ngAfterViewInit() {\n this.checkMobile();\n\n // Obtém a altura do header-menu após a view ser inicializada\n const headerMenu = this.el.nativeElement.querySelector('[header-menu]');\n if (headerMenu) {\n this.headerHeight = headerMenu.offsetHeight;\n }\n }\n\n ngOnInit(): void {\n this.hasOffer = this.router.url.includes('offer');\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n }\n\n private checkMobile() {\n this.isMobile = window.innerWidth < 768; // 768px é o breakpoint padrão do Tailwind para md\n if (!this.isMobile) {\n this.isHeaderVisible = true; // Garante que fique visível em desktop\n }\n }\n public menu() {\n this.openClose = !this.openClose;\n }\n\n receiveMessage(event: string) {\n this.message = event;\n }\n\n @HostListener('window:scroll', [])\n onWindowScroll() {\n const scroll = window.pageYOffset || document.documentElement.scrollTop;\n const isScrollingDown = scroll > this.lastScrollPosition;\n\n // --- REGRA DE VISIBILIDADE ---\n if (this.allowTransparency) {\n // Comportamento especial para Showcase (sua regra atual)\n if (scroll <= 10) {\n // No topo: fica invisível (se você quer que suma ao chegar no topo,\n // isHeaderVisible deve ser false ou a cor deve ser transparente)\n this.isHeaderVisible = !isScrollingDown;\n } else if (isScrollingDown && scroll > 50) {\n // Scroll Down: esconde\n this.isHeaderVisible = false;\n } else {\n // Scroll Up: mostra\n this.isHeaderVisible = true;\n }\n } else {\n // REGRA PARA DEMAIS COMPONENTES: Sempre visível\n this.isHeaderVisible = true;\n }\n\n // --- REGRA DE COR (Mantida) ---\n if (!this.allowTransparency) {\n this.changeNavColor = true;\n } else {\n this.changeNavColor = scroll > 20;\n }\n\n this.lastScrollPosition = scroll;\n }\n}\n","<!-- 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","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\nimport { CustomModalComponent } from './components/custom-modal/custom-modal.component';\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\nimport { NavComponent } from './components/nav/nav.component';\nimport { TuduComponentsComponent } from './tudu-components.component';\n\n@NgModule({\n declarations: [\n TuduComponentsComponent,\n CardLayoutComponent,\n NavComponent,\n FallbackMessageComponent,\n CustomModalComponent,\n ],\n imports: [CommonModule],\n exports: [\n TuduComponentsComponent,\n CardLayoutComponent,\n NavComponent,\n FallbackMessageComponent,\n CustomModalComponent,\n ],\n})\nexport class TuduComponentsModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","/*\n * Public API Surface of tudu-components\n */\nexport * from './lib/tudu-components.component';\nexport * from './lib/tudu-components.module'; // ← Se criou este módulo\n\nexport * from './lib/components/card-layout/card-layout.component';\nexport * from './lib/components/nav/nav.component';\nexport * from './lib/components/fallback-message/fallback-message.component';\nexport * from './lib/components/custom-modal/custom-modal.component';\nexport * from './lib/tudu-components.service';\n// export * from './lib/card-layout.module'; // ← Ou se usou CardLayoutModule\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":";;;;;;;;MAYa,uBAAuB,CAAA;AAElC,IAAA,WAAA,GAAA,GAAiB;IAEjB,QAAQ,GAAA;KACP;;oHALU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EARxB,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAIU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,CAAA;;;MCAU,mBAAmB,CAAA;AAkB9B,IAAA,WAAA,CAAoB,KAAa,EAAA;QAAb,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QAjBxB,IAAY,CAAA,YAAA,GAAW,EAAE,CAAC;AAC1B,QAAA,IAAA,CAAA,qBAAqB,GAAW,CAAC,CAAC;AAClC,QAAA,IAAA,CAAA,UAAU,GAAY,KAAK,CAAC;QAErC,IAAI,CAAA,IAAA,GAAa,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAExD,QAAA,IAAA,CAAA,aAAa,GAAG;YACd,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;YAC5D,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE;YACrE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;YAClE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;SACnE,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAa,CAAA,aAAA,GAAW,GAAG,CAAC;QAG1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;YAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACtC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAClD,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;QACN,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,MAAK;AACrC,YAAA,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAChD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SAChD,EAAE,IAAI,CAAC,CAAC;QAET,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;KAClE;AAED,IAAA,IAAI,WAAW,GAAA;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;AAEhD,QAAA,QAAQ,MAAM;AACZ,YAAA,KAAK,YAAY;gBACf,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,WAAW;gBACd,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,WAAW;gBACd,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,WAAW;gBACd,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,UAAU;gBACb,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,eAAe;gBAClB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,UAAU;gBACb,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA;gBACE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC7D,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpC,SAAA;KACF;IAED,WAAW,GAAA;QACT,KAAK,CAAC,8BAA8B,CAAC,CAAC;KACvC;;gHApEU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,2KCRhC,+8FA8FA,EAAA,MAAA,EAAA,CAAA,ynEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDtFa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,+8FAAA,EAAA,MAAA,EAAA,CAAA,ynEAAA,CAAA,EAAA,CAAA;6FAKlB,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;;;MEOK,oBAAoB,CAAA;AA0B/B,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QAzB7B,IAAO,CAAA,OAAA,GAAG,aAAa,CAAC;QACxB,IAAK,CAAA,KAAA,GAAG,OAAO,CAAC;QAChB,IAAO,CAAA,OAAA,GAAG,EAAE,CAAC;QACb,IAAe,CAAA,eAAA,GAAG,QAAQ,CAAC;QAC3B,IAAgB,CAAA,gBAAA,GAAG,EAAE,CAAC;QACtB,IAAa,CAAA,aAAA,GAA4B,IAAI,CAAC;QAC9C,IAAY,CAAA,YAAA,GAAQ,IAAI,CAAC;AAExB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;AACvC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;QAExC,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAClB,IAAY,CAAA,YAAA,GAAW,qBAAqB,CAAC;QAC7C,IAAO,CAAA,OAAA,GAAG,IAAI,CAAC;QACf,IAAe,CAAA,eAAA,GAAG,CAAC,CAAC;QACpB,IAAW,CAAA,WAAA,GAAW,2CAA2C,CAAC;QAElE,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;;QAGtC,IAAS,CAAA,SAAA,GAAW,UAAU,CAAC;QAC/B,IAAc,CAAA,cAAA,GAAW,gBAAgB,CAAC;QAC1C,IAAY,CAAA,YAAA,GAAW,cAAc,CAAC;QACtC,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;KAEwB;AAE1C,IAAA,QAAQ,MAAW;;IAGnB,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;;AAEtB,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC;KACvD;;AAGD,IAAA,IAAI,CACF,IAAe,EACf,OAAkB,GAAA,EAAE,EACpB,aAAgC,EAAA;AAEhC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnC,QAAA,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACpC,SAAA;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED,IAAA,cAAc,CAAC,IAAe,EAAE,OAAA,GAAkB,EAAE,EAAA;AAClD,QAAA,QAAQ,IAAI;AACV,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC/B,MAAM;AACR,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBAC7B,MAAM;AACR,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC/B,MAAM;AACT,SAAA;KACF;AAEO,IAAA,gBAAgB,CAAC,OAAe,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;AACnC,QAAA,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAC;AAC3C,QAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,iCAAiC,CAAC;KACjE;AAEO,IAAA,cAAc,CAAC,OAAe,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;AACnC,QAAA,IAAI,CAAC,cAAc,GAAG,kBAAkB,CAAC;AACzC,QAAA,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,sBAAsB,CAAC;AAC3C,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,4CAA4C,CAAC;KAC5E;AAEO,IAAA,gBAAgB,CAAC,OAAe,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAC;AACzC,QAAA,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAC;AAC3C,QAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,wCAAwC,CAAC;KACxE;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AACnC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACzB,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,SAAA;KACF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;;QAGtB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;;AAGxB,YAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE;AACzC,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AACzC,aAAA;SACF,EAAE,GAAG,CAAC,CAAC;KACT;;IAGD,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACzB,SAAA;KACF;;iHA1HU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,ykBClBjC,i3FAmFA,EAAA,MAAA,EAAA,CAAA,k4DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDjEa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,KAAK,EAAA,QAAA,EAAA,i3FAAA,EAAA,MAAA,EAAA,CAAA,k4DAAA,CAAA,EAAA,CAAA;iGAKR,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEE,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAmGN,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,iBAAiB,CAAA;;;MErHpB,wBAAwB,CAAA;AALrC,IAAA,WAAA,GAAA;QAMW,IAAI,CAAA,IAAA,GAAU,EAAE,CAAC;QACjB,IAAY,CAAA,YAAA,GAAW,EAAE,CAAC;QAK1B,IAAO,CAAA,OAAA,GAAa,KAAK,CAAC;AAEzB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;AAgHtD,KAAA;AA9GC,IAAA,IAAI,gBAAgB,GAAA;;;;;;;;;;;;;;;QAgBlB,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,QAAQ,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AACrC,gBAAA,KAAK,YAAY;oBACf,OAAO;AACL,wBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,uBAAuB;wBAClD,WAAW,EACT,IAAI,CAAC,iBAAiB;4BACtB,mEAAmE;AACrE,wBAAA,IAAI,EAAE,GAAG;AACT,wBAAA,SAAS,EAAE,gBAAgB;AAC3B,wBAAA,OAAO,EAAE,cAAc;AACvB,wBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,cAAc;AAC3D,wBAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,iBAAiB;qBACnE,CAAC;;;;;;;;;;;;;AAeJ,gBAAA,KAAK,cAAc;oBACjB,OAAO;AACL,wBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,aAAa;AACxC,wBAAA,WAAW,EACT,IAAI,CAAC,iBAAiB,IAAI,mCAAmC;AAC/D,wBAAA,IAAI,EAAE,IAAI;;;AAGV,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,mBAAmB;;qBAEjE,CAAC;AACJ,gBAAA,KAAK,cAAc;oBACjB,OAAO;AACL,wBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,uBAAuB;wBAClD,WAAW,EACT,IAAI,CAAC,iBAAiB;4BACtB,2DAA2D;AAC7D,wBAAA,IAAI,EAAE,IAAI;;;AAGV,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,sBAAsB;;qBAEpE,CAAC;AAEJ,gBAAA;AACE,oBAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAClC,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAChC;IAEO,gBAAgB,GAAA;QACtB,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,kBAAkB;AAC7C,YAAA,WAAW,EACT,IAAI,CAAC,iBAAiB,IAAI,oCAAoC;AAChE,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,eAAe;AAC1B,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,iBAAiB;YAC9D,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;SAC9C,CAAC;KACH;;IAGD,oBAAoB,GAAA;AAClB,QAAA,QACE,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;AACtB,YAAA,CAAC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,QAAQ,CAClE,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CACjC,EACD;KACH;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC3B;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;KAC7B;;qHAzHU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,iXCjBrC,o5GA8FA,EAAA,MAAA,EAAA,CAAA,kVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD7Ea,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,o5GAAA,EAAA,MAAA,EAAA,CAAA,kVAAA,CAAA,EAAA,CAAA;8BAKvB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;;;MEZI,YAAY,CAAA;AAcvB,IAAA,WAAA,CACU,MAAc,EACd,cAA8B,EAC9B,EAAc,EAAA;QAFd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAhBxB,IAAc,CAAA,cAAA,GAAY,KAAK,CAAC;QAEhC,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;QAC3B,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;QAErB,IAAkB,CAAA,kBAAA,GAAG,CAAC,CAAC;QACvB,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC;QACvB,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC;QACjB,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QAEjB,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;QAC1B,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC;QAOxB,IAAI,CAAC,MAAM,CAAC,MAAM;AACf,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC,EACjD,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,EAC9B,GAAG,CAAC,CAAC,KAAK,KAAI;YACZ,OAAO,KAAK,CAAC,UAAU;AAAE,gBAAA,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;AAClD,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC,EACF,QAAQ,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,CAChC;AACA,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;YAClB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAElD,YAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;AAE5B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAChD,SAAC,CAAC,CAAC;KACN;IAED,eAAe,GAAA;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;;AAGnB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AACxE,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;AAC7C,SAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACnD;IAGD,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAEO,WAAW,GAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,SAAA;KACF;IACM,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;KAClC;AAED,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;IAGD,cAAc,GAAA;QACZ,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;AACxE,QAAA,MAAM,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;;QAGzD,IAAI,IAAI,CAAC,iBAAiB,EAAE;;YAE1B,IAAI,MAAM,IAAI,EAAE,EAAE;;;AAGhB,gBAAA,IAAI,CAAC,eAAe,GAAG,CAAC,eAAe,CAAC;AACzC,aAAA;AAAM,iBAAA,IAAI,eAAe,IAAI,MAAM,GAAG,EAAE,EAAE;;AAEzC,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC9B,aAAA;AAAM,iBAAA;;AAEL,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,aAAA;AACF,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC5B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,GAAG,EAAE,CAAC;AACnC,SAAA;AAED,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;KAClC;;yGAxGU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,4ICfzB,2oCAoCA,EAAA,MAAA,EAAA,CAAA,mmBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDrBa,YAAY,EAAA,UAAA,EAAA,CAAA;kBALxB,SAAS;+BACE,SAAS,EAAA,QAAA,EAAA,2oCAAA,EAAA,MAAA,EAAA,CAAA,mmBAAA,CAAA,EAAA,CAAA;mJA0DnB,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,eAAe,CAAA;gBAoB7B,cAAc,EAAA,CAAA;sBADb,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,CAAA;;;ME9DtB,oBAAoB,CAAA;;iHAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,iBAf7B,uBAAuB;QACvB,mBAAmB;QACnB,YAAY;QACZ,wBAAwB;QACxB,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAEZ,YAAY,CAAA,EAAA,OAAA,EAAA,CAEpB,uBAAuB;QACvB,mBAAmB;QACnB,YAAY;QACZ,wBAAwB;QACxB,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAGX,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YATrB,YAAY,CAAA,EAAA,CAAA,CAAA;2FASX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAjBhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,uBAAuB;wBACvB,mBAAmB;wBACnB,YAAY;wBACZ,wBAAwB;wBACxB,oBAAoB;AACrB,qBAAA;oBACD,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,OAAO,EAAE;wBACP,uBAAuB;wBACvB,mBAAmB;wBACnB,YAAY;wBACZ,wBAAwB;wBACxB,oBAAoB;AACrB,qBAAA;AACF,iBAAA,CAAA;;;MCnBY,qBAAqB,CAAA;AAEhC,IAAA,WAAA,GAAA,GAAiB;;kHAFN,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACJD;;AAEG;AASH;;ACXA;;AAEG;;;;"}
@@ -19,6 +19,7 @@ export declare class CustomModalComponent implements OnInit {
19
19
  priceNegotiated: number;
20
20
  messageBody: string;
21
21
  isLoadingBtn: boolean | undefined;
22
+ disabledBtn: boolean;
22
23
  modalIcon: string;
23
24
  modalIconColor: string;
24
25
  modalBgColor: string;
@@ -35,6 +36,6 @@ export declare class CustomModalComponent implements OnInit {
35
36
  closeModal(): void;
36
37
  onPopState(): void;
37
38
  static ɵfac: i0.ɵɵFactoryDeclaration<CustomModalComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<CustomModalComponent, "lib-custom-modal", never, { "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"; }, { "modalClosed": "modalClosed"; "modalAction": "modalAction"; }, never, ["[optional-content]"], false>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<CustomModalComponent, "lib-custom-modal", never, { "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"; }, { "modalClosed": "modalClosed"; "modalAction": "modalAction"; }, never, ["[optional-content]"], false>;
39
40
  }
40
41
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tudu-components",
3
- "version": "0.2.13",
3
+ "version": "0.2.15",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.0",
6
6
  "@angular/core": "^17.3.0"