tudu-components 0.2.20 → 0.2.22

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.
@@ -23,6 +23,7 @@ export class CardLayoutComponent {
23
23
  case 'recusado':
24
24
  return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };
25
25
  case 'em negociacao':
26
+ case 'negociacao':
26
27
  return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };
27
28
  case 'pendente':
28
29
  return { backgroundColor: 'var(--status-pending-bg)', color: 'var(--status-pending)' };
@@ -32,10 +33,10 @@ export class CardLayoutComponent {
32
33
  }
33
34
  }
34
35
  CardLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
- CardLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CardLayoutComponent, selector: "lib-card-layout", inputs: { statusPedido: "statusPedido", cardTemplateIndicator: "cardTemplateIndicator", hideHeader: "hideHeader", hideDescription: "hideDescription" }, ngImport: i0, template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-5 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
36
+ CardLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CardLayoutComponent, selector: "lib-card-layout", inputs: { statusPedido: "statusPedido", cardTemplateIndicator: "cardTemplateIndicator", hideHeader: "hideHeader", hideDescription: "hideDescription" }, ngImport: i0, template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0 flex items-center gap-2\">\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
36
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardLayoutComponent, decorators: [{
37
38
  type: Component,
38
- args: [{ selector: 'lib-card-layout', template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-5 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"] }]
39
+ args: [{ selector: 'lib-card-layout', template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0 flex items-center gap-2\">\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"] }]
39
40
  }], propDecorators: { statusPedido: [{
40
41
  type: Input
41
42
  }], cardTemplateIndicator: [{
@@ -45,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
45
46
  }], hideDescription: [{
46
47
  type: Input
47
48
  }] } });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1sYXlvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVkdS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJkLWxheW91dC9jYXJkLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtbGF5b3V0L2NhcmQtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPakQsTUFBTSxPQUFPLG1CQUFtQjtJQUxoQztRQU1XLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLDBCQUFxQixHQUFXLENBQUMsQ0FBQztRQUNsQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLG9CQUFlLEdBQVksS0FBSyxDQUFDO0tBeUIzQztJQXZCQyxJQUFJLFdBQVc7UUFDYixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBRWhELFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxZQUFZO2dCQUNmLE9BQU8sRUFBRSxlQUFlLEVBQUUsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLENBQUM7WUFDekYsS0FBSyxXQUFXO2dCQUNkLE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLENBQUM7WUFDbkYsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLENBQUM7WUFDdkYsS0FBSyxXQUFXO2dCQUNkLE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLENBQUM7WUFDbkYsS0FBSyxVQUFVO2dCQUNiLE9BQU8sRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLENBQUM7WUFDdkYsS0FBSyxlQUFlO2dCQUNsQixPQUFPLEVBQUUsZUFBZSxFQUFFLDBCQUEwQixFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxDQUFDO1lBQ3pGLEtBQUssVUFBVTtnQkFDYixPQUFPLEVBQUUsZUFBZSxFQUFFLDBCQUEwQixFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxDQUFDO1lBQ3pGO2dCQUNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLENBQUM7U0FDMUY7SUFDSCxDQUFDOztnSEE1QlUsbUJBQW1CO29HQUFuQixtQkFBbUIsK01DUGhDLHNxRkFnRkE7MkZEekVhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7OEJBS2xCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNhcmQtbGF5b3V0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmQtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC1sYXlvdXQuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJkTGF5b3V0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgc3RhdHVzUGVkaWRvOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgY2FyZFRlbXBsYXRlSW5kaWNhdG9yOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBoaWRlSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVEZXNjcmlwdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldCBiYWRnZVN0eWxlcygpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLnN0YXR1c1BlZGlkbz8udG9Mb3dlckNhc2UoKTtcblxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdmaW5hbGl6YWRvJzpcbiAgICAgICAgcmV0dXJuIHsgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tc3RhdHVzLXN1Y2Nlc3MtYmcpJywgY29sb3I6ICd2YXIoLS1zdGF0dXMtc3VjY2VzcyknIH07XG4gICAgICBjYXNlICdjb25jbHVpZG8nOlxuICAgICAgICByZXR1cm4geyBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1zdGF0dXMtdGVhbC1iZyknLCBjb2xvcjogJ3ZhcigtLXN0YXR1cy10ZWFsKScgfTtcbiAgICAgIGNhc2UgJ2NhbmNlbGFkbyc6XG4gICAgICBjYXNlICdleHBpcmFkbyc6XG4gICAgICAgIHJldHVybiB7IGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLXN0YXR1cy1kYW5nZXItYmcpJywgY29sb3I6ICd2YXIoLS1zdGF0dXMtZGFuZ2VyKScgfTtcbiAgICAgIGNhc2UgJ3B1YmxpY2Fkbyc6XG4gICAgICAgIHJldHVybiB7IGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLXN0YXR1cy1pbmZvLWJnKScsIGNvbG9yOiAndmFyKC0tc3RhdHVzLWluZm8pJyB9O1xuICAgICAgY2FzZSAncmVjdXNhZG8nOlxuICAgICAgICByZXR1cm4geyBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1zdGF0dXMtZGFuZ2VyLWJnKScsIGNvbG9yOiAndmFyKC0tc3RhdHVzLWRhbmdlciknIH07XG4gICAgICBjYXNlICdlbSBuZWdvY2lhY2FvJzpcbiAgICAgICAgcmV0dXJuIHsgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tc3RhdHVzLXdhcm5pbmctYmcpJywgY29sb3I6ICd2YXIoLS1zdGF0dXMtd2FybmluZyknIH07XG4gICAgICBjYXNlICdwZW5kZW50ZSc6XG4gICAgICAgIHJldHVybiB7IGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLXN0YXR1cy1wZW5kaW5nLWJnKScsIGNvbG9yOiAndmFyKC0tc3RhdHVzLXBlbmRpbmcpJyB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHsgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tc3RhdHVzLW5ldXRyYWwtYmcpJywgY29sb3I6ICd2YXIoLS1zdGF0dXMtbmV1dHJhbCknIH07XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2VydmljZS1jYXJkIGdyb3VwIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItc2xhdGUtMTAwIGJnLXdoaXRlIHNoYWRvdy1zbSBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIHJlbGF0aXZlIG1iLTUgb3ZlcmZsb3ctaGlkZGVuXCJcbj5cbiAgPGRpdlxuICAgIFtjbGFzcy5mb3JjZS1zaG93XT1cIiFoaWRlSGVhZGVyXCJcbiAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHAtMy41IGJvcmRlci1iIGJvcmRlci1zbGF0ZS01MCBiZy1zbGF0ZS01MC8zMFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiaWNvbi1zdHlsZSBmbGV4LXNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2VydmljZS1pY29uXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4tdy0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInRydW5jYXRlIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS04MDAgdGV4dC1bMTVweF0gbGVhZGluZy10aWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2VydmljZS10aXRsZV1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltkZXRhaWxzLWJ0bl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0cnVuY2F0ZSB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTQwMCBtdC0wLjUgdHJhY2tpbmctd2lkZXJcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2VydmljZS1hZGRyZXNzXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicC00XCI+XG4gICAgPGRpdiAqbmdJZj1cImNhcmRUZW1wbGF0ZUluZGljYXRvciA9PT0gMVwiIGNsYXNzPVwibWItNFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtYmFkZ2VcIiBbbmdTdHlsZV09XCJiYWRnZVN0eWxlc1wiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzdGF0dXMtYmFkZ2VdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidGV4dC14cyB0ZXh0LWdyYXktNTAgZm9udC1zZW1pYm9sZCBweC0yLjUgcHktMSByb3VuZGVkLWZ1bGwgYmctZ3JheS00MDAvMTAgdGV4dC1ncmF5LTUwMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbb3JkZXItbnVtYmVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0xLjUgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmaWx0ZXItdGFnXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS02MDAgbWItM1wiXG4gICAgICAqbmdJZj1cInN0YXR1c1BlZGlkbyA9PT0gJ2ZpbmFsaXphZG8nXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY29uY2x1c2lvbi1kYXRlXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNsYXRlLTcwMCB0ZXh0LXNtXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaW5mby1yb3ddXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm10LTcgZm9udC1ib2xkIHRleHQtZW1lcmFsZC02MDAgdGV4dC1iYXNlXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcHJpY2VdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCIhaGlkZURlc2NyaXB0aW9uXCJcbiAgICAgIGNsYXNzPVwibXQtMyBwLTMgYmctc2xhdGUtNTAgYm9yZGVyIGJvcmRlci1zbGF0ZS0xMDAgcm91bmRlZC14bFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtc2xhdGUtNTAwIHRleHQteHMgbGVhZGluZy1yZWxheGVkIGl0YWxpY1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZGVzY3JpcHRpb25dXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJweC00IHB5LTMgYmctc2xhdGUtNTAvNTAgYm9yZGVyLXQgYm9yZGVyLXNsYXRlLTEwMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYWluLWJ0bl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1sYXlvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVkdS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJkLWxheW91dC9jYXJkLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtbGF5b3V0L2NhcmQtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPakQsTUFBTSxPQUFPLG1CQUFtQjtJQUxoQztRQU1XLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLDBCQUFxQixHQUFXLENBQUMsQ0FBQztRQUNsQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLG9CQUFlLEdBQVksS0FBSyxDQUFDO0tBMEIzQztJQXhCQyxJQUFJLFdBQVc7UUFDYixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBRWhELFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxZQUFZO2dCQUNmLE9BQU8sRUFBRSxlQUFlLEVBQUUsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLENBQUM7WUFDekYsS0FBSyxXQUFXO2dCQUNkLE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLENBQUM7WUFDbkYsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLENBQUM7WUFDdkYsS0FBSyxXQUFXO2dCQUNkLE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLENBQUM7WUFDbkYsS0FBSyxVQUFVO2dCQUNiLE9BQU8sRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLENBQUM7WUFDdkYsS0FBSyxlQUFlLENBQUM7WUFDckIsS0FBSyxZQUFZO2dCQUNmLE9BQU8sRUFBRSxlQUFlLEVBQUUsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLENBQUM7WUFDekYsS0FBSyxVQUFVO2dCQUNiLE9BQU8sRUFBRSxlQUFlLEVBQUUsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLENBQUM7WUFDekY7Z0JBQ0UsT0FBTyxFQUFFLGVBQWUsRUFBRSwwQkFBMEIsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQztTQUMxRjtJQUNILENBQUM7O2dIQTdCVSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwrTUNQaEMsbXdGQWlGQTsyRkQxRWEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs4QkFLbEIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY2FyZC1sYXlvdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJkLWxheW91dC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENhcmRMYXlvdXRDb21wb25lbnQge1xuICBASW5wdXQoKSBzdGF0dXNQZWRpZG86IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBjYXJkVGVtcGxhdGVJbmRpY2F0b3I6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIGhpZGVIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZURlc2NyaXB0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IGJhZGdlU3R5bGVzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuc3RhdHVzUGVkaWRvPy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ2ZpbmFsaXphZG8nOlxuICAgICAgICByZXR1cm4geyBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1zdGF0dXMtc3VjY2Vzcy1iZyknLCBjb2xvcjogJ3ZhcigtLXN0YXR1cy1zdWNjZXNzKScgfTtcbiAgICAgIGNhc2UgJ2NvbmNsdWlkbyc6XG4gICAgICAgIHJldHVybiB7IGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLXN0YXR1cy10ZWFsLWJnKScsIGNvbG9yOiAndmFyKC0tc3RhdHVzLXRlYWwpJyB9O1xuICAgICAgY2FzZSAnY2FuY2VsYWRvJzpcbiAgICAgIGNhc2UgJ2V4cGlyYWRvJzpcbiAgICAgICAgcmV0dXJuIHsgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tc3RhdHVzLWRhbmdlci1iZyknLCBjb2xvcjogJ3ZhcigtLXN0YXR1cy1kYW5nZXIpJyB9O1xuICAgICAgY2FzZSAncHVibGljYWRvJzpcbiAgICAgICAgcmV0dXJuIHsgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tc3RhdHVzLWluZm8tYmcpJywgY29sb3I6ICd2YXIoLS1zdGF0dXMtaW5mbyknIH07XG4gICAgICBjYXNlICdyZWN1c2Fkbyc6XG4gICAgICAgIHJldHVybiB7IGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLXN0YXR1cy1kYW5nZXItYmcpJywgY29sb3I6ICd2YXIoLS1zdGF0dXMtZGFuZ2VyKScgfTtcbiAgICAgIGNhc2UgJ2VtIG5lZ29jaWFjYW8nOlxuICAgICAgY2FzZSAnbmVnb2NpYWNhbyc6XG4gICAgICAgIHJldHVybiB7IGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLXN0YXR1cy13YXJuaW5nLWJnKScsIGNvbG9yOiAndmFyKC0tc3RhdHVzLXdhcm5pbmcpJyB9O1xuICAgICAgY2FzZSAncGVuZGVudGUnOlxuICAgICAgICByZXR1cm4geyBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1zdGF0dXMtcGVuZGluZy1iZyknLCBjb2xvcjogJ3ZhcigtLXN0YXR1cy1wZW5kaW5nKScgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7IGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLXN0YXR1cy1uZXV0cmFsLWJnKScsIGNvbG9yOiAndmFyKC0tc3RhdHVzLW5ldXRyYWwpJyB9O1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInNlcnZpY2UtY2FyZCBncm91cCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXNsYXRlLTEwMCBiZy13aGl0ZSBzaGFkb3ctc20gaG92ZXI6c2hhZG93LW1kIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCByZWxhdGl2ZSBtYi0yIG92ZXJmbG93LWhpZGRlblwiXG4+XG4gIDxkaXZcbiAgICBbY2xhc3MuZm9yY2Utc2hvd109XCIhaGlkZUhlYWRlclwiXG4gICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyBwLTMuNSBib3JkZXItYiBib3JkZXItc2xhdGUtNTAgYmctc2xhdGUtNTAvMzBcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImljb24tc3R5bGUgZmxleC1zaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3NlcnZpY2UtaWNvbl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgbWluLXctMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMlwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ0cnVuY2F0ZSBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtODAwIHRleHQtWzE1cHhdIGxlYWRpbmctdGlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3NlcnZpY2UtdGl0bGVdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICA8IS0tIDxuZy1jb250ZW50IHNlbGVjdD1cIltzaGFyZS1idG5dXCI+PC9uZy1jb250ZW50PiAtLT5cbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZGV0YWlscy1idG5dXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidHJ1bmNhdGUgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDAgbXQtMC41IHRyYWNraW5nLXdpZGVyXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3NlcnZpY2UtYWRkcmVzc11cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInAtNFwiPlxuICAgIDxkaXYgKm5nSWY9XCJjYXJkVGVtcGxhdGVJbmRpY2F0b3IgPT09IDFcIiBjbGFzcz1cIm1iLTRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWJhZGdlXCIgW25nU3R5bGVdPVwiYmFkZ2VTdHlsZXNcIj5cbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3RhdHVzLWJhZGdlXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInRleHQteHMgdGV4dC1ncmF5LTUwIGZvbnQtc2VtaWJvbGQgcHgtMi41IHB5LTEgcm91bmRlZC1mdWxsIGJnLWdyYXktNDAwLzEwIHRleHQtZ3JheS01MDAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW29yZGVyLW51bWJlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMS41IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmlsdGVyLXRhZ11cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtNjAwIG1iLTNcIlxuICAgICAgKm5nSWY9XCJzdGF0dXNQZWRpZG8gPT09ICdmaW5hbGl6YWRvJ1wiXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NvbmNsdXNpb24tZGF0ZV1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbGF0ZS03MDAgdGV4dC1zbVwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2luZm8tcm93XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtdC03IGZvbnQtYm9sZCB0ZXh0LWVtZXJhbGQtNjAwIHRleHQtYmFzZVwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3ByaWNlXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiIWhpZGVEZXNjcmlwdGlvblwiXG4gICAgICBjbGFzcz1cIm10LTMgcC0zIGJnLXNsYXRlLTUwIGJvcmRlciBib3JkZXItc2xhdGUtMTAwIHJvdW5kZWQteGxcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNsYXRlLTUwMCB0ZXh0LXhzIGxlYWRpbmctcmVsYXhlZCBpdGFsaWNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Rlc2NyaXB0aW9uXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicHgtNCBweS0zIGJnLXNsYXRlLTUwLzUwIGJvcmRlci10IGJvcmRlci1zbGF0ZS0xMDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWFpbi1idG5dXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,30 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class FormatDateTimePipe {
4
+ transform(value, showAgora = true) {
5
+ if (!value)
6
+ return '';
7
+ const [datePart, timePart] = value.split(' ');
8
+ const [year, month, day] = datePart.split('-');
9
+ if (!year || !month || !day || !timePart)
10
+ return value;
11
+ const inputDate = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
12
+ const today = new Date();
13
+ const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
14
+ const inputDateOnly = new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());
15
+ const isToday = inputDateOnly.getTime() === todayDate.getTime();
16
+ if (showAgora && isToday) {
17
+ return `Hoje às ${timePart}`;
18
+ }
19
+ return `${day}/${month}/${year} - ${timePart}`;
20
+ }
21
+ }
22
+ FormatDateTimePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormatDateTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
23
+ FormatDateTimePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: FormatDateTimePipe, name: "formatDateTime" });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormatDateTimePipe, decorators: [{
25
+ type: Pipe,
26
+ args: [{
27
+ name: 'formatDateTime',
28
+ }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LWRhdGUtdGltZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVkdS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9mb3JtYXQtZGF0ZS10aW1lL2Zvcm1hdC1kYXRlLXRpbWUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFLcEQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixTQUFTLENBQUMsS0FBZ0MsRUFBRSxZQUFxQixJQUFJO1FBQ25FLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFdEIsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRSxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkYsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUVuRyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWhFLElBQUksU0FBUyxJQUFJLE9BQU8sRUFBRTtZQUN4QixPQUFPLFdBQVcsUUFBUSxFQUFFLENBQUM7U0FDOUI7UUFFRCxPQUFPLEdBQUcsR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLE1BQU0sUUFBUSxFQUFFLENBQUM7SUFDakQsQ0FBQzs7K0dBckJVLGtCQUFrQjs2R0FBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBSDlCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGdCQUFnQjtpQkFDdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2Zvcm1hdERhdGVUaW1lJyxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWF0RGF0ZVRpbWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgc2hvd0Fnb3JhOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgW2RhdGVQYXJ0LCB0aW1lUGFydF0gPSB2YWx1ZS5zcGxpdCgnICcpO1xuICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IGRhdGVQYXJ0LnNwbGl0KCctJyk7XG5cbiAgICBpZiAoIXllYXIgfHwgIW1vbnRoIHx8ICFkYXkgfHwgIXRpbWVQYXJ0KSByZXR1cm4gdmFsdWU7XG5cbiAgICBjb25zdCBpbnB1dERhdGUgPSBuZXcgRGF0ZShwYXJzZUludCh5ZWFyKSwgcGFyc2VJbnQobW9udGgpIC0gMSwgcGFyc2VJbnQoZGF5KSk7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHRvZGF5RGF0ZSA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCksIHRvZGF5LmdldERhdGUoKSk7XG4gICAgY29uc3QgaW5wdXREYXRlT25seSA9IG5ldyBEYXRlKGlucHV0RGF0ZS5nZXRGdWxsWWVhcigpLCBpbnB1dERhdGUuZ2V0TW9udGgoKSwgaW5wdXREYXRlLmdldERhdGUoKSk7XG5cbiAgICBjb25zdCBpc1RvZGF5ID0gaW5wdXREYXRlT25seS5nZXRUaW1lKCkgPT09IHRvZGF5RGF0ZS5nZXRUaW1lKCk7XG5cbiAgICBpZiAoc2hvd0Fnb3JhICYmIGlzVG9kYXkpIHtcbiAgICAgIHJldHVybiBgSG9qZSDDoHMgJHt0aW1lUGFydH1gO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn0gLSAke3RpbWVQYXJ0fWA7XG4gIH1cbn1cbiJdfQ==
@@ -3,6 +3,7 @@ import { NgModule } from '@angular/core';
3
3
  import { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';
4
4
  import { CustomModalComponent } from './components/custom-modal/custom-modal.component';
5
5
  import { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';
6
+ import { FormatDateTimePipe } from './components/format-date-time/format-date-time.pipe';
6
7
  import { NavComponent } from './components/nav/nav.component';
7
8
  import { TuduComponentsComponent } from './tudu-components.component';
8
9
  import { PopupComponent } from '../public-api';
@@ -15,12 +16,14 @@ TuduComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ve
15
16
  NavComponent,
16
17
  FallbackMessageComponent,
17
18
  CustomModalComponent,
18
- PopupComponent], imports: [CommonModule], exports: [TuduComponentsComponent,
19
+ PopupComponent,
20
+ FormatDateTimePipe], imports: [CommonModule], exports: [TuduComponentsComponent,
19
21
  CardLayoutComponent,
20
22
  NavComponent,
21
23
  FallbackMessageComponent,
22
24
  CustomModalComponent,
23
- PopupComponent] });
25
+ PopupComponent,
26
+ FormatDateTimePipe] });
24
27
  TuduComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, imports: [CommonModule] });
