Skip to content

Commit 0ed78b6

Browse files
committed
refactor getTabs into private field
1 parent 772c88f commit 0ed78b6

1 file changed

Lines changed: 10 additions & 10 deletions

File tree

src/tab-container-element.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,6 @@ const HTMLElement = globalThis.HTMLElement || (null as unknown as (typeof window
33
type IncrementKeyCode = 'ArrowRight' | 'ArrowDown'
44
type DecrementKeyCode = 'ArrowUp' | 'ArrowLeft'
55

6-
function getTabs(el: TabContainerElement): HTMLElement[] {
7-
return Array.from(el.querySelectorAll<HTMLElement>('[role="tablist"] [role="tab"]')).filter(
8-
tab => tab instanceof HTMLElement && tab.closest(el.tagName) === el,
9-
)
10-
}
11-
126
export class TabContainerChangeEvent extends Event {
137
constructor(type: string, {tab, panel, ...init}: EventInit & {tab?: Element; panel?: Element}) {
148
super(type, init)
@@ -86,13 +80,19 @@ export class TabContainerElement extends HTMLElement {
8680
}
8781
}
8882

83+
get #tabs(): HTMLElement[] {
84+
return Array.from(this.querySelectorAll<HTMLElement>('[role="tablist"] [role="tab"]')).filter(
85+
tab => tab instanceof HTMLElement && tab.closest(this.tagName) === this,
86+
)
87+
}
88+
8989
connectedCallback(): void {
9090
this.addEventListener('keydown', (event: KeyboardEvent) => {
9191
const target = event.target
9292
if (!(target instanceof HTMLElement)) return
9393
if (target.closest(this.tagName) !== this) return
9494
if (target.getAttribute('role') !== 'tab' && !target.closest('[role="tablist"]')) return
95-
const tabs = getTabs(this)
95+
const tabs = this.#tabs
9696
const currentIndex = tabs.indexOf(tabs.find(tab => tab.matches('[aria-selected="true"]'))!)
9797
const [incrementKeys, decrementKeys] = getNavigationKeyCodes(
9898
target.closest('[role="tablist"]')?.getAttribute('aria-orientation') === 'vertical',
@@ -116,7 +116,7 @@ export class TabContainerElement extends HTMLElement {
116116
})
117117

118118
this.addEventListener('click', (event: MouseEvent) => {
119-
const tabs = getTabs(this)
119+
const tabs = this.#tabs
120120

121121
if (!(event.target instanceof Element)) return
122122
if (event.target.closest(this.tagName) !== this) return
@@ -130,7 +130,7 @@ export class TabContainerElement extends HTMLElement {
130130
this.selectTab(index)
131131
})
132132

133-
for (const tab of getTabs(this)) {
133+
for (const tab of this.#tabs) {
134134
if (!tab.hasAttribute('aria-selected')) {
135135
tab.setAttribute('aria-selected', 'false')
136136
}
@@ -145,7 +145,7 @@ export class TabContainerElement extends HTMLElement {
145145
}
146146

147147
selectTab(index: number): void {
148-
const tabs = getTabs(this)
148+
const tabs = this.#tabs
149149
const panels = Array.from(this.querySelectorAll<HTMLElement>('[role="tabpanel"]')).filter(
150150
panel => panel.closest(this.tagName) === this,
151151
)

0 commit comments

Comments
 (0)