Turn a per-root setup into a full enhancer with the shared lifecycle every
Hydrateless component needs: root discovery (including the container itself),
idempotent de-duplication, option merging (defaults, then the root's
data-hl-* attributes, then caller options), automatic listener and
observer teardown, re-enhancement after destroy, and a uniform handle
exposing each instance's imperative API. This is the single contract all
enhancers are built on. Calling an enhancer with no container outside a
browser is a safe no-op that returns an empty handle.
Turn a per-root
setupinto a full enhancer with the shared lifecycle every Hydrateless component needs: root discovery (including the container itself), idempotent de-duplication, option merging (defaults, then the root'sdata-hl-*attributes, then caller options), automatic listener and observer teardown, re-enhancement after destroy, and a uniform handle exposing each instance's imperative API. This is the single contract all enhancers are built on. Calling an enhancer with no container outside a browser is a safe no-op that returns an empty handle.