Skip to content

Additional linear tweaks#8375

Merged
AustinMroz merged 7 commits intomainfrom
austin/misc-fixes
Jan 28, 2026
Merged

Additional linear tweaks#8375
AustinMroz merged 7 commits intomainfrom
austin/misc-fixes

Conversation

@AustinMroz
Copy link
Collaborator

@AustinMroz AustinMroz commented Jan 28, 2026

  • Textareas have a fixed (larger) height. This was requested by design and I thought I fixed it while back.
    Before After
    before after
  • Since the typeform survey popover doesn't work well on mobile, the button will instead open the survey in a new tab for mobile users.
  • Workaround for the first linear output on local not being automatically selected for display
  • Add the linear mode toggle to the bottom left of mobile layout
    image
  • Adds a hamburger menu to the mobile layout providing buttons for opening workflows, templates, and an additional exit linear option.
    • Button takes up a full line of space, so it doesn't provide much space savings currently. May need some design iteration.
    image

And an unrelated tweak requested by Comfy: when opening templates, the searchbar is autofocused.

┆Issue is synchronized with this Notion page by Unito

Linear mode will display an unselected placeholder when first entered.
The check for this, was performed by ignoring the selected update event
when outputs are first populated, but simply testing for a change from
no outputs to some outputs meant that a first generation from clean boot
on local would not update selection.

This is changed to make the selection state update in the specific case
it's going from 0 outputs to 1. Still not ideal, but the edge case of
entering linear mode with exactly 1 output in history is of less concern
The popover component fails to autosize properly on mobile. I'm not been
able to replicate this behavior with artificially tiny desktop window
sizes, but I'm not alone in experiencing this.

Rather than relying on the previous workaroound (description is link),
the button will now functions as a simple link when on mobile
@AustinMroz AustinMroz requested a review from a team as a code owner January 28, 2026 19:45
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Jan 28, 2026
@github-actions
Copy link

github-actions bot commented Jan 28, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 01/28/2026, 08:54:34 PM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Jan 28, 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 (✅ 493 / ❌ 0 / ⚠️ 1 / ⏭️ 8)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 9 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 28, 2026

📝 Walkthrough

Walkthrough

Adds a mobile collapsible menu and responsive Typeform behavior, enables autofocus on the WorkflowTemplateSelectorDialog search box, switches sidebar tab class binding to use a cn utility, adjusts LinearControls textarea class selectors, and refines OutputHistory watch logic; integrates MobileMenu into LinearView.

Changes

Cohort / File(s) Summary
Workflow & Template Components
src/components/custom/widget/WorkflowTemplateSelectorDialog.vue, src/components/sidebar/tabs/SidebarTabTemplate.vue
WorkflowTemplateSelectorDialog.vue: SearchBox now receives autofocus. SidebarTabTemplate.vue: root class now merged via cn utility import instead of static class string.
Responsive UI Components
src/components/ui/TypeformPopoverButton.vue
Adds VueUse breakpoint detection (useBreakpoints) to render a direct anchor-button on mobile (opens Typeform in new tab) and preserve Popover on larger screens; binds $attrs to rendered Button.
Linear Mode — Layout & Controls
src/renderer/extensions/linearMode/LinearControls.vue, src/renderer/extensions/linearMode/MobileMenu.vue
LinearControls.vue: replaces not-has-[textarea]:flex-0 selector with *:has-[textarea]:h-50. New component MobileMenu.vue added with collapsible trigger, a Popover for Workflows, a template-selector button, and a linear-mode toggle button.
Linear Mode — Output & View
src/renderer/extensions/linearMode/OutputHistory.vue, src/views/LinearView.vue
OutputHistory.vue: watch handler early-return condition refined for asset-change scenarios. LinearView.vue: imports MobileMenu, injects it into mobile container, and refactors header layout (ModeToggle, beta label, TypeformPopoverButton).

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant MobileMenu
  participant Popover
  participant WorkflowsTab
  participant Dialog
  participant CommandStore

  User->>MobileMenu: tap trigger
  MobileMenu->>MobileMenu: open CollapsibleRoot
  User->>MobileMenu: tap "Workflows" button
  MobileMenu->>Popover: open Popover
  Popover->>WorkflowsTab: render WorkflowsSidebarTab
  User->>MobileMenu: tap "Template selector" button
  MobileMenu->>Dialog: useWorkflowTemplateSelectorDialog().show('menu')
  User->>MobileMenu: tap "Toggle linear mode" button
  MobileMenu->>CommandStore: execute(Comfy.ToggleLinear, { source: 'button' })
Loading

Possibly related PRs

Suggested reviewers

  • shinshin86
  • PabloWiedemann
  • KarryCharon
  • christian-byrne
  • Yorha4D

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 28, 2026

Bundle Size Report

Summary

  • Raw size: 22.1 MB baseline 22.1 MB — 🔴 +10.9 kB
  • Gzip: 4.6 MB baseline 4.6 MB — 🔴 +1.68 kB
  • Brotli: 3.41 MB baseline 3.41 MB — 🔴 +934 B
  • Bundles: 173 current • 173 baseline • 85 added / 85 removed

