Skip to content

Conversation

@viva-jinyi
Copy link
Member

@viva-jinyi viva-jinyi commented Nov 23, 2025

Summary

  • Add right-click context menu functionality to MediaAssetCard
  • Separate context menu into its own component (MediaAssetContextMenu.vue)
  • Ensure only one context menu is visible at a time within the same tab

Changes

  • Add MediaAssetContextMenu.vue - new component for context menu
  • Update MediaAssetCard.vue - show context menu on right-click and more button click
  • Delete MediaAssetMoreMenu.vue - consolidated into context menu
  • Delete MediaAssetButtonDivider.vue - unused
  • Update AssetsSidebarTab.vue - add context menu state management
  • Refactor useMediaAssetActions.ts

Screenshot

screen-capture.webm

🤖 Generated with Claude Code

@dosubot dosubot bot added the size:XL This PR changes 500-999 lines, ignoring generated files. label Nov 23, 2025
@coderabbitai
Copy link

coderabbitai bot commented Nov 23, 2025

📝 Walkthrough

Walkthrough

Refactors asset action UI from popover-based menus to a context-menu component, replaces MediaAssetMoreMenu with MediaAssetContextMenu, updates prop/event names and internal emits, exposes a click event on asset cards, adjusts composable signatures, adds a button size option, and updates locale action labels.

Changes

Cohort / File(s) Change Summary
Context menu refactor
src/platform/assets/components/MediaAssetCard.vue, src/platform/assets/components/MediaAssetContextMenu.vue, src/platform/assets/components/MediaAssetMoreMenu.vue
Replaced MoreMenu/popover flow with new MediaAssetContextMenu component. MediaAssetMoreMenu.vue deleted. MediaAssetCard.vue now emits click and context-menu-opened, accepts openContextMenuId (replacing openPopoverId), removes popover-related emits (popover-opened/popover-closed) and state, and uses a contextMenu ref to show/hide the new menu.
Sidebar bindings & small UI component
src/components/sidebar/tabs/AssetsSidebarTab.vue, src/platform/assets/components/MediaAssetButtonDivider.vue
AssetsSidebarTab.vue updated to bind openContextMenuId and listen for context-menu-opened instead of popover events. MediaAssetButtonDivider.vue had its divider template removed.
Media actions composable
src/platform/assets/composables/useMediaAssetActions.ts
Action functions (downloadAsset, copyJobId, addWorkflow, openWorkflow, exportWorkflow) now accept an optional asset parameter and fallback to mediaContext.asset when not provided; internal logic updated to use the resolved targetAsset.
Button type expansion
src/types/buttonTypes.ts
ButtonSize type extended to include 'full-width'; getButtonSizeClasses and getIconButtonSizeClasses mappings updated to support 'full-width'.
Locale additions
src/locales/en/main.json
Added action labels under g.manager.queue.jobMenu: addToWorkflow, download, openWorkflow, exportWorkflow, copyJobId, delete; changed inspect label to "Inspect asset".

Sequence Diagram

sequenceDiagram
    participant User
    participant Card as MediaAssetCard
    participant Menu as MediaAssetContextMenu
    participant Actions as useMediaAssetActions
    participant Parent

    User->>Card: right-click / click ellipsis
    activate Card
    Card->>Card: handleContextMenu() / handle button click
    Card->>Menu: show(event)
    Card->>Parent: emit('context-menu-opened')
    deactivate Card

    User->>Menu: select menu item
    activate Menu
    Menu->>Actions: invoke action (download/add/open/export/copy/delete) with optional asset
    activate Actions
    Actions->>Actions: resolve targetAsset (param || mediaContext.asset)
    deactivate Actions

    alt delete chosen
        Menu->>Parent: emit('asset-deleted')
    else zoom or other
        Menu->>Parent: emit('zoom') or perform action
    end

    Menu->>Menu: hide()
    deactivate Menu
Loading
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/media-asset-right-click

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 39d96f2 and 764f16d.

📒 Files selected for processing (2)
  • src/locales/en/main.json (1 hunks)
  • src/platform/assets/components/MediaAssetContextMenu.vue (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/platform/assets/components/MediaAssetContextMenu.vue
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: lint-and-format
  • GitHub Check: test
  • GitHub Check: setup
  • GitHub Check: collect
🔇 Additional comments (1)
src/locales/en/main.json (1)

2145-2153: Locale labels for new context menu actions are well-structured and consistent.

The new keys in mediaAsset.actions properly support the MediaAssetContextMenu component. Labels align with existing terminology in jobMenu (e.g., "Inspect asset", "Export workflow", "Download") and follow established naming conventions. The key names are appropriately scoped to the asset context (e.g., inspect rather than inspectAsset, openWorkflow rather than openWorkflowNewTab), which is sensible for this UI domain.


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

@github-actions
Copy link

github-actions bot commented Nov 23, 2025

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 11/23/2025, 10:05:29 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Nov 23, 2025

🎭 Playwright Test Results

⚠️ Tests passed with flaky tests

⏰ Completed at: 11/23/2025, 10:15:57 AM UTC

📈 Summary

  • Total Tests: 497
  • Passed: 486 ✅
  • Failed: 0
  • Flaky: 2 ⚠️
  • Skipped: 9 ⏭️

📊 Test Reports by Browser

  • chromium: View Report • ✅ 477 / ❌ 0 / ⚠️ 2 / ⏭️ 9
  • chromium-2x: View Report • ✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • chromium-0.5x: View Report • ✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • mobile-chrome: View Report • ✅ 6 / ❌ 0 / ⚠️ 0 / ⏭️ 0

🎉 Click on the links above to view detailed test results for each browser configuration.

@viva-jinyi viva-jinyi changed the title [feat] MediaAssetCard 우클릭 컨텍스트 메뉴 추가 [feat] Add right-click context menu to MediaAssetCard Nov 23, 2025
@github-actions
Copy link

github-actions bot commented Nov 23, 2025

Bundle Size Report

Summary

  • Raw size: 14.2 MB baseline 14.2 MB — 🟢 -1.27 kB
  • Gzip: 2.84 MB baseline 2.84 MB — 🔴 +102 B
  • Brotli: 2.22 MB baseline 2.22 MB — 🔴 +171 B
  • Bundles: 92 current • 92 baseline • 38 added / 38 removed

Category Glance
App Entry Points 🟢 -3.67 kB (3.18 MB) · Graph Workspace 🔴 +2.39 kB (943 kB) · Vendor & Third-Party ⚪ 0 B (5.7 MB) · Other ⚪ 0 B (3.87 MB) · Panels & Settings ⚪ 0 B (306 kB) · UI Components ⚪ 0 B (141 kB) · + 3 more

Per-category breakdown
App Entry Points — 3.18 MB (baseline 3.18 MB) • 🟢 -3.67 kB

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-Bd0sn9CR.js (removed) 2.95 MB 🟢 -2.95 MB 🟢 -615 kB 🟢 -467 kB
assets/index-CziFHcmM.js (new) 2.95 MB 🔴 +2.95 MB 🔴 +614 kB 🔴 +467 kB
assets/index-B4k3avv7.js (new) 228 kB 🔴 +228 kB 🔴 +48.9 kB 🔴 +40.3 kB
assets/index-o7RiQwMs.js (removed) 228 kB 🟢 -228 kB 🟢 -48.9 kB 🟢 -40.3 kB
assets/index-BUGYjnaa.js (new) 345 B 🔴 +345 B 🔴 +243 B 🔴 +208 B
assets/index-Ro_2KccU.js (removed) 345 B 🟢 -345 B 🟢 -243 B 🟢 -211 B

Status: 3 added / 3 removed

Graph Workspace — 943 kB (baseline 940 kB) • 🔴 +2.39 kB

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BNdFGtRC.js (new) 943 kB 🔴 +943 kB 🔴 +183 kB 🔴 +140 kB
assets/GraphView-vlvmOTIs.js (removed) 940 kB 🟢 -940 kB 🟢 -182 kB 🟢 -139 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/UserSelectView-Bf2mIg2-.js (new) 7.97 kB 🔴 +7.97 kB 🔴 +2.43 kB 🔴 +2.14 kB
assets/UserSelectView-C4D7Cj6K.js (removed) 7.97 kB 🟢 -7.97 kB 🟢 -2.43 kB 🟢 -2.13 kB

Status: 1 added / 1 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CreditsPanel-BxU3U_wj.js (new) 22.9 kB 🔴 +22.9 kB 🔴 +5.46 kB 🔴 +4.78 kB
assets/CreditsPanel-DHtdABZo.js (removed) 22.9 kB 🟢 -22.9 kB 🟢 -5.46 kB 🟢 -4.78 kB
assets/KeybindingPanel-CyVckVt4.js (new) 15.1 kB 🔴 +15.1 kB 🔴 +3.73 kB 🔴 +3.28 kB
assets/KeybindingPanel-Dd8J5frv.js (removed) 15.1 kB 🟢 -15.1 kB 🟢 -3.73 kB 🟢 -3.29 kB
assets/ExtensionPanel-BPCedo0z.js (removed) 11.9 kB 🟢 -11.9 kB 🟢 -2.79 kB 🟢 -2.45 kB
assets/ExtensionPanel-DHIIgIu8.js (new) 11.9 kB 🔴 +11.9 kB 🔴 +2.79 kB 🔴 +2.45 kB
assets/AboutPanel-BfBBBKJt.js (new) 10.1 kB 🔴 +10.1 kB 🔴 +2.62 kB 🔴 +2.31 kB
assets/AboutPanel-CIL78AlY.js (removed) 10.1 kB 🟢 -10.1 kB 🟢 -2.62 kB 🟢 -2.31 kB
assets/ServerConfigPanel-BxCOJFVl.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.12 kB 🟢 -1.88 kB
assets/ServerConfigPanel-DP0Z7KHj.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.12 kB 🔴 +1.88 kB
assets/UserPanel-DRmgIH3Q.js (new) 7.74 kB 🔴 +7.74 kB 🔴 +2.03 kB 🔴 +1.78 kB
assets/UserPanel-QQdosHq_.js (removed) 7.74 kB 🟢 -7.74 kB 🟢 -2.02 kB 🟢 -1.77 kB
assets/settings-BXTtSH4O.js 33.3 kB 33.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-C9Pzn-NG.js 25.2 kB 25.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CCy2fA_h.js 27.3 kB 27.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CQpqEFfl.js 26.6 kB 26.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DHcnxypw.js 21.7 kB 21.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DhFTK9fY.js 25.1 kB 25.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DlT4t_ui.js 25.9 kB 25.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRgSrIdD.js 24.2 kB 24.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-tjkeqiZq.js 21.1 kB 21.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/Load3D.vue_vue_type_script_setup_true_lang-BsCdr6sd.js (removed) 53.9 kB 🟢 -53.9 kB 🟢 -8.43 kB 🟢 -7.23 kB
assets/Load3D.vue_vue_type_script_setup_true_lang-DVU7NQkA.js (new) 53.9 kB 🔴 +53.9 kB 🔴 +8.43 kB 🔴 +7.23 kB
assets/WidgetSelect.vue_vue_type_script_setup_true_lang-ChryjY9F.js (removed) 48 kB 🟢 -48 kB 🟢 -10.3 kB 🟢 -8.92 kB
assets/WidgetSelect.vue_vue_type_script_setup_true_lang-DIANauaX.js (new) 48 kB 🔴 +48 kB 🔴 +10.3 kB 🔴 +8.9 kB
assets/WidgetInputNumber.vue_vue_type_script_setup_true_lang-CFenuWxY.js (removed) 12.7 kB 🟢 -12.7 kB 🟢 -3.3 kB 🟢 -2.92 kB
assets/WidgetInputNumber.vue_vue_type_script_setup_true_lang-CzKqJKwE.js (new) 12.7 kB 🔴 +12.7 kB 🔴 +3.31 kB 🔴 +2.92 kB
assets/ComfyQueueButton-Clzn_6VP.js (new) 9.22 kB 🔴 +9.22 kB 🔴 +2.5 kB 🔴 +2.2 kB
assets/ComfyQueueButton-D4oQnsu0.js (removed) 9.22 kB 🟢 -9.22 kB 🟢 -2.5 kB 🟢 -2.2 kB
assets/WidgetLayoutField.vue_vue_type_script_setup_true_lang-BSZtEu7r.js (removed) 2.14 kB 🟢 -2.14 kB 🟢 -794 B 🟢 -690 B
assets/WidgetLayoutField.vue_vue_type_script_setup_true_lang-m7CdffkD.js (new) 2.14 kB 🔴 +2.14 kB 🔴 +795 B 🔴 +696 B
assets/MediaTitle.vue_vue_type_script_setup_true_lang-BViKSBA7.js (new) 848 B 🔴 +848 B 🔴 +475 B 🔴 +415 B
assets/MediaTitle.vue_vue_type_script_setup_true_lang-DMUwUjO0.js (removed) 848 B 🟢 -848 B 🟢 -474 B 🟢 -414 B
assets/LazyImage.vue_vue_type_script_setup_true_lang-Wi-CcgaU.js 10.7 kB 10.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar.vue_vue_type_script_setup_true_lang-D2s8tnS2.js 1.26 kB 1.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-CtnTx0SP.js 1.72 kB 1.72 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

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

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/keybindingService-BTKroyYL.js (new) 7.51 kB 🔴 +7.51 kB 🔴 +1.83 kB 🔴 +1.58 kB
assets/keybindingService-tbqRCKbk.js (removed) 7.51 kB 🟢 -7.51 kB 🟢 -1.83 kB 🟢 -1.57 kB
assets/audioService-DFBBd3qo.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +962 B 🔴 +825 B
assets/audioService-hx9o60im.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -962 B 🟢 -823 B
assets/serverConfigStore-D2N-YjtJ.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 2 added / 2 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/audioUtils-B--3HfU0.js (removed) 1.41 kB 🟢 -1.41 kB 🟢 -649 B 🟢 -547 B
assets/audioUtils-BsGkBI1u.js (new) 1.41 kB 🔴 +1.41 kB 🔴 +650 B 🔴 +543 B
assets/mathUtil-CTARWQ-l.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeFilterUtil-CXKCRJ-m.js 460 B 460 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 1 added / 1 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-other-OCBGbKU2.js 3.59 MB 3.59 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-PESgPnbc.js 517 B 517 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-aR6ntw5X.js 1.37 MB 1.37 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-CmuD0u4q.js 232 kB 232 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-DhKsTD0i.js 92.6 kB 92.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-BZLod3g9.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 3.87 MB (baseline 3.87 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/WidgetRecordAudio-CCbowyli.js (removed) 21.9 kB 🟢 -21.9 kB 🟢 -5.51 kB 🟢 -4.87 kB
assets/WidgetRecordAudio-CgtjKgrx.js (new) 21.9 kB 🔴 +21.9 kB 🔴 +5.51 kB 🔴 +4.88 kB
assets/AudioPreviewPlayer-Che6jqNo.js (new) 14.9 kB 🔴 +14.9 kB 🔴 +3.69 kB 🔴 +3.3 kB
assets/AudioPreviewPlayer-UoiW3Znh.js (removed) 14.9 kB 🟢 -14.9 kB 🟢 -3.69 kB 🟢 -3.3 kB
assets/WidgetGalleria-DPKR2myV.js (new) 5.56 kB 🔴 +5.56 kB 🔴 +1.74 kB 🔴 +1.54 kB
assets/WidgetGalleria-y6cKJqYq.js (removed) 5.56 kB 🟢 -5.56 kB 🟢 -1.74 kB 🟢 -1.54 kB
assets/WidgetColorPicker-CIAfNz5T.js (new) 4.87 kB 🔴 +4.87 kB 🔴 +1.69 kB 🔴 +1.48 kB
assets/WidgetColorPicker-DgPIuR6B.js (removed) 4.87 kB 🟢 -4.87 kB 🟢 -1.69 kB 🟢 -1.48 kB
assets/WidgetMarkdown-CQXZMf6n.js (new) 4.64 kB 🔴 +4.64 kB 🔴 +1.62 kB 🔴 +1.41 kB
assets/WidgetMarkdown-Dpn67csf.js (removed) 4.64 kB 🟢 -4.64 kB 🟢 -1.62 kB 🟢 -1.41 kB
assets/WidgetAudioUI-qWrnOHro.js (removed) 4.33 kB 🟢 -4.33 kB 🟢 -1.44 kB 🟢 -1.29 kB
assets/WidgetAudioUI-SK8J8TuB.js (new) 4.33 kB 🔴 +4.33 kB 🔴 +1.44 kB 🔴 +1.29 kB
assets/WidgetTextarea-BImtrKdb.js (removed) 4.03 kB 🟢 -4.03 kB 🟢 -1.34 kB 🟢 -1.19 kB
assets/WidgetTextarea-tvOFsDev.js (new) 4.03 kB 🔴 +4.03 kB 🔴 +1.34 kB 🔴 +1.19 kB
assets/WidgetInputText-BpgvOzNu.js (new) 3.45 kB 🔴 +3.45 kB 🔴 +1.24 kB 🔴 +1.09 kB
assets/WidgetInputText-EcQfsyGi.js (removed) 3.45 kB 🟢 -3.45 kB 🟢 -1.23 kB 🟢 -1.08 kB
assets/WidgetToggleSwitch-D6gWcy9T.js (removed) 3.23 kB 🟢 -3.23 kB 🟢 -1.14 kB 🟢 -1.01 kB
assets/WidgetToggleSwitch-qSdY36Mm.js (new) 3.23 kB 🔴 +3.23 kB 🔴 +1.14 kB 🔴 +1.02 kB
assets/MediaImageBottom-C5AQV_g9.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.05 kB 🔴 +919 B
assets/MediaImageBottom-YPLxGasD.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.05 kB 🟢 -908 B
assets/MediaAudioBottom-BdJ8N2j4.js (removed) 3 kB 🟢 -3 kB 🟢 -1.05 kB 🟢 -917 B
assets/MediaAudioBottom-BuCRnm4Y.js (new) 3 kB 🔴 +3 kB 🔴 +1.05 kB 🔴 +930 B
assets/Media3DTop-DpDS0oc5.js (new) 3 kB 🔴 +3 kB 🔴 +1.08 kB 🔴 +926 B
assets/Media3DTop-Dyi0_-XI.js (removed) 3 kB 🟢 -3 kB 🟢 -1.08 kB 🟢 -912 B
assets/MediaVideoBottom-31x4-SSD.js (new) 3 kB 🔴 +3 kB 🔴 +1.05 kB 🔴 +929 B
assets/MediaVideoBottom-C_cN_01Y.js (removed) 3 kB 🟢 -3 kB 🟢 -1.05 kB 🟢 -926 B
assets/Media3DBottom-AdxArhNH.js (removed) 2.98 kB 🟢 -2.98 kB 🟢 -1.04 kB 🟢 -928 B
assets/Media3DBottom-BDLsK11n.js (new) 2.98 kB 🔴 +2.98 kB 🔴 +1.04 kB 🔴 +926 B
assets/WidgetSelect-DB7Mo68b.js (removed) 2.17 kB 🟢 -2.17 kB 🟢 -675 B 🟢 -575 B
assets/WidgetSelect-saQ-Zp9U.js (new) 2.17 kB 🔴 +2.17 kB 🔴 +671 B 🔴 +572 B
assets/WidgetInputNumber-BhuZFljm.js (removed) 2.12 kB 🟢 -2.12 kB 🟢 -662 B 🟢 -556 B
assets/WidgetInputNumber-Bi3a-QmO.js (new) 2.12 kB 🔴 +2.12 kB 🔴 +664 B 🔴 +563 B
assets/Load3D-B00P3P9T.js (removed) 1.94 kB 🟢 -1.94 kB 🟢 -596 B 🟢 -498 B
assets/Load3D-C9KGmEW5.js (new) 1.94 kB 🔴 +1.94 kB 🔴 +600 B 🔴 +501 B
assets/WidgetLegacy-CGZ5Sg1V.js (new) 1.88 kB 🔴 +1.88 kB 🔴 +563 B 🔴 +477 B
assets/WidgetLegacy-Dp3WsDdD.js (removed) 1.88 kB 🟢 -1.88 kB 🟢 -560 B 🟢 -478 B
assets/commands-_s-RvhJR.js 13.6 kB 13.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BuUILW6P.js 13 kB 13 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BV4R6fLx.js 14.9 kB 14.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CLwPdnT6.js 14.2 kB 14.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CWMchBmd.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DazTQhtc.js 12.9 kB 12.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DmWrOe93.js 13.7 kB 13.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwiH7Kr6.js 13.8 kB 13.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-mS3LCNPn.js 14.5 kB 14.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-5lOBdqcC.js 84.5 kB 84.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BOCuaVpE.js 73.4 kB 73.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-ClrEFGUz.js 72.4 kB 72.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CyNU0iQX.js 99.3 kB 99.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D7gwLxft.js 114 kB 114 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DC8o4BCt.js 86.8 kB 86.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DKiesCV4.js 94.3 kB 94.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Hq2q-OtB.js 83.6 kB 83.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-USAlAlnj.js 82 kB 82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-RTI8pWy9.js 1.42 kB 1.42 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-DlKHfEAA.js 1.68 kB 1.68 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-BB0lT7C5.js 2.7 kB 2.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-_Px5dSNW.js 306 kB 306 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-7z21KPoS.js 285 kB 285 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BWKZzBPK.js 346 kB 346 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CGbgH4Yl.js 320 kB 320 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CjjjdWkV.js 313 kB 313 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CVrNtxvj.js 288 kB 288 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DLRSA0IK.js 309 kB 309 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DQV2gnwA.js 372 kB 372 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-ofqLG5vz.js 310 kB 310 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-rDmYEWg5.js 2.39 kB 2.39 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-Ds3K3ULR.js 2.15 kB 2.15 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-BIbGSUAt.js 1.28 kB 1.28 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 18 added / 18 removed

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (4)
src/types/buttonTypes.ts (2)

16-23: Clarify full-width padding/text-size semantics for regular buttons

full-width currently maps to only 'w-full', unlike sm/md which also define padding and text size. If you intend full‑width buttons to otherwise behave like md, consider composing the classes, e.g. reuse sizeClasses.md or inline the same padding/text classes; otherwise these buttons will render with whatever padding/text styles are applied externally, which might be inconsistent.


67-74: Check icon full-width styling consistency (rounding & size)

For icon buttons, full-width maps to 'w-full h-auto' while sm/md include explicit size-* and !rounded-md. If you want full‑width icon buttons to look visually consistent with the existing ones, consider whether they should also enforce a fixed height and/or rounded corners; if the intent is a full‑bleed row without that styling, this is fine as is.

src/components/sidebar/tabs/AssetsSidebarTab.vue (1)

82-94: Context menu ID coordination looks correct

Passing openContextMenuId into each card and updating it on context-menu-opened cleanly enforces a single open menu per tab. Since openContextMenuId is only used as a signal for “another card opened its menu”, leaving it non‑null across tab/folder switches is harmless, but you could optionally reset it when changing views if you ever need stricter state tracking.

Also applies to: 204-205

src/platform/assets/components/MediaAssetCard.vue (1)

19-21: Context menu integration on the card looks solid; verify implicit asset context for downloads

The new flow on the card side is cohesive:

  • Root CardContainer emitting click and handling @contextmenu.prevent="handleContextMenu" works well with AssetsSidebarTab’s @click="handleAssetSelect(item)" and per‑tab openContextMenuId.
  • Wiring the ellipsis button to the same handleContextMenu keeps left‑click and right‑click behavior consistent.
  • The dedicated <MediaAssetContextMenu> child plus the whenever watcher that calls contextMenu.hide() when openContextMenuId changes correctly enforces a single open menu across cards without needing a “closed” event.

One thing to confirm: the @download="actions.downloadAsset()" handler in the media top component still relies on useMediaAssetActions picking up the current asset via injection. If this card is not always under a MediaAssetKey provider that matches the active asset, that button will now silently no‑op (since the composable will early‑return when mediaContext is null).

If you want to decouple this from injected context entirely, an optional tweak is to pass the asset explicitly there, e.g.:

-@download="actions.downloadAsset()"
+@download="asset && actions.downloadAsset(asset)"

which will work regardless of any provider setup.

Also applies to: 62-77, 128-137, 184-200, 202-208, 211-212, 297-299, 341-352

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 09c888e and 39d96f2.

📒 Files selected for processing (7)
  • src/components/sidebar/tabs/AssetsSidebarTab.vue (2 hunks)
  • src/platform/assets/components/MediaAssetButtonDivider.vue (0 hunks)
  • src/platform/assets/components/MediaAssetCard.vue (7 hunks)
  • src/platform/assets/components/MediaAssetContextMenu.vue (1 hunks)
  • src/platform/assets/components/MediaAssetMoreMenu.vue (0 hunks)
  • src/platform/assets/composables/useMediaAssetActions.ts (6 hunks)
  • src/types/buttonTypes.ts (3 hunks)
💤 Files with no reviewable changes (2)
  • src/platform/assets/components/MediaAssetMoreMenu.vue
  • src/platform/assets/components/MediaAssetButtonDivider.vue
🧰 Additional context used
🧬 Code graph analysis (1)
src/platform/assets/composables/useMediaAssetActions.ts (7)
src/platform/assets/schemas/assetSchema.ts (1)
  • AssetItem (72-72)
src/platform/assets/utils/assetUrlUtil.ts (1)
  • getAssetUrl (21-29)
src/platform/assets/schemas/assetMetadataSchema.ts (1)
  • getOutputAssetMetadata (35-42)
src/utils/loaderNodeUtil.ts (1)
  • detectNodeTypeFromFilename (21-38)
src/platform/assets/utils/assetTypeUtil.ts (1)
  • getAssetType (19-24)
src/utils/createAnnotatedPath.ts (1)
  • createAnnotatedPath (13-23)
src/platform/workflow/utils/workflowExtractionUtil.ts (1)
  • extractWorkflowFromAsset (24-72)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: setup
  • GitHub Check: test
  • GitHub Check: lint-and-format
  • GitHub Check: collect
🔇 Additional comments (2)
src/types/buttonTypes.ts (1)

4-4: New ButtonSize variant looks consistent with helpers

Adding 'full-width' to ButtonSize is consistent with the mappings below and should be type‑safe across the codebase. Just be aware that any exhaustive ButtonSize handling (e.g., switches) in other files may now need a full-width branch, but TypeScript should surface those at compile time.

src/platform/assets/composables/useMediaAssetActions.ts (1)

61-63: The review comment's concern is incorrect; the call pattern is safe

The concern about actions.downloadAsset() at MediaAssetCard.vue:42 silently failing due to missing mediaContext is unfounded. MediaAssetCard provides MediaAssetKey at line 252 with asset: toRef(() => adaptedAsset.value), and the child component that emits @download is only rendered within the v-else-if="asset && adaptedAsset" conditional block (line 39). This guarantees that mediaContext.asset.value is always available and truthy when the handler is invoked.

All other call sites in MediaAssetContextMenu.vue pass asset explicitly, so no issues exist elsewhere.

Likely an incorrect or invalid review comment.

- Add i18n translations for all context menu labels
- Fix separator logic to only add separators when there are items after them
- Add missing translation keys to en/main.json

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@viva-jinyi viva-jinyi added backport Backporting a PR onto a release candidate needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch labels Nov 23, 2025
@christian-byrne christian-byrne added the claude-review Add to trigger a PR code review from Claude Code label Nov 23, 2025
@github-actions github-actions bot removed the claude-review Add to trigger a PR code review from Claude Code label Nov 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

1.32 backport Backporting a PR onto a release candidate cloud/1.32 needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch size:XL This PR changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants