{"version":"2.1.247","anchor":"plugin-rendered-dialogs-gain-buttons-and-choose-their-own-pl","canonical_anchor":"plugin-rendered-dialogs-gain-buttons-and-choose-their-own-pl","heading":"Plugin-rendered dialogs gain buttons and choose their own placement","tier":"notice","area":"Plugins","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.247\/e\/plugin-rendered-dialogs-gain-buttons-and-choose-their-own-pl","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.247","markdown":"### Plugin-rendered dialogs gain buttons and choose their own placement\n\nPlugin dialogs can now show buttons and appear as modals, pinned at the bottom, or inline.\n\n**What**\n\nDialogs that a plugin asks Claude Code to draw can now include `Button` elements, and each request kind decides where it appears: as a modal, pinned to the bottom, or inline in the transcript.\n\n**Details**\n\n- The validator that checks a plugin's dialog description has a dedicated `Button` branch with its own prop check, and button text counts against the same total-text ceiling as the rest of the tree.\n- Placement comes from a lookup per request kind returning `\"modal\"`, `\"bottom\"` or `\"inline\"`; requests carrying an `immediate` payload flag are pushed to the bottom.\n- A separate map decides whether a given request hides the normal input prompt while it is up.\n- These dialogs only render inside the new registry provider; outside it, rendering fails with an explicit error rather than drawing nothing.\n\n**Evidence**\n\n`A local_jsx dialog cannot render outside of a LocalJsxRegistryContext provider`\n\n- Area: Plugins\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 3\/5"}