Mixins / foldkit-mixins-ui
MenuSlots
const · packages/mixins-ui/src/menu.ts:24
const MenuSlots: Slots.Contract<{ readonly wrapper: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>]>, readonly Slot.EventName[], readonly Slot.AttributeName[], readonly Slot.RequirementName[], boolean>; readonly button: Slot.UnnamedSlot<Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>, readonly [Event.EventToken<"click">, Event.EventToken<"pointerdown">, Event.EventToken<"keydown">], readonly [Attr.AttrToken<"role">, Attr.AttrToken<"aria-expanded">, Attr.AttrToken<"disabled">, Attr.AttrToken<"aria-disabled">], readonly Slot.RequirementName[], boolean>; readonly backdrop: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>]>, readonly [Event.EventToken<"click">], readonly Slot.AttributeName[], readonly Slot.RequirementName[], boolean>; readonly items: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>]>, readonly [Event.EventToken<"keydown">, Event.EventToken<"pointerup">, Event.EventToken<"blur">], readonly [Attr.AttrToken<"role">], readonly Slot.RequirementName[], boolean>; readonly scroll: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>]> …;Menu is a nested Submodel: one button/backdrop/items group plus an
item per entry (and group/heading/separator where the caller
groups), so the resolver runs once per bundle and each base attribute
passes through by identity.
The button owns click (and pointerdown/keydown while enabled); an
item owns click while interactive. A Behavior adding its own handler to
one of those is a conflict, not a second silent owner. Disabled buttons
and items publish no click, so the contract still lists it as allowed.
In the guides
- Stateless vocabularyMixins / foldkit-mixins-ui