tudu-components 0.2.9 → 0.2.10

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.
@@ -1,10 +1,13 @@
1
- import { Component, HostListener, Input, } from '@angular/core';
1
+ import { Component, HostListener, } from '@angular/core';
2
+ import { NavigationEnd } from '@angular/router';
3
+ import { filter, map, mergeMap } from 'rxjs';
2
4
  import * as i0 from "@angular/core";
3
5
  import * as i1 from "@angular/router";
4
6
  import * as i2 from "@angular/common";
5
7
  export class NavComponent {
6
- constructor(router, el) {
8
+ constructor(router, activatedRoute, el) {
7
9
  this.router = router;
10
+ this.activatedRoute = activatedRoute;
8
11
  this.el = el;
9
12
  this.changeNavColor = false;
10
13
  this.openClose = false;
@@ -14,6 +17,19 @@ export class NavComponent {
14
17
  this.headerHeight = 0;
15
18
  this.isMobile = false;
16
19
  this.hasOffer = false;
20
+ this.allowTransparency = false;
21
+ this.router.events
22
+ .pipe(filter((event) => event instanceof NavigationEnd), map(() => this.activatedRoute), map((route) => {
23
+ while (route.firstChild)
24
+ route = route.firstChild;
25
+ return route;
26
+ }), mergeMap((route) => route.data))
27
+ .subscribe((data) => {
28
+ this.allowTransparency = !!data['transparentNav'];
29
+ this.lastScrollPosition = 0;
30
+ this.isHeaderVisible = true; // força aparecer no load
31
+ this.changeNavColor = !this.allowTransparency;
32
+ });
17
33
  }
18
34
  ngAfterViewInit() {
19
35
  this.checkMobile();
@@ -42,33 +58,45 @@ export class NavComponent {
42
58
  this.message = event;
43
59
  }
44
60
  onWindowScroll() {
45
- if (!this.isMobile)
46
- return;
47
- const currentScrollPosition = window.pageYOffset || document.documentElement.scrollTop;
48
- // Scroll DOWN - esconde o header
49
- if (currentScrollPosition > this.lastScrollPosition &&
50
- currentScrollPosition > 50) {
61
+ const scroll = window.pageYOffset || document.documentElement.scrollTop;
62
+ const isScrollingDown = scroll > this.lastScrollPosition;
63
+ /* =========================
64
+ * VISIBILIDADE
65
+ * ========================= */
66
+ if (scroll <= 10) {
67
+ // TOPO
68
+ this.isHeaderVisible = !isScrollingDown;
69
+ }
70
+ else if (isScrollingDown && scroll > 50) {
71
+ // SCROLL DOWN
51
72
  this.isHeaderVisible = false;
52
73
  }
53
- // Scroll UP - mostra o header
54
- else if (currentScrollPosition < this.lastScrollPosition) {
74
+ else {
75
+ // SCROLL UP
55
76
  this.isHeaderVisible = true;
56
77
  }
57
- this.lastScrollPosition = currentScrollPosition;
78
+ /* =========================
79
+ * COR
80
+ * ========================= */
81
+ if (!this.allowTransparency) {
82
+ this.changeNavColor = true;
83
+ }
84
+ else {
85
+ this.changeNavColor = scroll > 20;
86
+ }
87
+ this.lastScrollPosition = scroll;
58
88
  }
59
89
  }
60
- NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, deps: [{ token: i1.Router }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
61
- NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavComponent, selector: "lib-nav", inputs: { changeNavColor: "changeNavColor" }, host: { listeners: { "window:resize": "onResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<!-- Navbar Container -->\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-transform duration-300 ease-out \"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.backgroundColor]=\"\n changeNavColor ? 'var(--primary)' : 'var(--primary)'\n \"\n>\n <!-- Main Navbar -->\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 hr-nav\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
90
+ NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
91
+ NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavComponent, selector: "lib-nav", host: { listeners: { "window:resize": "onResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
62
92
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, decorators: [{
63
93
  type: Component,
64
- args: [{ selector: 'lib-nav', template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<!-- Navbar Container -->\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-transform duration-300 ease-out \"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.backgroundColor]=\"\n changeNavColor ? 'var(--primary)' : 'var(--primary)'\n \"\n>\n <!-- Main Navbar -->\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 hr-nav\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"] }]
65
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i0.ElementRef }]; }, propDecorators: { changeNavColor: [{
66
- type: Input
67
- }], onResize: [{
94
+ args: [{ selector: 'lib-nav', template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"] }]
95
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i0.ElementRef }]; }, propDecorators: { onResize: [{
68
96
  type: HostListener,
69
97
  args: ['window:resize']
70
98
  }], onWindowScroll: [{
71
99
  type: HostListener,
72
100
  args: ['window:scroll', []]
73
101
  }] } });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbmF2L25hdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL25hdi9uYXYuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDOzs7O0FBUXZCLE1BQU0sT0FBTyxZQUFZO0lBYXZCLFlBQW9CLE1BQWMsRUFBVSxFQUFjO1FBQXRDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBWmpELG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBRXpDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUVyQix1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDdkIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixhQUFRLEdBQVksS0FBSyxDQUFDO0lBRW1DLENBQUM7SUFFOUQsZUFBZTtRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQiw2REFBNkQ7UUFDN0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBR0QsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsa0RBQWtEO1FBQzNGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUMsdUNBQXVDO1NBQ3JFO0lBQ0gsQ0FBQztJQUNNLElBQUk7UUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUdELGNBQWM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRTNCLE1BQU0scUJBQXFCLEdBQ3pCLE1BQU0sQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7UUFFM0QsaUNBQWlDO1FBQ2pDLElBQ0UscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjtZQUMvQyxxQkFBcUIsR0FBRyxFQUFFLEVBQzFCO1lBQ0EsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7U0FDOUI7UUFDRCw4QkFBOEI7YUFDekIsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDeEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7U0FDN0I7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcscUJBQXFCLENBQUM7SUFDbEQsQ0FBQzs7eUdBcEVVLFlBQVk7NkZBQVosWUFBWSwwTENkekIsMHRDQXdDQTsyRkQxQmEsWUFBWTtrQkFMeEIsU0FBUzsrQkFDRSxTQUFTO3NIQUtWLGNBQWM7c0JBQXRCLEtBQUs7Z0JBNkJOLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlO2dCQW9CN0IsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW5hdicsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXYuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uYXYuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBOYXZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjaGFuZ2VOYXZDb2xvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIG9wZW5DbG9zZTogYm9vbGVhbiA9IGZhbHNlO1xuICBtZXNzYWdlOiBzdHJpbmcgPSAnJztcblxuICBsYXN0U2Nyb2xsUG9zaXRpb24gPSAwO1xuICBpc0hlYWRlclZpc2libGUgPSB0cnVlO1xuICBoZWFkZXJIZWlnaHQgPSAwO1xuICBpc01vYmlsZSA9IGZhbHNlO1xuXG4gIGhhc09mZmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBlbDogRWxlbWVudFJlZikge31cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jaGVja01vYmlsZSgpO1xuXG4gICAgLy8gT2J0w6ltIGEgYWx0dXJhIGRvIGhlYWRlci1tZW51IGFww7NzIGEgdmlldyBzZXIgaW5pY2lhbGl6YWRhXG4gICAgY29uc3QgaGVhZGVyTWVudSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbaGVhZGVyLW1lbnVdJyk7XG4gICAgaWYgKGhlYWRlck1lbnUpIHtcbiAgICAgIHRoaXMuaGVhZGVySGVpZ2h0ID0gaGVhZGVyTWVudS5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYXNPZmZlciA9IHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnb2ZmZXInKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBvblJlc2l6ZSgpIHtcbiAgICB0aGlzLmNoZWNrTW9iaWxlKCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTW9iaWxlKCkge1xuICAgIHRoaXMuaXNNb2JpbGUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDc2ODsgLy8gNzY4cHggw6kgbyBicmVha3BvaW50IHBhZHLDo28gZG8gVGFpbHdpbmQgcGFyYSBtZFxuICAgIGlmICghdGhpcy5pc01vYmlsZSkge1xuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0cnVlOyAvLyBHYXJhbnRlIHF1ZSBmaXF1ZSB2aXPDrXZlbCBlbSBkZXNrdG9wXG4gICAgfVxuICB9XG4gIHB1YmxpYyBtZW51KCkge1xuICAgIHRoaXMub3BlbkNsb3NlID0gIXRoaXMub3BlbkNsb3NlO1xuICB9XG5cbiAgcmVjZWl2ZU1lc3NhZ2UoZXZlbnQ6IHN0cmluZykge1xuICAgIHRoaXMubWVzc2FnZSA9IGV2ZW50O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFtdKVxuICBvbldpbmRvd1Njcm9sbCgpIHtcbiAgICBpZiAoIXRoaXMuaXNNb2JpbGUpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxQb3NpdGlvbiA9XG4gICAgICB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIC8vIFNjcm9sbCBET1dOIC0gZXNjb25kZSBvIGhlYWRlclxuICAgIGlmIChcbiAgICAgIGN1cnJlbnRTY3JvbGxQb3NpdGlvbiA+IHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uICYmXG4gICAgICBjdXJyZW50U2Nyb2xsUG9zaXRpb24gPiA1MFxuICAgICkge1xuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gU2Nyb2xsIFVQIC0gbW9zdHJhIG8gaGVhZGVyXG4gICAgZWxzZSBpZiAoY3VycmVudFNjcm9sbFBvc2l0aW9uIDwgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiA9IGN1cnJlbnRTY3JvbGxQb3NpdGlvbjtcbiAgfVxufVxuIiwiPCEtLSBPdmVybGF5IC0tPlxuPGRpdlxuICAqbmdJZj1cIm9wZW5DbG9zZVwiXG4gIChjbGljayk9XCJvcGVuQ2xvc2UgPSBmYWxzZVwiXG4gIGNsYXNzPVwiZml4ZWQgaW5zZXQtMCBiZy1ibGFjayBiZy1vcGFjaXR5LTQwIHotNDAgbWQ6aGlkZGVuXCJcbj48L2Rpdj5cblxuPCEtLSBOYXZiYXIgQ29udGFpbmVyIC0tPlxuPGRpdlxuICBjbGFzcz1cImZpeGVkIHRvcC0wIGxlZnQtMCByaWdodC0wIHotNTAgc2hhZG93LW5vbmUgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMzAwIGVhc2Utb3V0IFwiXG4gIFtjbGFzcy4tdHJhbnNsYXRlLXktZnVsbF09XCIhaXNIZWFkZXJWaXNpYmxlXCJcbiAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJcbiAgICBjaGFuZ2VOYXZDb2xvciA/ICd2YXIoLS1wcmltYXJ5KScgOiAndmFyKC0tcHJpbWFyeSknXG4gIFwiXG4+XG4gIDwhLS0gTWFpbiBOYXZiYXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtYXV0byBweC0yIGgtMTYgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICA8IS0tIExlZnQgQ29udGVudCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgZmxleCBqdXN0aWZ5LXN0YXJ0XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltsZWZ0LWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ2VudGVyIENvbnRlbnQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIGZsZXgganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NlbnRyYWwtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBSaWdodCBDb250ZW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcmlnaHQtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBIZWFkZXIgTWVudSAoU3VibWVudSkgLS0+XG4gIDxkaXYgaGVhZGVyLW1lbnUgY2xhc3M9XCJ3LWZ1bGwgaHItbmF2XCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hlYWRlci1tZW51XVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbmF2L25hdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL25hdi9uYXYuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEdBR2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFPN0MsTUFBTSxPQUFPLFlBQVk7SUFjdkIsWUFDVSxNQUFjLEVBQ2QsY0FBOEIsRUFDOUIsRUFBYztRQUZkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQWhCeEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFaEMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBRXJCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN2QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBT3hCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNmLElBQUksQ0FDSCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMs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QVksNElDZnpCLDJvQ0FvQ0E7MkZEckJhLFlBQVk7a0JBTHhCLFNBQVM7K0JBQ0UsU0FBUzttSkEwRG5CLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlO2dCQW1CN0IsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW5hdicsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXYuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uYXYuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBOYXZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjaGFuZ2VOYXZDb2xvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIG9wZW5DbG9zZTogYm9vbGVhbiA9IGZhbHNlO1xuICBtZXNzYWdlOiBzdHJpbmcgPSAnJztcblxuICBsYXN0U2Nyb2xsUG9zaXRpb24gPSAwO1xuICBpc0hlYWRlclZpc2libGUgPSB0cnVlO1xuICBoZWFkZXJIZWlnaHQgPSAwO1xuICBpc01vYmlsZSA9IGZhbHNlO1xuXG4gIGhhc09mZmVyOiBib29sZWFuID0gZmFsc2U7XG4gIGFsbG93VHJhbnNwYXJlbmN5ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmFjdGl2YXRlZFJvdXRlKSxcbiAgICAgICAgbWFwKChyb3V0ZSkgPT4ge1xuICAgICAgICAgIHdoaWxlIChyb3V0ZS5maXJzdENoaWxkKSByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgcmV0dXJuIHJvdXRlO1xuICAgICAgICB9KSxcbiAgICAgICAgbWVyZ2VNYXAoKHJvdXRlKSA9PiByb3V0ZS5kYXRhKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLmFsbG93VHJhbnNwYXJlbmN5ID0gISFkYXRhWyd0cmFuc3BhcmVudE5hdiddO1xuXG4gICAgICAgIHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uID0gMDtcblxuICAgICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRydWU7IC8vIGZvcsOnYSBhcGFyZWNlciBubyBsb2FkXG4gICAgICAgIHRoaXMuY2hhbmdlTmF2Q29sb3IgPSAhdGhpcy5hbGxvd1RyYW5zcGFyZW5jeTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2hlY2tNb2JpbGUoKTtcblxuICAgIC8vIE9idMOpbSBhIGFsdHVyYSBkbyBoZWFkZXItbWVudSBhcMOzcyBhIHZpZXcgc2VyIGluaWNpYWxpemFkYVxuICAgIGNvbnN0IGhlYWRlck1lbnUgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW2hlYWRlci1tZW51XScpO1xuICAgIGlmIChoZWFkZXJNZW51KSB7XG4gICAgICB0aGlzLmhlYWRlckhlaWdodCA9IGhlYWRlck1lbnUub2Zmc2V0SGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFzT2ZmZXIgPSB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJ29mZmVyJyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgb25SZXNpemUoKSB7XG4gICAgdGhpcy5jaGVja01vYmlsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja01vYmlsZSgpIHtcbiAgICB0aGlzLmlzTW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCA3Njg7IC8vIDc2OHB4IMOpIG8gYnJlYWtwb2ludCBwYWRyw6NvIGRvIFRhaWx3aW5kIHBhcmEgbWRcbiAgICBpZiAoIXRoaXMuaXNNb2JpbGUpIHtcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTsgLy8gR2FyYW50ZSBxdWUgZmlxdWUgdmlzw612ZWwgZW0gZGVza3RvcFxuICAgIH1cbiAgfVxuICBwdWJsaWMgbWVudSgpIHtcbiAgICB0aGlzLm9wZW5DbG9zZSA9ICF0aGlzLm9wZW5DbG9zZTtcbiAgfVxuXG4gIHJlY2VpdmVNZXNzYWdlKGV2ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBldmVudDtcbiAgfVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgW10pXG4gIG9uV2luZG93U2Nyb2xsKCkge1xuICAgIGNvbnN0IHNjcm9sbCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgY29uc3QgaXNTY3JvbGxpbmdEb3duID0gc2Nyb2xsID4gdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb247XG5cbiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICogVklTSUJJTElEQURFXG4gICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4gICAgaWYgKHNjcm9sbCA8PSAxMCkge1xuICAgICAgLy8gVE9QT1xuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSAhaXNTY3JvbGxpbmdEb3duO1xuICAgIH0gZWxzZSBpZiAoaXNTY3JvbGxpbmdEb3duICYmIHNjcm9sbCA+IDUwKSB7XG4gICAgICAvLyBTQ1JPTEwgRE9XTlxuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU0NST0xMIFVQXG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAqIENPUlxuICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbiAgICBpZiAoIXRoaXMuYWxsb3dUcmFuc3BhcmVuY3kpIHtcbiAgICAgIHRoaXMuY2hhbmdlTmF2Q29sb3IgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoYW5nZU5hdkNvbG9yID0gc2Nyb2xsID4gMjA7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGw7XG4gIH1cbn1cbiIsIjwhLS0gT3ZlcmxheSAtLT5cbjxkaXZcbiAgKm5nSWY9XCJvcGVuQ2xvc2VcIlxuICAoY2xpY2spPVwib3BlbkNsb3NlID0gZmFsc2VcIlxuICBjbGFzcz1cImZpeGVkIGluc2V0LTAgYmctYmxhY2sgYmctb3BhY2l0eS00MCB6LTQwIG1kOmhpZGRlblwiXG4+PC9kaXY+XG5cbjxkaXZcbiAgY2xhc3M9XCJmaXhlZCB0b3AtMCBsZWZ0LTAgcmlnaHQtMCB6LTUwIHNoYWRvdy1ub25lIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMCB3LWZ1bGxcIlxuICBbY2xhc3MuLXRyYW5zbGF0ZS15LWZ1bGxdPVwiIWlzSGVhZGVyVmlzaWJsZVwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImNoYW5nZU5hdkNvbG9yID8gJ3ZhcigtLXByaW1hcnkpJyA6ICd0cmFuc3BhcmVudCdcIlxuPlxuICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cIm14LWF1dG8gcHgtMiBoLTE2IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPCEtLSBMZWZ0IENvbnRlbnQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIGZsZXgganVzdGlmeS1zdGFydFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGVmdC1jb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENlbnRlciBDb250ZW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMSBmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjZW50cmFsLWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUmlnaHQgQ29udGVudCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTFcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogZmxleC1lbmRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3JpZ2h0LWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gSGVhZGVyIE1lbnUgKFN1Ym1lbnUpIC0tPlxuICA8ZGl2IGhlYWRlci1tZW51IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hlYWRlci1tZW51XVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -3,6 +3,8 @@ import { Component, Input, HostListener, EventEmitter, Output, NgModule, Injecta
3
3
  import * as i2 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i1 from '@angular/router';
6
+ import { NavigationEnd } from '@angular/router';
7
+ import { filter, map, mergeMap } from 'rxjs';
6
8
 
7
9
  class TuduComponentsComponent {
8
10
  constructor() { }
@@ -99,8 +101,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
99
101
  }] } });
100
102
 
101
103
  class NavComponent {
102
- constructor(router, el) {
104
+ constructor(router, activatedRoute, el) {
103
105
  this.router = router;
106
+ this.activatedRoute = activatedRoute;
104
107
  this.el = el;
105
108
  this.changeNavColor = false;
106
109
  this.openClose = false;
@@ -110,6 +113,19 @@ class NavComponent {
110
113
  this.headerHeight = 0;
111
114
  this.isMobile = false;
112
115
  this.hasOffer = false;
116
+ this.allowTransparency = false;
117
+ this.router.events
118
+ .pipe(filter((event) => event instanceof NavigationEnd), map(() => this.activatedRoute), map((route) => {
119
+ while (route.firstChild)
120
+ route = route.firstChild;
121
+ return route;
122
+ }), mergeMap((route) => route.data))
123
+ .subscribe((data) => {
124
+ this.allowTransparency = !!data['transparentNav'];
125
+ this.lastScrollPosition = 0;
126
+ this.isHeaderVisible = true; // força aparecer no load
127
+ this.changeNavColor = !this.allowTransparency;
128
+ });
113
129
  }
114
130
  ngAfterViewInit() {
115
131
  this.checkMobile();
@@ -138,29 +154,41 @@ class NavComponent {
138
154
  this.message = event;
139
155
  }
140
156
  onWindowScroll() {
141
- if (!this.isMobile)
142
- return;
143
- const currentScrollPosition = window.pageYOffset || document.documentElement.scrollTop;
144
- // Scroll DOWN - esconde o header
145
- if (currentScrollPosition > this.lastScrollPosition &&
146
- currentScrollPosition > 50) {
157
+ const scroll = window.pageYOffset || document.documentElement.scrollTop;
158
+ const isScrollingDown = scroll > this.lastScrollPosition;
159
+ /* =========================
160
+ * VISIBILIDADE
161
+ * ========================= */
162
+ if (scroll <= 10) {
163
+ // TOPO
164
+ this.isHeaderVisible = !isScrollingDown;
165
+ }
166
+ else if (isScrollingDown && scroll > 50) {
167
+ // SCROLL DOWN
147
168
  this.isHeaderVisible = false;
148
169
  }
149
- // Scroll UP - mostra o header
150
- else if (currentScrollPosition < this.lastScrollPosition) {
170
+ else {
171
+ // SCROLL UP
151
172
  this.isHeaderVisible = true;
152
173
  }
153
- this.lastScrollPosition = currentScrollPosition;
174
+ /* =========================
175
+ * COR
176
+ * ========================= */
177
+ if (!this.allowTransparency) {
178
+ this.changeNavColor = true;
179
+ }
180
+ else {
181
+ this.changeNavColor = scroll > 20;
182
+ }
183
+ this.lastScrollPosition = scroll;
154
184
  }
155
185
  }
156
- NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, deps: [{ token: i1.Router }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
157
- NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavComponent, selector: "lib-nav", inputs: { changeNavColor: "changeNavColor" }, host: { listeners: { "window:resize": "onResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<!-- Navbar Container -->\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-transform duration-300 ease-out \"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.backgroundColor]=\"\n changeNavColor ? 'var(--primary)' : 'var(--primary)'\n \"\n>\n <!-- Main Navbar -->\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 hr-nav\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
186
+ NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
187
+ NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavComponent, selector: "lib-nav", host: { listeners: { "window:resize": "onResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
158
188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, decorators: [{
159
189
  type: Component,
160
- args: [{ selector: 'lib-nav', template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<!-- Navbar Container -->\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-transform duration-300 ease-out \"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.backgroundColor]=\"\n changeNavColor ? 'var(--primary)' : 'var(--primary)'\n \"\n>\n <!-- Main Navbar -->\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 hr-nav\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"] }]
161
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i0.ElementRef }]; }, propDecorators: { changeNavColor: [{
162
- type: Input
163
- }], onResize: [{
190
+ args: [{ selector: 'lib-nav', template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"] }]
191
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i0.ElementRef }]; }, propDecorators: { onResize: [{
164
192
  type: HostListener,
165
193
  args: ['window:resize']
166
194
  }], onWindowScroll: [{
@@ -1 +1 @@
1
- {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.html","../../../projects/tudu-components/src/lib/components/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/tudu-components.module.ts","../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-tudu-components',\n template: `\n <p>\n tudu-components works!sss\n </p>\n `,\n styles: [\n ]\n})\nexport class TuduComponentsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent implements OnInit {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0; // 1 para serviço, 2 para candidatura\n @Input() hideHeader: boolean = false; // 1 para serviço, 2 para candidatura\n\n tags: string[] = ['Residencial', 'Urgente', 'Elétrica'];\n\n statusOptions = [\n { class: 'status-active', text: 'Ativo', icon: 'fa-circle' },\n { class: 'status-pending', text: 'Em andamento', icon: 'fa-spinner' },\n { class: 'status-completed', text: 'Concluído', icon: 'fa-check' },\n { class: 'status-cancelled', text: 'Cancelado', icon: 'fa-times' },\n ];\n\n currentStatus = this.statusOptions[0];\n private statusInterval: any;\n flowIndicator: string = '1';\n\n constructor(private route: Router) {\n this.route.events.subscribe(() => {\n if (this.route.url.includes('budgets')) {\n this.flowIndicator = 'budgets';\n console.log('asdasdadsasda', this.flowIndicator);\n }\n });\n }\n\n ngOnInit() {\n let index = 0;\n this.statusInterval = setInterval(() => {\n index = (index + 1) % this.statusOptions.length;\n this.currentStatus = this.statusOptions[index];\n }, 3000);\n\n console.log('cardTemplateIndicator', this.cardTemplateIndicator);\n }\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: '#4caf5020', color: '#4caf50' }; // verde suave\n case 'concluido':\n return { backgroundColor: '#0096881c', color: '#009688' }; // teal\n case 'cancelado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'publicado':\n return { backgroundColor: '#0096ff1c', color: '#25a5ff' }; // azul suave\n case 'recusado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'em negociacao':\n return { backgroundColor: '#ffab251f', color: '#ff9800' }; // laranja suave\n case 'pendente':\n return { backgroundColor: '#9a1fad1c', color: '#7e57c2' }; // roxo claro\n default:\n return { backgroundColor: '#e0e0e01c', color: '#757575' }; // cinza padrão\n }\n }\n\n ngOnDestroy() {\n if (this.statusInterval) {\n clearInterval(this.statusInterval);\n }\n }\n\n verDetalhes() {\n alert('Abrir detalhes do serviço...');\n }\n}\n","<div\n class=\"service-card rounded-xl shadow-md overflow-hidden bg-white hover:shadow-lg transition-all duration-300 relative mb-5\"\n>\n <!-- HEADER -->\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"service-card-header flex items-center justify-between p-3 border-b border-gray-200\"\n >\n <div class=\"flex items-center gap-3\">\n <div class=\"icon-style\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n <div class=\"flex flex-col\">\n <div class=\"flex items-center gap-3\">\n <div class=\"service-title truncate w-full\">\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n <div\n class=\"whitespace-nowrap overflow-hidden text-ellipsis\"\n style=\"font-size: 12px; color: var(--tab-link)\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n </div>\n\n <!-- BODY -->\n <div class=\"service-card-body p-4 space-y-3\">\n <div>\n <div\n class=\"flex flex-col items-start gap-3 border-b border-gray-100 pb-3 mb-3\"\n *ngIf=\"cardTemplateIndicator === 1\"\n >\n <div class=\"flex justify-between w-full pb-2\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n\n <div\n class=\"text-xs text-gray-50 font-semibold\"\n style=\"\n background-color: #d3d3d32c;\n color: grey;\n border-radius: 25px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px 10px;\n \"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-2 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div class=\"fw-semibold\" *ngIf=\"statusPedido === 'finalizado'\">\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n </div>\n <ng-content select=\"[info-row]\"></ng-content>\n\n <ng-content select=\"[description]\"></ng-content>\n </div>\n\n <!-- FOOTER -->\n\n <div\n class=\"service-card-footer flex justify-center items-center p-3 border-t border-gray-100 bg-gray-50 gap-1\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div\n class=\"fw-semibold col-6\"\n style=\"display: flex; justify-content: flex-end\"\n >\n <ng-content select=\"[price]\"></ng-content>\n </div>\n </div>\n <!-- <div\n \n class=\"flex row justify-between items-center p-3 border-t border-gray-100 bg-gray-50\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div class=\"col-6\">\n <ng-content select=\"[price]\"></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 { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.css'],\n})\nexport class NavComponent implements OnInit {\n @Input() 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\n constructor(private router: Router, private el: ElementRef) {}\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 if (!this.isMobile) return;\n\n const currentScrollPosition =\n window.pageYOffset || document.documentElement.scrollTop;\n\n // Scroll DOWN - esconde o header\n if (\n currentScrollPosition > this.lastScrollPosition &&\n currentScrollPosition > 50\n ) {\n this.isHeaderVisible = false;\n }\n // Scroll UP - mostra o header\n else if (currentScrollPosition < this.lastScrollPosition) {\n this.isHeaderVisible = true;\n }\n\n this.lastScrollPosition = currentScrollPosition;\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<!-- Navbar Container -->\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-transform duration-300 ease-out \"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.backgroundColor]=\"\n changeNavColor ? 'var(--primary)' : 'var(--primary)'\n \"\n>\n <!-- Main Navbar -->\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 hr-nav\">\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 { NgModule } from '@angular/core';\nimport { TuduComponentsComponent } from './tudu-components.component';\nimport { CommonModule } from '@angular/common';\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\nimport { NavComponent } from './components/nav/nav.component';\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\n\n@NgModule({\n declarations: [TuduComponentsComponent, CardLayoutComponent, NavComponent, FallbackMessageComponent],\n imports: [CommonModule],\n exports: [TuduComponentsComponent, CardLayoutComponent, NavComponent, FallbackMessageComponent],\n})\nexport class TuduComponentsModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","/*\n * Public API Surface of tudu-components\n */\nexport * from './lib/tudu-components.component';\nexport * from './lib/tudu-components.module'; // ← Se criou este módulo\n\nexport * from './lib/components/card-layout/card-layout.component';\nexport * from './lib/components/nav/nav.component';\nexport * from './lib/components/fallback-message/fallback-message.component';\nexport * from './lib/tudu-components.service';\n// export * from './lib/card-layout.module'; // ← Ou se usou CardLayoutModule\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;MAYa,uBAAuB,CAAA;AAElC,IAAA,WAAA,GAAA,GAAiB;IAEjB,QAAQ,GAAA;KACP;;oHALU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EARxB,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAIU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,CAAA;;;MCAU,mBAAmB,CAAA;AAkB9B,IAAA,WAAA,CAAoB,KAAa,EAAA;AAAb,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;AAjBxB,QAAA,IAAY,CAAA,YAAA,GAAW,EAAE,CAAC;AAC1B,QAAA,IAAA,CAAA,qBAAqB,GAAW,CAAC,CAAC;AAClC,QAAA,IAAA,CAAA,UAAU,GAAY,KAAK,CAAC;QAErC,IAAI,CAAA,IAAA,GAAa,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAExD,IAAA,CAAA,aAAa,GAAG;YACd,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;YAC5D,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE;YACrE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;YAClE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;SACnE,CAAC;QAEF,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAEtC,QAAA,IAAa,CAAA,aAAA,GAAW,GAAG,CAAC;QAG1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;YAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACtC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAClD,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;QACN,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,MAAK;AACrC,YAAA,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAChD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SAChD,EAAE,IAAI,CAAC,CAAC;QAET,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;KAClE;AAED,IAAA,IAAI,WAAW,GAAA;;QACb,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,EAAE,CAAC;AAEhD,QAAA,QAAQ,MAAM;AACZ,YAAA,KAAK,YAAY;gBACf,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,WAAW;gBACd,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,WAAW;gBACd,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,WAAW;gBACd,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,UAAU;gBACb,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,eAAe;gBAClB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,UAAU;gBACb,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA;gBACE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC7D,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpC,SAAA;KACF;IAED,WAAW,GAAA;QACT,KAAK,CAAC,8BAA8B,CAAC,CAAC;KACvC;;gHApEU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,2KCRhC,+nGAoGA,EAAA,MAAA,EAAA,CAAA,y7DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD5Fa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,+nGAAA,EAAA,MAAA,EAAA,CAAA,y7DAAA,CAAA,EAAA,CAAA;6FAKlB,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;;;MEGK,YAAY,CAAA;IAavB,WAAoB,CAAA,MAAc,EAAU,EAAc,EAAA;AAAtC,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAAU,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;AAZjD,QAAA,IAAc,CAAA,cAAA,GAAY,KAAK,CAAC;AAEzC,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAC3B,QAAA,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;AAErB,QAAA,IAAkB,CAAA,kBAAA,GAAG,CAAC,CAAC;AACvB,QAAA,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC;AACvB,QAAA,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC;AACjB,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;KAEoC;IAE9D,eAAe,GAAA;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;;AAGnB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AACxE,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;AAC7C,SAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACnD;IAGD,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAEO,WAAW,GAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,SAAA;KACF;IACM,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;KAClC;AAED,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;IAGD,cAAc,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,MAAM,qBAAqB,GACzB,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;;AAG3D,QAAA,IACE,qBAAqB,GAAG,IAAI,CAAC,kBAAkB;YAC/C,qBAAqB,GAAG,EAAE,EAC1B;AACA,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC9B,SAAA;;AAEI,aAAA,IAAI,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACxD,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,SAAA;AAED,QAAA,IAAI,CAAC,kBAAkB,GAAG,qBAAqB,CAAC;KACjD;;yGApEU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,0LCdzB,0tCAwCA,EAAA,MAAA,EAAA,CAAA,4dAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD1Ba,YAAY,EAAA,UAAA,EAAA,CAAA;kBALxB,SAAS;+BACE,SAAS,EAAA,QAAA,EAAA,0tCAAA,EAAA,MAAA,EAAA,CAAA,4dAAA,CAAA,EAAA,CAAA;sHAKV,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBA6BN,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,eAAe,CAAA;gBAoB7B,cAAc,EAAA,CAAA;sBADb,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,CAAA;;;ME7CtB,wBAAwB,CAAA;AALrC,IAAA,WAAA,GAAA;AAMW,QAAA,IAAI,CAAA,IAAA,GAAU,EAAE,CAAC;AACjB,QAAA,IAAY,CAAA,YAAA,GAAW,EAAE,CAAC;AAK1B,QAAA,IAAO,CAAA,OAAA,GAAa,KAAK,CAAC;AAEzB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;KAgHtD;AA9GC,IAAA,IAAI,gBAAgB,GAAA;;;;;;;;;;;;;;;QAgBlB,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,QAAQ,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AACrC,gBAAA,KAAK,YAAY;oBACf,OAAO;AACL,wBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,uBAAuB;wBAClD,WAAW,EACT,IAAI,CAAC,iBAAiB;4BACtB,mEAAmE;AACrE,wBAAA,IAAI,EAAE,GAAG;AACT,wBAAA,SAAS,EAAE,gBAAgB;AAC3B,wBAAA,OAAO,EAAE,cAAc;AACvB,wBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,cAAc;AAC3D,wBAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,iBAAiB;qBACnE,CAAC;;;;;;;;;;;;;AAeJ,gBAAA,KAAK,cAAc;oBACjB,OAAO;AACL,wBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,aAAa;AACxC,wBAAA,WAAW,EACT,IAAI,CAAC,iBAAiB,IAAI,mCAAmC;AAC/D,wBAAA,IAAI,EAAE,IAAI;;;AAGV,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,mBAAmB;;qBAEjE,CAAC;AACJ,gBAAA,KAAK,cAAc;oBACjB,OAAO;AACL,wBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,uBAAuB;wBAClD,WAAW,EACT,IAAI,CAAC,iBAAiB;4BACtB,2DAA2D;AAC7D,wBAAA,IAAI,EAAE,IAAI;;;AAGV,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,sBAAsB;;qBAEpE,CAAC;AAEJ,gBAAA;AACE,oBAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAClC,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAChC;IAEO,gBAAgB,GAAA;QACtB,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,kBAAkB;AAC7C,YAAA,WAAW,EACT,IAAI,CAAC,iBAAiB,IAAI,oCAAoC;AAChE,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,eAAe;AAC1B,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,iBAAiB;YAC9D,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;SAC9C,CAAC;KACH;;IAGD,oBAAoB,GAAA;;AAClB,QAAA,QACE,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YACtB,CAAC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,QAAQ,CAClE,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,EAAE,CACjC,EACD;KACH;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC3B;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;KAC7B;;qHAzHU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,iXCjBrC,o5GA8FA,EAAA,MAAA,EAAA,CAAA,kVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD7Ea,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,o5GAAA,EAAA,MAAA,EAAA,CAAA,kVAAA,CAAA,EAAA,CAAA;8BAKvB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;;;MEfI,oBAAoB,CAAA;;iHAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,iBAJhB,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,CACzF,EAAA,OAAA,EAAA,CAAA,YAAY,aACZ,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAEnF,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAHrB,YAAY,CAAA,EAAA,CAAA,CAAA;2FAGX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,CAAC;oBACpG,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,CAAC;iBAChG,CAAA;;;MCNY,qBAAqB,CAAA;AAEhC,IAAA,WAAA,GAAA,GAAiB;;kHAFN,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;ACJD;;AAEG;AAQH;;ACVA;;AAEG;;;;"}
1
+ {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.html","../../../projects/tudu-components/src/lib/components/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/tudu-components.module.ts","../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-tudu-components',\n template: `\n <p>\n tudu-components works!sss\n </p>\n `,\n styles: [\n ]\n})\nexport class TuduComponentsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent implements OnInit {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0; // 1 para serviço, 2 para candidatura\n @Input() hideHeader: boolean = false; // 1 para serviço, 2 para candidatura\n\n tags: string[] = ['Residencial', 'Urgente', 'Elétrica'];\n\n statusOptions = [\n { class: 'status-active', text: 'Ativo', icon: 'fa-circle' },\n { class: 'status-pending', text: 'Em andamento', icon: 'fa-spinner' },\n { class: 'status-completed', text: 'Concluído', icon: 'fa-check' },\n { class: 'status-cancelled', text: 'Cancelado', icon: 'fa-times' },\n ];\n\n currentStatus = this.statusOptions[0];\n private statusInterval: any;\n flowIndicator: string = '1';\n\n constructor(private route: Router) {\n this.route.events.subscribe(() => {\n if (this.route.url.includes('budgets')) {\n this.flowIndicator = 'budgets';\n console.log('asdasdadsasda', this.flowIndicator);\n }\n });\n }\n\n ngOnInit() {\n let index = 0;\n this.statusInterval = setInterval(() => {\n index = (index + 1) % this.statusOptions.length;\n this.currentStatus = this.statusOptions[index];\n }, 3000);\n\n console.log('cardTemplateIndicator', this.cardTemplateIndicator);\n }\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: '#4caf5020', color: '#4caf50' }; // verde suave\n case 'concluido':\n return { backgroundColor: '#0096881c', color: '#009688' }; // teal\n case 'cancelado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'publicado':\n return { backgroundColor: '#0096ff1c', color: '#25a5ff' }; // azul suave\n case 'recusado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'em negociacao':\n return { backgroundColor: '#ffab251f', color: '#ff9800' }; // laranja suave\n case 'pendente':\n return { backgroundColor: '#9a1fad1c', color: '#7e57c2' }; // roxo claro\n default:\n return { backgroundColor: '#e0e0e01c', color: '#757575' }; // cinza padrão\n }\n }\n\n ngOnDestroy() {\n if (this.statusInterval) {\n clearInterval(this.statusInterval);\n }\n }\n\n verDetalhes() {\n alert('Abrir detalhes do serviço...');\n }\n}\n","<div\n class=\"service-card rounded-xl shadow-md overflow-hidden bg-white hover:shadow-lg transition-all duration-300 relative mb-5\"\n>\n <!-- HEADER -->\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"service-card-header flex items-center justify-between p-3 border-b border-gray-200\"\n >\n <div class=\"flex items-center gap-3\">\n <div class=\"icon-style\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n <div class=\"flex flex-col\">\n <div class=\"flex items-center gap-3\">\n <div class=\"service-title truncate w-full\">\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n <div\n class=\"whitespace-nowrap overflow-hidden text-ellipsis\"\n style=\"font-size: 12px; color: var(--tab-link)\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n </div>\n\n <!-- BODY -->\n <div class=\"service-card-body p-4 space-y-3\">\n <div>\n <div\n class=\"flex flex-col items-start gap-3 border-b border-gray-100 pb-3 mb-3\"\n *ngIf=\"cardTemplateIndicator === 1\"\n >\n <div class=\"flex justify-between w-full pb-2\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n\n <div\n class=\"text-xs text-gray-50 font-semibold\"\n style=\"\n background-color: #d3d3d32c;\n color: grey;\n border-radius: 25px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px 10px;\n \"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-2 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div class=\"fw-semibold\" *ngIf=\"statusPedido === 'finalizado'\">\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n </div>\n <ng-content select=\"[info-row]\"></ng-content>\n\n <ng-content select=\"[description]\"></ng-content>\n </div>\n\n <!-- FOOTER -->\n\n <div\n class=\"service-card-footer flex justify-center items-center p-3 border-t border-gray-100 bg-gray-50 gap-1\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div\n class=\"fw-semibold col-6\"\n style=\"display: flex; justify-content: flex-end\"\n >\n <ng-content select=\"[price]\"></ng-content>\n </div>\n </div>\n <!-- <div\n \n class=\"flex row justify-between items-center p-3 border-t border-gray-100 bg-gray-50\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div class=\"col-6\">\n <ng-content select=\"[price]\"></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 @HostListener('window:scroll', [])\n onWindowScroll() {\n const scroll = window.pageYOffset || document.documentElement.scrollTop;\n\n const isScrollingDown = scroll > this.lastScrollPosition;\n\n /* =========================\n * VISIBILIDADE\n * ========================= */\n\n if (scroll <= 10) {\n // TOPO\n this.isHeaderVisible = !isScrollingDown;\n } else if (isScrollingDown && scroll > 50) {\n // SCROLL DOWN\n this.isHeaderVisible = false;\n } else {\n // SCROLL UP\n this.isHeaderVisible = true;\n }\n\n /* =========================\n * COR\n * ========================= */\n if (!this.allowTransparency) {\n this.changeNavColor = true;\n } else {\n this.changeNavColor = scroll > 20;\n }\n\n this.lastScrollPosition = scroll;\n }\n}\n","<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n","import { 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 { NgModule } from '@angular/core';\nimport { TuduComponentsComponent } from './tudu-components.component';\nimport { CommonModule } from '@angular/common';\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\nimport { NavComponent } from './components/nav/nav.component';\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\n\n@NgModule({\n declarations: [TuduComponentsComponent, CardLayoutComponent, NavComponent, FallbackMessageComponent],\n imports: [CommonModule],\n exports: [TuduComponentsComponent, CardLayoutComponent, NavComponent, FallbackMessageComponent],\n})\nexport class TuduComponentsModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","/*\n * Public API Surface of tudu-components\n */\nexport * from './lib/tudu-components.component';\nexport * from './lib/tudu-components.module'; // ← Se criou este módulo\n\nexport * from './lib/components/card-layout/card-layout.component';\nexport * from './lib/components/nav/nav.component';\nexport * from './lib/components/fallback-message/fallback-message.component';\nexport * from './lib/tudu-components.service';\n// export * from './lib/card-layout.module'; // ← Ou se usou CardLayoutModule\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
@@ -3,6 +3,8 @@ import { Component, Input, HostListener, EventEmitter, Output, NgModule, Injecta
3
3
  import * as i2 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i1 from '@angular/router';
6
+ import { NavigationEnd } from '@angular/router';
7
+ import { filter, map, mergeMap } from 'rxjs';
6
8
 
7
9
  class TuduComponentsComponent {
8
10
  constructor() { }
@@ -98,8 +100,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
98
100
  }] } });
99
101
 
100
102
  class NavComponent {
101
- constructor(router, el) {
103
+ constructor(router, activatedRoute, el) {
102
104
  this.router = router;
105
+ this.activatedRoute = activatedRoute;
103
106
  this.el = el;
104
107
  this.changeNavColor = false;
105
108
  this.openClose = false;
@@ -109,6 +112,19 @@ class NavComponent {
109
112
  this.headerHeight = 0;
110
113
  this.isMobile = false;
111
114
  this.hasOffer = false;
115
+ this.allowTransparency = false;
116
+ this.router.events
117
+ .pipe(filter((event) => event instanceof NavigationEnd), map(() => this.activatedRoute), map((route) => {
118
+ while (route.firstChild)
119
+ route = route.firstChild;
120
+ return route;
121
+ }), mergeMap((route) => route.data))
122
+ .subscribe((data) => {
123
+ this.allowTransparency = !!data['transparentNav'];
124
+ this.lastScrollPosition = 0;
125
+ this.isHeaderVisible = true; // força aparecer no load
126
+ this.changeNavColor = !this.allowTransparency;
127
+ });
112
128
  }
113
129
  ngAfterViewInit() {
114
130
  this.checkMobile();
@@ -137,29 +153,41 @@ class NavComponent {
137
153
  this.message = event;
138
154
  }
139
155
  onWindowScroll() {
140
- if (!this.isMobile)
141
- return;
142
- const currentScrollPosition = window.pageYOffset || document.documentElement.scrollTop;
143
- // Scroll DOWN - esconde o header
144
- if (currentScrollPosition > this.lastScrollPosition &&
145
- currentScrollPosition > 50) {
156
+ const scroll = window.pageYOffset || document.documentElement.scrollTop;
157
+ const isScrollingDown = scroll > this.lastScrollPosition;
158
+ /* =========================
159
+ * VISIBILIDADE
160
+ * ========================= */
161
+ if (scroll <= 10) {
162
+ // TOPO
163
+ this.isHeaderVisible = !isScrollingDown;
164
+ }
165
+ else if (isScrollingDown && scroll > 50) {
166
+ // SCROLL DOWN
146
167
  this.isHeaderVisible = false;
147
168
  }
148
- // Scroll UP - mostra o header
149
- else if (currentScrollPosition < this.lastScrollPosition) {
169
+ else {
170
+ // SCROLL UP
150
171
  this.isHeaderVisible = true;
151
172
  }
152
- this.lastScrollPosition = currentScrollPosition;
173
+ /* =========================
174
+ * COR
175
+ * ========================= */
176
+ if (!this.allowTransparency) {
177
+ this.changeNavColor = true;
178
+ }
179
+ else {
180
+ this.changeNavColor = scroll > 20;
181
+ }
182
+ this.lastScrollPosition = scroll;
153
183
  }
154
184
  }
155
- NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, deps: [{ token: i1.Router }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
156
- NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavComponent, selector: "lib-nav", inputs: { changeNavColor: "changeNavColor" }, host: { listeners: { "window:resize": "onResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<!-- Navbar Container -->\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-transform duration-300 ease-out \"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.backgroundColor]=\"\n changeNavColor ? 'var(--primary)' : 'var(--primary)'\n \"\n>\n <!-- Main Navbar -->\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 hr-nav\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
185
+ NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
186
+ NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavComponent, selector: "lib-nav", host: { listeners: { "window:resize": "onResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
157
187
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, decorators: [{
158
188
  type: Component,
159
- args: [{ selector: 'lib-nav', template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<!-- Navbar Container -->\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-transform duration-300 ease-out \"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.backgroundColor]=\"\n changeNavColor ? 'var(--primary)' : 'var(--primary)'\n \"\n>\n <!-- Main Navbar -->\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 hr-nav\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"] }]
160
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i0.ElementRef }]; }, propDecorators: { changeNavColor: [{
161
- type: Input
162
- }], onResize: [{
189
+ args: [{ selector: 'lib-nav', template: "<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n", styles: [".navbar-ajust{background-color:var(--medium);padding:1em}.container-fluid{display:flex;justify-content:space-between;align-items:center}.navbar-left,.navbar-right{flex:1;display:flex;justify-content:flex-start}.navbar-right{justify-content:flex-end}.navbar-center{flex:2;display:flex;justify-content:center}:host{display:block}.-translate-y-full{transform:translateY(calc(-100% - 1px))}.nav-transparent{background-color:var(--premium)!important}.nav-scrolled{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}@media (max-width: 767px){.-translate-y-full{transform:translateY(calc(-100% - 1px))}}\n"] }]
190
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i0.ElementRef }]; }, propDecorators: { onResize: [{
163
191
  type: HostListener,
164
192
  args: ['window:resize']
165
193
  }], onWindowScroll: [{
@@ -1 +1 @@
1
- {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.html","../../../projects/tudu-components/src/lib/components/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/tudu-components.module.ts","../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-tudu-components',\n template: `\n <p>\n tudu-components works!sss\n </p>\n `,\n styles: [\n ]\n})\nexport class TuduComponentsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent implements OnInit {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0; // 1 para serviço, 2 para candidatura\n @Input() hideHeader: boolean = false; // 1 para serviço, 2 para candidatura\n\n tags: string[] = ['Residencial', 'Urgente', 'Elétrica'];\n\n statusOptions = [\n { class: 'status-active', text: 'Ativo', icon: 'fa-circle' },\n { class: 'status-pending', text: 'Em andamento', icon: 'fa-spinner' },\n { class: 'status-completed', text: 'Concluído', icon: 'fa-check' },\n { class: 'status-cancelled', text: 'Cancelado', icon: 'fa-times' },\n ];\n\n currentStatus = this.statusOptions[0];\n private statusInterval: any;\n flowIndicator: string = '1';\n\n constructor(private route: Router) {\n this.route.events.subscribe(() => {\n if (this.route.url.includes('budgets')) {\n this.flowIndicator = 'budgets';\n console.log('asdasdadsasda', this.flowIndicator);\n }\n });\n }\n\n ngOnInit() {\n let index = 0;\n this.statusInterval = setInterval(() => {\n index = (index + 1) % this.statusOptions.length;\n this.currentStatus = this.statusOptions[index];\n }, 3000);\n\n console.log('cardTemplateIndicator', this.cardTemplateIndicator);\n }\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: '#4caf5020', color: '#4caf50' }; // verde suave\n case 'concluido':\n return { backgroundColor: '#0096881c', color: '#009688' }; // teal\n case 'cancelado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'publicado':\n return { backgroundColor: '#0096ff1c', color: '#25a5ff' }; // azul suave\n case 'recusado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'em negociacao':\n return { backgroundColor: '#ffab251f', color: '#ff9800' }; // laranja suave\n case 'pendente':\n return { backgroundColor: '#9a1fad1c', color: '#7e57c2' }; // roxo claro\n default:\n return { backgroundColor: '#e0e0e01c', color: '#757575' }; // cinza padrão\n }\n }\n\n ngOnDestroy() {\n if (this.statusInterval) {\n clearInterval(this.statusInterval);\n }\n }\n\n verDetalhes() {\n alert('Abrir detalhes do serviço...');\n }\n}\n","<div\n class=\"service-card rounded-xl shadow-md overflow-hidden bg-white hover:shadow-lg transition-all duration-300 relative mb-5\"\n>\n <!-- HEADER -->\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"service-card-header flex items-center justify-between p-3 border-b border-gray-200\"\n >\n <div class=\"flex items-center gap-3\">\n <div class=\"icon-style\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n <div class=\"flex flex-col\">\n <div class=\"flex items-center gap-3\">\n <div class=\"service-title truncate w-full\">\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n <div\n class=\"whitespace-nowrap overflow-hidden text-ellipsis\"\n style=\"font-size: 12px; color: var(--tab-link)\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n </div>\n\n <!-- BODY -->\n <div class=\"service-card-body p-4 space-y-3\">\n <div>\n <div\n class=\"flex flex-col items-start gap-3 border-b border-gray-100 pb-3 mb-3\"\n *ngIf=\"cardTemplateIndicator === 1\"\n >\n <div class=\"flex justify-between w-full pb-2\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n\n <div\n class=\"text-xs text-gray-50 font-semibold\"\n style=\"\n background-color: #d3d3d32c;\n color: grey;\n border-radius: 25px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px 10px;\n \"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-2 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div class=\"fw-semibold\" *ngIf=\"statusPedido === 'finalizado'\">\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n </div>\n <ng-content select=\"[info-row]\"></ng-content>\n\n <ng-content select=\"[description]\"></ng-content>\n </div>\n\n <!-- FOOTER -->\n\n <div\n class=\"service-card-footer flex justify-center items-center p-3 border-t border-gray-100 bg-gray-50 gap-1\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div\n class=\"fw-semibold col-6\"\n style=\"display: flex; justify-content: flex-end\"\n >\n <ng-content select=\"[price]\"></ng-content>\n </div>\n </div>\n <!-- <div\n \n class=\"flex row justify-between items-center p-3 border-t border-gray-100 bg-gray-50\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div class=\"col-6\">\n <ng-content select=\"[price]\"></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 { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.css'],\n})\nexport class NavComponent implements OnInit {\n @Input() 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\n constructor(private router: Router, private el: ElementRef) {}\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 if (!this.isMobile) return;\n\n const currentScrollPosition =\n window.pageYOffset || document.documentElement.scrollTop;\n\n // Scroll DOWN - esconde o header\n if (\n currentScrollPosition > this.lastScrollPosition &&\n currentScrollPosition > 50\n ) {\n this.isHeaderVisible = false;\n }\n // Scroll UP - mostra o header\n else if (currentScrollPosition < this.lastScrollPosition) {\n this.isHeaderVisible = true;\n }\n\n this.lastScrollPosition = currentScrollPosition;\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<!-- Navbar Container -->\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-transform duration-300 ease-out \"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.backgroundColor]=\"\n changeNavColor ? 'var(--primary)' : 'var(--primary)'\n \"\n>\n <!-- Main Navbar -->\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 hr-nav\">\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 { NgModule } from '@angular/core';\nimport { TuduComponentsComponent } from './tudu-components.component';\nimport { CommonModule } from '@angular/common';\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\nimport { NavComponent } from './components/nav/nav.component';\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\n\n@NgModule({\n declarations: [TuduComponentsComponent, CardLayoutComponent, NavComponent, FallbackMessageComponent],\n imports: [CommonModule],\n exports: [TuduComponentsComponent, CardLayoutComponent, NavComponent, FallbackMessageComponent],\n})\nexport class TuduComponentsModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","/*\n * Public API Surface of tudu-components\n */\nexport * from './lib/tudu-components.component';\nexport * from './lib/tudu-components.module'; // ← Se criou este módulo\n\nexport * from './lib/components/card-layout/card-layout.component';\nexport * from './lib/components/nav/nav.component';\nexport * from './lib/components/fallback-message/fallback-message.component';\nexport * from './lib/tudu-components.service';\n// export * from './lib/card-layout.module'; // ← Ou se usou CardLayoutModule\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"tudu-components.mjs","sources":["../../../projects/tudu-components/src/lib/tudu-components.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.ts","../../../projects/tudu-components/src/lib/components/card-layout/card-layout.component.html","../../../projects/tudu-components/src/lib/components/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/tudu-components.module.ts","../../../projects/tudu-components/src/lib/tudu-components.service.ts","../../../projects/tudu-components/src/public-api.ts","../../../projects/tudu-components/src/tudu-components.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-tudu-components',\n template: `\n <p>\n tudu-components works!sss\n </p>\n `,\n styles: [\n ]\n})\nexport class TuduComponentsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-card-layout',\n templateUrl: './card-layout.component.html',\n styleUrls: ['./card-layout.component.css'],\n})\nexport class CardLayoutComponent implements OnInit {\n @Input() statusPedido: string = '';\n @Input() cardTemplateIndicator: number = 0; // 1 para serviço, 2 para candidatura\n @Input() hideHeader: boolean = false; // 1 para serviço, 2 para candidatura\n\n tags: string[] = ['Residencial', 'Urgente', 'Elétrica'];\n\n statusOptions = [\n { class: 'status-active', text: 'Ativo', icon: 'fa-circle' },\n { class: 'status-pending', text: 'Em andamento', icon: 'fa-spinner' },\n { class: 'status-completed', text: 'Concluído', icon: 'fa-check' },\n { class: 'status-cancelled', text: 'Cancelado', icon: 'fa-times' },\n ];\n\n currentStatus = this.statusOptions[0];\n private statusInterval: any;\n flowIndicator: string = '1';\n\n constructor(private route: Router) {\n this.route.events.subscribe(() => {\n if (this.route.url.includes('budgets')) {\n this.flowIndicator = 'budgets';\n console.log('asdasdadsasda', this.flowIndicator);\n }\n });\n }\n\n ngOnInit() {\n let index = 0;\n this.statusInterval = setInterval(() => {\n index = (index + 1) % this.statusOptions.length;\n this.currentStatus = this.statusOptions[index];\n }, 3000);\n\n console.log('cardTemplateIndicator', this.cardTemplateIndicator);\n }\n\n get badgeStyles(): { [key: string]: string } {\n const status = this.statusPedido?.toLowerCase();\n\n switch (status) {\n case 'finalizado':\n return { backgroundColor: '#4caf5020', color: '#4caf50' }; // verde suave\n case 'concluido':\n return { backgroundColor: '#0096881c', color: '#009688' }; // teal\n case 'cancelado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'publicado':\n return { backgroundColor: '#0096ff1c', color: '#25a5ff' }; // azul suave\n case 'recusado':\n return { backgroundColor: '#ff52521c', color: '#ff5252' }; // vermelho claro\n case 'em negociacao':\n return { backgroundColor: '#ffab251f', color: '#ff9800' }; // laranja suave\n case 'pendente':\n return { backgroundColor: '#9a1fad1c', color: '#7e57c2' }; // roxo claro\n default:\n return { backgroundColor: '#e0e0e01c', color: '#757575' }; // cinza padrão\n }\n }\n\n ngOnDestroy() {\n if (this.statusInterval) {\n clearInterval(this.statusInterval);\n }\n }\n\n verDetalhes() {\n alert('Abrir detalhes do serviço...');\n }\n}\n","<div\n class=\"service-card rounded-xl shadow-md overflow-hidden bg-white hover:shadow-lg transition-all duration-300 relative mb-5\"\n>\n <!-- HEADER -->\n <div\n [class.force-show]=\"!hideHeader\"\n class=\"service-card-header flex items-center justify-between p-3 border-b border-gray-200\"\n >\n <div class=\"flex items-center gap-3\">\n <div class=\"icon-style\">\n <ng-content select=\"[service-icon]\"></ng-content>\n </div>\n <div class=\"flex flex-col\">\n <div class=\"flex items-center gap-3\">\n <div class=\"service-title truncate w-full\">\n <ng-content select=\"[service-title]\"></ng-content>\n </div>\n <div class=\"\">\n <ng-content select=\"[details-btn]\"></ng-content>\n </div>\n </div>\n <div\n class=\"whitespace-nowrap overflow-hidden text-ellipsis\"\n style=\"font-size: 12px; color: var(--tab-link)\"\n >\n <ng-content select=\"[service-address]\"></ng-content>\n </div>\n </div>\n </div>\n </div>\n\n <!-- BODY -->\n <div class=\"service-card-body p-4 space-y-3\">\n <div>\n <div\n class=\"flex flex-col items-start gap-3 border-b border-gray-100 pb-3 mb-3\"\n *ngIf=\"cardTemplateIndicator === 1\"\n >\n <div class=\"flex justify-between w-full pb-2\">\n <div class=\"status-badge\" [ngStyle]=\"badgeStyles\">\n <ng-content select=\"[status-badge]\"></ng-content>\n </div>\n\n <div\n class=\"text-xs text-gray-50 font-semibold\"\n style=\"\n background-color: #d3d3d32c;\n color: grey;\n border-radius: 25px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px 10px;\n \"\n >\n <ng-content select=\"[order-number]\"></ng-content>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-2 items-center\">\n <ng-content select=\"[filter-tag]\"></ng-content>\n </div>\n </div>\n\n <div class=\"fw-semibold\" *ngIf=\"statusPedido === 'finalizado'\">\n <ng-content select=\"[conclusion-date]\"></ng-content>\n </div>\n </div>\n <ng-content select=\"[info-row]\"></ng-content>\n\n <ng-content select=\"[description]\"></ng-content>\n </div>\n\n <!-- FOOTER -->\n\n <div\n class=\"service-card-footer flex justify-center items-center p-3 border-t border-gray-100 bg-gray-50 gap-1\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div\n class=\"fw-semibold col-6\"\n style=\"display: flex; justify-content: flex-end\"\n >\n <ng-content select=\"[price]\"></ng-content>\n </div>\n </div>\n <!-- <div\n \n class=\"flex row justify-between items-center p-3 border-t border-gray-100 bg-gray-50\"\n >\n <div class=\"col-6\">\n <ng-content select=\"[main-btn]\"></ng-content>\n </div>\n <div class=\"col-6\">\n <ng-content select=\"[price]\"></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 @HostListener('window:scroll', [])\n onWindowScroll() {\n const scroll = window.pageYOffset || document.documentElement.scrollTop;\n\n const isScrollingDown = scroll > this.lastScrollPosition;\n\n /* =========================\n * VISIBILIDADE\n * ========================= */\n\n if (scroll <= 10) {\n // TOPO\n this.isHeaderVisible = !isScrollingDown;\n } else if (isScrollingDown && scroll > 50) {\n // SCROLL DOWN\n this.isHeaderVisible = false;\n } else {\n // SCROLL UP\n this.isHeaderVisible = true;\n }\n\n /* =========================\n * COR\n * ========================= */\n if (!this.allowTransparency) {\n this.changeNavColor = true;\n } else {\n this.changeNavColor = scroll > 20;\n }\n\n this.lastScrollPosition = scroll;\n }\n}\n","<!-- Overlay -->\n<div\n *ngIf=\"openClose\"\n (click)=\"openClose = false\"\n class=\"fixed inset-0 bg-black bg-opacity-40 z-40 md:hidden\"\n></div>\n\n<div\n class=\"fixed top-0 left-0 right-0 z-50 shadow-none transition-all duration-500 w-full\"\n [class.-translate-y-full]=\"!isHeaderVisible\"\n [style.background-color]=\"changeNavColor ? 'var(--primary)' : 'transparent'\"\n>\n <div class=\"w-full\">\n <div class=\"mx-auto px-2 h-16 flex items-center justify-between\">\n <!-- Left Content -->\n <div class=\"flex-1 flex justify-start\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n\n <!-- Center Content -->\n <div class=\"flex-1 flex justify-center\">\n <ng-content select=\"[central-content]\"></ng-content>\n </div>\n\n <!-- Right Content -->\n <div class=\"flex-1\" style=\"display: flex; justify-content: flex-end\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n </div>\n </div>\n\n <!-- Header Menu (Submenu) -->\n <div header-menu class=\"w-full\">\n <ng-content select=\"[header-menu]\"></ng-content>\n </div>\n</div>\n","import { 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 { NgModule } from '@angular/core';\nimport { TuduComponentsComponent } from './tudu-components.component';\nimport { CommonModule } from '@angular/common';\nimport { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';\nimport { NavComponent } from './components/nav/nav.component';\nimport { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';\n\n@NgModule({\n declarations: [TuduComponentsComponent, CardLayoutComponent, NavComponent, FallbackMessageComponent],\n imports: [CommonModule],\n exports: [TuduComponentsComponent, CardLayoutComponent, NavComponent, FallbackMessageComponent],\n})\nexport class TuduComponentsModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TuduComponentsService {\n\n constructor() { }\n}\n","/*\n * Public API Surface of tudu-components\n */\nexport * from './lib/tudu-components.component';\nexport * from './lib/tudu-components.module'; // ← Se criou este módulo\n\nexport * from './lib/components/card-layout/card-layout.component';\nexport * from './lib/components/nav/nav.component';\nexport * from './lib/components/fallback-message/fallback-message.component';\nexport * from './lib/tudu-components.service';\n// export * from './lib/card-layout.module'; // ← Ou se usou CardLayoutModule\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;;;MAYa,uBAAuB,CAAA;AAElC,IAAA,WAAA,GAAA,GAAiB;IAEjB,QAAQ,GAAA;KACP;;oHALU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EARxB,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAIU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,CAAA;;;MCAU,mBAAmB,CAAA;AAkB9B,IAAA,WAAA,CAAoB,KAAa,EAAA;QAAb,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QAjBxB,IAAY,CAAA,YAAA,GAAW,EAAE,CAAC;AAC1B,QAAA,IAAA,CAAA,qBAAqB,GAAW,CAAC,CAAC;AAClC,QAAA,IAAA,CAAA,UAAU,GAAY,KAAK,CAAC;QAErC,IAAI,CAAA,IAAA,GAAa,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAExD,QAAA,IAAA,CAAA,aAAa,GAAG;YACd,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;YAC5D,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE;YACrE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;YAClE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;SACnE,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAa,CAAA,aAAA,GAAW,GAAG,CAAC;QAG1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;YAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACtC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAClD,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;QACN,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,MAAK;AACrC,YAAA,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAChD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SAChD,EAAE,IAAI,CAAC,CAAC;QAET,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;KAClE;AAED,IAAA,IAAI,WAAW,GAAA;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;AAEhD,QAAA,QAAQ,MAAM;AACZ,YAAA,KAAK,YAAY;gBACf,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,WAAW;gBACd,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,WAAW;gBACd,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,WAAW;gBACd,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,UAAU;gBACb,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,eAAe;gBAClB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA,KAAK,UAAU;gBACb,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5D,YAAA;gBACE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC7D,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpC,SAAA;KACF;IAED,WAAW,GAAA;QACT,KAAK,CAAC,8BAA8B,CAAC,CAAC;KACvC;;gHApEU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,2KCRhC,+nGAoGA,EAAA,MAAA,EAAA,CAAA,y7DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD5Fa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,+nGAAA,EAAA,MAAA,EAAA,CAAA,y7DAAA,CAAA,EAAA,CAAA;6FAKlB,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;;;MEIK,YAAY,CAAA;AAcvB,IAAA,WAAA,CACU,MAAc,EACd,cAA8B,EAC9B,EAAc,EAAA;QAFd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAhBxB,IAAc,CAAA,cAAA,GAAY,KAAK,CAAC;QAEhC,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;QAC3B,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;QAErB,IAAkB,CAAA,kBAAA,GAAG,CAAC,CAAC;QACvB,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC;QACvB,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC;QACjB,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QAEjB,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;QAC1B,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC;QAOxB,IAAI,CAAC,MAAM,CAAC,MAAM;AACf,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC,EACjD,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,EAC9B,GAAG,CAAC,CAAC,KAAK,KAAI;YACZ,OAAO,KAAK,CAAC,UAAU;AAAE,gBAAA,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;AAClD,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC,EACF,QAAQ,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,CAChC;AACA,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;YAClB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAElD,YAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;AAE5B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAChD,SAAC,CAAC,CAAC;KACN;IAED,eAAe,GAAA;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;;AAGnB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AACxE,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;AAC7C,SAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACnD;IAGD,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAEO,WAAW,GAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,SAAA;KACF;IACM,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;KAClC;AAED,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;IAED,cAAc,GAAA;QACZ,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;AAExE,QAAA,MAAM,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAEzD;;AAE+B;QAE/B,IAAI,MAAM,IAAI,EAAE,EAAE;;AAEhB,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,eAAe,CAAC;AACzC,SAAA;AAAM,aAAA,IAAI,eAAe,IAAI,MAAM,GAAG,EAAE,EAAE;;AAEzC,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC9B,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,SAAA;AAED;;AAE+B;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC5B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,GAAG,EAAE,CAAC;AACnC,SAAA;AAED,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;KAClC;;yGAtGU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,4ICfzB,2oCAoCA,EAAA,MAAA,EAAA,CAAA,mmBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDrBa,YAAY,EAAA,UAAA,EAAA,CAAA;kBALxB,SAAS;+BACE,SAAS,EAAA,QAAA,EAAA,2oCAAA,EAAA,MAAA,EAAA,CAAA,mmBAAA,CAAA,EAAA,CAAA;mJA0DnB,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,eAAe,CAAA;gBAmB7B,cAAc,EAAA,CAAA;sBADb,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,CAAA;;;MErEtB,wBAAwB,CAAA;AALrC,IAAA,WAAA,GAAA;QAMW,IAAI,CAAA,IAAA,GAAU,EAAE,CAAC;QACjB,IAAY,CAAA,YAAA,GAAW,EAAE,CAAC;QAK1B,IAAO,CAAA,OAAA,GAAa,KAAK,CAAC;AAEzB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;AAgHtD,KAAA;AA9GC,IAAA,IAAI,gBAAgB,GAAA;;;;;;;;;;;;;;;QAgBlB,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,QAAQ,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AACrC,gBAAA,KAAK,YAAY;oBACf,OAAO;AACL,wBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,uBAAuB;wBAClD,WAAW,EACT,IAAI,CAAC,iBAAiB;4BACtB,mEAAmE;AACrE,wBAAA,IAAI,EAAE,GAAG;AACT,wBAAA,SAAS,EAAE,gBAAgB;AAC3B,wBAAA,OAAO,EAAE,cAAc;AACvB,wBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,cAAc;AAC3D,wBAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,iBAAiB;qBACnE,CAAC;;;;;;;;;;;;;AAeJ,gBAAA,KAAK,cAAc;oBACjB,OAAO;AACL,wBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,aAAa;AACxC,wBAAA,WAAW,EACT,IAAI,CAAC,iBAAiB,IAAI,mCAAmC;AAC/D,wBAAA,IAAI,EAAE,IAAI;;;AAGV,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,mBAAmB;;qBAEjE,CAAC;AACJ,gBAAA,KAAK,cAAc;oBACjB,OAAO;AACL,wBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,uBAAuB;wBAClD,WAAW,EACT,IAAI,CAAC,iBAAiB;4BACtB,2DAA2D;AAC7D,wBAAA,IAAI,EAAE,IAAI;;;AAGV,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,sBAAsB;;qBAEpE,CAAC;AAEJ,gBAAA;AACE,oBAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAClC,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAChC;IAEO,gBAAgB,GAAA;QACtB,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,kBAAkB;AAC7C,YAAA,WAAW,EACT,IAAI,CAAC,iBAAiB,IAAI,oCAAoC;AAChE,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,eAAe;AAC1B,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,iBAAiB;YAC9D,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;SAC9C,CAAC;KACH;;IAGD,oBAAoB,GAAA;AAClB,QAAA,QACE,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;AACtB,YAAA,CAAC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,QAAQ,CAClE,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CACjC,EACD;KACH;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC3B;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;KAC7B;;qHAzHU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,iXCjBrC,o5GA8FA,EAAA,MAAA,EAAA,CAAA,kVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD7Ea,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,o5GAAA,EAAA,MAAA,EAAA,CAAA,kVAAA,CAAA,EAAA,CAAA;8BAKvB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;;;MEfI,oBAAoB,CAAA;;iHAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,iBAJhB,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,CACzF,EAAA,OAAA,EAAA,CAAA,YAAY,aACZ,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAEnF,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAHrB,YAAY,CAAA,EAAA,CAAA,CAAA;2FAGX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,CAAC;oBACpG,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,CAAC;AAChG,iBAAA,CAAA;;;MCNY,qBAAqB,CAAA;AAEhC,IAAA,WAAA,GAAA,GAAiB;;kHAFN,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACJD;;AAEG;AAQH;;ACVA;;AAEG;;;;"}
@@ -1,8 +1,9 @@
1
1
  import { ElementRef, OnInit } from '@angular/core';
2
- import { Router } from '@angular/router';
2
+ import { ActivatedRoute, Router } from '@angular/router';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class NavComponent implements OnInit {
5
5
  private router;
6
+ private activatedRoute;
6
7
  private el;
7
8
  changeNavColor: boolean;
8
9
  openClose: boolean;
@@ -12,7 +13,8 @@ export declare class NavComponent implements OnInit {
12
13
  headerHeight: number;
13
14
  isMobile: boolean;
14
15
  hasOffer: boolean;
15
- constructor(router: Router, el: ElementRef);
16
+ allowTransparency: boolean;
17
+ constructor(router: Router, activatedRoute: ActivatedRoute, el: ElementRef);
16
18
  ngAfterViewInit(): void;
17
19
  ngOnInit(): void;
18
20
  onResize(): void;
@@ -21,5 +23,5 @@ export declare class NavComponent implements OnInit {
21
23
  receiveMessage(event: string): void;
22
24
  onWindowScroll(): void;
23
25
  static ɵfac: i0.ɵɵFactoryDeclaration<NavComponent, never>;
24
- static ɵcmp: i0.ɵɵComponentDeclaration<NavComponent, "lib-nav", never, { "changeNavColor": "changeNavColor"; }, {}, never, ["[left-content]", "[central-content]", "[right-content]", "[header-menu]"], false>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<NavComponent, "lib-nav", never, {}, {}, never, ["[left-content]", "[central-content]", "[right-content]", "[header-menu]"], false>;
25
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tudu-components",
3
- "version": "0.2.9",
3
+ "version": "0.2.10",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.0",
6
6
  "@angular/core": "^17.3.0"