@shival99/z-ui 2.5.7 → 2.5.9
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/fesm2022/shival99-z-ui-components-z-autocomplete.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-avatar.mjs +45 -10
- package/fesm2022/shival99-z-ui-components-z-avatar.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-badge.mjs +94 -0
- package/fesm2022/shival99-z-ui-components-z-badge.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs +9 -4
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-editor.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-editor.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-gallery.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-gallery.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-input.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-input.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-kanban.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-kanban.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-menu.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-modal.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-modal.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-popover.mjs +49 -0
- package/fesm2022/shival99-z-ui-components-z-popover.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-select.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-steps.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-steps.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-table.mjs +3 -3
- package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-tags.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-tags.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-tooltip.mjs +10 -4
- package/fesm2022/shival99-z-ui-components-z-tooltip.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-upload.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-upload.mjs.map +1 -1
- package/package.json +5 -1
- package/types/shival99-z-ui-components-z-autocomplete.d.ts +1 -1
- package/types/shival99-z-ui-components-z-avatar.d.ts +10 -2
- package/types/shival99-z-ui-components-z-badge.d.ts +50 -0
- package/types/shival99-z-ui-components-z-calendar.d.ts +5 -5
- package/types/shival99-z-ui-components-z-editor.d.ts +1 -1
- package/types/shival99-z-ui-components-z-modal.d.ts +1 -1
- package/types/shival99-z-ui-components-z-popover.d.ts +2 -0
- package/types/shival99-z-ui-components-z-select.d.ts +2 -2
- package/types/shival99-z-ui-components-z-table.d.ts +1 -1
- package/types/shival99-z-ui-components-z-tooltip.d.ts +2 -1
- package/types/shival99-z-ui-components-z-upload.d.ts +3 -3
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, signal, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { input, signal, computed, ViewEncapsulation, ChangeDetectionStrategy, Component, contentChild, TemplateRef } from '@angular/core';
|
|
3
3
|
import { ZIconComponent } from '@shival99/z-ui/components/z-icon';
|
|
4
4
|
import { zTransform, zMergeClasses } from '@shival99/z-ui/utils';
|
|
5
5
|
import { cva } from 'class-variance-authority';
|
|
6
|
+
import { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';
|
|
7
|
+
|
|
8
|
+
const Z_AVATAR_RANDOM_COLOR_CLASSES = [
|
|
9
|
+
'z-avatar-random-color z-avatar-random-color--0',
|
|
10
|
+
'z-avatar-random-color z-avatar-random-color--1',
|
|
11
|
+
'z-avatar-random-color z-avatar-random-color--2',
|
|
12
|
+
'z-avatar-random-color z-avatar-random-color--3',
|
|
13
|
+
'z-avatar-random-color z-avatar-random-color--4',
|
|
14
|
+
'z-avatar-random-color z-avatar-random-color--5',
|
|
15
|
+
'z-avatar-random-color z-avatar-random-color--6',
|
|
16
|
+
'z-avatar-random-color z-avatar-random-color--7',
|
|
17
|
+
'z-avatar-random-color z-avatar-random-color--8',
|
|
18
|
+
'z-avatar-random-color z-avatar-random-color--9',
|
|
19
|
+
'z-avatar-random-color z-avatar-random-color--10',
|
|
20
|
+
'z-avatar-random-color z-avatar-random-color--11',
|
|
21
|
+
'z-avatar-random-color z-avatar-random-color--12',
|
|
22
|
+
'z-avatar-random-color z-avatar-random-color--13',
|
|
23
|
+
'z-avatar-random-color z-avatar-random-color--14',
|
|
24
|
+
];
|
|
25
|
+
const getAvatarRandomColorClasses = (seed) => {
|
|
26
|
+
let hash = 0;
|
|
27
|
+
for (const character of seed) {
|
|
28
|
+
hash = (hash * 31 + character.charCodeAt(0)) | 0;
|
|
29
|
+
}
|
|
30
|
+
return Z_AVATAR_RANDOM_COLOR_CLASSES[(hash >>> 0) % Z_AVATAR_RANDOM_COLOR_CLASSES.length];
|
|
31
|
+
};
|
|
6
32
|
|
|
7
33
|
const zAvatarVariants = cva([
|
|
8
34
|
'inline-flex shrink-0 items-center justify-center overflow-hidden border font-semibold select-none',
|
|
@@ -126,13 +152,14 @@ class ZAvatarComponent {
|
|
|
126
152
|
zShowLabel = input(false, { ...(ngDevMode ? { debugName: "zShowLabel" } : /* istanbul ignore next */ {}), transform: zTransform });
|
|
127
153
|
zStatusAnimated = input(false, { ...(ngDevMode ? { debugName: "zStatusAnimated" } : /* istanbul ignore next */ {}), transform: zTransform });
|
|
128
154
|
zInteractive = input(false, { ...(ngDevMode ? { debugName: "zInteractive" } : /* istanbul ignore next */ {}), transform: zTransform });
|
|
155
|
+
zRandomColor = input(false, { ...(ngDevMode ? { debugName: "zRandomColor" } : /* istanbul ignore next */ {}), transform: zTransform });
|
|
129
156
|
zDescription = input('', /* @ts-ignore */
|
|
130
157
|
...(ngDevMode ? [{ debugName: "zDescription" }] : /* istanbul ignore next */ []));
|
|
131
158
|
imageFailed = signal(false, /* @ts-ignore */
|
|
132
159
|
...(ngDevMode ? [{ debugName: "imageFailed" }] : /* istanbul ignore next */ []));
|
|
133
160
|
hostClasses = computed(() => zMergeClasses(this.zShowLabel() ? 'inline-flex items-center gap-3' : 'inline-flex', 'relative', this.zInteractive() ? 'z-avatar--interactive hover:z-10' : '', this.class()), /* @ts-ignore */
|
|
134
161
|
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
135
|
-
avatarClasses = computed(() => zAvatarVariants({ zSize: this.zSize(), zShape: this.zShape(), zRing: this.zRing() }), /* @ts-ignore */
|
|
162
|
+
avatarClasses = computed(() => zMergeClasses(zAvatarVariants({ zSize: this.zSize(), zShape: this.zShape(), zRing: this.zRing() }), this.zRandomColor() ? getAvatarRandomColorClasses(this.zName()) : ''), /* @ts-ignore */
|
|
136
163
|
...(ngDevMode ? [{ debugName: "avatarClasses" }] : /* istanbul ignore next */ []));
|
|
137
164
|
imageClasses = computed(() => zAvatarImageVariants({ zShape: this.zShape() }), /* @ts-ignore */
|
|
138
165
|
...(ngDevMode ? [{ debugName: "imageClasses" }] : /* istanbul ignore next */ []));
|
|
@@ -170,14 +197,14 @@ class ZAvatarComponent {
|
|
|
170
197
|
this.imageFailed.set(true);
|
|
171
198
|
}
|
|
172
199
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
173
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: ZAvatarComponent, isStandalone: true, selector: "z-avatar", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zSrc: { classPropertyName: "zSrc", publicName: "zSrc", isSignal: true, isRequired: false, transformFunction: null }, zName: { classPropertyName: "zName", publicName: "zName", isSignal: true, isRequired: false, transformFunction: null }, zAlt: { classPropertyName: "zAlt", publicName: "zAlt", isSignal: true, isRequired: false, transformFunction: null }, zIcon: { classPropertyName: "zIcon", publicName: "zIcon", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zShape: { classPropertyName: "zShape", publicName: "zShape", isSignal: true, isRequired: false, transformFunction: null }, zStatus: { classPropertyName: "zStatus", publicName: "zStatus", isSignal: true, isRequired: false, transformFunction: null }, zRing: { classPropertyName: "zRing", publicName: "zRing", isSignal: true, isRequired: false, transformFunction: null }, zFallback: { classPropertyName: "zFallback", publicName: "zFallback", isSignal: true, isRequired: false, transformFunction: null }, zShowLabel: { classPropertyName: "zShowLabel", publicName: "zShowLabel", isSignal: true, isRequired: false, transformFunction: null }, zStatusAnimated: { classPropertyName: "zStatusAnimated", publicName: "zStatusAnimated", isSignal: true, isRequired: false, transformFunction: null }, zInteractive: { classPropertyName: "zInteractive", publicName: "zInteractive", isSignal: true, isRequired: false, transformFunction: null }, zDescription: { classPropertyName: "zDescription", publicName: "zDescription", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: "<span class=\"relative inline-flex shrink-0 overflow-visible\">\n <span [class]=\"avatarClasses()\">\n @if (shouldShowImage()) {\n <img [src]=\"zSrc()\" [alt]=\"altText()\" [class]=\"imageClasses()\" (error)=\"onImageError()\" />\n } @else if (zFallback() === 'initials' && initials()) {\n <span>{{ initials() }}</span>\n } @else {\n <z-icon [zType]=\"zIcon()\" [zSize]=\"iconSize()\" />\n }\n </span>\n\n @if (zStatus()) {\n <span [class]=\"statusClasses()\" aria-hidden=\"true\"></span>\n }\n</span>\n\n@if (zShowLabel()) {\n <span [class]=\"labelClasses()\">\n <span class=\"text-foreground block overflow-hidden font-medium text-ellipsis whitespace-nowrap\">{{ zName() }}</span>\n @if (zDescription()) {\n <span class=\"text-muted-foreground block overflow-hidden text-xs text-ellipsis whitespace-nowrap\">\n {{ zDescription() }}\n </span>\n }\n </span>\n}\n", styles: [".z-avatar-status--animated:before{position:absolute;inset:-3px;border-radius:9999px;background:currentColor;content:\"\";opacity:.26;animation:z-avatar-status-soft-pulse 1.9s ease-out infinite}.z-avatar--interactive>span:first-child>span:first-child{transition:box-shadow .42s cubic-bezier(.16,1,.3,1),transform .42s cubic-bezier(.16,1,.3,1);will-change:transform}.z-avatar--interactive:hover>span:first-child>span:first-child{box-shadow:0 0 0 1px #0000000a,0 5px 14px #00000014;transform:translateY(-2px) scale(1.025)}@keyframes z-avatar-status-soft-pulse{0%{opacity:.22;transform:scale(.82)}70%{opacity:0;transform:scale(1.55)}to{opacity:0;transform:scale(1.55)}}\n"], dependencies: [{ kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zAnimatedType", "zAnimate", "zAnimationTrigger", "zSize", "zStrokeWidth", "zSvg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
200
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: ZAvatarComponent, isStandalone: true, selector: "z-avatar", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zSrc: { classPropertyName: "zSrc", publicName: "zSrc", isSignal: true, isRequired: false, transformFunction: null }, zName: { classPropertyName: "zName", publicName: "zName", isSignal: true, isRequired: false, transformFunction: null }, zAlt: { classPropertyName: "zAlt", publicName: "zAlt", isSignal: true, isRequired: false, transformFunction: null }, zIcon: { classPropertyName: "zIcon", publicName: "zIcon", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zShape: { classPropertyName: "zShape", publicName: "zShape", isSignal: true, isRequired: false, transformFunction: null }, zStatus: { classPropertyName: "zStatus", publicName: "zStatus", isSignal: true, isRequired: false, transformFunction: null }, zRing: { classPropertyName: "zRing", publicName: "zRing", isSignal: true, isRequired: false, transformFunction: null }, zFallback: { classPropertyName: "zFallback", publicName: "zFallback", isSignal: true, isRequired: false, transformFunction: null }, zShowLabel: { classPropertyName: "zShowLabel", publicName: "zShowLabel", isSignal: true, isRequired: false, transformFunction: null }, zStatusAnimated: { classPropertyName: "zStatusAnimated", publicName: "zStatusAnimated", isSignal: true, isRequired: false, transformFunction: null }, zInteractive: { classPropertyName: "zInteractive", publicName: "zInteractive", isSignal: true, isRequired: false, transformFunction: null }, zRandomColor: { classPropertyName: "zRandomColor", publicName: "zRandomColor", isSignal: true, isRequired: false, transformFunction: null }, zDescription: { classPropertyName: "zDescription", publicName: "zDescription", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: "<span class=\"relative inline-flex shrink-0 overflow-visible\">\n <span [class]=\"avatarClasses()\">\n @if (shouldShowImage()) {\n <img [src]=\"zSrc()\" [alt]=\"altText()\" [class]=\"imageClasses()\" (error)=\"onImageError()\" />\n } @else if (zFallback() === 'initials' && initials()) {\n <span>{{ initials() }}</span>\n } @else {\n <z-icon [zType]=\"zIcon()\" [zSize]=\"iconSize()\" />\n }\n </span>\n\n @if (zStatus()) {\n <span [class]=\"statusClasses()\" aria-hidden=\"true\"></span>\n }\n</span>\n\n@if (zShowLabel()) {\n <span [class]=\"labelClasses()\">\n <span class=\"text-foreground block overflow-hidden font-medium text-ellipsis whitespace-nowrap\">{{ zName() }}</span>\n @if (zDescription()) {\n <span class=\"text-muted-foreground block overflow-hidden text-xs text-ellipsis whitespace-nowrap\">\n {{ zDescription() }}\n </span>\n }\n </span>\n}\n", styles: [".z-avatar-status--animated:before{position:absolute;inset:-3px;border-radius:9999px;background:currentColor;content:\"\";opacity:.26;animation:z-avatar-status-soft-pulse 1.9s ease-out infinite}.z-avatar--interactive>span:first-child>span:first-child{transition:box-shadow .42s cubic-bezier(.16,1,.3,1),transform .42s cubic-bezier(.16,1,.3,1);will-change:transform}.z-avatar--interactive:hover>span:first-child>span:first-child{box-shadow:0 0 0 1px #0000000a,0 5px 14px #00000014;transform:translateY(-2px) scale(1.025)}.z-avatar-group-item{--z-avatar-group-separator: var(--background);position:relative;z-index:0;transition:transform .18s ease}:root.dark .z-avatar-group-item{--z-avatar-group-separator: color-mix(in oklab, var(--foreground) 38%, var(--background))}.z-avatar-group-item>span:first-child>span:first-child,.z-avatar-group-overflow-item{box-shadow:0 0 0 3px var(--z-avatar-group-separator),0 2px 6px color-mix(in oklab,var(--foreground) 10%,transparent)}.z-avatar-group-item:hover{z-index:1;transform:translateY(-2px)}.z-avatar-random-color{--z-avatar-random-hue: 0;background-color:hsl(from var(--primary) calc(h + var(--z-avatar-random-hue)) 72% 82%);color:hsl(from var(--primary) calc(h + var(--z-avatar-random-hue)) 64% 27%)}.z-avatar-random-color--0{--z-avatar-random-hue: 0}.z-avatar-random-color--1{--z-avatar-random-hue: 30}.z-avatar-random-color--2{--z-avatar-random-hue: -28}.z-avatar-random-color--3{--z-avatar-random-hue: 62}.z-avatar-random-color--4{--z-avatar-random-hue: 108}.z-avatar-random-color--5{--z-avatar-random-hue: -60}.z-avatar-random-color--6{--z-avatar-random-hue: 144}.z-avatar-random-color--7{--z-avatar-random-hue: 178}.z-avatar-random-color--8{--z-avatar-random-hue: -92}.z-avatar-random-color--9{--z-avatar-random-hue: 220}.z-avatar-random-color--10{--z-avatar-random-hue: -124}.z-avatar-random-color--11{--z-avatar-random-hue: 252}.z-avatar-random-color--12{--z-avatar-random-hue: -150}.z-avatar-random-color--13{--z-avatar-random-hue: 288}.z-avatar-random-color--14{--z-avatar-random-hue: -178}@keyframes z-avatar-status-soft-pulse{0%{opacity:.22;transform:scale(.82)}70%{opacity:0;transform:scale(1.55)}to{opacity:0;transform:scale(1.55)}}\n"], dependencies: [{ kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zAnimatedType", "zAnimate", "zAnimationTrigger", "zSize", "zStrokeWidth", "zSvg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
174
201
|
}
|
|
175
202
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZAvatarComponent, decorators: [{
|
|
176
203
|
type: Component,
|
|
177
204
|
args: [{ selector: 'z-avatar', imports: [ZIconComponent], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
178
205
|
'[class]': 'hostClasses()',
|
|
179
|
-
}, template: "<span class=\"relative inline-flex shrink-0 overflow-visible\">\n <span [class]=\"avatarClasses()\">\n @if (shouldShowImage()) {\n <img [src]=\"zSrc()\" [alt]=\"altText()\" [class]=\"imageClasses()\" (error)=\"onImageError()\" />\n } @else if (zFallback() === 'initials' && initials()) {\n <span>{{ initials() }}</span>\n } @else {\n <z-icon [zType]=\"zIcon()\" [zSize]=\"iconSize()\" />\n }\n </span>\n\n @if (zStatus()) {\n <span [class]=\"statusClasses()\" aria-hidden=\"true\"></span>\n }\n</span>\n\n@if (zShowLabel()) {\n <span [class]=\"labelClasses()\">\n <span class=\"text-foreground block overflow-hidden font-medium text-ellipsis whitespace-nowrap\">{{ zName() }}</span>\n @if (zDescription()) {\n <span class=\"text-muted-foreground block overflow-hidden text-xs text-ellipsis whitespace-nowrap\">\n {{ zDescription() }}\n </span>\n }\n </span>\n}\n", styles: [".z-avatar-status--animated:before{position:absolute;inset:-3px;border-radius:9999px;background:currentColor;content:\"\";opacity:.26;animation:z-avatar-status-soft-pulse 1.9s ease-out infinite}.z-avatar--interactive>span:first-child>span:first-child{transition:box-shadow .42s cubic-bezier(.16,1,.3,1),transform .42s cubic-bezier(.16,1,.3,1);will-change:transform}.z-avatar--interactive:hover>span:first-child>span:first-child{box-shadow:0 0 0 1px #0000000a,0 5px 14px #00000014;transform:translateY(-2px) scale(1.025)}@keyframes z-avatar-status-soft-pulse{0%{opacity:.22;transform:scale(.82)}70%{opacity:0;transform:scale(1.55)}to{opacity:0;transform:scale(1.55)}}\n"] }]
|
|
180
|
-
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSrc", required: false }] }], zName: [{ type: i0.Input, args: [{ isSignal: true, alias: "zName", required: false }] }], zAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "zAlt", required: false }] }], zIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIcon", required: false }] }], zSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSize", required: false }] }], zShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShape", required: false }] }], zStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "zStatus", required: false }] }], zRing: [{ type: i0.Input, args: [{ isSignal: true, alias: "zRing", required: false }] }], zFallback: [{ type: i0.Input, args: [{ isSignal: true, alias: "zFallback", required: false }] }], zShowLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShowLabel", required: false }] }], zStatusAnimated: [{ type: i0.Input, args: [{ isSignal: true, alias: "zStatusAnimated", required: false }] }], zInteractive: [{ type: i0.Input, args: [{ isSignal: true, alias: "zInteractive", required: false }] }], zDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDescription", required: false }] }] } });
|
|
206
|
+
}, template: "<span class=\"relative inline-flex shrink-0 overflow-visible\">\n <span [class]=\"avatarClasses()\">\n @if (shouldShowImage()) {\n <img [src]=\"zSrc()\" [alt]=\"altText()\" [class]=\"imageClasses()\" (error)=\"onImageError()\" />\n } @else if (zFallback() === 'initials' && initials()) {\n <span>{{ initials() }}</span>\n } @else {\n <z-icon [zType]=\"zIcon()\" [zSize]=\"iconSize()\" />\n }\n </span>\n\n @if (zStatus()) {\n <span [class]=\"statusClasses()\" aria-hidden=\"true\"></span>\n }\n</span>\n\n@if (zShowLabel()) {\n <span [class]=\"labelClasses()\">\n <span class=\"text-foreground block overflow-hidden font-medium text-ellipsis whitespace-nowrap\">{{ zName() }}</span>\n @if (zDescription()) {\n <span class=\"text-muted-foreground block overflow-hidden text-xs text-ellipsis whitespace-nowrap\">\n {{ zDescription() }}\n </span>\n }\n </span>\n}\n", styles: [".z-avatar-status--animated:before{position:absolute;inset:-3px;border-radius:9999px;background:currentColor;content:\"\";opacity:.26;animation:z-avatar-status-soft-pulse 1.9s ease-out infinite}.z-avatar--interactive>span:first-child>span:first-child{transition:box-shadow .42s cubic-bezier(.16,1,.3,1),transform .42s cubic-bezier(.16,1,.3,1);will-change:transform}.z-avatar--interactive:hover>span:first-child>span:first-child{box-shadow:0 0 0 1px #0000000a,0 5px 14px #00000014;transform:translateY(-2px) scale(1.025)}.z-avatar-group-item{--z-avatar-group-separator: var(--background);position:relative;z-index:0;transition:transform .18s ease}:root.dark .z-avatar-group-item{--z-avatar-group-separator: color-mix(in oklab, var(--foreground) 38%, var(--background))}.z-avatar-group-item>span:first-child>span:first-child,.z-avatar-group-overflow-item{box-shadow:0 0 0 3px var(--z-avatar-group-separator),0 2px 6px color-mix(in oklab,var(--foreground) 10%,transparent)}.z-avatar-group-item:hover{z-index:1;transform:translateY(-2px)}.z-avatar-random-color{--z-avatar-random-hue: 0;background-color:hsl(from var(--primary) calc(h + var(--z-avatar-random-hue)) 72% 82%);color:hsl(from var(--primary) calc(h + var(--z-avatar-random-hue)) 64% 27%)}.z-avatar-random-color--0{--z-avatar-random-hue: 0}.z-avatar-random-color--1{--z-avatar-random-hue: 30}.z-avatar-random-color--2{--z-avatar-random-hue: -28}.z-avatar-random-color--3{--z-avatar-random-hue: 62}.z-avatar-random-color--4{--z-avatar-random-hue: 108}.z-avatar-random-color--5{--z-avatar-random-hue: -60}.z-avatar-random-color--6{--z-avatar-random-hue: 144}.z-avatar-random-color--7{--z-avatar-random-hue: 178}.z-avatar-random-color--8{--z-avatar-random-hue: -92}.z-avatar-random-color--9{--z-avatar-random-hue: 220}.z-avatar-random-color--10{--z-avatar-random-hue: -124}.z-avatar-random-color--11{--z-avatar-random-hue: 252}.z-avatar-random-color--12{--z-avatar-random-hue: -150}.z-avatar-random-color--13{--z-avatar-random-hue: 288}.z-avatar-random-color--14{--z-avatar-random-hue: -178}@keyframes z-avatar-status-soft-pulse{0%{opacity:.22;transform:scale(.82)}70%{opacity:0;transform:scale(1.55)}to{opacity:0;transform:scale(1.55)}}\n"] }]
|
|
207
|
+
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSrc", required: false }] }], zName: [{ type: i0.Input, args: [{ isSignal: true, alias: "zName", required: false }] }], zAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "zAlt", required: false }] }], zIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIcon", required: false }] }], zSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSize", required: false }] }], zShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShape", required: false }] }], zStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "zStatus", required: false }] }], zRing: [{ type: i0.Input, args: [{ isSignal: true, alias: "zRing", required: false }] }], zFallback: [{ type: i0.Input, args: [{ isSignal: true, alias: "zFallback", required: false }] }], zShowLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShowLabel", required: false }] }], zStatusAnimated: [{ type: i0.Input, args: [{ isSignal: true, alias: "zStatusAnimated", required: false }] }], zInteractive: [{ type: i0.Input, args: [{ isSignal: true, alias: "zInteractive", required: false }] }], zRandomColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "zRandomColor", required: false }] }], zDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDescription", required: false }] }] } });
|
|
181
208
|
|
|
182
209
|
class ZAvatarGroupComponent {
|
|
183
210
|
class = input('', /* @ts-ignore */
|
|
@@ -192,23 +219,31 @@ class ZAvatarGroupComponent {
|
|
|
192
219
|
...(ngDevMode ? [{ debugName: "zShape" }] : /* istanbul ignore next */ []));
|
|
193
220
|
zRing = input('muted', /* @ts-ignore */
|
|
194
221
|
...(ngDevMode ? [{ debugName: "zRing" }] : /* istanbul ignore next */ []));
|
|
222
|
+
zRandomColor = input(false, { ...(ngDevMode ? { debugName: "zRandomColor" } : /* istanbul ignore next */ {}), transform: zTransform });
|
|
223
|
+
zTooltip = input(false, { ...(ngDevMode ? { debugName: "zTooltip" } : /* istanbul ignore next */ {}), transform: zTransform });
|
|
224
|
+
zTooltipTemplate = input(/* @ts-ignore */
|
|
225
|
+
...(ngDevMode ? [undefined, { debugName: "zTooltipTemplate" }] : /* istanbul ignore next */ []));
|
|
226
|
+
projectedTooltipTemplate = contentChild(TemplateRef, /* @ts-ignore */
|
|
227
|
+
...(ngDevMode ? [{ debugName: "projectedTooltipTemplate" }] : /* istanbul ignore next */ []));
|
|
228
|
+
tooltipTemplate = computed(() => this.zTooltipTemplate() ?? this.projectedTooltipTemplate(), /* @ts-ignore */
|
|
229
|
+
...(ngDevMode ? [{ debugName: "tooltipTemplate" }] : /* istanbul ignore next */ []));
|
|
195
230
|
hostClasses = computed(() => zMergeClasses(zAvatarGroupVariants({ zSize: this.zSize() }), this.class()), /* @ts-ignore */
|
|
196
231
|
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
197
232
|
visibleItems = computed(() => this.zItems().slice(0, Math.max(0, this.zMax())), /* @ts-ignore */
|
|
198
233
|
...(ngDevMode ? [{ debugName: "visibleItems" }] : /* istanbul ignore next */ []));
|
|
199
234
|
overflowCount = computed(() => Math.max(0, this.zItems().length - this.visibleItems().length), /* @ts-ignore */
|
|
200
235
|
...(ngDevMode ? [{ debugName: "overflowCount" }] : /* istanbul ignore next */ []));
|
|
201
|
-
overflowClasses = computed(() => zAvatarVariants({ zSize: this.zSize(), zShape: this.zShape(), zRing:
|
|
236
|
+
overflowClasses = computed(() => zMergeClasses(zAvatarVariants({ zSize: this.zSize(), zShape: this.zShape(), zRing: this.zRing() }), 'z-avatar-group-item z-avatar-group-overflow-item'), /* @ts-ignore */
|
|
202
237
|
...(ngDevMode ? [{ debugName: "overflowClasses" }] : /* istanbul ignore next */ []));
|
|
203
238
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZAvatarGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
204
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: ZAvatarGroupComponent, isStandalone: true, selector: "z-avatar-group", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zItems: { classPropertyName: "zItems", publicName: "zItems", isSignal: true, isRequired: false, transformFunction: null }, zMax: { classPropertyName: "zMax", publicName: "zMax", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zShape: { classPropertyName: "zShape", publicName: "zShape", isSignal: true, isRequired: false, transformFunction: null }, zRing: { classPropertyName: "zRing", publicName: "zRing", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: "@for (item of visibleItems(); track item.id) {\n <z-avatar\n [zSrc]=\"item.src ?? ''\"\n [zName]=\"item.name\"\n [zAlt]=\"item.alt ?? item.name\"\n [zIcon]=\"item.icon ?? 'lucideUser'\"\n [zStatus]=\"item.status\"\n [zSize]=\"zSize()\"\n [zShape]=\"zShape()\"\n [zRing]=\"zRing()\"\n [
|
|
239
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: ZAvatarGroupComponent, isStandalone: true, selector: "z-avatar-group", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zItems: { classPropertyName: "zItems", publicName: "zItems", isSignal: true, isRequired: false, transformFunction: null }, zMax: { classPropertyName: "zMax", publicName: "zMax", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zShape: { classPropertyName: "zShape", publicName: "zShape", isSignal: true, isRequired: false, transformFunction: null }, zRing: { classPropertyName: "zRing", publicName: "zRing", isSignal: true, isRequired: false, transformFunction: null }, zRandomColor: { classPropertyName: "zRandomColor", publicName: "zRandomColor", isSignal: true, isRequired: false, transformFunction: null }, zTooltip: { classPropertyName: "zTooltip", publicName: "zTooltip", isSignal: true, isRequired: false, transformFunction: null }, zTooltipTemplate: { classPropertyName: "zTooltipTemplate", publicName: "zTooltipTemplate", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, queries: [{ propertyName: "projectedTooltipTemplate", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-content />\n\n@for (item of visibleItems(); track item.id) {\n <ng-template #avatarTooltip>\n <div class=\"flex flex-col gap-0.5\">\n <strong class=\"text-sm\">{{ item.name }}</strong>\n <span class=\"text-xs opacity-80\">{{ item.email }}</span>\n </div>\n </ng-template>\n\n <z-avatar\n [zContent]=\"zTooltip() && (item.email || tooltipTemplate()) ? (tooltipTemplate() ?? avatarTooltip) : ''\"\n [zContext]=\"item\"\n z-tooltip\n [zSrc]=\"item.src ?? ''\"\n [zName]=\"item.name\"\n [zAlt]=\"item.alt ?? item.name\"\n [zIcon]=\"item.icon ?? 'lucideUser'\"\n [zStatus]=\"item.status\"\n [zSize]=\"zSize()\"\n [zShape]=\"zShape()\"\n [zRing]=\"zRing()\"\n [zRandomColor]=\"zRandomColor()\"\n class=\"z-avatar-group-item\"\n [zAlwaysShow]=\"zTooltip()\" />\n}\n\n@if (overflowCount() > 0) {\n <span [class]=\"overflowClasses()\">+{{ overflowCount() }}</span>\n}\n", styles: [":host>z-avatar,:host>span:last-child{position:relative;z-index:0}:host>z-avatar:hover,:host>span:last-child:hover{z-index:1}\n"], dependencies: [{ kind: "component", type: ZAvatarComponent, selector: "z-avatar", inputs: ["class", "zSrc", "zName", "zAlt", "zIcon", "zSize", "zShape", "zStatus", "zRing", "zFallback", "zShowLabel", "zStatusAnimated", "zInteractive", "zRandomColor", "zDescription"] }, { kind: "directive", type: ZTooltipDirective, selector: "[z-tooltip], [zTooltip]", inputs: ["zContent", "zContext", "zPosition", "zTooltipPosition", "zTrigger", "zTooltipTrigger", "zTooltipType", "zTooltipSize", "zClass", "zTooltipClass", "zShowDelay", "zTooltipShowDelay", "zHideDelay", "zTooltipHideDelay", "zArrow", "zTooltipArrow", "zDisabled", "zTooltipDisabled", "zOffset", "zTooltipOffset", "zAutoDetect", "zTriggerElement", "zAlwaysShow", "zMaxWidth"], outputs: ["zShow", "zHide"], exportAs: ["zTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
205
240
|
}
|
|
206
241
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZAvatarGroupComponent, decorators: [{
|
|
207
242
|
type: Component,
|
|
208
|
-
args: [{ selector: 'z-avatar-group', imports: [ZAvatarComponent], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
243
|
+
args: [{ selector: 'z-avatar-group', imports: [ZAvatarComponent, ZTooltipDirective], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
209
244
|
'[class]': 'hostClasses()',
|
|
210
|
-
}, template: "@for (item of visibleItems(); track item.id) {\n <z-avatar\n [zSrc]=\"item.src ?? ''\"\n [zName]=\"item.name\"\n [zAlt]=\"item.alt ?? item.name\"\n [zIcon]=\"item.icon ?? 'lucideUser'\"\n [zStatus]=\"item.status\"\n [zSize]=\"zSize()\"\n [zShape]=\"zShape()\"\n [zRing]=\"zRing()\"\n [
|
|
211
|
-
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "zItems", required: false }] }], zMax: [{ type: i0.Input, args: [{ isSignal: true, alias: "zMax", required: false }] }], zSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSize", required: false }] }], zShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShape", required: false }] }], zRing: [{ type: i0.Input, args: [{ isSignal: true, alias: "zRing", required: false }] }] } });
|
|
245
|
+
}, template: "<ng-content />\n\n@for (item of visibleItems(); track item.id) {\n <ng-template #avatarTooltip>\n <div class=\"flex flex-col gap-0.5\">\n <strong class=\"text-sm\">{{ item.name }}</strong>\n <span class=\"text-xs opacity-80\">{{ item.email }}</span>\n </div>\n </ng-template>\n\n <z-avatar\n [zContent]=\"zTooltip() && (item.email || tooltipTemplate()) ? (tooltipTemplate() ?? avatarTooltip) : ''\"\n [zContext]=\"item\"\n z-tooltip\n [zSrc]=\"item.src ?? ''\"\n [zName]=\"item.name\"\n [zAlt]=\"item.alt ?? item.name\"\n [zIcon]=\"item.icon ?? 'lucideUser'\"\n [zStatus]=\"item.status\"\n [zSize]=\"zSize()\"\n [zShape]=\"zShape()\"\n [zRing]=\"zRing()\"\n [zRandomColor]=\"zRandomColor()\"\n class=\"z-avatar-group-item\"\n [zAlwaysShow]=\"zTooltip()\" />\n}\n\n@if (overflowCount() > 0) {\n <span [class]=\"overflowClasses()\">+{{ overflowCount() }}</span>\n}\n", styles: [":host>z-avatar,:host>span:last-child{position:relative;z-index:0}:host>z-avatar:hover,:host>span:last-child:hover{z-index:1}\n"] }]
|
|
246
|
+
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "zItems", required: false }] }], zMax: [{ type: i0.Input, args: [{ isSignal: true, alias: "zMax", required: false }] }], zSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSize", required: false }] }], zShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShape", required: false }] }], zRing: [{ type: i0.Input, args: [{ isSignal: true, alias: "zRing", required: false }] }], zRandomColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "zRandomColor", required: false }] }], zTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "zTooltip", required: false }] }], zTooltipTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "zTooltipTemplate", required: false }] }], projectedTooltipTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
|
|
212
247
|
|
|
213
248
|
/**
|
|
214
249
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-avatar.mjs","sources":["../../../../libs/core-ui/components/z-avatar/z-avatar.variants.ts","../../../../libs/core-ui/components/z-avatar/z-avatar.component.ts","../../../../libs/core-ui/components/z-avatar/z-avatar.component.html","../../../../libs/core-ui/components/z-avatar/z-avatar-group.component.ts","../../../../libs/core-ui/components/z-avatar/z-avatar-group.component.html","../../../../libs/core-ui/components/z-avatar/shival99-z-ui-components-z-avatar.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zAvatarVariants = cva(\n [\n 'inline-flex shrink-0 items-center justify-center overflow-hidden border font-semibold select-none',\n 'shadow-[0_0_0_1px_rgb(0_0_0/0.03),0_2px_8px_rgb(0_0_0/0.04)]',\n 'bg-muted text-muted-foreground border-background',\n ],\n {\n variants: {\n zSize: {\n xs: 'size-6 text-[10px]',\n sm: 'size-8 text-xs',\n default: 'size-10 text-sm',\n lg: 'size-12 text-base',\n xl: 'size-16 text-xl',\n },\n zShape: {\n circle: 'rounded-full',\n rounded: 'rounded-md',\n square: 'rounded-sm',\n },\n zRing: {\n none: '',\n default: 'ring-2 ring-border ring-offset-2 ring-offset-background',\n active: 'ring-2 ring-primary ring-offset-2 ring-offset-background',\n muted: 'ring-2 ring-muted-foreground/25 ring-offset-2 ring-offset-background',\n },\n },\n defaultVariants: {\n zSize: 'default',\n zShape: 'circle',\n zRing: 'none',\n },\n }\n);\n\nexport const zAvatarImageVariants = cva('size-full object-cover', {\n variants: {\n zShape: {\n circle: 'rounded-full',\n rounded: 'rounded-md',\n square: 'rounded-none',\n },\n },\n defaultVariants: {\n zShape: 'circle',\n },\n});\n\nexport const zAvatarStatusVariants = cva(\n 'absolute rounded-full border-2 border-background bg-current shadow-[0_0_0_1px_rgb(0_0_0/0.04)]',\n {\n variants: {\n zSize: {\n xs: 'right-0 bottom-0 size-2',\n sm: 'right-0 bottom-0 size-2.5',\n default: 'right-0 bottom-0 size-3',\n lg: 'right-0 bottom-0 size-3.5',\n xl: 'right-0.5 bottom-0.5 size-4',\n },\n zStatus: {\n online: 'text-emerald-500',\n offline: 'text-muted-foreground',\n busy: 'text-destructive',\n away: 'text-amber-500',\n },\n zAnimated: {\n true: 'z-avatar-status--animated',\n false: '',\n },\n },\n defaultVariants: {\n zSize: 'default',\n zStatus: 'offline',\n zAnimated: false,\n },\n }\n);\n\nexport const zAvatarLabelVariants = cva('min-w-0', {\n variants: {\n zSize: {\n xs: 'text-xs',\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-sm',\n xl: 'text-base',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\nexport const zAvatarGroupVariants = cva('inline-flex items-center', {\n variants: {\n zSize: {\n xs: '-space-x-0.5',\n sm: '-space-x-1',\n default: '-space-x-1.5',\n lg: '-space-x-2',\n xl: '-space-x-2.5',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\nexport type ZAvatarVariants = VariantProps<typeof zAvatarVariants>;\nexport type ZAvatarStatusVariants = VariantProps<typeof zAvatarStatusVariants>;\nexport type ZAvatarGroupVariants = VariantProps<typeof zAvatarGroupVariants>;\n","import { ChangeDetectionStrategy, Component, computed, input, signal, ViewEncapsulation } from '@angular/core';\nimport { ZIconComponent, type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { zMergeClasses, zTransform } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport type { ZAvatarFallback, ZAvatarRing, ZAvatarShape, ZAvatarSize, ZAvatarStatus } from './z-avatar.types';\nimport {\n zAvatarImageVariants,\n zAvatarLabelVariants,\n zAvatarStatusVariants,\n zAvatarVariants,\n} from './z-avatar.variants';\n\n@Component({\n selector: 'z-avatar',\n imports: [ZIconComponent],\n standalone: true,\n templateUrl: './z-avatar.component.html',\n styleUrl: './z-avatar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZAvatarComponent {\n public readonly class = input<ClassValue>('');\n public readonly zSrc = input<string>('');\n public readonly zName = input<string>('');\n public readonly zAlt = input<string>('');\n public readonly zIcon = input<ZIcon>('lucideUser');\n public readonly zSize = input<ZAvatarSize>('default');\n public readonly zShape = input<ZAvatarShape>('circle');\n public readonly zStatus = input<ZAvatarStatus>();\n public readonly zRing = input<ZAvatarRing>('none');\n public readonly zFallback = input<ZAvatarFallback>('initials');\n public readonly zShowLabel = input(false, { transform: zTransform });\n public readonly zStatusAnimated = input(false, { transform: zTransform });\n public readonly zInteractive = input(false, { transform: zTransform });\n public readonly zDescription = input<string>('');\n\n protected readonly imageFailed = signal(false);\n\n protected readonly hostClasses = computed(() =>\n zMergeClasses(\n this.zShowLabel() ? 'inline-flex items-center gap-3' : 'inline-flex',\n 'relative',\n this.zInteractive() ? 'z-avatar--interactive hover:z-10' : '',\n this.class()\n )\n );\n\n protected readonly avatarClasses = computed(() =>\n zAvatarVariants({ zSize: this.zSize(), zShape: this.zShape(), zRing: this.zRing() })\n );\n\n protected readonly imageClasses = computed(() => zAvatarImageVariants({ zShape: this.zShape() }));\n protected readonly statusClasses = computed(() =>\n zAvatarStatusVariants({ zSize: this.zSize(), zStatus: this.zStatus(), zAnimated: this.zStatusAnimated() })\n );\n\n protected readonly labelClasses = computed(() => zAvatarLabelVariants({ zSize: this.zSize() }));\n\n protected readonly iconSize = computed(() => {\n const sizes: Record<ZAvatarSize, '12' | '14' | '16' | '18' | '24'> = {\n xs: '12',\n sm: '14',\n default: '16',\n lg: '18',\n xl: '24',\n };\n return sizes[this.zSize()];\n });\n\n protected readonly altText = computed(() => this.zAlt() || this.zName() || 'Avatar');\n protected readonly shouldShowImage = computed(() => !!this.zSrc() && !this.imageFailed());\n protected readonly initials = computed(() => {\n const name = this.zName().trim();\n if (!name) {\n return '';\n }\n\n const parts = name.split(/\\s+/).filter(Boolean);\n const first = parts[0]?.[0] ?? '';\n const last = parts.length > 1 ? (parts[parts.length - 1]?.[0] ?? '') : '';\n return `${first}${last}`.toUpperCase();\n });\n\n protected onImageError(): void {\n this.imageFailed.set(true);\n }\n}\n","<span class=\"relative inline-flex shrink-0 overflow-visible\">\n <span [class]=\"avatarClasses()\">\n @if (shouldShowImage()) {\n <img [src]=\"zSrc()\" [alt]=\"altText()\" [class]=\"imageClasses()\" (error)=\"onImageError()\" />\n } @else if (zFallback() === 'initials' && initials()) {\n <span>{{ initials() }}</span>\n } @else {\n <z-icon [zType]=\"zIcon()\" [zSize]=\"iconSize()\" />\n }\n </span>\n\n @if (zStatus()) {\n <span [class]=\"statusClasses()\" aria-hidden=\"true\"></span>\n }\n</span>\n\n@if (zShowLabel()) {\n <span [class]=\"labelClasses()\">\n <span class=\"text-foreground block overflow-hidden font-medium text-ellipsis whitespace-nowrap\">{{ zName() }}</span>\n @if (zDescription()) {\n <span class=\"text-muted-foreground block overflow-hidden text-xs text-ellipsis whitespace-nowrap\">\n {{ zDescription() }}\n </span>\n }\n </span>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { ZAvatarComponent } from './z-avatar.component';\nimport type { ZAvatarItem, ZAvatarRing, ZAvatarShape, ZAvatarSize } from './z-avatar.types';\nimport { zAvatarGroupVariants, zAvatarVariants } from './z-avatar.variants';\n\n@Component({\n selector: 'z-avatar-group',\n imports: [ZAvatarComponent],\n standalone: true,\n templateUrl: './z-avatar-group.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZAvatarGroupComponent {\n public readonly class = input<ClassValue>('');\n public readonly zItems = input<ZAvatarItem[]>([]);\n public readonly zMax = input(5);\n public readonly zSize = input<ZAvatarSize>('default');\n public readonly zShape = input<ZAvatarShape>('circle');\n public readonly zRing = input<ZAvatarRing>('muted');\n\n protected readonly hostClasses = computed(() =>\n zMergeClasses(zAvatarGroupVariants({ zSize: this.zSize() }), this.class())\n );\n\n protected readonly visibleItems = computed(() => this.zItems().slice(0, Math.max(0, this.zMax())));\n protected readonly overflowCount = computed(() => Math.max(0, this.zItems().length - this.visibleItems().length));\n protected readonly overflowClasses = computed(() =>\n zAvatarVariants({ zSize: this.zSize(), zShape: this.zShape(), zRing: 'none' })\n );\n}\n","@for (item of visibleItems(); track item.id) {\n <z-avatar\n [zSrc]=\"item.src ?? ''\"\n [zName]=\"item.name\"\n [zAlt]=\"item.alt ?? item.name\"\n [zIcon]=\"item.icon ?? 'lucideUser'\"\n [zStatus]=\"item.status\"\n [zSize]=\"zSize()\"\n [zShape]=\"zShape()\"\n [zRing]=\"zRing()\"\n [zInteractive]=\"true\" />\n}\n\n@if (overflowCount() > 0) {\n <span [class]=\"overflowClasses()\">+{{ overflowCount() }}</span>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shival99-z-ui-components-z-avatar.mjs","sources":["../../../../libs/core-ui/components/z-avatar/z-avatar.utils.ts","../../../../libs/core-ui/components/z-avatar/z-avatar.variants.ts","../../../../libs/core-ui/components/z-avatar/z-avatar.component.ts","../../../../libs/core-ui/components/z-avatar/z-avatar.component.html","../../../../libs/core-ui/components/z-avatar/z-avatar-group.component.ts","../../../../libs/core-ui/components/z-avatar/z-avatar-group.component.html","../../../../libs/core-ui/components/z-avatar/shival99-z-ui-components-z-avatar.ts"],"sourcesContent":["const Z_AVATAR_RANDOM_COLOR_CLASSES = [\n 'z-avatar-random-color z-avatar-random-color--0',\n 'z-avatar-random-color z-avatar-random-color--1',\n 'z-avatar-random-color z-avatar-random-color--2',\n 'z-avatar-random-color z-avatar-random-color--3',\n 'z-avatar-random-color z-avatar-random-color--4',\n 'z-avatar-random-color z-avatar-random-color--5',\n 'z-avatar-random-color z-avatar-random-color--6',\n 'z-avatar-random-color z-avatar-random-color--7',\n 'z-avatar-random-color z-avatar-random-color--8',\n 'z-avatar-random-color z-avatar-random-color--9',\n 'z-avatar-random-color z-avatar-random-color--10',\n 'z-avatar-random-color z-avatar-random-color--11',\n 'z-avatar-random-color z-avatar-random-color--12',\n 'z-avatar-random-color z-avatar-random-color--13',\n 'z-avatar-random-color z-avatar-random-color--14',\n] as const;\n\nexport const getAvatarRandomColorClasses = (seed: string): string => {\n let hash = 0;\n\n for (const character of seed) {\n hash = (hash * 31 + character.charCodeAt(0)) | 0;\n }\n\n return Z_AVATAR_RANDOM_COLOR_CLASSES[(hash >>> 0) % Z_AVATAR_RANDOM_COLOR_CLASSES.length];\n};\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zAvatarVariants = cva(\n [\n 'inline-flex shrink-0 items-center justify-center overflow-hidden border font-semibold select-none',\n 'shadow-[0_0_0_1px_rgb(0_0_0/0.03),0_2px_8px_rgb(0_0_0/0.04)]',\n 'bg-muted text-muted-foreground border-background',\n ],\n {\n variants: {\n zSize: {\n xs: 'size-6 text-[10px]',\n sm: 'size-8 text-xs',\n default: 'size-10 text-sm',\n lg: 'size-12 text-base',\n xl: 'size-16 text-xl',\n },\n zShape: {\n circle: 'rounded-full',\n rounded: 'rounded-md',\n square: 'rounded-sm',\n },\n zRing: {\n none: '',\n default: 'ring-2 ring-border ring-offset-2 ring-offset-background',\n active: 'ring-2 ring-primary ring-offset-2 ring-offset-background',\n muted: 'ring-2 ring-muted-foreground/25 ring-offset-2 ring-offset-background',\n },\n },\n defaultVariants: {\n zSize: 'default',\n zShape: 'circle',\n zRing: 'none',\n },\n }\n);\n\nexport const zAvatarImageVariants = cva('size-full object-cover', {\n variants: {\n zShape: {\n circle: 'rounded-full',\n rounded: 'rounded-md',\n square: 'rounded-none',\n },\n },\n defaultVariants: {\n zShape: 'circle',\n },\n});\n\nexport const zAvatarStatusVariants = cva(\n 'absolute rounded-full border-2 border-background bg-current shadow-[0_0_0_1px_rgb(0_0_0/0.04)]',\n {\n variants: {\n zSize: {\n xs: 'right-0 bottom-0 size-2',\n sm: 'right-0 bottom-0 size-2.5',\n default: 'right-0 bottom-0 size-3',\n lg: 'right-0 bottom-0 size-3.5',\n xl: 'right-0.5 bottom-0.5 size-4',\n },\n zStatus: {\n online: 'text-emerald-500',\n offline: 'text-muted-foreground',\n busy: 'text-destructive',\n away: 'text-amber-500',\n },\n zAnimated: {\n true: 'z-avatar-status--animated',\n false: '',\n },\n },\n defaultVariants: {\n zSize: 'default',\n zStatus: 'offline',\n zAnimated: false,\n },\n }\n);\n\nexport const zAvatarLabelVariants = cva('min-w-0', {\n variants: {\n zSize: {\n xs: 'text-xs',\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-sm',\n xl: 'text-base',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\nexport const zAvatarGroupVariants = cva('inline-flex items-center', {\n variants: {\n zSize: {\n xs: '-space-x-0.5',\n sm: '-space-x-1',\n default: '-space-x-1.5',\n lg: '-space-x-2',\n xl: '-space-x-2.5',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\nexport type ZAvatarVariants = VariantProps<typeof zAvatarVariants>;\nexport type ZAvatarStatusVariants = VariantProps<typeof zAvatarStatusVariants>;\nexport type ZAvatarGroupVariants = VariantProps<typeof zAvatarGroupVariants>;\n","import { ChangeDetectionStrategy, Component, computed, input, signal, ViewEncapsulation } from '@angular/core';\nimport { ZIconComponent, type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { zMergeClasses, zTransform } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport type { ZAvatarFallback, ZAvatarRing, ZAvatarShape, ZAvatarSize, ZAvatarStatus } from './z-avatar.types';\nimport { getAvatarRandomColorClasses } from './z-avatar.utils';\nimport {\n zAvatarImageVariants,\n zAvatarLabelVariants,\n zAvatarStatusVariants,\n zAvatarVariants,\n} from './z-avatar.variants';\n\n@Component({\n selector: 'z-avatar',\n imports: [ZIconComponent],\n standalone: true,\n templateUrl: './z-avatar.component.html',\n styleUrl: './z-avatar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZAvatarComponent {\n public readonly class = input<ClassValue>('');\n public readonly zSrc = input<string>('');\n public readonly zName = input<string>('');\n public readonly zAlt = input<string>('');\n public readonly zIcon = input<ZIcon>('lucideUser');\n public readonly zSize = input<ZAvatarSize>('default');\n public readonly zShape = input<ZAvatarShape>('circle');\n public readonly zStatus = input<ZAvatarStatus>();\n public readonly zRing = input<ZAvatarRing>('none');\n public readonly zFallback = input<ZAvatarFallback>('initials');\n public readonly zShowLabel = input(false, { transform: zTransform });\n public readonly zStatusAnimated = input(false, { transform: zTransform });\n public readonly zInteractive = input(false, { transform: zTransform });\n public readonly zRandomColor = input(false, { transform: zTransform });\n public readonly zDescription = input<string>('');\n\n protected readonly imageFailed = signal(false);\n\n protected readonly hostClasses = computed(() =>\n zMergeClasses(\n this.zShowLabel() ? 'inline-flex items-center gap-3' : 'inline-flex',\n 'relative',\n this.zInteractive() ? 'z-avatar--interactive hover:z-10' : '',\n this.class()\n )\n );\n\n protected readonly avatarClasses = computed(() =>\n zMergeClasses(\n zAvatarVariants({ zSize: this.zSize(), zShape: this.zShape(), zRing: this.zRing() }),\n this.zRandomColor() ? getAvatarRandomColorClasses(this.zName()) : ''\n )\n );\n\n protected readonly imageClasses = computed(() => zAvatarImageVariants({ zShape: this.zShape() }));\n protected readonly statusClasses = computed(() =>\n zAvatarStatusVariants({ zSize: this.zSize(), zStatus: this.zStatus(), zAnimated: this.zStatusAnimated() })\n );\n\n protected readonly labelClasses = computed(() => zAvatarLabelVariants({ zSize: this.zSize() }));\n\n protected readonly iconSize = computed(() => {\n const sizes: Record<ZAvatarSize, '12' | '14' | '16' | '18' | '24'> = {\n xs: '12',\n sm: '14',\n default: '16',\n lg: '18',\n xl: '24',\n };\n return sizes[this.zSize()];\n });\n\n protected readonly altText = computed(() => this.zAlt() || this.zName() || 'Avatar');\n protected readonly shouldShowImage = computed(() => !!this.zSrc() && !this.imageFailed());\n protected readonly initials = computed(() => {\n const name = this.zName().trim();\n if (!name) {\n return '';\n }\n\n const parts = name.split(/\\s+/).filter(Boolean);\n const first = parts[0]?.[0] ?? '';\n const last = parts.length > 1 ? (parts[parts.length - 1]?.[0] ?? '') : '';\n return `${first}${last}`.toUpperCase();\n });\n\n protected onImageError(): void {\n this.imageFailed.set(true);\n }\n}\n","<span class=\"relative inline-flex shrink-0 overflow-visible\">\n <span [class]=\"avatarClasses()\">\n @if (shouldShowImage()) {\n <img [src]=\"zSrc()\" [alt]=\"altText()\" [class]=\"imageClasses()\" (error)=\"onImageError()\" />\n } @else if (zFallback() === 'initials' && initials()) {\n <span>{{ initials() }}</span>\n } @else {\n <z-icon [zType]=\"zIcon()\" [zSize]=\"iconSize()\" />\n }\n </span>\n\n @if (zStatus()) {\n <span [class]=\"statusClasses()\" aria-hidden=\"true\"></span>\n }\n</span>\n\n@if (zShowLabel()) {\n <span [class]=\"labelClasses()\">\n <span class=\"text-foreground block overflow-hidden font-medium text-ellipsis whitespace-nowrap\">{{ zName() }}</span>\n @if (zDescription()) {\n <span class=\"text-muted-foreground block overflow-hidden text-xs text-ellipsis whitespace-nowrap\">\n {{ zDescription() }}\n </span>\n }\n </span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChild,\n computed,\n input,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { zMergeClasses, zTransform } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { ZAvatarComponent } from './z-avatar.component';\nimport type { ZAvatarItem, ZAvatarRing, ZAvatarShape, ZAvatarSize } from './z-avatar.types';\nimport { zAvatarGroupVariants, zAvatarVariants } from './z-avatar.variants';\n\n@Component({\n selector: 'z-avatar-group',\n imports: [ZAvatarComponent, ZTooltipDirective],\n standalone: true,\n templateUrl: './z-avatar-group.component.html',\n styleUrl: './z-avatar-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZAvatarGroupComponent {\n public readonly class = input<ClassValue>('');\n public readonly zItems = input<ZAvatarItem[]>([]);\n public readonly zMax = input(5);\n public readonly zSize = input<ZAvatarSize>('default');\n public readonly zShape = input<ZAvatarShape>('circle');\n public readonly zRing = input<ZAvatarRing>('muted');\n public readonly zRandomColor = input(false, { transform: zTransform });\n public readonly zTooltip = input(false, { transform: zTransform });\n public readonly zTooltipTemplate = input<TemplateRef<ZAvatarItem>>();\n protected readonly projectedTooltipTemplate = contentChild<TemplateRef<ZAvatarItem>>(TemplateRef);\n protected readonly tooltipTemplate = computed(() => this.zTooltipTemplate() ?? this.projectedTooltipTemplate());\n\n protected readonly hostClasses = computed(() =>\n zMergeClasses(zAvatarGroupVariants({ zSize: this.zSize() }), this.class())\n );\n\n protected readonly visibleItems = computed(() => this.zItems().slice(0, Math.max(0, this.zMax())));\n protected readonly overflowCount = computed(() => Math.max(0, this.zItems().length - this.visibleItems().length));\n protected readonly overflowClasses = computed(() =>\n zMergeClasses(\n zAvatarVariants({ zSize: this.zSize(), zShape: this.zShape(), zRing: this.zRing() }),\n 'z-avatar-group-item z-avatar-group-overflow-item'\n )\n );\n}\n","<ng-content />\n\n@for (item of visibleItems(); track item.id) {\n <ng-template #avatarTooltip>\n <div class=\"flex flex-col gap-0.5\">\n <strong class=\"text-sm\">{{ item.name }}</strong>\n <span class=\"text-xs opacity-80\">{{ item.email }}</span>\n </div>\n </ng-template>\n\n <z-avatar\n [zContent]=\"zTooltip() && (item.email || tooltipTemplate()) ? (tooltipTemplate() ?? avatarTooltip) : ''\"\n [zContext]=\"item\"\n z-tooltip\n [zSrc]=\"item.src ?? ''\"\n [zName]=\"item.name\"\n [zAlt]=\"item.alt ?? item.name\"\n [zIcon]=\"item.icon ?? 'lucideUser'\"\n [zStatus]=\"item.status\"\n [zSize]=\"zSize()\"\n [zShape]=\"zShape()\"\n [zRing]=\"zRing()\"\n [zRandomColor]=\"zRandomColor()\"\n class=\"z-avatar-group-item\"\n [zAlwaysShow]=\"zTooltip()\" />\n}\n\n@if (overflowCount() > 0) {\n <span [class]=\"overflowClasses()\">+{{ overflowCount() }}</span>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { zMergeClasses } from '@shival99/z-ui/utils';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
|
|
6
|
+
const zBadgeVariants = cva([
|
|
7
|
+
'pointer-events-none absolute z-10 inline-flex min-h-5 min-w-5 items-center justify-center',
|
|
8
|
+
'rounded-(--radius-pill) px-1 text-[0.6875rem] leading-none font-semibold whitespace-nowrap shadow-sm',
|
|
9
|
+
], {
|
|
10
|
+
variants: {
|
|
11
|
+
zColor: {
|
|
12
|
+
destructive: 'bg-destructive text-destructive-foreground',
|
|
13
|
+
primary: 'bg-primary text-primary-foreground',
|
|
14
|
+
secondary: 'bg-secondary text-secondary-foreground',
|
|
15
|
+
success: 'bg-green-600 text-white dark:bg-green-500',
|
|
16
|
+
warning: 'bg-amber-500 text-white dark:bg-amber-400',
|
|
17
|
+
info: 'bg-blue-600 text-white dark:bg-blue-500',
|
|
18
|
+
},
|
|
19
|
+
zPosition: {
|
|
20
|
+
'top-right': 'top-0 right-0 translate-x-[40%] -translate-y-[40%]',
|
|
21
|
+
'top-left': 'top-0 left-0 -translate-x-[40%] -translate-y-[40%]',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
defaultVariants: {
|
|
25
|
+
zColor: 'destructive',
|
|
26
|
+
zPosition: 'top-right',
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Displays a compact count indicator anchored to projected content such as a button, icon, or avatar.
|
|
32
|
+
*
|
|
33
|
+
* Counts greater than `zMaxCount` are rendered with a `+` prefix, while zero, negative, and non-finite
|
|
34
|
+
* counts are hidden so the projected content keeps its natural layout.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```html
|
|
38
|
+
* <z-badge [zCount]="128" [zMaxCount]="99" zColor="primary">
|
|
39
|
+
* <button z-button zShape="circle" aria-label="Notifications">
|
|
40
|
+
* <z-icon zType="lucideBell" />
|
|
41
|
+
* </button>
|
|
42
|
+
* </z-badge>
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
class ZBadgeComponent {
|
|
46
|
+
/** Additional classes applied to the badge host wrapper. */
|
|
47
|
+
class = input('', /* @ts-ignore */
|
|
48
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
49
|
+
/** Count displayed in the badge. The badge is hidden when the value is not positive and finite. */
|
|
50
|
+
zCount = input(0, /* @ts-ignore */
|
|
51
|
+
...(ngDevMode ? [{ debugName: "zCount" }] : /* istanbul ignore next */ []));
|
|
52
|
+
/** Largest count shown as-is before the badge switches to a `+maxCount` label. */
|
|
53
|
+
zMaxCount = input(99, /* @ts-ignore */
|
|
54
|
+
...(ngDevMode ? [{ debugName: "zMaxCount" }] : /* istanbul ignore next */ []));
|
|
55
|
+
/** Semantic badge color; defaults to the destructive theme color. */
|
|
56
|
+
zColor = input('destructive', /* @ts-ignore */
|
|
57
|
+
...(ngDevMode ? [{ debugName: "zColor" }] : /* istanbul ignore next */ []));
|
|
58
|
+
/** Corner position where the badge is anchored to the projected content. */
|
|
59
|
+
zPosition = input('top-right', /* @ts-ignore */
|
|
60
|
+
...(ngDevMode ? [{ debugName: "zPosition" }] : /* istanbul ignore next */ []));
|
|
61
|
+
hostClasses = computed(() => zMergeClasses('z-badge relative inline-flex overflow-visible', this.class()), /* @ts-ignore */
|
|
62
|
+
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
63
|
+
badgeClasses = computed(() => zBadgeVariants({
|
|
64
|
+
zColor: this.zColor(),
|
|
65
|
+
zPosition: this.zPosition(),
|
|
66
|
+
}), /* @ts-ignore */
|
|
67
|
+
...(ngDevMode ? [{ debugName: "badgeClasses" }] : /* istanbul ignore next */ []));
|
|
68
|
+
isVisible = computed(() => {
|
|
69
|
+
const count = this.zCount();
|
|
70
|
+
return Number.isFinite(count) && count > 0;
|
|
71
|
+
}, /* @ts-ignore */
|
|
72
|
+
...(ngDevMode ? [{ debugName: "isVisible" }] : /* istanbul ignore next */ []));
|
|
73
|
+
displayCount = computed(() => {
|
|
74
|
+
const count = this.zCount();
|
|
75
|
+
const maxCount = Math.max(1, Math.floor(this.zMaxCount()));
|
|
76
|
+
return count > maxCount ? `+${maxCount}` : String(count);
|
|
77
|
+
}, /* @ts-ignore */
|
|
78
|
+
...(ngDevMode ? [{ debugName: "displayCount" }] : /* istanbul ignore next */ []));
|
|
79
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
80
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: ZBadgeComponent, isStandalone: true, selector: "z-badge", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zCount: { classPropertyName: "zCount", publicName: "zCount", isSignal: true, isRequired: false, transformFunction: null }, zMaxCount: { classPropertyName: "zMaxCount", publicName: "zMaxCount", isSignal: true, isRequired: false, transformFunction: null }, zColor: { classPropertyName: "zColor", publicName: "zColor", isSignal: true, isRequired: false, transformFunction: null }, zPosition: { classPropertyName: "zPosition", publicName: "zPosition", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: "<ng-content />\n\n@if (isVisible()) {\n <span data-z-badge [class]=\"badgeClasses()\">{{ displayCount() }}</span>\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
81
|
+
}
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZBadgeComponent, decorators: [{
|
|
83
|
+
type: Component,
|
|
84
|
+
args: [{ selector: 'z-badge', imports: [], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
85
|
+
'[class]': 'hostClasses()',
|
|
86
|
+
}, template: "<ng-content />\n\n@if (isVisible()) {\n <span data-z-badge [class]=\"badgeClasses()\">{{ displayCount() }}</span>\n}\n" }]
|
|
87
|
+
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "zCount", required: false }] }], zMaxCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "zMaxCount", required: false }] }], zColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "zColor", required: false }] }], zPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "zPosition", required: false }] }] } });
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Generated bundle index. Do not edit.
|
|
91
|
+
*/
|
|
92
|
+
|
|
93
|
+
export { ZBadgeComponent, zBadgeVariants };
|
|
94
|
+
//# sourceMappingURL=shival99-z-ui-components-z-badge.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shival99-z-ui-components-z-badge.mjs","sources":["../../../../libs/core-ui/components/z-badge/z-badge.variants.ts","../../../../libs/core-ui/components/z-badge/z-badge.component.ts","../../../../libs/core-ui/components/z-badge/z-badge.component.html","../../../../libs/core-ui/components/z-badge/shival99-z-ui-components-z-badge.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const zBadgeVariants = cva(\n [\n 'pointer-events-none absolute z-10 inline-flex min-h-5 min-w-5 items-center justify-center',\n 'rounded-(--radius-pill) px-1 text-[0.6875rem] leading-none font-semibold whitespace-nowrap shadow-sm',\n ],\n {\n variants: {\n zColor: {\n destructive: 'bg-destructive text-destructive-foreground',\n primary: 'bg-primary text-primary-foreground',\n secondary: 'bg-secondary text-secondary-foreground',\n success: 'bg-green-600 text-white dark:bg-green-500',\n warning: 'bg-amber-500 text-white dark:bg-amber-400',\n info: 'bg-blue-600 text-white dark:bg-blue-500',\n },\n zPosition: {\n 'top-right': 'top-0 right-0 translate-x-[40%] -translate-y-[40%]',\n 'top-left': 'top-0 left-0 -translate-x-[40%] -translate-y-[40%]',\n },\n },\n defaultVariants: {\n zColor: 'destructive',\n zPosition: 'top-right',\n },\n }\n);\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport type { ZBadgeColor, ZBadgePosition } from './z-badge.types';\nimport { zBadgeVariants } from './z-badge.variants';\n\n/**\n * Displays a compact count indicator anchored to projected content such as a button, icon, or avatar.\n *\n * Counts greater than `zMaxCount` are rendered with a `+` prefix, while zero, negative, and non-finite\n * counts are hidden so the projected content keeps its natural layout.\n *\n * @example\n * ```html\n * <z-badge [zCount]=\"128\" [zMaxCount]=\"99\" zColor=\"primary\">\n * <button z-button zShape=\"circle\" aria-label=\"Notifications\">\n * <z-icon zType=\"lucideBell\" />\n * </button>\n * </z-badge>\n * ```\n */\n@Component({\n selector: 'z-badge',\n imports: [],\n standalone: true,\n templateUrl: './z-badge.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZBadgeComponent {\n /** Additional classes applied to the badge host wrapper. */\n public readonly class = input<ClassValue>('');\n\n /** Count displayed in the badge. The badge is hidden when the value is not positive and finite. */\n public readonly zCount = input<number>(0);\n\n /** Largest count shown as-is before the badge switches to a `+maxCount` label. */\n public readonly zMaxCount = input<number>(99);\n\n /** Semantic badge color; defaults to the destructive theme color. */\n public readonly zColor = input<ZBadgeColor>('destructive');\n\n /** Corner position where the badge is anchored to the projected content. */\n public readonly zPosition = input<ZBadgePosition>('top-right');\n\n protected readonly hostClasses = computed(() =>\n zMergeClasses('z-badge relative inline-flex overflow-visible', this.class())\n );\n\n protected readonly badgeClasses = computed(() =>\n zBadgeVariants({\n zColor: this.zColor(),\n zPosition: this.zPosition(),\n })\n );\n\n protected readonly isVisible = computed(() => {\n const count = this.zCount();\n return Number.isFinite(count) && count > 0;\n });\n\n protected readonly displayCount = computed(() => {\n const count = this.zCount();\n const maxCount = Math.max(1, Math.floor(this.zMaxCount()));\n return count > maxCount ? `+${maxCount}` : String(count);\n });\n}\n","<ng-content />\n\n@if (isVisible()) {\n <span data-z-badge [class]=\"badgeClasses()\">{{ displayCount() }}</span>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAEO,MAAM,cAAc,GAAG,GAAG,CAC/B;IACE,2FAA2F;IAC3F,sGAAsG;CACvG,EACD;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,MAAM,EAAE;AACN,YAAA,WAAW,EAAE,4CAA4C;AACzD,YAAA,OAAO,EAAE,oCAAoC;AAC7C,YAAA,SAAS,EAAE,wCAAwC;AACnD,YAAA,OAAO,EAAE,2CAA2C;AACpD,YAAA,OAAO,EAAE,2CAA2C;AACpD,YAAA,IAAI,EAAE,yCAAyC;AAChD,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,WAAW,EAAE,oDAAoD;AACjE,YAAA,UAAU,EAAE,oDAAoD;AACjE,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,SAAS,EAAE,WAAW;AACvB,KAAA;AACF,CAAA;;ACpBH;;;;;;;;;;;;;;AAcG;MAYU,eAAe,CAAA;;IAEV,KAAK,GAAG,KAAK,CAAa,EAAE;8EAAC;;IAG7B,MAAM,GAAG,KAAK,CAAS,CAAC;+EAAC;;IAGzB,SAAS,GAAG,KAAK,CAAS,EAAE;kFAAC;;IAG7B,MAAM,GAAG,KAAK,CAAc,aAAa;+EAAC;;IAG1C,SAAS,GAAG,KAAK,CAAiB,WAAW;kFAAC;AAE3C,IAAA,WAAW,GAAG,QAAQ,CAAC,MACxC,aAAa,CAAC,+CAA+C,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;oFAC7E;AAEkB,IAAA,YAAY,GAAG,QAAQ,CAAC,MACzC,cAAc,CAAC;AACb,QAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,QAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;KAC5B,CAAC;qFACH;AAEkB,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QAC3B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;IAC5C,CAAC;kFAAC;AAEiB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAC1D,QAAA,OAAO,KAAK,GAAG,QAAQ,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,GAAG,MAAM,CAAC,KAAK,CAAC;IAC1D,CAAC;qFAAC;uGApCS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,yvBChC5B,yHAKA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FD2Ba,eAAe,EAAA,UAAA,EAAA,CAAA;kBAX3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,OAAA,EACV,EAAE,EAAA,UAAA,EACC,IAAI,EAAA,eAAA,EAEC,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,SAAS,EAAE,eAAe;AAC3B,qBAAA,EAAA,QAAA,EAAA,yHAAA,EAAA;;;AE9BH;;AAEG;;"}
|