@@ -56,13 +56,58 @@ headings = [{ depth: 2, slug: "overview", text: title }, ...headings].filter(
56
56
).at(-1);
57
57
// this occurs when the id = "toc-heading"
58
58
if (!tocItem) return;
59
- const func = entry.isIntersecting ? "add" : "remove";
60
- tocItem.classList[func](
61
- "font-medium",
62
- "text-t3-purple-700",
63
- "dark:text-t3-purple-100",
64
- );
65
- tocItem.parentElement.classList[func]("border-t3-purple-300/100");
59
+
60
+ if (entry.isIntersecting) {
61
+ // get current all active elements
62
+ const currentActiveElements = Array.from(
63
+ document.querySelectorAll(
64
+ `[data-current-active-tab-content-item="true"]`,
65
+ ),
66
+ );
67
+
68
+ // get current all parent active elements
69
+ const currentActiveParentElements = Array.from(
70
+ document.querySelectorAll(
71
+ `[data-current-active-parent-tab-content-item="true"]`,
72
+ ),
73
+ );
74
+
75
+ // if has active elements
76
+ if (currentActiveElements.length) {
77
+ // loop through all elements and remove class and attr
78
+ for (const el of currentActiveElements) {
79
+ el.classList.remove(
80
+ "font-medium",
81
+ "text-t3-purple-700",
82
+ "dark:text-t3-purple-100",
83
+ );
84
+ el.removeAttribute("data-current-active-tab-content-item");
85
+ }
86
+ }
87
+ // if has active parent elements
88
+ if (currentActiveParentElements.length) {
89
+ // loop through all parent elements and remove class and attr
90
+ for (const parentEl of currentActiveParentElements) {
91
+ parentEl.classList.remove("border-t3-purple-300/100");
92
+ parentEl.removeAttribute(
93
+ "data-current-active-parent-tab-content-item",
94
+ );
95
+ }
96
+ }
97
+
98
+ tocItem.classList.add(
99
+ "font-medium",
100
+ "text-t3-purple-700",
101
+ "dark:text-t3-purple-100",
102
+ );
103
+ tocItem.parentElement.classList.add("border-t3-purple-300/100");
104
+ // set data attr to active element also will helpful when need to remove active state
105
+ tocItem.setAttribute("data-current-active-tab-content-item", true);
106
+ tocItem.parentElement.setAttribute(
107
+ "data-current-active-parent-tab-content-item",
108
+ true,
109
+ );
110
+ }
66
111
});
67
112
},
68
113
{
0 commit comments