@@ -9,7 +9,6 @@ import type { IHeading } from "@/types/astro";
9
9
import NavigationAstro from " @components/layout/NavigationAstro.astro" ;
10
10
import DocsSidebar from " ../components/layout/DocsSidebar/DocsSidebar.astro" ;
11
11
import getContentTree from ' @/utils/getContentTree' ;
12
- import type { IHeading } from ' @/types/astro' ;
13
12
14
13
interface Props {
15
14
customTitle? : string ;
@@ -139,5 +138,125 @@ const { title, tree } = await getContentTree({
139
138
}
140
139
}
141
140
</script >
141
+ <script is:inline >
142
+ const changeNpmTab = () => {
143
+ const packageManagers = ['npm', 'yarn', 'pnpm', 'bun'];
144
+
145
+ let packageManagerIndex = packageManagers.indexOf(packageManager);
146
+
147
+ const updateUI = (index) => {
148
+ npmContent.forEach((element) => {
149
+ Array.from(element.children).forEach((child, i) => {
150
+ child.classList.toggle('hidden', i !== index);
151
+ });
152
+ });
153
+ npmTabs.forEach((element) => {
154
+ Array.from(element.children).forEach((child, i) => {
155
+ child.classList.toggle('npm__tab--active', i === index);
156
+ });
157
+ });
158
+
159
+ npxSelectResizer.querySelector('.line span').innerText = packageManagers[index]
160
+
161
+ npxSelects.forEach((element) => {
162
+ element.value = index;
163
+ element.style.width = `${npxSelectResizer.offsetWidth}px`
164
+ });
165
+ };
166
+
167
+ const npmContent = document.querySelectorAll('.npm__content');
168
+ const npmTabs = document.querySelectorAll('.npm__tabs');
169
+ const npxSelects = document.querySelectorAll('.npx-select');
170
+ const npxSelectResizer = document.querySelector('.npx-select-resizer');
171
+
172
+ npmContent.forEach((content) => {
173
+ Array.from(content.children).forEach((child, index) => {
174
+ child.classList.toggle('hidden', index !== packageManagerIndex);
175
+ });
176
+ });
177
+
178
+ npmTabs.forEach((tab) => {
179
+ Array.from(tab.children).forEach((child, index) => {
180
+ child.classList.toggle('npm__tab--active', index === packageManagerIndex);
181
+ child.addEventListener('click', () => {
182
+ packageManager = packageManagers[index];
183
+ localStorage.setItem('package-manager', packageManager);
184
+ updateUI(index);
185
+ });
186
+ });
187
+ });
188
+
189
+ npxSelects.forEach((element) => {
190
+ npxSelectResizer.querySelector('.line span').innerText = packageManagers[packageManagerIndex];
191
+ element.value = packageManagerIndex;
192
+ setTimeout(() => element.style.width = `${npxSelectResizer.offsetWidth}px`, 1);
193
+ element.addEventListener('change', (e) => {
194
+ packageManager = packageManagers[Number(e.target.value)];
195
+ localStorage.setItem('package-manager', packageManager);
196
+ updateUI(Number(e.target.value));
197
+ })
198
+ });
199
+ }
200
+ changeNpmTab();
201
+ </script >
202
+ <script >
203
+ document.addEventListener("astro:after-swap", () => {
204
+ const npmContent: NodeList = document.querySelectorAll('.npm__content');
205
+ const npmTabs: NodeList = document.querySelectorAll('.npm__tabs');
206
+ const npxSelects: NodeList = document.querySelectorAll('.npx-select');
207
+ const npxSelectResizer = document.querySelector('.npx-select-resizer');
208
+ const packageManagers: string[] = ['npm', 'yarn', 'pnpm', 'bun'];
209
+ let packageManager: string = localStorage.getItem('package-manager') || 'npm';
210
+ let packageManagerIndex: number = packageManagers.indexOf(packageManager);
211
+
212
+ const updateUI = (index: number): void => {
213
+ npmContent.forEach((element) => {
214
+ Array.from((element as HTMLElement).children).forEach((child, i) => {
215
+ child.classList.toggle('hidden', i !== index);
216
+ });
217
+ });
218
+ npmTabs.forEach((element) => {
219
+ Array.from((element as HTMLElement).children).forEach((child, i) => {
220
+ child.classList.toggle('npm__tab--active', i === index);
221
+ });
222
+ });
223
+
224
+ npxSelectResizer.querySelector('.line span').innerText = packageManagers[index]
225
+
226
+ npxSelects.forEach((element) => {
227
+ element.value = index;
228
+ element.style.width = `${npxSelectResizer.offsetWidth}px`
229
+ });
230
+ };
231
+
232
+ npmContent.forEach((content) => {
233
+ Array.from((content as HTMLElement).children).forEach((child, index) => {
234
+ child.classList.toggle('hidden', index !== packageManagerIndex);
235
+ });
236
+ });
237
+
238
+ npmTabs.forEach((tab) => {
239
+ Array.from((tab as HTMLElement).children).forEach((child, index) => {
240
+ child.classList.toggle('npm__tab--active', index === packageManagerIndex);
241
+ child.addEventListener('click', () => {
242
+ packageManager = packageManagers[index];
243
+ localStorage.setItem('package-manager', packageManager);
244
+ updateUI(index);
245
+ });
246
+ });
247
+ });
248
+
249
+ npxSelects.forEach((element) => {
250
+ npxSelectResizer.querySelector('.line span').innerText = packageManagers[packageManagerIndex];
251
+ element.value = packageManagerIndex;
252
+ element.style.width = `${npxSelectResizer.offsetWidth}px`
253
+ element.addEventListener('change', (e) => {
254
+ packageManager = packageManagers[Number(e.target.value)];
255
+ localStorage.setItem('package-manager', packageManager);
256
+ updateUI(Number(e.target.value));
257
+ })
258
+ });
259
+ })
260
+ </script >
142
261
</body >
143
262
</html >
0 commit comments