Skip to content

Add support for values factory function in widget select combo#8775

Merged
pythongosssss merged 5 commits intomainfrom
pysssss/widget-select-factory-values
Mar 13, 2026
Merged

Add support for values factory function in widget select combo#8775
pythongosssss merged 5 commits intomainfrom
pysssss/widget-select-factory-values

Conversation

@pythongosssss
Copy link
Member

@pythongosssss pythongosssss commented Feb 10, 2026

Summary

Adds support for values factory functions, e.g.

this.addWidget(
    "combo",
    "Dynamic",
    "",
    (e) => { },
    {
        values: () => {
            return getSomeValuesHere() 
        }
    }
)

Specifically for fixing KJNodes get/set

Changes

  • What: Check if object is a function, if so, calls it.

┆Issue is synchronized with this Notion page by Unito

@github-actions
Copy link

github-actions bot commented Feb 10, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 03/13/2026, 11:35:22 AM UTC

Links

@github-actions
Copy link

github-actions bot commented Feb 10, 2026

🎭 Playwright: ✅ 551 passed, 0 failed · 5 flaky

📊 Browser Reports
  • chromium: View Report (✅ 538 / ❌ 0 / ⚠️ 5 / ⏭️ 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)

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 10, 2026

📝 Walkthrough

Walkthrough

This PR introduces comprehensive unit tests for the WidgetSelectDefault component and modifies the component to support dynamic option re-evaluation. Event handlers (@show, @filter) on the SelectPlus component now trigger refreshOptions() to recompute selectOptions from the widget's configuration, replacing the previous computed getter pattern.

Changes

Cohort / File(s) Summary
Widget Tests & Component Updates
src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.test.ts, src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue
Added comprehensive test coverage for dynamic option resolution (function-valued options, re-evaluation on show/filter events). Modified component to use reactive ref pattern for selectOptions with explicit refreshOptions() method triggered by SelectPlus events, replacing the previous computed getter approach.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 When SelectPlus whispers "show" and "filter" calls out,
Our options refresh without a shadow of doubt!
From computed to reactive, dynamically free,
The widget now listens—a responsive spree! 🌟

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Description check ❓ Inconclusive The description is incomplete. It lacks a detailed 'Changes' section explaining implementation details and is missing 'Breaking' and 'Dependencies' subsections that may be needed. Expand the Changes section with specific implementation details (e.g., added event bindings, reactive ref changes) and clarify if there are any breaking changes or new dependencies.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: adding support for values factory functions in the widget select combo component.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch pysssss/widget-select-factory-values

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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 Feb 10, 2026

📦 Bundle: 4.61 MB gzip 🔴 +156 B

Details

Summary

  • Raw size: 21.6 MB baseline 21.6 MB — 🔴 +319 B
  • Gzip: 4.61 MB baseline 4.61 MB — 🔴 +156 B
  • Brotli: 3.56 MB baseline 3.56 MB — 🔴 +436 B
  • Bundles: 235 current • 235 baseline • 109 added / 109 removed

