UNPKG

@1771technologies/lytenyte-pro

Version:

Blazingly fast headless React data grid with 100s of features.

29 lines (28 loc) 1.07 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { cloneElement } from "react"; import { mergeProps } from "./merge-props.js"; import { getElementRef } from "./get-element-ref.js"; import { useCombinedRefs } from "@1771technologies/lytenyte-core/internal"; /** * A React hook to support slots in components. */ export function useSlot({ props = {}, slot = _jsx("div", {}), state, ref: forwardedRef }) { const el = typeof slot === "function" ? slot(state) : slot; let merged = {}; if (Array.isArray(props)) { for (let i = 0; i < props.length; i++) merged = mergeProps(merged, props[i]); } else { merged = props; } const mergedProps = mergeProps(merged, el.props); const ref = getElementRef(el); const mergedRefs = useCombinedRefs(forwardedRef, ref); // One of the refs should be fined. We have to check for this since // not all elements accept a ref (e.g. Fragments) if (ref || forwardedRef) { mergedProps.ref = mergedRefs; } return cloneElement(el, mergedProps); }