Skip to content

fix: textarea stays disabled after link disconnect on promoted widgets#9199

Merged
christian-byrne merged 1 commit intomainfrom
fix/textarea-editable-v2
Feb 26, 2026
Merged

fix: textarea stays disabled after link disconnect on promoted widgets#9199
christian-byrne merged 1 commit intomainfrom
fix/textarea-editable-v2

Conversation

@christian-byrne
Copy link
Contributor

@christian-byrne christian-byrne commented Feb 25, 2026

Summary

Fix textarea widgets staying disabled after disconnecting a link on promoted widgets in subgraphs.

Changes

  • What: refreshNodeSlots used SafeWidgetData.name for slot metadata lookups, but for promoted widgets this is sourceWidgetName (the interior widget name), which doesn't match the subgraph node's input slot widget name. Added slotName field to SafeWidgetData to track the original LiteGraph widget name, and updated refreshNodeSlots to use slotName ?? name for correct matching.

Review Focus

The key change is the slotName field on SafeWidgetData — it's only populated when name !== widget.name (i.e., for promoted widgets). The refreshNodeSlots function now uses widget.slotName ?? widget.name to look up slot metadata, ensuring promoted widgets correctly update their linked state on disconnect.

Fixes #8818

┆Issue is synchronized with this Notion page by Unito

@christian-byrne christian-byrne requested a review from a team as a code owner February 25, 2026 08:24
@christian-byrne christian-byrne self-assigned this Feb 25, 2026
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Feb 25, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 25, 2026

📝 Walkthrough

Walkthrough

Adds an optional slotName to SafeWidgetData and updates slot metadata resolution to prefer it; adds tests verifying slotMetadata.linked reacts to link disconnects (including promoted-widget cases). The test suite appears duplicated in the diff.

Changes

Cohort / File(s) Summary
Implementation — Slot metadata resolution
src/composables/graph/useGraphNodeManager.ts
Add slotName?: string to SafeWidgetData; populate when original widget name differs; resolve slotInfo using widget.slotName if present, otherwise widget.name.
Tests — Widget slot reactivity
src/composables/graph/useGraphNodeManager.test.ts
Add new test suite "Widget slotMetadata reactivity on link disconnect" covering linked state, reactive disabled state, and promoted-widget name mismatch. Note: the suite is duplicated in the diff. Also add import createPromotedWidgetView from @/core/graph/subgraph/promotedWidgetView.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 I nibble at code where slot names hide,
I hop through links that once tangled stride.
Now slotName whispers which slot to find,
Links disconnect clean — no state left behind.
A little rabbit cheers, neatly unconfined 🥕✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the specific bug fix: textarea widgets staying disabled after link disconnect on promoted widgets.
Description check ✅ Passed The PR description covers all required sections: Summary, Changes with details, Review Focus, and linked issue reference.
Linked Issues check ✅ Passed The PR addresses issue #8818 by fixing misaligned option setting for textarea widgets on promoted widgets through proper slot metadata matching.
Out of Scope Changes check ✅ Passed All changes (slotName field addition, refreshNodeSlots logic update, and test suite additions) are directly scoped to fixing the textarea disabled-state issue.

✏️ 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/textarea-editable-v2

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

@github-actions
Copy link

github-actions bot commented Feb 25, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 02/25/2026, 10:07:50 AM UTC

Links

@github-actions
Copy link

github-actions bot commented Feb 25, 2026

🎭 Playwright: ✅ 549 passed, 0 failed · 4 flaky

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

@github-actions
Copy link

github-actions bot commented Feb 25, 2026

📦 Bundle: 4.41 MB gzip 🔴 +38 B

Details

Summary

  • Raw size: 20.7 MB baseline 20.7 MB — 🔴 +112 B
  • Gzip: 4.41 MB baseline 4.41 MB — 🔴 +38 B
  • Brotli: 3.41 MB baseline 3.41 MB — 🔴 +22 B
  • Bundles: 227 current • 227 baseline • 2 added / 2 removed

Category Glance
Graph Workspace 🔴 +112 B (971 kB) · Vendor & Third-Party ⚪ 0 B (8.84 MB) · Other ⚪ 0 B (7.7 MB) · Data & Services ⚪ 0 B (2.54 MB) · Panels & Settings ⚪ 0 B (435 kB) · Views & Navigation ⚪ 0 B (72.1 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-BlPOvsPo.js (removed) 17.9 kB 🟢 -17.9 kB 🟢 -6.34 kB 🟢 -5.51 kB
assets/index-BWXl4asj.js (new) 17.9 kB 🔴 +17.9 kB 🔴 +6.34 kB 🔴 +5.5 kB

Status: 1 added / 1 removed

Graph Workspace — 971 kB (baseline 970 kB) • 🔴 +112 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BnebAmQt.js (new) 971 kB 🔴 +971 kB 🔴 +209 kB 🔴 +158 kB
assets/GraphView-CexzTp6V.js (removed) 970 kB 🟢 -970 kB 🟢 -209 kB 🟢 -158 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudAuthTimeoutView-B8lrT1at.js 4.91 kB 4.91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudForgotPasswordView-DSyHol2A.js 5.56 kB 5.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudLayoutView-DnQlrhvb.js 6.43 kB 6.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudLoginView-ByUdEcum.js 11.4 kB 11.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSignupView-Dmb6gl1l.js 9.37 kB 9.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSorryContactSupportView-CY9LHUzS.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSubscriptionRedirectView-DsQBrM5i.js 4.75 kB 4.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSurveyView-K7xuLcSm.js 15.5 kB 15.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-De5xw-yi.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserCheckView-CQQDHuz2.js 8.41 kB 8.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserSelectView-DavpxsfJ.js 4.5 kB 4.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Panels & Settings — 435 kB (baseline 435 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AboutPanel-4bmNKAxG.js 9.79 kB 9.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudRemoteConfig-Dt0lQnZj.js 1.44 kB 1.44 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/config-Tm3IpjoS.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ExtensionPanel-DPkfvO_I.js 9.38 kB 9.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/KeybindingPanel-9UOunMQk.js 12.3 kB 12.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LegacyCreditsPanel-Cq7YCqiI.js 20.6 kB 20.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/refreshRemoteConfig-BALV4YsX.js 1.14 kB 1.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SecretsPanel-Cdd4Dwd3.js 21.5 kB 21.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ServerConfigPanel-BDrJ-H3G.js 6.44 kB 6.44 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-axAeoUrZ.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B2VYgS-a.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BAN61mfQ.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BNn9zn5v.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CIIZ9BHS.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CRqB5n8m.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Cs_NVkbc.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CYbBf6ct.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DhTbqRj2.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DW8FtJHC.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-FzjdIfFm.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanel-UEIySKCE.js 18.1 kB 18.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserPanel-CYzI4PP-.js 6.16 kB 6.16 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
User & Accounts — 16 kB (baseline 16 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-CZboWtnN.js 357 B 357 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auth-D5YLM5ue.js 3.4 kB 3.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/firebaseAuthStore-CBNp5Pam.js 788 B 788 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/PasswordFields-DLbVLg8O.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SignUpForm-DjSsX8qS.js 3.01 kB 3.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UpdatePasswordContent-5EOcXL-K.js 2.37 kB 2.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-CK1MFS2B.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Editors & Dialogs — 736 B (baseline 736 B) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-CK16V7Qo.js 736 B 736 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
UI Components — 47.1 kB (baseline 47.1 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/Button-_rljyWPY.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-3Sx8hN5O.js 1.24 kB 1.24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudFeedbackTopbarButton-CFNgLIag.js 1.59 kB 1.59 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyQueueButton-BLdHswOB.js 793 B 793 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyQueueButton-O1fxDdMJ.js 8.02 kB 8.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FormSearchInput-BMvJlldl.js 3.73 kB 3.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-CVilsRHA.js 5.94 kB 5.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscribeButton-DVGWQhXw.js 2.48 kB 2.48 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-DI3pRSdp.js 7.44 kB 7.44 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-CnQQLXB-.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useTerminalTabs-NmgHJdAE.js 9.84 kB 9.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-C7_gkZBQ.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Data & Services — 2.54 MB (baseline 2.54 MB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/api-B0Dfj--7.js 676 kB 676 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/audioService-BCSj5Qcn.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/bootstrapStore-BgnKoHR1.js 2.08 kB 2.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/dialogService-BD_158LK.js 725 B 725 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/dialogService-uv9EeoNN.js 1.74 MB 1.74 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/extensionStore-CfltnF2u.js 12.1 kB 12.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/keybindingService-CS1fklPf.js 6.52 kB 6.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/load3dService-BlhMSiJ2.js 91 kB 91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/releaseStore-em-j19U4.js 760 B 760 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/releaseStore-pl8b_B66.js 7.96 kB 7.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/serverConfigStore-CkFMhmxK.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settingStore-CNi4kKX7.js 744 B 744 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/userStore-BxYlCP48.js 1.85 kB 1.85 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/workflowDraftStore-Bhim3-YC.js 736 B 736 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
Utilities & Hooks — 55.5 kB (baseline 55.5 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/_plugin-vue_export-helper-c0As6Sx3.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/audioUtils-_dH-V21e.js 858 B 858 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-C2D2Hl5T.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-Clzmwvt4.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-Cddas8Zl.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/subscriptionCheckoutUtil-OaMvNWaY.js 2.53 kB 2.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCurrentUser-Wd1N7kJM.js 722 B 722 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useErrorHandling-B-_whQuI.js 1.5 kB 1.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-BurQ8r4O.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useFeatureFlags-CfxKVZwT.js 4.14 kB 4.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3d-C1OXs1Mp.js 14.6 kB 14.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3d-CKwhNdkC.js 859 B 859 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3dViewer-7vMloS_5.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3dViewer-DPfDR1-F.js 838 B 838 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useWorkspaceSwitch-B_4Z-FAu.js 1.25 kB 1.25 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useWorkspaceUI-CR08Rxha.js 3 kB 3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Vendor & Third-Party — 8.84 MB (baseline 8.84 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-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-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-Cj6OpvOm.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-BnCPTL0g.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-DVmi2O2Z.js 388 kB 388 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-BnYkbQDM.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-D2jVNnmE.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-DK6Ygydn.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.7 MB (baseline 7.7 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AnimationControls-CS8RJ8KB.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-8llC21jy.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/AudioPreviewPlayer-FgSglkhJ.js 10.9 kB 10.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-BTnZwrs2.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-C7TdQsa4.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CancelSubscriptionDialogContent-g57eRGM2.js 4.79 kB 4.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/changeTracker-ClL457EN.js 757 B 757 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/changeTracker-D1HfMGrj.js 9.38 kB 9.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudBadges-BkP5iEDK.js 1.37 kB 1.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudRunButtonWrapper-CxfMwOn5.js 1.68 kB 1.68 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudSessionCookie-DfdU2-6w.js 3.1 kB 3.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudSubscription-Q0c68gPr.js 1.33 kB 1.33 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-D9MrYETV.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-hCSVqQLq.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Bdca9E4N.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Boqbp4FE.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-ClFTZZY8.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CnE4PBoq.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CNvwc2P-.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CsOV8HcO.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DBggpNhX.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DC4TJj5_.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DPVHiFlP.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-eBbhcNBX.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-oGOH5erQ.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-htt0vt7m.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/core-CROtxbE6.js 72.7 kB 72.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CreateWorkspaceDialogContent-BlCfGDa-.js 5.53 kB 5.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CurrentUserPopoverWorkspace-CiX5P0ml.js 19.9 kB 19.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/DeleteWorkspaceDialogContent-BhZc5YVd.js 4.23 kB 4.23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/EditWorkspaceDialogContent-6xF7iok1.js 5.33 kB 5.33 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FreeTierDialogContent-a2ztIqLB.js 5.39 kB 5.39 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/GlobalToast-DsJSYMjK.js 2.91 kB 2.91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/graphHasMissingNodes-DiRBaEFL.js 761 B 761 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/groupNode-rNuk8hfI.js 71.8 kB 71.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-DtY8vzqB.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-k35Nu_-R.js 525 kB 525 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/InviteMemberDialogContent-fBEYX27v.js 7.38 kB 7.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/InviteMemberUpsellDialogContent-DRTdN1d4.js 3.82 kB 3.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LeaveWorkspaceDialogContent-DbGJYlwO.js 4.06 kB 4.06 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-CTbvj96D.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/load3d-debIGo3J.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-DpPvssjl.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3DConfiguration-BoBpb_lz.js 6.27 kB 6.27 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3DControls-DRi99MoG.js 30.9 kB 30.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3dViewerContent-Brfp6kF4.js 993 B 993 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3dViewerContent-CsNeEZP9.js 23 kB 23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-1z73i49i.js 127 kB 127 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BCR0ud7B.js 179 kB 179 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BQOQJL-T.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BvA8cB3F.js 148 kB 148 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CDjYBGc8.js 200 kB 200 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CK3DvL93.js 126 kB 126 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Csm5QLPb.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Dftwv9CD.js 146 kB 146 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DTEsru8O.js 151 kB 151 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-lPfR5YFT.js 165 kB 165 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-zKyLtJXx.js 173 kB 173 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-CouvCIvd.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-CJNtJ1Vf.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-CsrUK1I8.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-DT9GM-Zv.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-vLt-EA1h.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-pufIlXJs.js 2.77 kB 2.77 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nightlyBadges-D_TzKhaO.js 1 kB 1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs--tG2_kTy.js 390 kB 390 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B1CcRnYm.js 443 kB 443 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BOkmcPF-.js 397 kB 397 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C9THNc4O.js 442 kB 442 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CBfcBh4b.js 362 kB 362 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CZlGuvdG.js 385 kB 385 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DB-aHpeo.js 393 kB 393 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DPlU1YTi.js 358 kB 358 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-mmU8eLDX.js 409 kB 409 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-rItghg3p.js 483 kB 483 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-s5_Usl0F.js 393 kB 393 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeTemplates-Bsn7VylJ.js 9.29 kB 9.29 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/onboardingCloudRoutes-Cc7zneRG.js 5.41 kB 5.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-BRmRgwNy.js 3.65 kB 3.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Preview3d-BVeGko4x.js 4.81 kB 4.81 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-C_cYjFUN.js 1.39 kB 1.39 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/RemoveMemberDialogContent-BgG-MFCp.js 4.04 kB 4.04 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/RevokeInviteDialogContent-C10pqyf-.js 3.95 kB 3.95 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/saveMesh-fLUdhuzd.js 3.38 kB 3.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-D-D55K_n.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SignInContent-CzybVyou.js 18.9 kB 18.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-DtIjOzur.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-C6m7fecr.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-PwE2kea4.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscribeToRun-gArn_sVG.js 2.2 kB 2.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionBenefits-BYIJyGB1.js 2.01 kB 2.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanelContentWorkspace-B64JSS8U.js 920 B 920 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanelContentWorkspace-fi_plkWd.js 21.5 kB 21.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionRequiredDialogContent-DvNuSxd1.js 25.7 kB 25.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionRequiredDialogContentWorkspace-3LaJrSO_.js 46.3 kB 46.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/tierBenefits-BTiCjrdx.js 3.66 kB 3.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ValueControlPopover-BHGModup.js 4.92 kB 4.92 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-CMR8YZxL.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-NeEr3XWN.js 586 B 586 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-3ihy3W8s.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-B1dc4Mvs.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-DhNMsSAU.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-DJsye3-P.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetCurve-CNAR8Elf.js 9.35 kB 9.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-C6rgr8eT.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-CZz83z3_.js 6.95 kB 6.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCrop-Hrx9cLUq.js 22.1 kB 22.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber-BC-N8L3T.js 469 B 469 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber-DBKAFhee.js 18.7 kB 18.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-BxRXwRGF.js 1.86 kB 1.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-BDX3pgBi.js 1.98 kB 1.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLegacy-Clowb13Z.js 745 B 745 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-BryTE-VI.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-_HM7alVA.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetRecordAudio-DSUP20VN.js 17.3 kB 17.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetSelect-D0EdEgJN.js 58.1 kB 58.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-CyuPe5ty.js 3.96 kB 3.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-Du7wrnv6.js 6.8 kB 6.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-DjwSopYV.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetWithControl-BehSEEwJ.js 4.1 kB 4.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspacePanelContent-CNIWq_ZP.js 29.3 kB 29.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

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.

🧹 Nitpick comments (2)
src/composables/graph/useGraphNodeManager.ts (1)

385-388: Clear stale slotMetadata when a slot lookup misses.

At Line 387, metadata is only updated on matches. If a slot is removed/renamed, old slotMetadata can persist and leave linked-dependent UI state stale.

♻️ Suggested defensive update
 for (const widget of currentData.widgets ?? []) {
   const slotInfo = slotMetadata.get(widget.slotName ?? widget.name)
-  if (slotInfo) widget.slotMetadata = slotInfo
+  if (slotInfo) {
+    widget.slotMetadata = slotInfo
+  } else {
+    delete widget.slotMetadata
+  }
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/composables/graph/useGraphNodeManager.ts` around lines 385 - 388, The
loop that sets widget.slotMetadata only assigns when slotInfo is found, leaving
stale metadata when a slot lookup misses; in the loop over currentData.widgets
(where slotInfo = slotMetadata.get(widget.slotName ?? widget.name)) explicitly
clear or remove widget.slotMetadata (e.g., set to undefined or delete the
property) when slotInfo is falsy so renamed/removed slots don't retain old
metadata; update the block in useGraphNodeManager.ts that iterates
currentData.widgets to handle both match and miss cases for widget.slotMetadata.
src/composables/graph/useGraphNodeManager.test.ts (1)

184-229: Prefer real promotion setup over manual promoted-field injection.

At Line 199 and Line 200, mutating BaseWidget via unknown-cast works, but using the actual promotion path would reduce drift risk between test doubles and runtime promoted widget shape/type-guard behavior.

As per coding guidelines "Do not write tests that just test the mocks; ensure tests fail when code behaves unexpectedly."

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

In `@src/composables/graph/useGraphNodeManager.test.ts` around lines 184 - 229,
The test manually mutates the widget by casting to unknown and setting
sourceNodeId/sourceWidgetName on the BaseWidget (the `widget` returned by
`node.addWidget`) which diverges from runtime promoted-widget creation; instead,
use the real promotion API/path so `isPromotedWidgetView` and `safeWidgetMapper`
see the exact runtime shape (e.g., create the promoted input via the project’s
promotion helper such as promoteInput/promoteWidget or the node/graph method
that performs promotion rather than setting `sourceNodeId`/`sourceWidgetName`
directly) so the test exercises actual promotion behavior and removes the
unknown-cast mutations.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/composables/graph/useGraphNodeManager.test.ts`:
- Around line 184-229: The test manually mutates the widget by casting to
unknown and setting sourceNodeId/sourceWidgetName on the BaseWidget (the
`widget` returned by `node.addWidget`) which diverges from runtime
promoted-widget creation; instead, use the real promotion API/path so
`isPromotedWidgetView` and `safeWidgetMapper` see the exact runtime shape (e.g.,
create the promoted input via the project’s promotion helper such as
promoteInput/promoteWidget or the node/graph method that performs promotion
rather than setting `sourceNodeId`/`sourceWidgetName` directly) so the test
exercises actual promotion behavior and removes the unknown-cast mutations.

In `@src/composables/graph/useGraphNodeManager.ts`:
- Around line 385-388: The loop that sets widget.slotMetadata only assigns when
slotInfo is found, leaving stale metadata when a slot lookup misses; in the loop
over currentData.widgets (where slotInfo = slotMetadata.get(widget.slotName ??
widget.name)) explicitly clear or remove widget.slotMetadata (e.g., set to
undefined or delete the property) when slotInfo is falsy so renamed/removed
slots don't retain old metadata; update the block in useGraphNodeManager.ts that
iterates currentData.widgets to handle both match and miss cases for
widget.slotMetadata.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 482ad40 and 06ad7e7.

📒 Files selected for processing (2)
  • src/composables/graph/useGraphNodeManager.test.ts
  • src/composables/graph/useGraphNodeManager.ts

refreshNodeSlots used SafeWidgetData.name for slot metadata lookups.
For promoted widgets, name is sourceWidgetName (interior name) which
differs from the subgraph node's input slot widget name.

Add slotName field to SafeWidgetData to track the original LiteGraph
widget name, and use it in refreshNodeSlots for correct matching.

Amp-Thread-ID: https://ampcode.com/threads/T-019c93e3-1cef-72cc-b7cc-a2f067070ff6
@christian-byrne christian-byrne force-pushed the fix/textarea-editable-v2 branch from 06ad7e7 to f81f6ed Compare February 25, 2026 10:06
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.

🧹 Nitpick comments (1)
src/composables/graph/useGraphNodeManager.test.ts (1)

155-159: Simplify redundant boolean ternary.

linked ? true : false is equivalent to !!linked.

♻️ Proposed simplification
-      return widget?.slotMetadata?.linked ? true : false
+      return !!widget?.slotMetadata?.linked
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/composables/graph/useGraphNodeManager.test.ts` around lines 155 - 159, In
derivedDisabled, simplify the redundant ternary by converting the nullable
linked property to a boolean directly (e.g., use !!widget?.slotMetadata?.linked
or Boolean(widget?.slotMetadata?.linked)) instead of
"widget?.slotMetadata?.linked ? true : false"; update the computed that
references nodeData, widgets, widget and slotMetadata to use the boolean cast.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/composables/graph/useGraphNodeManager.test.ts`:
- Around line 155-159: In derivedDisabled, simplify the redundant ternary by
converting the nullable linked property to a boolean directly (e.g., use
!!widget?.slotMetadata?.linked or Boolean(widget?.slotMetadata?.linked)) instead
of "widget?.slotMetadata?.linked ? true : false"; update the computed that
references nodeData, widgets, widget and slotMetadata to use the boolean cast.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 06ad7e7 and f81f6ed.

📒 Files selected for processing (2)
  • src/composables/graph/useGraphNodeManager.test.ts
  • src/composables/graph/useGraphNodeManager.ts

@christian-byrne christian-byrne merged commit 2cb4c5e into main Feb 26, 2026
30 checks passed
@christian-byrne christian-byrne deleted the fix/textarea-editable-v2 branch February 26, 2026 04:50
christian-byrne added a commit that referenced this pull request Feb 27, 2026
#9199)

## Summary

Fix textarea widgets staying disabled after disconnecting a link on
promoted widgets in subgraphs.

## Changes

- **What**: `refreshNodeSlots` used `SafeWidgetData.name` for slot
metadata lookups, but for promoted widgets this is `sourceWidgetName`
(the interior widget name), which doesn't match the subgraph node's
input slot widget name. Added `slotName` field to `SafeWidgetData` to
track the original LiteGraph widget name, and updated `refreshNodeSlots`
to use `slotName ?? name` for correct matching.

## Review Focus

The key change is the `slotName` field on `SafeWidgetData` — it's only
populated when `name !== widget.name` (i.e., for promoted widgets). The
`refreshNodeSlots` function now uses `widget.slotName ?? widget.name` to
look up slot metadata, ensuring promoted widgets correctly update their
`linked` state on disconnect.

Fixes #8818

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9199-fix-textarea-stays-disabled-after-link-disconnect-on-promoted-widgets-3126d73d3650813db499c227e6587aca)
by [Unito](https://www.unito.io)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants