import Fusion from "@rbxts/fusion"; import { ControlGroup } from "../ControlTypings/ControlUtils"; import { AllControls, ControlsList, ReturnControls } from "../ControlTypings/Typing"; import { GetStoryProps, InferControlType, StoryCleanup } from "./Typing"; import { StoryBase, StoryCreationKey, StoryInfo } from "./Typing"; interface WithFusion { use?: "fusion"; fusion: typeof Fusion; scoped?: defined[]; } type InferFusionControlGroup = { [K in keyof T]: Fusion.Value>; }; type InferFusionControls = { [K in keyof T]: T[K] extends ControlGroup ? InferFusionControlGroup : T[K] extends AllControls ? Fusion.Value> : never; }; type FusionProps = { controls: T extends ReturnControls ? InferFusionControls : never; scope: any; }; type InferFusionProps = GetStoryProps>; type FusionStory = T & StoryBase & WithFusion & StoryCreationKey< InferFusionProps, | Instance | StoryCleanup | Fusion.Value | Fusion.Value | Instance[] | undefined | void >;