Category Glance
Vendor & Third-Party 🔴 +6.86 kB (10.7 MB) · Graph Workspace 🔴 +4.21 kB (973 kB) · Other 🟢 -198 B (7.05 MB) · Data & Services 🔴 +32 B (2.7 MB) · Panels & Settings 🟢 -8 B (471 kB) · Views & Navigation ⚪ 0 B (80.7 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-C1V3-tCJ.js (removed) 25.9 kB 🟢 -25.9 kB 🟢 -7.48 kB 🟢 -6.58 kB
assets/index-CiUPq4jt.js (new) 25.9 kB 🔴 +25.9 kB 🔴 +7.48 kB 🔴 +6.6 kB

Status: 1 added / 1 removed

Graph Workspace — 973 kB (baseline 969 kB) • 🔴 +4.21 kB

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-CVLLpmwV.js (new) 973 kB 🔴 +973 kB 🔴 +197 kB 🔴 +148 kB
assets/GraphView-DmjZPdCn.js (removed) 969 kB 🟢 -969 kB 🟢 -196 kB 🟢 -148 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-CDTOcsta.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +3.6 kB 🔴 +3.05 kB
assets/CloudSurveyView-E-N4WbRK.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -3.6 kB 🟢 -3.06 kB
assets/CloudLoginView-AD3FoeKe.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.09 kB 🟢 -2.72 kB
assets/CloudLoginView-bMR5AaRM.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.09 kB 🔴 +2.71 kB
assets/UserCheckView-Bkc8Zhtd.js (new) 10.5 kB 🔴 +10.5 kB 🔴 +2.45 kB 🔴 +2.13 kB
assets/UserCheckView-CzyvwXQJ.js (removed) 10.5 kB 🟢 -10.5 kB 🟢 -2.45 kB 🟢 -2.13 kB
assets/CloudLayoutView-BoNi3F8B.js (removed) 8.54 kB 🟢 -8.54 kB 🟢 -2.24 kB 🟢 -1.96 kB
assets/CloudLayoutView-Co6jMCLw.js (new) 8.54 kB 🔴 +8.54 kB 🔴 +2.24 kB 🔴 +1.96 kB
assets/CloudSignupView-DwloMdQQ.js (removed) 8.18 kB 🟢 -8.18 kB 🟢 -2.33 kB 🟢 -2.02 kB
assets/CloudSignupView-RV4tum9A.js (new) 8.18 kB 🔴 +8.18 kB 🔴 +2.33 kB 🔴 +2.02 kB
assets/CloudForgotPasswordView-BTf7x_vA.js (new) 6.26 kB 🔴 +6.26 kB 🔴 +1.92 kB 🔴 +1.69 kB
assets/CloudForgotPasswordView-EfWuaTiI.js (removed) 6.26 kB 🟢 -6.26 kB 🟢 -1.93 kB 🟢 -1.69 kB
assets/UserSelectView-78dnSvoq.js (new) 5.28 kB 🔴 +5.28 kB 🔴 +1.76 kB 🔴 +1.57 kB
assets/UserSelectView-Vam3HZtp.js (removed) 5.28 kB 🟢 -5.28 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-BQKFgtXn.js (removed) 5.27 kB 🟢 -5.27 kB 🟢 -1.73 kB 🟢 -1.54 kB
assets/CloudSubscriptionRedirectView-D9-wjvln.js (new) 5.27 kB 🔴 +5.27 kB 🔴 +1.73 kB 🔴 +1.54 kB
assets/CloudAuthTimeoutView-CdDyFyrM.js (removed) 5.24 kB 🟢 -5.24 kB 🟢 -1.71 kB 🟢 -1.49 kB
assets/CloudAuthTimeoutView-DOlXp8lz.js (new) 5.24 kB 🔴 +5.24 kB 🔴 +1.7 kB 🔴 +1.48 kB
assets/CloudSorryContactSupportView-n5f-fGMz.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-V93lMUpe.js 500 B 500 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

Panels & Settings — 471 kB (baseline 471 kB) • 🟢 -8 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/WorkspacePanel-DWLiireb.js (removed) 29.8 kB 🟢 -29.8 kB 🟢 -5.89 kB 🟢 -5.14 kB
assets/WorkspacePanel-KeR9sGJy.js (new) 29.8 kB 🔴 +29.8 kB 🔴 +5.89 kB 🔴 +5.13 kB
assets/LegacyCreditsPanel-CSTKKSiF.js (removed) 23.8 kB 🟢 -23.8 kB 🟢 -5.95 kB 🟢 -5.23 kB
assets/LegacyCreditsPanel-w_EkbmW0.js (new) 23.8 kB 🔴 +23.8 kB 🔴 +5.95 kB 🔴 +5.23 kB
assets/SubscriptionPanel-BN5i_gvT.js (new) 21 kB 🔴 +21 kB 🔴 +5.04 kB 🔴 +4.44 kB
assets/SubscriptionPanel-ecl8SlDX.js (removed) 21 kB 🟢 -21 kB 🟢 -5.05 kB 🟢 -4.46 kB
assets/KeybindingPanel-DiVfIlgy.js (removed) 14.2 kB 🟢 -14.2 kB 🟢 -3.74 kB 🟢 -3.3 kB
assets/KeybindingPanel-DpVaUtmE.js (new) 14.2 kB 🔴 +14.2 kB 🔴 +3.74 kB 🔴 +3.3 kB
assets/AboutPanel-C601wE9c.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.68 kB 🔴 +2.42 kB
assets/AboutPanel-Dtc9tO8x.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.67 kB 🟢 -2.43 kB
assets/ExtensionPanel-D4s_nh-4.js (removed) 10.2 kB 🟢 -10.2 kB 🟢 -2.71 kB 🟢 -2.4 kB
assets/ExtensionPanel-DZZ80EYd.js (new) 10.2 kB 🔴 +10.2 kB 🔴 +2.71 kB 🔴 +2.4 kB
assets/ServerConfigPanel-DXjOq55M.js (removed) 7.23 kB 🟢 -7.23 kB 🟢 -2.17 kB 🟢 -1.94 kB
assets/ServerConfigPanel-qTVH0JNC.js (new) 7.23 kB 🔴 +7.23 kB 🔴 +2.17 kB 🔴 +1.94 kB
assets/UserPanel-cM23awrG.js (new) 6.58 kB 🔴 +6.58 kB 🔴 +1.9 kB 🔴 +1.68 kB
assets/UserPanel-FjlkEltz.js (removed) 6.58 kB 🟢 -6.58 kB 🟢 -1.9 kB 🟢 -1.68 kB
assets/refreshRemoteConfig-b-t8ENVf.js (removed) 1.31 kB 🟢 -1.31 kB 🟢 -572 B 🟢 -503 B
assets/refreshRemoteConfig-renNdxv7.js (new) 1.31 kB 🔴 +1.31 kB 🔴 +571 B 🔴 +497 B
assets/config-CNeb_YtA.js (removed) 1.16 kB 🟢 -1.16 kB 🟢 -608 B 🟢 -541 B
assets/config-H65m2BLc.js (new) 1.15 kB 🔴 +1.15 kB 🔴 +605 B 🔴 +529 B
assets/cloudRemoteConfig-048YFf76.js (new) 1.08 kB 🔴 +1.08 kB 🔴 +500 B 🔴 +429 B
assets/cloudRemoteConfig-DFlSNIln.js (removed) 1.08 kB 🟢 -1.08 kB 🟢 -500 B 🟢 -428 B
assets/refreshRemoteConfig-CKztZXQk.js (removed) 169 B 🟢 -169 B 🟢 -108 B 🟢 -102 B
assets/refreshRemoteConfig-DKJS1ylp.js (new) 169 B 🔴 +169 B 🔴 +108 B 🔴 +103 B
assets/remoteConfig-B0mlVvm7.js 788 B 788 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-2UNjEj6k.js 32.9 kB 32.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B2OMGvh7.js 31.2 kB 31.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BcujOfpn.js 29.6 kB 29.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BI09_t23.js 29.4 kB 29.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BKamuseh.js 25.8 kB 25.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BlTun9tZ.js 26.4 kB 26.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CZ62uO3e.js 30.2 kB 30.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DaK-NByz.js 35.2 kB 35.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DaS3cSXp.js 39.4 kB 39.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DWbMuaAa.js 32 kB 32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-S7pA60Hj.js 30.4 kB 30.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 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-DI5aLTS8.js (new) 3.54 kB 🔴 +3.54 kB 🔴 +1.24 kB 🔴 +1.05 kB
assets/auth-wy9h6RVg.js (removed) 3.54 kB 🟢 -3.54 kB 🟢 -1.24 kB 🟢 -1.05 kB
assets/firebaseAuthStore-BFJmXKwe.js (removed) 217 B 🟢 -217 B 🟢 -136 B 🟢 -119 B
assets/firebaseAuthStore-HF8k03xz.js (new) 217 B 🔴 +217 B 🔴 +136 B 🔴 +117 B
assets/auth-B7CX2i0M.js (removed) 178 B 🟢 -178 B 🟢 -142 B 🟢 -132 B
assets/auth-B7lV9Ycw.js (new) 178 B 🔴 +178 B 🔴 +142 B 🔴 +148 B

Status: 3 added / 3 removed

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-BFnqLZeA.js (new) 2.71 kB 🔴 +2.71 kB 🔴 +1.28 kB 🔴 +1.14 kB
assets/useSubscriptionDialog-BinyVMzp.js (removed) 2.71 kB 🟢 -2.71 kB 🟢 -1.29 kB 🟢 -1.14 kB
assets/useSubscriptionDialog-BuSXdsRG.js (removed) 179 B 🟢 -179 B 🟢 -110 B 🟢 -101 B
assets/useSubscriptionDialog-REVo4hkD.js (new) 179 B 🔴 +179 B 🔴 +110 B 🔴 +99 B

Status: 2 added / 2 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-c6mJqKZC.js (removed) 9.52 kB 🟢 -9.52 kB 🟢 -2.69 kB 🟢 -2.41 kB
assets/ComfyQueueButton-Cn-t3mOw.js (new) 9.52 kB 🔴 +9.52 kB 🔴 +2.68 kB 🔴 +2.4 kB
assets/SubscribeButton-Bvd8-rGT.js (new) 4.63 kB 🔴 +4.63 kB 🔴 +1.57 kB 🔴 +1.39 kB
assets/SubscribeButton-YZ8ZmxWl.js (removed) 4.63 kB 🟢 -4.63 kB 🟢 -1.57 kB 🟢 -1.39 kB
assets/Button-Bb_i0j7c.js (new) 3.82 kB 🔴 +3.82 kB 🔴 +1.38 kB 🔴 +1.23 kB
assets/Button-DNv6_y7F.js (removed) 3.82 kB 🟢 -3.82 kB 🟢 -1.39 kB 🟢 -1.23 kB
assets/WidgetButton-DlN5KSpc.js (removed) 2.41 kB 🟢 -2.41 kB 🟢 -981 B 🟢 -887 B
assets/WidgetButton-DSv9NFvF.js (new) 2.41 kB 🔴 +2.41 kB 🔴 +980 B 🔴 +883 B
assets/cloudFeedbackTopbarButton-DuiIosYu.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +673 B 🔴 +572 B
assets/cloudFeedbackTopbarButton-Tjf7QWLa.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -676 B 🟢 -572 B
assets/ComfyQueueButton-CcyAMSNK.js (new) 181 B 🔴 +181 B 🔴 +118 B 🔴 +111 B
assets/ComfyQueueButton-CNNVnrt2.js (removed) 181 B 🟢 -181 B 🟢 -118 B 🟢 -119 B
assets/CloudBadge-zB1el_Hr.js 1.85 kB 1.85 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-qACg_vGT.js 8.36 kB 8.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-D80lITos.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

Data & Services — 2.7 MB (baseline 2.7 MB) • 🔴 +32 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-Bk6ibsin.js (new) 2 MB 🔴 +2 MB 🔴 +423 kB 🔴 +323 kB
assets/dialogService-JwF35LsY.js (removed) 2 MB 🟢 -2 MB 🟢 -423 kB 🟢 -323 kB
assets/api-DKeqJLXl.js (new) 672 kB 🔴 +672 kB 🔴 +148 kB 🔴 +118 kB
assets/api-Bl4XTIny.js (removed) 672 kB 🟢 -672 kB 🟢 -148 kB 🟢 -118 kB
assets/releaseStore-BjTZMMtD.js (new) 8.91 kB 🔴 +8.91 kB 🔴 +2.4 kB 🔴 +2.12 kB
assets/releaseStore-voXh4X_S.js (removed) 8.91 kB 🟢 -8.91 kB 🟢 -2.4 kB 🟢 -2.13 kB
assets/keybindingService-BKAK6zN3.js (new) 6.78 kB 🔴 +6.78 kB 🔴 +1.74 kB 🔴 +1.51 kB
assets/keybindingService-D7em88cw.js (removed) 6.78 kB 🟢 -6.78 kB 🟢 -1.74 kB 🟢 -1.51 kB
assets/bootstrapStore-CQo-hafR.js (new) 2.69 kB 🔴 +2.69 kB 🔴 +1.03 kB 🔴 +952 B
assets/bootstrapStore-D5LfYXPG.js (removed) 2.69 kB 🟢 -2.69 kB 🟢 -1.03 kB 🟢 -967 B
assets/userStore-BpXMpW6q.js (removed) 2.16 kB 🟢 -2.16 kB 🟢 -811 B 🟢 -724 B
assets/userStore-DFX2Gq9e.js (new) 2.16 kB 🔴 +2.16 kB 🔴 +811 B 🔴 +725 B
assets/audioService-jn4WgyJN.js (new) 2.03 kB 🔴 +2.03 kB 🔴 +930 B 🔴 +810 B
assets/audioService-suUV9V-l.js (removed) 2.03 kB 🟢 -2.03 kB 🟢 -929 B 🟢 -808 B
assets/releaseStore-CLg__vA9.js (new) 140 B 🔴 +140 B 🔴 +106 B 🔴 +106 B
assets/releaseStore-DUWeCLoX.js (removed) 140 B 🟢 -140 B 🟢 -106 B 🟢 -104 B
assets/serverConfigStore-DOoqLe5c.js 2.64 kB 2.64 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 8 added / 8 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useErrorHandling-Dc1pYkcz.js (new) 5.21 kB 🔴 +5.21 kB 🔴 +1.54 kB 🔴 +1.34 kB
assets/useErrorHandling-DDngBybX.js (removed) 5.21 kB 🟢 -5.21 kB 🟢 -1.53 kB 🟢 -1.35 kB
assets/useWorkspaceUI-CtS0lwyK.js (new) 3.42 kB 🔴 +3.42 kB 🔴 +975 B 🔴 +834 B
assets/useWorkspaceUI-D-Krfap_.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -977 B 🟢 -832 B
assets/useSubscriptionActions-BxFobd1C.js (removed) 2.22 kB 🟢 -2.22 kB 🟢 -870 B 🟢 -763 B
assets/useSubscriptionActions-CO1w5eiJ.js (new) 2.22 kB 🔴 +2.22 kB 🔴 +869 B 🔴 +761 B
assets/subscriptionCheckoutUtil-CeGChOV2.js (new) 2.03 kB 🔴 +2.03 kB 🔴 +873 B 🔴 +765 B
assets/subscriptionCheckoutUtil-DkK8zL-b.js (removed) 2.03 kB 🟢 -2.03 kB 🟢 -875 B 🟢 -772 B
assets/useSubscriptionCredits-0xAGDdFW.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -601 B 🟢 -530 B
assets/useSubscriptionCredits-DznCG0u2.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +598 B 🔴 +528 B
assets/audioUtils-BIcIDUsE.js (new) 970 B 🔴 +970 B 🔴 +546 B 🔴 +459 B
assets/audioUtils-BLWRqYbI.js (removed) 970 B 🟢 -970 B 🟢 -549 B 🟢 -483 B
assets/useCurrentUser-_ZuV8D1I.js (new) 145 B 🔴 +145 B 🔴 +114 B 🔴 +99 B
assets/useCurrentUser-B2-OqY2u.js (removed) 145 B 🟢 -145 B 🟢 -114 B 🟢 -103 B
assets/_plugin-vue_export-helper-DuK_Fly3.js 467 B 467 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-GMAsfHxw.js 7.2 kB 7.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-ivqHoiOs.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/tailwindUtil-CJjrIEVR.js 488 B 488 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 7 added / 7 removed

Vendor & Third-Party — 10.7 MB (baseline 10.7 MB) • 🔴 +6.86 kB

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-reka-ui-aCG649nF.js (new) 263 kB 🔴 +263 kB 🔴 +51.7 kB 🔴 +42.8 kB
assets/vendor-reka-ui-CEgfUa-v.js (removed) 256 kB 🟢 -256 kB 🟢 -50.6 kB 🟢 -42.1 kB
assets/vendor-chart-DHGfk3hn.js 408 kB 408 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-jpGqhHNG.js 4.1 MB 4.1 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-4Jj8eU28.js 3.04 MB 3.04 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-CERwhPwK.js 1.83 MB 1.83 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BxrEVL6s.js 650 kB 650 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-Dwii0E-t.js 13.6 kB 13.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-IX6P8SWv.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 1 added / 1 removed

Other — 7.05 MB (baseline 7.05 MB) • 🟢 -198 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-Dhz_NnXd.js (removed) 180 kB 🟢 -180 kB 🟢 -43.4 kB 🟢 -36.2 kB
assets/core-D_IkLOCc.js (new) 180 kB 🔴 +180 kB 🔴 +43.3 kB 🔴 +36.2 kB
assets/WidgetSelect-CBpUTjjc.js (new) 51 kB 🔴 +51 kB 🔴 +11.3 kB 🔴 +9.82 kB
assets/WidgetSelect-D8EvlI3E.js (removed) 51 kB 🟢 -51 kB 🟢 -11.3 kB 🟢 -9.83 kB
assets/Load3DControls-Bt0haJFX.js (removed) 35.9 kB 🟢 -35.9 kB 🟢 -5.87 kB 🟢 -5.09 kB
assets/Load3DControls-DTBQaYnx.js (new) 35.9 kB 🔴 +35.9 kB 🔴 +5.87 kB 🔴 +5.08 kB
assets/SubscriptionRequiredDialogContent-Ckct2_l6.js (new) 28.7 kB 🔴 +28.7 kB 🔴 +6.78 kB 🔴 +5.91 kB
assets/SubscriptionRequiredDialogContent-DgIs_eTs.js (removed) 28.7 kB 🟢 -28.7 kB 🟢 -6.79 kB 🟢 -5.9 kB
assets/CurrentUserPopoverWorkspace-CkIDHmOG.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -4.99 kB 🟢 -4.42 kB
assets/CurrentUserPopoverWorkspace-DqFKgOA7.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +4.99 kB 🔴 +4.42 kB
assets/Load3D-C8nFvq1W.js (new) 19.2 kB 🔴 +19.2 kB 🔴 +4.37 kB 🔴 +3.84 kB
assets/Load3D-CMBRfkLq.js (removed) 19.2 kB 🟢 -19.2 kB 🟢 -4.37 kB 🟢 -3.85 kB
assets/WidgetRecordAudio-DqFWOUHa.js (removed) 18.3 kB 🟢 -18.3 kB 🟢 -4.97 kB 🟢 -4.44 kB
assets/WidgetRecordAudio-MGdq4MLS.js (new) 18.3 kB 🔴 +18.3 kB 🔴 +4.97 kB 🔴 +4.44 kB
assets/WidgetInputNumber-07Bw3ZKL.js (new) 18.3 kB 🔴 +18.3 kB 🔴 +4.51 kB 🔴 +4.02 kB
assets/WidgetInputNumber-sF68A2Ep.js (removed) 18.3 kB 🟢 -18.3 kB 🟢 -4.51 kB 🟢 -4.02 kB
assets/SubscriptionPanelContentWorkspace-ARuoTVfh.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.47 kB 🔴 +3.9 kB
assets/SubscriptionPanelContentWorkspace-CHAfMyeS.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.47 kB 🟢 -3.9 kB
assets/WidgetImageCrop-C1UIKzg_.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +4.14 kB 🔴 +3.63 kB
assets/WidgetImageCrop-DnB0F7N2.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -4.14 kB 🟢 -3.62 kB
assets/PanelTemplate-CmXi_RhU.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -5.46 kB 🟢 -4.8 kB
assets/PanelTemplate-p1hwMTYw.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +5.46 kB 🔴 +4.8 kB
assets/AudioPreviewPlayer-CVg5-zN2.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.98 kB 🔴 +2.65 kB
assets/AudioPreviewPlayer-D4AsBEXD.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.98 kB 🟢 -2.65 kB
assets/InviteMemberDialogContent-BDY7_0Bg.js (new) 8.36 kB 🔴 +8.36 kB 🔴 +2.5 kB 🔴 +2.17 kB
assets/InviteMemberDialogContent-BX5IavoT.js (removed) 8.36 kB 🟢 -8.36 kB 🟢 -2.51 kB 🟢 -2.17 kB
assets/WidgetWithControl-Cy-1ujdw.js (removed) 8.07 kB 🟢 -8.07 kB 🟢 -2.68 kB 🟢 -2.41 kB
assets/WidgetWithControl-D5Frsur9.js (new) 8.07 kB 🔴 +8.07 kB 🔴 +2.68 kB 🔴 +2.41 kB
assets/CreateWorkspaceDialogContent-CC9Xbx1G.js (new) 5.93 kB 🔴 +5.93 kB 🔴 +1.93 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-DjENLbuF.js (removed) 5.93 kB 🟢 -5.93 kB 🟢 -1.93 kB 🟢 -1.68 kB
assets/EditWorkspaceDialogContent-DE3WkHeM.js (new) 5.7 kB 🔴 +5.7 kB 🔴 +1.88 kB 🔴 +1.64 kB
assets/EditWorkspaceDialogContent-DOCBCd_w.js (removed) 5.7 kB 🟢 -5.7 kB 🟢 -1.88 kB 🟢 -1.65 kB
assets/ValueControlPopover-CGd1Jz3y.js (new) 5.17 kB 🔴 +5.17 kB 🔴 +1.68 kB 🔴 +1.5 kB
assets/ValueControlPopover-DRXIxYgO.js (removed) 5.17 kB 🟢 -5.17 kB 🟢 -1.69 kB 🟢 -1.5 kB
assets/DeleteWorkspaceDialogContent-CNohx-XV.js (removed) 4.59 kB 🟢 -4.59 kB 🟢 -1.56 kB 🟢 -1.35 kB
assets/DeleteWorkspaceDialogContent-K4DJ6kKx.js (new) 4.59 kB 🔴 +4.59 kB 🔴 +1.56 kB 🔴 +1.35 kB
assets/LeaveWorkspaceDialogContent-C_HvCiHi.js (new) 4.41 kB 🔴 +4.41 kB 🔴 +1.5 kB 🔴 +1.3 kB
assets/LeaveWorkspaceDialogContent-DcXIUoYW.js (removed) 4.41 kB 🟢 -4.41 kB 🟢 -1.51 kB 🟢 -1.3 kB
assets/RemoveMemberDialogContent-Do43xERY.js (new) 4.38 kB 🔴 +4.38 kB 🔴 +1.45 kB 🔴 +1.26 kB
assets/RemoveMemberDialogContent-Dy2nKhsk.js (removed) 4.38 kB 🟢 -4.38 kB 🟢 -1.46 kB 🟢 -1.27 kB
assets/RevokeInviteDialogContent-BsEV9hc7.js (removed) 4.29 kB 🟢 -4.29 kB 🟢 -1.47 kB 🟢 -1.29 kB
assets/RevokeInviteDialogContent-CrD1eY59.js (new) 4.29 kB 🔴 +4.29 kB 🔴 +1.47 kB 🔴 +1.28 kB
assets/Slider-BckXXL4E.js (removed) 4.21 kB 🟢 -4.21 kB 🟢 -1.52 kB 🟢 -1.34 kB
assets/Slider-D4lsf6Ob.js (new) 4.21 kB 🔴 +4.21 kB 🔴 +1.52 kB 🔴 +1.34 kB
assets/GlobalToast-CPp5X3g6.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.1 kB 🟢 -942 B
assets/GlobalToast-ZaqIL4Jp.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.1 kB 🔴 +940 B
assets/SubscribeToRun-Bc0LpjlD.js (removed) 2.96 kB 🟢 -2.96 kB 🟢 -1.16 kB 🟢 -1.01 kB
assets/SubscribeToRun-DHETTJst.js (new) 2.96 kB 🔴 +2.96 kB 🔴 +1.15 kB 🔴 +1.01 kB
assets/cloudSessionCookie-Csx60t9r.js (new) 2.94 kB 🔴 +2.94 kB 🔴 +928 B 🔴 +798 B
assets/cloudSessionCookie-DvfUGM3F.js (removed) 2.94 kB 🟢 -2.94 kB 🟢 -929 B 🟢 -802 B
assets/BaseViewTemplate-CdyQc354.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.04 kB 🟢 -941 B
assets/BaseViewTemplate-CzE51Jsd.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +1.04 kB 🔴 +943 B
assets/CloudRunButtonWrapper-BqE6Ur1E.js (new) 1.79 kB 🔴 +1.79 kB 🔴 +643 B 🔴 +562 B
assets/CloudRunButtonWrapper-DCInH3Y8.js (removed) 1.79 kB 🟢 -1.79 kB 🟢 -647 B 🟢 -562 B
assets/cloudBadges-CoCurCoC.js (removed) 1.08 kB 🟢 -1.08 kB 🟢 -537 B 🟢 -476 B
assets/cloudBadges-Dsaq7hPS.js (new) 1.08 kB 🔴 +1.08 kB 🔴 +537 B 🔴 +478 B
assets/graphHasMissingNodes-D3VMaYks.js (removed) 1.06 kB 🟢 -1.06 kB 🟢 -462 B 🟢 -423 B
assets/graphHasMissingNodes-DabhZ5Em.js (new) 1.06 kB 🔴 +1.06 kB 🔴 +462 B 🔴 +409 B
assets/cloudSubscription--VL8f6Z0.js (new) 976 B 🔴 +976 B 🔴 +466 B 🔴 +398 B
assets/cloudSubscription-0zbwdObs.js (removed) 976 B 🟢 -976 B 🟢 -467 B 🟢 -397 B
assets/nightlyBadges-BB7seAkB.js (removed) 595 B 🟢 -595 B 🟢 -358 B 🟢 -310 B
assets/nightlyBadges-SeglgIWE.js (new) 595 B 🔴 +595 B 🔴 +356 B 🔴 +310 B
assets/SubscriptionPanelContentWorkspace-DDfYbwxq.js (removed) 266 B 🟢 -266 B 🟢 -136 B 🟢 -125 B
assets/SubscriptionPanelContentWorkspace-WiViSH4O.js (new) 266 B 🔴 +266 B 🔴 +136 B 🔴 +124 B
assets/WidgetInputNumber-D9YsWW2g.js (new) 186 B 🔴 +186 B 🔴 +119 B 🔴 +114 B
assets/WidgetInputNumber-DrZqDmYv.js (removed) 186 B 🟢 -186 B 🟢 -119 B 🟢 -117 B
assets/WidgetLegacy-B0BTWfIN.js (new) 164 B 🔴 +164 B 🔴 +125 B 🔴 +110 B
assets/WidgetLegacy-DLJid7xk.js (removed) 164 B 🟢 -164 B 🟢 -125 B 🟢 -113 B
assets/Load3D-C0hx5UaS.js (new) 131 B 🔴 +131 B 🔴 +107 B 🔴 +123 B
assets/Load3D-CmQdoCNK.js (removed) 131 B 🟢 -131 B 🟢 -107 B 🟢 -107 B
assets/auto-DWs2ctGL.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BEw5ErI4.js 18.5 kB 18.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BGeHkplA.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BV0l36Iz.js 17.2 kB 17.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C_Y3D6Cn.js 17.8 kB 17.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C6piRza5.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Cf8Zq1td.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CiziP3Xs.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D1595tOr.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DXauvccL.js 20.6 kB 20.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-P5QCEfZc.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-WbYP_D61.js 17 kB 17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-CK7Ku3qD.js 496 kB 496 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-Cqw3TAmd.js 188 B 188 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-DHwPdKGO.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-12Ugs8uH.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-bK51E1AF.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BpNRRXRJ.js 151 kB 151 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-c-Kg1DWL.js 126 kB 126 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C16qe5Pa.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C2P63O3F.js 126 kB 126 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C5b27iBR.js 112 kB 112 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CcswxyNG.js 173 kB 173 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D6eu0Wen.js 128 kB 128 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DbxHumst.js 130 kB 130 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DKTrxQrQ.js 155 kB 155 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-DUmUhXD6.js 2.38 kB 2.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-CD66_Mw_.js 2 kB 2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-Bqe7yvm_.js 2.34 kB 2.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-De3MzVmp.js 2.82 kB 2.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/mixpanel.module-CC2-PIpB.js 143 B 143 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B0UaQKt6.js 363 kB 363 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B68z80AD.js 413 kB 413 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bg1UEeRw.js 448 kB 448 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CicFSATk.js 339 kB 339 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CinCueZ7.js 373 kB 373 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DgzjkU5p.js 366 kB 366 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DKHHBXVW.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dn1Haq99.js 342 kB 342 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DxR-7ogK.js 383 kB 383 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-qCfy7PeV.js 412 kB 412 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-xDY-sSQw.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-CmezY7As.js 838 B 838 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-cVp-94Rc.js 1.96 kB 1.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-BJiJuR5i.js 518 B 518 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-CUtab2CB.js 4.71 kB 4.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-D79nBMxa.js 186 B 186 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-CiXfBVBH.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-BxNqMlFv.js 3.71 kB 3.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-DDD96zwa.js 4.57 kB 4.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-A6pZMGtc.js 3.79 kB 3.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-DSMUKRnt.js 2.58 kB 2.58 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-MDImyvc3.js 2.7 kB 2.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-C95PPn5g.js 3.22 kB 3.22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-ERx8czR8.js 1.31 kB 1.31 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-CV3BoahN.js 3.87 kB 3.87 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-ZdaYkxkD.js 3.26 kB 3.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-KPj-zM0O.js 573 B 573 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 35 added / 35 removed

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Fix all issues with AI agents
In `@src/components/ui/TypeformPopoverButton.vue`:
- Around line 22-35: The Button is being wrapped by an anchor when isMobile
which creates nested interactive elements and breaks accessibility; instead
render the Button as an anchor (use the Button's as prop) and move
href/target/rel onto it (add rel="noopener noreferrer") and add an aria-label
using an existing i18n key (replace the non-existent linearMode.feedback with
helpCenter.feedback or add linearMode.feedback to locales); make the same
aria-label present for the Popover button variant, and keep using dataTfWidget
and isMobile to build the URL so no other logic changes are needed.

In `@src/renderer/extensions/linearMode/MobileMenu.vue`:
- Around line 18-20: The menu trigger Button in MobileMenu.vue is icon-only and
lacks an accessible name; add a clear aria-label (e.g., "Open menu" or "Open
navigation menu") to the Button (the <Button> element that currently contains
the <i class="icon-[lucide--menu] ...">) and ensure the icon <i> is marked
decorative (aria-hidden="true") if applicable so screen readers announce the
aria-label instead of the icon.
- Around line 33-49: The template currently calls composables/stores inline
(useWorkflowTemplateSelectorDialog() and useCommandStore().execute(...)) which
causes repeated lookups; hoist these by calling
useWorkflowTemplateSelectorDialog and useCommandStore once in the component
setup, store their returned objects (e.g., templateDialog and commandStore) and
expose wrapper methods (e.g., openTemplateMenu -> templateDialog.show('menu')
and toggleLinear -> commandStore.execute('Comfy.ToggleLinear', { metadata: {
source: 'button' } })) so the template binds to these methods instead of calling
composables inline.

In `@src/renderer/extensions/linearMode/OutputHistory.vue`:
- Around line 159-163: The early return in OutputHistory.vue that checks
newAssets vs oldAssets prevents auto-selection when the list goes from empty to
multiple items; update the logic in the watcher (the block referencing
newAssets, oldAssets, and selectedIndex) to instead set selectedIndex to 0 when
oldAssets.length === 0 and newAssets.length > 0 and selectedIndex indicates
"none" (e.g., -1 or [ -1, 0 ]) so the first output is selected; keep the early
return for the case where lengths are equal to avoid unnecessary work, but
remove the branch that returns when oldAssets.length === 0 && newAssets.length
!== 1 and replace it with a conditional that auto-selects the first item if
nothing is selected.

Comment on lines +18 to +20
<Button variant="secondary" class="size-10 self-end m-4 mb-2">
<i class="icon-[lucide--menu] size-8" />
</Button>
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Add an accessible label to the icon-only menu trigger.
Screen readers won’t have a name for this control.

✅ Suggested fix
-      <Button variant="secondary" class="size-10 self-end m-4 mb-2">
+      <Button
+        variant="secondary"
+        class="size-10 self-end m-4 mb-2"
+        :aria-label="t('linearMode.openMenu')"
+      >
         <i class="icon-[lucide--menu] size-8" />
       </Button>

Based on learnings, “If a button has no visible label, provide a clear aria-label or associate with an aria-labelledby describing its action.”

🤖 Prompt for AI Agents
In `@src/renderer/extensions/linearMode/MobileMenu.vue` around lines 18 - 20, The
menu trigger Button in MobileMenu.vue is icon-only and lacks an accessible name;
add a clear aria-label (e.g., "Open menu" or "Open navigation menu") to the
Button (the <Button> element that currently contains the <i
class="icon-[lucide--menu] ...">) and ensure the icon <i> is marked decorative
(aria-hidden="true") if applicable so screen readers announce the aria-label
instead of the icon.

Comment on lines +33 to +49
<Button
variant="secondary"
size="lg"
class="w-full"
@click="useWorkflowTemplateSelectorDialog().show('menu')"
>
<i class="icon-[comfy--template]" />
{{ t('sideToolbar.templates') }}
</Button>
<Button
variant="secondary"
size="lg"
class="w-full"
@click="
useCommandStore().execute('Comfy.ToggleLinear', {
metadata: { source: 'button' }
})
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Hoist composables/stores out of the template handlers.
This avoids repeated calls and keeps logic centralized.

♻️ Suggested refactor
<script setup lang="ts">
 import { useWorkflowTemplateSelectorDialog } from '@/composables/useWorkflowTemplateSelectorDialog'
 import { t } from '@/i18n'
 import { useCommandStore } from '@/stores/commandStore'

+const workflowTemplateSelectorDialog = useWorkflowTemplateSelectorDialog()
+const commandStore = useCommandStore()
</script>
-        `@click`="useWorkflowTemplateSelectorDialog().show('menu')"
+        `@click`="workflowTemplateSelectorDialog.show('menu')"
-        `@click`="
-          useCommandStore().execute('Comfy.ToggleLinear', {
-            metadata: { source: 'button' }
-          })
-        "
+        `@click`="
+          commandStore.execute('Comfy.ToggleLinear', {
+            metadata: { source: 'button' }
+          })
+        "
📝 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
<Button
variant="secondary"
size="lg"
class="w-full"
@click="useWorkflowTemplateSelectorDialog().show('menu')"
>
<i class="icon-[comfy--template]" />
{{ t('sideToolbar.templates') }}
</Button>
<Button
variant="secondary"
size="lg"
class="w-full"
@click="
useCommandStore().execute('Comfy.ToggleLinear', {
metadata: { source: 'button' }
})
<Button
variant="secondary"
size="lg"
class="w-full"
`@click`="workflowTemplateSelectorDialog.show('menu')"
>
<i class="icon-[comfy--template]" />
{{ t('sideToolbar.templates') }}
</Button>
<Button
variant="secondary"
size="lg"
class="w-full"
`@click`="
commandStore.execute('Comfy.ToggleLinear', {
metadata: { source: 'button' }
})
"
>
🤖 Prompt for AI Agents
In `@src/renderer/extensions/linearMode/MobileMenu.vue` around lines 33 - 49, The
template currently calls composables/stores inline
(useWorkflowTemplateSelectorDialog() and useCommandStore().execute(...)) which
causes repeated lookups; hoist these by calling
useWorkflowTemplateSelectorDialog and useCommandStore once in the component
setup, store their returned objects (e.g., templateDialog and commandStore) and
expose wrapper methods (e.g., openTemplateMenu -> templateDialog.show('menu')
and toggleLinear -> commandStore.execute('Comfy.ToggleLinear', { metadata: {
source: 'button' } })) so the template binds to these methods instead of calling
composables inline.

:href="`https://form.typeform.com/to/${dataTfWidget}`"
target="_blank"
>
<Button variant="inverted" class="rounded-full size-12" v-bind="$attrs">
Copy link
Contributor

Choose a reason for hiding this comment

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

Option: You could do as='a' to render the button as an anchor. It'd accept the anchor properties too.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Much better. Thanks.

<div class="border-r border-border-subtle">
<ModeToggle class="m-2" />
</div>
<div class="flex-1" />
Copy link
Contributor

Choose a reason for hiding this comment

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

Alternative: ml-auto on the subsequent element. (I like to limit spacers to cases where I need multiple)

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Agreed (and neat)

Copy link
Contributor

Choose a reason for hiding this comment

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

This is pretty close to being a component... 😉

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

For collapsible? I think too many of my styling tweaks are specific to this use case and still manage to leave some usability problems half solved. I'd rather return to this after I've had more time to think things over.

Copy link
Contributor

Choose a reason for hiding this comment

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

For a collapsible menu. I agree with your instincts.

@DrJKL
Copy link
Contributor

DrJKL commented Jan 28, 2026

I love the screenshots, thanks <3

@AustinMroz AustinMroz merged commit d5e9be6 into main Jan 28, 2026
27 checks passed
@AustinMroz AustinMroz deleted the austin/misc-fixes branch January 28, 2026 23:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants