A pure, stateless pass-through to <a-expander>: the element handles all
interaction (toggle, keyboard, ARIA, animation), so the wrapper holds
no state and grabs no ref — it only maps props to attributes (safe
wherever the host DOM is reconciled, incl. off the UI thread).
Uncontrolled (defaultOpen): the element updates its open state. The wrapper
emits default-state="open" — never state — so the DOM carries no stale
controlled attribute. Controlled (open + onStateChange): the wrapper
emits state="open" | "closed"; the element treats the attribute as the
source of truth and clicks only dispatch the cancelable statechange event,
giving real controlled semantics (a consumer can reject a toggle). See
STATEFUL-COMPONENTS.md.
<Expander>— a collapsible disclosure section.A pure, stateless pass-through to
<a-expander>: the element handles all interaction (toggle, keyboard, ARIA, animation), so the wrapper holds no state and grabs no ref — it only maps props to attributes (safe wherever the host DOM is reconciled, incl. off the UI thread).Uncontrolled (
defaultOpen): the element updates its open state. The wrapper emitsdefault-state="open"— neverstate— so the DOM carries no stale controlled attribute. Controlled (open+onStateChange): the wrapper emitsstate="open" | "closed"; the element treats the attribute as the source of truth and clicks only dispatch the cancelablestatechangeevent, giving real controlled semantics (a consumer can reject a toggle). See STATEFUL-COMPONENTS.md.