Improve Typings to Modern V2
This commit is contained in:
		
							parent
							
								
									f5268009cd
								
							
						
					
					
						commit
						b59f501180
					
				
					 1 changed files with 96 additions and 118 deletions
				
			
		| 
						 | 
				
			
			@ -14,6 +14,8 @@ export type DraggableClass = {
 | 
			
		|||
    DragEvent: signal.Signal<string, Enum.UserInputType, Enum.UserInputState, {Vector2}?, number?, number?>,
 | 
			
		||||
 | 
			
		||||
    _: {
 | 
			
		||||
        Status: "Stored" | "Built",
 | 
			
		||||
 | 
			
		||||
        IsDragging: boolean,
 | 
			
		||||
        DragStartTime: number,
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -36,32 +38,96 @@ export type DraggableClass = {
 | 
			
		|||
 | 
			
		||||
export type Draggable = typeof(setmetatable({} :: DraggableClass, {}))
 | 
			
		||||
 | 
			
		||||
--[[ == Template == ]]
 | 
			
		||||
 | 
			
		||||
export type TemplateClass<Object, MethodOptions, Parameters> = {
 | 
			
		||||
    Files: {
 | 
			
		||||
        [string]: (self: Object, parameters: {}?) -> ()
 | 
			
		||||
    },
 | 
			
		||||
    Create: ((self: Template<Object, MethodOptions, Parameters>, method: MethodOptions, callback: (self: Object, parameters: Parameters?) -> ()) -> ()),
 | 
			
		||||
    Fire: ((self: Template<Object, MethodOptions, Parameters>, method: MethodOptions, object: Object, parameters: Parameters?) -> ()),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type Template<Object, MethodOptions, Parameters> = typeof(setmetatable({} :: TemplateClass<Object, MethodOptions, Parameters>, {}))
 | 
			
		||||
 | 
			
		||||
--[[ == ObjectList == ]]
 | 
			
		||||
 | 
			
		||||
export type ListableObject = (Button | Component | Page)
 | 
			
		||||
 | 
			
		||||
export type ObjectListClass<LO, P> = {
 | 
			
		||||
    Parent: P,
 | 
			
		||||
 | 
			
		||||
    Opened: { [string]: boolean },
 | 
			
		||||
    Built: { [string]: LO },
 | 
			
		||||
    Stored: { [string]: LO },
 | 
			
		||||
 | 
			
		||||
    RecentlyOpenedName: string,
 | 
			
		||||
    LastOpenedName: string,
 | 
			
		||||
 | 
			
		||||
    Add: (self: ObjectList<LO, P>, object: LO) -> (),
 | 
			
		||||
    Get: (self: ObjectList<LO, P>, name: string) -> (LO?),
 | 
			
		||||
    Remove: (self: ObjectList<LO, P>, name: string) -> (),
 | 
			
		||||
    RemoveAll: (self: ObjectList<LO, P>) -> (),
 | 
			
		||||
    Build: (self: ObjectList<LO, P>, name: string) -> (),
 | 
			
		||||
    BuildAll: (self: ObjectList<LO, P>) -> (),
 | 
			
		||||
    Open: (self: ObjectList<LO, P>, name: string, mode: ("Weighted" | "Forced")?) -> (),
 | 
			
		||||
    OpenAll: (self: ObjectList<LO, P>) -> (),
 | 
			
		||||
    OpenPrevious: (self: ObjectList<LO, P>) -> (),
 | 
			
		||||
    Close: (self: ObjectList<LO, P>, name: string) -> (),
 | 
			
		||||
    CloseAll: (self: ObjectList<LO, P>) -> (),
 | 
			
		||||
    Clean: (self: ObjectList<LO, P>,  name: string) -> (),
 | 
			
		||||
    CleanAll: (self: ObjectList<LO, P>) -> (),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type ObjectList<LO, P> = typeof(setmetatable({} :: ObjectListClass<LO, P>, {}))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--[[ == Interfaces == ]]
 | 
			
		||||
 | 
			
		||||
type BuildableObject<Self, Parent> = {
 | 
			
		||||
    Parent: Parent,
 | 
			
		||||
 | 
			
		||||
    _: {
 | 
			
		||||
        Status: "Stored" | "Built",
 | 
			
		||||
 | 
			
		||||
        OnBuild: (self: Self) -> ()?,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    OnBuild: (self: Self, callback: (self: Self) -> ()) -> (),
 | 
			
		||||
    Build: (self: Self, parent: Parent) -> (),
 | 
			
		||||
 | 
			
		||||
    GetStatus: (self: Self) -> ("Stored" | "Built"),
 | 
			
		||||
    StatusIs: (self: Self, status: "Stored" | "Built") -> (boolean),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type RenderableObject<Self> = {
 | 
			
		||||
    _: {
 | 
			
		||||
        OnOpen: (self: Self) -> ()?,
 | 
			
		||||
        OnClose: (self: Self) -> ()?,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    OnOpen: (self: Self, callback: (self: Self) -> ()) -> (),
 | 
			
		||||
    OnClose: (self: Self, callback: (self: Self) -> ()) -> (),
 | 
			
		||||
 | 
			
		||||
    Open: (self: Self) -> (),
 | 
			
		||||
    Close: (self: Self) -> (),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
export type ButtonEvents = "Pressed" | "Released" | "Hovered" | "HoverLeft"
 | 
			
		||||
 | 
			
		||||
export type ButtonClass = {
 | 
			
		||||
    Parent: Page | Component,
 | 
			
		||||
    Name: string,
 | 
			
		||||
    ButtonGui: GuiButton,
 | 
			
		||||
 | 
			
		||||
    _: {
 | 
			
		||||
        OnBuild: (self: Button) -> ()?,
 | 
			
		||||
        OnOpen: (self: Button) -> ()?,
 | 
			
		||||
        OnClose: (self: Button) -> ()?,
 | 
			
		||||
 | 
			
		||||
        OnPressed: (self: Button) -> ()?,
 | 
			
		||||
        OnReleased: (self: Button) -> ()?,
 | 
			
		||||
        OnHovered: (self: Button) -> ()?,
 | 
			
		||||
        OnHoverLeft: (self: Button) -> ()?,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    OnBuild: (self: Button, callback: (self: Button) -> ()) -> (),
 | 
			
		||||
    OnOpen: (self: Button, callback: (self: Button) -> ()) -> (),
 | 
			
		||||
    OnClose: (self: Button, callback: (self: Button) -> ()) -> (),
 | 
			
		||||
 | 
			
		||||
    Build: (self: Button, parent: Page | Component) -> (),
 | 
			
		||||
    Open: (self: Button) -> (),
 | 
			
		||||
    Close: (self: Button) -> (),
 | 
			
		||||
 | 
			
		||||
    OnPressed: (self: Button, callback: (self: Button) -> ()) -> (),
 | 
			
		||||
    OnReleased: (self: Button, callback: (self: Button) -> ()) -> (),
 | 
			
		||||
    OnHovered: (self: Button, callback: (self: Button) -> ()) -> (),
 | 
			
		||||
| 
						 | 
				
			
			@ -73,23 +139,19 @@ export type ButtonClass = {
 | 
			
		|||
    HoverLeft: (self: Button) -> (),
 | 
			
		||||
 | 
			
		||||
    Remove: (self: Button) -> (),
 | 
			
		||||
}
 | 
			
		||||
} & BuildableObject<Button, Page | Component> & RenderableObject<Button>
 | 
			
		||||
 | 
			
		||||
export type Button = typeof(setmetatable({} :: ButtonClass, {}))
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
export type ComponentClass = {
 | 
			
		||||
    Parent: Page,
 | 
			
		||||
    Name: string,
 | 
			
		||||
    Frame: Frame,
 | 
			
		||||
 | 
			
		||||
    Container: trove.Trove,
 | 
			
		||||
 | 
			
		||||
    Buttons: {
 | 
			
		||||
        Active: { [string]: Button },
 | 
			
		||||
        Stored: { [string]: Button },
 | 
			
		||||
    },
 | 
			
		||||
    Buttons: ObjectList<Button, Component>,
 | 
			
		||||
 | 
			
		||||
    BuildButtons: (self: Component) -> (),
 | 
			
		||||
    AddButton: (self: Component, button: Button) -> (),
 | 
			
		||||
| 
						 | 
				
			
			@ -97,146 +159,55 @@ export type ComponentClass = {
 | 
			
		|||
    RemoveButtons: (self: Component) -> (),
 | 
			
		||||
 | 
			
		||||
    _: {
 | 
			
		||||
        OnBuild: (self: Component) -> ()?,
 | 
			
		||||
        OnOpen: (self: Component) -> ()?,
 | 
			
		||||
        OnClose: (self: Component) -> ()?,
 | 
			
		||||
 | 
			
		||||
        UpdateCallbacks: { [string]: (self: Page, parameters: {}) -> () },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    OnBuild: (self: Component, callback: (self: Component) -> ()) -> (),
 | 
			
		||||
    OnUpdate: (self: Component, command: string, callback: (self: Component) -> ()) -> (),
 | 
			
		||||
    OnOpen: (self: Component, callback: (self: Component) -> ()) -> (),
 | 
			
		||||
    OnClose: (self: Component, callback: (self: Component) -> ()) -> (),
 | 
			
		||||
 | 
			
		||||
    Build: (self: Component, parent: Page) -> (),
 | 
			
		||||
    Update: (self: Component, command: string, parameters: {}?) -> (),
 | 
			
		||||
    Open: (self: Component) -> (),
 | 
			
		||||
    Close: (self: Component) -> (),
 | 
			
		||||
 | 
			
		||||
    Clean: (self: Component) -> (),
 | 
			
		||||
    Remove: (self: Component) -> (),
 | 
			
		||||
}
 | 
			
		||||
} & BuildableObject<Component, Page> & RenderableObject<Component>
 | 
			
		||||
 | 
			
		||||
export type Component = typeof(setmetatable({} :: ComponentClass, {}))
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
export type PageClass = {
 | 
			
		||||
    Parent: Window,
 | 
			
		||||
    Name: string,
 | 
			
		||||
    Weight: number,
 | 
			
		||||
    Frame: Frame,
 | 
			
		||||
 | 
			
		||||
    Container: trove.Trove,
 | 
			
		||||
 | 
			
		||||
    Buttons: {
 | 
			
		||||
        Active: { [string]: Button },
 | 
			
		||||
        Stored: { [string]: Button },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    BuildButtons: (self: Page) -> (),
 | 
			
		||||
    AddButton: (self: Page, button: Button) -> (),
 | 
			
		||||
    GetButton: (self: Page, button: string) -> (),
 | 
			
		||||
    OpenButton: (self: Page, button: string) -> (),
 | 
			
		||||
    CloseButton: (self: Page, button: string) -> (),
 | 
			
		||||
    CloseAllButtons: (self: Page) -> (),
 | 
			
		||||
    RemoveButtons: (self: Page) -> (),
 | 
			
		||||
 | 
			
		||||
    Components: {
 | 
			
		||||
        Open: { [string]: Component },
 | 
			
		||||
        Stored: { [string]: Component },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    BuildComponents: (self: Page) -> (),
 | 
			
		||||
    AddComponent: (self: Page, component: Component) -> (
 | 
			
		||||
        {AsOpened: () -> ()}
 | 
			
		||||
    ),
 | 
			
		||||
    GetComponent: (self: Page, component: string) -> (),
 | 
			
		||||
    OpenComponent: (self: Page, component: string) -> (),
 | 
			
		||||
    CloseComponent: (self: Page, component: string) -> (),
 | 
			
		||||
    CleanComponents: (self: Page) -> (),
 | 
			
		||||
    RemoveComponents: (self: Page) -> (),
 | 
			
		||||
 | 
			
		||||
    _: {
 | 
			
		||||
        OnBuild: (self: Page) -> ()?,
 | 
			
		||||
        OnOpen: (self: Page) -> ()?,
 | 
			
		||||
        OnClose: (self: Page) -> ()?,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    OnBuild: (self: Page, callback: (self: Page) -> ()) -> (),
 | 
			
		||||
    OnOpen: (self: Page, callback: (self: Page) -> ()) -> (),
 | 
			
		||||
    OnClose: (self: Page, callback: (self: Page) -> ()) -> (),
 | 
			
		||||
 | 
			
		||||
    Build: (self: Page, parent: Window) -> (),
 | 
			
		||||
    Open: (self: Page) -> (),
 | 
			
		||||
    Back: (self: Page) -> (),
 | 
			
		||||
    Close: (self: Page) -> (),
 | 
			
		||||
    Buttons: ObjectList<Button, Page>,
 | 
			
		||||
    Components: ObjectList<Component, Page>,
 | 
			
		||||
 | 
			
		||||
    Clean: (self: Page) -> (),
 | 
			
		||||
    Remove: (self: Page) -> (),
 | 
			
		||||
 | 
			
		||||
    GetManager: (self: Window) -> (Manager),
 | 
			
		||||
}
 | 
			
		||||
} & BuildableObject<Page, Window> & RenderableObject<Page>
 | 
			
		||||
 | 
			
		||||
export type Page = typeof(setmetatable({} :: PageClass, {}))
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
export type WindowClass = {
 | 
			
		||||
    Manager: Manager,
 | 
			
		||||
    Name: string,
 | 
			
		||||
    ScreenGui: ScreenGui,
 | 
			
		||||
    Pages: {
 | 
			
		||||
        Open: { [string]: Page },
 | 
			
		||||
        Stored: { [string]: Page },
 | 
			
		||||
    },
 | 
			
		||||
    Pages: ObjectList<Page, Window>,
 | 
			
		||||
 | 
			
		||||
    --[[ Not used, at the moment.]]
 | 
			
		||||
    Events: {
 | 
			
		||||
        PageOpened: signal.Signal<Page, boolean>,
 | 
			
		||||
        PageClosed: signal.Signal<Page, boolean>,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    BuildPages: (self: Window) -> (),
 | 
			
		||||
    AddPage: (self: Window, page: Page) -> (
 | 
			
		||||
        {AsOpened: () -> ()}
 | 
			
		||||
    ),
 | 
			
		||||
    GetPage: (self: Window, page: string) -> (),
 | 
			
		||||
    OpenPage: (self: Window, page: string, command: "Weighted" | "Forced"?) -> (),
 | 
			
		||||
    OpenLastPage: (self: Window) -> (),
 | 
			
		||||
    ClosePage: (self: Window, page: string) -> (),
 | 
			
		||||
 | 
			
		||||
    --[=[
 | 
			
		||||
        Will close and clean all open pages. \
 | 
			
		||||
        If a middleware function is given, closing will be dependent on the returned boolean value of said middleware during an iterative process. \
 | 
			
		||||
        An example use case may include closing pages based on their weighted value.
 | 
			
		||||
 | 
			
		||||
        @param middleware function(Page) ```returns``` (boolean) 
 | 
			
		||||
    ]=]
 | 
			
		||||
    CloseAllPages: (self: Window, middleware: (Page) -> (boolean)) -> (),
 | 
			
		||||
    RemoveAllPages: (self: Window) -> (),
 | 
			
		||||
    CleanPages: (self: Window) -> (),
 | 
			
		||||
 | 
			
		||||
    _: {
 | 
			
		||||
        RecentlyOpenedPageName: string,
 | 
			
		||||
        LastOpenedPageName: string,
 | 
			
		||||
 | 
			
		||||
        OnBuild: (self: Window) -> ()?,
 | 
			
		||||
        OnOpen: (self: Window) -> ()?,
 | 
			
		||||
        OnClose: (self: Window) -> ()?,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    OnBuild: (self: Window, callback: (self: Window) -> ()) -> (),
 | 
			
		||||
    OnOpen: (self: Window, callback: (self: Window) -> ()) -> (),
 | 
			
		||||
    OnClose: (self: Window, callback: (self: Window) -> ()) -> (),
 | 
			
		||||
 | 
			
		||||
    Build: (self: Window, manager: Manager) -> (),
 | 
			
		||||
    Open: (self: Window) -> (),
 | 
			
		||||
    Close: (self: Window) -> (),
 | 
			
		||||
 | 
			
		||||
    Clean: (self: Window) -> (),
 | 
			
		||||
    Remove: (self: Window) -> (),
 | 
			
		||||
}
 | 
			
		||||
} & BuildableObject<Window, Manager> & RenderableObject<Window>
 | 
			
		||||
 | 
			
		||||
export type Window = typeof(setmetatable({} :: WindowClass, {}))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -279,6 +250,13 @@ export type Manager = {
 | 
			
		|||
    ]=]
 | 
			
		||||
    OpenWindow: (self: Manager, window: Window) -> (),
 | 
			
		||||
 | 
			
		||||
    --[=[
 | 
			
		||||
        Build and open a ```Window``` object and log its opened state based on the given name.
 | 
			
		||||
        
 | 
			
		||||
        @param name ```string```
 | 
			
		||||
    ]=]
 | 
			
		||||
    OpenWindowByName: (self: Manager, name: string) -> (),
 | 
			
		||||
 | 
			
		||||
    --[=[
 | 
			
		||||
        Close and remove a ```Window``` object and log its state change.
 | 
			
		||||
        
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue