@krollins/blueprint 0.1.11 → 0.1.13
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/dist/components/accordion.js +393 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert.js +213 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/avatar.js +237 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.js +144 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/breadcrumb.js +481 -0
- package/dist/components/breadcrumb.js.map +1 -0
- package/dist/components/button.js +192 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/card.js +223 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/checkbox.js +337 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/color-picker.js +1660 -0
- package/dist/components/color-picker.js.map +1 -0
- package/dist/components/combobox.js +595 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/date-picker.js +726 -0
- package/dist/components/date-picker.js.map +1 -0
- package/dist/components/divider.js +214 -0
- package/dist/components/divider.js.map +1 -0
- package/dist/components/drawer.js +568 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/dropdown.js +377 -0
- package/dist/components/dropdown.js.map +1 -0
- package/dist/components/file-upload.js +669 -0
- package/dist/components/file-upload.js.map +1 -0
- package/dist/components/heading.js +161 -0
- package/dist/components/heading.js.map +1 -0
- package/dist/components/icon.js +599 -0
- package/dist/components/icon.js.map +1 -0
- package/dist/components/input.js +363 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/link.js +178 -0
- package/dist/components/link.js.map +1 -0
- package/dist/components/menu.js +331 -0
- package/dist/components/menu.js.map +1 -0
- package/dist/components/modal.js +317 -0
- package/dist/components/modal.js.map +1 -0
- package/dist/components/multi-select.js +642 -0
- package/dist/components/multi-select.js.map +1 -0
- package/dist/components/notification.js +429 -0
- package/dist/components/notification.js.map +1 -0
- package/dist/components/number-input.js +556 -0
- package/dist/components/number-input.js.map +1 -0
- package/dist/components/pagination.js +320 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/popover.js +597 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.js +219 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio.js +321 -0
- package/dist/components/radio.js.map +1 -0
- package/dist/components/select.js +498 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/skeleton.js +240 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.js +9 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/spinner.js +133 -0
- package/dist/components/spinner.js.map +1 -0
- package/dist/components/stepper.js +812 -0
- package/dist/components/stepper.js.map +1 -0
- package/dist/components/switch.js +380 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table.js +642 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.js +547 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/tag.js +291 -0
- package/dist/components/tag.js.map +1 -0
- package/dist/components/text.js +278 -0
- package/dist/components/text.js.map +1 -0
- package/dist/components/textarea.js +380 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/time-picker.js +457 -0
- package/dist/components/time-picker.js.map +1 -0
- package/dist/components/tooltip.js +239 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/tree.js +582 -0
- package/dist/components/tree.js.map +1 -0
- package/dist/index.js +93 -17799
- package/dist/index.js.map +1 -1
- package/dist/shared/boolean-converter-XDGfS9LC.js +12 -0
- package/dist/shared/boolean-converter-XDGfS9LC.js.map +1 -0
- package/dist/shared/debounce-BckY30Sf.js +23 -0
- package/dist/shared/debounce-BckY30Sf.js.map +1 -0
- package/dist/shared/memoize-DlOFy-92.js +16 -0
- package/dist/shared/memoize-DlOFy-92.js.map +1 -0
- package/dist/shared/slider-BNt5TITl.js +484 -0
- package/dist/shared/slider-BNt5TITl.js.map +1 -0
- package/package.json +49 -3
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { css as c, LitElement as u, nothing as h, html as d } from "lit";
|
|
2
|
+
import { property as a, customElement as k } from "lit/decorators.js";
|
|
3
|
+
import { b as m } from "../shared/boolean-converter-XDGfS9LC.js";
|
|
4
|
+
const g = c`
|
|
5
|
+
/* Base styles */
|
|
6
|
+
:host {
|
|
7
|
+
display: block;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.skeleton {
|
|
11
|
+
background-color: var(--bp-color-surface-subdued);
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
position: relative;
|
|
14
|
+
width: var(--skeleton-width, auto);
|
|
15
|
+
height: var(--skeleton-height, auto);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* Animation */
|
|
19
|
+
.skeleton--animated::after {
|
|
20
|
+
content: '';
|
|
21
|
+
position: absolute;
|
|
22
|
+
inset: 0;
|
|
23
|
+
background: linear-gradient(
|
|
24
|
+
90deg,
|
|
25
|
+
transparent 0%,
|
|
26
|
+
rgba(255, 255, 255, 0.6) 50%,
|
|
27
|
+
transparent 100%
|
|
28
|
+
);
|
|
29
|
+
animation: skeleton-shimmer 1.5s infinite linear;
|
|
30
|
+
transform: translateX(-100%);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@keyframes skeleton-shimmer {
|
|
34
|
+
0% {
|
|
35
|
+
transform: translateX(-100%);
|
|
36
|
+
}
|
|
37
|
+
100% {
|
|
38
|
+
transform: translateX(100%);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Respect user motion preferences */
|
|
43
|
+
@media (prefers-reduced-motion: reduce) {
|
|
44
|
+
.skeleton--animated::after {
|
|
45
|
+
animation: none;
|
|
46
|
+
opacity: 0.7;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Variants */
|
|
51
|
+
.skeleton--text {
|
|
52
|
+
border-radius: var(--bp-border-radius-sm);
|
|
53
|
+
width: 100%;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.skeleton--circular {
|
|
57
|
+
border-radius: var(--bp-border-radius-full);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.skeleton--rectangular {
|
|
61
|
+
border-radius: 2px;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.skeleton--rounded {
|
|
65
|
+
border-radius: var(--bp-border-radius-lg);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* Sizes for text variant */
|
|
69
|
+
.skeleton--text.skeleton--sm {
|
|
70
|
+
height: var(--bp-spacing-3);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.skeleton--text.skeleton--md {
|
|
74
|
+
height: var(--bp-spacing-4);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.skeleton--text.skeleton--lg {
|
|
78
|
+
height: var(--bp-spacing-6);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Sizes for circular variant */
|
|
82
|
+
.skeleton--circular.skeleton--sm {
|
|
83
|
+
width: var(--bp-spacing-8);
|
|
84
|
+
height: var(--bp-spacing-8);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.skeleton--circular.skeleton--md {
|
|
88
|
+
width: var(--bp-spacing-10);
|
|
89
|
+
height: var(--bp-spacing-10);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.skeleton--circular.skeleton--lg {
|
|
93
|
+
width: var(--bp-spacing-12);
|
|
94
|
+
height: var(--bp-spacing-12);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* Sizes for rectangular/rounded variants */
|
|
98
|
+
.skeleton--rectangular.skeleton--sm,
|
|
99
|
+
.skeleton--rounded.skeleton--sm {
|
|
100
|
+
height: var(--bp-spacing-10);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.skeleton--rectangular.skeleton--md,
|
|
104
|
+
.skeleton--rounded.skeleton--md {
|
|
105
|
+
height: var(--bp-spacing-16);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.skeleton--rectangular.skeleton--lg,
|
|
109
|
+
.skeleton--rounded.skeleton--lg {
|
|
110
|
+
height: var(--bp-spacing-24);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* Text lines container */
|
|
114
|
+
.skeleton__lines {
|
|
115
|
+
display: flex;
|
|
116
|
+
flex-direction: column;
|
|
117
|
+
gap: var(--bp-spacing-3);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* Last line in multi-line text is shorter */
|
|
121
|
+
.skeleton--last-line {
|
|
122
|
+
width: 75%;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* Static state (no animation) */
|
|
126
|
+
:host([animated='false']) .skeleton::after,
|
|
127
|
+
.skeleton:not(.skeleton--animated)::after {
|
|
128
|
+
display: none;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
:host([animated='false']) .skeleton,
|
|
132
|
+
.skeleton:not(.skeleton--animated) {
|
|
133
|
+
opacity: 0.6;
|
|
134
|
+
}
|
|
135
|
+
`;
|
|
136
|
+
var v = Object.defineProperty, b = Object.getOwnPropertyDescriptor, i = (e, t, r, o) => {
|
|
137
|
+
for (var s = o > 1 ? void 0 : o ? b(t, r) : t, l = e.length - 1, p; l >= 0; l--)
|
|
138
|
+
(p = e[l]) && (s = (o ? p(t, r, s) : p(s)) || s);
|
|
139
|
+
return o && s && v(t, r, s), s;
|
|
140
|
+
};
|
|
141
|
+
let n = class extends u {
|
|
142
|
+
constructor() {
|
|
143
|
+
super(), this.variant = "text", this.width = "", this.height = "", this.animated = !0, this.lines = 1, this.size = "md";
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Generates CSS custom properties for width and height.
|
|
147
|
+
* Uses custom properties instead of inline styles for CSP compliance.
|
|
148
|
+
* @returns CSS string with custom property declarations
|
|
149
|
+
*/
|
|
150
|
+
getCustomProperties() {
|
|
151
|
+
const e = [];
|
|
152
|
+
return this.width && e.push(`--skeleton-width: ${this.width}`), this.height && e.push(`--skeleton-height: ${this.height}`), e.join("; ");
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Renders a single skeleton element with appropriate classes and styles.
|
|
156
|
+
* @returns Template result for a single skeleton
|
|
157
|
+
*/
|
|
158
|
+
renderSingleSkeleton() {
|
|
159
|
+
const e = [
|
|
160
|
+
"skeleton",
|
|
161
|
+
`skeleton--${this.variant}`,
|
|
162
|
+
`skeleton--${this.size}`,
|
|
163
|
+
this.animated ? "skeleton--animated" : ""
|
|
164
|
+
].filter(Boolean).join(" "), t = this.getCustomProperties();
|
|
165
|
+
return d`
|
|
166
|
+
<div class=${e} part="base" style=${t || h}>
|
|
167
|
+
<slot></slot>
|
|
168
|
+
</div>
|
|
169
|
+
`;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Renders text skeleton lines.
|
|
173
|
+
* If variant is text and lines > 1, renders multiple lines with a container.
|
|
174
|
+
* Otherwise delegates to renderSingleSkeleton.
|
|
175
|
+
* @returns Template result for text lines or single skeleton
|
|
176
|
+
*/
|
|
177
|
+
renderTextLines() {
|
|
178
|
+
if (this.variant !== "text" || this.lines <= 1)
|
|
179
|
+
return this.renderSingleSkeleton();
|
|
180
|
+
const e = this.getCustomProperties(), t = [];
|
|
181
|
+
for (let r = 0; r < this.lines; r++) {
|
|
182
|
+
const o = r === this.lines - 1, s = [
|
|
183
|
+
"skeleton",
|
|
184
|
+
"skeleton--text",
|
|
185
|
+
`skeleton--${this.size}`,
|
|
186
|
+
this.animated ? "skeleton--animated" : "",
|
|
187
|
+
o ? "skeleton--last-line" : ""
|
|
188
|
+
].filter(Boolean).join(" ");
|
|
189
|
+
t.push(
|
|
190
|
+
d`<div
|
|
191
|
+
class=${s}
|
|
192
|
+
part="base"
|
|
193
|
+
style=${e || h}
|
|
194
|
+
></div>`
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
return d`<div class="skeleton__lines">${t}</div>`;
|
|
198
|
+
}
|
|
199
|
+
render() {
|
|
200
|
+
return this.renderTextLines();
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
n.styles = [g];
|
|
204
|
+
i([
|
|
205
|
+
a({
|
|
206
|
+
type: String,
|
|
207
|
+
reflect: !0,
|
|
208
|
+
converter: {
|
|
209
|
+
fromAttribute: (e) => e && ["text", "circular", "rectangular", "rounded"].includes(e) ? e : "text"
|
|
210
|
+
}
|
|
211
|
+
})
|
|
212
|
+
], n.prototype, "variant", 2);
|
|
213
|
+
i([
|
|
214
|
+
a({ type: String })
|
|
215
|
+
], n.prototype, "width", 2);
|
|
216
|
+
i([
|
|
217
|
+
a({ type: String })
|
|
218
|
+
], n.prototype, "height", 2);
|
|
219
|
+
i([
|
|
220
|
+
a({ converter: m, reflect: !0 })
|
|
221
|
+
], n.prototype, "animated", 2);
|
|
222
|
+
i([
|
|
223
|
+
a({
|
|
224
|
+
type: Number,
|
|
225
|
+
converter: (e) => {
|
|
226
|
+
const t = Number(e);
|
|
227
|
+
return t > 0 ? t : 1;
|
|
228
|
+
}
|
|
229
|
+
})
|
|
230
|
+
], n.prototype, "lines", 2);
|
|
231
|
+
i([
|
|
232
|
+
a({ type: String })
|
|
233
|
+
], n.prototype, "size", 2);
|
|
234
|
+
n = i([
|
|
235
|
+
k("bp-skeleton")
|
|
236
|
+
], n);
|
|
237
|
+
export {
|
|
238
|
+
n as BpSkeleton
|
|
239
|
+
};
|
|
240
|
+
//# sourceMappingURL=skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.js","sources":["../../source/components/skeleton/skeleton.style.ts","../../source/components/skeleton/skeleton.ts"],"sourcesContent":["import { css } from 'lit';\r\n\r\nexport const skeletonStyles = css`\r\n /* Base styles */\r\n :host {\r\n display: block;\r\n }\r\n\r\n .skeleton {\r\n background-color: var(--bp-color-surface-subdued);\r\n overflow: hidden;\r\n position: relative;\r\n width: var(--skeleton-width, auto);\r\n height: var(--skeleton-height, auto);\r\n }\r\n\r\n /* Animation */\r\n .skeleton--animated::after {\r\n content: '';\r\n position: absolute;\r\n inset: 0;\r\n background: linear-gradient(\r\n 90deg,\r\n transparent 0%,\r\n rgba(255, 255, 255, 0.6) 50%,\r\n transparent 100%\r\n );\r\n animation: skeleton-shimmer 1.5s infinite linear;\r\n transform: translateX(-100%);\r\n }\r\n\r\n @keyframes skeleton-shimmer {\r\n 0% {\r\n transform: translateX(-100%);\r\n }\r\n 100% {\r\n transform: translateX(100%);\r\n }\r\n }\r\n\r\n /* Respect user motion preferences */\r\n @media (prefers-reduced-motion: reduce) {\r\n .skeleton--animated::after {\r\n animation: none;\r\n opacity: 0.7;\r\n }\r\n }\r\n\r\n /* Variants */\r\n .skeleton--text {\r\n border-radius: var(--bp-border-radius-sm);\r\n width: 100%;\r\n }\r\n\r\n .skeleton--circular {\r\n border-radius: var(--bp-border-radius-full);\r\n }\r\n\r\n .skeleton--rectangular {\r\n border-radius: 2px;\r\n }\r\n\r\n .skeleton--rounded {\r\n border-radius: var(--bp-border-radius-lg);\r\n }\r\n\r\n /* Sizes for text variant */\r\n .skeleton--text.skeleton--sm {\r\n height: var(--bp-spacing-3);\r\n }\r\n\r\n .skeleton--text.skeleton--md {\r\n height: var(--bp-spacing-4);\r\n }\r\n\r\n .skeleton--text.skeleton--lg {\r\n height: var(--bp-spacing-6);\r\n }\r\n\r\n /* Sizes for circular variant */\r\n .skeleton--circular.skeleton--sm {\r\n width: var(--bp-spacing-8);\r\n height: var(--bp-spacing-8);\r\n }\r\n\r\n .skeleton--circular.skeleton--md {\r\n width: var(--bp-spacing-10);\r\n height: var(--bp-spacing-10);\r\n }\r\n\r\n .skeleton--circular.skeleton--lg {\r\n width: var(--bp-spacing-12);\r\n height: var(--bp-spacing-12);\r\n }\r\n\r\n /* Sizes for rectangular/rounded variants */\r\n .skeleton--rectangular.skeleton--sm,\r\n .skeleton--rounded.skeleton--sm {\r\n height: var(--bp-spacing-10);\r\n }\r\n\r\n .skeleton--rectangular.skeleton--md,\r\n .skeleton--rounded.skeleton--md {\r\n height: var(--bp-spacing-16);\r\n }\r\n\r\n .skeleton--rectangular.skeleton--lg,\r\n .skeleton--rounded.skeleton--lg {\r\n height: var(--bp-spacing-24);\r\n }\r\n\r\n /* Text lines container */\r\n .skeleton__lines {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--bp-spacing-3);\r\n }\r\n\r\n /* Last line in multi-line text is shorter */\r\n .skeleton--last-line {\r\n width: 75%;\r\n }\r\n\r\n /* Static state (no animation) */\r\n :host([animated='false']) .skeleton::after,\r\n .skeleton:not(.skeleton--animated)::after {\r\n display: none;\r\n }\r\n\r\n :host([animated='false']) .skeleton,\r\n .skeleton:not(.skeleton--animated) {\r\n opacity: 0.6;\r\n }\r\n`;\r\n","import { LitElement, html, nothing } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { skeletonStyles } from './skeleton.style.js';\r\nimport { booleanConverter } from '../../utilities/boolean-converter.js';\r\n\r\n/**\r\n * A skeleton loading placeholder that indicates content is loading.\r\n * Use skeletons to reduce perceived loading time and provide visual feedback.\r\n *\r\n * @slot - Optional slot for custom skeleton content\r\n *\r\n * @csspart base - The skeleton container element\r\n */\r\n@customElement('bp-skeleton')\r\nexport class BpSkeleton extends LitElement {\r\n /** The visual variant of the skeleton */\r\n @property({\r\n type: String,\r\n reflect: true,\r\n converter: {\r\n fromAttribute: (value: string | null) => {\r\n const valid = ['text', 'circular', 'rectangular', 'rounded'];\r\n return value && valid.includes(value) ? value : 'text';\r\n },\r\n },\r\n })\r\n declare variant: 'text' | 'circular' | 'rectangular' | 'rounded';\r\n\r\n /** Width of the skeleton. Can be any valid CSS value. */\r\n @property({ type: String }) declare width: string;\r\n\r\n /** Height of the skeleton. Can be any valid CSS value. */\r\n @property({ type: String }) declare height: string;\r\n\r\n /** Whether to animate the skeleton with a shimmer effect */\r\n @property({ converter: booleanConverter, reflect: true })\r\n declare animated: boolean;\r\n\r\n /** Number of lines to display (only for text variant) */\r\n @property({\r\n type: Number,\r\n converter: (value: string | null) => {\r\n const num = Number(value);\r\n return num > 0 ? num : 1;\r\n },\r\n })\r\n declare lines: number;\r\n\r\n /** The size preset (affects default dimensions) */\r\n @property({ type: String }) declare size: 'sm' | 'md' | 'lg';\r\n\r\n static styles = [skeletonStyles];\r\n\r\n constructor() {\r\n super();\r\n this.variant = 'text';\r\n this.width = '';\r\n this.height = '';\r\n this.animated = true;\r\n this.lines = 1;\r\n this.size = 'md';\r\n }\r\n\r\n /**\r\n * Generates CSS custom properties for width and height.\r\n * Uses custom properties instead of inline styles for CSP compliance.\r\n * @returns CSS string with custom property declarations\r\n */\r\n private getCustomProperties(): string {\r\n const props: string[] = [];\r\n\r\n if (this.width) {\r\n props.push(`--skeleton-width: ${this.width}`);\r\n }\r\n\r\n if (this.height) {\r\n props.push(`--skeleton-height: ${this.height}`);\r\n }\r\n\r\n return props.join('; ');\r\n }\r\n\r\n /**\r\n * Renders a single skeleton element with appropriate classes and styles.\r\n * @returns Template result for a single skeleton\r\n */\r\n private renderSingleSkeleton() {\r\n const classes = [\r\n 'skeleton',\r\n `skeleton--${this.variant}`,\r\n `skeleton--${this.size}`,\r\n this.animated ? 'skeleton--animated' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const customProps = this.getCustomProperties();\r\n\r\n return html`\r\n <div class=${classes} part=\"base\" style=${customProps || nothing}>\r\n <slot></slot>\r\n </div>\r\n `;\r\n }\r\n\r\n /**\r\n * Renders text skeleton lines.\r\n * If variant is text and lines > 1, renders multiple lines with a container.\r\n * Otherwise delegates to renderSingleSkeleton.\r\n * @returns Template result for text lines or single skeleton\r\n */\r\n private renderTextLines() {\r\n if (this.variant !== 'text' || this.lines <= 1) {\r\n return this.renderSingleSkeleton();\r\n }\r\n\r\n const customProps = this.getCustomProperties();\r\n const lineElements = [];\r\n for (let i = 0; i < this.lines; i++) {\r\n const isLastLine = i === this.lines - 1;\r\n const classes = [\r\n 'skeleton',\r\n 'skeleton--text',\r\n `skeleton--${this.size}`,\r\n this.animated ? 'skeleton--animated' : '',\r\n isLastLine ? 'skeleton--last-line' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n lineElements.push(\r\n html`<div\r\n class=${classes}\r\n part=\"base\"\r\n style=${customProps || nothing}\r\n ></div>`\r\n );\r\n }\r\n\r\n return html`<div class=\"skeleton__lines\">${lineElements}</div>`;\r\n }\r\n\r\n render() {\r\n return this.renderTextLines();\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'bp-skeleton': BpSkeleton;\r\n }\r\n}\r\n"],"names":["skeletonStyles","css","BpSkeleton","LitElement","props","classes","customProps","html","nothing","lineElements","i","isLastLine","__decorateClass","property","value","booleanConverter","num","customElement"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { css as l, LitElement as b, html as d } from "lit";
|
|
2
|
+
import { property as a, customElement as v } from "lit/decorators.js";
|
|
3
|
+
const m = l`
|
|
4
|
+
/* Base styles */
|
|
5
|
+
:host {
|
|
6
|
+
display: inline-flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.spinner {
|
|
12
|
+
display: inline-flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
justify-content: center;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.spinner__circle {
|
|
18
|
+
border-radius: var(--bp-border-radius-full);
|
|
19
|
+
border-style: solid;
|
|
20
|
+
border-color: transparent;
|
|
21
|
+
animation: bp-spinner-rotate var(--bp-ease-linear) infinite;
|
|
22
|
+
will-change: transform;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* Variants */
|
|
26
|
+
.spinner--primary .spinner__circle {
|
|
27
|
+
border-top-color: var(--bp-color-primary);
|
|
28
|
+
border-right-color: var(--bp-color-primary);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.spinner--success .spinner__circle {
|
|
32
|
+
border-top-color: var(--bp-color-success);
|
|
33
|
+
border-right-color: var(--bp-color-success);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.spinner--error .spinner__circle {
|
|
37
|
+
border-top-color: var(--bp-color-error);
|
|
38
|
+
border-right-color: var(--bp-color-error);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.spinner--warning .spinner__circle {
|
|
42
|
+
border-top-color: var(--bp-color-warning);
|
|
43
|
+
border-right-color: var(--bp-color-warning);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.spinner--inverse .spinner__circle {
|
|
47
|
+
border-top-color: var(--bp-color-text-inverse);
|
|
48
|
+
border-right-color: var(--bp-color-text-inverse);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.spinner--neutral .spinner__circle {
|
|
52
|
+
border-top-color: var(--bp-color-text-muted);
|
|
53
|
+
border-right-color: var(--bp-color-text-muted);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Sizes */
|
|
57
|
+
.spinner--sm .spinner__circle {
|
|
58
|
+
width: var(--bp-spacing-4);
|
|
59
|
+
height: var(--bp-spacing-4);
|
|
60
|
+
border-width: var(--bp-spacing-xs);
|
|
61
|
+
animation-duration: var(--bp-duration-normal);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.spinner--md .spinner__circle {
|
|
65
|
+
width: var(--bp-spacing-6);
|
|
66
|
+
height: var(--bp-spacing-6);
|
|
67
|
+
border-width: var(--bp-spacing-xs);
|
|
68
|
+
animation-duration: var(--bp-duration-slow);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.spinner--lg .spinner__circle {
|
|
72
|
+
width: var(--bp-spacing-8);
|
|
73
|
+
height: var(--bp-spacing-8);
|
|
74
|
+
border-width: var(--bp-spacing-xs);
|
|
75
|
+
animation-duration: 600ms;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* Animation */
|
|
79
|
+
@keyframes bp-spinner-rotate {
|
|
80
|
+
from {
|
|
81
|
+
transform: rotate(0deg);
|
|
82
|
+
}
|
|
83
|
+
to {
|
|
84
|
+
transform: rotate(360deg);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Respect user's motion preferences */
|
|
89
|
+
@media (prefers-reduced-motion: reduce) {
|
|
90
|
+
.spinner__circle {
|
|
91
|
+
animation-duration: 2s;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
`;
|
|
95
|
+
var g = Object.defineProperty, u = Object.getOwnPropertyDescriptor, o = (c, i, t, n) => {
|
|
96
|
+
for (var r = n > 1 ? void 0 : n ? u(i, t) : i, s = c.length - 1, p; s >= 0; s--)
|
|
97
|
+
(p = c[s]) && (r = (n ? p(i, t, r) : p(r)) || r);
|
|
98
|
+
return n && r && g(i, t, r), r;
|
|
99
|
+
};
|
|
100
|
+
let e = class extends b {
|
|
101
|
+
constructor() {
|
|
102
|
+
super(), this.size = "md", this.variant = "primary", this.label = "Loading...";
|
|
103
|
+
}
|
|
104
|
+
render() {
|
|
105
|
+
return d`
|
|
106
|
+
<div
|
|
107
|
+
class="spinner spinner--${this.size} spinner--${this.variant}"
|
|
108
|
+
role="status"
|
|
109
|
+
aria-label="${this.label}"
|
|
110
|
+
part="spinner"
|
|
111
|
+
>
|
|
112
|
+
<div class="spinner__circle" part="circle"></div>
|
|
113
|
+
</div>
|
|
114
|
+
`;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
e.styles = [m];
|
|
118
|
+
o([
|
|
119
|
+
a({ type: String, reflect: !0 })
|
|
120
|
+
], e.prototype, "size", 2);
|
|
121
|
+
o([
|
|
122
|
+
a({ type: String, reflect: !0 })
|
|
123
|
+
], e.prototype, "variant", 2);
|
|
124
|
+
o([
|
|
125
|
+
a({ type: String, reflect: !0 })
|
|
126
|
+
], e.prototype, "label", 2);
|
|
127
|
+
e = o([
|
|
128
|
+
v("bp-spinner")
|
|
129
|
+
], e);
|
|
130
|
+
export {
|
|
131
|
+
e as BpSpinner
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sources":["../../source/components/spinner/spinner.style.ts","../../source/components/spinner/spinner.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const spinnerStyles = css`\n /* Base styles */\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .spinner {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .spinner__circle {\n border-radius: var(--bp-border-radius-full);\n border-style: solid;\n border-color: transparent;\n animation: bp-spinner-rotate var(--bp-ease-linear) infinite;\n will-change: transform;\n }\n\n /* Variants */\n .spinner--primary .spinner__circle {\n border-top-color: var(--bp-color-primary);\n border-right-color: var(--bp-color-primary);\n }\n\n .spinner--success .spinner__circle {\n border-top-color: var(--bp-color-success);\n border-right-color: var(--bp-color-success);\n }\n\n .spinner--error .spinner__circle {\n border-top-color: var(--bp-color-error);\n border-right-color: var(--bp-color-error);\n }\n\n .spinner--warning .spinner__circle {\n border-top-color: var(--bp-color-warning);\n border-right-color: var(--bp-color-warning);\n }\n\n .spinner--inverse .spinner__circle {\n border-top-color: var(--bp-color-text-inverse);\n border-right-color: var(--bp-color-text-inverse);\n }\n\n .spinner--neutral .spinner__circle {\n border-top-color: var(--bp-color-text-muted);\n border-right-color: var(--bp-color-text-muted);\n }\n\n /* Sizes */\n .spinner--sm .spinner__circle {\n width: var(--bp-spacing-4);\n height: var(--bp-spacing-4);\n border-width: var(--bp-spacing-xs);\n animation-duration: var(--bp-duration-normal);\n }\n\n .spinner--md .spinner__circle {\n width: var(--bp-spacing-6);\n height: var(--bp-spacing-6);\n border-width: var(--bp-spacing-xs);\n animation-duration: var(--bp-duration-slow);\n }\n\n .spinner--lg .spinner__circle {\n width: var(--bp-spacing-8);\n height: var(--bp-spacing-8);\n border-width: var(--bp-spacing-xs);\n animation-duration: 600ms;\n }\n\n /* Animation */\n @keyframes bp-spinner-rotate {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n\n /* Respect user's motion preferences */\n @media (prefers-reduced-motion: reduce) {\n .spinner__circle {\n animation-duration: 2s;\n }\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { spinnerStyles } from './spinner.style.js';\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg';\nexport type SpinnerVariant =\n | 'primary'\n | 'success'\n | 'error'\n | 'warning'\n | 'inverse'\n | 'neutral';\n\n/**\n * A loading spinner component that indicates content is being loaded or processed.\n * Supports multiple sizes, variants, and an optional label for accessibility.\n */\n@customElement('bp-spinner')\nexport class BpSpinner extends LitElement {\n /**\n * Size of the spinner.\n * @type {'sm' | 'md' | 'lg'}\n * @default 'md'\n */\n @property({ type: String, reflect: true }) declare size: SpinnerSize;\n\n /**\n * Visual variant of the spinner.\n * @type {'primary' | 'success' | 'error' | 'warning' | 'inverse' | 'neutral'}\n * @default 'primary'\n */\n @property({ type: String, reflect: true }) declare variant: SpinnerVariant;\n\n /**\n * Accessible label for screen readers.\n * @type {string}\n * @default 'Loading...'\n */\n @property({ type: String, reflect: true }) declare label: string;\n\n static styles = [spinnerStyles];\n\n constructor() {\n super();\n this.size = 'md';\n this.variant = 'primary';\n this.label = 'Loading...';\n }\n\n render() {\n return html`\n <div\n class=\"spinner spinner--${this.size} spinner--${this.variant}\"\n role=\"status\"\n aria-label=\"${this.label}\"\n part=\"spinner\"\n >\n <div class=\"spinner__circle\" part=\"circle\"></div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'bp-spinner': BpSpinner;\n }\n}\n"],"names":["spinnerStyles","css","BpSpinner","LitElement","html","__decorateClass","property","customElement"],"mappings":";;AAEO,MAAMA,IAAgBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;ACgBtB,IAAMC,IAAN,cAAwBC,EAAW;AAAA,EAwBxC,cAAc;AACZ,UAAA,GACA,KAAK,OAAO,MACZ,KAAK,UAAU,WACf,KAAK,QAAQ;AAAA,EACf;AAAA,EAEA,SAAS;AACP,WAAOC;AAAA;AAAA,kCAEuB,KAAK,IAAI,aAAa,KAAK,OAAO;AAAA;AAAA,sBAE9C,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9B;AACF;AA3CaF,EAsBJ,SAAS,CAACF,CAAa;AAhBqBK,EAAA;AAAA,EAAlDC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GAN9BJ,EAMwC,WAAA,QAAA,CAAA;AAOAG,EAAA;AAAA,EAAlDC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GAb9BJ,EAawC,WAAA,WAAA,CAAA;AAOAG,EAAA;AAAA,EAAlDC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GApB9BJ,EAoBwC,WAAA,SAAA,CAAA;AApBxCA,IAANG,EAAA;AAAA,EADNE,EAAc,YAAY;AAAA,GACdL,CAAA;"}
|