fix(soma/menubar): 3 errores de tipo de la infra Menubar.Panel

Reparan el commit anterior (era WIP con errores de svelte-check; runtime OK):
- provider: `tabindex:-1` en los props del panel estaba duplicado (focusScope.props
  ya lo aporta con el mismo valor) → quitado el explícito.
- menubar-panel: el prop `style` (de PrimitiveDivAttributes = `Record<string,unknown>`)
  no encajaba con el opt del provider (`StyleProperties`) → cast en el create.
- test: `props['aria-haspopup']` no es clave estática del tipo (es atributo del morfo
  resuelto por renderProps en runtime) → acceso vía cast a Record.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
alpha-0.1-sec-dom
dev 3 months ago
parent 6be7195f0f
commit ef85b9223d

@ -6,6 +6,7 @@
import { Soma } from '../../../core/soma.svelte';
import { MenubarPanelContentProvider, MenubarMenuProvider } from '../menubar-provider.svelte';
import type { MenubarPanelProps } from '../types';
import type { StyleProperties } from '../../../types';
const uid = $props.id();
const soma = Soma.get();
@ -60,7 +61,7 @@
dir: readableActive(
() => dir ?? menu?.provider.opts.dir.current ?? soma?.prefs.getDir() ?? 'ltr'
),
style: readableActive(() => style),
style: readableActive(() => style as string | StyleProperties | null | undefined),
customAnchor: readableActive(() => customAnchor)
});

@ -148,8 +148,10 @@ describe('MenubarProvider', () => {
// (composition IS the declaration); sibling menu entries keep "menu".
result.edit.menu.surface = 'panel';
flushSync();
expect(result.edit.trigger.props['aria-haspopup']).toBe('dialog');
expect(result.file.trigger.props['aria-haspopup']).toBe('menu');
// aria-haspopup is a morfo-declared attr (resolved at runtime via renderProps),
// so it isn't a static key of the props type — index through a record cast.
expect((result.edit.trigger.props as Record<string, unknown>)['aria-haspopup']).toBe('dialog');
expect((result.file.trigger.props as Record<string, unknown>)['aria-haspopup']).toBe('menu');
result.edit.menu.surface = 'menu';
flushSync();

@ -709,8 +709,8 @@ export class MenubarPanelContentProvider {
'data-state': getDataOpenClosed(this.menu.isOpen),
// Mega-panel marker — the recipe caps the intrinsic size from it.
'data-anchored': boolToEmptyStrOrUndef(!!this.opts.customAnchor.current),
// Programmatically focusable: pointer opens land focus on the surface.
tabindex: -1,
// tabindex:-1 (programmatically focusable surface, so pointer opens land
// focus here) is supplied by focusScope.props below — don't duplicate it.
...this.floating.props,
...this.menu.menu.contentPresence.transitionAttrs,
...this.focusScope.props,

Loading…
Cancel
Save

Powered by TurnKey Linux.