@brightspot/ui 1.0.1-wc.4 → 1.1.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 +4 -0
- package/dist/components/avatar/Avatar.d.ts +82 -0
- package/dist/components/avatar/Avatar.d.ts.map +1 -0
- package/dist/components/avatar/Avatar.js +162 -0
- package/dist/components/avatar/Avatar.js.map +1 -0
- package/dist/components/avatar/AvatarGroup.d.ts +70 -0
- package/dist/components/avatar/AvatarGroup.d.ts.map +1 -0
- package/dist/components/avatar/AvatarGroup.js +145 -0
- package/dist/components/avatar/AvatarGroup.js.map +1 -0
- package/dist/components/badge/Badge.d.ts +75 -0
- package/dist/components/badge/Badge.d.ts.map +1 -0
- package/dist/components/badge/Badge.js +118 -0
- package/dist/components/badge/Badge.js.map +1 -0
- package/dist/custom-elements.json +437 -0
- package/dist/storybook/assets/Avatar.stories-BONZm4v8.js +209 -0
- package/dist/storybook/assets/AvatarGroup.stories-DDKujPh2.js +211 -0
- package/dist/storybook/assets/Badge.stories-C8Ahfpp6.js +134 -0
- package/dist/storybook/assets/{Button.stories-BH3fEuOH.js → Button.stories-Cwdvbnu1.js} +1 -1
- package/dist/storybook/assets/{Color-64QXVMR3-BV_8WWIP.js → Color-64QXVMR3-CqLd5_0n.js} +1 -1
- package/dist/storybook/assets/{Colors.stories-CcpJ2Txp.js → Colors.stories-BajWDIwn.js} +1 -1
- package/dist/storybook/assets/Events.stories-B32yjxgf.js +108 -0
- package/dist/storybook/assets/{Heading.stories-cqZamo-6.js → Heading.stories-C0ji1wRG.js} +1 -1
- package/dist/storybook/assets/{Icon.stories-uPhO3RBG.js → Icon.stories-DeEHMd7f.js} +1 -1
- package/dist/storybook/assets/{Loader.stories-D7Bl-LN9.js → Loader.stories-NxZ0SGA0.js} +1 -1
- package/dist/storybook/assets/ReadyMixin.stories-DavcxbQ0.js +55 -0
- package/dist/storybook/assets/{ScrollShadow.stories-CWKYDYLk.js → ScrollShadow.stories-1W8nsrPe.js} +1 -1
- package/dist/storybook/assets/{WithTooltip-SK46ZJ2J-DyavE1Bj.js → WithTooltip-SK46ZJ2J-BO-IGPcG.js} +5 -5
- package/dist/storybook/assets/formatter-OMEEQ6HG-wqmAyL2n.js +1 -0
- package/dist/storybook/assets/iframe-BEH5EoNR.css +1 -0
- package/dist/storybook/assets/{iframe-mIh0R_Av.js → iframe-BIFmrRK7.js} +152 -125
- package/dist/storybook/assets/{index-C8IjQgz6.js → index-B4dkQq9N.js} +1 -1
- package/dist/storybook/assets/{syntaxhighlighter-CAVLW7PM-36bUIV4n.js → syntaxhighlighter-CAVLW7PM-kyZrfiLk.js} +1 -1
- package/dist/storybook/iframe.html +2 -2
- package/dist/storybook/index.json +1 -1
- package/dist/storybook/project.json +1 -1
- package/dist/tailwind-plugin-avatar.d.ts +2 -0
- package/dist/tailwind-plugin-avatar.d.ts.map +1 -0
- package/dist/tailwind-plugin-avatar.js +130 -0
- package/dist/tailwind-plugin-avatar.js.map +1 -0
- package/dist/tailwind-plugin-avatar.ts +181 -0
- package/dist/tailwind-plugin-badge.js +24 -9
- package/dist/tailwind-plugin-badge.js.map +1 -1
- package/dist/tailwind-plugin-badge.ts +30 -11
- package/dist/tailwind-plugin-button.js +3 -6
- package/dist/tailwind-plugin-button.js.map +1 -1
- package/dist/tailwind-plugin-button.ts +3 -7
- package/dist/tailwind.config.js +2 -2
- package/dist/tailwind.config.js.map +1 -1
- package/dist/tailwind.config.ts +2 -2
- package/dist/utils/EventEmitterMixin.d.ts +19 -16
- package/dist/utils/EventEmitterMixin.d.ts.map +1 -1
- package/dist/utils/EventEmitterMixin.js +7 -7
- package/dist/utils/EventEmitterMixin.js.map +1 -1
- package/dist/utils/ReadyMixin.d.ts +31 -0
- package/dist/utils/ReadyMixin.d.ts.map +1 -0
- package/dist/utils/ReadyMixin.js +42 -0
- package/dist/utils/ReadyMixin.js.map +1 -0
- package/package.json +7 -6
- package/custom-elements.json +0 -214
- package/dist/components/widget/Widget.css +0 -118
- package/dist/components/widget/Widget.d.ts +0 -90
- package/dist/components/widget/Widget.d.ts.map +0 -1
- package/dist/components/widget/Widget.js +0 -196
- package/dist/components/widget/Widget.js.map +0 -1
- package/dist/components/widget/WidgetUtils.d.ts +0 -14
- package/dist/components/widget/WidgetUtils.d.ts.map +0 -1
- package/dist/components/widget/WidgetUtils.js +0 -42
- package/dist/components/widget/WidgetUtils.js.map +0 -1
- package/dist/storybook/assets/Badge.stories-cKvztBhm.js +0 -43
- package/dist/storybook/assets/Widget-CRTwFkFc.css +0 -1
- package/dist/storybook/assets/Widget.stories-CcjywoYR.js +0 -300
- package/dist/storybook/assets/formatter-OMEEQ6HG-DBJ97XaR.js +0 -1
- package/dist/storybook/assets/iframe-BdHEYpHD.css +0 -1
package/README.md
CHANGED
|
@@ -149,6 +149,10 @@ We use [Storybook](https://storybook.js.org/) for interactive previewing of our
|
|
|
149
149
|
|
|
150
150
|
## Development
|
|
151
151
|
|
|
152
|
+
### Prerequisites
|
|
153
|
+
|
|
154
|
+
- **Node.js v22 or higher** - Required for development and git hooks
|
|
155
|
+
|
|
152
156
|
### Building the Package
|
|
153
157
|
|
|
154
158
|
To build the package, run `yarn build` from the package root to create the `dist` folder containing all the compiled assets.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export interface AvatarProps {
|
|
3
|
+
src?: string;
|
|
4
|
+
alt?: string;
|
|
5
|
+
fallback?: string;
|
|
6
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
|
|
7
|
+
}
|
|
8
|
+
declare const Avatar_base: (new (...args: any[]) => import("../../utils/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../utils/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
|
|
9
|
+
/**
|
|
10
|
+
* An avatar component for displaying user profile images with fallback support.
|
|
11
|
+
*
|
|
12
|
+
* Avatars display user profile images with automatic fallback to initials when
|
|
13
|
+
* the image fails to load or is not provided.
|
|
14
|
+
*
|
|
15
|
+
* @element btu-avatar
|
|
16
|
+
*
|
|
17
|
+
* @fires {CustomEvent} btu-avatar-ready - Fired after first render and initialization
|
|
18
|
+
* @fires {CustomEvent<{src: string}>} btu-avatar-image-loaded - Fired when image successfully loads
|
|
19
|
+
* @fires {CustomEvent<{src: string, error: Event}>} btu-avatar-image-error - Fired when image fails to load
|
|
20
|
+
*
|
|
21
|
+
* @cssprop --avatar-size - Custom size (overrides size prop)
|
|
22
|
+
* @cssprop --avatar-bg-color - Fallback background color (default: purple-600)
|
|
23
|
+
* @cssprop --avatar-corner-rounding - How rounded is the avatar (default: circle)
|
|
24
|
+
* @cssprop --avatar-ring-color - Optional ring border color
|
|
25
|
+
* @cssprop --avatar-ring-width - Ring border width (default: 2px)
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```html
|
|
29
|
+
* <!-- Avatar with image -->
|
|
30
|
+
* <btu-avatar src="#" alt="John Doe" fallback="JD"></btu-avatar>
|
|
31
|
+
*
|
|
32
|
+
* <!-- Avatar with fallback only -->
|
|
33
|
+
* <btu-avatar fallback="JD" size="lg"></btu-avatar>
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export default class Avatar extends Avatar_base {
|
|
37
|
+
/**
|
|
38
|
+
* Image source URL
|
|
39
|
+
* @attr
|
|
40
|
+
*/
|
|
41
|
+
src: string;
|
|
42
|
+
/**
|
|
43
|
+
* Alt text for the image
|
|
44
|
+
* @attr
|
|
45
|
+
*/
|
|
46
|
+
alt: string;
|
|
47
|
+
/**
|
|
48
|
+
* Fallback text (typically user initials)
|
|
49
|
+
* @attr
|
|
50
|
+
*/
|
|
51
|
+
fallback: string;
|
|
52
|
+
/**
|
|
53
|
+
* Size variant.
|
|
54
|
+
* - 'xs': Extra small (1.5rem)
|
|
55
|
+
* - 'sm': Small (2.25rem)
|
|
56
|
+
* - 'md': Medium (2.5rem) - default
|
|
57
|
+
* - 'lg': Large (3rem)
|
|
58
|
+
* - 'xl': Extra large (3.5rem)
|
|
59
|
+
* - 'xxl': Extra extra large (4rem)
|
|
60
|
+
* @attr
|
|
61
|
+
*/
|
|
62
|
+
size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
|
|
63
|
+
/** @internal */
|
|
64
|
+
private initialClasses;
|
|
65
|
+
/** @internal */
|
|
66
|
+
private imageLoaded;
|
|
67
|
+
/** @internal */
|
|
68
|
+
private imageError;
|
|
69
|
+
connectedCallback(): void;
|
|
70
|
+
createRenderRoot(): this;
|
|
71
|
+
willUpdate(): void;
|
|
72
|
+
firstUpdated(): void;
|
|
73
|
+
updated(changedProperties: Map<string, any>): void;
|
|
74
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
75
|
+
}
|
|
76
|
+
declare global {
|
|
77
|
+
interface HTMLElementTagNameMap {
|
|
78
|
+
'btu-avatar': Avatar;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export {};
|
|
82
|
+
//# sourceMappingURL=Avatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/Avatar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAA;AAKtC,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAA;CAChD;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAyC;IAC3E;;;OAGG;IAEH,GAAG,SAAK;IAER;;;OAGG;IAEH,GAAG,SAAK;IAER;;;OAGG;IAEH,QAAQ,SAAK;IAEb;;;;;;;;;OASG;IAEH,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAO;IAErD,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAe;IAErC,gBAAgB;IAEhB,OAAO,CAAC,WAAW,CAAQ;IAE3B,gBAAgB;IAEhB,OAAO,CAAC,UAAU,CAAQ;IAE1B,iBAAiB,IAAI,IAAI;IAQzB,gBAAgB;IAIhB,UAAU,IAAI,IAAI;IAWlB,YAAY,IAAI,IAAI;IAqBpB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAyBlD,MAAM;CAMP;AAMD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,MAAM,CAAA;KACrB;CACF"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { LitElement, html } from 'lit';
|
|
8
|
+
import { property, state } from 'lit/decorators.js';
|
|
9
|
+
import { EventEmitterMixin } from '../../utils/EventEmitterMixin.js';
|
|
10
|
+
import { ReadyMixin } from '../../utils/ReadyMixin.js';
|
|
11
|
+
/**
|
|
12
|
+
* An avatar component for displaying user profile images with fallback support.
|
|
13
|
+
*
|
|
14
|
+
* Avatars display user profile images with automatic fallback to initials when
|
|
15
|
+
* the image fails to load or is not provided.
|
|
16
|
+
*
|
|
17
|
+
* @element btu-avatar
|
|
18
|
+
*
|
|
19
|
+
* @fires {CustomEvent} btu-avatar-ready - Fired after first render and initialization
|
|
20
|
+
* @fires {CustomEvent<{src: string}>} btu-avatar-image-loaded - Fired when image successfully loads
|
|
21
|
+
* @fires {CustomEvent<{src: string, error: Event}>} btu-avatar-image-error - Fired when image fails to load
|
|
22
|
+
*
|
|
23
|
+
* @cssprop --avatar-size - Custom size (overrides size prop)
|
|
24
|
+
* @cssprop --avatar-bg-color - Fallback background color (default: purple-600)
|
|
25
|
+
* @cssprop --avatar-corner-rounding - How rounded is the avatar (default: circle)
|
|
26
|
+
* @cssprop --avatar-ring-color - Optional ring border color
|
|
27
|
+
* @cssprop --avatar-ring-width - Ring border width (default: 2px)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```html
|
|
31
|
+
* <!-- Avatar with image -->
|
|
32
|
+
* <btu-avatar src="#" alt="John Doe" fallback="JD"></btu-avatar>
|
|
33
|
+
*
|
|
34
|
+
* <!-- Avatar with fallback only -->
|
|
35
|
+
* <btu-avatar fallback="JD" size="lg"></btu-avatar>
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export default class Avatar extends EventEmitterMixin(ReadyMixin(LitElement)) {
|
|
39
|
+
constructor() {
|
|
40
|
+
super(...arguments);
|
|
41
|
+
/**
|
|
42
|
+
* Image source URL
|
|
43
|
+
* @attr
|
|
44
|
+
*/
|
|
45
|
+
this.src = '';
|
|
46
|
+
/**
|
|
47
|
+
* Alt text for the image
|
|
48
|
+
* @attr
|
|
49
|
+
*/
|
|
50
|
+
this.alt = '';
|
|
51
|
+
/**
|
|
52
|
+
* Fallback text (typically user initials)
|
|
53
|
+
* @attr
|
|
54
|
+
*/
|
|
55
|
+
this.fallback = '';
|
|
56
|
+
/**
|
|
57
|
+
* Size variant.
|
|
58
|
+
* - 'xs': Extra small (1.5rem)
|
|
59
|
+
* - 'sm': Small (2.25rem)
|
|
60
|
+
* - 'md': Medium (2.5rem) - default
|
|
61
|
+
* - 'lg': Large (3rem)
|
|
62
|
+
* - 'xl': Extra large (3.5rem)
|
|
63
|
+
* - 'xxl': Extra extra large (4rem)
|
|
64
|
+
* @attr
|
|
65
|
+
*/
|
|
66
|
+
this.size = 'md';
|
|
67
|
+
/** @internal */
|
|
68
|
+
this.initialClasses = [];
|
|
69
|
+
/** @internal */
|
|
70
|
+
this.imageLoaded = false;
|
|
71
|
+
/** @internal */
|
|
72
|
+
this.imageError = false;
|
|
73
|
+
}
|
|
74
|
+
connectedCallback() {
|
|
75
|
+
super.connectedCallback();
|
|
76
|
+
if (this.className) {
|
|
77
|
+
this.initialClasses = this.className.split(' ').filter(c => c.trim());
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
createRenderRoot() {
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
willUpdate() {
|
|
84
|
+
const classes = [
|
|
85
|
+
...this.initialClasses,
|
|
86
|
+
'btu-avatar',
|
|
87
|
+
`btu-avatar-${this.size}`,
|
|
88
|
+
this.imageLoaded ? 'btu-avatar-image-loaded' : '',
|
|
89
|
+
];
|
|
90
|
+
this.className = classes.filter(Boolean).join(' ');
|
|
91
|
+
}
|
|
92
|
+
firstUpdated() {
|
|
93
|
+
this.emit('btu-avatar-ready');
|
|
94
|
+
// Setup image load/error handlers if src is provided
|
|
95
|
+
if (this.src) {
|
|
96
|
+
const img = this.querySelector('img');
|
|
97
|
+
if (img) {
|
|
98
|
+
img.addEventListener('load', () => {
|
|
99
|
+
this.imageLoaded = true;
|
|
100
|
+
this.imageError = false;
|
|
101
|
+
this.emit('btu-avatar-image-loaded', { src: this.src });
|
|
102
|
+
});
|
|
103
|
+
img.addEventListener('error', error => {
|
|
104
|
+
this.imageLoaded = false;
|
|
105
|
+
this.imageError = true;
|
|
106
|
+
this.emit('btu-avatar-image-error', { src: this.src, error });
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
updated(changedProperties) {
|
|
112
|
+
// Reset image error state when src changes
|
|
113
|
+
if (changedProperties.has('src')) {
|
|
114
|
+
this.imageError = false;
|
|
115
|
+
this.imageLoaded = false;
|
|
116
|
+
// Setup handlers for new image
|
|
117
|
+
if (this.src) {
|
|
118
|
+
const img = this.querySelector('img');
|
|
119
|
+
if (img) {
|
|
120
|
+
img.addEventListener('load', () => {
|
|
121
|
+
this.imageLoaded = true;
|
|
122
|
+
this.imageError = false;
|
|
123
|
+
this.emit('btu-avatar-image-loaded', { src: this.src });
|
|
124
|
+
});
|
|
125
|
+
img.addEventListener('error', error => {
|
|
126
|
+
this.imageLoaded = false;
|
|
127
|
+
this.imageError = true;
|
|
128
|
+
this.emit('btu-avatar-image-error', { src: this.src, error });
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
render() {
|
|
135
|
+
return html `
|
|
136
|
+
<div class="btu-avatar-fallback">${this.fallback}</div>
|
|
137
|
+
${this.src && !this.imageError ? html `<img src="${this.src}" alt="${this.alt}" />` : ''}
|
|
138
|
+
`;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
__decorate([
|
|
142
|
+
property({ type: String })
|
|
143
|
+
], Avatar.prototype, "src", void 0);
|
|
144
|
+
__decorate([
|
|
145
|
+
property({ type: String })
|
|
146
|
+
], Avatar.prototype, "alt", void 0);
|
|
147
|
+
__decorate([
|
|
148
|
+
property({ type: String })
|
|
149
|
+
], Avatar.prototype, "fallback", void 0);
|
|
150
|
+
__decorate([
|
|
151
|
+
property({ type: String })
|
|
152
|
+
], Avatar.prototype, "size", void 0);
|
|
153
|
+
__decorate([
|
|
154
|
+
state()
|
|
155
|
+
], Avatar.prototype, "imageLoaded", void 0);
|
|
156
|
+
__decorate([
|
|
157
|
+
state()
|
|
158
|
+
], Avatar.prototype, "imageError", void 0);
|
|
159
|
+
if (!customElements.get('btu-avatar')) {
|
|
160
|
+
customElements.define('btu-avatar', Avatar);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=Avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../../src/components/avatar/Avatar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export interface AvatarGroupProps {
|
|
3
|
+
max?: number;
|
|
4
|
+
size?: 'xs' | 'sm' | 'md';
|
|
5
|
+
}
|
|
6
|
+
declare const AvatarGroup_base: (new (...args: any[]) => import("../../utils/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../utils/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
|
|
7
|
+
/**
|
|
8
|
+
* A container component for grouping multiple avatars with consistent styling.
|
|
9
|
+
*
|
|
10
|
+
* AvatarGroup wraps multiple avatar elements and provides:
|
|
11
|
+
* - Overflow handling (shows "+N" for excess avatars)
|
|
12
|
+
* - Consistent spacing and ring borders
|
|
13
|
+
* - Size inheritance for all child avatars
|
|
14
|
+
*
|
|
15
|
+
* @element btu-avatar-group
|
|
16
|
+
*
|
|
17
|
+
* @fires {CustomEvent} btu-avatar-group-ready - Fired after first render and initialization
|
|
18
|
+
* @fires {CustomEvent<{hidden: number}>} btu-avatar-group-overflow - Fired when avatars are hidden due to max limit
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```html
|
|
22
|
+
* <!-- Basic group -->
|
|
23
|
+
* <btu-avatar-group max="3">
|
|
24
|
+
* <btu-avatar src="..." fallback="AB"></btu-avatar>
|
|
25
|
+
* <btu-avatar src="..." fallback="DG"></btu-avatar>
|
|
26
|
+
* <btu-avatar fallback="JP"></btu-avatar>
|
|
27
|
+
* </btu-avatar-group>
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export default class AvatarGroup extends AvatarGroup_base {
|
|
31
|
+
/**
|
|
32
|
+
* Maximum number of visible avatars. Remaining avatars shown as "+N"
|
|
33
|
+
* @attr
|
|
34
|
+
*/
|
|
35
|
+
max?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Size variant for all child avatars (unless individually overridden)
|
|
38
|
+
* @attr
|
|
39
|
+
*/
|
|
40
|
+
size: 'xs' | 'sm' | 'md';
|
|
41
|
+
/** @internal */
|
|
42
|
+
private initialClasses;
|
|
43
|
+
/** @internal */
|
|
44
|
+
private overflowAvatar;
|
|
45
|
+
/** @internal */
|
|
46
|
+
private managedAvatars;
|
|
47
|
+
connectedCallback(): void;
|
|
48
|
+
createRenderRoot(): this;
|
|
49
|
+
willUpdate(): void;
|
|
50
|
+
firstUpdated(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Process all avatar children: apply size, handle overflow
|
|
53
|
+
* Call this method when avatars are dynamically added or removed
|
|
54
|
+
*/
|
|
55
|
+
processAvatars(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Create and append the overflow avatar showing "+N"
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
private createOverflowAvatar;
|
|
61
|
+
updated(changedProperties: Map<string, any>): void;
|
|
62
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
63
|
+
}
|
|
64
|
+
declare global {
|
|
65
|
+
interface HTMLElementTagNameMap {
|
|
66
|
+
'btu-avatar-group': AvatarGroup;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=AvatarGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvatarGroup.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/AvatarGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAA;AAMtC,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CAC1B;;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,gBAAyC;IAChF;;;OAGG;IAEH,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ;;;OAGG;IAEH,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAO;IAE/B,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAe;IAErC,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAsB;IAE5C,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAyB;IAE/C,iBAAiB,IAAI,IAAI;IAOzB,gBAAgB;IAIhB,UAAU,IAAI,IAAI;IAclB,YAAY,IAAI,IAAI;IAKpB;;;OAGG;IACH,cAAc,IAAI,IAAI;IA0CtB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAOlD,MAAM;CAGP;AAMD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,WAAW,CAAA;KAChC;CACF"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { LitElement, html } from 'lit';
|
|
8
|
+
import { property } from 'lit/decorators.js';
|
|
9
|
+
import { EventEmitterMixin } from '../../utils/EventEmitterMixin.js';
|
|
10
|
+
import { ReadyMixin } from '../../utils/ReadyMixin.js';
|
|
11
|
+
/**
|
|
12
|
+
* A container component for grouping multiple avatars with consistent styling.
|
|
13
|
+
*
|
|
14
|
+
* AvatarGroup wraps multiple avatar elements and provides:
|
|
15
|
+
* - Overflow handling (shows "+N" for excess avatars)
|
|
16
|
+
* - Consistent spacing and ring borders
|
|
17
|
+
* - Size inheritance for all child avatars
|
|
18
|
+
*
|
|
19
|
+
* @element btu-avatar-group
|
|
20
|
+
*
|
|
21
|
+
* @fires {CustomEvent} btu-avatar-group-ready - Fired after first render and initialization
|
|
22
|
+
* @fires {CustomEvent<{hidden: number}>} btu-avatar-group-overflow - Fired when avatars are hidden due to max limit
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```html
|
|
26
|
+
* <!-- Basic group -->
|
|
27
|
+
* <btu-avatar-group max="3">
|
|
28
|
+
* <btu-avatar src="..." fallback="AB"></btu-avatar>
|
|
29
|
+
* <btu-avatar src="..." fallback="DG"></btu-avatar>
|
|
30
|
+
* <btu-avatar fallback="JP"></btu-avatar>
|
|
31
|
+
* </btu-avatar-group>
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export default class AvatarGroup extends EventEmitterMixin(ReadyMixin(LitElement)) {
|
|
35
|
+
constructor() {
|
|
36
|
+
super(...arguments);
|
|
37
|
+
/**
|
|
38
|
+
* Size variant for all child avatars (unless individually overridden)
|
|
39
|
+
* @attr
|
|
40
|
+
*/
|
|
41
|
+
this.size = 'md';
|
|
42
|
+
/** @internal */
|
|
43
|
+
this.initialClasses = [];
|
|
44
|
+
/** @internal */
|
|
45
|
+
this.overflowAvatar = null;
|
|
46
|
+
/** @internal */
|
|
47
|
+
this.managedAvatars = new Set();
|
|
48
|
+
}
|
|
49
|
+
connectedCallback() {
|
|
50
|
+
super.connectedCallback();
|
|
51
|
+
if (this.className) {
|
|
52
|
+
this.initialClasses = this.className.split(' ').filter(c => c.trim());
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
createRenderRoot() {
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
willUpdate() {
|
|
59
|
+
const classes = [
|
|
60
|
+
...this.initialClasses,
|
|
61
|
+
'btu-avatar-group',
|
|
62
|
+
'flex',
|
|
63
|
+
'items-center',
|
|
64
|
+
'-space-x-2',
|
|
65
|
+
'*:ring-2',
|
|
66
|
+
'*:ring-white',
|
|
67
|
+
'dark:*:ring-gray-900',
|
|
68
|
+
];
|
|
69
|
+
this.className = classes.join(' ');
|
|
70
|
+
}
|
|
71
|
+
firstUpdated() {
|
|
72
|
+
this.processAvatars();
|
|
73
|
+
this.emit('btu-avatar-group-ready');
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Process all avatar children: apply size, handle overflow
|
|
77
|
+
* Call this method when avatars are dynamically added or removed
|
|
78
|
+
*/
|
|
79
|
+
processAvatars() {
|
|
80
|
+
const avatars = Array.from(this.querySelectorAll('btu-avatar'));
|
|
81
|
+
// Remove existing overflow avatar if present
|
|
82
|
+
if (this.overflowAvatar) {
|
|
83
|
+
this.overflowAvatar.remove();
|
|
84
|
+
this.overflowAvatar = null;
|
|
85
|
+
}
|
|
86
|
+
// Determine visible count
|
|
87
|
+
const visibleCount = this.max || avatars.length;
|
|
88
|
+
const hiddenCount = Math.max(0, avatars.length - visibleCount);
|
|
89
|
+
avatars.forEach((avatar, index) => {
|
|
90
|
+
// Hide excess avatars
|
|
91
|
+
if (this.max && index >= this.max) {
|
|
92
|
+
avatar.style.display = 'none';
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Show previously hidden avatars if max increased
|
|
96
|
+
avatar.style.display = '';
|
|
97
|
+
// Track avatars that should inherit size from group
|
|
98
|
+
// (those that don't have an explicit size attribute initially)
|
|
99
|
+
if (!avatar.hasAttribute('size') && !this.managedAvatars.has(avatar)) {
|
|
100
|
+
this.managedAvatars.add(avatar);
|
|
101
|
+
}
|
|
102
|
+
// Update size for managed avatars
|
|
103
|
+
if (this.managedAvatars.has(avatar)) {
|
|
104
|
+
avatar.setAttribute('size', this.size);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
// Create "+N" overflow avatar if needed
|
|
108
|
+
if (hiddenCount > 0) {
|
|
109
|
+
this.createOverflowAvatar(hiddenCount);
|
|
110
|
+
this.emit('btu-avatar-group-overflow', { hidden: hiddenCount });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create and append the overflow avatar showing "+N"
|
|
115
|
+
* @internal
|
|
116
|
+
*/
|
|
117
|
+
createOverflowAvatar(count) {
|
|
118
|
+
// Dynamically import Avatar to create instance
|
|
119
|
+
const overflow = document.createElement('btu-avatar');
|
|
120
|
+
overflow.setAttribute('fallback', `+${count}`);
|
|
121
|
+
overflow.setAttribute('size', this.size);
|
|
122
|
+
overflow.classList.add('btu-avatar-group-overflow');
|
|
123
|
+
this.appendChild(overflow);
|
|
124
|
+
this.overflowAvatar = overflow;
|
|
125
|
+
}
|
|
126
|
+
updated(changedProperties) {
|
|
127
|
+
// Reprocess avatars if max or size changed
|
|
128
|
+
if (changedProperties.has('max') || changedProperties.has('size')) {
|
|
129
|
+
this.processAvatars();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
render() {
|
|
133
|
+
return html ``;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
__decorate([
|
|
137
|
+
property({ type: Number })
|
|
138
|
+
], AvatarGroup.prototype, "max", void 0);
|
|
139
|
+
__decorate([
|
|
140
|
+
property({ type: String })
|
|
141
|
+
], AvatarGroup.prototype, "size", void 0);
|
|
142
|
+
if (!customElements.get('btu-avatar-group')) {
|
|
143
|
+
customElements.define('btu-avatar-group', AvatarGroup);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=AvatarGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvatarGroup.js","sourceRoot":"","sources":["../../../src/components/avatar/AvatarGroup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export interface BadgeProps {
|
|
3
|
+
variant?: 'info' | 'primary' | 'error' | 'success' | 'warning';
|
|
4
|
+
dot?: boolean;
|
|
5
|
+
size?: 'sm' | 'md' | 'lg';
|
|
6
|
+
}
|
|
7
|
+
declare const Badge_base: (new (...args: any[]) => import("../../utils/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../utils/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
|
|
8
|
+
/**
|
|
9
|
+
* A badge component for highlighting important information.
|
|
10
|
+
*
|
|
11
|
+
* Badges help highlight notifications, status, or new messages.
|
|
12
|
+
* Primarily used for communicating secondary or additional information.
|
|
13
|
+
*
|
|
14
|
+
* @element btu-badge
|
|
15
|
+
*
|
|
16
|
+
* @fires {CustomEvent} btu-badge-ready - Fired after first render and initialization
|
|
17
|
+
*
|
|
18
|
+
* @cssprop --badge-color-foreground - Text color (overrides theme color)
|
|
19
|
+
* @cssprop --badge-color-background - Background color (overrides theme color)
|
|
20
|
+
* @cssprop --badge-radius-size - Border radius size (overrides shape default, default: 999px)
|
|
21
|
+
* @cssprop --badge-px - Horizontal padding (overrides size default)
|
|
22
|
+
* @cssprop --badge-py - Vertical padding (overrides size default)
|
|
23
|
+
* @cssprop --badge-dot-size - Size of the dot affordance (default: 6px)
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```html
|
|
27
|
+
* <!-- Badge with dot -->
|
|
28
|
+
* <btu-badge variant="info" size="sm" dot>New</btu-badge>
|
|
29
|
+
*
|
|
30
|
+
* <!-- Badge with icon -->
|
|
31
|
+
* <btu-badge variant="success" size="md">
|
|
32
|
+
* <btu-icon symbol="check"></btu-icon>
|
|
33
|
+
* Success
|
|
34
|
+
* </btu-badge>
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export default class Badge extends Badge_base {
|
|
38
|
+
/**
|
|
39
|
+
* Style of the badge.
|
|
40
|
+
* - 'info': Informational (default)
|
|
41
|
+
* - 'primary': Primary action or emphasis
|
|
42
|
+
* - 'error': Error or danger state
|
|
43
|
+
* - 'success': Success or completion state
|
|
44
|
+
* - 'warning': Warning or caution state
|
|
45
|
+
* @attr
|
|
46
|
+
*/
|
|
47
|
+
variant: 'info' | 'primary' | 'error' | 'success' | 'warning';
|
|
48
|
+
/**
|
|
49
|
+
* Should a dot be displayed before the label?
|
|
50
|
+
* @attr
|
|
51
|
+
*/
|
|
52
|
+
dot: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Size variant.
|
|
55
|
+
* - 'sm': Small (default)
|
|
56
|
+
* - 'md': Medium
|
|
57
|
+
* - 'lg': Large
|
|
58
|
+
* @attr
|
|
59
|
+
*/
|
|
60
|
+
size: string;
|
|
61
|
+
/** @internal */
|
|
62
|
+
private initialClasses;
|
|
63
|
+
connectedCallback(): void;
|
|
64
|
+
createRenderRoot(): this;
|
|
65
|
+
willUpdate(): void;
|
|
66
|
+
firstUpdated(): void;
|
|
67
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
68
|
+
}
|
|
69
|
+
declare global {
|
|
70
|
+
interface HTMLElementTagNameMap {
|
|
71
|
+
'btu-badge': Badge;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=Badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/badge/Badge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAA;AAKtC,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;IAC9D,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CAC1B;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,UAAyC;IAC1E;;;;;;;;OAQG;IAEH,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAS;IAEtE;;;OAGG;IAEH,GAAG,UAAQ;IAEX;;;;;;OAMG;IAEH,IAAI,SAAO;IAEX,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAe;IAErC,iBAAiB,IAAI,IAAI;IAQzB,gBAAgB;IAIhB,UAAU,IAAI,IAAI;IAqBlB,YAAY,IAAI,IAAI;IAIpB,MAAM;CAGP;AAQD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,KAAK,CAAA;KACnB;CACF"}
|