@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 +7 -0
- package/esm2020/index.mjs +3 -0
- package/esm2020/lib/avatar-avatar/avatar-avatar.component.mjs +96 -0
- package/esm2020/lib/avatar-group/avatar-group.component.mjs +45 -0
- package/esm2020/muxima-ui-avatar.mjs +5 -0
- package/fesm2015/muxima-ui-avatar.mjs +144 -0
- package/fesm2015/muxima-ui-avatar.mjs.map +1 -0
- package/fesm2020/muxima-ui-avatar.mjs +144 -0
- package/fesm2020/muxima-ui-avatar.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/lib/avatar-avatar/avatar-avatar.component.d.ts +30 -0
- package/lib/avatar-group/avatar-group.component.d.ts +8 -0
- package/package.json +55 -0
package/README.md
ADDED
|
@@ -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":";;;;;MAca,qBAAqB,CAAA;AAPlC,IAAA,WAAA,GAAA;AASW,QAAA,IAAG,CAAA,GAAA,GAAW,QAAQ,CAAC;AAEvB,QAAA,IAAI,CAAA,IAAA,GAAe,IAAI,CAAC;AACxB,QAAA,IAAM,CAAA,MAAA,GAAiB,MAAM,CAAC;AAE9B,QAAA,IAAK,CAAA,KAAA,GAAgB,QAAQ,CAAC;AAE9B,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAG1B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAc,CAAC;AAEvD,QAAA,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AACnB,QAAA,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;KAkDrB;AA/CC,IAAA,OAAO,CAAC,KAAiB,EAAA;QACvB,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAA;KACF;IAGD,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACzB,SAAA;KACF;IAGD,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;IAED,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,GAAG,CAAC;AAC3B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1C,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAChE,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;KAC/E;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB;IAED,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;;AAEtC,QAAA,MAAM,YAAY,GAAG;YACnB,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;AACT,YAAA,SAAS;SACV,CAAC;AACF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACpG,OAAO,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;KACjD;IAED,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC;KAC9C;;mHAhEU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdlC,++BA4CA,EAAA,MAAA,EAAA,CAAA,6lLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlCY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,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;4FAIX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACb,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,++BAAA,EAAA,MAAA,EAAA,CAAA,6lLAAA,CAAA,EAAA,CAAA;8BAKd,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAMP,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAQjC,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,YAAY,CAAA;gBAQ1B,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,YAAY,CAAA;;;ME8Bf,oBAAoB,CAAA;AAxEjC,IAAA,WAAA,GAAA;AA0EW,QAAA,IAAI,CAAA,IAAA,GAA6C,IAAI,CAAC;AACtD,QAAA,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;KACjC;;kHAJY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EApErB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;AAWT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+xBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAZS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,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;4FAqEX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAxEhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EACb,QAAA,EAAA,CAAA;;;;;;;;;;;AAWT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+xBAAA,CAAA,EAAA,CAAA;8BA0DQ,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;;;AC9ER;;AAEG;;;;"}
|
|
@@ -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,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
|
+
}
|