Staging to production - #68
Merged
Merged
Conversation
This sets up the UI for role management and integrates access controls into the Workspaces frontend. Backend PR: TaskarCenterAtUW/workspaces-backend#4 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Members page in workspace settings for viewing/managing project-group admins, data generators, and workspace members; leads can change member roles and assign/remove roles via Workspaces API. * Permission-aware export flow to TDEI with selectable eligible project groups and project-group selection UI integration. * New composable useWorkspaceRole() exposing role, isLead, and isValidator to gate UI and actions across the app. * New Workspaces API methods: getWorkspaceMembers(id), assignRole(id, userUuid, role), removeRole(id, userUuid). * New TDEI user APIs: getMyProjectGroups(), getMyRolesForProjectGroup(projectGroupId, pgName), getProjectGroupUsers(projectGroupId). * **UI/UX Improvements / Access Controls** * Site-wide role-aware UI gating: many settings panels (General, Imagery, Apps, Delete, Teams) and actions (create team, delete workspace, rename, save settings) now show informational alerts and disable inputs/buttons for non-leads. * Dashboard and workspace lists show a new "My Role" row and role badges (Owner/Lead, Validator, Member, POC, Data Generator) in DetailsTable, WorkspaceItem, and related components. * Review toolbar and feedback controls gated by validator/lead role logic. * Settings navigation updated to include a "Members" item; team items and team dialogs respect lead gating. * **Types & Utilities** * New types: WorkspaceRole ('lead' | 'validator' | 'contributor'), WorkspaceMember, TdeiProjectGroup, TdeiUserItem, TdeiRoleAssignment. * New util ROLE_LABELS mapping WorkspaceRole to display labels. * ProjectGroupPicker updated to use tdei_project_group_id keys and accept options prop; ProjectGroup types and compare sorting used. * **Service & Backend Integration** * services/workspaces.ts migrated various endpoints to a new API wrapper and added workspace member management methods. * services/tdei.ts expanded TDEI user client surface to return typed project groups and users and added role-query helpers. * Frontend pages/components updated to fetch and use TDEI project groups and roles for eligibility and UI defaults (export flow, dashboard grouping). * **Notable Component Changes** * New pages/workspace/[id]/settings/members.vue added (major new file). * pages/dashboard.vue: reworked to model currentProjectGroup/currentWorkspace with typed bindings and pass currentWorkspaceTdeiRoles to details table. * pages/workspace/[id]/export/tdei.vue: adds project group selection, eligibility checks, and permission messaging. * Many components now consume useWorkspaceRole() and conditionalize UI and actions on isLead/isValidator. Overall, this PR implements the initial permissions/roles system end-to-end: types and service methods, a composable for role derivation, UI wiring across dashboard and workspace settings, a members management page, and permission-aware flows for TDEI export and settings management. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
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.
This fixes a missed call of `getMyProjectGroups()` in #44 following rebase of #50 which changed the behavior of the method. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary This PR fixes a missed update in the TDEI workspace export page's data loading logic that was introduced during the project group refactor from PR `#50` and issue `#44`. ### Changes **pages/workspace/[id]/export/tdei.vue** Updated the `Promise.all` call that fetches initial data to properly handle the API response structure: - Modified the `getMyProjectGroups()` call to include explicit pagination parameters: `getMyProjectGroups(1, '', 10000)` - Updated the destructuring pattern to extract the `items` property from the response object: `{ items: myProjectGroups }` instead of receiving the list directly This aligns with the API contract where `getMyProjectGroups()` returns an object with structure `{ items: TdeiProjectGroup[], total?: number }` rather than directly returning an array. The fix ensures that `eligibleProjectGroups` is computed correctly from the proper array of project groups, maintaining the role-based export permission checks and default project-group selection logic. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/TaskarCenterAtUW/workspaces-frontend/pull/52?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
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.
Expose an optional id prop on ProjectGroupPicker and bind it to the internal input. Update usages across dashboard and workspace create/export pages to pass unique ids and restructure markup so labels use for="..." (replacing implicit label-wrapping with explicit labels and container divs). This improves accessibility by ensuring labels are correctly associated with the picker inputs; no functional behavior changes.
Introduce a rememberSelection prop to ProjectGroupPicker (default false) to control persisting and showing cached project-group names. Update scroll hint logic (showScrollHint computed) and related class bindings. Only persist/load cached names when rememberSelection is enabled and refine selection initialization when options are passed. Fix ServicePicker selection logic to keep the current service if it still exists, otherwise pick the first or null. Wire remember-selection in dashboard, add a :key to the service-picker in the TDEI exporter, and make the fetched workspace reactive to ensure proper updates.
This is a dependency update that resolves some outstanding security notices. I updated the Nuxt config to account for a couple new features of the dev server: - Explicitly allow requests referred from a local development domain - Pre-optimize some modules to avoid full page reloads during development <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changes ### Dependencies Updated - **nuxt**: `^4.0.0` → `^4.4.6` - **vue**: `^3.4.19` → `^3.5.34` ### Nuxt Configuration Enhanced Added `vite` configuration to `nuxt.config.ts`: - **Dev Server**: Restricted `allowedHosts` to `workspaces.local` to explicitly allow requests from the local development domain. - **Pre-bundling**: Configured `optimizeDeps.include` to pre-bundle key dependencies, reducing full page reloads during development. Included modules: `@osmcha/*`, `@sindresorhus/slugify`, Vue devtools packages, `@zip.js/zip.js`, `ajv`/`ajv-formats`, `bootstrap-vue-next` components/composables, `dayjs` plugins, `maplibre-gl`, `papaparse`, `vue-qrcode`, and `vue3-toastify`. ### CI Workflow - Updated GitHub Actions workflow (.github/workflows/ci.yml) to use **Node.js 24** instead of 20. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/TaskarCenterAtUW/workspaces-frontend/pull/51?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Remove the :key="workspace.tdeiProjectGroupId" binding from the service-picker in pages/workspace/[id]/export/tdei.vue. This prevents unnecessary component remounts when the project group id changes, preserving the picker's internal state and avoiding re-initialization or UI flicker.
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 /> [](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>\<NuxtLink></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 /> [](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>
Bumps [@opentelemetry/core](https://github.com/open-telemetry/opentelemetry-js) to 2.8.0 and updates ancestor dependency [@sentry/nuxt](https://github.com/getsentry/sentry-javascript). These dependencies need to be updated together. Updates `@opentelemetry/core` from 2.7.1 to 2.8.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-js/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-js/blob/main/CHANGELOG.md) - [Commits](open-telemetry/opentelemetry-js@v2.7.1...v2.8.0) Updates `@sentry/nuxt` from 10.53.1 to 10.58.0 - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](getsentry/sentry-javascript@10.53.1...10.58.0) --- updated-dependencies: - dependency-name: "@opentelemetry/core" dependency-version: 2.8.0 dependency-type: indirect - dependency-name: "@sentry/nuxt" dependency-version: 10.58.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.1 to 4.2.0. - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/commits) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 4.2.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@opentelemetry/core](https://github.com/open-telemetry/opentelemetry-js) to 2.8.0 and updates ancestor dependency [@sentry/nuxt](https://github.com/getsentry/sentry-javascript). These dependencies need to be updated together. Updates `@opentelemetry/core` from 2.7.1 to 2.8.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-js/releases">@opentelemetry/core's releases</a>.</em></p> <blockquote> <h2>v2.8.0</h2> <h2>2.8.0</h2> <h3>:rocket: Features</h3> <ul> <li>feat(sdk-trace-base): pretty-print <code>SpanImpl</code>, <code>Tracer</code>, and <code>BasicTracerProvider</code> via <code>util.inspect</code> so they render through <code>diag</code> and <code>console.log</code> <a href="https://redirect.github.com/open-telemetry/opentelemetry-js/pull/6690">#6690</a> <a href="https://github.com/mcollina"><code>@mcollina</code></a></li> <li>feat(sdk-metrics): implement metric reader self-observability metrics <a href="https://redirect.github.com/open-telemetry/opentelemetry-js/pull/6449">#6449</a> <a href="https://github.com/anuraaga"><code>@anuraaga</code></a></li> <li>feat(core): add <code>hrTimeToSeconds</code> <a href="https://redirect.github.com/open-telemetry/opentelemetry-js/pull/6449">#6449</a> <a href="https://github.com/anuraaga"><code>@anuraaga</code></a></li> </ul> <h3>:bug: Bug Fixes</h3> <ul> <li>fix(core): limit processing of incoming "baggage" header to 8192 bytes <a href="https://github.com/pichlermarc"><code>@pichlermarc</code></a></li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-js/blob/main/CHANGELOG.md">@opentelemetry/core's changelog</a>.</em></p> <blockquote> <h2>2.8.0</h2> <h3>:rocket: Features</h3> <ul> <li>feat(sdk-trace-base): pretty-print <code>SpanImpl</code>, <code>Tracer</code>, and <code>BasicTracerProvider</code> via <code>util.inspect</code> so they render through <code>diag</code> and <code>console.log</code> <a href="https://redirect.github.com/open-telemetry/opentelemetry-js/pull/6690">#6690</a> <a href="https://github.com/mcollina"><code>@mcollina</code></a></li> <li>feat(sdk-metrics): implement metric reader self-observability metrics <a href="https://redirect.github.com/open-telemetry/opentelemetry-js/pull/6449">#6449</a> <a href="https://github.com/anuraaga"><code>@anuraaga</code></a></li> <li>feat(core): add <code>hrTimeToSeconds</code> <a href="https://redirect.github.com/open-telemetry/opentelemetry-js/pull/6449">#6449</a> <a href="https://github.com/anuraaga"><code>@anuraaga</code></a></li> </ul> <h3>:bug: Bug Fixes</h3> <ul> <li>fix(core): limit processing of incoming "baggage" header to 8192 bytes <a href="https://github.com/pichlermarc"><code>@pichlermarc</code></a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/open-telemetry/opentelemetry-js/commit/13a035bc695996cf4aec885fef7b9866f48bc555"><code>13a035b</code></a> chore: prepare next release (<a href="https://redirect.github.com/open-telemetry/opentelemetry-js/issues/6756">#6756</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-js/commit/4b13587d1e08b47baf153e5312ccd08a3240d074"><code>4b13587</code></a> Merge commit from fork</li> <li><a href="https://github.com/open-telemetry/opentelemetry-js/commit/71d195c508320295f1892aaed1ee2f1971ffb470"><code>71d195c</code></a> chore(renovate): set minimumReleaseAge to 3 days (<a href="https://redirect.github.com/open-telemetry/opentelemetry-js/issues/6792">#6792</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-js/commit/555fca6ce94fb8d40a5f869dbd28e43143b4e730"><code>555fca6</code></a> Update renovate.json to use matchManagers (<a href="https://redirect.github.com/open-telemetry/opentelemetry-js/issues/6141">#6141</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-js/commit/b711a81d5262904245d70f1857b6f3bc811b22cd"><code>b711a81</code></a> docs(otlp-exporter-base): add typedoc entry points so public API is indexed a...</li> <li><a href="https://github.com/open-telemetry/opentelemetry-js/commit/da704029ccd291d65402f3d1c469bd3f25aec047"><code>da70402</code></a> fix(ci): supply-chain sec: disable caching in release-related workflow (<a href="https://redirect.github.com/open-telemetry/opentelemetry-js/issues/6790">#6790</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-js/commit/002267b1c639aac1d2f1d6e5c7ac3ed023109ea0"><code>002267b</code></a> chore: complete the move to the smaller SPDX license header (<a href="https://redirect.github.com/open-telemetry/opentelemetry-js/issues/6791">#6791</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-js/commit/056ef9c4e1ddf9306477b7ce26acc7be489f9c6c"><code>056ef9c</code></a> feat(sdk-metrics): implement metric reader metrics (<a href="https://redirect.github.com/open-telemetry/opentelemetry-js/issues/6449">#6449</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-js/commit/3bd69ce18011f9a16a7231489d9c3acc8294e8d9"><code>3bd69ce</code></a> fix(configuration): improve environment variable substitution to handle all t...</li> <li><a href="https://github.com/open-telemetry/opentelemetry-js/commit/bfbda7c2d90e1686f51cd0fc4d02d785ab9a9cc0"><code>bfbda7c</code></a> docs(exporter-trace-otlp-grpc): import CompressionAlgorithm from otlp-exporte...</li> <li>Additional commits viewable in <a href="https://github.com/open-telemetry/opentelemetry-js/compare/v2.7.1...v2.8.0">compare view</a></li> </ul> </details> <br /> Updates `@sentry/nuxt` from 10.53.1 to 10.58.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/getsentry/sentry-javascript/releases">@sentry/nuxt's releases</a>.</em></p> <blockquote> <h2>10.58.0</h2> <h3>Important Changes</h3> <ul> <li> <p><strong>feat(hono): Add support for the Deno runtime (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21450">#21450</a>)</strong></p> <p><code>@sentry/hono</code> now supports the Deno runtime via a new <code>@sentry/hono/deno</code> entry point. Install <code>@sentry/deno</code> as a peer dependency and initialize Sentry through the <code>sentry()</code> middleware:</p> <pre lang="ts"><code>import { Hono } from 'hono'; import { sentry } from '@sentry/hono/deno'; <p>const app = new Hono();</p> <p>app.use( sentry(app, { dsn: '<strong>DSN</strong>', // or Deno.env.get('SENTRY_DSN') tracesSampleRate: 1.0, }), );</p> <p>Deno.serve(app.fetch); </code></pre></p> </li> <li> <p><strong>feat(core): Extract objects as structured logs in <code>consoleLoggingIntegration</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21385">#21385</a>)</strong></p> <p>The <code>consoleLoggingIntegration</code> now extracts structured log attributes when the first argument is a plain object.</p> <pre lang="js"><code>// Object keys become log attributes console.log({ userId: 123, action: 'login' }, 'User logged in'); // → attributes: { userId: 123, action: "login" } <p>// Non-object first args use template + parameters (unchanged) console.log('Hello', 'world', 123); // → sentry.message.template: "Hello {} {}" </code></pre></p> </li> <li> <p><strong>feat(react-router): Stabilize the instrumentation API (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21470">#21470</a>)</strong></p> <p>React Router's instrumentation API is now stable — the <code>@experimental</code> markers have been removed from <code>createSentryServerInstrumentation</code>, <code>createSentryClientInstrumentation</code>, and the related helpers and types. The manual server wrappers <code>wrapServerLoader</code> and <code>wrapServerAction</code> are now deprecated in favor of it. Export <code>instrumentations = [Sentry.createSentryServerInstrumentation()]</code> from your <code>entry.server.tsx</code> to instrument all loaders and actions without wrapping them individually.</p> </li> </ul> <h3>Other Changes</h3> <ul> <li>feat(hono): Add HTTP connection info to server spans (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21408">#21408</a>)</li> <li>feat(node-core): Attach log message and fields to pino error events (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21422">#21422</a>)</li> <li>feat(react-router): Always build client instrumentation and deprecate <code>useInstrumentationAPI</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21432">#21432</a>)</li> <li>feat(react-router): Rename client navigation roots from the route pattern (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21463">#21463</a>)</li> <li>fix(astro): Resolve middleware export types (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21414">#21414</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md">@sentry/nuxt's changelog</a>.</em></p> <blockquote> <h2>10.58.0</h2> <h3>Important Changes</h3> <ul> <li> <p><strong>feat(hono): Add support for the Deno runtime (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21450">#21450</a>)</strong></p> <p><code>@sentry/hono</code> now supports the Deno runtime via a new <code>@sentry/hono/deno</code> entry point. Install <code>@sentry/deno</code> as a peer dependency and initialize Sentry through the <code>sentry()</code> middleware:</p> <pre lang="ts"><code>import { Hono } from 'hono'; import { sentry } from '@sentry/hono/deno'; <p>const app = new Hono();</p> <p>app.use( sentry(app, { dsn: '<strong>DSN</strong>', // or Deno.env.get('SENTRY_DSN') tracesSampleRate: 1.0, }), );</p> <p>Deno.serve(app.fetch); </code></pre></p> </li> <li> <p><strong>feat(core): Extract objects as structured logs in <code>consoleLoggingIntegration</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21385">#21385</a>)</strong></p> <p>The <code>consoleLoggingIntegration</code> now extracts structured log attributes when the first argument is a plain object.</p> <pre lang="js"><code>// Object keys become log attributes console.log({ userId: 123, action: 'login' }, 'User logged in'); // → attributes: { userId: 123, action: "login" } <p>// Non-object first args use template + parameters (unchanged) console.log('Hello', 'world', 123); // → sentry.message.template: "Hello {} {}" </code></pre></p> </li> <li> <p><strong>feat(react-router): Stabilize the instrumentation API (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21470">#21470</a>)</strong></p> <p>React Router's instrumentation API is now stable — the <code>@experimental</code> markers have been removed from <code>createSentryServerInstrumentation</code>, <code>createSentryClientInstrumentation</code>, and the related helpers and types. The manual server wrappers <code>wrapServerLoader</code> and <code>wrapServerAction</code> are now deprecated in favor of it. Export <code>instrumentations = [Sentry.createSentryServerInstrumentation()]</code> from your <code>entry.server.tsx</code> to instrument all loaders and actions without wrapping them individually.</p> </li> </ul> <h3>Other Changes</h3> <ul> <li>feat(hono): Add HTTP connection info to server spans (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21408">#21408</a>)</li> <li>feat(node-core): Attach log message and fields to pino error events (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21422">#21422</a>)</li> <li>feat(react-router): Always build client instrumentation and deprecate <code>useInstrumentationAPI</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21432">#21432</a>)</li> <li>feat(react-router): Rename client navigation roots from the route pattern (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/21463">#21463</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/getsentry/sentry-javascript/commit/29a6f451ff71bf5dc36ba5926929da56b252d0b4"><code>29a6f45</code></a> release: 10.58.0</li> <li><a href="https://github.com/getsentry/sentry-javascript/commit/7fa42c94ec8917ab0e3362723eb57234abacdba5"><code>7fa42c9</code></a> Merge pull request <a href="https://redirect.github.com/getsentry/sentry-javascript/issues/21530">#21530</a> from getsentry/prepare-release/10.58.0</li> <li><a href="https://github.com/getsentry/sentry-javascript/commit/0486221fbf384d3cccad395c1b2729360d3f0e20"><code>0486221</code></a> meta(changelog): Update changelog for 10.58.0</li> <li><a href="https://github.com/getsentry/sentry-javascript/commit/66b04b6eef3847fcce74899099e8661f3a430ba0"><code>66b04b6</code></a> chore(deps): Bump nx to <code>22.7.5</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/issues/21527">#21527</a>)</li> <li><a href="https://github.com/getsentry/sentry-javascript/commit/d8dcc45fa19ad4c8b8514003a65da8a0eafbeaf1"><code>d8dcc45</code></a> ref(node): Migrate vendored generic-pool instrumentation to Sentry APIs (<a href="https://redirect.github.com/getsentry/sentry-javascript/issues/21523">#21523</a>)</li> <li><a href="https://github.com/getsentry/sentry-javascript/commit/b35c4deac97eae669e05aa183bd4fbf5d1eec6ca"><code>b35c4de</code></a> test(node): Replace lru-memoizer fake unit test with integration coverage (<a href="https://redirect.github.com/getsentry/sentry-javascript/issues/2">#2</a>...</li> <li><a href="https://github.com/getsentry/sentry-javascript/commit/0d3f1b1b2d1b4782fcfb877f781fff6d1961b26b"><code>0d3f1b1</code></a> fix(nextjs): Mark redirect server actions as <code>ok</code> instead of <code>internal_error</code>...</li> <li><a href="https://github.com/getsentry/sentry-javascript/commit/1bf2bad351a40c5163a63390cf7987881f092ae8"><code>1bf2bad</code></a> ref(node): Streamline dataloader instrumentation (<a href="https://redirect.github.com/getsentry/sentry-javascript/issues/21475">#21475</a>)</li> <li><a href="https://github.com/getsentry/sentry-javascript/commit/0a6e864ffa8e59b719f80d39120dc204765e4b10"><code>0a6e864</code></a> test: Skip nuxt-5 E2E test (<a href="https://redirect.github.com/getsentry/sentry-javascript/issues/21524">#21524</a>)</li> <li><a href="https://github.com/getsentry/sentry-javascript/commit/73024d4d55f8f778af305005c134947fc2935474"><code>73024d4</code></a> test(astro): Add Astro 7 e2e app (<a href="https://redirect.github.com/getsentry/sentry-javascript/issues/21471">#21471</a>)</li> <li>Additional commits viewable in <a href="https://github.com/getsentry/sentry-javascript/compare/10.53.1...10.58.0">compare view</a></li> </ul> </details> <br /> 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>
Bumps [ws](https://github.com/websockets/ws) from 8.20.1 to 8.21.0. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](websockets/ws@8.20.1...8.21.0) --- updated-dependencies: - dependency-name: ws dependency-version: 8.21.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [ws](https://github.com/websockets/ws) from 8.20.1 to 8.21.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/websockets/ws/releases">ws's releases</a>.</em></p> <blockquote> <h2>8.21.0</h2> <h1>Features</h1> <ul> <li>Introduced the <code>maxBufferedChunks</code> and <code>maxFragments</code> options (2b2abd45).</li> </ul> <h1>Bug fixes</h1> <ul> <li>Fixed a remote memory exhaustion DoS vulnerability (2b2abd45).</li> </ul> <p>A high volume of tiny fragments and data chunks could be sent by a peer, using modest network traffic, to crash a <code>ws</code> server or client due to OOM.</p> <pre lang="js"><code>import { WebSocket, WebSocketServer } from 'ws'; <p>const wss = new WebSocketServer({ port: 0 }, function () { const data = Buffer.alloc(1); const options = { fin: false }; const { port } = wss.address(); const ws = new WebSocket(<code>ws://localhost:${port}</code>);</p> <p>ws.on('open', function () { (function send() { ws.send(data, options, function (err) { if (err) return; send(); }); })(); });</p> <p>ws.on('error', console.error); ws.on('close', function (code, reason) { console.log(<code>client close - code: ${code} reason: ${reason.toString()}</code>); }); });</p> <p>wss.on('connection', function (ws) { ws.on('error', console.error); ws.on('close', function (code, reason) { console.log(<code>server close - code: ${code} reason: ${reason.toString()}</code>); }); }); </code></pre></p> <p>The vulnerability was responsibly disclosed and fixed by <a href="https://github.com/Nadav0077">Nadav Magier</a>.</p> <p>In vulnerable versions, the issue can be mitigated by lowering the value of the <code>maxPayload</code> option if possible.</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/websockets/ws/commit/bca91adf15677e47dbe4f959653452727be28b94"><code>bca91ad</code></a> [dist] 8.21.0</li> <li><a href="https://github.com/websockets/ws/commit/2b2abd458a1b647d0b6033bd62a619c36189839a"><code>2b2abd4</code></a> [security] Limit retained message parts</li> <li><a href="https://github.com/websockets/ws/commit/78eabe2a6677b231bf9c82601bde86ff91639490"><code>78eabe2</code></a> [security] Add latest vulnerability to SECURITY.md</li> <li>See full diff in <a href="https://github.com/websockets/ws/compare/8.20.1...8.21.0">compare view</a></li> </ul> </details> <br />
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.1 to 4.2.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.2.0] - 2026-06-01</h2> <h3>Added</h3> <ul> <li>Added <code>docs/safety.md</code> with notes about processing untrusted YAML.</li> <li>Added <code>maxDepth</code> (100) loader option. Not a problem, but gives a better exception instead of RangeError on stack overflow.</li> <li>Added <code>maxMergeSeqLength</code> (20) loader option. Not a problem after <code>merge</code> fix, but an additional restriction for safety.</li> <li>Added sourcemaps to <code>dist/</code> builds.</li> </ul> <h3>Changed</h3> <ul> <li>Stop resolving numbers with underscores as numeric scalars, <a href="https://redirect.github.com/nodeca/js-yaml/issues/627">#627</a>.</li> <li>Switched dev toolchains to Vite / neostandard.</li> <li>Updated demo.</li> <li>Reorganized tests.</li> <li><code>dist/</code> files are no longer kept in the repository.</li> </ul> <h3>Fixed</h3> <ul> <li>Fix parsing of properties on the first implicit block mapping key, <a href="https://redirect.github.com/nodeca/js-yaml/issues/62">#62</a>.</li> <li>Fix trailing whitespace handling when folding flow scalar lines, <a href="https://redirect.github.com/nodeca/js-yaml/issues/307">#307</a>.</li> <li>Reject top-level block scalars without content indentation, <a href="https://redirect.github.com/nodeca/js-yaml/issues/280">#280</a>.</li> <li>Ensure numbers survive round-trip, <a href="https://redirect.github.com/nodeca/js-yaml/issues/737">#737</a>.</li> <li>Fix test coverage for issue <a href="https://redirect.github.com/nodeca/js-yaml/issues/221">#221</a>.</li> <li>Fix flow scalar trailing whitespace folding, <a href="https://redirect.github.com/nodeca/js-yaml/issues/307">#307</a>.</li> <li>Fix digits in YAML named tag handles.</li> </ul> <h3>Security</h3> <ul> <li>Fix potential DoS via quadratic complexity in merge - deduplicate repeated elements (makes sense for malformed files > 10K).</li> </ul> <h2>[3.14.2] - 2025-11-15</h2> <h3>Security</h3> <ul> <li>Backported v4.1.1 fix to v3</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/nodeca/js-yaml/commits">compare view</a></li> </ul> </details> <br /> [](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>
Bumps [launch-editor](https://github.com/vitejs/launch-editor) from 2.13.2 to 2.14.1. - [Commits](vitejs/launch-editor@v2.13.2...v2.14.1) --- updated-dependencies: - dependency-name: launch-editor dependency-version: 2.14.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [launch-editor](https://github.com/vitejs/launch-editor) from 2.13.2 to 2.14.1. <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/vitejs/launch-editor/commit/3f97c648307a70e7c930ba63f040e6ba8e72bc16"><code>3f97c64</code></a> v2.14.1</li> <li><a href="https://github.com/vitejs/launch-editor/commit/0cc9550e05c35224a1f61914b9731723f78c06a7"><code>0cc9550</code></a> fix: reject UNC paths (<a href="https://redirect.github.com/vitejs/launch-editor/issues/138">#138</a>)</li> <li><a href="https://github.com/vitejs/launch-editor/commit/afd1ab907769adbb0fb76b564551f3cd24822ea6"><code>afd1ab9</code></a> ci: run tests on mac and windows (<a href="https://redirect.github.com/vitejs/launch-editor/issues/136">#136</a>)</li> <li><a href="https://github.com/vitejs/launch-editor/commit/0bfa328e4d2a70d3accd86645efde43a5a8fd931"><code>0bfa328</code></a> test: add some tests for launch-editor package (<a href="https://redirect.github.com/vitejs/launch-editor/issues/135">#135</a>)</li> <li><a href="https://github.com/vitejs/launch-editor/commit/1b006ae00061e83628c884770df4869bac481ed3"><code>1b006ae</code></a> chore: add README (<a href="https://redirect.github.com/vitejs/launch-editor/issues/134">#134</a>)</li> <li><a href="https://github.com/vitejs/launch-editor/commit/383ef26fceaaab75e4f122bf833a8d457e187272"><code>383ef26</code></a> v2.14.0</li> <li><a href="https://github.com/vitejs/launch-editor/commit/6277209316b28bd76b057a97fcdfa42da5adc181"><code>6277209</code></a> ci: harden publish settings</li> <li><a href="https://github.com/vitejs/launch-editor/commit/520b2f787af1bbe3d2333d952547fc90f2c01bb3"><code>520b2f7</code></a> fix(deps): update all non-major dependencies (<a href="https://redirect.github.com/vitejs/launch-editor/issues/129">#129</a>)</li> <li><a href="https://github.com/vitejs/launch-editor/commit/475ac662aeaa40eebe319f76acf7bd7ff2aba5d5"><code>475ac66</code></a> chore(deps): update dependency lint-staged to v17 (<a href="https://redirect.github.com/vitejs/launch-editor/issues/130">#130</a>)</li> <li><a href="https://github.com/vitejs/launch-editor/commit/247bf1dfe2c75efb50f507d33c2c5a3cbf4e20d0"><code>247bf1d</code></a> chore(deps): update dependency yorkie to v2 (<a href="https://redirect.github.com/vitejs/launch-editor/issues/131">#131</a>)</li> <li>Additional commits viewable in <a href="https://github.com/vitejs/launch-editor/compare/v2.13.2...v2.14.1">compare view</a></li> </ul> </details> <details> <summary>Maintainer changes</summary> <p>This version was pushed to npm by <a href="https://www.npmjs.com/~GitHub%20Actions">GitHub Actions</a>, a new releaser for launch-editor since your current version.</p> </details> <br /> [](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>
This pull request introduces several significant UI and workflow improvements, focusing on navigation, theming, and utility enhancements. The most substantial changes are a complete redesign of the navigation bar for better mobile and desktop experience, a new GitHub workflow for automated environment tagging, and a broad update to the application's theme and utility classes. **Navigation and Layout Improvements:** * [`components/AppNavbar.vue`](diffhunk://#diff-f5338ad3123fd5a2307b41d35b44ef3937f97b2cda5baae203d5dc80ba75109bL2-R411): Completely redesigned the navigation bar to support a responsive side-drawer menu on mobile devices, improved accessibility (keyboard navigation, focus management, Escape key support), and enhanced user profile/logout handling for both mobile and desktop. Updated branding and navigation links for clarity and consistency. * [`components/AppLogo.vue`](diffhunk://#diff-a3b5a2eb30621c64c88a28b95b89e1365ae22a64bdf983e2e137aba7657405f7L2-R2): Updated the logo image to use the new `tdei-logo.png` for consistent branding. **Theming and Utility Enhancements:** * `assets/scss/theme.scss`, `assets/scss/main.scss`: Overhauled theme variables with new brand colors, font families, and utility classes. Added CSS variables for colors and fonts, improved autofill handling, and added utility classes for common UI elements (headers, subtitles, hints). [[1]](diffhunk://#diff-3ca8bb2feea4e836c15314e7883fb708c1fbfac9be89b932659ac5be31b80823L6-R27) [[2]](diffhunk://#diff-6e542e5567dc3568b6ef395995b5897822a3f74fa7e12afcb413bc89f4347fd3R3-R41) [[3]](diffhunk://#diff-6e542e5567dc3568b6ef395995b5897822a3f74fa7e12afcb413bc89f4347fd3R75-R81) [[4]](diffhunk://#diff-6e542e5567dc3568b6ef395995b5897822a3f74fa7e12afcb413bc89f4347fd3R102-R141) **Workflow Automation:** * [`.github/workflows/tag.yml`](diffhunk://#diff-84dff8d1094ca39c02ac0e48d951ca22f4da29c76b50ae517f5bd2d50f94c2f6R1-R42): Added a new GitHub Actions workflow to automatically update environment tags (`dev`, `stage`, `prod`) when pull requests are merged into `develop`, `staging`, or `production` branches. **Component and UI Tweaks:** * [`components/DatasetTypeRadio.vue`](diffhunk://#diff-22e341fbd37362852438041432b32c9f56118cc6a4a423e1db60c575931ebad7L12-R12): Changed dataset type radio button styles from `btn-outline-primary` to `btn-outline-secondary` for better visual consistency with the new theme. [[1]](diffhunk://#diff-22e341fbd37362852438041432b32c9f56118cc6a4a423e1db60c575931ebad7L12-R12) [[2]](diffhunk://#diff-22e341fbd37362852438041432b32c9f56118cc6a4a423e1db60c575931ebad7L23-R23) * [`components/AppSpinner.vue`](diffhunk://#diff-3e0e987214827beb4127b0ef553325bf67336549c3f44babee21a6f932bada0cL2-R5): Minor markup adjustment for improved readability and accessibility. * [`components/AppImageViewer.vue`](diffhunk://#diff-6c814aa23949b1b55654ff0e34e7e3d974a5ef891952f1a949067897bef36bb4R1-R38): Added a new wrapper component for image viewing with customizable toolbar options.
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
susrisha
approved these changes
Jun 29, 2026
MashB
approved these changes
Jun 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
#32006e), new responsive mobile side-menu with slide-in animation, user profile dropdown, and sticky positioningtdei-primary-button,tdei-secondary-button,tdei-primary-link,tdei-rounded-button)Screenshots:
Theme & Styling Updates
#9b0092to TDEI brand colour#32006e$brand-accent,$tdei-secondary,$tdei-blue,$tdei-green,$tdei-cyan, background shades, and$text-navymain.scsswith webkit autofill transitions, new CSS variable declarations in:root, and dropdown menu active state styling@nuxtjs/google-fonts) with Open Sans and Montserrat font familiesNavigation & Navbar
AppNavbar.vuefrom Bootstrap collapsed layout to custom responsive design with sticky positioningb-collapsewith click-to-dismiss backdropisMobileViewfor viewport ≤768px) with automatic drawer closure on resizeAuthentication & Sign-in Page
SigninForm.vuewith TDEI-branded auth card layout and updated stylingshowPasswordstateresponse.statusandresponse.json()functionpages/signin.vue) to simplified markup with centered flex layout and login background imageDashboard Layout & Components
WorkspaceItem.vueworkspace picker card with type-specific icons, formatted type labels, conditional status/role pills, and responsive stylingselectedProjectGroupNamecomputed value for project group displayselectWorkspacefunction parameter asWorkspacedashboard/Toolbar.vuebutton styling: "Edit" uses primary variant, "Review/Export/Settings" use outline-secondaryHomepage Updates
hero-shell,hero-copy, andhero-actionsclasses/dashboardwhen authenticated, otherwise to/signin, with dynamic button labelpages/index.vueto importtdeiClientand expose auth state.jumbostyles with new hero-specific classes and responsive breakpoint adjustments across lg/md/sm viewportsComponent Button & Link Standardization
btn btn-outline-primarytobtn btn-outline-secondary(DatasetTypeRadio, help page)btn-darkstyling with appropriate primary/outline-secondary variants in review, settings, and teams componentsAccessibility & UX Improvements
aria-labelin WorkspaceItem to include workspace IDcancelClasswithp-0)Additional Changes
AppLogo.vueto use new TDEI logo (tdei-logo.pnginstead oficon.svg)BCollapseandBNavbarcomponents@nuxtjs/google-fontsto devDependenciesnuxt-loading-indicatorstyling in default layout with gradient color via CSS variables