Mixins / foldkit-mixins-ui

What resolve does

resolve(attributes, mixins, { input, h }) receives the shaped value the component passed to its render callback and returns the same shape with published attribute bundles resolved through Mixins.

For a simple Button:

{ button: baseAttributes }
        |
        v
Button.resolve(...)
        |
        v
{ button: resolvedAttributes }

For richer components, non-slot values pass through untouched. Values such as animatePanel, isVisible, activeIndex, or selectedValue remain component data rather than becoming Mixins slots.

input is whatever attached Style/Behavior callbacks are allowed to read. In a feature view that is often the Surface's projected Model; leave it out when no attached Mixin reads one.

What resolve returns (and draw receives) has a name for each adapter: ResolvedButton<Message>, ResolvedInput<Message>, ResolvedDialog<Message>, ResolvedRadioGroup<Value, Message> and ResolvedRadioOption<Value, Message>, ResolvedTabs<Value, Message>, ResolvedCalendar<Message>, ResolvedMenu<Message> (with ResolvedMenuGroup/ResolvedMenuItem per entry), and so on, so a helper that draws part of a component can be typed without ReturnType. ResolvedTextarea's textarea bundle is typed for h.textarea, which refuses InnerHTML; the resolver refuses an InnerHTML from any Mixin, so no cast is needed.

Every adapter is available as both a component namespace (Button.toView, Button.resolve, Button.ButtonSlots) and flat Slot exports such as ButtonSlots.