tudu-components 0.2.28 → 0.2.29

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.
@@ -116,10 +116,10 @@ export class CustomModalComponent {
116
116
  }
117
117
  }
118
118
  CustomModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, deps: [{ token: i1.Location }], target: i0.ɵɵFactoryTarget.Component });
119
- CustomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomModalComponent, selector: "lib-custom-modal", inputs: { modalId: "modalId", title: "title", message: "message", closeButtonText: "closeButtonText", actionButtonText: "actionButtonText", paymentMethod: "paymentMethod", errorDetails: "errorDetails", showModal: "showModal", messageTitle: "messageTitle", showBtn: "showBtn", priceNegotiated: "priceNegotiated", messageBody: "messageBody", isLoadingBtn: "isLoadingBtn", disabledBtn: "disabledBtn", isLocked: "isLocked" }, outputs: { modalClosed: "modalClosed", modalAction: "modalAction", closeAction: "closeAction" }, host: { listeners: { "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-2xl bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }] });
119
+ CustomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomModalComponent, selector: "lib-custom-modal", inputs: { modalId: "modalId", title: "title", message: "message", closeButtonText: "closeButtonText", actionButtonText: "actionButtonText", paymentMethod: "paymentMethod", errorDetails: "errorDetails", showModal: "showModal", messageTitle: "messageTitle", showBtn: "showBtn", priceNegotiated: "priceNegotiated", messageBody: "messageBody", isLoadingBtn: "isLoadingBtn", disabledBtn: "disabledBtn", isLocked: "isLocked" }, outputs: { modalClosed: "modalClosed", modalAction: "modalAction", closeAction: "closeAction" }, host: { listeners: { "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-lg bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){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" }] });
120
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, decorators: [{
121
121
  type: Component,
122
- args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-2xl bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){overflow:hidden}\n"] }]
122
+ args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-lg bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){overflow:hidden}\n"] }]
123
123
  }], ctorParameters: function () { return [{ type: i1.Location }]; }, propDecorators: { modalId: [{
124
124
  type: Input
125
125
  }], title: [{
@@ -160,4 +160,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
160
160
  type: HostListener,
161
161
  args: ['window:popstate']
162
162
  }] } });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLW1vZGFsL2N1c3RvbS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1tb2RhbC9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7OztBQVd2QixNQUFNLE9BQU8sb0JBQW9CO0lBNkIvQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBNUI3QixZQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3hCLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLG9CQUFlLEdBQUcsUUFBUSxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUE0QixJQUFJLENBQUM7UUFDOUMsaUJBQVksR0FBUSxJQUFJLENBQUM7UUFFeEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN2QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFeEMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixpQkFBWSxHQUFXLHFCQUFxQixDQUFDO1FBQzdDLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUNwQixnQkFBVyxHQUFXLDJDQUEyQyxDQUFDO1FBRWxFLGdC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cUdBQXBCLG9CQUFvQiwybkJDbEJqQyw2bElBeUZNOzJGRHZFTyxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLEtBQUs7K0ZBS1IsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQWtHTixVQUFVO3NCQURULFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG50eXBlIE1vZGFsVHlwZSA9ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnd2FybmluZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jdXN0b20tbW9kYWwnLFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1tb2RhbC5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgbW9kYWxJZCA9ICdjdXN0b21Nb2RhbCc7XHJcbiAgQElucHV0KCkgdGl0bGUgPSAnQXZpc28nO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2UgPSAnJztcclxuICBASW5wdXQoKSBjbG9zZUJ1dHRvblRleHQgPSAnRmVjaGFyJztcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25UZXh0ID0gJyc7XHJcbiAgQElucHV0KCkgcGF5bWVudE1ldGhvZDogJ3BpeCcgfCAnY3JlZGl0JyB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGVycm9yRGV0YWlsczogYW55ID0gbnVsbDtcclxuXHJcbiAgQE91dHB1dCgpIG1vZGFsQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBtb2RhbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgY2xvc2VBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dNb2RhbCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2VUaXRsZTogc3RyaW5nID0gJ1BhZ2FtZW50byBBcHJvdmFkbyEnO1xyXG4gIEBJbnB1dCgpIHNob3dCdG4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHByaWNlTmVnb3RpYXRlZCA9IDA7XHJcbiAgQElucHV0KCkgbWVzc2FnZUJvZHk6IHN0cmluZyA9ICdTZXUgcGFnYW1lbnRvIGZvaSBwcm9jZXNzYWRvIGNvbSBzdWNlc3NvLic7XHJcbiAgQElucHV0KCkgaXNMb2FkaW5nQnRuOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkQnRuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIPCflJIgTk9WQSBQUk9QUklFREFERTogVHJhdmEgbyBmZWNoYW1lbnRvIGRvIG1vZGFsXHJcbiAgQElucHV0KCkgaXNMb2NrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbW9kYWxJY29uOiBzdHJpbmcgPSAnZmEtY2hlY2snO1xyXG4gIG1vZGFsSWNvbkNvbG9yOiBzdHJpbmcgPSAndGV4dC1ncmVlbi02MDAnO1xyXG4gIG1vZGFsQmdDb2xvcjogc3RyaW5nID0gJ2JnLWdyZWVuLTEwMCc7XHJcbiAgaXNDbG9zaW5nID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIG9wZW5Nb2RhbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd01vZGFsID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDbG9zaW5nID0gZmFsc2U7XHJcbiAgICBpZiAoIXdpbmRvdy5sb2NhdGlvbi5oYXNoLmluY2x1ZGVzKCdtb2RhbE9wZW4nKSkge1xyXG4gICAgICB0aGlzLmxvY2F0aW9uLmdvKHRoaXMubG9jYXRpb24ucGF0aCgpICsgJyNtb2RhbE9wZW4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW4oXHJcbiAgICB0eXBlOiBNb2RhbFR5cGUsXHJcbiAgICBtZXNzYWdlOiBzdHJpbmcgPSAnJyxcclxuICAgIHBheW1lbnRNZXRob2Q/OiAncGl4JyB8ICdjcmVkaXQnLFxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWd1cmVNb2RhbCh0eXBlLCBtZXNzYWdlKTtcclxuICAgIGlmIChwYXltZW50TWV0aG9kKSB0aGlzLnBheW1lbnRNZXRob2QgPSBwYXltZW50TWV0aG9kO1xyXG4gICAgdGhpcy5vcGVuTW9kYWwoKTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZU1vZGFsKHR5cGU6IE1vZGFsVHlwZSwgbWVzc2FnZTogc3RyaW5nID0gJycsIHRpdGxlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdCdG4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZ0J0biA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdzdWNjZXNzJzpcclxuICAgICAgICB0aGlzLnNldFN1Y2Nlc3NTdHlsZXMobWVzc2FnZSwgdGl0bGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdlcnJvcic6XHJcbiAgICAgICAgdGhpcy5zZXRFcnJvclN0eWxlcyhtZXNzYWdlLCB0aXRsZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxyXG4gICAgICAgIHRoaXMuc2V0V2FybmluZ1N0eWxlcyhtZXNzYWdlLCB0aXRsZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFN1Y2Nlc3NTdHlsZXMobWVzc2FnZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RhbEljb24gPSAnZmEtY2hlY2stY2lyY2xlJztcclxuICAgIHRoaXMubW9kYWxJY29uQ29sb3IgPSAnbW9kYWwtaWNvbi1zdWNjZXNzJztcclxuICAgIHRoaXMubW9kYWxCZ0NvbG9yID0gJ21vZGFsLWJnLXN1Y2Nlc3MnO1xyXG4gICAgdGhpcy5tZXNzYWdlVGl0bGUgPSB0aXRsZSB8fCAnU3VjZXNzbyEnO1xyXG4gICAgdGhpcy5tZXNzYWdlQm9keSA9IG1lc3NhZ2UgfHwgJ09wZXJhw6fDo28gcmVhbGl6YWRhIGNvbSBzdWNlc3NvLic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEVycm9yU3R5bGVzKG1lc3NhZ2U6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kYWxJY29uID0gJ2ZhLXRpbWVzLWNpcmNsZSc7XHJcbiAgICB0aGlzLm1vZGFsSWNvbkNvbG9yID0gJ21vZGFsLWljb24tZXJyb3InO1xyXG4gICAgdGhpcy5tb2RhbEJnQ29sb3IgPSAnbW9kYWwtYmctZXJyb3InO1xyXG4gICAgdGhpcy5tZXNzYWdlVGl0bGUgPSB0aXRsZSB8fCAnT3BzISBBbGdvIGRldSBlcnJhZG8nO1xyXG4gICAgdGhpcy5tZXNzYWdlQm9keSA9IG1lc3NhZ2UgfHwgJ07Do28gY29uc2VndWltb3MgcHJvY2Vzc2FyIHN1YSBzb2xpY2l0YcOnw6NvLic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdhcm5pbmdTdHlsZXMobWVzc2FnZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RhbEljb24gPSAnZmEtaW5mby1jaXJjbGUnO1xyXG4gICAgdGhpcy5tb2RhbEljb25Db2xvciA9ICd0ZXh0LWJsdWUtNjAwJztcclxuICAgIHRoaXMubW9kYWxCZ0NvbG9yID0gJ2JnLWJsdWUtNTAnO1xyXG5cclxuICAgIHRoaXMubWVzc2FnZVRpdGxlID0gdGl0bGUgfHwgJ0F0ZW7Dp8Ojbyc7XHJcbiAgICB0aGlzLm1lc3NhZ2VCb2R5ID0gbWVzc2FnZSB8fCAnVmVyaWZpcXVlIG9zIGRhZG9zIGFudGVzIGRlIGNvbnRpbnVhci4nO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uTW9kYWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdCdG4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZ0J0biA9IHRydWU7XHJcbiAgICAgIHRoaXMubW9kYWxBY3Rpb24uZW1pdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tb2RhbEFjdGlvbi5lbWl0KCk7XHJcbiAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VNb2RhbChmcm9tQnV0dG9uOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zaG93TW9kYWwgfHwgdGhpcy5pc0Nsb3NpbmcpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzQ2xvc2luZyA9IHRydWU7XHJcbiAgICBpZiAoZnJvbUJ1dHRvbikge1xyXG4gICAgICB0aGlzLmNsb3NlQWN0aW9uLmVtaXQoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd01vZGFsID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNDbG9zaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubW9kYWxDbG9zZWQuZW1pdCgpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcbiAgLy8g4pyFIEludGVyY2VwdGEgbyBib3TDo28gdm9sdGFyIGRvIGNlbHVsYXIvYnJvd3NlclxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb3BzdGF0ZScpXHJcbiAgb25Qb3BTdGF0ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3dNb2RhbCkge1xyXG4gICAgICBpZiAodGhpcy5pc0xvY2tlZCkge1xyXG4gICAgICAgIC8vIPCflJIgU2UgZXN0aXZlciB0cmF2YWRvLCBcImFudWxhbW9zXCIgbyB2b2x0YXIgYWRpY2lvbmFuZG8gbyBoYXNoIGRlIG5vdm9cclxuICAgICAgICB0aGlzLmxvY2F0aW9uLmdvKHRoaXMubG9jYXRpb24ucGF0aCgpICsgJyNtb2RhbE9wZW4nKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNob3dNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW9kYWxDbG9zZWQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICAqbmdJZj1cInNob3dNb2RhbFwiXHJcbiAgY2xhc3M9XCJjdXN0b20tbW9kYWwtcm9vdCBmaXhlZCBpbnNldC0wIHotWzk5OTldIGZsZXggZmxleC1jb2wganVzdGlmeS1lbmQgbWQ6anVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHBvaW50ZXItZXZlbnRzLWF1dG9cIlxyXG4gICh0b3VjaG1vdmUpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuPlxyXG4gIDwhLS0gRnVuZG8gZXNjdXJvIG92ZXJsYXkgLS0+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGJnLXNsYXRlLTkwMC82MCBiYWNrZHJvcC1ibHVyLXNtIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi01MDBcIlxyXG4gICAgW2NsYXNzLm9wYWNpdHktMF09XCJpc0Nsb3NpbmdcIlxyXG4gICAgKGNsaWNrKT1cIiFpc0xvY2tlZCAmJiBjbG9zZU1vZGFsKClcIlxyXG4gICAgKHRvdWNobW92ZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXHJcbiAgPjwvZGl2PlxyXG5cclxuICA8IS0tIENvbnRhaW5lciBQcmluY2lwYWwgZG8gTW9kYWwgLS0+XHJcbiAgPHNlY3Rpb25cclxuICAgIGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIG1kOm1heC13LTJ4bCBiZy1zdXJmYWNlIG1heC1oLVsxMDBkdmhdIG1kOm1heC1oLVs4NWR2aF0gcm91bmRlZC10LVsyLjVyZW1dIG1kOnJvdW5kZWQtWzIuNXJlbV0gc2hhZG93LTJ4bCBvdmVyZmxvdy1oaWRkZW4gZmxleCBmbGV4LWNvbFwiXHJcbiAgICBbbmdDbGFzc109XCJpc0Nsb3NpbmcgPyAnYW5pbWF0ZS1zbGlkZS1kb3duJyA6ICdhbmltYXRlLXNsaWRlLXVwJ1wiXHJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICA+XHJcbiAgICA8IS0tIENBQkXDh0FMSE8gRklYTyAtLT5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJweC02IHB0LTQgcGItMiBiZy1zdXJmYWNlIHotMTAgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlclwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cImlzTG9ja2VkID8gJ2N1cnNvci1ub3QtYWxsb3dlZCBvcGFjaXR5LTUwJyA6ICdjdXJzb3ItcG9pbnRlcidcIlxyXG4gICAgICAoY2xpY2spPVwiIWlzTG9ja2VkICYmIGNsb3NlTW9kYWwoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTEyIGgtMS41IGJnLW1lZGl1bSByb3VuZGVkLWZ1bGxcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gw4FSRUEgREUgU0NST0xMIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gc2Nyb2xsLXNtb290aCBvdmVyc2Nyb2xsLWNvbnRhaW4gYmctc3VyZmFjZSBjdXN0b20tc2Nyb2xsYmFyIHB4LTYgcHQtMlwiXHJcbiAgICAgIHN0eWxlPVwidG91Y2gtYWN0aW9uOiBwYW4teTsgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpblwiXHJcbiAgICAgICh0b3VjaG1vdmUpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHctZnVsbFwiPlxyXG4gICAgICAgIDwhLS0gw41jb25lIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBtYi00XCI+XHJcbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCJtb2RhbEJnQ29sb3JcIiBjbGFzcz1cInctMjAgaC0yMCByb3VuZGVkLWZ1bGwgb3BhY2l0eS00MFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cIm1vZGFsSWNvbiArICcgJyArIG1vZGFsSWNvbkNvbG9yXCIgY2xhc3M9XCJmYXMgdGV4dC0zeGxcIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBUw610dWxvIC0tPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LXRleHQtcHJpbWFyeSBtYi0yXCI+e3sgbWVzc2FnZVRpdGxlIH19PC9oMj5cclxuXHJcbiAgICAgICAgPCEtLSBDb3JwbyBkYSBNZW5zYWdlbSAtLT5cclxuICAgICAgICA8cCAqbmdJZj1cIm1lc3NhZ2VCb2R5XCIgY2xhc3M9XCJ0ZXh0LXRleHQtc2Vjb25kYXJ5IG1iLTRcIj57eyBtZXNzYWdlQm9keSB9fTwvcD5cclxuXHJcbiAgICAgICAgPCEtLSBDb250ZcO6ZG8gRGluw6JtaWNvIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1keW5hbWljLWNvbnRlbnQgdGV4dC1sZWZ0IHctZnVsbCBwYi0yXCI+XHJcbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbb3B0aW9uYWwtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gRXJyb3MgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImVycm9yRGV0YWlsc1wiIGNsYXNzPVwibXQtNCBwLTQgYmctcmVkLTUwIGRhcms6YmctcmVkLTk1MC8yMCByb3VuZGVkLTJ4bCB0ZXh0LWxlZnQgYm9yZGVyIGJvcmRlci1yZWQtMTAwIGRhcms6Ym9yZGVyLXJlZC05MDAvMzAgdy1mdWxsIG1iLTRcIj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtcmVkLTcwMCBkYXJrOnRleHQtcmVkLTQwMCB1cHBlcmNhc2UgbWItMVwiPkxvZyBkbyBzaXN0ZW1hOjwvcD5cclxuICAgICAgICAgIDxwcmUgY2xhc3M9XCJ0ZXh0LVsxMXB4XSB0ZXh0LXJlZC02MDAgZGFyazp0ZXh0LXJlZC0zMDAgZm9udC1tb25vIHdoaXRlc3BhY2UtcHJlLXdyYXBcIj57eyBlcnJvckRldGFpbHMgfCBqc29uIH19PC9wcmU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBCT1TDlUVTIChBR09SQSBERU5UUk8gRE8gU0NST0xMKSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBwdC00IHBiLTYgbXQtNCBib3JkZXItdCBib3JkZXItYm9yZGVyLWxpZ2h0LzUwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGdhcC0zXCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZEJ0biB8fCAocHJpY2VOZWdvdGlhdGVkIDw9IDAgJiYgYWN0aW9uQnV0dG9uVGV4dCA9PT0gJ05lZ29jaWFyJylcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbkJ1dHRvblRleHRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uTW9kYWwoKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB5LTQgdGV4dC13aGl0ZSByb3VuZGVkLTJ4bCBmb250LWJvbGQgYWN0aXZlOnNjYWxlLVswLjk4XSB0cmFuc2l0aW9uLWFsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBzaGFkb3ctbGcgYnRuLXByaW1hcnktY3VzdG9tXCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3ZhcigtLXByaW1hcnkpJ1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzTG9hZGluZ0J0blwiPnt7IGFjdGlvbkJ1dHRvblRleHQgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdCdG5cIj5cclxuICAgICAgICAgICAgICA8c3Bhbj5Qcm9jZXNzYW5kbzwvc3Bhbj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jaXJjbGUtbm90Y2ggZmEtc3BpblwiPjwvaT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0J0blwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZU1vZGFsKHRydWUpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHktMiB0ZXh0LXRleHQtbXV0ZWQgZm9udC1zZW1pYm9sZCBob3Zlcjp0ZXh0LXRleHQtcHJpbWFyeSB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNsb3NlQnV0dG9uVGV4dCB9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9zZWN0aW9uPlxyXG48L2Rpdj4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLW1vZGFsL2N1c3RvbS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1tb2RhbC9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7OztBQVd2QixNQUFNLE9BQU8sb0JBQW9CO0lBNkIvQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBNUI3QixZQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3hCLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLG9CQUFlLEdBQUcsUUFBUSxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUE0QixJQUFJLENBQUM7UUFDOUMsaUJBQVksR0FBUSxJQUFJLENBQUM7UUFFeEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN2QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFeEMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixpQkFBWSxHQUFXLHFCQUFxQixDQUFDO1FBQzdDLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUNwQixnQkFBVyxHQUFXLDJDQUEyQyxDQUFDO1FBRWxFLGdC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cUdBQXBCLG9CQUFvQiwybkJDbEJqQyw0bElBeUZNOzJGRHZFTyxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLEtBQUs7K0ZBS1IsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQWtHTixVQUFVO3NCQURULFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG50eXBlIE1vZGFsVHlwZSA9ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnd2FybmluZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jdXN0b20tbW9kYWwnLFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1tb2RhbC5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgbW9kYWxJZCA9ICdjdXN0b21Nb2RhbCc7XHJcbiAgQElucHV0KCkgdGl0bGUgPSAnQXZpc28nO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2UgPSAnJztcclxuICBASW5wdXQoKSBjbG9zZUJ1dHRvblRleHQgPSAnRmVjaGFyJztcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25UZXh0ID0gJyc7XHJcbiAgQElucHV0KCkgcGF5bWVudE1ldGhvZDogJ3BpeCcgfCAnY3JlZGl0JyB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGVycm9yRGV0YWlsczogYW55ID0gbnVsbDtcclxuXHJcbiAgQE91dHB1dCgpIG1vZGFsQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBtb2RhbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgY2xvc2VBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dNb2RhbCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2VUaXRsZTogc3RyaW5nID0gJ1BhZ2FtZW50byBBcHJvdmFkbyEnO1xyXG4gIEBJbnB1dCgpIHNob3dCdG4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHByaWNlTmVnb3RpYXRlZCA9IDA7XHJcbiAgQElucHV0KCkgbWVzc2FnZUJvZHk6IHN0cmluZyA9ICdTZXUgcGFnYW1lbnRvIGZvaSBwcm9jZXNzYWRvIGNvbSBzdWNlc3NvLic7XHJcbiAgQElucHV0KCkgaXNMb2FkaW5nQnRuOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkQnRuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIPCflJIgTk9WQSBQUk9QUklFREFERTogVHJhdmEgbyBmZWNoYW1lbnRvIGRvIG1vZGFsXHJcbiAgQElucHV0KCkgaXNMb2NrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbW9kYWxJY29uOiBzdHJpbmcgPSAnZmEtY2hlY2snO1xyXG4gIG1vZGFsSWNvbkNvbG9yOiBzdHJpbmcgPSAndGV4dC1ncmVlbi02MDAnO1xyXG4gIG1vZGFsQmdDb2xvcjogc3RyaW5nID0gJ2JnLWdyZWVuLTEwMCc7XHJcbiAgaXNDbG9zaW5nID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIG9wZW5Nb2RhbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd01vZGFsID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDbG9zaW5nID0gZmFsc2U7XHJcbiAgICBpZiAoIXdpbmRvdy5sb2NhdGlvbi5oYXNoLmluY2x1ZGVzKCdtb2RhbE9wZW4nKSkge1xyXG4gICAgICB0aGlzLmxvY2F0aW9uLmdvKHRoaXMubG9jYXRpb24ucGF0aCgpICsgJyNtb2RhbE9wZW4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW4oXHJcbiAgICB0eXBlOiBNb2RhbFR5cGUsXHJcbiAgICBtZXNzYWdlOiBzdHJpbmcgPSAnJyxcclxuICAgIHBheW1lbnRNZXRob2Q/OiAncGl4JyB8ICdjcmVkaXQnLFxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWd1cmVNb2RhbCh0eXBlLCBtZXNzYWdlKTtcclxuICAgIGlmIChwYXltZW50TWV0aG9kKSB0aGlzLnBheW1lbnRNZXRob2QgPSBwYXltZW50TWV0aG9kO1xyXG4gICAgdGhpcy5vcGVuTW9kYWwoKTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZU1vZGFsKHR5cGU6IE1vZGFsVHlwZSwgbWVzc2FnZTogc3RyaW5nID0gJycsIHRpdGxlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdCdG4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZ0J0biA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdzdWNjZXNzJzpcclxuICAgICAgICB0aGlzLnNldFN1Y2Nlc3NTdHlsZXMobWVzc2FnZSwgdGl0bGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdlcnJvcic6XHJcbiAgICAgICAgdGhpcy5zZXRFcnJvclN0eWxlcyhtZXNzYWdlLCB0aXRsZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxyXG4gICAgICAgIHRoaXMuc2V0V2FybmluZ1N0eWxlcyhtZXNzYWdlLCB0aXRsZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFN1Y2Nlc3NTdHlsZXMobWVzc2FnZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RhbEljb24gPSAnZmEtY2hlY2stY2lyY2xlJztcclxuICAgIHRoaXMubW9kYWxJY29uQ29sb3IgPSAnbW9kYWwtaWNvbi1zdWNjZXNzJztcclxuICAgIHRoaXMubW9kYWxCZ0NvbG9yID0gJ21vZGFsLWJnLXN1Y2Nlc3MnO1xyXG4gICAgdGhpcy5tZXNzYWdlVGl0bGUgPSB0aXRsZSB8fCAnU3VjZXNzbyEnO1xyXG4gICAgdGhpcy5tZXNzYWdlQm9keSA9IG1lc3NhZ2UgfHwgJ09wZXJhw6fDo28gcmVhbGl6YWRhIGNvbSBzdWNlc3NvLic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEVycm9yU3R5bGVzKG1lc3NhZ2U6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kYWxJY29uID0gJ2ZhLXRpbWVzLWNpcmNsZSc7XHJcbiAgICB0aGlzLm1vZGFsSWNvbkNvbG9yID0gJ21vZGFsLWljb24tZXJyb3InO1xyXG4gICAgdGhpcy5tb2RhbEJnQ29sb3IgPSAnbW9kYWwtYmctZXJyb3InO1xyXG4gICAgdGhpcy5tZXNzYWdlVGl0bGUgPSB0aXRsZSB8fCAnT3BzISBBbGdvIGRldSBlcnJhZG8nO1xyXG4gICAgdGhpcy5tZXNzYWdlQm9keSA9IG1lc3NhZ2UgfHwgJ07Do28gY29uc2VndWltb3MgcHJvY2Vzc2FyIHN1YSBzb2xpY2l0YcOnw6NvLic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdhcm5pbmdTdHlsZXMobWVzc2FnZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RhbEljb24gPSAnZmEtaW5mby1jaXJjbGUnO1xyXG4gICAgdGhpcy5tb2RhbEljb25Db2xvciA9ICd0ZXh0LWJsdWUtNjAwJztcclxuICAgIHRoaXMubW9kYWxCZ0NvbG9yID0gJ2JnLWJsdWUtNTAnO1xyXG5cclxuICAgIHRoaXMubWVzc2FnZVRpdGxlID0gdGl0bGUgfHwgJ0F0ZW7Dp8Ojbyc7XHJcbiAgICB0aGlzLm1lc3NhZ2VCb2R5ID0gbWVzc2FnZSB8fCAnVmVyaWZpcXVlIG9zIGRhZG9zIGFudGVzIGRlIGNvbnRpbnVhci4nO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uTW9kYWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdCdG4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZ0J0biA9IHRydWU7XHJcbiAgICAgIHRoaXMubW9kYWxBY3Rpb24uZW1pdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tb2RhbEFjdGlvbi5lbWl0KCk7XHJcbiAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VNb2RhbChmcm9tQnV0dG9uOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zaG93TW9kYWwgfHwgdGhpcy5pc0Nsb3NpbmcpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzQ2xvc2luZyA9IHRydWU7XHJcbiAgICBpZiAoZnJvbUJ1dHRvbikge1xyXG4gICAgICB0aGlzLmNsb3NlQWN0aW9uLmVtaXQoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd01vZGFsID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNDbG9zaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubW9kYWxDbG9zZWQuZW1pdCgpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcbiAgLy8g4pyFIEludGVyY2VwdGEgbyBib3TDo28gdm9sdGFyIGRvIGNlbHVsYXIvYnJvd3NlclxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb3BzdGF0ZScpXHJcbiAgb25Qb3BTdGF0ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3dNb2RhbCkge1xyXG4gICAgICBpZiAodGhpcy5pc0xvY2tlZCkge1xyXG4gICAgICAgIC8vIPCflJIgU2UgZXN0aXZlciB0cmF2YWRvLCBcImFudWxhbW9zXCIgbyB2b2x0YXIgYWRpY2lvbmFuZG8gbyBoYXNoIGRlIG5vdm9cclxuICAgICAgICB0aGlzLmxvY2F0aW9uLmdvKHRoaXMubG9jYXRpb24ucGF0aCgpICsgJyNtb2RhbE9wZW4nKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNob3dNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW9kYWxDbG9zZWQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICAqbmdJZj1cInNob3dNb2RhbFwiXHJcbiAgY2xhc3M9XCJjdXN0b20tbW9kYWwtcm9vdCBmaXhlZCBpbnNldC0wIHotWzk5OTldIGZsZXggZmxleC1jb2wganVzdGlmeS1lbmQgbWQ6anVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHBvaW50ZXItZXZlbnRzLWF1dG9cIlxyXG4gICh0b3VjaG1vdmUpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuPlxyXG4gIDwhLS0gRnVuZG8gZXNjdXJvIG92ZXJsYXkgLS0+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGJnLXNsYXRlLTkwMC82MCBiYWNrZHJvcC1ibHVyLXNtIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi01MDBcIlxyXG4gICAgW2NsYXNzLm9wYWNpdHktMF09XCJpc0Nsb3NpbmdcIlxyXG4gICAgKGNsaWNrKT1cIiFpc0xvY2tlZCAmJiBjbG9zZU1vZGFsKClcIlxyXG4gICAgKHRvdWNobW92ZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXHJcbiAgPjwvZGl2PlxyXG5cclxuICA8IS0tIENvbnRhaW5lciBQcmluY2lwYWwgZG8gTW9kYWwgLS0+XHJcbiAgPHNlY3Rpb25cclxuICAgIGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIG1kOm1heC13LWxnIGJnLXN1cmZhY2UgbWF4LWgtWzEwMGR2aF0gbWQ6bWF4LWgtWzg1ZHZoXSByb3VuZGVkLXQtWzIuNXJlbV0gbWQ6cm91bmRlZC1bMi41cmVtXSBzaGFkb3ctMnhsIG92ZXJmbG93LWhpZGRlbiBmbGV4IGZsZXgtY29sXCJcclxuICAgIFtuZ0NsYXNzXT1cImlzQ2xvc2luZyA/ICdhbmltYXRlLXNsaWRlLWRvd24nIDogJ2FuaW1hdGUtc2xpZGUtdXAnXCJcclxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gID5cclxuICAgIDwhLS0gQ0FCRcOHQUxITyBGSVhPIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInB4LTYgcHQtNCBwYi0yIGJnLXN1cmZhY2Ugei0xMCBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyXCJcclxuICAgICAgW25nQ2xhc3NdPVwiaXNMb2NrZWQgPyAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAnIDogJ2N1cnNvci1wb2ludGVyJ1wiXHJcbiAgICAgIChjbGljayk9XCIhaXNMb2NrZWQgJiYgY2xvc2VNb2RhbCgpXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cInctMTIgaC0xLjUgYmctbWVkaXVtIHJvdW5kZWQtZnVsbFwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSDDgVJFQSBERSBTQ1JPTEwgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBzY3JvbGwtc21vb3RoIG92ZXJzY3JvbGwtY29udGFpbiBiZy1zdXJmYWNlIGN1c3RvbS1zY3JvbGxiYXIgcHgtNiBwdC0yXCJcclxuICAgICAgc3R5bGU9XCJ0b3VjaC1hY3Rpb246IHBhbi15OyBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluXCJcclxuICAgICAgKHRvdWNobW92ZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgdy1mdWxsXCI+XHJcbiAgICAgICAgPCEtLSDDjWNvbmUgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG1iLTRcIj5cclxuICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIm1vZGFsQmdDb2xvclwiIGNsYXNzPVwidy0yMCBoLTIwIHJvdW5kZWQtZnVsbCBvcGFjaXR5LTQwXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8aSBbY2xhc3NdPVwibW9kYWxJY29uICsgJyAnICsgbW9kYWxJY29uQ29sb3JcIiBjbGFzcz1cImZhcyB0ZXh0LTN4bFwiPjwvaT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFTDrXR1bG8gLS0+XHJcbiAgICAgICAgPGgyIGNsYXNzPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtdGV4dC1wcmltYXJ5IG1iLTJcIj57eyBtZXNzYWdlVGl0bGUgfX08L2gyPlxyXG5cclxuICAgICAgICA8IS0tIENvcnBvIGRhIE1lbnNhZ2VtIC0tPlxyXG4gICAgICAgIDxwICpuZ0lmPVwibWVzc2FnZUJvZHlcIiBjbGFzcz1cInRleHQtdGV4dC1zZWNvbmRhcnkgbWItNFwiPnt7IG1lc3NhZ2VCb2R5IH19PC9wPlxyXG5cclxuICAgICAgICA8IS0tIENvbnRlw7pkbyBEaW7Dom1pY28gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWR5bmFtaWMtY29udGVudCB0ZXh0LWxlZnQgdy1mdWxsIHBiLTJcIj5cclxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvcHRpb25hbC1jb250ZW50XVwiPjwvbmctY29udGVudD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBFcnJvcyAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JEZXRhaWxzXCIgY2xhc3M9XCJtdC00IHAtNCBiZy1yZWQtNTAgZGFyazpiZy1yZWQtOTUwLzIwIHJvdW5kZWQtMnhsIHRleHQtbGVmdCBib3JkZXIgYm9yZGVyLXJlZC0xMDAgZGFyazpib3JkZXItcmVkLTkwMC8zMCB3LWZ1bGwgbWItNFwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LVsxMHB4XSBmb250LWJvbGQgdGV4dC1yZWQtNzAwIGRhcms6dGV4dC1yZWQtNDAwIHVwcGVyY2FzZSBtYi0xXCI+TG9nIGRvIHNpc3RlbWE6PC9wPlxyXG4gICAgICAgICAgPHByZSBjbGFzcz1cInRleHQtWzExcHhdIHRleHQtcmVkLTYwMCBkYXJrOnRleHQtcmVkLTMwMCBmb250LW1vbm8gd2hpdGVzcGFjZS1wcmUtd3JhcFwiPnt7IGVycm9yRGV0YWlscyB8IGpzb24gfX08L3ByZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIEJPVMOVRVMgKEFHT1JBIERFTlRSTyBETyBTQ1JPTEwpIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHB0LTQgcGItNiBtdC00IGJvcmRlci10IGJvcmRlci1ib3JkZXItbGlnaHQvNTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgZ2FwLTNcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkQnRuIHx8IChwcmljZU5lZ290aWF0ZWQgPD0gMCAmJiBhY3Rpb25CdXR0b25UZXh0ID09PSAnTmVnb2NpYXInKVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uQnV0dG9uVGV4dFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb25Nb2RhbCgpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHktNCB0ZXh0LXdoaXRlIHJvdW5kZWQtMnhsIGZvbnQtYm9sZCBhY3RpdmU6c2NhbGUtWzAuOThdIHRyYW5zaXRpb24tYWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0zIHNoYWRvdy1sZyBidG4tcHJpbWFyeS1jdXN0b21cIlxyXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIndmFyKC0tcHJpbWFyeSknXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNMb2FkaW5nQnRuXCI+e3sgYWN0aW9uQnV0dG9uVGV4dCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ0J0blwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPlByb2Nlc3NhbmRvPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNpcmNsZS1ub3RjaCBmYS1zcGluXCI+PC9pPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCJzaG93QnRuXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlTW9kYWwodHJ1ZSlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbCBweS0yIHRleHQtdGV4dC1tdXRlZCBmb250LXNlbWlib2xkIGhvdmVyOnRleHQtdGV4dC1wcmltYXJ5IHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgY2xvc2VCdXR0b25UZXh0IH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L3NlY3Rpb24+XHJcbjwvZGl2PiJdfQ==
@@ -433,10 +433,10 @@ class CustomModalComponent {
433
433
  }
434
434
  }
435
435
  CustomModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, deps: [{ token: i1.Location }], target: i0.ɵɵFactoryTarget.Component });
436
- CustomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomModalComponent, selector: "lib-custom-modal", inputs: { modalId: "modalId", title: "title", message: "message", closeButtonText: "closeButtonText", actionButtonText: "actionButtonText", paymentMethod: "paymentMethod", errorDetails: "errorDetails", showModal: "showModal", messageTitle: "messageTitle", showBtn: "showBtn", priceNegotiated: "priceNegotiated", messageBody: "messageBody", isLoadingBtn: "isLoadingBtn", disabledBtn: "disabledBtn", isLocked: "isLocked" }, outputs: { modalClosed: "modalClosed", modalAction: "modalAction", closeAction: "closeAction" }, host: { listeners: { "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-2xl bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){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" }] });
436
+ CustomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomModalComponent, selector: "lib-custom-modal", inputs: { modalId: "modalId", title: "title", message: "message", closeButtonText: "closeButtonText", actionButtonText: "actionButtonText", paymentMethod: "paymentMethod", errorDetails: "errorDetails", showModal: "showModal", messageTitle: "messageTitle", showBtn: "showBtn", priceNegotiated: "priceNegotiated", messageBody: "messageBody", isLoadingBtn: "isLoadingBtn", disabledBtn: "disabledBtn", isLocked: "isLocked" }, outputs: { modalClosed: "modalClosed", modalAction: "modalAction", closeAction: "closeAction" }, host: { listeners: { "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-lg bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){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" }] });
437
437
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, decorators: [{
438
438
  type: Component,
439
- args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-2xl bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){overflow:hidden}\n"] }]
439
+ args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-lg bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){overflow:hidden}\n"] }]
440
440
  }], ctorParameters: function () { return [{ type: i1.Location }]; }, propDecorators: { modalId: [{
441
441
  type: Input
442
442
  }], title: [{
@@ -1 +1 @@
1
- {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../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/nav/nav.component.ts","../../../projects/tudu-components/src/lib/components/nav/nav.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/custom-modal/custom-modal.component.ts","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.html","../../../projects/tudu-components/src/lib/components/popup/popup.component.ts","../../../projects/tudu-components/src/lib/components/popup/popup.component.html","../../../projects/tudu-components/src/lib/components/format-date-time/format-date-time.pipe.ts","../../../projects/tudu-components/src/lib/tudu-components.module.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","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 } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-card-layout',\r\n templateUrl: './card-layout.component.html',\r\n styleUrls: ['./card-layout.component.css'],\r\n})\r\nexport class CardLayoutComponent {\r\n @Input() statusPedido: string = '';\r\n @Input() cardTemplateIndicator: number = 0;\r\n @Input() hideHeader: boolean = false;\r\n @Input() hideDescription: boolean = false;\r\n\r\n get badgeStyles(): { [key: string]: string } {\r\n const status = this.statusPedido?.toLowerCase();\r\n\r\n switch (status) {\r\n case 'finalizado':\r\n return { backgroundColor: 'var(--status-success-bg)', color: 'var(--status-success)' };\r\n case 'concluido':\r\n return { backgroundColor: 'var(--status-teal-bg)', color: 'var(--status-teal)' };\r\n case 'cancelado':\r\n case 'expirado':\r\n case 'atrasado':\r\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\r\n case 'publicado':\r\n return { backgroundColor: 'var(--status-info-bg)', color: 'var(--status-info)' };\r\n case 'recusado':\r\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\r\n case 'em negociacao':\r\n case 'negociacao':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'em_andamento':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'prestador_a_caminho':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'pendente':\r\n return { backgroundColor: 'var(--status-pending-bg)', color: 'var(--status-pending)' };\r\n default:\r\n return { backgroundColor: 'var(--status-neutral-bg)', color: 'var(--status-neutral)' };\r\n }\r\n }\r\n}\r\n\r\n","<div\r\n class=\"service-card group rounded-2xl border border-border-light bg-surface shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden dark:border-border-light\"\r\n>\r\n <div\r\n [class.force-show]=\"!hideHeader\"\r\n class=\"flex items-center gap-3 p-3.5 border-b border-border-light bg-background/50\"\r\n style=\"padding: 24px !important\"\r\n >\r\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\r\n <ng-content select=\"[service-icon]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"flex flex-col flex-1 min-w-0\">\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <div\r\n class=\"truncate font-semibold text-text-primary text-[15px] leading-tight\"\r\n >\r\n <ng-content select=\"[service-title]\"></ng-content>\r\n </div>\r\n <div class=\"flex-shrink-0 flex items-center gap-2\">\r\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\r\n <ng-content select=\"[details-btn]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"truncate text-[11px] font-medium text-text-muted mt-0.5 tracking-wider\"\r\n >\r\n <ng-content select=\"[service-address]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-4\">\r\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\r\n <ng-content select=\"[status-badge]\"></ng-content>\r\n </div>\r\n <div\r\n class=\"text-xs font-semibold px-2.5 py-1 rounded-full bg-medium text-text-secondary flex items-center justify-center border border-border-light\"\r\n >\r\n <ng-content select=\"[order-number]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-wrap gap-1.5 items-center\">\r\n <ng-content select=\"[filter-tag]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"text-xs font-semibold text-text-secondary mb-3\"\r\n *ngIf=\"statusPedido === 'finalizado'\"\r\n >\r\n <ng-content select=\"[conclusion-date]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"text-text-primary text-sm\">\r\n <ng-content select=\"[info-row]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\r\n <ng-content select=\"[price]\"></ng-content>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!hideDescription\"\r\n class=\"mt-3 p-3 bg-background border border-border-light rounded-xl\"\r\n >\r\n <div class=\"text-text-secondary text-xs leading-relaxed italic\">\r\n <ng-content select=\"[description]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"px-4 py-3 bg-background/50 border-t border-border-light\">\r\n <div class=\"w-full\">\r\n <ng-content select=\"[main-btn]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\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 { 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\">\r\n <div\r\n class=\"empty-state-card max-w-md mx-auto bg-surface shadow-xl rounded-3xl p-8 border border-border-light\"\r\n >\r\n <!-- Ícone dinâmico -->\r\n <div class=\"empty-state-icon mb-6 flex justify-center\">\r\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\r\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\r\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\r\n {{ emptyStateConfig.icon }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <div\r\n [class]=\"emptyStateConfig.bgColor\"\r\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Conteúdo da mensagem -->\r\n <div class=\"empty-state-content text-center space-y-4\">\r\n <!-- Título -->\r\n <h3 class=\"text-2xl font-bold text-text-primary mb-2\">\r\n {{ emptyStateConfig.title }}\r\n </h3>\r\n\r\n <!-- Descrição -->\r\n <p class=\"text-text-secondary text-lg leading-relaxed px-4\">\r\n {{ emptyStateConfig.description }}\r\n </p>\r\n\r\n <!-- Informações adicionais baseadas no status -->\r\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\r\n <div\r\n class=\"inline-flex items-center gap-2 bg-green-50 dark:bg-green-900/10 text-green-700 dark:text-green-400 px-4 py-2 rounded-full\"\r\n >\r\n <i class=\"fas fa-check-circle\"></i>\r\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\r\n <div\r\n class=\"inline-flex items-center gap-2 bg-red-50 dark:bg-red-900/10 text-red-700 dark:text-red-400 px-4 py-2 rounded-full\"\r\n >\r\n <i class=\"fas fa-exclamation-circle\"></i>\r\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ações -->\r\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\r\n <!-- Ação Primária -->\r\n <button\r\n *ngIf=\"hideBtn\"\r\n (click)=\"onPrimaryAction()\"\r\n [ngClass]=\"{\r\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\r\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\r\n 'bg-blue-600 ':\r\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\r\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\r\n }\"\r\n class=\"col-12 btn btn-primary\"\r\n >\r\n {{ emptyStateConfig.primaryActionText }}\r\n </button>\r\n\r\n <!-- Ação Secundária -->\r\n <button\r\n *ngIf=\"emptyStateConfig.secondaryActionText\"\r\n (click)=\"onSecondaryAction()\"\r\n class=\"col-12 btn btn-outline-primary\"\r\n >\r\n {{ emptyStateConfig.secondaryActionText }}\r\n </button>\r\n </div>\r\n\r\n <!-- Link de ajuda (opcional) -->\r\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\r\n <a\r\n href=\"#\"\r\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\r\n >\r\n <i class=\"fas fa-question-circle mr-2\"></i>\r\n Precisa de ajuda? Entre em contato com o suporte\r\n </a>\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { Location } from '@angular/common';\r\n\r\ntype ModalType = 'success' | 'error' | 'warning';\r\n\r\n@Component({\r\n selector: 'lib-custom-modal',\r\n standalone: false,\r\n templateUrl: './custom-modal.component.html',\r\n styleUrls: ['./custom-modal.component.css'],\r\n})\r\nexport class CustomModalComponent implements OnInit {\r\n @Input() modalId = 'customModal';\r\n @Input() title = 'Aviso';\r\n @Input() message = '';\r\n @Input() closeButtonText = 'Fechar';\r\n @Input() actionButtonText = '';\r\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\r\n @Input() errorDetails: any = null;\r\n\r\n @Output() modalClosed = new EventEmitter<void>();\r\n @Output() modalAction = new EventEmitter<void>();\r\n @Output() closeAction = new EventEmitter<void>();\r\n\r\n @Input() showModal = false;\r\n @Input() messageTitle: string = 'Pagamento Aprovado!';\r\n @Input() showBtn = true;\r\n @Input() priceNegotiated = 0;\r\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\r\n @Input() isLoadingBtn: boolean | undefined;\r\n @Input() disabledBtn: boolean = false;\r\n\r\n // 🔒 NOVA PROPRIEDADE: Trava o fechamento do modal\r\n @Input() isLocked: boolean = false;\r\n\r\n modalIcon: string = 'fa-check';\r\n modalIconColor: string = 'text-green-600';\r\n modalBgColor: string = 'bg-green-100';\r\n isClosing = false;\r\n\r\n constructor(private location: Location) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n openModal(): void {\r\n this.showModal = true;\r\n this.isClosing = false;\r\n if (!window.location.hash.includes('modalOpen')) {\r\n this.location.go(this.location.path() + '#modalOpen');\r\n }\r\n }\r\n\r\n open(\r\n type: ModalType,\r\n message: string = '',\r\n paymentMethod?: 'pix' | 'credit',\r\n ): void {\r\n this.configureModal(type, message);\r\n if (paymentMethod) this.paymentMethod = paymentMethod;\r\n this.openModal();\r\n }\r\n\r\n configureModal(type: ModalType, message: string = '', title?: string): void {\r\n if (this.isLoadingBtn !== undefined) {\r\n this.isLoadingBtn = false;\r\n }\r\n\r\n switch (type) {\r\n case 'success':\r\n this.setSuccessStyles(message, title);\r\n break;\r\n case 'error':\r\n this.setErrorStyles(message, title);\r\n break;\r\n case 'warning':\r\n this.setWarningStyles(message, title);\r\n break;\r\n }\r\n }\r\n\r\n private setSuccessStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-check-circle';\r\n this.modalIconColor = 'modal-icon-success';\r\n this.modalBgColor = 'modal-bg-success';\r\n this.messageTitle = title || 'Sucesso!';\r\n this.messageBody = message || 'Operação realizada com sucesso.';\r\n }\r\n\r\n private setErrorStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-times-circle';\r\n this.modalIconColor = 'modal-icon-error';\r\n this.modalBgColor = 'modal-bg-error';\r\n this.messageTitle = title || 'Ops! Algo deu errado';\r\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\r\n }\r\n\r\n private setWarningStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-info-circle';\r\n this.modalIconColor = 'text-blue-600';\r\n this.modalBgColor = 'bg-blue-50';\r\n\r\n this.messageTitle = title || 'Atenção';\r\n this.messageBody = message || 'Verifique os dados antes de continuar.';\r\n }\r\n\r\n actionModal(): void {\r\n if (this.isLoadingBtn !== undefined) {\r\n this.isLoadingBtn = true;\r\n this.modalAction.emit();\r\n } else {\r\n this.modalAction.emit();\r\n this.closeModal();\r\n }\r\n }\r\n\r\n closeModal(fromButton: boolean = false): void {\r\n if (!this.showModal || this.isClosing) return;\r\n\r\n this.isClosing = true;\r\n if (fromButton) {\r\n this.closeAction.emit();\r\n }\r\n \r\n setTimeout(() => {\r\n this.showModal = false;\r\n this.isClosing = false;\r\n this.modalClosed.emit();\r\n }, 300);\r\n }\r\n // ✅ Intercepta o botão voltar do celular/browser\r\n @HostListener('window:popstate')\r\n onPopState(): void {\r\n if (this.showModal) {\r\n if (this.isLocked) {\r\n // 🔒 Se estiver travado, \"anulamos\" o voltar adicionando o hash de novo\r\n this.location.go(this.location.path() + '#modalOpen');\r\n } else {\r\n this.showModal = false;\r\n this.modalClosed.emit();\r\n }\r\n }\r\n }\r\n}\r\n","<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-2xl bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABEÇALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- ÁREA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- Ícone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Título -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conteúdo Dinâmico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOTÕES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\n\r\nexport type PopupType = 'success' | 'error' | 'warning' | 'info';\r\n\r\n@Component({\r\n selector: 'lib-popup',\r\n standalone: false,\r\n templateUrl: './popup.component.html',\r\n styleUrls: ['./popup.component.css'],\r\n})\r\nexport class PopupComponent implements OnChanges {\r\n @Input() isOpen = false;\r\n @Input() type: PopupType = 'info';\r\n @Input() title = '';\r\n @Input() message = '';\r\n @Input() duration = 4000;\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n isClosing = false;\r\n private timer: any;\r\n\r\n // Getters para as classes - Evita erro de parser no HTML\r\n get barColor(): string {\r\n const colors = {\r\n success: 'bg-green-500',\r\n error: 'bg-red-500',\r\n warning: 'bg-amber-500',\r\n info: 'bg-blue-500',\r\n };\r\n return colors[this.type] || 'bg-blue-500';\r\n }\r\n\r\n get iconClass(): string {\r\n const icons = {\r\n success: 'fa-check-circle text-green-500',\r\n error: 'fa-times-circle text-red-500',\r\n warning: 'fa-exclamation-triangle text-amber-500',\r\n info: 'fa-info-circle text-blue-500',\r\n };\r\n return `fas ${icons[this.type]}`;\r\n }\r\n\r\n get animationClass(): string {\r\n return this.isClosing\r\n ? 'animate-slide-out-right'\r\n : 'animate-slide-in-right';\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['isOpen']?.currentValue === true) {\r\n this.isClosing = false;\r\n this.startTimer();\r\n }\r\n }\r\n\r\n private startTimer() {\r\n if (this.timer) clearTimeout(this.timer);\r\n this.timer = setTimeout(() => this.closePopup(), this.duration);\r\n }\r\n\r\n closePopup() {\r\n if (this.isClosing) return;\r\n this.isClosing = true;\r\n setTimeout(() => {\r\n this.isOpen = false;\r\n this.isClosing = false;\r\n this.closed.emit();\r\n }, 400);\r\n }\r\n}\r\n","<div *ngIf=\"isOpen\" class=\"fixed top-6 z-[10000] w-full max-w-[320px]\">\r\n <div\r\n [class]=\"\r\n 'bg-white border border-gray-100 rounded-2xl shadow-2xl flex p-4 overflow-hidden relative ' +\r\n animationClass\r\n \"\r\n >\r\n <div [class]=\"'absolute left-0 top-0 bottom-0 w-1.5 ' + barColor\"></div>\r\n\r\n <div class=\"flex-shrink-0 mr-3\">\r\n <i [class]=\"iconClass + ' text-xl'\"></i>\r\n </div>\r\n\r\n <div class=\"flex-grow pr-4 text-left\">\r\n <h4 class=\"text-sm font-bold text-gray-900 leading-tight\">{{ title }}</h4>\r\n <p class=\"text-[11px] text-gray-500 mt-1 leading-snug\">{{ message }}</p>\r\n </div>\r\n\r\n <button\r\n (click)=\"closePopup()\"\r\n class=\"flex-shrink-0 text-gray-300 hover:text-gray-500 transition-colors\"\r\n >\r\n <i class=\"fas fa-times text-sm\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'formatDateTime',\r\n})\r\nexport class FormatDateTimePipe implements PipeTransform {\r\n transform(value: string | null | undefined, showAgora: boolean = true): string {\r\n if (!value) return '';\r\n\r\n const [datePart, timePart] = value.split(' ');\r\n const [year, month, day] = datePart.split('-');\r\n\r\n if (!year || !month || !day || !timePart) return value;\r\n\r\n const inputDate = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\r\n const today = new Date();\r\n const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());\r\n const inputDateOnly = new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());\r\n\r\n const isToday = inputDateOnly.getTime() === todayDate.getTime();\r\n\r\n if (showAgora && isToday) {\r\n return `Hoje às ${timePart}`;\r\n }\r\n\r\n return `${day}/${month}/${year} - ${timePart}`;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\r\nimport { CustomModalComponent } from './components/custom-modal/custom-modal.component';\r\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\r\nimport { FormatDateTimePipe } from './components/format-date-time/format-date-time.pipe';\r\nimport { NavComponent } from './components/nav/nav.component';\r\nimport { TuduComponentsComponent } from './tudu-components.component';\r\nimport { PopupComponent } from '../public-api';\r\n\r\n@NgModule({\r\n declarations: [\r\n TuduComponentsComponent,\r\n CardLayoutComponent,\r\n NavComponent,\r\n FallbackMessageComponent,\r\n CustomModalComponent,\r\n PopupComponent,\r\n FormatDateTimePipe,\r\n ],\r\n imports: [CommonModule],\r\n exports: [\r\n TuduComponentsComponent,\r\n CardLayoutComponent,\r\n NavComponent,\r\n FallbackMessageComponent,\r\n CustomModalComponent,\r\n PopupComponent,\r\n FormatDateTimePipe,\r\n ],\r\n})\r\nexport class TuduComponentsModule {}\r\n","/*\r\n * Public API Surface of tudu-components\r\n */\r\n\r\n// 1. Primeiro as bases e services\r\nexport * from './lib/tudu-components.service';\r\nexport * from './lib/tudu-components.component';\r\n\r\n// 2. Depois os componentes individuais\r\nexport * from './lib/components/card-layout/card-layout.component';\r\nexport * from './lib/components/nav/nav.component';\r\nexport * from './lib/components/fallback-message/fallback-message.component';\r\nexport * from './lib/components/custom-modal/custom-modal.component';\r\nexport * from './lib/components/popup/popup.component'; // ✅ Classe do popup pronta aqui\r\n\r\n// 3. Pipes\r\nexport * from './lib/components/format-date-time/format-date-time.pipe';\r\n\r\n// 4. POR ÚLTIMO o módulo que declara todo mundo\r\nexport * from './lib/tudu-components.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../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/nav/nav.component.ts","../../../projects/tudu-components/src/lib/components/nav/nav.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/custom-modal/custom-modal.component.ts","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.html","../../../projects/tudu-components/src/lib/components/popup/popup.component.ts","../../../projects/tudu-components/src/lib/components/popup/popup.component.html","../../../projects/tudu-components/src/lib/components/format-date-time/format-date-time.pipe.ts","../../../projects/tudu-components/src/lib/tudu-components.module.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","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 } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-card-layout',\r\n templateUrl: './card-layout.component.html',\r\n styleUrls: ['./card-layout.component.css'],\r\n})\r\nexport class CardLayoutComponent {\r\n @Input() statusPedido: string = '';\r\n @Input() cardTemplateIndicator: number = 0;\r\n @Input() hideHeader: boolean = false;\r\n @Input() hideDescription: boolean = false;\r\n\r\n get badgeStyles(): { [key: string]: string } {\r\n const status = this.statusPedido?.toLowerCase();\r\n\r\n switch (status) {\r\n case 'finalizado':\r\n return { backgroundColor: 'var(--status-success-bg)', color: 'var(--status-success)' };\r\n case 'concluido':\r\n return { backgroundColor: 'var(--status-teal-bg)', color: 'var(--status-teal)' };\r\n case 'cancelado':\r\n case 'expirado':\r\n case 'atrasado':\r\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\r\n case 'publicado':\r\n return { backgroundColor: 'var(--status-info-bg)', color: 'var(--status-info)' };\r\n case 'recusado':\r\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\r\n case 'em negociacao':\r\n case 'negociacao':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'em_andamento':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'prestador_a_caminho':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'pendente':\r\n return { backgroundColor: 'var(--status-pending-bg)', color: 'var(--status-pending)' };\r\n default:\r\n return { backgroundColor: 'var(--status-neutral-bg)', color: 'var(--status-neutral)' };\r\n }\r\n }\r\n}\r\n\r\n","<div\r\n class=\"service-card group rounded-2xl border border-border-light bg-surface shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden dark:border-border-light\"\r\n>\r\n <div\r\n [class.force-show]=\"!hideHeader\"\r\n class=\"flex items-center gap-3 p-3.5 border-b border-border-light bg-background/50\"\r\n style=\"padding: 24px !important\"\r\n >\r\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\r\n <ng-content select=\"[service-icon]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"flex flex-col flex-1 min-w-0\">\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <div\r\n class=\"truncate font-semibold text-text-primary text-[15px] leading-tight\"\r\n >\r\n <ng-content select=\"[service-title]\"></ng-content>\r\n </div>\r\n <div class=\"flex-shrink-0 flex items-center gap-2\">\r\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\r\n <ng-content select=\"[details-btn]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"truncate text-[11px] font-medium text-text-muted mt-0.5 tracking-wider\"\r\n >\r\n <ng-content select=\"[service-address]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-4\">\r\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\r\n <ng-content select=\"[status-badge]\"></ng-content>\r\n </div>\r\n <div\r\n class=\"text-xs font-semibold px-2.5 py-1 rounded-full bg-medium text-text-secondary flex items-center justify-center border border-border-light\"\r\n >\r\n <ng-content select=\"[order-number]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-wrap gap-1.5 items-center\">\r\n <ng-content select=\"[filter-tag]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"text-xs font-semibold text-text-secondary mb-3\"\r\n *ngIf=\"statusPedido === 'finalizado'\"\r\n >\r\n <ng-content select=\"[conclusion-date]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"text-text-primary text-sm\">\r\n <ng-content select=\"[info-row]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\r\n <ng-content select=\"[price]\"></ng-content>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!hideDescription\"\r\n class=\"mt-3 p-3 bg-background border border-border-light rounded-xl\"\r\n >\r\n <div class=\"text-text-secondary text-xs leading-relaxed italic\">\r\n <ng-content select=\"[description]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"px-4 py-3 bg-background/50 border-t border-border-light\">\r\n <div class=\"w-full\">\r\n <ng-content select=\"[main-btn]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\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 { 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\">\r\n <div\r\n class=\"empty-state-card max-w-md mx-auto bg-surface shadow-xl rounded-3xl p-8 border border-border-light\"\r\n >\r\n <!-- Ícone dinâmico -->\r\n <div class=\"empty-state-icon mb-6 flex justify-center\">\r\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\r\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\r\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\r\n {{ emptyStateConfig.icon }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <div\r\n [class]=\"emptyStateConfig.bgColor\"\r\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Conteúdo da mensagem -->\r\n <div class=\"empty-state-content text-center space-y-4\">\r\n <!-- Título -->\r\n <h3 class=\"text-2xl font-bold text-text-primary mb-2\">\r\n {{ emptyStateConfig.title }}\r\n </h3>\r\n\r\n <!-- Descrição -->\r\n <p class=\"text-text-secondary text-lg leading-relaxed px-4\">\r\n {{ emptyStateConfig.description }}\r\n </p>\r\n\r\n <!-- Informações adicionais baseadas no status -->\r\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\r\n <div\r\n class=\"inline-flex items-center gap-2 bg-green-50 dark:bg-green-900/10 text-green-700 dark:text-green-400 px-4 py-2 rounded-full\"\r\n >\r\n <i class=\"fas fa-check-circle\"></i>\r\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\r\n <div\r\n class=\"inline-flex items-center gap-2 bg-red-50 dark:bg-red-900/10 text-red-700 dark:text-red-400 px-4 py-2 rounded-full\"\r\n >\r\n <i class=\"fas fa-exclamation-circle\"></i>\r\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ações -->\r\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\r\n <!-- Ação Primária -->\r\n <button\r\n *ngIf=\"hideBtn\"\r\n (click)=\"onPrimaryAction()\"\r\n [ngClass]=\"{\r\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\r\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\r\n 'bg-blue-600 ':\r\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\r\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\r\n }\"\r\n class=\"col-12 btn btn-primary\"\r\n >\r\n {{ emptyStateConfig.primaryActionText }}\r\n </button>\r\n\r\n <!-- Ação Secundária -->\r\n <button\r\n *ngIf=\"emptyStateConfig.secondaryActionText\"\r\n (click)=\"onSecondaryAction()\"\r\n class=\"col-12 btn btn-outline-primary\"\r\n >\r\n {{ emptyStateConfig.secondaryActionText }}\r\n </button>\r\n </div>\r\n\r\n <!-- Link de ajuda (opcional) -->\r\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\r\n <a\r\n href=\"#\"\r\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\r\n >\r\n <i class=\"fas fa-question-circle mr-2\"></i>\r\n Precisa de ajuda? Entre em contato com o suporte\r\n </a>\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { Location } from '@angular/common';\r\n\r\ntype ModalType = 'success' | 'error' | 'warning';\r\n\r\n@Component({\r\n selector: 'lib-custom-modal',\r\n standalone: false,\r\n templateUrl: './custom-modal.component.html',\r\n styleUrls: ['./custom-modal.component.css'],\r\n})\r\nexport class CustomModalComponent implements OnInit {\r\n @Input() modalId = 'customModal';\r\n @Input() title = 'Aviso';\r\n @Input() message = '';\r\n @Input() closeButtonText = 'Fechar';\r\n @Input() actionButtonText = '';\r\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\r\n @Input() errorDetails: any = null;\r\n\r\n @Output() modalClosed = new EventEmitter<void>();\r\n @Output() modalAction = new EventEmitter<void>();\r\n @Output() closeAction = new EventEmitter<void>();\r\n\r\n @Input() showModal = false;\r\n @Input() messageTitle: string = 'Pagamento Aprovado!';\r\n @Input() showBtn = true;\r\n @Input() priceNegotiated = 0;\r\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\r\n @Input() isLoadingBtn: boolean | undefined;\r\n @Input() disabledBtn: boolean = false;\r\n\r\n // 🔒 NOVA PROPRIEDADE: Trava o fechamento do modal\r\n @Input() isLocked: boolean = false;\r\n\r\n modalIcon: string = 'fa-check';\r\n modalIconColor: string = 'text-green-600';\r\n modalBgColor: string = 'bg-green-100';\r\n isClosing = false;\r\n\r\n constructor(private location: Location) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n openModal(): void {\r\n this.showModal = true;\r\n this.isClosing = false;\r\n if (!window.location.hash.includes('modalOpen')) {\r\n this.location.go(this.location.path() + '#modalOpen');\r\n }\r\n }\r\n\r\n open(\r\n type: ModalType,\r\n message: string = '',\r\n paymentMethod?: 'pix' | 'credit',\r\n ): void {\r\n this.configureModal(type, message);\r\n if (paymentMethod) this.paymentMethod = paymentMethod;\r\n this.openModal();\r\n }\r\n\r\n configureModal(type: ModalType, message: string = '', title?: string): void {\r\n if (this.isLoadingBtn !== undefined) {\r\n this.isLoadingBtn = false;\r\n }\r\n\r\n switch (type) {\r\n case 'success':\r\n this.setSuccessStyles(message, title);\r\n break;\r\n case 'error':\r\n this.setErrorStyles(message, title);\r\n break;\r\n case 'warning':\r\n this.setWarningStyles(message, title);\r\n break;\r\n }\r\n }\r\n\r\n private setSuccessStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-check-circle';\r\n this.modalIconColor = 'modal-icon-success';\r\n this.modalBgColor = 'modal-bg-success';\r\n this.messageTitle = title || 'Sucesso!';\r\n this.messageBody = message || 'Operação realizada com sucesso.';\r\n }\r\n\r\n private setErrorStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-times-circle';\r\n this.modalIconColor = 'modal-icon-error';\r\n this.modalBgColor = 'modal-bg-error';\r\n this.messageTitle = title || 'Ops! Algo deu errado';\r\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\r\n }\r\n\r\n private setWarningStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-info-circle';\r\n this.modalIconColor = 'text-blue-600';\r\n this.modalBgColor = 'bg-blue-50';\r\n\r\n this.messageTitle = title || 'Atenção';\r\n this.messageBody = message || 'Verifique os dados antes de continuar.';\r\n }\r\n\r\n actionModal(): void {\r\n if (this.isLoadingBtn !== undefined) {\r\n this.isLoadingBtn = true;\r\n this.modalAction.emit();\r\n } else {\r\n this.modalAction.emit();\r\n this.closeModal();\r\n }\r\n }\r\n\r\n closeModal(fromButton: boolean = false): void {\r\n if (!this.showModal || this.isClosing) return;\r\n\r\n this.isClosing = true;\r\n if (fromButton) {\r\n this.closeAction.emit();\r\n }\r\n \r\n setTimeout(() => {\r\n this.showModal = false;\r\n this.isClosing = false;\r\n this.modalClosed.emit();\r\n }, 300);\r\n }\r\n // ✅ Intercepta o botão voltar do celular/browser\r\n @HostListener('window:popstate')\r\n onPopState(): void {\r\n if (this.showModal) {\r\n if (this.isLocked) {\r\n // 🔒 Se estiver travado, \"anulamos\" o voltar adicionando o hash de novo\r\n this.location.go(this.location.path() + '#modalOpen');\r\n } else {\r\n this.showModal = false;\r\n this.modalClosed.emit();\r\n }\r\n }\r\n }\r\n}\r\n","<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-lg bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABEÇALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- ÁREA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- Ícone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Título -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conteúdo Dinâmico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOTÕES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\n\r\nexport type PopupType = 'success' | 'error' | 'warning' | 'info';\r\n\r\n@Component({\r\n selector: 'lib-popup',\r\n standalone: false,\r\n templateUrl: './popup.component.html',\r\n styleUrls: ['./popup.component.css'],\r\n})\r\nexport class PopupComponent implements OnChanges {\r\n @Input() isOpen = false;\r\n @Input() type: PopupType = 'info';\r\n @Input() title = '';\r\n @Input() message = '';\r\n @Input() duration = 4000;\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n isClosing = false;\r\n private timer: any;\r\n\r\n // Getters para as classes - Evita erro de parser no HTML\r\n get barColor(): string {\r\n const colors = {\r\n success: 'bg-green-500',\r\n error: 'bg-red-500',\r\n warning: 'bg-amber-500',\r\n info: 'bg-blue-500',\r\n };\r\n return colors[this.type] || 'bg-blue-500';\r\n }\r\n\r\n get iconClass(): string {\r\n const icons = {\r\n success: 'fa-check-circle text-green-500',\r\n error: 'fa-times-circle text-red-500',\r\n warning: 'fa-exclamation-triangle text-amber-500',\r\n info: 'fa-info-circle text-blue-500',\r\n };\r\n return `fas ${icons[this.type]}`;\r\n }\r\n\r\n get animationClass(): string {\r\n return this.isClosing\r\n ? 'animate-slide-out-right'\r\n : 'animate-slide-in-right';\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['isOpen']?.currentValue === true) {\r\n this.isClosing = false;\r\n this.startTimer();\r\n }\r\n }\r\n\r\n private startTimer() {\r\n if (this.timer) clearTimeout(this.timer);\r\n this.timer = setTimeout(() => this.closePopup(), this.duration);\r\n }\r\n\r\n closePopup() {\r\n if (this.isClosing) return;\r\n this.isClosing = true;\r\n setTimeout(() => {\r\n this.isOpen = false;\r\n this.isClosing = false;\r\n this.closed.emit();\r\n }, 400);\r\n }\r\n}\r\n","<div *ngIf=\"isOpen\" class=\"fixed top-6 z-[10000] w-full max-w-[320px]\">\r\n <div\r\n [class]=\"\r\n 'bg-white border border-gray-100 rounded-2xl shadow-2xl flex p-4 overflow-hidden relative ' +\r\n animationClass\r\n \"\r\n >\r\n <div [class]=\"'absolute left-0 top-0 bottom-0 w-1.5 ' + barColor\"></div>\r\n\r\n <div class=\"flex-shrink-0 mr-3\">\r\n <i [class]=\"iconClass + ' text-xl'\"></i>\r\n </div>\r\n\r\n <div class=\"flex-grow pr-4 text-left\">\r\n <h4 class=\"text-sm font-bold text-gray-900 leading-tight\">{{ title }}</h4>\r\n <p class=\"text-[11px] text-gray-500 mt-1 leading-snug\">{{ message }}</p>\r\n </div>\r\n\r\n <button\r\n (click)=\"closePopup()\"\r\n class=\"flex-shrink-0 text-gray-300 hover:text-gray-500 transition-colors\"\r\n >\r\n <i class=\"fas fa-times text-sm\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'formatDateTime',\r\n})\r\nexport class FormatDateTimePipe implements PipeTransform {\r\n transform(value: string | null | undefined, showAgora: boolean = true): string {\r\n if (!value) return '';\r\n\r\n const [datePart, timePart] = value.split(' ');\r\n const [year, month, day] = datePart.split('-');\r\n\r\n if (!year || !month || !day || !timePart) return value;\r\n\r\n const inputDate = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\r\n const today = new Date();\r\n const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());\r\n const inputDateOnly = new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());\r\n\r\n const isToday = inputDateOnly.getTime() === todayDate.getTime();\r\n\r\n if (showAgora && isToday) {\r\n return `Hoje às ${timePart}`;\r\n }\r\n\r\n return `${day}/${month}/${year} - ${timePart}`;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\r\nimport { CustomModalComponent } from './components/custom-modal/custom-modal.component';\r\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\r\nimport { FormatDateTimePipe } from './components/format-date-time/format-date-time.pipe';\r\nimport { NavComponent } from './components/nav/nav.component';\r\nimport { TuduComponentsComponent } from './tudu-components.component';\r\nimport { PopupComponent } from '../public-api';\r\n\r\n@NgModule({\r\n declarations: [\r\n TuduComponentsComponent,\r\n CardLayoutComponent,\r\n NavComponent,\r\n FallbackMessageComponent,\r\n CustomModalComponent,\r\n PopupComponent,\r\n FormatDateTimePipe,\r\n ],\r\n imports: [CommonModule],\r\n exports: [\r\n TuduComponentsComponent,\r\n CardLayoutComponent,\r\n NavComponent,\r\n FallbackMessageComponent,\r\n CustomModalComponent,\r\n PopupComponent,\r\n FormatDateTimePipe,\r\n ],\r\n})\r\nexport class TuduComponentsModule {}\r\n","/*\r\n * Public API Surface of tudu-components\r\n */\r\n\r\n// 1. Primeiro as bases e services\r\nexport * from './lib/tudu-components.service';\r\nexport * from './lib/tudu-components.component';\r\n\r\n// 2. Depois os componentes individuais\r\nexport * from './lib/components/card-layout/card-layout.component';\r\nexport * from './lib/components/nav/nav.component';\r\nexport * from './lib/components/fallback-message/fallback-message.component';\r\nexport * from './lib/components/custom-modal/custom-modal.component';\r\nexport * from './lib/components/popup/popup.component'; // ✅ Classe do popup pronta aqui\r\n\r\n// 3. Pipes\r\nexport * from './lib/components/format-date-time/format-date-time.pipe';\r\n\r\n// 4. POR ÚLTIMO o módulo que declara todo mundo\r\nexport * from './lib/tudu-components.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
@@ -431,10 +431,10 @@ class CustomModalComponent {
431
431
  }
432
432
  }
433
433
  CustomModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, deps: [{ token: i1.Location }], target: i0.ɵɵFactoryTarget.Component });
434
- CustomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomModalComponent, selector: "lib-custom-modal", inputs: { modalId: "modalId", title: "title", message: "message", closeButtonText: "closeButtonText", actionButtonText: "actionButtonText", paymentMethod: "paymentMethod", errorDetails: "errorDetails", showModal: "showModal", messageTitle: "messageTitle", showBtn: "showBtn", priceNegotiated: "priceNegotiated", messageBody: "messageBody", isLoadingBtn: "isLoadingBtn", disabledBtn: "disabledBtn", isLocked: "isLocked" }, outputs: { modalClosed: "modalClosed", modalAction: "modalAction", closeAction: "closeAction" }, host: { listeners: { "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-2xl bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){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" }] });
434
+ CustomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomModalComponent, selector: "lib-custom-modal", inputs: { modalId: "modalId", title: "title", message: "message", closeButtonText: "closeButtonText", actionButtonText: "actionButtonText", paymentMethod: "paymentMethod", errorDetails: "errorDetails", showModal: "showModal", messageTitle: "messageTitle", showBtn: "showBtn", priceNegotiated: "priceNegotiated", messageBody: "messageBody", isLoadingBtn: "isLoadingBtn", disabledBtn: "disabledBtn", isLocked: "isLocked" }, outputs: { modalClosed: "modalClosed", modalAction: "modalAction", closeAction: "closeAction" }, host: { listeners: { "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-lg bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){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" }] });
435
435
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, decorators: [{
436
436
  type: Component,
437
- args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-2xl bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){overflow:hidden}\n"] }]
437
+ args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-lg bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABE\u00C7ALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- \u00C1REA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- \u00CDcone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- T\u00EDtulo -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conte\u00FAdo Din\u00E2mico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOT\u00D5ES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-scroll-area{overflow-y:auto;overflow-x:hidden}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar::-webkit-scrollbar{display:none;width:0}.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){@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(.custom-modal-root)){overflow:hidden}\n"] }]
438
438
  }], ctorParameters: function () { return [{ type: i1.Location }]; }, propDecorators: { modalId: [{
439
439
  type: Input
440
440
  }], title: [{
@@ -1 +1 @@
1
- {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../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/nav/nav.component.ts","../../../projects/tudu-components/src/lib/components/nav/nav.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/custom-modal/custom-modal.component.ts","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.html","../../../projects/tudu-components/src/lib/components/popup/popup.component.ts","../../../projects/tudu-components/src/lib/components/popup/popup.component.html","../../../projects/tudu-components/src/lib/components/format-date-time/format-date-time.pipe.ts","../../../projects/tudu-components/src/lib/tudu-components.module.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","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 } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-card-layout',\r\n templateUrl: './card-layout.component.html',\r\n styleUrls: ['./card-layout.component.css'],\r\n})\r\nexport class CardLayoutComponent {\r\n @Input() statusPedido: string = '';\r\n @Input() cardTemplateIndicator: number = 0;\r\n @Input() hideHeader: boolean = false;\r\n @Input() hideDescription: boolean = false;\r\n\r\n get badgeStyles(): { [key: string]: string } {\r\n const status = this.statusPedido?.toLowerCase();\r\n\r\n switch (status) {\r\n case 'finalizado':\r\n return { backgroundColor: 'var(--status-success-bg)', color: 'var(--status-success)' };\r\n case 'concluido':\r\n return { backgroundColor: 'var(--status-teal-bg)', color: 'var(--status-teal)' };\r\n case 'cancelado':\r\n case 'expirado':\r\n case 'atrasado':\r\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\r\n case 'publicado':\r\n return { backgroundColor: 'var(--status-info-bg)', color: 'var(--status-info)' };\r\n case 'recusado':\r\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\r\n case 'em negociacao':\r\n case 'negociacao':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'em_andamento':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'prestador_a_caminho':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'pendente':\r\n return { backgroundColor: 'var(--status-pending-bg)', color: 'var(--status-pending)' };\r\n default:\r\n return { backgroundColor: 'var(--status-neutral-bg)', color: 'var(--status-neutral)' };\r\n }\r\n }\r\n}\r\n\r\n","<div\r\n class=\"service-card group rounded-2xl border border-border-light bg-surface shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden dark:border-border-light\"\r\n>\r\n <div\r\n [class.force-show]=\"!hideHeader\"\r\n class=\"flex items-center gap-3 p-3.5 border-b border-border-light bg-background/50\"\r\n style=\"padding: 24px !important\"\r\n >\r\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\r\n <ng-content select=\"[service-icon]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"flex flex-col flex-1 min-w-0\">\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <div\r\n class=\"truncate font-semibold text-text-primary text-[15px] leading-tight\"\r\n >\r\n <ng-content select=\"[service-title]\"></ng-content>\r\n </div>\r\n <div class=\"flex-shrink-0 flex items-center gap-2\">\r\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\r\n <ng-content select=\"[details-btn]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"truncate text-[11px] font-medium text-text-muted mt-0.5 tracking-wider\"\r\n >\r\n <ng-content select=\"[service-address]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-4\">\r\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\r\n <ng-content select=\"[status-badge]\"></ng-content>\r\n </div>\r\n <div\r\n class=\"text-xs font-semibold px-2.5 py-1 rounded-full bg-medium text-text-secondary flex items-center justify-center border border-border-light\"\r\n >\r\n <ng-content select=\"[order-number]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-wrap gap-1.5 items-center\">\r\n <ng-content select=\"[filter-tag]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"text-xs font-semibold text-text-secondary mb-3\"\r\n *ngIf=\"statusPedido === 'finalizado'\"\r\n >\r\n <ng-content select=\"[conclusion-date]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"text-text-primary text-sm\">\r\n <ng-content select=\"[info-row]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\r\n <ng-content select=\"[price]\"></ng-content>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!hideDescription\"\r\n class=\"mt-3 p-3 bg-background border border-border-light rounded-xl\"\r\n >\r\n <div class=\"text-text-secondary text-xs leading-relaxed italic\">\r\n <ng-content select=\"[description]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"px-4 py-3 bg-background/50 border-t border-border-light\">\r\n <div class=\"w-full\">\r\n <ng-content select=\"[main-btn]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\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 { 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\">\r\n <div\r\n class=\"empty-state-card max-w-md mx-auto bg-surface shadow-xl rounded-3xl p-8 border border-border-light\"\r\n >\r\n <!-- Ícone dinâmico -->\r\n <div class=\"empty-state-icon mb-6 flex justify-center\">\r\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\r\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\r\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\r\n {{ emptyStateConfig.icon }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <div\r\n [class]=\"emptyStateConfig.bgColor\"\r\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Conteúdo da mensagem -->\r\n <div class=\"empty-state-content text-center space-y-4\">\r\n <!-- Título -->\r\n <h3 class=\"text-2xl font-bold text-text-primary mb-2\">\r\n {{ emptyStateConfig.title }}\r\n </h3>\r\n\r\n <!-- Descrição -->\r\n <p class=\"text-text-secondary text-lg leading-relaxed px-4\">\r\n {{ emptyStateConfig.description }}\r\n </p>\r\n\r\n <!-- Informações adicionais baseadas no status -->\r\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\r\n <div\r\n class=\"inline-flex items-center gap-2 bg-green-50 dark:bg-green-900/10 text-green-700 dark:text-green-400 px-4 py-2 rounded-full\"\r\n >\r\n <i class=\"fas fa-check-circle\"></i>\r\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\r\n <div\r\n class=\"inline-flex items-center gap-2 bg-red-50 dark:bg-red-900/10 text-red-700 dark:text-red-400 px-4 py-2 rounded-full\"\r\n >\r\n <i class=\"fas fa-exclamation-circle\"></i>\r\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ações -->\r\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\r\n <!-- Ação Primária -->\r\n <button\r\n *ngIf=\"hideBtn\"\r\n (click)=\"onPrimaryAction()\"\r\n [ngClass]=\"{\r\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\r\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\r\n 'bg-blue-600 ':\r\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\r\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\r\n }\"\r\n class=\"col-12 btn btn-primary\"\r\n >\r\n {{ emptyStateConfig.primaryActionText }}\r\n </button>\r\n\r\n <!-- Ação Secundária -->\r\n <button\r\n *ngIf=\"emptyStateConfig.secondaryActionText\"\r\n (click)=\"onSecondaryAction()\"\r\n class=\"col-12 btn btn-outline-primary\"\r\n >\r\n {{ emptyStateConfig.secondaryActionText }}\r\n </button>\r\n </div>\r\n\r\n <!-- Link de ajuda (opcional) -->\r\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\r\n <a\r\n href=\"#\"\r\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\r\n >\r\n <i class=\"fas fa-question-circle mr-2\"></i>\r\n Precisa de ajuda? Entre em contato com o suporte\r\n </a>\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { Location } from '@angular/common';\r\n\r\ntype ModalType = 'success' | 'error' | 'warning';\r\n\r\n@Component({\r\n selector: 'lib-custom-modal',\r\n standalone: false,\r\n templateUrl: './custom-modal.component.html',\r\n styleUrls: ['./custom-modal.component.css'],\r\n})\r\nexport class CustomModalComponent implements OnInit {\r\n @Input() modalId = 'customModal';\r\n @Input() title = 'Aviso';\r\n @Input() message = '';\r\n @Input() closeButtonText = 'Fechar';\r\n @Input() actionButtonText = '';\r\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\r\n @Input() errorDetails: any = null;\r\n\r\n @Output() modalClosed = new EventEmitter<void>();\r\n @Output() modalAction = new EventEmitter<void>();\r\n @Output() closeAction = new EventEmitter<void>();\r\n\r\n @Input() showModal = false;\r\n @Input() messageTitle: string = 'Pagamento Aprovado!';\r\n @Input() showBtn = true;\r\n @Input() priceNegotiated = 0;\r\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\r\n @Input() isLoadingBtn: boolean | undefined;\r\n @Input() disabledBtn: boolean = false;\r\n\r\n // 🔒 NOVA PROPRIEDADE: Trava o fechamento do modal\r\n @Input() isLocked: boolean = false;\r\n\r\n modalIcon: string = 'fa-check';\r\n modalIconColor: string = 'text-green-600';\r\n modalBgColor: string = 'bg-green-100';\r\n isClosing = false;\r\n\r\n constructor(private location: Location) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n openModal(): void {\r\n this.showModal = true;\r\n this.isClosing = false;\r\n if (!window.location.hash.includes('modalOpen')) {\r\n this.location.go(this.location.path() + '#modalOpen');\r\n }\r\n }\r\n\r\n open(\r\n type: ModalType,\r\n message: string = '',\r\n paymentMethod?: 'pix' | 'credit',\r\n ): void {\r\n this.configureModal(type, message);\r\n if (paymentMethod) this.paymentMethod = paymentMethod;\r\n this.openModal();\r\n }\r\n\r\n configureModal(type: ModalType, message: string = '', title?: string): void {\r\n if (this.isLoadingBtn !== undefined) {\r\n this.isLoadingBtn = false;\r\n }\r\n\r\n switch (type) {\r\n case 'success':\r\n this.setSuccessStyles(message, title);\r\n break;\r\n case 'error':\r\n this.setErrorStyles(message, title);\r\n break;\r\n case 'warning':\r\n this.setWarningStyles(message, title);\r\n break;\r\n }\r\n }\r\n\r\n private setSuccessStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-check-circle';\r\n this.modalIconColor = 'modal-icon-success';\r\n this.modalBgColor = 'modal-bg-success';\r\n this.messageTitle = title || 'Sucesso!';\r\n this.messageBody = message || 'Operação realizada com sucesso.';\r\n }\r\n\r\n private setErrorStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-times-circle';\r\n this.modalIconColor = 'modal-icon-error';\r\n this.modalBgColor = 'modal-bg-error';\r\n this.messageTitle = title || 'Ops! Algo deu errado';\r\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\r\n }\r\n\r\n private setWarningStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-info-circle';\r\n this.modalIconColor = 'text-blue-600';\r\n this.modalBgColor = 'bg-blue-50';\r\n\r\n this.messageTitle = title || 'Atenção';\r\n this.messageBody = message || 'Verifique os dados antes de continuar.';\r\n }\r\n\r\n actionModal(): void {\r\n if (this.isLoadingBtn !== undefined) {\r\n this.isLoadingBtn = true;\r\n this.modalAction.emit();\r\n } else {\r\n this.modalAction.emit();\r\n this.closeModal();\r\n }\r\n }\r\n\r\n closeModal(fromButton: boolean = false): void {\r\n if (!this.showModal || this.isClosing) return;\r\n\r\n this.isClosing = true;\r\n if (fromButton) {\r\n this.closeAction.emit();\r\n }\r\n \r\n setTimeout(() => {\r\n this.showModal = false;\r\n this.isClosing = false;\r\n this.modalClosed.emit();\r\n }, 300);\r\n }\r\n // ✅ Intercepta o botão voltar do celular/browser\r\n @HostListener('window:popstate')\r\n onPopState(): void {\r\n if (this.showModal) {\r\n if (this.isLocked) {\r\n // 🔒 Se estiver travado, \"anulamos\" o voltar adicionando o hash de novo\r\n this.location.go(this.location.path() + '#modalOpen');\r\n } else {\r\n this.showModal = false;\r\n this.modalClosed.emit();\r\n }\r\n }\r\n }\r\n}\r\n","<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-2xl bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABEÇALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- ÁREA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- Ícone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Título -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conteúdo Dinâmico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOTÕES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\n\r\nexport type PopupType = 'success' | 'error' | 'warning' | 'info';\r\n\r\n@Component({\r\n selector: 'lib-popup',\r\n standalone: false,\r\n templateUrl: './popup.component.html',\r\n styleUrls: ['./popup.component.css'],\r\n})\r\nexport class PopupComponent implements OnChanges {\r\n @Input() isOpen = false;\r\n @Input() type: PopupType = 'info';\r\n @Input() title = '';\r\n @Input() message = '';\r\n @Input() duration = 4000;\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n isClosing = false;\r\n private timer: any;\r\n\r\n // Getters para as classes - Evita erro de parser no HTML\r\n get barColor(): string {\r\n const colors = {\r\n success: 'bg-green-500',\r\n error: 'bg-red-500',\r\n warning: 'bg-amber-500',\r\n info: 'bg-blue-500',\r\n };\r\n return colors[this.type] || 'bg-blue-500';\r\n }\r\n\r\n get iconClass(): string {\r\n const icons = {\r\n success: 'fa-check-circle text-green-500',\r\n error: 'fa-times-circle text-red-500',\r\n warning: 'fa-exclamation-triangle text-amber-500',\r\n info: 'fa-info-circle text-blue-500',\r\n };\r\n return `fas ${icons[this.type]}`;\r\n }\r\n\r\n get animationClass(): string {\r\n return this.isClosing\r\n ? 'animate-slide-out-right'\r\n : 'animate-slide-in-right';\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['isOpen']?.currentValue === true) {\r\n this.isClosing = false;\r\n this.startTimer();\r\n }\r\n }\r\n\r\n private startTimer() {\r\n if (this.timer) clearTimeout(this.timer);\r\n this.timer = setTimeout(() => this.closePopup(), this.duration);\r\n }\r\n\r\n closePopup() {\r\n if (this.isClosing) return;\r\n this.isClosing = true;\r\n setTimeout(() => {\r\n this.isOpen = false;\r\n this.isClosing = false;\r\n this.closed.emit();\r\n }, 400);\r\n }\r\n}\r\n","<div *ngIf=\"isOpen\" class=\"fixed top-6 z-[10000] w-full max-w-[320px]\">\r\n <div\r\n [class]=\"\r\n 'bg-white border border-gray-100 rounded-2xl shadow-2xl flex p-4 overflow-hidden relative ' +\r\n animationClass\r\n \"\r\n >\r\n <div [class]=\"'absolute left-0 top-0 bottom-0 w-1.5 ' + barColor\"></div>\r\n\r\n <div class=\"flex-shrink-0 mr-3\">\r\n <i [class]=\"iconClass + ' text-xl'\"></i>\r\n </div>\r\n\r\n <div class=\"flex-grow pr-4 text-left\">\r\n <h4 class=\"text-sm font-bold text-gray-900 leading-tight\">{{ title }}</h4>\r\n <p class=\"text-[11px] text-gray-500 mt-1 leading-snug\">{{ message }}</p>\r\n </div>\r\n\r\n <button\r\n (click)=\"closePopup()\"\r\n class=\"flex-shrink-0 text-gray-300 hover:text-gray-500 transition-colors\"\r\n >\r\n <i class=\"fas fa-times text-sm\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'formatDateTime',\r\n})\r\nexport class FormatDateTimePipe implements PipeTransform {\r\n transform(value: string | null | undefined, showAgora: boolean = true): string {\r\n if (!value) return '';\r\n\r\n const [datePart, timePart] = value.split(' ');\r\n const [year, month, day] = datePart.split('-');\r\n\r\n if (!year || !month || !day || !timePart) return value;\r\n\r\n const inputDate = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\r\n const today = new Date();\r\n const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());\r\n const inputDateOnly = new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());\r\n\r\n const isToday = inputDateOnly.getTime() === todayDate.getTime();\r\n\r\n if (showAgora && isToday) {\r\n return `Hoje às ${timePart}`;\r\n }\r\n\r\n return `${day}/${month}/${year} - ${timePart}`;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\r\nimport { CustomModalComponent } from './components/custom-modal/custom-modal.component';\r\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\r\nimport { FormatDateTimePipe } from './components/format-date-time/format-date-time.pipe';\r\nimport { NavComponent } from './components/nav/nav.component';\r\nimport { TuduComponentsComponent } from './tudu-components.component';\r\nimport { PopupComponent } from '../public-api';\r\n\r\n@NgModule({\r\n declarations: [\r\n TuduComponentsComponent,\r\n CardLayoutComponent,\r\n NavComponent,\r\n FallbackMessageComponent,\r\n CustomModalComponent,\r\n PopupComponent,\r\n FormatDateTimePipe,\r\n ],\r\n imports: [CommonModule],\r\n exports: [\r\n TuduComponentsComponent,\r\n CardLayoutComponent,\r\n NavComponent,\r\n FallbackMessageComponent,\r\n CustomModalComponent,\r\n PopupComponent,\r\n FormatDateTimePipe,\r\n ],\r\n})\r\nexport class TuduComponentsModule {}\r\n","/*\r\n * Public API Surface of tudu-components\r\n */\r\n\r\n// 1. Primeiro as bases e services\r\nexport * from './lib/tudu-components.service';\r\nexport * from './lib/tudu-components.component';\r\n\r\n// 2. Depois os componentes individuais\r\nexport * from './lib/components/card-layout/card-layout.component';\r\nexport * from './lib/components/nav/nav.component';\r\nexport * from './lib/components/fallback-message/fallback-message.component';\r\nexport * from './lib/components/custom-modal/custom-modal.component';\r\nexport * from './lib/components/popup/popup.component'; // ✅ Classe do popup pronta aqui\r\n\r\n// 3. Pipes\r\nexport * from './lib/components/format-date-time/format-date-time.pipe';\r\n\r\n// 4. POR ÚLTIMO o módulo que declara todo mundo\r\nexport * from './lib/tudu-components.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../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/nav/nav.component.ts","../../../projects/tudu-components/src/lib/components/nav/nav.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/custom-modal/custom-modal.component.ts","../../../projects/tudu-components/src/lib/components/custom-modal/custom-modal.component.html","../../../projects/tudu-components/src/lib/components/popup/popup.component.ts","../../../projects/tudu-components/src/lib/components/popup/popup.component.html","../../../projects/tudu-components/src/lib/components/format-date-time/format-date-time.pipe.ts","../../../projects/tudu-components/src/lib/tudu-components.module.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","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 } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-card-layout',\r\n templateUrl: './card-layout.component.html',\r\n styleUrls: ['./card-layout.component.css'],\r\n})\r\nexport class CardLayoutComponent {\r\n @Input() statusPedido: string = '';\r\n @Input() cardTemplateIndicator: number = 0;\r\n @Input() hideHeader: boolean = false;\r\n @Input() hideDescription: boolean = false;\r\n\r\n get badgeStyles(): { [key: string]: string } {\r\n const status = this.statusPedido?.toLowerCase();\r\n\r\n switch (status) {\r\n case 'finalizado':\r\n return { backgroundColor: 'var(--status-success-bg)', color: 'var(--status-success)' };\r\n case 'concluido':\r\n return { backgroundColor: 'var(--status-teal-bg)', color: 'var(--status-teal)' };\r\n case 'cancelado':\r\n case 'expirado':\r\n case 'atrasado':\r\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\r\n case 'publicado':\r\n return { backgroundColor: 'var(--status-info-bg)', color: 'var(--status-info)' };\r\n case 'recusado':\r\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\r\n case 'em negociacao':\r\n case 'negociacao':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'em_andamento':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'prestador_a_caminho':\r\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\r\n case 'pendente':\r\n return { backgroundColor: 'var(--status-pending-bg)', color: 'var(--status-pending)' };\r\n default:\r\n return { backgroundColor: 'var(--status-neutral-bg)', color: 'var(--status-neutral)' };\r\n }\r\n }\r\n}\r\n\r\n","<div\r\n class=\"service-card group rounded-2xl border border-border-light bg-surface shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden dark:border-border-light\"\r\n>\r\n <div\r\n [class.force-show]=\"!hideHeader\"\r\n class=\"flex items-center gap-3 p-3.5 border-b border-border-light bg-background/50\"\r\n style=\"padding: 24px !important\"\r\n >\r\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\r\n <ng-content select=\"[service-icon]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"flex flex-col flex-1 min-w-0\">\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <div\r\n class=\"truncate font-semibold text-text-primary text-[15px] leading-tight\"\r\n >\r\n <ng-content select=\"[service-title]\"></ng-content>\r\n </div>\r\n <div class=\"flex-shrink-0 flex items-center gap-2\">\r\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\r\n <ng-content select=\"[details-btn]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"truncate text-[11px] font-medium text-text-muted mt-0.5 tracking-wider\"\r\n >\r\n <ng-content select=\"[service-address]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-4\">\r\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\r\n <ng-content select=\"[status-badge]\"></ng-content>\r\n </div>\r\n <div\r\n class=\"text-xs font-semibold px-2.5 py-1 rounded-full bg-medium text-text-secondary flex items-center justify-center border border-border-light\"\r\n >\r\n <ng-content select=\"[order-number]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-wrap gap-1.5 items-center\">\r\n <ng-content select=\"[filter-tag]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"text-xs font-semibold text-text-secondary mb-3\"\r\n *ngIf=\"statusPedido === 'finalizado'\"\r\n >\r\n <ng-content select=\"[conclusion-date]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"text-text-primary text-sm\">\r\n <ng-content select=\"[info-row]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\r\n <ng-content select=\"[price]\"></ng-content>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!hideDescription\"\r\n class=\"mt-3 p-3 bg-background border border-border-light rounded-xl\"\r\n >\r\n <div class=\"text-text-secondary text-xs leading-relaxed italic\">\r\n <ng-content select=\"[description]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"px-4 py-3 bg-background/50 border-t border-border-light\">\r\n <div class=\"w-full\">\r\n <ng-content select=\"[main-btn]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\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 { 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\">\r\n <div\r\n class=\"empty-state-card max-w-md mx-auto bg-surface shadow-xl rounded-3xl p-8 border border-border-light\"\r\n >\r\n <!-- Ícone dinâmico -->\r\n <div class=\"empty-state-icon mb-6 flex justify-center\">\r\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\r\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\r\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\r\n {{ emptyStateConfig.icon }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <div\r\n [class]=\"emptyStateConfig.bgColor\"\r\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Conteúdo da mensagem -->\r\n <div class=\"empty-state-content text-center space-y-4\">\r\n <!-- Título -->\r\n <h3 class=\"text-2xl font-bold text-text-primary mb-2\">\r\n {{ emptyStateConfig.title }}\r\n </h3>\r\n\r\n <!-- Descrição -->\r\n <p class=\"text-text-secondary text-lg leading-relaxed px-4\">\r\n {{ emptyStateConfig.description }}\r\n </p>\r\n\r\n <!-- Informações adicionais baseadas no status -->\r\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\r\n <div\r\n class=\"inline-flex items-center gap-2 bg-green-50 dark:bg-green-900/10 text-green-700 dark:text-green-400 px-4 py-2 rounded-full\"\r\n >\r\n <i class=\"fas fa-check-circle\"></i>\r\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\r\n <div\r\n class=\"inline-flex items-center gap-2 bg-red-50 dark:bg-red-900/10 text-red-700 dark:text-red-400 px-4 py-2 rounded-full\"\r\n >\r\n <i class=\"fas fa-exclamation-circle\"></i>\r\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ações -->\r\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\r\n <!-- Ação Primária -->\r\n <button\r\n *ngIf=\"hideBtn\"\r\n (click)=\"onPrimaryAction()\"\r\n [ngClass]=\"{\r\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\r\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\r\n 'bg-blue-600 ':\r\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\r\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\r\n }\"\r\n class=\"col-12 btn btn-primary\"\r\n >\r\n {{ emptyStateConfig.primaryActionText }}\r\n </button>\r\n\r\n <!-- Ação Secundária -->\r\n <button\r\n *ngIf=\"emptyStateConfig.secondaryActionText\"\r\n (click)=\"onSecondaryAction()\"\r\n class=\"col-12 btn btn-outline-primary\"\r\n >\r\n {{ emptyStateConfig.secondaryActionText }}\r\n </button>\r\n </div>\r\n\r\n <!-- Link de ajuda (opcional) -->\r\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\r\n <a\r\n href=\"#\"\r\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\r\n >\r\n <i class=\"fas fa-question-circle mr-2\"></i>\r\n Precisa de ajuda? Entre em contato com o suporte\r\n </a>\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { Location } from '@angular/common';\r\n\r\ntype ModalType = 'success' | 'error' | 'warning';\r\n\r\n@Component({\r\n selector: 'lib-custom-modal',\r\n standalone: false,\r\n templateUrl: './custom-modal.component.html',\r\n styleUrls: ['./custom-modal.component.css'],\r\n})\r\nexport class CustomModalComponent implements OnInit {\r\n @Input() modalId = 'customModal';\r\n @Input() title = 'Aviso';\r\n @Input() message = '';\r\n @Input() closeButtonText = 'Fechar';\r\n @Input() actionButtonText = '';\r\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\r\n @Input() errorDetails: any = null;\r\n\r\n @Output() modalClosed = new EventEmitter<void>();\r\n @Output() modalAction = new EventEmitter<void>();\r\n @Output() closeAction = new EventEmitter<void>();\r\n\r\n @Input() showModal = false;\r\n @Input() messageTitle: string = 'Pagamento Aprovado!';\r\n @Input() showBtn = true;\r\n @Input() priceNegotiated = 0;\r\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\r\n @Input() isLoadingBtn: boolean | undefined;\r\n @Input() disabledBtn: boolean = false;\r\n\r\n // 🔒 NOVA PROPRIEDADE: Trava o fechamento do modal\r\n @Input() isLocked: boolean = false;\r\n\r\n modalIcon: string = 'fa-check';\r\n modalIconColor: string = 'text-green-600';\r\n modalBgColor: string = 'bg-green-100';\r\n isClosing = false;\r\n\r\n constructor(private location: Location) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n openModal(): void {\r\n this.showModal = true;\r\n this.isClosing = false;\r\n if (!window.location.hash.includes('modalOpen')) {\r\n this.location.go(this.location.path() + '#modalOpen');\r\n }\r\n }\r\n\r\n open(\r\n type: ModalType,\r\n message: string = '',\r\n paymentMethod?: 'pix' | 'credit',\r\n ): void {\r\n this.configureModal(type, message);\r\n if (paymentMethod) this.paymentMethod = paymentMethod;\r\n this.openModal();\r\n }\r\n\r\n configureModal(type: ModalType, message: string = '', title?: string): void {\r\n if (this.isLoadingBtn !== undefined) {\r\n this.isLoadingBtn = false;\r\n }\r\n\r\n switch (type) {\r\n case 'success':\r\n this.setSuccessStyles(message, title);\r\n break;\r\n case 'error':\r\n this.setErrorStyles(message, title);\r\n break;\r\n case 'warning':\r\n this.setWarningStyles(message, title);\r\n break;\r\n }\r\n }\r\n\r\n private setSuccessStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-check-circle';\r\n this.modalIconColor = 'modal-icon-success';\r\n this.modalBgColor = 'modal-bg-success';\r\n this.messageTitle = title || 'Sucesso!';\r\n this.messageBody = message || 'Operação realizada com sucesso.';\r\n }\r\n\r\n private setErrorStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-times-circle';\r\n this.modalIconColor = 'modal-icon-error';\r\n this.modalBgColor = 'modal-bg-error';\r\n this.messageTitle = title || 'Ops! Algo deu errado';\r\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\r\n }\r\n\r\n private setWarningStyles(message: string, title?: string): void {\r\n this.modalIcon = 'fa-info-circle';\r\n this.modalIconColor = 'text-blue-600';\r\n this.modalBgColor = 'bg-blue-50';\r\n\r\n this.messageTitle = title || 'Atenção';\r\n this.messageBody = message || 'Verifique os dados antes de continuar.';\r\n }\r\n\r\n actionModal(): void {\r\n if (this.isLoadingBtn !== undefined) {\r\n this.isLoadingBtn = true;\r\n this.modalAction.emit();\r\n } else {\r\n this.modalAction.emit();\r\n this.closeModal();\r\n }\r\n }\r\n\r\n closeModal(fromButton: boolean = false): void {\r\n if (!this.showModal || this.isClosing) return;\r\n\r\n this.isClosing = true;\r\n if (fromButton) {\r\n this.closeAction.emit();\r\n }\r\n \r\n setTimeout(() => {\r\n this.showModal = false;\r\n this.isClosing = false;\r\n this.modalClosed.emit();\r\n }, 300);\r\n }\r\n // ✅ Intercepta o botão voltar do celular/browser\r\n @HostListener('window:popstate')\r\n onPopState(): void {\r\n if (this.showModal) {\r\n if (this.isLocked) {\r\n // 🔒 Se estiver travado, \"anulamos\" o voltar adicionando o hash de novo\r\n this.location.go(this.location.path() + '#modalOpen');\r\n } else {\r\n this.showModal = false;\r\n this.modalClosed.emit();\r\n }\r\n }\r\n }\r\n}\r\n","<div\r\n *ngIf=\"showModal\"\r\n class=\"custom-modal-root fixed inset-0 z-[9999] flex flex-col justify-end md:justify-center items-center pointer-events-auto\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n>\r\n <!-- Fundo escuro overlay -->\r\n <div\r\n class=\"absolute inset-0 bg-slate-900/60 backdrop-blur-sm transition-opacity duration-500\"\r\n [class.opacity-0]=\"isClosing\"\r\n (click)=\"!isLocked && closeModal()\"\r\n (touchmove)=\"$event.preventDefault()\"\r\n ></div>\r\n\r\n <!-- Container Principal do Modal -->\r\n <section\r\n class=\"relative w-full md:max-w-lg bg-surface max-h-[100dvh] md:max-h-[85dvh] rounded-t-[2.5rem] md:rounded-[2.5rem] shadow-2xl overflow-hidden flex flex-col\"\r\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- CABEÇALHO FIXO -->\r\n <div\r\n class=\"px-6 pt-4 pb-2 bg-surface z-10 shrink-0 flex justify-center\"\r\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\r\n (click)=\"!isLocked && closeModal()\"\r\n >\r\n <div class=\"w-12 h-1.5 bg-medium rounded-full\"></div>\r\n </div>\r\n\r\n <!-- ÁREA DE SCROLL -->\r\n <div\r\n class=\"flex-1 overflow-y-auto scroll-smooth overscroll-contain bg-surface custom-scrollbar px-6 pt-2\"\r\n style=\"touch-action: pan-y; overscroll-behavior: contain\"\r\n (touchmove)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"flex flex-col items-center text-center w-full\">\r\n <!-- Ícone -->\r\n <div class=\"relative mb-4\">\r\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\r\n <div class=\"absolute inset-0 flex items-center justify-center\">\r\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Título -->\r\n <h2 class=\"text-2xl font-bold text-text-primary mb-2\">{{ messageTitle }}</h2>\r\n\r\n <!-- Corpo da Mensagem -->\r\n <p *ngIf=\"messageBody\" class=\"text-text-secondary mb-4\">{{ messageBody }}</p>\r\n\r\n <!-- Conteúdo Dinâmico -->\r\n <div class=\"modal-dynamic-content text-left w-full pb-2\">\r\n <ng-content select=\"[optional-content]\"></ng-content>\r\n </div>\r\n\r\n <!-- Erros -->\r\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 dark:bg-red-950/20 rounded-2xl text-left border border-red-100 dark:border-red-900/30 w-full mb-4\">\r\n <p class=\"text-[10px] font-bold text-red-700 dark:text-red-400 uppercase mb-1\">Log do sistema:</p>\r\n <pre class=\"text-[11px] text-red-600 dark:text-red-300 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\r\n </div>\r\n </div>\r\n\r\n <!-- BOTÕES (AGORA DENTRO DO SCROLL) -->\r\n <div class=\"w-full pt-4 pb-6 mt-4 border-t border-border-light/50\">\r\n <div class=\"flex flex-col w-full gap-3\">\r\n <button\r\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\r\n *ngIf=\"actionButtonText\"\r\n (click)=\"actionModal()\"\r\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\"\r\n [style.background-color]=\"'var(--primary)'\"\r\n >\r\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\r\n <ng-container *ngIf=\"isLoadingBtn\">\r\n <span>Processando</span>\r\n <i class=\"fas fa-circle-notch fa-spin\"></i>\r\n </ng-container>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"showBtn\"\r\n (click)=\"closeModal(true)\"\r\n class=\"w-full py-2 text-text-muted font-semibold hover:text-text-primary transition-colors\"\r\n >\r\n {{ closeButtonText }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\n\r\nexport type PopupType = 'success' | 'error' | 'warning' | 'info';\r\n\r\n@Component({\r\n selector: 'lib-popup',\r\n standalone: false,\r\n templateUrl: './popup.component.html',\r\n styleUrls: ['./popup.component.css'],\r\n})\r\nexport class PopupComponent implements OnChanges {\r\n @Input() isOpen = false;\r\n @Input() type: PopupType = 'info';\r\n @Input() title = '';\r\n @Input() message = '';\r\n @Input() duration = 4000;\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n isClosing = false;\r\n private timer: any;\r\n\r\n // Getters para as classes - Evita erro de parser no HTML\r\n get barColor(): string {\r\n const colors = {\r\n success: 'bg-green-500',\r\n error: 'bg-red-500',\r\n warning: 'bg-amber-500',\r\n info: 'bg-blue-500',\r\n };\r\n return colors[this.type] || 'bg-blue-500';\r\n }\r\n\r\n get iconClass(): string {\r\n const icons = {\r\n success: 'fa-check-circle text-green-500',\r\n error: 'fa-times-circle text-red-500',\r\n warning: 'fa-exclamation-triangle text-amber-500',\r\n info: 'fa-info-circle text-blue-500',\r\n };\r\n return `fas ${icons[this.type]}`;\r\n }\r\n\r\n get animationClass(): string {\r\n return this.isClosing\r\n ? 'animate-slide-out-right'\r\n : 'animate-slide-in-right';\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['isOpen']?.currentValue === true) {\r\n this.isClosing = false;\r\n this.startTimer();\r\n }\r\n }\r\n\r\n private startTimer() {\r\n if (this.timer) clearTimeout(this.timer);\r\n this.timer = setTimeout(() => this.closePopup(), this.duration);\r\n }\r\n\r\n closePopup() {\r\n if (this.isClosing) return;\r\n this.isClosing = true;\r\n setTimeout(() => {\r\n this.isOpen = false;\r\n this.isClosing = false;\r\n this.closed.emit();\r\n }, 400);\r\n }\r\n}\r\n","<div *ngIf=\"isOpen\" class=\"fixed top-6 z-[10000] w-full max-w-[320px]\">\r\n <div\r\n [class]=\"\r\n 'bg-white border border-gray-100 rounded-2xl shadow-2xl flex p-4 overflow-hidden relative ' +\r\n animationClass\r\n \"\r\n >\r\n <div [class]=\"'absolute left-0 top-0 bottom-0 w-1.5 ' + barColor\"></div>\r\n\r\n <div class=\"flex-shrink-0 mr-3\">\r\n <i [class]=\"iconClass + ' text-xl'\"></i>\r\n </div>\r\n\r\n <div class=\"flex-grow pr-4 text-left\">\r\n <h4 class=\"text-sm font-bold text-gray-900 leading-tight\">{{ title }}</h4>\r\n <p class=\"text-[11px] text-gray-500 mt-1 leading-snug\">{{ message }}</p>\r\n </div>\r\n\r\n <button\r\n (click)=\"closePopup()\"\r\n class=\"flex-shrink-0 text-gray-300 hover:text-gray-500 transition-colors\"\r\n >\r\n <i class=\"fas fa-times text-sm\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'formatDateTime',\r\n})\r\nexport class FormatDateTimePipe implements PipeTransform {\r\n transform(value: string | null | undefined, showAgora: boolean = true): string {\r\n if (!value) return '';\r\n\r\n const [datePart, timePart] = value.split(' ');\r\n const [year, month, day] = datePart.split('-');\r\n\r\n if (!year || !month || !day || !timePart) return value;\r\n\r\n const inputDate = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\r\n const today = new Date();\r\n const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());\r\n const inputDateOnly = new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());\r\n\r\n const isToday = inputDateOnly.getTime() === todayDate.getTime();\r\n\r\n if (showAgora && isToday) {\r\n return `Hoje às ${timePart}`;\r\n }\r\n\r\n return `${day}/${month}/${year} - ${timePart}`;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\r\nimport { CustomModalComponent } from './components/custom-modal/custom-modal.component';\r\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\r\nimport { FormatDateTimePipe } from './components/format-date-time/format-date-time.pipe';\r\nimport { NavComponent } from './components/nav/nav.component';\r\nimport { TuduComponentsComponent } from './tudu-components.component';\r\nimport { PopupComponent } from '../public-api';\r\n\r\n@NgModule({\r\n declarations: [\r\n TuduComponentsComponent,\r\n CardLayoutComponent,\r\n NavComponent,\r\n FallbackMessageComponent,\r\n CustomModalComponent,\r\n PopupComponent,\r\n FormatDateTimePipe,\r\n ],\r\n imports: [CommonModule],\r\n exports: [\r\n TuduComponentsComponent,\r\n CardLayoutComponent,\r\n NavComponent,\r\n FallbackMessageComponent,\r\n CustomModalComponent,\r\n PopupComponent,\r\n FormatDateTimePipe,\r\n ],\r\n})\r\nexport class TuduComponentsModule {}\r\n","/*\r\n * Public API Surface of tudu-components\r\n */\r\n\r\n// 1. Primeiro as bases e services\r\nexport * from './lib/tudu-components.service';\r\nexport * from './lib/tudu-components.component';\r\n\r\n// 2. Depois os componentes individuais\r\nexport * from './lib/components/card-layout/card-layout.component';\r\nexport * from './lib/components/nav/nav.component';\r\nexport * from './lib/components/fallback-message/fallback-message.component';\r\nexport * from './lib/components/custom-modal/custom-modal.component';\r\nexport * from './lib/components/popup/popup.component'; // ✅ Classe do popup pronta aqui\r\n\r\n// 3. Pipes\r\nexport * from './lib/components/format-date-time/format-date-time.pipe';\r\n\r\n// 4. POR ÚLTIMO o módulo que declara todo mundo\r\nexport * from './lib/tudu-components.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tudu-components",
3
- "version": "0.2.28",
3
+ "version": "0.2.29",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.0",
6
6
  "@angular/core": "^17.3.0"