@brightspot/ui 1.0.1-wc.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -90
- package/dist/LucideDynamicLoader.d.ts +1 -0
- package/dist/LucideDynamicLoader.d.ts.map +1 -1
- package/dist/LucideDynamicLoader.js +2 -0
- package/dist/LucideDynamicLoader.js.map +1 -1
- package/dist/LucideDynamicLoader.ts +3 -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/components/circular-progress/CircularProgress.d.ts +57 -0
- package/dist/components/circular-progress/CircularProgress.d.ts.map +1 -0
- package/dist/components/circular-progress/CircularProgress.js +173 -0
- package/dist/components/circular-progress/CircularProgress.js.map +1 -0
- package/dist/components/icon/Icon.d.ts +90 -0
- package/dist/components/icon/Icon.d.ts.map +1 -0
- package/dist/components/icon/Icon.js +172 -0
- package/dist/components/icon/Icon.js.map +1 -0
- package/dist/components/linear-progress/LinearProgress.d.ts +40 -0
- package/dist/components/linear-progress/LinearProgress.d.ts.map +1 -0
- package/dist/components/linear-progress/LinearProgress.js +95 -0
- package/dist/components/linear-progress/LinearProgress.js.map +1 -0
- package/dist/custom-elements.json +772 -0
- package/dist/global.d.ts +4 -0
- package/dist/storybook/assets/Avatar.stories-BlxrclP0.js +209 -0
- package/dist/storybook/assets/AvatarGroup.stories-E3VUvBae.js +211 -0
- package/dist/storybook/assets/Badge.stories-f4YvPz0W.js +121 -0
- package/dist/storybook/assets/Button.stories-N66xrq4q.js +63 -0
- package/dist/storybook/assets/CircularProgress.stories-zWyELtfc.js +451 -0
- package/dist/storybook/assets/{Color-64QXVMR3-BV_8WWIP.js → Color-64QXVMR3-B3Y5c9dl.js} +1 -1
- package/dist/storybook/assets/{Colors.stories-CcpJ2Txp.js → Colors.stories-nEoNeHhf.js} +1 -1
- package/dist/storybook/assets/Events.stories-BP3ensxX.js +108 -0
- package/dist/storybook/assets/Heading.stories-DGqWaBpi.js +3 -0
- package/dist/storybook/assets/Icon.stories-BWWjh4NZ.js +245 -0
- package/dist/storybook/assets/LinearProgress.stories-DMVolkoE.js +397 -0
- package/dist/storybook/assets/ReadyMixin.stories-DavcxbQ0.js +55 -0
- package/dist/storybook/assets/ScrollShadow.stories-BmwSRNje.js +17 -0
- package/dist/storybook/assets/Throttle.stories-DBj-9rhV.js +303 -0
- package/dist/storybook/assets/{WithTooltip-SK46ZJ2J-DyavE1Bj.js → WithTooltip-SK46ZJ2J-DW4NXFWt.js} +5 -5
- package/dist/storybook/assets/formatter-OMEEQ6HG-BBn014aZ.js +1 -0
- package/dist/storybook/assets/iframe-CxsKJSj-.css +1 -0
- package/dist/storybook/assets/{iframe-mIh0R_Av.js → iframe-Z4F0Cgki.js} +87 -100
- package/dist/storybook/assets/{index-C8IjQgz6.js → index-BUj5S-B7.js} +1 -1
- package/dist/storybook/assets/{syntaxhighlighter-CAVLW7PM-36bUIV4n.js → syntaxhighlighter-CAVLW7PM-CsQveU1N.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 +14 -15
- package/dist/tailwind-plugin-button.js.map +1 -1
- package/dist/tailwind-plugin-button.ts +14 -17
- package/dist/tailwind-plugin-contrast.d.ts +2 -0
- package/dist/tailwind-plugin-contrast.d.ts.map +1 -0
- package/dist/tailwind-plugin-contrast.js +17 -0
- package/dist/tailwind-plugin-contrast.js.map +1 -0
- package/dist/tailwind-plugin-contrast.ts +18 -0
- package/dist/tailwind-plugin-icon.js +17 -10
- package/dist/tailwind-plugin-icon.js.map +1 -1
- package/dist/tailwind-plugin-icon.ts +17 -10
- package/dist/tailwind-plugin-ring-contrast.d.ts +2 -0
- package/dist/tailwind-plugin-ring-contrast.d.ts.map +1 -0
- package/dist/tailwind-plugin-ring-contrast.js +76 -0
- package/dist/tailwind-plugin-ring-contrast.js.map +1 -0
- package/dist/tailwind-plugin-ring-contrast.ts +90 -0
- package/dist/tailwind.config.d.ts +21 -0
- package/dist/tailwind.config.d.ts.map +1 -1
- package/dist/tailwind.config.js +27 -2
- package/dist/tailwind.config.js.map +1 -1
- package/dist/tailwind.config.ts +27 -2
- package/dist/{utils → util}/EventEmitterMixin.d.ts +23 -17
- package/dist/util/EventEmitterMixin.d.ts.map +1 -0
- package/dist/{utils → util}/EventEmitterMixin.js +7 -7
- package/dist/util/EventEmitterMixin.js.map +1 -0
- package/dist/util/ProgressMixin.d.ts +52 -0
- package/dist/util/ProgressMixin.d.ts.map +1 -0
- package/dist/util/ProgressMixin.js +190 -0
- package/dist/util/ProgressMixin.js.map +1 -0
- package/dist/util/ReadyMixin.d.ts +31 -0
- package/dist/util/ReadyMixin.d.ts.map +1 -0
- package/dist/util/ReadyMixin.js +42 -0
- package/dist/util/ReadyMixin.js.map +1 -0
- package/dist/util/aria.d.ts +3 -0
- package/dist/util/aria.d.ts.map +1 -0
- package/dist/util/aria.js +44 -0
- package/dist/util/aria.js.map +1 -0
- package/dist/util/svg.d.ts +9 -0
- package/dist/util/svg.d.ts.map +1 -1
- package/dist/util/svg.js +22 -0
- package/dist/util/svg.js.map +1 -1
- package/dist/util/throttle.d.ts +4 -0
- package/dist/util/throttle.d.ts.map +1 -0
- package/dist/util/throttle.js +30 -0
- package/dist/util/throttle.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/Button.stories-BH3fEuOH.js +0 -63
- package/dist/storybook/assets/Heading.stories-cqZamo-6.js +0 -3
- package/dist/storybook/assets/Icon.stories-uPhO3RBG.js +0 -28543
- package/dist/storybook/assets/Loader.stories-D7Bl-LN9.js +0 -3
- package/dist/storybook/assets/ScrollShadow.stories-CWKYDYLk.js +0 -17
- 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/dist/utils/EventEmitterMixin.d.ts.map +0 -1
- package/dist/utils/EventEmitterMixin.js.map +0 -1
|
@@ -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("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
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 '../../util/EventEmitterMixin.js';
|
|
10
|
+
import { ReadyMixin } from '../../util/ReadyMixin.js';
|
|
11
|
+
/**
|
|
12
|
+
* A badge component for highlighting important information.
|
|
13
|
+
*
|
|
14
|
+
* Badges help highlight notifications, status, or new messages.
|
|
15
|
+
* Primarily used for communicating secondary or additional information.
|
|
16
|
+
*
|
|
17
|
+
* @element btu-badge
|
|
18
|
+
*
|
|
19
|
+
* @fires {CustomEvent} btu-badge-ready - Fired after first render and initialization
|
|
20
|
+
*
|
|
21
|
+
* @cssprop --badge-color-foreground - Text color (overrides theme color)
|
|
22
|
+
* @cssprop --badge-color-background - Background color (overrides theme color)
|
|
23
|
+
* @cssprop --badge-radius-size - Border radius size (overrides shape default, default: 999px)
|
|
24
|
+
* @cssprop --badge-px - Horizontal padding (overrides size default)
|
|
25
|
+
* @cssprop --badge-py - Vertical padding (overrides size default)
|
|
26
|
+
* @cssprop --badge-dot-size - Size of the dot affordance (default: 6px)
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```html
|
|
30
|
+
* <!-- Badge with dot -->
|
|
31
|
+
* <btu-badge variant="info" size="sm" dot>New</btu-badge>
|
|
32
|
+
*
|
|
33
|
+
* <!-- Badge with icon -->
|
|
34
|
+
* <btu-badge variant="success" size="md">
|
|
35
|
+
* <btu-icon symbol="check"></btu-icon>
|
|
36
|
+
* Success
|
|
37
|
+
* </btu-badge>
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export default class Badge extends EventEmitterMixin(ReadyMixin(LitElement)) {
|
|
41
|
+
constructor() {
|
|
42
|
+
super(...arguments);
|
|
43
|
+
/**
|
|
44
|
+
* Style of the badge.
|
|
45
|
+
* - 'info': Informational (default)
|
|
46
|
+
* - 'primary': Primary action or emphasis
|
|
47
|
+
* - 'error': Error or danger state
|
|
48
|
+
* - 'success': Success or completion state
|
|
49
|
+
* - 'warning': Warning or caution state
|
|
50
|
+
* @attr
|
|
51
|
+
*/
|
|
52
|
+
this.variant = 'info';
|
|
53
|
+
/**
|
|
54
|
+
* Should a dot be displayed before the label?
|
|
55
|
+
* @attr
|
|
56
|
+
*/
|
|
57
|
+
this.dot = false;
|
|
58
|
+
/**
|
|
59
|
+
* Size variant.
|
|
60
|
+
* - 'sm': Small (default)
|
|
61
|
+
* - 'md': Medium
|
|
62
|
+
* - 'lg': Large
|
|
63
|
+
* @attr
|
|
64
|
+
*/
|
|
65
|
+
this.size = 'sm';
|
|
66
|
+
/** @internal */
|
|
67
|
+
this.initialClasses = [];
|
|
68
|
+
}
|
|
69
|
+
connectedCallback() {
|
|
70
|
+
super.connectedCallback();
|
|
71
|
+
// Capture initial classes from backend HTML
|
|
72
|
+
if (this.className) {
|
|
73
|
+
this.initialClasses = this.className.split(' ').filter(c => c.trim());
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
createRenderRoot() {
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
willUpdate() {
|
|
80
|
+
// Map variant to theme color (info → gray)
|
|
81
|
+
const colorMap = {
|
|
82
|
+
info: 'gray',
|
|
83
|
+
primary: 'primary',
|
|
84
|
+
error: 'error',
|
|
85
|
+
success: 'success',
|
|
86
|
+
warning: 'warning',
|
|
87
|
+
};
|
|
88
|
+
const classes = [
|
|
89
|
+
...this.initialClasses,
|
|
90
|
+
'btu-badge',
|
|
91
|
+
`btu-badge-${this.size}`,
|
|
92
|
+
`btu-badge-${colorMap[this.variant]}`,
|
|
93
|
+
this.dot ? 'btu-badge-dot' : '',
|
|
94
|
+
];
|
|
95
|
+
this.className = classes.filter(Boolean).join(' ');
|
|
96
|
+
}
|
|
97
|
+
firstUpdated() {
|
|
98
|
+
this.emit('btu-badge-ready');
|
|
99
|
+
}
|
|
100
|
+
render() {
|
|
101
|
+
return html ``;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
__decorate([
|
|
105
|
+
property({ type: String })
|
|
106
|
+
], Badge.prototype, "variant", void 0);
|
|
107
|
+
__decorate([
|
|
108
|
+
property({ type: Boolean })
|
|
109
|
+
], Badge.prototype, "dot", void 0);
|
|
110
|
+
__decorate([
|
|
111
|
+
property({ type: String })
|
|
112
|
+
], Badge.prototype, "size", void 0);
|
|
113
|
+
// Register custom element with guard to prevent double registration
|
|
114
|
+
// (common with yarn link, HMR, or webpack bundle duplication)
|
|
115
|
+
if (!customElements.get('btu-badge')) {
|
|
116
|
+
customElements.define('btu-badge', Badge);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=Badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../../src/components/badge/Badge.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAQrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAA5E;;QACE;;;;;;;;WAQG;QAEH,YAAO,GAAyD,MAAM,CAAA;QAEtE;;;WAGG;QAEH,QAAG,GAAG,KAAK,CAAA;QAEX;;;;;;WAMG;QAEH,SAAI,GAAG,IAAI,CAAA;QAEX,gBAAgB;QACR,mBAAc,GAAa,EAAE,CAAA;IA0CvC,CAAC;IAxCC,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAA;QACzB,4CAA4C;QAC5C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QACvE,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAED,UAAU;QACR,2CAA2C;QAC3C,MAAM,QAAQ,GAAmD;YAC/D,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,SAAS;SACnB,CAAA;QAED,MAAM,OAAO,GAAG;YACd,GAAG,IAAI,CAAC,cAAc;YACtB,WAAW;YACX,aAAa,IAAI,CAAC,IAAI,EAAE;YACxB,aAAa,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;SAChC,CAAA;QAED,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpD,CAAC;IAED,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC9B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA,EAAE,CAAA;IACf,CAAC;CACF;AA9DC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sCAC2C;AAOtE;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;kCACjB;AAUX;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;mCAChB;AA+Cb,oEAAoE;AACpE,8DAA8D;AAC9D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;IACrC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
declare const CircularProgress_base: (new (...args: any[]) => import("../../util/ProgressMixin.js").ProgressMixinInterface) & (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
|
|
3
|
+
/**
|
|
4
|
+
* A circular progress indicator for showing loading states or progress.
|
|
5
|
+
*
|
|
6
|
+
* @element btu-circular-progress
|
|
7
|
+
*
|
|
8
|
+
* @fires {CustomEvent} btu-progress-ready - Fired after first render and initialization
|
|
9
|
+
* @fires {CustomEvent} btu-progress-complete - Fired when determinate progress reaches 100
|
|
10
|
+
*
|
|
11
|
+
* @cssprop --progress-color - Custom progress indicator color (overrides theme color)
|
|
12
|
+
* @cssprop --track-color - Track/background color (overrides default gray-100)
|
|
13
|
+
* @cssprop --progress-size - Custom size in pixels (overrides size preset)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```html
|
|
17
|
+
* <!-- Indeterminate spinner (default) -->
|
|
18
|
+
* <btu-circular-progress color="primary" size="md"></btu-circular-progress>
|
|
19
|
+
*
|
|
20
|
+
* <!-- Determinate progress -->
|
|
21
|
+
* <btu-circular-progress indeterminate="false" progress="75" color="success"></btu-circular-progress>
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export default class CircularProgress extends CircularProgress_base {
|
|
25
|
+
/**
|
|
26
|
+
* Whether the progress indicator is indeterminate (animated spinner).
|
|
27
|
+
* When false, shows determinate progress based on the progress value.
|
|
28
|
+
* @attr
|
|
29
|
+
*/
|
|
30
|
+
indeterminate: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Size variant.
|
|
33
|
+
* - 'sm': Small (16px) - default
|
|
34
|
+
* - 'md': Medium (32px)
|
|
35
|
+
* - 'lg': Large (48px)
|
|
36
|
+
* @attr
|
|
37
|
+
*/
|
|
38
|
+
size: 'sm' | 'md' | 'lg';
|
|
39
|
+
/** @internal */
|
|
40
|
+
private _initialClasses;
|
|
41
|
+
/** @internal */
|
|
42
|
+
private _styleObserver?;
|
|
43
|
+
connectedCallback(): void;
|
|
44
|
+
createRenderRoot(): this;
|
|
45
|
+
willUpdate(): void;
|
|
46
|
+
firstUpdated(changedProperties: Map<PropertyKey, unknown>): void;
|
|
47
|
+
disconnectedCallback(): void;
|
|
48
|
+
updated(changedProperties: Map<PropertyKey, unknown>): void;
|
|
49
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
50
|
+
}
|
|
51
|
+
declare global {
|
|
52
|
+
interface HTMLElementTagNameMap {
|
|
53
|
+
'btu-circular-progress': CircularProgress;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=CircularProgress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircularProgress.d.ts","sourceRoot":"","sources":["../../../src/components/circular-progress/CircularProgress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAA;;AAMpD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,qBAAwD;IACpG;;;;OAIG;IAEH,aAAa,UAAO;IAEpB;;;;;;OAMG;IAEH,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAO;IAE/B,gBAAgB;IAChB,OAAO,CAAC,eAAe,CAAe;IAEtC,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAC,CAAkB;IAEzC,iBAAiB,IAAI,IAAI;IAsBzB,gBAAgB;IAIhB,UAAU,IAAI,IAAI;IAMlB,YAAY,CAAC,iBAAiB,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,IAAI;IAShE,oBAAoB,IAAI,IAAI;IAM5B,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,IAAI;IAc3D,MAAM;CA+DP;AAOD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,uBAAuB,EAAE,gBAAgB,CAAA;KAC1C;CACF"}
|
|
@@ -0,0 +1,173 @@
|
|
|
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, css, html, nothing } from 'lit';
|
|
8
|
+
import { property } from 'lit/decorators.js';
|
|
9
|
+
import { EventEmitterMixin } from '../../util/EventEmitterMixin.js';
|
|
10
|
+
import { ProgressMixin } from '../../util/ProgressMixin.js';
|
|
11
|
+
import { ReadyMixin } from '../../util/ReadyMixin.js';
|
|
12
|
+
/**
|
|
13
|
+
* A circular progress indicator for showing loading states or progress.
|
|
14
|
+
*
|
|
15
|
+
* @element btu-circular-progress
|
|
16
|
+
*
|
|
17
|
+
* @fires {CustomEvent} btu-progress-ready - Fired after first render and initialization
|
|
18
|
+
* @fires {CustomEvent} btu-progress-complete - Fired when determinate progress reaches 100
|
|
19
|
+
*
|
|
20
|
+
* @cssprop --progress-color - Custom progress indicator color (overrides theme color)
|
|
21
|
+
* @cssprop --track-color - Track/background color (overrides default gray-100)
|
|
22
|
+
* @cssprop --progress-size - Custom size in pixels (overrides size preset)
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```html
|
|
26
|
+
* <!-- Indeterminate spinner (default) -->
|
|
27
|
+
* <btu-circular-progress color="primary" size="md"></btu-circular-progress>
|
|
28
|
+
*
|
|
29
|
+
* <!-- Determinate progress -->
|
|
30
|
+
* <btu-circular-progress indeterminate="false" progress="75" color="success"></btu-circular-progress>
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export default class CircularProgress extends ProgressMixin(EventEmitterMixin(ReadyMixin(LitElement))) {
|
|
34
|
+
constructor() {
|
|
35
|
+
super(...arguments);
|
|
36
|
+
/**
|
|
37
|
+
* Whether the progress indicator is indeterminate (animated spinner).
|
|
38
|
+
* When false, shows determinate progress based on the progress value.
|
|
39
|
+
* @attr
|
|
40
|
+
*/
|
|
41
|
+
this.indeterminate = true;
|
|
42
|
+
/**
|
|
43
|
+
* Size variant.
|
|
44
|
+
* - 'sm': Small (16px) - default
|
|
45
|
+
* - 'md': Medium (32px)
|
|
46
|
+
* - 'lg': Large (48px)
|
|
47
|
+
* @attr
|
|
48
|
+
*/
|
|
49
|
+
this.size = 'sm';
|
|
50
|
+
/** @internal */
|
|
51
|
+
this._initialClasses = [];
|
|
52
|
+
}
|
|
53
|
+
connectedCallback() {
|
|
54
|
+
super.connectedCallback();
|
|
55
|
+
// Capture initial classes from backend HTML
|
|
56
|
+
if (this.className) {
|
|
57
|
+
this._initialClasses = this.className.split(' ').filter(c => c.trim());
|
|
58
|
+
}
|
|
59
|
+
// Observe style attribute changes to detect --progress-size updates
|
|
60
|
+
this._styleObserver = new MutationObserver(mutations => {
|
|
61
|
+
mutations.forEach(mutation => {
|
|
62
|
+
if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
|
|
63
|
+
this.requestUpdate();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
this._styleObserver.observe(this, {
|
|
68
|
+
attributes: true,
|
|
69
|
+
attributeFilter: ['style'],
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
createRenderRoot() {
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
willUpdate() {
|
|
76
|
+
const classes = [...this._initialClasses, 'inline-flex', 'flex-col', 'items-center'];
|
|
77
|
+
this.className = classes.join(' ');
|
|
78
|
+
}
|
|
79
|
+
firstUpdated(changedProperties) {
|
|
80
|
+
super.firstUpdated(changedProperties);
|
|
81
|
+
// Only setup initial animation for determinate mode
|
|
82
|
+
if (!this.indeterminate) {
|
|
83
|
+
this._setupInitialAnimation();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
disconnectedCallback() {
|
|
87
|
+
super.disconnectedCallback();
|
|
88
|
+
this._styleObserver?.disconnect();
|
|
89
|
+
this._cleanupInitialAnimation();
|
|
90
|
+
}
|
|
91
|
+
updated(changedProperties) {
|
|
92
|
+
super.updated(changedProperties);
|
|
93
|
+
// Setup animation if switching to determinate mode
|
|
94
|
+
if (changedProperties.has('indeterminate') && !this.indeterminate) {
|
|
95
|
+
this._setupInitialAnimation();
|
|
96
|
+
}
|
|
97
|
+
// Only track completion in determinate mode
|
|
98
|
+
if (!this.indeterminate) {
|
|
99
|
+
this._trackCompletion();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
render() {
|
|
103
|
+
// Determine size: check --progress-size CSS property, fallback to size preset
|
|
104
|
+
const sizeMap = { sm: 16, md: 32, lg: 48 };
|
|
105
|
+
const customSize = getComputedStyle(this).getPropertyValue('--progress-size').trim();
|
|
106
|
+
const parsed = parseFloat(customSize);
|
|
107
|
+
const size = customSize && !isNaN(parsed) && parsed > 0 ? parsed : (sizeMap[this.size] ?? sizeMap.sm);
|
|
108
|
+
const thickness = this.thickness ?? 2; // default thickness is 2
|
|
109
|
+
const color = this._getProgressColorValue();
|
|
110
|
+
const radius = (size - thickness) / 2;
|
|
111
|
+
const circumference = 2 * Math.PI * radius;
|
|
112
|
+
const center = size / 2;
|
|
113
|
+
const progressValue = this._getAnimatedProgress();
|
|
114
|
+
const strokeDashoffset = this.indeterminate ? 0 : circumference - (progressValue / 100) * circumference;
|
|
115
|
+
return html `
|
|
116
|
+
<span
|
|
117
|
+
class="block"
|
|
118
|
+
role="progressbar"
|
|
119
|
+
aria-label="${this.ariaLabel || nothing}"
|
|
120
|
+
aria-labelledby="${this.ariaLabelledBy || nothing}"
|
|
121
|
+
aria-valuenow="${this.indeterminate ? nothing : progressValue}"
|
|
122
|
+
aria-valuemin="${this.indeterminate ? nothing : '0'}"
|
|
123
|
+
aria-valuemax="${this.indeterminate ? nothing : '100'}"
|
|
124
|
+
aria-valuetext="${this.indeterminate
|
|
125
|
+
? nothing
|
|
126
|
+
: this.ariaValueText || this.label || `${progressValue} percent`}"
|
|
127
|
+
>
|
|
128
|
+
<svg
|
|
129
|
+
class="${this.indeterminate ? 'animate-circular-progress-rotate' : ''} block"
|
|
130
|
+
width="${size}"
|
|
131
|
+
height="${size}"
|
|
132
|
+
viewBox="0 0 ${size} ${size}"
|
|
133
|
+
aria-hidden="true"
|
|
134
|
+
>
|
|
135
|
+
<circle
|
|
136
|
+
cx="${center}"
|
|
137
|
+
cy="${center}"
|
|
138
|
+
r="${radius}"
|
|
139
|
+
fill="none"
|
|
140
|
+
stroke="var(--track-color, oklch(var(--btu-theme-gray-100)))"
|
|
141
|
+
stroke-width="${thickness}"
|
|
142
|
+
/>
|
|
143
|
+
<circle
|
|
144
|
+
class="${this.indeterminate
|
|
145
|
+
? 'animate-circular-progress-dash'
|
|
146
|
+
: '-rotate-90'} origin-center transition-all duration-300 ease-in-out"
|
|
147
|
+
cx="${center}"
|
|
148
|
+
cy="${center}"
|
|
149
|
+
r="${radius}"
|
|
150
|
+
fill="none"
|
|
151
|
+
stroke="${color}"
|
|
152
|
+
stroke-width="${thickness}"
|
|
153
|
+
stroke-dasharray="${this.indeterminate ? '1, 200' : circumference}"
|
|
154
|
+
stroke-dashoffset="${this.indeterminate ? '0' : strokeDashoffset}"
|
|
155
|
+
stroke-linecap="round"
|
|
156
|
+
/>
|
|
157
|
+
</svg>
|
|
158
|
+
</span>
|
|
159
|
+
${this.label ? html `<span class="mt-2 text-center text-xs font-medium text-gray-700">${this.label}</span>` : ''}
|
|
160
|
+
`;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
__decorate([
|
|
164
|
+
property({ type: Boolean })
|
|
165
|
+
], CircularProgress.prototype, "indeterminate", void 0);
|
|
166
|
+
__decorate([
|
|
167
|
+
property({ type: String })
|
|
168
|
+
], CircularProgress.prototype, "size", void 0);
|
|
169
|
+
// Register custom element with guard to prevent double registration
|
|
170
|
+
if (!customElements.get('btu-circular-progress')) {
|
|
171
|
+
customElements.define('btu-circular-progress', CircularProgress);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=CircularProgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircularProgress.js","sourceRoot":"","sources":["../../../src/components/circular-progress/CircularProgress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export interface IconProps {
|
|
3
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
4
|
+
symbol?: string;
|
|
5
|
+
gradient?: 'ai' | 'error' | 'gray' | 'primary' | 'purple' | 'rose' | 'success' | 'teal' | 'warning';
|
|
6
|
+
}
|
|
7
|
+
declare const Icon_base: (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
|
|
8
|
+
/**
|
|
9
|
+
* An icon component for displaying Lucide icons.
|
|
10
|
+
*
|
|
11
|
+
* Icons inherit parent text color by default or can use gradient fills.
|
|
12
|
+
* All icons are from the Lucide icon library (https://lucide.dev/icons/).
|
|
13
|
+
* Supports both direct SVG rendering and mask-based gradient fills.
|
|
14
|
+
*
|
|
15
|
+
* @element btu-icon
|
|
16
|
+
*
|
|
17
|
+
* @fires {CustomEvent} btu-icon-ready - Fired after first render and initialization
|
|
18
|
+
*
|
|
19
|
+
* @cssprop --Icon-size - Icon size (overrides size default)
|
|
20
|
+
* @cssprop --Icon-fill - Icon fill color for filled icons (e.g., "currentColor")
|
|
21
|
+
* @cssprop --Icon-svg - SVG data URI for mask-based rendering
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```html
|
|
25
|
+
* <!-- Icon inheriting parent text color -->
|
|
26
|
+
* <btu-icon symbol="heart" size="md"></btu-icon>
|
|
27
|
+
*
|
|
28
|
+
* <!-- Gradient icon -->
|
|
29
|
+
* <btu-icon symbol="star" size="lg" gradient="primary"></btu-icon>
|
|
30
|
+
*
|
|
31
|
+
* <!-- Custom size via CSS -->
|
|
32
|
+
* <btu-icon symbol="check" style="--Icon-size: 3rem"></btu-icon>
|
|
33
|
+
*
|
|
34
|
+
* <!-- Filled icon via CSS (advanced usage) -->
|
|
35
|
+
* <btu-icon symbol="heart" style="--Icon-fill: currentColor"></btu-icon>
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* // Programmatic usage
|
|
41
|
+
* const icon = document.createElement('btu-icon')
|
|
42
|
+
* icon.symbol = 'smile'
|
|
43
|
+
* icon.size = 'lg'
|
|
44
|
+
* icon.addEventListener('btu-icon-ready', () => console.log('Icon loaded'))
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export default class Icon extends Icon_base {
|
|
48
|
+
static get tagName(): string;
|
|
49
|
+
/**
|
|
50
|
+
* Size of the icon.
|
|
51
|
+
* - 'xs': Extra small (0.75rem)
|
|
52
|
+
* - 'sm': Small (1rem)
|
|
53
|
+
* - 'md': Medium (1.25rem, default)
|
|
54
|
+
* - 'lg': Large (1.5rem)
|
|
55
|
+
* - 'xl': Extra large (1.75rem)
|
|
56
|
+
* @attr
|
|
57
|
+
*/
|
|
58
|
+
size: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
59
|
+
/**
|
|
60
|
+
* Lucide icon name to display.
|
|
61
|
+
* See https://lucide.dev/icons/ for available icons.
|
|
62
|
+
* @attr
|
|
63
|
+
*/
|
|
64
|
+
symbol: string;
|
|
65
|
+
/**
|
|
66
|
+
* Theme color to use for gradient fill.
|
|
67
|
+
* When set, icon displays with gradient. When undefined, icon inherits parent text color.
|
|
68
|
+
* @attr
|
|
69
|
+
*/
|
|
70
|
+
gradient?: 'ai' | 'error' | 'gray' | 'primary' | 'purple' | 'rose' | 'success' | 'teal' | 'warning';
|
|
71
|
+
/** @internal */
|
|
72
|
+
private initialClasses;
|
|
73
|
+
connectedCallback(): void;
|
|
74
|
+
createRenderRoot(): this;
|
|
75
|
+
willUpdate(): void;
|
|
76
|
+
firstUpdated(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Escape HTML special characters to prevent XSS attacks in comments.
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
private escapeHtml;
|
|
82
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
83
|
+
}
|
|
84
|
+
declare global {
|
|
85
|
+
interface HTMLElementTagNameMap {
|
|
86
|
+
'btu-icon': Icon;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export {};
|
|
90
|
+
//# sourceMappingURL=Icon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/components/icon/Icon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAA;AAWtC,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;CACpG;;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,SAAyC;IACzE,MAAM,KAAK,OAAO,WAEjB;IAED;;;;;;;;OAQG;IAEH,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAO;IAE7C;;;;OAIG;IAEH,MAAM,EAAE,MAAM,CAAkB;IAEhC;;;;OAIG;IAEH,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;IAEnG,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAe;IAErC,iBAAiB,IAAI,IAAI;IAQzB,gBAAgB;IAIhB,UAAU,IAAI,IAAI;IAclB,YAAY,IAAI,IAAI;IAIpB;;;OAGG;IACH,OAAO,CAAC,UAAU;IASlB,MAAM;CA+CP;AAQD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,IAAI,CAAA;KACjB;CACF"}
|