Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
a072968
feat(unity-react-core): modal auto focus and disabled tab to content …
spaceperson Aug 5, 2026
abaad47
feat(unity-react-core): close modal on backdrop and children props up…
spaceperson Aug 12, 2026
3526760
fix(app-webdir-ui): render profile card title as bold text instead of h4
juanmitriatti Jul 17, 2026
9b209f1
fix(app-webdir-ui): fix alpha scrolling
scott-williams-az Jul 24, 2026
f581977
chore(release): 5.0.16 [skip ci]
semantic-release-bot Jul 25, 2026
be2e486
fix(app-webdir-ui): fix nav controls and anon image for webdir
davidornelas11 Jul 27, 2026
2c028cb
fix(unity-react-core): restore nav-control styles and stop bundling r…
davidornelas11 Jul 27, 2026
832cd8c
fix(app-rfi): correct stale @asu/unity-bootstrap-theme and @asu/unity…
davidornelas11 Jul 27, 2026
2f2152b
fix(component-events): correct stale @asu/unity-react-core dependency…
davidornelas11 Jul 27, 2026
a9fe2de
fix(component-news): correct stale @asu/unity-react-core dependency r…
davidornelas11 Jul 27, 2026
d711bec
fix(static-site): correct stale @asu/unity-bootstrap-theme dependency…
davidornelas11 Jul 27, 2026
f9a6f9e
fix(app-degree-pages): correct stale @asu/unity-react-core dependency…
davidornelas11 Jul 27, 2026
dd06802
chore(app-webdir-ui): add proxy server to allow api with local dev
scott-williams-az Jul 28, 2026
de8861e
chore(app-webdir-ui): environment files were not included
scott-williams-az Jul 28, 2026
22c0538
chore(app-webdir-ui): removed long paths in favor of wildcard paths
scott-williams-az Jul 28, 2026
97b6c26
chore(app-webdir-ui): update readme
scott-williams-az Jul 28, 2026
98870cb
chore(release): 2.1.1 [skip ci]
semantic-release-bot Jul 28, 2026
45b9648
chore(release): 3.2.3 [skip ci]
semantic-release-bot Jul 28, 2026
eea9bef
chore(release): 3.10.3 [skip ci]
semantic-release-bot Jul 28, 2026
811aecf
chore(release): 5.0.17 [skip ci]
semantic-release-bot Jul 28, 2026
dcc4812
chore(release): 3.2.1 [skip ci]
semantic-release-bot Jul 28, 2026
258ed34
chore(release): 4.2.2 [skip ci]
semantic-release-bot Jul 28, 2026
159fe25
fix(unity-bootstrap-theme): fix modal close button focus style issue
davidornelas11 Jul 29, 2026
07ad881
chore(release): 2.2.0 [skip ci]
semantic-release-bot Jul 29, 2026
bf30980
chore(release): 2.2.0 [skip ci]
semantic-release-bot Jul 29, 2026
fc9eba6
fix(unity-bootstrap-theme): allow ordered lists to be reversed
tbutterf Jul 28, 2026
14af541
chore(release): 2.2.1 [skip ci]
semantic-release-bot Jul 30, 2026
150d2fb
fix(component-header-footer): fixed large headers not wrapping on sma…
spaceperson Jul 24, 2026
e885f97
chore(release): 1.4.6 [skip ci]
semantic-release-bot Jul 31, 2026
53a38d2
fix(unity-bootstrap-theme): tabindex update for hover cards
spaceperson Jul 24, 2026
3ea733c
fix(unity-bootstrap-theme): add unity defgault focus ring to hover card
davidornelas11 Aug 3, 2026
64acc34
chore(release): 2.2.2 [skip ci]
semantic-release-bot Aug 3, 2026
8b0ff05
chore: update kiro acp-reviewer model
mlsamuelson Aug 6, 2026
488d7fa
build(deps): bump undici from 6.27.0 to 6.28.0
dependabot[bot] Aug 3, 2026
830ac75
chore(release): 2.2.3 [skip ci]
semantic-release-bot Aug 6, 2026
fe291f1
chore(release): 2.2.1 [skip ci]
semantic-release-bot Aug 6, 2026
d718132
chore(release): 5.0.18 [skip ci]
semantic-release-bot Aug 7, 2026
b6abc70
fix(app-degree-pages): delete degree detail page component
oatkar Jul 7, 2026
f2ccc0a
fix(app-degree-pages): fix relative path in Breadcrumbs import
davidornelas11 Aug 6, 2026
d64b5fd
chore(app-degree-pages): remove unused code
davidornelas11 Aug 6, 2026
35dc634
chore(release): 3.2.4 [skip ci]
semantic-release-bot Aug 7, 2026
8bf8112
feat(unity-react-core): custom button, input, and modal state handlin…
spaceperson Aug 18, 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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,9 @@ tests/__image_snapshots__/__diff_output__
!.yarn/versions
*.env.*
!.env.yarn.example
!.env.example
!.env.development
!.env.production

# --- Adversarial coding pipeline (project-local .kiro) ---
# Committed: .kiro/agents, .kiro/skills, .kiro/hooks, .kiro/scripts,
Expand Down
5 changes: 3 additions & 2 deletions .kiro/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,9 @@ Validate manually with `.kiro/scripts/validate-handoff.sh <path>`.

## Notes

- Models are foundry defaults (Opus architect/orchestrator, Sonnet coder, GLM
reviewer, Sonnet vision). If a model id isn't available in your Kiro, it falls
- Models are foundry defaults (Opus architect/orchestrator, Sonnet coder, GPT
reviewer, Sonnet vision). The reviewer uses a non-Anthropic family on purpose
for adversarial model diversity. If a model id isn't available in your Kiro, it falls
back to the default — adjust `model` in `agents/acp-*.json` as needed.
- `asu-brand` / `asu-design-a11y` are shared with Webspark (this copy is
canonical). `asu-brand` is a candidate to upstream to the foundry later.
2 changes: 1 addition & 1 deletion .kiro/agents/acp-reviewer.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "acp-reviewer",
"model": "glm-5",
"model": "gpt-5.6-terra",
"description": "Three-phase adversarial code reviewer: spec compliance, attack surface analysis, and QA verification.",
"prompt": "file://prompts/reviewer.md",
"tools": ["fs_read", "execute_bash", "grep", "glob", "code"],
Expand Down
15 changes: 15 additions & 0 deletions packages/app-degree-pages/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
# [@asu/app-degree-pages-v3.2.4](https://github.com/asu/asu-unity-stack/compare/@asu/app-degree-pages-v3.2.3...@asu/app-degree-pages-v3.2.4) (2026-08-07)


### Bug Fixes

* **app-degree-pages:** delete degree detail page component ([83e8992](https://github.com/asu/asu-unity-stack/commit/83e8992e36c56dd89994714f11b37f0fb211477f))
* **app-degree-pages:** fix relative path in Breadcrumbs import ([83338bf](https://github.com/asu/asu-unity-stack/commit/83338bf96a814708024bf9c5c3f194367e99eede))

# [@asu/app-degree-pages-v3.2.3](https://github.com/asu/asu-unity-stack/compare/@asu/app-degree-pages-v3.2.2...@asu/app-degree-pages-v3.2.3) (2026-07-28)


### Bug Fixes

* **app-degree-pages:** correct stale @asu/unity-react-core dependency range ([81ce102](https://github.com/asu/asu-unity-stack/commit/81ce102c79ab8f5e299d1bb4d50e38af2cd71a58))

# [@asu/app-degree-pages-v3.2.2](https://github.com/asu/asu-unity-stack/compare/@asu/app-degree-pages-v3.2.1...@asu/app-degree-pages-v3.2.2) (2026-07-07)


Expand Down
4 changes: 2 additions & 2 deletions packages/app-degree-pages/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@asu/app-degree-pages",
"version": "3.2.2",
"version": "3.2.4",
"description": "ASU implementation of degree pages",
"main": "./dist/degreePages.cjs.js",
"browser": "./dist/degreePages.umd.js",
Expand Down Expand Up @@ -43,7 +43,7 @@
"postdocs": "node ../../scripts/process-readme-props.js"
},
"dependencies": {
"@asu/unity-react-core": "^1.0.0",
"@asu/unity-react-core": "^2.0.0",
"@popperjs/core": "^2.9.2",
"classnames": "^2.3.1",
"prop-types": "^15.7.2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import {
} from "../../core/models/app-prop-types";
import { filterData, sortPrograms } from "../../core/services";
import { urlResolver } from "../../core/utils";
import { Breadcrumbs } from "../DetailPage/components/Breadcrumbs";
import { Breadcrumbs } from "../../core/components/Breadcrumbs";
import { BrowseTitle } from "./components/BrowseTitle";
import { Filters, INITIAL_FILTER_STATE } from "./components/Filters";
import { FiltersSummary } from "./components/FiltersSummary";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// @ts-check
import { idGenerator } from "@asu/shared";
import PropTypes from "prop-types";
import React from "react";

import { linkPropShape } from "../../../core/models";
import { trackGAEvent } from "../../../core/services/google-analytics";

/**
*
* @param {{
* breadcrumbs: import("src/core/types/detail-page-types").BreadcrumbItem [],
* section: string
* }} param0
* @returns
*/
function Breadcrumbs({ breadcrumbs, section }) {
const genId = idGenerator("breadcrumb-");

return (
breadcrumbs && (
<nav aria-label="breadcrumbs" data-testid="breadcrumbs">
<ol className="breadcrumb bg-white">
{breadcrumbs.map(bread =>
bread?.isActive ? (
<li
key={genId.next().value}
className="breadcrumb-item active"
aria-current="page"
>
<a
href={bread?.url}
onClick={() =>
trackGAEvent({
event: "link",
action: "click",
name: "onclick",
type: "internal link",
region: "main content",
section,
text: bread.text,
})
}
>
{bread.text}
</a>
</li>
) : (
<li key={genId.next().value} className="breadcrumb-item">
<a
href={bread?.url}
onClick={() =>
trackGAEvent({
event: "link",
action: "click",
name: "onclick",
type: "internal link",
region: "main content",
section,
text: bread.text,
})
}
>
{bread.text}
</a>
</li>
)
)}
</ol>
</nav>
)
);
}

Breadcrumbs.propTypes = {
breadcrumbs: PropTypes.arrayOf(linkPropShape),
section: PropTypes.string,
};

export { Breadcrumbs };
1 change: 1 addition & 0 deletions packages/app-degree-pages/src/core/components/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ export * from "./OverlapContentImage";
export * from "./ParagrapList";
export * from "./Styles";
export * from "./icons";
export * from "./Breadcrumbs";
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
// @ts-check

import { title } from "process";

const tagHeadings = {
h1: "h1",
h2: "h2",
Expand Down
1 change: 0 additions & 1 deletion packages/app-degree-pages/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,4 @@
export * from "./components";
export {
initListingPage,
initProgramDetailPage,
} from "./core/utils/init-page-degree";
7 changes: 7 additions & 0 deletions packages/app-rfi/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# [@asu/app-rfi-v3.10.3](https://github.com/asu/asu-unity-stack/compare/@asu/app-rfi-v3.10.2...@asu/app-rfi-v3.10.3) (2026-07-28)


### Bug Fixes

* **app-rfi:** correct stale @asu/unity-bootstrap-theme and @asu/unity-react-core dependency ranges ([7214d47](https://github.com/asu/asu-unity-stack/commit/7214d478609d54a14d9ff30e10363d9015f04a84))

# [@asu/app-rfi-v3.10.2](https://github.com/asu/asu-unity-stack/compare/@asu/app-rfi-v3.10.1...@asu/app-rfi-v3.10.2) (2026-07-01)


Expand Down
6 changes: 3 additions & 3 deletions packages/app-rfi/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@asu/app-rfi",
"version": "3.10.2",
"version": "3.10.3",
"description": "ASU Request For Information (RFI) form",
"main": "./dist/appRfi.cjs.js",
"browser": "./dist/appRfi.umd.js",
Expand Down Expand Up @@ -44,7 +44,7 @@
},
"devDependencies": {
"@asu/shared": "*",
"@asu/unity-bootstrap-theme": "^1.0.0",
"@asu/unity-bootstrap-theme": "*",
"@babel/core": "^7.13.14",
"@babel/eslint-parser": "^7.13.14",
"@babel/plugin-proposal-class-properties": "^7.13.0",
Expand Down Expand Up @@ -79,7 +79,7 @@
"webpack-merge": "^5.8.0"
},
"dependencies": {
"@asu/unity-react-core": "^1.0.0",
"@asu/unity-react-core": "^2.0.0",
"formik": "^2.1.4",
"prop-types": "^15.7.2",
"react-phone-input-2": "2.15.1",
Expand Down
11 changes: 11 additions & 0 deletions packages/app-webdir-ui/.env.development
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Web Directory UI - Development Environment Configuration
#
# This file is loaded by Vite when running `yarn storybook:dev`
# It enables the backend API proxy for real data testing in Storybook

# Local proxy server port used by `node server.js`
PORT=3000

# Search engine request base URL + version used by Storybook stories
VITE_API_URL=http://localhost:${PORT}/
VITE_SEARCH_API_VERSION=api/v1/
13 changes: 13 additions & 0 deletions packages/app-webdir-ui/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Web Directory UI - Environment Configuration Template
#
# Copy this file to:
# - .env.development (git-tracked, shared dev defaults)
# - .env.local (git-ignored, personal overrides)

# Local proxy server port used by `node server.js`
# PORT=3000

# API_URL + searchApiVersion used by stories/components
# Default base URL + version pair:
# VITE_API_URL=http://localhost:${PORT}/
# VITE_SEARCH_API_VERSION=/api/v1/
5 changes: 5 additions & 0 deletions packages/app-webdir-ui/.env.production
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Web Directory UI - Storybook build environment
# Loaded by the build-storybook script for deterministic static build config.

VITE_API_URL=https://asuapp2dev.prod.acquia-sites.com/
VITE_SEARCH_API_VERSION=api/v1/
4 changes: 4 additions & 0 deletions packages/app-webdir-ui/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,7 @@ package-lock.json
yarn-lock.json
docs/**
!docs/README.props.md

# Environment overrides (personal/local config)
.env.local
.env*.local
97 changes: 95 additions & 2 deletions packages/app-webdir-ui/.storybook/main.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,113 @@
import { dirname } from "path";
import { existsSync, readFileSync } from "fs";
import { dirname, resolve } from "path";
import { fileURLToPath } from "url";

function getAbsolutePath(value) {
return dirname(fileURLToPath(import.meta.resolve(value)));
}

const storybookDir = dirname(fileURLToPath(import.meta.url));
const packageRoot = resolve(storybookDir, "..");

function loadEnvFile(filePath) {
if (!existsSync(filePath)) {
return;
}

const fileContent = readFileSync(filePath, "utf8");
for (const rawLine of fileContent.split(/\r?\n/)) {
const line = rawLine.trim();
if (!line || line.startsWith("#")) {
continue;
}

const separatorIndex = line.indexOf("=");
if (separatorIndex < 0) {
continue;
}

const key = line.slice(0, separatorIndex).trim();
if (!key || process.env[key] !== undefined) {
continue;
}

const value = line.slice(separatorIndex + 1).trim();
process.env[key] = value.replace(/^['"]|['"]$/g, "");
}
}

function loadStorybookEnv(configType) {
const envFileName =
configType === "PRODUCTION" ? ".env.production" : ".env.development";
loadEnvFile(resolve(packageRoot, envFileName));
}

const config = {
addons: [
fileURLToPath(import.meta.resolve("../../../.storybook-config/index.js")),
fileURLToPath(import.meta.resolve("../../../.storybook-config/dataLayerListener/index.js")),
fileURLToPath(
import.meta
.resolve("../../../.storybook-config/dataLayerListener/index.js")
),
getAbsolutePath("@storybook/addon-a11y"),
],
stories: ["../src/**/*.stories.js"],
framework: {
name: getAbsolutePath("@storybook/react-vite"),
},
/**
* Configure Vite proxy for real API data in dev environment.
* Proxy target is read from env as VITE_API_URL + VITE_SEARCH_API_VERSION.
* Proxy only API routes to avoid intercepting Storybook/Vite internal assets.
*/
viteFinal: async (config, { configType }) => {
loadStorybookEnv(configType);

const apiUrl = process.env.VITE_API_URL;
const searchApiVersion = process.env.VITE_SEARCH_API_VERSION;
const target = `${apiUrl || ""}${searchApiVersion || ""}`;
const apiPath = `/${(searchApiVersion || "")
.replace(/^\/+/, "")
.replace(/\/+$/, "")}`;

if (!target) {
throw new Error(
"Missing Storybook proxy target. Set VITE_API_URL and VITE_SEARCH_API_VERSION in env files."
);
}

config.server = config.server || {};
config.server.proxy = {
[apiPath]: {
target,
changeOrigin: true,
secure: false,
logLevel: "info",
},
"/session/token": {
target,
changeOrigin: true,
secure: false,
logLevel: "info",
},
"/webdir-profiles": {
target,
changeOrigin: true,
secure: false,
logLevel: "info",
},
};

config.optimizeDeps = config.optimizeDeps || {};
config.optimizeDeps.esbuildOptions =
config.optimizeDeps.esbuildOptions || {};
config.optimizeDeps.esbuildOptions.loader = {
...(config.optimizeDeps.esbuildOptions.loader || {}),
".js": "jsx",
};

return config;
},
};

export default config;
Loading