/my-component.tsx
1import { Slot } from "@/components/ui/slot";23export function MyComponent() {4 return (5 <Slot.Root className="w-full flex items-center justify-between">6 <div>7 <span>Hello,</span>8 <span>World!</span>9 </div>10 </Slot.Root>11 );12};
/components/ui/slot.tsx
1import type { ReactNode, HTMLAttributes } from "react";23import { cloneElement, isValidElement } from "react";45interface SlotProps extends HTMLAttributes<HTMLElement> {6 children: ReactNode7};89const Slot = function ({ children, ...props }: SlotProps) {10 if (!isValidElement(children)) {11 console.warn("Slot expects a single valid React element as child.");1213 return null;14 };1516 return cloneElement(children, { ...props, ...(children.props || {}) });17};1819export namespace SlotProps {20 export type Root = SlotProps21}2223const SlotExport = {24 Root: Slot25};2627export {28 SlotExport as Slot29};3031export default SlotExport;