Skip to content

WIP: DONOT MERGE Staging to Production merge#94

Open
susrisha wants to merge 155 commits into
productionfrom
staging
Open

WIP: DONOT MERGE Staging to Production merge#94
susrisha wants to merge 155 commits into
productionfrom
staging

Conversation

@susrisha

Copy link
Copy Markdown
Collaborator

Merge from staging to production

cyrossignol and others added 30 commits March 9, 2026 22:14
Introduce TDEI branding: add tdei-logo.png, import Lato/Open Sans/Montserrat fonts, update theme primary color to #32006e, and add extensive utility CSS (color variables, button/link styles, layout helpers, accessibility focus styles) in main.scss. Replace many Bootstrap button/variant uses across components/pages with new tdei-* classes (tdei-primary-button, tdei-secondary-button, maroon-bg, tdei-primary-link) and adjust dialog button classes/confirm styles to match the new design system. These changes unify styling and apply the updated TDEI visual identity across the app.
Add new asset (osw-type.svg) and update global styles and pages to improve layout and mobile UX. Main changes:

- components/AppNavbar.vue: Rework navbar into a responsive, sticky header with a mobile side menu and updated user dropdown. Adds state and lifecycle hooks to manage mobile menu visibility, accessibility attributes, and dedicated mobile interactions (close button, backdrop, logout flow). Extensive SCSS added to style the navbar, side menu, and responsive behaviors.
- pages/index.vue: Make the primary CTA conditional on authentication (redirect to dashboard when signed in), import auth in the script, and update hero styling to use CSS variables and refined colors/hover states.
- assets/scss/main.scss: Update font imports (remove Lato, ensure Open Sans and Montserrat are imported).
- assets/img/osw-type.svg: Add new SVG asset.

These changes are intended to improve navigation on small screens, unify header styling, and make the landing CTA reflect user authentication state.
Revamp dashboard workspace list and toolbar styling: remove duplicate Montserrat font import; rename toolbar button classes to tdei-toolbar-primary-button and add scoped styles for toolbar buttons and grouped button radii. Overhaul WorkspaceItem into a card-style layout (new markup, styles, responsive adjustments), show workspace ID, format type/status labels, and simplify class logic. Update dashboard page to add a page header subtitle, adjust Project Group label styling, wrap workspace list in a template, and add getLastProjectGroupName + selectedProjectGroupName computed to derive the displayed project group name from sessionStorage or project groups.
Add flex and pathways SVG icons and update WorkspaceItem.vue to select the correct icon based on workspace.type. Imports osw, flex, and pathways assets, introduces a computed typeIconSrc that maps types to their icons (falls back to osw), and replaces the hardcoded img src with a bound :src. Enables showing the appropriate icon for different workspace types.
Refactor the homepage template and SCSS to introduce a new hero layout and visual update. Replaced .jumbo-content with .hero-shell and .hero-copy, moved CTAs into a .hero-actions container (primary Nuxt link + external "Learn more"), and kept the auth-based dashboard/signin routing. Reworked background to use layered gradients over the existing bg.webp, added a decorative overlay, improved typography, spacing, and app-logo styling, and refined responsive behavior across breakpoints (lg, md, sm). These changes modernize the landing hero, improve readability and responsiveness, and polish CTA styles and spacing.
SCSS: Remove unnecessary !important from primary button rules, add proper :focus styles (box-shadow) for accessibility, and introduce .tdei-outline-cyan-button (replacing .tdei-button2) with hover/focus/disabled states. Unify radio focus styling and update shadow color to match brand. Minor CSS cleanup and spacing adjustments. Components: remove d-block from the Apply button in FilterDropdown. Pages: simplify selectedProjectGroupName logic in dashboard.vue (drop getLastProjectGroupName fallback) and reduce hero-primary-action min-height in index.vue.
Add an accessible alt attribute for workspace type images and adjust SCSS variables and styles. In WorkspaceItem.vue the img alt is now dynamic (uses formatTypeLabel) to improve accessibility. In assets/scss/main.scss: remove duplicate --primary-color-dark, add --tdei-cyan, change .jsonContent border to use --secondary-color, remove custom radio focus styles, and adjust .column-style flex/margins. Also restore/move text-transform: capitalize for .workspaceStatus to the stronger selector to keep visual consistency.
Add focus management and keyboard support for the mobile side menu: add refs for the toggle button and side menu, focus the close button when opened and restore focus to the toggle when closed, trap Tab/Shift+Tab inside the menu, handle Escape to close, and add aria-modal="true". Attach/detach keydown listener on mount/unmount. Minor style updates: introduce --primary-color-dark and small SCSS cleanup. Remove an unused getLastProjectGroupName() helper from dashboard.vue. Add rel="noopener noreferrer" to an external link for security.
SCSS: Update .tdei-rounded-button to .btn.tdei-rounded-button, remove unnecessary !important rules, nest hover/active state and use --primary-color-dark for hover/border. Also fix stray brace and tighten selector scope.

AppNavbar.vue: Use focusable.at(0) and .at(-1) for first/last element and add a null check to avoid runtime errors when focusable is empty.

pages/dashboard.vue: Render the "in <project group>" phrase only when a project group name exists and change the computed fallback from a literal 'project group' to null to avoid showing a placeholder when none is selected.
Overhaul the sign-in experience and adjust several layout components. Add a new background image asset and replace the signin page to render the new SigninForm component with a centered card, background, and responsive styles. Revamp SigninForm: new header, show/hide password toggle, improved loading/error states, and extensive SCSS for desktop/mobile. Tidy up AppNavbar templates and mobile menu markup (focus handling/focus trap fixes and markup formatting). Minor tweaks: AppSpinner markup, default layout nuxt-loading-indicator props, and refactor dashboard into a split layout with scrollable workspace list and sticky details panel.
Bind aria-modal to return 'true' or 'false' based on mobileMenuOpen/isMobileView to fix accessibility attribute type. Strengthen SigninForm error handling by adding a fetch-error type guard, parsing 400 responses for validation errors, and providing specific messages for 401 and 404 cases; also normalize other errors to strings. Add missing 'btn' class to the Close button in JoinDialog for consistent styling.
Add role="dialog" to the side menu element in AppNavbar.vue to improve accessibility and complement existing ARIA attributes. Remove an explicit color rule from .team-members-btn in teams/Item.vue to stop overriding the global body color and keep link styling consistent.
Remove external @import URL lines from assets/scss/main.scss and add the @nuxtjs/google-fonts module and configuration in nuxt.config.ts (register Open Sans and Montserrat, set display: 'swap', download: true). Also add @nuxtjs/google-fonts to devDependencies in package.json. Centralizes font loading, enables local font download/optimization, and avoids inline external CSS imports.
Add a long CSS transition to neutralize Chrome's autofill background, preventing the yellow/blue autofill styling from showing. Replace the AppNavbar side menu <aside> with a <div> to match the component structure. Scope SigninForm styles (add scoped) and remove the preset input background so autofill styling is handled consistently. Add an explicit Workspace type import and annotate selectWorkspace(workspace) with the Workspace type.
Introduce a central SCSS theme and migrate components to Bootstrap variants and unified classes.

- Add assets/scss/theme.scss with SASS theme variables (brand colors, utility colors, text/nav colors).
- Update assets/scss/main.scss to consume the new theme variables, remove many legacy utility classes, and switch several CSS rules to variables/SASS values.
- Replace custom tdei button/link classes across components with Bootstrap button variants (btn-primary, btn-outline-secondary, btn-danger, btn-light, etc.).
- Refactor AppNavbar to use BootstrapVue collapse/toggle components, improve mobile side-drawer behavior and keyboard focus handling, and normalize class names to kebab-case.
- Normalize CSS class names and markup in WorkspaceItem and other components, add theme imports and scoped styles where appropriate, and make small UI/accessibility improvements (icons, alt text, font sizes).
- Adjust nuxt.config to limit downloaded font weights and include additional BootstrapVue components used by the navbar.

These changes consolidate styling around a single theme, reduce bespoke utility CSS, and align components with Bootstrap conventions for more consistent UI and easier maintenance.
Treat 768px as non-mobile by changing the mobile detection from <= 768 to < 768. This aligns the JS breakpoint with expected CSS/UX breakpoints so devices at exactly 768px are handled as desktop and will close the mobile menu.
### DevBoard Task
https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/3634/

This PR applies TDEI brand theming across the application — updating
colours, typography, layout, and accessibility throughout.

### Visual changes
- **Navbar** — Redesigned with TDEI brand colour (`#32006e`), new
responsive mobile side-menu with slide-in animation, user profile
dropdown, and sticky positioning
- **Sign-in page** — Fully redesigned card layout with TDEI logo, styled
inputs, show/hide password toggle, and responsive mobile view
- **Dashboard** — Split-panel layout with scrollable workspace list and
sticky detail panel; workspace type icons added
- **Homepage** — New hero section with brand imagery and workspace type
icons (OSW, Pathways, Flex)
- **Buttons & links** — Replaced ad-hoc Bootstrap variants with
consistent utility classes (`tdei-primary-button`,
`tdei-secondary-button`, `tdei-primary-link`, `tdei-rounded-button`)

### Screenshots:
<img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 02 16 PM"
src="https://github.com/user-attachments/assets/acaf73e3-9bea-4259-9846-03c1021574c4"
/>
<img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 02 40 PM"
src="https://github.com/user-attachments/assets/e7c76520-9f88-4042-b3cf-c83e5977a500"
/>
<img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 06 00 PM"
src="https://github.com/user-attachments/assets/65b10d2d-6042-46b8-8c18-02804cc53c0d"
/>
<img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 08 21 PM"
src="https://github.com/user-attachments/assets/7db14bb2-4ce4-4716-be2f-d4b203ed8bcb"
/>
<img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 08 42 PM"
src="https://github.com/user-attachments/assets/10893743-643c-4d8d-8b29-12df3e01e80a"
/>
<img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 16 01 PM"
src="https://github.com/user-attachments/assets/3a33c87d-9b94-4c15-a46f-b3636a753631"
/>
<img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 17 03 PM"
src="https://github.com/user-attachments/assets/4cbde4e3-9ff7-4577-911c-b523eceb3015"
/>



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Theme & Styling Updates

- Updated Bootstrap primary color from `#9b0092` to TDEI brand colour
`#32006e`
- Added new SCSS theme variables for TDEI brand colors including
`$brand-accent`, `$tdei-secondary`, `$tdei-blue`, `$tdei-green`,
`$tdei-cyan`, background shades, and `$text-navy`
- Expanded global styling in `main.scss` with webkit autofill
transitions, new CSS variable declarations in `:root`, and dropdown menu
active state styling
- Added "TDEI Utility Classes" section with page header/title/subtitle
helpers and typography utilities
- Introduced Google Fonts module (`@nuxtjs/google-fonts`) with Open Sans
and Montserrat font families

## Navigation & Navbar

- Refactored `AppNavbar.vue` from Bootstrap collapsed layout to custom
responsive design with sticky positioning
- Implemented mobile-only off-canvas side drawer using `b-collapse` with
click-to-dismiss backdrop
- Added responsive behavior tracking (`isMobileView` for viewport
≤768px) with automatic drawer closure on resize
- Integrated keyboard handling (Escape key to close drawer) and focus
management for accessibility
- Updated navbar styling with TDEI brand colors and responsive spacing
- Added mobile-specific user section and logout button in side drawer
- Hidden "Sign In" link for unauthenticated users (showing only the
brand)

## Authentication & Sign-in Page

- Redesigned `SigninForm.vue` with TDEI-branded auth card layout and
updated styling
- Changed password input from static to toggleable with visibility icon
button controlled by `showPassword` state
- Updated submit button to display dynamic state ("Signing In..." vs
"Sign In") based on loading state, replacing prior spinner template
- Implemented dedicated error rendering block displayed only when error
exists
- Improved error handling with stricter fetch-error type guard checking
`response.status` and `response.json()` function
- Refactored sign-in page (`pages/signin.vue`) to simplified markup with
centered flex layout and login background image

## Dashboard Layout & Components

- Refactored dashboard to split-panel layout with scrollable workspace
list on left and sticky details panel on right
- Updated `WorkspaceItem.vue` workspace picker card with type-specific
icons, formatted type labels, conditional status/role pills, and
responsive styling
- Added `selectedProjectGroupName` computed value for project group
display
- Explicitly typed `selectWorkspace` function parameter as `Workspace`
- Introduced new SCSS for flex split layout, responsive stacking, sticky
positioning, and custom scrollbars
- Updated `dashboard/Toolbar.vue` button styling: "Edit" uses primary
variant, "Review/Export/Settings" use outline-secondary

## Homepage Updates

- Redesigned homepage with new hero layout replacing prior centered
jumbo-content
- Added hero divider element and restructured hero content using
`hero-shell`, `hero-copy`, and `hero-actions` classes
- Made primary call-to-action conditional: routes to `/dashboard` when
authenticated, otherwise to `/signin`, with dynamic button label
- Updated `pages/index.vue` to import `tdeiClient` and expose auth state
- Revised SCSS replacing `.jumbo` styles with new hero-specific classes
and responsive breakpoint adjustments across lg/md/sm viewports

## Component Button & Link Standardization

- Standardized button styling across components:
- Changed outline buttons from `btn btn-outline-primary` to `btn
btn-outline-secondary` (DatasetTypeRadio, help page)
- Updated toolbar and modal buttons to use primary/secondary/danger
variants consistently
- Replaced `btn-dark` styling with appropriate primary/outline-secondary
variants in review, settings, and teams components
- Updated deletion confirmation button styling from outline-danger to
solid danger variant

## Accessibility & UX Improvements

- Added focus trap and keyboard handling in navbar for mobile menu
drawer
- Improved ARIA attributes and semantic HTML in refactored components
- Updated button `aria-label` in WorkspaceItem to include workspace ID
- Refined modal button configurations for better accessibility (e.g.,
custom `cancelClass` with `p-0`)
- Updated component formatting for improved readability and spacing

## Additional Changes

