/**
* `mergeRootProps(internal, user)` — public slot-function prop merger.
*
* Distinct from `mergePropsN` (used by ~20 React-port primitives). This
* one is for the Solid 2.0-native compound surface where a primitive
* exposes `c.trigger()` / `c.root()` slot functions and the consumer
* spreads them onto an element with ``.
*
* Per-key resolution:
* - `on*` handlers: internal runs first, user runs after unless the
* event was `preventDefault()`-ed by internal. `user[k] === undefined`
* does NOT clear internal — it's treated as "absent". This is the key
* difference from Solid's `merge` (RFC 04) and what stops consumers
* accidentally killing library behaviour by spreading
* `{ onClick: undefined }`.
* - `class`: returns `[internal.class, user.class]` per RFC 07 — Solid's
* class binding handles nested clsx shapes per entry. No string concat.
* - `style`: object declarations merge with user values winning. Mixed
* object/string values serialize deterministically with internal
* declarations first and user declarations second.
* - `ref`: array form `[internal.ref, user.ref]` (skip absent sides;
* single value if only one side present). Solid's `applyRef` flattens.
* - everything else (`data-*`, `aria-*`, plain attrs): user wins when
* defined, internal provides the reactive default. `user[k] ===
* undefined` means internal wins.
*
* Reactivity: getters delegate reads back to `internal[k]` / `user[k]` so
* source-side getters (e.g. `get "data-state"() { return open() ? ... }`)
* stay live across spreads. The output is a plain object — Solid's
* compiled spread iterates `Object.keys` once at first spread and binds a
* render effect per key; each binding then reads through the getter on
* every relevant flush.
*
* Implementation: pre-bake a getter per key in `keys(internal) ∪ keys(user)`
* at call time. Specialised per which side(s) declared the key — the
* cheap path (internal-only key) skips per-access branching. Faster than
* the prior Proxy form (~2.4× by microbench: 123ms → 51ms for 7M reads)
* and produces an indistinguishable shape for downstream consumers
* (`Object.keys`, `Object.getOwnPropertyDescriptor`, `in` for known keys
* all match).
*
* Slot prop bags have a static key set at the call site, so pre-baking
* is correct. Dynamic key sets that grow over time still need `mergePropsN`.
*/
import type { ElementStyle } from "./types.js";
/**
* Merge two Solid-native style values with the later value taking precedence.
* Object/object inputs remain objects. If either side is serialized CSS, the
* result is serialized with internal declarations first and user declarations
* second, which is deterministic across browser and server rendering.
*/
export declare function mergeElementStyles(internal: ElementStyle, user: ElementStyle): ElementStyle;
/**
* Accepts any two prop bags and returns the merged bag as a plain
* `Record` — which is all every call site needs (each one
* either assigns the result to a `Record` or spreads it onto
* a `dynamic()` element). The widening cast lives HERE, once, instead of forcing every
* call site to write `internal` just to
* satisfy a generic whose precise return type nothing consumes.
*/
export declare function mergeRootProps(internal: object, user?: object): Record;
//# sourceMappingURL=merge-root-props.d.ts.map