11<script setup lang="ts">
2+ import type { ButtonBase } from ' #components'
23import type { TocItem } from ' #shared/types/readme'
34import { onClickOutside , useEventListener } from ' @vueuse/core'
45import { scrollToAnchor } from ' ~/utils/scrollToAnchor'
@@ -47,7 +48,7 @@ const idToIndex = computed(() => {
4748})
4849
4950const listRef = useTemplateRef (' listRef' )
50- const triggerRef = useTemplateRef ( ' triggerRef ' )
51+ const triggerRef = ref < InstanceType < typeof ButtonBase > | null >( null )
5152const isOpen = shallowRef (false )
5253const highlightedIndex = shallowRef (- 1 )
5354
@@ -79,8 +80,8 @@ function toggle() {
7980 if (isOpen .value ) {
8081 close ()
8182 } else {
82- if (triggerRef .value ) {
83- const rect = triggerRef .value .getBoundingClientRect ()
83+ if (triggerRef .value ?. buttonRef ) {
84+ const rect = triggerRef .value ?. buttonRef .getBoundingClientRect ()
8485 dropdownPosition .value = {
8586 top: rect .bottom + 4 ,
8687 right: rect .right ,
@@ -101,7 +102,7 @@ function close() {
101102function select(id : string ) {
102103 scrollToAnchor (id , { scrollFn: props .scrollToHeading })
103104 close ()
104- triggerRef .value ?.focus ()
105+ triggerRef .value ?.buttonRef ?. focus ()
105106}
106107
107108function getIndex(id : string ): number {
@@ -138,25 +139,25 @@ function handleKeydown(event: KeyboardEvent) {
138139 }
139140 case ' Escape' :
140141 close ()
141- triggerRef .value ?.focus ()
142+ triggerRef .value ?.buttonRef ?. focus ()
142143 break
143144 }
144145}
145146 </script >
146147
147148<template >
148- <button
149+ <ButtonBase
149150 ref =" triggerRef"
150151 type =" button"
151- class =" flex items-center gap-1.5 px-2 py-2 font-mono text-xs text-fg-muted bg-bg-subtle border border-border-subtle border-solid rounded-md transition-colors duration-150 hover:(text-fg border-border-hover) active:scale-95 focus:border-border-hover hover:text-fg"
152152 :aria-expanded =" isOpen"
153153 aria-haspopup =" listbox"
154154 :aria-label =" $t('package.readme.toc_title')"
155155 :aria-controls =" listboxId"
156156 @click =" toggle"
157157 @keydown =" handleKeydown"
158+ classicon =" i-carbon:list"
159+ class =" px-2.5 flex items-center"
158160 >
159- <span class =" i-carbon:list w-3.5 h-3.5" aria-hidden =" true" />
160161 <span
161162 class =" i-carbon:chevron-down w-3 h-3"
162163 :class =" [
@@ -165,7 +166,7 @@ function handleKeydown(event: KeyboardEvent) {
165166 ]"
166167 aria-hidden =" true"
167168 />
168- </button >
169+ </ButtonBase >
169170
170171 <Teleport to =" body" >
171172 <Transition
0 commit comments