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/tabs/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/tabs/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/tabs/styles.css.ts
|
|
238
|
-
import { css as css2 } from "lit";
|
|
239
|
-
var styles_css_default2 = css2`:host {
|
|
240
30
|
--kemet-tabs-ink-size: 6px;
|
|
241
31
|
--kemet-tabs-ink-radius: 6px;
|
|
242
32
|
--kemet-tabs-divider-size: 1px;
|
|
@@ -454,7 +244,7 @@ var EnumTabsAlign = /* @__PURE__ */ ((EnumTabsAlign2) => {
|
|
|
454
244
|
EnumTabsAlign2["End"] = "end";
|
|
455
245
|
return EnumTabsAlign2;
|
|
456
246
|
})(EnumTabsAlign || {});
|
|
457
|
-
var KemetTabs = class extends
|
|
247
|
+
var KemetTabs = class extends LitElement {
|
|
458
248
|
constructor() {
|
|
459
249
|
super();
|
|
460
250
|
this.selectedIndex = 0;
|
|
@@ -468,9 +258,12 @@ var KemetTabs = class extends LitElement2 {
|
|
|
468
258
|
this.hideInk = false;
|
|
469
259
|
this.overflow = false;
|
|
470
260
|
this.dom = "initializing";
|
|
261
|
+
this._handleTabKeydown = this.handleTabKeydown.bind(this);
|
|
471
262
|
this.addEventListener("kemet-tab-selected", this.tabSelectedChange.bind(this));
|
|
472
263
|
this.addEventListener("kemet-tab-closed", this.handleTabClose.bind(this));
|
|
473
|
-
window
|
|
264
|
+
if (typeof window !== "undefined") {
|
|
265
|
+
window.addEventListener("resize", this.handleResize.bind(this));
|
|
266
|
+
}
|
|
474
267
|
}
|
|
475
268
|
firstUpdated() {
|
|
476
269
|
this.tabs = [];
|
|
@@ -478,6 +271,8 @@ var KemetTabs = class extends LitElement2 {
|
|
|
478
271
|
this.xDown = null;
|
|
479
272
|
this.yDown = null;
|
|
480
273
|
this.links = this.shadowRoot?.getElementById("links");
|
|
274
|
+
this.handleLinksSlotChange();
|
|
275
|
+
this.handlePanelsSlotChange();
|
|
481
276
|
emitEvent(this, "kemet-tabs-mounted", {
|
|
482
277
|
bubbles: true,
|
|
483
278
|
composed: true,
|
|
@@ -488,7 +283,7 @@ var KemetTabs = class extends LitElement2 {
|
|
|
488
283
|
this.dom = "mounted";
|
|
489
284
|
}
|
|
490
285
|
render() {
|
|
491
|
-
return
|
|
286
|
+
return html`
|
|
492
287
|
${this.makeLeftArrow()}
|
|
493
288
|
${this.makeRightArrow()}
|
|
494
289
|
<div id="links" part="links">
|
|
@@ -519,13 +314,15 @@ var KemetTabs = class extends LitElement2 {
|
|
|
519
314
|
}
|
|
520
315
|
}
|
|
521
316
|
handleLinksSlotChange() {
|
|
317
|
+
this.tabs?.forEach((tab) => tab.removeEventListener("keydown", this._handleTabKeydown));
|
|
318
|
+
this.tabs = [];
|
|
522
319
|
const tabs = this.querySelectorAll("kemet-tab");
|
|
523
320
|
let index = 0;
|
|
524
321
|
tabs.forEach((tab) => {
|
|
525
322
|
tab.index = index;
|
|
526
323
|
index += 1;
|
|
527
324
|
this.tabs = this.tabs.concat(tab);
|
|
528
|
-
tab.addEventListener("keydown",
|
|
325
|
+
tab.addEventListener("keydown", this._handleTabKeydown);
|
|
529
326
|
});
|
|
530
327
|
const firstTab = this.tabs[0];
|
|
531
328
|
if (firstTab) firstTab.selected = true;
|
|
@@ -535,6 +332,7 @@ var KemetTabs = class extends LitElement2 {
|
|
|
535
332
|
this.determineOverflow();
|
|
536
333
|
}
|
|
537
334
|
handlePanelsSlotChange() {
|
|
335
|
+
this.panels = [];
|
|
538
336
|
const panels = this.querySelectorAll("kemet-tab-panel");
|
|
539
337
|
const panelElement = this.shadowRoot?.getElementById("panels");
|
|
540
338
|
let index = 0;
|
|
@@ -600,28 +398,28 @@ var KemetTabs = class extends LitElement2 {
|
|
|
600
398
|
return null;
|
|
601
399
|
}
|
|
602
400
|
if ((this.placement === "top" || this.placement === "bottom") && this.ink && location === "links") {
|
|
603
|
-
return
|
|
401
|
+
return html`<div part="ink" style="width:${this.ink.width}; transform:translateX(${this.ink.positionX})"></div>`;
|
|
604
402
|
}
|
|
605
403
|
if ((this.placement === "left" || this.placement === "right") && this.ink && location === "host") {
|
|
606
|
-
return
|
|
404
|
+
return html`<div part="ink" style="height:${this.ink.height}; transform:translateY(${this.ink.positionY})"></div>`;
|
|
607
405
|
}
|
|
608
406
|
return null;
|
|
609
407
|
}
|
|
610
408
|
makeDivider() {
|
|
611
409
|
if (this.divider) {
|
|
612
|
-
return
|
|
410
|
+
return html`<div part="divider"></div>`;
|
|
613
411
|
}
|
|
614
412
|
return null;
|
|
615
413
|
}
|
|
616
414
|
makeLeftArrow() {
|
|
617
415
|
if (this.overflow) {
|
|
618
|
-
return
|
|
416
|
+
return html`<kemet-icon name='chevron-left' size="20" @click=${() => this.handleLeftArrow()}></kemet-icon>`;
|
|
619
417
|
}
|
|
620
418
|
return null;
|
|
621
419
|
}
|
|
622
420
|
makeRightArrow() {
|
|
623
421
|
if (this.overflow) {
|
|
624
|
-
return
|
|
422
|
+
return html`<kemet-icon name='chevron-right' size="20" @click=${() => this.handleRightArrow()}></kemet-icon>`;
|
|
625
423
|
}
|
|
626
424
|
return null;
|
|
627
425
|
}
|
|
@@ -861,66 +659,66 @@ var KemetTabs = class extends LitElement2 {
|
|
|
861
659
|
this.yDown = null;
|
|
862
660
|
}
|
|
863
661
|
};
|
|
864
|
-
KemetTabs.styles = [
|
|
662
|
+
KemetTabs.styles = [styles_css_default];
|
|
865
663
|
__decorateClass([
|
|
866
|
-
|
|
664
|
+
property({ type: String, reflect: true })
|
|
867
665
|
], KemetTabs.prototype, "selected", 2);
|
|
868
666
|
__decorateClass([
|
|
869
|
-
|
|
667
|
+
property({ type: Number, reflect: true, attribute: "selected-index" })
|
|
870
668
|
], KemetTabs.prototype, "selectedIndex", 2);
|
|
871
669
|
__decorateClass([
|
|
872
|
-
|
|
670
|
+
property({ type: Number })
|
|
873
671
|
], KemetTabs.prototype, "panelPosition", 2);
|
|
874
672
|
__decorateClass([
|
|
875
|
-
|
|
673
|
+
property({ type: String, reflect: true, attribute: "panel-effect" })
|
|
876
674
|
], KemetTabs.prototype, "panelEffect", 2);
|
|
877
675
|
__decorateClass([
|
|
878
|
-
|
|
676
|
+
property({ type: Boolean })
|
|
879
677
|
], KemetTabs.prototype, "swipe", 2);
|
|
880
678
|
__decorateClass([
|
|
881
|
-
|
|
679
|
+
property({ type: String, reflect: true })
|
|
882
680
|
], KemetTabs.prototype, "placement", 2);
|
|
883
681
|
__decorateClass([
|
|
884
|
-
|
|
682
|
+
property({ type: Boolean })
|
|
885
683
|
], KemetTabs.prototype, "divider", 2);
|
|
886
684
|
__decorateClass([
|
|
887
|
-
|
|
685
|
+
property({ type: String, reflect: true, attribute: "tabs-align" })
|
|
888
686
|
], KemetTabs.prototype, "tabsAlign", 2);
|
|
889
687
|
__decorateClass([
|
|
890
|
-
|
|
688
|
+
property({ type: Object })
|
|
891
689
|
], KemetTabs.prototype, "ink", 2);
|
|
892
690
|
__decorateClass([
|
|
893
|
-
|
|
691
|
+
property({ type: Boolean, attribute: "hide-ink" })
|
|
894
692
|
], KemetTabs.prototype, "hideInk", 2);
|
|
895
693
|
__decorateClass([
|
|
896
|
-
|
|
694
|
+
property({ type: Boolean, reflect: true })
|
|
897
695
|
], KemetTabs.prototype, "overflow", 2);
|
|
898
696
|
__decorateClass([
|
|
899
|
-
|
|
697
|
+
property({ type: String, reflect: true })
|
|
900
698
|
], KemetTabs.prototype, "polarity", 2);
|
|
901
699
|
__decorateClass([
|
|
902
|
-
|
|
700
|
+
property({ type: String, reflect: true })
|
|
903
701
|
], KemetTabs.prototype, "dom", 2);
|
|
904
702
|
__decorateClass([
|
|
905
|
-
|
|
703
|
+
state()
|
|
906
704
|
], KemetTabs.prototype, "tabs", 2);
|
|
907
705
|
__decorateClass([
|
|
908
|
-
|
|
706
|
+
state()
|
|
909
707
|
], KemetTabs.prototype, "panels", 2);
|
|
910
708
|
__decorateClass([
|
|
911
|
-
|
|
709
|
+
state()
|
|
912
710
|
], KemetTabs.prototype, "xDown", 2);
|
|
913
711
|
__decorateClass([
|
|
914
|
-
|
|
712
|
+
state()
|
|
915
713
|
], KemetTabs.prototype, "yDown", 2);
|
|
916
714
|
__decorateClass([
|
|
917
|
-
|
|
715
|
+
state()
|
|
918
716
|
], KemetTabs.prototype, "links", 2);
|
|
919
717
|
__decorateClass([
|
|
920
718
|
query("#panels")
|
|
921
719
|
], KemetTabs.prototype, "panelsElement", 2);
|
|
922
720
|
KemetTabs = __decorateClass([
|
|
923
|
-
|
|
721
|
+
customElement("kemet-tabs")
|
|
924
722
|
], KemetTabs);
|
|
925
723
|
export {
|
|
926
724
|
EnumPanelEffect,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/tabs/index.ts","../../../src/utilities/events.ts","../../../src/elements/icon/index.ts","../../../src/elements/icon/styles.css.ts","../../../src/elements/tabs/styles.css.ts"],"sourcesContent":["/* eslint-disable no-case-declarations */\nimport { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumDirections } from '../../utilities/constants';\nimport type KemetTab from '../tab';\nimport type KemetTabPanel from '../tab-panel';\nimport '../icon';\nimport styles from './styles.css.ts';\n\n\ninterface InterfaceLink {\n width: string;\n height: string;\n positionX: string;\n positionY: string;\n}\n\nexport interface InterfaceTabsDetails {\n element: KemetTabs;\n selectedName: string;\n selectedIndex: number;\n}\n\nexport enum EnumPanelEffect {\n None = 'none',\n Slide = 'slide',\n Fade = 'fade',\n Stacked = 'stacked'\n}\n\n\nexport enum EnumTabsAlign {\n Center = 'center',\n Between = 'between',\n Around = 'around',\n Evenly = 'evenly',\n Start = 'start',\n End = 'end'\n}\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-tabs\n * @summary A group of tabs and panels.\n *\n * @prop {string} selected - The selected tab by name\n * @prop {number} selectedIndex - The selected tab by index\n * @prop {number} panelPosition - Positions the current panel\n * @prop {string} panelEffect - The transition effect for panels\n * @prop {boolean} swipe - Determines whether to enable swipe behavior\n * @prop {TypeDirection} placement - Places the tabs to the top, right, bottom, or left\n * @prop {boolean} divider - Determines whether to show a divider line\n * @prop {TypeTabsAlign} tabsAlign - Spacing alignment of the tabs\n * @prop {object} ink - An object that contains information about the ink\n * @prop {boolean} hideInk - Determines whether to hide the ink\n * @prop {boolean} overflow - Is true when the space of the tabs is larger than it's container\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 * @slot tab - Place the tabs here.\n * @slot panel - Place the panels here.\n *\n * @csspart links - The container for the tablist.\n * @csspart tablist - Contains the tabs.\n * @csspart panels - Contains the panels.\n * @csspart ink - The ink element.\n * @csspart divider - The divider element.\n *\n * @cssproperty --kemet-tabs-ink-size - The thickness of the ink.\n * @cssproperty --kemet-tabs-ink-radius - The radius on the ink.\n * @cssproperty --kemet-tabs-ink-color - The color of the ink.\n * @cssproperty --kemet-tabs-divider-size - The thickness of the divider.\n * @cssproperty --kemet-tabs-divider-color - The color of the divider.\n * @cssproperty --kemet-tabs-transition-speed - The transition speed of the panels.\n * @cssproperty --kemet-tabs-spacer - The space between tabs and panels.\n *\n * @event kemet-tabs-change - Fires when a tab is changed\n *\n * @fires kemet-tabs-mounted - Fired when the tabs are mounted to the DOM\n * @detail {HTMLElement} element - The tabs element\n *\n */\n\n@customElement('kemet-tabs')\nexport default class KemetTabs extends LitElement {\n static styles = [styles];\n\n @property({ type: String, reflect: true })\n selected?: string;\n\n @property({ type: Number })\n selectedIndex: number = 0;\n\n @property({ type: Number })\n panelPosition: number = 0;\n\n @property({ type: String, reflect: true, attribute: 'panel-effect' })\n panelEffect: EnumPanelEffect = EnumPanelEffect.None;\n\n @property({ type: Boolean })\n swipe: boolean = false;\n\n @property({ type: String, reflect: true })\n placement: EnumDirections = EnumDirections.Top;\n\n @property({ type: Boolean })\n divider: boolean = false;\n\n @property({ type: String, reflect: true, attribute: 'tabs-align' })\n tabsAlign: EnumTabsAlign = EnumTabsAlign.Center;\n\n @property({ type: Object })\n ink: InterfaceLink = { width: '0', height: '0', positionX: '0', positionY: '0' };\n\n @property({ type: Boolean, attribute: 'hide-ink' })\n hideInk: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n overflow: boolean = false;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n @state()\n tabs!: KemetTab[];\n\n @state()\n panels!: KemetTabPanel[];\n\n @state()\n xDown!: number | null;\n\n @state()\n yDown!: number | null;\n\n @state()\n links!: HTMLElement;\n\n @query('#panels')\n panelsElement!: HTMLElement;\n\n constructor() {\n super();\n\n this.addEventListener('kemet-tab-selected', this.tabSelectedChange.bind(this));\n this.addEventListener('kemet-tab-closed', this.handleTabClose.bind(this));\n window.addEventListener('resize', this.handleResize.bind(this));\n }\n\n firstUpdated() {\n // standard properties\n this.tabs = [];\n this.panels = [];\n this.xDown = null;\n this.yDown = null;\n\n this.links = this.shadowRoot?.getElementById('links') as HTMLElement;\n\n emitEvent(this, 'kemet-tabs-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n return html`\n ${this.makeLeftArrow()}\n ${this.makeRightArrow()}\n <div id=\"links\" part=\"links\">\n <div part='tablist' role=\"tablist\">\n <slot name=\"tab\" @slotchange=${() => this.handleLinksSlotChange()}></slot>\n </div>\n ${this.makeInk('links')}\n </div>\n ${this.makeInk('host')}\n ${this.makeDivider()}\n <section id=\"panels\" part=\"panels\" style=\"transform:translateX(${this.panelPosition}px);\">\n <div>\n <slot name=\"panel\" @slotchange=${() => this.handlePanelsSlotChange()}></slot>\n </div>\n </section>\n `;\n }\n\n updated(prevProps: Map<string, never>) {\n this.determineFade();\n this.determineStacked();\n\n if (prevProps.get('selected') && prevProps.get('selected') !== this.selected) {\n this.selectTab();\n this.selectPanel();\n }\n\n if (typeof prevProps.get('selectedIndex') === 'number' && prevProps.get('selectedIndex') !== this.selected) {\n this.selectTab();\n this.selectPanel();\n }\n }\n\n handleLinksSlotChange() {\n const tabs = this.querySelectorAll('kemet-tab');\n let index = 0;\n\n tabs.forEach((tab: KemetTab) => {\n // give each tab an index to select by if link/panel is not used\n tab.index = index;\n index += 1;\n\n // store the list of tabs\n this.tabs = this.tabs.concat(tab);\n\n // add keyboard support\n tab.addEventListener('keydown', event => this.handleTabKeydown(event));\n });\n\n // default to the first tab/panel selected\n const firstTab = this.tabs[0];\n if (firstTab) firstTab.selected = true;\n\n setTimeout(() => {\n this.selectTab();\n }, 1);\n this.determineOverflow();\n }\n\n handlePanelsSlotChange() {\n const panels = this.querySelectorAll('kemet-tab-panel');\n const panelElement = this.shadowRoot?.getElementById('panels');\n let index = 0;\n\n panels.forEach((panel: KemetTabPanel) => {\n // give each panel an index to select by if link/panel is not used\n panel.index = index;\n index += 1;\n\n // store the list of panels\n this.panels = this.panels.concat(panel);\n });\n\n // default to the first tab/panel selected\n if (this.panels.length > 0) {\n const firstPanel = this.panels[0];\n if (firstPanel) firstPanel.selected = true;\n }\n\n // add swipe support\n if (this.swipe) {\n panelElement?.addEventListener('touchstart', event => this.handleTouchStart(event), false);\n panelElement?.addEventListener('touchmove', event => this.handleTouchMove(event), false);\n }\n\n this.selectPanel();\n }\n\n handleLeftArrow() {\n const selectedElement = this.tabs.find(tab => tab.selected) || this.tabs[0];\n if (!selectedElement) return;\n const previousElement = selectedElement.previousElementSibling as KemetTab;\n const selectedIndex = this.tabs.findIndex(tab => tab.selected);\n\n if (this.selected) {\n this.selected = previousElement ? previousElement.link : selectedElement.link;\n } else {\n this.selectedIndex = selectedIndex > 0 ? selectedIndex - 1 : 0;\n }\n\n if (previousElement) {\n this.links.scrollLeft = previousElement.offsetLeft - 20;\n }\n\n this.selectTab();\n this.selectPanel();\n }\n\n handleRightArrow() {\n const selectedElement = this.tabs.find(tab => tab.selected) || this.tabs[this.tabs.length - 1];\n if (!selectedElement) return;\n const nextElement = selectedElement.nextElementSibling as KemetTab;\n const selectedIndex = this.tabs.findIndex(tab => tab.selected);\n\n if (this.selected) {\n this.selected = nextElement ? nextElement.link : selectedElement.link;\n } else {\n this.selectedIndex = selectedIndex < this.tabs.length - 1\n ? selectedIndex + 1\n : this.tabs.length - 1;\n }\n\n if (nextElement) {\n this.links.scrollLeft = nextElement.offsetLeft - 20;\n }\n\n this.selectTab();\n this.selectPanel();\n }\n\n handleTabClose(event: Event) {\n const tab = (event as CustomEvent).detail.element;\n const panel = this.panels[tab.index];\n\n if (this.tabs[0]) {\n this.selected = this.tabs[0].link;\n }\n this.selectedIndex = 0;\n\n panel?.remove();\n tab.remove();\n }\n\n makeInk(location: string) {\n if (this.hideInk) {\n return null;\n }\n\n if ((this.placement === 'top' || this.placement === 'bottom') && this.ink && location === 'links') {\n return html`<div part=\"ink\" style=\"width:${this.ink.width}; transform:translateX(${this.ink.positionX})\"></div>`;\n }\n\n if ((this.placement === 'left' || this.placement === 'right') && this.ink && location === 'host') {\n return html`<div part=\"ink\" style=\"height:${this.ink.height}; transform:translateY(${this.ink.positionY})\"></div>`;\n }\n\n return null;\n }\n\n makeDivider() {\n if (this.divider) {\n return html`<div part=\"divider\"></div>`;\n }\n\n return null;\n }\n\n makeLeftArrow() {\n if (this.overflow) {\n return html`<kemet-icon name='chevron-left' size=\"20\" @click=${() => this.handleLeftArrow()}></kemet-icon>`;\n }\n\n return null;\n }\n\n makeRightArrow() {\n if (this.overflow) {\n return html`<kemet-icon name='chevron-right' size=\"20\" @click=${() => this.handleRightArrow()}></kemet-icon>`;\n }\n\n return null;\n }\n\n selectTab() {\n const marginLeft = this.links ? parseInt(window.getComputedStyle(this.links).marginLeft.replace('px', ''), 10) : 0;\n const overflowOffset = this.overflow ? marginLeft : 0;\n\n // if the user uses the selected attribute select by it\n if (this.selected) {\n this.tabs.forEach((tab) => {\n const tabName = tab.getAttribute('link');\n\n if (tabName === this.selected) {\n tab.selected = true;\n this.selected = tabName;\n\n this.ink = {\n width: `${tab.offsetWidth}px`,\n height: `${tab.offsetHeight}px`,\n positionX: `${tab.offsetLeft - overflowOffset}px`,\n positionY: `${tab.offsetTop}px`,\n };\n\n this.links.scrollLeft = tab.offsetLeft - overflowOffset;\n } else {\n tab.selected = false;\n }\n });\n\n // otherwise select by index\n } else {\n this.tabs.forEach((tab) => {\n if (this.selectedIndex === tab.index) {\n tab.selected = true;\n\n this.ink = {\n width: `${tab.offsetWidth}px`,\n height: `${tab.offsetHeight}px`,\n positionX: `${tab.offsetLeft - overflowOffset}px`,\n positionY: `${tab.offsetTop}px`,\n };\n\n this.links.scrollLeft = tab.offsetLeft - overflowOffset;\n } else {\n tab.selected = false;\n }\n });\n }\n }\n\n selectPanel() {\n // if the user uses the selected attribute select by it\n if (this.selected) {\n this.panels.forEach((panel) => {\n const panelName = panel.getAttribute('panel');\n\n if (this.panelEffect === 'fade' && panel.index !== 0) {\n panel.classList.add('push');\n }\n\n if (this.placement === 'left' || this.placement === 'right') {\n panel.classList.add('vertical');\n }\n\n if (panelName === this.selected) {\n panel.selected = true;\n this.animatePanel(panelName, null);\n } else {\n panel.selected = false;\n }\n });\n\n // otherwise select by index\n } else {\n this.panels.forEach((panel) => {\n if (this.panelEffect === 'fade' && panel.index !== 0) {\n panel.classList.add('push');\n }\n\n if (this.placement === 'left' || this.placement === 'right') {\n panel.classList.add('vertical');\n }\n\n if (this.selectedIndex === panel.index) {\n panel.selected = true;\n this.animatePanel(null, panel.index);\n } else {\n panel.selected = false;\n }\n });\n }\n }\n\n dispatchTabChange() {\n emitEvent(this, 'kemet-tabs-change', {\n element: this,\n selectedName: this.selected,\n selectedIndex: this.selectedIndex\n });\n }\n\n tabSelectedChange(event: Event) {\n if (this.selected) {\n // if selected has been set, use the string attribute\n this.selected = (event as CustomEvent).detail.element.getAttribute('link');\n } else {\n // otherwise use the generated index\n this.selectedIndex = (event as CustomEvent).detail.element.index;\n }\n\n this.selectTab();\n this.selectPanel();\n this.dispatchTabChange();\n }\n\n determineFade() {\n this.panels.forEach((panel) => {\n // add fade class if panel effect is fade\n if (this.panelEffect === 'fade') panel.classList.add('fade');\n });\n }\n\n determineStacked() {\n this.panels.forEach((panel) => {\n // add fade class if panel effect is fade\n if (this.panelEffect === 'stacked') panel.classList.add('stacked');\n });\n }\n\n determineOverflow() {\n const tabsContainerWidth = this.offsetWidth;\n const tabElements = this.querySelectorAll('kemet-tab');\n\n let totalTabsWidth = 0;\n\n tabElements.forEach((tab) => {\n totalTabsWidth += tab.offsetWidth;\n });\n\n this.overflow = totalTabsWidth > tabsContainerWidth && (this.placement === 'top' || this.placement === 'bottom');\n }\n\n handleResize() {\n if (this.tabs && this.panels) {\n const marginLeft = this.links ? parseInt(window.getComputedStyle(this.links).marginLeft.replace('px', ''), 10) : 0;\n const overflowOffset = this.overflow ? marginLeft : 0;\n const selectedElement = this.tabs.find(tab => tab.selected);\n\n if (selectedElement) {\n this.ink = {\n width: `${selectedElement.offsetWidth}px`,\n height: `${selectedElement.offsetHeight}px`,\n positionX: `${selectedElement.offsetLeft - overflowOffset}px`,\n positionY: `${selectedElement.offsetTop}px`,\n };\n }\n\n this.determineOverflow();\n\n if (this.selected) {\n this.animatePanel(this.selected, null);\n } else {\n this.animatePanel(null, this.selectedIndex);\n }\n }\n }\n\n animatePanel(panelName: string | null, panelIndex: number | null) {\n if (panelName) {\n const selectedPanel = this.querySelector(`[panel=\"${panelName}\"]`) as KemetTabPanel;\n if (selectedPanel) this.panelPosition = selectedPanel.offsetLeft * -1;\n } else {\n if (panelIndex !== null && this.panels[panelIndex]) this.panelPosition = this.panels[panelIndex].offsetLeft * -1;\n }\n }\n\n handleTabKeydown(event: KeyboardEvent) {\n if (this.selected) {\n switch (event.key) {\n case 'Home':\n if (this.tabs[0]) {\n this.selected = this.tabs[0].getAttribute('link') ?? undefined;\n }\n break;\n case 'End':\n const lastTab = this.tabs[this.tabs.length - 1];\n if (lastTab) {\n this.selected = lastTab.getAttribute('link') ?? undefined;\n }\n break;\n case 'ArrowRight':\n const nextLinkElement = this.querySelector('kemet-tab[selected]')?.nextElementSibling;\n const nextLink = nextLinkElement ? nextLinkElement.getAttribute('link') : false;\n\n if (nextLink) {\n this.selected = nextLink;\n }\n break;\n case 'ArrowLeft':\n const previousLinkElement = this.querySelector('kemet-tab[selected]')?.previousElementSibling;\n const previousLink = previousLinkElement ? previousLinkElement.getAttribute('link') : false;\n\n if (previousLink) {\n this.selected = previousLink;\n }\n break;\n default: break;\n }\n\n const tabToFocus = this.tabs.find(tab => tab.link === this.selected);\n if (tabToFocus) tabToFocus.focus();\n } else {\n switch (event.key) {\n case 'Home':\n this.selectedIndex = 0;\n break;\n case 'End':\n this.selectedIndex = this.tabs.length - 1;\n break;\n case 'ArrowRight':\n if (this.selectedIndex < this.tabs.length - 1) {\n this.selectedIndex += 1;\n } else {\n this.selectedIndex = this.tabs.length - 1;\n }\n break;\n case 'ArrowLeft':\n if (this.selectedIndex < 1) {\n this.selectedIndex = 0;\n } else {\n this.selectedIndex -= 1;\n }\n break;\n default: break;\n }\n\n if (this.tabs[this.selectedIndex]) {\n this.tabs[this.selectedIndex]?.focus();\n }\n }\n }\n\n handleTouchStart(event: TouchEvent) {\n this.xDown = event.touches[0]?.clientX ?? 0;\n this.yDown = event.touches[0]?.clientY ?? 0;\n }\n\n handleTouchMove(event: TouchEvent) {\n if (!this.xDown || !this.yDown) {\n return;\n }\n\n const xUp = event.touches[0]?.clientX ?? 0;\n const yUp = event.touches[0]?.clientY ?? 0;\n const xDiff = this.xDown - xUp;\n const yDiff = this.yDown - yUp;\n\n const nextElement = this.querySelector('kemet-tab-panel[selected]')?.nextElementSibling;\n const next = nextElement ? nextElement.getAttribute('panel') : false;\n const previousElement = this.querySelector('kemet-tab-panel[selected]')?.previousElementSibling;\n const previous = previousElement ? previousElement.getAttribute('panel') : false;\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) {\n if (xDiff > 0) {\n if (this.selected) {\n if (next) this.selected = next;\n } else {\n if (this.selectedIndex < this.tabs.length) this.selectedIndex += 1;\n }\n } else {\n if (this.selected) {\n if (previous) this.selected = previous;\n } else {\n if (this.selectedIndex > 0) this.selectedIndex -= 1;\n }\n }\n\n this.selectTab();\n this.selectPanel();\n }\n\n this.xDown = null;\n this.yDown = null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-tabs': KemetTabs\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-tabs-ink-size: 6px;\n --kemet-tabs-ink-radius: 6px;\n --kemet-tabs-divider-size: 1px;\n --kemet-tabs-spacer: 1rem;\n --kemet-tabs-transition-speed: 0.5s;\n --kemet-tabs-divider-color: var(--kemet-color-font-base);\n --kemet-tabs-ink-color: var(--kemet-color-font-active);\n\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n}\n\n:host([placement='bottom']) {\n flex-direction: column-reverse;\n}\n\n:host([placement='left']) {\n flex-direction: row;\n}\n\n:host([placement='right']) {\n flex-direction: row-reverse;\n}\n\n:host([placement='left']),\n:host([placement='right']) {\n overflow: unset;\n}\n\n/* panels */\n\n[part='panels'] > div {\n display: flex;\n}\n\n:host([panel-effect='slide']) [part='panels'] {\n transition: transform var(--kemet-tabs-transition-speed) linear;\n}\n\n:host([panel-effect='fade']) [part='panels'] {\n transform: none !important;\n}\n\n:host([panel-effect='fade']) [part='panels'] > div {\n flex-flow: row nowrap;\n}\n\n:host([placement='left']) [part='panels'],\n:host([placement='right']) [part='panels'] {\n transform: none !important;\n position: relative;\n width: 100%;\n}\n\n:host([placement='top']) [part='panels'] > div {\n margin-top: var(--kemet-tabs-spacer);\n}\n\n:host([placement='right']) [part='panels'] > div {\n margin-right: var(--kemet-tabs-spacer);\n}\n\n:host([placement='bottom']) [part='panels'] > div {\n margin-bottom: var(--kemet-tabs-spacer);\n}\n\n:host([placement='left']) [part='panels'] > div {\n margin-left: var(--kemet-tabs-spacer);\n}\n\n/* tablist */\n\n[part='tablist'] {\n display: flex;\n}\n\n:host([placement='left']) [part='tablist'],\n:host([placement='right']) [part='tablist'] {\n display: flex;\n flex-direction: column;\n align-items: start;\n}\n\n:host([tabs-align='center']) [part='tablist'] {\n justify-content: center;\n}\n\n:host([tabs-align='between']) [part='tablist'] {\n justify-content: space-between;\n}\n\n:host([tabs-align='evenly']) [part='tablist'] {\n justify-content: space-evenly;\n}\n\n:host([tabs-align='around']) [part='tablist'] {\n justify-content: space-around\n}\n\n:host([tabs-align='start']) [part='tablist'] {\n justify-content: flex-start;\n}\n\n:host([tabs-align='end']) [part='tablist'] {\n justify-content: flex-end;\n}\n\n:host([overflow]) [part='tablist'] {\n justify-content: start;\n}\n\n/* divider */\n\n[part='divider'] {\n height: var(--kemet-tabs-divider-size);\n background-color: var(--kemet-tabs-divider-color);\n}\n\n:host([placement='left']) [part='divider'],\n:host([placement='right']) [part='divider'] {\n width: var(--kemet-tabs-divider-size);\n height: auto;\n}\n\n/* ink */\n\n[part='ink'] {\n height: var(--kemet-tabs-ink-size);\n border-top-left-radius: var(--kemet-tabs-ink-radius);\n border-top-right-radius: var(--kemet-tabs-ink-radius);\n transition: all 300ms ease;\n background-color: var(--kemet-tabs-ink-color);\n}\n\n:host([placement='right']) [part='ink'] {\n width: var(--kemet-tabs-ink-size);\n border-top-right-radius: var(--kemet-tabs-ink-radius);\n border-bottom-right-radius: var(--kemet-tabs-ink-radius);\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n\n:host([placement='left']) [part='ink'] {\n width: var(--kemet-tabs-ink-size);\n border-top-right-radius: 0px;\n border-bottom-right-radius: 0px;\n border-top-left-radius: var(--kemet-tabs-ink-radius);\n border-bottom-left-radius: var(--kemet-tabs-ink-radius);\n}\n\n:host([placement='bottom']) [part='ink'] {\n border-top-right-radius: 0px;\n border-bottom-right-radius: var(--kemet-tabs-ink-radius);\n border-top-left-radius: 0px;\n border-bottom-left-radius: var(--kemet-tabs-ink-radius);\n}\n\n/* links */\n\n:host([overflow]) [part='links'] {\n overflow-x: auto;\n margin: 0 2rem;\n scroll-behavior: smooth;\n}\n\n:host([overflow]) [part='links']::-webkit-scrollbar {\n display: none;\n width: 0;\n background: transparent;\n}\n\n:host([placement='bottom']) [part='links'] {\n display: flex;\n flex-direction: column-reverse;\n}\n\n/* icon */\n\n[icon*='chevron'] {\n cursor: pointer;\n position: absolute;\n top: 1rem;\n}\n\n[icon='chevron-left'] {\n left: 0;\n}\n\n[icon='chevron-right'] {\n right: 0;\n}\n\n:host([placement='bottom']) [icon*='chevron'] {\n top: auto;\n bottom: 1rem;\n}\n`;\n"],"mappings":"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","names":["LitElement","html","customElement","property","state","css","styles_css_default","EnumPanelEffect","EnumTabsAlign","LitElement","html","styles_css_default","property","state","customElement"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/tabs/index.ts","../../../src/utilities/decorators.ts","../../../src/utilities/events.ts","../../../src/elements/tabs/styles.css.ts"],"sourcesContent":["/* eslint-disable no-case-declarations */\nimport { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property, query, state } from '../../utilities/decorators';\nimport { emitEvent } from '../../utilities/events';\nimport { EnumDirections } from '../../utilities/constants';\nimport type KemetTab from '../tab';\nimport type KemetTabPanel from '../tab-panel';\nimport styles from './styles.css.ts';\n\n\ninterface InterfaceLink {\n width: string;\n height: string;\n positionX: string;\n positionY: string;\n}\n\nexport interface InterfaceTabsDetails {\n element: KemetTabs;\n selectedName: string;\n selectedIndex: number;\n}\n\nexport enum EnumPanelEffect {\n None = 'none',\n Slide = 'slide',\n Fade = 'fade',\n Stacked = 'stacked'\n}\n\n\nexport enum EnumTabsAlign {\n Center = 'center',\n Between = 'between',\n Around = 'around',\n Evenly = 'evenly',\n Start = 'start',\n End = 'end'\n}\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-tabs\n * @summary A group of tabs and panels.\n * @ssrsafe yes\n *\n * @prop {string} selected - The selected tab by name\n * @prop {number} selectedIndex - The selected tab by index\n * @prop {number} panelPosition - Positions the current panel\n * @prop {string} panelEffect - The transition effect for panels\n * @prop {boolean} swipe - Determines whether to enable swipe behavior\n * @prop {TypeDirection} placement - Places the tabs to the top, right, bottom, or left\n * @prop {boolean} divider - Determines whether to show a divider line\n * @prop {TypeTabsAlign} tabsAlign - Spacing alignment of the tabs\n * @prop {object} ink - An object that contains information about the ink\n * @prop {boolean} hideInk - Determines whether to hide the ink\n * @prop {boolean} overflow - Is true when the space of the tabs is larger than it's container\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 * @slot tab - Place the tabs here.\n * @slot panel - Place the panels here.\n *\n * @csspart links - The container for the tablist.\n * @csspart tablist - Contains the tabs.\n * @csspart panels - Contains the panels.\n * @csspart ink - The ink element.\n * @csspart divider - The divider element.\n *\n * @cssproperty --kemet-tabs-ink-size - The thickness of the ink.\n * @cssproperty --kemet-tabs-ink-radius - The radius on the ink.\n * @cssproperty --kemet-tabs-ink-color - The color of the ink.\n * @cssproperty --kemet-tabs-divider-size - The thickness of the divider.\n * @cssproperty --kemet-tabs-divider-color - The color of the divider.\n * @cssproperty --kemet-tabs-transition-speed - The transition speed of the panels.\n * @cssproperty --kemet-tabs-spacer - The space between tabs and panels.\n *\n * @event kemet-tabs-change - Fires when a tab is changed\n *\n * @fires kemet-tabs-mounted - Fired when the tabs are mounted to the DOM\n * @detail {HTMLElement} element - The tabs element\n *\n */\n\n@customElement('kemet-tabs')\nexport default class KemetTabs extends LitElement {\n static styles = [styles];\n\n @property({ type: String, reflect: true })\n selected?: string;\n\n @property({ type: Number, reflect: true, attribute: 'selected-index' })\n selectedIndex: number = 0;\n\n @property({ type: Number })\n panelPosition: number = 0;\n\n @property({ type: String, reflect: true, attribute: 'panel-effect' })\n panelEffect: EnumPanelEffect = EnumPanelEffect.None;\n\n @property({ type: Boolean })\n swipe: boolean = false;\n\n @property({ type: String, reflect: true })\n placement: EnumDirections = EnumDirections.Top;\n\n @property({ type: Boolean })\n divider: boolean = false;\n\n @property({ type: String, reflect: true, attribute: 'tabs-align' })\n tabsAlign: EnumTabsAlign = EnumTabsAlign.Center;\n\n @property({ type: Object })\n ink: InterfaceLink = { width: '0', height: '0', positionX: '0', positionY: '0' };\n\n @property({ type: Boolean, attribute: 'hide-ink' })\n hideInk: boolean = false;\n\n @property({ type: Boolean, reflect: true })\n overflow: boolean = false;\n\n @property({ type: String, reflect: true })\n polarity?: 'light' | 'dark';\n\n @property({ type: String, reflect: true })\n dom: string = 'initializing';\n\n @state()\n tabs!: KemetTab[];\n\n @state()\n panels!: KemetTabPanel[];\n\n @state()\n xDown!: number | null;\n\n @state()\n yDown!: number | null;\n\n @state()\n links!: HTMLElement;\n\n @query('#panels')\n panelsElement!: HTMLElement;\n\n private _handleTabKeydown = this.handleTabKeydown.bind(this);\n\n constructor() {\n super();\n\n this.addEventListener('kemet-tab-selected', this.tabSelectedChange.bind(this));\n this.addEventListener('kemet-tab-closed', this.handleTabClose.bind(this));\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', this.handleResize.bind(this));\n }\n }\n\n firstUpdated() {\n // standard properties\n this.tabs = [];\n this.panels = [];\n this.xDown = null;\n this.yDown = null;\n\n this.links = this.shadowRoot?.getElementById('links') as HTMLElement;\n\n this.handleLinksSlotChange();\n this.handlePanelsSlotChange();\n\n emitEvent(this, 'kemet-tabs-mounted', {\n bubbles: true,\n composed: true,\n detail: {\n element: this,\n },\n });\n this.dom = 'mounted';\n }\n\n render() {\n return html`\n ${this.makeLeftArrow()}\n ${this.makeRightArrow()}\n <div id=\"links\" part=\"links\">\n <div part='tablist' role=\"tablist\">\n <slot name=\"tab\" @slotchange=${() => this.handleLinksSlotChange()}></slot>\n </div>\n ${this.makeInk('links')}\n </div>\n ${this.makeInk('host')}\n ${this.makeDivider()}\n <section id=\"panels\" part=\"panels\" style=\"transform:translateX(${this.panelPosition}px);\">\n <div>\n <slot name=\"panel\" @slotchange=${() => this.handlePanelsSlotChange()}></slot>\n </div>\n </section>\n `;\n }\n\n updated(prevProps: Map<string, never>) {\n this.determineFade();\n this.determineStacked();\n\n if (prevProps.get('selected') && prevProps.get('selected') !== this.selected) {\n this.selectTab();\n this.selectPanel();\n }\n\n if (typeof prevProps.get('selectedIndex') === 'number' && prevProps.get('selectedIndex') !== this.selected) {\n this.selectTab();\n this.selectPanel();\n }\n }\n\n handleLinksSlotChange() {\n this.tabs?.forEach((tab) => tab.removeEventListener('keydown', this._handleTabKeydown));\n this.tabs = [];\n\n const tabs = this.querySelectorAll('kemet-tab');\n let index = 0;\n\n tabs.forEach((tab: KemetTab) => {\n // give each tab an index to select by if link/panel is not used\n tab.index = index;\n index += 1;\n\n // store the list of tabs\n this.tabs = this.tabs.concat(tab);\n\n // add keyboard support\n tab.addEventListener('keydown', this._handleTabKeydown);\n });\n\n // default to the first tab/panel selected\n const firstTab = this.tabs[0];\n if (firstTab) firstTab.selected = true;\n\n setTimeout(() => {\n this.selectTab();\n }, 1);\n this.determineOverflow();\n }\n\n handlePanelsSlotChange() {\n this.panels = [];\n\n const panels = this.querySelectorAll('kemet-tab-panel');\n const panelElement = this.shadowRoot?.getElementById('panels');\n let index = 0;\n\n panels.forEach((panel: KemetTabPanel) => {\n // give each panel an index to select by if link/panel is not used\n panel.index = index;\n index += 1;\n\n // store the list of panels\n this.panels = this.panels.concat(panel);\n });\n\n // default to the first tab/panel selected\n if (this.panels.length > 0) {\n const firstPanel = this.panels[0];\n if (firstPanel) firstPanel.selected = true;\n }\n\n // add swipe support\n if (this.swipe) {\n panelElement?.addEventListener('touchstart', event => this.handleTouchStart(event), false);\n panelElement?.addEventListener('touchmove', event => this.handleTouchMove(event), false);\n }\n\n this.selectPanel();\n }\n\n handleLeftArrow() {\n const selectedElement = this.tabs.find(tab => tab.selected) || this.tabs[0];\n if (!selectedElement) return;\n const previousElement = selectedElement.previousElementSibling as KemetTab;\n const selectedIndex = this.tabs.findIndex(tab => tab.selected);\n\n if (this.selected) {\n this.selected = previousElement ? previousElement.link : selectedElement.link;\n } else {\n this.selectedIndex = selectedIndex > 0 ? selectedIndex - 1 : 0;\n }\n\n if (previousElement) {\n this.links.scrollLeft = previousElement.offsetLeft - 20;\n }\n\n this.selectTab();\n this.selectPanel();\n }\n\n handleRightArrow() {\n const selectedElement = this.tabs.find(tab => tab.selected) || this.tabs[this.tabs.length - 1];\n if (!selectedElement) return;\n const nextElement = selectedElement.nextElementSibling as KemetTab;\n const selectedIndex = this.tabs.findIndex(tab => tab.selected);\n\n if (this.selected) {\n this.selected = nextElement ? nextElement.link : selectedElement.link;\n } else {\n this.selectedIndex = selectedIndex < this.tabs.length - 1\n ? selectedIndex + 1\n : this.tabs.length - 1;\n }\n\n if (nextElement) {\n this.links.scrollLeft = nextElement.offsetLeft - 20;\n }\n\n this.selectTab();\n this.selectPanel();\n }\n\n handleTabClose(event: Event) {\n const tab = (event as CustomEvent).detail.element;\n const panel = this.panels[tab.index];\n\n if (this.tabs[0]) {\n this.selected = this.tabs[0].link;\n }\n this.selectedIndex = 0;\n\n panel?.remove();\n tab.remove();\n }\n\n makeInk(location: string) {\n if (this.hideInk) {\n return null;\n }\n\n if ((this.placement === 'top' || this.placement === 'bottom') && this.ink && location === 'links') {\n return html`<div part=\"ink\" style=\"width:${this.ink.width}; transform:translateX(${this.ink.positionX})\"></div>`;\n }\n\n if ((this.placement === 'left' || this.placement === 'right') && this.ink && location === 'host') {\n return html`<div part=\"ink\" style=\"height:${this.ink.height}; transform:translateY(${this.ink.positionY})\"></div>`;\n }\n\n return null;\n }\n\n makeDivider() {\n if (this.divider) {\n return html`<div part=\"divider\"></div>`;\n }\n\n return null;\n }\n\n makeLeftArrow() {\n if (this.overflow) {\n return html`<kemet-icon name='chevron-left' size=\"20\" @click=${() => this.handleLeftArrow()}></kemet-icon>`;\n }\n\n return null;\n }\n\n makeRightArrow() {\n if (this.overflow) {\n return html`<kemet-icon name='chevron-right' size=\"20\" @click=${() => this.handleRightArrow()}></kemet-icon>`;\n }\n\n return null;\n }\n\n selectTab() {\n const marginLeft = this.links ? parseInt(window.getComputedStyle(this.links).marginLeft.replace('px', ''), 10) : 0;\n const overflowOffset = this.overflow ? marginLeft : 0;\n\n // if the user uses the selected attribute select by it\n if (this.selected) {\n this.tabs.forEach((tab) => {\n const tabName = tab.getAttribute('link');\n\n if (tabName === this.selected) {\n tab.selected = true;\n this.selected = tabName;\n\n this.ink = {\n width: `${tab.offsetWidth}px`,\n height: `${tab.offsetHeight}px`,\n positionX: `${tab.offsetLeft - overflowOffset}px`,\n positionY: `${tab.offsetTop}px`,\n };\n\n this.links.scrollLeft = tab.offsetLeft - overflowOffset;\n } else {\n tab.selected = false;\n }\n });\n\n // otherwise select by index\n } else {\n this.tabs.forEach((tab) => {\n if (this.selectedIndex === tab.index) {\n tab.selected = true;\n\n this.ink = {\n width: `${tab.offsetWidth}px`,\n height: `${tab.offsetHeight}px`,\n positionX: `${tab.offsetLeft - overflowOffset}px`,\n positionY: `${tab.offsetTop}px`,\n };\n\n this.links.scrollLeft = tab.offsetLeft - overflowOffset;\n } else {\n tab.selected = false;\n }\n });\n }\n }\n\n selectPanel() {\n // if the user uses the selected attribute select by it\n if (this.selected) {\n this.panels.forEach((panel) => {\n const panelName = panel.getAttribute('panel');\n\n if (this.panelEffect === 'fade' && panel.index !== 0) {\n panel.classList.add('push');\n }\n\n if (this.placement === 'left' || this.placement === 'right') {\n panel.classList.add('vertical');\n }\n\n if (panelName === this.selected) {\n panel.selected = true;\n this.animatePanel(panelName, null);\n } else {\n panel.selected = false;\n }\n });\n\n // otherwise select by index\n } else {\n this.panels.forEach((panel) => {\n if (this.panelEffect === 'fade' && panel.index !== 0) {\n panel.classList.add('push');\n }\n\n if (this.placement === 'left' || this.placement === 'right') {\n panel.classList.add('vertical');\n }\n\n if (this.selectedIndex === panel.index) {\n panel.selected = true;\n this.animatePanel(null, panel.index);\n } else {\n panel.selected = false;\n }\n });\n }\n }\n\n dispatchTabChange() {\n emitEvent(this, 'kemet-tabs-change', {\n element: this,\n selectedName: this.selected,\n selectedIndex: this.selectedIndex\n });\n }\n\n tabSelectedChange(event: Event) {\n if (this.selected) {\n // if selected has been set, use the string attribute\n this.selected = (event as CustomEvent).detail.element.getAttribute('link');\n } else {\n // otherwise use the generated index\n this.selectedIndex = (event as CustomEvent).detail.element.index;\n }\n\n this.selectTab();\n this.selectPanel();\n this.dispatchTabChange();\n }\n\n determineFade() {\n this.panels.forEach((panel) => {\n // add fade class if panel effect is fade\n if (this.panelEffect === 'fade') panel.classList.add('fade');\n });\n }\n\n determineStacked() {\n this.panels.forEach((panel) => {\n // add fade class if panel effect is fade\n if (this.panelEffect === 'stacked') panel.classList.add('stacked');\n });\n }\n\n determineOverflow() {\n const tabsContainerWidth = this.offsetWidth;\n const tabElements = this.querySelectorAll('kemet-tab');\n\n let totalTabsWidth = 0;\n\n tabElements.forEach((tab) => {\n totalTabsWidth += tab.offsetWidth;\n });\n\n this.overflow = totalTabsWidth > tabsContainerWidth && (this.placement === 'top' || this.placement === 'bottom');\n }\n\n handleResize() {\n if (this.tabs && this.panels) {\n const marginLeft = this.links ? parseInt(window.getComputedStyle(this.links).marginLeft.replace('px', ''), 10) : 0;\n const overflowOffset = this.overflow ? marginLeft : 0;\n const selectedElement = this.tabs.find(tab => tab.selected);\n\n if (selectedElement) {\n this.ink = {\n width: `${selectedElement.offsetWidth}px`,\n height: `${selectedElement.offsetHeight}px`,\n positionX: `${selectedElement.offsetLeft - overflowOffset}px`,\n positionY: `${selectedElement.offsetTop}px`,\n };\n }\n\n this.determineOverflow();\n\n if (this.selected) {\n this.animatePanel(this.selected, null);\n } else {\n this.animatePanel(null, this.selectedIndex);\n }\n }\n }\n\n animatePanel(panelName: string | null, panelIndex: number | null) {\n if (panelName) {\n const selectedPanel = this.querySelector(`[panel=\"${panelName}\"]`) as KemetTabPanel;\n if (selectedPanel) this.panelPosition = selectedPanel.offsetLeft * -1;\n } else {\n if (panelIndex !== null && this.panels[panelIndex]) this.panelPosition = this.panels[panelIndex].offsetLeft * -1;\n }\n }\n\n handleTabKeydown(event: KeyboardEvent) {\n if (this.selected) {\n switch (event.key) {\n case 'Home':\n if (this.tabs[0]) {\n this.selected = this.tabs[0].getAttribute('link') ?? undefined;\n }\n break;\n case 'End':\n const lastTab = this.tabs[this.tabs.length - 1];\n if (lastTab) {\n this.selected = lastTab.getAttribute('link') ?? undefined;\n }\n break;\n case 'ArrowRight':\n const nextLinkElement = this.querySelector('kemet-tab[selected]')?.nextElementSibling;\n const nextLink = nextLinkElement ? nextLinkElement.getAttribute('link') : false;\n\n if (nextLink) {\n this.selected = nextLink;\n }\n break;\n case 'ArrowLeft':\n const previousLinkElement = this.querySelector('kemet-tab[selected]')?.previousElementSibling;\n const previousLink = previousLinkElement ? previousLinkElement.getAttribute('link') : false;\n\n if (previousLink) {\n this.selected = previousLink;\n }\n break;\n default: break;\n }\n\n const tabToFocus = this.tabs.find(tab => tab.link === this.selected);\n if (tabToFocus) tabToFocus.focus();\n } else {\n switch (event.key) {\n case 'Home':\n this.selectedIndex = 0;\n break;\n case 'End':\n this.selectedIndex = this.tabs.length - 1;\n break;\n case 'ArrowRight':\n if (this.selectedIndex < this.tabs.length - 1) {\n this.selectedIndex += 1;\n } else {\n this.selectedIndex = this.tabs.length - 1;\n }\n break;\n case 'ArrowLeft':\n if (this.selectedIndex < 1) {\n this.selectedIndex = 0;\n } else {\n this.selectedIndex -= 1;\n }\n break;\n default: break;\n }\n\n if (this.tabs[this.selectedIndex]) {\n this.tabs[this.selectedIndex]?.focus();\n }\n }\n }\n\n handleTouchStart(event: TouchEvent) {\n this.xDown = event.touches[0]?.clientX ?? 0;\n this.yDown = event.touches[0]?.clientY ?? 0;\n }\n\n handleTouchMove(event: TouchEvent) {\n if (!this.xDown || !this.yDown) {\n return;\n }\n\n const xUp = event.touches[0]?.clientX ?? 0;\n const yUp = event.touches[0]?.clientY ?? 0;\n const xDiff = this.xDown - xUp;\n const yDiff = this.yDown - yUp;\n\n const nextElement = this.querySelector('kemet-tab-panel[selected]')?.nextElementSibling;\n const next = nextElement ? nextElement.getAttribute('panel') : false;\n const previousElement = this.querySelector('kemet-tab-panel[selected]')?.previousElementSibling;\n const previous = previousElement ? previousElement.getAttribute('panel') : false;\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) {\n if (xDiff > 0) {\n if (this.selected) {\n if (next) this.selected = next;\n } else {\n if (this.selectedIndex < this.tabs.length) this.selectedIndex += 1;\n }\n } else {\n if (this.selected) {\n if (previous) this.selected = previous;\n } else {\n if (this.selectedIndex > 0) this.selectedIndex -= 1;\n }\n }\n\n this.selectTab();\n this.selectPanel();\n }\n\n this.xDown = null;\n this.yDown = null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-tabs': KemetTabs\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-tabs-ink-size: 6px;\n --kemet-tabs-ink-radius: 6px;\n --kemet-tabs-divider-size: 1px;\n --kemet-tabs-spacer: 1rem;\n --kemet-tabs-transition-speed: 0.5s;\n --kemet-tabs-divider-color: var(--kemet-color-font-base);\n --kemet-tabs-ink-color: var(--kemet-color-font-active);\n\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n}\n\n:host([placement='bottom']) {\n flex-direction: column-reverse;\n}\n\n:host([placement='left']) {\n flex-direction: row;\n}\n\n:host([placement='right']) {\n flex-direction: row-reverse;\n}\n\n:host([placement='left']),\n:host([placement='right']) {\n overflow: unset;\n}\n\n/* panels */\n\n[part='panels'] > div {\n display: flex;\n}\n\n:host([panel-effect='slide']) [part='panels'] {\n transition: transform var(--kemet-tabs-transition-speed) linear;\n}\n\n:host([panel-effect='fade']) [part='panels'] {\n transform: none !important;\n}\n\n:host([panel-effect='fade']) [part='panels'] > div {\n flex-flow: row nowrap;\n}\n\n:host([placement='left']) [part='panels'],\n:host([placement='right']) [part='panels'] {\n transform: none !important;\n position: relative;\n width: 100%;\n}\n\n:host([placement='top']) [part='panels'] > div {\n margin-top: var(--kemet-tabs-spacer);\n}\n\n:host([placement='right']) [part='panels'] > div {\n margin-right: var(--kemet-tabs-spacer);\n}\n\n:host([placement='bottom']) [part='panels'] > div {\n margin-bottom: var(--kemet-tabs-spacer);\n}\n\n:host([placement='left']) [part='panels'] > div {\n margin-left: var(--kemet-tabs-spacer);\n}\n\n/* tablist */\n\n[part='tablist'] {\n display: flex;\n}\n\n:host([placement='left']) [part='tablist'],\n:host([placement='right']) [part='tablist'] {\n display: flex;\n flex-direction: column;\n align-items: start;\n}\n\n:host([tabs-align='center']) [part='tablist'] {\n justify-content: center;\n}\n\n:host([tabs-align='between']) [part='tablist'] {\n justify-content: space-between;\n}\n\n:host([tabs-align='evenly']) [part='tablist'] {\n justify-content: space-evenly;\n}\n\n:host([tabs-align='around']) [part='tablist'] {\n justify-content: space-around\n}\n\n:host([tabs-align='start']) [part='tablist'] {\n justify-content: flex-start;\n}\n\n:host([tabs-align='end']) [part='tablist'] {\n justify-content: flex-end;\n}\n\n:host([overflow]) [part='tablist'] {\n justify-content: start;\n}\n\n/* divider */\n\n[part='divider'] {\n height: var(--kemet-tabs-divider-size);\n background-color: var(--kemet-tabs-divider-color);\n}\n\n:host([placement='left']) [part='divider'],\n:host([placement='right']) [part='divider'] {\n width: var(--kemet-tabs-divider-size);\n height: auto;\n}\n\n/* ink */\n\n[part='ink'] {\n height: var(--kemet-tabs-ink-size);\n border-top-left-radius: var(--kemet-tabs-ink-radius);\n border-top-right-radius: var(--kemet-tabs-ink-radius);\n transition: all 300ms ease;\n background-color: var(--kemet-tabs-ink-color);\n}\n\n:host([placement='right']) [part='ink'] {\n width: var(--kemet-tabs-ink-size);\n border-top-right-radius: var(--kemet-tabs-ink-radius);\n border-bottom-right-radius: var(--kemet-tabs-ink-radius);\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n\n:host([placement='left']) [part='ink'] {\n width: var(--kemet-tabs-ink-size);\n border-top-right-radius: 0px;\n border-bottom-right-radius: 0px;\n border-top-left-radius: var(--kemet-tabs-ink-radius);\n border-bottom-left-radius: var(--kemet-tabs-ink-radius);\n}\n\n:host([placement='bottom']) [part='ink'] {\n border-top-right-radius: 0px;\n border-bottom-right-radius: var(--kemet-tabs-ink-radius);\n border-top-left-radius: 0px;\n border-bottom-left-radius: var(--kemet-tabs-ink-radius);\n}\n\n/* links */\n\n:host([overflow]) [part='links'] {\n overflow-x: auto;\n margin: 0 2rem;\n scroll-behavior: smooth;\n}\n\n:host([overflow]) [part='links']::-webkit-scrollbar {\n display: none;\n width: 0;\n background: transparent;\n}\n\n:host([placement='bottom']) [part='links'] {\n display: flex;\n flex-direction: column-reverse;\n}\n\n/* icon */\n\n[icon*='chevron'] {\n cursor: pointer;\n position: absolute;\n top: 1rem;\n}\n\n[icon='chevron-left'] {\n left: 0;\n}\n\n[icon='chevron-right'] {\n right: 0;\n}\n\n:host([placement='bottom']) [icon*='chevron'] {\n top: auto;\n bottom: 1rem;\n}\n`;\n"],"mappings":"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","names":["EnumPanelEffect","EnumTabsAlign"]}
|