declare type Map = { [K]: V }; declare type Classes = { classes: Map }; declare type Topic = { state: string, command: string, defaultValue: any, values: Map, parseState?: (msg: Object) => any }; declare type Topics = Map; declare type UIBase = { text: string, topic?: string, icon?: string, enableCondition?: (internal: string, actual: any, state: State) => boolean } declare type UIToggle = { type: "toggle", on?: string, off?: string, toggled?: (internal: string, actual: any, state: State) => boolean, } & UIBase; declare type UIDropDown = { type: "dropDown", options: Map, renderValue?: (value: string) => string } & UIBase; declare type UISlider = { type: "slider", min?: number, max?: number, step?: number } & UIBase; declare type UISection = { type: "section", text: string }; declare type UILink = { type: "link", link: string } & UIBase; declare type UIText = { type: "text" } & UIBase; declare type ControlUI = UIToggle | UIDropDown | UISlider | UISection | UILink | UIText declare type Control = { name: string, position: Array, icon: string | ( internals: Map, actuals: Map, state: State ) => string, iconColor?: ( internals: Map, actuals: Map, state: State ) => string, ui: Array }; declare type Controls = Map; declare type Config = { space: Space, topics: Topics, controls: Controls, layers: Array }; declare type Space = { name: string, color: "red"|"pink"|"purple"|"deepPurple"|"indigo"|"blue"|"lightBlue"|"cyan"|"teal"| "green"|"lightGreen"|"lime"|"yellow"|"amber"|"orange"|"deepOrange"|"brown"|"grey"|"blueGrey", mqtt: string }; declare type StateValue = { internal: string, actual: any }; declare type State = Map; //declare type State = { // mqtt: ?any, // uiOpened: ?string, // A map of the actual state values for each topic. // internal is the internal term for the value, // that is equal to the key in the values section of that // topic, for example given by: // values: { off: "OFF", on: "ON" } // and actual is the value of that or whatever is given by mqtt. // values: Map, // visibleLayers: Array //}; declare type Point = [number, number]; declare type Layer = { image: string, name: string, baseLayer?: boolean, defaultVisibility: "visible" | "hidden", opacity?: number, bounds: { topLeft: Point, bottomRight: Point } };