- Updated `AppLogo.vue` to use new TDEI logo (`tdei-logo.png` instead of
`icon.svg`)
- Modified Nuxt config to optimize dependency bundling for `BCollapse`
and `BNavbar` components
- Added `@nuxtjs/google-fonts` to devDependencies
- Updated `nuxt-loading-indicator` styling in default layout with
gradient color via CSS variables
- Minor SCSS restructuring and reformatting across multiple components
for consistency
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Bumps [shell-quote](https://github.com/ljharb/shell-quote) from 1.8.3 to 1.8.4.
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](ljharb/shell-quote@v1.8.3...v1.8.4)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-version: 1.8.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [shell-quote](https://github.com/ljharb/shell-quote) from 1.8.3 to
1.8.4.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md">shell-quote's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/ljharb/shell-quote/compare/v1.8.3...v1.8.4">v1.8.4</a>
- 2026-05-22</h2>
<h3>Commits</h3>
<ul>
<li>[Fix] <code>quote</code>: validate object-token shapes <a
href="https://github.com/ljharb/shell-quote/commit/4378a6e613db5948168684864e49b42b83134d2d"><code>4378a6e</code></a></li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code>,
<code>auto-changelog</code>, <code>eslint</code>, <code>npmignore</code>
<a
href="https://github.com/ljharb/shell-quote/commit/22ebec04349065a45ad8afc8cc8d53c4624634a6"><code>22ebec0</code></a></li>
<li>[Tests] increase coverage <a
href="https://github.com/ljharb/shell-quote/commit/9f3caa31900cc6ee64858b31134144c648ce206d"><code>9f3caa3</code></a></li>
<li>[readme] replace runkit CI badge with shields.io check-runs badge <a
href="https://github.com/ljharb/shell-quote/commit/3344a047dd1e95f71c4ca27522cbfd05c56277e0"><code>3344a04</code></a></li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code> <a
href="https://github.com/ljharb/shell-quote/commit/699c5113d135f4d4591574bebf173334ffa453d4"><code>699c511</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ljharb/shell-quote/commit/ff166e2b63eb5f932bd131a8886a99e9afdf45ae"><code>ff166e2</code></a>
v1.8.4</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/4378a6e613db5948168684864e49b42b83134d2d"><code>4378a6e</code></a>
[Fix] <code>quote</code>: validate object-token shapes</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/22ebec04349065a45ad8afc8cc8d53c4624634a6"><code>22ebec0</code></a>
[Dev Deps] update <code>@ljharb/eslint-config</code>,
<code>auto-changelog</code>, <code>eslint</code>, `npmig...</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/9f3caa31900cc6ee64858b31134144c648ce206d"><code>9f3caa3</code></a>
[Tests] increase coverage</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/3344a047dd1e95f71c4ca27522cbfd05c56277e0"><code>3344a04</code></a>
[readme] replace runkit CI badge with shields.io check-runs badge</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/699c5113d135f4d4591574bebf173334ffa453d4"><code>699c511</code></a>
[Dev Deps] update <code>@ljharb/eslint-config</code></li>
<li>See full diff in <a
href="https://github.com/ljharb/shell-quote/compare/v1.8.3...v1.8.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=shell-quote&package-manager=npm_and_yarn&previous-version=1.8.3&new-version=1.8.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/TaskarCenterAtUW/workspaces-frontend/network/alerts).

</details>
Adding another workflow as part of
https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/3739
This workflow automatically updates the tags based on merges to the
respective branches

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Changes

Added a new GitHub Actions workflow (`.github/workflows/tag.yml`) that
automatically updates environment tags when pull requests are merged.

**Workflow Details:**
- **Trigger:** Pull request closure events on `develop`, `staging`, and
`production` branches (only executes when PR is merged)
- **Tag Mapping:** Maps base branch to environment tag:
  - `develop` → `dev`
  - `staging` → `stage`
  - `production` → `prod`
- **Execution:** Force-updates the git tag locally and pushes it to the
remote repository with the `--force` flag
- **Permissions:** Requires `contents: write` to push tags

The workflow enables automated environment tagging aligned with
branch-based deployments, ensuring consistent tag versions across
environments.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Bumps [nuxt](https://github.com/nuxt/nuxt/tree/HEAD/packages/nuxt) from 4.4.6 to 4.4.8.
- [Release notes](https://github.com/nuxt/nuxt/releases)
- [Commits](https://github.com/nuxt/nuxt/commits/v4.4.8/packages/nuxt)

---
updated-dependencies:
- dependency-name: nuxt
  dependency-version: 4.4.8
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [nuxt](https://github.com/nuxt/nuxt/tree/HEAD/packages/nuxt) from
4.4.6 to 4.4.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/nuxt/nuxt/releases">nuxt's
releases</a>.</em></p>
<blockquote>
<h2>v4.4.8</h2>
<blockquote>
<p>4.4.8 is a hotfix release to address an issue running the dev server
on MacOS.</p>
</blockquote>
<h2>👉 Changelog</h2>
<p><a
href="https://github.com/nuxt/nuxt/compare/v4.4.7...v4.4.8">compare
changes</a></p>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>vite:</strong> Shorter socket name for macOs with tmp
fallback (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35265">#35265</a>)</li>
<li><strong>kit:</strong> Respect <code>type</code> option in
<code>findPath</code> (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35272">#35272</a>)</li>
<li><strong>deps:</strong> Update nuxt/scripts presets (<a
href="https://github.com/nuxt/nuxt/commit/905621594">905621594</a>)</li>
<li><strong>nuxt:</strong> Revert unhead dependency back to v2 (<a
href="https://github.com/nuxt/nuxt/commit/e6d578fea">e6d578fea</a>)</li>
</ul>
<h3>📖 Documentation</h3>
<ul>
<li>Fix many typos (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35266">#35266</a>)</li>
<li>Explain static fallback pages (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35277">#35277</a>)</li>
<li>Change <code>null</code> to <code>undefined</code> in data-fetching
docs to match actual types (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35301">#35301</a>)</li>
<li>Fix broken internal links, useAsyncData watch type, and NuxtError
type (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35303">#35303</a>)</li>
</ul>
<h3>❤️ Contributors</h3>
<ul>
<li>Daniel Roe (<a
href="https://github.com/danielroe"><code>@​danielroe</code></a>)</li>
<li>Ali Mahmmoud (<a
href="https://github.com/AliMahmoudDev"><code>@​AliMahmoudDev</code></a>)</li>
<li>Quentin Macq (<a
href="https://github.com/quentinmcq"><code>@​quentinmcq</code></a>)</li>
<li>Pranav Rajeshirke (<a
href="https://github.com/Pranav188"><code>@​Pranav188</code></a>)</li>
<li>Eduardo San Martin Morote (<a
href="https://github.com/posva"><code>@​posva</code></a>)</li>
</ul>
<h2>v4.4.7</h2>
<blockquote>
<p>4.4.7 is a security hotfix release.</p>
</blockquote>
<p>👉 make sure to check <a
href="https://github.com/nuxt/nuxt/security/advisories">https://github.com/nuxt/nuxt/security/advisories</a>
to view open advisories resolved by this release.</p>
<h2>👉 Changelog</h2>
<p><a
href="https://github.com/nuxt/nuxt/compare/v4.4.6...v4.4.7">compare
changes</a></p>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>nitro:</strong> Assign <code>noSSR</code> before deciding
payload extraction (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35108">#35108</a>)</li>
<li><strong>vite:</strong> Avoid filtering out dirs with shared prefix
from <code>allowDirs</code> (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35112">#35112</a>)</li>
<li><strong>nuxt:</strong> Use resolve from <code>pathe</code> for
buildCache path boundary check (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35111">#35111</a>)</li>
<li><strong>nuxt:</strong> Prevent sibling-directory traversal in test
component wrapper (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35110">#35110</a>)</li>
<li><strong>nitro:</strong> Pass event data to <code>isValid</code> in
dev clipboard-copy listener (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35109">#35109</a>)</li>
<li><strong>nuxt:</strong> Validate protocols in
<code>reloadNuxtApp</code> path before reload (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35115">#35115</a>)</li>
<li><strong>vite:</strong> Prefix public asset virtuals with null byte
(<a
href="https://github.com/nuxt/nuxt/commit/9e303b438">9e303b438</a>)</li>
<li><strong>nuxt:</strong> Re-run <code>getCachedData</code> after
initial fetch (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35122">#35122</a>)</li>
<li><strong>nuxt:</strong> Propagate
<code>useFetch</code>/<code>useAsyncData</code> factory types (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35133">#35133</a>)</li>
<li><strong>vite:</strong> Close vite dev server on nuxt close (<a
href="https://github.com/nuxt/nuxt/commit/a10a68abc">a10a68abc</a>)</li>
<li><strong>kit,nuxt:</strong> Handle cancelling prompts to install
packages (<a
href="https://github.com/nuxt/nuxt/commit/e84813229">e84813229</a>)</li>
<li><strong>kit:</strong> Avoid excluding node-context files in legacy
tsconfig (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35152">#35152</a>)</li>
<li><strong>nuxt:</strong> Handle missing payload in chunkError listener
(<a
href="https://redirect.github.com/nuxt/nuxt/pull/35155">#35155</a>)</li>
<li><strong>nuxt:</strong> Await in-lifght template generation when
closing nuxt (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35181">#35181</a>)</li>
<li><strong>nuxt:</strong> Clarify page and layout usage warnings (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35184">#35184</a>)</li>
<li><strong>webpack:</strong> Surface compilation errors when
stats.toString is empty (<a
href="https://github.com/nuxt/nuxt/commit/073b07851">073b07851</a>)</li>
<li><strong>nuxt:</strong> Reject prototype-chain keys in the island
registry (<a
href="https://redirect.github.com/nuxt/nuxt/pull/35205">#35205</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/nuxt/nuxt/commit/2bfc2c87a6f3bb9b17b4b6a2e9c117ef06b278d4"><code>2bfc2c8</code></a>
v4.4.8</li>
<li><a
href="https://github.com/nuxt/nuxt/commit/e6d578feafa946c2781f5140adb3b03e9b23aade"><code>e6d578f</code></a>
fix(nuxt): revert unhead dependency back to v2</li>
<li><a
href="https://github.com/nuxt/nuxt/commit/9056215943417f77a12967fb8f2efe83aa4d7aad"><code>9056215</code></a>
fix(deps): update nuxt/scripts presets</li>
<li><a
href="https://github.com/nuxt/nuxt/commit/b7d57903b947e788fadfcfdf88be7951943731bf"><code>b7d5790</code></a>
v4.4.7</li>
<li><a
href="https://github.com/nuxt/nuxt/commit/dbc58965ca7ffa21d7cc4207a4c40a62e0762f4a"><code>dbc5896</code></a>
chore: lint</li>
<li><a
href="https://github.com/nuxt/nuxt/commit/e447a793c47766834f7497f8412a76cd56fd8ee1"><code>e447a79</code></a>
fix(nuxt): reject cross-origin paths in <code>reloadNuxtApp</code></li>
<li><a
href="https://github.com/nuxt/nuxt/commit/d72a89ef451965a8a1abb58d3bd6eab4865631a0"><code>d72a89e</code></a>
refactor(nuxt): replace <code>runInNewContext</code> with AST
walker</li>
<li><a
href="https://github.com/nuxt/nuxt/commit/2cce6fb02e621196d56df92e05594e07469b5a6d"><code>2cce6fb</code></a>
fix(nuxt): block path-normalization open redirect in
<code>navigateTo</code></li>
<li><a
href="https://github.com/nuxt/nuxt/commit/0103ce06fbbbdfa079a7f020ef8ce00121eac4a3"><code>0103ce0</code></a>
fix(nuxt): reject script-capable protocols in
<code>\&lt;NuxtLink&gt;</code> href</li>
<li><a
href="https://github.com/nuxt/nuxt/commit/07e39cd6f26e407b4192b7865bd17bc44536b9bb"><code>07e39cd</code></a>
fix(nuxt): match route rules case-insensitively to mirror
<code>vue-router</code></li>
<li>Additional commits viewable in <a
href="https://github.com/nuxt/nuxt/commits/v4.4.8/packages/nuxt">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nuxt&package-manager=npm_and_yarn&previous-version=4.4.6&new-version=4.4.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/TaskarCenterAtUW/workspaces-frontend/network/alerts).

</details>
shweta2101 and others added 27 commits July 8, 2026 15:04
- add project role resolution composable and project-role lookup support
- gate project creation, contributor management, tabs, and task actions by user role
- capture Rapid upload changeset IDs and submit them with completed mapping
- switch workspace/project flows to the new tasking API env configuration
- add frontend guidelines doc and minor project detail UI/map cleanup
Fixes to build exceptions
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.1 to 4.3.0.
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](nodeca/js-yaml@4.1.1...4.3.0)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

- Updated `.claude/settings.json` to allow a few additional `Bash(...)`
commands, including `vue-tsc`, `git add`, and the `@sentry/nuxt` version
check.
- Removed the README’s TODO note about eliminating `any` typing.
- Adjusted `services/rapid.ts` to add logging around Rapid loading,
editor change handling, and uploader success events, while also changing
the stable change flow to calculate a combined change count before
notifying state updates.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Added a Branch Index section to clarify branch purposes.
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.1 to 4.3.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md">js-yaml's
changelog</a>.</em></p>
<blockquote>
<h2>4.3.0, 3.15.0 - 2026-06-27</h2>
<h3>Security</h3>
<ul>
<li>Backported <code>maxTotalMergeKeys</code> option.</li>
</ul>
<h2>[5.2.0] - 2026-06-26</h2>
<h3>Added</h3>
<ul>
<li>Added <code>maxTotalMergeKeys</code> (10000) loader option to limit
the total number of
keys processed by YAML merge (<code>&lt;&lt;</code>) across one
<code>load()</code> / <code>loadAll()</code> call.</li>
<li>Added <code>maxAliases</code> (-1) loader option to limit the number
of YAML aliases per
document.</li>
</ul>
<h3>Removed</h3>
<ul>
<li><code>maxMergeSeqLength</code> replaced with
<code>maxTotalMergeKeys</code> for limiting YAML merge
processing.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Round-trip of integers with exponential form (&gt;=
<code>1e21</code>)</li>
</ul>
<h2>[5.1.0] - 2026-06-23</h2>
<h3>Added</h3>
<ul>
<li>Collection tags can finalize an incrementally populated carrier into
a
different result value.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>[breaking] <code>quoteStyle</code> now selects the preferred quote
style; use the
restored <code>forceQuotes</code> option to force quoting non-key
strings.</li>
</ul>
<h2>[5.0.0] - 2026-06-20</h2>
<h3>Added</h3>
<ul>
<li>Added named exports for schemas, tags, parser events and AST
utilities.</li>
<li>Reworked <code>JSON_SCHEMA</code> and <code>CORE_SCHEMA</code> with
spec-compliant scalar resolution
rules, and added <code>YAML11_SCHEMA</code>.</li>
<li>Added <code>realMapTag</code> for lossless mappings with non-string
and complex keys.
Object-based mappings now reject complex keys instead of stringifying
them.</li>
<li>Added <code>dump()</code> <code>transform</code> option for changing
the generated AST before
rendering.</li>
<li>Added <code>dump()</code> options <code>seqInlineFirst</code>,
<code>flowBracketPadding</code>,
<code>flowSkipCommaSpace</code>, <code>flowSkipColonSpace</code>,
<code>quoteFlowKeys</code>, <code>quoteStyle</code> and
<code>tagBeforeAnchor</code>.</li>
<li>Added formal data layers (events and AST) for modular data
pipelines.
<ul>
<li>Added low-level parser (to events), presenter and visitor APIs.</li>
</ul>
</li>
<li>Added the <a href="https://github.com/yaml/yaml-test-suite">YAML
Test Suite</a> to the
test set.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>See the <a
href="https://github.com/nodeca/js-yaml/blob/master/docs/migrate_v4_to_v5.md">migration
guide</a> for upgrade notes.</li>
<li>Rewritten in TypeScript and reorganized the public API around flat
named
exports.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/nodeca/js-yaml/commit/33d05b5d29a8c21360f620f7e1c1706e24522eda"><code>33d05b5</code></a>
4.3.0 released</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/663bfab6db2b4a146a9366fd685f069345be4ddb"><code>663bfab</code></a>
Drop demo publish, to not override new v5 one.</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/1cb8c7b94bf75e15116869c1c0482dcb22785986"><code>1cb8c7b</code></a>
Add v4-legacy tag for publish</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/02f27afad532763263cd2b6be35c24ee8e1f6157"><code>02f27af</code></a>
Restore umd builds back to es5</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/8be84edaf15e7c394fa3b813179d1bcc280e87fb"><code>8be84ed</code></a>
Fix es5 compatibility</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/59423c6f8cdc78742ac00e25a4dd39ef16b702e4"><code>59423c6</code></a>
Replace <code>maxMergeSeqLength</code> option with
<code>maxTotalMergeKeys</code> (more robust). Ba...</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/6842ef6a02df01ca7282ea01dc3c70787710c05d"><code>6842ef6</code></a>
doc polish</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/590dbabadd172b099c07654fab2eabec8c7a07b9"><code>590dbab</code></a>
4.2.0 released</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/f944dc5cd132251752499bdb157f33027d362177"><code>f944dc5</code></a>
Add package.json funding field</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/f6927192223355b64f2a6e19f3071ccc579ee718"><code>f692719</code></a>
Changelog update</li>
<li>Additional commits viewable in <a
href="https://github.com/nodeca/js-yaml/compare/4.1.1...4.3.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=js-yaml&package-manager=npm_and_yarn&previous-version=4.1.1&new-version=4.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/TaskarCenterAtUW/workspaces-frontend/network/alerts).

</details>
develop's committed lockfile resolved the oxc wasm bindings' @emnapi
optional deps to versions Linux CI's npm ci rejects (Missing
@emnapi/core@1.11.2 / @emnapi/runtime@1.11.2). Regenerated under the CI
toolchain (node 24 / npm 11.16.0 on linux) and verified npm ci passes;
retains both linux and darwin bindings. Same fix previously applied to
deploy-to-master.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e4cc4fe8-d327-4e7c-9943-823d909183c1

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@susrisha susrisha changed the title Staging to Production merge WIP: DONOT MERGE Staging to Production merge Jul 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants