Skip to content

Develop To Staging - #100

Open
shweta2101 wants to merge 65 commits into
stagingfrom
develop
Open

Develop To Staging#100
shweta2101 wants to merge 65 commits into
stagingfrom
develop

Conversation

@shweta2101

Copy link
Copy Markdown
Contributor

DevBoard Task

https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/3984/

Changes Implemented

Project Editing

  • Added a project edit page at:

    /workspace/:workspaceId/projects/:projectId/edit
    
  • Restricted project editing to project leads.

  • Added editable sections for:

    • Project description
    • Rich-text instructions
    • Custom imagery
    • Team members and roles
    • Project configuration
    • Project actions
  • Added dirty-state detection and confirmation before leaving with unsaved changes.

  • Disabled configuration changes after tasks have been generated or the project has left draft status.

  • Added project actions:

    • Reset all tasks
    • Close project
    • Permanently delete project
  • Added API methods for updating, resetting, closing, and deleting projects.

  • Added an edit button to the project details page for project leads.

  • Standardized task mutation errors through the shared HTTP error resolver.

Shared API Error Handling

Expanded resolveHttpErrorMessage() to support:

  • detail strings
  • Nested detail.message objects
  • FastAPI validation arrays using msg
  • Validation arrays using message
  • Top-level message
  • Top-level error
  • Plain-text responses
  • Existing-lock metadata containing task_number
  • Caller-provided fallback messages

The shared resolver is used by:

  • Project creation and editing
  • Contributor mutations
  • Task generation and saving
  • Task locking and unlocking
  • Task submission

Custom Imagery

  • Added custom-imagery input to project creation and editing.
  • Added JSON parsing and schema validation.
  • Added validation debouncing and stale-request protection.
  • Added typed custom-imagery models using ImagerySource.
  • Added conversion from project imagery configuration to Rapid imagery configuration.
  • Added project imagery during initial Rapid startup.
  • Added imagery when switching an already-loaded Rapid editor between workspaces.
  • Added custom imagery to the initial Rapid map hash.
  • Selected the configured imagery as the active Rapid background.

Rapid Authentication and Integration

  • Fixed an initialization race that allowed Rapid to fall back to its built-in OSM OAuth login.
  • Rapid authentication is now applied immediately after initialization begins.
  • Editor and uploader event registration happens after initialization finishes.
  • Prevented redirects to the OSM /login endpoint during changeset upload.

Confirmation Dialog Accessibility

Improved the confirmation dialog with:

  • role="dialog"
  • aria-modal="true"
  • Unique title IDs through useId()
  • Initial focus placement
  • Tab and Shift+Tab focus trapping
  • Escape-key handling
  • Focus restoration to the opening element
  • Disabled-state handling while actions are running
  • Event-listener cleanup during unmount

Impacted Areas Of Testing

Project Editing

  1. Sign in as a project lead.
  2. Open a project details page.
  3. Confirm the edit button is visible.
  4. Open the edit page.
  5. Verify all sections appear in the sidebar.
  6. Change the project description.
  7. Change the instructions.
  8. Save the project.
  9. Return to the project details page.
  10. Confirm the updated description and instructions are displayed.
  11. Sign in as a non-lead.
  12. Confirm the edit button is hidden.
  13. Navigate directly to the edit URL.
  14. Confirm access is rejected with a 403 response.

Contributor Management

  1. Open the Team Members section.
  2. Search for a workspace user by name or email.
  3. Assign a role and add the user.
  4. Confirm the user appears in the project member list.
  5. Change the user’s role.
  6. Reload the page and confirm the new role persists.
  7. Remove the user.

Project Actions

Reset Tasks

  1. Open the Actions section.
  2. Select Reset All Tasks.
  3. Confirm the confirmation dialog appears.
  4. Cancel and verify no action occurs.
  5. Reopen and confirm the action.
  6. Confirm navigation returns to the Tasks tab.
  7. Confirm task assignments and progress were reset.

Close Project

  1. Select Close Project.
  2. Confirm the action.
  3. Confirm the project status becomes completed.

Delete Project

  1. Create a disposable project.
  2. Select Delete Project.
  3. Confirm the destructive action.
  4. Confirm navigation returns to the project list.
  5. Confirm the project no longer appears.

Custom Imagery Validation

  1. Open project creation or editing.
  2. Enter invalid JSON.
  3. Confirm a validation error appears.
  4. Enter a JSON array instead of one imagery object.
  5. Confirm it is rejected.
  6. Enter an object that does not match the schema.
  7. Confirm schema validation errors appear.
  8. Enter a valid imagery object.
  9. Confirm the error clears.
  10. Save the project.
  11. Reload the page.
  12. Confirm the imagery JSON persists.

Example:

{
  "id": "example-imagery",
  "name": "Example Imagery",
  "type": "xyz",
  "url": "https://tiles.example.com/{z}/{x}/{y}.png",
  "icon": "https://example.com/icon.svg",
  "description": "Example imagery",
  "extent": {
    "polygon": [],
    "max_zoom": 19
  },
  "attribution": {
    "required": true,
    "text": "Example attribution",
    "url": "https://example.com/attribution"
  }
}

Rapid Custom Imagery

  1. Open a task belonging to a project with custom imagery.
  2. Confirm Rapid loads successfully.
  3. Confirm the project imagery appears in the imagery list.
  4. Confirm it is selected as the active background.
  5. Return to the project page.
  6. Open another project with different imagery without fully refreshing.
  7. Confirm the second project’s imagery is added and selected.
  8. Open a project without custom imagery.
  9. Confirm Rapid still loads normally.

Screenshots:

Screenshot 2026-07-14 at 6 03 21 PM Screenshot 2026-07-14 at 6 03 34 PM Screenshot 2026-07-14 at 6 04 02 PM Screenshot 2026-07-14 at 7 33 25 PM Screenshot 2026-07-14 at 7 33 37 PM Screenshot 2026-07-14 at 7 33 47 PM Screenshot 2026-07-14 at 7 33 59 PM Screenshot 2026-07-14 at 7 34 05 PM Screenshot 2026-07-14 at 7 34 13 PM Screenshot 2026-07-16 at 1 46 16 PM

Bug Fixes

This pull request makes improvements to the project editing and detail UI, focusing on user feedback and layout robustness. The most important changes are:

User feedback enhancements:

  • The handleSave function in edit.vue now displays a success toast with { clearOnUrlChange: false } to prevent the toast from being cleared on navigation, and shows an error toast if saving fails.

UI layout improvements:

  • .project-detail-summary-item in index.vue now has min-width: 0 to better handle flexbox sizing and prevent overflow issues.
  • .project-detail-summary-item strong is updated with flex: 1, min-width: 0, and overflow-wrap: anywhere to improve text wrapping and ensure the layout remains stable with long content.

Screenshots

Before After
Screenshot 2026-08-05 at 11 46 17 AM Screenshot 2026-08-05 at 11 46 02 AM

DevBoard Tasks

  1. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4076
  2. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4082
  3. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4083
  4. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4079
  5. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4080
  6. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4087
  7. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4085
  8. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4075
  9. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4077