25
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, decorators: [{
26
29
  type: NgModule,
@@ -32,6 +35,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
32
35
  FallbackMessageComponent,
33
36
  CustomModalComponent,
34
37
  PopupComponent,
38
+ FormatDateTimePipe,
35
39
  ],
36
40
  imports: [CommonModule],
37
41
  exports: [
@@ -41,7 +45,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
41
45
  FallbackMessageComponent,
42
46
  CustomModalComponent,
43
47
  PopupComponent,
48
+ FormatDateTimePipe,
44
49
  ],
45
50
  }]
46
51
  }] });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVkdS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL3R1ZHUtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDeEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDcEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBcUIvQyxNQUFNLE9BQU8sb0JBQW9COztpSEFBcEIsb0JBQW9CO2tIQUFwQixvQkFBb0IsaUJBakI3Qix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLFlBQVk7UUFDWix3QkFBd0I7UUFDeEIsb0JBQW9CO1FBQ3BCLGNBQWMsYUFFTixZQUFZLGFBRXBCLHVCQUF1QjtRQUN2QixtQkFBbUI7UUFDbkIsWUFBWTtRQUNaLHdCQUF3QjtRQUN4QixvQkFBb0I7UUFDcEIsY0FBYztrSEFHTCxvQkFBb0IsWUFWckIsWUFBWTsyRkFVWCxvQkFBb0I7a0JBbkJoQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsY0FBYztxQkFDZjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRTt3QkFDUCx1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsY0FBYztxQkFDZjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENhcmRMYXlvdXRDb21wb25lbnQgfSBmcm9tICcuLi9saWIvY29tcG9uZW50cy9jYXJkLWxheW91dC9jYXJkLWxheW91dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jdXN0b20tbW9kYWwvY3VzdG9tLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZhbGxiYWNrTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9mYWxsYmFjay1tZXNzYWdlL2ZhbGxiYWNrLW1lc3NhZ2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmF2Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25hdi9uYXYuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHVkdUNvbXBvbmVudHNDb21wb25lbnQgfSBmcm9tICcuL3R1ZHUtY29tcG9uZW50cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL3B1YmxpYy1hcGknO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFR1ZHVDb21wb25lbnRzQ29tcG9uZW50LFxyXG4gICAgQ2FyZExheW91dENvbXBvbmVudCxcclxuICAgIE5hdkNvbXBvbmVudCxcclxuICAgIEZhbGxiYWNrTWVzc2FnZUNvbXBvbmVudCxcclxuICAgIEN1c3RvbU1vZGFsQ29tcG9uZW50LFxyXG4gICAgUG9wdXBDb21wb25lbnQsXHJcbiAgXSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBUdWR1Q29tcG9uZW50c0NvbXBvbmVudCxcclxuICAgIENhcmRMYXlvdXRDb21wb25lbnQsXHJcbiAgICBOYXZDb21wb25lbnQsXHJcbiAgICBGYWxsYmFja01lc3NhZ2VDb21wb25lbnQsXHJcbiAgICBDdXN0b21Nb2RhbENvbXBvbmVudCxcclxuICAgIFBvcHVwQ29tcG9uZW50LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUdWR1Q29tcG9uZW50c01vZHVsZSB7fVxyXG4iXX0=
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVkdS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL3R1ZHUtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDeEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDcEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBdUIvQyxNQUFNLE9BQU8sb0JBQW9COztpSEFBcEIsb0JBQW9CO2tIQUFwQixvQkFBb0IsaUJBbkI3Qix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLFlBQVk7UUFDWix3QkFBd0I7UUFDeEIsb0JBQW9CO1FBQ3BCLGNBQWM7UUFDZCxrQkFBa0IsYUFFVixZQUFZLGFBRXBCLHVCQUF1QjtRQUN2QixtQkFBbUI7UUFDbkIsWUFBWTtRQUNaLHdCQUF3QjtRQUN4QixvQkFBb0I7UUFDcEIsY0FBYztRQUNkLGtCQUFrQjtrSEFHVCxvQkFBb0IsWUFYckIsWUFBWTsyRkFXWCxvQkFBb0I7a0JBckJoQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsY0FBYzt3QkFDZCxrQkFBa0I7cUJBQ25CO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFO3dCQUNQLHVCQUF1Qjt3QkFDdkIsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGtCQUFrQjtxQkFDbkI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDYXJkTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vbGliL2NvbXBvbmVudHMvY2FyZC1sYXlvdXQvY2FyZC1sYXlvdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY3VzdG9tLW1vZGFsL2N1c3RvbS1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGYWxsYmFja01lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmFsbGJhY2stbWVzc2FnZS9mYWxsYmFjay1tZXNzYWdlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1hdERhdGVUaW1lUGlwZSB9IGZyb20gJy4vY29tcG9uZW50cy9mb3JtYXQtZGF0ZS10aW1lL2Zvcm1hdC1kYXRlLXRpbWUucGlwZSc7XHJcbmltcG9ydCB7IE5hdkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9uYXYvbmF2LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFR1ZHVDb21wb25lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi90dWR1LWNvbXBvbmVudHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9wdWJsaWMtYXBpJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBUdWR1Q29tcG9uZW50c0NvbXBvbmVudCxcclxuICAgIENhcmRMYXlvdXRDb21wb25lbnQsXHJcbiAgICBOYXZDb21wb25lbnQsXHJcbiAgICBGYWxsYmFja01lc3NhZ2VDb21wb25lbnQsXHJcbiAgICBDdXN0b21Nb2RhbENvbXBvbmVudCxcclxuICAgIFBvcHVwQ29tcG9uZW50LFxyXG4gICAgRm9ybWF0RGF0ZVRpbWVQaXBlLFxyXG4gIF0sXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgVHVkdUNvbXBvbmVudHNDb21wb25lbnQsXHJcbiAgICBDYXJkTGF5b3V0Q29tcG9uZW50LFxyXG4gICAgTmF2Q29tcG9uZW50LFxyXG4gICAgRmFsbGJhY2tNZXNzYWdlQ29tcG9uZW50LFxyXG4gICAgQ3VzdG9tTW9kYWxDb21wb25lbnQsXHJcbiAgICBQb3B1cENvbXBvbmVudCxcclxuICAgIEZvcm1hdERhdGVUaW1lUGlwZSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHVkdUNvbXBvbmVudHNNb2R1bGUge31cclxuIl19
@@ -10,6 +10,8 @@ export * from './lib/components/nav/nav.component';
10
10
  export * from './lib/components/fallback-message/fallback-message.component';
11
11
  export * from './lib/components/custom-modal/custom-modal.component';
12
12
  export * from './lib/components/popup/popup.component'; // ✅ Classe do popup pronta aqui
13
- // 3. POR ÚLTIMO o módulo que declara todo mundo
13
+ // 3. Pipes
14
+ export * from './lib/components/format-date-time/format-date-time.pipe';
15
+ // 4. POR ÚLTIMO o módulo que declara todo mundo
14
16
  export * from './lib/tudu-components.module';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGtDQUFrQztBQUNsQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFFaEQsdUNBQXVDO0FBQ3ZDLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDhEQUE4RCxDQUFDO0FBQzdFLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyx3Q0FBd0MsQ0FBQyxDQUFDLGdDQUFnQztBQUV4RixnREFBZ0Q7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB0dWR1LWNvbXBvbmVudHNcclxuICovXHJcblxyXG4vLyAxLiBQcmltZWlybyBhcyBiYXNlcyBlIHNlcnZpY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R1ZHUtY29tcG9uZW50cy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdHVkdS1jb21wb25lbnRzLmNvbXBvbmVudCc7XHJcblxyXG4vLyAyLiBEZXBvaXMgb3MgY29tcG9uZW50ZXMgaW5kaXZpZHVhaXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jYXJkLWxheW91dC9jYXJkLWxheW91dC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL25hdi9uYXYuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mYWxsYmFjay1tZXNzYWdlL2ZhbGxiYWNrLW1lc3NhZ2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jdXN0b20tbW9kYWwvY3VzdG9tLW1vZGFsLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAuY29tcG9uZW50JzsgLy8g4pyFIENsYXNzZSBkbyBwb3B1cCBwcm9udGEgYXF1aVxyXG5cclxuLy8gMy4gUE9SIMOaTFRJTU8gbyBtw7NkdWxvIHF1ZSBkZWNsYXJhIHRvZG8gbXVuZG9cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdHVkdS1jb21wb25lbnRzLm1vZHVsZSc7XHJcbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGtDQUFrQztBQUNsQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFFaEQsdUNBQXVDO0FBQ3ZDLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDhEQUE4RCxDQUFDO0FBQzdFLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyx3Q0FBd0MsQ0FBQyxDQUFDLGdDQUFnQztBQUV4RixXQUFXO0FBQ1gsY0FBYyx5REFBeUQsQ0FBQztBQUV4RSxnREFBZ0Q7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB0dWR1LWNvbXBvbmVudHNcclxuICovXHJcblxyXG4vLyAxLiBQcmltZWlybyBhcyBiYXNlcyBlIHNlcnZpY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R1ZHUtY29tcG9uZW50cy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdHVkdS1jb21wb25lbnRzLmNvbXBvbmVudCc7XHJcblxyXG4vLyAyLiBEZXBvaXMgb3MgY29tcG9uZW50ZXMgaW5kaXZpZHVhaXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jYXJkLWxheW91dC9jYXJkLWxheW91dC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL25hdi9uYXYuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mYWxsYmFjay1tZXNzYWdlL2ZhbGxiYWNrLW1lc3NhZ2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jdXN0b20tbW9kYWwvY3VzdG9tLW1vZGFsLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAuY29tcG9uZW50JzsgLy8g4pyFIENsYXNzZSBkbyBwb3B1cCBwcm9udGEgYXF1aVxyXG5cclxuLy8gMy4gUGlwZXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtYXQtZGF0ZS10aW1lL2Zvcm1hdC1kYXRlLXRpbWUucGlwZSc7XHJcblxyXG4vLyA0LiBQT1Igw5pMVElNTyBvIG3Ds2R1bG8gcXVlIGRlY2xhcmEgdG9kbyBtdW5kb1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90dWR1LWNvbXBvbmVudHMubW9kdWxlJztcclxuIl19
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, Input, HostListener, EventEmitter, Output, NgModule } from '@angular/core';
2
+ import { Injectable, Component, Input, HostListener, EventEmitter, Output, Pipe, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i1$1 from '@angular/router';
@@ -61,6 +61,7 @@ class CardLayoutComponent {
61
61
  case 'recusado':
62
62
  return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };
63
63
  case 'em negociacao':
64
+ case 'negociacao':
64
65
  return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };
65
66
  case 'pendente':
66
67
  return { backgroundColor: 'var(--status-pending-bg)', color: 'var(--status-pending)' };
@@ -70,10 +71,10 @@ class CardLayoutComponent {
70
71
  }
71
72
  }
72
73
  CardLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
73
- CardLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CardLayoutComponent, selector: "lib-card-layout", inputs: { statusPedido: "statusPedido", cardTemplateIndicator: "cardTemplateIndicator", hideHeader: "hideHeader", hideDescription: "hideDescription" }, ngImport: i0, template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-5 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
74
+ CardLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CardLayoutComponent, selector: "lib-card-layout", inputs: { statusPedido: "statusPedido", cardTemplateIndicator: "cardTemplateIndicator", hideHeader: "hideHeader", hideDescription: "hideDescription" }, ngImport: i0, template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0 flex items-center gap-2\">\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
74
75
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardLayoutComponent, decorators: [{
75
76
  type: Component,
76
- args: [{ selector: 'lib-card-layout', template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-5 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"] }]
77
+ args: [{ selector: 'lib-card-layout', template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0 flex items-center gap-2\">\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"] }]
77
78
  }], propDecorators: { statusPedido: [{
78
79
  type: Input
79
80
  }], cardTemplateIndicator: [{
@@ -541,6 +542,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
541
542
  type: Output
542
543
  }] } });
543
544
 
545
+ class FormatDateTimePipe {
546
+ transform(value, showAgora = true) {
547
+ if (!value)
548
+ return '';
549
+ const [datePart, timePart] = value.split(' ');
550
+ const [year, month, day] = datePart.split('-');
551
+ if (!year || !month || !day || !timePart)
552
+ return value;
553
+ const inputDate = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
554
+ const today = new Date();
555
+ const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
556
+ const inputDateOnly = new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());
557
+ const isToday = inputDateOnly.getTime() === todayDate.getTime();
558
+ if (showAgora && isToday) {
559
+ return `Hoje às ${timePart}`;
560
+ }
561
+ return `${day}/${month}/${year} - ${timePart}`;
562
+ }
563
+ }
564
+ FormatDateTimePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormatDateTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
565
+ FormatDateTimePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: FormatDateTimePipe, name: "formatDateTime" });
566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormatDateTimePipe, decorators: [{
567
+ type: Pipe,
568
+ args: [{
569
+ name: 'formatDateTime',
570
+ }]
571
+ }] });
572
+
544
573
  class TuduComponentsModule {
545
574
  }
546
575
  TuduComponentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -549,12 +578,14 @@ TuduComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ve
549
578
  NavComponent,
550
579
  FallbackMessageComponent,
551
580
  CustomModalComponent,
552
- PopupComponent], imports: [CommonModule], exports: [TuduComponentsComponent,
581
+ PopupComponent,
582
+ FormatDateTimePipe], imports: [CommonModule], exports: [TuduComponentsComponent,
553
583
  CardLayoutComponent,
554
584
  NavComponent,
555
585
  FallbackMessageComponent,
556
586
  CustomModalComponent,
557
- PopupComponent] });
587
+ PopupComponent,
588
+ FormatDateTimePipe] });
558
589
  TuduComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, imports: [CommonModule] });
559
590
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, decorators: [{
560
591
  type: NgModule,
@@ -566,6 +597,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
566
597
  FallbackMessageComponent,
567
598
  CustomModalComponent,
568
599
  PopupComponent,
600
+ FormatDateTimePipe,
569
601
  ],
570
602
  imports: [CommonModule],
571
603
  exports: [
@@ -575,6 +607,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
575
607
  FallbackMessageComponent,
576
608
  CustomModalComponent,
577
609
  PopupComponent,
610
+ FormatDateTimePipe,
578
611
  ],
579
612
  }]
580
613
  }] });
@@ -587,5 +620,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
587
620
  * Generated bundle index. Do not edit.
588
621
  */
589
622
 
590
- export { CardLayoutComponent, CustomModalComponent, FallbackMessageComponent, NavComponent, PopupComponent, TuduComponentsComponent, TuduComponentsModule, TuduComponentsService };
623
+ export { CardLayoutComponent, CustomModalComponent, FallbackMessageComponent, FormatDateTimePipe, NavComponent, PopupComponent, TuduComponentsComponent, TuduComponentsModule, TuduComponentsService };
591
624
  //# sourceMappingURL=tudu-components.mjs.map
@@ -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/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';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0;\n @Input() hideHeader: boolean = false;\n @Input() hideDescription: boolean = false;\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: 'var(--status-success-bg)', color: 'var(--status-success)' };\n case 'concluido':\n return { backgroundColor: 'var(--status-teal-bg)', color: 'var(--status-teal)' };\n case 'cancelado':\n case 'expirado':\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\n case 'publicado':\n return { backgroundColor: 'var(--status-info-bg)', color: 'var(--status-info)' };\n case 'recusado':\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\n case 'em negociacao':\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\n case 'pendente':\n return { backgroundColor: 'var(--status-pending-bg)', color: 'var(--status-pending)' };\n default:\n return { backgroundColor: 'var(--status-neutral-bg)', color: 'var(--status-neutral)' };\n }\n }\n}\n","<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-5 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { filter, map, mergeMap } from 'rxjs';\n\n@Component({\n selector: 'lib-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.css'],\n})\nexport class NavComponent implements OnInit {\n changeNavColor: boolean = false;\n\n openClose: boolean = false;\n message: string = '';\n\n lastScrollPosition = 0;\n isHeaderVisible = true;\n headerHeight = 0;\n isMobile = false;\n\n hasOffer: boolean = false;\n allowTransparency = false;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private el: ElementRef\n ) {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n map(() => this.activatedRoute),\n map((route) => {\n while (route.firstChild) route = route.firstChild;\n return route;\n }),\n mergeMap((route) => route.data)\n )\n .subscribe((data) => {\n this.allowTransparency = !!data['transparentNav'];\n\n this.lastScrollPosition = 0;\n\n this.isHeaderVisible = true; // força aparecer no load\n this.changeNavColor = !this.allowTransparency;\n });\n }\n\n ngAfterViewInit() {\n this.checkMobile();\n\n // Obtém a altura do header-menu após a view ser inicializada\n const headerMenu = this.el.nativeElement.querySelector('[header-menu]');\n if (headerMenu) {\n this.headerHeight = headerMenu.offsetHeight;\n }\n }\n\n ngOnInit(): void {\n this.hasOffer = this.router.url.includes('offer');\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n }\n\n private checkMobile() {\n this.isMobile = window.innerWidth < 768; // 768px é o breakpoint padrão do Tailwind para md\n if (!this.isMobile) {\n this.isHeaderVisible = true; // Garante que fique visível em desktop\n }\n }\n public menu() {\n this.openClose = !this.openClose;\n }\n\n receiveMessage(event: string) {\n this.message = event;\n }\n\n @HostListener('window:scroll', [])\n onWindowScroll() {\n const scroll = window.pageYOffset || document.documentElement.scrollTop;\n const isScrollingDown = scroll > this.lastScrollPosition;\n\n // --- REGRA DE VISIBILIDADE ---\n if (this.allowTransparency) {\n // Comportamento especial para Showcase (sua regra atual)\n if (scroll <= 10) {\n // No topo: fica invisível (se você quer que suma ao chegar no topo,\n // isHeaderVisible deve ser false ou a cor deve ser transparente)\n this.isHeaderVisible = !isScrollingDown;\n } else if (isScrollingDown && scroll > 50) {\n // Scroll Down: esconde\n this.isHeaderVisible = false;\n } else {\n // Scroll Up: mostra\n this.isHeaderVisible = true;\n }\n } else {\n // REGRA PARA DEMAIS COMPONENTES: Sempre visível\n this.isHeaderVisible = true;\n }\n\n // --- REGRA DE COR (Mantida) ---\n if (!this.allowTransparency) {\n this.changeNavColor = true;\n } else {\n this.changeNavColor = scroll > 20;\n }\n\n this.lastScrollPosition = scroll;\n }\n}\n","<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\ninterface EmptyStateConfig {\n title: string;\n description: string;\n icon: string;\n iconColor: string;\n bgColor: string;\n primaryActionText?: string;\n secondaryActionText?: string;\n}\n\n@Component({\n selector: 'lib-fallback-message',\n templateUrl: './fallback-message.component.html',\n styleUrls: ['./fallback-message.component.css'],\n})\nexport class FallbackMessageComponent {\n @Input() card: any[] = [];\n @Input() statusPedido: string = '';\n @Input() customTitle?: string;\n @Input() customDescription?: string;\n @Input() primaryActionText?: string;\n @Input() secondaryActionText?: string;\n @Input() hideBtn?: boolean = false;\n\n @Output() primaryAction = new EventEmitter<void>();\n @Output() secondaryAction = new EventEmitter<void>();\n\n get emptyStateConfig(): EmptyStateConfig {\n // Se não há propostas\n // if (this.card.length === 0) {\n // return {\n // title: 'Nenhuma Proposta',\n // description:\n // 'Você ainda não possui negociações ou propostas recebidas.',\n // icon: '📄',\n // iconColor: 'text-gray-500',\n // bgColor: 'bg-gray-100',\n // primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n // secondaryActionText: this.secondaryActionText,\n // };\n // }\n\n // Se há status de pedido\n if (this.statusPedido) {\n switch (this.statusPedido.toLowerCase()) {\n case 'finalizado':\n return {\n title: this.customTitle || 'Serviço Concluído! 🎉',\n description:\n this.customDescription ||\n 'O serviço foi finalizado com sucesso. Agradecemos pela confiança!',\n icon: '✅',\n iconColor: 'text-green-500',\n bgColor: 'bg-green-100',\n primaryActionText: this.primaryActionText || 'Ver Detalhes',\n secondaryActionText: this.secondaryActionText || 'Avaliar Serviço',\n };\n\n // case 'cancelado':\n // return {\n // title: this.customTitle || 'Serviço Cancelado',\n // description:\n // this.customDescription ||\n // 'O serviço foi cancelado pelo prestador. Você pode buscar outros profissionais disponíveis.',\n // icon: '❌',\n // iconColor: 'text-red-500',\n // bgColor: 'bg-red-100',\n // primaryActionText: this.primaryActionText || 'Buscar Profissionais',\n // secondaryActionText: this.secondaryActionText || 'Voltar ao Início',\n // };\n\n case 'sem servicos':\n return {\n title: this.customTitle || 'Sem serviço',\n description:\n this.customDescription || 'Não há serviços disponíveis aqui.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Procurar serviços',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n case 'indisponivel':\n return {\n title: this.customTitle || 'Proposta Indisponível',\n description:\n this.customDescription ||\n 'Esta proposta não está mais disponível para visualização.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Ver Outras Propostas',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n\n default:\n return this.getDefaultConfig();\n }\n }\n\n return this.getDefaultConfig();\n }\n\n private getDefaultConfig(): EmptyStateConfig {\n return {\n title: this.customTitle || 'Nenhuma Proposta',\n description:\n this.customDescription || 'Você ainda não possui negociações.',\n icon: '📄',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n secondaryActionText: this.secondaryActionText,\n };\n }\n\n // Método para determinar se deve mostrar o componente\n shouldShowEmptyState(): boolean {\n return (\n this.card.length === 0 ||\n ['finalizado', 'cancelado', 'indisponível', 'indisponivel'].includes(\n this.statusPedido?.toLowerCase()\n )\n );\n }\n\n onPrimaryAction() {\n this.primaryAction.emit();\n }\n\n onSecondaryAction() {\n this.secondaryAction.emit();\n }\n}\n","<div *ngIf=\"shouldShowEmptyState()\" class=\"empty-state-container\">\n <div\n class=\"empty-state-card max-w-md mx-auto bg-white shadow-xl rounded-3xl p-8 border border-gray-100\"\n >\n <!-- Ícone dinâmico -->\n <div class=\"empty-state-icon mb-6 flex justify-center\">\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\n {{ emptyStateConfig.icon }}\n </div>\n </div>\n\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div\n [class]=\"emptyStateConfig.bgColor\"\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\n ></div>\n </div>\n </div>\n </div>\n\n <!-- Conteúdo da mensagem -->\n <div class=\"empty-state-content text-center space-y-4\">\n <!-- Título -->\n <h3 class=\"text-2xl font-bold text-gray-900 mb-2\">\n {{ emptyStateConfig.title }}\n </h3>\n\n <!-- Descrição -->\n <p class=\"text-gray-600 text-lg leading-relaxed px-4\">\n {{ emptyStateConfig.description }}\n </p>\n\n <!-- Informações adicionais baseadas no status -->\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-green-50 text-green-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-check-circle\"></i>\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\n </div>\n </div>\n\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-red-50 text-red-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-exclamation-circle\"></i>\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\n </div>\n </div>\n </div>\n\n <!-- Ações -->\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\n <!-- Ação Primária -->\n <button\n *ngIf=\"hideBtn\"\n (click)=\"onPrimaryAction()\"\n [ngClass]=\"{\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\n 'bg-blue-600 ':\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\n }\"\n class=\"col-12 btn btn-primary\"\n >\n {{ emptyStateConfig.primaryActionText }}\n </button>\n\n <!-- Ação Secundária -->\n <button\n *ngIf=\"emptyStateConfig.secondaryActionText\"\n (click)=\"onSecondaryAction()\"\n class=\"col-12 btn btn-outline-primary\"\n >\n {{ emptyStateConfig.secondaryActionText }}\n </button>\n </div>\n\n <!-- Link de ajuda (opcional) -->\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\n <a\n href=\"#\"\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n <i class=\"fas fa-question-circle mr-2\"></i>\n Precisa de ajuda? Entre em contato com o suporte\n </a>\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Location } from '@angular/common';\n\ntype ModalType = 'success' | 'error' | 'warning';\n\n@Component({\n selector: 'lib-custom-modal',\n standalone: false,\n templateUrl: './custom-modal.component.html',\n styleUrls: ['./custom-modal.component.css'],\n})\nexport class CustomModalComponent implements OnInit {\n @Input() modalId = 'customModal';\n @Input() title = 'Aviso';\n @Input() message = '';\n @Input() closeButtonText = 'Fechar';\n @Input() actionButtonText = '';\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\n @Input() errorDetails: any = null;\n\n @Output() modalClosed = new EventEmitter<void>();\n @Output() modalAction = new EventEmitter<void>();\n\n @Input() showModal = false;\n @Input() messageTitle: string = 'Pagamento Aprovado!';\n @Input() showBtn = true;\n @Input() priceNegotiated = 0;\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\n @Input() isLoadingBtn: boolean | undefined;\n @Input() disabledBtn: boolean = false;\n\n // 🔒 NOVA PROPRIEDADE: Trava o fechamento do modal\n @Input() isLocked: boolean = false;\n\n modalIcon: string = 'fa-check';\n modalIconColor: string = 'text-green-600';\n modalBgColor: string = 'bg-green-100';\n isClosing = false;\n\n constructor(private location: Location) {}\n\n ngOnInit(): void {}\n\n openModal(): void {\n this.showModal = true;\n this.isClosing = false;\n if (!window.location.hash.includes('modalOpen')) {\n this.location.go(this.location.path() + '#modalOpen');\n }\n }\n\n open(\n type: ModalType,\n message: string = '',\n paymentMethod?: 'pix' | 'credit',\n ): void {\n this.configureModal(type, message);\n if (paymentMethod) this.paymentMethod = paymentMethod;\n this.openModal();\n }\n\n configureModal(type: ModalType, message: string = ''): void {\n switch (type) {\n case 'success':\n this.setSuccessStyles(message);\n break;\n case 'error':\n this.setErrorStyles(message);\n break;\n case 'warning':\n this.setWarningStyles(message);\n break;\n }\n }\n\n private setSuccessStyles(message: string): void {\n this.modalIcon = 'fa-check-circle';\n this.modalIconColor = 'modal-icon-success';\n this.modalBgColor = 'modal-bg-success';\n this.messageTitle = 'Sucesso!';\n this.messageBody = message || 'Operação realizada com sucesso.';\n }\n\n private setErrorStyles(message: string): void {\n this.modalIcon = 'fa-times-circle';\n this.modalIconColor = 'modal-icon-error';\n this.modalBgColor = 'modal-bg-error';\n this.messageTitle = 'Ops! Algo deu errado';\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\n }\n\n private setWarningStyles(message: string): void {\n this.modalIcon = 'fa-info-circle';\n\n // ✅ Usando classes nativas do Tailwind\n this.modalIconColor = 'text-blue-600'; // Azul vibrante, mais amigável que o 800\n this.modalBgColor = 'bg-blue-50';\n\n this.messageTitle = 'Atenção';\n this.messageBody = message || 'Verifique os dados antes de continuar.';\n }\n\n actionModal(): void {\n if (this.isLoadingBtn !== undefined) {\n this.isLoadingBtn = true;\n this.modalAction.emit();\n } else {\n this.modalAction.emit();\n this.isLoadingBtn = false;\n this.closeModal();\n }\n }\n\n closeModal(): void {\n if (!this.showModal || this.isClosing) return;\n\n this.isClosing = true;\n setTimeout(() => {\n this.showModal = false;\n this.isClosing = false;\n this.modalClosed.emit();\n }, 300);\n }\n // ✅ Intercepta o botão voltar do celular/browser\n @HostListener('window:popstate')\n onPopState(): void {\n if (this.showModal) {\n if (this.isLocked) {\n // 🔒 Se estiver travado, \"anulamos\" o voltar adicionando o hash de novo\n this.location.go(this.location.path() + '#modalOpen');\n } else {\n this.showModal = false;\n this.modalClosed.emit();\n }\n }\n }\n}\n","<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\">\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal()\"\n class=\"w-full py-2 text-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nexport type PopupType = 'success' | 'error' | 'warning' | 'info';\n\n@Component({\n selector: 'lib-popup',\n standalone: false,\n templateUrl: './popup.component.html',\n styleUrls: ['./popup.component.css'],\n})\nexport class PopupComponent implements OnChanges {\n @Input() isOpen = false;\n @Input() type: PopupType = 'info';\n @Input() title = '';\n @Input() message = '';\n @Input() duration = 4000;\n\n @Output() closed = new EventEmitter<void>();\n\n isClosing = false;\n private timer: any;\n\n // Getters para as classes - Evita erro de parser no HTML\n get barColor(): string {\n const colors = {\n success: 'bg-green-500',\n error: 'bg-red-500',\n warning: 'bg-amber-500',\n info: 'bg-blue-500',\n };\n return colors[this.type] || 'bg-blue-500';\n }\n\n get iconClass(): string {\n const icons = {\n success: 'fa-check-circle text-green-500',\n error: 'fa-times-circle text-red-500',\n warning: 'fa-exclamation-triangle text-amber-500',\n info: 'fa-info-circle text-blue-500',\n };\n return `fas ${icons[this.type]}`;\n }\n\n get animationClass(): string {\n return this.isClosing\n ? 'animate-slide-out-right'\n : 'animate-slide-in-right';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['isOpen']?.currentValue === true) {\n this.isClosing = false;\n this.startTimer();\n }\n }\n\n private startTimer() {\n if (this.timer) clearTimeout(this.timer);\n this.timer = setTimeout(() => this.closePopup(), this.duration);\n }\n\n closePopup() {\n if (this.isClosing) return;\n this.isClosing = true;\n setTimeout(() => {\n this.isOpen = false;\n this.isClosing = false;\n this.closed.emit();\n }, 400);\n }\n}\n","<div *ngIf=\"isOpen\" class=\"fixed top-6 z-[10000] w-full max-w-[320px]\">\n <div\n [class]=\"\n 'bg-white border border-gray-100 rounded-2xl shadow-2xl flex p-4 overflow-hidden relative ' +\n animationClass\n \"\n >\n <div [class]=\"'absolute left-0 top-0 bottom-0 w-1.5 ' + barColor\"></div>\n\n <div class=\"flex-shrink-0 mr-3\">\n <i [class]=\"iconClass + ' text-xl'\"></i>\n </div>\n\n <div class=\"flex-grow pr-4 text-left\">\n <h4 class=\"text-sm font-bold text-gray-900 leading-tight\">{{ title }}</h4>\n <p class=\"text-[11px] text-gray-500 mt-1 leading-snug\">{{ message }}</p>\n </div>\n\n <button\n (click)=\"closePopup()\"\n class=\"flex-shrink-0 text-gray-300 hover:text-gray-500 transition-colors\"\n >\n <i class=\"fas fa-times text-sm\"></i>\n </button>\n </div>\n</div>\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 { 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 ],\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 ],\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. 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';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0;\n @Input() hideHeader: boolean = false;\n @Input() hideDescription: boolean = false;\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: 'var(--status-success-bg)', color: 'var(--status-success)' };\n case 'concluido':\n return { backgroundColor: 'var(--status-teal-bg)', color: 'var(--status-teal)' };\n case 'cancelado':\n case 'expirado':\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\n case 'publicado':\n return { backgroundColor: 'var(--status-info-bg)', color: 'var(--status-info)' };\n case 'recusado':\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\n case 'em negociacao':\n case 'negociacao':\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\n case 'pendente':\n return { backgroundColor: 'var(--status-pending-bg)', color: 'var(--status-pending)' };\n default:\n return { backgroundColor: 'var(--status-neutral-bg)', color: 'var(--status-neutral)' };\n }\n }\n}\n","<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0 flex items-center gap-2\">\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { filter, map, mergeMap } from 'rxjs';\n\n@Component({\n selector: 'lib-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.css'],\n})\nexport class NavComponent implements OnInit {\n changeNavColor: boolean = false;\n\n openClose: boolean = false;\n message: string = '';\n\n lastScrollPosition = 0;\n isHeaderVisible = true;\n headerHeight = 0;\n isMobile = false;\n\n hasOffer: boolean = false;\n allowTransparency = false;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private el: ElementRef\n ) {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n map(() => this.activatedRoute),\n map((route) => {\n while (route.firstChild) route = route.firstChild;\n return route;\n }),\n mergeMap((route) => route.data)\n )\n .subscribe((data) => {\n this.allowTransparency = !!data['transparentNav'];\n\n this.lastScrollPosition = 0;\n\n this.isHeaderVisible = true; // força aparecer no load\n this.changeNavColor = !this.allowTransparency;\n });\n }\n\n ngAfterViewInit() {\n this.checkMobile();\n\n // Obtém a altura do header-menu após a view ser inicializada\n const headerMenu = this.el.nativeElement.querySelector('[header-menu]');\n if (headerMenu) {\n this.headerHeight = headerMenu.offsetHeight;\n }\n }\n\n ngOnInit(): void {\n this.hasOffer = this.router.url.includes('offer');\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n }\n\n private checkMobile() {\n this.isMobile = window.innerWidth < 768; // 768px é o breakpoint padrão do Tailwind para md\n if (!this.isMobile) {\n this.isHeaderVisible = true; // Garante que fique visível em desktop\n }\n }\n public menu() {\n this.openClose = !this.openClose;\n }\n\n receiveMessage(event: string) {\n this.message = event;\n }\n\n @HostListener('window:scroll', [])\n onWindowScroll() {\n const scroll = window.pageYOffset || document.documentElement.scrollTop;\n const isScrollingDown = scroll > this.lastScrollPosition;\n\n // --- REGRA DE VISIBILIDADE ---\n if (this.allowTransparency) {\n // Comportamento especial para Showcase (sua regra atual)\n if (scroll <= 10) {\n // No topo: fica invisível (se você quer que suma ao chegar no topo,\n // isHeaderVisible deve ser false ou a cor deve ser transparente)\n this.isHeaderVisible = !isScrollingDown;\n } else if (isScrollingDown && scroll > 50) {\n // Scroll Down: esconde\n this.isHeaderVisible = false;\n } else {\n // Scroll Up: mostra\n this.isHeaderVisible = true;\n }\n } else {\n // REGRA PARA DEMAIS COMPONENTES: Sempre visível\n this.isHeaderVisible = true;\n }\n\n // --- REGRA DE COR (Mantida) ---\n if (!this.allowTransparency) {\n this.changeNavColor = true;\n } else {\n this.changeNavColor = scroll > 20;\n }\n\n this.lastScrollPosition = scroll;\n }\n}\n","<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\ninterface EmptyStateConfig {\n title: string;\n description: string;\n icon: string;\n iconColor: string;\n bgColor: string;\n primaryActionText?: string;\n secondaryActionText?: string;\n}\n\n@Component({\n selector: 'lib-fallback-message',\n templateUrl: './fallback-message.component.html',\n styleUrls: ['./fallback-message.component.css'],\n})\nexport class FallbackMessageComponent {\n @Input() card: any[] = [];\n @Input() statusPedido: string = '';\n @Input() customTitle?: string;\n @Input() customDescription?: string;\n @Input() primaryActionText?: string;\n @Input() secondaryActionText?: string;\n @Input() hideBtn?: boolean = false;\n\n @Output() primaryAction = new EventEmitter<void>();\n @Output() secondaryAction = new EventEmitter<void>();\n\n get emptyStateConfig(): EmptyStateConfig {\n // Se não há propostas\n // if (this.card.length === 0) {\n // return {\n // title: 'Nenhuma Proposta',\n // description:\n // 'Você ainda não possui negociações ou propostas recebidas.',\n // icon: '📄',\n // iconColor: 'text-gray-500',\n // bgColor: 'bg-gray-100',\n // primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n // secondaryActionText: this.secondaryActionText,\n // };\n // }\n\n // Se há status de pedido\n if (this.statusPedido) {\n switch (this.statusPedido.toLowerCase()) {\n case 'finalizado':\n return {\n title: this.customTitle || 'Serviço Concluído! 🎉',\n description:\n this.customDescription ||\n 'O serviço foi finalizado com sucesso. Agradecemos pela confiança!',\n icon: '✅',\n iconColor: 'text-green-500',\n bgColor: 'bg-green-100',\n primaryActionText: this.primaryActionText || 'Ver Detalhes',\n secondaryActionText: this.secondaryActionText || 'Avaliar Serviço',\n };\n\n // case 'cancelado':\n // return {\n // title: this.customTitle || 'Serviço Cancelado',\n // description:\n // this.customDescription ||\n // 'O serviço foi cancelado pelo prestador. Você pode buscar outros profissionais disponíveis.',\n // icon: '❌',\n // iconColor: 'text-red-500',\n // bgColor: 'bg-red-100',\n // primaryActionText: this.primaryActionText || 'Buscar Profissionais',\n // secondaryActionText: this.secondaryActionText || 'Voltar ao Início',\n // };\n\n case 'sem servicos':\n return {\n title: this.customTitle || 'Sem serviço',\n description:\n this.customDescription || 'Não há serviços disponíveis aqui.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Procurar serviços',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n case 'indisponivel':\n return {\n title: this.customTitle || 'Proposta Indisponível',\n description:\n this.customDescription ||\n 'Esta proposta não está mais disponível para visualização.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Ver Outras Propostas',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n\n default:\n return this.getDefaultConfig();\n }\n }\n\n return this.getDefaultConfig();\n }\n\n private getDefaultConfig(): EmptyStateConfig {\n return {\n title: this.customTitle || 'Nenhuma Proposta',\n description:\n this.customDescription || 'Você ainda não possui negociações.',\n icon: '📄',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n secondaryActionText: this.secondaryActionText,\n };\n }\n\n // Método para determinar se deve mostrar o componente\n shouldShowEmptyState(): boolean {\n return (\n this.card.length === 0 ||\n ['finalizado', 'cancelado', 'indisponível', 'indisponivel'].includes(\n this.statusPedido?.toLowerCase()\n )\n );\n }\n\n onPrimaryAction() {\n this.primaryAction.emit();\n }\n\n onSecondaryAction() {\n this.secondaryAction.emit();\n }\n}\n","<div *ngIf=\"shouldShowEmptyState()\" class=\"empty-state-container\">\n <div\n class=\"empty-state-card max-w-md mx-auto bg-white shadow-xl rounded-3xl p-8 border border-gray-100\"\n >\n <!-- Ícone dinâmico -->\n <div class=\"empty-state-icon mb-6 flex justify-center\">\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\n {{ emptyStateConfig.icon }}\n </div>\n </div>\n\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div\n [class]=\"emptyStateConfig.bgColor\"\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\n ></div>\n </div>\n </div>\n </div>\n\n <!-- Conteúdo da mensagem -->\n <div class=\"empty-state-content text-center space-y-4\">\n <!-- Título -->\n <h3 class=\"text-2xl font-bold text-gray-900 mb-2\">\n {{ emptyStateConfig.title }}\n </h3>\n\n <!-- Descrição -->\n <p class=\"text-gray-600 text-lg leading-relaxed px-4\">\n {{ emptyStateConfig.description }}\n </p>\n\n <!-- Informações adicionais baseadas no status -->\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-green-50 text-green-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-check-circle\"></i>\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\n </div>\n </div>\n\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-red-50 text-red-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-exclamation-circle\"></i>\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\n </div>\n </div>\n </div>\n\n <!-- Ações -->\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\n <!-- Ação Primária -->\n <button\n *ngIf=\"hideBtn\"\n (click)=\"onPrimaryAction()\"\n [ngClass]=\"{\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\n 'bg-blue-600 ':\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\n }\"\n class=\"col-12 btn btn-primary\"\n >\n {{ emptyStateConfig.primaryActionText }}\n </button>\n\n <!-- Ação Secundária -->\n <button\n *ngIf=\"emptyStateConfig.secondaryActionText\"\n (click)=\"onSecondaryAction()\"\n class=\"col-12 btn btn-outline-primary\"\n >\n {{ emptyStateConfig.secondaryActionText }}\n </button>\n </div>\n\n <!-- Link de ajuda (opcional) -->\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\n <a\n href=\"#\"\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n <i class=\"fas fa-question-circle mr-2\"></i>\n Precisa de ajuda? Entre em contato com o suporte\n </a>\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Location } from '@angular/common';\n\ntype ModalType = 'success' | 'error' | 'warning';\n\n@Component({\n selector: 'lib-custom-modal',\n standalone: false,\n templateUrl: './custom-modal.component.html',\n styleUrls: ['./custom-modal.component.css'],\n})\nexport class CustomModalComponent implements OnInit {\n @Input() modalId = 'customModal';\n @Input() title = 'Aviso';\n @Input() message = '';\n @Input() closeButtonText = 'Fechar';\n @Input() actionButtonText = '';\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\n @Input() errorDetails: any = null;\n\n @Output() modalClosed = new EventEmitter<void>();\n @Output() modalAction = new EventEmitter<void>();\n\n @Input() showModal = false;\n @Input() messageTitle: string = 'Pagamento Aprovado!';\n @Input() showBtn = true;\n @Input() priceNegotiated = 0;\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\n @Input() isLoadingBtn: boolean | undefined;\n @Input() disabledBtn: boolean = false;\n\n // 🔒 NOVA PROPRIEDADE: Trava o fechamento do modal\n @Input() isLocked: boolean = false;\n\n modalIcon: string = 'fa-check';\n modalIconColor: string = 'text-green-600';\n modalBgColor: string = 'bg-green-100';\n isClosing = false;\n\n constructor(private location: Location) {}\n\n ngOnInit(): void {}\n\n openModal(): void {\n this.showModal = true;\n this.isClosing = false;\n if (!window.location.hash.includes('modalOpen')) {\n this.location.go(this.location.path() + '#modalOpen');\n }\n }\n\n open(\n type: ModalType,\n message: string = '',\n paymentMethod?: 'pix' | 'credit',\n ): void {\n this.configureModal(type, message);\n if (paymentMethod) this.paymentMethod = paymentMethod;\n this.openModal();\n }\n\n configureModal(type: ModalType, message: string = ''): void {\n switch (type) {\n case 'success':\n this.setSuccessStyles(message);\n break;\n case 'error':\n this.setErrorStyles(message);\n break;\n case 'warning':\n this.setWarningStyles(message);\n break;\n }\n }\n\n private setSuccessStyles(message: string): void {\n this.modalIcon = 'fa-check-circle';\n this.modalIconColor = 'modal-icon-success';\n this.modalBgColor = 'modal-bg-success';\n this.messageTitle = 'Sucesso!';\n this.messageBody = message || 'Operação realizada com sucesso.';\n }\n\n private setErrorStyles(message: string): void {\n this.modalIcon = 'fa-times-circle';\n this.modalIconColor = 'modal-icon-error';\n this.modalBgColor = 'modal-bg-error';\n this.messageTitle = 'Ops! Algo deu errado';\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\n }\n\n private setWarningStyles(message: string): void {\n this.modalIcon = 'fa-info-circle';\n\n // ✅ Usando classes nativas do Tailwind\n this.modalIconColor = 'text-blue-600'; // Azul vibrante, mais amigável que o 800\n this.modalBgColor = 'bg-blue-50';\n\n this.messageTitle = 'Atenção';\n this.messageBody = message || 'Verifique os dados antes de continuar.';\n }\n\n actionModal(): void {\n if (this.isLoadingBtn !== undefined) {\n this.isLoadingBtn = true;\n this.modalAction.emit();\n } else {\n this.modalAction.emit();\n this.isLoadingBtn = false;\n this.closeModal();\n }\n }\n\n closeModal(): void {\n if (!this.showModal || this.isClosing) return;\n\n this.isClosing = true;\n setTimeout(() => {\n this.showModal = false;\n this.isClosing = false;\n this.modalClosed.emit();\n }, 300);\n }\n // ✅ Intercepta o botão voltar do celular/browser\n @HostListener('window:popstate')\n onPopState(): void {\n if (this.showModal) {\n if (this.isLocked) {\n // 🔒 Se estiver travado, \"anulamos\" o voltar adicionando o hash de novo\n this.location.go(this.location.path() + '#modalOpen');\n } else {\n this.showModal = false;\n this.modalClosed.emit();\n }\n }\n }\n}\n","<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\">\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal()\"\n class=\"w-full py-2 text-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nexport type PopupType = 'success' | 'error' | 'warning' | 'info';\n\n@Component({\n selector: 'lib-popup',\n standalone: false,\n templateUrl: './popup.component.html',\n styleUrls: ['./popup.component.css'],\n})\nexport class PopupComponent implements OnChanges {\n @Input() isOpen = false;\n @Input() type: PopupType = 'info';\n @Input() title = '';\n @Input() message = '';\n @Input() duration = 4000;\n\n @Output() closed = new EventEmitter<void>();\n\n isClosing = false;\n private timer: any;\n\n // Getters para as classes - Evita erro de parser no HTML\n get barColor(): string {\n const colors = {\n success: 'bg-green-500',\n error: 'bg-red-500',\n warning: 'bg-amber-500',\n info: 'bg-blue-500',\n };\n return colors[this.type] || 'bg-blue-500';\n }\n\n get iconClass(): string {\n const icons = {\n success: 'fa-check-circle text-green-500',\n error: 'fa-times-circle text-red-500',\n warning: 'fa-exclamation-triangle text-amber-500',\n info: 'fa-info-circle text-blue-500',\n };\n return `fas ${icons[this.type]}`;\n }\n\n get animationClass(): string {\n return this.isClosing\n ? 'animate-slide-out-right'\n : 'animate-slide-in-right';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['isOpen']?.currentValue === true) {\n this.isClosing = false;\n this.startTimer();\n }\n }\n\n private startTimer() {\n if (this.timer) clearTimeout(this.timer);\n this.timer = setTimeout(() => this.closePopup(), this.duration);\n }\n\n closePopup() {\n if (this.isClosing) return;\n this.isClosing = true;\n setTimeout(() => {\n this.isOpen = false;\n this.isClosing = false;\n this.closed.emit();\n }, 400);\n }\n}\n","<div *ngIf=\"isOpen\" class=\"fixed top-6 z-[10000] w-full max-w-[320px]\">\n <div\n [class]=\"\n 'bg-white border border-gray-100 rounded-2xl shadow-2xl flex p-4 overflow-hidden relative ' +\n animationClass\n \"\n >\n <div [class]=\"'absolute left-0 top-0 bottom-0 w-1.5 ' + barColor\"></div>\n\n <div class=\"flex-shrink-0 mr-3\">\n <i [class]=\"iconClass + ' text-xl'\"></i>\n </div>\n\n <div class=\"flex-grow pr-4 text-left\">\n <h4 class=\"text-sm font-bold text-gray-900 leading-tight\">{{ title }}</h4>\n <p class=\"text-[11px] text-gray-500 mt-1 leading-snug\">{{ message }}</p>\n </div>\n\n <button\n (click)=\"closePopup()\"\n class=\"flex-shrink-0 text-gray-300 hover:text-gray-500 transition-colors\"\n >\n <i class=\"fas fa-times text-sm\"></i>\n </button>\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'formatDateTime',\n})\nexport class FormatDateTimePipe implements PipeTransform {\n transform(value: string | null | undefined, showAgora: boolean = true): string {\n if (!value) return '';\n\n const [datePart, timePart] = value.split(' ');\n const [year, month, day] = datePart.split('-');\n\n if (!year || !month || !day || !timePart) return value;\n\n const inputDate = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\n const today = new Date();\n const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());\n const inputDateOnly = new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());\n\n const isToday = inputDateOnly.getTime() === todayDate.getTime();\n\n if (showAgora && isToday) {\n return `Hoje às ${timePart}`;\n }\n\n return `${day}/${month}/${year} - ${timePart}`;\n }\n}\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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, Input, HostListener, EventEmitter, Output, NgModule } from '@angular/core';
2
+ import { Injectable, Component, Input, HostListener, EventEmitter, Output, Pipe, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i1$1 from '@angular/router';
@@ -60,6 +60,7 @@ class CardLayoutComponent {
60
60
  case 'recusado':
61
61
  return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };
62
62
  case 'em negociacao':
63
+ case 'negociacao':
63
64
  return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };
64
65
  case 'pendente':
65
66
  return { backgroundColor: 'var(--status-pending-bg)', color: 'var(--status-pending)' };
@@ -69,10 +70,10 @@ class CardLayoutComponent {
69
70
  }
70
71
  }
71
72
  CardLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
72
- CardLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CardLayoutComponent, selector: "lib-card-layout", inputs: { statusPedido: "statusPedido", cardTemplateIndicator: "cardTemplateIndicator", hideHeader: "hideHeader", hideDescription: "hideDescription" }, ngImport: i0, template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-5 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
73
+ CardLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CardLayoutComponent, selector: "lib-card-layout", inputs: { statusPedido: "statusPedido", cardTemplateIndicator: "cardTemplateIndicator", hideHeader: "hideHeader", hideDescription: "hideDescription" }, ngImport: i0, template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0 flex items-center gap-2\">\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
73
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardLayoutComponent, decorators: [{
74
75
  type: Component,
75
- args: [{ selector: 'lib-card-layout', template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-5 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"] }]
76
+ args: [{ selector: 'lib-card-layout', template: "<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0 flex items-center gap-2\">\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n", styles: [".service-card{background:var(--light, #fff);border-radius:1rem;transition:all .3s ease;.service-card-header i {color: var(--primary); font-size: 20px;} .order-badge {background-color: #d3d3d32c; color: grey; border-radius: 25px; padding: 5px;} .status-badge {display: inline-flex; align-items: center; gap: 4px; font-weight: 600; font-size: 12px; padding: 4px 10px; border-radius: 25px; text-transform: capitalize; transition: all .3s ease; i {color: inherit !important;}} .filter-tag {background: var(--tag-bg, #f9fafb); border: 1px solid var(--primary); border-radius: 9999px; padding: .25rem .75rem; color: var(--primary); font-size: 12px;} .details-btn {cursor: pointer;} .price {font-weight: 600; color: var(--background-color);} .service-address {font-size: 13px; color: rgb(212,212,212) !important;} .icon-style {display: flex; justify-content: center; align-items: center; background-color: var(--primary) !important; width: 40px; height: 40px; font-size: 20px; border-radius: 10px;} .service-title {flex: 1; min-width: 0; display: block; font-weight: 600; font-size: 1.1rem; ::ng-deep > * {display: block !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; width: 100%;}}}.prestador-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.budget-card-footer button{width:100%;border-radius:8px;font-weight:600;transition:.2s}.status-badge i.notification-pulse{animation:pulse 2s infinite;border-radius:50%}:host-context(.has-notification) .status-badge i{animation:pulse 2s infinite}.service-card-header{display:none}@media (min-width: 768px){.service-card-header{display:block}}.service-card-header.force-show{display:block}\n"] }]
76
77
  }], propDecorators: { statusPedido: [{
77
78
  type: Input
78
79
  }], cardTemplateIndicator: [{
@@ -538,6 +539,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
538
539
  type: Output
539
540
  }] } });
540
541
 
542
+ class FormatDateTimePipe {
543
+ transform(value, showAgora = true) {
544
+ if (!value)
545
+ return '';
546
+ const [datePart, timePart] = value.split(' ');
547
+ const [year, month, day] = datePart.split('-');
548
+ if (!year || !month || !day || !timePart)
549
+ return value;
550
+ const inputDate = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
551
+ const today = new Date();
552
+ const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
553
+ const inputDateOnly = new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());
554
+ const isToday = inputDateOnly.getTime() === todayDate.getTime();
555
+ if (showAgora && isToday) {
556
+ return `Hoje às ${timePart}`;
557
+ }
558
+ return `${day}/${month}/${year} - ${timePart}`;
559
+ }
560
+ }
561
+ FormatDateTimePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormatDateTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
562
+ FormatDateTimePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: FormatDateTimePipe, name: "formatDateTime" });
563
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormatDateTimePipe, decorators: [{
564
+ type: Pipe,
565
+ args: [{
566
+ name: 'formatDateTime',
567
+ }]
568
+ }] });
569
+
541
570
  class TuduComponentsModule {
542
571
  }
543
572
  TuduComponentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -546,12 +575,14 @@ TuduComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ve
546
575
  NavComponent,
547
576
  FallbackMessageComponent,
548
577
  CustomModalComponent,
549
- PopupComponent], imports: [CommonModule], exports: [TuduComponentsComponent,
578
+ PopupComponent,
579
+ FormatDateTimePipe], imports: [CommonModule], exports: [TuduComponentsComponent,
550
580
  CardLayoutComponent,
551
581
  NavComponent,
552
582
  FallbackMessageComponent,
553
583
  CustomModalComponent,
554
- PopupComponent] });
584
+ PopupComponent,
585
+ FormatDateTimePipe] });
555
586
  TuduComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, imports: [CommonModule] });
556
587
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, decorators: [{
557
588
  type: NgModule,
@@ -563,6 +594,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
563
594
  FallbackMessageComponent,
564
595
  CustomModalComponent,
565
596
  PopupComponent,
597
+ FormatDateTimePipe,
566
598
  ],
567
599
  imports: [CommonModule],
568
600
  exports: [
@@ -572,6 +604,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
572
604
  FallbackMessageComponent,
573
605
  CustomModalComponent,
574
606
  PopupComponent,
607
+ FormatDateTimePipe,
575
608
  ],
576
609
  }]
577
610
  }] });
@@ -584,5 +617,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
584
617
  * Generated bundle index. Do not edit.
585
618
  */
586
619
 
587
- export { CardLayoutComponent, CustomModalComponent, FallbackMessageComponent, NavComponent, PopupComponent, TuduComponentsComponent, TuduComponentsModule, TuduComponentsService };
620
+ export { CardLayoutComponent, CustomModalComponent, FallbackMessageComponent, FormatDateTimePipe, NavComponent, PopupComponent, TuduComponentsComponent, TuduComponentsModule, TuduComponentsService };
588
621
  //# sourceMappingURL=tudu-components.mjs.map
