When pagination is active, set accessibility attributes on dots and slides.

pull/2364/head
doctor-spaceman 2025-02-04 16:36:25 -08:00
rodzic 093da70e07
commit 2130648828
1 zmienionych plików z 11 dodań i 1 usunięć
src/components/carousel

Wyświetl plik

@ -367,8 +367,16 @@ export default class SlCarousel extends ShoelaceElement {
this.getSlides({ excludeClones: false }).forEach((slide, index) => {
slide.classList.remove('--in-view');
slide.classList.remove('--is-active');
slide.setAttribute('role', 'group');
slide.setAttribute('aria-label', this.localize.term('slideNum', index + 1));
if (this.pagination) {
slide.setAttribute('role', 'tabpanel');
slide.removeAttribute('aria-label');
slide.setAttribute('aria-labelledby', `tab-${index + 1}`);
slide.setAttribute('id', `slide-${index + 1}`);
}
if (slide.hasAttribute('data-clone')) {
slide.remove();
}
@ -611,7 +619,7 @@ export default class SlCarousel extends ShoelaceElement {
: ''}
${this.pagination
? html`
<div part="pagination" role="tablist" class="carousel__pagination" aria-controls="scroll-container">
<div part="pagination" role="tablist" class="carousel__pagination">
${map(range(pagesCount), index => {
const isActive = index === currentPage;
return html`
@ -622,6 +630,8 @@ export default class SlCarousel extends ShoelaceElement {
'carousel__pagination-item--active': isActive
})}"
role="tab"
id="tab-${index + 1}"
aria-controls="slide-${index + 1}"
aria-selected="${isActive ? 'true' : 'false'}"
aria-label="${this.localize.term('goToSlide', index + 1, pagesCount)}"
tabindex=${isActive ? '0' : '-1'}