Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
432f0dc
feat(unity-react-core): escape key listener to close modals
spaceperson Jun 16, 2026
a08b69e
feat(unity-react-core): modal role aria-modal and aria-labeledby updates
spaceperson Jun 16, 2026
924092e
feat(unity-react-core): modal input focus on open
spaceperson Jun 19, 2026
f562fe9
build(deps-dev): bump @vitest/browser from 4.1.6 to 4.1.8
dependabot[bot] Jun 15, 2026
dd71014
build(deps-dev): bump dompurify from 3.4.5 to 3.4.9
dependabot[bot] Jun 15, 2026
cce6995
fix(app-rfi): bumps dompurify from 3.4.5 to 3.4.10
scott-williams-az Jun 18, 2026
4abb9ad
fix(app-degree-pages): bumps @vitest/browser from 4.1.6 to 4.1.9
scott-williams-az Jun 18, 2026
6690e24
fix(unity-react-core): bumps @vitest/browser from 4.1.6 to 4.1.9
scott-williams-az Jun 18, 2026
e864c91
chore(release): 1.11.3 [skip ci]
semantic-release-bot Jun 18, 2026
ae74bcd
chore(release): 3.2.1 [skip ci]
semantic-release-bot Jun 18, 2026
76f2210
chore(release): 3.10.1 [skip ci]
semantic-release-bot Jun 18, 2026
45dddc7
chore(unity-react-core): keep react-dom/server out of SB manager
davidornelas11 Jun 18, 2026
034ecfb
feat(unity-bootstrap-theme): modal escape key and focus element updates
spaceperson Jun 19, 2026
6eed3a9
chore(deps): force pipeline rebuild
Copilot Jun 22, 2026
5ff4373
merge dev into uds-2211 and resolve conflicts
Copilot Jul 6, 2026
13b29f8
fix(unity-bootstrap-theme): linter format fix
spaceperson Jul 21, 2026
aa710a2
fix(static-site): @asu/unity-react-core version update fix
spaceperson Jul 21, 2026
08346b8
chore: force rebuild
Copilot Jul 21, 2026
c939eaa
fix(component-header-footer): fix arbitrary timeout in header submit …
davidornelas11 Jun 4, 2026
2b7a889
Update comment for fallback submission in Search component
davidornelas11 Jun 26, 2026
37bfc0e
chore: fix merge conflict
scott-williams-az Jul 6, 2026
40b6d36
chore(release): 1.4.5 [skip ci]
semantic-release-bot Jul 6, 2026
fe89215
build(deps-dev): bump vite from 6.4.2 to 6.4.3
dependabot[bot] Jun 25, 2026
be04abc
fix(app-degree-pages): degree links point to degree search degree pages
oatkar Jul 1, 2026
43ae555
fix(app-degree-pages): use DOMAIN_URL constant here
oatkar Jul 2, 2026
0a4033a
fix(app-degree-pages): render plain text instead of empty link for ed…
oatkar Jul 2, 2026
e213abe
chore(release): 3.2.2 [skip ci]
semantic-release-bot Jul 7, 2026
cc4a6e8
fix(anchor-menu): keep sticky menu keyboard-reachable at 200% zoom
juanmitriatti Jun 9, 2026
2d67b09
chore(release): 1.39.5 [skip ci]
semantic-release-bot Jul 7, 2026
8b452e4
chore(pipeline): add project-local adversarial coding pipeline (Stage…
mlsamuelson Jun 26, 2026
a30ba68
fix(pipeline): make steering resource path agent-dir-relative
mlsamuelson Jun 29, 2026
07c711b
docs(pipeline): note JSDoc catharsis type syntax in unity-components …
mlsamuelson Jun 29, 2026
bc135ee
chore(pipeline): use env-var references for Atlassian usernames
mlsamuelson Jun 29, 2026
506167c
feat(pipeline): retain .pipeline reports (archive + Jira) and add han…
mlsamuelson Jul 1, 2026
b56c97e
chore: update ACP kiro docs
davidornelas11 Jul 8, 2026
edde15a
feat(component-events): expose configurable noFeedText prop
juanmitriatti Jun 16, 2026
c9f2ded
chore(component-events): drop manual version bump and changelog entry
juanmitriatti Jul 8, 2026
9b166de
fix(component-events): fall back to default noFeedText when blank
juanmitriatti Jul 8, 2026
e4f6da2
chore(release): 3.2.0 [skip ci]
semantic-release-bot Jul 14, 2026
eb893ea
fix(unity-bootstrap-theme): keep hero CTA inside the hero box below m…
juanmitriatti Jul 10, 2026
c5223cd
chore(release): 1.39.6 [skip ci]
semantic-release-bot Jul 14, 2026
1578a0c
fix(unity-bootstrap-theme): add bottom spacing to hero-sm title when …
juanmitriatti Jul 12, 2026
db7dd46
chore(release): 1.39.7 [skip ci]
semantic-release-bot Jul 14, 2026
78b181d
docs(unity-react-core): add todos for tabbed panels
davidornelas11 Dec 19, 2025
deee483
fix(unity-react-core): toDo 1.1
oatkar Dec 22, 2025
b0405aa
fix(unity-react-core): to do 1.2
oatkar Jan 2, 2026
05bf02e
docs: add review notes
davidornelas11 Jan 6, 2026
48bc94d
fix(unity-react-core): changes
oatkar Jan 22, 2026
ad48160
feat(unity-react-core): toDo 1.3
oatkar Jan 29, 2026
616abfe
fix(unity-react-core): 2.1
oatkar Mar 17, 2026
f263d26
fix(unity-react-core): 2.1 changes
oatkar Mar 17, 2026
1c8af21
fix(unity-react-core): 2.2 with changes in tabheader.jsx file
oatkar Mar 18, 2026
83301e0
fix(unity-react-core): fix two issues in pr
oatkar Mar 24, 2026
67299bb
feat(unity-react-core): tODO 2.3
oatkar Apr 1, 2026
6c49e76
feat(unity-bootstrap-theme): tODO 3.1
oatkar Apr 1, 2026
66f7d15
fix(unity-bootstrap-theme): todo 3.2
oatkar Apr 1, 2026
8ad4bb3
fix(unity-bootstrap-theme): todo 3.3, changed MoreDropdown.js to fit …
oatkar Apr 1, 2026
0f3f01f
feat(unity-bootstrap-theme): todo 3.2
oatkar Apr 3, 2026
f716cd7
feat(unity-react-core): phase 4
oatkar Apr 7, 2026
d82150f
fix(unity-react-core): toDo 5.1
oatkar Apr 10, 2026
cb341c3
fix(unity-react-core): toDo 5.2
oatkar Apr 10, 2026
19964dd
fix(unity-react-core): final design before completing all tests
oatkar Apr 13, 2026
dd1f9d8
fix(unity-react-core): final design before completeing tests
oatkar Apr 13, 2026
029b028
fix(unity-react-core): added scrolling feature
oatkar Apr 13, 2026
42eaa75
fix(unity-react-core): scrolling feature final
oatkar Apr 13, 2026
001be6a
fix(unity-react-core): changes made after review
oatkar Apr 23, 2026
3ee6cfb
feat(unity-react-core): tabbed Panel Rewrite
davidornelas11 May 13, 2026
8bd6101
feat(unity-react-core): rewrite tabbed panels
davidornelas11 May 13, 2026
985ebbc
feat(unity-bootstrap-theme): tabbed panel rewrite
davidornelas11 May 13, 2026
df18991
chore(unity-react-core): add ts ignore for story file
davidornelas11 May 14, 2026
5f97b35
fix(unity-react-core): add NavControls for app-webdir-ui use
davidornelas11 May 14, 2026
9ddc200
chore(unity-react-core): add stories to tsconfig ignore since dev only
davidornelas11 May 14, 2026
2911cfd
fix(unity-react-core): readd stories to Typescript config
davidornelas11 May 14, 2026
6057b7c
chore(unity-react-core): update imported packages
davidornelas11 May 14, 2026
11d5a40
chore(unity-react-core): update yarn lock
davidornelas11 May 14, 2026
650f1d8
docs(unity-react-core): add story controls to tabbed panel story
davidornelas11 May 14, 2026
ae58d28
fix(unity-bootstrap-theme): update tabbed panel JS
davidornelas11 May 14, 2026
7ced387
fix(unity-bootstrap-theme): update tabbed panel JS and styles
davidornelas11 May 14, 2026
bfe6d34
fix(unity-react-core): remove focus on more tabbed panel click
davidornelas11 May 14, 2026
49697eb
style(unity-bootstrap-theme): linting
davidornelas11 May 14, 2026
e825ded
fix(unity-bootstrap-theme): fix safari dropdown issue in tab panels
davidornelas11 May 15, 2026
135edbc
fix(unity-bootstrap-theme): update tabbed panel JS
davidornelas11 May 15, 2026
db498c2
fix(unity-react-core): update tabbed panels markup
davidornelas11 May 15, 2026
52beb5a
chore(unity-react-core): linting
davidornelas11 May 15, 2026
d7d3e69
fix(unity-react-core): update dropdown for tabbed panel placement
davidornelas11 Jun 4, 2026
7fa19ed
fix(unity-bootstrap-theme): update tabbed panel JS to mimic react ver…
davidornelas11 Jun 4, 2026
6ac7a8f
fix(unity-bootstrap-theme): update tabbed panel JS
davidornelas11 Jun 4, 2026
509759c
fix(unity-react-core): update tabbed panel logic
davidornelas11 Jun 4, 2026
944dff2
fix(app-degree-pages): degree links point to degree search degree pages
oatkar Jun 30, 2026
759db72
Revert "fix(app-degree-pages): degree links point to degree search de…
davidornelas11 Jun 30, 2026
83c2ca9
fix(unity-react-core): address tabbed panel pr comments
davidornelas11 Jul 1, 2026
016ab11
fix(unity-react-core): fix resize issue with react tabbed panel
davidornelas11 Jul 8, 2026
0f75832
fix(unity-react-core): fix react more dropdown disappearing
davidornelas11 Jul 17, 2026
df68055
fix(unity-bootstrap-theme): update bootstrap tabbed panels JS and styles
davidornelas11 Jul 17, 2026
fe4ceac
chore(release): 2.0.0 [skip ci]
semantic-release-bot Jul 17, 2026
d2c8788
chore(release): 2.0.0 [skip ci]
semantic-release-bot Jul 17, 2026
e049b16
fix(unity-bootstrap-theme): gold maroon gray and dark hover button br…
spaceperson Jul 3, 2026
f45baef
feat(unity-react-core): replaced fa-exlamation-triangle with fa-check…
spaceperson Jul 21, 2026
c8be34d
fix(unity-bootstrap-theme): fix for linting error
spaceperson Jul 21, 2026
018ccba
fix(unity-bootstrap-theme): linter error fix
spaceperson Jul 21, 2026
45a35c3
revert(shared): revert yarn.lock changes
spaceperson Jul 21, 2026
2e0f272
revert(shared): revert the revert of the yarn.lock file
spaceperson Jul 21, 2026
2eb7b56
fix(static-site): @asu/unity-react-core dependency version update
spaceperson Jul 21, 2026
8c243a8
chore(release): 2.1.0 [skip ci]
semantic-release-bot Jul 22, 2026
521e3fe
chore(release): 2.1.0 [skip ci]
semantic-release-bot Jul 22, 2026
60dcba1
fix(unity-bootstrap-theme): fix a11y issue min btn area if container …
scott-williams-az Jul 17, 2026
1a94a4c
chore(release): 2.1.1 [skip ci]
semantic-release-bot Jul 22, 2026
6a729e1
build(deps-dev): bump @vitest/browser from 4.1.6 to 4.1.8
dependabot[bot] Jun 15, 2026
b858c03
build(deps-dev): bump dompurify from 3.4.5 to 3.4.9
dependabot[bot] Jun 15, 2026
6b6cd14
fix(unity-react-core): bumps @vitest/browser from 4.1.6 to 4.1.9
scott-williams-az Jun 18, 2026
62f5e76
chore(release): 1.11.3 [skip ci]
semantic-release-bot Jun 18, 2026
125740a
chore(release): 3.2.1 [skip ci]
semantic-release-bot Jun 18, 2026
820e237
chore(release): 3.10.1 [skip ci]
semantic-release-bot Jun 18, 2026
d79b933
chore: resolve merge conflicts
Copilot Jul 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# ASU Unity Design System (UDS)


## Table of Contents

- [ASU Unity Design System (UDS)](#asu-unity-design-system-uds)
Expand Down Expand Up @@ -441,3 +442,4 @@ Read contribution guide here: [CONTRIBUTING.md](./CONTRIBUTING.md)
### See [here](https://docs.github.com/en/actions/guides/publishing-nodejs-packages) for more information about publishing packages

### See [the top answer on this stackoverflow question](https://stackoverflow.com/questions/62819489/github-actions-why-build-with-different-node-versions) for why you may want to build against multiple node versions. Probably unnecessary for this workflow.

6 changes: 6 additions & 0 deletions packages/unity-bootstrap-theme/src/js/modals.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,19 @@ function initModals() {
.getElementById("openModalButton")
?.addEventListener("click", function () {
document.getElementById("uds-modal").classList.add("open");
document.getElementById("closeModalButton").focus();
});

document
.getElementById("closeModalButton")
?.addEventListener("click", function () {
document.getElementById("uds-modal").classList.remove("open");
});

document?.addEventListener("keydown", function (event) {
event.key === "Escape" &&
document.getElementById("uds-modal").classList.remove("open");
});
}

EventHandler.on(window, "load.uds.modals", initModals);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,11 @@ const AnchorMenuWrapper = styled.div`
.mobile-menu-toggler {
background-color: transparent;
border: none;
padding: 0;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
text-align: inherit;
cursor: default;
h4,
h2 {
align-items: center;
}
i {
transition: all 0.3s;
}
Expand Down
53 changes: 52 additions & 1 deletion packages/unity-react-core/src/components/Modal/Modal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,62 @@ export const Modal: React.FC<ModalProps> = ({ open, gaData }) => {
const { isReact, isBootstrap } = useBaseSpecificFramework();
const [openState, setOpen] = React.useState(open);

const focusOnModalInput = () => {
//source: https://stackoverflow.com/questions/4195616/how-to-set-the-focus-on-a-javascript-modal-window
const focusableElements =
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
const modal = document.getElementsByClassName("uds-modal-container")[0];
const firstFocusableElement = modal?.querySelectorAll(focusableElements)[0];
const focusableContent = modal?.querySelectorAll(focusableElements);
const lastFocusableElement = focusableContent ? focusableContent[focusableContent?.length - 1] : undefined;

if (lastFocusableElement && firstFocusableElement) {
document.addEventListener('keydown', function (e) {
let isTabPressed = e.key === 'Tab' || e.keyCode === 9;

if (!isTabPressed) {
return;
}

if (e.shiftKey) { // if shift key pressed for shift + tab combination
if (document.activeElement === firstFocusableElement) {
(lastFocusableElement as HTMLElement)?.focus(); // add focus for the last focusable element
e.preventDefault();
}
} else { // if tab key is pressed
if (document.activeElement === lastFocusableElement) { // if focused has reached to last focusable element then focus first focusable element after pressing tab
(firstFocusableElement as HTMLElement)?.focus(); // add focus for the first focusable element
e.preventDefault();
}
}
});
(firstFocusableElement as HTMLElement)?.focus();
}
}

const handleOpen = () => {
setOpen(true);
focusOnModalInput();
};

const handleClose = () => {
setOpen(false);
};

useEffect(() => {
const handleKeyDown = (event) => {
if (event.key === 'Escape') setOpen(false); // Close on Esc key
};

if (openState) {
document.addEventListener('keydown', handleKeyDown);
}

return () => document.removeEventListener('keydown', handleKeyDown);
}, [openState, setOpen]);

const modalTitle = "Content";

return (
<div className="container-fluid">
<button
Expand All @@ -59,6 +107,9 @@ export const Modal: React.FC<ModalProps> = ({ open, gaData }) => {

{(openState || isBootstrap) && (
<div
role="dialog"
aria-modal="true"
aria-labelledby={modalTitle}
id="uds-modal"
className={classNames("uds-modal", { open: openState })}
>
Expand All @@ -73,7 +124,7 @@ export const Modal: React.FC<ModalProps> = ({ open, gaData }) => {
icon={["fas", "times"]}
/>
</GaEventWrapper>
<h1>Content</h1>
<h1>{modalTitle}</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod incididuntåç ut labore et dolore magna aliqua eiusmod
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ interface TabHeaderProps {
rightKeyPressed: () => void;
icon?: [string, string];
gaData?: GaEventData;
ref?: React.Ref<HTMLButtonElement>;
}

const TabHeader = ({ id, selected, isFocusEntry, title, selectTab, leftKeyPressed, rightKeyPressed, icon, gaData, ref }: TabHeaderProps) => {
const TabHeader = React.forwardRef<HTMLButtonElement, TabHeaderProps>(
({ id, selected, isFocusEntry, title, selectTab, leftKeyPressed, rightKeyPressed, icon, gaData }, ref) => {
const { isReact } = useBaseSpecificFramework();

const onKeyDown = (e: React.KeyboardEvent) => {
Expand Down Expand Up @@ -49,7 +49,10 @@ const TabHeader = ({ id, selected, isFocusEntry, title, selectTab, leftKeyPresse
</button>
</GaEventWrapper>
);
};
}
);

TabHeader.displayName = "TabHeader";

export { TabHeader };
export type { TabHeaderProps };