Skip to content

Comments

fix: support text and misc generated asset states#8914

Merged
benceruleanlu merged 47 commits intomainfrom
fix/generated-assets-double-check-fallback
Feb 21, 2026
Merged

fix: support text and misc generated asset states#8914
benceruleanlu merged 47 commits intomainfrom
fix/generated-assets-double-check-fallback

Conversation

@benceruleanlu
Copy link
Member

@benceruleanlu benceruleanlu commented Feb 16, 2026

Summary

Align generated-asset state classification to a single shared source and implement the missing text/misc states in both card and list previews.

Changes

  • What:
    • Extended getMediaTypeFromFilename in packages/shared-frontend-utils to return text and other, and changed unknown/no-extension fallback from image to other.
    • Added text extension handling (txt, md, json, csv, yaml/yml, xml, log) and kept existing media kinds.
    • Updated generated-assets UI to use shared media-type detection directly (removed the local generated-assets classifier).
    • Added text and misc card preview components:
      • text -> icon-[lucide--text]
      • other -> icon-[lucide--check-check]
    • Updated list-item preview behavior so only image/video use preview media URLs; text/other use icon fallback.
    • Widened media kind schema for asset display metadata to include text and other.
  • Breaking: No API breaking changes; internal media kind union widened for frontend asset display paths.
  • Dependencies: None.

Review Focus

  • Verify generated text assets render paragraph/text icon state in card + list.
  • Verify unknown/misc assets consistently render double-check icon state in card + list.
  • Verify existing image/video/audio/3D behavior remains unchanged.

Screenshots (if applicable)

image image image

┆Issue is synchronized with this Notion page by Unito

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 16, 2026

📝 Walkthrough

Walkthrough

The changes extend media type support to include "text" and "other" categories alongside existing image, video, audio, and 3D types. This includes updated file detection logic, new UI components for preview display, expanded icon mappings, schema updates, and corresponding test coverage.

Changes

Cohort / File(s) Summary
Media Type Detection & Format
packages/shared-frontend-utils/src/formatUtil.ts, packages/shared-frontend-utils/src/formatUtil.test.ts
Extended file type detection to recognize text extensions (txt, md, json, csv, yaml, xml, log) and return 'other' for unrecognized files. Added TEXT_EXTENSIONS constant. Updated MediaType export union to include 'text' and 'other'. Default fallback changed from 'image' to 'other'.
Schema & Type Definitions
src/platform/assets/schemas/mediaAssetSchema.ts
Expanded MediaKind enum from four to six values by adding "text" and "other", affecting validation schema for asset metadata.
Icon Utilities
src/platform/assets/utils/mediaIconUtil.ts, src/platform/assets/utils/mediaIconUtil.test.ts
Added icon mappings for new media types: 'text' → lucide--text icon, 'other' → lucide--check-check icon. Added comprehensive test coverage for all media type icon mappings.
Media Asset UI Components
src/platform/assets/components/MediaTextTop.vue, src/platform/assets/components/MediaOtherTop.vue, src/platform/assets/components/MediaAssetCard.vue
Created two new template-only Vue components for displaying text and other media previews. Updated MediaAssetCard to use new PreviewKind type, expanded top component mapping, and changed fallback from image to other component. Added previewKind computed value for asset preview determination.
Sidebar Asset Components
src/components/sidebar/tabs/AssetsSidebarListView.vue, src/components/sidebar/tabs/AssetsSidebarListView.test.ts, src/components/sidebar/tabs/AssetsSidebarListView.stories.ts
Added helper function getAssetPreviewUrl that returns preview URL only for image/video types, empty string otherwise. Added test asserting text assets render with icon fallback. Introduced TextAndMiscGeneratedAssets story variant with text and binary assets.
3D Component Loading
src/components/sidebar/tabs/AssetsSidebarTab.vue
Replaced manual async component function with Vue's defineAsyncComponent for Load3dViewerContent registration.
Asset Card Stories
src/platform/assets/components/MediaAssetCard.stories.ts
Added TextAsset and OtherAsset story variants with distinct asset metadata (generation-notes.txt and workflow-payload.bin).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 Hops with glee through text and other files,
New media types bloom in organized piles,
Icons dance—text glyph and check-check bright,
Components preview with proper delight,
My burrow grows richer with each asset's might! 📦✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and concisely describes the primary change: adding support for text and misc (other) generated asset states, which is the core focus of the entire changeset.
Description check ✅ Passed The description follows the template structure with all required sections completed: Summary, Changes (What/Breaking/Dependencies), Review Focus, and Screenshots. It provides comprehensive detail about the modifications and implementation.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/generated-assets-double-check-fallback

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.

Copy link
Member Author

benceruleanlu commented Feb 16, 2026

@github-actions
Copy link

github-actions bot commented Feb 16, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 02/21/2026, 09:10:56 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Feb 16, 2026

Playwright: ✅ 522 passed, 0 failed · 6 flaky

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

@benceruleanlu benceruleanlu marked this pull request as ready for review February 16, 2026 19:29
@benceruleanlu benceruleanlu requested a review from a team as a code owner February 16, 2026 19:29
Copilot AI review requested due to automatic review settings February 16, 2026 19:29
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Feb 16, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Aligns generated-asset media-kind classification across the app by extending the shared filename-based detector and wiring new text/other states through both card and list previews.

Changes:

  • Extended shared getMediaTypeFromFilename to detect more extensions and to classify unknown/empty as other (plus added tests).
  • Updated assets list previews to only use preview_url for image/video, and added icon support for text/other.
  • Added card-top preview components for text and other, and widened the frontend media-kind schema accordingly.

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/platform/assets/utils/mediaIconUtil.ts Adds icon mappings for text and other.
src/platform/assets/utils/mediaIconUtil.test.ts Adds coverage for the new icon mappings and verifies existing ones.
src/platform/assets/schemas/mediaAssetSchema.ts Extends MediaKind union to include text and other.
src/platform/assets/components/MediaTextTop.vue New card-top UI for text assets (icon placeholder).
src/platform/assets/components/MediaOtherTop.vue New card-top UI for misc/unknown assets (icon placeholder).
src/platform/assets/components/MediaAssetCard.vue Routes card-top rendering via shared media-type detection and supports new preview kinds.
src/components/sidebar/tabs/AssetsSidebarListView.vue Prevents non-image/video assets from using preview_url and falls back to icons.
src/components/sidebar/tabs/AssetsSidebarListView.test.ts Updates mocks and adds test coverage for icon fallback behavior.
packages/shared-frontend-utils/src/formatUtil.ts Extends extension sets; returns text/other; changes unknown fallback to other.
packages/shared-frontend-utils/src/formatUtil.test.ts Updates expectations and adds tests for new extension handling and fallbacks.

<i class="icon-[lucide--text] text-3xl text-base-foreground" />
</div>
</div>
</template>
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

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

MediaAssetCard passes an asset prop into this component, but MediaTextTop doesn't declare any props, so Vue will treat asset as a DOM attribute (likely ending up as asset="[object Object]"). Define an asset prop (same AssetMeta type as the other Media*Top components) or disable attribute inheritance to avoid leaking non-HTML attributes into the DOM.

Suggested change
</template>
</template>
<script setup lang="ts">
interface Props {
asset?: unknown;
}
const props = defineProps<Props>();
</script>

Copilot uses AI. Check for mistakes.
<i class="icon-[lucide--check-check] text-3xl text-base-foreground" />
</div>
</div>
</template>
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

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

MediaAssetCard passes an asset prop into this component, but MediaOtherTop doesn't declare any props, so Vue will treat asset as a DOM attribute (likely ending up as asset="[object Object]"). Define an asset prop (same AssetMeta type as the other Media*Top components) or disable attribute inheritance to avoid leaking non-HTML attributes into the DOM.

Suggested change
</template>
</template>
<script setup lang="ts">
defineOptions({
inheritAttrs: false,
});
</script>

Copilot uses AI. Check for mistakes.
})

