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.
Files changed (147) hide show
  1. package/README.md +1 -1
  2. package/custom-elements.json +3355 -3272
  3. package/dist/{constants-W9QKPlZP.d.ts → constants-CHvA2ed5.d.ts} +13 -0
  4. package/dist/elements/accordion/index.d.ts +1 -0
  5. package/dist/elements/accordion/index.js +5 -1
  6. package/dist/elements/accordion/index.js.map +1 -1
  7. package/dist/elements/accordion-panel/index.d.ts +1 -0
  8. package/dist/elements/accordion-panel/index.js +5 -1
  9. package/dist/elements/accordion-panel/index.js.map +1 -1
  10. package/dist/elements/alert/index.d.ts +2 -1
  11. package/dist/elements/alert/index.js +5 -1
  12. package/dist/elements/alert/index.js.map +1 -1
  13. package/dist/elements/avatar/index.d.ts +2 -1
  14. package/dist/elements/avatar/index.js +5 -1
  15. package/dist/elements/avatar/index.js.map +1 -1
  16. package/dist/elements/avatars/index.d.ts +1 -0
  17. package/dist/elements/avatars/index.js +5 -1
  18. package/dist/elements/avatars/index.js.map +1 -1
  19. package/dist/elements/badge/index.d.ts +2 -1
  20. package/dist/elements/badge/index.js +5 -1
  21. package/dist/elements/badge/index.js.map +1 -1
  22. package/dist/elements/button/index.d.ts +2 -1
  23. package/dist/elements/button/index.js +5 -1
  24. package/dist/elements/button/index.js.map +1 -1
  25. package/dist/elements/card/index.d.ts +2 -1
  26. package/dist/elements/card/index.js +5 -1
  27. package/dist/elements/card/index.js.map +1 -1
  28. package/dist/elements/checkbox/index.d.ts +2 -1
  29. package/dist/elements/checkbox/index.js +7 -1
  30. package/dist/elements/checkbox/index.js.map +1 -1
  31. package/dist/elements/combo/index.d.ts +1 -1
  32. package/dist/elements/combo/index.js +5 -1
  33. package/dist/elements/combo/index.js.map +1 -1
  34. package/dist/elements/count/index.d.ts +1 -1
  35. package/dist/elements/count/index.js +28 -1
  36. package/dist/elements/count/index.js.map +1 -1
  37. package/dist/elements/dialog/index.d.ts +2 -1
  38. package/dist/elements/dialog/index.js +5 -1
  39. package/dist/elements/dialog/index.js.map +1 -1
  40. package/dist/elements/dialog-close/index.d.ts +1 -0
  41. package/dist/elements/dialog-close/index.js +5 -1
  42. package/dist/elements/dialog-close/index.js.map +1 -1
  43. package/dist/elements/drawer/effects.js +1 -1
  44. package/dist/elements/drawer/effects.js.map +1 -1
  45. package/dist/elements/drawer/index.d.ts +1 -0
  46. package/dist/elements/drawer/index.js +6 -2
  47. package/dist/elements/drawer/index.js.map +1 -1
  48. package/dist/elements/fab/index.d.ts +2 -1
  49. package/dist/elements/fab/index.js +5 -1
  50. package/dist/elements/fab/index.js.map +1 -1
  51. package/dist/elements/field/index.d.ts +1 -1
  52. package/dist/elements/field/index.js +5 -1
  53. package/dist/elements/field/index.js.map +1 -1
  54. package/dist/elements/flipcard/index.d.ts +2 -1
  55. package/dist/elements/flipcard/index.js +5 -1
  56. package/dist/elements/flipcard/index.js.map +1 -1
  57. package/dist/elements/flipcard-trigger/index.d.ts +1 -0
  58. package/dist/elements/flipcard-trigger/index.js +5 -1
  59. package/dist/elements/flipcard-trigger/index.js.map +1 -1
  60. package/dist/elements/icon/index.d.ts +2 -1
  61. package/dist/elements/icon/index.js +8 -2
  62. package/dist/elements/icon/index.js.map +1 -1
  63. package/dist/elements/input/index.d.ts +1 -1
  64. package/dist/elements/input/index.js +9 -3
  65. package/dist/elements/input/index.js.map +1 -1
  66. package/dist/elements/input/styles.css.js +2 -2
  67. package/dist/elements/input/styles.css.js.map +1 -1
  68. package/dist/elements/input-combo/index.d.ts +2 -1
  69. package/dist/elements/input-combo/index.js +7 -1
  70. package/dist/elements/input-combo/index.js.map +1 -1
  71. package/dist/elements/input-file/index.d.ts +1 -1
  72. package/dist/elements/input-file/index.js +39 -249
  73. package/dist/elements/input-file/index.js.map +1 -1
  74. package/dist/elements/input-file/styles.css.js +8 -8
  75. package/dist/elements/input-file/styles.css.js.map +1 -1
  76. package/dist/elements/input-files/index.d.ts +1 -1
  77. package/dist/elements/input-files/index.js +29 -237
  78. package/dist/elements/input-files/index.js.map +1 -1
  79. package/dist/elements/input-files/styles.css.js +2 -2
  80. package/dist/elements/input-files/styles.css.js.map +1 -1
  81. package/dist/elements/input-otp/index.d.ts +1 -0
  82. package/dist/elements/input-otp/index.js +5 -1
  83. package/dist/elements/input-otp/index.js.map +1 -1
  84. package/dist/elements/loader/index.d.ts +1 -0
  85. package/dist/elements/loader/index.js +5 -1
  86. package/dist/elements/loader/index.js.map +1 -1
  87. package/dist/elements/password/index.d.ts +2 -2
  88. package/dist/elements/password/index.js +24 -234
  89. package/dist/elements/password/index.js.map +1 -1
  90. package/dist/elements/radio/index.d.ts +1 -0
  91. package/dist/elements/radio/index.js +7 -1
  92. package/dist/elements/radio/index.js.map +1 -1
  93. package/dist/elements/radios/index.d.ts +2 -1
  94. package/dist/elements/radios/index.js +5 -1
  95. package/dist/elements/radios/index.js.map +1 -1
  96. package/dist/elements/rotator/index.d.ts +1 -0
  97. package/dist/elements/rotator/index.js +7 -2
  98. package/dist/elements/rotator/index.js.map +1 -1
  99. package/dist/elements/select/index.d.ts +2 -1
  100. package/dist/elements/select/index.js +28 -25
  101. package/dist/elements/select/index.js.map +1 -1
  102. package/dist/elements/select-option/index.d.ts +1 -0
  103. package/dist/elements/select-option/index.js +7 -1
  104. package/dist/elements/select-option/index.js.map +1 -1
  105. package/dist/elements/sortable/index.d.ts +1 -0
  106. package/dist/elements/sortable/index.js +7 -1
  107. package/dist/elements/sortable/index.js.map +1 -1
  108. package/dist/elements/sortable-item/index.d.ts +1 -0
  109. package/dist/elements/sortable-item/index.js +5 -1
  110. package/dist/elements/sortable-item/index.js.map +1 -1
  111. package/dist/elements/tab/index.d.ts +1 -1
  112. package/dist/elements/tab/index.js +18 -228
  113. package/dist/elements/tab/index.js.map +1 -1
  114. package/dist/elements/tab-panel/index.d.ts +1 -0
  115. package/dist/elements/tab-panel/index.js +5 -1
  116. package/dist/elements/tab-panel/index.js.map +1 -1
  117. package/dist/elements/tabs/index.d.ts +3 -2
  118. package/dist/elements/tabs/index.js +44 -246
  119. package/dist/elements/tabs/index.js.map +1 -1
  120. package/dist/elements/textarea/index.d.ts +1 -1
  121. package/dist/elements/textarea/index.js +9 -3
  122. package/dist/elements/textarea/index.js.map +1 -1
  123. package/dist/elements/textarea/styles.css.js +2 -2
  124. package/dist/elements/textarea/styles.css.js.map +1 -1
  125. package/dist/elements/timer/index.d.ts +1 -0
  126. package/dist/elements/timer/index.js +11 -7
  127. package/dist/elements/timer/index.js.map +1 -1
  128. package/dist/elements/timer-display/index.d.ts +1 -1
  129. package/dist/elements/timer-display/index.js +19 -16
  130. package/dist/elements/timer-display/index.js.map +1 -1
  131. package/dist/elements/toggle/index.d.ts +1 -0
  132. package/dist/elements/toggle/index.js +5 -1
  133. package/dist/elements/toggle/index.js.map +1 -1
  134. package/dist/elements/tracker/index.d.ts +1 -2
  135. package/dist/elements/tracker/index.js +10 -19
  136. package/dist/elements/tracker/index.js.map +1 -1
  137. package/dist/elements/tracker-step/index.d.ts +1 -2
  138. package/dist/elements/tracker-step/index.js +46 -240
  139. package/dist/elements/tracker-step/index.js.map +1 -1
  140. package/dist/elements/typewriter/index.d.ts +1 -0
  141. package/dist/elements/typewriter/index.js +7 -1
  142. package/dist/elements/typewriter/index.js.map +1 -1
  143. package/dist/{index-h1DTXXCf.d.ts → index-n43o0UmE.d.ts} +13 -7
  144. package/dist/wrappers/react.d.ts +2 -2
  145. package/dist/wrappers/react.js +489 -491
  146. package/dist/wrappers/react.js.map +1 -1
  147. 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/events.ts
