feat(floating): cascade the canonical gap to all menus + panels

Stamp `data-floating-gap` on every floating content so the token-driven offset
(the foundation from the previous commit) drives the whole set, replacing the
hardcoded per-component sideOffsets (0/4/6/8):
- menus (dropdown, context, their sub-menus, menubar, select, navigation-menu) =
  flush (`menu`, gap 0);
- panels (combobox, link-preview, popover, and the 5 pickers via composed
  PopoverContent) = `panel` (gap --space-1-5).

The stamp is CONDITIONAL (`sideOffset === undefined ? archetype : undefined`,
matching split-button): a consumer-set `sideOffset` still wins (the Popover /
picker demos document `sideOffset={N}`); only the default falls through to the
canonical token. The pickers default their `sideOffset` to undefined so they
follow the panel token instead of a hardcoded 6.

Verified in-browser: navigation-menu (demo sets no sideOffset) stamps
`data-floating-gap="menu"` (STAMP branch); combobox / date-picker / dropdown
(demos set sideOffset) stamp nothing (SUPPRESS branch -- override respected). The
token-driven offset itself was validated in the pilot commit. check 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
active-uix
dev 4 months ago
parent 1590684c2e
commit d229447a33

@ -8,7 +8,7 @@
let {
size,
align = 'start',
sideOffset = 6,
sideOffset,
collisionPadding = 12,
children: bodyContent,
...rest

@ -40,6 +40,7 @@
style={composedStyle}
data-list-surface=""
data-depth="overlay"
data-floating-gap={rest.sideOffset === undefined ? 'panel' : undefined}
data-size={resolvedSize}
data-variant={resolvedVariant}
data-color={resolvedColor}

@ -22,7 +22,7 @@
setListSurfaceSizeContext({ getSize: () => resolvedSize });
</script>
<ContextMenu.Content data-stagger="" data-list-surface="" data-depth="overlay" {...rest} data-size={resolvedSize}>
<ContextMenu.Content data-stagger="" data-list-surface="" data-depth="overlay" data-floating-gap={rest.sideOffset === undefined ? 'menu' : undefined} {...rest} data-size={resolvedSize}>
{#snippet children(snippetProps)}
{@render bodyContent?.(snippetProps)}
{/snippet}

@ -20,7 +20,7 @@
const resolvedSize = $derived(eidos.resolve(size ?? sizeCtx?.getSize(), 'md'));
</script>
<ContextMenu.SubContent data-stagger="" data-list-surface="" data-depth="overlay" {...rest} data-size={resolvedSize}>
<ContextMenu.SubContent data-stagger="" data-list-surface="" data-depth="overlay" data-floating-gap={rest.sideOffset === undefined ? 'menu' : undefined} {...rest} data-size={resolvedSize}>
{#snippet children(snippetProps)}
{@render bodyContent?.(snippetProps)}
{/snippet}

@ -9,7 +9,7 @@
let {
size,
align = 'end',
sideOffset = 6,
sideOffset,
collisionPadding = 12,
width,
minWidth,

@ -9,7 +9,7 @@
let {
size,
align = 'end',
sideOffset = 6,
sideOffset,
collisionPadding = 12,
width,
minWidth,

@ -34,7 +34,7 @@
setListSurfaceSizeContext({ getSize: () => resolvedSize });
</script>
<DropdownMenu.Content data-stagger="" data-list-surface="" data-depth="overlay" {...rest} data-size={resolvedSize}>
<DropdownMenu.Content data-stagger="" data-list-surface="" data-depth="overlay" data-floating-gap={rest.sideOffset === undefined ? 'menu' : undefined} {...rest} data-size={resolvedSize}>
{#snippet children(snippetProps)}
{@render bodyContent?.(snippetProps)}
{/snippet}

@ -21,7 +21,7 @@
const resolvedSize = $derived(eidos.resolve(size ?? sizeCtx?.getSize(), 'md'));
</script>
<DropdownMenu.SubContent data-stagger="" data-list-surface="" data-depth="overlay" {...rest} data-size={resolvedSize}>
<DropdownMenu.SubContent data-stagger="" data-list-surface="" data-depth="overlay" data-floating-gap={rest.sideOffset === undefined ? 'menu' : undefined} {...rest} data-size={resolvedSize}>
{#snippet children(snippetProps)}
{@render bodyContent?.(snippetProps)}
{/snippet}

@ -22,7 +22,7 @@
const resolvedSize = $derived(eidos.resolve(size, 'md'));
</script>
<LinkPreview.Content data-depth="overlay" {...rest} data-size={resolvedSize}>
<LinkPreview.Content data-depth="overlay" data-floating-gap={rest.sideOffset === undefined ? 'panel' : undefined} {...rest} data-size={resolvedSize}>
{#snippet children(snippetProps)}
{@render bodyContent?.(snippetProps)}
{/snippet}

@ -30,7 +30,7 @@
`DropdownMenu.Item` `data-animation-style="fade"` (re-used as Menubar.Item)
already apply — this marker is all that's needed. See dropdown-menu README → Motion.
-->
<Menubar.Content {...passthrough} data-stagger="" data-list-surface="" data-depth="overlay" data-size={resolvedSize}>
<Menubar.Content {...passthrough} data-stagger="" data-list-surface="" data-depth="overlay" data-floating-gap={passthrough.sideOffset === undefined ? 'menu' : undefined} data-size={resolvedSize}>
{#snippet children(snippetProps)}
{@render bodyContent?.(snippetProps)}
{/snippet}

@ -4,4 +4,4 @@
let { children, ...rest }: NavigationMenuContentProps = $props();
</script>
<NavigationMenu.Content data-depth="overlay" {...rest}>{@render children?.()}</NavigationMenu.Content>
<NavigationMenu.Content data-depth="overlay" data-floating-gap={rest.sideOffset === undefined ? 'menu' : undefined} {...rest}>{@render children?.()}</NavigationMenu.Content>

@ -74,7 +74,7 @@
style={composedStyle}
data-size={resolvedSize}
data-depth="overlay"
data-floating-gap="panel"
data-floating-gap={rest.sideOffset === undefined ? 'panel' : undefined}
data-animation-style={motion === 'none' ? undefined : motion}
>
{#snippet children(snippetProps)}

@ -35,6 +35,7 @@
style={composedStyle}
data-list-surface=""
data-depth="overlay"
data-floating-gap={rest.sideOffset === undefined ? 'menu' : undefined}
data-size={resolvedSize}
data-variant={resolvedVariant}
data-color={resolvedColor}

@ -9,7 +9,7 @@
let {
size,
align = 'end',
sideOffset = 6,
sideOffset,
collisionPadding = 12,
width,
minWidth,

@ -9,7 +9,7 @@
let {
size,
align = 'end',
sideOffset = 6,
sideOffset,
collisionPadding = 12,
width,
minWidth,

Loading…
Cancel
Save

Powered by TurnKey Linux.