import type { IfExtends } from "hry-types/src/Any/_api"; import type { Select } from "hry-types/src/Object/_api"; import type { Detail, WMBaseEvent } from "../../../types/OfficialTypeAlias"; import type { ComponentDoc } from "../../DefineComponent/returnType/ComponentDoc"; import type { CustomEventsDoc } from "../CustomEvents/CustomEventsDoc"; import type { Bubbles, BubblesCapture, BubblesCaptureComposed, BubblesComposed, Capture, CaptureComposed, CustomEventsTags } from "../CustomEvents/CustomEventsTag"; type _AddSuffixForKey = [ Value ] extends [Bubbles] ? `${key}_bubbles` : [Value] extends [Capture] ? `${key}_capture` : [Value] extends [BubblesComposed] ? `${key}_bubbles` | `${key}_bubbles_catch` : [Value] extends [CaptureComposed] ? `${key}_capture` | `${key}_capture_catch` : [Value] extends [BubblesCapture] ? `${key}_bubblesCapture` : [Value] extends [BubblesCaptureComposed] ? `${key}_bubblesCapture` | `${key}_bubblesCapture_catch` : never; type TransformCustomEventsDocTypeToFunctionTypeAndAddSuffix = { [k in keyof T as _AddSuffixForKey>]?: (detail: Detail>) => void; }; type GetAllSubCustomEvents = TComponentDocList extends [infer Head extends ComponentDoc, ...infer Rest extends ComponentDoc[]] ? GetAllSubCustomEvents : Result; type GetBubblesOrCaptureEvents = Select">; type GetSubCustomEvents, BubbleOrCaptureEvents extends object = GetBubblesOrCaptureEvents> = IfExtends<{}, BubbleOrCaptureEvents, unknown, TransformCustomEventsDocTypeToFunctionTypeAndAddSuffix>; type BaseEvent = Record unknown>; export type EventsConstraint = IfExtends<[ ], ComponentDocList, BaseEvent, GetSubCustomEvents & BaseEvent>; export {};