@@ -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/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';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0;\n @Input() hideHeader: boolean = false;\n @Input() hideDescription: boolean = false;\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: 'var(--status-success-bg)', color: 'var(--status-success)' };\n case 'concluido':\n return { backgroundColor: 'var(--status-teal-bg)', color: 'var(--status-teal)' };\n case 'cancelado':\n case 'expirado':\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\n case 'publicado':\n return { backgroundColor: 'var(--status-info-bg)', color: 'var(--status-info)' };\n case 'recusado':\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\n case 'em negociacao':\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\n case 'pendente':\n return { backgroundColor: 'var(--status-pending-bg)', color: 'var(--status-pending)' };\n default:\n return { backgroundColor: 'var(--status-neutral-bg)', color: 'var(--status-neutral)' };\n }\n }\n}\n","<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-5 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { filter, map, mergeMap } from 'rxjs';\n\n@Component({\n selector: 'lib-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.css'],\n})\nexport class NavComponent implements OnInit {\n changeNavColor: boolean = false;\n\n openClose: boolean = false;\n message: string = '';\n\n lastScrollPosition = 0;\n isHeaderVisible = true;\n headerHeight = 0;\n isMobile = false;\n\n hasOffer: boolean = false;\n allowTransparency = false;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private el: ElementRef\n ) {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n map(() => this.activatedRoute),\n map((route) => {\n while (route.firstChild) route = route.firstChild;\n return route;\n }),\n mergeMap((route) => route.data)\n )\n .subscribe((data) => {\n this.allowTransparency = !!data['transparentNav'];\n\n this.lastScrollPosition = 0;\n\n this.isHeaderVisible = true; // força aparecer no load\n this.changeNavColor = !this.allowTransparency;\n });\n }\n\n ngAfterViewInit() {\n this.checkMobile();\n\n // Obtém a altura do header-menu após a view ser inicializada\n const headerMenu = this.el.nativeElement.querySelector('[header-menu]');\n if (headerMenu) {\n this.headerHeight = headerMenu.offsetHeight;\n }\n }\n\n ngOnInit(): void {\n this.hasOffer = this.router.url.includes('offer');\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n }\n\n private checkMobile() {\n this.isMobile = window.innerWidth < 768; // 768px é o breakpoint padrão do Tailwind para md\n if (!this.isMobile) {\n this.isHeaderVisible = true; // Garante que fique visível em desktop\n }\n }\n public menu() {\n this.openClose = !this.openClose;\n }\n\n receiveMessage(event: string) {\n this.message = event;\n }\n\n @HostListener('window:scroll', [])\n onWindowScroll() {\n const scroll = window.pageYOffset || document.documentElement.scrollTop;\n const isScrollingDown = scroll > this.lastScrollPosition;\n\n // --- REGRA DE VISIBILIDADE ---\n if (this.allowTransparency) {\n // Comportamento especial para Showcase (sua regra atual)\n if (scroll <= 10) {\n // No topo: fica invisível (se você quer que suma ao chegar no topo,\n // isHeaderVisible deve ser false ou a cor deve ser transparente)\n this.isHeaderVisible = !isScrollingDown;\n } else if (isScrollingDown && scroll > 50) {\n // Scroll Down: esconde\n this.isHeaderVisible = false;\n } else {\n // Scroll Up: mostra\n this.isHeaderVisible = true;\n }\n } else {\n // REGRA PARA DEMAIS COMPONENTES: Sempre visível\n this.isHeaderVisible = true;\n }\n\n // --- REGRA DE COR (Mantida) ---\n if (!this.allowTransparency) {\n this.changeNavColor = true;\n } else {\n this.changeNavColor = scroll > 20;\n }\n\n this.lastScrollPosition = scroll;\n }\n}\n","<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\ninterface EmptyStateConfig {\n title: string;\n description: string;\n icon: string;\n iconColor: string;\n bgColor: string;\n primaryActionText?: string;\n secondaryActionText?: string;\n}\n\n@Component({\n selector: 'lib-fallback-message',\n templateUrl: './fallback-message.component.html',\n styleUrls: ['./fallback-message.component.css'],\n})\nexport class FallbackMessageComponent {\n @Input() card: any[] = [];\n @Input() statusPedido: string = '';\n @Input() customTitle?: string;\n @Input() customDescription?: string;\n @Input() primaryActionText?: string;\n @Input() secondaryActionText?: string;\n @Input() hideBtn?: boolean = false;\n\n @Output() primaryAction = new EventEmitter<void>();\n @Output() secondaryAction = new EventEmitter<void>();\n\n get emptyStateConfig(): EmptyStateConfig {\n // Se não há propostas\n // if (this.card.length === 0) {\n // return {\n // title: 'Nenhuma Proposta',\n // description:\n // 'Você ainda não possui negociações ou propostas recebidas.',\n // icon: '📄',\n // iconColor: 'text-gray-500',\n // bgColor: 'bg-gray-100',\n // primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n // secondaryActionText: this.secondaryActionText,\n // };\n // }\n\n // Se há status de pedido\n if (this.statusPedido) {\n switch (this.statusPedido.toLowerCase()) {\n case 'finalizado':\n return {\n title: this.customTitle || 'Serviço Concluído! 🎉',\n description:\n this.customDescription ||\n 'O serviço foi finalizado com sucesso. Agradecemos pela confiança!',\n icon: '✅',\n iconColor: 'text-green-500',\n bgColor: 'bg-green-100',\n primaryActionText: this.primaryActionText || 'Ver Detalhes',\n secondaryActionText: this.secondaryActionText || 'Avaliar Serviço',\n };\n\n // case 'cancelado':\n // return {\n // title: this.customTitle || 'Serviço Cancelado',\n // description:\n // this.customDescription ||\n // 'O serviço foi cancelado pelo prestador. Você pode buscar outros profissionais disponíveis.',\n // icon: '❌',\n // iconColor: 'text-red-500',\n // bgColor: 'bg-red-100',\n // primaryActionText: this.primaryActionText || 'Buscar Profissionais',\n // secondaryActionText: this.secondaryActionText || 'Voltar ao Início',\n // };\n\n case 'sem servicos':\n return {\n title: this.customTitle || 'Sem serviço',\n description:\n this.customDescription || 'Não há serviços disponíveis aqui.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Procurar serviços',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n case 'indisponivel':\n return {\n title: this.customTitle || 'Proposta Indisponível',\n description:\n this.customDescription ||\n 'Esta proposta não está mais disponível para visualização.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Ver Outras Propostas',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n\n default:\n return this.getDefaultConfig();\n }\n }\n\n return this.getDefaultConfig();\n }\n\n private getDefaultConfig(): EmptyStateConfig {\n return {\n title: this.customTitle || 'Nenhuma Proposta',\n description:\n this.customDescription || 'Você ainda não possui negociações.',\n icon: '📄',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n secondaryActionText: this.secondaryActionText,\n };\n }\n\n // Método para determinar se deve mostrar o componente\n shouldShowEmptyState(): boolean {\n return (\n this.card.length === 0 ||\n ['finalizado', 'cancelado', 'indisponível', 'indisponivel'].includes(\n this.statusPedido?.toLowerCase()\n )\n );\n }\n\n onPrimaryAction() {\n this.primaryAction.emit();\n }\n\n onSecondaryAction() {\n this.secondaryAction.emit();\n }\n}\n","<div *ngIf=\"shouldShowEmptyState()\" class=\"empty-state-container\">\n <div\n class=\"empty-state-card max-w-md mx-auto bg-white shadow-xl rounded-3xl p-8 border border-gray-100\"\n >\n <!-- Ícone dinâmico -->\n <div class=\"empty-state-icon mb-6 flex justify-center\">\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\n {{ emptyStateConfig.icon }}\n </div>\n </div>\n\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div\n [class]=\"emptyStateConfig.bgColor\"\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\n ></div>\n </div>\n </div>\n </div>\n\n <!-- Conteúdo da mensagem -->\n <div class=\"empty-state-content text-center space-y-4\">\n <!-- Título -->\n <h3 class=\"text-2xl font-bold text-gray-900 mb-2\">\n {{ emptyStateConfig.title }}\n </h3>\n\n <!-- Descrição -->\n <p class=\"text-gray-600 text-lg leading-relaxed px-4\">\n {{ emptyStateConfig.description }}\n </p>\n\n <!-- Informações adicionais baseadas no status -->\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-green-50 text-green-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-check-circle\"></i>\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\n </div>\n </div>\n\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-red-50 text-red-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-exclamation-circle\"></i>\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\n </div>\n </div>\n </div>\n\n <!-- Ações -->\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\n <!-- Ação Primária -->\n <button\n *ngIf=\"hideBtn\"\n (click)=\"onPrimaryAction()\"\n [ngClass]=\"{\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\n 'bg-blue-600 ':\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\n }\"\n class=\"col-12 btn btn-primary\"\n >\n {{ emptyStateConfig.primaryActionText }}\n </button>\n\n <!-- Ação Secundária -->\n <button\n *ngIf=\"emptyStateConfig.secondaryActionText\"\n (click)=\"onSecondaryAction()\"\n class=\"col-12 btn btn-outline-primary\"\n >\n {{ emptyStateConfig.secondaryActionText }}\n </button>\n </div>\n\n <!-- Link de ajuda (opcional) -->\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\n <a\n href=\"#\"\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n <i class=\"fas fa-question-circle mr-2\"></i>\n Precisa de ajuda? Entre em contato com o suporte\n </a>\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Location } from '@angular/common';\n\ntype ModalType = 'success' | 'error' | 'warning';\n\n@Component({\n selector: 'lib-custom-modal',\n standalone: false,\n templateUrl: './custom-modal.component.html',\n styleUrls: ['./custom-modal.component.css'],\n})\nexport class CustomModalComponent implements OnInit {\n @Input() modalId = 'customModal';\n @Input() title = 'Aviso';\n @Input() message = '';\n @Input() closeButtonText = 'Fechar';\n @Input() actionButtonText = '';\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\n @Input() errorDetails: any = null;\n\n @Output() modalClosed = new EventEmitter<void>();\n @Output() modalAction = new EventEmitter<void>();\n\n @Input() showModal = false;\n @Input() messageTitle: string = 'Pagamento Aprovado!';\n @Input() showBtn = true;\n @Input() priceNegotiated = 0;\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\n @Input() isLoadingBtn: boolean | undefined;\n @Input() disabledBtn: boolean = false;\n\n // 🔒 NOVA PROPRIEDADE: Trava o fechamento do modal\n @Input() isLocked: boolean = false;\n\n modalIcon: string = 'fa-check';\n modalIconColor: string = 'text-green-600';\n modalBgColor: string = 'bg-green-100';\n isClosing = false;\n\n constructor(private location: Location) {}\n\n ngOnInit(): void {}\n\n openModal(): void {\n this.showModal = true;\n this.isClosing = false;\n if (!window.location.hash.includes('modalOpen')) {\n this.location.go(this.location.path() + '#modalOpen');\n }\n }\n\n open(\n type: ModalType,\n message: string = '',\n paymentMethod?: 'pix' | 'credit',\n ): void {\n this.configureModal(type, message);\n if (paymentMethod) this.paymentMethod = paymentMethod;\n this.openModal();\n }\n\n configureModal(type: ModalType, message: string = ''): void {\n switch (type) {\n case 'success':\n this.setSuccessStyles(message);\n break;\n case 'error':\n this.setErrorStyles(message);\n break;\n case 'warning':\n this.setWarningStyles(message);\n break;\n }\n }\n\n private setSuccessStyles(message: string): void {\n this.modalIcon = 'fa-check-circle';\n this.modalIconColor = 'modal-icon-success';\n this.modalBgColor = 'modal-bg-success';\n this.messageTitle = 'Sucesso!';\n this.messageBody = message || 'Operação realizada com sucesso.';\n }\n\n private setErrorStyles(message: string): void {\n this.modalIcon = 'fa-times-circle';\n this.modalIconColor = 'modal-icon-error';\n this.modalBgColor = 'modal-bg-error';\n this.messageTitle = 'Ops! Algo deu errado';\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\n }\n\n private setWarningStyles(message: string): void {\n this.modalIcon = 'fa-info-circle';\n\n // ✅ Usando classes nativas do Tailwind\n this.modalIconColor = 'text-blue-600'; // Azul vibrante, mais amigável que o 800\n this.modalBgColor = 'bg-blue-50';\n\n this.messageTitle = 'Atenção';\n this.messageBody = message || 'Verifique os dados antes de continuar.';\n }\n\n actionModal(): void {\n if (this.isLoadingBtn !== undefined) {\n this.isLoadingBtn = true;\n this.modalAction.emit();\n } else {\n this.modalAction.emit();\n this.isLoadingBtn = false;\n this.closeModal();\n }\n }\n\n closeModal(): void {\n if (!this.showModal || this.isClosing) return;\n\n this.isClosing = true;\n setTimeout(() => {\n this.showModal = false;\n this.isClosing = false;\n this.modalClosed.emit();\n }, 300);\n }\n // ✅ Intercepta o botão voltar do celular/browser\n @HostListener('window:popstate')\n onPopState(): void {\n if (this.showModal) {\n if (this.isLocked) {\n // 🔒 Se estiver travado, \"anulamos\" o voltar adicionando o hash de novo\n this.location.go(this.location.path() + '#modalOpen');\n } else {\n this.showModal = false;\n this.modalClosed.emit();\n }\n }\n }\n}\n","<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\">\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal()\"\n class=\"w-full py-2 text-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nexport type PopupType = 'success' | 'error' | 'warning' | 'info';\n\n@Component({\n selector: 'lib-popup',\n standalone: false,\n templateUrl: './popup.component.html',\n styleUrls: ['./popup.component.css'],\n})\nexport class PopupComponent implements OnChanges {\n @Input() isOpen = false;\n @Input() type: PopupType = 'info';\n @Input() title = '';\n @Input() message = '';\n @Input() duration = 4000;\n\n @Output() closed = new EventEmitter<void>();\n\n isClosing = false;\n private timer: any;\n\n // Getters para as classes - Evita erro de parser no HTML\n get barColor(): string {\n const colors = {\n success: 'bg-green-500',\n error: 'bg-red-500',\n warning: 'bg-amber-500',\n info: 'bg-blue-500',\n };\n return colors[this.type] || 'bg-blue-500';\n }\n\n get iconClass(): string {\n const icons = {\n success: 'fa-check-circle text-green-500',\n error: 'fa-times-circle text-red-500',\n warning: 'fa-exclamation-triangle text-amber-500',\n info: 'fa-info-circle text-blue-500',\n };\n return `fas ${icons[this.type]}`;\n }\n\n get animationClass(): string {\n return this.isClosing\n ? 'animate-slide-out-right'\n : 'animate-slide-in-right';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['isOpen']?.currentValue === true) {\n this.isClosing = false;\n this.startTimer();\n }\n }\n\n private startTimer() {\n if (this.timer) clearTimeout(this.timer);\n this.timer = setTimeout(() => this.closePopup(), this.duration);\n }\n\n closePopup() {\n if (this.isClosing) return;\n this.isClosing = true;\n setTimeout(() => {\n this.isOpen = false;\n this.isClosing = false;\n this.closed.emit();\n }, 400);\n }\n}\n","<div *ngIf=\"isOpen\" class=\"fixed top-6 z-[10000] w-full max-w-[320px]\">\n <div\n [class]=\"\n 'bg-white border border-gray-100 rounded-2xl shadow-2xl flex p-4 overflow-hidden relative ' +\n animationClass\n \"\n >\n <div [class]=\"'absolute left-0 top-0 bottom-0 w-1.5 ' + barColor\"></div>\n\n <div class=\"flex-shrink-0 mr-3\">\n <i [class]=\"iconClass + ' text-xl'\"></i>\n </div>\n\n <div class=\"flex-grow pr-4 text-left\">\n <h4 class=\"text-sm font-bold text-gray-900 leading-tight\">{{ title }}</h4>\n <p class=\"text-[11px] text-gray-500 mt-1 leading-snug\">{{ message }}</p>\n </div>\n\n <button\n (click)=\"closePopup()\"\n class=\"flex-shrink-0 text-gray-300 hover:text-gray-500 transition-colors\"\n >\n <i class=\"fas fa-times text-sm\"></i>\n </button>\n </div>\n</div>\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 { 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 ],\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 ],\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. 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';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0;\n @Input() hideHeader: boolean = false;\n @Input() hideDescription: boolean = false;\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: 'var(--status-success-bg)', color: 'var(--status-success)' };\n case 'concluido':\n return { backgroundColor: 'var(--status-teal-bg)', color: 'var(--status-teal)' };\n case 'cancelado':\n case 'expirado':\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\n case 'publicado':\n return { backgroundColor: 'var(--status-info-bg)', color: 'var(--status-info)' };\n case 'recusado':\n return { backgroundColor: 'var(--status-danger-bg)', color: 'var(--status-danger)' };\n case 'em negociacao':\n case 'negociacao':\n return { backgroundColor: 'var(--status-warning-bg)', color: 'var(--status-warning)' };\n case 'pendente':\n return { backgroundColor: 'var(--status-pending-bg)', color: 'var(--status-pending)' };\n default:\n return { backgroundColor: 'var(--status-neutral-bg)', color: 'var(--status-neutral)' };\n }\n }\n}\n","<div\n class=\"service-card group rounded-2xl border border-slate-100 bg-white shadow-sm hover:shadow-md transition-all duration-300 relative mb-2 overflow-hidden\"\n>\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"flex items-center gap-3 p-3.5 border-b border-slate-50 bg-slate-50/30\"\n >\n <div class=\"icon-style flex-shrink-0 flex items-center justify-center\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n\n <div class=\"flex flex-col flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2\">\n <div\n class=\"truncate font-semibold text-slate-800 text-[15px] leading-tight\"\n >\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"flex-shrink-0 flex items-center gap-2\">\n <!-- <ng-content select=\"[share-btn]\"></ng-content> -->\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"truncate text-[11px] font-medium text-slate-400 mt-0.5 tracking-wider\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <div *ngIf=\"cardTemplateIndicator === 1\" class=\"mb-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n <div\n class=\"text-xs text-gray-50 font-semibold px-2.5 py-1 rounded-full bg-gray-400/10 text-gray-500 flex items-center justify-center\"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-1.5 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div\n class=\"text-xs font-semibold text-slate-600 mb-3\"\n *ngIf=\"statusPedido === 'finalizado'\"\n >\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n\n <div class=\"text-slate-700 text-sm\">\n <ng-content select=\"[info-row]\"></ng-content>\n </div>\n\n <div class=\"mt-7 font-bold text-emerald-600 text-base\">\n <ng-content select=\"[price]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"!hideDescription\"\n class=\"mt-3 p-3 bg-slate-50 border border-slate-100 rounded-xl\"\n >\n <div class=\"text-slate-500 text-xs leading-relaxed italic\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 py-3 bg-slate-50/50 border-t border-slate-100\">\n <div class=\"w-full\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { filter, map, mergeMap } from 'rxjs';\n\n@Component({\n selector: 'lib-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.css'],\n})\nexport class NavComponent implements OnInit {\n changeNavColor: boolean = false;\n\n openClose: boolean = false;\n message: string = '';\n\n lastScrollPosition = 0;\n isHeaderVisible = true;\n headerHeight = 0;\n isMobile = false;\n\n hasOffer: boolean = false;\n allowTransparency = false;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private el: ElementRef\n ) {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n map(() => this.activatedRoute),\n map((route) => {\n while (route.firstChild) route = route.firstChild;\n return route;\n }),\n mergeMap((route) => route.data)\n )\n .subscribe((data) => {\n this.allowTransparency = !!data['transparentNav'];\n\n this.lastScrollPosition = 0;\n\n this.isHeaderVisible = true; // força aparecer no load\n this.changeNavColor = !this.allowTransparency;\n });\n }\n\n ngAfterViewInit() {\n this.checkMobile();\n\n // Obtém a altura do header-menu após a view ser inicializada\n const headerMenu = this.el.nativeElement.querySelector('[header-menu]');\n if (headerMenu) {\n this.headerHeight = headerMenu.offsetHeight;\n }\n }\n\n ngOnInit(): void {\n this.hasOffer = this.router.url.includes('offer');\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n }\n\n private checkMobile() {\n this.isMobile = window.innerWidth < 768; // 768px é o breakpoint padrão do Tailwind para md\n if (!this.isMobile) {\n this.isHeaderVisible = true; // Garante que fique visível em desktop\n }\n }\n public menu() {\n this.openClose = !this.openClose;\n }\n\n receiveMessage(event: string) {\n this.message = event;\n }\n\n @HostListener('window:scroll', [])\n onWindowScroll() {\n const scroll = window.pageYOffset || document.documentElement.scrollTop;\n const isScrollingDown = scroll > this.lastScrollPosition;\n\n // --- REGRA DE VISIBILIDADE ---\n if (this.allowTransparency) {\n // Comportamento especial para Showcase (sua regra atual)\n if (scroll <= 10) {\n // No topo: fica invisível (se você quer que suma ao chegar no topo,\n // isHeaderVisible deve ser false ou a cor deve ser transparente)\n this.isHeaderVisible = !isScrollingDown;\n } else if (isScrollingDown && scroll > 50) {\n // Scroll Down: esconde\n this.isHeaderVisible = false;\n } else {\n // Scroll Up: mostra\n this.isHeaderVisible = true;\n }\n } else {\n // REGRA PARA DEMAIS COMPONENTES: Sempre visível\n this.isHeaderVisible = true;\n }\n\n // --- REGRA DE COR (Mantida) ---\n if (!this.allowTransparency) {\n this.changeNavColor = true;\n } else {\n this.changeNavColor = scroll > 20;\n }\n\n this.lastScrollPosition = scroll;\n }\n}\n","<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\ninterface EmptyStateConfig {\n title: string;\n description: string;\n icon: string;\n iconColor: string;\n bgColor: string;\n primaryActionText?: string;\n secondaryActionText?: string;\n}\n\n@Component({\n selector: 'lib-fallback-message',\n templateUrl: './fallback-message.component.html',\n styleUrls: ['./fallback-message.component.css'],\n})\nexport class FallbackMessageComponent {\n @Input() card: any[] = [];\n @Input() statusPedido: string = '';\n @Input() customTitle?: string;\n @Input() customDescription?: string;\n @Input() primaryActionText?: string;\n @Input() secondaryActionText?: string;\n @Input() hideBtn?: boolean = false;\n\n @Output() primaryAction = new EventEmitter<void>();\n @Output() secondaryAction = new EventEmitter<void>();\n\n get emptyStateConfig(): EmptyStateConfig {\n // Se não há propostas\n // if (this.card.length === 0) {\n // return {\n // title: 'Nenhuma Proposta',\n // description:\n // 'Você ainda não possui negociações ou propostas recebidas.',\n // icon: '📄',\n // iconColor: 'text-gray-500',\n // bgColor: 'bg-gray-100',\n // primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n // secondaryActionText: this.secondaryActionText,\n // };\n // }\n\n // Se há status de pedido\n if (this.statusPedido) {\n switch (this.statusPedido.toLowerCase()) {\n case 'finalizado':\n return {\n title: this.customTitle || 'Serviço Concluído! 🎉',\n description:\n this.customDescription ||\n 'O serviço foi finalizado com sucesso. Agradecemos pela confiança!',\n icon: '✅',\n iconColor: 'text-green-500',\n bgColor: 'bg-green-100',\n primaryActionText: this.primaryActionText || 'Ver Detalhes',\n secondaryActionText: this.secondaryActionText || 'Avaliar Serviço',\n };\n\n // case 'cancelado':\n // return {\n // title: this.customTitle || 'Serviço Cancelado',\n // description:\n // this.customDescription ||\n // 'O serviço foi cancelado pelo prestador. Você pode buscar outros profissionais disponíveis.',\n // icon: '❌',\n // iconColor: 'text-red-500',\n // bgColor: 'bg-red-100',\n // primaryActionText: this.primaryActionText || 'Buscar Profissionais',\n // secondaryActionText: this.secondaryActionText || 'Voltar ao Início',\n // };\n\n case 'sem servicos':\n return {\n title: this.customTitle || 'Sem serviço',\n description:\n this.customDescription || 'Não há serviços disponíveis aqui.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Procurar serviços',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n case 'indisponivel':\n return {\n title: this.customTitle || 'Proposta Indisponível',\n description:\n this.customDescription ||\n 'Esta proposta não está mais disponível para visualização.',\n icon: '📄',\n // iconColor: 'text-yellow-500',\n // bgColor: 'bg-yellow-100',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Ver Outras Propostas',\n // secondaryActionText: this.secondaryActionText || 'Meus Anúncios',\n };\n\n default:\n return this.getDefaultConfig();\n }\n }\n\n return this.getDefaultConfig();\n }\n\n private getDefaultConfig(): EmptyStateConfig {\n return {\n title: this.customTitle || 'Nenhuma Proposta',\n description:\n this.customDescription || 'Você ainda não possui negociações.',\n icon: '📄',\n iconColor: 'text-gray-500',\n bgColor: 'bg-gray-100',\n primaryActionText: this.primaryActionText || 'Anúnciar Grátis',\n secondaryActionText: this.secondaryActionText,\n };\n }\n\n // Método para determinar se deve mostrar o componente\n shouldShowEmptyState(): boolean {\n return (\n this.card.length === 0 ||\n ['finalizado', 'cancelado', 'indisponível', 'indisponivel'].includes(\n this.statusPedido?.toLowerCase()\n )\n );\n }\n\n onPrimaryAction() {\n this.primaryAction.emit();\n }\n\n onSecondaryAction() {\n this.secondaryAction.emit();\n }\n}\n","<div *ngIf=\"shouldShowEmptyState()\" class=\"empty-state-container\">\n <div\n class=\"empty-state-card max-w-md mx-auto bg-white shadow-xl rounded-3xl p-8 border border-gray-100\"\n >\n <!-- Ícone dinâmico -->\n <div class=\"empty-state-icon mb-6 flex justify-center\">\n <div class=\"relative w-32 h-32 flex items-center justify-center\">\n <div [class]=\"emptyStateConfig.iconColor\" class=\"z-10\">\n <div class=\"text-xl leading-none\" style=\"font-size: 4rem\">\n {{ emptyStateConfig.icon }}\n </div>\n </div>\n\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div\n [class]=\"emptyStateConfig.bgColor\"\n class=\"w-full h-full rounded-full opacity-50 flex-shrink-0\"\n ></div>\n </div>\n </div>\n </div>\n\n <!-- Conteúdo da mensagem -->\n <div class=\"empty-state-content text-center space-y-4\">\n <!-- Título -->\n <h3 class=\"text-2xl font-bold text-gray-900 mb-2\">\n {{ emptyStateConfig.title }}\n </h3>\n\n <!-- Descrição -->\n <p class=\"text-gray-600 text-lg leading-relaxed px-4\">\n {{ emptyStateConfig.description }}\n </p>\n\n <!-- Informações adicionais baseadas no status -->\n <div *ngIf=\"statusPedido === 'finalizado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-green-50 text-green-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-check-circle\"></i>\n <span class=\"font-medium\">Serviço avaliado e finalizado</span>\n </div>\n </div>\n\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-4\">\n <div\n class=\"inline-flex items-center gap-2 bg-red-50 text-red-700 px-4 py-2 rounded-full\"\n >\n <i class=\"fas fa-exclamation-circle\"></i>\n <span class=\"font-medium\">Cancelado pelo prestador do serviço</span>\n </div>\n </div>\n </div>\n\n <!-- Ações -->\n <div class=\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\">\n <!-- Ação Primária -->\n <button\n *ngIf=\"hideBtn\"\n (click)=\"onPrimaryAction()\"\n [ngClass]=\"{\n 'bg-green-600 hover:bg-green-700': statusPedido === 'finalizado',\n 'bg-red-600 hover:bg-red-700': statusPedido === 'cancelado',\n 'bg-blue-600 ':\n statusPedido === 'indisponível' || statusPedido === 'indisponivel',\n 'bg-primary-600 hover:bg-primary-700': card.length === 0\n }\"\n class=\"col-12 btn btn-primary\"\n >\n {{ emptyStateConfig.primaryActionText }}\n </button>\n\n <!-- Ação Secundária -->\n <button\n *ngIf=\"emptyStateConfig.secondaryActionText\"\n (click)=\"onSecondaryAction()\"\n class=\"col-12 btn btn-outline-primary\"\n >\n {{ emptyStateConfig.secondaryActionText }}\n </button>\n </div>\n\n <!-- Link de ajuda (opcional) -->\n <div *ngIf=\"statusPedido === 'cancelado'\" class=\"mt-6 text-center\">\n <a\n href=\"#\"\n class=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n <i class=\"fas fa-question-circle mr-2\"></i>\n Precisa de ajuda? Entre em contato com o suporte\n </a>\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Location } from '@angular/common';\n\ntype ModalType = 'success' | 'error' | 'warning';\n\n@Component({\n selector: 'lib-custom-modal',\n standalone: false,\n templateUrl: './custom-modal.component.html',\n styleUrls: ['./custom-modal.component.css'],\n})\nexport class CustomModalComponent implements OnInit {\n @Input() modalId = 'customModal';\n @Input() title = 'Aviso';\n @Input() message = '';\n @Input() closeButtonText = 'Fechar';\n @Input() actionButtonText = '';\n @Input() paymentMethod: 'pix' | 'credit' | null = null;\n @Input() errorDetails: any = null;\n\n @Output() modalClosed = new EventEmitter<void>();\n @Output() modalAction = new EventEmitter<void>();\n\n @Input() showModal = false;\n @Input() messageTitle: string = 'Pagamento Aprovado!';\n @Input() showBtn = true;\n @Input() priceNegotiated = 0;\n @Input() messageBody: string = 'Seu pagamento foi processado com sucesso.';\n @Input() isLoadingBtn: boolean | undefined;\n @Input() disabledBtn: boolean = false;\n\n // 🔒 NOVA PROPRIEDADE: Trava o fechamento do modal\n @Input() isLocked: boolean = false;\n\n modalIcon: string = 'fa-check';\n modalIconColor: string = 'text-green-600';\n modalBgColor: string = 'bg-green-100';\n isClosing = false;\n\n constructor(private location: Location) {}\n\n ngOnInit(): void {}\n\n openModal(): void {\n this.showModal = true;\n this.isClosing = false;\n if (!window.location.hash.includes('modalOpen')) {\n this.location.go(this.location.path() + '#modalOpen');\n }\n }\n\n open(\n type: ModalType,\n message: string = '',\n paymentMethod?: 'pix' | 'credit',\n ): void {\n this.configureModal(type, message);\n if (paymentMethod) this.paymentMethod = paymentMethod;\n this.openModal();\n }\n\n configureModal(type: ModalType, message: string = ''): void {\n switch (type) {\n case 'success':\n this.setSuccessStyles(message);\n break;\n case 'error':\n this.setErrorStyles(message);\n break;\n case 'warning':\n this.setWarningStyles(message);\n break;\n }\n }\n\n private setSuccessStyles(message: string): void {\n this.modalIcon = 'fa-check-circle';\n this.modalIconColor = 'modal-icon-success';\n this.modalBgColor = 'modal-bg-success';\n this.messageTitle = 'Sucesso!';\n this.messageBody = message || 'Operação realizada com sucesso.';\n }\n\n private setErrorStyles(message: string): void {\n this.modalIcon = 'fa-times-circle';\n this.modalIconColor = 'modal-icon-error';\n this.modalBgColor = 'modal-bg-error';\n this.messageTitle = 'Ops! Algo deu errado';\n this.messageBody = message || 'Não conseguimos processar sua solicitação.';\n }\n\n private setWarningStyles(message: string): void {\n this.modalIcon = 'fa-info-circle';\n\n // ✅ Usando classes nativas do Tailwind\n this.modalIconColor = 'text-blue-600'; // Azul vibrante, mais amigável que o 800\n this.modalBgColor = 'bg-blue-50';\n\n this.messageTitle = 'Atenção';\n this.messageBody = message || 'Verifique os dados antes de continuar.';\n }\n\n actionModal(): void {\n if (this.isLoadingBtn !== undefined) {\n this.isLoadingBtn = true;\n this.modalAction.emit();\n } else {\n this.modalAction.emit();\n this.isLoadingBtn = false;\n this.closeModal();\n }\n }\n\n closeModal(): void {\n if (!this.showModal || this.isClosing) return;\n\n this.isClosing = true;\n setTimeout(() => {\n this.showModal = false;\n this.isClosing = false;\n this.modalClosed.emit();\n }, 300);\n }\n // ✅ Intercepta o botão voltar do celular/browser\n @HostListener('window:popstate')\n onPopState(): void {\n if (this.showModal) {\n if (this.isLocked) {\n // 🔒 Se estiver travado, \"anulamos\" o voltar adicionando o hash de novo\n this.location.go(this.location.path() + '#modalOpen');\n } else {\n this.showModal = false;\n this.modalClosed.emit();\n }\n }\n }\n}\n","<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"!isLocked && closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 flex justify-center\"\n [ngClass]=\"isLocked ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n (click)=\"!isLocked && closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div [class]=\"modalBgColor\" class=\"w-20 h-20 rounded-full opacity-40\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i [class]=\"modalIcon + ' ' + modalIconColor\" class=\"fas text-3xl\"></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div *ngIf=\"errorDetails\" class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\">\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">Log do sistema:</p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{ errorDetails | json }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"disabledBtn || (priceNegotiated <= 0 && actionButtonText === 'Negociar')\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal()\"\n class=\"w-full py-2 text-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nexport type PopupType = 'success' | 'error' | 'warning' | 'info';\n\n@Component({\n selector: 'lib-popup',\n standalone: false,\n templateUrl: './popup.component.html',\n styleUrls: ['./popup.component.css'],\n})\nexport class PopupComponent implements OnChanges {\n @Input() isOpen = false;\n @Input() type: PopupType = 'info';\n @Input() title = '';\n @Input() message = '';\n @Input() duration = 4000;\n\n @Output() closed = new EventEmitter<void>();\n\n isClosing = false;\n private timer: any;\n\n // Getters para as classes - Evita erro de parser no HTML\n get barColor(): string {\n const colors = {\n success: 'bg-green-500',\n error: 'bg-red-500',\n warning: 'bg-amber-500',\n info: 'bg-blue-500',\n };\n return colors[this.type] || 'bg-blue-500';\n }\n\n get iconClass(): string {\n const icons = {\n success: 'fa-check-circle text-green-500',\n error: 'fa-times-circle text-red-500',\n warning: 'fa-exclamation-triangle text-amber-500',\n info: 'fa-info-circle text-blue-500',\n };\n return `fas ${icons[this.type]}`;\n }\n\n get animationClass(): string {\n return this.isClosing\n ? 'animate-slide-out-right'\n : 'animate-slide-in-right';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['isOpen']?.currentValue === true) {\n this.isClosing = false;\n this.startTimer();\n }\n }\n\n private startTimer() {\n if (this.timer) clearTimeout(this.timer);\n this.timer = setTimeout(() => this.closePopup(), this.duration);\n }\n\n closePopup() {\n if (this.isClosing) return;\n this.isClosing = true;\n setTimeout(() => {\n this.isOpen = false;\n this.isClosing = false;\n this.closed.emit();\n }, 400);\n }\n}\n","<div *ngIf=\"isOpen\" class=\"fixed top-6 z-[10000] w-full max-w-[320px]\">\n <div\n [class]=\"\n 'bg-white border border-gray-100 rounded-2xl shadow-2xl flex p-4 overflow-hidden relative ' +\n animationClass\n \"\n >\n <div [class]=\"'absolute left-0 top-0 bottom-0 w-1.5 ' + barColor\"></div>\n\n <div class=\"flex-shrink-0 mr-3\">\n <i [class]=\"iconClass + ' text-xl'\"></i>\n </div>\n\n <div class=\"flex-grow pr-4 text-left\">\n <h4 class=\"text-sm font-bold text-gray-900 leading-tight\">{{ title }}</h4>\n <p class=\"text-[11px] text-gray-500 mt-1 leading-snug\">{{ message }}</p>\n </div>\n\n <button\n (click)=\"closePopup()\"\n class=\"flex-shrink-0 text-gray-300 hover:text-gray-500 transition-colors\"\n >\n <i class=\"fas fa-times text-sm\"></i>\n </button>\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'formatDateTime',\n})\nexport class FormatDateTimePipe implements PipeTransform {\n transform(value: string | null | undefined, showAgora: boolean = true): string {\n if (!value) return '';\n\n const [datePart, timePart] = value.split(' ');\n const [year, month, day] = datePart.split('-');\n\n if (!year || !month || !day || !timePart) return value;\n\n const inputDate = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\n const today = new Date();\n const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());\n const inputDateOnly = new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());\n\n const isToday = inputDateOnly.getTime() === todayDate.getTime();\n\n if (showAgora && isToday) {\n return `Hoje às ${timePart}`;\n }\n\n return `${day}/${month}/${year} - ${timePart}`;\n }\n}\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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"}
@@ -0,0 +1,7 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class FormatDateTimePipe implements PipeTransform {
4
+ transform(value: string | null | undefined, showAgora?: boolean): string;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormatDateTimePipe, never>;
6
+ static ɵpipe: i0.ɵɵPipeDeclaration<FormatDateTimePipe, "formatDateTime", false>;
7
+ }
@@ -5,9 +5,10 @@ import * as i3 from "./components/nav/nav.component";
5
5
  import * as i4 from "./components/fallback-message/fallback-message.component";
6
6
  import * as i5 from "./components/custom-modal/custom-modal.component";
7
7
  import * as i6 from "./components/popup/popup.component";
8
- import * as i7 from "@angular/common";
8
+ import * as i7 from "./components/format-date-time/format-date-time.pipe";
9
+ import * as i8 from "@angular/common";
9
10
  export declare class TuduComponentsModule {
10
11
  static ɵfac: i0.ɵɵFactoryDeclaration<TuduComponentsModule, never>;
11
- static ɵmod: i0.ɵɵNgModuleDeclaration<TuduComponentsModule, [typeof i1.TuduComponentsComponent, typeof i2.CardLayoutComponent, typeof i3.NavComponent, typeof i4.FallbackMessageComponent, typeof i5.CustomModalComponent, typeof i6.PopupComponent], [typeof i7.CommonModule], [typeof i1.TuduComponentsComponent, typeof i2.CardLayoutComponent, typeof i3.NavComponent, typeof i4.FallbackMessageComponent, typeof i5.CustomModalComponent, typeof i6.PopupComponent]>;
12
+ static ɵmod: i0.ɵɵNgModuleDeclaration<TuduComponentsModule, [typeof i1.TuduComponentsComponent, typeof i2.CardLayoutComponent, typeof i3.NavComponent, typeof i4.FallbackMessageComponent, typeof i5.CustomModalComponent, typeof i6.PopupComponent, typeof i7.FormatDateTimePipe], [typeof i8.CommonModule], [typeof i1.TuduComponentsComponent, typeof i2.CardLayoutComponent, typeof i3.NavComponent, typeof i4.FallbackMessageComponent, typeof i5.CustomModalComponent, typeof i6.PopupComponent, typeof i7.FormatDateTimePipe]>;
12
13
  static ɵinj: i0.ɵɵInjectorDeclaration<TuduComponentsModule>;
13
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tudu-components",
3
- "version": "0.2.20",
3
+ "version": "0.2.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.0",
6
6
  "@angular/core": "^17.3.0"
package/public-api.d.ts CHANGED
@@ -5,4 +5,5 @@ export * from './lib/components/nav/nav.component';
5
5
  export * from './lib/components/fallback-message/fallback-message.component';
6
6
  export * from './lib/components/custom-modal/custom-modal.component';
7
7
  export * from './lib/components/popup/popup.component';
8
+ export * from './lib/components/format-date-time/format-date-time.pipe';
8
9
  export * from './lib/tudu-components.module';