Repository navigation
Conversation
…e the body inline The dialog path goes back to SettingsDialog. Sidebar, phone selector and panels move to CloudSettingsBody, which inline mode wraps in a TabsRoot. A second mount finds the first through the saved host, so a target in a shadow root is replaced too, and inline close leaves focus to the host.
aerodeval
force-pushed
the
feat/cloud-settings-inline-mount
branch
from
October 31, 2026 11:08
fd710a9 to
7e8b73c
Compare
aerodeval
marked this pull request as ready for review
October 31, 2026 11:09
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
An app that has its own settings page can show the Cloud Settings panels inside it, instead of opening a second dialog on top.
openCloudSettingsandmountCloudSettingstake atargetelement. The runtime appends the custom element to it and renders the panels without the dialog: no backdrop, no frame, no close button, filling the element's height.With one panel, the sidebar and the phone panel selector are not shown, so the host's own navigation stays the only one. With several panels, the sidebar shows inside the element. Without
target, nothing changes.cloud-sdk:target?: HTMLElementonCloudSettingsOptions, README section.in-app-embed: the sidebar, phone selector, and panels move toCloudSettingsBody.vue. The dialog still usesSettingsDialog, unchanged. Inline wraps the same body in aTabsRoot.mountCloudSettingsappends totargetand marks the elementinline.:host([inline])fills its container.targetin a shadow root is replaced, not duplicated. Inline close does not move focus. The host page owns focus.dashboard/e2e: inline with one panel (no dialog, no tabs, no phone selector, focus stays put on close), inline with two panels in a shadow root (sidebar and phone selector show, a second mount replaces the first, a popup replaces the inline UI), and the popup does not get the inline attributes.cloud-sdk/tests/embed.html: a "Mount Billing inline" button for trying it with sample data.Inline in a host modal
Helpdesk mounts the panel inside its own reka modal. The Cloud UI is in a shadow root, and reka's layer and focus checks look only at the light DOM. Without fixes, Tab skipped the panel, Esc closed the Cloud dialog and the Helpdesk modal together, Cloud menus closed on the click that opened them, and a click outside a Cloud menu did not close it. For an inline mount, the runtime now:
overlay-openon the element while a Cloud menu or dialog is open. The host ignores its modal close while this attribute exists. The README shows the one-line guard.All of this is in
trackInlineinruntime.ts, and it stops on close. The popup does not use it.The SDK release is a separate commit.
First use: a Frappe Cloud tab in Helpdesk's settings modal (frappe/helpdesk#3940 adds the trial card that opens the dialog today).
Before
Manage billing in Helpdesk opens the Cloud Settings dialog over the app.
After
The same panel mounted inline in Helpdesk's settings modal, under a Frappe Cloud group.