Turn a FloatThemeScope into the props to carry it across a portal boundary: the scope class(es)
and the data-sxl-theme-* attrs to spread onto the portaled wrapper so it resolves the origin instance's
scoped tokens (THEMING-DESIGN §7). Shared by every element that portals out of its themed subtree —
FloatPopper (popups/menus) and the modal dialog wrapper alike, since a dialog portals to the same
theme-free container and must carry its theme the same way. Returns an empty result (no className, no
attrs) when the scope carries nothing, so the caller can apply its own fallback.
Turn a FloatThemeScope into the props to carry it across a portal boundary: the scope class(es) and the
data-sxl-theme-*attrs to spread onto the portaled wrapper so it resolves the origin instance's scoped tokens (THEMING-DESIGN §7). Shared by every element that portals out of its themed subtree — FloatPopper (popups/menus) and the modal dialog wrapper alike, since a dialog portals to the same theme-free container and must carry its theme the same way. Returns an empty result (no className, no attrs) when the scope carries nothing, so the caller can apply its own fallback.