Skip to content

fix(subscription): size pricing dialogs with Reka props#13633

Merged
DrJKL merged 5 commits into
mainfrom
codex/global-dialog-workspace-inset
Jul 15, 2026
Merged

fix(subscription): size pricing dialogs with Reka props#13633
DrJKL merged 5 commits into
mainfrom
codex/global-dialog-workspace-inset

Conversation

@CodeJuggernaut

@CodeJuggernaut CodeJuggernaut commented Jul 14, 2026

Copy link
Copy Markdown
Collaborator

Summary

Fixes the legacy personal and legacy workspace pricing dialogs so Reka owns the dialog width and the pricing table no longer overflows the default 576px frame.

Changes

  • What: Replace the shared PrimeVue-only style and pt dialog props with Reka renderer, size, and contentClass props for both legacy pricing paths.
  • What: Preserve modal: false for the legacy workspace path so its teleported PrimeVue plan-details popover remains interactive.
  • What: Add unit coverage for both routes and assert that ignored PrimeVue shell props are no longer passed.

Review Focus

  • Regression origin: #12593 made Reka the default dialog renderer. #12666 then added shared PrimeVue style and pt props for these pricing dialogs. Reka ignored those props and fell back to size="md" (max-w-xl, 576px). #13092 fixed the unified pricing path only and explicitly left the two legacy paths for follow-up.
  • Sizing ownership: The fix puts width on the Reka dialog frame with size: 'full' and sm:max-w-7xl. Pricing content no longer has to compensate for a narrow shell.
  • Legacy workspace behavior: modal: false remains intentional because the legacy table opens a PrimeVue popover teleported to body.
  • Scope: This PR contains only global subscription-dialog sizing. Agent side-panel behavior remains in #13472.
  • Validation: Focused tests pass (41 tests), pnpm typecheck passes, and targeted ESLint passes. Chrome validation at 1352x705 rendered a 1280px dialog with no horizontal overflow in both the isolated PR preview and the combined agent-panel preview. The docked agent panel remained mounted behind the modal.

Screenshots (if applicable)

@CodeJuggernaut
CodeJuggernaut requested a review from a team July 14, 2026 05:40
@dosubot dosubot Bot added the size:S This PR changes 10-29 lines, ignoring generated files. label Jul 14, 2026
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

showPricingTable now shares Reka dialog frame properties across pricing flows, replacing legacy style and pt configuration. Tests centralize frame assertions and cover unified, legacy team-plan, and non-modal workspace billing paths.

Changes

Subscription dialog sizing

Layer / File(s) Summary
Shared pricing dialog frame
src/platform/cloud/subscription/composables/useSubscriptionDialog.ts
Centralizes Reka renderer, full-size layout, and content classes, then applies them to legacy pricing dialog branches while preserving non-modal team-plan behavior.
Pricing dialog frame tests
src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts
Adds reusable assertions for Reka dialog props and covers unified, legacy team-plan, and non-modal workspace billing flows.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested labels: released:cloud, cloud/1.45

Suggested reviewers: dante01yoon, christian-byrne, huntcsg


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning No pull request description was provided, so the required template sections are missing. Add the template sections for Summary, Changes, Review Focus, and Screenshots if applicable, with a concise description of the update and why it was made.
End-To-End Regression Coverage For Fixes ❓ Inconclusive PR title and commit subjects aren’t available here, so I can’t verify the bug-fix signal required to fail this check. Please provide the PR title and commit subjects (or the full changed-file/commit list) so I can confirm whether E2E coverage was required.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Adr Compliance For Entity/Litegraph Changes ✅ Passed Changed files are outside src/lib/litegraph/, src/ecs/, and graph-entity paths, so ADR check is not applicable.
Title check ✅ Passed The title clearly matches the main change: updating subscription pricing dialogs to use Reka sizing props.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/global-dialog-workspace-inset

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.

@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 07/14/2026, 05:06:07 PM UTC

Links

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

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

📦 Bundle: 7.84 MB gzip 🟢 -38 B

Details

Summary

  • Raw size: 33.1 MB baseline 33.1 MB — 🟢 -51 B
  • Gzip: 7.84 MB baseline 7.84 MB — 🟢 -38 B
  • Brotli: 5.4 MB baseline 5.4 MB — 🔴 +271 B
  • Bundles: 302 current • 302 baseline • 135 added / 135 removed

Category Glance
Utilities & Hooks 🟢 -51 B (3.41 MB) · Vendor & Third-Party ⚪ 0 B (15.3 MB) · Other ⚪ 0 B (11.9 MB) · Graph Workspace ⚪ 0 B (1.26 MB) · Panels & Settings ⚪ 0 B (553 kB) · Data & Services ⚪ 0 B (273 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-CvgxpefN.js (new) 53.2 kB 🔴 +53.2 kB 🔴 +15.7 kB 🔴 +13.6 kB
assets/index-D4EFJRbk.js (removed) 53.2 kB 🟢 -53.2 kB 🟢 -15.7 kB 🟢 -13.5 kB

Status: 1 added / 1 removed

Graph Workspace — 1.26 MB (baseline 1.26 MB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BMlUmvrY.js (removed) 1.26 MB 🟢 -1.26 MB 🟢 -271 kB 🟢 -204 kB
assets/GraphView-CWN47FO-.js (new) 1.26 MB 🔴 +1.26 MB 🔴 +271 kB 🔴 +204 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-BNFu3f1O.js (removed) 25 kB 🟢 -25 kB 🟢 -6.26 kB 🟢 -5.53 kB
assets/CloudSurveyView-QzZ1Q9JF.js (new) 25 kB 🔴 +25 kB 🔴 +6.26 kB 🔴 +5.54 kB
assets/CloudLoginView-B0ZpXHTz.js (removed) 11.4 kB 🟢 -11.4 kB 🟢 -3.07 kB 🟢 -2.68 kB
assets/CloudLoginView-BwSY7PHi.js (new) 11.4 kB 🔴 +11.4 kB 🔴 +3.07 kB 🔴 +2.68 kB
assets/CloudSignupView-6xmZAN2C.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.74 kB 🔴 +2.4 kB
assets/CloudSignupView-DmmPzCsc.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.74 kB 🟢 -2.4 kB
assets/CloudLayoutView-BYHetXYG.js (new) 9.59 kB 🔴 +9.59 kB 🔴 +2.37 kB 🔴 +2.05 kB
assets/CloudLayoutView-PmnprXhR.js (removed) 9.59 kB 🟢 -9.59 kB 🟢 -2.37 kB 🟢 -2.06 kB
assets/UserCheckView-DAx5aQqd.js (removed) 8.8 kB 🟢 -8.8 kB 🟢 -2.22 kB 🟢 -1.93 kB
assets/UserCheckView-oIjc8ec6.js (new) 8.8 kB 🔴 +8.8 kB 🔴 +2.22 kB 🔴 +1.93 kB
assets/CloudSubscriptionRedirectView-BUjt4Ojg.js (removed) 6.98 kB 🟢 -6.98 kB 🟢 -2.58 kB 🟢 -2.26 kB
assets/CloudSubscriptionRedirectView-CrMEjYZQ.js (new) 6.98 kB 🔴 +6.98 kB 🔴 +2.58 kB 🔴 +2.29 kB
assets/WidgetTextPreview-Cr8wtBDX.js (removed) 6.13 kB 🟢 -6.13 kB 🟢 -2.15 kB 🟢 -1.92 kB
assets/WidgetTextPreview-x4_GSTrQ.js (new) 6.13 kB 🔴 +6.13 kB 🔴 +2.15 kB 🔴 +1.91 kB
assets/UserSelectView-BvlHq5lg.js (removed) 6 kB 🟢 -6 kB 🟢 -2.15 kB 🟢 -1.88 kB
assets/UserSelectView-C5PwlZW3.js (new) 6 kB 🔴 +6 kB 🔴 +2.15 kB 🔴 +1.89 kB
assets/CloudForgotPasswordView-DQ7fFQjk.js (new) 5.15 kB 🔴 +5.15 kB 🔴 +1.76 kB 🔴 +1.54 kB
assets/CloudForgotPasswordView-h5c6CBu2.js (removed) 5.15 kB 🟢 -5.15 kB 🟢 -1.76 kB 🟢 -1.53 kB
assets/CloudAuthTimeoutView-BgK63mPO.js (removed) 4.49 kB 🟢 -4.49 kB 🟢 -1.57 kB 🟢 -1.37 kB
assets/CloudAuthTimeoutView-DsCf_xpA.js (new) 4.49 kB 🔴 +4.49 kB 🔴 +1.57 kB 🔴 +1.37 kB
assets/WidgetTextPreview-BGjTErCr.js (removed) 131 B 🟢 -131 B 🟢 -100 B 🟢 -90 B
assets/WidgetTextPreview-CbbGjxSZ.js (new) 131 B 🔴 +131 B 🔴 +100 B 🔴 +90 B

Status: 11 added / 11 removed / 3 unchanged

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/KeybindingPanel-BMXYCXcI.js (removed) 49.4 kB 🟢 -49.4 kB 🟢 -9.97 kB 🟢 -8.82 kB
assets/KeybindingPanel-DJpvHLyT.js (new) 49.4 kB 🔴 +49.4 kB 🔴 +9.97 kB 🔴 +8.82 kB
assets/SecretsPanel-6gNF9ID0.js (new) 31 kB 🔴 +31 kB 🔴 +7.51 kB 🔴 +6.56 kB
assets/SecretsPanel-BLSof8HQ.js (removed) 31 kB 🟢 -31 kB 🟢 -7.51 kB 🟢 -6.56 kB
assets/CreditsPanel-Bg6ARrXG.js (removed) 15.9 kB 🟢 -15.9 kB 🟢 -4.66 kB 🟢 -4.09 kB
assets/CreditsPanel-DLMvuxCY.js (new) 15.9 kB 🔴 +15.9 kB 🔴 +4.66 kB 🔴 +4.08 kB
assets/AboutPanel-B4KNvPM5.js (new) 12 kB 🔴 +12 kB 🔴 +3.29 kB 🔴 +2.94 kB
assets/AboutPanel-CkRY8r6u.js (removed) 12 kB 🟢 -12 kB 🟢 -3.29 kB 🟢 -2.95 kB
assets/SubscriptionPanel-Cuy2TcoG.js (removed) 11.5 kB 🟢 -11.5 kB 🟢 -3.65 kB 🟢 -3.22 kB
assets/SubscriptionPanel-SYrp7R_O.js (new) 11.5 kB 🔴 +11.5 kB 🔴 +3.66 kB 🔴 +3.22 kB
assets/ExtensionPanel--6C1gf-0.js (new) 9.03 kB 🔴 +9.03 kB 🔴 +2.5 kB 🔴 +2.19 kB
assets/ExtensionPanel-QtqspN7H.js (removed) 9.03 kB 🟢 -9.03 kB 🟢 -2.5 kB 🟢 -2.2 kB
assets/ServerConfigPanel-BKjGmius.js (new) 6.15 kB 🔴 +6.15 kB 🔴 +1.97 kB 🔴 +1.76 kB
assets/ServerConfigPanel-BtFQR5Mc.js (removed) 6.15 kB 🟢 -6.15 kB 🟢 -1.97 kB 🟢 -1.76 kB
assets/UserPanel-5Zqnvtpi.js (removed) 5.78 kB 🟢 -5.78 kB 🟢 -1.82 kB 🟢 -1.58 kB
assets/UserPanel-DnNNcBVt.js (new) 5.78 kB 🔴 +5.78 kB 🔴 +1.82 kB 🔴 +1.58 kB
assets/refreshRemoteConfig-CIIVjaIv.js (new) 2.88 kB 🔴 +2.88 kB 🔴 +1.26 kB 🔴 +1.11 kB
assets/refreshRemoteConfig-DOw4ffL-.js (removed) 2.88 kB 🟢 -2.88 kB 🟢 -1.26 kB 🟢 -1.11 kB
assets/cloudRemoteConfig-CfQ_L-nl.js (new) 990 B 🔴 +990 B 🔴 +540 B 🔴 +463 B
assets/cloudRemoteConfig-GGPaG2Sk.js (removed) 990 B 🟢 -990 B 🟢 -542 B 🟢 -456 B
assets/refreshRemoteConfig-D5vNfYC5.js (new) 110 B 🔴 +110 B 🔴 +89 B 🔴 +86 B
assets/refreshRemoteConfig-Dcsr_sxq.js (removed) 110 B 🟢 -110 B 🟢 -89 B 🟢 -86 B

Status: 11 added / 11 removed / 16 unchanged

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SignUpForm-BMH6__gO.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -4.19 kB 🟢 -3.66 kB
assets/SignUpForm-D6gTsfwG.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +4.19 kB 🔴 +3.65 kB
assets/auth-Bc_EhSj3.js (removed) 3.69 kB 🟢 -3.69 kB 🟢 -1.3 kB 🟢 -1.13 kB
assets/auth-Cxh2ExZp.js (new) 3.69 kB 🔴 +3.69 kB 🔴 +1.3 kB 🔴 +1.13 kB
assets/usePostAuthRedirect-CZoCIYsW.js (removed) 3.33 kB 🟢 -3.33 kB 🟢 -1.27 kB 🟢 -1.11 kB
assets/usePostAuthRedirect-XdKtB2Ax.js (new) 3.33 kB 🔴 +3.33 kB 🔴 +1.27 kB 🔴 +1.11 kB
assets/UpdatePasswordContent-DD0Wx2ww.js (new) 1.92 kB 🔴 +1.92 kB 🔴 +877 B 🔴 +766 B
assets/UpdatePasswordContent-DUl2v6J6.js (removed) 1.92 kB 🟢 -1.92 kB 🟢 -876 B 🟢 -772 B
assets/authStore-2Z6Jf9P-.js (removed) 130 B 🟢 -130 B 🟢 -110 B 🟢 -123 B
assets/authStore-CAlSxKSI.js (new) 130 B 🔴 +130 B 🔴 +110 B 🔴 +108 B
assets/workspaceAuthStore-BtFrWksy.js (new) 110 B 🔴 +110 B 🔴 +104 B 🔴 +114 B
assets/workspaceAuthStore-CFUNUbK8.js (removed) 110 B 🟢 -110 B 🟢 -104 B 🟢 -113 B
assets/auth-BT-qcBNs.js (new) 105 B 🔴 +105 B 🔴 +96 B 🔴 +79 B
assets/auth-CEZSDXPE.js (removed) 105 B 🟢 -105 B 🟢 -96 B 🟢 -84 B

Status: 7 added / 7 removed / 3 unchanged

Editors & Dialogs — 117 kB (baseline 117 kB) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyHubPublishDialog-DlwN0-rd.js (new) 90.5 kB 🔴 +90.5 kB 🔴 +19.3 kB 🔴 +16.5 kB
assets/ComfyHubPublishDialog-DxRw4qmX.js (removed) 90.5 kB 🟢 -90.5 kB 🟢 -19.3 kB 🟢 -16.5 kB
assets/useShareDialog-0_6FBPxK.js (removed) 23.7 kB 🟢 -23.7 kB 🟢 -5.58 kB 🟢 -4.98 kB
assets/useShareDialog-Ck4tjv5z.js (new) 23.7 kB 🔴 +23.7 kB 🔴 +5.58 kB 🔴 +4.97 kB
assets/ComfyHubPublishDialog-CE3sGpap.js (removed) 143 B 🟢 -143 B 🟢 -105 B 🟢 -89 B
assets/ComfyHubPublishDialog-Dzb1lYdg.js (new) 143 B 🔴 +143 B 🔴 +105 B 🔴 +89 B
assets/useSubscriptionDialog-BYr8nd8o.js (new) 110 B 🔴 +110 B 🔴 +102 B 🔴 +88 B
assets/useSubscriptionDialog-C1WRg91X.js (removed) 110 B 🟢 -110 B 🟢 -102 B 🟢 -100 B

Status: 4 added / 4 removed / 1 unchanged

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-C35sIZwE.js (removed) 13.6 kB 🟢 -13.6 kB 🟢 -3.82 kB 🟢 -3.41 kB
assets/ComfyQueueButton-CMNpCq4r.js (new) 13.6 kB 🔴 +13.6 kB 🔴 +3.82 kB 🔴 +3.41 kB
assets/useTerminalTabs-Cd9bqnzX.js (removed) 12.1 kB 🟢 -12.1 kB 🟢 -3.83 kB 🟢 -3.38 kB
assets/useTerminalTabs-oY_xWtAd.js (new) 12.1 kB 🔴 +12.1 kB 🔴 +3.83 kB 🔴 +3.38 kB
assets/SubscribeButton-BOJAWLJa.js (new) 2.38 kB 🔴 +2.38 kB 🔴 +1.05 kB 🔴 +915 B
assets/SubscribeButton-kczhujaE.js (removed) 2.38 kB 🟢 -2.38 kB 🟢 -1.05 kB 🟢 -913 B
assets/cloudFeedbackTopbarButton-CANn9Dm-.js (removed) 829 B 🟢 -829 B 🟢 -499 B 🟢 -449 B
assets/cloudFeedbackTopbarButton-jV3J8Pg4.js (new) 829 B 🔴 +829 B 🔴 +501 B 🔴 +420 B
assets/ComfyQueueButton-B2x3FFyb.js (removed) 128 B 🟢 -128 B 🟢 -99 B 🟢 -91 B
assets/ComfyQueueButton-DC-zTMp-.js (new) 128 B 🔴 +128 B 🔴 +99 B 🔴 +91 B

Status: 5 added / 5 removed / 8 unchanged

Data & Services — 273 kB (baseline 273 kB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/load3dService-CPa-qci_.js (removed) 130 kB 🟢 -130 kB 🟢 -28.9 kB 🟢 -24.4 kB
assets/load3dService-Dzij0cP9.js (new) 130 kB 🔴 +130 kB 🔴 +28.9 kB 🔴 +24.5 kB
assets/api-C5KmeNUD.js (removed) 91.5 kB 🟢 -91.5 kB 🟢 -25.3 kB 🟢 -21.6 kB
assets/api-CEMOBdku.js (new) 91.5 kB 🔴 +91.5 kB 🔴 +25.3 kB 🔴 +21.7 kB
assets/workflowShareService-DRcFQqxF.js (new) 17 kB 🔴 +17 kB 🔴 +5.01 kB 🔴 +4.43 kB
assets/workflowShareService-MWb6Kp7Z.js (removed) 17 kB 🟢 -17 kB 🟢 -5.01 kB 🟢 -4.44 kB
assets/releaseStore-Dw0swBYp.js (new) 8.29 kB 🔴 +8.29 kB 🔴 +2.34 kB 🔴 +2.04 kB
assets/releaseStore-s5ThNDnG.js (removed) 8.29 kB 🟢 -8.29 kB 🟢 -2.34 kB 🟢 -2.04 kB
assets/keybindingService-5ub3wuCQ.js (removed) 7.46 kB 🟢 -7.46 kB 🟢 -1.91 kB 🟢 -1.64 kB
assets/keybindingService-BQgutBug.js (new) 7.46 kB 🔴 +7.46 kB 🔴 +1.92 kB 🔴 +1.64 kB
assets/extensionStore-BdXVJHUz.js (removed) 5.29 kB 🟢 -5.29 kB 🟢 -1.86 kB 🟢 -1.57 kB
assets/extensionStore-BjLJFwxM.js (new) 5.29 kB 🔴 +5.29 kB 🔴 +1.86 kB 🔴 +1.57 kB
assets/userStore-D0hvPj0M.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -932 B 🟢 -818 B
assets/userStore-Dw04DRdJ.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +932 B 🔴 +818 B
assets/audioService-BOixeDMA.js (removed) 1.76 kB 🟢 -1.76 kB 🟢 -861 B 🟢 -754 B
assets/audioService-DIiwG50y.js (new) 1.76 kB 🔴 +1.76 kB 🔴 +861 B 🔴 +748 B
assets/dialogService-BN5jqX3m.js (new) 100 B 🔴 +100 B 🔴 +99 B 🔴 +92 B
assets/dialogService-CK6E9mkE.js (removed) 100 B 🟢 -100 B 🟢 -99 B 🟢 -96 B
assets/settingStore-CfGEhY4b.js (removed) 98 B 🟢 -98 B 🟢 -98 B 🟢 -102 B
assets/settingStore-CsAMWqD8.js (new) 98 B 🔴 +98 B 🔴 +98 B 🔴 +88 B
assets/assetsStore-BMvzC6mY.js (removed) 96 B 🟢 -96 B 🟢 -97 B 🟢 -94 B
assets/assetsStore-CsYwq8tp.js (new) 96 B 🔴 +96 B 🔴 +97 B 🔴 +88 B
assets/releaseStore-DE5LYBAw.js (removed) 95 B 🟢 -95 B 🟢 -86 B 🟢 -80 B
assets/releaseStore-fPnO5XM0.js (new) 95 B 🔴 +95 B 🔴 +86 B 🔴 +78 B
assets/api-CsrZvnwN.js (new) 62 B 🔴 +62 B 🔴 +74 B 🔴 +66 B
assets/api-DZ1fnk46.js (removed) 62 B 🟢 -62 B 🟢 -74 B 🟢 -66 B

Status: 13 added / 13 removed / 3 unchanged

Utilities & Hooks — 3.41 MB (baseline 3.41 MB) • 🟢 -51 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/promotionUtils-eKSmEm78.js (removed) 3.05 MB 🟢 -3.05 MB 🟢 -704 kB 🟢 -531 kB
assets/promotionUtils-Itp51m97.js (new) 3.04 MB 🔴 +3.04 MB 🔴 +704 kB 🔴 +531 kB
assets/useConflictDetection-C296xAqc.js (removed) 234 kB 🟢 -234 kB 🟢 -52.3 kB 🟢 -42.6 kB
assets/useConflictDetection-DSBqqahO.js (new) 234 kB 🔴 +234 kB 🔴 +52.3 kB 🔴 +42.6 kB
assets/useLoad3d-C72if_fI.js (new) 25.7 kB 🔴 +25.7 kB 🔴 +5.82 kB 🔴 +5.15 kB
assets/useLoad3d-xph5JPh8.js (removed) 25.7 kB 🟢 -25.7 kB 🟢 -5.82 kB 🟢 -5.15 kB
assets/useLoad3dViewer-BuQ0W1l7.js (new) 21.2 kB 🔴 +21.2 kB 🔴 +4.98 kB 🔴 +4.37 kB
assets/useLoad3dViewer-DfvIYE69.js (removed) 21.2 kB 🟢 -21.2 kB 🟢 -4.98 kB 🟢 -4.35 kB
assets/useFeatureFlags-GZ4X-15Z.js (removed) 6.51 kB 🟢 -6.51 kB 🟢 -2.02 kB 🟢 -1.7 kB
assets/useFeatureFlags-vtNe_zsL.js (new) 6.51 kB 🔴 +6.51 kB 🔴 +2.02 kB 🔴 +1.7 kB
assets/subscriptionCheckoutUtil-Dr_qBJIn.js (removed) 3.85 kB 🟢 -3.85 kB 🟢 -1.54 kB 🟢 -1.35 kB
assets/subscriptionCheckoutUtil-wmp-DsMT.js (new) 3.85 kB 🔴 +3.85 kB 🔴 +1.54 kB 🔴 +1.35 kB
assets/useSessionCookie-C0WLLmeK.js (removed) 3.61 kB 🟢 -3.61 kB 🟢 -1.21 kB 🟢 -1.04 kB
assets/useSessionCookie-Cb5lisGo.js (new) 3.61 kB 🔴 +3.61 kB 🔴 +1.2 kB 🔴 +1.04 kB
assets/useDowngradeToPersonal-B6SYGYKA.js (removed) 3 kB 🟢 -3 kB 🟢 -1.18 kB 🟢 -1.04 kB
assets/useDowngradeToPersonal-CE339IUY.js (new) 3 kB 🔴 +3 kB 🔴 +1.19 kB 🔴 +1.05 kB
assets/assetPreviewUtil-CPKi21zK.js (removed) 2.41 kB 🟢 -2.41 kB 🟢 -1 kB 🟢 -877 B
assets/assetPreviewUtil-DfSUtf5d.js (new) 2.41 kB 🔴 +2.41 kB 🔴 +1 kB 🔴 +876 B
assets/useUpstreamValue-BrIcehpS.js (new) 2.04 kB 🔴 +2.04 kB 🔴 +792 B 🔴 +700 B
assets/useUpstreamValue-Bv2LEkr2.js (removed) 2.04 kB 🟢 -2.04 kB 🟢 -792 B 🟢 -704 B
assets/useWorkspaceTierLabel-BBvcGIW4.js (new) 1.99 kB 🔴 +1.99 kB 🔴 +854 B 🔴 +739 B
assets/useWorkspaceTierLabel-Cfvc3cWx.js (removed) 1.99 kB 🟢 -1.99 kB 🟢 -851 B 🟢 -728 B
assets/useLoad3d-BnsyXNi_.js (removed) 311 B 🟢 -311 B 🟢 -164 B 🟢 -147 B
assets/useLoad3d-DOaNJSsV.js (new) 311 B 🔴 +311 B 🔴 +164 B 🔴 +146 B
assets/useSessionCookie-BoPo_v5C.js (removed) 101 B 🟢 -101 B 🟢 -86 B 🟢 -83 B
assets/useSessionCookie-CRXz4rZe.js (new) 101 B 🔴 +101 B 🔴 +86 B 🔴 +77 B
assets/useFeatureFlags-BAdkEnT7.js (new) 98 B 🔴 +98 B 🔴 +85 B 🔴 +81 B
assets/useFeatureFlags-CG3foT3F.js (removed) 98 B 🟢 -98 B 🟢 -85 B 🟢 -85 B
assets/useLoad3dViewer-BuLeFedY.js (new) 98 B 🔴 +98 B 🔴 +85 B 🔴 +85 B
assets/useLoad3dViewer-CGwsNka9.js (removed) 98 B 🟢 -98 B 🟢 -85 B 🟢 -89 B
assets/useCurrentUser-CwDQuTTJ.js (new) 96 B 🔴 +96 B 🔴 +97 B 🔴 +84 B
assets/useCurrentUser-oBDgQENo.js (removed) 96 B 🟢 -96 B 🟢 -97 B 🟢 -95 B

Status: 16 added / 16 removed / 20 unchanged

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

External libraries and shared vendor chunks

Status: 16 unchanged

Other — 11.9 MB (baseline 11.9 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-BmMaCTI1.js (removed) 121 kB 🟢 -121 kB 🟢 -31 kB 🟢 -26.2 kB
assets/core-CT17btui.js (new) 121 kB 🔴 +121 kB 🔴 +31.1 kB 🔴 +26.2 kB
assets/WidgetSelect-CKGo6zc9.js (new) 89.7 kB 🔴 +89.7 kB 🔴 +20.3 kB 🔴 +17.4 kB
assets/WidgetSelect-Dr8j4g6i.js (removed) 89.7 kB 🟢 -89.7 kB 🟢 -20.3 kB 🟢 -17.4 kB
assets/Load3D--dKbdAbf.js (removed) 68.9 kB 🟢 -68.9 kB 🟢 -11 kB 🟢 -9.52 kB
assets/Load3D-w92NEeVy.js (new) 68.9 kB 🔴 +68.9 kB 🔴 +11 kB 🔴 +9.51 kB
assets/Preview3d-B78yyAkn.js (new) 51 kB 🔴 +51 kB 🔴 +8.36 kB 🔴 +7.28 kB
assets/Preview3d-CUicyy7k.js (removed) 51 kB 🟢 -51 kB 🟢 -8.36 kB 🟢 -7.28 kB
assets/SubscriptionTransitionPreviewWorkspace-BW4pJSE7.js (new) 46.8 kB 🔴 +46.8 kB 🔴 +9.65 kB 🔴 +8.53 kB
assets/SubscriptionTransitionPreviewWorkspace-SEHXaIBg.js (removed) 46.8 kB 🟢 -46.8 kB 🟢 -9.65 kB 🟢 -8.53 kB
assets/SubscriptionRequiredDialogContentUnified-BkFMF0XF.js (removed) 41.2 kB 🟢 -41.2 kB 🟢 -9.16 kB 🟢 -7.97 kB
assets/SubscriptionRequiredDialogContentUnified-Cj1E-5qD.js (new) 41.2 kB 🔴 +41.2 kB 🔴 +9.16 kB 🔴 +7.96 kB
assets/WorkspacePanelContent-B8-vcIpV.js (removed) 34.5 kB 🟢 -34.5 kB 🟢 -7.49 kB 🟢 -6.61 kB
assets/WorkspacePanelContent-o36oNCxA.js (new) 34.5 kB 🔴 +34.5 kB 🔴 +7.49 kB 🔴 +6.61 kB
assets/WidgetBoundingBoxes-BBI_0hBW.js (removed) 33.8 kB 🟢 -33.8 kB 🟢 -9.2 kB 🟢 -8.15 kB
assets/WidgetBoundingBoxes-CkHHpLsI.js (new) 33.8 kB 🔴 +33.8 kB 🔴 +9.2 kB 🔴 +8.15 kB
assets/WidgetPainter-_wbe002N.js (new) 32.7 kB 🔴 +32.7 kB 🔴 +7.9 kB 🔴 +7.01 kB
assets/WidgetPainter-Cj406Jsh.js (removed) 32.7 kB 🟢 -32.7 kB 🟢 -7.91 kB 🟢 -7 kB
assets/Load3dViewerContent-CQGktcOB.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -6.3 kB 🟢 -5.46 kB
assets/Load3dViewerContent-DMIkuvZZ.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +6.3 kB 🔴 +5.47 kB
assets/SubscriptionRequiredDialogContent-DIkYJUE7.js (removed) 27.4 kB 🟢 -27.4 kB 🟢 -6.74 kB 🟢 -5.94 kB
assets/SubscriptionRequiredDialogContent-kjLOB8Fj.js (new) 27.4 kB 🔴 +27.4 kB 🔴 +6.75 kB 🔴 +5.96 kB
assets/SubscriptionPanelContentWorkspace-CEN2-OMF.js (new) 25 kB 🔴 +25 kB 🔴 +5.84 kB 🔴 +5.13 kB
assets/SubscriptionPanelContentWorkspace-CkA6IZ5H.js (removed) 25 kB 🟢 -25 kB 🟢 -5.84 kB 🟢 -5.13 kB
assets/SubscriptionRequiredDialogContentWorkspace-BW1O5pUN.js (removed) 24.6 kB 🟢 -24.6 kB 🟢 -5.66 kB 🟢 -4.98 kB
assets/SubscriptionRequiredDialogContentWorkspace-Ci1REZjX.js (new) 24.6 kB 🔴 +24.6 kB 🔴 +5.66 kB 🔴 +4.97 kB
assets/WidgetImageCrop-DC9Umsl_.js (new) 23.3 kB 🔴 +23.3 kB 🔴 +5.75 kB 🔴 +5.04 kB
assets/WidgetImageCrop-DKHp3VQ8.js (removed) 23.3 kB 🟢 -23.3 kB 🟢 -5.75 kB 🟢 -5.04 kB
assets/load3d-Bo4rNJBM.js (new) 22.3 kB 🔴 +22.3 kB 🔴 +5.45 kB 🔴 +4.71 kB
assets/load3d-BvWHOTMj.js (removed) 22.3 kB 🟢 -22.3 kB 🟢 -5.45 kB 🟢 -4.7 kB
assets/CurrentUserPopoverWorkspace-D-L9o1aI.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -4.74 kB 🟢 -4.23 kB
assets/CurrentUserPopoverWorkspace-DlANB4WP.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +4.75 kB 🔴 +4.24 kB
assets/SignInContent-Bld5hMZD.js (new) 20.1 kB 🔴 +20.1 kB 🔴 +5.07 kB 🔴 +4.44 kB
assets/SignInContent-DoPJ4_5O.js (removed) 20.1 kB 🟢 -20.1 kB 🟢 -5.07 kB 🟢 -4.43 kB
assets/WidgetInputNumber-CQBZFnez.js (removed) 19.1 kB 🟢 -19.1 kB 🟢 -4.82 kB 🟢 -4.28 kB
assets/WidgetInputNumber-UJNGbyyd.js (new) 19.1 kB 🔴 +19.1 kB 🔴 +4.82 kB 🔴 +4.28 kB
assets/CreditsTile-B9p-aaUI.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -4.54 kB 🟢 -4.02 kB
assets/CreditsTile-nsNvdawA.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +4.54 kB 🔴 +4.01 kB
assets/WidgetRecordAudio-CRkj_2UU.js (removed) 16.6 kB 🟢 -16.6 kB 🟢 -4.63 kB 🟢 -4.14 kB
assets/WidgetRecordAudio-DPt2oN5q.js (new) 16.6 kB 🔴 +16.6 kB 🔴 +4.63 kB 🔴 +4.14 kB
assets/WidgetRange-C_xmQXq0.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.16 kB 🔴 +3.73 kB
assets/WidgetRange-CuZQHFor.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.16 kB 🟢 -3.73 kB
assets/WaveAudioPlayer-AZ7-YNQs.js (removed) 12.8 kB 🟢 -12.8 kB 🟢 -3.48 kB 🟢 -3.06 kB
assets/WaveAudioPlayer-FiCsR3x3.js (new) 12.8 kB 🔴 +12.8 kB 🔴 +3.48 kB 🔴 +3.06 kB
assets/WidgetCurve-BkOU3tSz.js (new) 11.3 kB 🔴 +11.3 kB 🔴 +3.5 kB 🔴 +3.16 kB
assets/WidgetCurve-VK1D-HRk.js (removed) 11.3 kB 🟢 -11.3 kB 🟢 -3.5 kB 🟢 -3.16 kB
assets/TeamWorkspacesDialogContent-C7N-qq2p.js (removed) 10.3 kB 🟢 -10.3 kB 🟢 -3 kB 🟢 -2.69 kB
assets/TeamWorkspacesDialogContent-lrLgsOsr.js (new) 10.3 kB 🔴 +10.3 kB 🔴 +3 kB 🔴 +2.66 kB
assets/Load3DConfiguration-BpqgfiBt.js (new) 9.02 kB 🔴 +9.02 kB 🔴 +2.66 kB 🔴 +2.35 kB
assets/Load3DConfiguration-DvTdhQjJ.js (removed) 9.02 kB 🟢 -9.02 kB 🟢 -2.66 kB 🟢 -2.35 kB
assets/onboardingCloudRoutes-Cyj4CnQx.js (new) 8.5 kB 🔴 +8.5 kB 🔴 +2.67 kB 🔴 +2.29 kB
assets/onboardingCloudRoutes-pi8dP7e9.js (removed) 8.5 kB 🟢 -8.5 kB 🟢 -2.67 kB 🟢 -2.29 kB
assets/nodeTemplates-PV4O8sqe.js (removed) 8.33 kB 🟢 -8.33 kB 🟢 -2.88 kB 🟢 -2.54 kB
assets/nodeTemplates-yzuVxXw1.js (new) 8.33 kB 🔴 +8.33 kB 🔴 +2.88 kB 🔴 +2.54 kB
assets/NightlySurveyController-26MrU2Hd.js (removed) 8.01 kB 🟢 -8.01 kB 🟢 -2.71 kB 🟢 -2.38 kB
assets/NightlySurveyController-SerZ9liw.js (new) 8.01 kB 🔴 +8.01 kB 🔴 +2.71 kB 🔴 +2.39 kB
assets/InviteMemberDialogContent-CCqg4Yn9.js (new) 6.76 kB 🔴 +6.76 kB 🔴 +2.22 kB 🔴 +1.96 kB
assets/InviteMemberDialogContent-rpxLvunL.js (removed) 6.76 kB 🟢 -6.76 kB 🟢 -2.22 kB 🟢 -1.96 kB
assets/WidgetWithControl-CvqQAckA.js (new) 6.38 kB 🔴 +6.38 kB 🔴 +2.59 kB 🔴 +2.3 kB
assets/WidgetWithControl-VmyqxC3R.js (removed) 6.38 kB 🟢 -6.38 kB 🟢 -2.59 kB 🟢 -2.29 kB
assets/tierBenefits-C3Gvy0YV.js (new) 6.02 kB 🔴 +6.02 kB 🔴 +1.93 kB 🔴 +1.67 kB
assets/tierBenefits-CbM0uw4e.js (removed) 6.02 kB 🟢 -6.02 kB 🟢 -1.93 kB 🟢 -1.67 kB
assets/load3dPreviewExtensions-B_yQHnLB.js (removed) 5.95 kB 🟢 -5.95 kB 🟢 -1.85 kB 🟢 -1.63 kB
assets/load3dPreviewExtensions-D7vLlOCk.js (new) 5.95 kB 🔴 +5.95 kB 🔴 +1.85 kB 🔴 +1.63 kB
assets/CancelSubscriptionDialogContent-CSMqG63t.js (removed) 5.76 kB 🟢 -5.76 kB 🟢 -1.97 kB 🟢 -1.73 kB
assets/CancelSubscriptionDialogContent-Dj_hONNt.js (new) 5.76 kB 🔴 +5.76 kB 🔴 +1.97 kB 🔴 +1.73 kB
assets/FreeTierDialogContent-DgNuVVfB.js (new) 5.25 kB 🔴 +5.25 kB 🔴 +1.76 kB 🔴 +1.55 kB
assets/FreeTierDialogContent-pzVBF14W.js (removed) 5.25 kB 🟢 -5.25 kB 🟢 -1.76 kB 🟢 -1.55 kB
assets/CreateWorkspaceDialogContent-DkRjy-b5.js (removed) 5.19 kB 🟢 -5.19 kB 🟢 -1.83 kB 🟢 -1.58 kB
assets/CreateWorkspaceDialogContent-Drd7hjMl.js (new) 5.19 kB 🔴 +5.19 kB 🔴 +1.83 kB 🔴 +1.58 kB
assets/missingModelDownload-DgXiui2t.js (new) 5.07 kB 🔴 +5.07 kB 🔴 +1.98 kB 🔴 +1.72 kB
assets/missingModelDownload-Dy_nZj-k.js (removed) 5.07 kB 🟢 -5.07 kB 🟢 -1.98 kB 🟢 -1.72 kB
assets/ChangeMemberRoleDialogContent-D3oOYBve.js (removed) 5.04 kB 🟢 -5.04 kB 🟢 -1.67 kB 🟢 -1.46 kB
assets/ChangeMemberRoleDialogContent-DJesqvBF.js (new) 5.04 kB 🔴 +5.04 kB 🔴 +1.67 kB 🔴 +1.46 kB
assets/EditWorkspaceDialogContent-C--LPzjG.js (new) 5 kB 🔴 +5 kB 🔴 +1.79 kB 🔴 +1.56 kB
assets/EditWorkspaceDialogContent-CPewfvbk.js (removed) 5 kB 🟢 -5 kB 🟢 -1.79 kB 🟢 -1.56 kB
assets/WidgetTextarea-DIdzwWZM.js (removed) 4.86 kB 🟢 -4.86 kB 🟢 -1.89 kB 🟢 -1.66 kB
assets/WidgetTextarea-Y58xJO2F.js (new) 4.86 kB 🔴 +4.86 kB 🔴 +1.9 kB 🔴 +1.66 kB
assets/saveMesh-CSSnlKli.js (removed) 4.81 kB 🟢 -4.81 kB 🟢 -1.55 kB 🟢 -1.37 kB
assets/saveMesh-CVnpNb4K.js (new) 4.81 kB 🔴 +4.81 kB 🔴 +1.55 kB 🔴 +1.37 kB
assets/ValueControlPopover-Dvkpxila.js (removed) 4.55 kB 🟢 -4.55 kB 🟢 -1.59 kB 🟢 -1.42 kB
assets/ValueControlPopover-lA4BtKXm.js (new) 4.55 kB 🔴 +4.55 kB 🔴 +1.59 kB 🔴 +1.42 kB
assets/DeleteWorkspaceDialogContent-DNrzZUSC.js (removed) 3.91 kB 🟢 -3.91 kB 🟢 -1.48 kB 🟢 -1.27 kB
assets/DeleteWorkspaceDialogContent-MMHv4_hi.js (new) 3.91 kB 🔴 +3.91 kB 🔴 +1.48 kB 🔴 +1.27 kB
assets/LeaveWorkspaceDialogContent-BoGC1XC7.js (removed) 3.73 kB 🟢 -3.73 kB 🟢 -1.41 kB 🟢 -1.22 kB
assets/LeaveWorkspaceDialogContent-DdpA2vLF.js (new) 3.73 kB 🔴 +3.73 kB 🔴 +1.42 kB 🔴 +1.23 kB
assets/RemoveMemberDialogContent-BI8kqFZ8.js (removed) 3.71 kB 🟢 -3.71 kB 🟢 -1.37 kB 🟢 -1.19 kB
assets/RemoveMemberDialogContent-BoUfMzES.js (new) 3.71 kB 🔴 +3.71 kB 🔴 +1.37 kB 🔴 +1.19 kB
assets/RevokeInviteDialogContent-BMX7dE8t.js (removed) 3.63 kB 🟢 -3.63 kB 🟢 -1.38 kB 🟢 -1.2 kB
assets/RevokeInviteDialogContent-D-ySslMw.js (new) 3.63 kB 🔴 +3.63 kB 🔴 +1.38 kB 🔴 +1.2 kB
assets/InviteMemberUpsellDialogContent-4DVMDoXq.js (new) 3.52 kB 🔴 +3.52 kB 🔴 +1.27 kB 🔴 +1.12 kB
assets/InviteMemberUpsellDialogContent-GR2BPUd_.js (removed) 3.52 kB 🟢 -3.52 kB 🟢 -1.26 kB 🟢 -1.1 kB
assets/workspaceCheckoutTelemetry-CwPAwwCc.js (new) 3.47 kB 🔴 +3.47 kB 🔴 +1.56 kB 🔴 +1.35 kB
assets/workspaceCheckoutTelemetry-D1PKXqAm.js (removed) 3.47 kB 🟢 -3.47 kB 🟢 -1.56 kB 🟢 -1.35 kB
assets/Media3DTop-Bp4YMfXO.js (new) 3.26 kB 🔴 +3.26 kB 🔴 +1.3 kB 🔴 +1.13 kB
assets/Media3DTop-CXRG6yaj.js (removed) 3.26 kB 🟢 -3.26 kB 🟢 -1.3 kB 🟢 -1.13 kB
assets/GlobalToast-BB-mR8Cn.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.26 kB 🔴 +1.08 kB
assets/GlobalToast-CSi7YNwB.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.26 kB 🟢 -1.08 kB
assets/load3dAdvanced-Co8y-DCw.js (removed) 2.87 kB 🟢 -2.87 kB 🟢 -1.13 kB 🟢 -977 B
assets/load3dAdvanced-TaYqOoMP.js (new) 2.87 kB 🔴 +2.87 kB 🔴 +1.13 kB 🔴 +982 B
assets/SubscribeToRun-BUzsCNe-.js (new) 2.56 kB 🔴 +2.56 kB 🔴 +1.11 kB 🔴 +974 B
assets/SubscribeToRun-VG7Zutfh.js (removed) 2.56 kB 🟢 -2.56 kB 🟢 -1.11 kB 🟢 -975 B
assets/graphHasMissingNodes-Dc7WF9et.js (removed) 1.93 kB 🟢 -1.93 kB 🟢 -906 B 🟢 -787 B
assets/graphHasMissingNodes-Lth_diEh.js (new) 1.93 kB 🔴 +1.93 kB 🔴 +906 B 🔴 +786 B
assets/MediaAudioTop-B3nvoiyV.js (new) 1.67 kB 🔴 +1.67 kB 🔴 +835 B 🔴 +700 B
assets/MediaAudioTop-B8pGxJcz.js (removed) 1.67 kB 🟢 -1.67 kB 🟢 -838 B 🟢 -702 B
assets/CloudRunButtonWrapper-CGyPvh20.js (removed) 1.13 kB 🟢 -1.13 kB 🟢 -550 B 🟢 -511 B
assets/CloudRunButtonWrapper-DgCz8DPH.js (new) 1.13 kB 🔴 +1.13 kB 🔴 +549 B 🔴 +514 B
assets/cloudSessionCookie-BG8aqPBN.js (removed) 991 B 🟢 -991 B 🟢 -465 B 🟢 -419 B
assets/cloudSessionCookie-Dkfc-807.js (new) 991 B 🔴 +991 B 🔴 +465 B 🔴 +416 B
assets/cloudBadges-DbTT2tmg.js (removed) 973 B 🟢 -973 B 🟢 -550 B 🟢 -468 B
assets/cloudBadges-sDFDmHCt.js (new) 973 B 🔴 +973 B 🔴 +551 B 🔴 +471 B
assets/Load3DAdvanced-8DHFS8yH.js (removed) 813 B 🟢 -813 B 🟢 -455 B 🟢 -406 B
assets/Load3DAdvanced-CM1jCq6y.js (new) 813 B 🔴 +813 B 🔴 +456 B 🔴 +407 B
assets/nightlyBadges-5X3mD5Hk.js (removed) 464 B 🟢 -464 B 🟢 -306 B 🟢 -255 B
assets/nightlyBadges-R6qWIjqj.js (new) 464 B 🔴 +464 B 🔴 +307 B 🔴 +254 B
assets/missingModelDownload-BoaNH7aR.js (new) 228 B 🔴 +228 B 🔴 +147 B 🔴 +129 B
assets/missingModelDownload-ZEi0wnXX.js (removed) 228 B 🟢 -228 B 🟢 -149 B 🟢 -129 B
assets/SubscriptionPanelContentWorkspace-B_kG1wXh.js (new) 179 B 🔴 +179 B 🔴 +117 B 🔴 +106 B
assets/SubscriptionPanelContentWorkspace-DlVabMxu.js (removed) 179 B 🟢 -179 B 🟢 -117 B 🟢 -104 B
assets/Load3dViewerContent-D9a_IRfP.js (new) 137 B 🔴 +137 B 🔴 +103 B 🔴 +94 B
assets/Load3dViewerContent-DBW-WC80.js (removed) 137 B 🟢 -137 B 🟢 -103 B 🟢 -92 B
assets/Load3DAdvanced-CUKTCCXJ.js (removed) 122 B 🟢 -122 B 🟢 -97 B 🟢 -92 B
assets/Load3DAdvanced-oOedSKEQ.js (new) 122 B 🔴 +122 B 🔴 +97 B 🔴 +87 B
assets/WidgetLegacy-CVCFuwTw.js (removed) 119 B 🟢 -119 B 🟢 -108 B 🟢 -93 B
assets/WidgetLegacy-PBf3VALf.js (new) 119 B 🔴 +119 B 🔴 +108 B 🔴 +93 B
assets/workflowDraftStoreV2-CnjyDNnr.js (new) 113 B 🔴 +113 B 🔴 +105 B 🔴 +117 B
assets/workflowDraftStoreV2-f2fkiLAY.js (removed) 113 B 🟢 -113 B 🟢 -105 B 🟢 -110 B
assets/Load3D-BeGxiTQE.js (removed) 98 B 🟢 -98 B 🟢 -89 B 🟢 -81 B
assets/Load3D-DCyp3z6u.js (new) 98 B 🔴 +98 B 🔴 +89 B 🔴 +94 B
assets/changeTracker-C6XPsHR_.js (new) 93 B 🔴 +93 B 🔴 +95 B 🔴 +81 B
assets/changeTracker-DhJRprjC.js (removed) 93 B 🟢 -93 B 🟢 -95 B 🟢 -81 B

Status: 66 added / 66 removed / 97 unchanged

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.5 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.7 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.9 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.3 MB heap
large-graph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.9 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.1 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.8 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 57.9 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 46.1 MB heap
subgraph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.5 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.2 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 166ms TBT · 97.3 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 70.7 MB heap
vue-large-graph-idle: · 58.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 161.1 MB heap
vue-large-graph-pan: · 58.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 5ms TBT · 170.2 MB heap
workflow-execution: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.1 MB heap

⚠️ 2 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-zoom-sweep: task duration 413ms 375ms -9% ⚠️ z=2.1
subgraph-dom-widget-clipping: task duration 414ms 423ms +2% ⚠️ z=2.4
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms -0% z=-0.5
canvas-idle: p95 frame time 17ms 17ms -0%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 10ms 9ms -11% z=-2.0
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 10 9 -10% z=-3.8
canvas-idle: task duration 512ms 426ms -17% z=1.0
canvas-idle: script duration 24ms 20ms -13% z=-2.2
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 60.3 MB 53.5 MB -11%
canvas-idle: DOM nodes -279 -137 -51% z=-124.7
canvas-idle: event listeners -199 -97 -52% z=-22.8
canvas-mouse-sweep: avg frame time 17ms 17ms -0% z=-0.9
canvas-mouse-sweep: p95 frame time 17ms 17ms +0%
canvas-mouse-sweep: layout duration 4ms 4ms -9% z=0.3
canvas-mouse-sweep: style recalc duration 43ms 42ms -2% z=-0.2
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 75 76 +1% z=-1.4
canvas-mouse-sweep: task duration 865ms 860ms -1% z=-0.1
canvas-mouse-sweep: script duration 122ms 130ms +6% z=-0.9
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 52.6 MB 49.7 MB -6%
canvas-mouse-sweep: DOM nodes -240 -106 -56% z=-65.1
canvas-mouse-sweep: event listeners -197 -98 -51% z=-25.4
canvas-zoom-sweep: avg frame time 17ms 17ms +0% z=0.5
canvas-zoom-sweep: p95 frame time 17ms 17ms -0%
canvas-zoom-sweep: layout duration 1ms 1ms +3% z=1.4
canvas-zoom-sweep: style recalc duration 18ms 20ms +9% z=0.3
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 31 32 +2% z=0.5
canvas-zoom-sweep: task duration 413ms 375ms -9% ⚠️ z=2.1
canvas-zoom-sweep: script duration 25ms 21ms -17% z=-2.2
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 64.0 MB 58.9 MB -8%
canvas-zoom-sweep: DOM nodes -223 -236 +6% z=-398.3
canvas-zoom-sweep: event listeners -184 -185 +1% z=-40.3
dom-widget-clipping: avg frame time 17ms 17ms -0% z=-0.2
dom-widget-clipping: p95 frame time 17ms 17ms -0%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 8ms 9ms +8% z=-1.5
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 11 12 +5% z=-3.2
dom-widget-clipping: task duration 410ms 370ms -10% z=0.3
dom-widget-clipping: script duration 58ms 63ms +9% z=-1.4
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 53.3 MB 67.3 MB +26%
dom-widget-clipping: DOM nodes -290 19 -107% z=-2.2
dom-widget-clipping: event listeners -203 1 -100% variance too high
large-graph-idle: avg frame time 17ms 17ms +0% z=-0.2
large-graph-idle: p95 frame time 17ms 17ms -1%
large-graph-idle: layout duration 0ms 0ms +0%
large-graph-idle: style recalc duration 10ms 10ms -2% z=-2.4
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 10 10 -5% z=-6.7
large-graph-idle: task duration 626ms 588ms -6% z=0.8
large-graph-idle: script duration 105ms 106ms +1% z=0.4
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 57.2 MB 58.9 MB +3%
large-graph-idle: DOM nodes -269 -126 -53% z=-166.2
large-graph-idle: event listeners -199 -96 -52% z=-20.0
large-graph-pan: avg frame time 17ms 17ms -0% z=-0.2
large-graph-pan: p95 frame time 17ms 17ms -1%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 17ms 18ms +9% z=0.9
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 67 69 +3% z=-0.9
large-graph-pan: task duration 1107ms 1136ms +3% z=1.3
large-graph-pan: script duration 398ms 435ms +9% z=1.3
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 53.7 MB 58.1 MB +8%
large-graph-pan: DOM nodes -269 -129 -52% z=-89.4
large-graph-pan: event listeners 6 -96 -1692% z=-121.3
large-graph-zoom: avg frame time 17ms 17ms -0%
large-graph-zoom: p95 frame time 17ms 17ms -0%
large-graph-zoom: layout duration 8ms 7ms -8%
large-graph-zoom: style recalc duration 17ms 17ms -2%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 63 64 +1%
large-graph-zoom: task duration 1345ms 1280ms -5%
large-graph-zoom: script duration 490ms 487ms -1%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 66.5 MB 67.8 MB +2%
large-graph-zoom: DOM nodes 6 9 +50%
large-graph-zoom: event listeners 8 8 +0%
minimap-idle: avg frame time 17ms 17ms -0% z=-0.4
minimap-idle: p95 frame time 17ms 17ms +0%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 9ms 7ms -23% z=-3.6
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 8 7 -13% z=-3.8
minimap-idle: task duration 650ms 538ms -17% z=0.2
minimap-idle: script duration 106ms 98ms -8% z=-0.0
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 58.3 MB 57.9 MB -1%
minimap-idle: DOM nodes -262 -274 +4% z=-214.0
minimap-idle: event listeners -199 -197 -1% z=-305.3
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.7
subgraph-dom-widget-clipping: p95 frame time 17ms 17ms +0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms +0%
subgraph-dom-widget-clipping: style recalc duration 11ms 12ms +15% z=-0.6
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 46 47 +2% z=-1.6
subgraph-dom-widget-clipping: task duration 414ms 423ms +2% ⚠️ z=2.4
subgraph-dom-widget-clipping: script duration 119ms 128ms +7% z=-0.1
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 55.6 MB 46.1 MB -17%
subgraph-dom-widget-clipping: DOM nodes -290 -276 -5% z=-266.1
subgraph-dom-widget-clipping: event listeners -197 -196 -1% z=-36.4
subgraph-idle: avg frame time 17ms 17ms +0% z=0.4
subgraph-idle: p95 frame time 17ms 17ms -1%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 10ms 9ms -8% z=-1.4
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 11 10 -9% z=-1.4
subgraph-idle: task duration 476ms 411ms -14% z=1.3
subgraph-idle: script duration 20ms 15ms -23% z=-1.8
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 55.1 MB 53.5 MB -3%
subgraph-idle: DOM nodes -273 -282 +3% z=-203.2
subgraph-idle: event listeners -197 -199 +1% variance too high
subgraph-mouse-sweep: avg frame time 17ms 17ms -0% z=-0.1
subgraph-mouse-sweep: p95 frame time 17ms 17ms -1%
subgraph-mouse-sweep: layout duration 5ms 5ms -7% z=-0.6
subgraph-mouse-sweep: style recalc duration 39ms 39ms +0% z=-1.1
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 75 76 +1% z=-2.1
subgraph-mouse-sweep: task duration 765ms 735ms -4% z=-0.4
subgraph-mouse-sweep: script duration 94ms 96ms +2% z=-0.8
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 65.7 MB 67.2 MB +2%
subgraph-mouse-sweep: DOM nodes -277 -261 -6% z=-146.8
subgraph-mouse-sweep: event listeners -197 -199 +1% variance too high
subgraph-transition-enter: avg frame time 17ms 17ms +0%
subgraph-transition-enter: p95 frame time 17ms 17ms +0%
subgraph-transition-enter: layout duration 13ms 16ms +21%
subgraph-transition-enter: style recalc duration 29ms 33ms +13%
subgraph-transition-enter: layout count 14 14 +0%
subgraph-transition-enter: style recalc count 18 18 +0%
subgraph-transition-enter: task duration 746ms 823ms +10%
subgraph-transition-enter: script duration 28ms 31ms +10%
subgraph-transition-enter: TBT 151ms 166ms +10%
subgraph-transition-enter: heap used 97.3 MB 97.3 MB -0%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2533 2533 +0%
viewport-pan-sweep: avg frame time 17ms 17ms +0%
viewport-pan-sweep: p95 frame time 17ms 17ms +0%
viewport-pan-sweep: layout duration 0ms 0ms +0%
viewport-pan-sweep: style recalc duration 58ms 56ms -3%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 251 +0%
viewport-pan-sweep: task duration 4171ms 3892ms -7%
viewport-pan-sweep: script duration 1335ms 1321ms -1%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 66.1 MB 70.7 MB +7%
viewport-pan-sweep: DOM nodes -272 -272 -0%
viewport-pan-sweep: event listeners -183 -183 +0%
vue-large-graph-idle: avg frame time 17ms 17ms +3%
vue-large-graph-idle: p95 frame time 17ms 17ms +0%
vue-large-graph-idle: layout duration 0ms 0ms +0%
vue-large-graph-idle: style recalc duration 0ms 0ms +0%
vue-large-graph-idle: layout count 0 0 +0%
vue-large-graph-idle: style recalc count 0 0 +0%
vue-large-graph-idle: task duration 11100ms 12523ms +13%
vue-large-graph-idle: script duration 525ms 545ms +4%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 158.6 MB 161.1 MB +2%
vue-large-graph-idle: DOM nodes -3302 -3301 -0%
vue-large-graph-idle: event listeners -16374 -16378 +0%
vue-large-graph-pan: avg frame time 17ms 17ms +0%
vue-large-graph-pan: p95 frame time 17ms 17ms +0%
vue-large-graph-pan: layout duration 0ms 0ms +0%
vue-large-graph-pan: style recalc duration 20ms 18ms -12%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 68 72 +5%
vue-large-graph-pan: task duration 14446ms 15084ms +4%
vue-large-graph-pan: script duration 815ms 824ms +1%
vue-large-graph-pan: TBT 5ms 5ms -10%
vue-large-graph-pan: heap used 169.2 MB 170.2 MB +1%
vue-large-graph-pan: DOM nodes -3302 -3301 -0%
vue-large-graph-pan: event listeners -16372 -16377 +0%
workflow-execution: avg frame time 17ms 17ms +0% z=0.6
workflow-execution: p95 frame time 17ms 17ms +1%
workflow-execution: layout duration 1ms 1ms -25% z=-6.9
workflow-execution: style recalc duration 21ms 20ms -7% z=-1.9
workflow-execution: layout count 3 3 -17% z=-4.5
workflow-execution: style recalc count 13 12 -8% z=-2.8
workflow-execution: task duration 107ms 129ms +21% z=0.6
workflow-execution: script duration 9ms 10ms +8% z=-6.4
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 54.3 MB 49.1 MB -10%
workflow-execution: DOM nodes 117 -68 -158% z=-32.2
workflow-execution: event listeners 65 -54 -183% z=-24.2
Historical variance (last 15 runs)
Metric μ σ CV
canvas-idle: avg frame time 17ms 0ms 0.0%
canvas-idle: layout duration 0ms 0ms 0.0%
canvas-idle: style recalc duration 11ms 1ms 8.2%
canvas-idle: layout count 0 0 0.0%
canvas-idle: style recalc count 11 1 5.0%
canvas-idle: task duration 395ms 31ms 7.9%
canvas-idle: script duration 25ms 2ms 8.8%
canvas-idle: TBT 0ms 0ms 0.0%
canvas-idle: DOM nodes 23 1 5.6%
canvas-idle: event listeners 12 5 40.9%
canvas-mouse-sweep: avg frame time 17ms 0ms 0.0%
canvas-mouse-sweep: layout duration 4ms 0ms 5.4%
canvas-mouse-sweep: style recalc duration 43ms 3ms 7.4%
canvas-mouse-sweep: layout count 12 0 0.0%
canvas-mouse-sweep: style recalc count 79 2 3.0%
canvas-mouse-sweep: task duration 865ms 58ms 6.7%
canvas-mouse-sweep: script duration 136ms 6ms 4.8%
canvas-mouse-sweep: TBT 0ms 0ms 0.0%
canvas-mouse-sweep: DOM nodes 62 3 4.2%
canvas-mouse-sweep: event listeners 8 4 49.4%
canvas-zoom-sweep: avg frame time 17ms 0ms 0.0%
canvas-zoom-sweep: layout duration 1ms 0ms 7.0%
canvas-zoom-sweep: style recalc duration 19ms 2ms 8.0%
canvas-zoom-sweep: layout count 6 0 0.0%
canvas-zoom-sweep: style recalc count 31 0 1.5%
canvas-zoom-sweep: task duration 327ms 23ms 7.1%
canvas-zoom-sweep: script duration 27ms 3ms 11.1%
canvas-zoom-sweep: TBT 0ms 0ms 0.0%
canvas-zoom-sweep: DOM nodes 79 1 1.0%
canvas-zoom-sweep: event listeners 24 5 21.8%
dom-widget-clipping: avg frame time 17ms 0ms 0.0%
dom-widget-clipping: layout duration 0ms 0ms 0.0%
dom-widget-clipping: style recalc duration 10ms 1ms 8.0%
dom-widget-clipping: layout count 0 0 0.0%
dom-widget-clipping: style recalc count 13 0 3.8%
dom-widget-clipping: task duration 365ms 16ms 4.5%
dom-widget-clipping: script duration 68ms 3ms 4.8%
dom-widget-clipping: TBT 0ms 0ms 0.0%
dom-widget-clipping: DOM nodes 22 1 6.4%
dom-widget-clipping: event listeners 8 6 81.2%
large-graph-idle: avg frame time 17ms 0ms 0.0%
large-graph-idle: layout duration 0ms 0ms 0.0%
large-graph-idle: style recalc duration 12ms 1ms 8.6%
large-graph-idle: layout count 0 0 0.0%
large-graph-idle: style recalc count 12 0 2.7%
large-graph-idle: task duration 542ms 54ms 10.0%
large-graph-idle: script duration 102ms 11ms 10.3%
large-graph-idle: TBT 0ms 0ms 0.0%
large-graph-idle: DOM nodes 25 1 3.7%
large-graph-idle: event listeners 26 6 23.2%
large-graph-pan: avg frame time 17ms 0ms 0.0%
large-graph-pan: layout duration 0ms 0ms 0.0%
large-graph-pan: style recalc duration 17ms 1ms 4.6%
large-graph-pan: layout count 0 0 0.0%
large-graph-pan: style recalc count 70 1 0.9%
large-graph-pan: task duration 1082ms 43ms 4.0%
large-graph-pan: script duration 408ms 20ms 4.8%
large-graph-pan: TBT 0ms 0ms 0.0%
large-graph-pan: DOM nodes 19 2 8.7%
large-graph-pan: event listeners 5 1 16.8%
minimap-idle: avg frame time 17ms 0ms 0.0%
minimap-idle: layout duration 0ms 0ms 0.0%
minimap-idle: style recalc duration 10ms 1ms 8.6%
minimap-idle: layout count 0 0 0.0%
minimap-idle: style recalc count 10 1 7.1%
minimap-idle: task duration 527ms 47ms 9.0%
minimap-idle: script duration 98ms 10ms 10.1%
minimap-idle: TBT 0ms 0ms 0.0%
minimap-idle: DOM nodes 19 1 7.1%
minimap-idle: event listeners 5 1 14.4%
subgraph-dom-widget-clipping: avg frame time 17ms 0ms 0.0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms 0.0%
subgraph-dom-widget-clipping: style recalc duration 13ms 1ms 7.4%
subgraph-dom-widget-clipping: layout count 0 0 0.0%
subgraph-dom-widget-clipping: style recalc count 48 1 1.2%
subgraph-dom-widget-clipping: task duration 378ms 18ms 4.9%
subgraph-dom-widget-clipping: script duration 128ms 6ms 4.9%
subgraph-dom-widget-clipping: TBT 0ms 0ms 0.0%
subgraph-dom-widget-clipping: DOM nodes 22 1 5.0%
subgraph-dom-widget-clipping: event listeners 16 6 36.0%
subgraph-idle: avg frame time 17ms 0ms 0.0%
subgraph-idle: layout duration 0ms 0ms 0.0%
subgraph-idle: style recalc duration 10ms 1ms 7.5%
subgraph-idle: layout count 0 0 0.0%
subgraph-idle: style recalc count 11 1 6.0%
subgraph-idle: task duration 370ms 31ms 8.5%
subgraph-idle: script duration 20ms 3ms 13.2%
subgraph-idle: TBT 0ms 0ms 0.0%
subgraph-idle: DOM nodes 22 1 6.9%
subgraph-idle: event listeners 10 7 64.5%
subgraph-mouse-sweep: avg frame time 17ms 0ms 0.0%
subgraph-mouse-sweep: layout duration 5ms 0ms 6.8%
subgraph-mouse-sweep: style recalc duration 42ms 3ms 7.8%
subgraph-mouse-sweep: layout count 16 0 0.0%
subgraph-mouse-sweep: style recalc count 80 2 2.4%
subgraph-mouse-sweep: task duration 766ms 69ms 9.0%
subgraph-mouse-sweep: script duration 101ms 7ms 6.5%
subgraph-mouse-sweep: TBT 0ms 0ms 0.0%
subgraph-mouse-sweep: DOM nodes 67 2 3.3%
subgraph-mouse-sweep: event listeners 8 4 52.6%
workflow-execution: avg frame time 17ms 0ms 0.0%
workflow-execution: layout duration 2ms 0ms 9.4%
workflow-execution: style recalc duration 24ms 2ms 9.1%
workflow-execution: layout count 5 1 11.0%
workflow-execution: style recalc count 18 2 11.5%
workflow-execution: task duration 123ms 11ms 8.8%
workflow-execution: script duration 29ms 3ms 10.2%
workflow-execution: TBT 0ms 0ms 0.0%
workflow-execution: DOM nodes 161 7 4.4%
workflow-execution: event listeners 52 4 8.4%
Trend (last 15 commits on main)
Metric Trend Dir Latest
canvas-idle: avg frame time ▆▃▆▁▆▃▆█▆▆▄▃▃▄▃ ➡️ 17ms
canvas-idle: p95 frame time ➡️ NaNms
canvas-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: style recalc duration ▇▇▆▆▃█▄▃▄▃▇▄▁▆▇ ➡️ 11ms
canvas-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
canvas-idle: style recalc count █▃▅▂▅▆▃▁▂▁▂▅▆▅▆ ➡️ 12
canvas-idle: task duration ▃▃▃▆▂▃▃▅▆▂█▃▁▃▃ ➡️ 391ms
canvas-idle: script duration ▄▃▅▇▂▅▃▆▇▅█▄▁▅▆ ➡️ 27ms
canvas-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: heap used ➡️ NaN MB
canvas-idle: DOM nodes █▇▆▅▃▇▃▁▂▂▅▆▆▆▇ ➡️ 24
canvas-idle: event listeners ▅█▅▄▁▅▁▁▁▄▅▅▁▅▄ 📉 11
canvas-mouse-sweep: avg frame time ▆█▆▃▁▃▁▆▆▁▃▆▆▃▃ ➡️ 17ms
canvas-mouse-sweep: p95 frame time ➡️ NaNms
canvas-mouse-sweep: layout duration ▁▃▂▄▁▂▁▃▆▂█▇▆▄▃ ➡️ 4ms
canvas-mouse-sweep: style recalc duration ▄▄▂▄▁▂▃▃▅▄█▆▂▄▄ ➡️ 43ms
canvas-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 12
canvas-mouse-sweep: style recalc count █▅▄▃▂▂▁▄▄▅▆▅▂▇▄ ➡️ 79
canvas-mouse-sweep: task duration █▆▄▂▂▃▂▄▄▅█▆▁▆▄ ➡️ 868ms
canvas-mouse-sweep: script duration ▄▅▄▆▄▆▆▆▅▅█▆▁▅▆ ➡️ 139ms
canvas-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-mouse-sweep: heap used ➡️ NaN MB
canvas-mouse-sweep: DOM nodes █▅▃▃▁▂▂▃▂▄▆▅▃▅▅ ➡️ 64
canvas-mouse-sweep: event listeners █▁▁▁▁▁▇▁▁▁██▇▁█ 📈 13
canvas-zoom-sweep: avg frame time ▅▅█▄▅▁▁▁▅▁▁▅▄▅▁ ➡️ 17ms
canvas-zoom-sweep: p95 frame time ➡️ NaNms
canvas-zoom-sweep: layout duration ▆▅▅▄▁▁█▅▃▅▇▆▁▂▆ ➡️ 1ms
canvas-zoom-sweep: style recalc duration ▆▅▄▆▅▃█▆▇▅▇▄▁▃▅ ➡️ 20ms
canvas-zoom-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 6
canvas-zoom-sweep: style recalc count ▁▁▃▄▆▃▆█▄▄▆▁▆▁▆ ➡️ 32
canvas-zoom-sweep: task duration ▄▂▁▇▂▂▄▅▆▃█▄▁▁▅ ➡️ 338ms
canvas-zoom-sweep: script duration ▃▃▂▇▂▂▅▇▆▅█▄▁▂▆ ➡️ 30ms
canvas-zoom-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-zoom-sweep: heap used ➡️ NaN MB
canvas-zoom-sweep: DOM nodes ▄▃▁▅█▁▃▆▄▅▅▃▃▄▃ ➡️ 79
canvas-zoom-sweep: event listeners ▁▁▂▅█▂▁▅▁▅▅▄▁▅▁ ➡️ 19
dom-widget-clipping: avg frame time ▂▄▅▅▂▄█▇▅▇▇▅▅▁▇ ➡️ 17ms
dom-widget-clipping: p95 frame time ➡️ NaNms
dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: style recalc duration ▆▆▂▆▄▃██▄▁▆▇▆▃▅ ➡️ 10ms
dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
dom-widget-clipping: style recalc count ▇█▅█▅▄█▇▇▁▇▄▇▂▅ ➡️ 13
dom-widget-clipping: task duration ▃▃▁▅▄▃▅▆▅▂▇█▁▅▅ ➡️ 371ms
dom-widget-clipping: script duration ▅▄▄▆▆▅▇▇▆▃█▇▁▇▇ ➡️ 71ms
dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: heap used ➡️ NaN MB
dom-widget-clipping: DOM nodes ▇▇▄▇▅▄█▇▅▁▅▄▇▃▄ ➡️ 21
dom-widget-clipping: event listeners ▅▅▅▅▁▅██▁▁▁▁█▁▁ 📉 2
large-graph-idle: avg frame time ▅▅▅▅▅▂▁▂▄▅▄▂▂▅█ ➡️ 17ms
large-graph-idle: p95 frame time ➡️ NaNms
large-graph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: style recalc duration ▅▅▅▆▄▅▃▄▅▅▆█▁▄▆ ➡️ 13ms
large-graph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-idle: style recalc count █▆█▃▃▁▃▆▃▆▆▃▆██ ➡️ 12
large-graph-idle: task duration ▂▃▂▆▂▃▃▇▅▃██▁▂▅ ➡️ 569ms
large-graph-idle: script duration ▄▅▄▆▄▅▅▇▆▅█▆▁▃▆ ➡️ 110ms
large-graph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: heap used ➡️ NaN MB
large-graph-idle: DOM nodes ▆█▅▂▅▃▁▂▃▅▅▆▂▆▅ ➡️ 25
large-graph-idle: event listeners ███▇██▄▁▄▇▇█▂█▇ ➡️ 29
large-graph-pan: avg frame time ▆▃▃▆█▃▁█▆▆▆▆█▁▆ ➡️ 17ms
large-graph-pan: p95 frame time ➡️ NaNms
large-graph-pan: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: style recalc duration ▃▂▄▄▁▅▂▂▁▄▄█▃▁▂ ➡️ 17ms
large-graph-pan: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-pan: style recalc count ▆▃█▂▃▂▂▂▁▇▅▃█▆▃ ➡️ 69
large-graph-pan: task duration ▄▃▄▆▄▄▄▆▄▄█▆▁▂▅ ➡️ 1100ms
large-graph-pan: script duration ▅▄▅▆▆▅▄▆▄▅█▄▁▄▅ ➡️ 413ms
large-graph-pan: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: heap used ➡️ NaN MB
large-graph-pan: DOM nodes ▅▃▆▂▄▁▃▁▁▅▁▂█▅▂ ➡️ 18
large-graph-pan: event listeners █▆█▁▁▆▁▁▃▆▁▃██▃ ➡️ 5
minimap-idle: avg frame time ▃▆▆▃█▁█▆▆▃▃▆█▆█ ➡️ 17ms
minimap-idle: p95 frame time ➡️ NaNms
minimap-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: style recalc duration ▄█▁█▅▅█▅▅▃▅▁▁▄▆ ➡️ 10ms
minimap-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
minimap-idle: style recalc count ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 9
minimap-idle: task duration ▃▄▁▅▁▃▄▅▇▃█▅▁▁▅ ➡️ 547ms
minimap-idle: script duration ▄▆▃▇▃▅▆▆▇▅█▅▁▃▆ ➡️ 106ms
minimap-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: heap used ➡️ NaN MB
minimap-idle: DOM nodes ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 19
minimap-idle: event listeners ▃▃▆▁▁▁▃▁▁▆▁▃█▆▁ ➡️ 4
subgraph-dom-widget-clipping: avg frame time ▅▄▄▄▄▄█▄▄▄▃▁▆▃▃ ➡️ 17ms
subgraph-dom-widget-clipping: p95 frame time ➡️ NaNms
subgraph-dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: style recalc duration ▂▄▃▅▅▃▂▅▇▃▄█▁▄▆ ➡️ 14ms
subgraph-dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-dom-widget-clipping: style recalc count ▇█▆▃▆▃▁▆█▇▃▆▇█▅ ➡️ 48
subgraph-dom-widget-clipping: task duration ▂▃▃▆▅▅▂▅█▂▆█▁▂▇ ➡️ 398ms
subgraph-dom-widget-clipping: script duration ▃▃▃▄▅▅▂▄█▂▅▇▁▂▅ ➡️ 131ms
subgraph-dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: heap used ➡️ NaN MB
subgraph-dom-widget-clipping: DOM nodes ▅▇▅▂▅▂▁▅▅▅▁▇▅█▄ ➡️ 22
subgraph-dom-widget-clipping: event listeners ▅▅▅▂▅▁▅██▁▁█▅█▅ 📈 16
subgraph-idle: avg frame time ▆▆█▁▆▃▆▆▆▃▆▁▃▆█ ➡️ 17ms
subgraph-idle: p95 frame time ➡️ NaNms
subgraph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: style recalc duration ▁▇▃▆▂▄▂▃▃▆▆▄▃▇█ ➡️ 12ms
subgraph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-idle: style recalc count ▃▆▃▃▂▅▁▂▁▆▃▃██▇ ➡️ 12
subgraph-idle: task duration ▁▃▁▇▁▁▃▆▅▂█▅▁▁▄ ➡️ 378ms
subgraph-idle: script duration ▁▃▂▇▁▂▃▇▆▂█▅▂▁▅ ➡️ 22ms
subgraph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: heap used ➡️ NaN MB
subgraph-idle: DOM nodes ▃▅▃▂▁▄▁▂▁▅▃▂▇█▇ ➡️ 24
subgraph-idle: event listeners ▁▅▁▁▁▁▁▁▁▅▄▁███ 📈 21
subgraph-mouse-sweep: avg frame time ▅▄▁▃▃▄▆▄▆▃▃█▁▃▃ ➡️ 17ms
subgraph-mouse-sweep: p95 frame time ➡️ NaNms
subgraph-mouse-sweep: layout duration ▁▄▄▄▃▃▅▅▅▂█▇▂▃▆ ➡️ 5ms
subgraph-mouse-sweep: style recalc duration ▃▂▄▅▂▃▄▅█▃█▆▁▂▅ ➡️ 43ms
subgraph-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 16
subgraph-mouse-sweep: style recalc count ▅▂▅▅▁▄▃▅█▅▆▄▂▄▅ ➡️ 81
subgraph-mouse-sweep: task duration ▃▂▄▅▂▄▄▅▇▄█▆▁▃▅ ➡️ 785ms
subgraph-mouse-sweep: script duration ▄▅▄▇▅▅▆▇▆▅██▁▄▆ ➡️ 105ms
subgraph-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-mouse-sweep: heap used ➡️ NaN MB
subgraph-mouse-sweep: DOM nodes ▅▁▄▅▁▄▃▃█▅▅▄▂▅▃ ➡️ 66
subgraph-mouse-sweep: event listeners ▇▁▂▇▁▂▂▂█▇▂▂▇▇▂ 📈 5
workflow-execution: avg frame time ▆▆▆▄▆▆▃▄▁▄█▆▅▄▆ ➡️ 17ms
workflow-execution: p95 frame time ➡️ NaNms
workflow-execution: layout duration ▁▆▁▃▂▄▃▂▃▃▅█▄▂▅ ➡️ 2ms
workflow-execution: style recalc duration ▃▇▅▇▁▅▆▇█▁██▂▄▆ ➡️ 25ms
workflow-execution: layout count ▁█▂▃▂▃▃▁▃▃▄▃▂▃▂ ➡️ 5
workflow-execution: style recalc count ▃█▅▇▁▄▅▆▅▅▅▅▄▄▂ ➡️ 15
workflow-execution: task duration ▂▅▄▅▁▄▆▆▆▁▇█▁▃▃ ➡️ 120ms
workflow-execution: script duration ▄▃▄▄▃▅▄▅▆▂▇█▁▃▄ ➡️ 29ms
workflow-execution: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
workflow-execution: heap used ➡️ NaN MB
workflow-execution: DOM nodes ▂█▃▆▁▄▃▅▃█▃▃▄▃▁ ➡️ 152
workflow-execution: event listeners ▅███▁▅███▁██▅█▅ ➡️ 49
Raw data
{
  "timestamp": "2026-07-14T17:15:52.218Z",
  "gitSha": "5b931959a14a5af0ae0984f0d36990a658eb9855",
  "branch": "codex/global-dialog-workspace-inset",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2039.1119999999887,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.947000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 417.1650000000001,
      "heapDeltaBytes": -682064,
      "heapUsedBytes": 61194596,
      "domNodes": 20,
      "jsHeapTotalBytes": 27525120,
      "scriptDurationMs": 21.302000000000003,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-idle",
      "durationMs": 2028.302999999994,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 8.045,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 434.30400000000003,
      "heapDeltaBytes": -1090880,
      "heapUsedBytes": 51090272,
      "domNodes": -293,
      "jsHeapTotalBytes": 16642048,
      "scriptDurationMs": 19.616,
      "eventListeners": -199,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2029.5249999999783,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 46.393,
      "layouts": 12,
      "layoutDurationMs": 3.935,
      "taskDurationMs": 956.8630000000002,
      "heapDeltaBytes": -2762256,
      "heapUsedBytes": 49383624,
      "domNodes": -269,
      "jsHeapTotalBytes": 18214912,
      "scriptDurationMs": 136.20200000000003,
      "eventListeners": -199,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1822.6799999999912,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 37.617,
      "layouts": 12,
      "layoutDurationMs": 3.403,
      "taskDurationMs": 764.1020000000001,
      "heapDeltaBytes": -5760420,
      "heapUsedBytes": 54847432,
      "domNodes": 57,
      "jsHeapTotalBytes": 25690112,
      "scriptDurationMs": 122.886,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1755.3030000000263,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 21.212,
      "layouts": 6,
      "layoutDurationMs": 0.6409999999999999,
      "taskDurationMs": 395.323,
      "heapDeltaBytes": -3746120,
      "heapUsedBytes": 66389840,
      "domNodes": -229,
      "jsHeapTotalBytes": 13774848,
      "scriptDurationMs": 21.119,
      "eventListeners": -184,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1759.5669999999473,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 17.911000000000005,
      "layouts": 6,
      "layoutDurationMs": 0.7750000000000001,
      "taskDurationMs": 354.12300000000005,
      "heapDeltaBytes": 5015516,
      "heapUsedBytes": 57232100,
      "domNodes": -243,
      "jsHeapTotalBytes": 2224128,
      "scriptDurationMs": 20.056,
      "eventListeners": -186,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 644.5739999999773,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 10.019,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 401.33000000000004,
      "heapDeltaBytes": 11716900,
      "heapUsedBytes": 74603112,
      "domNodes": 20,
      "jsHeapTotalBytes": 22282240,
      "scriptDurationMs": 69.44500000000001,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 569.5729999999912,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 7.373000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 338.701,
      "heapDeltaBytes": 7518804,
      "heapUsedBytes": 66546316,
      "domNodes": 18,
      "jsHeapTotalBytes": 17301504,
      "scriptDurationMs": 57.05499999999999,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2019.5699999999874,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 10.222999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 525.609,
      "heapDeltaBytes": -8297040,
      "heapUsedBytes": 64101700,
      "domNodes": 20,
      "jsHeapTotalBytes": 9318400,
      "scriptDurationMs": 98.248,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2052.8400000000033,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.306999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 650.182,
      "heapDeltaBytes": -1931752,
      "heapUsedBytes": 59427868,
      "domNodes": -271,
      "jsHeapTotalBytes": -1359872,
      "scriptDurationMs": 114.30200000000002,
      "eventListeners": -197,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2117.293000000018,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 19.316999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1156.487,
      "heapDeltaBytes": 8724124,
      "heapUsedBytes": 65899924,
      "domNodes": 18,
      "jsHeapTotalBytes": 9641984,
      "scriptDurationMs": 464.71199999999993,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2110.014000000092,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 16.754,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1116.422,
      "heapDeltaBytes": -6882048,
      "heapUsedBytes": 55873588,
      "domNodes": -275,
      "jsHeapTotalBytes": -573440,
      "scriptDurationMs": 404.89799999999997,
      "eventListeners": -197,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3130.559000000005,
      "styleRecalcs": 62,
      "styleRecalcDurationMs": 15.495000000000001,
      "layouts": 60,
      "layoutDurationMs": 7.127999999999999,
      "taskDurationMs": 1275.56,
      "heapDeltaBytes": 14246216,
      "heapUsedBytes": 70506028,
      "domNodes": 6,
      "jsHeapTotalBytes": 2359296,
      "scriptDurationMs": 490.10299999999995,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3118.247999999994,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 17.658,
      "layouts": 60,
      "layoutDurationMs": 7.325,
      "taskDurationMs": 1284.691,
      "heapDeltaBytes": 15814844,
      "heapUsedBytes": 71702396,
      "domNodes": 12,
      "jsHeapTotalBytes": 7077888,
      "scriptDurationMs": 483.841,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2038.0249999999478,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 7.232000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 570.779,
      "heapDeltaBytes": -2842420,
      "heapUsedBytes": 60749980,
      "domNodes": -275,
      "jsHeapTotalBytes": -1622016,
      "scriptDurationMs": 104.88999999999999,
      "eventListeners": -197,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2026.4539999999442,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 5.949999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 505.231,
      "heapDeltaBytes": -16068180,
      "heapUsedBytes": 60760228,
      "domNodes": -272,
      "jsHeapTotalBytes": 1904640,
      "scriptDurationMs": 90.586,
      "eventListeners": -197,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 607.1949999999902,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 12.855,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 421.7169999999999,
      "heapDeltaBytes": -22120932,
      "heapUsedBytes": 48029876,
      "domNodes": -276,
      "jsHeapTotalBytes": 6172672,
      "scriptDurationMs": 130.254,
      "eventListeners": -195,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 636.1449999999422,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 11.349,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 424.826,
      "heapDeltaBytes": -21579600,
      "heapUsedBytes": 48597052,
      "domNodes": -275,
      "jsHeapTotalBytes": 4861952,
      "scriptDurationMs": 125.17900000000002,
      "eventListeners": -197,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66666666666665,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2053.250000000048,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 9.990999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 423.74500000000006,
      "heapDeltaBytes": -7455352,
      "heapUsedBytes": 62822096,
      "domNodes": -273,
      "jsHeapTotalBytes": 18493440,
      "scriptDurationMs": 16.494,
      "eventListeners": -199,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2023.3299999999872,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.616999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 398.17800000000005,
      "heapDeltaBytes": -2686676,
      "heapUsedBytes": 49390908,
      "domNodes": -291,
      "jsHeapTotalBytes": 17166336,
      "scriptDurationMs": 14.217,
      "eventListeners": -199,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1728.7399999999593,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 40.63999999999999,
      "layouts": 16,
      "layoutDurationMs": 4.720000000000001,
      "taskDurationMs": 751.598,
      "heapDeltaBytes": 16509000,
      "heapUsedBytes": 69093528,
      "domNodes": -276,
      "jsHeapTotalBytes": 13758464,
      "scriptDurationMs": 98.98499999999999,
      "eventListeners": -199,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1761.9260000000168,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 37.117,
      "layouts": 16,
      "layoutDurationMs": 4.323,
      "taskDurationMs": 718.29,
      "heapDeltaBytes": 19249180,
      "heapUsedBytes": 71817576,
      "domNodes": -246,
      "jsHeapTotalBytes": 16904192,
      "scriptDurationMs": 92.24000000000001,
      "eventListeners": -199,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1065.796999999975,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 32.861,
      "layouts": 14,
      "layoutDurationMs": 16.240000000000002,
      "taskDurationMs": 823.3750000000002,
      "heapDeltaBytes": 29681200,
      "heapUsedBytes": 101979720,
      "domNodes": 13673,
      "jsHeapTotalBytes": 16252928,
      "scriptDurationMs": 30.589000000000006,
      "eventListeners": 2533,
      "totalBlockingTimeMs": 166,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8233.381000000008,
      "styleRecalcs": 251,
      "styleRecalcDurationMs": 59.828,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3778.2729999999997,
      "heapDeltaBytes": 6466008,
      "heapUsedBytes": 74705872,
      "domNodes": -270,
      "jsHeapTotalBytes": 450560,
      "scriptDurationMs": 1261.7430000000002,
      "eventListeners": -183,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8170.003999999949,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 53.06,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4004.9019999999996,
      "heapDeltaBytes": 4905580,
      "heapUsedBytes": 73498176,
      "domNodes": -273,
      "jsHeapTotalBytes": 4644864,
      "scriptDurationMs": 1379.3880000000001,
      "eventListeners": -183,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 12462.57300000002,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 12449.550000000003,
      "heapDeltaBytes": -47272720,
      "heapUsedBytes": 167734848,
      "domNodes": -3300,
      "jsHeapTotalBytes": 4689920,
      "scriptDurationMs": 580.935,
      "eventListeners": -16378,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.219999999999953,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 12612.02400000002,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 12596.985,
      "heapDeltaBytes": -31425836,
      "heapUsedBytes": 170167204,
      "domNodes": -3302,
      "jsHeapTotalBytes": 20156416,
      "scriptDurationMs": 509.68800000000005,
      "eventListeners": -16378,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333237,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 15081.477000000006,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 17.915000000000013,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15054.167,
      "heapDeltaBytes": -25850312,
      "heapUsedBytes": 180312116,
      "domNodes": -3300,
      "jsHeapTotalBytes": -4308992,
      "scriptDurationMs": 827.062,
      "eventListeners": -16380,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.220000000000073,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 15138.005000000021,
      "styleRecalcs": 70,
      "styleRecalcDurationMs": 17.730000000000025,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15114.134999999998,
      "heapDeltaBytes": -39669080,
      "heapUsedBytes": 176719156,
      "domNodes": -3301,
      "jsHeapTotalBytes": 6991872,
      "scriptDurationMs": 820.6039999999999,
      "eventListeners": -16374,
      "totalBlockingTimeMs": 9,
      "frameDurationMs": 17.223333333333237,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 477.4630000000002,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 17.753999999999998,
      "layouts": 2,
      "layoutDurationMs": 0.4270000000000001,
      "taskDurationMs": 99.932,
      "heapDeltaBytes": 4908392,
      "heapUsedBytes": 57169060,
      "domNodes": 128,
      "jsHeapTotalBytes": 262144,
      "scriptDurationMs": 10.13,
      "eventListeners": 65,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66666666666665,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 461.90500000000156,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 22.407000000000004,
      "layouts": 3,
      "layoutDurationMs": 0.678,
      "taskDurationMs": 158.35200000000003,
      "heapDeltaBytes": -6450576,
      "heapUsedBytes": 45722008,
      "domNodes": -264,
      "jsHeapTotalBytes": -397312,
      "scriptDurationMs": 10.295,
      "eventListeners": -173,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    }
  ]
}

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/assets/css/style.css`:
- Around line 3-6: Update the :root custom property --workspace-inset-right from
the unitless value 0 to the length value 0px so it remains valid when used in
calc() expressions with other length values.

In `@src/components/dialog/GlobalDialog.test.ts`:
- Around line 104-132: Remove the change-detector CSS class assertions from
src/components/dialog/GlobalDialog.test.ts lines 104-132 by deleting the entire
“centers full Reka dialogs inside the visible workspace” test. In
src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts lines
142-144, remove the contentClass string assertion and, if coverage is needed,
assert the semantic size: 'full' property instead.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8509c119-9488-4ebc-bb2d-5f78be60acbc

📥 Commits

Reviewing files that changed from the base of the PR and between 16fdcab and 6d5a911.

📒 Files selected for processing (5)
  • src/assets/css/style.css
  • src/components/dialog/GlobalDialog.test.ts
  • src/components/ui/dialog/dialog.variants.ts
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.ts

Comment thread src/assets/css/style.css Outdated
Comment on lines +3 to +6
:root {
--workspace-inset-right: 0;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win

Change 0 to 0px to prevent invalid CSS calc() expressions.

Unitless 0 is invalid when used in CSS calc() additions or subtractions alongside <length> values. When --workspace-inset-right is 0, expressions like calc(100vw - var(--workspace-inset-right) - 1rem) evaluate to calc(100vw - 0 - 1rem). The browser parses 0 as a <number>, not a <length>, causing a type mismatch that makes the entire calc() expression invalid. This drops the CSS rule and breaks the dialog's sizing constraints.

Use 0px to ensure the variable works correctly in layout calculations.

🐛 Proposed fix
 :root {
-  --workspace-inset-right: 0;
+  --workspace-inset-right: 0px;
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
:root {
--workspace-inset-right: 0;
}
:root {
--workspace-inset-right: 0px;
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/assets/css/style.css` around lines 3 - 6, Update the :root custom
property --workspace-inset-right from the unitless value 0 to the length value
0px so it remains valid when used in calc() expressions with other length
values.

Comment on lines +104 to +132
it('centers full Reka dialogs inside the visible workspace', async () => {
mountDialog()
const store = useDialogStore()

store.showDialog({
key: 'visible-workspace',
title: 'Visible workspace dialog',
component: Body,
dialogComponentProps: { renderer: 'reka', size: 'full' }
})

const dialog = await screen.findByRole('dialog')
expect(
dialog.classList.contains(
'left-[calc(50%-var(--workspace-inset-right)/2)]'
)
).toBe(true)
expect(
dialog.classList.contains(
'w-[calc(100vw-var(--workspace-inset-right)-1rem)]'
)
).toBe(true)
expect(
dialog.classList.contains(
'sm:max-w-[calc(100vw-var(--workspace-inset-right)-1rem)]'
)
).toBe(true)
})

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove change-detector class assertions.

Both test files assert specific Tailwind class strings for dynamic layout and sizing. This violates the repository's testing instructions which expressly forbid change-detector style assertions and discourage styles/classes as assertion targets. Since the PR summary states that browser geometry validation is already included for these layouts, these Vitest class-string assertions are redundant and fragile.

As per path instructions, do not write change-detector tests, and avoid tests dependent on non-behavioral features like specific Tailwind/CSS class strings.

  • src/components/dialog/GlobalDialog.test.ts#L104-L132: Remove this test entirely, as it only verifies implementation-detail CSS classes that Vitest/jsdom cannot accurately measure anyway.
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts#L142-L144: Remove this contentClass string assertion. If necessary, assert the semantic size: 'full' property instead.
📍 Affects 2 files
  • src/components/dialog/GlobalDialog.test.ts#L104-L132 (this comment)
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts#L142-L144
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/dialog/GlobalDialog.test.ts` around lines 104 - 132, Remove
the change-detector CSS class assertions from
src/components/dialog/GlobalDialog.test.ts lines 104-132 by deleting the entire
“centers full Reka dialogs inside the visible workspace” test. In
src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts lines
142-144, remove the contentClass string assertion and, if coverage is needed,
assert the semantic size: 'full' property instead.

Source: Path instructions

@codecov

codecov Bot commented Jul 14, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@            Coverage Diff             @@
##             main   #13633      +/-   ##
==========================================
- Coverage   78.68%   78.05%   -0.64%     
==========================================
  Files        1667     1669       +2     
  Lines      114346   109960    -4386     
  Branches    40551    39091    -1460     
==========================================
- Hits        89978    85830    -4148     
+ Misses      23451    23244     -207     
+ Partials      917      886      -31     
Flag Coverage Δ
unit 66.77% <100.00%> (+0.06%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
.../subscription/composables/useSubscriptionDialog.ts 62.13% <100.00%> (+17.98%) ⬆️

... and 81 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@dosubot dosubot Bot added size:XS This PR changes 0-9 lines, ignoring generated files. and removed size:S This PR changes 10-29 lines, ignoring generated files. labels Jul 14, 2026
@dosubot dosubot Bot added size:S This PR changes 10-29 lines, ignoring generated files. and removed size:XS This PR changes 0-9 lines, ignoring generated files. labels Jul 14, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/platform/workspace/components/SubscriptionRequiredDialogContentWorkspace.test.ts`:
- Around line 135-137: Remove the exact Tailwind class assertion from
SubscriptionRequiredDialogContentWorkspace.test.ts and remove the data-testid
used only by that assertion from SubscriptionRequiredDialogContentWorkspace.vue;
no other behavioral tests need changes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: c821388b-a54e-4017-9bca-940dab717451

📥 Commits

Reviewing files that changed from the base of the PR and between 6d5a911 and 0818a4b.

📒 Files selected for processing (4)
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.ts
  • src/platform/workspace/components/SubscriptionRequiredDialogContentWorkspace.test.ts
  • src/platform/workspace/components/SubscriptionRequiredDialogContentWorkspace.vue

Comment on lines +135 to +137
expect(
screen.getByTestId('subscription-workspace-dialog-content')
).toHaveClass('xl:w-[min(1280px,95vw)]')

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the fragile styling assertion and its associated data-testid.

Testing for an exact Tailwind class (xl:w-[min(1280px,95vw)]) is an over-specific DOM check. The data-testid added solely to support this assertion should also be removed.

As per path instructions, avoid tests dependent on non-behavioral features like styles/classes, and flag fragile assertions (over-specific DOM details that change for styling reasons).

  • src/platform/workspace/components/SubscriptionRequiredDialogContentWorkspace.test.ts#L135-L137: Delete the toHaveClass assertion.
  • src/platform/workspace/components/SubscriptionRequiredDialogContentWorkspace.vue#L3-L3: Delete the data-testid="subscription-workspace-dialog-content" attribute.
📍 Affects 2 files
  • src/platform/workspace/components/SubscriptionRequiredDialogContentWorkspace.test.ts#L135-L137 (this comment)
  • src/platform/workspace/components/SubscriptionRequiredDialogContentWorkspace.vue#L3-L3
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/platform/workspace/components/SubscriptionRequiredDialogContentWorkspace.test.ts`
around lines 135 - 137, Remove the exact Tailwind class assertion from
SubscriptionRequiredDialogContentWorkspace.test.ts and remove the data-testid
used only by that assertion from SubscriptionRequiredDialogContentWorkspace.vue;
no other behavioral tests need changes.

Source: Path instructions

@dosubot dosubot Bot added size:M This PR changes 30-99 lines, ignoring generated files. and removed size:S This PR changes 10-29 lines, ignoring generated files. labels Jul 14, 2026
@CodeJuggernaut CodeJuggernaut changed the title fix(dialog): respect workspace right inset fix(subscription): size pricing dialogs with Reka props Jul 14, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts`:
- Around line 82-94: Replace expectPricingDialogFrame’s internal prop assertions
with behavioral tests that verify the rendered pricing dialog frame and its
resulting geometry. Add coverage for both workspace inset and no-inset sizing
outcomes, asserting the effective dimensions rather than implementation details
such as renderer, contentClass, style, or pt.

In `@src/platform/cloud/subscription/composables/useSubscriptionDialog.ts`:
- Around line 15-16: Update PRICING_DIALOG_CONTENT_CLASS to remove the redundant
sm:max-w class and revise the max-width constraint so it subtracts
var(--workspace-inset-right) from the viewport-based limit, while preserving the
1280px cap and existing dialog styling.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 22f45653-6ebe-4f98-88ca-fb00cceb9df3

📥 Commits

Reviewing files that changed from the base of the PR and between 0818a4b and 4760357.

📒 Files selected for processing (2)
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.ts

Comment on lines +82 to +94
function expectPricingDialogFrame(
dialogComponentProps: Record<string, unknown>
) {
expect(dialogComponentProps).toMatchObject({
renderer: 'reka',
size: 'full'
})
expect(dialogComponentProps.contentClass).toContain(
'max-w-[min(1280px,95vw)]'
)
expect(dialogComponentProps).not.toHaveProperty('style')
expect(dialogComponentProps).not.toHaveProperty('pt')
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift

Replace change-detector assertions with behavioral geometry tests.

This test helper acts as a change-detector by solely verifying the internal component props passed to the layout service (e.g., sniffing renderer and contentClass strings) rather than asserting the actual rendering outcome. As per path instructions for Vitest files, you should prefer behavioral verification (e.g., dialog frame and geometry outcome) and ensure proper test coverage exists for the new workspace inset sizing behavior (inset vs. no-inset), which is currently missing.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts`
around lines 82 - 94, Replace expectPricingDialogFrame’s internal prop
assertions with behavioral tests that verify the rendered pricing dialog frame
and its resulting geometry. Add coverage for both workspace inset and no-inset
sizing outcomes, asserting the effective dimensions rather than implementation
details such as renderer, contentClass, style, or pt.

Source: Path instructions

Comment on lines +15 to +16
const PRICING_DIALOG_CONTENT_CLASS =
'w-fit max-w-[min(1280px,95vw)] sm:max-w-[min(1280px,95vw)] max-h-[90vh] rounded-2xl border border-border-default bg-secondary-background shadow-[0_25px_80px_rgba(5,6,12,0.45)]'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Incorporate --workspace-inset-right and remove the redundant responsive class.

The PR objectives mention constraining unified pricing dialogs to the visible workspace when a right inset is configured. However, the hardcoded 95vw does not account for the inset, which can cause the dialog to overflow the visible area when the inset is active. Consider adjusting the width constraint to incorporate the inset (e.g., calc(95vw - var(--workspace-inset-right)) or similar).

Additionally, the sm:max-w-[min(1280px,95vw)] class is redundant because it is identical to the base max-w-[min(1280px,95vw)] class.

💡 Proposed fix
-const PRICING_DIALOG_CONTENT_CLASS =
-  'w-fit max-w-[min(1280px,95vw)] sm:max-w-[min(1280px,95vw)] max-h-[90vh] rounded-2xl border border-border-default bg-secondary-background shadow-[0_25px_80px_rgba(5,6,12,0.45)]'
+const PRICING_DIALOG_CONTENT_CLASS =
+  'w-fit max-w-[min(1280px,calc(95vw-var(--workspace-inset-right)))] max-h-[90vh] rounded-2xl border border-border-default bg-secondary-background shadow-[0_25px_80px_rgba(5,6,12,0.45)]'
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/platform/cloud/subscription/composables/useSubscriptionDialog.ts` around
lines 15 - 16, Update PRICING_DIALOG_CONTENT_CLASS to remove the redundant
sm:max-w class and revise the max-width constraint so it subtracts
var(--workspace-inset-right) from the viewport-based limit, while preserving the
1280px cap and existing dialog styling.

@dosubot dosubot Bot added size:S This PR changes 10-29 lines, ignoring generated files. and removed size:M This PR changes 30-99 lines, ignoring generated files. labels Jul 14, 2026
coderabbitai[bot]
coderabbitai Bot previously requested changes Jul 14, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/platform/cloud/subscription/composables/useSubscriptionDialog.ts`:
- Around line 148-150: Update the dialog’s contentClass max-width constraint to
account for --workspace-inset-right, using the existing min/max sizing behavior
with a calculated viewport width, and remove the redundant
sm:max-w-[min(1280px,95vw)] responsive class while preserving the other styling.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 4373cf2a-c359-4da2-a3ca-e10688076949

📥 Commits

Reviewing files that changed from the base of the PR and between 4760357 and fcb0fb3.

📒 Files selected for processing (2)
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/platform/cloud/subscription/composables/useSubscriptionDialog.ts`:
- Around line 148-150: Update the dialog’s contentClass max-width constraint to
account for --workspace-inset-right, using the existing min/max sizing behavior
with a calculated viewport width, and remove the redundant
sm:max-w-[min(1280px,95vw)] responsive class while preserving the other styling.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 4373cf2a-c359-4da2-a3ca-e10688076949

📥 Commits

Reviewing files that changed from the base of the PR and between 4760357 and fcb0fb3.

📒 Files selected for processing (2)
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.test.ts
  • src/platform/cloud/subscription/composables/useSubscriptionDialog.ts
🛑 Comments failed to post (1)
src/platform/cloud/subscription/composables/useSubscriptionDialog.ts (1)

148-150: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Incorporate --workspace-inset-right and remove the redundant responsive class.

The hardcoded 95vw does not account for the workspace inset, which can cause the dialog to overflow the visible area when the right inset is active. Consider adjusting the width constraint to incorporate the inset (e.g., calc(95vw - var(--workspace-inset-right)) or similar).

Additionally, the sm:max-w-[min(1280px,95vw)] class is redundant because it is identical to the base max-w-[min(1280px,95vw)] class.

💡 Proposed fix
-          contentClass:
-            'w-fit max-w-[min(1280px,95vw)] sm:max-w-[min(1280px,95vw)] max-h-[90vh] rounded-2xl border border-border-default bg-secondary-background shadow-[0_25px_80px_rgba(5,6,12,0.45)]'
+          contentClass:
+            'w-fit max-w-[min(1280px,calc(95vw-var(--workspace-inset-right)))] max-h-[90vh] rounded-2xl border border-border-default bg-secondary-background shadow-[0_25px_80px_rgba(5,6,12,0.45)]'
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/platform/cloud/subscription/composables/useSubscriptionDialog.ts` around
lines 148 - 150, Update the dialog’s contentClass max-width constraint to
account for --workspace-inset-right, using the existing min/max sizing behavior
with a calculated viewport width, and remove the redundant
sm:max-w-[min(1280px,95vw)] responsive class while preserving the other styling.

@dante01yoon dante01yoon left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Regression sweep of the diff (5 angles, each candidate adversarially verified). No functional regression introduced: the legacy paths' old style/pt were already ignored by the Reka renderer on main, so these dialogs rendered at the collapsed md (576px) frame — the new contentClass is a net fix. One non-blocking sizing-consistency suggestion below. Out of scope but worth noting: the fully-legacy bottom path still renders modal: true over PricingTable.vue's body-teleported help Popover, so that popover stays pointer-dead — but that's pre-existing on main (this PR doesn't change modal-ness), tracked under #13558; not for this PR. (Skipping CodeRabbit's change-detector-assertion notes.)

renderer: 'reka',
size: 'full',
contentClass:
'sm:max-w-7xl max-h-[90vh] rounded-2xl border border-border-default bg-secondary-background shadow-[0_25px_80px_rgba(5,6,12,0.45)]'

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

suggestion: match the unified path's sizing idiom instead of sm:max-w-7xl. The full variant's base is w-[calc(100vw-1rem)] with only sm:max-w-[calc(100vw-1rem)], and via cn/tailwind-merge this contentClass wins — so max-w-7xl (a hard 1280px) only binds above a ~1296px viewport. Across 640–1296px (every common laptop width) the legacy pricing dialog renders ~100vw-1rem, i.e. ~8px side margins, near-full-bleed with a clipped shadow; below 640px there's no cap at all. The sibling unified dialog opened by this same composable uses w-fit max-w-[min(1280px,95vw)] sm:max-w-[min(1280px,95vw)] (~32px margins, plus a sub-640px cap). Using the same idiom here fixes the full-bleed look and keeps one sizing form across the subscription family. It also keeps this width easy to make inset-aware later: the --workspace-inset-right contract (prototyped then reverted on this branch, still the open ask on #13472/#13558) retrofits a min(..., calc(100vw-var(--workspace-inset-right)-1rem)) cap onto the min(1280px,95vw) idiom, but not onto a Tailwind-named 7xl.

@DrJKL DrJKL added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch core/1.47 Backport PRs for core 1.47 and removed core/1.47 Backport PRs for core 1.47 labels Jul 15, 2026
@DrJKL
DrJKL enabled auto-merge July 15, 2026 00:34
@DrJKL
DrJKL added this pull request to the merge queue Jul 15, 2026
Merged via the queue into main with commit a7f14a0 Jul 15, 2026
98 checks passed
@DrJKL
DrJKL deleted the codex/global-dialog-workspace-inset branch July 15, 2026 00:51
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 15, 2026
@comfy-pr-bot

Copy link
Copy Markdown
Member

@CodeJuggernaut Successfully backported to #13666

@github-actions github-actions Bot removed the needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch label Jul 15, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

cloud/1.47 Backport PRs for cloud 1.47 size:S This PR changes 10-29 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants