Skip to content

refactor: restructure BaseModalLayout from flexbox to CSS Grid#8211

Merged
DrJKL merged 4 commits intomainfrom
drjkl/basemodal-grid-layout
Jan 21, 2026
Merged

refactor: restructure BaseModalLayout from flexbox to CSS Grid#8211
DrJKL merged 4 commits intomainfrom
drjkl/basemodal-grid-layout

Conversation

@DrJKL
Copy link
Contributor

@DrJKL DrJKL commented Jan 21, 2026

Summary

Refactors BaseModalLayout from a flexbox-based layout to CSS Grid, enabling smoother panel transitions and improved layout control.

Changes

Layout Restructure

  • Flexbox → CSS Grid: Replaced nested flexbox with a 3-column CSS Grid (nav | main | aside)
  • Smooth panel transitions: Panel show/hide now animates via grid-template-columns instead of Vue <Transition> with translateX
  • Removed transition CSS: Deleted .slide-panel-* and .fade-* transition styles (no longer needed with grid approach)

Right Panel Improvements

  • Dedicated header: Added header with close button, right panel toggle, and customizable title slot (rightPanelHeaderTitle, rightPanelHeaderActions)
  • New prop: Added rightPanelTitle prop for simple text title in right panel header

UX & Accessibility

  • ESC key handling: Pressing Escape closes the right panel (if open) before closing the dialog
  • Accessibility: Added aria-label attributes to all panel toggle and close buttons
  • i18n: Added translation keys: showLeftPanel, hideLeftPanel, showRightPanel, hideRightPanel, closeDialog

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 21, 2026

📝 Walkthrough

Walkthrough

Replaced test header locator and adjusted mobile viewport assertion; reworked BaseModalLayout to a responsive three-column CSS grid with keyboard Escape handling and new right-panel controls; added five English i18n keys for dialog and panel actions.

Changes

Cohort / File(s) Summary
Tests: Templates page
browser_tests/tests/templates.spec.ts
Simplified header locator to page.locator('header', { hasText: 'Templates' }); changed mobile header-nav assertion from not.toBeVisible() to not.toBeInViewport() (with comment).
Component: Modal layout
src/components/widget/layout/BaseModalLayout.vue
Replaced absolute layout with responsive three-column CSS grid; added rightPanelTitle prop, hasLeftPanel/hasRightPanel computed checks, gridStyle computed, isRightPanelOpen state, and handleEscape Escape-key handler; restructured slots and header actions; bound inert/aria-hidden to panel state.
Locales: i18n
src/locales/en/main.json
Added five g keys: closeDialog, showLeftPanel, hideLeftPanel, showRightPanel, hideRightPanel.

Sequence Diagram(s)

(omitted — changes are component/internal and do not introduce a multi-actor sequential flow requiring visualization)

Possibly related PRs

Suggested reviewers

  • jtydhr88
  • AustinMroz
  • PabloWiedemann
  • viva-jinyi
✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

github-actions bot commented Jan 21, 2026

🎭 Playwright Tests: ⚠️ Passed with flaky tests

Results: 505 passed, 0 failed, 1 flaky, 8 skipped (Total: 514)

❌ Failed Tests

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

@github-actions
Copy link

github-actions bot commented Jan 21, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 01/21/2026, 08:56:24 PM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@DrJKL DrJKL force-pushed the drjkl/basemodal-grid-layout branch from 7d142b8 to b7f308a Compare January 21, 2026 06:16
@github-actions
Copy link

github-actions bot commented Jan 21, 2026

Bundle Size Report

Summary

  • Raw size: 21.4 MB baseline 21.4 MB — 🔴 +2.28 kB
  • Gzip: 4.44 MB baseline 4.44 MB — 🔴 +311 B
  • Brotli: 3.29 MB baseline 3.29 MB — 🔴 +2 B
  • Bundles: 151 current • 151 baseline • 62 added / 62 removed

Category Glance
Data & Services 🔴 +2.28 kB (3.05 MB) · Vendor & Third-Party ⚪ 0 B (10.4 MB) · Other ⚪ 0 B (6.28 MB) · Graph Workspace ⚪ 0 B (1.02 MB) · Panels & Settings ⚪ 0 B (430 kB) · Views & Navigation ⚪ 0 B (80.7 kB) · + 5 more

Per-category breakdown
App Entry Points — 22.3 kB (baseline 22.3 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-CVMmLjYA.js (removed) 22.3 kB 🟢 -22.3 kB 🟢 -6.72 kB 🟢 -5.93 kB
assets/index-xE88rY9t.js (new) 22.3 kB 🔴 +22.3 kB 🔴 +6.72 kB 🔴 +5.93 kB

Status: 1 added / 1 removed

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

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-B6tIpCS7.js (removed) 1.02 MB 🟢 -1.02 MB 🟢 -201 kB 🟢 -153 kB
assets/GraphView-DpAlqWQa.js (new) 1.02 MB 🔴 +1.02 MB 🔴 +201 kB 🔴 +153 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-CoDykbVV.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +3.61 kB 🔴 +3.06 kB
assets/CloudSurveyView-DrCO8K-g.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -3.61 kB 🟢 -3.06 kB
assets/CloudLoginView-C6YimQZ2.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.09 kB 🔴 +2.72 kB
assets/CloudLoginView-CzOdYgi9.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.09 kB 🟢 -2.72 kB
assets/UserCheckView-CpWJP46R.js (new) 10.5 kB 🔴 +10.5 kB 🔴 +2.45 kB 🔴 +2.13 kB
assets/UserCheckView-ZwdDXmE4.js (removed) 10.5 kB 🟢 -10.5 kB 🟢 -2.45 kB 🟢 -2.13 kB
assets/CloudLayoutView-DR_8lFDj.js (removed) 8.54 kB 🟢 -8.54 kB 🟢 -2.25 kB 🟢 -1.96 kB
assets/CloudLayoutView-DyWE1Pf7.js (new) 8.54 kB 🔴 +8.54 kB 🔴 +2.25 kB 🔴 +1.96 kB
assets/CloudSignupView-DUTkJX-K.js (new) 8.18 kB 🔴 +8.18 kB 🔴 +2.33 kB 🔴 +2.02 kB
assets/CloudSignupView-DVTNDHz4.js (removed) 8.18 kB 🟢 -8.18 kB 🟢 -2.33 kB 🟢 -2.03 kB
assets/CloudForgotPasswordView-Cjrnddic.js (removed) 6.26 kB 🟢 -6.26 kB 🟢 -1.92 kB 🟢 -1.69 kB
assets/CloudForgotPasswordView-Y8oHSei2.js (new) 6.26 kB 🔴 +6.26 kB 🔴 +1.92 kB 🔴 +1.68 kB
assets/UserSelectView-6ct6NiAw.js (removed) 5.28 kB 🟢 -5.28 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/UserSelectView-DXk40gBL.js (new) 5.28 kB 🔴 +5.28 kB 🔴 +1.76 kB 🔴 +1.57 kB
assets/CloudSubscriptionRedirectView-B2yVdlI2.js (removed) 5.27 kB 🟢 -5.27 kB 🟢 -1.73 kB 🟢 -1.53 kB
assets/CloudSubscriptionRedirectView-CH1WIgha.js (new) 5.27 kB 🔴 +5.27 kB 🔴 +1.73 kB 🔴 +1.53 kB
assets/CloudAuthTimeoutView-BhwMa41c.js (removed) 5.24 kB 🟢 -5.24 kB 🟢 -1.7 kB 🟢 -1.48 kB
assets/CloudAuthTimeoutView-BRp7A3ZV.js (new) 5.24 kB 🔴 +5.24 kB 🔴 +1.7 kB 🔴 +1.49 kB
assets/CloudSorryContactSupportView-41RMhsFA.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-DT-CUejm.js 500 B 500 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/LegacyCreditsPanel-C9emgQaJ.js (new) 23.8 kB 🔴 +23.8 kB 🔴 +5.94 kB 🔴 +5.23 kB
assets/LegacyCreditsPanel-zEaXCdn6.js (removed) 23.8 kB 🟢 -23.8 kB 🟢 -5.94 kB 🟢 -5.23 kB
assets/SubscriptionPanel-D2J3fXoR.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -4.99 kB 🟢 -4.39 kB
assets/SubscriptionPanel-Dkxgg2-J.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +4.99 kB 🔴 +4.39 kB
assets/KeybindingPanel-DpFwojjl.js (new) 14.2 kB 🔴 +14.2 kB 🔴 +3.73 kB 🔴 +3.31 kB
assets/KeybindingPanel-UnE2m993.js (removed) 14.2 kB 🟢 -14.2 kB 🟢 -3.74 kB 🟢 -3.31 kB
assets/AboutPanel-CrLLAiRj.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.68 kB 🔴 +2.43 kB
assets/AboutPanel-DKYdlIT4.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.68 kB 🟢 -2.43 kB
assets/ExtensionPanel-C8ZJgKRy.js (new) 10.2 kB 🔴 +10.2 kB 🔴 +2.71 kB 🔴 +2.4 kB
assets/ExtensionPanel-CrJInJVU.js (removed) 10.2 kB 🟢 -10.2 kB 🟢 -2.71 kB 🟢 -2.4 kB
assets/ServerConfigPanel-Cw1XD08Q.js (new) 7.23 kB 🔴 +7.23 kB 🔴 +2.16 kB 🔴 +1.94 kB
assets/ServerConfigPanel-RfZDEJoP.js (removed) 7.23 kB 🟢 -7.23 kB 🟢 -2.16 kB 🟢 -1.94 kB
assets/UserPanel-B_vm5I80.js (removed) 6.58 kB 🟢 -6.58 kB 🟢 -1.9 kB 🟢 -1.67 kB
assets/UserPanel-jimc-VyN.js (new) 6.58 kB 🔴 +6.58 kB 🔴 +1.9 kB 🔴 +1.67 kB
assets/cloudRemoteConfig-BqRU3hrs.js (new) 1.82 kB 🔴 +1.82 kB 🔴 +767 B 🔴 +663 B
assets/cloudRemoteConfig-CMoppiS0.js (removed) 1.82 kB 🟢 -1.82 kB 🟢 -768 B 🟢 -665 B
assets/remoteConfig-BEkdBLxH.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/remoteConfig-D_gf6SLU.js 188 B 188 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-6DVADt2n.js 34.3 kB 34.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B0j03ezr.js 38.3 kB 38.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BHe-AJJN.js 29.6 kB 29.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BT2lfy0S.js 29.5 kB 29.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Cp0lF2Mp.js 31.2 kB 31.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CwdesOpm.js 32.1 kB 32.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-D3SeHgho.js 28.6 kB 28.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-D42m_JEJ.js 25.9 kB 25.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-FF_vLB0C.js 25.2 kB 25.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-reUMVWRn.js 30.4 kB 30.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-s7kHNBdQ.js 28.9 kB 28.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 8 added / 8 removed

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-CQiB1JJf.js (new) 3.54 kB 🔴 +3.54 kB 🔴 +1.23 kB 🔴 +1.06 kB
assets/auth-DzStGBY0.js (removed) 3.54 kB 🟢 -3.54 kB 🟢 -1.24 kB 🟢 -1.06 kB
assets/firebaseAuthStore-CHEfzfRF.js (removed) 217 B 🟢 -217 B 🟢 -137 B 🟢 -118 B
assets/firebaseAuthStore-UC9M73sx.js (new) 217 B 🔴 +217 B 🔴 +137 B 🔴 +129 B
assets/auth-BKptFWag.js (removed) 178 B 🟢 -178 B 🟢 -142 B 🟢 -135 B
assets/auth-DKLGYC1g.js (new) 178 B 🔴 +178 B 🔴 +142 B 🔴 +144 B

Status: 3 added / 3 removed

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-BikZVGqh.js (new) 2.62 kB 🔴 +2.62 kB 🔴 +1.24 kB 🔴 +1.09 kB
assets/useSubscriptionDialog-DDg-kYCc.js (removed) 2.62 kB 🟢 -2.62 kB 🟢 -1.24 kB 🟢 -1.09 kB
assets/useSubscriptionDialog-B_gaLYfc.js (new) 179 B 🔴 +179 B 🔴 +110 B 🔴 +103 B
assets/useSubscriptionDialog-CsTJKKtL.js (removed) 179 B 🟢 -179 B 🟢 -110 B 🟢 -98 B

Status: 2 added / 2 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SubscribeButton-DOprt6cf.js (new) 12.5 kB 🔴 +12.5 kB 🔴 +3 kB 🔴 +2.69 kB
assets/SubscribeButton-N-0QQdMi.js (removed) 12.5 kB 🟢 -12.5 kB 🟢 -3.01 kB 🟢 -2.7 kB
assets/ComfyQueueButton-BHQJAR_s.js (new) 9.52 kB 🔴 +9.52 kB 🔴 +2.69 kB 🔴 +2.41 kB
assets/ComfyQueueButton-Bj9-NmG1.js (removed) 9.52 kB 🟢 -9.52 kB 🟢 -2.69 kB 🟢 -2.42 kB
assets/CloudBadge-Behv1YGT.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -729 B 🟢 -647 B
assets/CloudBadge-yIy-GLD4.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +727 B 🔴 +645 B
assets/cloudFeedbackTopbarButton-_zLXR0By.js (new) 866 B 🔴 +866 B 🔴 +525 B 🔴 +447 B
assets/cloudFeedbackTopbarButton-Cyne9RUL.js (removed) 866 B 🟢 -866 B 🟢 -526 B 🟢 -441 B
assets/ComfyQueueButton-B9KkPRoi.js (removed) 181 B 🟢 -181 B 🟢 -118 B 🟢 -121 B
assets/ComfyQueueButton-DZY-qVf1.js (new) 181 B 🔴 +181 B 🔴 +118 B 🔴 +107 B
assets/Button-CKxdX0Yq.js 3.75 kB 3.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-Bj7TTp1S.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-ftAKT8u9.js 2.41 kB 2.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 3.05 MB (baseline 3.05 MB) • 🔴 +2.28 kB

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-CRsobzW1.js (new) 1.87 MB 🔴 +1.87 MB 🔴 +398 kB 🔴 +304 kB
assets/dialogService-zD2jjjkK.js (removed) 1.87 MB 🟢 -1.87 MB 🟢 -398 kB 🟢 -304 kB
assets/api-h6ldKzu1.js (new) 1.15 MB 🔴 +1.15 MB 🔴 +240 kB 🔴 +186 kB
assets/api-DY5au6F3.js (removed) 1.15 MB 🟢 -1.15 MB 🟢 -240 kB 🟢 -186 kB
assets/releaseStore-Cuh7Vvmj.js (removed) 8.91 kB 🟢 -8.91 kB 🟢 -2.41 kB 🟢 -2.13 kB
assets/releaseStore-hQy76hWZ.js (new) 8.91 kB 🔴 +8.91 kB 🔴 +2.41 kB 🔴 +2.12 kB
assets/keybindingService-CMSpnbSz.js (new) 6.78 kB 🔴 +6.78 kB 🔴 +1.74 kB 🔴 +1.51 kB
assets/keybindingService-DYOuEyC-.js (removed) 6.78 kB 🟢 -6.78 kB 🟢 -1.74 kB 🟢 -1.51 kB
assets/userStore-D_Ak3MPq.js (new) 2.16 kB 🔴 +2.16 kB 🔴 +814 B 🔴 +727 B
assets/userStore-DNy5VEIE.js (removed) 2.16 kB 🟢 -2.16 kB 🟢 -814 B 🟢 -728 B
assets/audioService-BZEB60HQ.js (new) 2.03 kB 🔴 +2.03 kB 🔴 +931 B 🔴 +816 B
assets/audioService-Gs1ECo49.js (removed) 2.03 kB 🟢 -2.03 kB 🟢 -931 B 🟢 -823 B
assets/releaseStore-AnBdv-Ri.js (removed) 140 B 🟢 -140 B 🟢 -106 B 🟢 -106 B
assets/releaseStore-CgAfEF0d.js (new) 140 B 🔴 +140 B 🔴 +106 B 🔴 +105 B
assets/serverConfigStore-sopnD88s.js 2.64 kB 2.64 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 7 added / 7 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useErrorHandling-aUXjLUlL.js (removed) 5.08 kB 🟢 -5.08 kB 🟢 -1.5 kB 🟢 -1.3 kB
assets/useErrorHandling-C-bcBao-.js (new) 5.08 kB 🔴 +5.08 kB 🔴 +1.5 kB 🔴 +1.3 kB
assets/subscriptionCheckoutUtil-Cg8nQJbp.js (new) 1.98 kB 🔴 +1.98 kB 🔴 +857 B 🔴 +744 B
assets/subscriptionCheckoutUtil-DmTdDzmd.js (removed) 1.98 kB 🟢 -1.98 kB 🟢 -860 B 🟢 -749 B
assets/audioUtils-ByU-a5Eg.js (new) 970 B 🔴 +970 B 🔴 +548 B 🔴 +491 B
assets/audioUtils-tiC7fnE-.js (removed) 970 B 🟢 -970 B 🟢 -547 B 🟢 -455 B
assets/useCurrentUser-BJeCDZ6J.js (new) 145 B 🔴 +145 B 🔴 +114 B 🔴 +100 B
assets/useCurrentUser-MrKeCTOT.js (removed) 145 B 🟢 -145 B 🟢 -114 B 🟢 -100 B
assets/_plugin-vue_export-helper-xVPqUhAl.js 467 B 467 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-BTZOs5h9.js 7.2 kB 7.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-B9qvfWYq.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/tailwindUtil-DTv34axN.js 487 B 487 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 4 added / 4 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-chart-Dr8GmMlH.js 408 kB 408 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-CpOC_out.js 3.92 MB 3.92 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-DvjPM_Lx.js 3.04 MB 3.04 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-BRjoKiJi.js 172 kB 172 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-Dqb1VEds.js 1.83 MB 1.83 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BxNhpyUI.js 650 kB 650 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-7XRCqLaG.js 13.6 kB 13.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-CArXWFIl.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 6.28 MB (baseline 6.28 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-9TnCUoYC.js (new) 177 kB 🔴 +177 kB 🔴 +42.8 kB 🔴 +35.8 kB
assets/core-o1gAsibY.js (removed) 177 kB 🟢 -177 kB 🟢 -42.8 kB 🟢 -35.8 kB
assets/Load3D-BRRUs0HR.js (removed) 55.7 kB 🟢 -55.7 kB 🟢 -9.18 kB 🟢 -7.92 kB
assets/Load3D-CAbo7aX4.js (new) 55.7 kB 🔴 +55.7 kB 🔴 +9.18 kB 🔴 +7.91 kB
assets/WidgetSelect-B3jJhQtN.js (removed) 50.5 kB 🟢 -50.5 kB 🟢 -11.1 kB 🟢 -9.69 kB
assets/WidgetSelect-DS4bHRNZ.js (new) 50.5 kB 🔴 +50.5 kB 🔴 +11.1 kB 🔴 +9.69 kB
assets/SubscriptionRequiredDialogContent-DodVeKCp.js (new) 28.7 kB 🔴 +28.7 kB 🔴 +6.78 kB 🔴 +5.9 kB
assets/SubscriptionRequiredDialogContent-wk2Tq-Cd.js (removed) 28.7 kB 🟢 -28.7 kB 🟢 -6.78 kB 🟢 -5.9 kB
assets/WidgetRecordAudio-BssZAOfk.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.96 kB 🔴 +4.44 kB
assets/WidgetRecordAudio-DzUa6C3R.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.96 kB 🟢 -4.43 kB
assets/WidgetInputNumber-CHiv2I4M.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.49 kB 🟢 -4 kB
assets/WidgetInputNumber-RIcw1hUk.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.49 kB 🔴 +4 kB
assets/WidgetImageCrop-Kvs72B7C.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +4.13 kB 🔴 +3.62 kB
assets/WidgetImageCrop-yJnkMKAc.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -4.14 kB 🟢 -3.62 kB
assets/PanelTemplate-BOM_LVvq.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +5.45 kB 🔴 +4.79 kB
assets/PanelTemplate-DH6N2bhI.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -5.45 kB 🟢 -4.79 kB
assets/AudioPreviewPlayer-B4uDoszm.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.97 kB 🔴 +2.65 kB
assets/AudioPreviewPlayer-CfN8dhZm.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.97 kB 🟢 -2.65 kB
assets/WidgetWithControl-J_kUQgqs.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.65 kB 🔴 +2.38 kB
assets/WidgetWithControl-rya7vZCT.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.65 kB 🟢 -2.39 kB
assets/ValueControlPopover-Be9X5lha.js (removed) 4.86 kB 🟢 -4.86 kB 🟢 -1.55 kB 🟢 -1.37 kB
assets/ValueControlPopover-CTKTuoP8.js (new) 4.86 kB 🔴 +4.86 kB 🔴 +1.55 kB 🔴 +1.37 kB
assets/GlobalToast-DTekWb1N.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.1 kB 🟢 -943 B
assets/GlobalToast-zbXaYM4k.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.1 kB 🔴 +937 B
assets/SubscribeToRun-BVEz5z1l.js (removed) 2.96 kB 🟢 -2.96 kB 🟢 -1.16 kB 🟢 -1.01 kB
assets/SubscribeToRun-C2QXbw3r.js (new) 2.96 kB 🔴 +2.96 kB 🔴 +1.15 kB 🔴 +1.01 kB
assets/cloudSessionCookie-BDapkdQ8.js (removed) 2.94 kB 🟢 -2.94 kB 🟢 -933 B 🟢 -805 B
assets/cloudSessionCookie-CWYiDv9p.js (new) 2.94 kB 🔴 +2.94 kB 🔴 +931 B 🔴 +809 B
assets/BaseViewTemplate-BnIZG1dq.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.05 kB 🟢 -953 B
assets/BaseViewTemplate-TonT-qhP.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +1.04 kB 🔴 +943 B
assets/CloudRunButtonWrapper-B1vdwC-z.js (new) 1.79 kB 🔴 +1.79 kB 🔴 +639 B 🔴 +567 B
assets/CloudRunButtonWrapper-Dt4IMUqw.js (removed) 1.79 kB 🟢 -1.79 kB 🟢 -644 B 🟢 -574 B
assets/cloudBadges-BL5KWdqH.js (new) 1.08 kB 🔴 +1.08 kB 🔴 +535 B 🔴 +477 B
assets/cloudBadges-DUsKK0zi.js (removed) 1.08 kB 🟢 -1.08 kB 🟢 -538 B 🟢 -479 B
assets/graphHasMissingNodes-BvRRy6Qo.js (new) 1.06 kB 🔴 +1.06 kB 🔴 +459 B 🔴 +424 B
assets/graphHasMissingNodes-CgS1A1qX.js (removed) 1.06 kB 🟢 -1.06 kB 🟢 -462 B 🟢 -421 B
assets/cloudSubscription-BgXzcc_C.js (new) 976 B 🔴 +976 B 🔴 +457 B 🔴 +399 B
assets/cloudSubscription-dC6pdYyb.js (removed) 976 B 🟢 -976 B 🟢 -459 B 🟢 -400 B
assets/WidgetInputNumber-GAWJZkni.js (new) 186 B 🔴 +186 B 🔴 +119 B 🔴 +122 B
assets/WidgetInputNumber-KQ4HVuUg.js (removed) 186 B 🟢 -186 B 🟢 -119 B 🟢 -122 B
assets/WidgetLegacy-D9NQkjWK.js (new) 164 B 🔴 +164 B 🔴 +125 B 🔴 +108 B
assets/WidgetLegacy-vfol8PI6.js (removed) 164 B 🟢 -164 B 🟢 -125 B 🟢 -110 B
assets/Load3D-CxvuVmmc.js (removed) 131 B 🟢 -131 B 🟢 -107 B 🟢 -108 B
assets/Load3D-DJy-D3zp.js (new) 131 B 🔴 +131 B 🔴 +107 B 🔴 +120 B
assets/auto-Bv9cmrEd.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-6dIwsSNi.js 17.2 kB 17.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BahwM9ZP.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BoJZgy7S.js 17 kB 17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BQtdp20P.js 20.6 kB 20.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CEMgeOuO.js 18.5 kB 18.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CnxND6sZ.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-coXkrooi.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CZcHDaAg.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DDPGTXy9.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DsGC6118.js 17.8 kB 17.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-yZ2AjT4s.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-BuqR6Hu5.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-B_sPkRkB.js 121 kB 121 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BAkXMjmM.js 141 kB 141 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BENvLtOF.js 117 kB 117 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BNsn8_Lr.js 120 kB 120 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C9XUWxrh.js 105 kB 105 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Ch4S7NKM.js 105 kB 105 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DqG_JuMY.js 161 kB 161 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DSqO9eB5.js 124 kB 124 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-F6Zr8qmN.js 118 kB 118 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-kF4hEjF-.js 145 kB 145 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-KWKxelma.js 134 kB 134 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-DEJN4gIz.js 2.38 kB 2.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-D39-6tpk.js 2 kB 2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-CVYh1Dta.js 2.34 kB 2.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-D7WAsNtO.js 2.84 kB 2.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/mixpanel.module-DaKz7N-R.js 143 B 143 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-42NP799-.js 358 kB 358 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-5Wl7kJtq.js 361 kB 361 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bfo_nHET.js 361 kB 361 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BIaHseXE.js 334 kB 334 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BqTE0tnV.js 437 kB 437 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CkFt94jg.js 365 kB 365 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-COXALCSv.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cuv6XdUW.js 332 kB 332 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CyylrXT5.js 355 kB 355 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DN_FfVrO.js 403 kB 403 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dxwvr4db.js 403 kB 403 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/preservedQueryNamespaces-BsMrb3S_.js 3.23 kB 3.23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-DZ1Jt5wB.js 838 B 838 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-CqTjxoQm.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-Buvb2eP-.js 4.21 kB 4.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-Dneex3J5.js 518 B 518 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BRX2wHPg.js 4.71 kB 4.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BttrDPHP.js 186 B 186 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-D3w-Nwsc.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-E9_-OJ5u.js 3.71 kB 3.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-BekALFye.js 4.57 kB 4.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-BqwXGWo9.js 3.79 kB 3.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-BUBXlHZn.js 2.58 kB 2.58 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-BmL9OHU7.js 2.61 kB 2.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-BdG0Jp83.js 3.22 kB 3.22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-B0BM5Ibm.js 1.31 kB 1.31 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-Dm4Ij7fB.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-jOzkIkDw.js 3.08 kB 3.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 22 added / 22 removed

@DrJKL DrJKL marked this pull request as ready for review January 21, 2026 06:40
@DrJKL DrJKL requested review from a team as code owners January 21, 2026 06:40
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Jan 21, 2026
@DrJKL
Copy link
Contributor Author

DrJKL commented Jan 21, 2026

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 21, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai bot requested a review from jtydhr88 January 21, 2026 17:32
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

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

⚠️ Outside diff range comments (1)
browser_tests/tests/templates.spec.ts (1)

182-210: Add a @mobile tag to this responsive test. This case explicitly validates mobile behavior, so tagging keeps mobile-focused runs filterable.

♻️ Suggested tweak
-  test('template cards are dynamically sized and responsive', async ({
+  test('template cards are dynamically sized and responsive `@mobile`', async ({

Based on learnings, mobile-specific Playwright tests should be tagged.

🤖 Fix all issues with AI agents
In `@src/components/widget/layout/BaseModalLayout.vue`:
- Around line 10-14: The left/right panel wrappers in BaseModalLayout.vue (the
divs that render <slot name="leftPanel" /> and <slot name="rightPanel" />)
remain in the DOM when collapsed and must be hidden from keyboard and AT; add
boolean bindings for inert and aria-hidden to those wrapper elements (e.g.,
:inert="leftCollapsed" and :aria-hidden="leftCollapsed" for the left panel and
equivalent for the right) using the component's existing collapse state (or a
computed that checks width === 0) so they are inert/aria-hidden while collapsed;
apply the same change to the other panel wrapper occurrences mentioned (around
the other ranges 80-116 and 168-172).
- Around line 17-62: The header controls (close and right-panel toggle) are
currently inside a v-if="$slots.header" so dialogs using contentTitle only lack
those controls; move or duplicate the control buttons out of the v-if so they
render even when no header slot is provided, and guard the left-panel toggle
with hasLeftPanel (use hasRightPanel for the right toggle and isRightPanelOpen
to pick which icon) while still keeping existing bindings to toggleLeftPanel,
toggleRightPanel, closeDialog, showLeftPanel, notMobile and contentTitle in
BaseModalLayout.vue so consumers get a clickable close button and no
non-functional left-toggle.

@DrJKL DrJKL force-pushed the drjkl/basemodal-grid-layout branch from 8d18d97 to 29be657 Compare January 21, 2026 20:02
Copy link
Contributor

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

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

LGTM

@coderabbitai coderabbitai bot requested a review from PabloWiedemann January 21, 2026 21:00
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

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

⚠️ Outside diff range comments (1)
src/components/widget/layout/BaseModalLayout.vue (1)

212-225: Consider migrating scoped styles to Tailwind classes.

Per coding guidelines, Tailwind 4 is preferred over <style> blocks. These styles could be expressed as Tailwind classes on the root element:

♻️ Suggested refactor
   <div
-    class="base-widget-layout rounded-2xl overflow-hidden relative"
+    class="h-[80vh] w-[90vw] max-w-[1280px] aspect-[20/13] 2xl:max-w-[1724px] rounded-2xl overflow-hidden relative"
     `@keydown.esc.capture`="handleEscape"
   >

Then remove the <style scoped> block entirely.

♻️ Duplicate comments (1)
src/components/widget/layout/BaseModalLayout.vue (1)

26-43: Guard left panel toggle with hasLeftPanel check.

The left panel toggle button renders on mobile regardless of whether a leftPanel slot is provided. While current consumers all provide this slot, adding a guard makes the component more robust.

♻️ Suggested fix
             <Button
-              v-if="!notMobile"
+              v-if="hasLeftPanel && !notMobile"
               size="icon"
               :aria-label="

@DrJKL
Copy link
Contributor Author

DrJKL commented Jan 21, 2026

LGTM

I'll take it! 😁

@DrJKL DrJKL merged commit 2db246f into main Jan 21, 2026
28 checks passed
@DrJKL DrJKL deleted the drjkl/basemodal-grid-layout branch January 21, 2026 21:20
@DrJKL DrJKL added the needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch label Jan 22, 2026
@DrJKL DrJKL added the cloud/1.37 Backport PRs for cloud 1.37 label Jan 22, 2026
@github-actions
Copy link

⚠️ Backport to cloud/1.37 failed

Reason: Merge conflicts detected during cherry-pick of 2db246f

📄 Conflicting files
src/components/widget/layout/BaseModalLayout.vue
🤖 Prompt for AI Agents
Backport PR #8211 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/8211) to cloud/1.37.
Cherry-pick merge commit 2db246f494b42bb65bd034571c2388b8d6c7e11f onto new branch
backport-8211-to-cloud-1.37 from origin/cloud/1.37.
Resolve conflicts in: src/components/widget/layout/BaseModalLayout.vue .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport cloud/1.37] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @DrJKL

1 similar comment
@github-actions
Copy link

⚠️ Backport to cloud/1.37 failed

Reason: Merge conflicts detected during cherry-pick of 2db246f

📄 Conflicting files
src/components/widget/layout/BaseModalLayout.vue
🤖 Prompt for AI Agents
Backport PR #8211 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/8211) to cloud/1.37.
Cherry-pick merge commit 2db246f494b42bb65bd034571c2388b8d6c7e11f onto new branch
backport-8211-to-cloud-1.37 from origin/cloud/1.37.
Resolve conflicts in: src/components/widget/layout/BaseModalLayout.vue .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport cloud/1.37] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @DrJKL

@DrJKL DrJKL added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch and removed needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch labels Jan 22, 2026
@github-actions
Copy link

⚠️ Backport to cloud/1.37 failed

Reason: Merge conflicts detected during cherry-pick of 2db246f

📄 Conflicting files
src/components/widget/layout/BaseModalLayout.vue
🤖 Prompt for AI Agents
Backport PR #8211 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/8211) to cloud/1.37.
Cherry-pick merge commit 2db246f494b42bb65bd034571c2388b8d6c7e11f onto new branch
backport-8211-to-cloud-1.37 from origin/cloud/1.37.
Resolve conflicts in: src/components/widget/layout/BaseModalLayout.vue .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport cloud/1.37] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @DrJKL

DrJKL added a commit that referenced this pull request Jan 22, 2026
Refactors `BaseModalLayout` from a flexbox-based layout to CSS Grid,
enabling smoother panel transitions and improved layout control.

- **Flexbox → CSS Grid**: Replaced nested flexbox with a 3-column CSS
Grid (`nav | main | aside`)
- **Smooth panel transitions**: Panel show/hide now animates via
`grid-template-columns` instead of Vue `<Transition>` with `translateX`
- **Removed transition CSS**: Deleted `.slide-panel-*` and `.fade-*`
transition styles (no longer needed with grid approach)

- **Dedicated header**: Added header with close button, right panel
toggle, and customizable title slot (`rightPanelHeaderTitle`,
`rightPanelHeaderActions`)
- **New prop**: Added `rightPanelTitle` prop for simple text title in
right panel header

- **ESC key handling**: Pressing Escape closes the right panel (if open)
before closing the dialog
- **Accessibility**: Added `aria-label` attributes to all panel toggle
and close buttons
- **i18n**: Added translation keys: `showLeftPanel`, `hideLeftPanel`,
`showRightPanel`, `hideRightPanel`, `closeDialog`

---------

Co-authored-by: Amp <amp@ampcode.com>
DrJKL added a commit that referenced this pull request Jan 22, 2026
…box to CSS Grid (#8239)

Backport of #8211 to `cloud/1.37`.

Cherry-picked merge commit `2db246f494b42bb65bd034571c2388b8d6c7e11f`.

**Resolved conflicts:**
- `src/components/widget/layout/BaseModalLayout.vue` - Accepted PR
version (complete refactor from flexbox to CSS Grid)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8239-backport-cloud-1-37-refactor-restructure-BaseModalLayout-from-flexbox-to-CSS-Grid-2f06d73d365081b3bf60f558ceced8c5)
by [Unito](https://www.unito.io)

Co-authored-by: Amp <amp@ampcode.com>
godwiniheuwa pushed a commit to godwiniheuwa/ComfyUI_frontend that referenced this pull request Jan 22, 2026
…-Org#8211)

## Summary

Refactors `BaseModalLayout` from a flexbox-based layout to CSS Grid,
enabling smoother panel transitions and improved layout control.

## Changes

### Layout Restructure

- **Flexbox → CSS Grid**: Replaced nested flexbox with a 3-column CSS
Grid (`nav | main | aside`)
- **Smooth panel transitions**: Panel show/hide now animates via
`grid-template-columns` instead of Vue `<Transition>` with `translateX`
- **Removed transition CSS**: Deleted `.slide-panel-*` and `.fade-*`
transition styles (no longer needed with grid approach)

### Right Panel Improvements

- **Dedicated header**: Added header with close button, right panel
toggle, and customizable title slot (`rightPanelHeaderTitle`,
`rightPanelHeaderActions`)
- **New prop**: Added `rightPanelTitle` prop for simple text title in
right panel header

### UX & Accessibility

- **ESC key handling**: Pressing Escape closes the right panel (if open)
before closing the dialog
- **Accessibility**: Added `aria-label` attributes to all panel toggle
and close buttons
- **i18n**: Added translation keys: `showLeftPanel`, `hideLeftPanel`,
`showRightPanel`, `hideRightPanel`, `closeDialog`

---------

Co-authored-by: Amp <amp@ampcode.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cloud/1.37 Backport PRs for cloud 1.37 needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants