From 17449ceafbceff3fa067fbca0261658cbd2fb420 Mon Sep 17 00:00:00 2001 From: Michael Webber Date: Fri, 15 May 2026 09:16:51 -0700 Subject: [PATCH 01/11] uds-2150 aria label updates --- .../core/components/BaseCarousel/components/BulletItems.jsx | 2 +- .../ComponentCarousel/core/components/BaseCarousel/index.jsx | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/components/BulletItems.jsx b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/components/BulletItems.jsx index 83216dce94..b8c1052593 100644 --- a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/components/BulletItems.jsx +++ b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/components/BulletItems.jsx @@ -54,7 +54,7 @@ const BulletItems = ({ buttonCount }) => { type="button" className="glide__bullet" data-glide-dir={`=${i}`} - aria-label={`Slide view ${i + 1}`} + aria-label={`Go to slide ${i+1} of ${buttonCount}`} /> ); diff --git a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/index.jsx b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/index.jsx index d15cda1189..4442ccf4fa 100644 --- a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/index.jsx +++ b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/index.jsx @@ -77,8 +77,10 @@ const BaseCarousel = ({ return (
Date: Fri, 15 May 2026 09:18:08 -0700 Subject: [PATCH 02/11] uds-2152 disabled arrow button update --- .../components/BaseCarousel/glide/glide.setup.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js index fb24390023..e673b35a2f 100644 --- a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js +++ b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js @@ -142,9 +142,9 @@ function setNavButtonGradient(gliderElement, currentIndex, buttonCount) { imageGalleryNavigation?.classList.add("slider-start"); // Enable/disable prev/next styles. Glide takes care of actual disable. arrowPrev?.classList.add(cssDisabledClass); - arrowPrev?.setAttribute("aria-disabled", "true"); + arrowPrev?.setAttribute("disabled", "true"); arrowNext?.classList.remove(cssDisabledClass); - arrowNext?.setAttribute("aria-disabled", "false"); + arrowNext?.removeAttribute("disabled"); } else if (currentIndex >= buttonCount - 1) { // LAST SLIDE. // Gradient for end. @@ -152,9 +152,9 @@ function setNavButtonGradient(gliderElement, currentIndex, buttonCount) { imageGalleryNavigation?.classList.add("slider-end"); // Enable/disable prev/next styles. Glide takes care of actual disable. arrowPrev?.classList.remove(cssDisabledClass); - arrowPrev?.setAttribute("aria-disabled", "false"); + arrowPrev?.removeAttribute("disabled"); arrowNext?.classList.add(cssDisabledClass); - arrowNext?.setAttribute("aria-disabled", "true"); + arrowNext?.setAttribute("disabled", "true"); } else { // MIDDLE SLIDES. // Gradient for middle. @@ -163,8 +163,8 @@ function setNavButtonGradient(gliderElement, currentIndex, buttonCount) { // Enable/disable prev/next styles. Glide takes care of actual disable. arrowPrev?.classList.remove(cssDisabledClass); arrowNext?.classList.remove(cssDisabledClass); - arrowPrev?.setAttribute("aria-disabled", "false"); - arrowNext?.setAttribute("aria-disabled", "false"); + arrowPrev?.removeAttribute("disabled"); + arrowNext?.removeAttribute("disabled"); } } From 1f4ee8b20a163bb12292bf24730eedde80cab56f Mon Sep 17 00:00:00 2001 From: Scott Williams <5209283+scott-williams-az@users.noreply.github.com> Date: Tue, 12 May 2026 11:24:51 -0700 Subject: [PATCH 03/11] fix(component-header-footer): fix header dropdown height --- .../NavbarContainer/DropdownItem/index.styles.js | 7 +++++-- .../src/header/components/UniversalNavbar/index.styles.js | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/DropdownItem/index.styles.js b/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/DropdownItem/index.styles.js index 840e521f7d..cc94136a6b 100644 --- a/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/DropdownItem/index.styles.js +++ b/packages/component-header-footer/src/header/components/HeaderMain/NavbarContainer/DropdownItem/index.styles.js @@ -50,14 +50,17 @@ const DropdownWrapper = styled.div` --span: 1; /* component overrides using inline style */ --col: 1; /* component overrides using inline style */ width: calc(var(--container-width) / var(--cols) * var(--span)); - height: fit-content; - height: -webkit-fill-available; padding: var(--gap); + padding-bottom: 0; display: flex; flex-direction: column; justify-content: flex-start; row-gap: var(--gap); + & > *:last-child { + padding-bottom: var(--gap); + } + &:not(:last-child) { border-right: 1px solid ${ASU_GRAY5}; } diff --git a/packages/component-header-footer/src/header/components/UniversalNavbar/index.styles.js b/packages/component-header-footer/src/header/components/UniversalNavbar/index.styles.js index cb49c5754e..4a1071723a 100644 --- a/packages/component-header-footer/src/header/components/UniversalNavbar/index.styles.js +++ b/packages/component-header-footer/src/header/components/UniversalNavbar/index.styles.js @@ -80,7 +80,7 @@ const Wrapper = styled.div` display: flex; align-items: center; justify-content: center; - height: stretch; + height: 100%; &.visually-hidden-focusable:not(:focus):not(:active) { border: none; From b6ca33a8ca9bbd50351fdb37aa532ce9aaa789de Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 12 May 2026 22:37:49 +0000 Subject: [PATCH 04/11] chore(release): 1.4.1 [skip ci] # [@asu/component-header-footer-v1.4.1](https://github.com/asu/asu-unity-stack/compare/@asu/component-header-footer-v1.4.0...@asu/component-header-footer-v1.4.1) (2026-05-12) ### Bug Fixes * **component-header-footer:** fix header dropdown height ([efa0bb7](https://github.com/asu/asu-unity-stack/commit/efa0bb74616f2c206d1c67a6fc836b9d85f2646d)) --- packages/component-header-footer/CHANGELOG.md | 7 +++++++ packages/component-header-footer/package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/component-header-footer/CHANGELOG.md b/packages/component-header-footer/CHANGELOG.md index 7fc9918ccc..2c836c6089 100644 --- a/packages/component-header-footer/CHANGELOG.md +++ b/packages/component-header-footer/CHANGELOG.md @@ -1,3 +1,10 @@ +# [@asu/component-header-footer-v1.4.1](https://github.com/asu/asu-unity-stack/compare/@asu/component-header-footer-v1.4.0...@asu/component-header-footer-v1.4.1) (2026-05-12) + + +### Bug Fixes + +* **component-header-footer:** fix header dropdown height ([efa0bb7](https://github.com/asu/asu-unity-stack/commit/efa0bb74616f2c206d1c67a6fc836b9d85f2646d)) + # [@asu/component-header-footer-v1.4.0](https://github.com/asu/asu-unity-stack/compare/@asu/component-header-footer-v1.3.3...@asu/component-header-footer-v1.4.0) (2026-04-21) diff --git a/packages/component-header-footer/package.json b/packages/component-header-footer/package.json index 505077d0ee..94edcb282b 100644 --- a/packages/component-header-footer/package.json +++ b/packages/component-header-footer/package.json @@ -1,6 +1,6 @@ { "name": "@asu/component-header-footer", - "version": "1.4.0", + "version": "1.4.1", "description": "ASU Global Header and Footer", "main": "./dist/asuHeaderFooter.cjs.js", "browser": "./dist/asuHeaderFooter.umd.js", From e7a0561c6b37cdbbb85514627ac2d562d700c6ee Mon Sep 17 00:00:00 2001 From: Michael Webber Date: Mon, 6 Apr 2026 11:46:45 -0700 Subject: [PATCH 05/11] fix(unity-bootstrap-theme): blockquote css update for maxwidth standards --- .../unity-bootstrap-theme/src/scss/extends/_blockquotes.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss b/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss index 986f2ff7f8..e1d0d49b15 100644 --- a/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss +++ b/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss @@ -11,9 +11,9 @@ blockquote { border-left: none; font-weight: inherit; padding-left: 0; - max-width: none; + max-width: 772px; p { - max-width: unset; + max-width: 700px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; From b122540b147f887f6e7be75d7a175b3fcd72e0cf Mon Sep 17 00:00:00 2001 From: Michael Webber Date: Mon, 6 Apr 2026 12:03:18 -0700 Subject: [PATCH 06/11] fix(unity-bootstrap-theme): padding-left: 0 applied to uds-blockquote --- .../unity-bootstrap-theme/src/scss/extends/_blockquotes.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss b/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss index e1d0d49b15..3afe8978f1 100644 --- a/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss +++ b/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss @@ -45,6 +45,7 @@ blockquote:before { font-weight: 700; padding: $uds-size-spacing-4; + padding-left: 0; @include media-breakpoint-down(sm) { padding: $uds-size-spacing-4; From 57ce6ab14653ae391127df427930b10ddea017ee Mon Sep 17 00:00:00 2001 From: Michael Webber Date: Tue, 7 Apr 2026 10:59:39 -0700 Subject: [PATCH 07/11] fix(unity-bootstrap-theme): removed padding right from the blockquote css --- .../unity-bootstrap-theme/src/scss/extends/_blockquotes.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss b/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss index 3afe8978f1..284a71131f 100644 --- a/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss +++ b/packages/unity-bootstrap-theme/src/scss/extends/_blockquotes.scss @@ -11,6 +11,7 @@ blockquote { border-left: none; font-weight: inherit; padding-left: 0; + padding-right: 0; max-width: 772px; p { max-width: 700px; @@ -46,6 +47,7 @@ blockquote:before { padding: $uds-size-spacing-4; padding-left: 0; + padding-right: 0; @include media-breakpoint-down(sm) { padding: $uds-size-spacing-4; @@ -271,6 +273,7 @@ blockquote:before { cite.description { font-weight: 400; padding-left: 0; + padding-right: 0; display: flex; justify-content: flex-start; } From 320fb73ded2d4f87d681b7633081b547e5f3d6b5 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 13 May 2026 17:23:06 +0000 Subject: [PATCH 08/11] chore(release): 1.38.1 [skip ci] # [@asu/unity-bootstrap-theme-v1.38.1](https://github.com/ASU/asu-unity-stack/compare/@asu/unity-bootstrap-theme-v1.38.0...@asu/unity-bootstrap-theme-v1.38.1) (2026-05-13) ### Bug Fixes * **unity-bootstrap-theme:** blockquote css update for maxwidth standards ([92976a5](https://github.com/ASU/asu-unity-stack/commit/92976a53589eb017712048bb5a8ae6bbfd552262)) * **unity-bootstrap-theme:** padding-left: 0 applied to uds-blockquote ([aa558f6](https://github.com/ASU/asu-unity-stack/commit/aa558f616acbda37c8c8f7e8e3bc22527efe4740)) * **unity-bootstrap-theme:** removed padding right from the blockquote css ([ff90b82](https://github.com/ASU/asu-unity-stack/commit/ff90b828a645884d3ddb75e18b070aa2d82e40d3)) --- packages/unity-bootstrap-theme/CHANGELOG.md | 9 +++++++++ packages/unity-bootstrap-theme/package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/unity-bootstrap-theme/CHANGELOG.md b/packages/unity-bootstrap-theme/CHANGELOG.md index 4094db8a14..86b4da429c 100644 --- a/packages/unity-bootstrap-theme/CHANGELOG.md +++ b/packages/unity-bootstrap-theme/CHANGELOG.md @@ -1,3 +1,12 @@ +# [@asu/unity-bootstrap-theme-v1.38.1](https://github.com/ASU/asu-unity-stack/compare/@asu/unity-bootstrap-theme-v1.38.0...@asu/unity-bootstrap-theme-v1.38.1) (2026-05-13) + + +### Bug Fixes + +* **unity-bootstrap-theme:** blockquote css update for maxwidth standards ([92976a5](https://github.com/ASU/asu-unity-stack/commit/92976a53589eb017712048bb5a8ae6bbfd552262)) +* **unity-bootstrap-theme:** padding-left: 0 applied to uds-blockquote ([aa558f6](https://github.com/ASU/asu-unity-stack/commit/aa558f616acbda37c8c8f7e8e3bc22527efe4740)) +* **unity-bootstrap-theme:** removed padding right from the blockquote css ([ff90b82](https://github.com/ASU/asu-unity-stack/commit/ff90b828a645884d3ddb75e18b070aa2d82e40d3)) + # [@asu/unity-bootstrap-theme-v1.38.0](https://github.com/ASU/asu-unity-stack/compare/@asu/unity-bootstrap-theme-v1.37.4...@asu/unity-bootstrap-theme-v1.38.0) (2026-04-21) diff --git a/packages/unity-bootstrap-theme/package.json b/packages/unity-bootstrap-theme/package.json index c177332557..afeccf4a1c 100644 --- a/packages/unity-bootstrap-theme/package.json +++ b/packages/unity-bootstrap-theme/package.json @@ -1,6 +1,6 @@ { "name": "@asu/unity-bootstrap-theme", - "version": "1.38.0", + "version": "1.38.1", "description": "Please see @asu/unity-react-core for up-to-date stories and examples.\nBase UI theme for ASU Web Standards 2.0 developed with Bootstrap 5", "homepage": "https://github.com/ASU/asu-unity-stack#readme", "license": "MIT", From 0308ab7398f79612308910f1cdf194a8301ecb53 Mon Sep 17 00:00:00 2001 From: Michael Webber Date: Fri, 22 May 2026 11:16:10 -0700 Subject: [PATCH 09/11] fix(unity-react-core): bullet accessibility updates for uds 2150 and 2152 --- .../components/BaseCarousel/glide/glide.setup.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js index e673b35a2f..ee5a54f8a3 100644 --- a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js +++ b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js @@ -307,6 +307,19 @@ function setupCaroarousel({ // We use event listeners to clear and set class names to show/hide // gradients when at the start, middle or end of a slider. setNavButtonGradient(gliderElement, currentIndex, buttonCount); + + // Update bullet accessibility + const bullets = gliderElement.querySelectorAll(".glide__bullet"); + for (let i = 0; i < bullets.length; i++){ + if (i === currentIndex){ + bullets[i].disabled = true; + bullets[i].setAttribute("aria-current","true"); + } else { + bullets[i].disabled = undefined; + bullets[i].setAttribute("aria-current","false"); + } + } + // set the current index gliderElement.setAttribute("data-current-index", currentIndex); onItemClick && onItemClick(currentIndex); From 76d09341102230fb4ef6d2abb74b21d2954abb03 Mon Sep 17 00:00:00 2001 From: Michael Webber Date: Fri, 22 May 2026 16:04:52 -0700 Subject: [PATCH 10/11] fix(unity-react-core): carousel: Accessible Structure & Naming uds-2149 --- .../BaseCarousel/glide/glide.setup.js | 119 ++++++++++++------ .../core/components/BaseCarousel/index.jsx | 6 +- 2 files changed, 83 insertions(+), 42 deletions(-) diff --git a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js index ee5a54f8a3..5602ba5e84 100644 --- a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js +++ b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js @@ -77,35 +77,35 @@ function buildConfig(perView = 1, isFullWidth, hasPeek = true, isDraggable) { breakpoints: isFullWidth ? null : { - 576: { - // BS4 sm - perView: perViewSm, - peek: smallPeek, - }, - 768: { - // BS4 md - perView: perViewMd, - peek: smallPeek, - }, - 992: { - // BS4 lg - perView: perViewLg, - peek: smallPeek, - }, - 1260: { - // BS4 xl - perView: perViewLg, - peek: smallPeek, - }, - 1400: { - perView: perViewLg, - peek: largePeek, - }, - 1920: { - perView: perViewLg, - peek: largePeek, - }, + 576: { + // BS4 sm + perView: perViewSm, + peek: smallPeek, }, + 768: { + // BS4 md + perView: perViewMd, + peek: smallPeek, + }, + 992: { + // BS4 lg + perView: perViewLg, + peek: smallPeek, + }, + 1260: { + // BS4 xl + perView: perViewLg, + peek: smallPeek, + }, + 1400: { + perView: perViewLg, + peek: largePeek, + }, + 1920: { + perView: perViewLg, + peek: largePeek, + }, + }, }; } @@ -293,14 +293,12 @@ function setupCaroarousel({ imageNavLeft; if (currentIndex === 0 || currentSlideLeft <= 0 + viewPadding) { - imageGalleryNav.style.left = `${ - currentLeft - currentSlideLeft + viewPadding - }px`; + imageGalleryNav.style.left = `${currentLeft - currentSlideLeft + viewPadding + }px`; } else if (currentSlideRight >= fullNavWidth - viewPadding) { const outsideAmount = currentSlideRight - fullNavWidth; - imageGalleryNav.style.left = `${ - currentLeft - outsideAmount - viewPadding - }px`; + imageGalleryNav.style.left = `${currentLeft - outsideAmount - viewPadding + }px`; } } @@ -308,18 +306,59 @@ function setupCaroarousel({ // gradients when at the start, middle or end of a slider. setNavButtonGradient(gliderElement, currentIndex, buttonCount); + + // Set the main container with aria-labelledby with the header of the active card + const slides = gliderElement.querySelectorAll(".slider"); + + // Getting the text from the main header tag + //source: https://stackoverflow.com/questions/67134998/javascript-recursion-to-get-innertext + function getText(node, accumulator) { + if (node.nodeType === 3) { // 3 == text node + accumulator.push(node.nodeValue) + } else { + for (let child of node.childNodes) + getText(child, accumulator) + } + } + + for (let i = 0; i < slides.length; i++) { + if (i === currentIndex) { + + // Find the main h tag in the card if one exists + let header; + for (let j = 1; j < 9; j++) { + if (!header) { + header = slides[i].querySelector(`h${j}`); + } + } + + if (header) { + let allTexts = [] + getText(slides[i], allTexts) + gliderElement.setAttribute("aria-labelledby", allTexts[0]); + gliderElement.removeAttribute("aria-label"); + } else { + gliderElement.setAttribute("aria-label", `Card ${i + 1}`); + gliderElement.removeAttribute("aria-labelledby"); + } + + } + } + + // Update bullet accessibility const bullets = gliderElement.querySelectorAll(".glide__bullet"); - for (let i = 0; i < bullets.length; i++){ - if (i === currentIndex){ - bullets[i].disabled = true; - bullets[i].setAttribute("aria-current","true"); + for (let i = 0; i < bullets.length; i++) { + if (i === currentIndex) { + bullets[i].setAttribute("disabled", ""); + bullets[i].setAttribute("aria-current", "true"); } else { - bullets[i].disabled = undefined; - bullets[i].setAttribute("aria-current","false"); + bullets[i].removeAttribute("disabled"); + bullets[i].setAttribute("aria-current", "false"); } } + // set the current index gliderElement.setAttribute("data-current-index", currentIndex); onItemClick && onItemClick(currentIndex); diff --git a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/index.jsx b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/index.jsx index 4442ccf4fa..ec3c391e49 100644 --- a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/index.jsx +++ b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/index.jsx @@ -77,9 +77,10 @@ const BaseCarousel = ({ return (
From b9fa0888325af741145462b3204c01cfc33b9872 Mon Sep 17 00:00:00 2001 From: Michael Webber Date: Tue, 16 Jun 2026 09:44:51 -0700 Subject: [PATCH 11/11] aria-live polite card update --- .../core/components/BaseCarousel/glide/glide.setup.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js index 5602ba5e84..2eb5f7ef1e 100644 --- a/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js +++ b/packages/unity-react-core/src/components/ComponentCarousel/core/components/BaseCarousel/glide/glide.setup.js @@ -332,6 +332,13 @@ function setupCaroarousel({ } } + let cardDiv = slides[i].querySelectorAll(`.card`) + if (cardDiv && cardDiv[0]) { + cardDiv[0].setAttribute("aria-live", "polite"); + cardDiv[0].setAttribute("role", "alert"); + } + + if (header) { let allTexts = [] getText(slides[i], allTexts) @@ -342,6 +349,8 @@ function setupCaroarousel({ gliderElement.removeAttribute("aria-labelledby"); } + // slides[i].focus(); + } }