create-slots
Version:
Bring slots to React components
21 lines (17 loc) • 1.44 kB
TypeScript
import * as React from 'react';
declare type SlotElement<T extends React.ElementType = any> = React.ReactElement<React.ComponentPropsWithRef<T>, T> & {
ref: React.ComponentPropsWithRef<T>['ref'];
};
declare const getSlots: <T extends React.ElementType<any>>(slots: React.ReactElement[], slot: T) => SlotElement<T>[];
declare const getSlot: <T extends React.ElementType<any>>(slots: React.ReactElement[], slot: T) => SlotElement<T> | undefined;
declare const getLastSlot: <T extends React.ElementType<any>>(slots: React.ReactElement[], slot: T) => SlotElement<T> | undefined;
declare const isSlot: <T extends React.ElementType<any>>(slotElement: SlotElement, slot: T) => slotElement is SlotElement<T>;
declare const getSlotProps: <T extends SlotElement<any> | undefined, Props = T extends undefined ? undefined : React.ComponentPropsWithRef<T extends SlotElement<infer P extends React.ElementType<any>> ? P : never>>(slotElement: T) => Props;
declare type Callback = (slots: SlotElement[]) => JSX.Element | null;
declare const HostSlots: ({ children, callback, }: {
children: React.ReactNode;
callback: Callback;
}) => JSX.Element;
declare const createHost: (children: React.ReactNode, callback: Callback) => JSX.Element;
declare const createSlot: <T extends React.ElementType<any>>(Fallback?: T | undefined) => T;
export { HostSlots, SlotElement, createHost, createSlot, getLastSlot, getSlot, getSlotProps, getSlots, isSlot };