starlight-package-managers 0.4.0 → 0.5.0
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/PackageManagers.astro +7 -126
- package/package.json +3 -3
package/PackageManagers.astro
CHANGED
|
@@ -38,131 +38,12 @@ function getTabItemProps(pkgManager: PackageManager) {
|
|
|
38
38
|
singlePkgManager ? (
|
|
39
39
|
<Code code={getCommand(singlePkgManager, type, pkg, options)} lang="sh" {title} frame={ecFrame} />
|
|
40
40
|
) : (
|
|
41
|
-
<starlight-package-managers>
|
|
42
|
-
|
|
43
|
-
{
|
|
44
|
-
<
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
</Tabs>
|
|
49
|
-
</starlight-package-managers>
|
|
41
|
+
<Tabs syncKey="starlight-package-managers-pkg">
|
|
42
|
+
{getSupportedPkgManagers(type, pkgManagers).map((pkgManager) => (
|
|
43
|
+
<TabItem {...getTabItemProps(pkgManager)}>
|
|
44
|
+
<Code code={getCommand(pkgManager, type, pkg, options)} lang="sh" {title} frame={ecFrame} />
|
|
45
|
+
</TabItem>
|
|
46
|
+
))}
|
|
47
|
+
</Tabs>
|
|
50
48
|
)
|
|
51
49
|
}
|
|
52
|
-
|
|
53
|
-
<style>
|
|
54
|
-
starlight-package-managers {
|
|
55
|
-
display: block;
|
|
56
|
-
}
|
|
57
|
-
</style>
|
|
58
|
-
|
|
59
|
-
<script>
|
|
60
|
-
customElements.define(
|
|
61
|
-
'starlight-package-managers',
|
|
62
|
-
class StarlightPackageManagers extends HTMLElement {
|
|
63
|
-
#observer: MutationObserver
|
|
64
|
-
#observerConfig: MutationObserverInit = { attributes: true, attributeFilter: ['aria-selected'] }
|
|
65
|
-
|
|
66
|
-
#tabs: NodeListOf<HTMLAnchorElement>
|
|
67
|
-
|
|
68
|
-
constructor() {
|
|
69
|
-
super()
|
|
70
|
-
|
|
71
|
-
this.#observer = new MutationObserver(this.#handleTabChange)
|
|
72
|
-
this.#tabs = this.querySelectorAll<HTMLAnchorElement>('starlight-tabs [role="tablist"] [role="tab"]')
|
|
73
|
-
|
|
74
|
-
this.observeTabs()
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
observeTabs = () => {
|
|
78
|
-
for (const tab of this.#tabs) {
|
|
79
|
-
this.#observer.observe(tab, this.#observerConfig)
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
disconnectTabs = () => {
|
|
84
|
-
this.#observer.disconnect()
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
#handleTabChange = (mutations: MutationRecord[]) => {
|
|
88
|
-
const pkgTabs = [...document.querySelectorAll<this>('starlight-package-managers')]
|
|
89
|
-
|
|
90
|
-
for (const pkgTab of pkgTabs) {
|
|
91
|
-
pkgTab.disconnectTabs()
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
let newFocusedTab: HTMLAnchorElement | null = null
|
|
95
|
-
|
|
96
|
-
for (const mutation of mutations) {
|
|
97
|
-
if (mutation.attributeName !== 'aria-selected' || !(mutation.target instanceof HTMLAnchorElement)) {
|
|
98
|
-
continue
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
if (mutation.target.getAttribute('aria-selected') !== 'true') {
|
|
102
|
-
continue
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
newFocusedTab = mutation.target
|
|
106
|
-
|
|
107
|
-
const newPkgManager = newFocusedTab.textContent?.trim() ?? ''
|
|
108
|
-
const otherTabs = pkgTabs.filter((tabs) => tabs !== this)
|
|
109
|
-
|
|
110
|
-
for (const otherTab of otherTabs) {
|
|
111
|
-
const starlightTabs = otherTab.querySelector('starlight-tabs')
|
|
112
|
-
|
|
113
|
-
if (!this.#isStarlightTabs(starlightTabs)) {
|
|
114
|
-
continue
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// We cannot use the `switchTab()` method provided by Starlight as it focuses the new tab which will cause
|
|
118
|
-
// the page to scroll for every set of tabs.
|
|
119
|
-
this.#switchTabs(starlightTabs, newPkgManager)
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
requestAnimationFrame(() => {
|
|
124
|
-
for (const pkgTab of pkgTabs) {
|
|
125
|
-
pkgTab.observeTabs()
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
newFocusedTab?.focus()
|
|
129
|
-
})
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// https://github.com/withastro/starlight/blob/290af4f0b5f65619fa4c65609940c3a911a7e698/packages/starlight/user-components/Tabs.astro#L116-L135
|
|
133
|
-
#switchTabs(starlightTabs: StarlightTabs, newPkgManager: string) {
|
|
134
|
-
const tabs = starlightTabs.tabs
|
|
135
|
-
const newTabIndex = tabs.findIndex((tab) => tab.textContent?.trim() === newPkgManager)
|
|
136
|
-
const newTab = tabs[newTabIndex]
|
|
137
|
-
const newPanel = starlightTabs.panels[newTabIndex]
|
|
138
|
-
|
|
139
|
-
if (!newTab || !newPanel) {
|
|
140
|
-
return
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
for (const tab of starlightTabs.tabs) {
|
|
144
|
-
tab.removeAttribute('aria-selected')
|
|
145
|
-
tab.setAttribute('tabindex', '-1')
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
for (const panel of starlightTabs.panels) {
|
|
149
|
-
panel.hidden = true
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
newPanel.hidden = false
|
|
153
|
-
// Restore active tab to the default tab order.
|
|
154
|
-
newTab.removeAttribute('tabindex')
|
|
155
|
-
newTab.setAttribute('aria-selected', 'true')
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
#isStarlightTabs(element: Element | null): element is StarlightTabs {
|
|
159
|
-
return element instanceof Element && 'tabs' in element && 'panels' in element
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
)
|
|
163
|
-
|
|
164
|
-
type StarlightTabs = Element & {
|
|
165
|
-
panels: HTMLElement[]
|
|
166
|
-
tabs: HTMLAnchorElement[]
|
|
167
|
-
}
|
|
168
|
-
</script>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "starlight-package-managers",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Quickly display npm related commands for multiple package managers in your Starlight documentation site.",
|
|
6
6
|
"author": "HiDeoo <github@hideoo.dev> (https://hideoo.dev)",
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
"./package.json": "./package.json"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
|
-
"@astrojs/starlight": "0.
|
|
13
|
+
"@astrojs/starlight": "0.22.0",
|
|
14
14
|
"@playwright/test": "1.36.2",
|
|
15
15
|
"astro": "4.3.7",
|
|
16
16
|
"vitest": "0.33.0"
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"@astrojs/starlight": ">=0.
|
|
19
|
+
"@astrojs/starlight": ">=0.22.0",
|
|
20
20
|
"astro": ">=4.2.7"
|
|
21
21
|
},
|
|
22
22
|
"engines": {
|