@y14e/tabs 1.3.5 → 1.3.7

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/index.cjs CHANGED
@@ -1,29 +1,41 @@
1
1
  'use strict';
2
2
 
3
3
  // node_modules/@y14e/attributes-utils/dist/index.js
4
- function addTokenToAttribute(element, attribute, token) {
5
- const tokens = new Set(
6
- element.getAttribute(attribute)?.trim().split(/\s+/) ?? []
7
- );
8
- tokens.add(token);
9
- element.setAttribute(attribute, [...tokens].join(" "));
4
+ var defaultParser = (value) => value.split(/\s+/);
5
+ var defaultSerializer = (tokens) => tokens.join(" ");
6
+ function addTokenToAttribute(element, attribute, token, options = {}) {
7
+ const {
8
+ caseInsensitive = false,
9
+ parse = defaultParser,
10
+ serialize = defaultSerializer
11
+ } = options;
12
+ const value = element.getAttribute(attribute)?.trim();
13
+ const tokens = value ? parse(value).filter(Boolean) : [];
14
+ if (caseInsensitive) {
15
+ const lower = token.toLowerCase();
16
+ if (tokens.some((token2) => token2.toLowerCase() === lower)) {
17
+ return;
18
+ }
19
+ tokens.push(token);
20
+ element.setAttribute(attribute, serialize(tokens));
21
+ return;
22
+ }
23
+ const set = new Set(tokens);
24
+ set.add(token);
25
+ element.setAttribute(attribute, serialize([...set]));
10
26
  }
11
27
  var snapshots = /* @__PURE__ */ new WeakMap();
12
28
  function restoreAttributes(elements) {
13
- elements.forEach((element) => {
29
+ for (const element of elements) {
14
30
  const snapshot = snapshots.get(element);
15
31
  if (!snapshot) {
16
- return;
32
+ continue;
17
33
  }
18
34
  for (const [attribute, value] of snapshot.entries()) {
19
- if (value === null) {
20
- element.removeAttribute(attribute);
21
- } else {
22
- element.setAttribute(attribute, value);
23
- }
35
+ value === null ? element.removeAttribute(attribute) : element.setAttribute(attribute, value);
24
36
  }
25
37
  snapshots.delete(element);
26
- });
38
+ }
27
39
  }
28
40
  function saveAttributes(elements, attributes) {
29
41
  elements.forEach((element) => {
@@ -324,7 +336,8 @@ var Tabs = class _Tabs {
324
336
  this.#rootElement.removeAttribute("data-tabs-initialized");
325
337
  }
326
338
  #initialize() {
327
- const { signal } = this.#eventController ?? new AbortController();
339
+ this.#eventController = new AbortController();
340
+ const { signal } = this.#eventController;
328
341
  saveAttributes(this.#listElements, [
329
342
  "aria-hidden",
330
343
  "aria-orientation",
@@ -617,7 +630,7 @@ function isFocusable(element) {
617
630
  * Tabs
618
631
  * WAI-ARIA compliant tabs pattern implementation in TypeScript.
619
632
  *
620
- * @version 1.3.5
633
+ * @version 1.3.7
621
634
  * @author Yusuke Kamiyamane
622
635
  * @license MIT
623
636
  * @copyright Copyright (c) Yusuke Kamiyamane
@@ -629,7 +642,7 @@ function isFocusable(element) {
629
642
  (**
630
643
  * Attributes Utils
631
644
  *
632
- * @version 1.0.0
645
+ * @version 1.0.5
633
646
  * @author Yusuke Kamiyamane
634
647
  * @license MIT
635
648
  * @copyright Copyright (c) Yusuke Kamiyamane
package/dist/index.d.cts CHANGED
@@ -2,7 +2,7 @@
2
2
  * Tabs
3
3
  * WAI-ARIA compliant tabs pattern implementation in TypeScript.
4
4
  *
5
- * @version 1.3.5
5
+ * @version 1.3.7
6
6
  * @author Yusuke Kamiyamane
7
7
  * @license MIT
8
8
  * @copyright Copyright (c) Yusuke Kamiyamane
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * Tabs
3
3
  * WAI-ARIA compliant tabs pattern implementation in TypeScript.
4
4
  *
5
- * @version 1.3.5
5
+ * @version 1.3.7
6
6
  * @author Yusuke Kamiyamane
7
7
  * @license MIT
8
8
  * @copyright Copyright (c) Yusuke Kamiyamane
package/dist/index.js CHANGED
@@ -1,27 +1,39 @@
1
1
  // node_modules/@y14e/attributes-utils/dist/index.js
2
- function addTokenToAttribute(element, attribute, token) {
3
- const tokens = new Set(
4
- element.getAttribute(attribute)?.trim().split(/\s+/) ?? []
5
- );
6
- tokens.add(token);
7
- element.setAttribute(attribute, [...tokens].join(" "));
2
+ var defaultParser = (value) => value.split(/\s+/);
3
+ var defaultSerializer = (tokens) => tokens.join(" ");
4
+ function addTokenToAttribute(element, attribute, token, options = {}) {
5
+ const {
6
+ caseInsensitive = false,
7
+ parse = defaultParser,
8
+ serialize = defaultSerializer
9
+ } = options;
10
+ const value = element.getAttribute(attribute)?.trim();
11
+ const tokens = value ? parse(value).filter(Boolean) : [];
12
+ if (caseInsensitive) {
13
+ const lower = token.toLowerCase();
14
+ if (tokens.some((token2) => token2.toLowerCase() === lower)) {
15
+ return;
16
+ }
17
+ tokens.push(token);
18
+ element.setAttribute(attribute, serialize(tokens));
19
+ return;
20
+ }
21
+ const set = new Set(tokens);
22
+ set.add(token);
23
+ element.setAttribute(attribute, serialize([...set]));
8
24
  }
9
25
  var snapshots = /* @__PURE__ */ new WeakMap();
10
26
  function restoreAttributes(elements) {
11
- elements.forEach((element) => {
27
+ for (const element of elements) {
12
28
  const snapshot = snapshots.get(element);
13
29
  if (!snapshot) {
14
- return;
30
+ continue;
15
31
  }
16
32
  for (const [attribute, value] of snapshot.entries()) {
17
- if (value === null) {
18
- element.removeAttribute(attribute);
19
- } else {
20
- element.setAttribute(attribute, value);
21
- }
33
+ value === null ? element.removeAttribute(attribute) : element.setAttribute(attribute, value);
22
34
  }
23
35
  snapshots.delete(element);
24
- });
36
+ }
25
37
  }
26
38
  function saveAttributes(elements, attributes) {
27
39
  elements.forEach((element) => {
@@ -322,7 +334,8 @@ var Tabs = class _Tabs {
322
334
  this.#rootElement.removeAttribute("data-tabs-initialized");
323
335
  }
324
336
  #initialize() {
325
- const { signal } = this.#eventController ?? new AbortController();
337
+ this.#eventController = new AbortController();
338
+ const { signal } = this.#eventController;
326
339
  saveAttributes(this.#listElements, [
327
340
  "aria-hidden",
328
341
  "aria-orientation",
@@ -615,7 +628,7 @@ function isFocusable(element) {
615
628
  * Tabs
616
629
  * WAI-ARIA compliant tabs pattern implementation in TypeScript.
617
630
  *
618
- * @version 1.3.5
631
+ * @version 1.3.7
619
632
  * @author Yusuke Kamiyamane
620
633
  * @license MIT
621
634
  * @copyright Copyright (c) Yusuke Kamiyamane
@@ -627,7 +640,7 @@ function isFocusable(element) {
627
640
  (**
628
641
  * Attributes Utils
629
642
  *
630
- * @version 1.0.0
643
+ * @version 1.0.5
631
644
  * @author Yusuke Kamiyamane
632
645
  * @license MIT
633
646
  * @copyright Copyright (c) Yusuke Kamiyamane
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@y14e/tabs",
3
- "version": "1.3.5",
3
+ "version": "1.3.7",
4
4
  "description": "WAI-ARIA compliant tabs pattern implementation in TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "homepage": "https://github.com/y14e/tabs#readme",
44
44
  "devDependencies": {
45
- "@y14e/attributes-utils": "^1.0.0",
45
+ "@y14e/attributes-utils": "^1.0.5",
46
46
  "bun-types": "latest",
47
47
  "tsup": "^8.0.0",
48
48
  "typescript": "^5.6.0",