import { ZAll_Events, ZAll_Props, ZAll_Slots, ZComponentName } from '@zurich/dev-utils/code'; import { CSSProperties, JSX } from 'react'; type PayloadEvent = (payload: T, event: CustomEvent) => void; type VoidEvent = ((event: CustomEvent) => void); type AssertString = X extends infer K extends string ? K : never; /** */ export type ToReactEvents> = { [Event in keyof Required as `on${Capitalize>}`]?: Required[Event] extends never | void ? VoidEvent : PayloadEvent[Event]>; }; export type CustomElementProps = Record; export type ReactSlot = string | JSX.Element | (JSX.Element | string)[]; type ReactComponentBasics = { readonly id?: string; readonly className?: string; readonly style?: CSSProperties; }; export type ToReactSlots, Slot extends string = ''> = { [K in keyof Omit]?: T[K]; } & { [K in Exclude]?: string extends T[K] ? ReactSlot : T[K]; } & { children?: ReactSlot; } & ReactComponentBasics; export type ToReact = ToReactSlots & ToReactEvents; export type ExtractOnKeys = { [K in keyof T]: K extends `on${string}` ? K : never; }[keyof T]; export {};