22
- var emitEvent = (element, name, detail, bubbles = true, composed = true) => {
23
- element.dispatchEvent(
24
- new CustomEvent(name, { bubbles, composed, detail })
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/icon/styles.css.ts
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: var(--kemet-color-font-base);
24
+ --kemet-upload-file-color: inherit;
242
25
  --kemet-upload-file-padding: 0.5rem 1rem;
243
- --kemet-upload-file-border: 1px solid var(--kemet-color-font-base);
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='error']) {
39
+ :host([status=error]) {
257
40
  border: 1px solid var(--kemet-color-font-error);
258
41
  }
259
42
 
260
- :host([status='complete']) {
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='complete']) .message,
279
- :host([status='complete']) .indicator {
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='error']) .message,
284
- :host([status='error']) .indicator {
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 css3 } from "lit";
291
- var loaders_css_default = css3`.lds-ripple {
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 LitElement2 {
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 html2`
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 ? html2`<div class="message" part="message">${this.message}</div>` : null}
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 html2`<div class="lds-ripple"><div></div><div></div></div>`;
183
+ return html`<div class="lds-ripple"><div></div><div></div></div>`;
394
184
  }
395
185
  if (this.status === "complete") {
396
- return html2`<kemet-icon name="check-circle" size="48"></kemet-icon>`;
186
+ return html`<kemet-icon name="check-circle" size="48"></kemet-icon>`;
397
187
  }
