wj-elements 0.0.21 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/wj-icon.js CHANGED
@@ -113,7 +113,6 @@ const getNamedUrl = (iconName) => {
113
113
  let parsedUrl = new URL(import.meta.url);
114
114
  let pathName = parsedUrl.pathname;
115
115
  let folderPath = pathName.substring(0, pathName.lastIndexOf("/"));
116
- console.log(folderPath, parsedUrl, pathName, parsedUrl.origin + folderPath + path);
117
116
  return new URL(parsedUrl.origin + folderPath + path).href;
118
117
  };
119
118
  const styles = "/*\n[ WJ Icon ]\n*/\n:host(.wj-color-primary) {\n --wj-icon-color: var(--wj-color-primary);\n}\n\n:host(.wj-color-complete) {\n --wj-icon-color: var(--wj-color-complete);\n}\n\n:host(.wj-color-success) {\n --wj-icon-color: var(--wj-color-success);\n}\n\n:host(.wj-color-warning) {\n --wj-icon-color: var(--wj-color-warning);\n}\n\n:host(.wj-color-danger) {\n --wj-icon-color: var(--wj-color-danger);\n}\n\n:host(.wj-color-info) {\n --wj-icon-color: var(--wj-color-info);\n}\n\n:host {\n --wj-icon-size: 1rem;\n --wj-icon-width: var(--wj-icon-size, 100%);\n --wj-icon-height: var(--wj-icon-size, 100%);\n display: inline-block;\n width: var(--wj-icon-width);\n height: var(--wj-icon-height);\n contain: strict;\n fill: currentColor;\n box-sizing: content-box !important;\n}\n\n.icon-inner, svg {\n display: block;\n width: var(--wj-icon-width);\n height: var(--wj-icon-height);\n}\n\n:host(.wj-size-small) {\n --wj-icon-size: 18px;\n}\n\n:host(.wj-size-large) {\n --wj-icon-size: 32px;\n}\n\n:host(.wj-size) {\n font-size: var(--wj-icon-size);\n}\n\n:host(.wj-color) {\n color: var(--wj-icon-color) !important;\n}";
package/dist/wj-item.js CHANGED
@@ -9,6 +9,7 @@ const styles = '/*\n[ WJ Item ]\n*/\n:host {\n --wj-border-width: 0 0 1px 0;\n
9
9
  class Item extends WJElement {
10
10
  constructor() {
11
11
  super();
12
+ __publicField(this, "className", "Item");
12
13
  __publicField(this, "hostContext", (selector, el) => {
13
14
  return el.closest(selector) !== null;
14
15
  });
package/dist/wj-master.js CHANGED
@@ -1,16 +1,10 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => {
4
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
- return value;
6
- };
7
- import WJElement, { WjElementUtils, event } from "./wj-element.js";
1
+ import { default as default2 } from "./wj-element.js";
8
2
  import { defaultStoreActions, store } from "./wj-store.js";
9
3
  import { b, w } from "./router-links-F7MJWhZi.js";
10
4
  import { fetchAndParseCSS } from "./wj-fetchAndParseCSS.js";
11
5
  import { L as Localizer } from "./localize-DSOailh_.js";
12
- import { Aside } from "./wj-aside.js";
13
6
  import { Animation } from "./wj-animation.js";
7
+ import { Aside } from "./wj-aside.js";
14
8
  import { Avatar } from "./wj-avatar.js";
15
9
  import { Badge } from "./wj-badge.js";
16
10
  import { Breadcrumb } from "./wj-breadcrumb.js";
@@ -56,6 +50,10 @@ import { Menu } from "./wj-menu.js";
56
50
  import { MenuButton } from "./wj-menu-button.js";
57
51
  import { MenuItem } from "./wj-menu-item.js";
58
52
  import { MenuLabel } from "./wj-menu-label.js";
53
+ import { Nav } from "./wj-nav.js";
54
+ import { NavMenu } from "./wj-nav-menu.js";
55
+ import { Option } from "./wj-option.js";
56
+ import { Options } from "./wj-options.js";
59
57
  import { Popup } from "./wj-popup.js";
60
58
  import { ProgressBar } from "./wj-progress-bar.js";
61
59
  import { Radio } from "./wj-radio.js";
@@ -67,8 +65,12 @@ import { Routerx } from "./wj-routerx.js";
67
65
  import { RouterLink } from "./wj-router-link.js";
68
66
  import "./wj-router-outlet.js";
69
67
  import { Row } from "./wj-row.js";
68
+ import { Select } from "./wj-select.js";
70
69
  import { Slider } from "./wj-slider.js";
71
70
  import { SplitView } from "./wj-split-view.js";
71
+ import { Tab } from "./wj-tab.js";
72
+ import { TabGroup } from "./wj-tab-group.js";
73
+ import { TabPanel } from "./wj-tab-panel.js";
72
74
  import { Textarea } from "./wj-textarea.js";
73
75
  import { Thumbnail } from "./wj-thumbnail.js";
74
76
  import { Toast } from "./wj-toast.js";
@@ -97,480 +99,6 @@ const en = {
97
99
  "wj.file.upload.from": "from"
98
100
  };
99
101
  Localizer.registerTranslation(en);
100
- const styles$7 = "/*\n[ WJ Example Element ]\n*/\n:host {\n color: red;\n}";
101
- class ExampleElement extends WJElement {
102
- constructor() {
103
- super();
104
- __publicField(this, "className", "ExampleElement");
105
- }
106
- static get cssStyleSheet() {
107
- return styles$7;
108
- }
109
- static get observedAttributes() {
110
- return [];
111
- }
112
- setupAttributes() {
113
- this.isShadowRoot = "open";
114
- WjElementUtils.setAttributesToElement(this, {
115
- "test": "test"
116
- });
117
- }
118
- beforeDraw(context, store2, params) {
119
- }
120
- draw(context, store2, params) {
121
- console.log(context, store2, params);
122
- let fragment = document.createDocumentFragment();
123
- let element = document.createElement("div");
124
- element.innerHTML = params.text;
125
- fragment.appendChild(element);
126
- return fragment;
127
- }
128
- afterDraw(context, store2, params) {
129
- console.log("afterDraw", this.params);
130
- }
131
- }
132
- customElements.get("wj-example-element") || window.customElements.define("wj-example-element", ExampleElement);
133
- const styles$6 = "/*!\n* direction.scss\n*/\n/* Skeleton Variables */\n/*\n[ Button Group ]\n*/\n:host {\n display: inline-block;\n}\n:host .native-button-group {\n display: flex;\n flex-wrap: nowrap;\n line-height: 1;\n}\n:host slot {\n display: contents;\n}\n::slotted(wj-button) {\n margin: 0;\n}";
134
- class NavMenu extends WJElement {
135
- constructor() {
136
- super();
137
- __publicField(this, "className", "ButtonGroup");
138
- }
139
- static get cssStyleSheet() {
140
- return styles$6;
141
- }
142
- static get observedAttributes() {
143
- return [];
144
- }
145
- setupAttributes() {
146
- this.isShadowRoot = "open";
147
- }
148
- draw(context, store2, params) {
149
- let fragment = document.createDocumentFragment();
150
- let element = document.createElement("div");
151
- element.classList.add("native-button-group");
152
- element.setAttribute("part", "native");
153
- this.slotElement = document.createElement("slot");
154
- element.appendChild(this.slotElement);
155
- fragment.appendChild(element);
156
- return fragment;
157
- }
158
- }
159
- customElements.get("wj-button-group") || window.customElements.define("wj-button-group", NavMenu);
160
- const styles$5 = "/*\n[ WJ Option ]\n*/\n:host {\n --wj-option-padding-top: .5rem;\n --wj-option-padding-bottom: .5rem;\n --wj-option-highlighted: var(--wj-color-contrast-3);\n display: block;\n}\n:host wj-icon {\n visibility: hidden;\n margin-inline: 0.5rem;\n}\n\n:host([selected]) wj-icon {\n visibility: visible;\n}\n\n.native-option {\n display: flex;\n align-items: center;\n padding-top: var(--wj-option-padding-top);\n padding-bottom: var(--wj-option-padding-bottom);\n}\n\n.native-option:hover {\n background-color: var(--wj-option-highlighted);\n}\n\n::slotted([slot=start]) {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n margin-inline-end: 0.5rem;\n}\n\n::slotted([slot=end]) {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n margin-inline: auto 0.5rem;\n}";
161
- class Option extends WJElement {
162
- constructor() {
163
- super();
164
- __publicField(this, "className", "Option");
165
- }
166
- set selected(value) {
167
- return value ? this.setAttribute("selected", "") : this.removeAttribute("selected");
168
- }
169
- set value(value) {
170
- this.setAttribute("value", value);
171
- }
172
- set text(value) {
173
- this.innerText = value;
174
- }
175
- static get cssStyleSheet() {
176
- return styles$5;
177
- }
178
- static get observedAttributes() {
179
- return [];
180
- }
181
- setupAttributes() {
182
- this.isShadowRoot = "open";
183
- }
184
- draw(context, store2, params) {
185
- let fragment = document.createDocumentFragment();
186
- let element = document.createElement("div");
187
- element.classList.add("native-option");
188
- element.setAttribute("part", "native");
189
- let icon = document.createElement("wj-icon");
190
- icon.setAttribute("name", "check");
191
- let start = document.createElement("slot");
192
- start.setAttribute("name", "start");
193
- let slot = document.createElement("slot");
194
- let end = document.createElement("slot");
195
- end.setAttribute("name", "end");
196
- element.appendChild(icon);
197
- element.appendChild(start);
198
- element.appendChild(slot);
199
- element.appendChild(end);
200
- fragment.appendChild(element);
201
- return fragment;
202
- }
203
- afterDraw() {
204
- event.addListener(this, "click", "wj:option-change");
205
- }
206
- }
207
- customElements.get("wj-option") || window.customElements.define("wj-option", Option);
208
- class Options extends WJElement {
209
- constructor() {
210
- super();
211
- __publicField(this, "className", "Options");
212
- }
213
- static get cssStyleSheet() {
214
- return styles;
215
- }
216
- static get observedAttributes() {
217
- return [];
218
- }
219
- setupAttributes() {
220
- this.isShadowRoot = "open";
221
- }
222
- async beforeDraw() {
223
- this.response = await this.getPages();
224
- let fragment = document.createDocumentFragment();
225
- this.response.forEach((item, index) => {
226
- let option = document.createElement("wj-option");
227
- option.setAttribute("value", item[this.itemValue] || item.value);
228
- option.innerText = item[this.itemText] || item.text;
229
- fragment.appendChild(option);
230
- });
231
- this.parentElement.appendChild(fragment);
232
- event.dispatchCustomEvent(this, "wj:options-load", {});
233
- }
234
- async getPages(page) {
235
- const response = await fetch(this.url);
236
- if (!response.ok) {
237
- throw new Error(`An error occurred: ${response.status}`);
238
- }
239
- return await response.json();
240
- }
241
- }
242
- customElements.get("wj-options") || window.customElements.define("wj-options", Options);
243
- const styles$4 = "/*\n[ WJ Select ]\n*/\n:host {\n --wj-select-border-width: 1px;\n --wj-select-border-style: solid;\n --wj-select-border-color: var(--wj-border-color);\n --wj-select-options-border-width: 1px;\n --wj-select-options-border-style: var(--wj-border-style);\n --wj-select-options-border-color: var(--wj-border-color);\n --wj-select-background: var(--wj-background);\n --wj-select-line-height: 20px;\n --wj-select-color: var(--wj-color);\n --wj-select-border-radius: var(--wj-border-radius-medium);\n width: 100%;\n display: block;\n}\n:host [slot=arrow] {\n transform: rotate(0deg);\n transition: all 0.2s ease-in;\n}\n\n.native-select.default .wrapper {\n display: block;\n border-width: var(--wj-select-border-width);\n border-style: var(--wj-select-border-style);\n border-color: var(--wj-select-border-color);\n border-radius: var(--wj-select-border-radius);\n padding-inline: 0.5rem;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.native-select.default .input-wrapper {\n padding: 0;\n min-height: 25px;\n margin-top: -4px;\n}\n.native-select.default.focused wj-label {\n opacity: 0.67;\n font-size: 12px;\n letter-spacing: normal;\n}\n.native-select.default wj-label {\n margin: 0;\n display: block;\n opacity: 1;\n cursor: text;\n transition: opacity 0.2s ease 0s;\n line-height: var(--wj-select-line-height);\n}\n.native-select.default wj-label.fade {\n opacity: 0.5;\n font-size: 12px;\n letter-spacing: normal;\n}\n.native-select.standard .input-wrapper {\n border-width: var(--wj-select-border-width);\n border-style: var(--wj-select-border-style);\n border-color: var(--wj-select-border-color);\n border-radius: var(--wj-select-border-radius);\n width: 100%;\n}\n\n.wrapper {\n display: flex;\n width: 100%;\n}\n\n.input-wrapper {\n display: grid;\n grid-template-columns: 1fr auto auto;\n align-items: center;\n background-color: var(--wj-select-background);\n min-height: 28px;\n color: var(--wj-select-color);\n line-height: var(--wj-select-line-height);\n appearance: none;\n padding: 2px 0.5rem;\n font-size: 14px;\n font-weight: normal;\n vertical-align: middle;\n}\n\ninput {\n border: medium;\n height: 25px;\n min-height: 25px;\n padding: 0;\n background: none;\n box-shadow: none;\n width: 100%;\n outline: 0;\n}\n\n::placeholder {\n opacity: 1;\n}\n\n:host [active] .input-wrapper {\n border-radius: var(--wj-select-border-radius) var(--wj-select-border-radius) 0 0;\n}\n:host [active] [slot=arrow] {\n transform: rotate(180deg);\n transition: all 0.2s ease-in;\n}\n\n.option-wrapper {\n border-width: var(--wj-select-options-border-width);\n border-style: var(--wj-select-options-border-style);\n border-color: var(--wj-select-options-border-color);\n border-radius: 0 0 var(--wj-select-border-radius) var(--wj-select-border-radius);\n margin-top: -1px;\n background: var(--wj-select-background);\n overflow: auto;\n}\n\n:host([multiple]) input {\n position: absolute;\n z-index: -1;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n opacity: 0;\n}\n\n:host([multiple]) .chips {\n display: flex;\n flex: 1;\n align-items: center;\n flex-wrap: wrap;\n}\n\n:host([disabled]) .input-wrapper {\n opacity: 0.5;\n pointer-events: none;\n cursor: not-allowed;\n}\n\n.counter {\n padding-inline: 0.5rem;\n}\n\nwj-chip {\n --wj-chip-margin: 0 .25rem 0 0;\n}\n\nwj-button {\n --wj-padding-top: .25rem;\n --wj-padding-start: .25rem;\n --wj-padding-end: .25rem;\n --wj-padding-bottom: .25rem;\n --wj-button-margin-inline: 0 .25rem;\n}";
244
- class Select extends WJElement {
245
- constructor() {
246
- super();
247
- __publicField(this, "className", "Select");
248
- __publicField(this, "optionChange", (e) => {
249
- let allOptions = this.getAllOptions();
250
- if (!this.hasAttribute("multiple")) {
251
- allOptions.forEach((option) => {
252
- option.selected = false;
253
- option.removeAttribute("selected");
254
- });
255
- this.popup.removeAttribute("active");
256
- }
257
- e.target.selected = !e.target.hasAttribute("selected");
258
- this.selections(e.target);
259
- });
260
- __publicField(this, "removeChip", (e) => {
261
- let option = e.target.option;
262
- option.selected = false;
263
- option.removeAttribute("selected");
264
- e.target.parentNode.removeChild(e.target);
265
- this.selections(null, 0);
266
- });
267
- this._selected = [];
268
- this.counterEl = null;
269
- }
270
- set selected(value) {
271
- this._selected = value;
272
- }
273
- get selected() {
274
- return this.getSelected();
275
- }
276
- set trigger(value) {
277
- this.setAttribute("trigger", value);
278
- }
279
- get trigger() {
280
- return this.getAttribute("trigger") || "click";
281
- }
282
- static get cssStyleSheet() {
283
- return styles$4;
284
- }
285
- static get observedAttributes() {
286
- return ["active", "value"];
287
- }
288
- setupAttributes() {
289
- this.isShadowRoot = "open";
290
- }
291
- draw(context, store2, params) {
292
- let fragment = document.createDocumentFragment();
293
- this.classList.add("wj-placement", "wj-" + this.placement || "wj-start");
294
- let native = document.createElement("div");
295
- native.setAttribute("part", "native");
296
- native.classList.add("native-select", this.variant || "default");
297
- let wrapper = document.createElement("div");
298
- wrapper.classList.add("wrapper");
299
- wrapper.setAttribute("slot", "anchor");
300
- let label = document.createElement("wj-label");
301
- label.innerText = this.label || "";
302
- let inputWrapper = document.createElement("div");
303
- inputWrapper.classList.add("input-wrapper");
304
- let input = document.createElement("input");
305
- input.setAttribute("type", "text");
306
- input.setAttribute("part", "input");
307
- input.setAttribute("autocomplete", "off");
308
- input.setAttribute("readonly", "");
309
- input.setAttribute("placeholder", this.placeholder || "");
310
- let arrow = document.createElement("wj-icon");
311
- arrow.setAttribute("name", "chevron-down");
312
- arrow.setAttribute("slot", "arrow");
313
- let chips = document.createElement("div");
314
- chips.classList.add("chips");
315
- chips.innerText = this.placeholder || "";
316
- let optionsWrapper = document.createElement("div");
317
- optionsWrapper.classList.add("option-wrapper");
318
- optionsWrapper.style.setProperty("height", this.maxHeight || "auto");
319
- let slot = document.createElement("slot");
320
- let clear = document.createElement("wj-button");
321
- clear.setAttribute("fill", "link");
322
- clear.setAttribute("part", "clear");
323
- let clearIcon = document.createElement("wj-icon");
324
- clearIcon.setAttribute("name", "x");
325
- clear.appendChild(clearIcon);
326
- let popup = document.createElement("wj-popup");
327
- popup.setAttribute("placement", "bottom-start");
328
- popup.setAttribute("manual", "");
329
- popup.setAttribute("size", "");
330
- if (this.hasAttribute("disabled"))
331
- popup.setAttribute("disabled", "");
332
- if (this.variant === "standard") {
333
- if (this.hasAttribute("label"))
334
- native.appendChild(label);
335
- } else {
336
- wrapper.appendChild(label);
337
- }
338
- inputWrapper.appendChild(input);
339
- if (this.hasAttribute("multiple"))
340
- inputWrapper.appendChild(chips);
341
- if (this.hasAttribute("clearable"))
342
- inputWrapper.appendChild(clear);
343
- inputWrapper.appendChild(arrow);
344
- optionsWrapper.appendChild(slot);
345
- wrapper.appendChild(inputWrapper);
346
- popup.appendChild(wrapper);
347
- popup.appendChild(optionsWrapper);
348
- if (this.trigger === "click")
349
- popup.setAttribute("manual", "");
350
- native.appendChild(popup);
351
- this.native = native;
352
- this.popup = popup;
353
- this.labelElement = label;
354
- this.input = input;
355
- this.optionsWrapper = optionsWrapper;
356
- this.chips = chips;
357
- this.clear = clear;
358
- fragment.appendChild(native);
359
- return fragment;
360
- }
361
- afterDraw(context, store2, params) {
362
- this.input.addEventListener("focus", (e) => {
363
- this.labelElement.classList.add("fade");
364
- this.native.classList.add("focused");
365
- });
366
- this.input.addEventListener("blur", (e) => {
367
- this.native.classList.remove("focused");
368
- if (!e.target.value)
369
- this.labelElement.classList.remove("fade");
370
- });
371
- this.addEventListener("wj:option-change", this.optionChange);
372
- this.clear.addEventListener("wj:button-click", (e) => {
373
- this.getAllOptions().forEach((option) => {
374
- option.selected = false;
375
- option.removeAttribute("selected");
376
- });
377
- this.selections();
378
- e.stopPropagation();
379
- });
380
- this.selections();
381
- this.optionsWrapper.addEventListener("wj:options-load", (e) => {
382
- this.optionsWrapper.scrollTo(0, 0);
383
- });
384
- }
385
- getAllOptions() {
386
- return this.querySelectorAll("wj-option");
387
- }
388
- getSelectedOptions() {
389
- return this.querySelectorAll("wj-option[selected]");
390
- }
391
- getSelected(option) {
392
- let selectedOptions = this.getSelectedOptions();
393
- selectedOptions = Array.isArray(selectedOptions) ? selectedOptions : Array.from(selectedOptions);
394
- selectedOptions = selectedOptions.map((option2) => {
395
- return {
396
- value: option2.value,
397
- text: option2.textContent.trim()
398
- };
399
- });
400
- return selectedOptions;
401
- }
402
- selectionChanged(option = null, length = 0) {
403
- if (this.hasAttribute("multiple")) {
404
- this.value = this.selectedOptions.map((el) => el).reverse();
405
- if (this.placeholder && length === 0) {
406
- this.chips.innerHTML = this.placeholder;
407
- this.input.value = "";
408
- } else {
409
- if (this.counterEl instanceof HTMLElement || length > +this.maxOptions) {
410
- this.counter();
411
- } else {
412
- if (option != null)
413
- this.chips.appendChild(this.getChip(option));
414
- }
415
- }
416
- } else {
417
- let value = (option == null ? void 0 : option.textContent.trim()) || "";
418
- this.value = value;
419
- this.input.value = value;
420
- }
421
- }
422
- selections(option) {
423
- let options = this.getSelectedOptions();
424
- this.selectedOptions = Array.isArray(options) ? options : Array.from(options);
425
- if (this.selectedOptions.length >= +this.maxOptions) {
426
- this.counterEl = null;
427
- }
428
- this.chips.innerHTML = "";
429
- if (this.selectedOptions.length > 0) {
430
- this.selectedOptions.forEach((option2, index) => {
431
- this.selectionChanged(option2, ++index);
432
- });
433
- } else {
434
- this.selectionChanged();
435
- }
436
- }
437
- counter() {
438
- if (this.counterEl && this.value.length === +this.maxOptions) {
439
- this.counterEl.remove();
440
- this.counterEl = null;
441
- return;
442
- }
443
- if (!this.counterEl) {
444
- this.counterEl = document.createElement("span");
445
- this.counterEl.classList.add("counter");
446
- this.chips.appendChild(this.counterEl);
447
- }
448
- this.counterEl.innerText = `+${this.value.length - +this.maxOptions}`;
449
- }
450
- getChip(option) {
451
- let chip = document.createElement("wj-chip");
452
- chip.setAttribute("removable", "");
453
- chip.addEventListener("wj:chip-remove", this.removeChip);
454
- chip.option = option;
455
- let label = document.createElement("wj-label");
456
- label.innerText = option.textContent.trim();
457
- chip.appendChild(label);
458
- return chip;
459
- }
460
- }
461
- customElements.get("wj-select") || window.customElements.define("wj-select", Select);
462
- const styles$3 = '/*\n[ WJ Tab ]\n*/\n:host {\n --wj-font-size: 10px;\n --wj-tab-text-transfrom: uppercase;\n --wj-tab-font-weight: 500;\n --wj-tab-letter-spacing: 0.06em;\n --wj-tab-padding-inline: 1rem;\n --wj-tab-padding-top: .75rem;\n --wj-tab-padding-bottom: .75rem;\n --wj-tab-color-active: var(--wj-color-primary-11);\n --wj-tab-color-hover: var(--wj-color-primary-1);\n display: block;\n position: relative;\n}\n:host a {\n display: block;\n align-items: center;\n white-space: nowrap;\n font-family: var(--wj-font-family-secondary);\n font-size: var(--wj-font-size);\n letter-spacing: var(--wj-tab-letter-spacing);\n text-transform: var(--wj-tab-text-transfrom);\n font-weight: var(--wj-tab-font-weight);\n text-decoration: none;\n padding-inline: var(--wj-tab-padding-inline);\n padding-top: var(--wj-tab-padding-top);\n padding-bottom: var(--wj-tab-padding-bottom);\n color: var(--wj-color);\n}\n:host a > svg {\n inline-size: 1.5em;\n pointer-events: none;\n}\n:host a:hover {\n background: var(--wj-tab-color-hover);\n}\n:host a:hover:after {\n display: block;\n}\n:host a:after {\n content: " ";\n display: none;\n block-size: 0.15rem;\n writing-mode: var(--wj-tab-writing-mode);\n background: var(--wj-tab-color-active);\n position: absolute;\n bottom: var(--wj-tab-bottom);\n left: var(--wj-tab-start);\n right: var(--wj-tab-end);\n top: var(--wj-tab-top);\n}\n\n:host([disabled]) a {\n opacity: 0.5;\n cursor: not-allowed;\n background: inherit;\n}\n:host([disabled]) a:after {\n display: none;\n}\n\n:host([active]) a:after {\n display: block;\n}';
463
- class Tab extends WJElement {
464
- constructor() {
465
- super();
466
- __publicField(this, "className", "Tab");
467
- this.last = false;
468
- }
469
- static get cssStyleSheet() {
470
- return styles$3;
471
- }
472
- setupAttributes() {
473
- this.isShadowRoot = "open";
474
- }
475
- draw(context, store2, params) {
476
- let fragment = document.createDocumentFragment();
477
- let a = document.createElement("a");
478
- a.setAttribute("href", "#" + this.panel);
479
- a.innerHTML = this.innerHTML;
480
- fragment.appendChild(a);
481
- return fragment;
482
- }
483
- afterDraw() {
484
- event.addListener(this, "click", "wj:tab-change");
485
- }
486
- }
487
- customElements.get("wj-tab") || window.customElements.define("wj-tab", Tab);
488
- const styles$2 = "/*\n[ WJ Tab Group ]\n*/\n:host {\n --wj-tab-top: 0;\n --wj-tab-start: 0;\n --wj-tab-end: 0;\n --wj-tab-bottom: 0;\n}\n\n.native-tab-group {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n}\n\n.native-tab-group > header {\n display: flex;\n flex-direction: column;\n}\n.native-tab-group > header > nav {\n display: flex;\n}\n\n.native-tab-group > section {\n width: 100%;\n}\n.native-tab-group > section > article {\n scroll-snap-align: start;\n overflow-y: auto;\n overscroll-behavior-y: contain;\n}\n\n:host([variant=top]) {\n --wj-tab-top: auto !important;\n --wj-tab-writing-mode: horizontal-tb;\n}\n:host([variant=top]) .native-tab-group {\n flex-direction: column;\n}\n:host([variant=top]) nav {\n border-bottom: 1px solid var(--wj-border-color);\n}\n\n:host([variant=start]) {\n --wj-tab-start: auto !important;\n --wj-tab-writing-mode: vertical-rl;\n}\n:host([variant=start]) .native-tab-group {\n flex-direction: row;\n}\n:host([variant=start]) nav {\n flex-direction: column;\n border-right: 1px solid var(--wj-border-color);\n}\n\n:host([variant=end]) {\n --wj-tab-writing-mode: vertical-rl;\n}\n:host([variant=end]) .native-tab-group {\n flex-direction: row-reverse;\n}\n:host([variant=end]) nav {\n flex-direction: column;\n border-left: 1px solid var(--wj-border-color);\n}\n\n:host([variant=bottom]) {\n --wj-tab-bottom: auto !important;\n --wj-tab-writing-mode: horizontal-tb;\n}\n:host([variant=bottom]) .native-tab-group {\n flex-direction: column-reverse;\n}\n:host([variant=bottom]) nav {\n border-top: 1px solid var(--wj-border-color);\n}";
489
- class TabGroup extends WJElement {
490
- constructor() {
491
- super();
492
- __publicField(this, "className", "TabGroup");
493
- }
494
- static get cssStyleSheet() {
495
- return styles$2;
496
- }
497
- setupAttributes() {
498
- this.isShadowRoot = "open";
499
- }
500
- draw(context, store2, params) {
501
- let fragment = document.createDocumentFragment();
502
- let native = document.createElement("div");
503
- native.classList.add("native-tab-group");
504
- let header = document.createElement("header");
505
- header.classList.add("scroll-snap-x");
506
- let nav = document.createElement("nav");
507
- let section = document.createElement("section");
508
- let slot = document.createElement("slot");
509
- let slotNav = document.createElement("slot");
510
- slotNav.setAttribute("name", "nav");
511
- header.appendChild(nav);
512
- nav.appendChild(slotNav);
513
- section.appendChild(slot);
514
- native.appendChild(header);
515
- native.appendChild(section);
516
- fragment.appendChild(native);
517
- return fragment;
518
- }
519
- afterDraw() {
520
- let activeTab = this.getActiveTab();
521
- let activeTabName = activeTab ? activeTab[0].name : this.getTabAll()[0].panel;
522
- this.setActiveTab(activeTabName);
523
- this.addEventListener("wj:tab-change", (e) => {
524
- if (e.detail.context.hasAttribute("disabled"))
525
- return false;
526
- this.setActiveTab(e.detail.context.panel);
527
- });
528
- }
529
- removeActiveTab() {
530
- this.getPanelAll().forEach((el) => {
531
- el.removeAttribute("active");
532
- });
533
- this.getTabAll().forEach((el) => {
534
- el.removeAttribute("active");
535
- });
536
- }
537
- setActiveTab(tab) {
538
- this.removeActiveTab();
539
- this.querySelector(`[panel="${tab}"]`).setAttribute("active", "");
540
- this.querySelector(`[name="${tab}"]`).setAttribute("active", "");
541
- }
542
- getActiveTab() {
543
- let activeTabs = Array.from(this.context.querySelectorAll("[active]"));
544
- return activeTabs.length > 0 ? activeTabs[0] : null;
545
- }
546
- getTabAll() {
547
- return this.context.querySelector('[name="nav"]').assignedElements();
548
- }
549
- getPanelAll() {
550
- return Array.from(this.querySelectorAll("wj-tab-panel"));
551
- }
552
- }
553
- customElements.get("wj-tab-group") || window.customElements.define("wj-tab-group", TabGroup);
554
- const styles$1 = "/*\n[ WJ Tab Panel ]\n*/\n:host {\n display: none;\n flex-wrap: wrap;\n align-items: center;\n padding: 1rem;\n}\n\n:host([active]) {\n display: block;\n}";
555
- class TabPanel extends WJElement {
556
- constructor() {
557
- super();
558
- __publicField(this, "className", "TabPanel");
559
- }
560
- static get cssStyleSheet() {
561
- return styles$1;
562
- }
563
- setupAttributes() {
564
- this.isShadowRoot = "open";
565
- }
566
- draw(context, store2, params) {
567
- let fragment = document.createDocumentFragment();
568
- let element = document.createElement("slot");
569
- fragment.appendChild(element);
570
- return fragment;
571
- }
572
- }
573
- customElements.get("wj-tab-panel") || window.customElements.define("wj-tab-panel", TabPanel);
574
102
  export {
575
103
  Animation,
576
104
  Aside,
@@ -597,7 +125,6 @@ export {
597
125
  Dialog,
598
126
  Divider,
599
127
  Dropdown,
600
- ExampleElement,
601
128
  FileUpload,
602
129
  FileUploadItem,
603
130
  Footer,
@@ -621,6 +148,7 @@ export {
621
148
  MenuButton,
622
149
  MenuItem,
623
150
  MenuLabel,
151
+ Nav,
624
152
  NavMenu,
625
153
  Option,
626
154
  Options,
@@ -648,7 +176,7 @@ export {
648
176
  ToolbarAction,
649
177
  Tooltip,
650
178
  VisuallyHidden,
651
- WJElement,
179
+ default2 as WJElement,
652
180
  b as bindRouterLinks,
653
181
  defaultStoreActions,
654
182
  fetchAndParseCSS,
@@ -0,0 +1,37 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import WJElement from "./wj-element.js";
8
+ const styles = "/*!\n* direction.scss\n*/\n/* Skeleton Variables */\n/*\n[ Button Group ]\n*/\n:host {\n display: inline-block;\n}\n:host .native-button-group {\n display: flex;\n flex-wrap: nowrap;\n line-height: 1;\n}\n:host slot {\n display: contents;\n}\n::slotted(wj-button) {\n margin: 0;\n}";
9
+ class NavMenu extends WJElement {
10
+ constructor() {
11
+ super();
12
+ __publicField(this, "className", "NavMenu");
13
+ }
14
+ static get cssStyleSheet() {
15
+ return styles;
16
+ }
17
+ static get observedAttributes() {
18
+ return [];
19
+ }
20
+ setupAttributes() {
21
+ this.isShadowRoot = "open";
22
+ }
23
+ draw(context, store, params) {
24
+ let fragment = document.createDocumentFragment();
25
+ let element = document.createElement("div");
26
+ element.classList.add("native-button-group");
27
+ element.setAttribute("part", "native");
28
+ this.slotElement = document.createElement("slot");
29
+ element.appendChild(this.slotElement);
30
+ fragment.appendChild(element);
31
+ return fragment;
32
+ }
33
+ }
34
+ customElements.get("wj-button-group") || window.customElements.define("wj-button-group", NavMenu);
35
+ export {
36
+ NavMenu
37
+ };
package/dist/wj-nav.js ADDED
@@ -0,0 +1,61 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import WJElement from "./wj-element.js";
8
+ const styles = '/*!\n* direction.scss\n*/\n/* Skeleton Variables */\n/*------------------------------------------------------------------\n[11. Tabs & Accordians]\n*/\n/* Tabs\n------------------------------------\n*/\n.nav-tabs {\n display: flex;\n position: relative;\n}\n.nav-tabs > .nav-item {\n display: flex;\n justify-content: center;\n align-items: center;\n padding-left: 0;\n padding-right: 0;\n}\n.nav-tabs > .nav-item > a.active:hover, .nav-tabs > .nav-item > a.active:focus {\n border-color: #e0e0e0;\n color: #4b4b4b;\n background-color: #e0e0e0;\n}\n.nav-tabs > .nav-item > a {\n display: block;\n border-radius: 0;\n padding: 13px 17px;\n margin-right: 0;\n font-family: "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;\n font-weight: 500;\n letter-spacing: 0.06em;\n color: #757575;\n font-size: 10.5px;\n min-width: 70px;\n text-transform: uppercase;\n border-color: transparent;\n position: relative;\n line-height: 1.7em;\n cursor: pointer;\n}\n.nav-tabs > .nav-item > a:hover, .nav-tabs > .nav-item > a:focus {\n background: transparent;\n border-color: transparent;\n color: #4b4b4b;\n}\n.nav-tabs > .nav-item > a .tab-icon {\n margin-right: 6px;\n}\n.nav-tabs > .nav-item > a.active {\n color: #212121;\n}\n.nav-tabs ~ .tab-content {\n padding: 15px;\n}\n.nav-tabs ~ .tab-content > .tab-pane.slide-left, .nav-tabs ~ .tab-content > .tab-pane.slide-right {\n -webkit-transition: all 0.3s ease;\n transition: all 0.3s ease;\n}\n.nav-tabs ~ .tab-content > .tab-pane.slide-left.sliding, .nav-tabs ~ .tab-content > .tab-pane.slide-right.sliding {\n opacity: 0 !important;\n}\n.nav-tabs ~ .tab-content > .tab-pane.slide-left.active, .nav-tabs ~ .tab-content > .tab-pane.slide-right.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n -ms-transform: translate(0, 0);\n opacity: 1;\n}\n.nav-tabs ~ .tab-content > .tab-pane.slide-left.sliding {\n -webkit-transform: translate3d(10%, 0, 0);\n transform: translate3d(10%, 0, 0);\n -ms-transform: translate(10%, 0);\n}\n.nav-tabs ~ .tab-content > .tab-pane.slide-right.sliding {\n -webkit-transform: translate3d(-10%, 0, 0);\n transform: translate3d(-10%, 0, 0);\n -ms-transform: translate(-10%, 0);\n}\n.nav-tabs.nav-tabs-left, .nav-tabs.nav-tabs-right {\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -webkit-flex-direction: column;\n -ms-flex-direction: column;\n flex-direction: column;\n -webkit-flex-shrink: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n}\n.nav-tabs.nav-tabs-left:after, .nav-tabs.nav-tabs-right:after {\n border-bottom: 0px;\n}\n.nav-tabs.nav-tabs-left > .nav-item, .nav-tabs.nav-tabs-right > .nav-item {\n float: none;\n}\n.nav-tabs.nav-tabs-left {\n float: left;\n padding-right: 0;\n}\n.nav-tabs.nav-tabs-left ~ .tab-content {\n border-left: 1px solid rgba(0, 0, 0, 0.1);\n -ms-flex: 1;\n -ms-flex-negative: 0;\n}\n.nav-tabs.nav-tabs-right {\n float: right;\n padding-right: 0;\n}\n.nav-tabs.nav-tabs-right ~ .tab-content {\n border-right: 1px solid rgba(0, 0, 0, 0.1);\n -ms-flex: 1;\n -ms-flex-negative: 0;\n}\n/* Tabs : Simple\n------------------------------------\n*/\n.nav-tabs-simple > .nav-item > a:after, .nav-tabs-simple > .nav-item > a.nav-tabs-info:after, .nav-tabs-simple > .nav-item > a.nav-tabs-warning:after, .nav-tabs-simple > .nav-item > a.nav-tabs-danger:after, .nav-tabs-simple > .nav-item > a.nav-tabs-complete:after, .nav-tabs-simple > .nav-item > a.nav-tabs-success:after, .nav-tabs-simple > .nav-item > a.nav-tabs-primary:after {\n position: absolute;\n -webkit-transition: all 0.1s linear 0s;\n transition: all 0.1s linear 0s;\n -webkit-backface-visibility: hidden;\n width: 100%;\n display: block;\n background-color: #D83C31;\n height: 0px;\n content: "";\n left: 0;\n z-index: 125;\n top: 100%;\n}\n.nav-tabs-simple {\n border-bottom: 0;\n}\n.nav-tabs-simple:after {\n content: "";\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n width: 100%;\n position: absolute;\n bottom: -2px;\n left: 0;\n}\n.nav-tabs-simple.no-border:after {\n border-bottom: 0 none;\n}\n.nav-tabs-simple > .nav-item {\n margin-bottom: 0;\n}\n.nav-tabs-simple > .nav-item > a {\n min-width: auto;\n}\n.nav-tabs-simple > .nav-item > a.nav-tabs-primary:after {\n background-color: #7252D3 !important;\n}\n.nav-tabs-simple > .nav-item > a.nav-tabs-success:after {\n background-color: #19AD79;\n}\n.nav-tabs-simple > .nav-item > a.nav-tabs-complete:after {\n background-color: #0072EC;\n}\n.nav-tabs-simple > .nav-item > a.nav-tabs-danger:after {\n background-color: #D83C31;\n}\n.nav-tabs-simple > .nav-item > a.nav-tabs-warning:after {\n background-color: #FFd945;\n}\n.nav-tabs-simple > .nav-item > a.nav-tabs-info:after {\n background-color: #3B4752;\n}\n.nav-tabs-simple > .nav-item > a.active:hover, .nav-tabs-simple > .nav-item > a.active:focus {\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs-simple > .nav-item > a.active:after, .nav-tabs-simple > .nav-item > a:hover:after {\n height: 3px;\n}\n.nav-tabs-simple.nav-tabs-left:after, .nav-tabs-simple.nav-tabs-right:after {\n border-bottom: 0px;\n}\n.nav-tabs-simple.nav-tabs-left > .nav-item > a:after, .nav-tabs-simple.nav-tabs-right > .nav-item > a:after {\n width: 0px;\n height: 100%;\n top: 0;\n bottom: 0;\n position: absolute;\n}\n.nav-tabs-simple.nav-tabs-left > .nav-item > a.active:after, .nav-tabs-simple.nav-tabs-left > .nav-item > a:hover:after, .nav-tabs-simple.nav-tabs-right > .nav-item > a.active:after, .nav-tabs-simple.nav-tabs-right > .nav-item > a:hover:after {\n width: 3px;\n}\n.nav-tabs-simple.nav-tabs-left > .nav-item > a:after {\n right: 0;\n left: auto;\n}\n.nav-tabs-simple.nav-tabs-right > .nav-item > a:after {\n left: 0;\n}\n/* Tabs : Line Triangles\n------------------------------------\n*/\n.nav-tabs-linetriangle {\n border-bottom: 0;\n}\n.nav-tabs-linetriangle:after {\n content: "";\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n width: 100%;\n position: absolute;\n bottom: -1px;\n z-index: 100;\n left: 0;\n}\n.nav-tabs-linetriangle > .nav-item > a.active {\n background: transparent;\n box-shadow: none;\n border-color: transparent;\n}\n.nav-tabs-linetriangle > .nav-item > a.active:hover, .nav-tabs-linetriangle > .nav-item > a.active:focus, .nav-tabs-linetriangle > .nav-item > a.active:active {\n border-color: transparent;\n background-color: transparent;\n}\n.nav-tabs-linetriangle > .nav-item > a.active:after, .nav-tabs-linetriangle > .nav-item > a.active:before {\n content: "";\n left: 50%;\n pointer-events: none;\n position: absolute;\n z-index: 120;\n top: 98%;\n}\n.nav-tabs-linetriangle > .nav-item > a.active:after {\n width: 11px;\n height: 11px;\n display: block;\n background: white;\n border: solid rgba(0, 0, 0, 0.1);\n transform: rotate(-45deg);\n margin: -5px 0px 0px -5px;\n border-width: 0px 0px 1px 1px;\n}\n.nav-tabs-linetriangle > .nav-item > a span {\n font-size: 1em;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.nav-tabs-linetriangle > .nav-item > a:hover, .nav-tabs-linetriangle > .nav-item > a:focus {\n overflow: visible;\n -webkit-transition: color 0.2s ease 0s;\n transition: color 0.2s ease 0s;\n}\n.nav-tabs-linetriangle ~ .tab-content {\n background: #fff;\n}\n.nav-tabs-linetriangle.nav-tabs-left.nav-tabs:after {\n border-bottom: none;\n}\n.nav-tabs-linetriangle.nav-tabs-left.nav-tabs > .nav-item > a.active:before {\n border-top: 11px solid transparent;\n border-bottom: 11px solid transparent;\n border-left: 11px solid rgba(0, 0, 0, 0.2);\n}\n.nav-tabs-linetriangle.nav-tabs-left.nav-tabs > .nav-item > a.active:after {\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n border-left: 10px solid #f4f4f4;\n margin-top: 1px;\n margin-right: 2px;\n}\n.nav-tabs-linetriangle.nav-tabs-left.nav-tabs > .nav-item > a.active:after, .nav-tabs-linetriangle.nav-tabs-left.nav-tabs > .nav-item > a.active:before {\n top: auto;\n right: -22px;\n left: auto;\n}\n.nav-tabs-linetriangle.nav-tabs-right.nav-tabs:after {\n border-bottom: none;\n}\n.nav-tabs-linetriangle.nav-tabs-right.nav-tabs > .nav-item > a.active:before {\n border-top: 11px solid transparent;\n border-bottom: 11px solid transparent;\n border-right: 11px solid rgba(0, 0, 0, 0.2);\n}\n.nav-tabs-linetriangle.nav-tabs-right.nav-tabs > .nav-item > a.active:after {\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n border-right: 10px solid #f4f4f4;\n margin-top: 1px;\n margin-left: -9px;\n}\n.nav-tabs-linetriangle.nav-tabs-right.nav-tabs > .nav-item > a.active:after, .nav-tabs-linetriangle.nav-tabs-right.nav-tabs > .nav-item > a.active:before {\n top: auto;\n left: -11px;\n right: auto;\n}\n@media screen and (max-width: 58em) {\n .nav-tabs-linetriangle {\n font-size: 0.6em;\n }\n}\n/* Tabs : Line Triangles Custom\n------------------------------------\n*/\n.nav-tabs-linetriangle-custom {\n border-bottom: 0;\n}\n.nav-tabs-linetriangle-custom:after {\n content: "";\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n width: 100%;\n position: absolute;\n bottom: -1px;\n z-index: 100;\n left: 0;\n}\n.nav-tabs-linetriangle-custom > .nav-item {\n transition: all 0.3s linear;\n}\n.nav-tabs-linetriangle-custom > .nav-item > a {\n padding: 1rem 0.5rem !important;\n font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;\n text-transform: none;\n font-size: 12px !important;\n}\n.nav-tabs-linetriangle-custom > .nav-item > a.active {\n background: transparent;\n box-shadow: none;\n border-color: transparent;\n}\n.nav-tabs-linetriangle-custom > .nav-item > a.active:hover, .nav-tabs-linetriangle-custom > .nav-item > a.active:focus, .nav-tabs-linetriangle-custom > .nav-item > a.active:active {\n border-color: transparent;\n background-color: transparent;\n}\n.nav-tabs-linetriangle-custom > .nav-item > a.active:after, .nav-tabs-linetriangle-custom > .nav-item > a.active:before {\n content: "";\n left: 50%;\n pointer-events: none;\n position: absolute;\n z-index: 120;\n top: 98%;\n}\n.nav-tabs-linetriangle-custom > .nav-item > a.active:after {\n width: 11px;\n height: 11px;\n display: block;\n background: white;\n border: solid rgba(0, 0, 0, 0.1);\n transform: rotate(-45deg);\n margin: -5px 0px 0px -5px;\n border-width: 0px 0px 1px 1px;\n}\n.nav-tabs-linetriangle-custom > .nav-item > a span {\n font-size: 1em;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.nav-tabs-linetriangle-custom > .nav-item > a:hover, .nav-tabs-linetriangle-custom > .nav-item > a:focus {\n overflow: visible;\n -webkit-transition: color 0.2s ease 0s;\n transition: color 0.2s ease 0s;\n}\n.nav-tabs-linetriangle-custom ~ .tab-content {\n background: #eae0fb;\n border: 0 none !important;\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs {\n padding: 2rem !important;\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs:after {\n border-bottom: none;\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs > .nav-item {\n margin-bottom: 1rem;\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs > .nav-item > a {\n background-color: transparent;\n color: #212121;\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs > .nav-item > a i {\n font-size: 20px;\n margin-bottom: 10px;\n color: #757575;\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs > .nav-item > a.rounded-border {\n border-radius: 8px;\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs > .nav-item > a:hover {\n background: rgba(33, 33, 33, 0.05);\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs > .nav-item > a.active {\n color: #4e37b6;\n background-color: #eae0fb;\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs > .nav-item > a.active i {\n color: #4e37b6;\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs > .nav-item > a.active:before {\n border-top: 11px solid transparent;\n border-bottom: 11px solid transparent;\n border-left: 10px solid transparent;\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs > .nav-item > a.active:after {\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n border-left: 10px solid #eae0fb;\n margin-top: 1px;\n margin-right: 2px;\n}\n.nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs > .nav-item > a.active:after, .nav-tabs-linetriangle-custom.nav-tabs-left.nav-tabs > .nav-item > a.active:before {\n right: 0;\n left: unset;\n top: 50%;\n transform: translate(100%, -50%);\n margin-top: 0;\n margin-right: 0;\n}\n@media screen and (max-width: 58em) {\n .nav-tabs-linetriangle {\n font-size: 0.6em;\n }\n}\n/* Tabs : Fill-up\n------------------------------------\n*/\n.nav-tabs-fillup {\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000;\n -moz-perspective: 1000;\n perspective: 1000;\n}\n.nav-tabs-fillup > .nav-item {\n overflow: hidden;\n}\n.nav-tabs-fillup > .nav-item > a {\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-transition: color 0.3s ease 0s;\n transition: color 0.3s ease 0s;\n background: transparent;\n}\n.nav-tabs-fillup > .nav-item > a:after {\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n background: none repeat scroll 0 0 #19AD79;\n border: 1px solid #19AD79;\n content: "";\n height: calc(100% + 1px);\n left: 0;\n position: absolute;\n top: 0;\n -webkit-transform: translate3d(0, 100%, 0px);\n transform: translate3d(0, 100%, 0px);\n -webkit-transition: -webkit-transform 0.3s ease 0s;\n transition: transform 0.3s ease 0s;\n width: 100%;\n z-index: -1;\n}\n.nav-tabs-fillup > .nav-item > a:after.nav-tabs-primary {\n background: none repeat scroll 0 0 #7252D3;\n border: 1px solid #7252D3;\n}\n.nav-tabs-fillup > .nav-item > a:after.nav-tabs-success {\n background: none repeat scroll 0 0 #19AD79;\n border: 1px solid #19AD79;\n}\n.nav-tabs-fillup > .nav-item > a:after.nav-tabs-complete {\n background: none repeat scroll 0 0 #0072EC;\n border: 1px solid #0072EC;\n}\n.nav-tabs-fillup > .nav-item > a:after.nav-tabs-warning {\n background: none repeat scroll 0 0 #FFd945;\n border: 1px solid #FFd945;\n}\n.nav-tabs-fillup > .nav-item > a:after.nav-tabs-danger {\n background: none repeat scroll 0 0 #D83C31;\n border: 1px solid #D83C31;\n}\n.nav-tabs-fillup > .nav-item > a:after.nav-tabs-info {\n background: none repeat scroll 0 0 #3B4752;\n border: 1px solid #3B4752;\n}\n.nav-tabs-fillup > .nav-item > a span {\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-transform: translate3d(0px, 5px, 0px);\n transform: translate3d(0px, 5px, 0px);\n -webkit-transition: -webkit-transform 0.5s ease 0s;\n transition: transform 0.5s ease 0s;\n display: block;\n font-weight: 700;\n line-height: 1.5;\n}\n.nav-tabs-fillup > .nav-item > a.active {\n z-index: 100;\n color: #fff;\n}\n.nav-tabs-fillup > .nav-item > a.active:hover, .nav-tabs-fillup > .nav-item > a.active:focus {\n border-color: transparent;\n background: transparent;\n color: #fff;\n}\n.nav-tabs-fillup > .nav-item > a.active:after {\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n -ms-transform: translate(0px, 0px);\n}\n.nav-tabs-fillup > .nav-item > a.active span {\n -webkit-transform: translate3d(0px, -5px, 0px);\n transform: translate3d(0px, -5px, 0px);\n -ms-transform: translate(0px, -5px);\n}\n.nav-tabs-fillup .icon:before {\n -webkit-transform: translate3d(0px, 5px, 0px);\n transform: translate3d(0px, 5px, 0px);\n -ms-transform: translate(0px, 5px);\n -webkit-transition: transform 0.5s ease 0s;\n transition: transform 0.5s ease 0s;\n display: block;\n margin: 0;\n}\n.nav-tabs-fillup ~ .tab-content {\n background: #fff;\n}\n.nav-tabs-fillup.nav-tabs-left, .nav-tabs-fillup.nav-tabs-right {\n border-bottom: none;\n}\n.nav-tabs-fillup.nav-tabs-left:after, .nav-tabs-fillup.nav-tabs-right:after {\n border-bottom: none;\n}\n.nav-tabs-fillup.nav-tabs-left > .nav-item > a:after, .nav-tabs-fillup.nav-tabs-right > .nav-item > a:after {\n width: calc(100% + 1px);\n height: 100%;\n}\n.nav-tabs-fillup.nav-tabs-left > .nav-item.active a:after, .nav-tabs-fillup.nav-tabs-right > .nav-item.active a:after {\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n -ms-transform: translate(0px, 0px);\n}\n.nav-tabs-fillup.nav-tabs-left > .nav-item > a:after {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n -ms-transform: translate(100%, 0);\n}\n.nav-tabs-fillup.nav-tabs-left > .nav-item > a span {\n -webkit-transform: translate3d(5px, 0, 0px);\n transform: translate3d(5px, 0, 0px);\n -ms-transform: translate(5px, 0);\n}\n.nav-tabs-fillup.nav-tabs-left > .nav-item.active a span {\n -webkit-transform: translate3d(-5px, 0, 0px);\n transform: translate3d(-5px, 0, 0px);\n -ms-transform: translate(-5px, 0);\n}\n.nav-tabs-fillup.nav-tabs-left > .nav-item.active .icon:before {\n -webkit-transform: translate3d(-5px, 0, 0px);\n transform: translate3d(-5px, 0, 0px);\n -ms-transform: translate(-5px, 0);\n}\n.nav-tabs-fillup.nav-tabs-right > .nav-item > a:after {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n -ms-transform: translate(-100%, 0);\n left: -1px;\n}\n.nav-tabs-fillup.nav-tabs-right > .nav-item > a span {\n -webkit-transform: translate3d(-5px, 0, 0px);\n transform: translate3d(-5px, 0, 0px);\n -ms-transform: translate(-5px, 0);\n}\n.nav-tabs-fillup.nav-tabs-right > .nav-item.active a span {\n -webkit-transform: translate3d(5px, 0, 0px);\n transform: translate3d(5px, 0, 0px);\n -ms-transform: translate(5px, 0);\n}\n.nav-tabs-fillup.nav-tabs-right > .nav-item.active .icon:before {\n -webkit-transform: translate3d(5px, 0, 0px);\n transform: translate3d(5px, 0, 0px);\n -ms-transform: translate(5px, 0);\n}\n.nav-tabs-header {\n overflow: scroll;\n width: 100%;\n}\n.nav-tabs-header .nav-tabs {\n width: auto;\n white-space: nowrap;\n}\n.nav-tabs-header .nav-tabs > .nav-item {\n display: inline-block;\n float: inherit;\n}\n.nav-tabs-header.nav-tabs-linetriangle {\n height: 54px;\n overflow-y: hidden;\n}\n.nav-tabs-header.nav-tabs-linetriangle:after {\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n width: 100%;\n position: relative;\n bottom: 3px;\n z-index: 120;\n content: "";\n clear: both;\n}\n.nav-tabs-header.nav-tabs-linetriangle ~ .tab-content {\n position: relative;\n top: -12px;\n}\n.nav-tabs-header ~ .tab-content {\n overflow: hidden;\n padding: 15px;\n}\n.nav-tab-dropdown .cs-select {\n width: 100% !important;\n max-width: 100%;\n}\n.nav-tab-dropdown .cs-select .cs-placeholder {\n height: 48px;\n padding: 12px 34px 15px 15px;\n font-family: "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;\n font-weight: 500;\n letter-spacing: 0.06em;\n font-size: 10.5px;\n text-transform: uppercase;\n}\n.nav-tab-dropdown .cs-select .cs-backdrop {\n border: 1px solid transparent;\n border-bottom: 1px solid rgba(33, 33, 33, 0.14);\n}\n/* Panel Groups\n------------------------------------\n*/\n.card-group {\n margin-bottom: 18px;\n}\n.card-group.horizontal {\n display: block;\n}\n.card-group summary {\n font-family: "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;\n text-transform: uppercase;\n display: inline-block;\n letter-spacing: 0.06em;\n font-size: 10.5px;\n font-weight: 500;\n margin: 0;\n padding: 0;\n line-height: normal;\n overflow: hidden;\n text-overflow: ellipsis;\n -webkit-text-stroke: 0px;\n filter: alpha(opacity=40);\n -webkit-transition: opacity 0.3s ease;\n transition: opacity 0.3s ease;\n list-style-type: none;\n}\n.card-group summary::marker {\n display: none;\n list-style-type: none;\n}\n.card-group summary:after {\n font-family: "pages-icon";\n content: "\\e987";\n font-size: 17px;\n position: absolute;\n right: 17px;\n top: 36%;\n color: #4b4b4b;\n}\n.card-group summary:focus-visible {\n outline: 0;\n}\n.card-group .card-header {\n padding: 13px 18px 10px 22px;\n}\n.card-group .card-header.collapsed {\n background-color: #fff;\n}\n.card-group .card-header + .card-collapse .card-body {\n border: 0;\n}\n.card-group .card-header .card-title {\n width: 100%;\n}\n.card-group .card-header .card-title > a {\n color: #4b4b4b;\n font-size: inherit;\n padding: inherit;\n margin: inherit;\n display: block;\n opacity: 1;\n}\n.card-group .card-header .card-title > a:hover {\n color: #4b4b4b !important;\n}\n.card-group .card-header .card-title > a:hover:after {\n color: #4b4b4b !important;\n}\n.card-group .card-header .card-title > a:after {\n font-family: "pages-icon";\n content: "\\e987";\n font-size: 17px;\n position: absolute;\n right: 13px;\n top: 36%;\n color: #4b4b4b;\n}\n.card-group .card-header .card-title > a.collapsed {\n color: rgba(75, 75, 75, 0.7);\n opacity: 1;\n}\n.card-group .card-header .card-title > a.collapsed:after {\n content: "\\e986";\n color: rgba(75, 75, 75, 0.7);\n}\n.card-group .card {\n box-shadow: none;\n border: 1px solid rgba(33, 33, 33, 0.14);\n -webkit-box-flex: 1;\n -webkit-flex: 1 0 0;\n -ms-flex: 1 0 0;\n flex: 1 0 0;\n}\n.card-group .card + .card {\n margin-top: 2px;\n}\n.card-group .card .card-body {\n height: auto;\n}\n.card-group .card.card-default {\n box-shadow: none;\n border: 1px solid rgba(33, 33, 33, 0.1);\n}\n.card-group .card[open] .card-header:after {\n content: "\\e986";\n color: rgba(75, 75, 75, 0.7);\n}\n.card-group .card-file summary:after {\n transform: rotate(180deg);\n right: -3px;\n}\n.card-group .card-file[open] summary:after {\n transform: rotate(0deg);\n}\n.nav-pills > .nav-item:first-child {\n padding-left: 0;\n}\n.nav-pills > .nav-item > a {\n color: #4b4b4b;\n}\n.nav-pills > .nav-item.active > a, .nav-pills > .nav-item.active > a:hover, .nav-pills > .nav-item.active > a:focus {\n color: #4b4b4b;\n background-color: #e0e0e0;\n}\n@media (max-width: 767px) {\n .nav.nav-tabs.nav-stack-sm .nav-item {\n float: none;\n }\n .nav.nav-tabs.nav-stack-sm.nav-tabs-linetriangle > li.active > a:after, .nav.nav-tabs.nav-stack-sm.nav-tabs-linetriangle > li.active > a:before {\n display: none;\n }\n}\n.rotate-90 {\n transform: rotateZ(90deg);\n transition: transform 0.3s ease;\n}\n.collapsed > .rotate-90, .collapsible:not(.collapsed) > .rotate-90 {\n transform: rotateZ(0deg);\n transition: transform 0.3s ease;\n}';
9
+ class Nav extends WJElement {
10
+ constructor() {
11
+ super(template);
12
+ __publicField(this, "className", "Nav");
13
+ this.store.define("nav", [], null);
14
+ this.active = 0;
15
+ this.store.subscribe("nav", (key, state, oldState) => {
16
+ this.data = state;
17
+ this.refresh();
18
+ });
19
+ }
20
+ static get cssStyleSheet() {
21
+ return styles;
22
+ }
23
+ static get observedAttributes() {
24
+ return ["show-collapsed-indicator", "collapsed", "last"];
25
+ }
26
+ setupAttributes() {
27
+ this.isShadowRoot = "open";
28
+ }
29
+ beforeDraw(context, store, params) {
30
+ this.store.dispatch(this.defaultStoreActions.loadAction("itemActions")(this.actions));
31
+ this.store.makeEveryArrayEntryAsStoreState("item", this.data, "id");
32
+ }
33
+ draw(context, store, params) {
34
+ let fragment = document.createDocumentFragment();
35
+ let div = document.createElement("div");
36
+ div.classList.add("nav", "nav-tabs", "nav-tabs-simple", "mb-3");
37
+ this.store.getState().nav.forEach((item) => {
38
+ let element = new NavItem({
39
+ data: item,
40
+ actions: this.jsonActions,
41
+ nav: this
42
+ });
43
+ div.appendChild(element);
44
+ });
45
+ fragment.appendChild(div);
46
+ return fragment;
47
+ }
48
+ afterDraw(context, store, params) {
49
+ this.shadowRoot.addEventListener("wj-nav-change", (e) => {
50
+ let nav = store.getState().nav.map((i) => {
51
+ i.id == e.detail.data.id ? i.active = true : i.active = false;
52
+ return i;
53
+ });
54
+ store.dispatch(this.defaultStoreActions.loadAction("nav")(nav));
55
+ });
56
+ }
57
+ }
58
+ window.customElements.define("wj-nav", Nav);
59
+ export {
60
+ Nav
61
+ };
@@ -0,0 +1,58 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import WJElement, { event } from "./wj-element.js";
8
+ const styles = "/*\n[ WJ Option ]\n*/\n:host {\n --wj-option-padding-top: .5rem;\n --wj-option-padding-bottom: .5rem;\n --wj-option-highlighted: var(--wj-color-contrast-3);\n display: block;\n}\n:host wj-icon {\n visibility: hidden;\n margin-inline: 0.5rem;\n}\n\n:host([selected]) wj-icon {\n visibility: visible;\n}\n\n.native-option {\n display: flex;\n align-items: center;\n padding-top: var(--wj-option-padding-top);\n padding-bottom: var(--wj-option-padding-bottom);\n}\n\n.native-option:hover {\n background-color: var(--wj-option-highlighted);\n}\n\n::slotted([slot=start]) {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n margin-inline-end: 0.5rem;\n}\n\n::slotted([slot=end]) {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n margin-inline: auto 0.5rem;\n}";
9
+ class Option extends WJElement {
10
+ constructor() {
11
+ super();
12
+ __publicField(this, "className", "Option");
13
+ }
14
+ set selected(value) {
15
+ return value ? this.setAttribute("selected", "") : this.removeAttribute("selected");
16
+ }
17
+ set value(value) {
18
+ this.setAttribute("value", value);
19
+ }
20
+ set text(value) {
21
+ this.innerText = value;
22
+ }
23
+ static get cssStyleSheet() {
24
+ return styles;
25
+ }
26
+ static get observedAttributes() {
27
+ return [];
28
+ }
29
+ setupAttributes() {
30
+ this.isShadowRoot = "open";
31
+ }
32
+ draw(context, store, params) {
33
+ let fragment = document.createDocumentFragment();
34
+ let element = document.createElement("div");
35
+ element.classList.add("native-option");
36
+ element.setAttribute("part", "native");
37
+ let icon = document.createElement("wj-icon");
38
+ icon.setAttribute("name", "check");
39
+ let start = document.createElement("slot");
40
+ start.setAttribute("name", "start");
41
+ let slot = document.createElement("slot");
42
+ let end = document.createElement("slot");
43
+ end.setAttribute("name", "end");
44
+ element.appendChild(icon);
45
+ element.appendChild(start);
46
+ element.appendChild(slot);
47
+ element.appendChild(end);
48
+ fragment.appendChild(element);
49
+ return fragment;
50
+ }
51
+ afterDraw() {
52
+ event.addListener(this, "click", "wj:option-change");
53
+ }
54
+ }
55
+ customElements.get("wj-option") || window.customElements.define("wj-option", Option);
56
+ export {
57
+ Option
58
+ };
@@ -0,0 +1,45 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import WJElement, { event } from "./wj-element.js";
8
+ class Options extends WJElement {
9
+ constructor() {
10
+ super();
11
+ __publicField(this, "className", "Options");
12
+ }
13
+ static get cssStyleSheet() {
14
+ return styles;
15
+ }
16
+ static get observedAttributes() {
17
+ return [];
18
+ }
19
+ setupAttributes() {
20
+ this.isShadowRoot = "open";
21
+ }
22
+ async beforeDraw() {
23
+ this.response = await this.getPages();
24
+ let fragment = document.createDocumentFragment();
25
+ this.response.forEach((item, index) => {
26
+ let option = document.createElement("wj-option");
27
+ option.setAttribute("value", item[this.itemValue] || item.value);
28
+ option.innerText = item[this.itemText] || item.text;
29
+ fragment.appendChild(option);
30
+ });
31
+ this.parentElement.appendChild(fragment);
32
+ event.dispatchCustomEvent(this, "wj:options-load", {});
33
+ }
34
+ async getPages(page) {
35
+ const response = await fetch(this.url);
36
+ if (!response.ok) {
37
+ throw new Error(`An error occurred: ${response.status}`);
38
+ }
39
+ return await response.json();
40
+ }
41
+ }
42
+ customElements.get("wj-options") || window.customElements.define("wj-options", Options);
43
+ export {
44
+ Options
45
+ };
@@ -1,4 +1,3 @@
1
- import "./wj-element.js";
2
1
  class AnimationHook {
3
2
  constructor(options = {}) {
4
3
  this.options = options;
@@ -1500,7 +1500,10 @@ class Routerx extends WJElement {
1500
1500
  const attributeName = attributes[i].name;
1501
1501
  const attributeValue = attributes[i].value;
1502
1502
  if (attributeName === "component" && attributeValue.indexOf(".js") > -1) {
1503
- obj.component = () => import(new URL(attributeValue, this.origin || "").href);
1503
+ obj.component = () => import(
1504
+ /* @vite-ignore */
1505
+ attributeValue
1506
+ );
1504
1507
  } else {
1505
1508
  if (attributeName !== "shadow") {
1506
1509
  obj[attributeName] = attributeValue;
@@ -0,0 +1,229 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import WJElement from "./wj-element.js";
8
+ const styles = "/*\n[ WJ Select ]\n*/\n:host {\n --wj-select-border-width: 1px;\n --wj-select-border-style: solid;\n --wj-select-border-color: var(--wj-border-color);\n --wj-select-options-border-width: 1px;\n --wj-select-options-border-style: var(--wj-border-style);\n --wj-select-options-border-color: var(--wj-border-color);\n --wj-select-background: var(--wj-background);\n --wj-select-line-height: 20px;\n --wj-select-color: var(--wj-color);\n --wj-select-border-radius: var(--wj-border-radius-medium);\n width: 100%;\n display: block;\n}\n:host [slot=arrow] {\n transform: rotate(0deg);\n transition: all 0.2s ease-in;\n}\n\n.native-select.default .wrapper {\n display: block;\n border-width: var(--wj-select-border-width);\n border-style: var(--wj-select-border-style);\n border-color: var(--wj-select-border-color);\n border-radius: var(--wj-select-border-radius);\n padding-inline: 0.5rem;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.native-select.default .input-wrapper {\n padding: 0;\n min-height: 25px;\n margin-top: -4px;\n}\n.native-select.default.focused wj-label {\n opacity: 0.67;\n font-size: 12px;\n letter-spacing: normal;\n}\n.native-select.default wj-label {\n margin: 0;\n display: block;\n opacity: 1;\n cursor: text;\n transition: opacity 0.2s ease 0s;\n line-height: var(--wj-select-line-height);\n}\n.native-select.default wj-label.fade {\n opacity: 0.5;\n font-size: 12px;\n letter-spacing: normal;\n}\n.native-select.standard .input-wrapper {\n border-width: var(--wj-select-border-width);\n border-style: var(--wj-select-border-style);\n border-color: var(--wj-select-border-color);\n border-radius: var(--wj-select-border-radius);\n width: 100%;\n}\n\n.wrapper {\n display: flex;\n width: 100%;\n}\n\n.input-wrapper {\n display: grid;\n grid-template-columns: 1fr auto auto;\n align-items: center;\n background-color: var(--wj-select-background);\n min-height: 28px;\n color: var(--wj-select-color);\n line-height: var(--wj-select-line-height);\n appearance: none;\n padding: 2px 0.5rem;\n font-size: 14px;\n font-weight: normal;\n vertical-align: middle;\n}\n\ninput {\n border: medium;\n height: 25px;\n min-height: 25px;\n padding: 0;\n background: none;\n box-shadow: none;\n width: 100%;\n outline: 0;\n}\n\n::placeholder {\n opacity: 1;\n}\n\n:host [active] .input-wrapper {\n border-radius: var(--wj-select-border-radius) var(--wj-select-border-radius) 0 0;\n}\n:host [active] [slot=arrow] {\n transform: rotate(180deg);\n transition: all 0.2s ease-in;\n}\n\n.option-wrapper {\n border-width: var(--wj-select-options-border-width);\n border-style: var(--wj-select-options-border-style);\n border-color: var(--wj-select-options-border-color);\n border-radius: 0 0 var(--wj-select-border-radius) var(--wj-select-border-radius);\n margin-top: -1px;\n background: var(--wj-select-background);\n overflow: auto;\n}\n\n:host([multiple]) input {\n position: absolute;\n z-index: -1;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n opacity: 0;\n}\n\n:host([multiple]) .chips {\n display: flex;\n flex: 1;\n align-items: center;\n flex-wrap: wrap;\n}\n\n:host([disabled]) .input-wrapper {\n opacity: 0.5;\n pointer-events: none;\n cursor: not-allowed;\n}\n\n.counter {\n padding-inline: 0.5rem;\n}\n\nwj-chip {\n --wj-chip-margin: 0 .25rem 0 0;\n}\n\nwj-button {\n --wj-padding-top: .25rem;\n --wj-padding-start: .25rem;\n --wj-padding-end: .25rem;\n --wj-padding-bottom: .25rem;\n --wj-button-margin-inline: 0 .25rem;\n}";
9
+ class Select extends WJElement {
10
+ constructor() {
11
+ super();
12
+ __publicField(this, "className", "Select");
13
+ __publicField(this, "optionChange", (e) => {
14
+ let allOptions = this.getAllOptions();
15
+ if (!this.hasAttribute("multiple")) {
16
+ allOptions.forEach((option) => {
17
+ option.selected = false;
18
+ option.removeAttribute("selected");
19
+ });
20
+ this.popup.removeAttribute("active");
21
+ }
22
+ e.target.selected = !e.target.hasAttribute("selected");
23
+ this.selections(e.target);
24
+ });
25
+ __publicField(this, "removeChip", (e) => {
26
+ let option = e.target.option;
27
+ option.selected = false;
28
+ option.removeAttribute("selected");
29
+ e.target.parentNode.removeChild(e.target);
30
+ this.selections(null, 0);
31
+ });
32
+ this._selected = [];
33
+ this.counterEl = null;
34
+ }
35
+ set selected(value) {
36
+ this._selected = value;
37
+ }
38
+ get selected() {
39
+ return this.getSelected();
40
+ }
41
+ set trigger(value) {
42
+ this.setAttribute("trigger", value);
43
+ }
44
+ get trigger() {
45
+ return this.getAttribute("trigger") || "click";
46
+ }
47
+ static get cssStyleSheet() {
48
+ return styles;
49
+ }
50
+ static get observedAttributes() {
51
+ return ["active", "value"];
52
+ }
53
+ setupAttributes() {
54
+ this.isShadowRoot = "open";
55
+ }
56
+ draw(context, store, params) {
57
+ let fragment = document.createDocumentFragment();
58
+ this.classList.add("wj-placement", "wj-" + this.placement || "wj-start");
59
+ let native = document.createElement("div");
60
+ native.setAttribute("part", "native");
61
+ native.classList.add("native-select", this.variant || "default");
62
+ let wrapper = document.createElement("div");
63
+ wrapper.classList.add("wrapper");
64
+ wrapper.setAttribute("slot", "anchor");
65
+ let label = document.createElement("wj-label");
66
+ label.innerText = this.label || "";
67
+ let inputWrapper = document.createElement("div");
68
+ inputWrapper.classList.add("input-wrapper");
69
+ let input = document.createElement("input");
70
+ input.setAttribute("type", "text");
71
+ input.setAttribute("part", "input");
72
+ input.setAttribute("autocomplete", "off");
73
+ input.setAttribute("readonly", "");
74
+ input.setAttribute("placeholder", this.placeholder || "");
75
+ let arrow = document.createElement("wj-icon");
76
+ arrow.setAttribute("name", "chevron-down");
77
+ arrow.setAttribute("slot", "arrow");
78
+ let chips = document.createElement("div");
79
+ chips.classList.add("chips");
80
+ chips.innerText = this.placeholder || "";
81
+ let optionsWrapper = document.createElement("div");
82
+ optionsWrapper.classList.add("option-wrapper");
83
+ optionsWrapper.style.setProperty("height", this.maxHeight || "auto");
84
+ let slot = document.createElement("slot");
85
+ let clear = document.createElement("wj-button");
86
+ clear.setAttribute("fill", "link");
87
+ clear.setAttribute("part", "clear");
88
+ let clearIcon = document.createElement("wj-icon");
89
+ clearIcon.setAttribute("name", "x");
90
+ clear.appendChild(clearIcon);
91
+ let popup = document.createElement("wj-popup");
92
+ popup.setAttribute("placement", "bottom-start");
93
+ popup.setAttribute("manual", "");
94
+ popup.setAttribute("size", "");
95
+ if (this.hasAttribute("disabled"))
96
+ popup.setAttribute("disabled", "");
97
+ if (this.variant === "standard") {
98
+ if (this.hasAttribute("label"))
99
+ native.appendChild(label);
100
+ } else {
101
+ wrapper.appendChild(label);
102
+ }
103
+ inputWrapper.appendChild(input);
104
+ if (this.hasAttribute("multiple"))
105
+ inputWrapper.appendChild(chips);
106
+ if (this.hasAttribute("clearable"))
107
+ inputWrapper.appendChild(clear);
108
+ inputWrapper.appendChild(arrow);
109
+ optionsWrapper.appendChild(slot);
110
+ wrapper.appendChild(inputWrapper);
111
+ popup.appendChild(wrapper);
112
+ popup.appendChild(optionsWrapper);
113
+ if (this.trigger === "click")
114
+ popup.setAttribute("manual", "");
115
+ native.appendChild(popup);
116
+ this.native = native;
117
+ this.popup = popup;
118
+ this.labelElement = label;
119
+ this.input = input;
120
+ this.optionsWrapper = optionsWrapper;
121
+ this.chips = chips;
122
+ this.clear = clear;
123
+ fragment.appendChild(native);
124
+ return fragment;
125
+ }
126
+ afterDraw(context, store, params) {
127
+ this.input.addEventListener("focus", (e) => {
128
+ this.labelElement.classList.add("fade");
129
+ this.native.classList.add("focused");
130
+ });
131
+ this.input.addEventListener("blur", (e) => {
132
+ this.native.classList.remove("focused");
133
+ if (!e.target.value)
134
+ this.labelElement.classList.remove("fade");
135
+ });
136
+ this.addEventListener("wj:option-change", this.optionChange);
137
+ this.clear.addEventListener("wj:button-click", (e) => {
138
+ this.getAllOptions().forEach((option) => {
139
+ option.selected = false;
140
+ option.removeAttribute("selected");
141
+ });
142
+ this.selections();
143
+ e.stopPropagation();
144
+ });
145
+ this.selections();
146
+ this.optionsWrapper.addEventListener("wj:options-load", (e) => {
147
+ this.optionsWrapper.scrollTo(0, 0);
148
+ });
149
+ }
150
+ getAllOptions() {
151
+ return this.querySelectorAll("wj-option");
152
+ }
153
+ getSelectedOptions() {
154
+ return this.querySelectorAll("wj-option[selected]");
155
+ }
156
+ getSelected(option) {
157
+ let selectedOptions = this.getSelectedOptions();
158
+ selectedOptions = Array.isArray(selectedOptions) ? selectedOptions : Array.from(selectedOptions);
159
+ selectedOptions = selectedOptions.map((option2) => {
160
+ return {
161
+ value: option2.value,
162
+ text: option2.textContent.trim()
163
+ };
164
+ });
165
+ return selectedOptions;
166
+ }
167
+ selectionChanged(option = null, length = 0) {
168
+ if (this.hasAttribute("multiple")) {
169
+ this.value = this.selectedOptions.map((el) => el).reverse();
170
+ if (this.placeholder && length === 0) {
171
+ this.chips.innerHTML = this.placeholder;
172
+ this.input.value = "";
173
+ } else {
174
+ if (this.counterEl instanceof HTMLElement || length > +this.maxOptions) {
175
+ this.counter();
176
+ } else {
177
+ if (option != null)
178
+ this.chips.appendChild(this.getChip(option));
179
+ }
180
+ }
181
+ } else {
182
+ let value = (option == null ? void 0 : option.textContent.trim()) || "";
183
+ this.value = value;
184
+ this.input.value = value;
185
+ }
186
+ }
187
+ selections(option) {
188
+ let options = this.getSelectedOptions();
189
+ this.selectedOptions = Array.isArray(options) ? options : Array.from(options);
190
+ if (this.selectedOptions.length >= +this.maxOptions) {
191
+ this.counterEl = null;
192
+ }
193
+ this.chips.innerHTML = "";
194
+ if (this.selectedOptions.length > 0) {
195
+ this.selectedOptions.forEach((option2, index) => {
196
+ this.selectionChanged(option2, ++index);
197
+ });
198
+ } else {
199
+ this.selectionChanged();
200
+ }
201
+ }
202
+ counter() {
203
+ if (this.counterEl && this.value.length === +this.maxOptions) {
204
+ this.counterEl.remove();
205
+ this.counterEl = null;
206
+ return;
207
+ }
208
+ if (!this.counterEl) {
209
+ this.counterEl = document.createElement("span");
210
+ this.counterEl.classList.add("counter");
211
+ this.chips.appendChild(this.counterEl);
212
+ }
213
+ this.counterEl.innerText = `+${this.value.length - +this.maxOptions}`;
214
+ }
215
+ getChip(option) {
216
+ let chip = document.createElement("wj-chip");
217
+ chip.setAttribute("removable", "");
218
+ chip.addEventListener("wj:chip-remove", this.removeChip);
219
+ chip.option = option;
220
+ let label = document.createElement("wj-label");
221
+ label.innerText = option.textContent.trim();
222
+ chip.appendChild(label);
223
+ return chip;
224
+ }
225
+ }
226
+ customElements.get("wj-select") || window.customElements.define("wj-select", Select);
227
+ export {
228
+ Select
229
+ };
@@ -0,0 +1,76 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import WJElement from "./wj-element.js";
8
+ const styles = "/*\n[ WJ Tab Group ]\n*/\n:host {\n --wj-tab-top: 0;\n --wj-tab-start: 0;\n --wj-tab-end: 0;\n --wj-tab-bottom: 0;\n}\n\n.native-tab-group {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n}\n\n.native-tab-group > header {\n display: flex;\n flex-direction: column;\n}\n.native-tab-group > header > nav {\n display: flex;\n}\n\n.native-tab-group > section {\n width: 100%;\n}\n.native-tab-group > section > article {\n scroll-snap-align: start;\n overflow-y: auto;\n overscroll-behavior-y: contain;\n}\n\n:host([variant=top]) {\n --wj-tab-top: auto !important;\n --wj-tab-writing-mode: horizontal-tb;\n}\n:host([variant=top]) .native-tab-group {\n flex-direction: column;\n}\n:host([variant=top]) nav {\n border-bottom: 1px solid var(--wj-border-color);\n}\n\n:host([variant=start]) {\n --wj-tab-start: auto !important;\n --wj-tab-writing-mode: vertical-rl;\n}\n:host([variant=start]) .native-tab-group {\n flex-direction: row;\n}\n:host([variant=start]) nav {\n flex-direction: column;\n border-right: 1px solid var(--wj-border-color);\n}\n\n:host([variant=end]) {\n --wj-tab-writing-mode: vertical-rl;\n}\n:host([variant=end]) .native-tab-group {\n flex-direction: row-reverse;\n}\n:host([variant=end]) nav {\n flex-direction: column;\n border-left: 1px solid var(--wj-border-color);\n}\n\n:host([variant=bottom]) {\n --wj-tab-bottom: auto !important;\n --wj-tab-writing-mode: horizontal-tb;\n}\n:host([variant=bottom]) .native-tab-group {\n flex-direction: column-reverse;\n}\n:host([variant=bottom]) nav {\n border-top: 1px solid var(--wj-border-color);\n}";
9
+ class TabGroup extends WJElement {
10
+ constructor() {
11
+ super();
12
+ __publicField(this, "className", "TabGroup");
13
+ }
14
+ static get cssStyleSheet() {
15
+ return styles;
16
+ }
17
+ setupAttributes() {
18
+ this.isShadowRoot = "open";
19
+ }
20
+ draw(context, store, params) {
21
+ let fragment = document.createDocumentFragment();
22
+ let native = document.createElement("div");
23
+ native.classList.add("native-tab-group");
24
+ let header = document.createElement("header");
25
+ header.classList.add("scroll-snap-x");
26
+ let nav = document.createElement("nav");
27
+ let section = document.createElement("section");
28
+ let slot = document.createElement("slot");
29
+ let slotNav = document.createElement("slot");
30
+ slotNav.setAttribute("name", "nav");
31
+ header.appendChild(nav);
32
+ nav.appendChild(slotNav);
33
+ section.appendChild(slot);
34
+ native.appendChild(header);
35
+ native.appendChild(section);
36
+ fragment.appendChild(native);
37
+ return fragment;
38
+ }
39
+ afterDraw() {
40
+ let activeTab = this.getActiveTab();
41
+ let activeTabName = activeTab ? activeTab[0].name : this.getTabAll()[0].panel;
42
+ this.setActiveTab(activeTabName);
43
+ this.addEventListener("wj:tab-change", (e) => {
44
+ if (e.detail.context.hasAttribute("disabled"))
45
+ return false;
46
+ this.setActiveTab(e.detail.context.panel);
47
+ });
48
+ }
49
+ removeActiveTab() {
50
+ this.getPanelAll().forEach((el) => {
51
+ el.removeAttribute("active");
52
+ });
53
+ this.getTabAll().forEach((el) => {
54
+ el.removeAttribute("active");
55
+ });
56
+ }
57
+ setActiveTab(tab) {
58
+ this.removeActiveTab();
59
+ this.querySelector(`[panel="${tab}"]`).setAttribute("active", "");
60
+ this.querySelector(`[name="${tab}"]`).setAttribute("active", "");
61
+ }
62
+ getActiveTab() {
63
+ let activeTabs = Array.from(this.context.querySelectorAll("[active]"));
64
+ return activeTabs.length > 0 ? activeTabs[0] : null;
65
+ }
66
+ getTabAll() {
67
+ return this.context.querySelector('[name="nav"]').assignedElements();
68
+ }
69
+ getPanelAll() {
70
+ return Array.from(this.querySelectorAll("wj-tab-panel"));
71
+ }
72
+ }
73
+ customElements.get("wj-tab-group") || window.customElements.define("wj-tab-group", TabGroup);
74
+ export {
75
+ TabGroup
76
+ };
@@ -0,0 +1,30 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import WJElement from "./wj-element.js";
8
+ const styles = "/*\n[ WJ Tab Panel ]\n*/\n:host {\n display: none;\n flex-wrap: wrap;\n align-items: center;\n padding: 1rem;\n}\n\n:host([active]) {\n display: block;\n}";
9
+ class TabPanel extends WJElement {
10
+ constructor() {
11
+ super();
12
+ __publicField(this, "className", "TabPanel");
13
+ }
14
+ static get cssStyleSheet() {
15
+ return styles;
16
+ }
17
+ setupAttributes() {
18
+ this.isShadowRoot = "open";
19
+ }
20
+ draw(context, store, params) {
21
+ let fragment = document.createDocumentFragment();
22
+ let element = document.createElement("slot");
23
+ fragment.appendChild(element);
24
+ return fragment;
25
+ }
26
+ }
27
+ customElements.get("wj-tab-panel") || window.customElements.define("wj-tab-panel", TabPanel);
28
+ export {
29
+ TabPanel
30
+ };
package/dist/wj-tab.js ADDED
@@ -0,0 +1,36 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import WJElement, { event } from "./wj-element.js";
8
+ const styles = '/*\n[ WJ Tab ]\n*/\n:host {\n --wj-font-size: 10px;\n --wj-tab-text-transfrom: uppercase;\n --wj-tab-font-weight: 500;\n --wj-tab-letter-spacing: 0.06em;\n --wj-tab-padding-inline: 1rem;\n --wj-tab-padding-top: .75rem;\n --wj-tab-padding-bottom: .75rem;\n --wj-tab-color-active: var(--wj-color-primary-11);\n --wj-tab-color-hover: var(--wj-color-primary-1);\n display: block;\n position: relative;\n}\n:host a {\n display: block;\n align-items: center;\n white-space: nowrap;\n font-family: var(--wj-font-family-secondary);\n font-size: var(--wj-font-size);\n letter-spacing: var(--wj-tab-letter-spacing);\n text-transform: var(--wj-tab-text-transfrom);\n font-weight: var(--wj-tab-font-weight);\n text-decoration: none;\n padding-inline: var(--wj-tab-padding-inline);\n padding-top: var(--wj-tab-padding-top);\n padding-bottom: var(--wj-tab-padding-bottom);\n color: var(--wj-color);\n}\n:host a > svg {\n inline-size: 1.5em;\n pointer-events: none;\n}\n:host a:hover {\n background: var(--wj-tab-color-hover);\n}\n:host a:hover:after {\n display: block;\n}\n:host a:after {\n content: " ";\n display: none;\n block-size: 0.15rem;\n writing-mode: var(--wj-tab-writing-mode);\n background: var(--wj-tab-color-active);\n position: absolute;\n bottom: var(--wj-tab-bottom);\n left: var(--wj-tab-start);\n right: var(--wj-tab-end);\n top: var(--wj-tab-top);\n}\n\n:host([disabled]) a {\n opacity: 0.5;\n cursor: not-allowed;\n background: inherit;\n}\n:host([disabled]) a:after {\n display: none;\n}\n\n:host([active]) a:after {\n display: block;\n}';
9
+ class Tab extends WJElement {
10
+ constructor() {
11
+ super();
12
+ __publicField(this, "className", "Tab");
13
+ this.last = false;
14
+ }
15
+ static get cssStyleSheet() {
16
+ return styles;
17
+ }
18
+ setupAttributes() {
19
+ this.isShadowRoot = "open";
20
+ }
21
+ draw(context, store, params) {
22
+ let fragment = document.createDocumentFragment();
23
+ let a = document.createElement("a");
24
+ a.setAttribute("href", "#" + this.panel);
25
+ a.innerHTML = this.innerHTML;
26
+ fragment.appendChild(a);
27
+ return fragment;
28
+ }
29
+ afterDraw() {
30
+ event.addListener(this, "click", "wj:tab-change");
31
+ }
32
+ }
33
+ customElements.get("wj-tab") || window.customElements.define("wj-tab", Tab);
34
+ export {
35
+ Tab
36
+ };
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "wj-elements",
3
3
  "private": false,
4
- "version": "0.0.21",
4
+ "version": "0.0.23",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "./dist"
8
8
  ],
9
9
  "module": "./dist/wj-master.js",
10
10
  "scripts": {
11
- "dev": "vite",
11
+ "dev": "vite --force",
12
12
  "build": "vite build",
13
13
  "preview": "vite preview",
14
14
  "watch": "vite build --watch"