Changes implemented

  • Added separate mapper and validator task editor panels based on task status.
  • Limited validation feedback controls to tasks awaiting review.
  • Added self-validation prevention for the last mapper.
  • Updated task status labels, actions, timer, sidebar width, and review option styling.
  • Added project-role loading and permission error handling.
  • Added paginated API loading for projects containing more than 1,000 tasks.
  • Fixed rich-text editor input and consistent HTML sanitization.
  • Added accessible keyboard navigation for task editor tabs.
  • Added proper area-unit formatting with km² and mi² options during project creation and task generation.
  • Improved task-generation button alignment and styling.
  • Removed inactive three-dot menus from project cards.
  • Consolidated duplicated styles and moved reusable colors into theme variables.
  • Extracted/precomputed derived UI state following Vue/Nuxt guidelines.
  • Added cleanup for Rapid event listeners.
  • Added unit tests for permissions, task submission, self-validation, Rapid listeners, and rich-text editing.

Impacted areas for testing

  • Project creation and editing, especially rich-text fields.
  • Project review step and HTML content display.
  • Project task generation, area-unit switching, generate/reset controls, and projects with 450+ or 1,000+ tasks.
  • Project task list filtering, sorting, pagination, selection, locking, and unlocking.
  • Mapper workflow for to_map and to_remap tasks.
  • Validator workflow for to_review tasks, including approve and request-remap paths.
  • Prevention of validating a task last mapped by the same user.
  • Task editor timer, sidebar, tabs, responsive layout, and Rapid upload/submission behavior.
  • Project role-based action visibility and permission-error states.
  • Project cards, status badges, progress indicators, and responsive theme styling.

Screenshots

Screenshot 2026-07-29 at 7 37 13 PM Screenshot 2026-07-29 at 7 39 48 PM Screenshot 2026-07-29 at 7 46 18 PM Screenshot 2026-07-29 at 7 46 29 PM Screenshot 2026-07-29 at 7 46 54 PM Screenshot 2026-07-29 at 7 48 56 PM

Summary

  • Refined project listing, project details, tabs, and project creation page styling for pixel-perfect layouts.
  • Updated typography, colors, spacing, borders, radii, shadows, progress bars, cards, badges, filters, and responsive layout treatments.
  • Added theme text color variables and standardized their use across project and wizard components.
  • Replaced project list view-toggle icons with SVG image assets and adjusted toggle/grid styling.
  • Improved project creation wizard step layouts and review styling.
  • Updated zero-progress task summary capitalization from “Not started” to “Not Started.”

shweta2101 and others added 30 commits July 8, 2026 12:52
Introduce a full-featured Project Edit page (pages/workspace/[id]/projects/[projectId]/edit.vue) that lets project leads edit description/instructions, manage team members (search, add, update roles, remove), change configuration (lock timeout, review requirement) and run project actions (reset, close, delete) with confirmation flows. Add a reusable AppConfirmationDialog component for consistent confirmation UI and keyboard handling. Update RichTextEditor to track last emitted value and avoid re-applying identical editor updates (prevents echo/loop when syncing modelValue). Also include supporting changes to project-related services/types and the projects index view to integrate the new edit functionality and API calls.
Added deployment trigger to deploy to Azure Static Webapps
Added deployment trigger to deploy to Azure Static Webapps
This pull request introduces updates to the deployment workflows, mainly
to improve consistency in environment naming and to automate deployments
upon pull request merges. The most important changes are grouped below:

**Workflow Automation:**

* Added a new workflow `.github/workflows/trigger-deploy-on-merge.yml`
that triggers the deployment process automatically when a pull request
is merged into one of the main branches (`develop`, `staging`,
`production`, or `testing`).

**Environment Naming Consistency:**

* Changed the default environment input in
`.github/workflows/deploy-to-azure.yml` from `development` to `develop`
to match branch naming conventions.
* Updated the environment mapping in the deployment workflow to use
`develop` instead of `development`.

**Deployment Parameter Improvements:**

* Added a new parameter `production_branch` to the deploy-to-azure
workflow, set to the selected environment.

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

## Summary

- Added an automated Azure Static Web Apps deployment trigger for merged
pull requests targeting `develop`, `staging`, `production`, or
`testing`.
- Renamed the default deployment environment from `development` to
`develop` and updated its mapping.
- Added `production_branch` configuration using the selected deployment
environment.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Trigger only on pull request merge
Trigger only on pull request merge
This pull request makes a small change to the deployment workflow,
ensuring that the `deploy-frontend` job only runs when a pull request is
merged.

* Added a conditional (`if: github.event.pull_request.merged == true`)
to the `deploy-frontend` job in
`.github/workflows/trigger-deploy-on-merge.yml` to prevent deployments
on unmerged pull requests.
Changed the option needed for develop deployment
Changed the option needed for develop deployment
Add support for a single custom imagery JSON object throughout the project wizard and project edit/create flows. Introduces parseProjectWizardCustomImagery and validateProjectCustomImagery (new services/project-custom-imagery.ts) with schema-based validation and debounced client-side checks; UI now shows validation state and error messages. Wire custom imagery into payloads and project updates (services/project-wizard-payload.ts, services/projects.ts) and update types accordingly. Add resolveHttpErrorMessage helper to normalize API error messages and replace many ad-hoc error handling sites to surface clearer messages. Minor UX/styling fixes: overflow-wrap for toast/text areas, JSON textarea styling, and change project name validation to use the validate-name endpoint.
Introduce a shared usePagination composable and refactor ContributorsTab and TasksTab to use it (DRY pagination logic, visible pagination items, clamping). Add workspace user error handling and retry support in project wizard components (AssignUsersField, SettingsStep, create page, and useProjectWizardSettings). Harden useProjectWizard persistence: validate stored state, debounce writes with a timer, handle storage errors, and preserve createdProject correctly. Update AppConfirmationDialog class names and prevent closing on Escape when busy. Add unsaved-edits confirmation to task editor and change back navigation to a button to intercept navigation. Improve pages: prevent cancelling while member mutation is in progress and surface load errors from contributors. Service updates: require VITE_NEW_API_URL at startup, sanitize project instructions before payload submission, and refine WorkspaceProjectsClient error handling (return null on 404, rethrow other errors). Misc: small UI/logic tweaks (AOI/details step gating on create, workspace route load error handling).
Pass project.customImagery through to RapidManager by adding a customImagerySource parameter to switchWorkspace, init, and #addCustomImagerySource. Update addCustomImagerySource to accept the passed data and create the imagery source; keep context assignment commented (left as a note). Add async/await and try/catch around manager.init in mountEditor to log initialization failures instead of failing silently.
Resolved the custom imagery handling
Enhance rich text rendering (overflow-x, blockquote and table styles) in RichTextContent.vue. Improve HTTP error extraction in services/http.ts to read body.message/body.error and fallback to plain text bodies. Use resolveHttpErrorMessage in useProjectWizardSettings to show detailed workspace user load errors. Refactor RapidManager to accept an optional customImagerySource, guard against null, add converted imagery sources to the imagery system, adjust init/switchWorkspace flow (auth patching, event binding, and async reset), and remove the example imagery block from util/rapid-imagery.ts.
Add strong typing and validation for custom imagery conversion and usage.

- services/rapid.ts: import ImagerySource type, cast incoming source for conversion, and bail out early if conversion returns null before creating/registering a Rapid.ImagerySource.
- util/rapid-imagery.ts: introduce RapidImagerySource interface, add isExtentWithZoom type guard, change convertToRapidImagerySource signature to accept ImagerySource|null and return RapidImagerySource|null, and compute safe min/max zoom defaults instead of reading raw values.

These changes improve type-safety and prevent creating invalid imagery sources when required fields are missing.
Introduce useProjectEditActions and useProjectEditMembers composables and refactor the project edit page to use them (removing duplicated member/action logic). Improve AppConfirmationDialog accessibility by adding tabindex, generating unique title IDs, restoring focus on close, and implementing a focus trap/Tab handling. Enhance HTTP error parsing to extract detailed JSON messages and existing lock info. Update imagery-related types and Rapid service to use the ImagerySource type and adjust related type aliases. Remove obsolete notes.md.
shweta2101 and others added 29 commits July 20, 2026 13:54
Refactor styling by introducing numerous SCSS variables for the project edit page and replacing hard-coded values with those variables. Updates cover padding, gaps, font sizes, radii, avatar sizes, sidebar min/max widths, grid columns, buttons, cards and mobile header/title sizes to improve maintainability and responsiveness. No behavioral changes—purely a style/structure refactor.
### Changes Implemented

1. Reduced excessive spacing and sizing on the project edit page to
create a more compact layout.
2. Decreased the sidebar width and spacing between navigation options.
3. Tightened header, breadcrumb, content, card, button, avatar, and
typography sizing.
4. Introduced descriptive SCSS variables for spacing, sizing,
typography, border radii, and responsive values.
5. Replaced hard-coded values with the new SCSS variables for improved
consistency and maintainability.
6. Reused Bootstrap variables such as $spacer and $font-size-base where
applicable.
7. Updated mobile-specific header, title, and navigation sizing to use
the new variables.
8. Kept all changes scoped to the project edit page.
9. No behavioral or data-flow changes were introduced.

### Areas for Testing

1. Verify the project edit page appears more compact on desktop screens.
2. Confirm the sidebar width and spacing between navigation options
match the expected UX.
3. Test every section:
   - Project details
   - Instructions
   - Imagery
   - Team Members
   - Configuration
   - Actions
   
### Screenshot
<img width="1470" height="956" alt="Screenshot 2026-07-20 at 1 53 33 PM"
src="https://github.com/user-attachments/assets/2601ecde-598e-4c15-8918-42f474758b7b"
/>


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

## Summary

- Added SCSS design variables to the project edit page and replaced
hard-coded spacing, sizing, typography, and layout values.
- Refined header, breadcrumbs, sidebar, content panels, cards, buttons,
avatars, and footer dimensions.
- Updated responsive mobile header, title, and navigation sizing.
- Reused Bootstrap variables where applicable; no behavior or data-flow
changes.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Bumps the npm_and_yarn group with 3 updates in the / directory: [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core), [esbuild](https://github.com/evanw/esbuild) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `@babel/core` from 7.29.0 to 7.29.7
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.29.7/packages/babel-core)

Updates `esbuild` from 0.27.7 to 0.28.1
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](evanw/esbuild@v0.27.7...v0.28.1)

Updates `vite` from 7.3.3 to 7.3.6
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v7.3.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.3.6/packages/vite)

Updates `vite` from 7.3.3 to 7.3.6
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v7.3.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.3.6/packages/vite)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-version: 7.29.7
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: esbuild
  dependency-version: 0.28.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: vite
  dependency-version: 7.3.6
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: vite
  dependency-version: 7.3.6
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
AZDO #3967 and #3966

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

- Implemented changeset and note “discussion” posting in
`components/review/Discussion.vue`, including:
- Changeset submission flow that re-fetches comments afterward so the UI
reflects the new comment (with server timestamps)
- Note submission flow that appends the new comment optimistically on
success (without re-fetching)
- Error handling via toast notifications that preserves the user’s draft
text on failure and prevents adding the failed comment
- Refactored the discussion UI’s message construction:
- Extracted note comment → `ChatMessage` mapping into a helper used by
`refreshNote()`
- Updated changeset comment refresh to always derive `messages` from
`osmClient.getChangesetComments` (relying on it to return an empty array
when appropriate)
- Updated OSM client comment submission in `services/osm.ts`:
- Send comment text via URL query parameters (`text=...`) instead of
multipart `FormData` for changeset comments
- Added `OsmApiClient.postNoteComment(...)` to post note comments via
the JSON endpoint (also using a query param) and return the updated note
- Expanded automated coverage:
- Unit tests for `getChangesetComments` (including date typing and
empty-array behavior)
- Unit tests verifying comment posting uses the expected `text=` URL
encoding for both changeset and note endpoints
- E2E tests validating optimistic note append on success, and toast +
draft preservation + no message append on failure
- Adjusted dev/proxy and environment setup to support local development
reliably:
  - Nuxt `devServer.host` set to `0.0.0.0`
- Reworked `nitro.devProxy` into object-based route rules (with
`changeOrigin`) and expanded proxied SPA backends (adding `/new-api`,
`/osm`, `/tdei`, `/tdei-user`, while removing `/workspaces`)
  - Broadened Vite `server.allowedHosts` patterns
- Updated `.env.example` and `README.md` to reflect the new devProxy
routing approach
- CI and repo hygiene tweaks:
  - Switched CI dependency install from `npm ci` to `npm install`
  - Updated `.gitignore` to ignore Claude-related paths
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps the npm_and_yarn group with 3 updates in the / directory:
[@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core),
[esbuild](https://github.com/evanw/esbuild) and
[vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).

Updates `@babel/core` from 7.29.0 to 7.29.7
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/babel/babel/releases">@​babel/core's
releases</a>.</em></p>
<blockquote>
<h2>v7.29.7 (2026-05-25)</h2>
<p>Re-release all packages with npm provenance attestations</p>
<h2>v7.29.6 (2026-05-25)</h2>
<h4>:bug: Bug Fix</h4>
<ul>
<li><code>babel-generator</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/18014">#18014</a>
Catchup source map position in preserveFormat (<a
href="https://github.com/nicolo-ribaudo"><code>@​nicolo-ribaudo</code></a>)</li>
</ul>
</li>
<li><code>babel-core</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/18001">#18001</a>
[7.x packport]Improve input source map handling (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
<li><code>babel-core</code>, <code>babel-generator</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17998">#17998</a>
Preserve original identifier names from input sourcemaps (<a
href="https://github.com/babel/babel/tree/HEAD/packages/babel-core/issues/17992">#17992</a>)
(<a href="https://github.com/Andarist"><code>@​Andarist</code></a>)</li>
</ul>
</li>
</ul>
<h4>Committers: 3</h4>
<ul>
<li>Huáng Jùnliàng (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
<li>Mateusz Burzyński (<a
href="https://github.com/Andarist"><code>@​Andarist</code></a>)</li>
<li>Nicolò Ribaudo (<a
href="https://github.com/nicolo-ribaudo"><code>@​nicolo-ribaudo</code></a>)</li>
</ul>
<h2>v7.29.5 (2026-05-05)</h2>
<h4>:house:  Internal</h4>
<ul>
<li><code>babel-preset-env</code>
<ul>
<li>Update <code>@babel/*</code> dependencies</li>
</ul>
</li>
</ul>
<h2>v7.29.4 (2026-05-05)</h2>
<h4>:bug: Bug Fix</h4>
<ul>
<li><code>babel-plugin-transform-modules-systemjs</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17974">#17974</a>
[7.x backport]fix(systemjs): improve module string name support (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>Committers: 1</h4>
<ul>
<li>Huáng Jùnliàng (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
<h2>v7.29.3 (2026-04-30)</h2>
<h4>:eyeglasses: Spec Compliance</h4>
<ul>
<li><code>babel-parser</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17923">#17923</a>
Support flow extends bound (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>:bug: Bug Fix</h4>
<ul>
<li><code>babel-helper-create-class-features-plugin</code>,
<code>babel-plugin-proposal-decorators</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17931">#17931</a>
fix(decorators): replace super within all removed static elements (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
<li><code>babel-register</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17915">#17915</a> Fix
thread synchronization issues in <code>@babel/register</code> (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-compat-data</code>,
<code>babel-plugin-bugfix-safari-rest-destructuring-rhs-array</code>,
<code>babel-preset-env</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17788">#17788</a> Add
bugfix plugin for Safari array rest destructuring bug (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>:nail_care: Polish</h4>
<ul>
<li><code>babel-parser</code></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/babel/babel/commit/4fba7541180bf5f58256d8e358b544e3831ad090"><code>4fba754</code></a>
v7.29.7</li>
<li><a
href="https://github.com/babel/babel/commit/04ea6b27fdac8f40c3481aec2080ac9678779509"><code>04ea6b2</code></a>
v7.29.6</li>
<li><a
href="https://github.com/babel/babel/commit/99f498a9b9fa0b900d603fbe8f6601bb3b9e42bb"><code>99f498a</code></a>
[7.x packport]Improve input source map handling (<a
href="https://github.com/babel/babel/tree/HEAD/packages/babel-core/issues/18001">#18001</a>)</li>
<li><a
href="https://github.com/babel/babel/commit/feba0a3654c596bd369d1ef1231f5d56666d56dc"><code>feba0a3</code></a>
Preserve original identifier names from input sourcemaps (<a
href="https://github.com/babel/babel/tree/HEAD/packages/babel-core/issues/17992">#17992</a>)
(<a
href="https://github.com/babel/babel/tree/HEAD/packages/babel-core/issues/17998">#17998</a>)</li>
<li>See full diff in <a
href="https://github.com/babel/babel/commits/v7.29.7/packages/babel-core">compare
view</a></li>
</ul>
</details>
<br />

Updates `esbuild` from 0.27.7 to 0.28.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/evanw/esbuild/releases">esbuild's
releases</a>.</em></p>
<blockquote>
<h2>v0.28.1</h2>
<ul>
<li>
<p>Disallow <code>\</code> in local development server HTTP requests (<a
href="https://github.com/evanw/esbuild/security/advisories/GHSA-g7r4-m6w7-qqqr">GHSA-g7r4-m6w7-qqqr</a>)</p>
<p>This release fixes a security issue where HTTP requests to esbuild's
local development server could traverse outside of the serve directory
on Windows using a <code>\</code> backslash character. It happened due
to the use of Go's <code>path.Clean()</code> function, which only
handles Unix-style <code>/</code> characters. HTTP requests with paths
containing <code>\</code> are no longer allowed.</p>
<p>Thanks to <a
href="https://github.com/dellalibera"><code>@​dellalibera</code></a> for
reporting this issue.</p>
</li>
<li>
<p>Add integrity checks to the Deno API (<a
href="https://github.com/evanw/esbuild/security/advisories/GHSA-gv7w-rqvm-qjhr">GHSA-gv7w-rqvm-qjhr</a>)</p>
<p>The previous release of esbuild added integrity checks to esbuild's
npm install script. This release also adds integrity checks to esbuild's
Deno install script. Now esbuild's Deno API will also fail with an error
if the downloaded esbuild binary contains something other than the
expected content.</p>
<p>Note that esbuild's Deno API installs from
<code>registry.npmjs.org</code> by default, but allows the
<code>NPM_CONFIG_REGISTRY</code> environment variable to override this
with a custom package registry. This change means that the esbuild
executable served by <code>NPM_CONFIG_REGISTRY</code> must now match the
expected content.</p>
<p>Thanks to <a
href="https://github.com/sondt99"><code>@​sondt99</code></a> for
reporting this issue.</p>
</li>
<li>
<p>Avoid inlining <code>using</code> and <code>await using</code>
declarations (<a
href="https://redirect.github.com/evanw/esbuild/issues/4482">#4482</a>)</p>
<p>Previously esbuild's minifier sometimes incorrectly inlined
<code>using</code> and <code>await using</code> declarations into
subsequent uses of that declaration, which then fails to dispose of the
resource correctly. This bug happened because inlining was done for
<code>let</code> and <code>const</code> declarations by avoiding doing
it for <code>var</code> declarations, which no longer worked when more
declaration types were added. Here's an example:</p>
<pre lang="js"><code>// Original code
{
  using x = new Resource()
  x.activate()
}
<p>// Old output (with --minify)<br />
new Resource().activate();</p>
<p>// New output (with --minify)<br />
{using e=new Resource;e.activate()}<br />
</code></pre></p>
</li>
<li>
<p>Fix module evaluation when an error is thrown (<a
href="https://redirect.github.com/evanw/esbuild/issues/4461">#4461</a>,
<a
href="https://redirect.github.com/evanw/esbuild/pull/4467">#4467</a>)</p>
<p>If an error is thrown during module evaluation, esbuild previously
didn't preserve the state of the module for subsequent module
references. This was observable if <code>import()</code> or
<code>require()</code> is used to import a module multiple times. The
thrown error is supposed to be thrown by every call to
<code>import()</code> or <code>require()</code>, not just the first.
With this release, esbuild will now throw the same error every time you
call <code>import()</code> or <code>require()</code> on a module that
throws during its evaluation.</p>
</li>
<li>
<p>Fix some edge cases around the <code>new</code> operator (<a
href="https://redirect.github.com/evanw/esbuild/issues/4477">#4477</a>)</p>
<p>Previously esbuild incorrectly printed certain edge cases involving
complex expressions inside the target of a <code>new</code> expression
(specifically an optional chain and/or a tagged template literal). The
generated code for the <code>new</code> target was not correctly wrapped
with parentheses, and either contained a syntax error or had different
semantics. These edge cases have been fixed so that they now correctly
wrap the <code>new</code> target in parentheses. Here is an example of
some affected code:</p>
<pre lang="js"><code>// Original code
new (foo()`bar`)()
new (foo()?.bar)()
<p>// Old output<br />
new foo()<code>bar</code>();<br />
new (foo())?.bar();</p>
<p></code></pre></p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/evanw/esbuild/blob/main/CHANGELOG.md">esbuild's
changelog</a>.</em></p>
<blockquote>
<h2>0.28.1</h2>
<ul>
<li>
<p>Disallow <code>\</code> in local development server HTTP requests (<a
href="https://github.com/evanw/esbuild/security/advisories/GHSA-g7r4-m6w7-qqqr">GHSA-g7r4-m6w7-qqqr</a>)</p>
<p>This release fixes a security issue where HTTP requests to esbuild's
local development server could traverse outside of the serve directory
on Windows using a <code>\</code> backslash character. It happened due
to the use of Go's <code>path.Clean()</code> function, which only
handles Unix-style <code>/</code> characters. HTTP requests with paths
containing <code>\</code> are no longer allowed.</p>
<p>Thanks to <a
href="https://github.com/dellalibera"><code>@​dellalibera</code></a> for
reporting this issue.</p>
</li>
<li>
<p>Add integrity checks to the Deno API (<a
href="https://github.com/evanw/esbuild/security/advisories/GHSA-gv7w-rqvm-qjhr">GHSA-gv7w-rqvm-qjhr</a>)</p>
<p>The previous release of esbuild added integrity checks to esbuild's
npm install script. This release also adds integrity checks to esbuild's
Deno install script. Now esbuild's Deno API will also fail with an error
if the downloaded esbuild binary contains something other than the
expected content.</p>
<p>Note that esbuild's Deno API installs from
<code>registry.npmjs.org</code> by default, but allows the
<code>NPM_CONFIG_REGISTRY</code> environment variable to override this
with a custom package registry. This change means that the esbuild
executable served by <code>NPM_CONFIG_REGISTRY</code> must now match the
expected content.</p>
<p>Thanks to <a
href="https://github.com/sondt99"><code>@​sondt99</code></a> for
reporting this issue.</p>
</li>
<li>
<p>Avoid inlining <code>using</code> and <code>await using</code>
declarations (<a
href="https://redirect.github.com/evanw/esbuild/issues/4482">#4482</a>)</p>
<p>Previously esbuild's minifier sometimes incorrectly inlined
<code>using</code> and <code>await using</code> declarations into
subsequent uses of that declaration, which then fails to dispose of the
resource correctly. This bug happened because inlining was done for
<code>let</code> and <code>const</code> declarations by avoiding doing
it for <code>var</code> declarations, which no longer worked when more
declaration types were added. Here's an example:</p>
<pre lang="js"><code>// Original code
{
  using x = new Resource()
  x.activate()
}
<p>// Old output (with --minify)<br />
new Resource().activate();</p>
<p>// New output (with --minify)<br />
{using e=new Resource;e.activate()}<br />
</code></pre></p>
</li>
<li>
<p>Fix module evaluation when an error is thrown (<a
href="https://redirect.github.com/evanw/esbuild/issues/4461">#4461</a>,
<a
href="https://redirect.github.com/evanw/esbuild/pull/4467">#4467</a>)</p>
<p>If an error is thrown during module evaluation, esbuild previously
didn't preserve the state of the module for subsequent module
references. This was observable if <code>import()</code> or
<code>require()</code> is used to import a module multiple times. The
thrown error is supposed to be thrown by every call to
<code>import()</code> or <code>require()</code>, not just the first.
With this release, esbuild will now throw the same error every time you
call <code>import()</code> or <code>require()</code> on a module that
throws during its evaluation.</p>
</li>
<li>
<p>Fix some edge cases around the <code>new</code> operator (<a
href="https://redirect.github.com/evanw/esbuild/issues/4477">#4477</a>)</p>
<p>Previously esbuild incorrectly printed certain edge cases involving
complex expressions inside the target of a <code>new</code> expression
(specifically an optional chain and/or a tagged template literal). The
generated code for the <code>new</code> target was not correctly wrapped
with parentheses, and either contained a syntax error or had different
semantics. These edge cases have been fixed so that they now correctly
wrap the <code>new</code> target in parentheses. Here is an example of
some affected code:</p>
<pre lang="js"><code>// Original code
new (foo()`bar`)()
new (foo()?.bar)()
<p>// Old output<br />
new foo()<code>bar</code>();<br />
new (foo())?.bar();<br />
</code></pre></p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/evanw/esbuild/commit/bb9db84c02433fbe37b3509f53f9f3e3cc48725e"><code>bb9db84</code></a>
publish 0.28.1 to npm</li>
<li><a
href="https://github.com/evanw/esbuild/commit/9ff053e53b8eeb990f59355dbea365277ac45ee2"><code>9ff053e</code></a>
security: add integrity checks to the Deno API</li>
<li><a
href="https://github.com/evanw/esbuild/commit/0a9bf2135b67c7e28989a5ba19f0f000805a5ab5"><code>0a9bf21</code></a>
enforce non-negative size in gzip parser</li>
<li><a
href="https://github.com/evanw/esbuild/commit/e2a1a7132058ee067fe736eac15f695861b8654e"><code>e2a1a71</code></a>
security: forbid <code>\\</code> in local dev server requests</li>
<li><a
href="https://github.com/evanw/esbuild/commit/83a2cbfc35809f4fd5152da59572d7bed7739d78"><code>83a2cbf</code></a>
fix <a
href="https://redirect.github.com/evanw/esbuild/issues/4482">#4482</a>:
don't inline <code>using</code> declarations</li>
<li><a
href="https://github.com/evanw/esbuild/commit/308ad745d824c77bc607603451b257d0f2fd9a38"><code>308ad74</code></a>
fix <a
href="https://redirect.github.com/evanw/esbuild/issues/4471">#4471</a>:
renaming of nested <code>var</code> declarations</li>
<li><a
href="https://github.com/evanw/esbuild/commit/f013f5f99a015bce92ec48d49181d4ad3177b29b"><code>f013f5f</code></a>
fix some typos</li>
<li><a
href="https://github.com/evanw/esbuild/commit/aafd6e48b1088336a5f5a17e930be7e840d43d8c"><code>aafd6e4</code></a>
chore: fix some minor issues in comments (<a
href="https://redirect.github.com/evanw/esbuild/issues/4462">#4462</a>)</li>
<li><a
href="https://github.com/evanw/esbuild/commit/15300c30b5e22f7cfcbed850c246d35095658386"><code>15300c3</code></a>
follow up: cjs evaluation fixes</li>
<li><a
href="https://github.com/evanw/esbuild/commit/1bda0c31d7697c0af44b3ab39b81e599e559a395"><code>1bda0c3</code></a>
fix <a
href="https://redirect.github.com/evanw/esbuild/issues/4461">#4461</a>,
fix <a
href="https://redirect.github.com/evanw/esbuild/issues/4467">#4467</a>:
esm evaluation fixes</li>
<li>Additional commits viewable in <a
href="https://github.com/evanw/esbuild/compare/v0.27.7...v0.28.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `vite` from 7.3.3 to 7.3.6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/releases">vite's
releases</a>.</em></p>
<blockquote>
<h2>v7.3.6</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v7.3.6/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v7.3.5</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v7.3.5/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/v7.3.6/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v7.3.5...v7.3.6">7.3.6</a>
(2026-06-25)<!-- raw HTML omitted --></h2>
<h3>Features</h3>
<ul>
<li>allow esbuild 0.28 (<a
href="https://redirect.github.com/vitejs/vite/issues/22743">#22743</a>)
(<a
href="https://github.com/vitejs/vite/commit/a24931e7934e80eff5895b89d9e612ad3ad3e1f4">a24931e</a>)</li>
</ul>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v7.3.3...v7.3.5">7.3.5</a>
(2026-06-01)<!-- raw HTML omitted --></h2>
<h3>Bug Fixes</h3>
<ul>
<li>backport <a
href="https://redirect.github.com/vitejs/vite/issues/22572">#22572</a>,
reject windows alternate paths (<a
href="https://redirect.github.com/vitejs/vite/issues/22574">#22574</a>)
(<a
href="https://github.com/vitejs/vite/commit/8c1855607b7c9884c4565d897ee98899a008a2d0">8c18556</a>)</li>
<li><strong>deps:</strong> backport <a
href="https://redirect.github.com/vitejs/vite/issues/22571">#22571</a>,
reject UNC paths for launch-editor-middleware (<a
href="https://redirect.github.com/vitejs/vite/issues/22573">#22573</a>)
(<a
href="https://github.com/vitejs/vite/commit/f20d64bef6e0ef1e4fa7a9783281c7bba0ce5292">f20d64b</a>)</li>
</ul>
<h3>Miscellaneous Chores</h3>
<ul>
<li>skip v7.3.4 release (<a
href="https://github.com/vitejs/vite/commit/8a6a0c9fc734dbfe293ac33a4954506ee50430e1">8a6a0c9</a>)</li>
</ul>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v7.3.3...v7.3.4">7.3.4</a>
(2026-06-01)<!-- raw HTML omitted --></h2>
<h3>Bug Fixes</h3>
<ul>
<li>backport <a
href="https://redirect.github.com/vitejs/vite/issues/22572">#22572</a>,
reject windows alternate paths (<a
href="https://redirect.github.com/vitejs/vite/issues/22574">#22574</a>)
(<a
href="https://github.com/vitejs/vite/commit/8c1855607b7c9884c4565d897ee98899a008a2d0">8c18556</a>)</li>
<li><strong>deps:</strong> backport <a
href="https://redirect.github.com/vitejs/vite/issues/22571">#22571</a>,
reject UNC paths for launch-editor-middleware (<a
href="https://redirect.github.com/vitejs/vite/issues/22573">#22573</a>)
(<a
href="https://github.com/vitejs/vite/commit/f20d64bef6e0ef1e4fa7a9783281c7bba0ce5292">f20d64b</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitejs/vite/commit/0a7b53ba230c6e68f502a89864534c607d393ab7"><code>0a7b53b</code></a>
release: v7.3.6</li>
<li><a
href="https://github.com/vitejs/vite/commit/a24931e7934e80eff5895b89d9e612ad3ad3e1f4"><code>a24931e</code></a>
feat: allow esbuild 0.28 (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22743">#22743</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/077945cb60df372a52cf999b6e532ba70fac7423"><code>077945c</code></a>
release: v7.3.5</li>
<li><a
href="https://github.com/vitejs/vite/commit/8a6a0c9fc734dbfe293ac33a4954506ee50430e1"><code>8a6a0c9</code></a>
chore: skip v7.3.4 release</li>
<li><a
href="https://github.com/vitejs/vite/commit/8c1855607b7c9884c4565d897ee98899a008a2d0"><code>8c18556</code></a>
fix: backport <a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22572">#22572</a>,
reject windows alternate paths (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22574">#22574</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/f20d64bef6e0ef1e4fa7a9783281c7bba0ce5292"><code>f20d64b</code></a>
fix(deps): backport <a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22571">#22571</a>,
reject UNC paths for launch-editor-middleware (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/2">#2</a>...</li>
<li>See full diff in <a
href="https://github.com/vitejs/vite/commits/v7.3.6/packages/vite">compare
view</a></li>
</ul>
</details>
<br />

Updates `vite` from 7.3.3 to 7.3.6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/releases">vite's
releases</a>.</em></p>
<blockquote>
<h2>v7.3.6</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v7.3.6/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v7.3.5</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v7.3.5/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/v7.3.6/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v7.3.5...v7.3.6">7.3.6</a>
(2026-06-25)<!-- raw HTML omitted --></h2>
<h3>Features</h3>
<ul>
<li>allow esbuild 0.28 (<a
href="https://redirect.github.com/vitejs/vite/issues/22743">#22743</a>)
(<a
href="https://github.com/vitejs/vite/commit/a24931e7934e80eff5895b89d9e612ad3ad3e1f4">a24931e</a>)</li>
</ul>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v7.3.3...v7.3.5">7.3.5</a>
(2026-06-01)<!-- raw HTML omitted --></h2>
<h3>Bug Fixes</h3>
<ul>
<li>backport <a
href="https://redirect.github.com/vitejs/vite/issues/22572">#22572</a>,
reject windows alternate paths (<a
href="https://redirect.github.com/vitejs/vite/issues/22574">#22574</a>)
(<a
href="https://github.com/vitejs/vite/commit/8c1855607b7c9884c4565d897ee98899a008a2d0">8c18556</a>)</li>
<li><strong>deps:</strong> backport <a
href="https://redirect.github.com/vitejs/vite/issues/22571">#22571</a>,
reject UNC paths for launch-editor-middleware (<a
href="https://redirect.github.com/vitejs/vite/issues/22573">#22573</a>)
(<a
href="https://github.com/vitejs/vite/commit/f20d64bef6e0ef1e4fa7a9783281c7bba0ce5292">f20d64b</a>)</li>
</ul>
<h3>Miscellaneous Chores</h3>
<ul>
<li>skip v7.3.4 release (<a
href="https://github.com/vitejs/vite/commit/8a6a0c9fc734dbfe293ac33a4954506ee50430e1">8a6a0c9</a>)</li>
</ul>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v7.3.3...v7.3.4">7.3.4</a>
(2026-06-01)<!-- raw HTML omitted --></h2>
<h3>Bug Fixes</h3>
<ul>
<li>backport <a
href="https://redirect.github.com/vitejs/vite/issues/22572">#22572</a>,
reject windows alternate paths (<a
href="https://redirect.github.com/vitejs/vite/issues/22574">#22574</a>)
(<a
href="https://github.com/vitejs/vite/commit/8c1855607b7c9884c4565d897ee98899a008a2d0">8c18556</a>)</li>
<li><strong>deps:</strong> backport <a
href="https://redirect.github.com/vitejs/vite/issues/22571">#22571</a>,
reject UNC paths for launch-editor-middleware (<a
href="https://redirect.github.com/vitejs/vite/issues/22573">#22573</a>)
(<a
href="https://github.com/vitejs/vite/commit/f20d64bef6e0ef1e4fa7a9783281c7bba0ce5292">f20d64b</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitejs/vite/commit/0a7b53ba230c6e68f502a89864534c607d393ab7"><code>0a7b53b</code></a>
release: v7.3.6</li>
<li><a
href="https://github.com/vitejs/vite/commit/a24931e7934e80eff5895b89d9e612ad3ad3e1f4"><code>a24931e</code></a>
feat: allow esbuild 0.28 (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22743">#22743</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/077945cb60df372a52cf999b6e532ba70fac7423"><code>077945c</code></a>
release: v7.3.5</li>
<li><a
href="https://github.com/vitejs/vite/commit/8a6a0c9fc734dbfe293ac33a4954506ee50430e1"><code>8a6a0c9</code></a>
chore: skip v7.3.4 release</li>
<li><a
href="https://github.com/vitejs/vite/commit/8c1855607b7c9884c4565d897ee98899a008a2d0"><code>8c18556</code></a>
fix: backport <a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22572">#22572</a>,
reject windows alternate paths (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22574">#22574</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/f20d64bef6e0ef1e4fa7a9783281c7bba0ce5292"><code>f20d64b</code></a>
fix(deps): backport <a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22571">#22571</a>,
reject UNC paths for launch-editor-middleware (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/2">#2</a>...</li>
<li>See full diff in <a
href="https://github.com/vitejs/vite/commits/v7.3.6/packages/vite">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 <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/TaskarCenterAtUW/workspaces-frontend/network/alerts).

</details>
Introduce area display unit support and refine task editor UX and permission checks.

- Add composable useAreaDisplayUnit to persist/display km² or mi², plus formatArea helper and AREA_UNIT_OPTIONS.
- Wire area unit toggle into project-wizard AreaOfInterestStep and TaskSetupPanel, replacing ad-hoc formatting with formatArea; display AOI area in ReviewStep.
- Update RichTextEditor and SettingsStep to use v-model for instructions synchronization.
- Overhaul task editor sidebar: add tabs (Completion / Instructions), review remap flow, lock time remaining display, action disabling/validation for review feedback, status labels, and styling improvements.
- Improve project detail/edit pages: fetch TDEI roles (tdeiUserClient), introduce useWorkspaceProjectPermissions (in useProjectRole), gate edit/management actions and UI (contributors, activation, edit button) based on workspace/project permissions.
- Misc UI/text updates: change "More mapping needed" → "More mapping required", adjust sort labels, remove duplicate "Lead" role option in AddContributorDialog, and several CSS/layout tweaks.
- Add unit tests for area display unit and project service behavior and update related types/util functions.

These changes centralize area unit logic, improve mapping/review flows, and tighten role-based UI/operation gating.
Introduce new task-editor UI components (Sidebar, ReviewPanel, MappingPanel) and an AreaUnitToggle component, and wire them into project wizard steps and task setup. Add composables for task editor state and flows (useTaskEditorContext, useTaskEditorSubmission, useTaskLockCountdown) plus related types. Extract area and rich-text helpers into util/area.ts and util/rich-text.ts and update RichTextContent and RichTextEditor to use the sanitization and improved active-tool tracking. Update useAreaDisplayUnit to delegate formatting/locale logic to util/area and simplify its API. Add unit tests for new composables/utilities and register BTabs in nuxt.config. These changes modularize the task editor UI, centralize area/HTML handling, and encapsulate submission/locking logic.
Prevent a race when attaching uploaded OSM changesets by adding a changesetAttachSequence counter: capture a sequence per attach call and ignore stale success/error/finally handling so only the latest attempt updates state/isSubmittingChangeset.

Make project creation surface TDEI role load failures by throwing a createError on failure instead of returning an empty array.

Update TdeiUserClient.getMyRolesForProjectGroupById to call the project-group-roles endpoint with paging and parse the JSON items directly (replacing the previous getMyProjectGroups call).
Delete the nested action buttons and their related CSS from ProjectCard.vue and ProjectListRow.vue, simplifying the stretched-link pattern. Comments about accessibility were tightened to note the stretched <nuxt-link> as the card/row link target. Removed .project-card-menu and .project-list-menu-button rules and the action column from the list-row grid (including responsive variant) and eliminated a duplicated CSS block. Overall cleanup reduces z-index positioning hacks and markup/CSS complexity for project cards and list rows.
…Project creation (#97)

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

## Summary

- Refined project listing, project details, tabs, and project creation
page styling for pixel-perfect layouts.
- Updated typography, colors, spacing, borders, radii, shadows, progress
bars, cards, badges, filters, and responsive layout treatments.
- Added theme text color variables and standardized their use across
project and wizard components.
- Replaced project list view-toggle icons with SVG image assets and
adjusted toggle/grid styling.
- Improved project creation wizard step layouts and review styling.
- Updated zero-progress task summary capitalization from “Not started”
to “Not Started.”

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Introduce new theme tokens and replace hardcoded colors/sizes with variables; standardize spacing units (rem) across many components. Add AppPage padding prop and apply to several pages. Improve list rendering by exposing computed display arrays (validators, users, tasks) and move role/label resolution into computed properties. Add roleLoadError to useProjectRole and avoid redundant project-role fetches for workspace leads. Implement batched task page fetching in WorkspaceProjectsClient with TASK_PAGE_SIZE_MAXIMUM and concurrency to avoid large bursts. Add util/task-access and several unit tests; tidy task-editor lifecycle by storing/cleanup of listener handles. Misc: small API/signature and import cleanups, accessibility and copy/error UI tweaks.
Prevent changing or removing the project "lead" role and refine role-selection UI/logic. Changes remove the 'Lead' option from assignable role lists, replace role-check helpers with isAssignableProjectRole (excluding 'lead'), and guard add/update/remove flows so contributors with role === 'lead' cannot be reassigned or deleted. UI updates show a readonly "Lead" label instead of a selectable control for leads, add corresponding styles, and adjust search-result/list styling and overflow behavior. Small validations were added to stop invalid role assignments during add/update operations.
Update rich text editor to treat image and table tools as active (add mappings and tests). Make useTaskEditorSubmission pass a skip-specific fallback message and allow custom fallback messages from resolveTaskSubmitErrorMessage; add unit test for skip failure. Also include minor formatting/whitespace cleanups across components, pages, services, and utils.
Add documentation describing who can manage workspace projects and work on project tasks. The new docs/workspace-project-role-based-access.md covers role types (project-group POC, workspace role, project role), the effective project role resolution, detailed project and task permission matrices, contributor management rules, and implementation pointers to composables/useProjectRole.ts and pages/workspace/[id]/projects/[projectId]/index.vue.
…nd UI Consistency (#98)

## DevBoard Tasks

1. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4076
2. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4082
3. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4083
4. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4079
5. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4080
6. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4087
7. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4085
8. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4075
9. https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/4077

## Changes implemented

- Added separate mapper and validator task editor panels based on task
status.
- Limited validation feedback controls to tasks awaiting review.
- Added self-validation prevention for the last mapper.
- Updated task status labels, actions, timer, sidebar width, and review
option styling.
- Added project-role loading and permission error handling.
- Added paginated API loading for projects containing more than 1,000
tasks.
- Fixed rich-text editor input and consistent HTML sanitization.
- Added accessible keyboard navigation for task editor tabs.
- Added proper area-unit formatting with km² and mi² options during
project creation and task generation.
- Improved task-generation button alignment and styling.
- Removed inactive three-dot menus from project cards.
- Consolidated duplicated styles and moved reusable colors into theme
variables.
- Extracted/precomputed derived UI state following Vue/Nuxt guidelines.
- Added cleanup for Rapid event listeners.
- Added unit tests for permissions, task submission, self-validation,
Rapid listeners, and rich-text editing.

## Impacted areas for testing

- Project creation and editing, especially rich-text fields.
- Project review step and HTML content display.
- Project task generation, area-unit switching, generate/reset controls,
and projects with 450+ or 1,000+ tasks.
- Project task list filtering, sorting, pagination, selection, locking,
and unlocking.
- Mapper workflow for `to_map` and `to_remap` tasks.
- Validator workflow for `to_review` tasks, including approve and
request-remap paths.
- Prevention of validating a task last mapped by the same user.
- Task editor timer, sidebar, tabs, responsive layout, and Rapid
upload/submission behavior.
- Project role-based action visibility and permission-error states.
- Project cards, status badges, progress indicators, and responsive
theme styling.

## Screenshots
<img width="1470" height="956" alt="Screenshot 2026-07-29 at 7 37 13 PM"
src="https://github.com/user-attachments/assets/e2cdd0e1-724f-4b20-9747-7df22a3c2554"
/>
<img width="1470" height="956" alt="Screenshot 2026-07-29 at 7 39 48 PM"
src="https://github.com/user-attachments/assets/dfb34f30-b55d-4463-88c8-48df2bc217fa"
/>
<img width="1470" height="956" alt="Screenshot 2026-07-29 at 7 46 18 PM"
src="https://github.com/user-attachments/assets/b98e9aeb-7cda-471d-a31b-5dced03dfae9"
/>
<img width="1470" height="956" alt="Screenshot 2026-07-29 at 7 46 29 PM"
src="https://github.com/user-attachments/assets/740caa44-9db1-4b28-a9f8-285f7b81034d"
/>
<img width="1470" height="956" alt="Screenshot 2026-07-29 at 7 46 54 PM"
src="https://github.com/user-attachments/assets/94f676c1-8a64-4676-bd03-decbc788ddd7"
/>
<img width="1470" height="956" alt="Screenshot 2026-07-29 at 7 48 56 PM"
src="https://github.com/user-attachments/assets/a77f0cf1-c884-4c18-a8e7-879404f817e0"
/>


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

- Split the task editor into dedicated mapping and review panels, with a
reusable sidebar and explicit approve vs “request remap” review flow
(including required remap feedback inputs: reason + notes).
- Centralized task editor state and review payload validation in
`useTaskEditorContext`, and refactored task submission/release to use
shared composables (including improved “skip” failure messaging via a
skip-specific fallback).
- Added task lock countdown support (`useTaskLockCountdown` + formatter)
and updated editor UI/status labeling to support the new `to_remap` task
API state.
- Introduced self-validation prevention so users can’t validate their
own task mappings (`isTaskSelfValidation`), and updated task editor
actions/labels accordingly.
- Reworked project/task permissions handling: added workspace-scoped
permission helpers and `roleLoadError` surfaced from `useProjectRole`,
gated UI/actions with early returns, and added a banner when project
permissions fail to load.
- Improved contributors and role management rules by making “lead”
read-only (no lead assignment changes; lead removal behavior locked
down), simplifying role options, and optimizing contributor dialog
rendering.
- Implemented scalable task pagination for large projects (>1,000 tasks)
via bounded page sizing/concurrent fetching, enriched list items with
API status/mapper info, and updated task status normalization/labels
(including “More mapping required” wording).
- Added end-to-end area unit support for both AOI and task-area
selection: new `AreaDisplayUnit` utilities (`formatArea`, validation,
US-locale default), persisted unit preference (`useAreaDisplayUnit`),
and new `AreaUnitToggle` UI with km²/mi² formatting.
- Hardened rich-text handling by switching sanitization to a shared
`sanitizeRichTextHtml` helper, refactoring the TipTap editor to use
`defineModel` and improved active-tool detection (including
image/table), and updating wizard sanitization payload handling.
- Improved UI consistency and styling by migrating key components to
theme/token-driven SCSS (badges, progress, cards, tabs, surfaces),
updating layout/padding behavior (`AppPage`), and refreshing project
card/list progress semantics and legend text.
- Strengthened cleanup and reliability in the Rapid editor by changing
listener registration APIs to return unsubscribe functions (and adding
unit tests for unsubscribe behavior).
- Expanded unit test coverage across permissions/role-loading failures,
pagination behavior, task editor context + submission + lock countdown,
Rapid listener cleanup, rich-text toolbar active state, and area/unit
utilities.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Keep the success toast visible across navigation and show an error toast on save failures: add { clearOnUrlChange: false } to toast.success and call toast.error(pageErrorMessage.value) in the catch handler. Also adjust project detail layout to avoid overflow: add min-width: 0 to .project-detail-summary-item, and set flex: 1, min-width: 0 and overflow-wrap: anywhere on the strong element to allow proper truncation/wrapping.
Move the success toast to after the save/finally block and prevent showing it when a save error occurs. Add a try/catch around navigateAfterSave so navigation failures display a warning toast instead of throwing, and return early from the save error path to avoid subsequent success handling. Improves UX by ensuring save state is finalized and navigation issues are reported gracefully.
## Bug Fixes
This pull request makes improvements to the project editing and detail
UI, focusing on user feedback and layout robustness. The most important
changes are:

**User feedback enhancements:**

* The `handleSave` function in `edit.vue` now displays a success toast
with `{ clearOnUrlChange: false }` to prevent the toast from being
cleared on navigation, and shows an error toast if saving fails.

**UI layout improvements:**

* `.project-detail-summary-item` in `index.vue` now has `min-width: 0`
to better handle flexbox sizing and prevent overflow issues.
* `.project-detail-summary-item strong` is updated with `flex: 1`,
`min-width: 0`, and `overflow-wrap: anywhere` to improve text wrapping
and ensure the layout remains stable with long content.

## Screenshots
|  Before |  After |
|---|---|
| <img width="1463" height="836" alt="Screenshot 2026-08-05 at 11 46
17 AM"
src="https://github.com/user-attachments/assets/6b496068-3091-4186-ad93-a5a71a83a1b4"
/> | <img width="1470" height="830" alt="Screenshot 2026-08-05 at 11 46
02 AM"
src="https://github.com/user-attachments/assets/75cca849-e256-4e55-80cf-893afad531d1"
/> |

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

## Summary

- Preserved the save success toast across URL changes.
- Added an error toast when saving fails.
- Improved project summary layout for long values.
- Allowed summary items to shrink and wrap content at arbitrary points.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@coderabbitai

coderabbitai Bot commented Aug 5, 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: bcb798e4-734f-4940-8ff3-5f72ba97fda7

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.

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.

3 participants