398
188
  if (this.status === "error") {
399
- return html2`<kemet-icon name="exclamation-circle" size="48"></kemet-icon>`;
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 = [styles_css_default2, loaders_css_default];
194
+ InputFile.styles = [styles_css_default, loaders_css_default];
405
195
  __decorateClass([
406
- property2({ type: String })
196
+ property({ type: String })
407
197
  ], InputFile.prototype, "name", 2);
408
198
  __decorateClass([
409
- property2({ type: Number })
199
+ property({ type: Number })
410
200
  ], InputFile.prototype, "loaded", 2);
411
201
  __decorateClass([
412
- property2({ type: Number })
202
+ property({ type: Number })
413
203
  ], InputFile.prototype, "size", 2);
414
204
  __decorateClass([
415
- property2({ type: String })
205
+ property({ type: String })
416
206
  ], InputFile.prototype, "type", 2);
417
207
  __decorateClass([
418
- property2({ type: String, reflect: true })
208
+ property({ type: String, reflect: true })
419
209
  ], InputFile.prototype, "status", 2);
420
210
  __decorateClass([
421
- property2({ type: Number })
211
+ property({ type: Number })
422
212
  ], InputFile.prototype, "percent", 2);
423
213
  __decorateClass([
424
- property2({ type: String })
214
+ property({ type: String })
425
215
  ], InputFile.prototype, "message", 2);
426
216
  __decorateClass([
427
- property2({ type: String, reflect: true })
217
+ property({ type: String, reflect: true })
428
218
  ], InputFile.prototype, "polarity", 2);
429
219
  __decorateClass([
430
- property2({ type: String, reflect: true })
220
+ property({ type: String, reflect: true })
431
221
  ], InputFile.prototype, "dom", 2);
432
222
  InputFile = __decorateClass([
433
- customElement2("kemet-input-file")
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":"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","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: var(--kemet-color-font-base);
5
+ --kemet-upload-file-color: inherit;
6
6
  --kemet-upload-file-padding: 0.5rem 1rem;
7
- --kemet-upload-file-border: 1px solid var(--kemet-color-font-base);
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='error']) {
20
+ :host([status=error]) {
21
21
  border: 1px solid var(--kemet-color-font-error);
22
22
  }
23
23
 
24
- :host([status='complete']) {
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='complete']) .message,
43
- :host([status='complete']) .indicator {
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='error']) .message,
48
- :host([status='error']) .indicator {
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: 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"],"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":[]}
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