const previewKind = computed((): PreviewKind => {
return getMediaTypeFromFilename(asset?.name || '')
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

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

fileKind and previewKind are computed from the same getMediaTypeFromFilename(asset?.name || '') expression, which duplicates work and can drift if one is updated later. Consider using a single computed (or reusing fileKind) for both the top-component selection and the legacy adaptedAsset.kind field.

Suggested change
return getMediaTypeFromFilename(asset?.name || '')
return fileKind.value as PreviewKind

Copilot uses AI. Check for mistakes.
case 'other':
return 'icon-[lucide--check-check]'
default:
return 'icon-[lucide--image]'
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

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

Now that unknown/empty filenames are classified as other, the default case here will only be hit for truly unexpected values. Returning the image icon as a fallback is inconsistent with the new other semantics; consider falling back to the other icon instead to avoid showing an image icon for unknown types.

Suggested change
return 'icon-[lucide--image]'
return 'icon-[lucide--check-check]'

Copilot uses AI. Check for mistakes.
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4e21768b0b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

if (VIDEO_EXTENSIONS.includes(ext as VideoExtension)) return 'video'
if (AUDIO_EXTENSIONS.includes(ext as AudioExtension)) return 'audio'
if (THREE_D_EXTENSIONS.includes(ext as ThreeDExtension)) return '3D'
if (TEXT_EXTENSIONS.includes(ext as TextExtension)) return 'text'

Choose a reason for hiding this comment

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

P2 Badge Block inspect for non-previewable text/other assets

Returning text here causes .txt/.md/.json/... assets to take the standard inspect/zoom path, but handleZoomClick in AssetsSidebarTab.vue only special-cases 3D and ResultGallery.vue only renders isImage, isVideo, or isAudio items. In practice, inspecting one of these newly classified text/other assets opens a fullscreen gallery with no rendered content. Please disable inspect/zoom for non-previewable kinds (or add a renderer) so these assets do not open a blank viewer.

Useful? React with 👍 / 👎.

Copy link
Member Author

Choose a reason for hiding this comment

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

True!

Copy link
Member Author

Choose a reason for hiding this comment

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

Switched to an allowlist here: #8989

@benceruleanlu benceruleanlu force-pushed the fix/generated-assets-double-check-fallback branch from 9d99871 to 2a8084c Compare February 16, 2026 19:36
@benceruleanlu benceruleanlu force-pushed the fix/video-preview-overlays branch from 213bae6 to 79ee412 Compare February 16, 2026 19:36
viva-jinyi
viva-jinyi previously approved these changes Feb 17, 2026
Copy link
Member

@viva-jinyi viva-jinyi left a comment

Choose a reason for hiding this comment

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

LGTM

…bar-tab-scaffold

# Conflicts:
#	src/components/queue/QueueOverlayHeader.vue
#	src/components/sidebar/tabs/AssetsSidebarTab.vue
#	src/components/ui/Popover.vue
## Summary
Fix 3D inspect dialog rendering by wrapping `Load3dViewerContent` with
`defineAsyncComponent` before passing it to `dialogStore.showDialog`.

## Changes
- Update `AssetsSidebarTab` to lazy-load `Load3dViewerContent` via
`defineAsyncComponent(() => import(...))`.

## Why
Passing a raw `() => import(...)` loader to the dialog store can render
`[object Promise]` instead of the component in this path.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8990-fix-load-3D-dialog-content-with-defineAsyncComponent-30c6d73d365081e7ba82cc8282943756)
by [Unito](https://www.unito.io)
Copy link
Member Author

benceruleanlu commented Feb 21, 2026

Merge activity

@benceruleanlu benceruleanlu changed the base branch from fix/video-preview-overlays to graphite-base/8914 February 21, 2026 00:43
@benceruleanlu benceruleanlu changed the base branch from graphite-base/8914 to main February 21, 2026 08:59
@benceruleanlu benceruleanlu dismissed viva-jinyi’s stale review February 21, 2026 08:59

The base branch was changed.

@benceruleanlu benceruleanlu requested a review from a team as a code owner February 21, 2026 08:59
@dosubot dosubot bot added size:XXL This PR changes 1000+ lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Feb 21, 2026
…double-check-fallback

# Conflicts:
#	src/components/sidebar/tabs/AssetsSidebarListView.test.ts
#	src/components/sidebar/tabs/AssetsSidebarListView.vue
#	src/platform/assets/components/MediaAssetFilterBar.vue
#	src/platform/assets/components/MediaVideoTop.test.ts
@dosubot dosubot bot added size:L This PR changes 100-499 lines, ignoring generated files. and removed size:XXL This PR changes 1000+ lines, ignoring generated files. labels Feb 21, 2026
@github-actions
Copy link

📦 Bundle: 4.37 MB gzip 🔴 +1.19 kB

Details

Summary

  • Raw size: 20.6 MB baseline 20.5 MB — 🔴 +3.01 kB
  • Gzip: 4.37 MB baseline 4.37 MB — 🔴 +1.19 kB
  • Brotli: 3.37 MB baseline 3.37 MB — 🔴 +893 B
  • Bundles: 223 current • 221 baseline • 127 added / 125 removed

Category Glance
Other 🔴 +2.02 kB (7.6 MB) · Data & Services 🔴 +990 B (2.51 MB) · Vendor & Third-Party ⚪ 0 B (8.86 MB) · Graph Workspace ⚪ 0 B (942 kB) · Panels & Settings ⚪ 0 B (436 kB) · Views & Navigation ⚪ 0 B (68.8 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-B2hnliwz.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +7.02 kB 🔴 +6.1 kB
assets/index-BaAmjZJN.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -7.02 kB 🟢 -6.12 kB

Status: 1 added / 1 removed

Graph Workspace — 942 kB (baseline 942 kB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-Bs83l8Tj.js (removed) 942 kB 🟢 -942 kB 🟢 -202 kB 🟢 -154 kB
assets/GraphView-BvkQNK1Z.js (new) 942 kB 🔴 +942 kB 🔴 +202 kB 🔴 +154 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-DCJnUugy.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.82 kB
assets/CloudSurveyView-OQhBQBFB.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.83 kB
assets/CloudLoginView-BTRen9TM.js (removed) 10 kB 🟢 -10 kB 🟢 -2.94 kB 🟢 -2.58 kB
assets/CloudLoginView-DVEp-HDs.js (new) 10 kB 🔴 +10 kB 🔴 +2.93 kB 🔴 +2.58 kB
assets/UserCheckView-CF2B9as2.js (new) 8.41 kB 🔴 +8.41 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/UserCheckView-DdoZPaTz.js (removed) 8.41 kB 🟢 -8.41 kB 🟢 -2.23 kB 🟢 -1.94 kB
assets/CloudSignupView-BMpib2TX.js (removed) 7.41 kB 🟢 -7.41 kB 🟢 -2.33 kB 🟢 -2.04 kB
assets/CloudSignupView-cH0xhv5p.js (new) 7.41 kB 🔴 +7.41 kB 🔴 +2.33 kB 🔴 +2.04 kB
assets/CloudLayoutView-DeSsb6qN.js (new) 6.43 kB 🔴 +6.43 kB 🔴 +2.1 kB 🔴 +1.84 kB
assets/CloudLayoutView-Dp5yHgOy.js (removed) 6.43 kB 🟢 -6.43 kB 🟢 -2.11 kB 🟢 -1.83 kB
assets/CloudForgotPasswordView-CeOCv58w.js (removed) 5.56 kB 🟢 -5.56 kB 🟢 -1.94 kB 🟢 -1.71 kB
assets/CloudForgotPasswordView-CGUlCGop.js (new) 5.56 kB 🔴 +5.56 kB 🔴 +1.94 kB 🔴 +1.71 kB
assets/CloudAuthTimeoutView-BBcp3SZ4.js (removed) 4.91 kB 🟢 -4.91 kB 🟢 -1.78 kB 🟢 -1.56 kB
assets/CloudAuthTimeoutView-BjKiAYx9.js (new) 4.91 kB 🔴 +4.91 kB 🔴 +1.77 kB 🔴 +1.55 kB
assets/CloudSubscriptionRedirectView-BJHdxE_0.js (removed) 4.71 kB 🟢 -4.71 kB 🟢 -1.78 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-CKmCh5gz.js (new) 4.71 kB 🔴 +4.71 kB 🔴 +1.78 kB 🔴 +1.58 kB
assets/UserSelectView-B2oLA_EG.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.47 kB
assets/UserSelectView-BqkMN95k.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.64 kB 🔴 +1.47 kB
assets/CloudSorryContactSupportView-BpNQvxFs.js (new) 1.02 kB 🔴 +1.02 kB 🔴 +541 B 🔴 +474 B
assets/CloudSorryContactSupportView-BtowWseH.js (removed) 1.02 kB 🟢 -1.02 kB 🟢 -540 B 🟢 -473 B
assets/layout-BOxGdNZf.js (removed) 296 B 🟢 -296 B 🟢 -222 B 🟢 -187 B
assets/layout-CY3QTpcy.js (new) 296 B 🔴 +296 B 🔴 +222 B 🔴 +189 B

Status: 11 added / 11 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-DBG7kx0z.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.31 kB 🟢 -4.65 kB
assets/SecretsPanel-XQMoCiH8.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.3 kB 🔴 +4.67 kB
assets/LegacyCreditsPanel-7506z1xi.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -5.57 kB 🟢 -4.88 kB
assets/LegacyCreditsPanel-P8IEwYbu.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +5.57 kB 🔴 +4.89 kB
assets/SubscriptionPanel-BBmyaDkG.js (new) 18.6 kB 🔴 +18.6 kB 🔴 +4.73 kB 🔴 +4.18 kB
assets/SubscriptionPanel-Dz1VlS_O.js (removed) 18.6 kB 🟢 -18.6 kB 🟢 -4.73 kB 🟢 -4.17 kB
assets/KeybindingPanel-BptOxBc9.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.58 kB 🔴 +3.17 kB
assets/KeybindingPanel-DLM9Eh6k.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.58 kB 🟢 -3.19 kB
assets/AboutPanel-431vNz5e.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.73 kB 🟢 -2.45 kB
assets/AboutPanel-DowOYXI7.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.73 kB 🔴 +2.46 kB
assets/ExtensionPanel-B_EX7Lcq.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.65 kB 🟢 -2.35 kB
assets/ExtensionPanel-Cvs41u5q.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.65 kB 🔴 +2.36 kB
assets/ServerConfigPanel-DeGhChH4.js (new) 6.44 kB 🔴 +6.44 kB 🔴 +2.13 kB 🔴 +1.92 kB
assets/ServerConfigPanel-gfZWcnMm.js (removed) 6.44 kB 🟢 -6.44 kB 🟢 -2.13 kB 🟢 -1.92 kB
assets/UserPanel-mzGL0XKk.js (removed) 6.16 kB 🟢 -6.16 kB 🟢 -2 kB 🟢 -1.76 kB
assets/UserPanel-V3PCuYkl.js (new) 6.16 kB 🔴 +6.16 kB 🔴 +2 kB 🔴 +1.75 kB
assets/cloudRemoteConfig-BJWc6v-x.js (new) 1.44 kB 🔴 +1.44 kB 🔴 +708 B 🔴 +612 B
assets/cloudRemoteConfig-e55u9ptk.js (removed) 1.44 kB 🟢 -1.44 kB 🟢 -710 B 🟢 -612 B
assets/refreshRemoteConfig-AulBieX5.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -520 B 🟢 -458 B
assets/refreshRemoteConfig-Biec90p1.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +519 B 🔴 +471 B
assets/config-QxkqTZy6.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-3cK4vYSX.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-AqJa7Oe1.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BOcWl0Qp.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BodhSOuG.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CCD8qxmc.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CVDNuOXV.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DLodCRRz.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DLqeCT09.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DP-OgTXN.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRIXyZ_Z.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-IRk9rDbu.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 10 added / 10 removed

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-C4mNcL--.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +989 B
assets/auth-DInFfcDX.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -991 B
assets/SignUpForm-4Rb9gCK4.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.09 kB
assets/SignUpForm-DW79Ertr.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.09 kB
assets/UpdatePasswordContent-BDjldScT.js (removed) 2.37 kB 🟢 -2.37 kB 🟢 -1.07 kB 🟢 -944 B
assets/UpdatePasswordContent-DtuXC9iL.js (new) 2.37 kB 🔴 +2.37 kB 🔴 +1.07 kB 🔴 +949 B
assets/WorkspaceProfilePic-BRX_wv6S.js (new) 1.57 kB 🔴 +1.57 kB 🔴 +822 B 🔴 +740 B
assets/WorkspaceProfilePic-DRIsn15F.js (removed) 1.57 kB 🟢 -1.57 kB 🟢 -821 B 🟢 -740 B
assets/firebaseAuthStore-CinJDF4P.js (new) 790 B 🔴 +790 B 🔴 +391 B 🔴 +349 B
assets/firebaseAuthStore-DAgRMw1m.js (removed) 790 B 🟢 -790 B 🟢 -390 B 🟢 -354 B
assets/auth-BOmh6snw.js (new) 357 B 🔴 +357 B 🔴 +221 B 🔴 +192 B
assets/auth-DzECKt42.js (removed) 357 B 🟢 -357 B 🟢 -223 B 🟢 -190 B
assets/PasswordFields-DlUohnmK.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-B2cXTwpZ.js (new) 738 B 🔴 +738 B 🔴 +381 B 🔴 +329 B
assets/useSubscriptionDialog-Bw6JaU0z.js (removed) 738 B 🟢 -738 B 🟢 -383 B 🟢 -331 B

Status: 1 added / 1 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-DKxZZfPV.js (removed) 9.85 kB 🟢 -9.85 kB 🟢 -3.41 kB 🟢 -3 kB
assets/useTerminalTabs-WDyTVQyn.js (new) 9.85 kB 🔴 +9.85 kB 🔴 +3.41 kB 🔴 +3 kB
assets/ComfyQueueButton-BotvOJId.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.49 kB 🟢 -2.22 kB
assets/ComfyQueueButton-DeTtCR3j.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.49 kB 🔴 +2.22 kB
assets/TopbarBadge-3g_6CddN.js (new) 7.45 kB 🔴 +7.45 kB 🔴 +1.81 kB 🔴 +1.6 kB
assets/TopbarBadge-BX0LwbuD.js (removed) 7.45 kB 🟢 -7.45 kB 🟢 -1.81 kB 🟢 -1.6 kB
assets/SubscribeButton-D0Qq8okp.js (removed) 2.35 kB 🟢 -2.35 kB 🟢 -1.02 kB 🟢 -888 B
assets/SubscribeButton-LVcL0nRV.js (new) 2.35 kB 🔴 +2.35 kB 🔴 +1.02 kB 🔴 +889 B
assets/WidgetButton-66XlMGc1.js (removed) 1.84 kB 🟢 -1.84 kB 🟢 -876 B 🟢 -767 B
assets/WidgetButton-BT3Ds9jk.js (new) 1.84 kB 🔴 +1.84 kB 🔴 +878 B 🔴 +775 B
assets/cloudFeedbackTopbarButton-BBcIuMR4.js (removed) 1.6 kB 🟢 -1.6 kB 🟢 -859 B 🟢 -763 B
assets/cloudFeedbackTopbarButton-DBbbwSRM.js (new) 1.6 kB 🔴 +1.6 kB 🔴 +859 B 🔴 +763 B
assets/CloudBadge-aQ2E47Yi.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +607 B 🔴 +528 B
assets/CloudBadge-Bns601e-.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -606 B 🟢 -526 B
assets/ComfyQueueButton-CxegmoxK.js (new) 795 B 🔴 +795 B 🔴 +396 B 🔴 +351 B
assets/ComfyQueueButton-FjowI-z7.js (removed) 795 B 🟢 -795 B 🟢 -397 B 🟢 -355 B
assets/Button-Dty3EQfq.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-CfmzmfrA.js 5.96 kB 5.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-GxvsGuiA.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 8 added / 8 removed

Data & Services — 2.51 MB (baseline 2.51 MB) • 🔴 +990 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-BORhUIeq.js (new) 1.73 MB 🔴 +1.73 MB 🔴 +386 kB 🔴 +292 kB
assets/dialogService-DVFHMd5C.js (removed) 1.72 MB 🟢 -1.72 MB 🟢 -385 kB 🟢 -292 kB
assets/api-DTlE7wfV.js (removed) 651 kB 🟢 -651 kB 🟢 -147 kB 🟢 -117 kB
assets/api-GiRhv6do.js (new) 651 kB 🔴 +651 kB 🔴 +147 kB 🔴 +117 kB
assets/load3dService-BtAhMzTY.js (new) 91 kB 🔴 +91 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/load3dService-CFyAX8qW.js (removed) 91 kB 🟢 -91 kB 🟢 -19.1 kB 🟢 -16.4 kB
assets/systemStatsStore-kWEWfUpV.js (new) 12.5 kB 🔴 +12.5 kB 🔴 +4.37 kB 🔴 +3.84 kB
assets/systemStatsStore-CTZ_ZCSb.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -4.31 kB 🟢 -3.79 kB
assets/releaseStore-Beqs2c-1.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/releaseStore-D8X2uUqq.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.96 kB
assets/keybindingService-Bszr8SLv.js (removed) 6.52 kB 🟢 -6.52 kB 🟢 -1.71 kB 🟢 -1.47 kB
assets/keybindingService-CvesYYva.js (new) 6.52 kB 🔴 +6.52 kB 🔴 +1.71 kB 🔴 +1.47 kB
assets/serverConfigStore-B17wcfZ1.js (new) 2.32 kB 🔴 +2.32 kB 🔴 +791 B 🔴 +692 B
assets/serverConfigStore-BQU6WivN.js (removed) 2.32 kB 🟢 -2.32 kB 🟢 -791 B 🟢 -692 B
assets/bootstrapStore-DSaADo4B.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +872 B 🔴 +790 B
assets/bootstrapStore-nyN8SKjf.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -875 B 🟢 -793 B
assets/userStore-BT-UQCZC.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +720 B 🔴 +638 B
assets/userStore-D2TTWWS3.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -721 B 🟢 -638 B
assets/audioService-9s3EhMRd.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -849 B 🟢 -727 B
assets/audioService-DFeWNlhs.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +848 B 🔴 +727 B
assets/releaseStore-CaQw3GhC.js (new) 762 B 🔴 +762 B 🔴 +387 B 🔴 +339 B
assets/releaseStore-tY8hLM4n.js (removed) 762 B 🟢 -762 B 🟢 -385 B 🟢 -339 B
assets/settingStore-BYaG-6up.js (removed) 746 B 🟢 -746 B 🟢 -391 B 🟢 -346 B
assets/settingStore-CEtj26Jm.js (new) 746 B 🔴 +746 B 🔴 +390 B 🔴 +342 B
assets/workflowDraftStore-BCSisYja.js (removed) 738 B 🟢 -738 B 🟢 -382 B 🟢 -337 B
assets/workflowDraftStore-Ca2jneba.js (new) 738 B 🔴 +738 B 🔴 +381 B 🔴 +331 B
assets/dialogService-D4SZOf0J.js (new) 727 B 🔴 +727 B 🔴 +372 B 🔴 +330 B
assets/dialogService-rgPA7QbX.js (removed) 727 B 🟢 -727 B 🟢 -370 B 🟢 -332 B

Status: 14 added / 14 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-B52NZ1eW.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/useLoad3d-Bja2Qg32.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3dViewer-C2G95J1B.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useLoad3dViewer-CWXkjk2E.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.8 kB
assets/useFeatureFlags-CbXxzaB9.js (new) 3.52 kB 🔴 +3.52 kB 🔴 +1.09 kB 🔴 +932 B
assets/useFeatureFlags-Kg1IEIAv.js (removed) 3.52 kB 🟢 -3.52 kB 🟢 -1.09 kB 🟢 -936 B
assets/useWorkspaceUI-BxfxSpQs.js (new) 3 kB 🔴 +3 kB 🔴 +823 B 🔴 +704 B
assets/useWorkspaceUI-D3pjYwun.js (removed) 3 kB 🟢 -3 kB 🟢 -822 B 🟢 -706 B
assets/useSubscriptionCredits-Dm7Z9__T.js (new) 2.75 kB 🔴 +2.75 kB 🔴 +1.04 kB 🔴 +901 B
assets/useSubscriptionCredits-DtAdsdO7.js (removed) 2.75 kB 🟢 -2.75 kB 🟢 -1.04 kB 🟢 -899 B
assets/subscriptionCheckoutUtil-BPbprLoY.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -951 B
assets/subscriptionCheckoutUtil-zS6RCPY_.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +953 B
assets/useErrorHandling-BJj5GBUN.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -629 B 🟢 -530 B
assets/useErrorHandling-D1xux1K4.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +629 B 🔴 +534 B
assets/useWorkspaceSwitch-B3QdLY8n.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +545 B 🔴 +490 B
assets/useWorkspaceSwitch-BOnyN8dI.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -546 B 🟢 -484 B
assets/useLoad3d-BG0rpa4y.js (removed) 861 B 🟢 -861 B 🟢 -429 B 🟢 -383 B
assets/useLoad3d-vqvoG_XY.js (new) 861 B 🔴 +861 B 🔴 +428 B 🔴 +378 B
assets/audioUtils-BFR1My4O.js (new) 858 B 🔴 +858 B 🔴 +500 B 🔴 +402 B
assets/audioUtils-Chc1wRTS.js (removed) 858 B 🟢 -858 B 🟢 -501 B 🟢 -407 B
assets/useLoad3dViewer-9IbGqno5.js (removed) 840 B 🟢 -840 B 🟢 -415 B 🟢 -370 B
assets/useLoad3dViewer-Dn8_t87X.js (new) 840 B 🔴 +840 B 🔴 +414 B 🔴 +365 B
assets/useCurrentUser-9NtZDMX2.js (new) 724 B 🔴 +724 B 🔴 +375 B 🔴 +328 B
assets/useCurrentUser-DLz8tTF3.js (removed) 724 B 🟢 -724 B 🟢 -373 B 🟢 -332 B
assets/_plugin-vue_export-helper-CY4XIWDa.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-CcRT0Prq.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-BQSmRN2Q.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-DfJrqNx-.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-BputJAFn.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-CO92JMdx.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-C4mPrLmU.js 70.3 kB 70.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-BxkFiWzp.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-firebase-BvMr43CG.js 836 kB 836 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-i18n-CJliEbVY.js 131 kB 131 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-DDKkCsp-.js 145 kB 145 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-C95vNT5d.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-CDtYfbOi.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-CWMIYdD2.js 379 kB 379 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-sentry-SQwstEKc.js 182 kB 182 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-LBLOE6BD.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-Bi_34iZD.js 625 kB 625 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-CmHHRvL9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-B4hGe0IQ.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-vkxZGffR.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-yjs-CP_4YO8u.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-zod-DcCUUPIi.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.6 MB (baseline 7.6 MB) • 🔴 +2.02 kB

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-CUThH-a2.js (removed) 72.8 kB 🟢 -72.8 kB 🟢 -18.8 kB 🟢 -16.1 kB
assets/core-CxRD_HEF.js (new) 72.8 kB 🔴 +72.8 kB 🔴 +18.8 kB 🔴 +16.1 kB
assets/groupNode-CaioREoO.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.6 kB 🔴 +15.5 kB
assets/groupNode-CzYYVEms.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.7 kB 🟢 -15.5 kB
assets/WidgetSelect-Cp1WugRh.js (removed) 57.6 kB 🟢 -57.6 kB 🟢 -12.2 kB 🟢 -10.5 kB
assets/WidgetSelect-DuAAR2Ie.js (new) 57.6 kB 🔴 +57.6 kB 🔴 +12.2 kB 🔴 +10.5 kB
assets/SubscriptionRequiredDialogContentWorkspace-BHIg05-3.js (removed) 45.8 kB 🟢 -45.8 kB 🟢 -8.57 kB 🟢 -7.42 kB
assets/SubscriptionRequiredDialogContentWorkspace-DQd6Lf5f.js (new) 45.8 kB 🔴 +45.8 kB 🔴 +8.57 kB 🔴 +7.41 kB
assets/Load3DControls-BuhLQQbg.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.64 kB
assets/Load3DControls-QMfK-xF7.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.65 kB
assets/WorkspacePanelContent-CpKULJ5e.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.15 kB 🟢 -5.41 kB
assets/WorkspacePanelContent-Cs8UdIyj.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.14 kB 🔴 +5.38 kB
assets/SubscriptionRequiredDialogContent-DU7QL5Yd.js (removed) 26.2 kB 🟢 -26.2 kB 🟢 -6.57 kB 🟢 -5.79 kB
assets/SubscriptionRequiredDialogContent-Fp8tDJSH.js (new) 26.2 kB 🔴 +26.2 kB 🔴 +6.57 kB 🔴 +5.78 kB
assets/Load3dViewerContent-BFtE-gyE.js (new) 23 kB 🔴 +23 kB 🔴 +5.18 kB 🔴 +4.5 kB
assets/Load3dViewerContent-Dv8NnNk4.js (removed) 23 kB 🟢 -23 kB 🟢 -5.19 kB 🟢 -4.5 kB
assets/WidgetImageCrop-C9poE93X.js (removed) 22.1 kB 🟢 -22.1 kB 🟢 -5.51 kB 🟢 -4.86 kB
assets/WidgetImageCrop-Y2Z25aD9.js (new) 22.1 kB 🔴 +22.1 kB 🔴 +5.51 kB 🔴 +4.86 kB
assets/SubscriptionPanelContentWorkspace-CGBgth8O.js (new) 21.6 kB 🔴 +21.6 kB 🔴 +5.02 kB 🔴 +4.43 kB
assets/SubscriptionPanelContentWorkspace-CXi8ooMV.js (removed) 21.6 kB 🟢 -21.6 kB 🟢 -5.02 kB 🟢 -4.43 kB
assets/CurrentUserPopoverWorkspace-D1IJZedJ.js (removed) 19.8 kB 🟢 -19.8 kB 🟢 -4.87 kB 🟢 -4.34 kB
assets/CurrentUserPopoverWorkspace-oz_6cvQI.js (new) 19.8 kB 🔴 +19.8 kB 🔴 +4.87 kB 🔴 +4.33 kB
assets/SignInContent-Bz-ae3F9.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.79 kB 🟢 -4.19 kB
assets/SignInContent-CcLoMche.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.79 kB 🔴 +4.19 kB
assets/WidgetInputNumber-BcWMHfPP.js (removed) 18.6 kB 🟢 -18.6 kB 🟢 -4.71 kB 🟢 -4.18 kB
assets/WidgetInputNumber-C2yJAnIN.js (new) 18.6 kB 🔴 +18.6 kB 🔴 +4.71 kB 🔴 +4.18 kB
assets/WidgetRecordAudio-jbfg6axA.js (removed) 17.3 kB 🟢 -17.3 kB 🟢 -4.95 kB 🟢 -4.44 kB
assets/WidgetRecordAudio-peAa9_gd.js (new) 17.3 kB 🔴 +17.3 kB 🔴 +4.95 kB 🔴 +4.42 kB
assets/Load3D-B5MClDUh.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.03 kB 🔴 +3.52 kB
assets/Load3D-R7jaANvV.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.03 kB 🟢 -3.52 kB
assets/load3d-73dbpiHH.js (removed) 14.7 kB 🟢 -14.7 kB 🟢 -4.2 kB 🟢 -3.64 kB
assets/load3d-CK89Hyt_.js (new) 14.7 kB 🔴 +14.7 kB 🔴 +4.2 kB 🔴 +3.64 kB
assets/LazyImage-2uMi-pR-.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.8 kB 🔴 +3.36 kB
assets/LazyImage-D-DMYEiT.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.8 kB 🟢 -3.35 kB
assets/AudioPreviewPlayer-DN7PUHYR.js (removed) 10.9 kB 🟢 -10.9 kB 🟢 -3.2 kB 🟢 -2.87 kB
assets/AudioPreviewPlayer-DOdxPlyT.js (new) 10.9 kB 🔴 +10.9 kB 🔴 +3.2 kB 🔴 +2.84 kB
assets/changeTracker-DM17nFEk.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.9 kB 🟢 -2.55 kB
assets/changeTracker-DvhTc_vz.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.89 kB 🔴 +2.55 kB
assets/nodeTemplates-B2Nd5Gjy.js (new) 9.3 kB 🔴 +9.3 kB 🔴 +3.26 kB 🔴 +2.87 kB
assets/nodeTemplates-XM6PVDrQ.js (removed) 9.3 kB 🟢 -9.3 kB 🟢 -3.27 kB 🟢 -2.87 kB
assets/InviteMemberDialogContent-BwhTwHOb.js (removed) 7.38 kB 🟢 -7.38 kB 🟢 -2.3 kB 🟢 -2 kB
assets/InviteMemberDialogContent-cC68eXbJ.js (new) 7.38 kB 🔴 +7.38 kB 🔴 +2.3 kB 🔴 +2 kB
assets/WidgetToggleSwitch-aBcC1iuD.js (new) 6.8 kB 🔴 +6.8 kB 🔴 +2.19 kB 🔴 +1.93 kB
assets/WidgetToggleSwitch-DysigGSg.js (removed) 6.8 kB 🟢 -6.8 kB 🟢 -2.19 kB 🟢 -1.93 kB
assets/Load3DConfiguration-CTng_ipq.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.91 kB 🔴 +1.68 kB
assets/Load3DConfiguration-DW5FZD3y.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.92 kB 🟢 -1.68 kB
assets/CreateWorkspaceDialogContent-CGCuauIL.js (removed) 5.53 kB 🟢 -5.53 kB 🟢 -2 kB 🟢 -1.74 kB
assets/CreateWorkspaceDialogContent-DGO4QJJg.js (new) 5.53 kB 🔴 +5.53 kB 🔴 +1.99 kB 🔴 +1.74 kB
assets/EditWorkspaceDialogContent-B8MzBQ5X.js (removed) 5.33 kB 🟢 -5.33 kB 🟢 -1.95 kB 🟢 -1.7 kB
assets/EditWorkspaceDialogContent-Bc28nII1.js (new) 5.33 kB 🔴 +5.33 kB 🔴 +1.95 kB 🔴 +1.71 kB
assets/ValueControlPopover-atP4ILWB.js (removed) 4.92 kB 🟢 -4.92 kB 🟢 -1.77 kB 🟢 -1.58 kB
assets/ValueControlPopover-Dxs9ou8_.js (new) 4.92 kB 🔴 +4.92 kB 🔴 +1.77 kB 🔴 +1.58 kB
assets/Preview3d-DKoYL1j2.js (new) 4.82 kB 🔴 +4.82 kB 🔴 +1.57 kB 🔴 +1.37 kB
assets/Preview3d-qYUsaGdr.js (removed) 4.82 kB 🟢 -4.82 kB 🟢 -1.57 kB 🟢 -1.37 kB
assets/CancelSubscriptionDialogContent-CQJQivvJ.js (removed) 4.79 kB 🟢 -4.79 kB 🟢 -1.79 kB 🟢 -1.57 kB
assets/CancelSubscriptionDialogContent-pIkE4g90.js (new) 4.79 kB 🔴 +4.79 kB 🔴 +1.79 kB 🔴 +1.57 kB
assets/DeleteWorkspaceDialogContent-Cs84f-12.js (removed) 4.23 kB 🟢 -4.23 kB 🟢 -1.64 kB 🟢 -1.42 kB
assets/DeleteWorkspaceDialogContent-DEE4SYII.js (new) 4.23 kB 🔴 +4.23 kB 🔴 +1.64 kB 🔴 +1.42 kB
assets/WidgetWithControl-CD6ceHwz.js (new) 4.11 kB 🔴 +4.11 kB 🔴 +1.78 kB 🔴 +1.61 kB
assets/WidgetWithControl-L-8Ch-F7.js (removed) 4.11 kB 🟢 -4.11 kB 🟢 -1.78 kB 🟢 -1.6 kB
assets/LeaveWorkspaceDialogContent-BZK_bIz4.js (new) 4.06 kB 🔴 +4.06 kB 🔴 +1.58 kB 🔴 +1.38 kB
assets/LeaveWorkspaceDialogContent-CmDNFFc1.js (removed) 4.06 kB 🟢 -4.06 kB 🟢 -1.58 kB 🟢 -1.38 kB
assets/RemoveMemberDialogContent-COUqlitl.js (new) 4.04 kB 🔴 +4.04 kB 🔴 +1.53 kB 🔴 +1.34 kB
assets/RemoveMemberDialogContent-DpmmMY-t.js (removed) 4.04 kB 🟢 -4.04 kB 🟢 -1.53 kB 🟢 -1.33 kB
assets/RevokeInviteDialogContent-CwxspMLn.js (removed) 3.96 kB 🟢 -3.96 kB 🟢 -1.55 kB 🟢 -1.36 kB
assets/RevokeInviteDialogContent-T6CA37Bi.js (new) 3.96 kB 🔴 +3.96 kB 🔴 +1.55 kB 🔴 +1.36 kB
assets/InviteMemberUpsellDialogContent-BdkKtIFo.js (new) 3.83 kB 🔴 +3.83 kB 🔴 +1.4 kB 🔴 +1.23 kB
assets/InviteMemberUpsellDialogContent-W77yq7jm.js (removed) 3.83 kB 🟢 -3.83 kB 🟢 -1.41 kB 🟢 -1.24 kB
assets/WidgetGalleria-DxUiq10J.js (new) 3.61 kB 🔴 +3.61 kB 🔴 +1.4 kB 🔴 +1.25 kB
assets/WidgetGalleria-SPp1oPpt.js (removed) 3.61 kB 🟢 -3.61 kB 🟢 -1.39 kB 🟢 -1.25 kB
assets/saveMesh-CfKCP38p.js (removed) 3.38 kB 🟢 -3.38 kB 🟢 -1.46 kB 🟢 -1.3 kB
assets/saveMesh-DtKsYHE9.js (new) 3.38 kB 🔴 +3.38 kB 🔴 +1.46 kB 🔴 +1.29 kB
assets/WidgetTextarea-Bty_kSxO.js (new) 3.13 kB 🔴 +3.13 kB 🔴 +1.29 kB 🔴 +1.14 kB
assets/WidgetTextarea-DHy8r_p4.js (removed) 3.13 kB 🟢 -3.13 kB 🟢 -1.29 kB 🟢 -1.14 kB
assets/cloudSessionCookie-DkPZCfqd.js (new) 3.1 kB 🔴 +3.1 kB 🔴 +1.09 kB 🔴 +964 B
assets/cloudSessionCookie-jAh-Tb-E.js (removed) 3.1 kB 🟢 -3.1 kB 🟢 -1.09 kB 🟢 -965 B
assets/WidgetImageCompare-BhCvAGlE.js (removed) 3.1 kB 🟢 -3.1 kB 🟢 -1.15 kB 🟢 -1.02 kB
assets/WidgetImageCompare-BV2GfN2g.js (new) 3.1 kB 🔴 +3.1 kB 🔴 +1.15 kB 🔴 +992 B
assets/WidgetMarkdown-BDbN_6SC.js (removed) 2.93 kB 🟢 -2.93 kB 🟢 -1.23 kB 🟢 -1.07 kB
assets/WidgetMarkdown-BhWgQvMw.js (new) 2.93 kB 🔴 +2.93 kB 🔴 +1.23 kB 🔴 +1.11 kB
assets/GlobalToast-BYrHODfU.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.07 kB
assets/GlobalToast-DA7XfoYN.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.03 kB
assets/WidgetColorPicker-B_W8QvWg.js (removed) 2.9 kB 🟢 -2.9 kB 🟢 -1.23 kB 🟢 -1.11 kB
assets/WidgetColorPicker-CZWZ2P2t.js (new) 2.9 kB 🔴 +2.9 kB 🔴 +1.23 kB 🔴 +1.11 kB
assets/MediaVideoTop-CWe5GlC-.js (removed) 2.77 kB 🟢 -2.77 kB 🟢 -1.13 kB 🟢 -1.01 kB
assets/MediaVideoTop-DU5vbYRh.js (new) 2.77 kB 🔴 +2.77 kB 🔴 +1.13 kB 🔴 +999 B
assets/WidgetChart-DWmL2FVZ.js (removed) 2.21 kB 🟢 -2.21 kB 🟢 -953 B 🟢 -826 B
assets/WidgetChart-FXoNjF90.js (new) 2.21 kB 🔴 +2.21 kB 🔴 +954 B 🔴 +824 B
assets/SubscribeToRun-BtlQDObw.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -1.01 kB 🟢 -888 B
assets/SubscribeToRun-DJLoAVwm.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1.01 kB 🔴 +886 B
assets/WidgetLayoutField-hoM3Zoym.js (removed) 1.95 kB 🟢 -1.95 kB 🟢 -875 B 🟢 -761 B
assets/WidgetLayoutField-OZHuH8dM.js (new) 1.95 kB 🔴 +1.95 kB 🔴 +877 B 🔴 +764 B
assets/WidgetInputText-CKovWbUh.js (removed) 1.86 kB 🟢 -1.86 kB 🟢 -872 B 🟢 -788 B
assets/WidgetInputText-DNGqyry1.js (new) 1.86 kB 🔴 +1.86 kB 🔴 +875 B 🔴 +788 B
assets/BaseViewTemplate-ioGWiWTo.js (removed) 1.78 kB 🟢 -1.78 kB 🟢 -925 B 🟢 -810 B
assets/BaseViewTemplate-sbUO3_hD.js (new) 1.78 kB 🔴 +1.78 kB 🔴 +924 B 🔴 +805 B
assets/CloudRunButtonWrapper-Cv8_CZ-V.js (new) 1.68 kB 🔴 +1.68 kB 🔴 +787 B 🔴 +716 B
assets/CloudRunButtonWrapper-h3JD_0qj.js (removed) 1.68 kB 🟢 -1.68 kB 🟢 -790 B 🟢 -706 B
assets/cloudBadges-DJUZnHgT.js (new) 1.37 kB 🔴 +1.37 kB 🔴 +708 B 🔴 +618 B
assets/cloudBadges-DrmkoUY2.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -707 B 🟢 -613 B
assets/cloudSubscription-BTErq25n.js (removed) 1.33 kB 🟢 -1.33 kB 🟢 -659 B 🟢 -571 B
assets/cloudSubscription-DTs67GVH.js (new) 1.33 kB 🔴 +1.33 kB 🔴 +660 B 🔴 +570 B
assets/widgetPropFilter-BzunHCm9.js (removed) 1.1 kB 🟢 -1.1 kB 🟢 -510 B 🟢 -431 B
assets/widgetPropFilter-COB1L9Pj.js (new) 1.1 kB 🔴 +1.1 kB 🔴 +511 B 🔴 +431 B
assets/Load3D-B-Ta69Ho.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -502 B 🟢 -445 B
assets/Load3D-CGAqvcU_.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +498 B 🔴 +445 B
assets/MediaOtherTop-Crhpst_D.js (new) 1.02 kB 🔴 +1.02 kB 🔴 +568 B 🔴 +472 B
assets/MediaTextTop-DLkC3BlW.js (new) 1.01 kB 🔴 +1.01 kB 🔴 +566 B 🔴 +479 B
assets/nightlyBadges-CtVaAGwG.js (removed) 1 kB 🟢 -1 kB 🟢 -536 B 🟢 -470 B
assets/nightlyBadges-CZ6IHdw0.js (new) 1 kB 🔴 +1 kB 🔴 +536 B 🔴 +475 B
assets/Load3dViewerContent-DEmgm7_F.js (new) 995 B 🔴 +995 B 🔴 +470 B 🔴 +416 B
assets/Load3dViewerContent-RzKqlGK-.js (removed) 995 B 🟢 -995 B 🟢 -473 B 🟢 -418 B
assets/SubscriptionPanelContentWorkspace-CmguYUSI.js (new) 932 B 🔴 +932 B 🔴 +438 B 🔴 +380 B
assets/SubscriptionPanelContentWorkspace-meiULGSQ.js (removed) 932 B 🟢 -932 B 🟢 -440 B 🟢 -384 B
assets/graphHasMissingNodes-CrJEfA6K.js (new) 761 B 🔴 +761 B 🔴 +373 B 🔴 +331 B
assets/graphHasMissingNodes-DSsak3ML.js (removed) 761 B 🟢 -761 B 🟢 -373 B 🟢 -330 B
assets/changeTracker-BOq2_rVU.js (new) 759 B 🔴 +759 B 🔴 +388 B 🔴 +339 B
assets/changeTracker-Cj5xt0Dr.js (removed) 759 B 🟢 -759 B 🟢 -389 B 🟢 -339 B
assets/WidgetLegacy-d1YMX8iv.js (removed) 747 B 🟢 -747 B 🟢 -388 B 🟢 -340 B
assets/WidgetLegacy-JZ84HPMw.js (new) 747 B 🔴 +747 B 🔴 +388 B 🔴 +335 B
assets/previousFullPath-BK6FBzE_.js (removed) 665 B 🟢 -665 B 🟢 -370 B 🟢 -314 B
assets/previousFullPath-DeIFnh1k.js (new) 665 B 🔴 +665 B 🔴 +367 B 🔴 +306 B
assets/WidgetInputNumber-B5LQh92S.js (removed) 469 B 🟢 -469 B 🟢 -264 B 🟢 -227 B
assets/WidgetInputNumber-D_lFhrqR.js (new) 469 B 🔴 +469 B 🔴 +263 B 🔴 +225 B
assets/AnimationControls-DfakB9G0.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-xVEnKQDa.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-BTnZwrs2.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-DhnNuB-i.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-CKD9vwNi.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BIWmUVEc.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BOt38VCw.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C0NcxRH3.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C2xuXGb5.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CmiKIQwc.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DMwP8S5e.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwBt3HhT.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-JX559A2n.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-n_2KJWcD.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-OO-8nFm9.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-wq2Y-YKn.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-BIWjk1ar.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-Dyp3uRaN.js 518 kB 518 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-OB6yTc-B.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-2i7QLsT_.js 173 kB 173 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bea7-6qW.js 122 kB 122 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BeTH0mS3.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bi3DS5iM.js 194 kB 194 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-bKh6GlOe.js 142 kB 142 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BPHgiozQ.js 147 kB 147 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BPx3-NfT.js 167 kB 167 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BvM2ORcM.js 160 kB 160 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BxnJ0R6I.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-ByhvqU28.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DroElPke.js 123 kB 123 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-D3QRJ6eZ.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-vXuump5i.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-XsW6Reb5.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-2U4KtUml.js 360 kB 360 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-5rcOJVex.js 391 kB 391 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BTBSP0IQ.js 480 kB 480 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BZEpP7w6.js 383 kB 383 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C-Tw-7I_.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C76rbmLh.js 441 kB 441 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CxxD1ymF.js 395 kB 395 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DciNsuYe.js 392 kB 392 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-G7wcMpUD.js 356 kB 356 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-nGdg-hIO.js 388 kB 388 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-xiPSrG6S.js 440 kB 440 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-Dz7QVY1n.js 3.65 kB 3.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-DLICfi3-.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-DCc1Zu30.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-0QdRDjph.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-B2wM6nig.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-Bomay1-S.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-pAmsiKmj.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DTUjK0ZE.js 445 B 445 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-Ch7Vnrxm.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-jn-1G6CA.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-BtuQMzwn.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 63 added / 61 removed

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

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

⚠️ Outside diff range comments (1)
src/platform/assets/components/MediaAssetCard.vue (1)

38-49: ⚠️ Potential issue | 🟡 Minor

Add proper props and emits declarations to MediaTextTop.vue and MediaOtherTop.vue, or remove unused prop/event bindings from the parent.

MediaTextTop.vue and MediaOtherTop.vue are template-only components without prop or emit declarations, yet the parent passes :asset, :context, and several events including @view, @download, @video-playing-state-changed, @video-controls-changed, and @image-loaded. Since these components don't use any of these props or emit any of these events, either:

  1. Add explicit defineProps and defineEmits declarations (even if empty) for documentation and type safety, or
  2. Remove the unused :context binding and event listeners from the parent component

Note: context is already provided to child components via provide() at line 243–248, making the prop binding redundant. Additionally, no component in the component hierarchy emits a @download event, so that listener should be removed.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/platform/assets/components/MediaAssetCard.vue` around lines 38 - 49, The
parent MediaAssetCard.vue is passing :asset, :context and several event
listeners to components returned by getTopComponent(previewKind) (used when
adaptedAsset exists and the template binding mounts the component) but
MediaTextTop.vue and MediaOtherTop.vue are template-only and lack
defineProps/defineEmits; either add explicit defineProps({ asset: Object,
context: Object? }) and
defineEmits(['view','download','video-playing-state-changed','video-controls-changed','image-loaded'])
to MediaTextTop.vue and MediaOtherTop.vue to document and type these bindings,
or remove the redundant bindings from MediaAssetCard.vue—specifically drop
:context (it's provided via provide()), remove the `@download` listener (no
emitter in hierarchy), and remove any unused `@video-playing-state-changed`,
`@video-controls-changed`, and `@image-loaded` handlers if those children don’t emit
them; keep handleZoomClick, actions.downloadAsset(), isVideoPlaying,
showVideoControls, and handleImageLoaded only if corresponding emits/props
exist.
🧹 Nitpick comments (4)
packages/shared-frontend-utils/src/formatUtil.test.ts (1)

104-112: Missing test coverage for yml, xml, log, markdown in TEXT_EXTENSIONS

The TEXT_EXTENSIONS constant includes yml, xml, log, and markdown, but none of these are covered by the text-file test group. Adding them closes a gap in case a future change accidentally removes them.

✅ Suggested additions
 it('should identify text file extensions correctly', () => {
   expect(getMediaTypeFromFilename('notes.txt')).toBe('text')
   expect(getMediaTypeFromFilename('readme.md')).toBe('text')
   expect(getMediaTypeFromFilename('data.json')).toBe('text')
   expect(getMediaTypeFromFilename('table.csv')).toBe('text')
   expect(getMediaTypeFromFilename('config.yaml')).toBe('text')
+  expect(getMediaTypeFromFilename('config.yml')).toBe('text')
+  expect(getMediaTypeFromFilename('schema.xml')).toBe('text')
+  expect(getMediaTypeFromFilename('debug.log')).toBe('text')
+  expect(getMediaTypeFromFilename('notes.markdown')).toBe('text')
 })
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/shared-frontend-utils/src/formatUtil.test.ts` around lines 104 -
112, The test suite in formatUtil.test.ts is missing coverage for
TEXT_EXTENSIONS entries 'yml', 'xml', 'log', and 'markdown'; update the 'text
files' test case that calls getMediaTypeFromFilename to include filenames
exercising those extensions (e.g., 'config.yml', 'schema.xml', 'app.log',
'notes.markdown' or '.md' variant) so assertions expect 'text' for each; ensure
you reference the same getMediaTypeFromFilename helper used in the file and keep
assertions consistent with existing ones to prevent regressions if
TEXT_EXTENSIONS is changed.
src/platform/assets/components/MediaAssetCard.vue (2)

155-155: PreviewKind may drift from MediaKind — verify alignment.

PreviewKind is derived from ReturnType<typeof getMediaTypeFromFilename>, while MediaKind is derived from the Zod schema. If getMediaTypeFromFilename ever returns a value not in MediaKind (or vice versa), these types will silently diverge, potentially causing type errors in adaptedAsset.kind (line 230) which expects MediaKind.

Consider deriving PreviewKind from MediaKind directly, or adding a compile-time assertion that the two types are assignable to each other.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/platform/assets/components/MediaAssetCard.vue` at line 155, PreviewKind
currently comes from ReturnType<typeof getMediaTypeFromFilename> and can drift
from the Zod-derived MediaKind, causing mismatches when assigning to
adaptedAsset.kind; fix by making PreviewKind derived from MediaKind (replace the
ReturnType-based alias with one that references MediaKind) or add a compile-time
mutual-assignability assertion between PreviewKind and MediaKind (use a
conditional type check that ensures PreviewKind extends MediaKind and MediaKind
extends PreviewKind) so the compiler will fail if they diverge; update
references to PreviewKind and ensure getMediaTypeFromFilename’s return type is
narrowed/annotated to match MediaKind if needed.

212-218: fileKind and previewKind are computed identically — consolidate to remove redundant reactive binding.

Both computed properties call getMediaTypeFromFilename(asset?.name || '') and return structurally equivalent types (MediaKind and PreviewKind both resolve to 'image' | 'video' | 'audio' | '3D' | 'text' | 'other'). This creates two separate reactive subscriptions for the same derivation, which is unnecessary.

Suggested consolidation
-const fileKind = computed((): MediaKind => {
-  return getMediaTypeFromFilename(asset?.name || '')
-})
-
-const previewKind = computed((): PreviewKind => {
-  return getMediaTypeFromFilename(asset?.name || '')
-})
+const fileKind = computed((): PreviewKind => {
+  return getMediaTypeFromFilename(asset?.name || '')
+})

Then use fileKind everywhere (including line 39's :is="getTopComponent(fileKind)").

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/platform/assets/components/MediaAssetCard.vue` around lines 212 - 218,
Consolidate the duplicate computed properties by removing previewKind and
reusing fileKind (computed via getMediaTypeFromFilename(asset?.name || ''))
wherever previewKind was used; update references such as the :is binding that
calls getTopComponent(previewKind) to use getTopComponent(fileKind) and ensure
the fileKind return type remains compatible with both MediaKind and PreviewKind
usages so you only maintain one reactive subscription.
src/platform/assets/components/MediaOtherTop.vue (1)

1-9: Props from the parent will fall through as HTML attributes on the root <div>.

The parent (MediaAssetCard.vue) binds :asset, :context, and several event listeners to whichever <component :is> is rendered. Since this is a template-only component with no props/emits defined, Vue's fallthrough attrs will attach them to the root <div>, producing meaningless asset="[object Object]" attributes in the DOM.

Consider adding a minimal script block to opt out:

Suggested fix
+<script setup lang="ts">
+defineOptions({ inheritAttrs: false })
+</script>
+
 <template>
   <div class="relative size-full overflow-hidden rounded">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/platform/assets/components/MediaOtherTop.vue` around lines 1 - 9, This
template-only component (MediaOtherTop.vue) is receiving parent props/events as
DOM attributes on the root <div> (from MediaAssetCard.vue); add a minimal script
to opt out of attribute fallthrough—either add a classic script with export
default { inheritAttrs: false } or in script setup call defineOptions({
inheritAttrs: false })—so props like :asset and :context and bound events are
not attached as meaningless attributes to the root element.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/components/sidebar/tabs/AssetsSidebarListView.vue`:
- Around line 145-151: getAssetPreviewUrl currently only returns preview_url for
mediaTypes 'image' and 'video', which discards valid previews for audio and 3D
assets; update the function getAssetPreviewUrl to also return asset.preview_url
when getAssetMediaType(asset) returns 'audio' or '3d' (or any other types that
may carry previews) so that waveform thumbnails or 3D render thumbnails are
honoured; ensure you reference the AssetItem.preview_url property and
getAssetMediaType(asset) and keep existing fallback to '' when preview_url is
absent.

---

Outside diff comments:
In `@src/platform/assets/components/MediaAssetCard.vue`:
- Around line 38-49: The parent MediaAssetCard.vue is passing :asset, :context
and several event listeners to components returned by
getTopComponent(previewKind) (used when adaptedAsset exists and the template
binding mounts the component) but MediaTextTop.vue and MediaOtherTop.vue are
template-only and lack defineProps/defineEmits; either add explicit
defineProps({ asset: Object, context: Object? }) and
defineEmits(['view','download','video-playing-state-changed','video-controls-changed','image-loaded'])
to MediaTextTop.vue and MediaOtherTop.vue to document and type these bindings,
or remove the redundant bindings from MediaAssetCard.vue—specifically drop
:context (it's provided via provide()), remove the `@download` listener (no
emitter in hierarchy), and remove any unused `@video-playing-state-changed`,
`@video-controls-changed`, and `@image-loaded` handlers if those children don’t emit
them; keep handleZoomClick, actions.downloadAsset(), isVideoPlaying,
showVideoControls, and handleImageLoaded only if corresponding emits/props
exist.

---

Nitpick comments:
In `@packages/shared-frontend-utils/src/formatUtil.test.ts`:
- Around line 104-112: The test suite in formatUtil.test.ts is missing coverage
for TEXT_EXTENSIONS entries 'yml', 'xml', 'log', and 'markdown'; update the
'text files' test case that calls getMediaTypeFromFilename to include filenames
exercising those extensions (e.g., 'config.yml', 'schema.xml', 'app.log',
'notes.markdown' or '.md' variant) so assertions expect 'text' for each; ensure
you reference the same getMediaTypeFromFilename helper used in the file and keep
assertions consistent with existing ones to prevent regressions if
TEXT_EXTENSIONS is changed.

In `@src/platform/assets/components/MediaAssetCard.vue`:
- Line 155: PreviewKind currently comes from ReturnType<typeof
getMediaTypeFromFilename> and can drift from the Zod-derived MediaKind, causing
mismatches when assigning to adaptedAsset.kind; fix by making PreviewKind
derived from MediaKind (replace the ReturnType-based alias with one that
references MediaKind) or add a compile-time mutual-assignability assertion
between PreviewKind and MediaKind (use a conditional type check that ensures
PreviewKind extends MediaKind and MediaKind extends PreviewKind) so the compiler
will fail if they diverge; update references to PreviewKind and ensure
getMediaTypeFromFilename’s return type is narrowed/annotated to match MediaKind
if needed.
- Around line 212-218: Consolidate the duplicate computed properties by removing
previewKind and reusing fileKind (computed via
getMediaTypeFromFilename(asset?.name || '')) wherever previewKind was used;
update references such as the :is binding that calls
getTopComponent(previewKind) to use getTopComponent(fileKind) and ensure the
fileKind return type remains compatible with both MediaKind and PreviewKind
usages so you only maintain one reactive subscription.

In `@src/platform/assets/components/MediaOtherTop.vue`:
- Around line 1-9: This template-only component (MediaOtherTop.vue) is receiving
parent props/events as DOM attributes on the root <div> (from
MediaAssetCard.vue); add a minimal script to opt out of attribute
fallthrough—either add a classic script with export default { inheritAttrs:
false } or in script setup call defineOptions({ inheritAttrs: false })—so props
like :asset and :context and bound events are not attached as meaningless
attributes to the root element.

Comment on lines +145 to +151
function getAssetPreviewUrl(asset: AssetItem): string {
const mediaType = getAssetMediaType(asset)
if (mediaType === 'image' || mediaType === 'video') {
return asset.preview_url || ''
}
return ''
}
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

preview_url suppressed for audio and 3D assets too, not just text/other

The PR description says only text/other use icon fallback, but getAssetPreviewUrl returns '' for all non-image/video types — audio and 3D included. If either media type ever carries a preview_url (e.g., a waveform thumbnail for audio, a rendered scene thumbnail for 3D), it will be silently discarded in the list view.

Verify this is intentional, and if so, consider updating the PR description to reflect the full scope of the change. If audio/3D previews should be honoured:

🔧 Narrowed fix if audio/3D should keep preview_url
 function getAssetPreviewUrl(asset: AssetItem): string {
   const mediaType = getAssetMediaType(asset)
-  if (mediaType === 'image' || mediaType === 'video') {
+  if (mediaType === 'image' || mediaType === 'video' || mediaType === 'audio' || mediaType === '3D') {
     return asset.preview_url || ''
   }
   return ''
 }
📝 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
function getAssetPreviewUrl(asset: AssetItem): string {
const mediaType = getAssetMediaType(asset)
if (mediaType === 'image' || mediaType === 'video') {
return asset.preview_url || ''
}
return ''
}
function getAssetPreviewUrl(asset: AssetItem): string {
const mediaType = getAssetMediaType(asset)
if (mediaType === 'image' || mediaType === 'video' || mediaType === 'audio' || mediaType === '3D') {
return asset.preview_url || ''
}
return ''
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/sidebar/tabs/AssetsSidebarListView.vue` around lines 145 -
151, getAssetPreviewUrl currently only returns preview_url for mediaTypes
'image' and 'video', which discards valid previews for audio and 3D assets;
update the function getAssetPreviewUrl to also return asset.preview_url when
getAssetMediaType(asset) returns 'audio' or '3d' (or any other types that may
carry previews) so that waveform thumbnails or 3D render thumbnails are
honoured; ensure you reference the AssetItem.preview_url property and
getAssetMediaType(asset) and keep existing fallback to '' when preview_url is
absent.

@benceruleanlu benceruleanlu merged commit 9184f9b into main Feb 21, 2026
34 checks passed
@benceruleanlu benceruleanlu deleted the fix/generated-assets-double-check-fallback branch February 21, 2026 09:27
@dosubot
Copy link

dosubot bot commented Feb 21, 2026

Related Documentation

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

How did I do? Any feedback?  Join Discord

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.

3 participants