Skip to content

App mode - builder toolbar save - 7#9030

Merged
pythongosssss merged 5 commits intomainfrom
pysssss/appmode/builder-toolbar-save.5
Feb 23, 2026
Merged

App mode - builder toolbar save - 7#9030
pythongosssss merged 5 commits intomainfrom
pysssss/appmode/builder-toolbar-save.5

Conversation

@pythongosssss
Copy link
Member

@pythongosssss pythongosssss commented Feb 20, 2026

Summary

Implements save flow for the builder toolbar.
The todo will be done in a future PR once the serailized format is finalized

Screenshots (if applicable)

app.mode.save.mp4

┆Issue is synchronized with this Notion page by Unito

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 20, 2026

📝 Walkthrough

Walkthrough

These changes introduce a complete builder save-as workflow, including reusable dialog components, a composition hook to orchestrate the save flow, service updates to handle filename and mode options, and corresponding localization strings for the user interface.

Changes

Cohort / File(s) Summary
Dialog Components
src/components/builder/BuilderDialog.vue, src/components/builder/BuilderSaveDialogContent.vue, src/components/builder/BuilderSaveSuccessDialogContent.vue
Three new Vue components implementing a save-as workflow: BuilderDialog is a reusable modal container with header, body, and footer slots; BuilderSaveDialogContent handles filename input and save-type selection (App/NodeGraph); BuilderSaveSuccessDialogContent displays success confirmation with optional view action.
Save Workflow Logic
src/components/builder/useBuilderSave.ts
New composition hook that orchestrates the save workflow, managing dialogs and coordinating with appModeStore, workflowService, and dialogStore. Handles triggering saves from isBuilderSaving state, displaying save dialogs for temporary workflows, executing saves with options, and showing success dialogs.
Workflow Service Updates
src/platform/workflow/core/services/workflowService.ts
Modified saveWorkflowAs to accept options object with filename and openAsApp properties, return boolean success/failure status, and conditionally update linearMode and trigger state checks based on options.
Localization
src/locales/en/main.json
Added localization keys for the save-as workflow under builderToolbar, including UI labels (saveAs, filename), save-type options (app, nodeGraph) with descriptions, and success messages with conditional prompts.
Integration
src/views/GraphView.vue
Imported and invoked useBuilderSave composition hook in GraphView setup to enable save workflow functionality.

Sequence Diagram

sequenceDiagram
    participant User
    participant GraphView
    participant useBuilderSave as useBuilderSave Hook
    participant dialogStore
    participant appModeStore
    participant BuilderDialog as Save Dialog Components
    participant workflowService
    
    User->>GraphView: Trigger save action
    GraphView->>appModeStore: setBuilderSaving(true)
    appModeStore-->>useBuilderSave: isBuilderSaving = true (watched)
    
    alt Temporary workflow
        useBuilderSave->>useBuilderSave: showSaveDialog()
        useBuilderSave->>dialogStore: Show BuilderSaveDialogContent
        dialogStore->>BuilderDialog: Render save dialog
        BuilderDialog-->>User: Display filename & type options
        
        User->>BuilderDialog: Enter filename & select type
        BuilderDialog->>useBuilderSave: onSave(filename, openAsApp)
        useBuilderSave->>workflowService: saveWorkflowAs(workflow, {filename, openAsApp})
        workflowService->>workflowService: Save file & update state
        workflowService-->>useBuilderSave: true (success)
        useBuilderSave->>dialogStore: Close save dialog
        useBuilderSave->>useBuilderSave: showSuccessDialog()
        useBuilderSave->>dialogStore: Show BuilderSaveSuccessDialogContent
        dialogStore->>BuilderDialog: Render success dialog
        BuilderDialog-->>User: Show success message
        User->>BuilderDialog: Click close or view app
        BuilderDialog->>useBuilderSave: onClose() or onViewApp()
        useBuilderSave->>appModeStore: resetSaving()
    else Permanent workflow
        useBuilderSave->>workflowService: saveWorkflow(workflow)
        workflowService-->>useBuilderSave: Success
        useBuilderSave->>useBuilderSave: showSuccessDialog()
        useBuilderSave->>appModeStore: resetSaving()
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Poem

🐰 A workflow to save, with dialog in place,
The builder now saves at a quickening pace!
Choose app or graph with a hop and a bound,
Success! Your creation is safely renowned!

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description covers the summary but is missing the detailed 'Changes' and 'Review Focus' sections required by the template. Add 'Changes' section detailing what was added/modified, and 'Review Focus' section highlighting critical design decisions or edge cases.
Title check ❓ Inconclusive The title 'App mode - builder toolbar save - 7' is vague and lacks specificity about what was actually implemented. Use a more descriptive title like 'Implement save flow for builder toolbar' that clearly conveys the main change without generic suffixes.
✅ Passed checks (1 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch pysssss/appmode/builder-toolbar-save.5

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 and usage tips.

@github-actions
Copy link

github-actions bot commented Feb 20, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 02/23/2026, 06:51:13 PM UTC

Links

@github-actions
Copy link

github-actions bot commented Feb 20, 2026

🎭 Playwright: ✅ 531 passed, 0 failed · 2 flaky

📊 Browser Reports
  • chromium: View Report (✅ 518 / ❌ 0 / ⚠️ 2 / ⏭️ 10)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 10 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/components/builder/BuilderDialog.vue`:
- Around line 13-19: Replace the raw <button> used for closing in
BuilderDialog.vue with the shared Button component
(src/components/ui/button/Button.vue): import and register Button in the
component, render <Button variant="link"> instead of the raw element, pass the
existing :aria-label and the `@click`="$emit('close')" through to Button, keep the
current class overrides (the long class string and the <i class="pi pi-times
size-4" /> child) so styling/behavior remain identical, and ensure the Button
component receives any necessary props or listeners to preserve focus/hover/ring
behavior.

In `@src/components/builder/BuilderSaveDialogContent.vue`:
- Around line 28-58: The save-type options are rendered as raw <button>
elements; replace them with the shared Button component
(src/components/ui/button/Button.vue) so they follow the design system while
preserving behavior—use the Button component where the loop over saveTypeOptions
is rendered, keep the same props/state bindings (openAsApp, option.value,
option.icon, option.title, option.subtitle, itemClasses), preserve ARIA
roles/aria-checked and the click handler by setting `@click` to set openAsApp =
option.value, and apply an appropriate variant (e.g., variant="link" or other
existing variant) and classes to reproduce the layout (including the icon
container, text spans, and conditional check icon) so visual/ARIA behavior
remains unchanged.

In `@src/components/builder/useBuilderSave.ts`:
- Around line 53-65: The save dialog close path leaves the isBuilderSaving flag
true; ensure resetSaving (or the setter that clears isBuilderSaving) is invoked
whenever the dialog is closed or cancelled. Update showSaveDialog to pass
dialogComponentProps.onClose=resetSaving (already present) and confirm
closeSaveDialog and any alternate dialog opening path (the similar block around
lines 107-118) call resetSaving when closing or onCancel; specifically modify
closeSaveDialog (and the other dialog close handler) to call resetSaving so the
isBuilderSaving flag is cleared on both Save completion and when the user
cancels/closes the dialog.

@pythongosssss pythongosssss force-pushed the pysssss/appmode/builder-toolbar.4 branch from 8c87a21 to 7e2c5d9 Compare February 21, 2026 16:14
@pythongosssss pythongosssss force-pushed the pysssss/appmode/builder-toolbar-save.5 branch 2 times, most recently from 36986c0 to 9857cc3 Compare February 21, 2026 16:39
@pythongosssss pythongosssss marked this pull request as ready for review February 21, 2026 21:02
@pythongosssss pythongosssss requested review from a team as code owners February 21, 2026 21:02
@dosubot
Copy link

dosubot bot commented Feb 21, 2026

Related Documentation

Checked 0 published document(s) in 1 knowledge base(s). No updates required.

How did I do? Any feedback?  Join Discord

@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Feb 21, 2026
AustinMroz
AustinMroz previously approved these changes Feb 22, 2026
autofocus
type="text"
class="flex h-10 min-h-8 items-center self-stretch rounded-lg border-none bg-secondary-background pl-4 text-sm text-base-foreground focus:outline-none"
@keydown.enter="filename.trim() && onSave(filename.trim(), openAsApp)"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

"saveSuccessAppMessage": "'{name}' has been saved. It will open in App Mode by default from now on.",
"saveSuccessAppPrompt": "Would you like to view it now?",
"saveSuccessGraphMessage": "'{name}' has been saved. It will open as a node graph by default.",
"viewApp": "View app"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Potential repeat of prior comment on group app localizations.

In this case, I think all the current location is appropriate, so if it comes up, we can just ctrl+f

@pythongosssss pythongosssss force-pushed the pysssss/appmode/builder-toolbar.4 branch from 28080b1 to bf04561 Compare February 23, 2026 10:19
Base automatically changed from pysssss/appmode/builder-toolbar.4 to main February 23, 2026 18:48
@pythongosssss pythongosssss dismissed AustinMroz’s stale review February 23, 2026 18:48

The base branch was changed.

@dosubot dosubot bot added size:XL This PR changes 500-999 lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Feb 23, 2026
@pythongosssss pythongosssss force-pushed the pysssss/appmode/builder-toolbar-save.5 branch from 9aa54a9 to 2ccef4a Compare February 23, 2026 18:49
@dosubot dosubot bot added size:L This PR changes 100-499 lines, ignoring generated files. and removed size:XL This PR changes 500-999 lines, ignoring generated files. labels Feb 23, 2026
@github-actions
Copy link

📦 Bundle: 4.38 MB gzip 🔴 +1.6 kB

Details

Summary

  • Raw size: 20.6 MB baseline 20.6 MB — 🔴 +11.2 kB
  • Gzip: 4.38 MB baseline 4.38 MB — 🔴 +1.6 kB
  • Brotli: 3.38 MB baseline 3.38 MB — 🔴 +1.39 kB
  • Bundles: 224 current • 224 baseline • 110 added / 110 removed

Category Glance
Graph Workspace 🔴 +10.4 kB (962 kB) · Other 🔴 +578 B (7.62 MB) · Data & Services 🔴 +241 B (2.52 MB) · Vendor & Third-Party ⚪ 0 B (8.84 MB) · Panels & Settings ⚪ 0 B (436 kB) · Views & Navigation ⚪ 0 B (68.8 kB) · + 5 more

App Entry Points — 17.9 kB (baseline 17.9 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-BBBOH9SI.js (new) 17.9 kB 🔴 +17.9 kB 🔴 +6.36 kB 🔴 +5.5 kB
assets/index-CBsrL7JZ.js (removed) 17.9 kB 🟢 -17.9 kB 🟢 -6.36 kB 🟢 -5.48 kB

Status: 1 added / 1 removed

Graph Workspace — 962 kB (baseline 952 kB) • 🔴 +10.4 kB

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-Csf5H2J2.js (new) 962 kB 🔴 +962 kB 🔴 +207 kB 🔴 +157 kB
assets/GraphView-D-Y7MrIe.js (removed) 952 kB 🟢 -952 kB 🟢 -205 kB 🟢 -155 kB

Status: 1 added / 1 removed

Views & Navigation — 68.8 kB (baseline 68.8 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-DyIQZY51.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.83 kB
assets/CloudSurveyView-DYZ2Ji4K.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.83 kB
assets/CloudLoginView-CwnGNC8-.js (new) 10 kB 🔴 +10 kB 🔴 +2.92 kB 🔴 +2.58 kB
assets/CloudLoginView-KSGOVf-t.js (removed) 10 kB 🟢 -10 kB 🟢 -2.93 kB 🟢 -2.56 kB
assets/UserCheckView-C7zZVt5W.js (new) 8.41 kB 🔴 +8.41 kB 🔴 +2.22 kB 🔴 +1.94 kB
assets/UserCheckView-Ds8l9sg7.js (removed) 8.41 kB 🟢 -8.41 kB 🟢 -2.23 kB 🟢 -1.93 kB
assets/CloudSignupView-B9Yq1E58.js (removed) 7.41 kB 🟢 -7.41 kB 🟢 -2.32 kB 🟢 -2.03 kB
assets/CloudSignupView-BwMS9AKV.js (new) 7.41 kB 🔴 +7.41 kB 🔴 +2.32 kB 🔴 +2.03 kB
assets/CloudLayoutView-DAseiZ5r.js (removed) 6.43 kB 🟢 -6.43 kB 🟢 -2.1 kB 🟢 -1.82 kB
assets/CloudLayoutView-DYePfTz2.js (new) 6.43 kB 🔴 +6.43 kB 🔴 +2.1 kB 🔴 +1.82 kB
assets/CloudForgotPasswordView-D1BLhL1f.js (removed) 5.56 kB 🟢 -5.56 kB 🟢 -1.94 kB 🟢 -1.71 kB
assets/CloudForgotPasswordView-Dpp84_U6.js (new) 5.56 kB 🔴 +5.56 kB 🔴 +1.93 kB 🔴 +1.71 kB
assets/CloudAuthTimeoutView-DgPVAJ35.js (removed) 4.91 kB 🟢 -4.91 kB 🟢 -1.77 kB 🟢 -1.55 kB
assets/CloudAuthTimeoutView-jI0B9z45.js (new) 4.91 kB 🔴 +4.91 kB 🔴 +1.77 kB 🔴 +1.54 kB
assets/CloudSubscriptionRedirectView-BIpaDp_J.js (removed) 4.71 kB 🟢 -4.71 kB 🟢 -1.77 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-DTuDktCP.js (new) 4.71 kB 🔴 +4.71 kB 🔴 +1.77 kB 🔴 +1.56 kB
assets/UserSelectView-DMvQvuy4.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.64 kB 🔴 +1.47 kB
assets/UserSelectView-uzjGaI6q.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.46 kB
assets/CloudSorryContactSupportView-Dd0hIqYZ.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-CIz0E8h3.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

Panels & Settings — 436 kB (baseline 436 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-BqgjZHxZ.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.3 kB 🔴 +4.67 kB
assets/SecretsPanel-DKIhIn2w.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.3 kB 🟢 -4.65 kB
assets/LegacyCreditsPanel-BtcLrbjh.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +5.56 kB 🔴 +4.89 kB
assets/LegacyCreditsPanel-CHcpK56m.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -5.56 kB 🟢 -4.89 kB
assets/SubscriptionPanel-BBrZphf1.js (removed) 18.6 kB 🟢 -18.6 kB 🟢 -4.73 kB 🟢 -4.18 kB
assets/SubscriptionPanel-DSaGswOo.js (new) 18.6 kB 🔴 +18.6 kB 🔴 +4.73 kB 🔴 +4.15 kB
assets/KeybindingPanel-BiCB2B40.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.57 kB 🟢 -3.17 kB
assets/KeybindingPanel-CCpmLAio.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.56 kB 🔴 +3.16 kB
assets/AboutPanel-CvtflStD.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.73 kB 🟢 -2.46 kB
assets/AboutPanel-PkwieX3C.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.73 kB 🔴 +2.47 kB
assets/ExtensionPanel-C_lfwt0s.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.65 kB 🟢 -2.35 kB
assets/ExtensionPanel-DG8q5qaH.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.65 kB 🔴 +2.35 kB
assets/ServerConfigPanel-DcTp6W2z.js (removed) 6.44 kB 🟢 -6.44 kB 🟢 -2.13 kB 🟢 -1.92 kB
assets/ServerConfigPanel-EmSTbUmB.js (new) 6.44 kB 🔴 +6.44 kB 🔴 +2.12 kB 🔴 +1.92 kB
assets/UserPanel-BvQa5M2W.js (new) 6.16 kB 🔴 +6.16 kB 🔴 +1.99 kB 🔴 +1.74 kB
assets/UserPanel-CzEFzjaw.js (removed) 6.16 kB 🟢 -6.16 kB 🟢 -1.99 kB 🟢 -1.75 kB
assets/cloudRemoteConfig-C0YK6iyg.js (removed) 1.44 kB 🟢 -1.44 kB 🟢 -708 B 🟢 -614 B
assets/cloudRemoteConfig-cXCdk7Wo.js (new) 1.44 kB 🔴 +1.44 kB 🔴 +704 B 🔴 +611 B
assets/refreshRemoteConfig-BpB1wcb7.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +519 B 🔴 +459 B
assets/refreshRemoteConfig-DOkMKtFQ.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -517 B 🟢 -453 B
assets/config-QxkqTZy6.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-3cK4vYSX.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-AqJa7Oe1.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BOcWl0Qp.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BodhSOuG.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CCD8qxmc.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CVDNuOXV.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DLodCRRz.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DLqeCT09.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DP-OgTXN.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRIXyZ_Z.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-IRk9rDbu.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 10 added / 10 removed

User & Accounts — 16 kB (baseline 16 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-C_pcPu8C.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -991 B
assets/auth-hcgFbAke.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +987 B
assets/SignUpForm-Ba_BowN-.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.09 kB
assets/SignUpForm-Mg-ydW2b.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.09 kB
assets/UpdatePasswordContent-D62JYTPJ.js (removed) 2.37 kB 🟢 -2.37 kB 🟢 -1.07 kB 🟢 -943 B
assets/UpdatePasswordContent-DtodLsNg.js (new) 2.37 kB 🔴 +2.37 kB 🔴 +1.06 kB 🔴 +939 B
assets/firebaseAuthStore-BCzb2njZ.js (new) 790 B 🔴 +790 B 🔴 +384 B 🔴 +372 B
assets/firebaseAuthStore-BkirPWRS.js (removed) 790 B 🟢 -790 B 🟢 -392 B 🟢 -352 B
assets/auth-BW6E3f7c.js (removed) 357 B 🟢 -357 B 🟢 -222 B 🟢 -213 B
assets/auth-CqKOfvlw.js (new) 357 B 🔴 +357 B 🔴 +220 B 🔴 +192 B
assets/PasswordFields-CwRSeTaU.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-Cv4HUNOU.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Editors & Dialogs — 738 B (baseline 738 B) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-cIYODfoO.js (removed) 738 B 🟢 -738 B 🟢 -381 B 🟢 -330 B
assets/useSubscriptionDialog-DKRoP-eJ.js (new) 738 B 🔴 +738 B 🔴 +373 B 🔴 +332 B

Status: 1 added / 1 removed

UI Components — 47 kB (baseline 47 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-BwHi6XtA.js (removed) 9.85 kB 🟢 -9.85 kB 🟢 -3.4 kB 🟢 -3 kB
assets/useTerminalTabs-D6sG42Le.js (new) 9.85 kB 🔴 +9.85 kB 🔴 +3.4 kB 🔴 +2.99 kB
assets/ComfyQueueButton-0qg4Qyxi.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.49 kB 🟢 -2.23 kB
assets/ComfyQueueButton-D0ixR3WO.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.49 kB 🔴 +2.23 kB
assets/SubscribeButton-B4Up5Y_7.js (removed) 2.35 kB 🟢 -2.35 kB 🟢 -1.02 kB 🟢 -887 B
assets/SubscribeButton-CyUsvSJg.js (new) 2.35 kB 🔴 +2.35 kB 🔴 +1.02 kB 🔴 +890 B
assets/cloudFeedbackTopbarButton-Bw1Z9-pq.js (new) 1.6 kB 🔴 +1.6 kB 🔴 +851 B 🔴 +759 B
assets/cloudFeedbackTopbarButton-DjV_6n4u.js (removed) 1.6 kB 🟢 -1.6 kB 🟢 -858 B 🟢 -761 B
assets/ComfyQueueButton-C5om9zqP.js (removed) 795 B 🟢 -795 B 🟢 -396 B 🟢 -358 B
assets/ComfyQueueButton-D9DLYJea.js (new) 795 B 🔴 +795 B 🔴 +389 B 🔴 +352 B
assets/Button-UMWODG-q.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-Vch9A557.js 1.24 kB 1.24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FormSearchInput-DF1KXWVW.js 3.73 kB 3.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-BFZyZfVz.js 5.94 kB 5.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-BG-5K9Vv.js 7.45 kB 7.45 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-DcdcWs-e.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-hy7QYdVc.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.52 MB (baseline 2.52 MB) • 🔴 +241 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-D-C0pptP.js (new) 1.73 MB 🔴 +1.73 MB 🔴 +388 kB 🔴 +294 kB
assets/dialogService-D29e4H_J.js (removed) 1.73 MB 🟢 -1.73 MB 🟢 -387 kB 🟢 -294 kB
assets/api-C4mi_LSI.js (removed) 653 kB 🟢 -653 kB 🟢 -147 kB 🟢 -118 kB
assets/api-YA8aa8un.js (new) 653 kB 🔴 +653 kB 🔴 +147 kB 🔴 +118 kB
assets/load3dService-BAXK4AfY.js (new) 91 kB 🔴 +91 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/load3dService-Dzjh79tv.js (removed) 91 kB 🟢 -91 kB 🟢 -19.1 kB 🟢 -16.4 kB
assets/systemStatsStore-BPfSphDc.js (removed) 12.7 kB 🟢 -12.7 kB 🟢 -4.42 kB 🟢 -3.88 kB
assets/systemStatsStore-CLi75acy.js (new) 12.7 kB 🔴 +12.7 kB 🔴 +4.42 kB 🔴 +3.88 kB
assets/releaseStore-Cz3aIyqT.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.21 kB 🟢 -1.94 kB
assets/releaseStore-Dbk7UTeq.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.21 kB 🔴 +1.95 kB
assets/keybindingService-CHT0xkU6.js (removed) 6.52 kB 🟢 -6.52 kB 🟢 -1.71 kB 🟢 -1.47 kB
assets/keybindingService-yosypzG6.js (new) 6.52 kB 🔴 +6.52 kB 🔴 +1.71 kB 🔴 +1.47 kB
assets/bootstrapStore-LpBzuN8C.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -874 B 🟢 -795 B
assets/bootstrapStore-xy30HBVv.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +867 B 🔴 +791 B
assets/userStore-C1jYOwVY.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -720 B 🟢 -635 B
assets/userStore-Cg6aHaXp.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +718 B 🔴 +629 B
assets/audioService-DvyvaC0X.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +846 B 🔴 +723 B
assets/audioService-Oul7wm79.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -848 B 🟢 -725 B
assets/releaseStore-Cyr4GZQr.js (new) 762 B 🔴 +762 B 🔴 +380 B 🔴 +342 B
assets/releaseStore-DgT4Vjq8.js (removed) 762 B 🟢 -762 B 🟢 -388 B 🟢 -340 B
assets/settingStore-96CkNJa7.js (removed) 746 B 🟢 -746 B 🟢 -389 B 🟢 -345 B
assets/settingStore-BQUT-xvz.js (new) 746 B 🔴 +746 B 🔴 +382 B 🔴 +343 B
assets/workflowDraftStore-CU_zPmwf.js (new) 738 B 🔴 +738 B 🔴 +374 B 🔴 +336 B
assets/workflowDraftStore-DpzCDnwN.js (removed) 738 B 🟢 -738 B 🟢 -381 B 🟢 -334 B
assets/dialogService-Bc-JqOps.js (removed) 727 B 🟢 -727 B 🟢 -373 B 🟢 -328 B
assets/dialogService-CDW8hcrv.js (new) 727 B 🔴 +727 B 🔴 +366 B 🔴 +329 B
assets/serverConfigStore-DEs1_NHN.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 13 added / 13 removed

Utilities & Hooks — 58.3 kB (baseline 58.3 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-DDL-Sma9.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3d-DThqoSwy.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/useLoad3dViewer-DHWtwwj_.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useLoad3dViewer-gWZhMyKK.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.79 kB
assets/useFeatureFlags-meFjd9-k.js (new) 4.14 kB 🔴 +4.14 kB 🔴 +1.24 kB 🔴 +1.06 kB
assets/useFeatureFlags-wg4lJICt.js (removed) 4.14 kB 🟢 -4.14 kB 🟢 -1.24 kB 🟢 -1.06 kB
assets/useWorkspaceUI-CnRcrWWG.js (removed) 3 kB 🟢 -3 kB 🟢 -820 B 🟢 -703 B
assets/useWorkspaceUI-CRMnceHZ.js (new) 3 kB 🔴 +3 kB 🔴 +821 B 🔴 +703 B
assets/useSubscriptionCredits-C-1v2fXi.js (new) 2.75 kB 🔴 +2.75 kB 🔴 +1.04 kB 🔴 +908 B
assets/useSubscriptionCredits-CXqMZU3G.js (removed) 2.75 kB 🟢 -2.75 kB 🟢 -1.04 kB 🟢 -905 B
assets/subscriptionCheckoutUtil-BbeWk4AJ.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +929 B
assets/subscriptionCheckoutUtil-BgwILvdj.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -955 B
assets/useExternalLink-B_zY_C32.js (removed) 1.66 kB 🟢 -1.66 kB 🟢 -773 B 🟢 -683 B
assets/useExternalLink-CcmSiVP7.js (new) 1.66 kB 🔴 +1.66 kB 🔴 +770 B 🔴 +676 B
assets/useErrorHandling-BmAtYCgt.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -628 B 🟢 -536 B
assets/useErrorHandling-DUEBGynG.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +628 B 🔴 +535 B
assets/useWorkspaceSwitch-BqJzUpZe.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -547 B 🟢 -480 B
assets/useWorkspaceSwitch-CC8TW5r1.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +544 B 🔴 +486 B
assets/useLoad3d-BZ1_onlr.js (removed) 861 B 🟢 -861 B 🟢 -426 B 🟢 -380 B
assets/useLoad3d-CXG3DIfC.js (new) 861 B 🔴 +861 B 🔴 +421 B 🔴 +378 B
assets/audioUtils-Biypz_g-.js (new) 858 B 🔴 +858 B 🔴 +497 B 🔴 +405 B
assets/audioUtils-pHsjdAp8.js (removed) 858 B 🟢 -858 B 🟢 -500 B 🟢 -407 B
assets/useLoad3dViewer-Cm-jeVl3.js (new) 840 B 🔴 +840 B 🔴 +407 B 🔴 +373 B
assets/useLoad3dViewer-DunrSsP_.js (removed) 840 B 🟢 -840 B 🟢 -412 B 🟢 -367 B
assets/useCurrentUser-ClRq_DKL.js (new) 724 B 🔴 +724 B 🔴 +369 B 🔴 +328 B
assets/useCurrentUser-CqiwJUkj.js (removed) 724 B 🟢 -724 B 🟢 -376 B 🟢 -330 B
assets/_plugin-vue_export-helper-CY4XIWDa.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-DGTUhmp-.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-BQSmRN2Q.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-DOdPeMQc.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-BputJAFn.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 13 added / 13 removed

Vendor & Third-Party — 8.84 MB (baseline 8.84 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-Cp6hch1I.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-BxkFiWzp.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-firebase-BvMr43CG.js 836 kB 836 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-i18n-DNX73mqE.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-D5S6AC80.js 103 kB 103 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-LUzoxniz.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-D4sztoo6.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-DVmi2O2Z.js 388 kB 388 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-sentry-SQwstEKc.js 182 kB 182 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-LBLOE6BD.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-CHaNo_rA.js 634 kB 634 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-DtiQ1dr9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-D2jVNnmE.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-vkxZGffR.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-yjs-CP_4YO8u.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-zod-DcCUUPIi.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.62 MB (baseline 7.62 MB) • 🔴 +578 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/i18n-DmnrqQYS.js (new) 521 kB 🔴 +521 kB 🔴 +100 kB 🔴 +78 kB
assets/i18n-BV8AmWJv.js (removed) 520 kB 🟢 -520 kB 🟢 -100 kB 🟢 -77.9 kB
assets/core-BBa_rWle.js (removed) 72.8 kB 🟢 -72.8 kB 🟢 -18.8 kB 🟢 -16.1 kB
assets/core-BNgsnA1m.js (new) 72.8 kB 🔴 +72.8 kB 🔴 +18.8 kB 🔴 +16.1 kB
assets/groupNode-Df4iLxKx.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.7 kB 🔴 +15.5 kB
assets/groupNode-TvYVEcSC.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.7 kB 🟢 -15.5 kB
assets/WidgetSelect-Bl1IpMc7.js (new) 58.1 kB 🔴 +58.1 kB 🔴 +12.4 kB 🔴 +10.7 kB
assets/WidgetSelect-Bq01F4dn.js (removed) 58.1 kB 🟢 -58.1 kB 🟢 -12.4 kB 🟢 -10.7 kB
assets/SubscriptionRequiredDialogContentWorkspace-B9mOEmVd.js (removed) 45.8 kB 🟢 -45.8 kB 🟢 -8.56 kB 🟢 -7.44 kB
assets/SubscriptionRequiredDialogContentWorkspace-D2yj124g.js (new) 45.8 kB 🔴 +45.8 kB 🔴 +8.56 kB 🔴 +7.4 kB
assets/Load3DControls-DrfbqAkb.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.65 kB
assets/Load3DControls-qHjXcFVA.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.64 kB
assets/WorkspacePanelContent-CxUiPsen.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.13 kB 🔴 +5.41 kB
assets/WorkspacePanelContent-qnx00dFa.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.14 kB 🟢 -5.41 kB
assets/SubscriptionRequiredDialogContent-CexmoqFZ.js (new) 26.2 kB 🔴 +26.2 kB 🔴 +6.56 kB 🔴 +5.77 kB
assets/SubscriptionRequiredDialogContent-DC992X_C.js (removed) 26.2 kB 🟢 -26.2 kB 🟢 -6.57 kB 🟢 -5.77 kB
assets/Load3dViewerContent-CuEIGV6v.js (new) 23 kB 🔴 +23 kB 🔴 +5.18 kB 🔴 +4.49 kB
assets/Load3dViewerContent-Dh4e0nDi.js (removed) 23 kB 🟢 -23 kB 🟢 -5.18 kB 🟢 -4.49 kB
assets/WidgetImageCrop-B4ALbFh_.js (removed) 22.1 kB 🟢 -22.1 kB 🟢 -5.5 kB 🟢 -4.85 kB
assets/WidgetImageCrop-Xp40ebUQ.js (new) 22.1 kB 🔴 +22.1 kB 🔴 +5.5 kB 🔴 +4.85 kB
assets/SubscriptionPanelContentWorkspace-C_QROQsB.js (new) 21.6 kB 🔴 +21.6 kB 🔴 +5.02 kB 🔴 +4.43 kB
assets/SubscriptionPanelContentWorkspace-XGKgsfPR.js (removed) 21.6 kB 🟢 -21.6 kB 🟢 -5.02 kB 🟢 -4.43 kB
assets/CurrentUserPopoverWorkspace-BMlRuLmo.js (removed) 19.8 kB 🟢 -19.8 kB 🟢 -4.86 kB 🟢 -4.34 kB
assets/CurrentUserPopoverWorkspace-C1lnJAt0.js (new) 19.8 kB 🔴 +19.8 kB 🔴 +4.86 kB 🔴 +4.33 kB
assets/SignInContent-D6WHJMgV.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.79 kB 🟢 -4.19 kB
assets/SignInContent-h75Rwxvw.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.78 kB 🔴 +4.19 kB
assets/WidgetInputNumber-8FjCu838.js (removed) 18.7 kB 🟢 -18.7 kB 🟢 -4.75 kB 🟢 -4.22 kB
assets/WidgetInputNumber-C_-J5P9C.js (new) 18.7 kB 🔴 +18.7 kB 🔴 +4.75 kB 🔴 +4.22 kB
assets/WidgetRecordAudio-CBgwGAtv.js (removed) 17.3 kB 🟢 -17.3 kB 🟢 -4.94 kB 🟢 -4.43 kB
assets/WidgetRecordAudio-DkvnzMwk.js (new) 17.3 kB 🔴 +17.3 kB 🔴 +4.93 kB 🔴 +4.42 kB
assets/Load3D-BAAdCBlC.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.03 kB 🔴 +3.51 kB
assets/Load3D-CTqjjxef.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.03 kB 🟢 -3.51 kB
assets/load3d-C-GTHJ8m.js (new) 14.7 kB 🔴 +14.7 kB 🔴 +4.19 kB 🔴 +3.64 kB
assets/load3d-CF7iDqBn.js (removed) 14.7 kB 🟢 -14.7 kB 🟢 -4.19 kB 🟢 -3.64 kB
assets/AudioPreviewPlayer-CsoIxwbc.js (new) 10.9 kB 🔴 +10.9 kB 🔴 +3.19 kB 🔴 +2.85 kB
assets/AudioPreviewPlayer-CZPkBVk2.js (removed) 10.9 kB 🟢 -10.9 kB 🟢 -3.19 kB 🟢 -2.87 kB
assets/changeTracker-BqyAa8wX.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.89 kB 🟢 -2.54 kB
assets/changeTracker-Dj48mOdO.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.89 kB 🔴 +2.54 kB
assets/nodeTemplates-0PD-5cJJ.js (removed) 9.3 kB 🟢 -9.3 kB 🟢 -3.26 kB 🟢 -2.86 kB
assets/nodeTemplates-CkZr0C2Q.js (new) 9.3 kB 🔴 +9.3 kB 🔴 +3.26 kB 🔴 +2.86 kB
assets/InviteMemberDialogContent-BFc3ojGJ.js (new) 7.38 kB 🔴 +7.38 kB 🔴 +2.29 kB 🔴 +2 kB
assets/InviteMemberDialogContent-BFO2EL52.js (removed) 7.38 kB 🟢 -7.38 kB 🟢 -2.29 kB 🟢 -2 kB
assets/Load3DConfiguration-cfJw9LCy.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.91 kB 🟢 -1.68 kB
assets/Load3DConfiguration-CNUiqUY5.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.92 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-BatLd-Uj.js (removed) 5.53 kB 🟢 -5.53 kB 🟢 -1.99 kB 🟢 -1.73 kB
assets/CreateWorkspaceDialogContent-CJn5eyCv.js (new) 5.53 kB 🔴 +5.53 kB 🔴 +1.99 kB 🔴 +1.73 kB
assets/onboardingCloudRoutes-BMExAN_w.js (new) 5.41 kB 🔴 +5.41 kB 🔴 +1.84 kB 🔴 +1.59 kB
assets/onboardingCloudRoutes-BzVGHQOd.js (removed) 5.41 kB 🟢 -5.41 kB 🟢 -1.83 kB 🟢 -1.59 kB
assets/EditWorkspaceDialogContent-aWpH6Tlq.js (new) 5.33 kB 🔴 +5.33 kB 🔴 +1.94 kB 🔴 +1.69 kB
assets/EditWorkspaceDialogContent-B0rFTFn6.js (removed) 5.33 kB 🟢 -5.33 kB 🟢 -1.95 kB 🟢 -1.69 kB
assets/ValueControlPopover-BQfvSbeY.js (removed) 4.92 kB 🟢 -4.92 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/ValueControlPopover-DxKyQc--.js (new) 4.92 kB 🔴 +4.92 kB 🔴 +1.76 kB 🔴 +1.57 kB
assets/Preview3d-CxBxzsrI.js (removed) 4.82 kB 🟢 -4.82 kB 🟢 -1.57 kB 🟢 -1.37 kB
assets/Preview3d-DX2WSH2E.js (new) 4.82 kB 🔴 +4.82 kB 🔴 +1.56 kB 🔴 +1.36 kB
assets/CancelSubscriptionDialogContent-BEQPb2fl.js (new) 4.79 kB 🔴 +4.79 kB 🔴 +1.77 kB 🔴 +1.55 kB
assets/CancelSubscriptionDialogContent-DrQI8-P0.js (removed) 4.79 kB 🟢 -4.79 kB 🟢 -1.78 kB 🟢 -1.56 kB
assets/DeleteWorkspaceDialogContent-B5libRmS.js (new) 4.23 kB 🔴 +4.23 kB 🔴 +1.63 kB 🔴 +1.42 kB
assets/DeleteWorkspaceDialogContent-DaMIGGIA.js (removed) 4.23 kB 🟢 -4.23 kB 🟢 -1.63 kB 🟢 -1.42 kB
assets/WidgetWithControl-CNJEZcRS.js (new) 4.11 kB 🔴 +4.11 kB 🔴 +1.77 kB 🔴 +1.59 kB
assets/WidgetWithControl-D_mujSg4.js (removed) 4.11 kB 🟢 -4.11 kB 🟢 -1.78 kB 🟢 -1.59 kB
assets/LeaveWorkspaceDialogContent-BBH3VzSE.js (new) 4.06 kB 🔴 +4.06 kB 🔴 +1.57 kB 🔴 +1.37 kB
assets/LeaveWorkspaceDialogContent-BkxTm79x.js (removed) 4.06 kB 🟢 -4.06 kB 🟢 -1.58 kB 🟢 -1.37 kB
assets/RemoveMemberDialogContent-Dot8me-U.js (removed) 4.04 kB 🟢 -4.04 kB 🟢 -1.53 kB 🟢 -1.32 kB
assets/RemoveMemberDialogContent-F4kaiBRG.js (new) 4.04 kB 🔴 +4.04 kB 🔴 +1.51 kB 🔴 +1.32 kB
assets/RevokeInviteDialogContent-D7ScB_Y2.js (removed) 3.96 kB 🟢 -3.96 kB 🟢 -1.54 kB 🟢 -1.35 kB
assets/RevokeInviteDialogContent-DsScnwcc.js (new) 3.96 kB 🔴 +3.96 kB 🔴 +1.53 kB 🔴 +1.35 kB
assets/InviteMemberUpsellDialogContent-_nz49a5A.js (new) 3.83 kB 🔴 +3.83 kB 🔴 +1.4 kB 🔴 +1.23 kB
assets/InviteMemberUpsellDialogContent-D092hvzP.js (removed) 3.83 kB 🟢 -3.83 kB 🟢 -1.41 kB 🟢 -1.23 kB
assets/saveMesh-Batc80Fu.js (new) 3.38 kB 🔴 +3.38 kB 🔴 +1.46 kB 🔴 +1.3 kB
assets/saveMesh-DGARy7nS.js (removed) 3.38 kB 🟢 -3.38 kB 🟢 -1.46 kB 🟢 -1.3 kB
assets/cloudSessionCookie-B2pp5YfO.js (new) 3.1 kB 🔴 +3.1 kB 🔴 +1.08 kB 🔴 +983 B
assets/cloudSessionCookie-CCIiXKhC.js (removed) 3.1 kB 🟢 -3.1 kB 🟢 -1.09 kB 🟢 -953 B
assets/GlobalToast-DG4mK9po.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.03 kB
assets/GlobalToast-JI6m3uEW.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.06 kB
assets/ApiNodesSignInContent-4hwIf89G.js (removed) 2.69 kB 🟢 -2.69 kB 🟢 -1.05 kB 🟢 -922 B
assets/ApiNodesSignInContent-D3WDGfAG.js (new) 2.69 kB 🔴 +2.69 kB 🔴 +1.05 kB 🔴 +922 B
assets/SubscribeToRun-_GcRZIcf.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -1.01 kB 🟢 -885 B
assets/SubscribeToRun-DPllRZXh.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1.01 kB 🔴 +867 B
assets/CloudRunButtonWrapper-BwNab3yH.js (removed) 1.68 kB 🟢 -1.68 kB 🟢 -789 B 🟢 -719 B
assets/CloudRunButtonWrapper-Cs93UyOw.js (new) 1.68 kB 🔴 +1.68 kB 🔴 +781 B 🔴 +710 B
assets/signInSchema-CfwzEUHi.js (new) 1.53 kB 🔴 +1.53 kB 🔴 +562 B 🔴 +516 B
assets/signInSchema-CK8wU8m7.js (removed) 1.53 kB 🟢 -1.53 kB 🟢 -563 B 🟢 -516 B
assets/cloudBadges-7IVL214r.js (new) 1.37 kB 🔴 +1.37 kB 🔴 +704 B 🔴 +613 B
assets/cloudBadges-BrFjZAIz.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -705 B 🟢 -623 B
assets/cloudSubscription-DppL7_Qu.js (removed) 1.33 kB 🟢 -1.33 kB 🟢 -659 B 🟢 -573 B
assets/cloudSubscription-XH6dIN_T.js (new) 1.33 kB 🔴 +1.33 kB 🔴 +654 B 🔴 +571 B
assets/Load3D-Bge1aHR9.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -498 B 🟢 -441 B
assets/Load3D-C6yRDiiT.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +493 B 🔴 +441 B
assets/nightlyBadges-DLKLdiz7.js (removed) 1 kB 🟢 -1 kB 🟢 -535 B 🟢 -477 B
assets/nightlyBadges-DLziSXuW.js (new) 1 kB 🔴 +1 kB 🔴 +529 B 🔴 +473 B
assets/Load3dViewerContent-Cgy17kbo.js (new) 995 B 🔴 +995 B 🔴 +463 B 🔴 +417 B
assets/Load3dViewerContent-DaYJY5ZK.js (removed) 995 B 🟢 -995 B 🟢 -471 B 🟢 -414 B
assets/SubscriptionPanelContentWorkspace-D4aAhzyu.js (removed) 932 B 🟢 -932 B 🟢 -442 B 🟢 -384 B
assets/SubscriptionPanelContentWorkspace-DwjsJk-J.js (new) 932 B 🔴 +932 B 🔴 +431 B 🔴 +382 B
assets/graphHasMissingNodes-BQ8q2mW_.js (removed) 761 B 🟢 -761 B 🟢 -375 B 🟢 -323 B
assets/graphHasMissingNodes-C6IHLYn8.js (new) 761 B 🔴 +761 B 🔴 +373 B 🔴 +332 B
assets/changeTracker-2ksUbi1E.js (removed) 759 B 🟢 -759 B 🟢 -388 B 🟢 -340 B
assets/changeTracker-Vx4Cdy_x.js (new) 759 B 🔴 +759 B 🔴 +378 B 🔴 +338 B
assets/WidgetLegacy-CLiM9jcK.js (new) 747 B 🔴 +747 B 🔴 +379 B 🔴 +363 B
assets/WidgetLegacy-CYET47lt.js (removed) 747 B 🟢 -747 B 🟢 -387 B 🟢 -363 B
assets/WidgetInputNumber-C_WrF3gb.js (removed) 469 B 🟢 -469 B 🟢 -262 B 🟢 -230 B
assets/WidgetInputNumber-Ck2ByYQt.js (new) 469 B 🔴 +469 B 🔴 +263 B 🔴 +229 B
assets/i18n-Clmyh7Zt.js (removed) 199 B 🟢 -199 B 🟢 -160 B 🟢 -140 B
assets/i18n-Dj4pg-qT.js (new) 199 B 🔴 +199 B 🔴 +160 B 🔴 +139 B
assets/AnimationControls-pnyHXmeA.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-BTnZwrs2.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-Bn_mihBn.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-DhnNuB-i.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-Ce4UTXTl.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BIWmUVEc.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BOt38VCw.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C0NcxRH3.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C2xuXGb5.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CmiKIQwc.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DMwP8S5e.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwBt3HhT.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-JX559A2n.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-n_2KJWcD.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-OO-8nFm9.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-wq2Y-YKn.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-BIWjk1ar.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BgWDQhKn.js 145 kB 145 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BH99zfen.js 148 kB 148 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Cl0TDHs-.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CTgQOf6T.js 196 kB 196 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CTIe-PdP.js 140 kB 140 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CxmFjxCA.js 176 kB 176 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D_siPGTl.js 162 kB 162 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D-U7Lzb5.js 170 kB 170 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-d6c2x81N.js 123 kB 123 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DN0hguJt.js 141 kB 141 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DzJxAN6l.js 124 kB 124 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-CpdNXNf1.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-qYtfOhNn.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-vhWMCCeS.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-B7AUGEAD.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-BWwMUA0Y.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-3eH_a2Z8.js 2.77 kB 2.77 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-2U4KtUml.js 360 kB 360 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-5rcOJVex.js 391 kB 391 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BTBSP0IQ.js 480 kB 480 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BZEpP7w6.js 383 kB 383 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C-Tw-7I_.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C76rbmLh.js 441 kB 441 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CxxD1ymF.js 395 kB 395 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DciNsuYe.js 392 kB 392 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-G7wcMpUD.js 356 kB 356 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-nGdg-hIO.js 388 kB 388 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-xiPSrG6S.js 440 kB 440 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-Du8xr1yg.js 3.65 kB 3.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-DeIFnh1k.js 665 B 665 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-DLICfi3-.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-DHhmuu6k.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-BilMNRAB.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-D4w3iVDe.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-DtqFG8Nu.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DTUjK0ZE.js 445 B 445 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-6TJd03tq.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-m1G5pcig.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-crz6xOcB.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-BT0--RBS.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-DFOYH-wE.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-DqrezrkI.js 3.1 kB 3.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-Br3WkRHc.js 1.86 kB 1.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-BGDGIZQQ.js 1.98 kB 1.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-Cqk0nyRJ.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-Cd0O5LPR.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-BekkBcLd.js 3.96 kB 3.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-Bjuvinl9.js 6.8 kB 6.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-B7_LakDW.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 52 added / 52 removed

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/platform/workflow/core/services/workflowService.ts (1)

96-127: ⚠️ Potential issue | 🟠 Major

Roll back linearMode when the save is aborted.

openAsApp mutates app.rootGraph.extra.linearMode before overwrite confirmation. If the user cancels or delete fails, the workflow state stays modified even though the save didn’t happen. Capture and restore the previous value on early-return paths.

🛠️ Suggested rollback pattern
-    if (options.openAsApp !== undefined) {
-      app.rootGraph.extra ??= {}
-      app.rootGraph.extra.linearMode = options.openAsApp
-      workflow.changeTracker?.checkState()
-    }
+    const shouldSetLinearMode = options.openAsApp !== undefined
+    const previousLinearMode = app.rootGraph.extra?.linearMode
+    const hadExtra = !!app.rootGraph.extra
+    const restoreLinearMode = () => {
+      if (!shouldSetLinearMode) return
+      if (!hadExtra) {
+        delete app.rootGraph.extra
+      } else {
+        app.rootGraph.extra!.linearMode = previousLinearMode
+      }
+      workflow.changeTracker?.checkState()
+    }
+    if (shouldSetLinearMode) {
+      app.rootGraph.extra ??= {}
+      app.rootGraph.extra.linearMode = options.openAsApp
+      workflow.changeTracker?.checkState()
+    }
@@
-      if (res !== true) return false
+      if (res !== true) {
+        restoreLinearMode()
+        return false
+      }
@@
-      if (!deleted) return false
+      if (!deleted) {
+        restoreLinearMode()
+        return false
+      }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/platform/workflow/core/services/workflowService.ts` around lines 96 -
127, In saveWorkflowAs capture the previous linearMode before mutating it (e.g.,
const prevLinearMode = app.rootGraph.extra?.linearMode) when options.openAsApp
!== undefined, then set app.rootGraph.extra.linearMode = options.openAsApp; on
any early-return paths after the mutation (specifically when the overwrite
confirm is canceled: res !== true, and when deleteWorkflow(existingWorkflow,
true) returns false) restore app.rootGraph.extra.linearMode = prevLinearMode (or
delete the property if prevLinearMode was undefined) so the app state is rolled
back when the save is aborted; keep the new value if the save proceeds and
completes (saveWorkflow or successful delete+save).
🧹 Nitpick comments (1)
src/components/builder/BuilderSaveSuccessDialogContent.vue (1)

45-50: Destructure props to match the project’s Vue prop style.

Use the TS-style destructuring pattern so props follow the repository convention.

♻️ Suggested update
-defineProps<{
-  workflowName: string
-  savedAsApp: boolean
-  onViewApp?: () => void
-  onClose: () => void
-}>()
+const { workflowName, savedAsApp, onViewApp, onClose } = defineProps<{
+  workflowName: string
+  savedAsApp: boolean
+  onViewApp?: () => void
+  onClose: () => void
+}>()
As per coding guidelines: "Define props using TypeScript style: `const { prop1, prop2 = default } = defineProps<{ prop1: Type; prop2?: Type }>()`."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/builder/BuilderSaveSuccessDialogContent.vue` around lines 45 -
50, The props are currently declared via defineProps<{...}>(); refactor to the
project's TS-style destructuring pattern: replace the raw defineProps call with
a const destructure (e.g., const { workflowName, savedAsApp = false, onViewApp,
onClose } = defineProps<{ workflowName: string; savedAsApp?: boolean;
onViewApp?: () => void; onClose: () => void }>() ) so the component uses
destructured variables (workflowName, savedAsApp, onViewApp, onClose) and
provides a default for savedAsApp to match repo conventions.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/components/builder/BuilderSaveDialogContent.vue`:
- Around line 100-112: The saveTypeOptions array is created at setup time and
freezes the i18n strings; change it to a computed property so it recomputes when
locale changes: import computed from 'vue' (if not already), replace the
saveTypeOptions constant with a computed(() => [...]) that constructs the same
objects using t(...) so components referencing saveTypeOptions will see reactive
updates, and ensure any existing usages (e.g., in the template or other setup
code) keep the same name.

---

Outside diff comments:
In `@src/platform/workflow/core/services/workflowService.ts`:
- Around line 96-127: In saveWorkflowAs capture the previous linearMode before
mutating it (e.g., const prevLinearMode = app.rootGraph.extra?.linearMode) when
options.openAsApp !== undefined, then set app.rootGraph.extra.linearMode =
options.openAsApp; on any early-return paths after the mutation (specifically
when the overwrite confirm is canceled: res !== true, and when
deleteWorkflow(existingWorkflow, true) returns false) restore
app.rootGraph.extra.linearMode = prevLinearMode (or delete the property if
prevLinearMode was undefined) so the app state is rolled back when the save is
aborted; keep the new value if the save proceeds and completes (saveWorkflow or
successful delete+save).

---

Nitpick comments:
In `@src/components/builder/BuilderSaveSuccessDialogContent.vue`:
- Around line 45-50: The props are currently declared via defineProps<{...}>();
refactor to the project's TS-style destructuring pattern: replace the raw
defineProps call with a const destructure (e.g., const { workflowName,
savedAsApp = false, onViewApp, onClose } = defineProps<{ workflowName: string;
savedAsApp?: boolean; onViewApp?: () => void; onClose: () => void }>() ) so the
component uses destructured variables (workflowName, savedAsApp, onViewApp,
onClose) and provides a default for savedAsApp to match repo conventions.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b3a5317 and 2ccef4a.

📒 Files selected for processing (7)
  • src/components/builder/BuilderDialog.vue
  • src/components/builder/BuilderSaveDialogContent.vue
  • src/components/builder/BuilderSaveSuccessDialogContent.vue
  • src/components/builder/useBuilderSave.ts
  • src/locales/en/main.json
  • src/platform/workflow/core/services/workflowService.ts
  • src/views/GraphView.vue

Comment on lines +100 to +112
const saveTypeOptions = [
{
value: true,
icon: 'icon-[lucide--app-window]',
title: t('builderToolbar.app'),
subtitle: t('builderToolbar.appDescription')
},
{
value: false,
icon: 'icon-[comfy--workflow]',
title: t('builderToolbar.nodeGraph'),
subtitle: t('builderToolbar.nodeGraphDescription')
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Make saveTypeOptions computed so locale changes stay reactive.

Right now the labels are frozen at setup time. Wrapping the list in computed ensures the i18n strings update if the locale changes while the dialog is open.

🔁 Suggested fix
-import { ref, useId } from 'vue'
+import { computed, ref, useId } from 'vue'
@@
-const saveTypeOptions = [
-  {
-    value: true,
-    icon: 'icon-[lucide--app-window]',
-    title: t('builderToolbar.app'),
-    subtitle: t('builderToolbar.appDescription')
-  },
-  {
-    value: false,
-    icon: 'icon-[comfy--workflow]',
-    title: t('builderToolbar.nodeGraph'),
-    subtitle: t('builderToolbar.nodeGraphDescription')
-  }
-]
+const saveTypeOptions = computed(() => [
+  {
+    value: true,
+    icon: 'icon-[lucide--app-window]',
+    title: t('builderToolbar.app'),
+    subtitle: t('builderToolbar.appDescription')
+  },
+  {
+    value: false,
+    icon: 'icon-[comfy--workflow]',
+    title: t('builderToolbar.nodeGraph'),
+    subtitle: t('builderToolbar.nodeGraphDescription')
+  }
+])
As per coding guidelines: "Use `ref` for reactive state, `computed()` for derived values."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/builder/BuilderSaveDialogContent.vue` around lines 100 - 112,
The saveTypeOptions array is created at setup time and freezes the i18n strings;
change it to a computed property so it recomputes when locale changes: import
computed from 'vue' (if not already), replace the saveTypeOptions constant with
a computed(() => [...]) that constructs the same objects using t(...) so
components referencing saveTypeOptions will see reactive updates, and ensure any
existing usages (e.g., in the template or other setup code) keep the same name.

@pythongosssss pythongosssss merged commit 2634acd into main Feb 23, 2026
36 checks passed
@pythongosssss pythongosssss deleted the pysssss/appmode/builder-toolbar-save.5 branch February 23, 2026 18:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants