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,8 +10,12 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
// src/elements/tab/index.ts
|
|
13
|
-
import { LitElement
|
|
14
|
-
|
|
13
|
+
import { LitElement, html } from "lit";
|
|
14
|
+
|
|
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;
|
|
15
19
|
|
|
16
20
|
// src/utilities/events.ts
|
|
17
21
|
var emitEvent = (element, name, detail, bubbles = true, composed = true) => {
|
|
@@ -20,223 +24,9 @@ var emitEvent = (element, name, detail, bubbles = true, composed = true) => {
|
|
|
20
24
|
);
|
|
21
25
|
};
|
|
22
26
|
|
|
23
|
-
// src/elements/
|
|
24
|
-
import { html, LitElement } from "lit";
|
|
25
|
-
import { customElement, property, state } from "lit/decorators.js";
|
|
26
|
-
import { isTemplateResult } from "lit/directive-helpers.js";
|
|
27
|
-
|
|
28
|
-
// src/elements/icon/styles.css.ts
|
|
27
|
+
// src/elements/tab/styles.css.ts
|
|
29
28
|
import { css } from "lit";
|
|
30
29
|
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/tab/styles.css.ts
|
|
238
|
-
import { css as css2 } from "lit";
|
|
239
|
-
var styles_css_default2 = css2`:host {
|
|
240
30
|
--kemet-tab-padding: 1rem;
|
|
241
31
|
|
|
242
32
|
cursor: pointer;
|
|
@@ -260,7 +50,7 @@ kemet-icon {
|
|
|
260
50
|
`;
|
|
261
51
|
|
|
262
52
|
// src/elements/tab/index.ts
|
|
263
|
-
var KemetTab = class extends
|
|
53
|
+
var KemetTab = class extends LitElement {
|
|
264
54
|
constructor() {
|
|
265
55
|
super(...arguments);
|
|
266
56
|
this.selected = false;
|
|
@@ -281,7 +71,7 @@ var KemetTab = class extends LitElement2 {
|
|
|
281
71
|
this.a11y();
|
|
282
72
|
}
|
|
283
73
|
render() {
|
|
284
|
-
return
|
|
74
|
+
return html`
|
|
285
75
|
<slot></slot>
|
|
286
76
|
${this.makeCloseable()}
|
|
287
77
|
`;
|
|
@@ -301,7 +91,7 @@ var KemetTab = class extends LitElement2 {
|
|
|
301
91
|
}
|
|
302
92
|
makeCloseable() {
|
|
303
93
|
if (this.closable) {
|
|
304
|
-
return
|
|
94
|
+
return html` <kemet-icon name="x-lg" size="16" @click=${() => this.handleClosable()}></kemet-icon>`;
|
|
305
95
|
}
|
|
306
96
|
return null;
|
|
307
97
|
}
|
|
@@ -309,27 +99,27 @@ var KemetTab = class extends LitElement2 {
|
|
|
309
99
|
emitEvent(this, "kemet-tab-closed", { element: this });
|
|
310
100
|
}
|
|
311
101
|
};
|
|
312
|
-
KemetTab.styles = [
|
|
102
|
+
KemetTab.styles = [styles_css_default];
|
|
313
103
|
__decorateClass([
|
|
314
|
-
|
|
104
|
+
property({ type: Number })
|
|
315
105
|
], KemetTab.prototype, "index", 2);
|
|
316
106
|
__decorateClass([
|
|
317
|
-
|
|
107
|
+
property({ type: Boolean, reflect: true })
|
|
318
108
|
], KemetTab.prototype, "selected", 2);
|
|
319
109
|
__decorateClass([
|
|
320
|
-
|
|
110
|
+
property({ type: String })
|
|
321
111
|
], KemetTab.prototype, "link", 2);
|
|
322
112
|
__decorateClass([
|
|
323
|
-
|
|
113
|
+
property({ type: Boolean })
|
|
324
114
|
], KemetTab.prototype, "closable", 2);
|
|
325
115
|
__decorateClass([
|
|
326
|
-
|
|
116
|
+
property({ type: String, reflect: true })
|
|
327
117
|
], KemetTab.prototype, "polarity", 2);
|
|
328
118
|
__decorateClass([
|
|
329
|
-
|
|
119
|
+
property({ type: String, reflect: true })
|
|
330
120
|
], KemetTab.prototype, "dom", 2);
|
|
331
121
|
KemetTab = __decorateClass([
|
|
332
|
-
|
|
122
|
+
customElement("kemet-tab")
|
|
333
123
|
], KemetTab);
|
|
334
124
|
export {
|
|
335
125
|
KemetTab as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/tab/index.ts","../../../src/utilities/events.ts","../../../src/elements/icon/index.ts","../../../src/elements/icon/styles.css.ts","../../../src/elements/tab/styles.css.ts"],"sourcesContent":["import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { emitEvent } from '../../utilities/events';\nimport '../icon';\nimport styles from './styles.css.ts';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-tab\n * @summary A tab in a set of tabs.\n *\n * @prop {boolean} selected - Is true when the tab is selected\n * @prop {string} link - Links to a panel name\n * @prop {boolean} closable - Determines if the tab can be closed\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-tab-padding - The padding of the tab.\n *\n * @event kemet-tab-selected - Fires when a tab is selected\n * @event kemet-tab-closed - Fires when the tab should close\n *\n * @fires kemet-tab-mounted - Fired when the tab is mounted to the DOM\n * @detail {HTMLElement} element - The tab element\n *\n */\n\n@customElement('kemet-tab')\nexport default class KemetTab extends LitElement {\n static styles = [styles];\n\n @property({ type: Number })\n index!: number;\n\n @property({ type: Boolean, reflect: true })\n selected: boolean = false;\n\n @property({ type: String })\n link!: string;\n\n @property({ type: Boolean })\n closable!: boolean;\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 this.addEventListener('click', this.select.bind(this));\n\n emitEvent(this, 'kemet-tab-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated() {\n this.a11y();\n }\n\n render() {\n return html`\n <slot></slot>\n ${this.makeCloseable()}\n `;\n }\n\n select() {\n emitEvent(this, 'kemet-tab-selected', { element: this });\n }\n\n a11y() {\n this.setAttribute('role', 'tab');\n\n if (this.selected) {\n this.setAttribute('aria-selected', 'true');\n this.setAttribute('tabindex', '0');\n } else {\n this.setAttribute('aria-selected', 'false');\n this.setAttribute('tabindex', '-1');\n }\n }\n\n makeCloseable() {\n if (this.closable) {\n return html` <kemet-icon name=\"x-lg\" size=\"16\" @click=${() => this.handleClosable()}></kemet-icon>`;\n }\n\n return null;\n }\n\n handleClosable() {\n emitEvent(this, 'kemet-tab-closed', { element: this });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-tab': KemetTab\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 { 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","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-tab-padding: 1rem;\n\n cursor: pointer;\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n padding: var(--kemet-tab-padding);\n}\n\n:host([selected]) {\n cursor: auto;\n color: inherit;\n}\n\nkemet-icon {\n cursor: pointer;\n margin-left: 0.5rem;\n}\n`;\n"],"mappings":"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","names":["LitElement","html","customElement","property","css","styles_css_default","LitElement","html","styles_css_default","property","customElement"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/tab/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/tab/styles.css.ts"],"sourcesContent":["import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport styles from './styles.css.ts';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-tab\n * @summary A tab in a set of tabs.\n * @ssrsafe yes\n *\n * @prop {boolean} selected - Is true when the tab is selected\n * @prop {string} link - Links to a panel name\n * @prop {boolean} closable - Determines if the tab can be closed\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-tab-padding - The padding of the tab.\n *\n * @event kemet-tab-selected - Fires when a tab is selected\n * @event kemet-tab-closed - Fires when the tab should close\n *\n * @fires kemet-tab-mounted - Fired when the tab is mounted to the DOM\n * @detail {HTMLElement} element - The tab element\n *\n */\n\n@customElement('kemet-tab')\nexport default class KemetTab extends LitElement {\n static styles = [styles];\n\n @property({ type: Number })\n index!: number;\n\n @property({ type: Boolean, reflect: true })\n selected: boolean = false;\n\n @property({ type: String })\n link!: string;\n\n @property({ type: Boolean })\n closable!: boolean;\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 this.addEventListener('click', this.select.bind(this));\n\n emitEvent(this, 'kemet-tab-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated() {\n this.a11y();\n }\n\n render() {\n return html`\n <slot></slot>\n ${this.makeCloseable()}\n `;\n }\n\n select() {\n emitEvent(this, 'kemet-tab-selected', { element: this });\n }\n\n a11y() {\n this.setAttribute('role', 'tab');\n\n if (this.selected) {\n this.setAttribute('aria-selected', 'true');\n this.setAttribute('tabindex', '0');\n } else {\n this.setAttribute('aria-selected', 'false');\n this.setAttribute('tabindex', '-1');\n }\n }\n\n makeCloseable() {\n if (this.closable) {\n return html` <kemet-icon name=\"x-lg\" size=\"16\" @click=${() => this.handleClosable()}></kemet-icon>`;\n }\n\n return null;\n }\n\n handleClosable() {\n emitEvent(this, 'kemet-tab-closed', { element: this });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-tab': KemetTab\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","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 --kemet-tab-padding: 1rem;\n\n cursor: pointer;\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n padding: var(--kemet-tab-padding);\n}\n\n:host([selected]) {\n cursor: auto;\n color: inherit;\n}\n\nkemet-icon {\n cursor: pointer;\n margin-left: 0.5rem;\n}\n`;\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,YAAY,YAAuB;;;ACA5C,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;;;ACXC,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;;;ACJA,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;;;AH4Bf,IAAqB,WAArB,cAAsC,WAAW;AAAA,EAAjD;AAAA;AAOE,oBAAoB;AAYpB,eAAc;AAAA;AAAA,EAEd,eAAe;AACb,SAAK,iBAAiB,SAAS,KAAK,OAAO,KAAK,IAAI,CAAC;AAErD,cAAU,MAAM,qBAAqB;AAAA,MACnC,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,KAAK;AAAA,EACZ;AAAA,EAEA,SAAS;AACP,WAAO;AAAA;AAAA,QAEH,KAAK,cAAc,CAAC;AAAA;AAAA,EAE1B;AAAA,EAEA,SAAS;AACP,cAAU,MAAM,sBAAsB,EAAE,SAAS,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,OAAO;AACL,SAAK,aAAa,QAAQ,KAAK;AAE/B,QAAI,KAAK,UAAU;AACjB,WAAK,aAAa,iBAAiB,MAAM;AACzC,WAAK,aAAa,YAAY,GAAG;AAAA,IACnC,OAAO;AACL,WAAK,aAAa,iBAAiB,OAAO;AAC1C,WAAK,aAAa,YAAY,IAAI;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,gBAAgB;AACd,QAAI,KAAK,UAAU;AACjB,aAAO,sDAAsD,MAAM,KAAK,eAAe,CAAC;AAAA,IAC1F;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,iBAAiB;AACf,cAAU,MAAM,oBAAoB,EAAE,SAAS,KAAK,CAAC;AAAA,EACvD;AACF;AAxEqB,SACZ,SAAS,CAAC,kBAAM;AAGvB;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAHP,SAInB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GANvB,SAOnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GATP,SAUnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,GAZR,SAanB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAftB,SAgBnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAlBtB,SAmBnB;AAnBmB,WAArB;AAAA,EADC,cAAc,WAAW;AAAA,GACL;","names":[]}
|
|
@@ -11,7 +11,11 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
11
11
|
|
|
12
12
|
// src/elements/tab-panel/index.ts
|
|
13
13
|
import { LitElement, html } from "lit";
|
|
14
|
-
|
|
14
|
+
|
|
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;
|
|
15
19
|
|
|
16
20
|
// src/elements/tab-panel/styles.css.ts
|
|
17
21
|
import { css } from "lit";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/tab-panel/index.ts","../../../src/elements/tab-panel/styles.css.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property } from '
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/tab-panel/index.ts","../../../src/utilities/decorators.ts","../../../src/elements/tab-panel/styles.css.ts","../../../src/utilities/events.ts"],"sourcesContent":["import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property } from '../../utilities/decorators';\nimport styles from './styles.css.ts';\nimport { emitEvent } from '../../utilities/events';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-tab-panel\n * @summary A panel in a set of tabs.\n * @ssrsafe yes\n *\n * @prop {boolean} selected - Is true when a panel is selected\n * @prop {string} panel - Identifies the panel to be linked by a tab\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-tab-panel-fade-speed - The fade speed.\n *\n * @fires kemet-tab-panel-mounted - Fired when the tab panel is mounted to the DOM\n * @detail {HTMLElement} element - The tab panel element\n *\n */\n\n@customElement('kemet-tab-panel')\nexport default class KemetTabPanel extends LitElement {\n static styles = [styles];\n\n @property({ type: Boolean, reflect: true })\n selected: boolean = false;\n\n @property({ type: String })\n panel!: string;\n\n @property({ type: Number })\n index!: number;\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-tab-panel-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n updated() {\n this.a11y();\n }\n\n render() {\n return html`\n <slot></slot>\n `;\n }\n\n a11y() {\n this.setAttribute('role', 'tabpanel');\n\n if (this.selected) {\n this.setAttribute('tabindex', '0');\n } else {\n this.setAttribute('tabindex', '-1');\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-tab-panel': KemetTabPanel\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-tab-panel-fade-speed: 0.5s;\n\n width: 100%;\n flex: 0 0 auto;\n}\n\n::slotted(img) {\n max-width: 100%;\n}\n\n:host(.fade) {\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--kemet-tab-panel-fade-speed) ease;\n}\n\n:host(.fade[selected]) {\n opacity: 1;\n pointer-events: auto;\n}\n\n:host(.fade.push) {\n margin-left: -100%;\n}\n\n:host(.vertical) {\n display: none;\n}\n\n:host(.vertical[selected]) {\n display: block;\n}\n\n:host(.stacked) {\n position: absolute;\n z-index: -1;\n opacity: 0;\n visibility: hidden;\n}\n\n:host(.stacked[selected]) {\n position: relative;\n z-index: 1;\n opacity: 1;\n visibility: visible;\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,YAAY,YAAuB;;;ACA5C,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;;;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;;;AHsBA,IAAqB,gBAArB,cAA2C,WAAW;AAAA,EAAtD;AAAA;AAIE,oBAAoB;AAYpB,eAAc;AAAA;AAAA,EAEd,eAAe;AACb,cAAU,MAAM,2BAA2B;AAAA,MACzC,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,KAAK;AAAA,EACZ;AAAA,EAEA,SAAS;AACP,WAAO;AAAA;AAAA;AAAA,EAGT;AAAA,EAEA,OAAO;AACL,SAAK,aAAa,QAAQ,UAAU;AAEpC,QAAI,KAAK,UAAU;AACjB,WAAK,aAAa,YAAY,GAAG;AAAA,IACnC,OAAO;AACL,WAAK,aAAa,YAAY,IAAI;AAAA,IACpC;AAAA,EACF;AACF;AAhDqB,cACZ,SAAS,CAAC,kBAAM;AAGvB;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAHvB,cAInB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GANP,cAOnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GATP,cAUnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAZtB,cAanB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAftB,cAgBnB;AAhBmB,gBAArB;AAAA,EADC,cAAc,iBAAiB;AAAA,GACX;","names":[]}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import * as lit_html from 'lit-html';
|
|
2
2
|
import * as lit from 'lit';
|
|
3
3
|
import { LitElement } from 'lit';
|
|
4
|
-
import { h as EnumDirections } from '../../constants-
|
|
4
|
+
import { h as EnumDirections } from '../../constants-CHvA2ed5.js';
|
|
5
5
|
import KemetTab from '../tab/index.js';
|
|
6
6
|
import KemetTabPanel from '../tab-panel/index.js';
|
|
7
|
-
import '../icon/index.js';
|
|
8
7
|
import '../../form-controller-3q581XcZ.js';
|
|
9
8
|
|
|
10
9
|
interface InterfaceLink {
|
|
@@ -38,6 +37,7 @@ declare enum EnumTabsAlign {
|
|
|
38
37
|
*
|
|
39
38
|
* @tagname kemet-tabs
|
|
40
39
|
* @summary A group of tabs and panels.
|
|
40
|
+
* @ssrsafe yes
|
|
41
41
|
*
|
|
42
42
|
* @prop {string} selected - The selected tab by name
|
|
43
43
|
* @prop {number} selectedIndex - The selected tab by index
|
|
@@ -97,6 +97,7 @@ declare class KemetTabs extends LitElement {
|
|
|
97
97
|
yDown: number | null;
|
|
98
98
|
links: HTMLElement;
|
|
99
99
|
panelsElement: HTMLElement;
|
|
100
|
+
private _handleTabKeydown;
|
|
100
101
|
constructor();
|
|
101
102
|
firstUpdated(): void;
|
|
102
103
|
render(): lit_html.TemplateResult<1>;
|