kemet-ui 5.0.0 → 5.0.2
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 +1 -1
- package/custom-elements.json +3355 -3272
- package/dist/{constants-W9QKPlZP.d.ts → constants-CHvA2ed5.d.ts} +13 -0
- package/dist/elements/accordion/index.d.ts +1 -0
- package/dist/elements/accordion/index.js +5 -1
- package/dist/elements/accordion/index.js.map +1 -1
- package/dist/elements/accordion-panel/index.d.ts +1 -0
- package/dist/elements/accordion-panel/index.js +5 -1
- package/dist/elements/accordion-panel/index.js.map +1 -1
- package/dist/elements/alert/index.d.ts +2 -1
- package/dist/elements/alert/index.js +5 -1
- package/dist/elements/alert/index.js.map +1 -1
- package/dist/elements/avatar/index.d.ts +2 -1
- package/dist/elements/avatar/index.js +5 -1
- package/dist/elements/avatar/index.js.map +1 -1
- package/dist/elements/avatars/index.d.ts +1 -0
- package/dist/elements/avatars/index.js +5 -1
- package/dist/elements/avatars/index.js.map +1 -1
- package/dist/elements/badge/index.d.ts +2 -1
- package/dist/elements/badge/index.js +5 -1
- package/dist/elements/badge/index.js.map +1 -1
- package/dist/elements/button/index.d.ts +2 -1
- package/dist/elements/button/index.js +5 -1
- package/dist/elements/button/index.js.map +1 -1
- package/dist/elements/card/index.d.ts +2 -1
- package/dist/elements/card/index.js +5 -1
- package/dist/elements/card/index.js.map +1 -1
- package/dist/elements/checkbox/index.d.ts +2 -1
- package/dist/elements/checkbox/index.js +7 -1
- package/dist/elements/checkbox/index.js.map +1 -1
- package/dist/elements/combo/index.d.ts +1 -1
- package/dist/elements/combo/index.js +5 -1
- package/dist/elements/combo/index.js.map +1 -1
- package/dist/elements/count/index.d.ts +1 -1
- package/dist/elements/count/index.js +28 -1
- package/dist/elements/count/index.js.map +1 -1
- package/dist/elements/dialog/index.d.ts +2 -1
- package/dist/elements/dialog/index.js +5 -1
- package/dist/elements/dialog/index.js.map +1 -1
- package/dist/elements/dialog-close/index.d.ts +1 -0
- package/dist/elements/dialog-close/index.js +5 -1
- package/dist/elements/dialog-close/index.js.map +1 -1
- package/dist/elements/drawer/effects.js +1 -1
- package/dist/elements/drawer/effects.js.map +1 -1
- package/dist/elements/drawer/index.d.ts +1 -0
- package/dist/elements/drawer/index.js +6 -2
- package/dist/elements/drawer/index.js.map +1 -1
- package/dist/elements/fab/index.d.ts +2 -1
- package/dist/elements/fab/index.js +5 -1
- package/dist/elements/fab/index.js.map +1 -1
- package/dist/elements/field/index.d.ts +1 -1
- package/dist/elements/field/index.js +5 -1
- package/dist/elements/field/index.js.map +1 -1
- package/dist/elements/flipcard/index.d.ts +2 -1
- package/dist/elements/flipcard/index.js +5 -1
- package/dist/elements/flipcard/index.js.map +1 -1
- package/dist/elements/flipcard-trigger/index.d.ts +1 -0
- package/dist/elements/flipcard-trigger/index.js +5 -1
- package/dist/elements/flipcard-trigger/index.js.map +1 -1
- package/dist/elements/icon/index.d.ts +2 -1
- package/dist/elements/icon/index.js +8 -2
- package/dist/elements/icon/index.js.map +1 -1
- package/dist/elements/input/index.d.ts +1 -1
- package/dist/elements/input/index.js +9 -3
- package/dist/elements/input/index.js.map +1 -1
- package/dist/elements/input/styles.css.js +2 -2
- package/dist/elements/input/styles.css.js.map +1 -1
- package/dist/elements/input-combo/index.d.ts +2 -1
- package/dist/elements/input-combo/index.js +7 -1
- package/dist/elements/input-combo/index.js.map +1 -1
- package/dist/elements/input-file/index.d.ts +1 -1
- package/dist/elements/input-file/index.js +39 -249
- package/dist/elements/input-file/index.js.map +1 -1
- package/dist/elements/input-file/styles.css.js +8 -8
- package/dist/elements/input-file/styles.css.js.map +1 -1
- package/dist/elements/input-files/index.d.ts +1 -1
- package/dist/elements/input-files/index.js +29 -237
- package/dist/elements/input-files/index.js.map +1 -1
- package/dist/elements/input-files/styles.css.js +2 -2
- package/dist/elements/input-files/styles.css.js.map +1 -1
- package/dist/elements/input-otp/index.d.ts +1 -0
- package/dist/elements/input-otp/index.js +5 -1
- package/dist/elements/input-otp/index.js.map +1 -1
- package/dist/elements/loader/index.d.ts +1 -0
- package/dist/elements/loader/index.js +5 -1
- package/dist/elements/loader/index.js.map +1 -1
- package/dist/elements/password/index.d.ts +2 -2
- package/dist/elements/password/index.js +24 -234
- package/dist/elements/password/index.js.map +1 -1
- package/dist/elements/radio/index.d.ts +1 -0
- package/dist/elements/radio/index.js +7 -1
- package/dist/elements/radio/index.js.map +1 -1
- package/dist/elements/radios/index.d.ts +2 -1
- package/dist/elements/radios/index.js +5 -1
- package/dist/elements/radios/index.js.map +1 -1
- package/dist/elements/rotator/index.d.ts +1 -0
- package/dist/elements/rotator/index.js +7 -2
- package/dist/elements/rotator/index.js.map +1 -1
- package/dist/elements/select/index.d.ts +2 -1
- package/dist/elements/select/index.js +28 -25
- package/dist/elements/select/index.js.map +1 -1
- package/dist/elements/select-option/index.d.ts +1 -0
- package/dist/elements/select-option/index.js +7 -1
- package/dist/elements/select-option/index.js.map +1 -1
- package/dist/elements/sortable/index.d.ts +1 -0
- package/dist/elements/sortable/index.js +7 -1
- package/dist/elements/sortable/index.js.map +1 -1
- package/dist/elements/sortable-item/index.d.ts +1 -0
- package/dist/elements/sortable-item/index.js +5 -1
- package/dist/elements/sortable-item/index.js.map +1 -1
- package/dist/elements/tab/index.d.ts +1 -1
- package/dist/elements/tab/index.js +18 -228
- package/dist/elements/tab/index.js.map +1 -1
- package/dist/elements/tab-panel/index.d.ts +1 -0
- package/dist/elements/tab-panel/index.js +5 -1
- package/dist/elements/tab-panel/index.js.map +1 -1
- package/dist/elements/tabs/index.d.ts +3 -2
- package/dist/elements/tabs/index.js +44 -246
- package/dist/elements/tabs/index.js.map +1 -1
- package/dist/elements/textarea/index.d.ts +1 -1
- package/dist/elements/textarea/index.js +9 -3
- package/dist/elements/textarea/index.js.map +1 -1
- package/dist/elements/textarea/styles.css.js +2 -2
- package/dist/elements/textarea/styles.css.js.map +1 -1
- package/dist/elements/timer/index.d.ts +1 -0
- package/dist/elements/timer/index.js +11 -7
- package/dist/elements/timer/index.js.map +1 -1
- package/dist/elements/timer-display/index.d.ts +1 -1
- package/dist/elements/timer-display/index.js +19 -16
- package/dist/elements/timer-display/index.js.map +1 -1
- package/dist/elements/toggle/index.d.ts +1 -0
- package/dist/elements/toggle/index.js +5 -1
- package/dist/elements/toggle/index.js.map +1 -1
- package/dist/elements/tracker/index.d.ts +1 -2
- package/dist/elements/tracker/index.js +10 -19
- package/dist/elements/tracker/index.js.map +1 -1
- package/dist/elements/tracker-step/index.d.ts +1 -2
- package/dist/elements/tracker-step/index.js +46 -240
- package/dist/elements/tracker-step/index.js.map +1 -1
- package/dist/elements/typewriter/index.d.ts +1 -0
- package/dist/elements/typewriter/index.js +7 -1
- package/dist/elements/typewriter/index.js.map +1 -1
- package/dist/{index-h1DTXXCf.d.ts → index-n43o0UmE.d.ts} +13 -7
- package/dist/wrappers/react.d.ts +2 -2
- package/dist/wrappers/react.js +489 -491
- package/dist/wrappers/react.js.map +1 -1
- package/package.json +2 -3
|
@@ -10,237 +10,20 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
// src/elements/input-file/index.ts
|
|
13
|
-
import { html as html2, LitElement as LitElement2 } from "lit";
|
|
14
|
-
import { customElement as customElement2, property as property2 } from "lit/decorators.js";
|
|
15
|
-
|
|
16
|
-
// src/elements/icon/index.ts
|
|
17
13
|
import { html, LitElement } from "lit";
|
|
18
|
-
import { customElement, property, state } from "lit/decorators.js";
|
|
19
|
-
import { isTemplateResult } from "lit/directive-helpers.js";
|
|
20
14
|
|
|
21
|
-
// src/utilities/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
);
|
|
26
|
-
};
|
|
15
|
+
// src/utilities/decorators.ts
|
|
16
|
+
import { property, state, query, queryAll } from "lit/decorators.js";
|
|
17
|
+
import { customElement as litCustomElement } from "lit/decorators.js";
|
|
18
|
+
var customElement = (tagName) => (classOrDescriptor) => typeof customElements !== "undefined" && !customElements.get(tagName) ? litCustomElement(tagName)(classOrDescriptor) : classOrDescriptor;
|
|
27
19
|
|
|
28
|
-
// src/elements/
|
|
20
|
+
// src/elements/input-file/styles.css.ts
|
|
29
21
|
import { css } from "lit";
|
|
30
22
|
var styles_css_default = css`:host {
|
|
31
|
-
display: inline-flex;
|
|
32
|
-
align-items: center;
|
|
33
|
-
justify-content: center;
|
|
34
|
-
color: inherit;
|
|
35
|
-
}
|
|
36
|
-
`;
|
|
37
|
-
|
|
38
|
-
// src/elements/icon/index.ts
|
|
39
|
-
var CACHEABLE_ERROR = /* @__PURE__ */ Symbol();
|
|
40
|
-
var RETRYABLE_ERROR = /* @__PURE__ */ Symbol();
|
|
41
|
-
var parser;
|
|
42
|
-
var iconCache = /* @__PURE__ */ new Map();
|
|
43
|
-
var MAX_CONCURRENT_REQUESTS = 10;
|
|
44
|
-
var requestQueue = [];
|
|
45
|
-
var activeRequests = 0;
|
|
46
|
-
function queueRequest(callback) {
|
|
47
|
-
if (activeRequests < MAX_CONCURRENT_REQUESTS) {
|
|
48
|
-
activeRequests++;
|
|
49
|
-
callback();
|
|
50
|
-
} else {
|
|
51
|
-
requestQueue.push(callback);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
function requestComplete() {
|
|
55
|
-
activeRequests--;
|
|
56
|
-
if (requestQueue.length > 0) {
|
|
57
|
-
const nextRequest = requestQueue.shift();
|
|
58
|
-
if (nextRequest) {
|
|
59
|
-
activeRequests++;
|
|
60
|
-
nextRequest();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
var KemetIcon = class extends LitElement {
|
|
65
|
-
constructor() {
|
|
66
|
-
super(...arguments);
|
|
67
|
-
this.name = "house";
|
|
68
|
-
this.library = "bootstrap";
|
|
69
|
-
this.family = "regular";
|
|
70
|
-
this.size = 16;
|
|
71
|
-
this.dom = "initializing";
|
|
72
|
-
this.svg = null;
|
|
73
|
-
this.url = "https://unpkg.com/bootstrap-icons@latest/icons";
|
|
74
|
-
/** @internal */
|
|
75
|
-
this.isVisible = false;
|
|
76
|
-
}
|
|
77
|
-
connectedCallback() {
|
|
78
|
-
super.connectedCallback();
|
|
79
|
-
this.updateUrl();
|
|
80
|
-
if (!this.svg) {
|
|
81
|
-
this.isVisible = true;
|
|
82
|
-
this.setIcon();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
updated() {
|
|
86
|
-
this.updateUrl();
|
|
87
|
-
this.updateSize();
|
|
88
|
-
}
|
|
89
|
-
firstUpdated() {
|
|
90
|
-
emitEvent(this, "kemet-icon-mounted", {
|
|
91
|
-
bubbles: true,
|
|
92
|
-
composed: true,
|
|
93
|
-
detail: {
|
|
94
|
-
element: this
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
this.dom = "mounted";
|
|
98
|
-
}
|
|
99
|
-
render() {
|
|
100
|
-
if (this.svg) {
|
|
101
|
-
return this.svg;
|
|
102
|
-
}
|
|
103
|
-
if (!this.isVisible) {
|
|
104
|
-
this.isVisible = true;
|
|
105
|
-
this.setIcon();
|
|
106
|
-
}
|
|
107
|
-
return html`<svg part="svg" width="${this.size}" height="${this.size}" viewBox="0 0 16 16"></svg>`;
|
|
108
|
-
}
|
|
109
|
-
/** Public method to force icon loading */
|
|
110
|
-
loadIcon() {
|
|
111
|
-
this.isVisible = true;
|
|
112
|
-
this.setIcon();
|
|
113
|
-
}
|
|
114
|
-
async setIcon() {
|
|
115
|
-
if (!this.isVisible) return;
|
|
116
|
-
let iconResolver = iconCache.get(`${this.family}/${this.name}`);
|
|
117
|
-
if (!iconResolver) {
|
|
118
|
-
iconResolver = this.resolveIcon();
|
|
119
|
-
iconCache.set(`${this.family}/${this.name}`, iconResolver);
|
|
120
|
-
}
|
|
121
|
-
const svg = await iconResolver;
|
|
122
|
-
if (svg === RETRYABLE_ERROR) {
|
|
123
|
-
iconCache.delete(`${this.family}/${this.name}`);
|
|
124
|
-
}
|
|
125
|
-
if (isTemplateResult(svg)) {
|
|
126
|
-
this.svg = svg;
|
|
127
|
-
} else if (svg instanceof SVGSVGElement) {
|
|
128
|
-
this.svg = svg.cloneNode(true);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
updateUrl() {
|
|
132
|
-
switch (this.library) {
|
|
133
|
-
case "fontawesome" /* FONTAWESOME */:
|
|
134
|
-
this.version = this.version || "7.3.1";
|
|
135
|
-
this.url = `https://unpkg.com/@fortawesome/fontawesome-free@${this.version}/svgs`;
|
|
136
|
-
break;
|
|
137
|
-
case "bootstrap" /* BOOTSTRAP */:
|
|
138
|
-
this.version = this.version || "1.11.3";
|
|
139
|
-
this.url = `https://unpkg.com/bootstrap-icons@${this.version}/icons`;
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
async resolveIcon() {
|
|
144
|
-
return new Promise((resolve) => {
|
|
145
|
-
queueRequest(async () => {
|
|
146
|
-
let fileData;
|
|
147
|
-
let fetchURL = `${this.url}/${this.family}/${this.name}.svg`;
|
|
148
|
-
switch (this.library) {
|
|
149
|
-
case "fontawesome" /* FONTAWESOME */:
|
|
150
|
-
fetchURL = `${this.url}/${this.family}/${this.name}.svg`;
|
|
151
|
-
break;
|
|
152
|
-
case "bootstrap" /* BOOTSTRAP */:
|
|
153
|
-
fetchURL = `${this.url}/${this.name}.svg`;
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
try {
|
|
157
|
-
fileData = await fetch(fetchURL);
|
|
158
|
-
if (!fileData.ok) {
|
|
159
|
-
requestComplete();
|
|
160
|
-
resolve(fileData.status === 410 ? CACHEABLE_ERROR : RETRYABLE_ERROR);
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
} catch {
|
|
164
|
-
requestComplete();
|
|
165
|
-
resolve(RETRYABLE_ERROR);
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
try {
|
|
169
|
-
const div = document.createElement("div");
|
|
170
|
-
div.innerHTML = await fileData.text();
|
|
171
|
-
const svg = div.firstElementChild;
|
|
172
|
-
if (svg?.tagName?.toLowerCase() !== "svg") {
|
|
173
|
-
requestComplete();
|
|
174
|
-
resolve(CACHEABLE_ERROR);
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
if (!parser) parser = new DOMParser();
|
|
178
|
-
const doc = parser.parseFromString(svg.outerHTML, "text/html");
|
|
179
|
-
const svgEl = doc.body.querySelector("svg");
|
|
180
|
-
if (!svgEl) {
|
|
181
|
-
requestComplete();
|
|
182
|
-
resolve(CACHEABLE_ERROR);
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
svgEl.part.add("svg");
|
|
186
|
-
svgEl.setAttribute("width", `${this.size}px`);
|
|
187
|
-
svgEl.setAttribute("height", `${this.size}px`);
|
|
188
|
-
requestComplete();
|
|
189
|
-
resolve(document.adoptNode(svgEl));
|
|
190
|
-
} catch {
|
|
191
|
-
requestComplete();
|
|
192
|
-
resolve(CACHEABLE_ERROR);
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
updateSize() {
|
|
198
|
-
if (this.svg) {
|
|
199
|
-
const svg = this.svg;
|
|
200
|
-
svg.setAttribute("width", `${this.size}px`);
|
|
201
|
-
svg.setAttribute("height", `${this.size}px`);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
KemetIcon.styles = [styles_css_default];
|
|
206
|
-
__decorateClass([
|
|
207
|
-
property({ type: String })
|
|
208
|
-
], KemetIcon.prototype, "name", 2);
|
|
209
|
-
__decorateClass([
|
|
210
|
-
property({ type: String })
|
|
211
|
-
], KemetIcon.prototype, "library", 2);
|
|
212
|
-
__decorateClass([
|
|
213
|
-
property({ type: String })
|
|
214
|
-
], KemetIcon.prototype, "family", 2);
|
|
215
|
-
__decorateClass([
|
|
216
|
-
property({ type: Number })
|
|
217
|
-
], KemetIcon.prototype, "size", 2);
|
|
218
|
-
__decorateClass([
|
|
219
|
-
property({ type: String })
|
|
220
|
-
], KemetIcon.prototype, "version", 2);
|
|
221
|
-
__decorateClass([
|
|
222
|
-
property({ type: String, reflect: true })
|
|
223
|
-
], KemetIcon.prototype, "polarity", 2);
|
|
224
|
-
__decorateClass([
|
|
225
|
-
property({ type: String, reflect: true })
|
|
226
|
-
], KemetIcon.prototype, "dom", 2);
|
|
227
|
-
__decorateClass([
|
|
228
|
-
state()
|
|
229
|
-
], KemetIcon.prototype, "svg", 2);
|
|
230
|
-
__decorateClass([
|
|
231
|
-
state()
|
|
232
|
-
], KemetIcon.prototype, "url", 2);
|
|
233
|
-
KemetIcon = __decorateClass([
|
|
234
|
-
customElement("kemet-icon")
|
|
235
|
-
], KemetIcon);
|
|
236
|
-
|
|
237
|
-
// src/elements/input-file/styles.css.ts
|
|
238
|
-
import { css as css2 } from "lit";
|
|
239
|
-
var styles_css_default2 = css2`:host {
|
|
240
23
|
--kemet-upload-file-ripple-color: var(--kemet-color-font-active);
|
|
241
|
-
--kemet-upload-file-color:
|
|
24
|
+
--kemet-upload-file-color: inherit;
|
|
242
25
|
--kemet-upload-file-padding: 0.5rem 1rem;
|
|
243
|
-
--kemet-upload-file-border: 1px solid
|
|
26
|
+
--kemet-upload-file-border: 1px solid;
|
|
244
27
|
|
|
245
28
|
color: var(--kemet-upload-file-color);
|
|
246
29
|
display: grid;
|
|
@@ -253,11 +36,11 @@ var styles_css_default2 = css2`:host {
|
|
|
253
36
|
border: var(--kemet-upload-file-border);
|
|
254
37
|
}
|
|
255
38
|
|
|
256
|
-
:host([status=
|
|
39
|
+
:host([status=error]) {
|
|
257
40
|
border: 1px solid var(--kemet-color-font-error);
|
|
258
41
|
}
|
|
259
42
|
|
|
260
|
-
:host([status=
|
|
43
|
+
:host([status=complete]) {
|
|
261
44
|
border: 1px solid var(--kemet-color-font-success);
|
|
262
45
|
}
|
|
263
46
|
|
|
@@ -275,20 +58,20 @@ h3 {
|
|
|
275
58
|
transform: scale(0.8);
|
|
276
59
|
}
|
|
277
60
|
|
|
278
|
-
:host([status=
|
|
279
|
-
:host([status=
|
|
61
|
+
:host([status=complete]) .message,
|
|
62
|
+
:host([status=complete]) .indicator {
|
|
280
63
|
color: rgb(var(--kemet-color-success));
|
|
281
64
|
}
|
|
282
65
|
|
|
283
|
-
:host([status=
|
|
284
|
-
:host([status=
|
|
66
|
+
:host([status=error]) .message,
|
|
67
|
+
:host([status=error]) .indicator {
|
|
285
68
|
color: rgb(var(--kemet-color-error));
|
|
286
69
|
}
|
|
287
70
|
`;
|
|
288
71
|
|
|
289
72
|
// src/elements/input-file/loaders.css.ts
|
|
290
|
-
import { css as
|
|
291
|
-
var loaders_css_default =
|
|
73
|
+
import { css as css2 } from "lit";
|
|
74
|
+
var loaders_css_default = css2`.lds-ripple {
|
|
292
75
|
display: inline-block;
|
|
293
76
|
position: relative;
|
|
294
77
|
width: 80px;
|
|
@@ -339,6 +122,13 @@ var loaders_css_default = css3`.lds-ripple {
|
|
|
339
122
|
}
|
|
340
123
|
`;
|
|
341
124
|
|
|
125
|
+
// src/utilities/events.ts
|
|
126
|
+
var emitEvent = (element, name, detail, bubbles = true, composed = true) => {
|
|
127
|
+
element.dispatchEvent(
|
|
128
|
+
new CustomEvent(name, { bubbles, composed, detail })
|
|
129
|
+
);
|
|
130
|
+
};
|
|
131
|
+
|
|
342
132
|
// src/elements/input-file/index.ts
|
|
343
133
|
var formatBytes = (bytes, decimals = 2) => {
|
|
344
134
|
if (bytes === 0) return "0 Bytes";
|
|
@@ -348,7 +138,7 @@ var formatBytes = (bytes, decimals = 2) => {
|
|
|
348
138
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
349
139
|
return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`;
|
|
350
140
|
};
|
|
351
|
-
var InputFile = class extends
|
|
141
|
+
var InputFile = class extends LitElement {
|
|
352
142
|
constructor() {
|
|
353
143
|
super(...arguments);
|
|
354
144
|
this.loaded = 0;
|
|
@@ -370,14 +160,14 @@ var InputFile = class extends LitElement2 {
|
|
|
370
160
|
this.percent = this.calculatePercent();
|
|
371
161
|
}
|
|
372
162
|
render() {
|
|
373
|
-
return
|
|
163
|
+
return html`
|
|
374
164
|
<div class="percentage" part="percentage">
|
|
375
165
|
<span>${this.percent}%</span>
|
|
376
166
|
</div>
|
|
377
167
|
<div>
|
|
378
168
|
<h3 part="filename">${this.name}</h3>
|
|
379
169
|
<span part="loaded">${formatBytes(this.loaded)} / ${formatBytes(this.size)}</span>
|
|
380
|
-
${this.message ?
|
|
170
|
+
${this.message ? html`<div class="message" part="message">${this.message}</div>` : null}
|
|
381
171
|
</div>
|
|
382
172
|
<div class="indicator" part="indicator">
|
|
383
173
|
${this.getStatusIcon()}
|
|
@@ -390,47 +180,47 @@ var InputFile = class extends LitElement2 {
|
|
|
390
180
|
}
|
|
391
181
|
getStatusIcon() {
|
|
392
182
|
if (this.status === "uploading") {
|
|
393
|
-
return
|
|
183
|
+
return html`<div class="lds-ripple"><div></div><div></div></div>`;
|
|
394
184
|
}
|
|
395
185
|
if (this.status === "complete") {
|
|
396
|
-
return
|
|
186
|
+
return html`<kemet-icon name="check-circle" size="48"></kemet-icon>`;
|
|
397
187
|
}
|
|
398
188
|
if (this.status === "error") {
|
|
399
|
-
return
|
|
189
|
+
return html`<kemet-icon name="exclamation-circle" size="48"></kemet-icon>`;
|
|
400
190
|
}
|
|
401
191
|
return null;
|
|
402
192
|
}
|
|
403
193
|
};
|
|
404
|
-
InputFile.styles = [
|
|
194
|
+
InputFile.styles = [styles_css_default, loaders_css_default];
|
|
405
195
|
__decorateClass([
|
|
406
|
-
|
|
196
|
+
property({ type: String })
|
|
407
197
|
], InputFile.prototype, "name", 2);
|
|
408
198
|
__decorateClass([
|
|
409
|
-
|
|
199
|
+
property({ type: Number })
|
|
410
200
|
], InputFile.prototype, "loaded", 2);
|
|
411
201
|
__decorateClass([
|
|
412
|
-
|
|
202
|
+
property({ type: Number })
|
|
413
203
|
], InputFile.prototype, "size", 2);
|
|
414
204
|
__decorateClass([
|
|
415
|
-
|
|
205
|
+
property({ type: String })
|
|
416
206
|
], InputFile.prototype, "type", 2);
|
|
417
207
|
__decorateClass([
|
|
418
|
-
|
|
208
|
+
property({ type: String, reflect: true })
|
|
419
209
|
], InputFile.prototype, "status", 2);
|
|
420
210
|
__decorateClass([
|
|
421
|
-
|
|
211
|
+
property({ type: Number })
|
|
422
212
|
], InputFile.prototype, "percent", 2);
|
|
423
213
|
__decorateClass([
|
|
424
|
-
|
|
214
|
+
property({ type: String })
|
|
425
215
|
], InputFile.prototype, "message", 2);
|
|
426
216
|
__decorateClass([
|
|
427
|
-
|
|
217
|
+
property({ type: String, reflect: true })
|
|
428
218
|
], InputFile.prototype, "polarity", 2);
|
|
429
219
|
__decorateClass([
|
|
430
|
-
|
|
220
|
+
property({ type: String, reflect: true })
|
|
431
221
|
], InputFile.prototype, "dom", 2);
|
|
432
222
|
InputFile = __decorateClass([
|
|
433
|
-
|
|
223
|
+
customElement("kemet-input-file")
|
|
434
224
|
], InputFile);
|
|
435
225
|
export {
|
|
436
226
|
InputFile as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/input-file/index.ts","../../../src/elements/icon/index.ts","../../../src/utilities/events.ts","../../../src/elements/icon/styles.css.ts","../../../src/elements/input-file/styles.css.ts","../../../src/elements/input-file/loaders.css.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../icon';\nimport styles from './styles.css.ts';\nimport loaderStyles from './loaders.css.ts';\nimport { emitEvent } from '../../utilities/events';\n\nconst formatBytes = (bytes: number, decimals = 2) => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`;\n};\n\n/**\n * @since 1.3.0\n * @status stable\n *\n * @tagname kemet-input-file\n * @summary Displays a file to be uploaded.\n *\n * @prop {string} name - The name of the file\n * @prop {number} loaded - The number of bytes loaded\n * @prop {number} size - The file size in bytes\n * @prop {string} type - The file type\n * @prop {string} status - The status of the file. Values are complete | uploading | error.\n * @prop {number} percent - Percentage of file completion that's calculated by the loaded property.\n * @prop {string} message - An error message to give to users\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @cssproperty --kemet-upload-file-color - The default text color.\n * @cssproperty --kemet-upload-file-padding - The padding around the file.\n * @cssproperty --kemet-upload-file-border - The border around the file.\n *\n * @csspart percentage - Area that displays the percentage.\n * @csspart filename - Area that displays file name.\n * @csspart loaded - Area that displays how much has uploaded.\n * @csspart message - Area for the error message.\n * @csspart indicator - Area for status icon.\n *\n * @fires kemet-input-file-mounted - Fired when the input file is mounted to the DOM\n * @detail {HTMLElement} element - The input file element\n */\n\n@customElement('kemet-input-file')\nexport default class InputFile extends LitElement {\n static styles = [styles, loaderStyles];\n\n @property({ type: String })\n name!: string;\n\n @property({ type: Number })\n loaded: number = 0;\n\n @property({ type: Number })\n size: number = 0;\n\n @property({ type: String })\n type!: string;\n\n @property({ type: String, reflect: true })\n status!: string;\n\n @property({ type: Number })\n percent: number = 0;\n\n @property({ type: String })\n message!: string;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n firstUpdated() {\n emitEvent(this, 'kemet-input-file-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated() {\n this.percent = this.calculatePercent();\n }\n\n render() {\n return html`\n <div class=\"percentage\" part=\"percentage\">\n <span>${this.percent}%</span>\n </div>\n <div>\n <h3 part=\"filename\">${this.name}</h3>\n <span part=\"loaded\">${formatBytes(this.loaded)} / ${formatBytes(this.size)}</span>\n ${this.message ? html`<div class=\"message\" part=\"message\">${this.message}</div>` : null}\n </div>\n <div class=\"indicator\" part=\"indicator\">\n ${this.getStatusIcon()}\n </div>\n `;\n }\n\n calculatePercent() {\n const percent = Math.round((this.loaded * 100.0) / this.size);\n return percent > 100 ? 100 : percent;\n }\n\n getStatusIcon() {\n if (this.status === 'uploading') {\n return html`<div class=\"lds-ripple\"><div></div><div></div></div>`;\n }\n\n if (this.status === 'complete') {\n return html`<kemet-icon name=\"check-circle\" size=\"48\"></kemet-icon>`;\n }\n\n if (this.status === 'error') {\n return html`<kemet-icon name=\"exclamation-circle\" size=\"48\"></kemet-icon>`;\n }\n\n return null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-input-file': InputFile\n }\n}\n","import { html, HTMLTemplateResult, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { isTemplateResult } from 'lit/directive-helpers.js';\nimport { emitEvent } from '../../utilities/events';\nimport styles from './styles.css.ts';\n\nconst CACHEABLE_ERROR = Symbol();\nconst RETRYABLE_ERROR = Symbol();\ntype SVGResult = HTMLTemplateResult | SVGSVGElement | typeof RETRYABLE_ERROR | typeof CACHEABLE_ERROR;\n\nlet parser: DOMParser;\nconst iconCache = new Map<string, Promise<SVGResult>>();\n\n// Request queue with concurrency limit\nconst MAX_CONCURRENT_REQUESTS = 10;\nconst requestQueue: Array<() => void> = [];\nlet activeRequests = 0;\n\nfunction queueRequest(callback: () => void) {\n if (activeRequests < MAX_CONCURRENT_REQUESTS) {\n activeRequests++;\n callback();\n } else {\n requestQueue.push(callback);\n }\n}\n\nfunction requestComplete() {\n activeRequests--;\n if (requestQueue.length > 0) {\n const nextRequest = requestQueue.shift();\n if (nextRequest) {\n activeRequests++;\n nextRequest();\n }\n }\n}\n\nexport enum EnumLibrary {\n FONTAWESOME = 'fontawesome',\n BOOTSTRAP = 'bootstrap',\n}\n\n/**\n * @since 5.0.0\n * @status stable\n *\n * @tagname kemet-icon\n * @summary An element that represents an icon from a predefined set of open sourced icons.\n *\n * @prop {string} name - The name of the icon to reference.\n * @prop {string} library - The library of icons to use. Values include: (bootstrap | fontawesome)\n * @prop {string} family - The family of icons to use. The family is relative to the library being used. Font awesome values include: (regular | solid | brand)\n * @prop {string} version - The version of the icon library to use. Use latest to grab the most recent version.\n * @prop {number} size - The width and height of the icon in pixels.\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @fires kemet-icon-mounted - Fired when the icon is mounted to the DOM\n * @detail {HTMLElement} element - The icon element\n *\n */\n\n@customElement('kemet-icon')\nexport default class KemetIcon extends LitElement {\n static styles = [styles];\n\n @property({ type: String })\n name: string = 'house';\n\n @property({ type: String })\n library: string = 'bootstrap';\n\n @property({ type: String })\n family: string = 'regular';\n\n @property({ type: Number })\n size: number = 16;\n\n @property({ type: String })\n version?: string;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n /** @internal */\n @state()\n private svg: SVGElement | HTMLTemplateResult | null = null;\n\n /** @internal */\n @state()\n private url: string = 'https://unpkg.com/bootstrap-icons@latest/icons';\n\n /** @internal */\n private isVisible: boolean = false;\n\n connectedCallback() {\n super.connectedCallback();\n // Load icon when connected to DOM\n this.updateUrl();\n if (!this.svg) {\n this.isVisible = true;\n this.setIcon();\n }\n }\n\n updated() {\n this.updateUrl();\n this.updateSize();\n }\n\n firstUpdated() {\n emitEvent(this, 'kemet-icon-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n // Return the svg if it's loaded, otherwise show placeholder\n if (this.svg) {\n return this.svg;\n }\n\n // If not loaded, trigger loading\n if (!this.isVisible) {\n this.isVisible = true;\n this.setIcon();\n }\n\n return html`<svg part=\"svg\" width=\"${this.size}\" height=\"${this.size}\" viewBox=\"0 0 16 16\"></svg>`;\n }\n\n /** Public method to force icon loading */\n public loadIcon() {\n this.isVisible = true;\n this.setIcon();\n }\n\n async setIcon() {\n if (!this.isVisible) return;\n\n let iconResolver = iconCache.get(`${this.family}/${this.name}`);\n\n if (!iconResolver) {\n iconResolver = this.resolveIcon();\n iconCache.set(`${this.family}/${this.name}`, iconResolver);\n }\n\n const svg = await iconResolver;\n\n if (svg === RETRYABLE_ERROR) {\n iconCache.delete(`${this.family}/${this.name}`);\n }\n\n if (isTemplateResult(svg)) {\n this.svg = svg;\n } else if (svg instanceof SVGSVGElement) {\n // Clone the SVG so each icon instance gets its own copy\n this.svg = svg.cloneNode(true) as SVGSVGElement;\n }\n }\n\n private updateUrl() {\n switch (this.library) {\n case EnumLibrary.FONTAWESOME:\n this.version = this.version || '7.3.1';\n this.url = `https://unpkg.com/@fortawesome/fontawesome-free@${this.version}/svgs`;\n break;\n case EnumLibrary.BOOTSTRAP:\n this.version = this.version || '1.11.3';\n this.url = `https://unpkg.com/bootstrap-icons@${this.version}/icons`;\n break;\n }\n }\n\n private async resolveIcon(): Promise<SVGResult> {\n return new Promise((resolve) => {\n queueRequest(async () => {\n let fileData: Response;\n let fetchURL: string = `${this.url}/${this.family}/${this.name}.svg`;\n\n switch (this.library) {\n case EnumLibrary.FONTAWESOME:\n fetchURL = `${this.url}/${this.family}/${this.name}.svg`;\n break;\n case EnumLibrary.BOOTSTRAP:\n fetchURL = `${this.url}/${this.name}.svg`;\n break;\n }\n\n try {\n fileData = await fetch(fetchURL);\n if (!fileData.ok) {\n requestComplete();\n resolve(fileData.status === 410 ? CACHEABLE_ERROR : RETRYABLE_ERROR);\n return;\n }\n } catch {\n requestComplete();\n resolve(RETRYABLE_ERROR);\n return;\n }\n\n try {\n const div = document.createElement('div');\n div.innerHTML = await fileData.text();\n\n const svg = div.firstElementChild;\n if (svg?.tagName?.toLowerCase() !== 'svg') {\n requestComplete();\n resolve(CACHEABLE_ERROR);\n return;\n }\n\n if (!parser) parser = new DOMParser();\n const doc = parser.parseFromString(svg.outerHTML, 'text/html');\n\n const svgEl = doc.body.querySelector('svg');\n if (!svgEl) {\n requestComplete();\n resolve(CACHEABLE_ERROR);\n return;\n }\n\n svgEl.part.add('svg');\n svgEl.setAttribute('width', `${this.size}px`);\n svgEl.setAttribute('height', `${this.size}px`);\n\n requestComplete();\n resolve(document.adoptNode(svgEl));\n } catch {\n requestComplete();\n resolve(CACHEABLE_ERROR);\n }\n });\n });\n }\n\n private updateSize() {\n if (this.svg) {\n const svg = this.svg as SVGElement;\n svg.setAttribute('width', `${this.size}px`);\n svg.setAttribute('height', `${this.size}px`);\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-icon': KemetIcon\n }\n}\n","export const emitEvent = (element, name, detail, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n","import { css } from 'lit';\n\nexport default css`:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n}\n`;\n","import { css } from 'lit';\n\nexport default css`:host {\n --kemet-upload-file-ripple-color: var(--kemet-color-font-active);\n --kemet-upload-file-color: var(--kemet-color-font-base);\n --kemet-upload-file-padding: 0.5rem 1rem;\n --kemet-upload-file-border: 1px solid var(--kemet-color-font-base);\n\n color: var(--kemet-upload-file-color);\n display: grid;\n gap: 1rem;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n height: 100%;\n max-height: 50%;\n padding: var(--kemet-upload-file-padding);\n border: var(--kemet-upload-file-border);\n}\n\n:host([status='error']) {\n border: 1px solid var(--kemet-color-font-error);\n}\n\n:host([status='complete']) {\n border: 1px solid var(--kemet-color-font-success);\n}\n\nh3 {\n margin: 0;\n}\n\n.percentage {\n font-size: clamp(2rem, 3vw, 2.5rem);\n align-self: center;\n justify-self: center;\n}\n\n.indicator {\n transform: scale(0.8);\n}\n\n:host([status='complete']) .message,\n:host([status='complete']) .indicator {\n color: rgb(var(--kemet-color-success));\n}\n\n:host([status='error']) .message,\n:host([status='error']) .indicator {\n color: rgb(var(--kemet-color-error));\n}\n`;\n","import { css } from 'lit';\n\nexport default css`.lds-ripple {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.lds-ripple div {\n position: absolute;\n border: 4px solid var(--kemet-upload-file-ripple-color);\n opacity: 1;\n border-radius: var(--kemet-border-radius-circle);\n animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite;\n}\n\n.lds-ripple div:nth-child(2) {\n animation-delay: -0.5s;\n}\n\n@keyframes lds-ripple {\n 0% {\n top: 36px;\n left: 36px;\n width: 0;\n height: 0;\n opacity: 0;\n }\n 4.9% {\n top: 36px;\n left: 36px;\n width: 0;\n height: 0;\n opacity: 0;\n }\n 5% {\n top: 36px;\n left: 36px;\n width: 0;\n height: 0;\n opacity: 1;\n }\n 100% {\n top: 0px;\n left: 0px;\n width: 72px;\n height: 72px;\n opacity: 0;\n }\n}\n`;\n"],"mappings":"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","names":["html","LitElement","customElement","property","css","styles_css_default","css","LitElement","html","styles_css_default","property","customElement"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/input-file/index.ts","../../../src/utilities/decorators.ts","../../../src/elements/input-file/styles.css.ts","../../../src/elements/input-file/loaders.css.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport styles from './styles.css.ts';\nimport loaderStyles from './loaders.css.ts';\nimport { emitEvent } from '../../utilities/events';\n\nconst formatBytes = (bytes: number, decimals = 2) => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`;\n};\n\n/**\n * @since 1.3.0\n * @status stable\n *\n * @tagname kemet-input-file\n * @summary Displays a file to be uploaded.\n * @ssrsafe yes\n *\n * @prop {string} name - The name of the file\n * @prop {number} loaded - The number of bytes loaded\n * @prop {number} size - The file size in bytes\n * @prop {string} type - The file type\n * @prop {string} status - The status of the file. Values are complete | uploading | error.\n * @prop {number} percent - Percentage of file completion that's calculated by the loaded property.\n * @prop {string} message - An error message to give to users\n * @prop {'light' | 'dark'} polarity - Determines if the component has a dark or light background\n * @prop {string} dom - The status of dom initalization.\n *\n * @cssproperty --kemet-upload-file-color - The default text color.\n * @cssproperty --kemet-upload-file-padding - The padding around the file.\n * @cssproperty --kemet-upload-file-border - The border around the file.\n *\n * @csspart percentage - Area that displays the percentage.\n * @csspart filename - Area that displays file name.\n * @csspart loaded - Area that displays how much has uploaded.\n * @csspart message - Area for the error message.\n * @csspart indicator - Area for status icon.\n *\n * @fires kemet-input-file-mounted - Fired when the input file is mounted to the DOM\n * @detail {HTMLElement} element - The input file element\n */\n\n@customElement('kemet-input-file')\nexport default class InputFile extends LitElement {\n static styles = [styles, loaderStyles];\n\n @property({ type: String })\n name!: string;\n\n @property({ type: Number })\n loaded: number = 0;\n\n @property({ type: Number })\n size: number = 0;\n\n @property({ type: String })\n type!: string;\n\n @property({ type: String, reflect: true })\n status!: string;\n\n @property({ type: Number })\n percent: number = 0;\n\n @property({ type: String })\n message!: string;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n firstUpdated() {\n emitEvent(this, 'kemet-input-file-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated() {\n this.percent = this.calculatePercent();\n }\n\n render() {\n return html`\n <div class=\"percentage\" part=\"percentage\">\n <span>${this.percent}%</span>\n </div>\n <div>\n <h3 part=\"filename\">${this.name}</h3>\n <span part=\"loaded\">${formatBytes(this.loaded)} / ${formatBytes(this.size)}</span>\n ${this.message ? html`<div class=\"message\" part=\"message\">${this.message}</div>` : null}\n </div>\n <div class=\"indicator\" part=\"indicator\">\n ${this.getStatusIcon()}\n </div>\n `;\n }\n\n calculatePercent() {\n const percent = Math.round((this.loaded * 100.0) / this.size);\n return percent > 100 ? 100 : percent;\n }\n\n getStatusIcon() {\n if (this.status === 'uploading') {\n return html`<div class=\"lds-ripple\"><div></div><div></div></div>`;\n }\n\n if (this.status === 'complete') {\n return html`<kemet-icon name=\"check-circle\" size=\"48\"></kemet-icon>`;\n }\n\n if (this.status === 'error') {\n return html`<kemet-icon name=\"exclamation-circle\" size=\"48\"></kemet-icon>`;\n }\n\n return null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-input-file': InputFile\n }\n}\n","export { property, state, query, queryAll } from 'lit/decorators.js';\nimport { customElement as litCustomElement } from 'lit/decorators.js';\n\n/**\n * A drop-in replacement for lit's `customElement` decorator that is safe under\n * hot-module-replacement / live-reload environments where the module may be\n * re-evaluated.\n */\nexport const customElement = (tagName: string) => (classOrDescriptor: any) =>\n typeof customElements !== 'undefined' && !customElements.get(tagName)\n ? litCustomElement(tagName)(classOrDescriptor)\n : classOrDescriptor;\n","import { css } from 'lit';\n\nexport default css`:host {\n --kemet-upload-file-ripple-color: var(--kemet-color-font-active);\n --kemet-upload-file-color: inherit;\n --kemet-upload-file-padding: 0.5rem 1rem;\n --kemet-upload-file-border: 1px solid;\n\n color: var(--kemet-upload-file-color);\n display: grid;\n gap: 1rem;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n height: 100%;\n max-height: 50%;\n padding: var(--kemet-upload-file-padding);\n border: var(--kemet-upload-file-border);\n}\n\n:host([status=error]) {\n border: 1px solid var(--kemet-color-font-error);\n}\n\n:host([status=complete]) {\n border: 1px solid var(--kemet-color-font-success);\n}\n\nh3 {\n margin: 0;\n}\n\n.percentage {\n font-size: clamp(2rem, 3vw, 2.5rem);\n align-self: center;\n justify-self: center;\n}\n\n.indicator {\n transform: scale(0.8);\n}\n\n:host([status=complete]) .message,\n:host([status=complete]) .indicator {\n color: rgb(var(--kemet-color-success));\n}\n\n:host([status=error]) .message,\n:host([status=error]) .indicator {\n color: rgb(var(--kemet-color-error));\n}\n`;\n","import { css } from 'lit';\n\nexport default css`.lds-ripple {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.lds-ripple div {\n position: absolute;\n border: 4px solid var(--kemet-upload-file-ripple-color);\n opacity: 1;\n border-radius: var(--kemet-border-radius-circle);\n animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite;\n}\n\n.lds-ripple div:nth-child(2) {\n animation-delay: -0.5s;\n}\n\n@keyframes lds-ripple {\n 0% {\n top: 36px;\n left: 36px;\n width: 0;\n height: 0;\n opacity: 0;\n }\n 4.9% {\n top: 36px;\n left: 36px;\n width: 0;\n height: 0;\n opacity: 0;\n }\n 5% {\n top: 36px;\n left: 36px;\n width: 0;\n height: 0;\n opacity: 1;\n }\n 100% {\n top: 0px;\n left: 0px;\n width: 72px;\n height: 72px;\n opacity: 0;\n }\n}\n`;\n","export const emitEvent = (element, name, detail, bubbles = true, composed = true) => {\n element.dispatchEvent(\n new CustomEvent(name, { bubbles, composed, detail }),\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,MAAM,kBAAkB;;;ACAjC,SAAS,UAAU,OAAO,OAAO,gBAAgB;AACjD,SAAS,iBAAiB,wBAAwB;AAO3C,IAAM,gBAAgB,CAAC,YAAoB,CAAC,sBACjD,OAAO,mBAAmB,eAAe,CAAC,eAAe,IAAI,OAAO,IAChE,iBAAiB,OAAO,EAAE,iBAAiB,IAC3C;;;ACXN,SAAS,WAAW;AAEpB,IAAO,qBAAQ;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;;;ACFf,SAAS,OAAAA,YAAW;AAEpB,IAAO,sBAAQA;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;;;ACFR,IAAM,YAAY,CAAC,SAAS,MAAM,QAAQ,UAAU,MAAM,WAAW,SAAS;AACnF,UAAQ;AAAA,IACN,IAAI,YAAY,MAAM,EAAE,SAAS,UAAU,OAAO,CAAC;AAAA,EACrD;AACF;;;AJEA,IAAM,cAAc,CAAC,OAAe,WAAW,MAAM;AACnD,MAAI,UAAU,EAAG,QAAO;AAExB,QAAM,IAAI;AACV,QAAM,KAAK,WAAW,IAAI,IAAI;AAC9B,QAAM,QAAQ,CAAC,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAEtE,QAAM,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;AAElD,SAAO,GAAG,YAAY,QAAQ,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAChE;AAmCA,IAAqB,YAArB,cAAuC,WAAW;AAAA,EAAlD;AAAA;AAOE,kBAAiB;AAGjB,gBAAe;AASf,mBAAkB;AASlB,eAAc;AAAA;AAAA,EAEd,eAAe;AACb,cAAU,MAAM,4BAA4B;AAAA,MAC1C,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AACD,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,UAAU;AACR,SAAK,UAAU,KAAK,iBAAiB;AAAA,EACvC;AAAA,EAEA,SAAS;AACP,WAAO;AAAA;AAAA,gBAEK,KAAK,OAAO;AAAA;AAAA;AAAA,8BAGE,KAAK,IAAI;AAAA,8BACT,YAAY,KAAK,MAAM,CAAC,MAAM,YAAY,KAAK,IAAI,CAAC;AAAA,UACxE,KAAK,UAAU,2CAA2C,KAAK,OAAO,WAAW,IAAI;AAAA;AAAA;AAAA,UAGrF,KAAK,cAAc,CAAC;AAAA;AAAA;AAAA,EAG5B;AAAA,EAEA,mBAAmB;AACjB,UAAM,UAAU,KAAK,MAAO,KAAK,SAAS,MAAS,KAAK,IAAI;AAC5D,WAAO,UAAU,MAAM,MAAM;AAAA,EAC/B;AAAA,EAEA,gBAAgB;AACd,QAAI,KAAK,WAAW,aAAa;AAC/B,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,WAAW,YAAY;AAC9B,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,WAAW,SAAS;AAC3B,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AACF;AAjFqB,UACZ,SAAS,CAAC,oBAAQ,mBAAY;AAGrC;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAHP,UAInB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GANP,UAOnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GATP,UAUnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAZP,UAanB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAftB,UAgBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAlBP,UAmBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GArBP,UAsBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAxBtB,UAyBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GA3BtB,UA4BnB;AA5BmB,YAArB;AAAA,EADC,cAAc,kBAAkB;AAAA,GACZ;","names":["css"]}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { css } from "lit";
|
|
3
3
|
var styles_css_default = css`:host {
|
|
4
4
|
--kemet-upload-file-ripple-color: var(--kemet-color-font-active);
|
|
5
|
-
--kemet-upload-file-color:
|
|
5
|
+
--kemet-upload-file-color: inherit;
|
|
6
6
|
--kemet-upload-file-padding: 0.5rem 1rem;
|
|
7
|
-
--kemet-upload-file-border: 1px solid
|
|
7
|
+
--kemet-upload-file-border: 1px solid;
|
|
8
8
|
|
|
9
9
|
color: var(--kemet-upload-file-color);
|
|
10
10
|
display: grid;
|
|
@@ -17,11 +17,11 @@ var styles_css_default = css`:host {
|
|
|
17
17
|
border: var(--kemet-upload-file-border);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
:host([status=
|
|
20
|
+
:host([status=error]) {
|
|
21
21
|
border: 1px solid var(--kemet-color-font-error);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
:host([status=
|
|
24
|
+
:host([status=complete]) {
|
|
25
25
|
border: 1px solid var(--kemet-color-font-success);
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -39,13 +39,13 @@ h3 {
|
|
|
39
39
|
transform: scale(0.8);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
:host([status=
|
|
43
|
-
:host([status=
|
|
42
|
+
:host([status=complete]) .message,
|
|
43
|
+
:host([status=complete]) .indicator {
|
|
44
44
|
color: rgb(var(--kemet-color-success));
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
:host([status=
|
|
48
|
-
:host([status=
|
|
47
|
+
:host([status=error]) .message,
|
|
48
|
+
:host([status=error]) .indicator {
|
|
49
49
|
color: rgb(var(--kemet-color-error));
|
|
50
50
|
}
|
|
51
51
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/input-file/styles.css.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport default css`:host {\n --kemet-upload-file-ripple-color: var(--kemet-color-font-active);\n --kemet-upload-file-color:
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/input-file/styles.css.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport default css`:host {\n --kemet-upload-file-ripple-color: var(--kemet-color-font-active);\n --kemet-upload-file-color: inherit;\n --kemet-upload-file-padding: 0.5rem 1rem;\n --kemet-upload-file-border: 1px solid;\n\n color: var(--kemet-upload-file-color);\n display: grid;\n gap: 1rem;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n height: 100%;\n max-height: 50%;\n padding: var(--kemet-upload-file-padding);\n border: var(--kemet-upload-file-border);\n}\n\n:host([status=error]) {\n border: 1px solid var(--kemet-color-font-error);\n}\n\n:host([status=complete]) {\n border: 1px solid var(--kemet-color-font-success);\n}\n\nh3 {\n margin: 0;\n}\n\n.percentage {\n font-size: clamp(2rem, 3vw, 2.5rem);\n align-self: center;\n justify-self: center;\n}\n\n.indicator {\n transform: scale(0.8);\n}\n\n:host([status=complete]) .message,\n:host([status=complete]) .indicator {\n color: rgb(var(--kemet-color-success));\n}\n\n:host([status=error]) .message,\n:host([status=error]) .indicator {\n color: rgb(var(--kemet-color-error));\n}\n`;\n"],"mappings":";AAAA,SAAS,WAAW;AAEpB,IAAO,qBAAQ;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;","names":[]}
|
|
@@ -2,7 +2,6 @@ import * as lit_html from 'lit-html';
|
|
|
2
2
|
import * as lit from 'lit';
|
|
3
3
|
import { LitElement } from 'lit';
|
|
4
4
|
import InputFile from '../input-file/index.js';
|
|
5
|
-
import '../icon/index.js';
|
|
6
5
|
|
|
7
6
|
interface InterfaceUploadChangeDetails {
|
|
8
7
|
event: Event | DragEvent;
|
|
@@ -15,6 +14,7 @@ interface InterfaceUploadChangeDetails {
|
|
|
15
14
|
*
|
|
16
15
|
* @tagname kemet-input-files
|
|
17
16
|
* @summary An interface for inputing files.
|
|
17
|
+
* @ssrsafe yes
|
|
18
18
|
*
|
|
19
19
|
* @prop {string} slug - A unique identifier for the component
|
|
20
20
|
* @prop {string} accept - Determines what file types are accepted
|