@zag-js/aria-hidden 0.78.1 → 0.78.3

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.js CHANGED
@@ -1,6 +1,114 @@
1
1
  'use strict';
2
2
 
3
- var ariaHidden$1 = require('aria-hidden');
3
+ // src/walk-tree-outside.ts
4
+ var counterMap = /* @__PURE__ */ new WeakMap();
5
+ var uncontrolledNodes = /* @__PURE__ */ new WeakMap();
6
+ var markerMap = {};
7
+ var lockCount = 0;
8
+ var unwrapHost = (node) => node && (node.host || unwrapHost(node.parentNode));
9
+ var correctTargets = (parent, targets) => targets.map((target) => {
10
+ if (parent.contains(target)) return target;
11
+ const correctedTarget = unwrapHost(target);
12
+ if (correctedTarget && parent.contains(correctedTarget)) {
13
+ return correctedTarget;
14
+ }
15
+ console.error("[zag-js > ariaHidden] target", target, "in not contained inside", parent, ". Doing nothing");
16
+ return null;
17
+ }).filter((x) => Boolean(x));
18
+ var isIgnoredNode = (node) => {
19
+ if (node.localName === "next-route-announcer") return true;
20
+ if (node.localName === "script") return true;
21
+ if (node.hasAttribute("aria-live")) return true;
22
+ return node.matches("[data-live-announcer]");
23
+ };
24
+ var walkTreeOutside = (originalTarget, props) => {
25
+ const { parentNode, markerName, controlAttribute } = props;
26
+ const targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);
27
+ markerMap[markerName] || (markerMap[markerName] = /* @__PURE__ */ new WeakMap());
28
+ const markerCounter = markerMap[markerName];
29
+ const hiddenNodes = [];
30
+ const elementsToKeep = /* @__PURE__ */ new Set();
31
+ const elementsToStop = new Set(targets);
32
+ const keep = (el) => {
33
+ if (!el || elementsToKeep.has(el)) return;
34
+ elementsToKeep.add(el);
35
+ keep(el.parentNode);
36
+ };
37
+ targets.forEach(keep);
38
+ const deep = (parent) => {
39
+ if (!parent || elementsToStop.has(parent)) {
40
+ return;
41
+ }
42
+ Array.prototype.forEach.call(parent.children, (node) => {
43
+ if (elementsToKeep.has(node)) {
44
+ deep(node);
45
+ } else {
46
+ try {
47
+ if (isIgnoredNode(node)) return;
48
+ const attr = node.getAttribute(controlAttribute);
49
+ const alreadyHidden = attr !== null && attr !== "false";
50
+ const counterValue = (counterMap.get(node) || 0) + 1;
51
+ const markerValue = (markerCounter.get(node) || 0) + 1;
52
+ counterMap.set(node, counterValue);
53
+ markerCounter.set(node, markerValue);
54
+ hiddenNodes.push(node);
55
+ if (counterValue === 1 && alreadyHidden) {
56
+ uncontrolledNodes.set(node, true);
57
+ }
58
+ if (markerValue === 1) {
59
+ node.setAttribute(markerName, "");
60
+ }
61
+ if (!alreadyHidden) {
62
+ node.setAttribute(controlAttribute, "");
63
+ }
64
+ } catch (e) {
65
+ console.error("[zag-js > ariaHidden] cannot operate on ", node, e);
66
+ }
67
+ }
68
+ });
69
+ };
70
+ deep(parentNode);
71
+ elementsToKeep.clear();
72
+ lockCount++;
73
+ return () => {
74
+ hiddenNodes.forEach((node) => {
75
+ const counterValue = counterMap.get(node) - 1;
76
+ const markerValue = markerCounter.get(node) - 1;
77
+ counterMap.set(node, counterValue);
78
+ markerCounter.set(node, markerValue);
79
+ if (!counterValue) {
80
+ if (!uncontrolledNodes.has(node)) {
81
+ node.removeAttribute(controlAttribute);
82
+ }
83
+ uncontrolledNodes.delete(node);
84
+ }
85
+ if (!markerValue) {
86
+ node.removeAttribute(markerName);
87
+ }
88
+ });
89
+ lockCount--;
90
+ if (!lockCount) {
91
+ counterMap = /* @__PURE__ */ new WeakMap();
92
+ counterMap = /* @__PURE__ */ new WeakMap();
93
+ uncontrolledNodes = /* @__PURE__ */ new WeakMap();
94
+ markerMap = {};
95
+ }
96
+ };
97
+ };
98
+
99
+ // src/aria-hidden.ts
100
+ var getParentNode = (originalTarget) => {
101
+ const target = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;
102
+ return target.ownerDocument.body;
103
+ };
104
+ var hideOthers = (originalTarget, parentNode = getParentNode(originalTarget), markerName = "data-aria-hidden") => {
105
+ if (!parentNode) return;
106
+ return walkTreeOutside(originalTarget, {
107
+ parentNode,
108
+ markerName,
109
+ controlAttribute: "aria-hidden"
110
+ });
111
+ };
4
112
 
5
113
  // src/index.ts
6
114
  var raf = (fn) => {
@@ -16,7 +124,7 @@ function ariaHidden(targetsOrFn, options = {}) {
16
124
  const targets = typeof targetsOrFn === "function" ? targetsOrFn() : targetsOrFn;
17
125
  const elements = targets.filter(Boolean);
18
126
  if (elements.length === 0) return;
19
- cleanups.push(ariaHidden$1.hideOthers(elements));
127
+ cleanups.push(hideOthers(elements));
20
128
  })
21
129
  );
22
130
  return () => {
package/dist/index.mjs CHANGED
@@ -1,4 +1,112 @@
1
- import { hideOthers } from 'aria-hidden';
1
+ // src/walk-tree-outside.ts
2
+ var counterMap = /* @__PURE__ */ new WeakMap();
3
+ var uncontrolledNodes = /* @__PURE__ */ new WeakMap();
4
+ var markerMap = {};
5
+ var lockCount = 0;
6
+ var unwrapHost = (node) => node && (node.host || unwrapHost(node.parentNode));
7
+ var correctTargets = (parent, targets) => targets.map((target) => {
8
+ if (parent.contains(target)) return target;
9
+ const correctedTarget = unwrapHost(target);
10
+ if (correctedTarget && parent.contains(correctedTarget)) {
11
+ return correctedTarget;
12
+ }
13
+ console.error("[zag-js > ariaHidden] target", target, "in not contained inside", parent, ". Doing nothing");
14
+ return null;
15
+ }).filter((x) => Boolean(x));
16
+ var isIgnoredNode = (node) => {
17
+ if (node.localName === "next-route-announcer") return true;
18
+ if (node.localName === "script") return true;
19
+ if (node.hasAttribute("aria-live")) return true;
20
+ return node.matches("[data-live-announcer]");
21
+ };
22
+ var walkTreeOutside = (originalTarget, props) => {
23
+ const { parentNode, markerName, controlAttribute } = props;
24
+ const targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);
25
+ markerMap[markerName] || (markerMap[markerName] = /* @__PURE__ */ new WeakMap());
26
+ const markerCounter = markerMap[markerName];
27
+ const hiddenNodes = [];
28
+ const elementsToKeep = /* @__PURE__ */ new Set();
29
+ const elementsToStop = new Set(targets);
30
+ const keep = (el) => {
31
+ if (!el || elementsToKeep.has(el)) return;
32
+ elementsToKeep.add(el);
33
+ keep(el.parentNode);
34
+ };
35
+ targets.forEach(keep);
36
+ const deep = (parent) => {
37
+ if (!parent || elementsToStop.has(parent)) {
38
+ return;
39
+ }
40
+ Array.prototype.forEach.call(parent.children, (node) => {
41
+ if (elementsToKeep.has(node)) {
42
+ deep(node);
43
+ } else {
44
+ try {
45
+ if (isIgnoredNode(node)) return;
46
+ const attr = node.getAttribute(controlAttribute);
47
+ const alreadyHidden = attr !== null && attr !== "false";
48
+ const counterValue = (counterMap.get(node) || 0) + 1;
49
+ const markerValue = (markerCounter.get(node) || 0) + 1;
50
+ counterMap.set(node, counterValue);
51
+ markerCounter.set(node, markerValue);
52
+ hiddenNodes.push(node);
53
+ if (counterValue === 1 && alreadyHidden) {
54
+ uncontrolledNodes.set(node, true);
55
+ }
56
+ if (markerValue === 1) {
57
+ node.setAttribute(markerName, "");
58
+ }
59
+ if (!alreadyHidden) {
60
+ node.setAttribute(controlAttribute, "");
61
+ }
62
+ } catch (e) {
63
+ console.error("[zag-js > ariaHidden] cannot operate on ", node, e);
64
+ }
65
+ }
66
+ });
67
+ };
68
+ deep(parentNode);
69
+ elementsToKeep.clear();
70
+ lockCount++;
71
+ return () => {
72
+ hiddenNodes.forEach((node) => {
73
+ const counterValue = counterMap.get(node) - 1;
74
+ const markerValue = markerCounter.get(node) - 1;
75
+ counterMap.set(node, counterValue);
76
+ markerCounter.set(node, markerValue);
77
+ if (!counterValue) {
78
+ if (!uncontrolledNodes.has(node)) {
79
+ node.removeAttribute(controlAttribute);
80
+ }
81
+ uncontrolledNodes.delete(node);
82
+ }
83
+ if (!markerValue) {
84
+ node.removeAttribute(markerName);
85
+ }
86
+ });
87
+ lockCount--;
88
+ if (!lockCount) {
89
+ counterMap = /* @__PURE__ */ new WeakMap();
90
+ counterMap = /* @__PURE__ */ new WeakMap();
91
+ uncontrolledNodes = /* @__PURE__ */ new WeakMap();
92
+ markerMap = {};
93
+ }
94
+ };
95
+ };
96
+
97
+ // src/aria-hidden.ts
98
+ var getParentNode = (originalTarget) => {
99
+ const target = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;
100
+ return target.ownerDocument.body;
101
+ };
102
+ var hideOthers = (originalTarget, parentNode = getParentNode(originalTarget), markerName = "data-aria-hidden") => {
103
+ if (!parentNode) return;
104
+ return walkTreeOutside(originalTarget, {
105
+ parentNode,
106
+ markerName,
107
+ controlAttribute: "aria-hidden"
108
+ });
109
+ };
2
110
 
3
111
  // src/index.ts
4
112
  var raf = (fn) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zag-js/aria-hidden",
3
- "version": "0.78.1",
3
+ "version": "0.78.3",
4
4
  "description": "Hide targets from screen readers",
5
5
  "keywords": [
6
6
  "js",
@@ -23,9 +23,6 @@
23
23
  },
24
24
  "clean-package": "../../../clean-package.config.json",
25
25
  "main": "dist/index.js",
26
- "dependencies": {
27
- "aria-hidden": "1.2.4"
28
- },
29
26
  "devDependencies": {
30
27
  "clean-package": "2.2.0"
31
28
  },