@muxima-ui/avatar 1.0.0

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.
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # avatar-avatar
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test avatar-avatar` to execute the unit tests.
@@ -0,0 +1,3 @@
1
+ export * from './lib/avatar-avatar/avatar-avatar.component';
2
+ export * from './lib/avatar-group/avatar-group.component';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2F2YXRhci9hdmF0YXIvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYywyQ0FBMkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2F2YXRhci1hdmF0YXIvYXZhdGFyLWF2YXRhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXZhdGFyLWdyb3VwL2F2YXRhci1ncm91cC5jb21wb25lbnQnO1xuIl19
@@ -0,0 +1,96 @@
1
+ import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class AvatarAvatarComponent {
6
+ constructor() {
7
+ this.alt = 'Avatar';
8
+ this.size = 'md';
9
+ this.status = 'none';
10
+ this.shape = 'circle';
11
+ this.clickable = false;
12
+ this.avatarClick = new EventEmitter();
13
+ this.imageError = false;
14
+ this.showTooltip = false;
15
+ }
16
+ onClick(event) {
17
+ if (this.clickable) {
18
+ this.avatarClick.emit(event);
19
+ }
20
+ }
21
+ onMouseEnter() {
22
+ if (this.tooltip) {
23
+ this.showTooltip = true;
24
+ }
25
+ }
26
+ onMouseLeave() {
27
+ this.showTooltip = false;
28
+ }
29
+ getInitials() {
30
+ if (!this.name)
31
+ return '?';
32
+ const names = this.name.trim().split(' ');
33
+ if (names.length === 1)
34
+ return names[0].charAt(0).toUpperCase();
35
+ return (names[0].charAt(0) + names[names.length - 1].charAt(0)).toUpperCase();
36
+ }
37
+ onImageError() {
38
+ this.imageError = true;
39
+ }
40
+ getRandomColor() {
41
+ if (this.bgColor)
42
+ return this.bgColor;
43
+ // Cores inspiradas no logo Muxima - Gradiente azul para rosa
44
+ const muximaColors = [
45
+ '#3B82F6',
46
+ '#6366F1',
47
+ '#8B5CF6',
48
+ '#A855F7',
49
+ '#C026D3',
50
+ '#D946EF', // Rosa magenta
51
+ ];
52
+ const hash = this.name ? this.name.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0) : 0;
53
+ return muximaColors[hash % muximaColors.length];
54
+ }
55
+ getTooltipText() {
56
+ return this.tooltip || this.name || this.alt;
57
+ }
58
+ }
59
+ AvatarAvatarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
60
+ AvatarAvatarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AvatarAvatarComponent, isStandalone: true, selector: "muxima-avatar", inputs: { src: "src", alt: "alt", name: "name", size: "size", status: "status", badge: "badge", shape: "shape", bgColor: "bgColor", clickable: "clickable", tooltip: "tooltip" }, outputs: { avatarClick: "avatarClick" }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0, template: "<div \n class=\"muxima-avatar\" \n [ngClass]=\"[\n 'muxima-avatar-' + size,\n 'muxima-avatar-' + shape,\n clickable ? 'muxima-avatar-clickable' : ''\n ]\">\n <!-- Imagem -->\n <img \n *ngIf=\"src && !imageError\" \n [src]=\"src\" \n [alt]=\"alt\"\n (error)=\"onImageError()\"\n class=\"muxima-avatar-image\">\n \n <!-- Iniciais -->\n <div \n *ngIf=\"!src || imageError\" \n class=\"muxima-avatar-initials\"\n [style.background]=\"getRandomColor()\">\n {{ getInitials() }}\n </div>\n\n <!-- Status Badge -->\n <span \n *ngIf=\"status !== 'none'\" \n class=\"muxima-avatar-status\"\n [ngClass]=\"'muxima-avatar-status-' + status\">\n </span>\n\n <!-- Notification Badge -->\n <span \n *ngIf=\"badge !== undefined\" \n class=\"muxima-avatar-badge\">\n {{ badge }}\n </span>\n\n <!-- Tooltip -->\n <div \n *ngIf=\"showTooltip && (tooltip || name)\" \n class=\"muxima-avatar-tooltip\">\n {{ getTooltipText() }}\n </div>\n</div>\n", styles: [".muxima-avatar-container{position:relative;display:inline-flex;align-items:center;justify-content:center}.muxima-avatar{position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;background:linear-gradient(135deg,#3B82F6,#6366F1,#8B5CF6);color:#fff;font-weight:600;-webkit-user-select:none;user-select:none;flex-shrink:0;border:3px solid white;box-shadow:0 4px 6px #00000012,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a;transition:all .3s cubic-bezier(.4,0,.2,1)}.muxima-avatar:before{content:\"\";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.2) 0%,transparent 50%,rgba(0,0,0,.1) 100%);pointer-events:none}.muxima-avatar:hover{transform:scale(1.05);box-shadow:0 10px 15px #0000001a,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a}.muxima-avatar img{width:100%;height:100%;object-fit:cover;position:relative;z-index:1}.muxima-avatar .muxima-avatar-initials{font-size:inherit;line-height:1;text-transform:uppercase;position:relative;z-index:1;text-shadow:0 1px 2px rgba(0,0,0,.2)}.muxima-avatar-circle{border-radius:9999px}.muxima-avatar-square{border-radius:.375rem}.muxima-avatar-rounded{border-radius:.75rem}.muxima-avatar-xs{width:1.5rem;height:1.5rem;font-size:.625rem;border-width:2px}.muxima-avatar-sm{width:2rem;height:2rem;font-size:.75rem;border-width:2px}.muxima-avatar-md{width:2.5rem;height:2.5rem;font-size:.875rem;border-width:2.5px}.muxima-avatar-lg{width:3rem;height:3rem;font-size:1rem;border-width:3px}.muxima-avatar-xl{width:4rem;height:4rem;font-size:1.25rem;border-width:3px}.muxima-avatar-2xl{width:5rem;height:5rem;font-size:1.5rem;border-width:4px}.muxima-avatar-status{position:absolute;bottom:0;right:0;border-radius:50%;border:2.5px solid white;box-shadow:0 2px 4px #00000026,0 1px 2px #0000001a;z-index:2;transition:transform .2s ease}.muxima-avatar-status.muxima-avatar-status-online{background:linear-gradient(135deg,#10B981,#059669);animation:pulse-status 2s cubic-bezier(.4,0,.6,1) infinite}.muxima-avatar-status.muxima-avatar-status-offline{background:linear-gradient(135deg,#94A3B8,#64748B)}.muxima-avatar-status.muxima-avatar-status-away{background:linear-gradient(135deg,#F59E0B,#D97706)}.muxima-avatar-status.muxima-avatar-status-busy{background:linear-gradient(135deg,#EF4444,#DC2626)}.muxima-avatar-xs .muxima-avatar-status{width:.375rem;height:.375rem;bottom:-1px;right:-1px;border-width:1.5px}.muxima-avatar-sm .muxima-avatar-status{width:.5rem;height:.5rem;bottom:-1px;right:-1px;border-width:2px}.muxima-avatar-md .muxima-avatar-status{width:.625rem;height:.625rem;bottom:0;right:0;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-status{width:.75rem;height:.75rem;bottom:1px;right:1px;border-width:2.5px}.muxima-avatar-xl .muxima-avatar-status{width:1rem;height:1rem;bottom:2px;right:2px;border-width:3px}.muxima-avatar-2xl .muxima-avatar-status{width:1.25rem;height:1.25rem;bottom:3px;right:3px;border-width:3px}@keyframes pulse-status{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}.muxima-avatar-badge{position:absolute;top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#EF4444 0%,#DC2626 100%);color:#fff;font-size:.75rem;font-weight:700;line-height:1;border-radius:9999px;border:3px solid white;box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d;z-index:3;animation:bounce-in .3s cubic-bezier(.68,-.55,.265,1.55),badge-pulse 2s ease-in-out infinite;transition:transform .2s ease}.muxima-avatar-badge:hover{transform:scale(1.15);animation:none}.muxima-avatar-xs .muxima-avatar-badge{top:-4px;right:-4px;min-width:1rem;height:1rem;padding:0 .3rem;font-size:.5rem;border-width:2px}.muxima-avatar-sm .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.125rem;height:1.125rem;padding:0 .35rem;font-size:.6rem;border-width:2px}.muxima-avatar-md .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.25rem;height:1.25rem;padding:0 .4rem;font-size:.65rem;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-badge{top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;font-size:.75rem;border-width:3px}.muxima-avatar-xl .muxima-avatar-badge{top:-8px;right:-8px;min-width:1.875rem;height:1.875rem;padding:0 .6rem;font-size:.875rem;border-width:3px}.muxima-avatar-2xl .muxima-avatar-badge{top:-10px;right:-10px;min-width:2.25rem;height:2.25rem;padding:0 .75rem;font-size:1rem;border-width:4px}@keyframes bounce-in{0%{transform:scale(0);opacity:0}50%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}@keyframes badge-pulse{0%,to{box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d}50%{box-shadow:0 4px 16px #ef4444b3,0 2px 6px #0006}}.muxima-avatar-clickable{cursor:pointer}.muxima-avatar-clickable:active{transform:scale(.95)}.muxima-avatar-tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);padding:.5rem .75rem;background:rgba(0,0,0,.9);color:#fff;font-size:.75rem;font-weight:500;line-height:1.2;border-radius:.375rem;white-space:nowrap;z-index:50;pointer-events:none;animation:tooltip-fade-in .2s ease;box-shadow:0 4px 6px #0000001a}.muxima-avatar-tooltip:after{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:#000000e6}@keyframes tooltip-fade-in{0%{opacity:0;transform:translate(-50%) translateY(-4px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.muxima-avatar-group{display:flex;align-items:center}.muxima-avatar-group .muxima-avatar-container{margin-left:-.5rem;transition:all .2s}.muxima-avatar-group .muxima-avatar-container:first-child{margin-left:0}.muxima-avatar-group .muxima-avatar-container:hover{transform:translateY(-4px);z-index:10}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarAvatarComponent, decorators: [{
62
+ type: Component,
63
+ args: [{ selector: 'muxima-avatar', standalone: true, imports: [CommonModule], template: "<div \n class=\"muxima-avatar\" \n [ngClass]=\"[\n 'muxima-avatar-' + size,\n 'muxima-avatar-' + shape,\n clickable ? 'muxima-avatar-clickable' : ''\n ]\">\n <!-- Imagem -->\n <img \n *ngIf=\"src && !imageError\" \n [src]=\"src\" \n [alt]=\"alt\"\n (error)=\"onImageError()\"\n class=\"muxima-avatar-image\">\n \n <!-- Iniciais -->\n <div \n *ngIf=\"!src || imageError\" \n class=\"muxima-avatar-initials\"\n [style.background]=\"getRandomColor()\">\n {{ getInitials() }}\n </div>\n\n <!-- Status Badge -->\n <span \n *ngIf=\"status !== 'none'\" \n class=\"muxima-avatar-status\"\n [ngClass]=\"'muxima-avatar-status-' + status\">\n </span>\n\n <!-- Notification Badge -->\n <span \n *ngIf=\"badge !== undefined\" \n class=\"muxima-avatar-badge\">\n {{ badge }}\n </span>\n\n <!-- Tooltip -->\n <div \n *ngIf=\"showTooltip && (tooltip || name)\" \n class=\"muxima-avatar-tooltip\">\n {{ getTooltipText() }}\n </div>\n</div>\n", styles: [".muxima-avatar-container{position:relative;display:inline-flex;align-items:center;justify-content:center}.muxima-avatar{position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;background:linear-gradient(135deg,#3B82F6,#6366F1,#8B5CF6);color:#fff;font-weight:600;-webkit-user-select:none;user-select:none;flex-shrink:0;border:3px solid white;box-shadow:0 4px 6px #00000012,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a;transition:all .3s cubic-bezier(.4,0,.2,1)}.muxima-avatar:before{content:\"\";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.2) 0%,transparent 50%,rgba(0,0,0,.1) 100%);pointer-events:none}.muxima-avatar:hover{transform:scale(1.05);box-shadow:0 10px 15px #0000001a,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a}.muxima-avatar img{width:100%;height:100%;object-fit:cover;position:relative;z-index:1}.muxima-avatar .muxima-avatar-initials{font-size:inherit;line-height:1;text-transform:uppercase;position:relative;z-index:1;text-shadow:0 1px 2px rgba(0,0,0,.2)}.muxima-avatar-circle{border-radius:9999px}.muxima-avatar-square{border-radius:.375rem}.muxima-avatar-rounded{border-radius:.75rem}.muxima-avatar-xs{width:1.5rem;height:1.5rem;font-size:.625rem;border-width:2px}.muxima-avatar-sm{width:2rem;height:2rem;font-size:.75rem;border-width:2px}.muxima-avatar-md{width:2.5rem;height:2.5rem;font-size:.875rem;border-width:2.5px}.muxima-avatar-lg{width:3rem;height:3rem;font-size:1rem;border-width:3px}.muxima-avatar-xl{width:4rem;height:4rem;font-size:1.25rem;border-width:3px}.muxima-avatar-2xl{width:5rem;height:5rem;font-size:1.5rem;border-width:4px}.muxima-avatar-status{position:absolute;bottom:0;right:0;border-radius:50%;border:2.5px solid white;box-shadow:0 2px 4px #00000026,0 1px 2px #0000001a;z-index:2;transition:transform .2s ease}.muxima-avatar-status.muxima-avatar-status-online{background:linear-gradient(135deg,#10B981,#059669);animation:pulse-status 2s cubic-bezier(.4,0,.6,1) infinite}.muxima-avatar-status.muxima-avatar-status-offline{background:linear-gradient(135deg,#94A3B8,#64748B)}.muxima-avatar-status.muxima-avatar-status-away{background:linear-gradient(135deg,#F59E0B,#D97706)}.muxima-avatar-status.muxima-avatar-status-busy{background:linear-gradient(135deg,#EF4444,#DC2626)}.muxima-avatar-xs .muxima-avatar-status{width:.375rem;height:.375rem;bottom:-1px;right:-1px;border-width:1.5px}.muxima-avatar-sm .muxima-avatar-status{width:.5rem;height:.5rem;bottom:-1px;right:-1px;border-width:2px}.muxima-avatar-md .muxima-avatar-status{width:.625rem;height:.625rem;bottom:0;right:0;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-status{width:.75rem;height:.75rem;bottom:1px;right:1px;border-width:2.5px}.muxima-avatar-xl .muxima-avatar-status{width:1rem;height:1rem;bottom:2px;right:2px;border-width:3px}.muxima-avatar-2xl .muxima-avatar-status{width:1.25rem;height:1.25rem;bottom:3px;right:3px;border-width:3px}@keyframes pulse-status{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}.muxima-avatar-badge{position:absolute;top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#EF4444 0%,#DC2626 100%);color:#fff;font-size:.75rem;font-weight:700;line-height:1;border-radius:9999px;border:3px solid white;box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d;z-index:3;animation:bounce-in .3s cubic-bezier(.68,-.55,.265,1.55),badge-pulse 2s ease-in-out infinite;transition:transform .2s ease}.muxima-avatar-badge:hover{transform:scale(1.15);animation:none}.muxima-avatar-xs .muxima-avatar-badge{top:-4px;right:-4px;min-width:1rem;height:1rem;padding:0 .3rem;font-size:.5rem;border-width:2px}.muxima-avatar-sm .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.125rem;height:1.125rem;padding:0 .35rem;font-size:.6rem;border-width:2px}.muxima-avatar-md .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.25rem;height:1.25rem;padding:0 .4rem;font-size:.65rem;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-badge{top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;font-size:.75rem;border-width:3px}.muxima-avatar-xl .muxima-avatar-badge{top:-8px;right:-8px;min-width:1.875rem;height:1.875rem;padding:0 .6rem;font-size:.875rem;border-width:3px}.muxima-avatar-2xl .muxima-avatar-badge{top:-10px;right:-10px;min-width:2.25rem;height:2.25rem;padding:0 .75rem;font-size:1rem;border-width:4px}@keyframes bounce-in{0%{transform:scale(0);opacity:0}50%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}@keyframes badge-pulse{0%,to{box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d}50%{box-shadow:0 4px 16px #ef4444b3,0 2px 6px #0006}}.muxima-avatar-clickable{cursor:pointer}.muxima-avatar-clickable:active{transform:scale(.95)}.muxima-avatar-tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);padding:.5rem .75rem;background:rgba(0,0,0,.9);color:#fff;font-size:.75rem;font-weight:500;line-height:1.2;border-radius:.375rem;white-space:nowrap;z-index:50;pointer-events:none;animation:tooltip-fade-in .2s ease;box-shadow:0 4px 6px #0000001a}.muxima-avatar-tooltip:after{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:#000000e6}@keyframes tooltip-fade-in{0%{opacity:0;transform:translate(-50%) translateY(-4px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.muxima-avatar-group{display:flex;align-items:center}.muxima-avatar-group .muxima-avatar-container{margin-left:-.5rem;transition:all .2s}.muxima-avatar-group .muxima-avatar-container:first-child{margin-left:0}.muxima-avatar-group .muxima-avatar-container:hover{transform:translateY(-4px);z-index:10}\n"] }]
64
+ }], propDecorators: { src: [{
65
+ type: Input
66
+ }], alt: [{
67
+ type: Input
68
+ }], name: [{
69
+ type: Input
70
+ }], size: [{
71
+ type: Input
72
+ }], status: [{
73
+ type: Input
74
+ }], badge: [{
75
+ type: Input
76
+ }], shape: [{
77
+ type: Input
78
+ }], bgColor: [{
79
+ type: Input
80
+ }], clickable: [{
81
+ type: Input
82
+ }], tooltip: [{
83
+ type: Input
84
+ }], avatarClick: [{
85
+ type: Output
86
+ }], onClick: [{
87
+ type: HostListener,
88
+ args: ['click', ['$event']]
89
+ }], onMouseEnter: [{
90
+ type: HostListener,
91
+ args: ['mouseenter']
92
+ }], onMouseLeave: [{
93
+ type: HostListener,
94
+ args: ['mouseleave']
95
+ }] } });
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLWF2YXRhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb21wb25lbnRzL2F2YXRhci9hdmF0YXIvc3JjL2xpYi9hdmF0YXItYXZhdGFyL2F2YXRhci1hdmF0YXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50cy9hdmF0YXIvYXZhdGFyL3NyYy9saWIvYXZhdGFyLWF2YXRhci9hdmF0YXItYXZhdGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBYS9DLE1BQU0sT0FBTyxxQkFBcUI7SUFQbEM7UUFTVyxRQUFHLEdBQVcsUUFBUSxDQUFDO1FBRXZCLFNBQUksR0FBZSxJQUFJLENBQUM7UUFDeEIsV0FBTSxHQUFpQixNQUFNLENBQUM7UUFFOUIsVUFBSyxHQUFnQixRQUFRLENBQUM7UUFFOUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUcxQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFdkQsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixnQkFBVyxHQUFHLEtBQUssQ0FBQztLQWtEckI7SUEvQ0MsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFHRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUdELFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hGLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3RDLDZEQUE2RDtRQUM3RCxNQUFNLFlBQVksR0FBRztZQUNuQixTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVMsRUFBRSxlQUFlO1NBQzNCLENBQUM7UUFDRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sWUFBWSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQy9DLENBQUM7O21IQWhFVSxxQkFBcUI7dUdBQXJCLHFCQUFxQix5WkNkbEMsKytCQTRDQSxvcExEbENZLFlBQVk7NEZBSVgscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUM7OEJBS2QsR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQU1QLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUWpDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZO2dCQVExQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbnR5cGUgQXZhdGFyU2l6ZSA9ICd4cycgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgJzJ4bCc7XG50eXBlIEF2YXRhclN0YXR1cyA9ICdvbmxpbmUnIHwgJ29mZmxpbmUnIHwgJ2F3YXknIHwgJ2J1c3knIHwgJ25vbmUnO1xudHlwZSBBdmF0YXJTaGFwZSA9ICdjaXJjbGUnIHwgJ3NxdWFyZScgfCAncm91bmRlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ211eGltYS1hdmF0YXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2F2YXRhci1hdmF0YXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hdmF0YXItYXZhdGFyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEF2YXRhckF2YXRhckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNyYz86IHN0cmluZztcbiAgQElucHV0KCkgYWx0OiBzdHJpbmcgPSAnQXZhdGFyJztcbiAgQElucHV0KCkgbmFtZT86IHN0cmluZztcbiAgQElucHV0KCkgc2l6ZTogQXZhdGFyU2l6ZSA9ICdtZCc7XG4gIEBJbnB1dCgpIHN0YXR1czogQXZhdGFyU3RhdHVzID0gJ25vbmUnO1xuICBASW5wdXQoKSBiYWRnZT86IHN0cmluZyB8IG51bWJlcjtcbiAgQElucHV0KCkgc2hhcGU6IEF2YXRhclNoYXBlID0gJ2NpcmNsZSc7XG4gIEBJbnB1dCgpIGJnQ29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsaWNrYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0b29sdGlwPzogc3RyaW5nO1xuICBcbiAgQE91dHB1dCgpIGF2YXRhckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICBcbiAgaW1hZ2VFcnJvciA9IGZhbHNlO1xuICBzaG93VG9vbHRpcCA9IGZhbHNlO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsaWNrYWJsZSkge1xuICAgICAgdGhpcy5hdmF0YXJDbGljay5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRvb2x0aXApIHtcbiAgICAgIHRoaXMuc2hvd1Rvb2x0aXAgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93VG9vbHRpcCA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0SW5pdGlhbHMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMubmFtZSkgcmV0dXJuICc/JztcbiAgICBjb25zdCBuYW1lcyA9IHRoaXMubmFtZS50cmltKCkuc3BsaXQoJyAnKTtcbiAgICBpZiAobmFtZXMubGVuZ3RoID09PSAxKSByZXR1cm4gbmFtZXNbMF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7XG4gICAgcmV0dXJuIChuYW1lc1swXS5jaGFyQXQoMCkgKyBuYW1lc1tuYW1lcy5sZW5ndGggLSAxXS5jaGFyQXQoMCkpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBvbkltYWdlRXJyb3IoKTogdm9pZCB7XG4gICAgdGhpcy5pbWFnZUVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIGdldFJhbmRvbUNvbG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuYmdDb2xvcikgcmV0dXJuIHRoaXMuYmdDb2xvcjtcbiAgICAvLyBDb3JlcyBpbnNwaXJhZGFzIG5vIGxvZ28gTXV4aW1hIC0gR3JhZGllbnRlIGF6dWwgcGFyYSByb3NhXG4gICAgY29uc3QgbXV4aW1hQ29sb3JzID0gW1xuICAgICAgJyMzQjgyRjYnLCAvLyBBenVsIHZpYnJhbnRlXG4gICAgICAnIzYzNjZGMScsIC8vIMONbmRpZ29cbiAgICAgICcjOEI1Q0Y2JywgLy8gUm94b1xuICAgICAgJyNBODU1RjcnLCAvLyBQw7pycHVyYVxuICAgICAgJyNDMDI2RDMnLCAvLyBGw7pjc2lhXG4gICAgICAnI0Q5NDZFRicsIC8vIFJvc2EgbWFnZW50YVxuICAgIF07XG4gICAgY29uc3QgaGFzaCA9IHRoaXMubmFtZSA/IHRoaXMubmFtZS5zcGxpdCgnJykucmVkdWNlKChhY2MsIGNoYXIpID0+IGFjYyArIGNoYXIuY2hhckNvZGVBdCgwKSwgMCkgOiAwO1xuICAgIHJldHVybiBtdXhpbWFDb2xvcnNbaGFzaCAlIG11eGltYUNvbG9ycy5sZW5ndGhdO1xuICB9XG5cbiAgZ2V0VG9vbHRpcFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwIHx8IHRoaXMubmFtZSB8fCB0aGlzLmFsdDtcbiAgfVxufVxuIiwiPGRpdiBcbiAgY2xhc3M9XCJtdXhpbWEtYXZhdGFyXCIgXG4gIFtuZ0NsYXNzXT1cIltcbiAgICAnbXV4aW1hLWF2YXRhci0nICsgc2l6ZSxcbiAgICAnbXV4aW1hLWF2YXRhci0nICsgc2hhcGUsXG4gICAgY2xpY2thYmxlID8gJ211eGltYS1hdmF0YXItY2xpY2thYmxlJyA6ICcnXG4gIF1cIj5cbiAgPCEtLSBJbWFnZW0gLS0+XG4gIDxpbWcgXG4gICAgKm5nSWY9XCJzcmMgJiYgIWltYWdlRXJyb3JcIiBcbiAgICBbc3JjXT1cInNyY1wiIFxuICAgIFthbHRdPVwiYWx0XCJcbiAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKClcIlxuICAgIGNsYXNzPVwibXV4aW1hLWF2YXRhci1pbWFnZVwiPlxuICBcbiAgPCEtLSBJbmljaWFpcyAtLT5cbiAgPGRpdiBcbiAgICAqbmdJZj1cIiFzcmMgfHwgaW1hZ2VFcnJvclwiIFxuICAgIGNsYXNzPVwibXV4aW1hLWF2YXRhci1pbml0aWFsc1wiXG4gICAgW3N0eWxlLmJhY2tncm91bmRdPVwiZ2V0UmFuZG9tQ29sb3IoKVwiPlxuICAgIHt7IGdldEluaXRpYWxzKCkgfX1cbiAgPC9kaXY+XG5cbiAgPCEtLSBTdGF0dXMgQmFkZ2UgLS0+XG4gIDxzcGFuIFxuICAgICpuZ0lmPVwic3RhdHVzICE9PSAnbm9uZSdcIiBcbiAgICBjbGFzcz1cIm11eGltYS1hdmF0YXItc3RhdHVzXCJcbiAgICBbbmdDbGFzc109XCInbXV4aW1hLWF2YXRhci1zdGF0dXMtJyArIHN0YXR1c1wiPlxuICA8L3NwYW4+XG5cbiAgPCEtLSBOb3RpZmljYXRpb24gQmFkZ2UgLS0+XG4gIDxzcGFuIFxuICAgICpuZ0lmPVwiYmFkZ2UgIT09IHVuZGVmaW5lZFwiIFxuICAgIGNsYXNzPVwibXV4aW1hLWF2YXRhci1iYWRnZVwiPlxuICAgIHt7IGJhZGdlIH19XG4gIDwvc3Bhbj5cblxuICA8IS0tIFRvb2x0aXAgLS0+XG4gIDxkaXYgXG4gICAgKm5nSWY9XCJzaG93VG9vbHRpcCAmJiAodG9vbHRpcCB8fCBuYW1lKVwiIFxuICAgIGNsYXNzPVwibXV4aW1hLWF2YXRhci10b29sdGlwXCI+XG4gICAge3sgZ2V0VG9vbHRpcFRleHQoKSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,45 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class AvatarGroupComponent {
6
+ constructor() {
7
+ this.size = 'md';
8
+ this.totalCount = 0;
9
+ }
10
+ }
11
+ AvatarGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
+ AvatarGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AvatarGroupComponent, isStandalone: true, selector: "muxima-avatar-group", inputs: { max: "max", size: "size", totalCount: "totalCount" }, ngImport: i0, template: `
13
+ <div class="muxima-avatar-group" [ngClass]="'muxima-avatar-group-' + size">
14
+ <ng-content></ng-content>
15
+ <div *ngIf="max && max < totalCount"
16
+ class="muxima-avatar muxima-avatar-more"
17
+ [ngClass]="'muxima-avatar-' + size">
18
+ <div class="muxima-avatar-initials">
19
+ +{{ totalCount - max }}
20
+ </div>
21
+ </div>
22
+ </div>
23
+ `, isInline: true, styles: [".muxima-avatar-group{display:flex;align-items:center;position:relative;::ng-deep muxima-avatar {margin-left: -.5rem; transition: all .2s; position: relative; &:first-child {margin-left: 0;} &:hover {transform: translateY(-4px); z-index: 10;}} .muxima-avatar-more {background: linear-gradient(135deg,#64748B,#475569); cursor: pointer; &:hover {transform: translateY(-4px) scale(1.05);}}}.muxima-avatar-group-xs ::ng-deep muxima-avatar{margin-left:-.375rem}.muxima-avatar-group-sm ::ng-deep muxima-avatar{margin-left:-.5rem}.muxima-avatar-group-md ::ng-deep muxima-avatar{margin-left:-.625rem}.muxima-avatar-group-lg ::ng-deep muxima-avatar{margin-left:-.75rem}.muxima-avatar-group-xl ::ng-deep muxima-avatar{margin-left:-1rem}.muxima-avatar-group-2xl ::ng-deep muxima-avatar{margin-left:-1.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarGroupComponent, decorators: [{
25
+ type: Component,
26
+ args: [{ selector: 'muxima-avatar-group', standalone: true, imports: [CommonModule], template: `
27
+ <div class="muxima-avatar-group" [ngClass]="'muxima-avatar-group-' + size">
28
+ <ng-content></ng-content>
29
+ <div *ngIf="max && max < totalCount"
30
+ class="muxima-avatar muxima-avatar-more"
31
+ [ngClass]="'muxima-avatar-' + size">
32
+ <div class="muxima-avatar-initials">
33
+ +{{ totalCount - max }}
34
+ </div>
35
+ </div>
36
+ </div>
37
+ `, styles: [".muxima-avatar-group{display:flex;align-items:center;position:relative;::ng-deep muxima-avatar {margin-left: -.5rem; transition: all .2s; position: relative; &:first-child {margin-left: 0;} &:hover {transform: translateY(-4px); z-index: 10;}} .muxima-avatar-more {background: linear-gradient(135deg,#64748B,#475569); cursor: pointer; &:hover {transform: translateY(-4px) scale(1.05);}}}.muxima-avatar-group-xs ::ng-deep muxima-avatar{margin-left:-.375rem}.muxima-avatar-group-sm ::ng-deep muxima-avatar{margin-left:-.5rem}.muxima-avatar-group-md ::ng-deep muxima-avatar{margin-left:-.625rem}.muxima-avatar-group-lg ::ng-deep muxima-avatar{margin-left:-.75rem}.muxima-avatar-group-xl ::ng-deep muxima-avatar{margin-left:-1rem}.muxima-avatar-group-2xl ::ng-deep muxima-avatar{margin-left:-1.25rem}\n"] }]
38
+ }], propDecorators: { max: [{
39
+ type: Input
40
+ }], size: [{
41
+ type: Input
42
+ }], totalCount: [{
43
+ type: Input
44
+ }] } });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvYXZhdGFyL2F2YXRhci9zcmMvbGliL2F2YXRhci1ncm91cC9hdmF0YXItZ3JvdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBMEUvQyxNQUFNLE9BQU8sb0JBQW9CO0lBeEVqQztRQTBFVyxTQUFJLEdBQTZDLElBQUksQ0FBQztRQUN0RCxlQUFVLEdBQVcsQ0FBQyxDQUFDO0tBQ2pDOztrSEFKWSxvQkFBb0I7c0dBQXBCLG9CQUFvQiwrSUFwRXJCOzs7Ozs7Ozs7OztHQVdULHMyQkFaUyxZQUFZOzRGQXFFWCxvQkFBb0I7a0JBeEVoQyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7Ozs7Ozs7R0FXVDs4QkEwRFEsR0FBRztzQkFBWCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtdXhpbWEtYXZhdGFyLWdyb3VwJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwibXV4aW1hLWF2YXRhci1ncm91cFwiIFtuZ0NsYXNzXT1cIidtdXhpbWEtYXZhdGFyLWdyb3VwLScgKyBzaXplXCI+XHJcbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgPGRpdiAqbmdJZj1cIm1heCAmJiBtYXggPCB0b3RhbENvdW50XCIgXHJcbiAgICAgICAgICAgY2xhc3M9XCJtdXhpbWEtYXZhdGFyIG11eGltYS1hdmF0YXItbW9yZVwiXHJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwiJ211eGltYS1hdmF0YXItJyArIHNpemVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXV4aW1hLWF2YXRhci1pbml0aWFsc1wiPlxyXG4gICAgICAgICAgK3t7IHRvdGFsQ291bnQgLSBtYXggfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG4gIHN0eWxlczogW2BcclxuICAgIC5tdXhpbWEtYXZhdGFyLWdyb3VwIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG5cclxuICAgICAgOjpuZy1kZWVwIG11eGltYS1hdmF0YXIge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMC41cmVtO1xyXG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHJcbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpO1xyXG4gICAgICAgICAgei1pbmRleDogMTA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAubXV4aW1hLWF2YXRhci1tb3JlIHtcclxuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNjQ3NDhCLCAjNDc1NTY5KTtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcblxyXG4gICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpIHNjYWxlKDEuMDUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5tdXhpbWEtYXZhdGFyLWdyb3VwLXhzIDo6bmctZGVlcCBtdXhpbWEtYXZhdGFyIHtcclxuICAgICAgbWFyZ2luLWxlZnQ6IC0wLjM3NXJlbTtcclxuICAgIH1cclxuXHJcbiAgICAubXV4aW1hLWF2YXRhci1ncm91cC1zbSA6Om5nLWRlZXAgbXV4aW1hLWF2YXRhciB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMC41cmVtO1xyXG4gICAgfVxyXG5cclxuICAgIC5tdXhpbWEtYXZhdGFyLWdyb3VwLW1kIDo6bmctZGVlcCBtdXhpbWEtYXZhdGFyIHtcclxuICAgICAgbWFyZ2luLWxlZnQ6IC0wLjYyNXJlbTtcclxuICAgIH1cclxuXHJcbiAgICAubXV4aW1hLWF2YXRhci1ncm91cC1sZyA6Om5nLWRlZXAgbXV4aW1hLWF2YXRhciB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMC43NXJlbTtcclxuICAgIH1cclxuXHJcbiAgICAubXV4aW1hLWF2YXRhci1ncm91cC14bCA6Om5nLWRlZXAgbXV4aW1hLWF2YXRhciB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXJlbTtcclxuICAgIH1cclxuXHJcbiAgICAubXV4aW1hLWF2YXRhci1ncm91cC0yeGwgOjpuZy1kZWVwIG11eGltYS1hdmF0YXIge1xyXG4gICAgICBtYXJnaW4tbGVmdDogLTEuMjVyZW07XHJcbiAgICB9XHJcbiAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEF2YXRhckdyb3VwQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBtYXg/OiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCcgfCAnMnhsJyA9ICdtZCc7XHJcbiAgQElucHV0KCkgdG90YWxDb3VudDogbnVtYmVyID0gMDtcclxufVxyXG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV4aW1hLXVpLWF2YXRhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvYXZhdGFyL2F2YXRhci9zcmMvbXV4aW1hLXVpLWF2YXRhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,144 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Component, Input, Output, HostListener } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+
6
+ class AvatarAvatarComponent {
7
+ constructor() {
8
+ this.alt = 'Avatar';
9
+ this.size = 'md';
10
+ this.status = 'none';
11
+ this.shape = 'circle';
12
+ this.clickable = false;
13
+ this.avatarClick = new EventEmitter();
14
+ this.imageError = false;
15
+ this.showTooltip = false;
16
+ }
17
+ onClick(event) {
18
+ if (this.clickable) {
19
+ this.avatarClick.emit(event);
20
+ }
21
+ }
22
+ onMouseEnter() {
23
+ if (this.tooltip) {
24
+ this.showTooltip = true;
25
+ }
26
+ }
27
+ onMouseLeave() {
28
+ this.showTooltip = false;
29
+ }
30
+ getInitials() {
31
+ if (!this.name)
32
+ return '?';
33
+ const names = this.name.trim().split(' ');
34
+ if (names.length === 1)
35
+ return names[0].charAt(0).toUpperCase();
36
+ return (names[0].charAt(0) + names[names.length - 1].charAt(0)).toUpperCase();
37
+ }
38
+ onImageError() {
39
+ this.imageError = true;
40
+ }
41
+ getRandomColor() {
42
+ if (this.bgColor)
43
+ return this.bgColor;
44
+ // Cores inspiradas no logo Muxima - Gradiente azul para rosa
45
+ const muximaColors = [
46
+ '#3B82F6',
47
+ '#6366F1',
48
+ '#8B5CF6',
49
+ '#A855F7',
50
+ '#C026D3',
51
+ '#D946EF', // Rosa magenta
52
+ ];
53
+ const hash = this.name ? this.name.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0) : 0;
54
+ return muximaColors[hash % muximaColors.length];
55
+ }
56
+ getTooltipText() {
57
+ return this.tooltip || this.name || this.alt;
58
+ }
59
+ }
60
+ AvatarAvatarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
61
+ AvatarAvatarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AvatarAvatarComponent, isStandalone: true, selector: "muxima-avatar", inputs: { src: "src", alt: "alt", name: "name", size: "size", status: "status", badge: "badge", shape: "shape", bgColor: "bgColor", clickable: "clickable", tooltip: "tooltip" }, outputs: { avatarClick: "avatarClick" }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0, template: "<div \n class=\"muxima-avatar\" \n [ngClass]=\"[\n 'muxima-avatar-' + size,\n 'muxima-avatar-' + shape,\n clickable ? 'muxima-avatar-clickable' : ''\n ]\">\n <!-- Imagem -->\n <img \n *ngIf=\"src && !imageError\" \n [src]=\"src\" \n [alt]=\"alt\"\n (error)=\"onImageError()\"\n class=\"muxima-avatar-image\">\n \n <!-- Iniciais -->\n <div \n *ngIf=\"!src || imageError\" \n class=\"muxima-avatar-initials\"\n [style.background]=\"getRandomColor()\">\n {{ getInitials() }}\n </div>\n\n <!-- Status Badge -->\n <span \n *ngIf=\"status !== 'none'\" \n class=\"muxima-avatar-status\"\n [ngClass]=\"'muxima-avatar-status-' + status\">\n </span>\n\n <!-- Notification Badge -->\n <span \n *ngIf=\"badge !== undefined\" \n class=\"muxima-avatar-badge\">\n {{ badge }}\n </span>\n\n <!-- Tooltip -->\n <div \n *ngIf=\"showTooltip && (tooltip || name)\" \n class=\"muxima-avatar-tooltip\">\n {{ getTooltipText() }}\n </div>\n</div>\n", styles: [".muxima-avatar-container{position:relative;display:inline-flex;align-items:center;justify-content:center}.muxima-avatar{position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;background:linear-gradient(135deg,#3B82F6,#6366F1,#8B5CF6);color:#fff;font-weight:600;-webkit-user-select:none;user-select:none;flex-shrink:0;border:3px solid white;box-shadow:0 4px 6px #00000012,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a;transition:all .3s cubic-bezier(.4,0,.2,1)}.muxima-avatar:before{content:\"\";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.2) 0%,transparent 50%,rgba(0,0,0,.1) 100%);pointer-events:none}.muxima-avatar:hover{transform:scale(1.05);box-shadow:0 10px 15px #0000001a,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a}.muxima-avatar img{width:100%;height:100%;object-fit:cover;position:relative;z-index:1}.muxima-avatar .muxima-avatar-initials{font-size:inherit;line-height:1;text-transform:uppercase;position:relative;z-index:1;text-shadow:0 1px 2px rgba(0,0,0,.2)}.muxima-avatar-circle{border-radius:9999px}.muxima-avatar-square{border-radius:.375rem}.muxima-avatar-rounded{border-radius:.75rem}.muxima-avatar-xs{width:1.5rem;height:1.5rem;font-size:.625rem;border-width:2px}.muxima-avatar-sm{width:2rem;height:2rem;font-size:.75rem;border-width:2px}.muxima-avatar-md{width:2.5rem;height:2.5rem;font-size:.875rem;border-width:2.5px}.muxima-avatar-lg{width:3rem;height:3rem;font-size:1rem;border-width:3px}.muxima-avatar-xl{width:4rem;height:4rem;font-size:1.25rem;border-width:3px}.muxima-avatar-2xl{width:5rem;height:5rem;font-size:1.5rem;border-width:4px}.muxima-avatar-status{position:absolute;bottom:0;right:0;border-radius:50%;border:2.5px solid white;box-shadow:0 2px 4px #00000026,0 1px 2px #0000001a;z-index:2;transition:transform .2s ease}.muxima-avatar-status.muxima-avatar-status-online{background:linear-gradient(135deg,#10B981,#059669);animation:pulse-status 2s cubic-bezier(.4,0,.6,1) infinite}.muxima-avatar-status.muxima-avatar-status-offline{background:linear-gradient(135deg,#94A3B8,#64748B)}.muxima-avatar-status.muxima-avatar-status-away{background:linear-gradient(135deg,#F59E0B,#D97706)}.muxima-avatar-status.muxima-avatar-status-busy{background:linear-gradient(135deg,#EF4444,#DC2626)}.muxima-avatar-xs .muxima-avatar-status{width:.375rem;height:.375rem;bottom:-1px;right:-1px;border-width:1.5px}.muxima-avatar-sm .muxima-avatar-status{width:.5rem;height:.5rem;bottom:-1px;right:-1px;border-width:2px}.muxima-avatar-md .muxima-avatar-status{width:.625rem;height:.625rem;bottom:0;right:0;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-status{width:.75rem;height:.75rem;bottom:1px;right:1px;border-width:2.5px}.muxima-avatar-xl .muxima-avatar-status{width:1rem;height:1rem;bottom:2px;right:2px;border-width:3px}.muxima-avatar-2xl .muxima-avatar-status{width:1.25rem;height:1.25rem;bottom:3px;right:3px;border-width:3px}@keyframes pulse-status{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}.muxima-avatar-badge{position:absolute;top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#EF4444 0%,#DC2626 100%);color:#fff;font-size:.75rem;font-weight:700;line-height:1;border-radius:9999px;border:3px solid white;box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d;z-index:3;animation:bounce-in .3s cubic-bezier(.68,-.55,.265,1.55),badge-pulse 2s ease-in-out infinite;transition:transform .2s ease}.muxima-avatar-badge:hover{transform:scale(1.15);animation:none}.muxima-avatar-xs .muxima-avatar-badge{top:-4px;right:-4px;min-width:1rem;height:1rem;padding:0 .3rem;font-size:.5rem;border-width:2px}.muxima-avatar-sm .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.125rem;height:1.125rem;padding:0 .35rem;font-size:.6rem;border-width:2px}.muxima-avatar-md .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.25rem;height:1.25rem;padding:0 .4rem;font-size:.65rem;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-badge{top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;font-size:.75rem;border-width:3px}.muxima-avatar-xl .muxima-avatar-badge{top:-8px;right:-8px;min-width:1.875rem;height:1.875rem;padding:0 .6rem;font-size:.875rem;border-width:3px}.muxima-avatar-2xl .muxima-avatar-badge{top:-10px;right:-10px;min-width:2.25rem;height:2.25rem;padding:0 .75rem;font-size:1rem;border-width:4px}@keyframes bounce-in{0%{transform:scale(0);opacity:0}50%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}@keyframes badge-pulse{0%,to{box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d}50%{box-shadow:0 4px 16px #ef4444b3,0 2px 6px #0006}}.muxima-avatar-clickable{cursor:pointer}.muxima-avatar-clickable:active{transform:scale(.95)}.muxima-avatar-tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);padding:.5rem .75rem;background:rgba(0,0,0,.9);color:#fff;font-size:.75rem;font-weight:500;line-height:1.2;border-radius:.375rem;white-space:nowrap;z-index:50;pointer-events:none;animation:tooltip-fade-in .2s ease;box-shadow:0 4px 6px #0000001a}.muxima-avatar-tooltip:after{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:#000000e6}@keyframes tooltip-fade-in{0%{opacity:0;transform:translate(-50%) translateY(-4px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.muxima-avatar-group{display:flex;align-items:center}.muxima-avatar-group .muxima-avatar-container{margin-left:-.5rem;transition:all .2s}.muxima-avatar-group .muxima-avatar-container:first-child{margin-left:0}.muxima-avatar-group .muxima-avatar-container:hover{transform:translateY(-4px);z-index:10}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarAvatarComponent, decorators: [{
63
+ type: Component,
64
+ args: [{ selector: 'muxima-avatar', standalone: true, imports: [CommonModule], template: "<div \n class=\"muxima-avatar\" \n [ngClass]=\"[\n 'muxima-avatar-' + size,\n 'muxima-avatar-' + shape,\n clickable ? 'muxima-avatar-clickable' : ''\n ]\">\n <!-- Imagem -->\n <img \n *ngIf=\"src && !imageError\" \n [src]=\"src\" \n [alt]=\"alt\"\n (error)=\"onImageError()\"\n class=\"muxima-avatar-image\">\n \n <!-- Iniciais -->\n <div \n *ngIf=\"!src || imageError\" \n class=\"muxima-avatar-initials\"\n [style.background]=\"getRandomColor()\">\n {{ getInitials() }}\n </div>\n\n <!-- Status Badge -->\n <span \n *ngIf=\"status !== 'none'\" \n class=\"muxima-avatar-status\"\n [ngClass]=\"'muxima-avatar-status-' + status\">\n </span>\n\n <!-- Notification Badge -->\n <span \n *ngIf=\"badge !== undefined\" \n class=\"muxima-avatar-badge\">\n {{ badge }}\n </span>\n\n <!-- Tooltip -->\n <div \n *ngIf=\"showTooltip && (tooltip || name)\" \n class=\"muxima-avatar-tooltip\">\n {{ getTooltipText() }}\n </div>\n</div>\n", styles: [".muxima-avatar-container{position:relative;display:inline-flex;align-items:center;justify-content:center}.muxima-avatar{position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;background:linear-gradient(135deg,#3B82F6,#6366F1,#8B5CF6);color:#fff;font-weight:600;-webkit-user-select:none;user-select:none;flex-shrink:0;border:3px solid white;box-shadow:0 4px 6px #00000012,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a;transition:all .3s cubic-bezier(.4,0,.2,1)}.muxima-avatar:before{content:\"\";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.2) 0%,transparent 50%,rgba(0,0,0,.1) 100%);pointer-events:none}.muxima-avatar:hover{transform:scale(1.05);box-shadow:0 10px 15px #0000001a,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a}.muxima-avatar img{width:100%;height:100%;object-fit:cover;position:relative;z-index:1}.muxima-avatar .muxima-avatar-initials{font-size:inherit;line-height:1;text-transform:uppercase;position:relative;z-index:1;text-shadow:0 1px 2px rgba(0,0,0,.2)}.muxima-avatar-circle{border-radius:9999px}.muxima-avatar-square{border-radius:.375rem}.muxima-avatar-rounded{border-radius:.75rem}.muxima-avatar-xs{width:1.5rem;height:1.5rem;font-size:.625rem;border-width:2px}.muxima-avatar-sm{width:2rem;height:2rem;font-size:.75rem;border-width:2px}.muxima-avatar-md{width:2.5rem;height:2.5rem;font-size:.875rem;border-width:2.5px}.muxima-avatar-lg{width:3rem;height:3rem;font-size:1rem;border-width:3px}.muxima-avatar-xl{width:4rem;height:4rem;font-size:1.25rem;border-width:3px}.muxima-avatar-2xl{width:5rem;height:5rem;font-size:1.5rem;border-width:4px}.muxima-avatar-status{position:absolute;bottom:0;right:0;border-radius:50%;border:2.5px solid white;box-shadow:0 2px 4px #00000026,0 1px 2px #0000001a;z-index:2;transition:transform .2s ease}.muxima-avatar-status.muxima-avatar-status-online{background:linear-gradient(135deg,#10B981,#059669);animation:pulse-status 2s cubic-bezier(.4,0,.6,1) infinite}.muxima-avatar-status.muxima-avatar-status-offline{background:linear-gradient(135deg,#94A3B8,#64748B)}.muxima-avatar-status.muxima-avatar-status-away{background:linear-gradient(135deg,#F59E0B,#D97706)}.muxima-avatar-status.muxima-avatar-status-busy{background:linear-gradient(135deg,#EF4444,#DC2626)}.muxima-avatar-xs .muxima-avatar-status{width:.375rem;height:.375rem;bottom:-1px;right:-1px;border-width:1.5px}.muxima-avatar-sm .muxima-avatar-status{width:.5rem;height:.5rem;bottom:-1px;right:-1px;border-width:2px}.muxima-avatar-md .muxima-avatar-status{width:.625rem;height:.625rem;bottom:0;right:0;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-status{width:.75rem;height:.75rem;bottom:1px;right:1px;border-width:2.5px}.muxima-avatar-xl .muxima-avatar-status{width:1rem;height:1rem;bottom:2px;right:2px;border-width:3px}.muxima-avatar-2xl .muxima-avatar-status{width:1.25rem;height:1.25rem;bottom:3px;right:3px;border-width:3px}@keyframes pulse-status{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}.muxima-avatar-badge{position:absolute;top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#EF4444 0%,#DC2626 100%);color:#fff;font-size:.75rem;font-weight:700;line-height:1;border-radius:9999px;border:3px solid white;box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d;z-index:3;animation:bounce-in .3s cubic-bezier(.68,-.55,.265,1.55),badge-pulse 2s ease-in-out infinite;transition:transform .2s ease}.muxima-avatar-badge:hover{transform:scale(1.15);animation:none}.muxima-avatar-xs .muxima-avatar-badge{top:-4px;right:-4px;min-width:1rem;height:1rem;padding:0 .3rem;font-size:.5rem;border-width:2px}.muxima-avatar-sm .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.125rem;height:1.125rem;padding:0 .35rem;font-size:.6rem;border-width:2px}.muxima-avatar-md .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.25rem;height:1.25rem;padding:0 .4rem;font-size:.65rem;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-badge{top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;font-size:.75rem;border-width:3px}.muxima-avatar-xl .muxima-avatar-badge{top:-8px;right:-8px;min-width:1.875rem;height:1.875rem;padding:0 .6rem;font-size:.875rem;border-width:3px}.muxima-avatar-2xl .muxima-avatar-badge{top:-10px;right:-10px;min-width:2.25rem;height:2.25rem;padding:0 .75rem;font-size:1rem;border-width:4px}@keyframes bounce-in{0%{transform:scale(0);opacity:0}50%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}@keyframes badge-pulse{0%,to{box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d}50%{box-shadow:0 4px 16px #ef4444b3,0 2px 6px #0006}}.muxima-avatar-clickable{cursor:pointer}.muxima-avatar-clickable:active{transform:scale(.95)}.muxima-avatar-tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);padding:.5rem .75rem;background:rgba(0,0,0,.9);color:#fff;font-size:.75rem;font-weight:500;line-height:1.2;border-radius:.375rem;white-space:nowrap;z-index:50;pointer-events:none;animation:tooltip-fade-in .2s ease;box-shadow:0 4px 6px #0000001a}.muxima-avatar-tooltip:after{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:#000000e6}@keyframes tooltip-fade-in{0%{opacity:0;transform:translate(-50%) translateY(-4px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.muxima-avatar-group{display:flex;align-items:center}.muxima-avatar-group .muxima-avatar-container{margin-left:-.5rem;transition:all .2s}.muxima-avatar-group .muxima-avatar-container:first-child{margin-left:0}.muxima-avatar-group .muxima-avatar-container:hover{transform:translateY(-4px);z-index:10}\n"] }]
65
+ }], propDecorators: { src: [{
66
+ type: Input
67
+ }], alt: [{
68
+ type: Input
69
+ }], name: [{
70
+ type: Input
71
+ }], size: [{
72
+ type: Input
73
+ }], status: [{
74
+ type: Input
75
+ }], badge: [{
76
+ type: Input
77
+ }], shape: [{
78
+ type: Input
79
+ }], bgColor: [{
80
+ type: Input
81
+ }], clickable: [{
82
+ type: Input
83
+ }], tooltip: [{
84
+ type: Input
85
+ }], avatarClick: [{
86
+ type: Output
87
+ }], onClick: [{
88
+ type: HostListener,
89
+ args: ['click', ['$event']]
90
+ }], onMouseEnter: [{
91
+ type: HostListener,
92
+ args: ['mouseenter']
93
+ }], onMouseLeave: [{
94
+ type: HostListener,
95
+ args: ['mouseleave']
96
+ }] } });
97
+
98
+ class AvatarGroupComponent {
99
+ constructor() {
100
+ this.size = 'md';
101
+ this.totalCount = 0;
102
+ }
103
+ }
104
+ AvatarGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
105
+ AvatarGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AvatarGroupComponent, isStandalone: true, selector: "muxima-avatar-group", inputs: { max: "max", size: "size", totalCount: "totalCount" }, ngImport: i0, template: `
106
+ <div class="muxima-avatar-group" [ngClass]="'muxima-avatar-group-' + size">
107
+ <ng-content></ng-content>
108
+ <div *ngIf="max && max < totalCount"
109
+ class="muxima-avatar muxima-avatar-more"
110
+ [ngClass]="'muxima-avatar-' + size">
111
+ <div class="muxima-avatar-initials">
112
+ +{{ totalCount - max }}
113
+ </div>
114
+ </div>
115
+ </div>
116
+ `, isInline: true, styles: [".muxima-avatar-group{display:flex;align-items:center;position:relative;::ng-deep muxima-avatar {margin-left: -.5rem; transition: all .2s; position: relative; &:first-child {margin-left: 0;} &:hover {transform: translateY(-4px); z-index: 10;}} .muxima-avatar-more {background: linear-gradient(135deg,#64748B,#475569); cursor: pointer; &:hover {transform: translateY(-4px) scale(1.05);}}}.muxima-avatar-group-xs ::ng-deep muxima-avatar{margin-left:-.375rem}.muxima-avatar-group-sm ::ng-deep muxima-avatar{margin-left:-.5rem}.muxima-avatar-group-md ::ng-deep muxima-avatar{margin-left:-.625rem}.muxima-avatar-group-lg ::ng-deep muxima-avatar{margin-left:-.75rem}.muxima-avatar-group-xl ::ng-deep muxima-avatar{margin-left:-1rem}.muxima-avatar-group-2xl ::ng-deep muxima-avatar{margin-left:-1.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarGroupComponent, decorators: [{
118
+ type: Component,
119
+ args: [{ selector: 'muxima-avatar-group', standalone: true, imports: [CommonModule], template: `
120
+ <div class="muxima-avatar-group" [ngClass]="'muxima-avatar-group-' + size">
121
+ <ng-content></ng-content>
122
+ <div *ngIf="max && max < totalCount"
123
+ class="muxima-avatar muxima-avatar-more"
124
+ [ngClass]="'muxima-avatar-' + size">
125
+ <div class="muxima-avatar-initials">
126
+ +{{ totalCount - max }}
127
+ </div>
128
+ </div>
129
+ </div>
130
+ `, styles: [".muxima-avatar-group{display:flex;align-items:center;position:relative;::ng-deep muxima-avatar {margin-left: -.5rem; transition: all .2s; position: relative; &:first-child {margin-left: 0;} &:hover {transform: translateY(-4px); z-index: 10;}} .muxima-avatar-more {background: linear-gradient(135deg,#64748B,#475569); cursor: pointer; &:hover {transform: translateY(-4px) scale(1.05);}}}.muxima-avatar-group-xs ::ng-deep muxima-avatar{margin-left:-.375rem}.muxima-avatar-group-sm ::ng-deep muxima-avatar{margin-left:-.5rem}.muxima-avatar-group-md ::ng-deep muxima-avatar{margin-left:-.625rem}.muxima-avatar-group-lg ::ng-deep muxima-avatar{margin-left:-.75rem}.muxima-avatar-group-xl ::ng-deep muxima-avatar{margin-left:-1rem}.muxima-avatar-group-2xl ::ng-deep muxima-avatar{margin-left:-1.25rem}\n"] }]
131
+ }], propDecorators: { max: [{
132
+ type: Input
133
+ }], size: [{
134
+ type: Input
135
+ }], totalCount: [{
136
+ type: Input
137
+ }] } });
138
+
139
+ /**
140
+ * Generated bundle index. Do not edit.
141
+ */
142
+
143
+ export { AvatarAvatarComponent, AvatarGroupComponent };
144
+ //# sourceMappingURL=muxima-ui-avatar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muxima-ui-avatar.mjs","sources":["../../../../components/avatar/avatar/src/lib/avatar-avatar/avatar-avatar.component.ts","../../../../components/avatar/avatar/src/lib/avatar-avatar/avatar-avatar.component.html","../../../../components/avatar/avatar/src/lib/avatar-group/avatar-group.component.ts","../../../../components/avatar/avatar/src/muxima-ui-avatar.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\ntype AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\ntype AvatarStatus = 'online' | 'offline' | 'away' | 'busy' | 'none';\ntype AvatarShape = 'circle' | 'square' | 'rounded';\n\n@Component({\n selector: 'muxima-avatar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './avatar-avatar.component.html',\n styleUrls: ['./avatar-avatar.component.scss'],\n})\nexport class AvatarAvatarComponent {\n @Input() src?: string;\n @Input() alt: string = 'Avatar';\n @Input() name?: string;\n @Input() size: AvatarSize = 'md';\n @Input() status: AvatarStatus = 'none';\n @Input() badge?: string | number;\n @Input() shape: AvatarShape = 'circle';\n @Input() bgColor?: string;\n @Input() clickable: boolean = false;\n @Input() tooltip?: string;\n \n @Output() avatarClick = new EventEmitter<MouseEvent>();\n \n imageError = false;\n showTooltip = false;\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n if (this.clickable) {\n this.avatarClick.emit(event);\n }\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.tooltip) {\n this.showTooltip = true;\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.showTooltip = false;\n }\n\n getInitials(): string {\n if (!this.name) return '?';\n const names = this.name.trim().split(' ');\n if (names.length === 1) return names[0].charAt(0).toUpperCase();\n return (names[0].charAt(0) + names[names.length - 1].charAt(0)).toUpperCase();\n }\n\n onImageError(): void {\n this.imageError = true;\n }\n\n getRandomColor(): string {\n if (this.bgColor) return this.bgColor;\n // Cores inspiradas no logo Muxima - Gradiente azul para rosa\n const muximaColors = [\n '#3B82F6', // Azul vibrante\n '#6366F1', // Índigo\n '#8B5CF6', // Roxo\n '#A855F7', // Púrpura\n '#C026D3', // Fúcsia\n '#D946EF', // Rosa magenta\n ];\n const hash = this.name ? this.name.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0) : 0;\n return muximaColors[hash % muximaColors.length];\n }\n\n getTooltipText(): string {\n return this.tooltip || this.name || this.alt;\n }\n}\n","<div \n class=\"muxima-avatar\" \n [ngClass]=\"[\n 'muxima-avatar-' + size,\n 'muxima-avatar-' + shape,\n clickable ? 'muxima-avatar-clickable' : ''\n ]\">\n <!-- Imagem -->\n <img \n *ngIf=\"src && !imageError\" \n [src]=\"src\" \n [alt]=\"alt\"\n (error)=\"onImageError()\"\n class=\"muxima-avatar-image\">\n \n <!-- Iniciais -->\n <div \n *ngIf=\"!src || imageError\" \n class=\"muxima-avatar-initials\"\n [style.background]=\"getRandomColor()\">\n {{ getInitials() }}\n </div>\n\n <!-- Status Badge -->\n <span \n *ngIf=\"status !== 'none'\" \n class=\"muxima-avatar-status\"\n [ngClass]=\"'muxima-avatar-status-' + status\">\n </span>\n\n <!-- Notification Badge -->\n <span \n *ngIf=\"badge !== undefined\" \n class=\"muxima-avatar-badge\">\n {{ badge }}\n </span>\n\n <!-- Tooltip -->\n <div \n *ngIf=\"showTooltip && (tooltip || name)\" \n class=\"muxima-avatar-tooltip\">\n {{ getTooltipText() }}\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'muxima-avatar-group',\r\n standalone: true,\r\n imports: [CommonModule],\r\n template: `\r\n <div class=\"muxima-avatar-group\" [ngClass]=\"'muxima-avatar-group-' + size\">\r\n <ng-content></ng-content>\r\n <div *ngIf=\"max && max < totalCount\" \r\n class=\"muxima-avatar muxima-avatar-more\"\r\n [ngClass]=\"'muxima-avatar-' + size\">\r\n <div class=\"muxima-avatar-initials\">\r\n +{{ totalCount - max }}\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .muxima-avatar-group {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n\r\n ::ng-deep muxima-avatar {\r\n margin-left: -0.5rem;\r\n transition: all 0.2s;\r\n position: relative;\r\n\r\n &:first-child {\r\n margin-left: 0;\r\n }\r\n\r\n &:hover {\r\n transform: translateY(-4px);\r\n z-index: 10;\r\n }\r\n }\r\n\r\n .muxima-avatar-more {\r\n background: linear-gradient(135deg, #64748B, #475569);\r\n cursor: pointer;\r\n\r\n &:hover {\r\n transform: translateY(-4px) scale(1.05);\r\n }\r\n }\r\n }\r\n\r\n .muxima-avatar-group-xs ::ng-deep muxima-avatar {\r\n margin-left: -0.375rem;\r\n }\r\n\r\n .muxima-avatar-group-sm ::ng-deep muxima-avatar {\r\n margin-left: -0.5rem;\r\n }\r\n\r\n .muxima-avatar-group-md ::ng-deep muxima-avatar {\r\n margin-left: -0.625rem;\r\n }\r\n\r\n .muxima-avatar-group-lg ::ng-deep muxima-avatar {\r\n margin-left: -0.75rem;\r\n }\r\n\r\n .muxima-avatar-group-xl ::ng-deep muxima-avatar {\r\n margin-left: -1rem;\r\n }\r\n\r\n .muxima-avatar-group-2xl ::ng-deep muxima-avatar {\r\n margin-left: -1.25rem;\r\n }\r\n `]\r\n})\r\nexport class AvatarGroupComponent {\r\n @Input() max?: number;\r\n @Input() size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' = 'md';\r\n @Input() totalCount: number = 0;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Component, Input, Output, HostListener } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+
6
+ class AvatarAvatarComponent {
7
+ constructor() {
8
+ this.alt = 'Avatar';
9
+ this.size = 'md';
10
+ this.status = 'none';
11
+ this.shape = 'circle';
12
+ this.clickable = false;
13
+ this.avatarClick = new EventEmitter();
14
+ this.imageError = false;
15
+ this.showTooltip = false;
16
+ }
17
+ onClick(event) {
18
+ if (this.clickable) {
19
+ this.avatarClick.emit(event);
20
+ }
21
+ }
22
+ onMouseEnter() {
23
+ if (this.tooltip) {
24
+ this.showTooltip = true;
25
+ }
26
+ }
27
+ onMouseLeave() {
28
+ this.showTooltip = false;
29
+ }
30
+ getInitials() {
31
+ if (!this.name)
32
+ return '?';
33
+ const names = this.name.trim().split(' ');
34
+ if (names.length === 1)
35
+ return names[0].charAt(0).toUpperCase();
36
+ return (names[0].charAt(0) + names[names.length - 1].charAt(0)).toUpperCase();
37
+ }
38
+ onImageError() {
39
+ this.imageError = true;
40
+ }
41
+ getRandomColor() {
42
+ if (this.bgColor)
43
+ return this.bgColor;
44
+ // Cores inspiradas no logo Muxima - Gradiente azul para rosa
45
+ const muximaColors = [
46
+ '#3B82F6',
47
+ '#6366F1',
48
+ '#8B5CF6',
49
+ '#A855F7',
50
+ '#C026D3',
51
+ '#D946EF', // Rosa magenta
52
+ ];
53
+ const hash = this.name ? this.name.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0) : 0;
54
+ return muximaColors[hash % muximaColors.length];
55
+ }
56
+ getTooltipText() {
57
+ return this.tooltip || this.name || this.alt;
58
+ }
59
+ }
60
+ AvatarAvatarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
61
+ AvatarAvatarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AvatarAvatarComponent, isStandalone: true, selector: "muxima-avatar", inputs: { src: "src", alt: "alt", name: "name", size: "size", status: "status", badge: "badge", shape: "shape", bgColor: "bgColor", clickable: "clickable", tooltip: "tooltip" }, outputs: { avatarClick: "avatarClick" }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0, template: "<div \n class=\"muxima-avatar\" \n [ngClass]=\"[\n 'muxima-avatar-' + size,\n 'muxima-avatar-' + shape,\n clickable ? 'muxima-avatar-clickable' : ''\n ]\">\n <!-- Imagem -->\n <img \n *ngIf=\"src && !imageError\" \n [src]=\"src\" \n [alt]=\"alt\"\n (error)=\"onImageError()\"\n class=\"muxima-avatar-image\">\n \n <!-- Iniciais -->\n <div \n *ngIf=\"!src || imageError\" \n class=\"muxima-avatar-initials\"\n [style.background]=\"getRandomColor()\">\n {{ getInitials() }}\n </div>\n\n <!-- Status Badge -->\n <span \n *ngIf=\"status !== 'none'\" \n class=\"muxima-avatar-status\"\n [ngClass]=\"'muxima-avatar-status-' + status\">\n </span>\n\n <!-- Notification Badge -->\n <span \n *ngIf=\"badge !== undefined\" \n class=\"muxima-avatar-badge\">\n {{ badge }}\n </span>\n\n <!-- Tooltip -->\n <div \n *ngIf=\"showTooltip && (tooltip || name)\" \n class=\"muxima-avatar-tooltip\">\n {{ getTooltipText() }}\n </div>\n</div>\n", styles: [".muxima-avatar-container{position:relative;display:inline-flex;align-items:center;justify-content:center}.muxima-avatar{position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;background:linear-gradient(135deg,#3B82F6,#6366F1,#8B5CF6);color:#fff;font-weight:600;-webkit-user-select:none;user-select:none;flex-shrink:0;border:3px solid white;box-shadow:0 4px 6px #00000012,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a;transition:all .3s cubic-bezier(.4,0,.2,1)}.muxima-avatar:before{content:\"\";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.2) 0%,transparent 50%,rgba(0,0,0,.1) 100%);pointer-events:none}.muxima-avatar:hover{transform:scale(1.05);box-shadow:0 10px 15px #0000001a,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a}.muxima-avatar img{width:100%;height:100%;object-fit:cover;position:relative;z-index:1}.muxima-avatar .muxima-avatar-initials{font-size:inherit;line-height:1;text-transform:uppercase;position:relative;z-index:1;text-shadow:0 1px 2px rgba(0,0,0,.2)}.muxima-avatar-circle{border-radius:9999px}.muxima-avatar-square{border-radius:.375rem}.muxima-avatar-rounded{border-radius:.75rem}.muxima-avatar-xs{width:1.5rem;height:1.5rem;font-size:.625rem;border-width:2px}.muxima-avatar-sm{width:2rem;height:2rem;font-size:.75rem;border-width:2px}.muxima-avatar-md{width:2.5rem;height:2.5rem;font-size:.875rem;border-width:2.5px}.muxima-avatar-lg{width:3rem;height:3rem;font-size:1rem;border-width:3px}.muxima-avatar-xl{width:4rem;height:4rem;font-size:1.25rem;border-width:3px}.muxima-avatar-2xl{width:5rem;height:5rem;font-size:1.5rem;border-width:4px}.muxima-avatar-status{position:absolute;bottom:0;right:0;border-radius:50%;border:2.5px solid white;box-shadow:0 2px 4px #00000026,0 1px 2px #0000001a;z-index:2;transition:transform .2s ease}.muxima-avatar-status.muxima-avatar-status-online{background:linear-gradient(135deg,#10B981,#059669);animation:pulse-status 2s cubic-bezier(.4,0,.6,1) infinite}.muxima-avatar-status.muxima-avatar-status-offline{background:linear-gradient(135deg,#94A3B8,#64748B)}.muxima-avatar-status.muxima-avatar-status-away{background:linear-gradient(135deg,#F59E0B,#D97706)}.muxima-avatar-status.muxima-avatar-status-busy{background:linear-gradient(135deg,#EF4444,#DC2626)}.muxima-avatar-xs .muxima-avatar-status{width:.375rem;height:.375rem;bottom:-1px;right:-1px;border-width:1.5px}.muxima-avatar-sm .muxima-avatar-status{width:.5rem;height:.5rem;bottom:-1px;right:-1px;border-width:2px}.muxima-avatar-md .muxima-avatar-status{width:.625rem;height:.625rem;bottom:0;right:0;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-status{width:.75rem;height:.75rem;bottom:1px;right:1px;border-width:2.5px}.muxima-avatar-xl .muxima-avatar-status{width:1rem;height:1rem;bottom:2px;right:2px;border-width:3px}.muxima-avatar-2xl .muxima-avatar-status{width:1.25rem;height:1.25rem;bottom:3px;right:3px;border-width:3px}@keyframes pulse-status{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}.muxima-avatar-badge{position:absolute;top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#EF4444 0%,#DC2626 100%);color:#fff;font-size:.75rem;font-weight:700;line-height:1;border-radius:9999px;border:3px solid white;box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d;z-index:3;animation:bounce-in .3s cubic-bezier(.68,-.55,.265,1.55),badge-pulse 2s ease-in-out infinite;transition:transform .2s ease}.muxima-avatar-badge:hover{transform:scale(1.15);animation:none}.muxima-avatar-xs .muxima-avatar-badge{top:-4px;right:-4px;min-width:1rem;height:1rem;padding:0 .3rem;font-size:.5rem;border-width:2px}.muxima-avatar-sm .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.125rem;height:1.125rem;padding:0 .35rem;font-size:.6rem;border-width:2px}.muxima-avatar-md .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.25rem;height:1.25rem;padding:0 .4rem;font-size:.65rem;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-badge{top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;font-size:.75rem;border-width:3px}.muxima-avatar-xl .muxima-avatar-badge{top:-8px;right:-8px;min-width:1.875rem;height:1.875rem;padding:0 .6rem;font-size:.875rem;border-width:3px}.muxima-avatar-2xl .muxima-avatar-badge{top:-10px;right:-10px;min-width:2.25rem;height:2.25rem;padding:0 .75rem;font-size:1rem;border-width:4px}@keyframes bounce-in{0%{transform:scale(0);opacity:0}50%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}@keyframes badge-pulse{0%,to{box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d}50%{box-shadow:0 4px 16px #ef4444b3,0 2px 6px #0006}}.muxima-avatar-clickable{cursor:pointer}.muxima-avatar-clickable:active{transform:scale(.95)}.muxima-avatar-tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);padding:.5rem .75rem;background:rgba(0,0,0,.9);color:#fff;font-size:.75rem;font-weight:500;line-height:1.2;border-radius:.375rem;white-space:nowrap;z-index:50;pointer-events:none;animation:tooltip-fade-in .2s ease;box-shadow:0 4px 6px #0000001a}.muxima-avatar-tooltip:after{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:#000000e6}@keyframes tooltip-fade-in{0%{opacity:0;transform:translate(-50%) translateY(-4px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.muxima-avatar-group{display:flex;align-items:center}.muxima-avatar-group .muxima-avatar-container{margin-left:-.5rem;transition:all .2s}.muxima-avatar-group .muxima-avatar-container:first-child{margin-left:0}.muxima-avatar-group .muxima-avatar-container:hover{transform:translateY(-4px);z-index:10}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarAvatarComponent, decorators: [{
63
+ type: Component,
64
+ args: [{ selector: 'muxima-avatar', standalone: true, imports: [CommonModule], template: "<div \n class=\"muxima-avatar\" \n [ngClass]=\"[\n 'muxima-avatar-' + size,\n 'muxima-avatar-' + shape,\n clickable ? 'muxima-avatar-clickable' : ''\n ]\">\n <!-- Imagem -->\n <img \n *ngIf=\"src && !imageError\" \n [src]=\"src\" \n [alt]=\"alt\"\n (error)=\"onImageError()\"\n class=\"muxima-avatar-image\">\n \n <!-- Iniciais -->\n <div \n *ngIf=\"!src || imageError\" \n class=\"muxima-avatar-initials\"\n [style.background]=\"getRandomColor()\">\n {{ getInitials() }}\n </div>\n\n <!-- Status Badge -->\n <span \n *ngIf=\"status !== 'none'\" \n class=\"muxima-avatar-status\"\n [ngClass]=\"'muxima-avatar-status-' + status\">\n </span>\n\n <!-- Notification Badge -->\n <span \n *ngIf=\"badge !== undefined\" \n class=\"muxima-avatar-badge\">\n {{ badge }}\n </span>\n\n <!-- Tooltip -->\n <div \n *ngIf=\"showTooltip && (tooltip || name)\" \n class=\"muxima-avatar-tooltip\">\n {{ getTooltipText() }}\n </div>\n</div>\n", styles: [".muxima-avatar-container{position:relative;display:inline-flex;align-items:center;justify-content:center}.muxima-avatar{position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;background:linear-gradient(135deg,#3B82F6,#6366F1,#8B5CF6);color:#fff;font-weight:600;-webkit-user-select:none;user-select:none;flex-shrink:0;border:3px solid white;box-shadow:0 4px 6px #00000012,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a;transition:all .3s cubic-bezier(.4,0,.2,1)}.muxima-avatar:before{content:\"\";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.2) 0%,transparent 50%,rgba(0,0,0,.1) 100%);pointer-events:none}.muxima-avatar:hover{transform:scale(1.05);box-shadow:0 10px 15px #0000001a,0 0 0 1px #0000000d,inset 0 -2px 4px #0000001a}.muxima-avatar img{width:100%;height:100%;object-fit:cover;position:relative;z-index:1}.muxima-avatar .muxima-avatar-initials{font-size:inherit;line-height:1;text-transform:uppercase;position:relative;z-index:1;text-shadow:0 1px 2px rgba(0,0,0,.2)}.muxima-avatar-circle{border-radius:9999px}.muxima-avatar-square{border-radius:.375rem}.muxima-avatar-rounded{border-radius:.75rem}.muxima-avatar-xs{width:1.5rem;height:1.5rem;font-size:.625rem;border-width:2px}.muxima-avatar-sm{width:2rem;height:2rem;font-size:.75rem;border-width:2px}.muxima-avatar-md{width:2.5rem;height:2.5rem;font-size:.875rem;border-width:2.5px}.muxima-avatar-lg{width:3rem;height:3rem;font-size:1rem;border-width:3px}.muxima-avatar-xl{width:4rem;height:4rem;font-size:1.25rem;border-width:3px}.muxima-avatar-2xl{width:5rem;height:5rem;font-size:1.5rem;border-width:4px}.muxima-avatar-status{position:absolute;bottom:0;right:0;border-radius:50%;border:2.5px solid white;box-shadow:0 2px 4px #00000026,0 1px 2px #0000001a;z-index:2;transition:transform .2s ease}.muxima-avatar-status.muxima-avatar-status-online{background:linear-gradient(135deg,#10B981,#059669);animation:pulse-status 2s cubic-bezier(.4,0,.6,1) infinite}.muxima-avatar-status.muxima-avatar-status-offline{background:linear-gradient(135deg,#94A3B8,#64748B)}.muxima-avatar-status.muxima-avatar-status-away{background:linear-gradient(135deg,#F59E0B,#D97706)}.muxima-avatar-status.muxima-avatar-status-busy{background:linear-gradient(135deg,#EF4444,#DC2626)}.muxima-avatar-xs .muxima-avatar-status{width:.375rem;height:.375rem;bottom:-1px;right:-1px;border-width:1.5px}.muxima-avatar-sm .muxima-avatar-status{width:.5rem;height:.5rem;bottom:-1px;right:-1px;border-width:2px}.muxima-avatar-md .muxima-avatar-status{width:.625rem;height:.625rem;bottom:0;right:0;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-status{width:.75rem;height:.75rem;bottom:1px;right:1px;border-width:2.5px}.muxima-avatar-xl .muxima-avatar-status{width:1rem;height:1rem;bottom:2px;right:2px;border-width:3px}.muxima-avatar-2xl .muxima-avatar-status{width:1.25rem;height:1.25rem;bottom:3px;right:3px;border-width:3px}@keyframes pulse-status{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}.muxima-avatar-badge{position:absolute;top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#EF4444 0%,#DC2626 100%);color:#fff;font-size:.75rem;font-weight:700;line-height:1;border-radius:9999px;border:3px solid white;box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d;z-index:3;animation:bounce-in .3s cubic-bezier(.68,-.55,.265,1.55),badge-pulse 2s ease-in-out infinite;transition:transform .2s ease}.muxima-avatar-badge:hover{transform:scale(1.15);animation:none}.muxima-avatar-xs .muxima-avatar-badge{top:-4px;right:-4px;min-width:1rem;height:1rem;padding:0 .3rem;font-size:.5rem;border-width:2px}.muxima-avatar-sm .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.125rem;height:1.125rem;padding:0 .35rem;font-size:.6rem;border-width:2px}.muxima-avatar-md .muxima-avatar-badge{top:-5px;right:-5px;min-width:1.25rem;height:1.25rem;padding:0 .4rem;font-size:.65rem;border-width:2.5px}.muxima-avatar-lg .muxima-avatar-badge{top:-6px;right:-6px;min-width:1.5rem;height:1.5rem;padding:0 .5rem;font-size:.75rem;border-width:3px}.muxima-avatar-xl .muxima-avatar-badge{top:-8px;right:-8px;min-width:1.875rem;height:1.875rem;padding:0 .6rem;font-size:.875rem;border-width:3px}.muxima-avatar-2xl .muxima-avatar-badge{top:-10px;right:-10px;min-width:2.25rem;height:2.25rem;padding:0 .75rem;font-size:1rem;border-width:4px}@keyframes bounce-in{0%{transform:scale(0);opacity:0}50%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}@keyframes badge-pulse{0%,to{box-shadow:0 4px 12px #ef444480,0 2px 4px #0000004d}50%{box-shadow:0 4px 16px #ef4444b3,0 2px 6px #0006}}.muxima-avatar-clickable{cursor:pointer}.muxima-avatar-clickable:active{transform:scale(.95)}.muxima-avatar-tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);padding:.5rem .75rem;background:rgba(0,0,0,.9);color:#fff;font-size:.75rem;font-weight:500;line-height:1.2;border-radius:.375rem;white-space:nowrap;z-index:50;pointer-events:none;animation:tooltip-fade-in .2s ease;box-shadow:0 4px 6px #0000001a}.muxima-avatar-tooltip:after{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:#000000e6}@keyframes tooltip-fade-in{0%{opacity:0;transform:translate(-50%) translateY(-4px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.muxima-avatar-group{display:flex;align-items:center}.muxima-avatar-group .muxima-avatar-container{margin-left:-.5rem;transition:all .2s}.muxima-avatar-group .muxima-avatar-container:first-child{margin-left:0}.muxima-avatar-group .muxima-avatar-container:hover{transform:translateY(-4px);z-index:10}\n"] }]
65
+ }], propDecorators: { src: [{
66
+ type: Input
67
+ }], alt: [{
68
+ type: Input
69
+ }], name: [{
70
+ type: Input
71
+ }], size: [{
72
+ type: Input
73
+ }], status: [{
74
+ type: Input
75
+ }], badge: [{
76
+ type: Input
77
+ }], shape: [{
78
+ type: Input
79
+ }], bgColor: [{
80
+ type: Input
81
+ }], clickable: [{
82
+ type: Input
83
+ }], tooltip: [{
84
+ type: Input
85
+ }], avatarClick: [{
86
+ type: Output
87
+ }], onClick: [{
88
+ type: HostListener,
89
+ args: ['click', ['$event']]
90
+ }], onMouseEnter: [{
91
+ type: HostListener,
92
+ args: ['mouseenter']
93
+ }], onMouseLeave: [{
94
+ type: HostListener,
95
+ args: ['mouseleave']
96
+ }] } });
97
+
98
+ class AvatarGroupComponent {
99
+ constructor() {
100
+ this.size = 'md';
101
+ this.totalCount = 0;
102
+ }
103
+ }
104
+ AvatarGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
105
+ AvatarGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AvatarGroupComponent, isStandalone: true, selector: "muxima-avatar-group", inputs: { max: "max", size: "size", totalCount: "totalCount" }, ngImport: i0, template: `
106
+ <div class="muxima-avatar-group" [ngClass]="'muxima-avatar-group-' + size">
107
+ <ng-content></ng-content>
108
+ <div *ngIf="max && max < totalCount"
109
+ class="muxima-avatar muxima-avatar-more"
110
+ [ngClass]="'muxima-avatar-' + size">
111
+ <div class="muxima-avatar-initials">
112
+ +{{ totalCount - max }}
113
+ </div>
114
+ </div>
115
+ </div>
116
+ `, isInline: true, styles: [".muxima-avatar-group{display:flex;align-items:center;position:relative;::ng-deep muxima-avatar {margin-left: -.5rem; transition: all .2s; position: relative; &:first-child {margin-left: 0;} &:hover {transform: translateY(-4px); z-index: 10;}} .muxima-avatar-more {background: linear-gradient(135deg,#64748B,#475569); cursor: pointer; &:hover {transform: translateY(-4px) scale(1.05);}}}.muxima-avatar-group-xs ::ng-deep muxima-avatar{margin-left:-.375rem}.muxima-avatar-group-sm ::ng-deep muxima-avatar{margin-left:-.5rem}.muxima-avatar-group-md ::ng-deep muxima-avatar{margin-left:-.625rem}.muxima-avatar-group-lg ::ng-deep muxima-avatar{margin-left:-.75rem}.muxima-avatar-group-xl ::ng-deep muxima-avatar{margin-left:-1rem}.muxima-avatar-group-2xl ::ng-deep muxima-avatar{margin-left:-1.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AvatarGroupComponent, decorators: [{
118
+ type: Component,
119
+ args: [{ selector: 'muxima-avatar-group', standalone: true, imports: [CommonModule], template: `
120
+ <div class="muxima-avatar-group" [ngClass]="'muxima-avatar-group-' + size">
121
+ <ng-content></ng-content>
122
+ <div *ngIf="max && max < totalCount"
123
+ class="muxima-avatar muxima-avatar-more"
124
+ [ngClass]="'muxima-avatar-' + size">
125
+ <div class="muxima-avatar-initials">
126
+ +{{ totalCount - max }}
127
+ </div>
128
+ </div>
129
+ </div>
130
+ `, styles: [".muxima-avatar-group{display:flex;align-items:center;position:relative;::ng-deep muxima-avatar {margin-left: -.5rem; transition: all .2s; position: relative; &:first-child {margin-left: 0;} &:hover {transform: translateY(-4px); z-index: 10;}} .muxima-avatar-more {background: linear-gradient(135deg,#64748B,#475569); cursor: pointer; &:hover {transform: translateY(-4px) scale(1.05);}}}.muxima-avatar-group-xs ::ng-deep muxima-avatar{margin-left:-.375rem}.muxima-avatar-group-sm ::ng-deep muxima-avatar{margin-left:-.5rem}.muxima-avatar-group-md ::ng-deep muxima-avatar{margin-left:-.625rem}.muxima-avatar-group-lg ::ng-deep muxima-avatar{margin-left:-.75rem}.muxima-avatar-group-xl ::ng-deep muxima-avatar{margin-left:-1rem}.muxima-avatar-group-2xl ::ng-deep muxima-avatar{margin-left:-1.25rem}\n"] }]
131
+ }], propDecorators: { max: [{
132
+ type: Input
133
+ }], size: [{
134
+ type: Input
135
+ }], totalCount: [{
136
+ type: Input
137
+ }] } });
138
+
139
+ /**
140
+ * Generated bundle index. Do not edit.
141
+ */
142
+
143
+ export { AvatarAvatarComponent, AvatarGroupComponent };
144
+ //# sourceMappingURL=muxima-ui-avatar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muxima-ui-avatar.mjs","sources":["../../../../components/avatar/avatar/src/lib/avatar-avatar/avatar-avatar.component.ts","../../../../components/avatar/avatar/src/lib/avatar-avatar/avatar-avatar.component.html","../../../../components/avatar/avatar/src/lib/avatar-group/avatar-group.component.ts","../../../../components/avatar/avatar/src/muxima-ui-avatar.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\ntype AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\ntype AvatarStatus = 'online' | 'offline' | 'away' | 'busy' | 'none';\ntype AvatarShape = 'circle' | 'square' | 'rounded';\n\n@Component({\n selector: 'muxima-avatar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './avatar-avatar.component.html',\n styleUrls: ['./avatar-avatar.component.scss'],\n})\nexport class AvatarAvatarComponent {\n @Input() src?: string;\n @Input() alt: string = 'Avatar';\n @Input() name?: string;\n @Input() size: AvatarSize = 'md';\n @Input() status: AvatarStatus = 'none';\n @Input() badge?: string | number;\n @Input() shape: AvatarShape = 'circle';\n @Input() bgColor?: string;\n @Input() clickable: boolean = false;\n @Input() tooltip?: string;\n \n @Output() avatarClick = new EventEmitter<MouseEvent>();\n \n imageError = false;\n showTooltip = false;\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n if (this.clickable) {\n this.avatarClick.emit(event);\n }\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.tooltip) {\n this.showTooltip = true;\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.showTooltip = false;\n }\n\n getInitials(): string {\n if (!this.name) return '?';\n const names = this.name.trim().split(' ');\n if (names.length === 1) return names[0].charAt(0).toUpperCase();\n return (names[0].charAt(0) + names[names.length - 1].charAt(0)).toUpperCase();\n }\n\n onImageError(): void {\n this.imageError = true;\n }\n\n getRandomColor(): string {\n if (this.bgColor) return this.bgColor;\n // Cores inspiradas no logo Muxima - Gradiente azul para rosa\n const muximaColors = [\n '#3B82F6', // Azul vibrante\n '#6366F1', // Índigo\n '#8B5CF6', // Roxo\n '#A855F7', // Púrpura\n '#C026D3', // Fúcsia\n '#D946EF', // Rosa magenta\n ];\n const hash = this.name ? this.name.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0) : 0;\n return muximaColors[hash % muximaColors.length];\n }\n\n getTooltipText(): string {\n return this.tooltip || this.name || this.alt;\n }\n}\n","<div \n class=\"muxima-avatar\" \n [ngClass]=\"[\n 'muxima-avatar-' + size,\n 'muxima-avatar-' + shape,\n clickable ? 'muxima-avatar-clickable' : ''\n ]\">\n <!-- Imagem -->\n <img \n *ngIf=\"src && !imageError\" \n [src]=\"src\" \n [alt]=\"alt\"\n (error)=\"onImageError()\"\n class=\"muxima-avatar-image\">\n \n <!-- Iniciais -->\n <div \n *ngIf=\"!src || imageError\" \n class=\"muxima-avatar-initials\"\n [style.background]=\"getRandomColor()\">\n {{ getInitials() }}\n </div>\n\n <!-- Status Badge -->\n <span \n *ngIf=\"status !== 'none'\" \n class=\"muxima-avatar-status\"\n [ngClass]=\"'muxima-avatar-status-' + status\">\n </span>\n\n <!-- Notification Badge -->\n <span \n *ngIf=\"badge !== undefined\" \n class=\"muxima-avatar-badge\">\n {{ badge }}\n </span>\n\n <!-- Tooltip -->\n <div \n *ngIf=\"showTooltip && (tooltip || name)\" \n class=\"muxima-avatar-tooltip\">\n {{ getTooltipText() }}\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'muxima-avatar-group',\r\n standalone: true,\r\n imports: [CommonModule],\r\n template: `\r\n <div class=\"muxima-avatar-group\" [ngClass]=\"'muxima-avatar-group-' + size\">\r\n <ng-content></ng-content>\r\n <div *ngIf=\"max && max < totalCount\" \r\n class=\"muxima-avatar muxima-avatar-more\"\r\n [ngClass]=\"'muxima-avatar-' + size\">\r\n <div class=\"muxima-avatar-initials\">\r\n +{{ totalCount - max }}\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .muxima-avatar-group {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n\r\n ::ng-deep muxima-avatar {\r\n margin-left: -0.5rem;\r\n transition: all 0.2s;\r\n position: relative;\r\n\r\n &:first-child {\r\n margin-left: 0;\r\n }\r\n\r\n &:hover {\r\n transform: translateY(-4px);\r\n z-index: 10;\r\n }\r\n }\r\n\r\n .muxima-avatar-more {\r\n background: linear-gradient(135deg, #64748B, #475569);\r\n cursor: pointer;\r\n\r\n &:hover {\r\n transform: translateY(-4px) scale(1.05);\r\n }\r\n }\r\n }\r\n\r\n .muxima-avatar-group-xs ::ng-deep muxima-avatar {\r\n margin-left: -0.375rem;\r\n }\r\n\r\n .muxima-avatar-group-sm ::ng-deep muxima-avatar {\r\n margin-left: -0.5rem;\r\n }\r\n\r\n .muxima-avatar-group-md ::ng-deep muxima-avatar {\r\n margin-left: -0.625rem;\r\n }\r\n\r\n .muxima-avatar-group-lg ::ng-deep muxima-avatar {\r\n margin-left: -0.75rem;\r\n }\r\n\r\n .muxima-avatar-group-xl ::ng-deep muxima-avatar {\r\n margin-left: -1rem;\r\n }\r\n\r\n .muxima-avatar-group-2xl ::ng-deep muxima-avatar {\r\n margin-left: -1.25rem;\r\n }\r\n `]\r\n})\r\nexport class AvatarGroupComponent {\r\n @Input() max?: number;\r\n @Input() size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' = 'md';\r\n @Input() totalCount: number = 0;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './lib/avatar-avatar/avatar-avatar.component';
2
+ export * from './lib/avatar-group/avatar-group.component';
@@ -0,0 +1,30 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
4
+ type AvatarStatus = 'online' | 'offline' | 'away' | 'busy' | 'none';
5
+ type AvatarShape = 'circle' | 'square' | 'rounded';
6
+ export declare class AvatarAvatarComponent {
7
+ src?: string;
8
+ alt: string;
9
+ name?: string;
10
+ size: AvatarSize;
11
+ status: AvatarStatus;
12
+ badge?: string | number;
13
+ shape: AvatarShape;
14
+ bgColor?: string;
15
+ clickable: boolean;
16
+ tooltip?: string;
17
+ avatarClick: EventEmitter<MouseEvent>;
18
+ imageError: boolean;
19
+ showTooltip: boolean;
20
+ onClick(event: MouseEvent): void;
21
+ onMouseEnter(): void;
22
+ onMouseLeave(): void;
23
+ getInitials(): string;
24
+ onImageError(): void;
25
+ getRandomColor(): string;
26
+ getTooltipText(): string;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<AvatarAvatarComponent, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<AvatarAvatarComponent, "muxima-avatar", never, { "src": "src"; "alt": "alt"; "name": "name"; "size": "size"; "status": "status"; "badge": "badge"; "shape": "shape"; "bgColor": "bgColor"; "clickable": "clickable"; "tooltip": "tooltip"; }, { "avatarClick": "avatarClick"; }, never, never, true, never>;
29
+ }
30
+ export {};
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class AvatarGroupComponent {
3
+ max?: number;
4
+ size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
5
+ totalCount: number;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<AvatarGroupComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<AvatarGroupComponent, "muxima-avatar-group", never, { "max": "max"; "size": "size"; "totalCount": "totalCount"; }, {}, never, ["*"], true, never>;
8
+ }
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@muxima-ui/avatar",
3
+ "version": "1.0.0",
4
+ "description": "Avatar component for Angular 18+ - Muxima UI",
5
+ "keywords": [
6
+ "angular",
7
+ "avatar",
8
+ "profile",
9
+ "image",
10
+ "user",
11
+ "muxima-ui"
12
+ ],
13
+ "author": "Muxima UI Team (jokerscript)",
14
+ "license": "MIT",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/Aldemiro20/muxima-ui.git",
18
+ "directory": "packages/components/avatar/avatar"
19
+ },
20
+ "homepage": "https://muxima-ui.vercel.app/components/avatar",
21
+ "bugs": {
22
+ "url": "https://github.com/Aldemiro20/muxima-ui/issues"
23
+ },
24
+ "documentation": "https://muxima-ui.vercel.app",
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "peerDependencies": {
29
+ "@angular/common": "^18.0.0",
30
+ "@angular/core": "^18.0.0"
31
+ },
32
+ "dependencies": {
33
+ "tslib": "^2.3.0"
34
+ },
35
+ "sideEffects": false,
36
+ "module": "fesm2015/muxima-ui-avatar.mjs",
37
+ "es2020": "fesm2020/muxima-ui-avatar.mjs",
38
+ "esm2020": "esm2020/muxima-ui-avatar.mjs",
39
+ "fesm2020": "fesm2020/muxima-ui-avatar.mjs",
40
+ "fesm2015": "fesm2015/muxima-ui-avatar.mjs",
41
+ "typings": "index.d.ts",
42
+ "exports": {
43
+ "./package.json": {
44
+ "default": "./package.json"
45
+ },
46
+ ".": {
47
+ "types": "./index.d.ts",
48
+ "esm2020": "./esm2020/muxima-ui-avatar.mjs",
49
+ "es2020": "./fesm2020/muxima-ui-avatar.mjs",
50
+ "es2015": "./fesm2015/muxima-ui-avatar.mjs",
51
+ "node": "./fesm2015/muxima-ui-avatar.mjs",
52
+ "default": "./fesm2020/muxima-ui-avatar.mjs"
53
+ }
54
+ }
55
+ }