/**
 * Components that forward their `ref` to an element that is not the root, e.g. a `button` or `input` that needs to be
 * wrapped in a `div` for some reason, should use this function to split the props that remain after destructuring the
 * ones we expect and care about into two groups: `rootProps`, which should be spread on the root element or component,
 * and `nestedProps`, which should be spread on the underlying element. The goal is to ensure that consumers can apply
 * any native HTML attribute supported by the underlying element, e.g. `<Button form={id} />` or `<Link ping="..." />`,
 * while allowing them to style or hide, visually and/or from the accessibility tree, the component as a whole and not
 * just that element. Therefore, `className` (if not already destructured), `inert`, `hidden`, and `aria-hidden` go in
 * `rootProps`, along with data attributes, since they can be coupled to the `className` to apply styles conditionally,
 * e.g. `<Button data-highlighted={highlighted} className="data-[highlighted]:prop-variant-primary" />`. However, data
 * attributes can also be needed on the underlying element in some cases, so they are actually included in both groups.
 */
export declare function splitProps<T extends Record<string, unknown>>(props: T): {
    rootProps: { [K in keyof T as K extends "className" | "inert" | "hidden" | "aria-hidden" | `data-${string}` ? K : never]: T[K]; };
    nestedProps: { [K in keyof T as K extends "className" | "inert" | "hidden" | "aria-hidden" ? never : K]: T[K]; };
};
//# sourceMappingURL=splitProps.d.ts.map