Category Glance
Other 🔴 +319 B (8.16 MB) · Vendor & Third-Party ⚪ 0 B (8.9 MB) · Data & Services ⚪ 0 B (2.79 MB) · Graph Workspace ⚪ 0 B (1.01 MB) · Panels & Settings ⚪ 0 B (441 kB) · Editors & Dialogs ⚪ 0 B (78.3 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-BRJ5OeUA.js (removed) 17.8 kB 🟢 -17.8 kB 🟢 -6.29 kB 🟢 -5.47 kB
assets/index-DPI7L9Q5.js (new) 17.8 kB 🔴 +17.8 kB 🔴 +6.29 kB 🔴 +5.43 kB

Status: 1 added / 1 removed

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

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-_ifEsIWf.js (removed) 1.01 MB 🟢 -1.01 MB 🟢 -213 kB 🟢 -161 kB
assets/GraphView-D-dwk6TM.js (new) 1.01 MB 🔴 +1.01 MB 🔴 +213 kB 🔴 +161 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-DFBrlxMy.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.81 kB
assets/CloudSurveyView-gBBl8yZf.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.82 kB
assets/CloudLoginView-BbISryAN.js (removed) 11.5 kB 🟢 -11.5 kB 🟢 -3.21 kB 🟢 -2.83 kB
assets/CloudLoginView-BV8cZYLx.js (new) 11.5 kB 🔴 +11.5 kB 🔴 +3.21 kB 🔴 +2.84 kB
assets/CloudSignupView-D3wSvk9k.js (new) 9.41 kB 🔴 +9.41 kB 🔴 +2.71 kB 🔴 +2.38 kB
assets/CloudSignupView-DPAogL4z.js (removed) 9.41 kB 🟢 -9.41 kB 🟢 -2.71 kB 🟢 -2.38 kB
assets/UserCheckView-BXwXqZJ1.js (new) 8.42 kB 🔴 +8.42 kB 🔴 +2.23 kB 🔴 +1.95 kB
assets/UserCheckView-DZ6j1CVj.js (removed) 8.42 kB 🟢 -8.42 kB 🟢 -2.22 kB 🟢 -1.94 kB
assets/CloudLayoutView-C5s96vZA.js (new) 6.56 kB 🔴 +6.56 kB 🔴 +2.17 kB 🔴 +1.89 kB
assets/CloudLayoutView-Dd18E74N.js (removed) 6.56 kB 🟢 -6.56 kB 🟢 -2.17 kB 🟢 -1.87 kB
assets/CloudForgotPasswordView-B5sEbgXV.js (removed) 5.59 kB 🟢 -5.59 kB 🟢 -1.95 kB 🟢 -1.72 kB
assets/CloudForgotPasswordView-ORailB7F.js (new) 5.59 kB 🔴 +5.59 kB 🔴 +1.95 kB 🔴 +1.72 kB
assets/CloudAuthTimeoutView-B0Dk3HW1.js (removed) 4.96 kB 🟢 -4.96 kB 🟢 -1.79 kB 🟢 -1.57 kB
assets/CloudAuthTimeoutView-BoEvkrKW.js (new) 4.96 kB 🔴 +4.96 kB 🔴 +1.79 kB 🔴 +1.58 kB
assets/CloudSubscriptionRedirectView-BbfS8f23.js (removed) 4.78 kB 🟢 -4.78 kB 🟢 -1.8 kB 🟢 -1.59 kB
assets/CloudSubscriptionRedirectView-hlwxm2Co.js (new) 4.78 kB 🔴 +4.78 kB 🔴 +1.8 kB 🔴 +1.59 kB
assets/UserSelectView-Dt3QHOqZ.js (new) 4.55 kB 🔴 +4.55 kB 🔴 +1.67 kB 🔴 +1.48 kB
assets/UserSelectView-xu_sZhPK.js (removed) 4.55 kB 🟢 -4.55 kB 🟢 -1.67 kB 🟢 -1.48 kB
assets/CloudSorryContactSupportView-CZs--wLE.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-B0KvsxR-.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-BLF0_Kt1.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.29 kB 🟢 -4.65 kB
assets/SecretsPanel-Ca3sStaB.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.29 kB 🔴 +4.66 kB
assets/LegacyCreditsPanel-BUX58iAA.js (removed) 20.7 kB 🟢 -20.7 kB 🟢 -5.59 kB 🟢 -4.92 kB
assets/LegacyCreditsPanel-DOFa3A0B.js (new) 20.7 kB 🔴 +20.7 kB 🔴 +5.59 kB 🔴 +4.92 kB
assets/SubscriptionPanel-BgloCUgb.js (removed) 18.8 kB 🟢 -18.8 kB 🟢 -4.79 kB 🟢 -4.21 kB
assets/SubscriptionPanel-CAhiw_P1.js (new) 18.8 kB 🔴 +18.8 kB 🔴 +4.79 kB 🔴 +4.22 kB
assets/KeybindingPanel-BuhQ-ce7.js (new) 15.2 kB 🔴 +15.2 kB 🔴 +4.11 kB 🔴 +3.65 kB
assets/KeybindingPanel-CA_j8qyE.js (removed) 15.2 kB 🟢 -15.2 kB 🟢 -4.11 kB 🟢 -3.66 kB
assets/AboutPanel-ChLUz2KO.js (removed) 11.4 kB 🟢 -11.4 kB 🟢 -3.19 kB 🟢 -2.87 kB
assets/AboutPanel-DRMxBcWN.js (new) 11.4 kB 🔴 +11.4 kB 🔴 +3.19 kB 🔴 +2.87 kB
assets/ExtensionPanel-BlNPmIfv.js (new) 9.42 kB 🔴 +9.42 kB 🔴 +2.67 kB 🔴 +2.36 kB
assets/ExtensionPanel-CheV3EB8.js (removed) 9.42 kB 🟢 -9.42 kB 🟢 -2.67 kB 🟢 -2.36 kB
assets/ServerConfigPanel-Bi9lkcs3.js (removed) 6.49 kB 🟢 -6.49 kB 🟢 -2.13 kB 🟢 -1.93 kB
assets/ServerConfigPanel-C98NYmkq.js (new) 6.49 kB 🔴 +6.49 kB 🔴 +2.14 kB 🔴 +1.94 kB
assets/UserPanel-CnuV2ZNX.js (new) 6.2 kB 🔴 +6.2 kB 🔴 +2.01 kB 🔴 +1.76 kB
assets/UserPanel-LVTj0vRV.js (removed) 6.2 kB 🟢 -6.2 kB 🟢 -2.01 kB 🟢 -1.76 kB
assets/cloudRemoteConfig-Cuk4JiEW.js (new) 1.48 kB 🔴 +1.48 kB 🔴 +725 B 🔴 +627 B
assets/cloudRemoteConfig-DlYPAWem.js (removed) 1.48 kB 🟢 -1.48 kB 🟢 -725 B 🟢 -628 B
assets/refreshRemoteConfig-CtyZy66q.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +522 B 🔴 +460 B
assets/refreshRemoteConfig-tTBxDb6-.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -522 B 🟢 -456 B
assets/config-BvvCTN9L.js 1.22 kB 1.22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BfQyLBDO.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BqbQ2NxP.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Bxm3tP8R.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-C7XU5YOb.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CcKRE9rR.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CKawpnbl.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CRfUBXVB.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Db_XIkOr.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DTRLf7Yk.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-vE0CQKZh.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-ZInMAnck.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 10 added / 10 removed

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-BIVkHBcb.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +994 B
assets/auth-MS3Wbtwe.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -988 B
assets/SignUpForm-B5jXYuHI.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.1 kB
assets/SignUpForm-BsDQwFLI.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.09 kB
assets/UpdatePasswordContent-BLZXGTme.js (new) 2.41 kB 🔴 +2.41 kB 🔴 +1.09 kB 🔴 +960 B
assets/UpdatePasswordContent-D1KZ0ziF.js (removed) 2.41 kB 🟢 -2.41 kB 🟢 -1.09 kB 🟢 -959 B
assets/firebaseAuthStore-Bt5vAGa4.js (new) 831 B 🔴 +831 B 🔴 +406 B 🔴 +366 B
assets/firebaseAuthStore-DBRQHiPW.js (removed) 831 B 🟢 -831 B 🟢 -409 B 🟢 -365 B
assets/auth-C0EA6aHS.js (new) 357 B 🔴 +357 B 🔴 +225 B 🔴 +214 B
assets/auth-DOpK1zKs.js (removed) 357 B 🟢 -357 B 🟢 -225 B 🟢 -212 B
assets/PasswordFields-Cf67SVrX.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-Btg7fxEx.js 1.59 kB 1.59 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useShareDialog-D-ExtiYq.js (removed) 77.5 kB 🟢 -77.5 kB 🟢 -16.6 kB 🟢 -14.2 kB
assets/useShareDialog-DrMTamGK.js (new) 77.5 kB 🔴 +77.5 kB 🔴 +16.6 kB 🔴 +14.2 kB
assets/useSubscriptionDialog-CnB3pcVJ.js (new) 779 B 🔴 +779 B 🔴 +397 B 🔴 +343 B
assets/useSubscriptionDialog-DjARWkLL.js (removed) 779 B 🟢 -779 B 🟢 -397 B 🟢 -344 B

Status: 2 added / 2 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-BRYgd29R.js (removed) 13.8 kB 🟢 -13.8 kB 🟢 -3.91 kB 🟢 -3.48 kB
assets/ComfyQueueButton-dja1J2JP.js (new) 13.8 kB 🔴 +13.8 kB 🔴 +3.9 kB 🔴 +3.48 kB
assets/useTerminalTabs-DnYmiXfv.js (new) 9.87 kB 🔴 +9.87 kB 🔴 +3.41 kB 🔴 +3.02 kB
assets/useTerminalTabs-rTXCMZMe.js (removed) 9.87 kB 🟢 -9.87 kB 🟢 -3.41 kB 🟢 -3.02 kB
assets/SubscribeButton-DXDS2QyT.js (removed) 2.34 kB 🟢 -2.34 kB 🟢 -1.01 kB 🟢 -883 B
assets/SubscribeButton-zxEQBkMo.js (new) 2.34 kB 🔴 +2.34 kB 🔴 +1.01 kB 🔴 +881 B
assets/cloudFeedbackTopbarButton-BtAe6WMD.js (removed) 1.42 kB 🟢 -1.42 kB 🟢 -746 B 🟢 -651 B
assets/cloudFeedbackTopbarButton-CfBYkj24.js (new) 1.42 kB 🔴 +1.42 kB 🔴 +744 B 🔴 +649 B
assets/ComfyQueueButton-gQCGuX5L.js (removed) 836 B 🟢 -836 B 🟢 -413 B 🟢 -366 B
assets/ComfyQueueButton-szLJfRML.js (new) 836 B 🔴 +836 B 🔴 +414 B 🔴 +370 B
assets/Button-CDsnTrw4.js 3.22 kB 3.22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-B4gOfrWd.js 1.11 kB 1.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FormSearchInput-DzHgSBr8.js 3.73 kB 3.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-C9ckhZ64.js 6.11 kB 6.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/toggle-group-Dv_H1vc5.js 3.83 kB 3.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge--TxN3ma0.js 7.39 kB 7.39 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-Dyw7wJA9.js 1.19 kB 1.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-B54s5Vpy.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.79 MB (baseline 2.79 MB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-Cq6Lt6B0.js (new) 1.95 MB 🔴 +1.95 MB 🔴 +438 kB 🔴 +328 kB
assets/dialogService-DDzSZ3hP.js (removed) 1.95 MB 🟢 -1.95 MB 🟢 -438 kB 🟢 -328 kB
assets/api-BvPXWD8I.js (new) 695 kB 🔴 +695 kB 🔴 +157 kB 🔴 +125 kB
assets/api-DJW5f7U_.js (removed) 695 kB 🟢 -695 kB 🟢 -157 kB 🟢 -125 kB
assets/load3dService-CH8RdGAv.js (new) 91.1 kB 🔴 +91.1 kB 🔴 +19.1 kB 🔴 +16.5 kB
assets/load3dService-DS9zmSw4.js (removed) 91.1 kB 🟢 -91.1 kB 🟢 -19.1 kB 🟢 -16.5 kB
assets/extensionStore-DNzQfsuJ.js (removed) 13.6 kB 🟢 -13.6 kB 🟢 -4.63 kB 🟢 -4.1 kB
assets/extensionStore-qLukNDnE.js (new) 13.6 kB 🔴 +13.6 kB 🔴 +4.64 kB 🔴 +4.09 kB
assets/workflowShareService-BoZ193-Q.js (new) 13.3 kB 🔴 +13.3 kB 🔴 +4.11 kB 🔴 +3.63 kB
assets/workflowShareService-CiCmlHS7.js (removed) 13.3 kB 🟢 -13.3 kB 🟢 -4.11 kB 🟢 -3.63 kB
assets/releaseStore-BIy4NAt5.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/releaseStore-DubsNsdn.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/keybindingService-BEr686Mw.js (new) 7.16 kB 🔴 +7.16 kB 🔴 +1.72 kB 🔴 +1.48 kB
assets/keybindingService-BfpPzn5m.js (removed) 7.16 kB 🟢 -7.16 kB 🟢 -1.72 kB 🟢 -1.48 kB
assets/bootstrapStore-DbCUGpRw.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -875 B 🟢 -792 B
assets/bootstrapStore-DxzLTavd.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +872 B 🔴 +796 B
assets/userStore-CJYJPDow.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -721 B 🟢 -637 B
assets/userStore-eqgSNNjT.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +721 B 🔴 +671 B
assets/audioService-BxYGVBY3.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +850 B 🔴 +729 B
assets/audioService-C3qXvPZW.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -851 B 🟢 -728 B
assets/releaseStore-60UvuJsi.js (new) 803 B 🔴 +803 B 🔴 +403 B 🔴 +358 B
assets/releaseStore-QvsHanSp.js (removed) 803 B 🟢 -803 B 🟢 -404 B 🟢 -358 B
assets/settingStore-CjeDCIBw.js (new) 787 B 🔴 +787 B 🔴 +405 B 🔴 +360 B
assets/settingStore-DzxklptV.js (removed) 787 B 🟢 -787 B 🟢 -405 B 🟢 -361 B
assets/workflowDraftStore-DkvTIoXj.js (new) 779 B 🔴 +779 B 🔴 +397 B 🔴 +350 B
assets/workflowDraftStore-Ib7ihwkG.js (removed) 779 B 🟢 -779 B 🟢 -397 B 🟢 -350 B
assets/dialogService-Bh8M_kLI.js (removed) 768 B 🟢 -768 B 🟢 -389 B 🟢 -342 B
assets/dialogService-DXG5Ahp0.js (new) 768 B 🔴 +768 B 🔴 +385 B 🔴 +342 B
assets/assetsStore-0hcXU3-Q.js (new) 765 B 🔴 +765 B 🔴 +389 B 🔴 +344 B
assets/assetsStore-DffmE5E0.js (removed) 765 B 🟢 -765 B 🟢 -392 B 🟢 -345 B
assets/serverConfigStore-i8JbF5tX.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 15 added / 15 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-C8T1ehQ_.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/useLoad3d-DtPn6uAj.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3dViewer-CPdx7vQY.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.19 kB 🟢 -2.83 kB
assets/useLoad3dViewer-CqMXh_vT.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.19 kB 🔴 +2.83 kB
assets/useFeatureFlags-ChrXXZXr.js (new) 4.86 kB 🔴 +4.86 kB 🔴 +1.37 kB 🔴 +1.17 kB
assets/useFeatureFlags-cTzpCDDZ.js (removed) 4.86 kB 🟢 -4.86 kB 🟢 -1.37 kB 🟢 -1.17 kB
assets/useWorkspaceUI-BPgvt8Or.js (removed) 3 kB 🟢 -3 kB 🟢 -823 B 🟢 -744 B
assets/useWorkspaceUI-BTSAgLzR.js (new) 3 kB 🔴 +3 kB 🔴 +823 B 🔴 +740 B
assets/subscriptionCheckoutUtil-TsO_dmb0.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +954 B
assets/subscriptionCheckoutUtil-UljvYoWs.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -959 B
assets/useErrorHandling-CDHsyEit.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -629 B 🟢 -535 B
assets/useErrorHandling-f1WWd7Py.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +630 B 🔴 +536 B
assets/useLoad3d-DLncYA7f.js (new) 902 B 🔴 +902 B 🔴 +444 B 🔴 +400 B
assets/useLoad3d-m5jgcJQg.js (removed) 902 B 🟢 -902 B 🟢 -440 B 🟢 -397 B
assets/useLoad3dViewer-B5j1i6Zq.js (new) 881 B 🔴 +881 B 🔴 +429 B 🔴 +388 B
assets/useLoad3dViewer-jT7IlJ5F.js (removed) 881 B 🟢 -881 B 🟢 -425 B 🟢 -388 B
assets/audioUtils-2daE-q0B.js (removed) 858 B 🟢 -858 B 🟢 -501 B 🟢 -422 B
assets/audioUtils-4XScm86J.js (new) 858 B 🔴 +858 B 🔴 +500 B 🔴 +401 B
assets/useCurrentUser-DI3-1jlg.js (new) 765 B 🔴 +765 B 🔴 +392 B 🔴 +343 B
assets/useCurrentUser-DK7v81nO.js (removed) 765 B 🟢 -765 B 🟢 -392 B 🟢 -343 B
assets/useWorkspaceSwitch-D3Q-e_m0.js (removed) 688 B 🟢 -688 B 🟢 -350 B 🟢 -296 B
assets/useWorkspaceSwitch-DFRyr8aD.js (new) 688 B 🔴 +688 B 🔴 +351 B 🔴 +297 B
assets/_plugin-vue_export-helper-C4xK3rHS.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/assetMetadataUtils-BOUbjmqE.js 2.61 kB 2.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-Dzwmca-S.js 8.72 kB 8.72 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-Clzmwvt4.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-CzcsgKaH.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-u0px2nND.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCopyToClipboard-DsCYbdFi.js 944 B 944 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-Cg9rV8n1.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 11 added / 11 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-Cp6hch1I.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-hHaxyObP.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-DNX73mqE.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-D5S6AC80.js 103 kB 103 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-B9hcW0fn.js 1.54 MB 1.54 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-BgyU4sWT.js 1.72 MB 1.72 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-DlFrLeZ5.js 428 kB 428 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-B-Fxd75p.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-C9679tdI.js 634 kB 634 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-DtiQ1dr9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-7Q5M-X2w.js 125 kB 125 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-BmNn97E7.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 — 8.16 MB (baseline 8.16 MB) • 🔴 +319 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-BLn-P2n4.js (new) 73.8 kB 🔴 +73.8 kB 🔴 +19.1 kB 🔴 +16.3 kB
assets/core-CixKPqYp.js (removed) 73.8 kB 🟢 -73.8 kB 🟢 -19 kB 🟢 -16.3 kB
assets/groupNode-BqfDz6Ps.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.7 kB 🟢 -15.6 kB
assets/groupNode-DjEapB-E.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.7 kB 🔴 +15.6 kB
assets/WidgetSelect-B6Ag69BA.js (new) 58.6 kB 🔴 +58.6 kB 🔴 +12.6 kB 🔴 +10.9 kB
assets/WidgetSelect-DKpDmBq1.js (removed) 58.3 kB 🟢 -58.3 kB 🟢 -12.5 kB 🟢 -10.8 kB
assets/SubscriptionRequiredDialogContentWorkspace-B7SRX-Kn.js (new) 46.2 kB 🔴 +46.2 kB 🔴 +8.65 kB 🔴 +7.51 kB
assets/SubscriptionRequiredDialogContentWorkspace-p4q3tcbW.js (removed) 46.2 kB 🟢 -46.2 kB 🟢 -8.65 kB 🟢 -7.51 kB
assets/WidgetPainter-D0VuLf9_.js (removed) 32.9 kB 🟢 -32.9 kB 🟢 -7.98 kB 🟢 -7.08 kB
assets/WidgetPainter-D8LkbsV9.js (new) 32.9 kB 🔴 +32.9 kB 🔴 +7.98 kB 🔴 +7.07 kB
assets/Load3DControls-BGyC2vyw.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.65 kB
assets/Load3DControls-dO0OJaoK.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.65 kB
assets/WorkspacePanelContent-BoT45UIm.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.16 kB 🟢 -5.44 kB
assets/WorkspacePanelContent-C6g94t5f.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.16 kB 🔴 +5.41 kB
assets/SubscriptionRequiredDialogContent-CYpD56PQ.js (new) 25.6 kB 🔴 +25.6 kB 🔴 +6.56 kB 🔴 +5.78 kB
assets/SubscriptionRequiredDialogContent-DGlqa-YL.js (removed) 25.6 kB 🟢 -25.6 kB 🟢 -6.56 kB 🟢 -5.78 kB
assets/Load3dViewerContent-BwF3fJSj.js (new) 23 kB 🔴 +23 kB 🔴 +5.19 kB 🔴 +4.5 kB
assets/Load3dViewerContent-D0lblwN2.js (removed) 23 kB 🟢 -23 kB 🟢 -5.19 kB 🟢 -4.5 kB
assets/WidgetImageCrop-CKCJHQZS.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.52 kB 🟢 -4.85 kB
assets/WidgetImageCrop-we7S9N93.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.52 kB 🔴 +4.87 kB
assets/SubscriptionPanelContentWorkspace-nFDMHDTk.js (removed) 22 kB 🟢 -22 kB 🟢 -5.11 kB 🟢 -4.49 kB
assets/SubscriptionPanelContentWorkspace-U16szE-o.js (new) 22 kB 🔴 +22 kB 🔴 +5.11 kB 🔴 +4.49 kB
assets/CurrentUserPopoverWorkspace-CZ3_5c4Q.js (removed) 20.5 kB 🟢 -20.5 kB 🟢 -4.94 kB 🟢 -4.41 kB
assets/CurrentUserPopoverWorkspace-ub5K9doP.js (new) 20.5 kB 🔴 +20.5 kB 🔴 +4.94 kB 🔴 +4.42 kB
assets/SignInContent-BV5MJjEP.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.77 kB 🔴 +4.18 kB
assets/SignInContent-D9KEXSXV.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.77 kB 🟢 -4.18 kB
assets/WidgetInputNumber-BJLJfwyN.js (removed) 18.1 kB 🟢 -18.1 kB 🟢 -4.64 kB 🟢 -4.12 kB
assets/WidgetInputNumber-BuWzmnqD.js (new) 18.1 kB 🔴 +18.1 kB 🔴 +4.64 kB 🔴 +4.12 kB
assets/WidgetRecordAudio-dgw6_vJQ.js (new) 17.4 kB 🔴 +17.4 kB 🔴 +5.02 kB 🔴 +4.49 kB
assets/WidgetRecordAudio-DYA67Ksp.js (removed) 17.4 kB 🟢 -17.4 kB 🟢 -5.02 kB 🟢 -4.49 kB
assets/Load3D-BZ4bsB4U.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.03 kB 🟢 -3.51 kB
assets/Load3D-CQT-LRWO.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.03 kB 🔴 +3.51 kB
assets/load3d-9VZM7veE.js (removed) 14.8 kB 🟢 -14.8 kB 🟢 -4.2 kB 🟢 -3.65 kB
assets/load3d-U0aZKu30.js (new) 14.8 kB 🔴 +14.8 kB 🔴 +4.21 kB 🔴 +3.65 kB
assets/AudioPreviewPlayer-DPZJCIr-.js (removed) 11 kB 🟢 -11 kB 🟢 -3.25 kB 🟢 -2.91 kB
assets/AudioPreviewPlayer-mFB2dn0p.js (new) 11 kB 🔴 +11 kB 🔴 +3.25 kB 🔴 +2.92 kB
assets/nodeTemplates-BIvbDONG.js (removed) 9.34 kB 🟢 -9.34 kB 🟢 -3.27 kB 🟢 -2.88 kB
assets/nodeTemplates-K0Cn0G_3.js (new) 9.34 kB 🔴 +9.34 kB 🔴 +3.27 kB 🔴 +2.88 kB
assets/InviteMemberDialogContent-BZFYtFix.js (new) 7.37 kB 🔴 +7.37 kB 🔴 +2.3 kB 🔴 +2.01 kB
assets/InviteMemberDialogContent-CXEyssnB.js (removed) 7.37 kB 🟢 -7.37 kB 🟢 -2.3 kB 🟢 -2.01 kB
assets/Load3DConfiguration-BFSlL9lc.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.91 kB 🔴 +1.68 kB
assets/Load3DConfiguration-DvDCklrx.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.91 kB 🟢 -1.68 kB
assets/onboardingCloudRoutes-BLrnpaFf.js (removed) 6.15 kB 🟢 -6.15 kB 🟢 -1.91 kB 🟢 -1.66 kB
assets/onboardingCloudRoutes-ZR2P1s8V.js (new) 6.15 kB 🔴 +6.15 kB 🔴 +1.91 kB 🔴 +1.66 kB
assets/CreateWorkspaceDialogContent-DcrlU6oC.js (new) 5.54 kB 🔴 +5.54 kB 🔴 +2 kB 🔴 +1.75 kB
assets/CreateWorkspaceDialogContent-Dun0IpH0.js (removed) 5.54 kB 🟢 -5.54 kB 🟢 -2 kB 🟢 -1.75 kB
assets/FreeTierDialogContent-2SbkW29r.js (new) 5.42 kB 🔴 +5.42 kB 🔴 +1.91 kB 🔴 +1.69 kB
assets/FreeTierDialogContent-BiqUCPFK.js (removed) 5.42 kB 🟢 -5.42 kB 🟢 -1.91 kB 🟢 -1.69 kB
assets/WidgetWithControl-9jRsHMru.js (new) 5.36 kB 🔴 +5.36 kB 🔴 +2.2 kB 🔴 +1.97 kB
assets/WidgetWithControl-DcRhBe2J.js (removed) 5.36 kB 🟢 -5.36 kB 🟢 -2.2 kB 🟢 -1.97 kB
assets/EditWorkspaceDialogContent-BYSYMpHg.js (new) 5.35 kB 🔴 +5.35 kB 🔴 +1.97 kB 🔴 +1.72 kB
assets/EditWorkspaceDialogContent-D2uIkfPY.js (removed) 5.35 kB 🟢 -5.35 kB 🟢 -1.96 kB 🟢 -1.71 kB
assets/Preview3d-CaYp_TiL.js (removed) 4.96 kB 🟢 -4.96 kB 🟢 -1.64 kB 🟢 -1.43 kB
assets/Preview3d-DLaAuTrP.js (new) 4.96 kB 🔴 +4.96 kB 🔴 +1.63 kB 🔴 +1.44 kB
assets/ValueControlPopover-By3IfbL-.js (new) 4.93 kB 🔴 +4.93 kB 🔴 +1.77 kB 🔴 +1.58 kB
assets/ValueControlPopover-DVUss9Nv.js (removed) 4.93 kB 🟢 -4.93 kB 🟢 -1.77 kB 🟢 -1.58 kB
assets/CancelSubscriptionDialogContent-Crwxm79l.js (removed) 4.81 kB 🟢 -4.81 kB 🟢 -1.8 kB 🟢 -1.58 kB
assets/CancelSubscriptionDialogContent-Db4wudmh.js (new) 4.81 kB 🔴 +4.81 kB 🔴 +1.8 kB 🔴 +1.58 kB
assets/DeleteWorkspaceDialogContent-DkVyxoGg.js (removed) 4.25 kB 🟢 -4.25 kB 🟢 -1.64 kB 🟢 -1.43 kB
assets/DeleteWorkspaceDialogContent-RVB3bj_o.js (new) 4.25 kB 🔴 +4.25 kB 🔴 +1.64 kB 🔴 +1.43 kB
assets/LeaveWorkspaceDialogContent-d49-t2Or.js (removed) 4.08 kB 🟢 -4.08 kB 🟢 -1.59 kB 🟢 -1.38 kB
assets/LeaveWorkspaceDialogContent-qhjIymFZ.js (new) 4.08 kB 🔴 +4.08 kB 🔴 +1.59 kB 🔴 +1.38 kB
assets/RemoveMemberDialogContent-Bzt9RIla.js (removed) 4.06 kB 🟢 -4.06 kB 🟢 -1.54 kB 🟢 -1.35 kB
assets/RemoveMemberDialogContent-CUm72j5g.js (new) 4.06 kB 🔴 +4.06 kB 🔴 +1.54 kB 🔴 +1.34 kB
assets/RevokeInviteDialogContent-BY-R46LC.js (new) 3.97 kB 🔴 +3.97 kB 🔴 +1.55 kB 🔴 +1.36 kB
assets/RevokeInviteDialogContent-CPXeqfmD.js (removed) 3.97 kB 🟢 -3.97 kB 🟢 -1.55 kB 🟢 -1.36 kB
assets/InviteMemberUpsellDialogContent-CAHtyuGj.js (removed) 3.86 kB 🟢 -3.86 kB 🟢 -1.42 kB 🟢 -1.25 kB
assets/InviteMemberUpsellDialogContent-n9g7XMhU.js (new) 3.86 kB 🔴 +3.86 kB 🔴 +1.42 kB 🔴 +1.25 kB
assets/tierBenefits-5PXw-CUJ.js (new) 3.66 kB 🔴 +3.66 kB 🔴 +1.31 kB 🔴 +1.17 kB
assets/tierBenefits-DeMkRcEq.js (removed) 3.66 kB 🟢 -3.66 kB 🟢 -1.31 kB 🟢 -1.17 kB
assets/saveMesh-BePTY-zR.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -1.47 kB 🟢 -1.31 kB
assets/saveMesh-BnvMUqrt.js (new) 3.42 kB 🔴 +3.42 kB 🔴 +1.47 kB 🔴 +1.31 kB
assets/cloudSessionCookie-ITsNx5YJ.js (new) 3.14 kB 🔴 +3.14 kB 🔴 +1.11 kB 🔴 +1.01 kB
assets/cloudSessionCookie-zaxIIQyY.js (removed) 3.14 kB 🟢 -3.14 kB 🟢 -1.11 kB 🟢 -1 kB
assets/GlobalToast-B9qi95eB.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.06 kB
assets/GlobalToast-Dkru5Esu.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.03 kB
assets/SubscribeToRun-Odqp8iRf.js (new) 2.06 kB 🔴 +2.06 kB 🔴 +949 B 🔴 +827 B
assets/SubscribeToRun-XNtyLg6q.js (removed) 2.06 kB 🟢 -2.06 kB 🟢 -950 B 🟢 -841 B
assets/CloudRunButtonWrapper-Cz_6ALIW.js (new) 1.72 kB 🔴 +1.72 kB 🔴 +806 B 🔴 +739 B
assets/CloudRunButtonWrapper-RLxaGdGu.js (removed) 1.72 kB 🟢 -1.72 kB 🟢 -805 B 🟢 -732 B
assets/cloudBadges-1ACajtxv.js (new) 1.54 kB 🔴 +1.54 kB 🔴 +794 B 🔴 +691 B
assets/cloudBadges-BLaIIlAf.js (removed) 1.54 kB 🟢 -1.54 kB 🟢 -793 B 🟢 -694 B
assets/previousFullPath-410kNy1i.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -651 B 🟢 -578 B
assets/previousFullPath-CZO4nYPl.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +650 B 🔴 +579 B
assets/cloudSubscription-CDsyJJwy.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -674 B 🟢 -581 B
assets/cloudSubscription-NYTc_9tR.js (new) 1.37 kB 🔴 +1.37 kB 🔴 +674 B 🔴 +585 B
assets/Load3D-DBAuJ_oE.js (removed) 1.11 kB 🟢 -1.11 kB 🟢 -517 B 🟢 -458 B
assets/Load3D-nThX1jpC.js (new) 1.11 kB 🔴 +1.11 kB 🔴 +519 B 🔴 +462 B
assets/nightlyBadges-B6whSV3X.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +549 B 🔴 +493 B
assets/nightlyBadges-C-PGKqBC.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -550 B 🟢 -488 B
assets/Load3dViewerContent-C7BEBX7e.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +489 B 🔴 +436 B
assets/Load3dViewerContent-DKy7-bQZ.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -486 B 🟢 -433 B
assets/SubscriptionPanelContentWorkspace-_yw4u78R.js (removed) 963 B 🟢 -963 B 🟢 -455 B 🟢 -396 B
assets/SubscriptionPanelContentWorkspace-CQKUt3kJ.js (new) 963 B 🔴 +963 B 🔴 +458 B 🔴 +397 B
assets/WidgetLegacy-Badqr4s3.js (new) 787 B 🔴 +787 B 🔴 +404 B 🔴 +352 B
assets/WidgetLegacy-C40Ek36E.js (removed) 787 B 🟢 -787 B 🟢 -403 B 🟢 -348 B
assets/changeTracker-NKEKWL7z.js (new) 763 B 🔴 +763 B 🔴 +389 B 🔴 +342 B
assets/changeTracker-yAh9n6VN.js (removed) 763 B 🟢 -763 B 🟢 -393 B 🟢 -341 B
assets/graphHasMissingNodes-5KFJG2eL.js (removed) 761 B 🟢 -761 B 🟢 -376 B 🟢 -331 B
assets/graphHasMissingNodes-Vz0bedh7.js (new) 761 B 🔴 +761 B 🔴 +376 B 🔴 +332 B
assets/AnimationControls-BJbsMbSG.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-zbTE6PEB.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-CREurdFv.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-CBLfDo11.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-Da55e1mo.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-D7-DPX58.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B263T0mS.js 17.3 kB 17.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Bghyd0Lh.js 16.5 kB 16.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BJ42IZdd.js 16.5 kB 16.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BT_6gpI-.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CgrNaCrU.js 16.4 kB 16.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-ChUjv_HG.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-dTh2lNoX.js 19.2 kB 19.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DuPpT3ev.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-nDiUmYC8.js 17 kB 17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-oUBtGrlW.js 15.6 kB 15.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-s62bKqb7.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-iJ2Gpnh7.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-B9oMOOwH.js 552 kB 552 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-nRwv5VM4.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Loader-DqEwymFo.js 1.14 kB 1.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-7ldeCXVv.js 142 kB 142 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BCnGXNlx.js 164 kB 164 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BHYXqIHA.js 161 kB 161 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bq4O9q7m.js 167 kB 167 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bzu4ZNWZ.js 194 kB 194 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CtLCVBWe.js 186 kB 186 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Dh_Qurzi.js 162 kB 162 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Dj-BTR_-.js 227 kB 227 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DozMGpwc.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DzL-b3qQ.js 203 kB 203 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-pEXTnq0E.js 170 kB 170 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-CN16pADK.js 1.83 kB 1.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-uat1AWK0.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-BuvPJhXs.js 1.87 kB 1.87 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-Lejn-MBp.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-BSKfmx1L.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-WhKRHkLf.js 2.78 kB 2.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/NightlySurveyController-COAvTr7F.js 8.92 kB 8.92 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-7OBck-nz.js 458 kB 458 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B5mgK59H.js 411 kB 411 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-bxbYjSw0.js 500 kB 500 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-ByZhGXW8.js 459 kB 459 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BZRR7pTo.js 403 kB 403 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cay4VJYh.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CFFGM1nr.js 423 kB 423 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CqYex9nB.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CsqA39b3.js 406 kB 406 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D_jQStz7.js 370 kB 370 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-sn26hl8g.js 373 kB 373 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-4Y59q1Nj.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-B83isiBl.js 9.34 kB 9.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-BQjGcE3h.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-Bjn2amW6.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-C0aGDOQV.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionBenefits-B6afyggK.js 2.01 kB 2.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Textarea-fsa38wWk.js 1.37 kB 1.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-ByWFGcRB.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DIRwAHBY.js 3.01 kB 3.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-aWm_WdMu.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-CZQndtfK.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-CrfZL3eK.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-BZStVx1d.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetCurve-DjdkIHnc.js 9.36 kB 9.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-BUIHLxjo.js 3.6 kB 3.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-DxaZ1_SF.js 7.35 kB 7.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-BZ5Jb1fX.js 2.89 kB 2.89 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-CrHq2zp5.js 2.15 kB 2.15 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-GwfUTE2m.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-C_wtEFyS.js 1.11 kB 1.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-DOyWtA5O.js 4.26 kB 4.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-BOn4oTIJ.js 3.65 kB 3.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-DzBxiY8I.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 50 added / 50 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

🤖 Fix all issues with AI agents
In `@src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue`:
- Around line 62-68: The default for the defineModel `modelValue` re-implements
value resolution; replace the manual logic with a call to the existing
`resolveValues` helper to avoid duplication: call
`resolveValues(props.widget.options?.values)`, then return the first element of
the resulting array (or '' when empty/undefined) so `modelValue` uses the same
resolution logic as the rest of the component.
🧹 Nitpick comments (1)
src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue (1)

56-60: resolveValues trusts the factory return type without validation.

Line 57 returns whatever the function produces, assuming it's string[]. If a caller passes a factory that returns something else (e.g., number[] or null), there's no runtime guard—just a misleading return type annotation.

Consider at least an Array.isArray check on the function result, consistent with the array branch on line 58:

Proposed fix
 function resolveValues(values: unknown): string[] {
-  if (typeof values === 'function') return values()
+  if (typeof values === 'function') {
+    const result: unknown = values()
+    return Array.isArray(result) ? result : []
+  }
   if (Array.isArray(values)) return values
   return []
 }

@pythongosssss pythongosssss marked this pull request as ready for review February 10, 2026 20:03
@pythongosssss pythongosssss requested a review from a team as a code owner February 10, 2026 20:03
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Feb 10, 2026

return []
})
const selectOptions = ref(resolveValues(props.widget.options?.values))
Copy link
Contributor

Choose a reason for hiding this comment

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

Should this be a computed?

@github-actions
Copy link

⚡ Performance Report

ℹ️ Collecting baseline variance data (0/5 runs). Significance will appear after 2 main branch runs.

Metric Baseline PR Δ
canvas-idle: style recalcs 12 12 +0%
canvas-idle: layouts 0 0 -100%
canvas-idle: task duration 382ms 348ms -9%
canvas-mouse-sweep: style recalcs 75 78 +4%
canvas-mouse-sweep: layouts 12 12 +3%
canvas-mouse-sweep: task duration 745ms 843ms +13%
dom-widget-clipping: style recalcs 13 15 +13%
dom-widget-clipping: layouts 0 0
dom-widget-clipping: task duration 340ms 356ms +4%
subgraph-dom-widget-clipping: style recalcs 50 49 -1%
subgraph-dom-widget-clipping: layouts 0 0 -100%
subgraph-dom-widget-clipping: task duration 397ms 384ms -3%
subgraph-idle: style recalcs 12 12 +0%
subgraph-idle: layouts 0 0 +0%
subgraph-idle: task duration 347ms 339ms -2%
subgraph-mouse-sweep: style recalcs 78 82 +6%
subgraph-mouse-sweep: layouts 16 16 +0%
subgraph-mouse-sweep: task duration 694ms 764ms +10%
Raw data
{
  "timestamp": "2026-03-13T11:38:45.598Z",
  "gitSha": "9f46f051f73a01f97e0d8d7171ffc42938809c78",
  "branch": "pysssss/widget-select-factory-values",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2027.7900000000102,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 10.594000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 348.947,
      "heapDeltaBytes": 1087488
    },
    {
      "name": "canvas-idle",
      "durationMs": 2029.1050000000155,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 11.369,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 348.254,
      "heapDeltaBytes": 784108
    },
    {
      "name": "canvas-idle",
      "durationMs": 2025.6469999999922,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 10.438,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 347.01000000000005,
      "heapDeltaBytes": 1533240
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1965.514000000013,
      "styleRecalcs": 78,
      "styleRecalcDurationMs": 44.591,
      "layouts": 12,
      "layoutDurationMs": 4.005,
      "taskDurationMs": 851.665,
      "heapDeltaBytes": 1101688
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1959.7909999999956,
      "styleRecalcs": 82,
      "styleRecalcDurationMs": 44.752,
      "layouts": 13,
      "layoutDurationMs": 3.599,
      "taskDurationMs": 945.95,
      "heapDeltaBytes": 1888012
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1802.507999999989,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 34.912,
      "layouts": 12,
      "layoutDurationMs": 3.324,
      "taskDurationMs": 730.68,
      "heapDeltaBytes": 1131684
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 558.5379999999986,
      "styleRecalcs": 15,
      "styleRecalcDurationMs": 10.066000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 354.696,
      "heapDeltaBytes": 6960084
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 567.8310000000124,
      "styleRecalcs": 16,
      "styleRecalcDurationMs": 13.180000000000001,
      "layouts": 1,
      "layoutDurationMs": 0.232,
      "taskDurationMs": 359.35200000000003,
      "heapDeltaBytes": 13239672
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 599.5240000000308,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 8.839,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 352.77599999999995,
      "heapDeltaBytes": 13222776
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 591.7750000000126,
      "styleRecalcs": 49,
      "styleRecalcDurationMs": 11.899999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 381.94700000000006,
      "heapDeltaBytes": -3419036
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 560.9409999999571,
      "styleRecalcs": 50,
      "styleRecalcDurationMs": 12.600999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 384.57800000000003,
      "heapDeltaBytes": 14682856
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 581.0950000000048,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 11.604,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 386.55999999999995,
      "heapDeltaBytes": 18959636
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2031.4300000000003,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 13.946999999999997,
      "layouts": 1,
      "layoutDurationMs": 0.31100000000000005,
      "taskDurationMs": 353.50399999999996,
      "heapDeltaBytes": 1296308
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1993.1150000000457,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 9.832999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 333.694,
      "heapDeltaBytes": 1261808
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2009.0289999999982,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.674,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 330.63300000000004,
      "heapDeltaBytes": 637596
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1691.2809999999752,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 35.418,
      "layouts": 16,
      "layoutDurationMs": 4.1,
      "taskDurationMs": 661.826,
      "heapDeltaBytes": -1127304
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 2009.116000000006,
      "styleRecalcs": 91,
      "styleRecalcDurationMs": 50.497,
      "layouts": 17,
      "layoutDurationMs": 4.836,
      "taskDurationMs": 943.1759999999999,
      "heapDeltaBytes": 161140
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1744.3230000000085,
      "styleRecalcs": 79,
      "styleRecalcDurationMs": 39.965,
      "layouts": 16,
      "layoutDurationMs": 4.583,
      "taskDurationMs": 688.01,
      "heapDeltaBytes": -1099264
    }
  ]
}

@christian-byrne
Copy link
Contributor

note (non-blocking): SimplifiedWidget uses options?: O defaulting to Record<string, any>, so the values property is effectively untyped when consumed by WidgetSelectDefault.vue. The litegraph types already have proper typing via ComboWidgetValues:

type ComboWidgetValues =
  | string[]
  | Record<string, string>
  | ((widget?: IComboWidget, node?: LGraphNode) => string[])

But this type information is lost during the simplification step, meaning resolveValues has to use unknown and runtime checks.

Ideally, SimplifiedWidget (or at least the combo specialization) would carry the ComboWidgetValues type through so the component gets proper type narrowing instead of runtime typeof checks.

Relevant files:

  • src/types/simplifiedWidget.ts - SimplifiedWidget<T, O> generic defaults O to Record<string, any>
  • src/lib/litegraph/src/types/widgets.ts - ComboWidgetValues and IComboWidget already have the right types
  • src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue - consumer that needs the type

@coderabbitai Make an Issue to improve SimplifiedWidget typing for combo widget values in a followup PR. The goal is to thread ComboWidgetValues (or an equivalent union type) through SimplifiedWidget options so that WidgetSelectDefault.vue gets type-safe access to values without needing unknown + runtime typeof checks. Include the file paths above as jumping-off points.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 13, 2026

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
gh issue create \
  --repo Comfy-Org/ComfyUI_frontend \
  --title "Improve SimplifiedWidget typing for combo widget values (thread ComboWidgetValues through options)" \
  --body "## Summary

Currently, \`SimplifiedWidget<T, O>\` (in \`src/types/simplifiedWidget.ts\`) defaults its options generic \`O\` to \`Record<string, any>\`, which means the \`values\` property accessed in \`WidgetSelectDefault.vue\` is effectively untyped at the component level.

The litegraph layer already has the correct union type defined:

\`\`\`typescript
// src/lib/litegraph/src/types/widgets.ts
type ComboWidgetValues =
  | string[]
  | Record<string, string>
  | ((widget?: IComboWidget, node?: LGraphNode) => string[])
\`\`\`

However, this type information is lost during the simplification step, forcing \`resolveValues()\` in \`WidgetSelectDefault.vue\` to use \`unknown\` and runtime \`typeof\` checks instead of benefiting from TypeScript's type narrowing.

## Goal

Thread \`ComboWidgetValues\` (or an equivalent union type) through \`SimplifiedWidget\` options — either via a combo-specific specialization or by constraining the options generic — so that \`WidgetSelectDefault.vue\` gets type-safe access to \`values\` without needing \`unknown\` + runtime \`typeof\` checks.

## Jumping-off Points

- \`src/types/simplifiedWidget.ts\` — \`SimplifiedWidget<T, O>\` generic, \`O\` defaults to \`Record<string, any>\`
- \`src/lib/litegraph/src/types/widgets.ts\` — \`ComboWidgetValues\` and \`IComboWidget\` already have the right types
- \`src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue\` — consumer that needs the type (currently uses runtime checks)

## Context

Identified during review of `#8775` (Add support for values factory function in widget select combo) by `@christian-byrne`.

PR: https://github.com/Comfy-Org/ComfyUI_frontend/pull/8775" \
  --assignee christian-byrne

Length of output: 57


@christian-byrne: Done! I've opened a follow-up issue here: #9874

The issue captures:

  • The root cause: SimplifiedWidget<T, O> defaulting O to Record<string, any>, losing the ComboWidgetValues union type
  • The goal: threading ComboWidgetValues (or an equivalent) through SimplifiedWidget options to give WidgetSelectDefault.vue proper type narrowing
  • All three jumping-off file paths you called out
  • A backlink to this PR (#8775) and attribution to you

🧠 Learnings used
Learnt from: dante01yoon
Repo: Comfy-Org/ComfyUI_frontend PR: 9742
File: src/components/input/SingleSelect.vue:70-86
Timestamp: 2026-03-11T09:16:39.665Z
Learning: In `src/components/input/SingleSelect.vue` (Comfy-Org/ComfyUI_frontend), the previous PrimeVue implementation hardcoded `option-label="name"` and `option-value="value"`. There was never an `optionLabel`/`optionValue` prop exposed to consumers. All callers pass `SelectOption[]` (i.e., `{ name: string, value: string }`). The new Reka UI implementation using `SelectItem`/`SelectItemText` with `opt.name`/`opt.value` preserves full API parity. Do not flag the hardcoded `{ name, value }` access as a regression or missing mapping props in code reviews for this component.

Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7459
File: src/lib/litegraph/src/canvas/LinkConnector.ts:875-881
Timestamp: 2026-02-23T19:49:55.224Z
Learning: ComfyUI_frontend TypeScript review preference: Prefer user-defined type guards (e.g., function isMovingInputLink(x): x is MovingInputLink) over inline type assertions when narrowing union types like RenderLinkUnion in src/lib/litegraph/**/*.ts. Apply especially in LinkConnector and related canvas classes to avoid casts and improve reuse.

Learnt from: jaeone94
Repo: Comfy-Org/ComfyUI_frontend PR: 9360
File: src/renderer/extensions/vueNodes/components/LGraphNode.vue:576-602
Timestamp: 2026-03-04T16:13:02.775Z
Learning: In Comfy-Org/ComfyUI_frontend, in LGraphNode.vue (src/renderer/extensions/vueNodes/components/LGraphNode.vue), the computed properties rootBorderShapeClass, selectionShapeClass, and beforeShapeClass intentionally only handle RenderShape.BOX and RenderShape.CARD explicitly, letting all other RenderShape variants (ROUND, CIRCLE, HollowCircle, ARROW, GRID) fall through to a default rounded case. This is correct because only Default, Box, and Card shapes are exposed to users as selectable node shapes via the right-click context menu; the remaining RenderShape variants are used internally for canvas slot rendering (e.g., optional input dots) and are never applied as node shapes. Do not flag the missing explicit cases as an issue.

Learnt from: jaeone94
Repo: Comfy-Org/ComfyUI_frontend PR: 9464
File: src/stores/executionErrorStore.ts:181-197
Timestamp: 2026-03-06T13:49:27.376Z
Learning: In ComfyUI_frontend, `value_not_in_list` errors are only raised for Combo/dropdown widgets whose UI constrains selection to server-validated options. It is therefore safe to auto-clear `value_not_in_list` errors in `clearSimpleWidgetErrorIfValid` on `onWidgetChanged` without revalidating list membership, because any change event inherently carries a valid option. The stale-options edge case cannot be triggered via a widget change event and will resurface on the next execution run.

Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 8594
File: src/lib/litegraph/src/widgets/BaseWidget.ts:146-155
Timestamp: 2026-02-06T09:27:31.576Z
Learning: In the ComfyUI frontend codebase: `LGraphNode.removeWidget()` (and the `widget.onRemove?.()` hook) is called during subgraph conversion operations where widgets are being moved or restructured, not just when they're being permanently deleted. Therefore, widget unregistration from `widgetValueStore` should not be tied to `onRemove`, as this would cause premature state loss during legitimate graph restructuring operations.

@christian-byrne christian-byrne added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch core/1.41 Backport PRs for core 1.41 cloud/1.41 Backport PRs for cloud 1.41 labels Mar 13, 2026
Copy link
Contributor

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

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

LGTM!

@pythongosssss pythongosssss merged commit 1054503 into main Mar 13, 2026
44 of 46 checks passed
@pythongosssss pythongosssss deleted the pysssss/widget-select-factory-values branch March 13, 2026 16:47
github-actions bot pushed a commit that referenced this pull request Mar 13, 2026
## Summary

Adds support for values factory functions, e.g.
```
this.addWidget(
    "combo",
    "Dynamic",
    "",
    (e) => { },
    {
        values: () => {
            return getSomeValuesHere() 
        }
    }
)
```

Specifically for fixing KJNodes get/set

## Changes

- **What**:  Check if object is a function, if so, calls it.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8775-Add-support-for-values-factory-function-in-widget-select-combo-3036d73d3650819bb4e4f9181445cb1d)
by [Unito](https://www.unito.io)
github-actions bot pushed a commit that referenced this pull request Mar 13, 2026
## Summary

Adds support for values factory functions, e.g.
```
this.addWidget(
    "combo",
    "Dynamic",
    "",
    (e) => { },
    {
        values: () => {
            return getSomeValuesHere() 
        }
    }
)
```

Specifically for fixing KJNodes get/set

## Changes

- **What**:  Check if object is a function, if so, calls it.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8775-Add-support-for-values-factory-function-in-widget-select-combo-3036d73d3650819bb4e4f9181445cb1d)
by [Unito](https://www.unito.io)
@comfy-pr-bot
Copy link
Member

@pythongosssss Successfully backported to #9882

@comfy-pr-bot
Copy link
Member

@pythongosssss Successfully backported to #9883

@github-actions github-actions bot removed the needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch label Mar 13, 2026
christian-byrne pushed a commit that referenced this pull request Mar 13, 2026
…et select combo (#9883)

Backport of #8775 to `cloud/1.41`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9883-backport-cloud-1-41-Add-support-for-values-factory-function-in-widget-select-combo-3226d73d3650817186b8c8827b123140)
by [Unito](https://www.unito.io)

Co-authored-by: pythongosssss <125205205+pythongosssss@users.noreply.github.com>
christian-byrne pushed a commit that referenced this pull request Mar 13, 2026
…t select combo (#9882)

Backport of #8775 to `core/1.41`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9882-backport-core-1-41-Add-support-for-values-factory-function-in-widget-select-combo-3226d73d3650812ca13ac9755d33901b)
by [Unito](https://www.unito.io)

Co-authored-by: pythongosssss <125205205+pythongosssss@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cloud/1.41 Backport PRs for cloud 1.41 core/1.41 Backport PRs for core 1.41 size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants