Develop To Staging - #100
Open
shweta2101 wants to merge 65 commits into
Open
Conversation
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.
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 -->
|
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 Plus 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 |
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/3984/
Changes Implemented
Project Editing
Added a project edit page at:
Restricted project editing to project leads.
Added editable sections for:
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:
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:detailstringsdetail.messageobjectsmsgmessagemessageerrortask_numberThe shared resolver is used by:
Custom Imagery
ImagerySource.Rapid Authentication and Integration
/loginendpoint during changeset upload.Confirmation Dialog Accessibility
Improved the confirmation dialog with:
role="dialog"aria-modal="true"useId()Impacted Areas Of Testing
Project Editing
403response.Contributor Management
Project Actions
Reset Tasks
Close Project
Delete Project
Custom Imagery Validation
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
Screenshots:
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:
handleSavefunction inedit.vuenow 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-iteminindex.vuenow hasmin-width: 0to better handle flexbox sizing and prevent overflow issues..project-detail-summary-item strongis updated withflex: 1,min-width: 0, andoverflow-wrap: anywhereto improve text wrapping and ensure the layout remains stable with long content.Screenshots
DevBoard Tasks
Changes implemented
Impacted areas for testing
to_mapandto_remaptasks.to_reviewtasks, including approve and request-remap paths.Screenshots
Summary