diff --git a/404.html b/404.html index 7185f8b..8660690 100644 --- a/404.html +++ b/404.html @@ -4,13 +4,13 @@ Page Not Found | Iris - - + +
-
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + \ No newline at end of file diff --git a/api/Basic/index.html b/api/Basic/index.html index 9eea8f0..ee8a1c4 100644 --- a/api/Basic/index.html +++ b/api/Basic/index.html @@ -6,14 +6,14 @@ Basic | Iris - - + +
-
Skip to main content

Basic

Properties

Button

Widget
Basic.Button: Iris.Button

A clickable button the size of the text with padding. Can listen to the clicked() event to determine if it was pressed.

hasChildren = false
 hasState = false
@@ -28,7 +28,7 @@
     hovered: () -> boolean
 }
 
-

SmallButton

Widget
Basic.SmallButton: Iris.SmallButton
+

SmallButton

Widget
Basic.SmallButton: Iris.SmallButton

A smaller clickable button, the same as a Iris.Button but without padding. Can listen to the clicked() event to determine if it was pressed.

hasChildren = false
 hasState = false
@@ -43,7 +43,7 @@
     hovered: () -> boolean
 }
 
-

Checkbox

WidgetHasState
Basic.Checkbox: Iris.Checkbox
+

Checkbox

WidgetHasState
Basic.Checkbox: Iris.Checkbox

A checkable box with a visual tick to represent a boolean true or false state.

hasChildren = false
 hasState = true
@@ -59,7 +59,7 @@
     isChecked = State<boolean>? -- whether the box is checked.
 }
 
-

RadioButton

WidgetHasState
Basic.RadioButton: Iris.RadioButton
+

RadioButton

WidgetHasState
Basic.RadioButton: Iris.RadioButton

A circular selectable button, changing the state to its index argument. Used in conjunction with multiple other RadioButtons sharing the same state to represent one value from multiple options.

hasChildren = false
 hasState = true
@@ -88,7 +88,7 @@
                 "Widget"
             ],
             "source": {
-                "line": 466,
+                "line": 474,
                 "path": "lib/API.lua"
             }
         },
@@ -100,7 +100,7 @@
                 "Widget"
             ],
             "source": {
-                "line": 490,
+                "line": 498,
                 "path": "lib/API.lua"
             }
         },
@@ -113,7 +113,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 516,
+                "line": 524,
                 "path": "lib/API.lua"
             }
         },
@@ -126,7 +126,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 544,
+                "line": 552,
                 "path": "lib/API.lua"
             }
         }
@@ -135,11 +135,11 @@
     "name": "Basic",
     "desc": "Basic Widget API\n    ",
     "source": {
-        "line": 443,
+        "line": 451,
         "path": "lib/API.lua"
     }
-}
- - +}
+ + \ No newline at end of file diff --git a/api/Combo/index.html b/api/Combo/index.html index 0c32e8f..037c6cd 100644 --- a/api/Combo/index.html +++ b/api/Combo/index.html @@ -6,14 +6,14 @@ Combo | Iris - - + +
-
Skip to main content

Combo

Properties

Selectable

WidgetHasState
Combo.Selectable: Iris.Selectable

An object which can be selected.

hasChildren = false
 hasState = true
@@ -36,7 +36,7 @@
     index: State<any> -- a shared state between all selectables.
 }
 
-

Combo

WidgetHasChildrenHasState
Combo.Combo: Iris.Combo
+

Combo

WidgetHasChildrenHasState
Combo.Combo: Iris.Combo

A selection box to choose a value from a range of values.

hasChildren = true
 hasState = true
@@ -47,7 +47,7 @@
 }
 Events = {
     opened: () -> boolean,
-    clsoed: () -> boolean,
+    closed: () -> boolean,
     clicked: () -> boolean,
     hovered: () -> boolean
 }
@@ -56,7 +56,7 @@
     isOpened: State<boolean>?
 }
 
-

ComboArray

WidgetHasChildrenHasState
Combo.ComboArray: Iris.Combo
+

ComboArray

WidgetHasChildrenHasState
Combo.ComboArray: Iris.Combo

A selection box to choose a value from an array.

hasChildren = true
 hasState = true
@@ -67,7 +67,7 @@
 }
 Events = {
     opened: () -> boolean,
-    clsoed: () -> boolean,
+    closed: () -> boolean,
     clicked: () -> boolean,
     hovered: () -> boolean
 }
@@ -79,7 +79,7 @@
     selectionArray: { any } -- the array to generate a combo from.
 }
 
-

ComboEnum

WidgetHasChildrenHasState
Combo.ComboEnum: Iris.Combo
+

ComboEnum

WidgetHasChildrenHasState
Combo.ComboEnum: Iris.Combo

A selection box to choose a value from an Enum.

hasChildren = true
 hasState = true
@@ -90,7 +90,7 @@
 }
 Events = {
     opened: () -> boolean,
-    clsoed: () -> boolean,
+    closed: () -> boolean,
     clicked: () -> boolean,
     hovered: () -> boolean
 }
@@ -114,13 +114,13 @@
                 "HasState"
             ],
             "source": {
-                "line": 1382,
+                "line": 1390,
                 "path": "lib/API.lua"
             }
         },
         {
             "name": "Combo",
-            "desc": "A selection box to choose a value from a range of values.\n\n```lua\nhasChildren = true\nhasState = true\nArguments = {\n    Text: string,\n    NoButton: boolean? = false, -- hide the dropdown button.\n    NoPreview: boolean? = false -- hide the preview field.\n}\nEvents = {\n    opened: () -> boolean,\n    clsoed: () -> boolean,\n    clicked: () -> boolean,\n    hovered: () -> boolean\n}\nStates = {\n    index: State<any>,\n    isOpened: State<boolean>?\n}\n```\n    ",
+            "desc": "A selection box to choose a value from a range of values.\n\n```lua\nhasChildren = true\nhasState = true\nArguments = {\n    Text: string,\n    NoButton: boolean? = false, -- hide the dropdown button.\n    NoPreview: boolean? = false -- hide the preview field.\n}\nEvents = {\n    opened: () -> boolean,\n    closed: () -> boolean,\n    clicked: () -> boolean,\n    hovered: () -> boolean\n}\nStates = {\n    index: State<any>,\n    isOpened: State<boolean>?\n}\n```\n    ",
             "lua_type": "Iris.Combo",
             "tags": [
                 "Widget",
@@ -128,13 +128,13 @@
                 "HasState"
             ],
             "source": {
-                "line": 1413,
+                "line": 1421,
                 "path": "lib/API.lua"
             }
         },
         {
             "name": "ComboArray",
-            "desc": "A selection box to choose a value from an array.\n\n```lua\nhasChildren = true\nhasState = true\nArguments = {\n    Text: string,\n    NoButton: boolean? = false, -- hide the dropdown button.\n    NoPreview: boolean? = false -- hide the preview field.\n}\nEvents = {\n    opened: () -> boolean,\n    clsoed: () -> boolean,\n    clicked: () -> boolean,\n    hovered: () -> boolean\n}\nStates = {\n    index: State<any>,\n    isOpened: State<boolean>?\n}\nExtra = {\n    selectionArray: { any } -- the array to generate a combo from.\n}\n```\n    ",
+            "desc": "A selection box to choose a value from an array.\n\n```lua\nhasChildren = true\nhasState = true\nArguments = {\n    Text: string,\n    NoButton: boolean? = false, -- hide the dropdown button.\n    NoPreview: boolean? = false -- hide the preview field.\n}\nEvents = {\n    opened: () -> boolean,\n    closed: () -> boolean,\n    clicked: () -> boolean,\n    hovered: () -> boolean\n}\nStates = {\n    index: State<any>,\n    isOpened: State<boolean>?\n}\nExtra = {\n    selectionArray: { any } -- the array to generate a combo from.\n}\n```\n    ",
             "lua_type": "Iris.Combo",
             "tags": [
                 "Widget",
@@ -142,13 +142,13 @@
                 "HasState"
             ],
             "source": {
-                "line": 1447,
+                "line": 1455,
                 "path": "lib/API.lua"
             }
         },
         {
             "name": "ComboEnum",
-            "desc": "A selection box to choose a value from an Enum.\n\n```lua\nhasChildren = true\nhasState = true\nArguments = {\n    Text: string,\n    NoButton: boolean? = false, -- hide the dropdown button.\n    NoPreview: boolean? = false -- hide the preview field.\n}\nEvents = {\n    opened: () -> boolean,\n    clsoed: () -> boolean,\n    clicked: () -> boolean,\n    hovered: () -> boolean\n}\nStates = {\n    index: State<any>,\n    isOpened: State<boolean>?\n}\nExtra = {\n    enumType: Enum -- the enum to generate a combo from.\n}\n```\n    ",
+            "desc": "A selection box to choose a value from an Enum.\n\n```lua\nhasChildren = true\nhasState = true\nArguments = {\n    Text: string,\n    NoButton: boolean? = false, -- hide the dropdown button.\n    NoPreview: boolean? = false -- hide the preview field.\n}\nEvents = {\n    opened: () -> boolean,\n    closed: () -> boolean,\n    clicked: () -> boolean,\n    hovered: () -> boolean\n}\nStates = {\n    index: State<any>,\n    isOpened: State<boolean>?\n}\nExtra = {\n    enumType: Enum -- the enum to generate a combo from.\n}\n```\n    ",
             "lua_type": "Iris.Combo",
             "tags": [
                 "Widget",
@@ -156,7 +156,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 1496,
+                "line": 1504,
                 "path": "lib/API.lua"
             }
         }
@@ -165,11 +165,11 @@
     "name": "Combo",
     "desc": "Combo Widget API\n    ",
     "source": {
-        "line": 1350,
+        "line": 1358,
         "path": "lib/API.lua"
     }
-}
- - +}
+ + \ No newline at end of file diff --git a/api/Drag/index.html b/api/Drag/index.html index ef003d2..86076f5 100644 --- a/api/Drag/index.html +++ b/api/Drag/index.html @@ -14,16 +14,16 @@ See [Input] for more details on the arguments. "> - - + +
-
Skip to main content

Drag

+

Drag

Drag Widget API

A draggable widget for each datatype. Allows direct typing input but also dragging values by clicking and holding.

See Input for more details on the arguments.

-

Properties

DragNum

WidgetHasState
Drag.DragNum: Iris.DragNum
+

Properties

DragNum

WidgetHasState
Drag.DragNum: Iris.DragNum

A field which allows the user to click and drag their cursor to enter a number. You can ctrl + click to directly input a number, like InputNum. @@ -47,7 +47,7 @@ editingText: State<boolean>? } -

DragVector2

WidgetHasState
Drag.DragVector2: Iris.DragVector2
+

DragVector2

WidgetHasState
Drag.DragVector2: Iris.DragVector2

A field which allows the user to click and drag their cursor to enter a Vector2. You can ctrl + click to directly input a Vector2, like InputVector2. @@ -71,7 +71,7 @@ editingText: State<boolean>? } -

DragVector3

WidgetHasState
Drag.DragVector3: Iris.DragVector3
+

DragVector3

WidgetHasState
Drag.DragVector3: Iris.DragVector3

A field which allows the user to click and drag their cursor to enter a Vector3. You can ctrl + click to directly input a Vector3, like InputVector3. @@ -95,7 +95,7 @@ editingText: State<boolean>? } -

DragUDim

WidgetHasState
Drag.DragUDim: Iris.DragUDim
+

DragUDim

WidgetHasState
Drag.DragUDim: Iris.DragUDim

A field which allows the user to click and drag their cursor to enter a UDim. You can ctrl + click to directly input a UDim, like InputUDim. @@ -119,7 +119,7 @@ editingText: State<boolean>? } -

DragUDim2

WidgetHasState
Drag.DragUDim2: Iris.DragUDim2
+

DragUDim2

WidgetHasState
Drag.DragUDim2: Iris.DragUDim2

A field which allows the user to click and drag their cursor to enter a UDim2. You can ctrl + click to directly input a UDim2, like InputUDim2. @@ -143,7 +143,7 @@ editingText: State<boolean>? } -

DragRect

WidgetHasState
Drag.DragRect: Iris.DragRect
+

DragRect

WidgetHasState
Drag.DragRect: Iris.DragRect

A field which allows the user to click and drag their cursor to enter a Rect. You can ctrl + click to directly input a Rect, like InputRect. @@ -167,55 +167,6 @@ editingText: State<boolean>? } -

InputColor3

WidgetHasState
Drag.InputColor3: Iris.InputColor3
-

- An input box for Color3. The input boxes are draggable between 0 and 255 or if UseFloats then between 0 and 1. - Input can also be done using HSV instead of the default RGB. - If no format argument is provided then a default R, G, B or H, S, V prefix is applied. -

-
hasChildren = false
-hasState = true
-Arguments = {
-    Text: string? = "InputColor3",
-    UseFloats: boolean? = false, -- constrain the values between floats 0 and 1 or integers 0 and 255.
-    UseHSV: boolean? = false, -- input using HSV instead.
-    Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.
-}
-Events = {
-    numberChanged: () -> boolean,
-    hovered: () -> boolean
-}
-States = {
-    color: State<Color3>?,
-    editingText: State<boolean>?
-}
-
-

InputColor4

WidgetHasState
Drag.InputColor4: Iris.InputColor4
-

- An input box for Color4. Color4 is a combination of Color3 and a fourth transparency argument. - It has two states for this purpose. - The input boxes are draggable between 0 and 255 or if UseFloats then between 0 and 1. - Input can also be done using HSV instead of the default RGB. - If no format argument is provided then a default R, G, B, T or H, S, V, T prefix is applied. -

-
hasChildren = false
-hasState = true
-Arguments = {
-    Text: string? = "InputColor4",
-    UseFloats: boolean? = false, -- constrain the values between floats 0 and 1 or integers 0 and 255.
-    UseHSV: boolean? = false, -- input using HSV instead.
-    Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.
-}
-Events = {
-    numberChanged: () -> boolean,
-    hovered: () -> boolean
-}
-States = {
-    color: State<Color3>?,
-    transparency: State<number>?,
-    editingText: State<boolean>?
-}
-
Show raw api
{
     "functions": [],
     "properties": [
@@ -228,7 +179,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 881,
+                "line": 889,
                 "path": "lib/API.lua"
             }
         },
@@ -241,7 +192,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 913,
+                "line": 921,
                 "path": "lib/API.lua"
             }
         },
@@ -254,7 +205,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 945,
+                "line": 953,
                 "path": "lib/API.lua"
             }
         },
@@ -267,7 +218,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 977,
+                "line": 985,
                 "path": "lib/API.lua"
             }
         },
@@ -280,7 +231,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 1009,
+                "line": 1017,
                 "path": "lib/API.lua"
             }
         },
@@ -293,33 +244,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 1041,
-                "path": "lib/API.lua"
-            }
-        },
-        {
-            "name": "InputColor3",
-            "desc": "An input box for Color3. The input boxes are draggable between 0 and 255 or if UseFloats then between 0 and 1.\nInput can also be done using HSV instead of the default RGB.\nIf no format argument is provided then a default R, G, B or H, S, V prefix is applied.\n\n```lua\nhasChildren = false\nhasState = true\nArguments = {\n    Text: string? = \"InputColor3\",\n    UseFloats: boolean? = false, -- constrain the values between floats 0 and 1 or integers 0 and 255.\n    UseHSV: boolean? = false, -- input using HSV instead.\n    Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\n}\nEvents = {\n    numberChanged: () -> boolean,\n    hovered: () -> boolean\n}\nStates = {\n    color: State<Color3>?,\n    editingText: State<boolean>?\n}\n```\n    ",
-            "lua_type": "Iris.InputColor3",
-            "tags": [
-                "Widget",
-                "HasState"
-            ],
-            "source": {
-                "line": 1072,
-                "path": "lib/API.lua"
-            }
-        },
-        {
-            "name": "InputColor4",
-            "desc": "An input box for Color4. Color4 is a combination of Color3 and a fourth transparency argument.\nIt has two states for this purpose.\nThe input boxes are draggable between 0 and 255 or if UseFloats then between 0 and 1.\nInput can also be done using HSV instead of the default RGB.\nIf no format argument is provided then a default R, G, B, T or H, S, V, T prefix is applied.\n\n```lua\nhasChildren = false\nhasState = true\nArguments = {\n    Text: string? = \"InputColor4\",\n    UseFloats: boolean? = false, -- constrain the values between floats 0 and 1 or integers 0 and 255.\n    UseHSV: boolean? = false, -- input using HSV instead.\n    Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\n}\nEvents = {\n    numberChanged: () -> boolean,\n    hovered: () -> boolean\n}\nStates = {\n    color: State<Color3>?,\n    transparency: State<number>?,\n    editingText: State<boolean>?\n}\n```\n    ",
-            "lua_type": "Iris.InputColor4",
-            "tags": [
-                "Widget",
-                "HasState"
-            ],
-            "source": {
-                "line": 1106,
+                "line": 1049,
                 "path": "lib/API.lua"
             }
         }
@@ -328,11 +253,11 @@
     "name": "Drag",
     "desc": "Drag Widget API\n\nA draggable widget for each datatype. Allows direct typing input but also dragging values by clicking and holding.\n\nSee [Input] for more details on the arguments.\n    ",
     "source": {
-        "line": 850,
+        "line": 858,
         "path": "lib/API.lua"
     }
-}
- - +}
+ + \ No newline at end of file diff --git a/api/Format/index.html b/api/Format/index.html index 8ad23ee..b1ba3e1 100644 --- a/api/Format/index.html +++ b/api/Format/index.html @@ -6,19 +6,19 @@ Format | Iris - - + +
-
Skip to main content

Format

Properties

Separator

Widget
Format.Separator: Iris.Separator

A vertical or horizonal line, depending on the context, which visually seperates widgets.

hasChildren = false
 hasState = false
 
-

Indent

WidgetHasChildren
Format.Indent: Iris.Indent
+

Indent

WidgetHasChildren
Format.Indent: Iris.Indent

Indents its child widgets.

hasChildren = true
 hasState = false
@@ -26,7 +26,7 @@
     Width: number? = Iris._config.IndentSpacing -- indent width ammount.
 }
 
-

Sameline

WidgetHasChildren
Format.Sameline: Iris.Sameline
+

Sameline

WidgetHasChildren
Format.Sameline: Iris.Sameline

Positions its children in a row, horizontally.

hasChildren = true
 hasState = false
@@ -35,7 +35,7 @@
     VerticalAlignment: Enum.VerticalAlignment? = Enum.VerticalAlignment.Center -- how widgets are aligned to the widget.
 }
 
-

Group

WidgetHasChildren
Format.Group: Iris.Group
+

Group

WidgetHasChildren
Format.Group: Iris.Group

Layout widget which contains its children as a single group.

hasChildren = true
 hasState = false
@@ -51,7 +51,7 @@
                 "Widget"
             ],
             "source": {
-                "line": 248,
+                "line": 256,
                 "path": "lib/API.lua"
             }
         },
@@ -64,7 +64,7 @@
                 "HasChildren"
             ],
             "source": {
-                "line": 266,
+                "line": 274,
                 "path": "lib/API.lua"
             }
         },
@@ -77,7 +77,7 @@
                 "HasChildren"
             ],
             "source": {
-                "line": 285,
+                "line": 293,
                 "path": "lib/API.lua"
             }
         },
@@ -90,7 +90,7 @@
                 "HasChildren"
             ],
             "source": {
-                "line": 300,
+                "line": 308,
                 "path": "lib/API.lua"
             }
         }
@@ -99,11 +99,11 @@
     "name": "Format",
     "desc": "Format API\n    ",
     "source": {
-        "line": 235,
+        "line": 243,
         "path": "lib/API.lua"
     }
-}
- - +}
+ + \ No newline at end of file diff --git a/api/Input/index.html b/api/Input/index.html index 2d13cf2..2fd88fc 100644 --- a/api/Input/index.html +++ b/api/Input/index.html @@ -70,12 +70,12 @@ For example, a Vector3 box will have the append values of "X: ", "Y: " and "Z: " to the relevant input box. ::: "> - - + +
-
Skip to main content

Input

+

Input

Input Widget API

Input Widgets are textboxes for typing in specific number values. See Drag, Slider or InputText for more input types.

@@ -118,7 +118,7 @@

-

Properties

InputNum

WidgetHasState
Input.InputNum: Iris.InputNum
+

Properties

InputNum

WidgetHasState
Input.InputNum: Iris.InputNum

An input box for numbers. The number can be either an integer or a float.

hasChildren = false
 hasState = true
@@ -139,7 +139,7 @@ 
: State<boolean>? }
-

InputVector2

WidgetHasState
Input.InputVector2: Iris.InputVector2
+

InputVector2

WidgetHasState
Input.InputVector2: Iris.InputVector2

An input box for Vector2. The numbers can be either integers or floats.

hasChildren = false
 hasState = true
@@ -159,7 +159,7 @@ 
: State<boolean>? }
-

InputVector3

WidgetHasState
Input.InputVector3: Iris.InputVector3
+

InputVector3

WidgetHasState
Input.InputVector3: Iris.InputVector3

An input box for Vector3. The numbers can be either integers or floats.

hasChildren = false
 hasState = true
@@ -179,7 +179,7 @@ 
: State<boolean>? }
-

InputUDim

WidgetHasState
Input.InputUDim: Iris.InputUDim
+

InputUDim

WidgetHasState
Input.InputUDim: Iris.InputUDim

An input box for UDim. The Scale box will be a float and the Offset box will be an integer, unless specified differently. @@ -202,7 +202,7 @@

: State<boolean>? } -

InputUDim2

WidgetHasState
Input.InputUDim2: Iris.InputUDim2
+

InputUDim2

WidgetHasState
Input.InputUDim2: Iris.InputUDim2

An input box for UDim2. The Scale boxes will be floats and the Offset boxes will be integers, unless specified differently. @@ -225,7 +225,7 @@

: State<boolean>? } -

InputRect

WidgetHasState
Input.InputRect: Iris.InputRect
+

InputRect

WidgetHasState
Input.InputRect: Iris.InputRect

An input box for Rect. The numbers will default to integers, unless specified differently.

hasChildren = false
 hasState = true
@@ -245,6 +245,55 @@ 
: State<boolean>? }
+

InputColor3

WidgetHasState
Input.InputColor3: Iris.InputColor3
+

+ An input box for Color3. The input boxes are draggable between 0 and 255 or if UseFloats then between 0 and 1. + Input can also be done using HSV instead of the default RGB. + If no format argument is provided then a default R, G, B or H, S, V prefix is applied. +

+
hasChildren = false
+hasState = true
+Arguments = {
+    Text: string? = "InputColor3",
+    UseFloats: boolean? = false, -- constrain the values between floats 0 and 1 or integers 0 and 255.
+    UseHSV: boolean? = false, -- input using HSV instead.
+    Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.
+}
+Events = {
+    numberChanged: () -> boolean,
+    hovered: () -> boolean
+}
+States = {
+    color: State<Color3>?,
+    editingText: State<boolean>?
+}
+
+

InputColor4

WidgetHasState
Input.InputColor4: Iris.InputColor4
+

+ An input box for Color4. Color4 is a combination of Color3 and a fourth transparency argument. + It has two states for this purpose. + The input boxes are draggable between 0 and 255 or if UseFloats then between 0 and 1. + Input can also be done using HSV instead of the default RGB. + If no format argument is provided then a default R, G, B, T or H, S, V, T prefix is applied. +

+
hasChildren = false
+hasState = true
+Arguments = {
+    Text: string? = "InputColor4",
+    UseFloats: boolean? = false, -- constrain the values between floats 0 and 1 or integers 0 and 255.
+    UseHSV: boolean? = false, -- input using HSV instead.
+    Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.
+}
+Events = {
+    numberChanged: () -> boolean,
+    hovered: () -> boolean
+}
+States = {
+    color: State<Color3>?,
+    transparency: State<number>?,
+    editingText: State<boolean>?
+}
+
Show raw api
{
     "functions": [],
     "properties": [
@@ -257,7 +306,7 @@ 
- - +}
+ + \ No newline at end of file diff --git a/api/Internal/index.html b/api/Internal/index.html index 4a83c41..1517106 100644 --- a/api/Internal/index.html +++ b/api/Internal/index.html @@ -8,24 +8,24 @@ "> - - + +
-
Skip to main content

Internal

+

Internal

An internal class within Iris containing all the backend data and functions for Iris to operate. It is recommended that you don't generally interact with Internal unless you understand what you are doing.

-

Properties

_cycleCoroutine

Internal._cycleCoroutine: thread
+

Properties

_cycleCoroutine

Internal._cycleCoroutine: thread

The thread which handles all connected functions. Each connection is within a pcall statement which prevents Iris from crashing and instead stopping at the error.

-

Functions

_cycle

Internal._cycle() → ()
+

Functions

_cycle

Internal._cycle() → ()

Called every frame to handle all of the widget management. Any previous frame data is ammended and everything updates.

-

WidgetConstructor

Internal.WidgetConstructor(
typestring,-- +

WidgetConstructor

Internal.WidgetConstructor(
typestring,--

name used to denote the widget class.

widgetClassTypes.WidgetClass--

table of methods for the new widget.

@@ -35,7 +35,7 @@ of widgets, and simplifies the available functions which can be applied to any widget. The widgets themselves are dumb tables containing all the data but no methods to handle any of the data apart from events.

-

_Insert

Internal._Insert(
widgetType:string,-- +

_Insert

Internal._Insert(
widgetType:string,--

name of widget class.

argumentsTypes.WidgetArguments?,--

arguments of the widget.

@@ -48,7 +48,7 @@ Every widget is created through _Insert. An ID is generated based on the line of the calling code and is used to find the previous frame widget if it exists. If no widget exists, a new one is created.

-

_GenNewWidget

Internal._GenNewWidget(
widgetTypestring,
argumentsTypes.Arguments,-- +

_GenNewWidget

Internal._GenNewWidget(
widgetTypestring,
argumentsTypes.Arguments,--

arguments of the widget.

statesTypes.States?,--

states of the widget.

@@ -61,7 +61,7 @@ All widgets are created as tables with properties. The widget class contains the functions to create the UI instances and update the widget or change state.

-

_ContinueWidget

Internal._ContinueWidget(
IDTypes.ID,-- +

_ContinueWidget

Internal._ContinueWidget(
IDTypes.ID,--

id of the widget.

widgetTypestring
) → Types.Widget--

the widget.

@@ -71,13 +71,13 @@ arguments or states. Basically equivalent to the end of Internal._Insert.

-

_DiscardWidget

Internal._DiscardWidget(widgetToDiscardTypes.Widget) → ()
+

_DiscardWidget

Internal._DiscardWidget(widgetToDiscardTypes.Widget) → ()

Destroys the widget instance and updates any parent. This happens if the widget was not called in the previous frame. There is no code which needs to update any widget tables since they are already reset at the start before discarding happens.

-

_widgetState

Internal._widgetState(
thisWidgetTypes.Widget,-- +

_widgetState

Internal._widgetState(
thisWidgetTypes.Widget,--

widget the state belongs to.

stateNamestring,
initialValueany
) → Types.State--

the state for the widget.

@@ -86,18 +86,18 @@ Connects the state to the widget. If no state exists then a new one is created. Called for every state in every widget if the user does not provide a state.

-

_EventCall

Internal._EventCall(
thisWidgetTypes.Widget,
evetNamestring
) → boolean-- +

_EventCall

Internal._EventCall(
thisWidgetTypes.Widget,
evetNamestring
) → boolean--

the value of the event.

A wrapper for any event on any widget. Automatically, Iris does not initialize events unless they are explicitly called so in the first frame, the event connections are set up. Every event is a function which returns a boolean.

-

_GetParentWidget

Internal._GetParentWidget() → Types.Widget-- +

_GetParentWidget

Internal._GetParentWidget() → Types.Widget--

the parent widget

Returns the parent widget of the currently active widget, based on the stack depth.

-

_getID

Internal._getID(
levelsToIgnorenumber-- +

_getID

Internal._getID(
levelsToIgnorenumber--

used to skip over internal calls to _getID.

) → ()

@@ -114,7 +114,7 @@ "returns": [], "function_type": "static", "source": { - "line": 177, + "line": 181, "path": "lib/Internal.lua" } }, @@ -126,7 +126,7 @@ "function_type": "static", "ignore": true, "source": { - "line": 280, + "line": 284, "path": "lib/Internal.lua" } }, @@ -148,7 +148,7 @@ "returns": [], "function_type": "static", "source": { - "line": 294, + "line": 298, "path": "lib/Internal.lua" } }, @@ -180,7 +180,7 @@ ], "function_type": "static", "source": { - "line": 403, + "line": 407, "path": "lib/Internal.lua" } }, @@ -217,7 +217,7 @@ ], "function_type": "static", "source": { - "line": 483, + "line": 487, "path": "lib/Internal.lua" } }, @@ -244,7 +244,7 @@ ], "function_type": "static", "source": { - "line": 557, + "line": 561, "path": "lib/Internal.lua" } }, @@ -261,7 +261,7 @@ "returns": [], "function_type": "static", "source": { - "line": 580, + "line": 584, "path": "lib/Internal.lua" } }, @@ -293,7 +293,7 @@ ], "function_type": "static", "source": { - "line": 602, + "line": 606, "path": "lib/Internal.lua" } }, @@ -320,7 +320,7 @@ ], "function_type": "static", "source": { - "line": 628, + "line": 632, "path": "lib/Internal.lua" } }, @@ -336,7 +336,7 @@ ], "function_type": "static", "source": { - "line": 647, + "line": 651, "path": "lib/Internal.lua" } }, @@ -348,7 +348,7 @@ "function_type": "static", "ignore": true, "source": { - "line": 660, + "line": 664, "path": "lib/Internal.lua" } }, @@ -360,7 +360,7 @@ "function_type": "static", "ignore": true, "source": { - "line": 673, + "line": 677, "path": "lib/Internal.lua" } }, @@ -372,7 +372,7 @@ "function_type": "static", "ignore": true, "source": { - "line": 687, + "line": 691, "path": "lib/Internal.lua" } }, @@ -389,7 +389,7 @@ "returns": [], "function_type": "static", "source": { - "line": 727, + "line": 731, "path": "lib/Internal.lua" } }, @@ -412,7 +412,7 @@ "function_type": "static", "ignore": true, "source": { - "line": 765, + "line": 769, "path": "lib/Internal.lua" } }, @@ -430,7 +430,7 @@ "function_type": "static", "ignore": true, "source": { - "line": 795, + "line": 799, "path": "lib/Internal.lua" } } @@ -453,8 +453,8 @@ "line": 9, "path": "lib/Internal.lua" } -}

- - +}
+ + \ No newline at end of file diff --git a/api/Iris/index.html b/api/Iris/index.html index e7f95a4..2b5770e 100644 --- a/api/Iris/index.html +++ b/api/Iris/index.html @@ -4,24 +4,61 @@ Iris | Iris - - +A set of internal functions can be found in `Iris.Internal` (only use if you understand). + +In its simplest form, users may start Iris by using +```lua +Iris.Init() + +Iris:Connect(function() + Iris.Window({"My First Window!"}) + Iris.Text({"Hello, World"}) + Iris.Button({"Save"}) + Iris.InputNum({"Input"}) + Iris.End() +end) +```"> + +
-
Skip to main content

Iris

+

Iris

Iris; contains the all user-facing functions and properties. - A set of internal functions can be found in Iris.Internal (only use unless you understand). + A set of internal functions can be found in Iris.Internal (only use if you understand).

-

Properties

Disabled

Iris.Disabled: boolean
+

In its simplest form, users may start Iris by using

+
Iris.Init()
+
+Iris:Connect(function()
+    Iris.Window({"My First Window!"})
+        Iris.Text({"Hello, World"})
+        Iris.Button({"Save"})
+        Iris.InputNum({"Input"})
+    Iris.End()
+end)
+
+

Properties

Disabled

Iris.Disabled: boolean

While Iris.Disabled is true, execution of Iris and connected functions will be paused. The widgets are not destroyed, they are just frozen so no changes will happen to them.

-

Args

Iris.Args: table
+

Args

Iris.Args: table

Provides a list of every possible Argument for each type of widget to it's index. For instance, Iris.Args.Window.NoResize. @@ -29,31 +66,45 @@

Iris.Window({"My Window", [Iris.Args.Window.NoResize] = true})
 
-

TemplateConfig

Iris.TemplateConfig: table
+

TemplateConfig

Iris.TemplateConfig: table

TemplateConfig provides a table of default styles and configurations which you may apply to your UI.

-

Functions

SetFocusedWindow

Iris.SetFocusedWindow(
windowTypes.Widget-- +

Functions

SetFocusedWindow

Iris.SetFocusedWindow(
windowTypes.Widget--

the window to focus.

) → ()

Sets the focused window to the window provided, which brings it to the front and makes it active.

-

Init

Iris.Init(
parentInstanceInstance | nil,-- -

instance which Iris will place UI in. defaults to PlayerGui if unspecified

-
eventConnectionRBXScriptSignal | () → {} | nil
) → Iris
-

- Initializes Iris and begins rendering. May only be called once. - By default, Iris will create its widgets under the PlayerGui and use the Heartbeat event. -

-

Append

Iris.Append() → ()
+

Init

Iris.Init(
parentInstanceBasePlayerGui?,-- +

where Iris will place widgets UIs under, defaulting to PlayerGui

+
eventConnection(RBXScriptSignal | () → ())?,-- +

the event to determine an Iris cycle, defaulting to [Heartbeat]

+
config{[string]any}?
) → Iris
+

Initializes Iris and begins rendering. May only be called once.

+

See Iris.Shutdown to stop Iris, or Iris.Disabled to temporarily disable Iris.

+

Once initialized, Iris.Connect can be used to create a widget.

+

Shutdown

Iris.Shutdown() → ()
+

Shuts Iris down. This can only be called once, and Iris cannot be started once shut down.

+

Append

Iris.Append(
userInstanceGuiObject-- +

the Roblox Instance to insert into Iris

+
) → ()
+

Inserts any Roblox Instance into Iris.

- Allows the caller to insert any Roblox Instance into Iris. The parent can either be determined by the _config.Parent + The parent of the inserted instance can either be determined by the _config.Parent property or by the current parent widget from the stack.

-

End

Iris.End() → ()
-

This function marks the end of any widgets which contain children. For example:

+

End

Iris.End() → ()
+

Marks the end of any widgets which contain children. For example:

-- Widgets placed here **will not** be inside the tree
+Iris.Text({"Above and outside the tree"})
+
+-- A Tree widget can contain children.
+-- We must therefore remember to call `Iris.End()` 
 Iris.Tree({"My First Tree"})
     -- Widgets placed here **will** be inside the tree
+    Iris.Text({"Tree item 1"})
+    Iris.Text({"Tree item 2"})
 Iris.End()
+
 -- Widgets placed here **will not** be inside the tree
+Iris.Text({"Below and outside the tree"})
 
@@ -64,11 +115,12 @@

Seeing the error Callback has too few calls to Iris.End() or Callback has too many calls to Iris.End()? - Using the wrong amount of Iris.End() calls in your code will lead to an error. Each widget called which might have children should be paired with a call to Iris.End(), Even if the Widget doesnt currently have any children. + Using the wrong amount of Iris.End() calls in your code will lead to an error.

+

Each widget called which might have children should be paired with a call to Iris.End(), even if the Widget doesnt currently have any children.

-

ForceRefresh

Iris.ForceRefresh() → ()
+

ForceRefresh

Iris.ForceRefresh() → ()

Destroys and regenerates all instances used by Iris. Useful if you want to propogate state changes.

@@ -83,13 +135,13 @@
-

UpdateGlobalConfig

Iris.UpdateGlobalConfig(
deltaStyletable-- +

UpdateGlobalConfig

Iris.UpdateGlobalConfig(
deltaStyle{[string]any}--

a table containing the changes in style ex: {ItemWidth = UDim.new(0, 100)}

) → ()
-

- Allows callers to customize the config which every widget will inherit from. - It can be used along with Iris.TemplateConfig to easily swap styles, ex: Iris.UpdateGlobalConfig(Iris.TemplateConfig.colorLight) -- use light theme -

+

Customizes the configuration which every widget will inherit from.

+

It can be used along with Iris.TemplateConfig to easily swap styles, for example:

+
Iris.UpdateGlobalConfig(Iris.TemplateConfig.colorLight) -- use light theme
+
@@ -97,36 +149,36 @@
Caution: Performance
+

This function internally calls Iris.ForceRefresh so that style changes are propogated.

- this function internally calls Iris.ForceRefresh so that style changes are propogated, it may cause performance issues when used with many widgets. + As such, it may cause performance issues when used with many widgets. In no case should it be called every frame.

-

PushConfig

Iris.PushConfig(
deltaStyletable-- +

PushConfig

Iris.PushConfig(
deltaStyletable--

a table containing the changes in style ex: {ItemWidth = UDim.new(0, 100)}

) → ()
-

- Allows callers to cascade a style, meaning that styles may be locally and hierarchically applied. - Each call to Iris.PushConfig must be paired with a call to Iris.PopConfig. - For example: -

-
Iris.PushConfig({TextColor = Color3.fromRGB(128, 0, 256)})
+

Allows cascading of a style by allowing styles to be locally and hierarchically applied.

+

Each call to Iris.PushConfig must be paired with a call to Iris.PopConfig, for example:

+
Iris.Text({"boring text"})
+
+Iris.PushConfig({TextColor = Color3.fromRGB(128, 0, 256)})
     Iris.Text({"Colored Text!"})
 Iris.PopConfig()
+
+Iris.Text({"boring text"})
 
-

PopConfig

Iris.PopConfig() → ()
-

- Ends a PushConfig style. - Each call to Iris.PushConfig must be paired with a call to Iris.PopConfig. -

-

PushId

Iris.PushId(
idTypes.ID-- -

custom id.

+

PopConfig

Iris.PopConfig() → ()
+

Ends a Iris.PushConfig style.

+

Each call to Iris.PopConfig should match a call to Iris.PushConfig.

+

PushId

Iris.PushId(
idTypes.ID-- +

custom id

) → ()

Sets the id discriminator for the next widgets. Use Iris.PopId to remove it.

-

PopId

Iris.PopId() → ()
+

PopId

Iris.PopId() → ()

Removes the id discriminator set by Iris.PushId.

-

SetNextWidgetId

Iris.SetNextWidgetId(
idTypes.ID-- +

SetNextWidgetID

Iris.SetNextWidgetID(
idTypes.ID--

custom id.

) → ()

Sets the id for the next widget. Useful for using Iris.Append on the same widget.

@@ -144,10 +196,10 @@
-- both text widgets will be placed under the same window despite being called separately. -

State

Iris.State(
initialValueany-- -

The initial value for the state

-
) → ()
-

Constructs a new state object, subsequent ID calls will return the same object

+

State

Iris.State(
initialValueany-- +

the initial value for the state

+
) → Types.State
+

Constructs a new State object. Subsequent ID calls will return the same object.

@@ -180,11 +232,11 @@
In this example, the code will work properly, and increment every frame.

-

WeakState

Iris.WeakState(
initialValueany-- +

WeakState

Iris.WeakState(
initialValueany--

The initial value for the state

) → ()

Constructs a new state object, subsequent ID calls will return the same object, except all widgets connected to the state are discarded, the state reverts to the passed initialValue

-

ComputedState

Iris.ComputedState(
firstStateState,-- +

ComputedState

Iris.ComputedState(
firstStateState,--

State to bind to.

onChangeCallbackfunction--

callback which should return a value transformed from the firstState value

@@ -204,7 +256,7 @@
-

ShowDemoWindow

Iris.ShowDemoWindow() → ()
+

ShowDemoWindow

Iris.ShowDemoWindow() → ()

ShowDemoWindow is a function which creates a Demonstration window. this window contains many useful utilities for coders, and serves as a refrence for using each part of the library. Ideally, the DemoWindow should always be available in your UI. @@ -212,13 +264,12 @@

Iris:Connect(Iris.ShowDemoWindow)
 
-

Shutdown

Iris:Shutdown() → ()

Connect

Iris:Connect(
callbackfunction-- -

the callback containg the Iris code.

-
) → ()
-

- Allows users to connect a function which will execute every Iris cycle, (cycle is determined by the callback or event passed to Iris.Init or default to Heartbeat). - Multiple callbacks can be added to Iris from many different scripts or modules. -

+

Connect

Iris:Connect(
callback() → ()-- +

the callback containg the Iris code

+
) → () → ()--thisusesmethodsyntaxfornoreason.
+

Connects a function which will execute every Iris cycle. Iris.Init must be called before connecting.

+

A cycle is determined by the eventConnection passed to Iris.Init (default to RunService.Heartbeat).

+

Multiple callbacks can be added to Iris from many different scripts or modules.

Show raw api
{
     "functions": [
         {
@@ -234,23 +285,28 @@ 
- - +}
+ + \ No newline at end of file diff --git a/api/Menu/index.html b/api/Menu/index.html index ac7e8f3..693d54c 100644 --- a/api/Menu/index.html +++ b/api/Menu/index.html @@ -6,14 +6,14 @@ Menu | Iris - - + +
-
Skip to main content

Menu

Properties

WidgetHasChildren
Menu.MenuBar: Iris.MenuBar

Creates a MenuBar for the current window. Must be called directly under a Window and not within a child widget.

@@ -29,7 +29,7 @@
hasChildren = true hasState = false -
WidgetHasChildrenHasState
Menu.Menu: Iris.Menu
+
WidgetHasChildrenHasState
Menu.Menu: Iris.Menu

Creates an collapsable menu. If the Menu is created directly under a MenuBar, then the widget will be placed horizontally below the window title. If the menu Menu is created within another menu, then @@ -64,7 +64,7 @@

: State<boolean>? -- whether the menu is open, including any sub-menus within. } -
Widget
Menu.MenuItem: Iris.MenuItem
+
Widget
Menu.MenuItem: Iris.MenuItem

Creates a button within a menu. The optional KeyCode and ModiferKey arguments will show the keys next to the title, but will not bind any connection to them. You will need to do this yourself. @@ -81,7 +81,7 @@

: () -> boolean } -
WidgetHasState
Menu.MenuToggle: Iris.MenuToggle
+
WidgetHasState
Menu.MenuToggle: Iris.MenuToggle

Creates a togglable button within a menu. The optional KeyCode and ModiferKey arguments act the same as the MenuItem. It is not visually the same as a checkbox, but has the same functionality. @@ -114,7 +114,7 @@

- - +}
+ + \ No newline at end of file diff --git a/api/Plot/index.html b/api/Plot/index.html index 458471a..52fe1b9 100644 --- a/api/Plot/index.html +++ b/api/Plot/index.html @@ -6,14 +6,14 @@ Plot | Iris - - + +
-
Skip to main content

Plot

Properties

ProgressBar

WidgetHasState
Plot.ProgressBar: Iris.PrograssBar

A progress bar line with a state value to show the current state.

hasChildren = false
 hasState = true
@@ -41,7 +41,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 1548,
+                "line": 1556,
                 "path": "lib/API.lua"
             }
         }
@@ -50,11 +50,11 @@
     "name": "Plot",
     "desc": "Plot Widget API\n    ",
     "source": {
-        "line": 1523,
+        "line": 1531,
         "path": "lib/API.lua"
     }
-}
- - +}
+ + \ No newline at end of file diff --git a/api/Slider/index.html b/api/Slider/index.html index f20415b..fda178b 100644 --- a/api/Slider/index.html +++ b/api/Slider/index.html @@ -16,19 +16,19 @@ See [Input] for more details on the arguments. "> - - + +
-
Skip to main content

Slider

+

Slider

Slider Widget API

A draggable widget with a visual bar constrained between a min and max for each datatype. Allows direct typing input but also dragging the slider by clicking and holding anywhere in the box.

See Input for more details on the arguments.

-

Properties

SliderNum

WidgetHasState
Slider.SliderNum: Iris.SliderNum
+

Properties

SliderNum

WidgetHasState
Slider.SliderNum: Iris.SliderNum

A field which allows the user to slide a grip to enter a number within a range. You can ctrl + click to directly input a number, like InputNum. @@ -51,7 +51,7 @@ editingText: State<boolean>? } -

SliderVector2

WidgetHasState
Slider.SliderVector2: Iris.SliderVector2
+

SliderVector2

WidgetHasState
Slider.SliderVector2: Iris.SliderVector2

A field which allows the user to slide a grip to enter a Vector2 within a range. You can ctrl + click to directly input a Vector2, like InputVector2. @@ -74,7 +74,7 @@ editingText: State<boolean>? } -

SliderVector3

WidgetHasState
Slider.SliderVector3: Iris.SliderVector3
+

SliderVector3

WidgetHasState
Slider.SliderVector3: Iris.SliderVector3

A field which allows the user to slide a grip to enter a Vector3 within a range. You can ctrl + click to directly input a Vector3, like InputVector3. @@ -97,7 +97,7 @@ editingText: State<boolean>? } -

SliderUDim

WidgetHasState
Slider.SliderUDim: Iris.SliderUDim
+

SliderUDim

WidgetHasState
Slider.SliderUDim: Iris.SliderUDim

A field which allows the user to slide a grip to enter a UDim within a range. You can ctrl + click to directly input a UDim, like InputUDim. @@ -120,7 +120,7 @@ editingText: State<boolean>? } -

SliderUDim2

WidgetHasState
Slider.SliderUDim2: Iris.SliderUDim2
+

SliderUDim2

WidgetHasState
Slider.SliderUDim2: Iris.SliderUDim2

A field which allows the user to slide a grip to enter a UDim2 within a range. You can ctrl + click to directly input a UDim2, like InputUDim2. @@ -143,7 +143,7 @@ editingText: State<boolean>? } -

SliderRect

WidgetHasState
Slider.SliderRect: Iris.SliderRect
+

SliderRect

WidgetHasState
Slider.SliderRect: Iris.SliderRect

A field which allows the user to slide a grip to enter a Rect within a range. You can ctrl + click to directly input a Rect, like InputRect. @@ -178,7 +178,7 @@ "HasState" ], "source": { - "line": 1152, + "line": 1160, "path": "lib/API.lua" } }, @@ -191,7 +191,7 @@ "HasState" ], "source": { - "line": 1183, + "line": 1191, "path": "lib/API.lua" } }, @@ -204,7 +204,7 @@ "HasState" ], "source": { - "line": 1214, + "line": 1222, "path": "lib/API.lua" } }, @@ -217,7 +217,7 @@ "HasState" ], "source": { - "line": 1245, + "line": 1253, "path": "lib/API.lua" } }, @@ -230,7 +230,7 @@ "HasState" ], "source": { - "line": 1276, + "line": 1284, "path": "lib/API.lua" } }, @@ -243,7 +243,7 @@ "HasState" ], "source": { - "line": 1307, + "line": 1315, "path": "lib/API.lua" } }, @@ -257,7 +257,7 @@ ], "private": true, "source": { - "line": 1339, + "line": 1347, "path": "lib/API.lua" } } @@ -266,11 +266,11 @@ "name": "Slider", "desc": "Slider Widget API\n\nA draggable widget with a visual bar constrained between a min and max for each datatype.\nAllows direct typing input but also dragging the slider by clicking and holding anywhere in the box.\n\nSee [Input] for more details on the arguments.\n ", "source": { - "line": 1122, + "line": 1130, "path": "lib/API.lua" } -}

- - +}
+ + \ No newline at end of file diff --git a/api/State/index.html b/api/State/index.html index 1afb577..21d68db 100644 --- a/api/State/index.html +++ b/api/State/index.html @@ -21,7 +21,7 @@ ``` :::caution -Never call ':set()` on a state when inside the the `:onChange()` callback of the same state. This will cause a continous callback. +Never call `:set()` on a state when inside the `:onChange()` callback of the same state. This will cause a continous callback. Never chain states together so that each state changes the value of another state in a cyclic nature. This will cause a continous callback. ::: @@ -43,17 +43,17 @@ ``` :::caution -Never call ':set()` on a state when inside the the `:onChange()` callback of the same state. This will cause a continous callback. +Never call `:set()` on a state when inside the `:onChange()` callback of the same state. This will cause a continous callback. Never chain states together so that each state changes the value of another state in a cyclic nature. This will cause a continous callback. ::: "> - - + +
-
Skip to main content

State

+

State

This class wraps a value in getters and setters, its main purpose is to allow primatives to be passed as objects. Constructors for this class are available in Iris @@ -77,15 +77,15 @@

caution
-

Never call ':set()on a state when inside the the:onChange()` callback of the same state. This will cause a continous callback.

+

Never call :set() on a state when inside the :onChange() callback of the same state. This will cause a continous callback.

Never chain states together so that each state changes the value of another state in a cyclic nature. This will cause a continous callback.

-

Functions

get

State:get() → any
+

Functions

get

State:get() → any

Returns the states current value.

-

set

State:set() → ()
+

set

State:set() → ()

Allows the caller to assign the state object a new value, and returns the new value.

-

onChange

State:onChange() → ()
+

onChange

State:onChange() → ()

Allows the caller to connect a callback which is called when the states value is changed.

Show raw api
{
     "functions": [
@@ -131,13 +131,13 @@ 
- - +}
+ + \ No newline at end of file diff --git a/api/Table/index.html b/api/Table/index.html index 5efd17e..8a169fb 100644 --- a/api/Table/index.html +++ b/api/Table/index.html @@ -6,14 +6,14 @@ Table | Iris - - + +
-
Skip to main content

Table

Properties

Table

WidgetHasChildren
Table.Table: Iris.Table

A layout widget which allows children to be displayed in configurable columns and rows.

hasChildren = true
 hasState = false
@@ -27,14 +27,14 @@
     hovered: () -> boolean
 }
 
-

Functions

NextColumn

Table.NextColumn() → ()
+

Functions

NextColumn

Table.NextColumn() → ()

In a table, moves to the next available cell. if the current cell is in the last column, then the next cell will be the first column of the next row.

-

SetColumnIndex

Table.SetColumnIndex(indexnumber) → ()
+

SetColumnIndex

Table.SetColumnIndex(indexnumber) → ()

In a table, directly sets the index of the column.

-

NextRow

Table.NextRow() → ()
+

NextRow

Table.NextRow() → ()

In a table, moves to the next available row, skipping cells in the previous column if the last cell wasn't in the last column @@ -48,7 +48,7 @@ "returns": [], "function_type": "static", "source": { - "line": 1591, + "line": 1599, "path": "lib/API.lua" } }, @@ -65,7 +65,7 @@ "returns": [], "function_type": "static", "source": { - "line": 1602, + "line": 1610, "path": "lib/API.lua" } }, @@ -76,7 +76,7 @@ "returns": [], "function_type": "static", "source": { - "line": 1615, + "line": 1623, "path": "lib/API.lua" } } @@ -91,7 +91,7 @@ "HasChildren" ], "source": { - "line": 1582, + "line": 1590, "path": "lib/API.lua" } } @@ -100,11 +100,11 @@ "name": "Table", "desc": "Table Widget API\n ", "source": { - "line": 1559, + "line": 1567, "path": "lib/API.lua" } -}

- - +}
+ + \ No newline at end of file diff --git a/api/Text/index.html b/api/Text/index.html index c2e6a1e..cf09526 100644 --- a/api/Text/index.html +++ b/api/Text/index.html @@ -6,14 +6,14 @@ Text | Iris - - + +
-
Skip to main content

Text

Properties

Text

Widget
Text.Text: Iris.Text

A text label to display the text argument. The Wrapped argument will make the text wrap around if it is cut off by its parent. @@ -32,7 +32,7 @@ hovered: () -> boolean } -

SeparatorText

Widget
Text.SeparatorText: Iris.SeparatorText
+

SeparatorText

Widget
Text.SeparatorText: Iris.SeparatorText

Similar to Iris.Separator but with a text label to be used as a header when an Iris.Tree or Iris.CollapsingHeader is not appropriate. @@ -44,7 +44,7 @@ Text: string } -

InputText

WidgetHasState
Text.InputText: Iris.InputText
+

InputText

WidgetHasState
Text.InputText: Iris.InputText

A field which allows the user to enter text.

hasChildren = false
 hasState = true
@@ -60,7 +60,7 @@
     text: State<string>?
 }
 
-

TextWrapped

Widget
deprecated in v2.0.0
</>
This was deprecated in v2.0.0

Use 'Text' with the Wrapped argument or change the config.

Text.TextWrapped: Iris.Text
+

TextWrapped

Widget
deprecated in v2.0.0
</>
This was deprecated in v2.0.0

Use 'Text' with the Wrapped argument or change the config.

Text.TextWrapped: Iris.Text

An alias for Iris.Text with the Wrapped argument set to true, and the text will wrap around if cut off by its parent.

hasChildren = false
 hasState = false
@@ -71,7 +71,7 @@
     hovered: () -> boolean
 }
 
-

TextColored

Widget
deprecated in v2.0.0
</>
This was deprecated in v2.0.0

Use 'Text' with the Color argument or change the config.

Text.TextColored: Iris.Text
+

TextColored

Widget
deprecated in v2.0.0
</>
This was deprecated in v2.0.0

Use 'Text' with the Color argument or change the config.

Text.TextColored: Iris.Text

An alias for Iris.Text with the color set by the Color argument.

hasChildren = false
 hasState = false
@@ -94,7 +94,7 @@
                 "Widget"
             ],
             "source": {
-                "line": 336,
+                "line": 344,
                 "path": "lib/API.lua"
             }
         },
@@ -110,7 +110,7 @@
                 "desc": "Use 'Text' with the Wrapped argument or change the config."
             },
             "source": {
-                "line": 357,
+                "line": 365,
                 "path": "lib/API.lua"
             }
         },
@@ -126,7 +126,7 @@
                 "desc": "Use 'Text' with the Color argument or change the config."
             },
             "source": {
-                "line": 382,
+                "line": 390,
                 "path": "lib/API.lua"
             }
         },
@@ -138,7 +138,7 @@
                 "Widget"
             ],
             "source": {
-                "line": 406,
+                "line": 414,
                 "path": "lib/API.lua"
             }
         },
@@ -151,7 +151,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 432,
+                "line": 440,
                 "path": "lib/API.lua"
             }
         }
@@ -160,11 +160,11 @@
     "name": "Text",
     "desc": "Text Widget API\n    ",
     "source": {
-        "line": 311,
+        "line": 319,
         "path": "lib/API.lua"
     }
-}
- - +}
+ + \ No newline at end of file diff --git a/api/Tree/index.html b/api/Tree/index.html index 38119ee..bfbc886 100644 --- a/api/Tree/index.html +++ b/api/Tree/index.html @@ -6,14 +6,14 @@ Tree | Iris - - + +
-
Skip to main content

Tree

Properties

Tree

WidgetHasChildrenHasState
Tree.Tree: Iris.Tree

A collapsable container for other widgets, to organise and hide widgets when not needed. The state determines whether the child widgets are visible or not. Clicking on the widget will collapse or uncollapse it.

hasChildren: true
 hasState: true
@@ -31,7 +31,7 @@
     isUncollapsed: State<boolean>? -- whether the widget is collapsed.
 }
 
-

CollapsingHeader

WidgetHasChildrenHasState
Tree.CollapsingHeader: Iris.CollapsingHeader
+

CollapsingHeader

WidgetHasChildrenHasState
Tree.CollapsingHeader: Iris.CollapsingHeader

The same as a Tree Widget, but with a larger title and clearer, used mainly for organsing widgets on the first level of a window.

hasChildren: true
 hasState: true
@@ -60,7 +60,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 583,
+                "line": 591,
                 "path": "lib/API.lua"
             }
         },
@@ -74,7 +74,7 @@
                 "HasState"
             ],
             "source": {
-                "line": 610,
+                "line": 618,
                 "path": "lib/API.lua"
             }
         }
@@ -83,11 +83,11 @@
     "name": "Tree",
     "desc": "Tree Widget API\n    ",
     "source": {
-        "line": 555,
+        "line": 563,
         "path": "lib/API.lua"
     }
-}
- - +}
+ + \ No newline at end of file diff --git a/api/Window/index.html b/api/Window/index.html index 2d8f90f..fa9a2eb 100644 --- a/api/Window/index.html +++ b/api/Window/index.html @@ -11,6 +11,8 @@ Iris.End() ``` +![Example window](../assets/basicWindow.png) + If you do not want the code inside a window to run unless it is open then you can use the following: ```lua local window = Iris.Window({ "Many Widgets Window" }) @@ -28,6 +30,8 @@ Iris.End() ``` +![Example window](../assets/basicWindow.png) + If you do not want the code inside a window to run unless it is open then you can use the following: ```lua local window = Iris.Window({ "Many Widgets Window" }) @@ -38,17 +42,20 @@ Iris.End() -- must always call Iris.End(), regardless of whether the window is open or not. ``` "> - - + +
-
Skip to main content

Window

+

Window

Windows are the fundamental widget for Iris. Every other widget must be a descendant of a window.

Iris.Window({ "Example Window" })
     Iris.Text({ "This is an example window!" })
 Iris.End()
 
+

+ Example window +

If you do not want the code inside a window to run unless it is open then you can use the following:

local window = Iris.Window({ "Many Widgets Window" })
 
@@ -57,7 +64,7 @@
 end
 Iris.End() -- must always call Iris.End(), regardless of whether the window is open or not.
 
-

Properties

Window

WidgetHasChildrenHasState
Window.Window: Iris.Window
+

Properties

Window

WidgetHasChildrenHasState
Window.Window: Iris.Window

The top-level container for all other widgets to be created within. Can be moved and resized across the screen. Cannot contain embedded windows. @@ -85,15 +92,20 @@ hovered: () -> boolean -- fires when the mouse hovers over any of the window. } States = { - size = State<Vector2>?, + size = State<Vector2>? = Vector2.new(400, 300), position = State<Vector2>?, - isUncollapsed = State<boolean>?, - isOpened = State<boolean>?, + isUncollapsed = State<boolean>? = true, + isOpened = State<boolean>? = true, scrollDistance = State<number>? -- vertical scroll distance, if too short. } -

Tooltip

Widget
Window.Tooltip: Iris.Tooltip
+

Tooltip

Widget
Window.Tooltip: Iris.Tooltip

Displays a text label next to the cursor

+
Iris.Tooltip({"My custom tooltip"})
+
+

+ Basic tooltip example +

hasChildren = false
 hasState = false
 Arguments = {
@@ -105,7 +117,7 @@
     "properties": [
         {
             "name": "Window",
-            "desc": "The top-level container for all other widgets to be created within.\nCan be moved and resized across the screen. Cannot contain embedded windows.\nMenus can be appended to windows creating a menubar.\n\n```lua\nhasChildren = true\nhasState = true\nArguments = {\n    Title: string,\n    NoTitleBar: boolean? = false,\n    NoBackground: boolean? = false, -- the background behind the widget container.\n    NoCollapse: boolean? = false,\n    NoClose: boolean? = false,\n    NoMove: boolean? = false,\n    NoScrollbar: boolean? = false, -- the scrollbar if the window is too short for all widgets.\n    NoResize: boolean? = false,\n    NoNav: boolean? = false, -- unimplemented.\n    NoMenu: boolean? -- whether the menubar will show if created.\n}\nEvents = {\n    opened: () -> boolean, -- once when opened.\n    closed: () -> boolean, -- once when closed.\n    collapsed: () -> boolean, -- once when collapsed.\n    uncollapsed: () -> boolean, -- once when uncollapsed.\n    hovered: () -> boolean -- fires when the mouse hovers over any of the window.\n}\nStates = {\n    size = State<Vector2>?,\n    position = State<Vector2>?,\n    isUncollapsed = State<boolean>?,\n    isOpened = State<boolean>?,\n    scrollDistance = State<number>? -- vertical scroll distance, if too short.\n}\n```\n    ",
+            "desc": "The top-level container for all other widgets to be created within.\nCan be moved and resized across the screen. Cannot contain embedded windows.\nMenus can be appended to windows creating a menubar.\n\n```lua\nhasChildren = true\nhasState = true\nArguments = {\n    Title: string,\n    NoTitleBar: boolean? = false,\n    NoBackground: boolean? = false, -- the background behind the widget container.\n    NoCollapse: boolean? = false,\n    NoClose: boolean? = false,\n    NoMove: boolean? = false,\n    NoScrollbar: boolean? = false, -- the scrollbar if the window is too short for all widgets.\n    NoResize: boolean? = false,\n    NoNav: boolean? = false, -- unimplemented.\n    NoMenu: boolean? -- whether the menubar will show if created.\n}\nEvents = {\n    opened: () -> boolean, -- once when opened.\n    closed: () -> boolean, -- once when closed.\n    collapsed: () -> boolean, -- once when collapsed.\n    uncollapsed: () -> boolean, -- once when uncollapsed.\n    hovered: () -> boolean -- fires when the mouse hovers over any of the window.\n}\nStates = {\n    size = State<Vector2>? = Vector2.new(400, 300),\n    position = State<Vector2>?,\n    isUncollapsed = State<boolean>? = true,\n    isOpened = State<boolean>? = true,\n    scrollDistance = State<number>? -- vertical scroll distance, if too short.\n}\n```\n    ",
             "lua_type": "Iris.Window",
             "tags": [
                 "Widget",
@@ -113,32 +125,32 @@
                 "HasState"
             ],
             "source": {
-                "line": 80,
+                "line": 82,
                 "path": "lib/API.lua"
             }
         },
         {
             "name": "Tooltip",
-            "desc": "Displays a text label next to the cursor\n\n```lua\nhasChildren = false\nhasState = false\nArguments = {\n    Text: string\n}\n```\n    ",
+            "desc": "Displays a text label next to the cursor\n\n```lua\nIris.Tooltip({\"My custom tooltip\"})\n```\n\n![Basic tooltip example](../assets/basicTooltip.png)\n\n```lua\nhasChildren = false\nhasState = false\nArguments = {\n    Text: string\n}\n```\n    ",
             "lua_type": "Iris.Tooltip",
             "tags": [
                 "Widget"
             ],
             "source": {
-                "line": 106,
+                "line": 114,
                 "path": "lib/API.lua"
             }
         }
     ],
     "types": [],
     "name": "Window",
-    "desc": "Windows are the fundamental widget for Iris. Every other widget must be a descendant of a window.\n\n```lua\nIris.Window({ \"Example Window\" })\n    Iris.Text({ \"This is an example window!\" })\nIris.End()\n```\n\nIf you do not want the code inside a window to run unless it is open then you can use the following:\n```lua\nlocal window = Iris.Window({ \"Many Widgets Window\" })\n\nif window.state.isOpened.value and window.state.isUncollapsed.value then\n    Iris.Text({ \"I will only be created when the window is open.\" })\nend\nIris.End() -- must always call Iris.End(), regardless of whether the window is open or not.\n```\n    ",
+    "desc": "Windows are the fundamental widget for Iris. Every other widget must be a descendant of a window.\n\n```lua\nIris.Window({ \"Example Window\" })\n    Iris.Text({ \"This is an example window!\" })\nIris.End()\n```\n\n![Example window](../assets/basicWindow.png)\n\nIf you do not want the code inside a window to run unless it is open then you can use the following:\n```lua\nlocal window = Iris.Window({ \"Many Widgets Window\" })\n\nif window.state.isOpened.value and window.state.isUncollapsed.value then\n    Iris.Text({ \"I will only be created when the window is open.\" })\nend\nIris.End() -- must always call Iris.End(), regardless of whether the window is open or not.\n```\n    ",
     "source": {
-        "line": 37,
+        "line": 39,
         "path": "lib/API.lua"
     }
-}
- - +}
+ + \ No newline at end of file diff --git a/api/index.html b/api/index.html index 598482f..ff32ccc 100644 --- a/api/index.html +++ b/api/index.html @@ -4,13 +4,13 @@ Iris - - + +
- - + + \ No newline at end of file diff --git a/assets/basicTooltip.png b/assets/basicTooltip.png new file mode 100644 index 0000000..5514afe Binary files /dev/null and b/assets/basicTooltip.png differ diff --git a/assets/basicWindow.png b/assets/basicWindow.png new file mode 100644 index 0000000..d09f458 Binary files /dev/null and b/assets/basicWindow.png differ diff --git a/assets/js/02fae9b5.0df10e57.js b/assets/js/02fae9b5.3834d6c6.js similarity index 87% rename from assets/js/02fae9b5.0df10e57.js rename to assets/js/02fae9b5.3834d6c6.js index 660bc3c..ce80fa8 100644 --- a/assets/js/02fae9b5.0df10e57.js +++ b/assets/js/02fae9b5.3834d6c6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1331],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(n),m=a,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||i;return n?r.createElement(h,o(o({ref:t},p),{},{components:n})):r.createElement(h,o({ref:t},p))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{n.r(t),n.d(t,{contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const i={},o=void 0,s={type:"mdx",permalink:"/Iris/",source:"@site/pages/index.md",description:"Demo:",frontMatter:{}},l=[{value:"Demo:",id:"demo",level:3},{value:"Usage",id:"usage",level:3},{value:"How it Works",id:"how-it-works",level:3},{value:"Credits",id:"credits",level:3}],c={toc:l},p="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h3",{id:"demo"},"Demo:"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://www.roblox.com/games/11145814918/Iris-Demonstration"},"https://www.roblox.com/games/11145814918/Iris-Demonstration")),(0,a.kt)("h1",{id:"iris"},"Iris"),(0,a.kt)("p",null,"Iris is an Immediate mode GUI Library for Roblox, Based on ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/ocornut/imgui"},"Dear ImGui"),". It solves the same problems as Dear ImGui. It is fast, portable, and self-contained (no external dependencies)."),(0,a.kt)("p",null,"what is Dear ImGui, and why is it important?"),(0,a.kt)("sub",null,"Dear ImGui is best known for its use for developing debug UI. Using the Dear ImGui paradigm (Immediate Mode), UI is remarkably easy. Because of this, Dear ImGui has seen adoption in almost every major game engine, including Unity and Unreal Engine (and now Roblox!)."),(0,a.kt)("p",null,"Iris favors simplicity and productivity; It is designed to simplify UI, streamlining the process for creating visualization, debug tools, and data input. To accomplish this, Iris offers a different approach to Roblox UI than existing libraries, lacking certain features commonly found in more intricate UI libraries. Iris opts to supercede the Roblox UI API, instead having a streamlined Immediate-Mode library and a set of widgets whcih developers can use to create UI easily."),(0,a.kt)("h3",{id:"usage"},"Usage"),(0,a.kt)("p",null,"The Iris release comes as an rbxm or zip file. You can import the rbxm into any roblox project, and begin creating UI in any client side script. No external dependences are needed. Iris can be used in any kind of Roblox UI, including PlayerGui, CoreGui, BillboardGui, SurfaceGui, and PluginGui."),(0,a.kt)("p",null,"Heres a basic Example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-lua"},'local StarterPlayerScripts = game.StarterPlayer.StarterPlayerScripts\nlocal Iris = require(StarterPlayerScripts.Client.Iris).Init()\n\nIris:Connect(function()\n Iris.Window({"My First Window!"})\n Iris.Text({"Hello, World"})\n Iris.Button({"Save"})\n Iris.InputNum({"Input"})\n Iris.End()\nend)\n')),(0,a.kt)("div",{align:"center"},(0,a.kt)("img",{src:"https://raw.githubusercontent.com/Michael-48/Iris/main/assets/simpleDarkExample.png",alt:"Sample Display Output"})),(0,a.kt)("p",null,"And a more complex Example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-lua"},'local StarterPlayerScripts = game.StarterPlayer.StarterPlayerScripts\nlocal Iris = require(StarterPlayerScripts.Client.Iris).Init()\n\nIris:Connect(function()\n -- use a unique window size, rather than default\n local windowSize = Iris.State(Vector2.new(300, 400))\n\n Iris.Window({"My Second Window"}, {size = windowSize})\n Iris.Text({"The current time is: " .. time()})\n\n Iris.InputText({"Enter Text"})\n\n if Iris.Button({"Click me"}).clicked() then\n print("button was clicked")\n end\n\n Iris.InputColor4()\n\n Iris.Tree()\n for i = 1,8 do\n Iris.Text({"Text in a loop: " .. i})\n end\n Iris.End()\n Iris.End()\nend)\n')),(0,a.kt)("div",{align:"center"},(0,a.kt)("img",{src:"https://raw.githubusercontent.com/Michael-48/Iris/main/assets/complexDarkExample.png",alt:"Sample Display Output"})),(0,a.kt)("p",null,"The appearance of Iris is fully customizable, including colors, fonts, transparencies and layout. By default, Iris comes with a dark theme and light theme, as well as 2 layout themes."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-lua"},"Iris.UpdateGlobalConfig(Iris.TemplateConfig.colorLight)\nIris.UpdateGlobalConfig(Iris.TemplateConfig.sizeClear)\n\nIris:Connect(Iris.ShowDemoWindow)\n")),(0,a.kt)("div",{align:"center"},(0,a.kt)("img",{src:"https://raw.githubusercontent.com/Michael-48/Iris/main/assets/simpleLightExample.png",alt:"Sample Display Output"})),(0,a.kt)("p",null,"Finally, Iris comes with a demo window, ",(0,a.kt)("inlineCode",{parentName:"p"},"Iris.ShowDemoWindow"),". This window demonstrates the functionality of every part of the library, and contains useful utilities, like a style editor and a runtime information window. It is a useful reference for you and other coders can to refer to."),(0,a.kt)("div",{align:"center"},(0,a.kt)("img",{src:"https://raw.githubusercontent.com/Michael-48/Iris/main/assets/demoWindow.png",alt:"Sample Display Output"})),(0,a.kt)("h3",{id:"how-it-works"},"How it Works"),(0,a.kt)("p",null,"Iris is an immediate mode UI library, as opposed to retained mode."),(0,a.kt)("p",null,"In a retained mode model, you might make a button and connect a clicked event, with code that is invoked when the event happens. The button is retained in the DataModel, and to change the text on it you need to store a reference to it."),(0,a.kt)("p",null,"But in an immediate mode model, call the button function and check if it's been clicked immediately, and you do that every single frame (60 times per second). There's no need for a clicked event or to store a reference to the button."),(0,a.kt)("p",null,"Check out the Dear ImGuis ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm"},"About the IMGUI paradigm")," section if you want to understand the core principles behind the IMGUI paradigm."),(0,a.kt)("h3",{id:"credits"},"Credits"),(0,a.kt)("p",null,"Developed By ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/Michael-48"},"Michael_48"),", ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/SirMallard"},"SirMallard")," and ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/JakeyWasTaken"},"JakeyWasTaken"),". Inspriation and design: ",(0,a.kt)("a",{parentName:"p",href:"https://www.miracleworld.net/"},"Omar Cornut"),", ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/evaera"},"Evaera"),", Thanks!"))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1331],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(n),m=a,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||i;return n?r.createElement(h,o(o({ref:t},p),{},{components:n})):r.createElement(h,o({ref:t},p))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{n.r(t),n.d(t,{contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const i={},o=void 0,s={type:"mdx",permalink:"/Iris/",source:"@site/pages/index.md",description:"Demo:",frontMatter:{}},l=[{value:"Demo:",id:"demo",level:3},{value:"Usage",id:"usage",level:3},{value:"How it Works",id:"how-it-works",level:3},{value:"Credits",id:"credits",level:3}],c={toc:l},p="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h3",{id:"demo"},"Demo:"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://www.roblox.com/games/11145814918/Iris-Demonstration"},"https://www.roblox.com/games/11145814918/Iris-Demonstration")),(0,a.kt)("h1",{id:"iris"},"Iris"),(0,a.kt)("p",null,"Iris is an Immediate mode GUI Library for Roblox, Based on ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/ocornut/imgui"},"Dear ImGui"),". It solves the same problems as Dear ImGui. It is fast, portable, and self-contained (no external dependencies)."),(0,a.kt)("p",null,"what is Dear ImGui, and why is it important?"),(0,a.kt)("sub",null,"Dear ImGui is best known for its use for developing debug UI. Using the Dear ImGui paradigm (Immediate Mode), UI is remarkably easy. Because of this, Dear ImGui has seen adoption in almost every major game engine, including Unity and Unreal Engine (and now Roblox!)."),(0,a.kt)("p",null,"Iris favors simplicity and productivity; It is designed to simplify UI, streamlining the process for creating visualization, debug tools, and data input. To accomplish this, Iris offers a different approach to Roblox UI than existing libraries, lacking certain features commonly found in more intricate UI libraries. Iris opts to supercede the Roblox UI API, instead having a streamlined Immediate-Mode library and a set of widgets whcih developers can use to create UI easily."),(0,a.kt)("h3",{id:"usage"},"Usage"),(0,a.kt)("p",null,"The Iris release comes as an rbxm or zip file. You can import the rbxm into any roblox project, and begin creating UI in any client side script. No external dependences are needed. Iris can be used in any kind of Roblox UI, including PlayerGui, CoreGui, BillboardGui, SurfaceGui, and PluginGui."),(0,a.kt)("p",null,"Heres a basic Example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-lua"},'local StarterPlayerScripts = game.StarterPlayer.StarterPlayerScripts\nlocal Iris = require(StarterPlayerScripts.Client.Iris).Init()\n\nIris:Connect(function()\n Iris.Window({"My First Window!"})\n Iris.Text({"Hello, World"})\n Iris.Button({"Save"})\n Iris.InputNum({"Input"})\n Iris.End()\nend)\n')),(0,a.kt)("div",{align:"center"},(0,a.kt)("img",{src:"https://raw.githubusercontent.com/Michael-48/Iris/main/assets/simpleDarkExample.png",alt:"Sample Display Output"})),(0,a.kt)("p",null,"And a more complex Example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-lua"},'local StarterPlayerScripts = game.StarterPlayer.StarterPlayerScripts\nlocal Iris = require(StarterPlayerScripts.Client.Iris).Init()\n\nIris:Connect(function()\n -- use a unique window size, rather than default\n local windowSize = Iris.State(Vector2.new(300, 400))\n\n Iris.Window({"My Second Window"}, {size = windowSize})\n Iris.Text({"The current time is: " .. time()})\n\n Iris.InputText({"Enter Text"})\n\n if Iris.Button({"Click me"}).clicked() then\n print("button was clicked")\n end\n\n Iris.InputColor4()\n\n Iris.Tree()\n for i = 1,8 do\n Iris.Text({"Text in a loop: " .. i})\n end\n Iris.End()\n Iris.End()\nend)\n')),(0,a.kt)("div",{align:"center"},(0,a.kt)("img",{src:"https://raw.githubusercontent.com/Michael-48/Iris/main/assets/complexDarkExample.png",alt:"Sample Display Output"})),(0,a.kt)("p",null,"The appearance of Iris is fully customizable, including colors, fonts, transparencies and layout. By default, Iris comes with a dark theme and light theme, as well as 2 layout themes."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-lua"},"Iris.UpdateGlobalConfig(Iris.TemplateConfig.colorLight)\nIris.UpdateGlobalConfig(Iris.TemplateConfig.sizeClear)\n\nIris:Connect(Iris.ShowDemoWindow)\n")),(0,a.kt)("div",{align:"center"},(0,a.kt)("img",{src:"https://raw.githubusercontent.com/Michael-48/Iris/main/assets/simpleLightExample.png",alt:"Sample Display Output"})),(0,a.kt)("p",null,"Finally, Iris comes with a demo window, ",(0,a.kt)("inlineCode",{parentName:"p"},"Iris.ShowDemoWindow"),". This window demonstrates the functionality of every part of the library, and contains useful utilities, like a style editor and a runtime information window. It is a useful reference for you and other coders can to refer to."),(0,a.kt)("div",{align:"center"},(0,a.kt)("img",{src:"https://raw.githubusercontent.com/Michael-48/Iris/main/assets/demoWindow.png",alt:"Sample Display Output"})),(0,a.kt)("h3",{id:"how-it-works"},"How it Works"),(0,a.kt)("p",null,"Iris is an immediate mode UI library, as opposed to retained mode."),(0,a.kt)("p",null,"In a retained mode model, you might make a button and connect a clicked event, with code that is invoked when the event happens. The button is retained in the DataModel, and to change the text on it you need to store a reference to it."),(0,a.kt)("p",null,"In an immediate mode model, we call the button function and check if it's been clicked every frame (60 times per second). There's no need for a clicked event or to store a reference to the button."),(0,a.kt)("p",null,"Check out the Dear ImGuis ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/ocornut/imgui/wiki/About-the-IMGUI-paradigm"},"About the IMGUI paradigm")," section if you want to understand the core principles behind the IMGUI paradigm."),(0,a.kt)("h3",{id:"credits"},"Credits"),(0,a.kt)("p",null,"Developed By ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/Michael-48"},"Michael_48"),", ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/SirMallard"},"SirMallard")," and ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/JakeyWasTaken"},"JakeyWasTaken"),". Inspriation and design: ",(0,a.kt)("a",{parentName:"p",href:"https://www.miracleworld.net/"},"Omar Cornut"),", ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/evaera"},"Evaera"),", Thanks!"),(0,a.kt)("meta",{name:"google-site-verification",content:"Ito4GceH5YJJXReIhx9JMqN0YEDdKePHaylk8H3-9Oo"}))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/04447019.8bad8b6a.js b/assets/js/04447019.468f4121.js similarity index 88% rename from assets/js/04447019.8bad8b6a.js rename to assets/js/04447019.468f4121.js index b9dcd4d..42af267 100644 --- a/assets/js/04447019.8bad8b6a.js +++ b/assets/js/04447019.468f4121.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7416],{42894:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Tree","desc":"A collapsable container for other widgets, to organise and hide widgets when not needed. The state determines whether the child widgets are visible or not. Clicking on the widget will collapse or uncollapse it.\\n\\n```lua\\nhasChildren: true\\nhasState: true\\nArguments = {\\n Text: string,\\n SpanAvailWidth: boolean? = false, -- the tree title will fill all horizontal space to the end its parent container.\\n NoIndent: boolean? = false -- the child widgets will not be indented underneath.\\n}\\nEvents = {\\n collapsed: () -> boolean,\\n uncollapsed: () -> boolean,\\n hovered: () -> boolean\\n}\\nState = {\\n isUncollapsed: State? -- whether the widget is collapsed.\\n}\\n```\\n ","lua_type":"Iris.Tree","tags":["Widget","HasChildren","HasState"],"source":{"line":583,"path":"lib/API.lua"}},{"name":"CollapsingHeader","desc":"The same as a Tree Widget, but with a larger title and clearer, used mainly for organsing widgets on the first level of a window.\\n\\n```lua\\nhasChildren: true\\nhasState: true\\nArguments = {\\n Text: string\\n}\\nEvents = {\\n collapsed: () -> boolean,\\n uncollapsed: () -> boolean,\\n hovered: () -> boolean\\n}\\nState = {\\n isUncollapsed: State? -- whether the widget is collapsed.\\n}\\n```\\n ","lua_type":"Iris.CollapsingHeader","tags":["Widget","HasChildren","HasState"],"source":{"line":610,"path":"lib/API.lua"}}],"types":[],"name":"Tree","desc":"Tree Widget API\\n ","source":{"line":555,"path":"lib/API.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7416],{42894:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Tree","desc":"A collapsable container for other widgets, to organise and hide widgets when not needed. The state determines whether the child widgets are visible or not. Clicking on the widget will collapse or uncollapse it.\\n\\n```lua\\nhasChildren: true\\nhasState: true\\nArguments = {\\n Text: string,\\n SpanAvailWidth: boolean? = false, -- the tree title will fill all horizontal space to the end its parent container.\\n NoIndent: boolean? = false -- the child widgets will not be indented underneath.\\n}\\nEvents = {\\n collapsed: () -> boolean,\\n uncollapsed: () -> boolean,\\n hovered: () -> boolean\\n}\\nState = {\\n isUncollapsed: State? -- whether the widget is collapsed.\\n}\\n```\\n ","lua_type":"Iris.Tree","tags":["Widget","HasChildren","HasState"],"source":{"line":591,"path":"lib/API.lua"}},{"name":"CollapsingHeader","desc":"The same as a Tree Widget, but with a larger title and clearer, used mainly for organsing widgets on the first level of a window.\\n\\n```lua\\nhasChildren: true\\nhasState: true\\nArguments = {\\n Text: string\\n}\\nEvents = {\\n collapsed: () -> boolean,\\n uncollapsed: () -> boolean,\\n hovered: () -> boolean\\n}\\nState = {\\n isUncollapsed: State? -- whether the widget is collapsed.\\n}\\n```\\n ","lua_type":"Iris.CollapsingHeader","tags":["Widget","HasChildren","HasState"],"source":{"line":618,"path":"lib/API.lua"}}],"types":[],"name":"Tree","desc":"Tree Widget API\\n ","source":{"line":563,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/062df6c6.fcffff1b.js b/assets/js/062df6c6.0e91555f.js similarity index 83% rename from assets/js/062df6c6.fcffff1b.js rename to assets/js/062df6c6.0e91555f.js index 70bd5d2..bcb1b68 100644 --- a/assets/js/062df6c6.fcffff1b.js +++ b/assets/js/062df6c6.0e91555f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1872],{54159:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"ProgressBar","desc":"A progress bar line with a state value to show the current state.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"Progress Bar\\",\\n Format: string? = nil -- optional to override with a custom progress such as `29/54`\\n}\\nEvents = {\\n hovered: () -> boolean,\\n changed: () -> boolean\\n}\\nStates = {\\n progress: State?\\n}\\n```\\n ","lua_type":"Iris.PrograssBar","tags":["Widget","HasState"],"source":{"line":1548,"path":"lib/API.lua"}}],"types":[],"name":"Plot","desc":"Plot Widget API\\n ","source":{"line":1523,"path":"lib/API.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1872],{54159:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"ProgressBar","desc":"A progress bar line with a state value to show the current state.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"Progress Bar\\",\\n Format: string? = nil -- optional to override with a custom progress such as `29/54`\\n}\\nEvents = {\\n hovered: () -> boolean,\\n changed: () -> boolean\\n}\\nStates = {\\n progress: State?\\n}\\n```\\n ","lua_type":"Iris.PrograssBar","tags":["Widget","HasState"],"source":{"line":1556,"path":"lib/API.lua"}}],"types":[],"name":"Plot","desc":"Plot Widget API\\n ","source":{"line":1531,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/0e384e19.9f5a4bd1.js b/assets/js/0e384e19.af6e221a.js similarity index 82% rename from assets/js/0e384e19.9f5a4bd1.js rename to assets/js/0e384e19.af6e221a.js index 800d9ed..efd50ec 100644 --- a/assets/js/0e384e19.9f5a4bd1.js +++ b/assets/js/0e384e19.af6e221a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9671],{3905:(e,r,t)=>{t.d(r,{Zo:()=>p,kt:()=>d});var n=t(67294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var c=n.createContext({}),l=function(e){var r=n.useContext(c),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},p=function(e){var r=l(e.components);return n.createElement(c.Provider,{value:r},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},m=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(t),m=o,d=u["".concat(c,".").concat(m)]||u[m]||f[m]||a;return t?n.createElement(d,i(i({ref:r},p),{},{components:t})):n.createElement(d,i({ref:r},p))}));function d(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=m;var s={};for(var c in r)hasOwnProperty.call(r,c)&&(s[c]=r[c]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var l=2;l{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=t(87462),o=(t(67294),t(3905));const a={},i="Iris",s={unversionedId:"intro",id:"intro",title:"Iris",description:"Iris is an Immediate mode GUI Library for Roblox, Based on Dear ImGui. It solves the same problems as Dear ImGui. It is fast, portable, and self-contained.",source:"@site/docs/intro.md",sourceDirName:".",slug:"/intro",permalink:"/Iris/docs/intro",draft:!1,editUrl:"https://github.com/Michael-48/Iris/edit/master/docs/intro.md",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Events",permalink:"/Iris/docs/events"}},c={},l=[],p={toc:l},u="wrapper";function f(e){let{components:r,...t}=e;return(0,o.kt)(u,(0,n.Z)({},p,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"iris"},"Iris"),(0,o.kt)("p",null,"Iris is an Immediate mode GUI Library for Roblox, Based on Dear ImGui. It solves the same problems as Dear ImGui. It is fast, portable, and self-contained."))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9671],{3905:(e,r,t)=>{t.d(r,{Zo:()=>p,kt:()=>d});var n=t(67294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var c=n.createContext({}),l=function(e){var r=n.useContext(c),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},p=function(e){var r=l(e.components);return n.createElement(c.Provider,{value:r},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},m=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(t),m=o,d=u["".concat(c,".").concat(m)]||u[m]||f[m]||a;return t?n.createElement(d,i(i({ref:r},p),{},{components:t})):n.createElement(d,i({ref:r},p))}));function d(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=m;var s={};for(var c in r)hasOwnProperty.call(r,c)&&(s[c]=r[c]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var l=2;l{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=t(87462),o=(t(67294),t(3905));const a={},i="Iris",s={unversionedId:"intro",id:"intro",title:"Iris",description:"Iris is an Immediate mode GUI Library for Roblox, Based on Dear ImGui. It solves the same problems as Dear ImGui. It is fast, portable, and self-contained.",source:"@site/docs/intro.md",sourceDirName:".",slug:"/intro",permalink:"/Iris/docs/intro",draft:!1,editUrl:"https://github.com/Michael-48/Iris/edit/main/docs/intro.md",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Events",permalink:"/Iris/docs/events"}},c={},l=[],p={toc:l},u="wrapper";function f(e){let{components:r,...t}=e;return(0,o.kt)(u,(0,n.Z)({},p,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"iris"},"Iris"),(0,o.kt)("p",null,"Iris is an Immediate mode GUI Library for Roblox, Based on Dear ImGui. It solves the same problems as Dear ImGui. It is fast, portable, and self-contained."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/12e9ac83.3173101c.js b/assets/js/12e9ac83.3173101c.js new file mode 100644 index 0000000..38f22ca --- /dev/null +++ b/assets/js/12e9ac83.3173101c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5673],{46972:e=>{e.exports=JSON.parse('{"functions":[{"name":"SetFocusedWindow","desc":"Sets the focused window to the window provided, which brings it to the front and makes it active.\\n ","params":[{"name":"window","desc":"the window to focus.","lua_type":"Types.Widget"}],"returns":[],"function_type":"static","source":{"line":91,"path":"lib/API.lua"}},{"name":"Init","desc":"Initializes Iris and begins rendering. May only be called once.\\n\\nSee [Iris.Shutdown] to stop Iris, or [Iris.Disabled] to temporarily disable Iris.\\n\\nOnce initialized, [Iris.Connect] can be used to create a widget.","params":[{"name":"parentInstance","desc":"where Iris will place widgets UIs under, defaulting to [PlayerGui]","lua_type":"BasePlayerGui?"},{"name":"eventConnection","desc":"the event to determine an Iris cycle, defaulting to [Heartbeat]","lua_type":"(RBXScriptSignal | () -> ())?"},{"name":"config","desc":"","lua_type":"{ [string]: any }?"}],"returns":[{"desc":"","lua_type":"Iris"}],"function_type":"static","source":{"line":70,"path":"lib/init.lua"}},{"name":"Shutdown","desc":"Shuts Iris down. This can only be called once, and Iris cannot be started once shut down.","params":[],"returns":[],"function_type":"static","source":{"line":114,"path":"lib/init.lua"}},{"name":"Connect","desc":"Connects a function which will execute every Iris cycle. [Iris.Init] must be called before connecting.\\n\\nA cycle is determined by the `eventConnection` passed to [Iris.Init] (default to [RunService.Heartbeat]).\\n\\nMultiple callbacks can be added to Iris from many different scripts or modules.","params":[{"name":"callback","desc":"the callback containg the Iris code","lua_type":"() -> ()"}],"returns":[{"desc":"","lua_type":"() -> () -- this uses method syntax for no reason.\\r\\n"}],"function_type":"method","source":{"line":149,"path":"lib/init.lua"}},{"name":"Append","desc":"Inserts any Roblox [Instance] into Iris.\\n\\nThe parent of the inserted instance can either be determined by the `_config.Parent`\\nproperty or by the current parent widget from the stack.","params":[{"name":"userInstance","desc":"the Roblox [Instance] to insert into Iris","lua_type":"GuiObject"}],"returns":[],"function_type":"static","source":{"line":169,"path":"lib/init.lua"}},{"name":"End","desc":"Marks the end of any widgets which contain children. For example:\\n```lua\\n-- Widgets placed here **will not** be inside the tree\\nIris.Text({\\"Above and outside the tree\\"})\\n\\n-- A Tree widget can contain children.\\n-- We must therefore remember to call `Iris.End()` \\nIris.Tree({\\"My First Tree\\"})\\n -- Widgets placed here **will** be inside the tree\\n Iris.Text({\\"Tree item 1\\"})\\n Iris.Text({\\"Tree item 2\\"})\\nIris.End()\\n\\n-- Widgets placed here **will not** be inside the tree\\nIris.Text({\\"Below and outside the tree\\"})\\n```\\n:::caution Caution: Error\\nSeeing the error `Callback has too few calls to Iris.End()` or `Callback has too many calls to Iris.End()`?\\nUsing the wrong amount of `Iris.End()` calls in your code will lead to an error.\\n\\nEach widget called which might have children should be paired with a call to `Iris.End()`, **even if the Widget doesnt currently have any children**.\\n:::","params":[],"returns":[],"function_type":"static","source":{"line":206,"path":"lib/init.lua"}},{"name":"ForceRefresh","desc":"Destroys and regenerates all instances used by Iris. Useful if you want to propogate state changes.\\n:::caution Caution: Performance\\nBecause this function Deletes and Initializes many instances, it may cause **performance issues** when used with many widgets.\\nIn **no** case should it be called every frame.\\n:::","params":[],"returns":[],"function_type":"static","source":{"line":229,"path":"lib/init.lua"}},{"name":"UpdateGlobalConfig","desc":"Customizes the configuration which **every** widget will inherit from.\\n\\nIt can be used along with [Iris.TemplateConfig] to easily swap styles, for example:\\n```lua\\nIris.UpdateGlobalConfig(Iris.TemplateConfig.colorLight) -- use light theme\\n```\\n:::caution Caution: Performance\\nThis function internally calls [Iris.ForceRefresh] so that style changes are propogated.\\n\\nAs such, it may cause **performance issues** when used with many widgets.\\nIn **no** case should it be called every frame.\\n:::","params":[{"name":"deltaStyle","desc":"a table containing the changes in style ex: `{ItemWidth = UDim.new(0, 100)}`","lua_type":"{ [string]: any }"}],"returns":[],"function_type":"static","source":{"line":250,"path":"lib/init.lua"}},{"name":"PushConfig","desc":"Allows cascading of a style by allowing styles to be locally and hierarchically applied.\\n\\nEach call to Iris.PushConfig must be paired with a call to [Iris.PopConfig], for example:\\n```lua\\nIris.Text({\\"boring text\\"})\\n\\nIris.PushConfig({TextColor = Color3.fromRGB(128, 0, 256)})\\n Iris.Text({\\"Colored Text!\\"})\\nIris.PopConfig()\\n\\nIris.Text({\\"boring text\\"})\\n```","params":[{"name":"deltaStyle","desc":"a table containing the changes in style ex: `{ItemWidth = UDim.new(0, 100)}`","lua_type":"table"}],"returns":[],"function_type":"static","source":{"line":274,"path":"lib/init.lua"}},{"name":"PopConfig","desc":"Ends a [Iris.PushConfig] style.\\n\\nEach call to [Iris.PopConfig] should match a call to [Iris.PushConfig].","params":[],"returns":[],"function_type":"static","source":{"line":299,"path":"lib/init.lua"}},{"name":"PushId","desc":"Sets the id discriminator for the next widgets. Use [Iris.PopId] to remove it.","params":[{"name":"id","desc":"custom id","lua_type":"Types.ID"}],"returns":[],"function_type":"static","source":{"line":328,"path":"lib/init.lua"}},{"name":"PopId","desc":"Removes the id discriminator set by [Iris.PushId].","params":[],"returns":[],"function_type":"static","source":{"line":339,"path":"lib/init.lua"}},{"name":"SetNextWidgetID","desc":"Sets the id for the next widget. Useful for using [Iris.Append] on the same widget.\\n```lua\\nIris.SetNextWidgetId(\\"demo_window\\")\\nIris.Window({ \\"Window\\" })\\n Iris.Text({ \\"Text one placed here.\\" })\\nIris.End()\\n\\n-- later in the code\\n\\nIris.SetNextWidgetId(\\"demo_window\\")\\nIris.Window()\\n Iris.Text({ \\"Text two placed here.\\" })\\nIris.End()\\n\\n-- both text widgets will be placed under the same window despite being called separately.\\n```","params":[{"name":"id","desc":"custom id.","lua_type":"Types.ID"}],"returns":[],"function_type":"static","source":{"line":364,"path":"lib/init.lua"}},{"name":"State","desc":"Constructs a new [State] object. Subsequent ID calls will return the same object.\\n:::info\\nIris.State allows you to create \\"references\\" to the same value while inside your UI drawing loop.\\nFor example:\\n```lua\\nIris:Connect(function()\\n local myNumber = 5;\\n myNumber = myNumber + 1\\n Iris.Text({\\"The number is: \\" .. myNumber})\\nend)\\n```\\nThis is problematic. Each time the function is called, a new myNumber is initialized, instead of retrieving the old one.\\nThe above code will always display 6.\\n***\\nIris.State solves this problem:\\n```lua\\nIris:Connect(function()\\n local myNumber = Iris.State(5)\\n myNumber:set(myNumber:get() + 1)\\n Iris.Text({\\"The number is: \\" .. myNumber})\\nend)\\n```\\nIn this example, the code will work properly, and increment every frame.\\n:::","params":[{"name":"initialValue","desc":"the initial value for the state","lua_type":"any"}],"returns":[{"desc":"","lua_type":"Types.State\\r\\n"}],"function_type":"static","source":{"line":403,"path":"lib/init.lua"}},{"name":"WeakState","desc":"Constructs a new state object, subsequent ID calls will return the same object, except all widgets connected to the state are discarded, the state reverts to the passed initialValue","params":[{"name":"initialValue","desc":"The initial value for the state","lua_type":"any"}],"returns":[],"function_type":"static","source":{"line":424,"path":"lib/init.lua"}},{"name":"ComputedState","desc":" \\nConstructs a new State object, but binds its value to the value of another State.\\n:::info\\nA common use case for this constructor is when a boolean State needs to be inverted:\\n```lua\\nIris.ComputedState(otherState, function(newValue)\\n return not newValue\\nend)\\n```\\n:::","params":[{"name":"firstState","desc":"State to bind to.","lua_type":"State"},{"name":"onChangeCallback","desc":"callback which should return a value transformed from the firstState value","lua_type":"function"}],"returns":[],"function_type":"static","source":{"line":458,"path":"lib/init.lua"}},{"name":"ShowDemoWindow","desc":"ShowDemoWindow is a function which creates a Demonstration window. this window contains many useful utilities for coders,\\nand serves as a refrence for using each part of the library. Ideally, the DemoWindow should always be available in your UI.\\nIt is the same as any other callback you would connect to Iris using [Iris.Connect]\\n```lua\\nIris:Connect(Iris.ShowDemoWindow)\\n```","params":[],"returns":[],"function_type":"static","source":{"line":488,"path":"lib/init.lua"}}],"properties":[{"name":"Disabled","desc":"While Iris.Disabled is true, execution of Iris and connected functions will be paused.\\nThe widgets are not destroyed, they are just frozen so no changes will happen to them.","lua_type":"boolean","source":{"line":34,"path":"lib/init.lua"}},{"name":"Args","desc":"Provides a list of every possible Argument for each type of widget to it\'s index.\\nFor instance, `Iris.Args.Window.NoResize`.\\nThe Args table is useful for using widget Arguments without remembering their order.\\n```lua\\nIris.Window({\\"My Window\\", [Iris.Args.Window.NoResize] = true})\\n```","lua_type":"table","source":{"line":47,"path":"lib/init.lua"}},{"name":"Events","desc":"-todo: work out what this is used for.","lua_type":"table","ignore":true,"source":{"line":56,"path":"lib/init.lua"}},{"name":"TemplateConfig","desc":"TemplateConfig provides a table of default styles and configurations which you may apply to your UI.","lua_type":"table","source":{"line":310,"path":"lib/init.lua"}}],"types":[],"name":"Iris","desc":"Iris; contains the all user-facing functions and properties.\\nA set of internal functions can be found in `Iris.Internal` (only use if you understand).\\n\\nIn its simplest form, users may start Iris by using\\n```lua\\nIris.Init()\\n\\nIris:Connect(function()\\n Iris.Window({\\"My First Window!\\"})\\n Iris.Text({\\"Hello, World\\"})\\n Iris.Button({\\"Save\\"})\\n Iris.InputNum({\\"Input\\"})\\n Iris.End()\\nend)\\n```","source":{"line":23,"path":"lib/init.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/12e9ac83.a799cbf9.js b/assets/js/12e9ac83.a799cbf9.js deleted file mode 100644 index 0c82494..0000000 --- a/assets/js/12e9ac83.a799cbf9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5673],{46972:e=>{e.exports=JSON.parse('{"functions":[{"name":"SetFocusedWindow","desc":"Sets the focused window to the window provided, which brings it to the front and makes it active.\\n ","params":[{"name":"window","desc":"the window to focus.","lua_type":"Types.Widget"}],"returns":[],"function_type":"static","source":{"line":89,"path":"lib/API.lua"}},{"name":"Init","desc":"Initializes Iris and begins rendering. May only be called once.\\nBy default, Iris will create its widgets under the PlayerGui and use the Heartbeat event.","params":[{"name":"parentInstance","desc":"instance which Iris will place UI in. defaults to [PlayerGui] if unspecified","lua_type":"Instance | nil"},{"name":"eventConnection","desc":"","lua_type":"RBXScriptSignal | () -> {} | nil"}],"returns":[{"desc":"","lua_type":"Iris"}],"function_type":"static","source":{"line":55,"path":"lib/init.lua"}},{"name":"Shutdown","desc":"","params":[],"returns":[],"function_type":"method","source":{"line":98,"path":"lib/init.lua"}},{"name":"Connect","desc":"Allows users to connect a function which will execute every Iris cycle, (cycle is determined by the callback or event passed to Iris.Init or default to Heartbeat).\\nMultiple callbacks can be added to Iris from many different scripts or modules.","params":[{"name":"callback","desc":"the callback containg the Iris code.","lua_type":"function"}],"returns":[],"function_type":"method","source":{"line":131,"path":"lib/init.lua"}},{"name":"Append","desc":"Allows the caller to insert any Roblox Instance into Iris. The parent can either be determined by the `_config.Parent`\\nproperty or by the current parent widget from the stack.","params":[],"returns":[],"function_type":"static","source":{"line":145,"path":"lib/init.lua"}},{"name":"End","desc":"This function marks the end of any widgets which contain children. For example:\\n```lua\\n-- Widgets placed here **will not** be inside the tree\\nIris.Tree({\\"My First Tree\\"})\\n -- Widgets placed here **will** be inside the tree\\nIris.End()\\n-- Widgets placed here **will not** be inside the tree\\n```\\n:::caution Caution: Error\\nSeeing the error `Callback has too few calls to Iris.End()` or `Callback has too many calls to Iris.End()`?\\nUsing the wrong amount of `Iris.End()` calls in your code will lead to an error. Each widget called which might have children should be paired with a call to `Iris.End()`, **Even if the Widget doesnt currently have any children**.\\n:::","params":[],"returns":[],"function_type":"static","source":{"line":173,"path":"lib/init.lua"}},{"name":"ForceRefresh","desc":"Destroys and regenerates all instances used by Iris. Useful if you want to propogate state changes.\\n:::caution Caution: Performance\\nBecause this function Deletes and Initializes many instances, it may cause **performance issues** when used with many widgets.\\nIn **no** case should it be called every frame.\\n:::","params":[],"returns":[],"function_type":"static","source":{"line":197,"path":"lib/init.lua"}},{"name":"UpdateGlobalConfig","desc":"Allows callers to customize the config which **every** widget will inherit from.\\nIt can be used along with Iris.TemplateConfig to easily swap styles, ex: ```Iris.UpdateGlobalConfig(Iris.TemplateConfig.colorLight) -- use light theme```\\n:::caution Caution: Performance\\nthis function internally calls [Iris.ForceRefresh] so that style changes are propogated, it may cause **performance issues** when used with many widgets.\\nIn **no** case should it be called every frame.\\n:::","params":[{"name":"deltaStyle","desc":"a table containing the changes in style ex: `{ItemWidth = UDim.new(0, 100)}`","lua_type":"table"}],"returns":[],"function_type":"static","source":{"line":213,"path":"lib/init.lua"}},{"name":"PushConfig","desc":"Allows callers to cascade a style, meaning that styles may be locally and hierarchically applied.\\nEach call to Iris.PushConfig must be paired with a call to [Iris.PopConfig].\\nFor example:\\n```lua\\nIris.PushConfig({TextColor = Color3.fromRGB(128, 0, 256)})\\n Iris.Text({\\"Colored Text!\\"})\\nIris.PopConfig()\\n```","params":[{"name":"deltaStyle","desc":"a table containing the changes in style ex: `{ItemWidth = UDim.new(0, 100)}`","lua_type":"table"}],"returns":[],"function_type":"static","source":{"line":234,"path":"lib/init.lua"}},{"name":"PopConfig","desc":"Ends a PushConfig style.\\nEach call to [Iris.PushConfig] must be paired with a call to Iris.PopConfig.","params":[],"returns":[],"function_type":"static","source":{"line":259,"path":"lib/init.lua"}},{"name":"PushId","desc":"Sets the id discriminator for the next widgets. Use [Iris.PopId] to remove it.","params":[{"name":"id","desc":"custom id.","lua_type":"Types.ID"}],"returns":[],"function_type":"static","source":{"line":289,"path":"lib/init.lua"}},{"name":"PopId","desc":"Removes the id discriminator set by [Iris.PushId].","params":[],"returns":[],"function_type":"static","source":{"line":301,"path":"lib/init.lua"}},{"name":"SetNextWidgetId","desc":"Sets the id for the next widget. Useful for using [Iris.Append] on the same widget.\\n```lua\\nIris.SetNextWidgetId(\\"demo_window\\")\\nIris.Window({ \\"Window\\" })\\n Iris.Text({ \\"Text one placed here.\\" })\\nIris.End()\\n\\n-- later in the code\\n\\nIris.SetNextWidgetId(\\"demo_window\\")\\nIris.Window()\\n Iris.Text({ \\"Text two placed here.\\" })\\nIris.End()\\n\\n-- both text widgets will be placed under the same window despite being called separately.\\n```","params":[{"name":"id","desc":"custom id.","lua_type":"Types.ID"}],"returns":[],"function_type":"static","source":{"line":327,"path":"lib/init.lua"}},{"name":"State","desc":"Constructs a new state object, subsequent ID calls will return the same object\\n:::info\\nIris.State allows you to create \\"references\\" to the same value while inside your UI drawing loop.\\nFor example:\\n```lua\\nIris:Connect(function()\\n local myNumber = 5;\\n myNumber = myNumber + 1\\n Iris.Text({\\"The number is: \\" .. myNumber})\\nend)\\n```\\nThis is problematic. Each time the function is called, a new myNumber is initialized, instead of retrieving the old one.\\nThe above code will always display 6.\\n***\\nIris.State solves this problem:\\n```lua\\nIris:Connect(function()\\n local myNumber = Iris.State(5)\\n myNumber:set(myNumber:get() + 1)\\n Iris.Text({\\"The number is: \\" .. myNumber})\\nend)\\n```\\nIn this example, the code will work properly, and increment every frame.\\n:::","params":[{"name":"initialValue","desc":"The initial value for the state","lua_type":"any"}],"returns":[],"function_type":"static","source":{"line":367,"path":"lib/init.lua"}},{"name":"WeakState","desc":"Constructs a new state object, subsequent ID calls will return the same object, except all widgets connected to the state are discarded, the state reverts to the passed initialValue","params":[{"name":"initialValue","desc":"The initial value for the state","lua_type":"any"}],"returns":[],"function_type":"static","source":{"line":388,"path":"lib/init.lua"}},{"name":"ComputedState","desc":" \\nConstructs a new State object, but binds its value to the value of another State.\\n:::info\\nA common use case for this constructor is when a boolean State needs to be inverted:\\n```lua\\nIris.ComputedState(otherState, function(newValue)\\n return not newValue\\nend)\\n```\\n:::","params":[{"name":"firstState","desc":"State to bind to.","lua_type":"State"},{"name":"onChangeCallback","desc":"callback which should return a value transformed from the firstState value","lua_type":"function"}],"returns":[],"function_type":"static","source":{"line":422,"path":"lib/init.lua"}},{"name":"ShowDemoWindow","desc":"ShowDemoWindow is a function which creates a Demonstration window. this window contains many useful utilities for coders,\\nand serves as a refrence for using each part of the library. Ideally, the DemoWindow should always be available in your UI.\\nIt is the same as any other callback you would connect to Iris using [Iris.Connect]\\n```lua\\nIris:Connect(Iris.ShowDemoWindow)\\n```","params":[],"returns":[],"function_type":"static","source":{"line":452,"path":"lib/init.lua"}}],"properties":[{"name":"Disabled","desc":"While Iris.Disabled is true, execution of Iris and connected functions will be paused.\\nThe widgets are not destroyed, they are just frozen so no changes will happen to them.","lua_type":"boolean","source":{"line":21,"path":"lib/init.lua"}},{"name":"Args","desc":"Provides a list of every possible Argument for each type of widget to it\'s index.\\nFor instance, `Iris.Args.Window.NoResize`.\\nThe Args table is useful for using widget Arguments without remembering their order.\\n```lua\\nIris.Window({\\"My Window\\", [Iris.Args.Window.NoResize] = true})\\n```","lua_type":"table","source":{"line":34,"path":"lib/init.lua"}},{"name":"Events","desc":"-todo: work out what this is used for.","lua_type":"table","ignore":true,"source":{"line":43,"path":"lib/init.lua"}},{"name":"TemplateConfig","desc":"TemplateConfig provides a table of default styles and configurations which you may apply to your UI.","lua_type":"table","source":{"line":270,"path":"lib/init.lua"}}],"types":[],"name":"Iris","desc":"Iris; contains the all user-facing functions and properties.\\nA set of internal functions can be found in `Iris.Internal` (only use unless you understand).","source":{"line":10,"path":"lib/init.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/1c4890df.3ae9219b.js b/assets/js/1c4890df.3ae9219b.js deleted file mode 100644 index 887603f..0000000 --- a/assets/js/1c4890df.3ae9219b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9945],{76362:e=>{e.exports=JSON.parse('[{"value":"Types","id":"types","level":2},{"value":"Properties","id":"properties","level":2},{"value":"InputNum","id":"InputNum","level":3},{"value":"InputRect","id":"InputRect","level":3},{"value":"InputUDim","id":"InputUDim","level":3},{"value":"InputUDim2","id":"InputUDim2","level":3},{"value":"InputVector2","id":"InputVector2","level":3},{"value":"InputVector3","id":"InputVector3","level":3},{"value":"Functions","id":"functions","level":2}]')}}]); \ No newline at end of file diff --git a/assets/js/1c4890df.ac847c1a.js b/assets/js/1c4890df.ac847c1a.js new file mode 100644 index 0000000..39c1af0 --- /dev/null +++ b/assets/js/1c4890df.ac847c1a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9945],{76362:e=>{e.exports=JSON.parse('[{"value":"Types","id":"types","level":2},{"value":"Properties","id":"properties","level":2},{"value":"InputColor3","id":"InputColor3","level":3},{"value":"InputColor4","id":"InputColor4","level":3},{"value":"InputNum","id":"InputNum","level":3},{"value":"InputRect","id":"InputRect","level":3},{"value":"InputUDim","id":"InputUDim","level":3},{"value":"InputUDim2","id":"InputUDim2","level":3},{"value":"InputVector2","id":"InputVector2","level":3},{"value":"InputVector3","id":"InputVector3","level":3},{"value":"Functions","id":"functions","level":2}]')}}]); \ No newline at end of file diff --git a/assets/js/20214626.3c2e2943.js b/assets/js/20214626.3c2e2943.js deleted file mode 100644 index 2b4bd50..0000000 --- a/assets/js/20214626.3c2e2943.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7588],{85492:e=>{e.exports=JSON.parse('{"Instance":"https://developer.roblox.com/en-us/api-reference/datatype/Instance","AccessoryDescription":"https://developer.roblox.com/en-us/api-reference/class/AccessoryDescription","AccountService":"https://developer.roblox.com/en-us/api-reference/class/AccountService","Accoutrement":"https://developer.roblox.com/en-us/api-reference/class/Accoutrement","Accessory":"https://developer.roblox.com/en-us/api-reference/class/Accessory","Hat":"https://developer.roblox.com/en-us/api-reference/class/Hat","ActivityHistoryService":"https://developer.roblox.com/en-us/api-reference/class/ActivityHistoryService","AdPortal":"https://developer.roblox.com/en-us/api-reference/class/AdPortal","AdService":"https://developer.roblox.com/en-us/api-reference/class/AdService","AdvancedDragger":"https://developer.roblox.com/en-us/api-reference/class/AdvancedDragger","AnalyticsService":"https://developer.roblox.com/en-us/api-reference/class/AnalyticsService","Animation":"https://developer.roblox.com/en-us/api-reference/class/Animation","AnimationClip":"https://developer.roblox.com/en-us/api-reference/class/AnimationClip","CurveAnimation":"https://developer.roblox.com/en-us/api-reference/class/CurveAnimation","KeyframeSequence":"https://developer.roblox.com/en-us/api-reference/class/KeyframeSequence","AnimationClipProvider":"https://developer.roblox.com/en-us/api-reference/class/AnimationClipProvider","AnimationController":"https://developer.roblox.com/en-us/api-reference/class/AnimationController","AnimationFromVideoCreatorService":"https://developer.roblox.com/en-us/api-reference/class/AnimationFromVideoCreatorService","AnimationFromVideoCreatorStudioService":"https://developer.roblox.com/en-us/api-reference/class/AnimationFromVideoCreatorStudioService","AnimationRigData":"https://developer.roblox.com/en-us/api-reference/class/AnimationRigData","AnimationStreamTrack":"https://developer.roblox.com/en-us/api-reference/class/AnimationStreamTrack","AnimationTrack":"https://developer.roblox.com/en-us/api-reference/class/AnimationTrack","Animator":"https://developer.roblox.com/en-us/api-reference/class/Animator","AppUpdateService":"https://developer.roblox.com/en-us/api-reference/class/AppUpdateService","AssetCounterService":"https://developer.roblox.com/en-us/api-reference/class/AssetCounterService","AssetDeliveryProxy":"https://developer.roblox.com/en-us/api-reference/class/AssetDeliveryProxy","AssetImportService":"https://developer.roblox.com/en-us/api-reference/class/AssetImportService","AssetImportSession":"https://developer.roblox.com/en-us/api-reference/class/AssetImportSession","AssetManagerService":"https://developer.roblox.com/en-us/api-reference/class/AssetManagerService","AssetPatchSettings":"https://developer.roblox.com/en-us/api-reference/class/AssetPatchSettings","AssetService":"https://developer.roblox.com/en-us/api-reference/class/AssetService","Atmosphere":"https://developer.roblox.com/en-us/api-reference/class/Atmosphere","Attachment":"https://developer.roblox.com/en-us/api-reference/class/Attachment","Bone":"https://developer.roblox.com/en-us/api-reference/class/Bone","AudioAnalyzer":"https://developer.roblox.com/en-us/api-reference/class/AudioAnalyzer","AudioChorus":"https://developer.roblox.com/en-us/api-reference/class/AudioChorus","AudioCompressor":"https://developer.roblox.com/en-us/api-reference/class/AudioCompressor","AudioDeviceInput":"https://developer.roblox.com/en-us/api-reference/class/AudioDeviceInput","AudioDeviceOutput":"https://developer.roblox.com/en-us/api-reference/class/AudioDeviceOutput","AudioDistortion":"https://developer.roblox.com/en-us/api-reference/class/AudioDistortion","AudioEcho":"https://developer.roblox.com/en-us/api-reference/class/AudioEcho","AudioEmitter":"https://developer.roblox.com/en-us/api-reference/class/AudioEmitter","AudioEqualizer":"https://developer.roblox.com/en-us/api-reference/class/AudioEqualizer","AudioFader":"https://developer.roblox.com/en-us/api-reference/class/AudioFader","AudioFlanger":"https://developer.roblox.com/en-us/api-reference/class/AudioFlanger","AudioListener":"https://developer.roblox.com/en-us/api-reference/class/AudioListener","AudioPitchShifter":"https://developer.roblox.com/en-us/api-reference/class/AudioPitchShifter","AudioPlayer":"https://developer.roblox.com/en-us/api-reference/class/AudioPlayer","AudioReverb":"https://developer.roblox.com/en-us/api-reference/class/AudioReverb","AudioSearchParams":"https://developer.roblox.com/en-us/api-reference/class/AudioSearchParams","AvatarChatService":"https://developer.roblox.com/en-us/api-reference/class/AvatarChatService","AvatarCreationService":"https://developer.roblox.com/en-us/api-reference/class/AvatarCreationService","AvatarEditorService":"https://developer.roblox.com/en-us/api-reference/class/AvatarEditorService","AvatarImportService":"https://developer.roblox.com/en-us/api-reference/class/AvatarImportService","Backpack":"https://developer.roblox.com/en-us/api-reference/class/Backpack","BadgeService":"https://developer.roblox.com/en-us/api-reference/class/BadgeService","BaseImportData":"https://developer.roblox.com/en-us/api-reference/class/BaseImportData","AnimationImportData":"https://developer.roblox.com/en-us/api-reference/class/AnimationImportData","FacsImportData":"https://developer.roblox.com/en-us/api-reference/class/FacsImportData","GroupImportData":"https://developer.roblox.com/en-us/api-reference/class/GroupImportData","JointImportData":"https://developer.roblox.com/en-us/api-reference/class/JointImportData","MaterialImportData":"https://developer.roblox.com/en-us/api-reference/class/MaterialImportData","MeshImportData":"https://developer.roblox.com/en-us/api-reference/class/MeshImportData","RootImportData":"https://developer.roblox.com/en-us/api-reference/class/RootImportData","BasePlayerGui":"https://developer.roblox.com/en-us/api-reference/class/BasePlayerGui","CoreGui":"https://developer.roblox.com/en-us/api-reference/class/CoreGui","PlayerGui":"https://developer.roblox.com/en-us/api-reference/class/PlayerGui","StarterGui":"https://developer.roblox.com/en-us/api-reference/class/StarterGui","BaseRemoteEvent":"https://developer.roblox.com/en-us/api-reference/class/BaseRemoteEvent","RemoteEvent":"https://developer.roblox.com/en-us/api-reference/class/RemoteEvent","UnreliableRemoteEvent":"https://developer.roblox.com/en-us/api-reference/class/UnreliableRemoteEvent","BaseWrap":"https://developer.roblox.com/en-us/api-reference/class/BaseWrap","WrapLayer":"https://developer.roblox.com/en-us/api-reference/class/WrapLayer","WrapTarget":"https://developer.roblox.com/en-us/api-reference/class/WrapTarget","Beam":"https://developer.roblox.com/en-us/api-reference/class/Beam","BindableEvent":"https://developer.roblox.com/en-us/api-reference/class/BindableEvent","BindableFunction":"https://developer.roblox.com/en-us/api-reference/class/BindableFunction","BodyMover":"https://developer.roblox.com/en-us/api-reference/class/BodyMover","BodyAngularVelocity":"https://developer.roblox.com/en-us/api-reference/class/BodyAngularVelocity","BodyForce":"https://developer.roblox.com/en-us/api-reference/class/BodyForce","BodyGyro":"https://developer.roblox.com/en-us/api-reference/class/BodyGyro","BodyPosition":"https://developer.roblox.com/en-us/api-reference/class/BodyPosition","BodyThrust":"https://developer.roblox.com/en-us/api-reference/class/BodyThrust","BodyVelocity":"https://developer.roblox.com/en-us/api-reference/class/BodyVelocity","RocketPropulsion":"https://developer.roblox.com/en-us/api-reference/class/RocketPropulsion","BodyPartDescription":"https://developer.roblox.com/en-us/api-reference/class/BodyPartDescription","Breakpoint":"https://developer.roblox.com/en-us/api-reference/class/Breakpoint","BrowserService":"https://developer.roblox.com/en-us/api-reference/class/BrowserService","BubbleChatMessageProperties":"https://developer.roblox.com/en-us/api-reference/class/BubbleChatMessageProperties","BulkImportService":"https://developer.roblox.com/en-us/api-reference/class/BulkImportService","CacheableContentProvider":"https://developer.roblox.com/en-us/api-reference/class/CacheableContentProvider","HSRDataContentProvider":"https://developer.roblox.com/en-us/api-reference/class/HSRDataContentProvider","MeshContentProvider":"https://developer.roblox.com/en-us/api-reference/class/MeshContentProvider","SolidModelContentProvider":"https://developer.roblox.com/en-us/api-reference/class/SolidModelContentProvider","CalloutService":"https://developer.roblox.com/en-us/api-reference/class/CalloutService","Camera":"https://developer.roblox.com/en-us/api-reference/class/Camera","CaptureService":"https://developer.roblox.com/en-us/api-reference/class/CaptureService","ChangeHistoryService":"https://developer.roblox.com/en-us/api-reference/class/ChangeHistoryService","CharacterAppearance":"https://developer.roblox.com/en-us/api-reference/class/CharacterAppearance","BodyColors":"https://developer.roblox.com/en-us/api-reference/class/BodyColors","CharacterMesh":"https://developer.roblox.com/en-us/api-reference/class/CharacterMesh","Clothing":"https://developer.roblox.com/en-us/api-reference/class/Clothing","Pants":"https://developer.roblox.com/en-us/api-reference/class/Pants","Shirt":"https://developer.roblox.com/en-us/api-reference/class/Shirt","ShirtGraphic":"https://developer.roblox.com/en-us/api-reference/class/ShirtGraphic","Skin":"https://developer.roblox.com/en-us/api-reference/class/Skin","Chat":"https://developer.roblox.com/en-us/api-reference/class/Chat","ChatbotUIService":"https://developer.roblox.com/en-us/api-reference/class/ChatbotUIService","ClickDetector":"https://developer.roblox.com/en-us/api-reference/class/ClickDetector","DragDetector":"https://developer.roblox.com/en-us/api-reference/class/DragDetector","Clouds":"https://developer.roblox.com/en-us/api-reference/class/Clouds","ClusterPacketCache":"https://developer.roblox.com/en-us/api-reference/class/ClusterPacketCache","Collaborator":"https://developer.roblox.com/en-us/api-reference/class/Collaborator","CollaboratorsService":"https://developer.roblox.com/en-us/api-reference/class/CollaboratorsService","CollectionService":"https://developer.roblox.com/en-us/api-reference/class/CollectionService","CommandInstance":"https://developer.roblox.com/en-us/api-reference/class/CommandInstance","CommandService":"https://developer.roblox.com/en-us/api-reference/class/CommandService","Configuration":"https://developer.roblox.com/en-us/api-reference/class/Configuration","ConfigureServerService":"https://developer.roblox.com/en-us/api-reference/class/ConfigureServerService","ConnectivityService":"https://developer.roblox.com/en-us/api-reference/class/ConnectivityService","Constraint":"https://developer.roblox.com/en-us/api-reference/class/Constraint","AlignOrientation":"https://developer.roblox.com/en-us/api-reference/class/AlignOrientation","AlignPosition":"https://developer.roblox.com/en-us/api-reference/class/AlignPosition","AngularVelocity":"https://developer.roblox.com/en-us/api-reference/class/AngularVelocity","AnimationConstraint":"https://developer.roblox.com/en-us/api-reference/class/AnimationConstraint","BallSocketConstraint":"https://developer.roblox.com/en-us/api-reference/class/BallSocketConstraint","HingeConstraint":"https://developer.roblox.com/en-us/api-reference/class/HingeConstraint","LineForce":"https://developer.roblox.com/en-us/api-reference/class/LineForce","LinearVelocity":"https://developer.roblox.com/en-us/api-reference/class/LinearVelocity","PlaneConstraint":"https://developer.roblox.com/en-us/api-reference/class/PlaneConstraint","Plane":"https://developer.roblox.com/en-us/api-reference/class/Plane","RigidConstraint":"https://developer.roblox.com/en-us/api-reference/class/RigidConstraint","RodConstraint":"https://developer.roblox.com/en-us/api-reference/class/RodConstraint","RopeConstraint":"https://developer.roblox.com/en-us/api-reference/class/RopeConstraint","SlidingBallConstraint":"https://developer.roblox.com/en-us/api-reference/class/SlidingBallConstraint","CylindricalConstraint":"https://developer.roblox.com/en-us/api-reference/class/CylindricalConstraint","PrismaticConstraint":"https://developer.roblox.com/en-us/api-reference/class/PrismaticConstraint","SpringConstraint":"https://developer.roblox.com/en-us/api-reference/class/SpringConstraint","Torque":"https://developer.roblox.com/en-us/api-reference/class/Torque","TorsionSpringConstraint":"https://developer.roblox.com/en-us/api-reference/class/TorsionSpringConstraint","UniversalConstraint":"https://developer.roblox.com/en-us/api-reference/class/UniversalConstraint","VectorForce":"https://developer.roblox.com/en-us/api-reference/class/VectorForce","ContentProvider":"https://developer.roblox.com/en-us/api-reference/class/ContentProvider","ContextActionService":"https://developer.roblox.com/en-us/api-reference/class/ContextActionService","Controller":"https://developer.roblox.com/en-us/api-reference/class/Controller","HumanoidController":"https://developer.roblox.com/en-us/api-reference/class/HumanoidController","SkateboardController":"https://developer.roblox.com/en-us/api-reference/class/SkateboardController","VehicleController":"https://developer.roblox.com/en-us/api-reference/class/VehicleController","ControllerBase":"https://developer.roblox.com/en-us/api-reference/class/ControllerBase","AirController":"https://developer.roblox.com/en-us/api-reference/class/AirController","ClimbController":"https://developer.roblox.com/en-us/api-reference/class/ClimbController","GroundController":"https://developer.roblox.com/en-us/api-reference/class/GroundController","SwimController":"https://developer.roblox.com/en-us/api-reference/class/SwimController","ControllerManager":"https://developer.roblox.com/en-us/api-reference/class/ControllerManager","ControllerService":"https://developer.roblox.com/en-us/api-reference/class/ControllerService","ConversationalAIAcceptanceService":"https://developer.roblox.com/en-us/api-reference/class/ConversationalAIAcceptanceService","CookiesService":"https://developer.roblox.com/en-us/api-reference/class/CookiesService","CorePackages":"https://developer.roblox.com/en-us/api-reference/class/CorePackages","CoreScriptDebuggingManagerHelper":"https://developer.roblox.com/en-us/api-reference/class/CoreScriptDebuggingManagerHelper","CoreScriptSyncService":"https://developer.roblox.com/en-us/api-reference/class/CoreScriptSyncService","CreationDBService":"https://developer.roblox.com/en-us/api-reference/class/CreationDBService","CrossDMScriptChangeListener":"https://developer.roblox.com/en-us/api-reference/class/CrossDMScriptChangeListener","CustomEvent":"https://developer.roblox.com/en-us/api-reference/class/CustomEvent","CustomEventReceiver":"https://developer.roblox.com/en-us/api-reference/class/CustomEventReceiver","DataModelMesh":"https://developer.roblox.com/en-us/api-reference/class/DataModelMesh","BevelMesh":"https://developer.roblox.com/en-us/api-reference/class/BevelMesh","BlockMesh":"https://developer.roblox.com/en-us/api-reference/class/BlockMesh","CylinderMesh":"https://developer.roblox.com/en-us/api-reference/class/CylinderMesh","EditableMesh":"https://developer.roblox.com/en-us/api-reference/class/EditableMesh","FileMesh":"https://developer.roblox.com/en-us/api-reference/class/FileMesh","SpecialMesh":"https://developer.roblox.com/en-us/api-reference/class/SpecialMesh","DataModelPatchService":"https://developer.roblox.com/en-us/api-reference/class/DataModelPatchService","DataModelSession":"https://developer.roblox.com/en-us/api-reference/class/DataModelSession","DataStoreGetOptions":"https://developer.roblox.com/en-us/api-reference/class/DataStoreGetOptions","DataStoreIncrementOptions":"https://developer.roblox.com/en-us/api-reference/class/DataStoreIncrementOptions","DataStoreInfo":"https://developer.roblox.com/en-us/api-reference/class/DataStoreInfo","DataStoreKey":"https://developer.roblox.com/en-us/api-reference/class/DataStoreKey","DataStoreKeyInfo":"https://developer.roblox.com/en-us/api-reference/class/DataStoreKeyInfo","DataStoreObjectVersionInfo":"https://developer.roblox.com/en-us/api-reference/class/DataStoreObjectVersionInfo","DataStoreOptions":"https://developer.roblox.com/en-us/api-reference/class/DataStoreOptions","DataStoreService":"https://developer.roblox.com/en-us/api-reference/class/DataStoreService","DataStoreSetOptions":"https://developer.roblox.com/en-us/api-reference/class/DataStoreSetOptions","Debris":"https://developer.roblox.com/en-us/api-reference/class/Debris","DebugSettings":"https://developer.roblox.com/en-us/api-reference/class/DebugSettings","DebuggablePluginWatcher":"https://developer.roblox.com/en-us/api-reference/class/DebuggablePluginWatcher","DebuggerBreakpoint":"https://developer.roblox.com/en-us/api-reference/class/DebuggerBreakpoint","DebuggerConnection":"https://developer.roblox.com/en-us/api-reference/class/DebuggerConnection","LocalDebuggerConnection":"https://developer.roblox.com/en-us/api-reference/class/LocalDebuggerConnection","DebuggerConnectionManager":"https://developer.roblox.com/en-us/api-reference/class/DebuggerConnectionManager","DebuggerLuaResponse":"https://developer.roblox.com/en-us/api-reference/class/DebuggerLuaResponse","DebuggerManager":"https://developer.roblox.com/en-us/api-reference/class/DebuggerManager","DebuggerUIService":"https://developer.roblox.com/en-us/api-reference/class/DebuggerUIService","DebuggerVariable":"https://developer.roblox.com/en-us/api-reference/class/DebuggerVariable","DebuggerWatch":"https://developer.roblox.com/en-us/api-reference/class/DebuggerWatch","DeviceIdService":"https://developer.roblox.com/en-us/api-reference/class/DeviceIdService","Dialog":"https://developer.roblox.com/en-us/api-reference/class/Dialog","DialogChoice":"https://developer.roblox.com/en-us/api-reference/class/DialogChoice","DraftsService":"https://developer.roblox.com/en-us/api-reference/class/DraftsService","Dragger":"https://developer.roblox.com/en-us/api-reference/class/Dragger","DraggerService":"https://developer.roblox.com/en-us/api-reference/class/DraggerService","EditableImage":"https://developer.roblox.com/en-us/api-reference/class/EditableImage","RobloxEditableImage":"https://developer.roblox.com/en-us/api-reference/class/RobloxEditableImage","EngineAPICloudProcessingService":"https://developer.roblox.com/en-us/api-reference/class/EngineAPICloudProcessingService","EulerRotationCurve":"https://developer.roblox.com/en-us/api-reference/class/EulerRotationCurve","EventIngestService":"https://developer.roblox.com/en-us/api-reference/class/EventIngestService","ExperienceAuthService":"https://developer.roblox.com/en-us/api-reference/class/ExperienceAuthService","ExperienceInviteOptions":"https://developer.roblox.com/en-us/api-reference/class/ExperienceInviteOptions","ExperienceNotificationService":"https://developer.roblox.com/en-us/api-reference/class/ExperienceNotificationService","ExperienceService":"https://developer.roblox.com/en-us/api-reference/class/ExperienceService","ExperienceStateCaptureService":"https://developer.roblox.com/en-us/api-reference/class/ExperienceStateCaptureService","Explosion":"https://developer.roblox.com/en-us/api-reference/class/Explosion","FaceAnimatorService":"https://developer.roblox.com/en-us/api-reference/class/FaceAnimatorService","FaceControls":"https://developer.roblox.com/en-us/api-reference/class/FaceControls","FaceInstance":"https://developer.roblox.com/en-us/api-reference/class/FaceInstance","Decal":"https://developer.roblox.com/en-us/api-reference/class/Decal","Texture":"https://developer.roblox.com/en-us/api-reference/class/Texture","FacialAnimationRecordingService":"https://developer.roblox.com/en-us/api-reference/class/FacialAnimationRecordingService","FacialAnimationStreamingServiceStats":"https://developer.roblox.com/en-us/api-reference/class/FacialAnimationStreamingServiceStats","FacialAnimationStreamingServiceV2":"https://developer.roblox.com/en-us/api-reference/class/FacialAnimationStreamingServiceV2","FacialAnimationStreamingSubsessionStats":"https://developer.roblox.com/en-us/api-reference/class/FacialAnimationStreamingSubsessionStats","Feature":"https://developer.roblox.com/en-us/api-reference/class/Feature","Hole":"https://developer.roblox.com/en-us/api-reference/class/Hole","MotorFeature":"https://developer.roblox.com/en-us/api-reference/class/MotorFeature","File":"https://developer.roblox.com/en-us/api-reference/class/File","Fire":"https://developer.roblox.com/en-us/api-reference/class/Fire","FlagStandService":"https://developer.roblox.com/en-us/api-reference/class/FlagStandService","FloatCurve":"https://developer.roblox.com/en-us/api-reference/class/FloatCurve","FlyweightService":"https://developer.roblox.com/en-us/api-reference/class/FlyweightService","CSGDictionaryService":"https://developer.roblox.com/en-us/api-reference/class/CSGDictionaryService","NonReplicatedCSGDictionaryService":"https://developer.roblox.com/en-us/api-reference/class/NonReplicatedCSGDictionaryService","Folder":"https://developer.roblox.com/en-us/api-reference/class/Folder","ForceField":"https://developer.roblox.com/en-us/api-reference/class/ForceField","FriendService":"https://developer.roblox.com/en-us/api-reference/class/FriendService","FunctionalTest":"https://developer.roblox.com/en-us/api-reference/class/FunctionalTest","GamePassService":"https://developer.roblox.com/en-us/api-reference/class/GamePassService","GameSettings":"https://developer.roblox.com/en-us/api-reference/class/GameSettings","GamepadService":"https://developer.roblox.com/en-us/api-reference/class/GamepadService","Geometry":"https://developer.roblox.com/en-us/api-reference/class/Geometry","GeometryService":"https://developer.roblox.com/en-us/api-reference/class/GeometryService","GetTextBoundsParams":"https://developer.roblox.com/en-us/api-reference/class/GetTextBoundsParams","GlobalDataStore":"https://developer.roblox.com/en-us/api-reference/class/GlobalDataStore","DataStore":"https://developer.roblox.com/en-us/api-reference/class/DataStore","OrderedDataStore":"https://developer.roblox.com/en-us/api-reference/class/OrderedDataStore","GoogleAnalyticsConfiguration":"https://developer.roblox.com/en-us/api-reference/class/GoogleAnalyticsConfiguration","GroupService":"https://developer.roblox.com/en-us/api-reference/class/GroupService","GuiBase":"https://developer.roblox.com/en-us/api-reference/class/GuiBase","GuiBase2d":"https://developer.roblox.com/en-us/api-reference/class/GuiBase2d","GuiObject":"https://developer.roblox.com/en-us/api-reference/class/GuiObject","CanvasGroup":"https://developer.roblox.com/en-us/api-reference/class/CanvasGroup","Frame":"https://developer.roblox.com/en-us/api-reference/class/Frame","GuiButton":"https://developer.roblox.com/en-us/api-reference/class/GuiButton","ImageButton":"https://developer.roblox.com/en-us/api-reference/class/ImageButton","TextButton":"https://developer.roblox.com/en-us/api-reference/class/TextButton","GuiLabel":"https://developer.roblox.com/en-us/api-reference/class/GuiLabel","ImageLabel":"https://developer.roblox.com/en-us/api-reference/class/ImageLabel","TextLabel":"https://developer.roblox.com/en-us/api-reference/class/TextLabel","ScrollingFrame":"https://developer.roblox.com/en-us/api-reference/class/ScrollingFrame","TextBox":"https://developer.roblox.com/en-us/api-reference/class/TextBox","VideoFrame":"https://developer.roblox.com/en-us/api-reference/class/VideoFrame","ViewportFrame":"https://developer.roblox.com/en-us/api-reference/class/ViewportFrame","LayerCollector":"https://developer.roblox.com/en-us/api-reference/class/LayerCollector","BillboardGui":"https://developer.roblox.com/en-us/api-reference/class/BillboardGui","PluginGui":"https://developer.roblox.com/en-us/api-reference/class/PluginGui","DockWidgetPluginGui":"https://developer.roblox.com/en-us/api-reference/class/DockWidgetPluginGui","QWidgetPluginGui":"https://developer.roblox.com/en-us/api-reference/class/QWidgetPluginGui","ScreenGui":"https://developer.roblox.com/en-us/api-reference/class/ScreenGui","GuiMain":"https://developer.roblox.com/en-us/api-reference/class/GuiMain","SurfaceGuiBase":"https://developer.roblox.com/en-us/api-reference/class/SurfaceGuiBase","AdGui":"https://developer.roblox.com/en-us/api-reference/class/AdGui","SurfaceGui":"https://developer.roblox.com/en-us/api-reference/class/SurfaceGui","GuiBase3d":"https://developer.roblox.com/en-us/api-reference/class/GuiBase3d","FloorWire":"https://developer.roblox.com/en-us/api-reference/class/FloorWire","InstanceAdornment":"https://developer.roblox.com/en-us/api-reference/class/InstanceAdornment","SelectionBox":"https://developer.roblox.com/en-us/api-reference/class/SelectionBox","PVAdornment":"https://developer.roblox.com/en-us/api-reference/class/PVAdornment","HandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/HandleAdornment","BoxHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/BoxHandleAdornment","ConeHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/ConeHandleAdornment","CylinderHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/CylinderHandleAdornment","ImageHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/ImageHandleAdornment","LineHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/LineHandleAdornment","SphereHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/SphereHandleAdornment","WireframeHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/WireframeHandleAdornment","ParabolaAdornment":"https://developer.roblox.com/en-us/api-reference/class/ParabolaAdornment","SelectionSphere":"https://developer.roblox.com/en-us/api-reference/class/SelectionSphere","PartAdornment":"https://developer.roblox.com/en-us/api-reference/class/PartAdornment","HandlesBase":"https://developer.roblox.com/en-us/api-reference/class/HandlesBase","ArcHandles":"https://developer.roblox.com/en-us/api-reference/class/ArcHandles","Handles":"https://developer.roblox.com/en-us/api-reference/class/Handles","SurfaceSelection":"https://developer.roblox.com/en-us/api-reference/class/SurfaceSelection","SelectionLasso":"https://developer.roblox.com/en-us/api-reference/class/SelectionLasso","SelectionPartLasso":"https://developer.roblox.com/en-us/api-reference/class/SelectionPartLasso","SelectionPointLasso":"https://developer.roblox.com/en-us/api-reference/class/SelectionPointLasso","Path2D":"https://developer.roblox.com/en-us/api-reference/class/Path2D","GuiService":"https://developer.roblox.com/en-us/api-reference/class/GuiService","GuidRegistryService":"https://developer.roblox.com/en-us/api-reference/class/GuidRegistryService","HapticService":"https://developer.roblox.com/en-us/api-reference/class/HapticService","HeightmapImporterService":"https://developer.roblox.com/en-us/api-reference/class/HeightmapImporterService","HiddenSurfaceRemovalAsset":"https://developer.roblox.com/en-us/api-reference/class/HiddenSurfaceRemovalAsset","Highlight":"https://developer.roblox.com/en-us/api-reference/class/Highlight","Hopper":"https://developer.roblox.com/en-us/api-reference/class/Hopper","HttpRbxApiService":"https://developer.roblox.com/en-us/api-reference/class/HttpRbxApiService","HttpRequest":"https://developer.roblox.com/en-us/api-reference/class/HttpRequest","HttpService":"https://developer.roblox.com/en-us/api-reference/class/HttpService","Humanoid":"https://developer.roblox.com/en-us/api-reference/class/Humanoid","HumanoidDescription":"https://developer.roblox.com/en-us/api-reference/class/HumanoidDescription","IKControl":"https://developer.roblox.com/en-us/api-reference/class/IKControl","ILegacyStudioBridge":"https://developer.roblox.com/en-us/api-reference/class/ILegacyStudioBridge","LegacyStudioBridge":"https://developer.roblox.com/en-us/api-reference/class/LegacyStudioBridge","IXPService":"https://developer.roblox.com/en-us/api-reference/class/IXPService","IncrementalPatchBuilder":"https://developer.roblox.com/en-us/api-reference/class/IncrementalPatchBuilder","InputObject":"https://developer.roblox.com/en-us/api-reference/class/InputObject","InsertService":"https://developer.roblox.com/en-us/api-reference/class/InsertService","JointInstance":"https://developer.roblox.com/en-us/api-reference/class/JointInstance","DynamicRotate":"https://developer.roblox.com/en-us/api-reference/class/DynamicRotate","RotateP":"https://developer.roblox.com/en-us/api-reference/class/RotateP","RotateV":"https://developer.roblox.com/en-us/api-reference/class/RotateV","Glue":"https://developer.roblox.com/en-us/api-reference/class/Glue","ManualSurfaceJointInstance":"https://developer.roblox.com/en-us/api-reference/class/ManualSurfaceJointInstance","ManualGlue":"https://developer.roblox.com/en-us/api-reference/class/ManualGlue","ManualWeld":"https://developer.roblox.com/en-us/api-reference/class/ManualWeld","Motor":"https://developer.roblox.com/en-us/api-reference/class/Motor","Motor6D":"https://developer.roblox.com/en-us/api-reference/class/Motor6D","Rotate":"https://developer.roblox.com/en-us/api-reference/class/Rotate","Snap":"https://developer.roblox.com/en-us/api-reference/class/Snap","VelocityMotor":"https://developer.roblox.com/en-us/api-reference/class/VelocityMotor","Weld":"https://developer.roblox.com/en-us/api-reference/class/Weld","JointsService":"https://developer.roblox.com/en-us/api-reference/class/JointsService","KeyboardService":"https://developer.roblox.com/en-us/api-reference/class/KeyboardService","Keyframe":"https://developer.roblox.com/en-us/api-reference/class/Keyframe","KeyframeMarker":"https://developer.roblox.com/en-us/api-reference/class/KeyframeMarker","KeyframeSequenceProvider":"https://developer.roblox.com/en-us/api-reference/class/KeyframeSequenceProvider","LSPFileSyncService":"https://developer.roblox.com/en-us/api-reference/class/LSPFileSyncService","LanguageService":"https://developer.roblox.com/en-us/api-reference/class/LanguageService","Light":"https://developer.roblox.com/en-us/api-reference/class/Light","PointLight":"https://developer.roblox.com/en-us/api-reference/class/PointLight","SpotLight":"https://developer.roblox.com/en-us/api-reference/class/SpotLight","SurfaceLight":"https://developer.roblox.com/en-us/api-reference/class/SurfaceLight","Lighting":"https://developer.roblox.com/en-us/api-reference/class/Lighting","LiveScriptingService":"https://developer.roblox.com/en-us/api-reference/class/LiveScriptingService","LocalStorageService":"https://developer.roblox.com/en-us/api-reference/class/LocalStorageService","AppStorageService":"https://developer.roblox.com/en-us/api-reference/class/AppStorageService","UserStorageService":"https://developer.roblox.com/en-us/api-reference/class/UserStorageService","LocalizationService":"https://developer.roblox.com/en-us/api-reference/class/LocalizationService","LocalizationTable":"https://developer.roblox.com/en-us/api-reference/class/LocalizationTable","CloudLocalizationTable":"https://developer.roblox.com/en-us/api-reference/class/CloudLocalizationTable","LodDataEntity":"https://developer.roblox.com/en-us/api-reference/class/LodDataEntity","LodDataService":"https://developer.roblox.com/en-us/api-reference/class/LodDataService","LogReporterService":"https://developer.roblox.com/en-us/api-reference/class/LogReporterService","LogService":"https://developer.roblox.com/en-us/api-reference/class/LogService","LoginService":"https://developer.roblox.com/en-us/api-reference/class/LoginService","LuaSettings":"https://developer.roblox.com/en-us/api-reference/class/LuaSettings","LuaSourceContainer":"https://developer.roblox.com/en-us/api-reference/class/LuaSourceContainer","BaseScript":"https://developer.roblox.com/en-us/api-reference/class/BaseScript","CoreScript":"https://developer.roblox.com/en-us/api-reference/class/CoreScript","Script":"https://developer.roblox.com/en-us/api-reference/class/Script","LocalScript":"https://developer.roblox.com/en-us/api-reference/class/LocalScript","ModuleScript":"https://developer.roblox.com/en-us/api-reference/class/ModuleScript","LuaWebService":"https://developer.roblox.com/en-us/api-reference/class/LuaWebService","LuauScriptAnalyzerService":"https://developer.roblox.com/en-us/api-reference/class/LuauScriptAnalyzerService","MarkerCurve":"https://developer.roblox.com/en-us/api-reference/class/MarkerCurve","MarketplaceService":"https://developer.roblox.com/en-us/api-reference/class/MarketplaceService","MaterialGenerationService":"https://developer.roblox.com/en-us/api-reference/class/MaterialGenerationService","MaterialGenerationSession":"https://developer.roblox.com/en-us/api-reference/class/MaterialGenerationSession","MaterialService":"https://developer.roblox.com/en-us/api-reference/class/MaterialService","MaterialVariant":"https://developer.roblox.com/en-us/api-reference/class/MaterialVariant","MemStorageConnection":"https://developer.roblox.com/en-us/api-reference/class/MemStorageConnection","MemStorageService":"https://developer.roblox.com/en-us/api-reference/class/MemStorageService","MemoryStoreHashMap":"https://developer.roblox.com/en-us/api-reference/class/MemoryStoreHashMap","MemoryStoreQueue":"https://developer.roblox.com/en-us/api-reference/class/MemoryStoreQueue","MemoryStoreService":"https://developer.roblox.com/en-us/api-reference/class/MemoryStoreService","MemoryStoreSortedMap":"https://developer.roblox.com/en-us/api-reference/class/MemoryStoreSortedMap","Message":"https://developer.roblox.com/en-us/api-reference/class/Message","Hint":"https://developer.roblox.com/en-us/api-reference/class/Hint","MessageBusConnection":"https://developer.roblox.com/en-us/api-reference/class/MessageBusConnection","MessageBusService":"https://developer.roblox.com/en-us/api-reference/class/MessageBusService","MessagingService":"https://developer.roblox.com/en-us/api-reference/class/MessagingService","MetaBreakpoint":"https://developer.roblox.com/en-us/api-reference/class/MetaBreakpoint","MetaBreakpointContext":"https://developer.roblox.com/en-us/api-reference/class/MetaBreakpointContext","MetaBreakpointManager":"https://developer.roblox.com/en-us/api-reference/class/MetaBreakpointManager","Mouse":"https://developer.roblox.com/en-us/api-reference/class/Mouse","PlayerMouse":"https://developer.roblox.com/en-us/api-reference/class/PlayerMouse","PluginMouse":"https://developer.roblox.com/en-us/api-reference/class/PluginMouse","MouseService":"https://developer.roblox.com/en-us/api-reference/class/MouseService","MultipleDocumentInterfaceInstance":"https://developer.roblox.com/en-us/api-reference/class/MultipleDocumentInterfaceInstance","NetworkMarker":"https://developer.roblox.com/en-us/api-reference/class/NetworkMarker","NetworkPeer":"https://developer.roblox.com/en-us/api-reference/class/NetworkPeer","NetworkClient":"https://developer.roblox.com/en-us/api-reference/class/NetworkClient","NetworkServer":"https://developer.roblox.com/en-us/api-reference/class/NetworkServer","NetworkReplicator":"https://developer.roblox.com/en-us/api-reference/class/NetworkReplicator","ClientReplicator":"https://developer.roblox.com/en-us/api-reference/class/ClientReplicator","ServerReplicator":"https://developer.roblox.com/en-us/api-reference/class/ServerReplicator","NetworkSettings":"https://developer.roblox.com/en-us/api-reference/class/NetworkSettings","NoCollisionConstraint":"https://developer.roblox.com/en-us/api-reference/class/NoCollisionConstraint","Noise":"https://developer.roblox.com/en-us/api-reference/class/Noise","NotificationService":"https://developer.roblox.com/en-us/api-reference/class/NotificationService","OmniRecommendationsService":"https://developer.roblox.com/en-us/api-reference/class/OmniRecommendationsService","OpenCloudApiV1":"https://developer.roblox.com/en-us/api-reference/class/OpenCloudApiV1","OpenCloudService":"https://developer.roblox.com/en-us/api-reference/class/OpenCloudService","OperationGraph":"https://developer.roblox.com/en-us/api-reference/class/OperationGraph","PVInstance":"https://developer.roblox.com/en-us/api-reference/class/PVInstance","BasePart":"https://developer.roblox.com/en-us/api-reference/class/BasePart","CornerWedgePart":"https://developer.roblox.com/en-us/api-reference/class/CornerWedgePart","FormFactorPart":"https://developer.roblox.com/en-us/api-reference/class/FormFactorPart","Part":"https://developer.roblox.com/en-us/api-reference/class/Part","FlagStand":"https://developer.roblox.com/en-us/api-reference/class/FlagStand","Platform":"https://developer.roblox.com/en-us/api-reference/enum/Platform","Seat":"https://developer.roblox.com/en-us/api-reference/class/Seat","SkateboardPlatform":"https://developer.roblox.com/en-us/api-reference/class/SkateboardPlatform","SpawnLocation":"https://developer.roblox.com/en-us/api-reference/class/SpawnLocation","WedgePart":"https://developer.roblox.com/en-us/api-reference/class/WedgePart","Terrain":"https://developer.roblox.com/en-us/api-reference/class/Terrain","TriangleMeshPart":"https://developer.roblox.com/en-us/api-reference/class/TriangleMeshPart","MeshPart":"https://developer.roblox.com/en-us/api-reference/class/MeshPart","PartOperation":"https://developer.roblox.com/en-us/api-reference/class/PartOperation","IntersectOperation":"https://developer.roblox.com/en-us/api-reference/class/IntersectOperation","NegateOperation":"https://developer.roblox.com/en-us/api-reference/class/NegateOperation","UnionOperation":"https://developer.roblox.com/en-us/api-reference/class/UnionOperation","TrussPart":"https://developer.roblox.com/en-us/api-reference/class/TrussPart","VehicleSeat":"https://developer.roblox.com/en-us/api-reference/class/VehicleSeat","Model":"https://developer.roblox.com/en-us/api-reference/class/Model","Actor":"https://developer.roblox.com/en-us/api-reference/class/Actor","BackpackItem":"https://developer.roblox.com/en-us/api-reference/class/BackpackItem","HopperBin":"https://developer.roblox.com/en-us/api-reference/class/HopperBin","Tool":"https://developer.roblox.com/en-us/api-reference/class/Tool","Flag":"https://developer.roblox.com/en-us/api-reference/class/Flag","Status":"https://developer.roblox.com/en-us/api-reference/enum/Status","WorldRoot":"https://developer.roblox.com/en-us/api-reference/class/WorldRoot","Workspace":"https://developer.roblox.com/en-us/api-reference/class/Workspace","WorldModel":"https://developer.roblox.com/en-us/api-reference/class/WorldModel","PackageLink":"https://developer.roblox.com/en-us/api-reference/class/PackageLink","PackageService":"https://developer.roblox.com/en-us/api-reference/class/PackageService","PackageUIService":"https://developer.roblox.com/en-us/api-reference/class/PackageUIService","Pages":"https://developer.roblox.com/en-us/api-reference/class/Pages","AudioPages":"https://developer.roblox.com/en-us/api-reference/class/AudioPages","CatalogPages":"https://developer.roblox.com/en-us/api-reference/class/CatalogPages","DataStoreKeyPages":"https://developer.roblox.com/en-us/api-reference/class/DataStoreKeyPages","DataStoreListingPages":"https://developer.roblox.com/en-us/api-reference/class/DataStoreListingPages","DataStorePages":"https://developer.roblox.com/en-us/api-reference/class/DataStorePages","DataStoreVersionPages":"https://developer.roblox.com/en-us/api-reference/class/DataStoreVersionPages","FriendPages":"https://developer.roblox.com/en-us/api-reference/class/FriendPages","InventoryPages":"https://developer.roblox.com/en-us/api-reference/class/InventoryPages","EmotesPages":"https://developer.roblox.com/en-us/api-reference/class/EmotesPages","MemoryStoreHashMapPages":"https://developer.roblox.com/en-us/api-reference/class/MemoryStoreHashMapPages","OutfitPages":"https://developer.roblox.com/en-us/api-reference/class/OutfitPages","StandardPages":"https://developer.roblox.com/en-us/api-reference/class/StandardPages","PartOperationAsset":"https://developer.roblox.com/en-us/api-reference/class/PartOperationAsset","ParticleEmitter":"https://developer.roblox.com/en-us/api-reference/class/ParticleEmitter","PatchBundlerFileWatch":"https://developer.roblox.com/en-us/api-reference/class/PatchBundlerFileWatch","PatchMapping":"https://developer.roblox.com/en-us/api-reference/class/PatchMapping","Path":"https://developer.roblox.com/en-us/api-reference/class/Path","PathfindingLink":"https://developer.roblox.com/en-us/api-reference/class/PathfindingLink","PathfindingModifier":"https://developer.roblox.com/en-us/api-reference/class/PathfindingModifier","PathfindingService":"https://developer.roblox.com/en-us/api-reference/class/PathfindingService","PausedState":"https://developer.roblox.com/en-us/api-reference/class/PausedState","PausedStateBreakpoint":"https://developer.roblox.com/en-us/api-reference/class/PausedStateBreakpoint","PausedStateException":"https://developer.roblox.com/en-us/api-reference/class/PausedStateException","PermissionsService":"https://developer.roblox.com/en-us/api-reference/class/PermissionsService","PhysicsService":"https://developer.roblox.com/en-us/api-reference/class/PhysicsService","PhysicsSettings":"https://developer.roblox.com/en-us/api-reference/class/PhysicsSettings","PlaceStatsService":"https://developer.roblox.com/en-us/api-reference/class/PlaceStatsService","PlacesService":"https://developer.roblox.com/en-us/api-reference/class/PlacesService","PlatformCloudStorageService":"https://developer.roblox.com/en-us/api-reference/class/PlatformCloudStorageService","PlatformFriendsService":"https://developer.roblox.com/en-us/api-reference/class/PlatformFriendsService","Player":"https://developer.roblox.com/en-us/api-reference/class/Player","PlayerEmulatorService":"https://developer.roblox.com/en-us/api-reference/class/PlayerEmulatorService","PlayerScripts":"https://developer.roblox.com/en-us/api-reference/class/PlayerScripts","PlayerViewService":"https://developer.roblox.com/en-us/api-reference/class/PlayerViewService","Players":"https://developer.roblox.com/en-us/api-reference/class/Players","Plugin":"https://developer.roblox.com/en-us/api-reference/class/Plugin","PluginAction":"https://developer.roblox.com/en-us/api-reference/class/PluginAction","PluginCapabilities":"https://developer.roblox.com/en-us/api-reference/class/PluginCapabilities","PluginDebugService":"https://developer.roblox.com/en-us/api-reference/class/PluginDebugService","PluginDragEvent":"https://developer.roblox.com/en-us/api-reference/class/PluginDragEvent","PluginGuiService":"https://developer.roblox.com/en-us/api-reference/class/PluginGuiService","PluginManagementService":"https://developer.roblox.com/en-us/api-reference/class/PluginManagementService","PluginManager":"https://developer.roblox.com/en-us/api-reference/class/PluginManager","PluginManagerInterface":"https://developer.roblox.com/en-us/api-reference/class/PluginManagerInterface","PluginMenu":"https://developer.roblox.com/en-us/api-reference/class/PluginMenu","PluginPolicyService":"https://developer.roblox.com/en-us/api-reference/class/PluginPolicyService","PluginToolbar":"https://developer.roblox.com/en-us/api-reference/class/PluginToolbar","PluginToolbarButton":"https://developer.roblox.com/en-us/api-reference/class/PluginToolbarButton","PointsService":"https://developer.roblox.com/en-us/api-reference/class/PointsService","PolicyService":"https://developer.roblox.com/en-us/api-reference/class/PolicyService","PoseBase":"https://developer.roblox.com/en-us/api-reference/class/PoseBase","NumberPose":"https://developer.roblox.com/en-us/api-reference/class/NumberPose","Pose":"https://developer.roblox.com/en-us/api-reference/class/Pose","PostEffect":"https://developer.roblox.com/en-us/api-reference/class/PostEffect","BloomEffect":"https://developer.roblox.com/en-us/api-reference/class/BloomEffect","BlurEffect":"https://developer.roblox.com/en-us/api-reference/class/BlurEffect","ColorCorrectionEffect":"https://developer.roblox.com/en-us/api-reference/class/ColorCorrectionEffect","DepthOfFieldEffect":"https://developer.roblox.com/en-us/api-reference/class/DepthOfFieldEffect","SunRaysEffect":"https://developer.roblox.com/en-us/api-reference/class/SunRaysEffect","ProcessInstancePhysicsService":"https://developer.roblox.com/en-us/api-reference/class/ProcessInstancePhysicsService","ProjectFolderService":"https://developer.roblox.com/en-us/api-reference/class/ProjectFolderService","ProximityPrompt":"https://developer.roblox.com/en-us/api-reference/class/ProximityPrompt","ProximityPromptService":"https://developer.roblox.com/en-us/api-reference/class/ProximityPromptService","PublishService":"https://developer.roblox.com/en-us/api-reference/class/PublishService","RbxAnalyticsService":"https://developer.roblox.com/en-us/api-reference/class/RbxAnalyticsService","ReflectionMetadata":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadata","ReflectionMetadataCallbacks":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataCallbacks","ReflectionMetadataClasses":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataClasses","ReflectionMetadataEnums":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataEnums","ReflectionMetadataEvents":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataEvents","ReflectionMetadataFunctions":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataFunctions","ReflectionMetadataItem":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataItem","ReflectionMetadataClass":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataClass","ReflectionMetadataEnum":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataEnum","ReflectionMetadataEnumItem":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataEnumItem","ReflectionMetadataMember":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataMember","ReflectionMetadataProperties":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataProperties","ReflectionMetadataYieldFunctions":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataYieldFunctions","ReflectionService":"https://developer.roblox.com/en-us/api-reference/class/ReflectionService","RemoteCursorService":"https://developer.roblox.com/en-us/api-reference/class/RemoteCursorService","RemoteDebuggerServer":"https://developer.roblox.com/en-us/api-reference/class/RemoteDebuggerServer","RemoteFunction":"https://developer.roblox.com/en-us/api-reference/class/RemoteFunction","RenderSettings":"https://developer.roblox.com/en-us/api-reference/class/RenderSettings","RenderingTest":"https://developer.roblox.com/en-us/api-reference/class/RenderingTest","ReplicatedFirst":"https://developer.roblox.com/en-us/api-reference/class/ReplicatedFirst","ReplicatedStorage":"https://developer.roblox.com/en-us/api-reference/class/ReplicatedStorage","RibbonNotificationService":"https://developer.roblox.com/en-us/api-reference/class/RibbonNotificationService","RobloxPluginGuiService":"https://developer.roblox.com/en-us/api-reference/class/RobloxPluginGuiService","RobloxReplicatedStorage":"https://developer.roblox.com/en-us/api-reference/class/RobloxReplicatedStorage","RobloxServerStorage":"https://developer.roblox.com/en-us/api-reference/class/RobloxServerStorage","RomarkService":"https://developer.roblox.com/en-us/api-reference/class/RomarkService","RotationCurve":"https://developer.roblox.com/en-us/api-reference/class/RotationCurve","RtMessagingService":"https://developer.roblox.com/en-us/api-reference/class/RtMessagingService","RunService":"https://developer.roblox.com/en-us/api-reference/class/RunService","RuntimeScriptService":"https://developer.roblox.com/en-us/api-reference/class/RuntimeScriptService","SafetyService":"https://developer.roblox.com/en-us/api-reference/class/SafetyService","ScreenshotHud":"https://developer.roblox.com/en-us/api-reference/class/ScreenshotHud","ScriptBuilder":"https://developer.roblox.com/en-us/api-reference/class/ScriptBuilder","SyncScriptBuilder":"https://developer.roblox.com/en-us/api-reference/class/SyncScriptBuilder","ScriptChangeService":"https://developer.roblox.com/en-us/api-reference/class/ScriptChangeService","ScriptCloneWatcher":"https://developer.roblox.com/en-us/api-reference/class/ScriptCloneWatcher","ScriptCloneWatcherHelper":"https://developer.roblox.com/en-us/api-reference/class/ScriptCloneWatcherHelper","ScriptCommitService":"https://developer.roblox.com/en-us/api-reference/class/ScriptCommitService","ScriptContext":"https://developer.roblox.com/en-us/api-reference/class/ScriptContext","ScriptDebugger":"https://developer.roblox.com/en-us/api-reference/class/ScriptDebugger","ScriptDocument":"https://developer.roblox.com/en-us/api-reference/class/ScriptDocument","ScriptEditorService":"https://developer.roblox.com/en-us/api-reference/class/ScriptEditorService","ScriptRegistrationService":"https://developer.roblox.com/en-us/api-reference/class/ScriptRegistrationService","ScriptRuntime":"https://developer.roblox.com/en-us/api-reference/class/ScriptRuntime","ScriptService":"https://developer.roblox.com/en-us/api-reference/class/ScriptService","Selection":"https://developer.roblox.com/en-us/api-reference/class/Selection","SelectionHighlightManager":"https://developer.roblox.com/en-us/api-reference/class/SelectionHighlightManager","SensorBase":"https://developer.roblox.com/en-us/api-reference/class/SensorBase","BuoyancySensor":"https://developer.roblox.com/en-us/api-reference/class/BuoyancySensor","ControllerSensor":"https://developer.roblox.com/en-us/api-reference/class/ControllerSensor","ControllerPartSensor":"https://developer.roblox.com/en-us/api-reference/class/ControllerPartSensor","ServerScriptService":"https://developer.roblox.com/en-us/api-reference/class/ServerScriptService","ServerStorage":"https://developer.roblox.com/en-us/api-reference/class/ServerStorage","ServiceProvider":"https://developer.roblox.com/en-us/api-reference/class/ServiceProvider","DataModel":"https://developer.roblox.com/en-us/api-reference/class/DataModel","GenericSettings":"https://developer.roblox.com/en-us/api-reference/class/GenericSettings","AnalysticsSettings":"https://developer.roblox.com/en-us/api-reference/class/AnalysticsSettings","GlobalSettings":"https://developer.roblox.com/en-us/api-reference/class/GlobalSettings","UserSettings":"https://developer.roblox.com/en-us/api-reference/class/UserSettings","ServiceVisibilityService":"https://developer.roblox.com/en-us/api-reference/class/ServiceVisibilityService","SessionService":"https://developer.roblox.com/en-us/api-reference/class/SessionService","SharedTableRegistry":"https://developer.roblox.com/en-us/api-reference/class/SharedTableRegistry","ShorelineUpgraderService":"https://developer.roblox.com/en-us/api-reference/class/ShorelineUpgraderService","Sky":"https://developer.roblox.com/en-us/api-reference/class/Sky","Smoke":"https://developer.roblox.com/en-us/api-reference/class/Smoke","SmoothVoxelsUpgraderService":"https://developer.roblox.com/en-us/api-reference/class/SmoothVoxelsUpgraderService","SnippetService":"https://developer.roblox.com/en-us/api-reference/class/SnippetService","SocialService":"https://developer.roblox.com/en-us/api-reference/class/SocialService","Sound":"https://developer.roblox.com/en-us/api-reference/class/Sound","SoundEffect":"https://developer.roblox.com/en-us/api-reference/class/SoundEffect","ChorusSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/ChorusSoundEffect","CompressorSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/CompressorSoundEffect","CustomSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/CustomSoundEffect","AssetSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/AssetSoundEffect","ChannelSelectorSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/ChannelSelectorSoundEffect","DistortionSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/DistortionSoundEffect","EchoSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/EchoSoundEffect","EqualizerSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/EqualizerSoundEffect","FlangeSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/FlangeSoundEffect","PitchShiftSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/PitchShiftSoundEffect","ReverbSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/ReverbSoundEffect","TremoloSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/TremoloSoundEffect","SoundGroup":"https://developer.roblox.com/en-us/api-reference/class/SoundGroup","SoundService":"https://developer.roblox.com/en-us/api-reference/class/SoundService","Sparkles":"https://developer.roblox.com/en-us/api-reference/class/Sparkles","SpawnerService":"https://developer.roblox.com/en-us/api-reference/class/SpawnerService","StackFrame":"https://developer.roblox.com/en-us/api-reference/class/StackFrame","StandalonePluginScripts":"https://developer.roblox.com/en-us/api-reference/class/StandalonePluginScripts","StarterGear":"https://developer.roblox.com/en-us/api-reference/class/StarterGear","StarterPack":"https://developer.roblox.com/en-us/api-reference/class/StarterPack","StarterPlayer":"https://developer.roblox.com/en-us/api-reference/class/StarterPlayer","StarterPlayerScripts":"https://developer.roblox.com/en-us/api-reference/class/StarterPlayerScripts","StarterCharacterScripts":"https://developer.roblox.com/en-us/api-reference/class/StarterCharacterScripts","StartupMessageService":"https://developer.roblox.com/en-us/api-reference/class/StartupMessageService","Stats":"https://developer.roblox.com/en-us/api-reference/class/Stats","StatsItem":"https://developer.roblox.com/en-us/api-reference/class/StatsItem","RunningAverageItemDouble":"https://developer.roblox.com/en-us/api-reference/class/RunningAverageItemDouble","RunningAverageItemInt":"https://developer.roblox.com/en-us/api-reference/class/RunningAverageItemInt","RunningAverageTimeIntervalItem":"https://developer.roblox.com/en-us/api-reference/class/RunningAverageTimeIntervalItem","TotalCountTimeIntervalItem":"https://developer.roblox.com/en-us/api-reference/class/TotalCountTimeIntervalItem","StopWatchReporter":"https://developer.roblox.com/en-us/api-reference/class/StopWatchReporter","StreamingService":"https://developer.roblox.com/en-us/api-reference/class/StreamingService","Studio":"https://developer.roblox.com/en-us/api-reference/class/Studio","StudioAssetService":"https://developer.roblox.com/en-us/api-reference/class/StudioAssetService","StudioAttachment":"https://developer.roblox.com/en-us/api-reference/class/StudioAttachment","StudioCallout":"https://developer.roblox.com/en-us/api-reference/class/StudioCallout","StudioData":"https://developer.roblox.com/en-us/api-reference/class/StudioData","StudioDeviceEmulatorService":"https://developer.roblox.com/en-us/api-reference/class/StudioDeviceEmulatorService","StudioObjectBase":"https://developer.roblox.com/en-us/api-reference/class/StudioObjectBase","StudioWidget":"https://developer.roblox.com/en-us/api-reference/class/StudioWidget","StudioPublishService":"https://developer.roblox.com/en-us/api-reference/class/StudioPublishService","StudioScriptDebugEventListener":"https://developer.roblox.com/en-us/api-reference/class/StudioScriptDebugEventListener","StudioSdkService":"https://developer.roblox.com/en-us/api-reference/class/StudioSdkService","StudioService":"https://developer.roblox.com/en-us/api-reference/class/StudioService","StudioTheme":"https://developer.roblox.com/en-us/api-reference/class/StudioTheme","StudioWidgetsService":"https://developer.roblox.com/en-us/api-reference/class/StudioWidgetsService","StyleBase":"https://developer.roblox.com/en-us/api-reference/class/StyleBase","StyleRule":"https://developer.roblox.com/en-us/api-reference/class/StyleRule","StyleSheet":"https://developer.roblox.com/en-us/api-reference/class/StyleSheet","StyleDerive":"https://developer.roblox.com/en-us/api-reference/class/StyleDerive","StyleLink":"https://developer.roblox.com/en-us/api-reference/class/StyleLink","StylingService":"https://developer.roblox.com/en-us/api-reference/class/StylingService","SurfaceAppearance":"https://developer.roblox.com/en-us/api-reference/class/SurfaceAppearance","TaskScheduler":"https://developer.roblox.com/en-us/api-reference/class/TaskScheduler","Team":"https://developer.roblox.com/en-us/api-reference/class/Team","TeamCreateData":"https://developer.roblox.com/en-us/api-reference/class/TeamCreateData","TeamCreatePublishService":"https://developer.roblox.com/en-us/api-reference/class/TeamCreatePublishService","TeamCreateService":"https://developer.roblox.com/en-us/api-reference/class/TeamCreateService","Teams":"https://developer.roblox.com/en-us/api-reference/class/Teams","TeleportAsyncResult":"https://developer.roblox.com/en-us/api-reference/class/TeleportAsyncResult","TeleportOptions":"https://developer.roblox.com/en-us/api-reference/class/TeleportOptions","TeleportService":"https://developer.roblox.com/en-us/api-reference/class/TeleportService","TemporaryCageMeshProvider":"https://developer.roblox.com/en-us/api-reference/class/TemporaryCageMeshProvider","TemporaryScriptService":"https://developer.roblox.com/en-us/api-reference/class/TemporaryScriptService","TerrainDetail":"https://developer.roblox.com/en-us/api-reference/class/TerrainDetail","TerrainRegion":"https://developer.roblox.com/en-us/api-reference/class/TerrainRegion","TestService":"https://developer.roblox.com/en-us/api-reference/class/TestService","TextBoxService":"https://developer.roblox.com/en-us/api-reference/class/TextBoxService","TextChannel":"https://developer.roblox.com/en-us/api-reference/class/TextChannel","TextChatCommand":"https://developer.roblox.com/en-us/api-reference/class/TextChatCommand","TextChatConfigurations":"https://developer.roblox.com/en-us/api-reference/class/TextChatConfigurations","BubbleChatConfiguration":"https://developer.roblox.com/en-us/api-reference/class/BubbleChatConfiguration","ChatInputBarConfiguration":"https://developer.roblox.com/en-us/api-reference/class/ChatInputBarConfiguration","ChatWindowConfiguration":"https://developer.roblox.com/en-us/api-reference/class/ChatWindowConfiguration","TextChatMessage":"https://developer.roblox.com/en-us/api-reference/class/TextChatMessage","TextChatMessageProperties":"https://developer.roblox.com/en-us/api-reference/class/TextChatMessageProperties","TextChatService":"https://developer.roblox.com/en-us/api-reference/class/TextChatService","TextFilterResult":"https://developer.roblox.com/en-us/api-reference/class/TextFilterResult","TextFilterTranslatedResult":"https://developer.roblox.com/en-us/api-reference/class/TextFilterTranslatedResult","TextService":"https://developer.roblox.com/en-us/api-reference/class/TextService","TextSource":"https://developer.roblox.com/en-us/api-reference/class/TextSource","TextureGenerationPartGroup":"https://developer.roblox.com/en-us/api-reference/class/TextureGenerationPartGroup","TextureGenerationService":"https://developer.roblox.com/en-us/api-reference/class/TextureGenerationService","ThirdPartyUserService":"https://developer.roblox.com/en-us/api-reference/class/ThirdPartyUserService","ThreadState":"https://developer.roblox.com/en-us/api-reference/class/ThreadState","TimerService":"https://developer.roblox.com/en-us/api-reference/class/TimerService","ToastNotificationService":"https://developer.roblox.com/en-us/api-reference/class/ToastNotificationService","TouchInputService":"https://developer.roblox.com/en-us/api-reference/class/TouchInputService","TouchTransmitter":"https://developer.roblox.com/en-us/api-reference/class/TouchTransmitter","TracerService":"https://developer.roblox.com/en-us/api-reference/class/TracerService","TrackerLodController":"https://developer.roblox.com/en-us/api-reference/class/TrackerLodController","TrackerStreamAnimation":"https://developer.roblox.com/en-us/api-reference/class/TrackerStreamAnimation","Trail":"https://developer.roblox.com/en-us/api-reference/class/Trail","Translator":"https://developer.roblox.com/en-us/api-reference/class/Translator","TutorialService":"https://developer.roblox.com/en-us/api-reference/class/TutorialService","TweenBase":"https://developer.roblox.com/en-us/api-reference/class/TweenBase","Tween":"https://developer.roblox.com/en-us/api-reference/class/Tween","TweenService":"https://developer.roblox.com/en-us/api-reference/class/TweenService","UGCAvatarService":"https://developer.roblox.com/en-us/api-reference/class/UGCAvatarService","UGCValidationService":"https://developer.roblox.com/en-us/api-reference/class/UGCValidationService","UIBase":"https://developer.roblox.com/en-us/api-reference/class/UIBase","UIComponent":"https://developer.roblox.com/en-us/api-reference/class/UIComponent","UIConstraint":"https://developer.roblox.com/en-us/api-reference/class/UIConstraint","UIAspectRatioConstraint":"https://developer.roblox.com/en-us/api-reference/class/UIAspectRatioConstraint","UISizeConstraint":"https://developer.roblox.com/en-us/api-reference/class/UISizeConstraint","UITextSizeConstraint":"https://developer.roblox.com/en-us/api-reference/class/UITextSizeConstraint","UICorner":"https://developer.roblox.com/en-us/api-reference/class/UICorner","UIFlexItem":"https://developer.roblox.com/en-us/api-reference/class/UIFlexItem","UIGradient":"https://developer.roblox.com/en-us/api-reference/class/UIGradient","UILayout":"https://developer.roblox.com/en-us/api-reference/class/UILayout","UIGridStyleLayout":"https://developer.roblox.com/en-us/api-reference/class/UIGridStyleLayout","UIGridLayout":"https://developer.roblox.com/en-us/api-reference/class/UIGridLayout","UIListLayout":"https://developer.roblox.com/en-us/api-reference/class/UIListLayout","UIPageLayout":"https://developer.roblox.com/en-us/api-reference/class/UIPageLayout","UITableLayout":"https://developer.roblox.com/en-us/api-reference/class/UITableLayout","UIPadding":"https://developer.roblox.com/en-us/api-reference/class/UIPadding","UIScale":"https://developer.roblox.com/en-us/api-reference/class/UIScale","UIStroke":"https://developer.roblox.com/en-us/api-reference/class/UIStroke","UnvalidatedAssetService":"https://developer.roblox.com/en-us/api-reference/class/UnvalidatedAssetService","UserGameSettings":"https://developer.roblox.com/en-us/api-reference/class/UserGameSettings","UserInputService":"https://developer.roblox.com/en-us/api-reference/class/UserInputService","UserNotification":"https://developer.roblox.com/en-us/api-reference/class/UserNotification","UserNotificationPayload":"https://developer.roblox.com/en-us/api-reference/class/UserNotificationPayload","UserNotificationPayloadAnalyticsData":"https://developer.roblox.com/en-us/api-reference/class/UserNotificationPayloadAnalyticsData","UserNotificationPayloadJoinExperience":"https://developer.roblox.com/en-us/api-reference/class/UserNotificationPayloadJoinExperience","UserNotificationPayloadParameterValue":"https://developer.roblox.com/en-us/api-reference/class/UserNotificationPayloadParameterValue","UserService":"https://developer.roblox.com/en-us/api-reference/class/UserService","VRService":"https://developer.roblox.com/en-us/api-reference/class/VRService","VRStatusService":"https://developer.roblox.com/en-us/api-reference/class/VRStatusService","ValueBase":"https://developer.roblox.com/en-us/api-reference/class/ValueBase","BinaryStringValue":"https://developer.roblox.com/en-us/api-reference/class/BinaryStringValue","BoolValue":"https://developer.roblox.com/en-us/api-reference/class/BoolValue","BrickColorValue":"https://developer.roblox.com/en-us/api-reference/class/BrickColorValue","CFrameValue":"https://developer.roblox.com/en-us/api-reference/class/CFrameValue","Color3Value":"https://developer.roblox.com/en-us/api-reference/class/Color3Value","DoubleConstrainedValue":"https://developer.roblox.com/en-us/api-reference/class/DoubleConstrainedValue","IntConstrainedValue":"https://developer.roblox.com/en-us/api-reference/class/IntConstrainedValue","IntValue":"https://developer.roblox.com/en-us/api-reference/class/IntValue","NumberValue":"https://developer.roblox.com/en-us/api-reference/class/NumberValue","ObjectValue":"https://developer.roblox.com/en-us/api-reference/class/ObjectValue","RayValue":"https://developer.roblox.com/en-us/api-reference/class/RayValue","StringValue":"https://developer.roblox.com/en-us/api-reference/class/StringValue","Vector3Value":"https://developer.roblox.com/en-us/api-reference/class/Vector3Value","Vector3Curve":"https://developer.roblox.com/en-us/api-reference/class/Vector3Curve","VersionControlService":"https://developer.roblox.com/en-us/api-reference/class/VersionControlService","VideoCaptureService":"https://developer.roblox.com/en-us/api-reference/class/VideoCaptureService","VideoService":"https://developer.roblox.com/en-us/api-reference/class/VideoService","VirtualInputManager":"https://developer.roblox.com/en-us/api-reference/class/VirtualInputManager","VirtualUser":"https://developer.roblox.com/en-us/api-reference/class/VirtualUser","VisibilityCheckDispatcher":"https://developer.roblox.com/en-us/api-reference/class/VisibilityCheckDispatcher","Visit":"https://developer.roblox.com/en-us/api-reference/class/Visit","VoiceChatInternal":"https://developer.roblox.com/en-us/api-reference/class/VoiceChatInternal","VoiceChatService":"https://developer.roblox.com/en-us/api-reference/class/VoiceChatService","WeldConstraint":"https://developer.roblox.com/en-us/api-reference/class/WeldConstraint","Wire":"https://developer.roblox.com/en-us/api-reference/class/Wire","AccessModifierType":"https://developer.roblox.com/en-us/api-reference/enum/AccessModifierType","AccessoryType":"https://developer.roblox.com/en-us/api-reference/enum/AccessoryType","ActionType":"https://developer.roblox.com/en-us/api-reference/enum/ActionType","ActuatorRelativeTo":"https://developer.roblox.com/en-us/api-reference/enum/ActuatorRelativeTo","ActuatorType":"https://developer.roblox.com/en-us/api-reference/enum/ActuatorType","AdEventType":"https://developer.roblox.com/en-us/api-reference/enum/AdEventType","AdShape":"https://developer.roblox.com/en-us/api-reference/enum/AdShape","AdTeleportMethod":"https://developer.roblox.com/en-us/api-reference/enum/AdTeleportMethod","AdUnitStatus":"https://developer.roblox.com/en-us/api-reference/enum/AdUnitStatus","AdornCullingMode":"https://developer.roblox.com/en-us/api-reference/enum/AdornCullingMode","AlignType":"https://developer.roblox.com/en-us/api-reference/enum/AlignType","AlphaMode":"https://developer.roblox.com/en-us/api-reference/enum/AlphaMode","AnalyticsEconomyAction":"https://developer.roblox.com/en-us/api-reference/enum/AnalyticsEconomyAction","AnalyticsLogLevel":"https://developer.roblox.com/en-us/api-reference/enum/AnalyticsLogLevel","AnalyticsProgressionStatus":"https://developer.roblox.com/en-us/api-reference/enum/AnalyticsProgressionStatus","AnimationClipFromVideoStatus":"https://developer.roblox.com/en-us/api-reference/enum/AnimationClipFromVideoStatus","AnimationPriority":"https://developer.roblox.com/en-us/api-reference/enum/AnimationPriority","AnimatorRetargetingMode":"https://developer.roblox.com/en-us/api-reference/enum/AnimatorRetargetingMode","AppShellActionType":"https://developer.roblox.com/en-us/api-reference/enum/AppShellActionType","AppShellFeature":"https://developer.roblox.com/en-us/api-reference/enum/AppShellFeature","AppUpdateStatus":"https://developer.roblox.com/en-us/api-reference/enum/AppUpdateStatus","ApplyStrokeMode":"https://developer.roblox.com/en-us/api-reference/enum/ApplyStrokeMode","AspectType":"https://developer.roblox.com/en-us/api-reference/enum/AspectType","AssetCreatorType":"https://developer.roblox.com/en-us/api-reference/enum/AssetCreatorType","AssetFetchStatus":"https://developer.roblox.com/en-us/api-reference/enum/AssetFetchStatus","AssetType":"https://developer.roblox.com/en-us/api-reference/enum/AssetType","AssetTypeVerification":"https://developer.roblox.com/en-us/api-reference/enum/AssetTypeVerification","AudioApiRollout":"https://developer.roblox.com/en-us/api-reference/enum/AudioApiRollout","AudioSubType":"https://developer.roblox.com/en-us/api-reference/enum/AudioSubType","AudioWindowSize":"https://developer.roblox.com/en-us/api-reference/enum/AudioWindowSize","AutoIndentRule":"https://developer.roblox.com/en-us/api-reference/enum/AutoIndentRule","AutomaticSize":"https://developer.roblox.com/en-us/api-reference/enum/AutomaticSize","AvatarAssetType":"https://developer.roblox.com/en-us/api-reference/enum/AvatarAssetType","AvatarChatServiceFeature":"https://developer.roblox.com/en-us/api-reference/enum/AvatarChatServiceFeature","AvatarContextMenuOption":"https://developer.roblox.com/en-us/api-reference/enum/AvatarContextMenuOption","AvatarItemType":"https://developer.roblox.com/en-us/api-reference/enum/AvatarItemType","AvatarJointUpgrade":"https://developer.roblox.com/en-us/api-reference/enum/AvatarJointUpgrade","AvatarPromptResult":"https://developer.roblox.com/en-us/api-reference/enum/AvatarPromptResult","AvatarThumbnailCustomizationType":"https://developer.roblox.com/en-us/api-reference/enum/AvatarThumbnailCustomizationType","AvatarUnificationMode":"https://developer.roblox.com/en-us/api-reference/enum/AvatarUnificationMode","Axis":"https://developer.roblox.com/en-us/api-reference/enum/Axis","BinType":"https://developer.roblox.com/en-us/api-reference/enum/BinType","BodyPart":"https://developer.roblox.com/en-us/api-reference/enum/BodyPart","BodyPartR15":"https://developer.roblox.com/en-us/api-reference/enum/BodyPartR15","BorderMode":"https://developer.roblox.com/en-us/api-reference/enum/BorderMode","BreakReason":"https://developer.roblox.com/en-us/api-reference/enum/BreakReason","BreakpointRemoveReason":"https://developer.roblox.com/en-us/api-reference/enum/BreakpointRemoveReason","BulkMoveMode":"https://developer.roblox.com/en-us/api-reference/enum/BulkMoveMode","BundleType":"https://developer.roblox.com/en-us/api-reference/enum/BundleType","Button":"https://developer.roblox.com/en-us/api-reference/enum/Button","ButtonStyle":"https://developer.roblox.com/en-us/api-reference/enum/ButtonStyle","CageType":"https://developer.roblox.com/en-us/api-reference/enum/CageType","CameraMode":"https://developer.roblox.com/en-us/api-reference/enum/CameraMode","CameraPanMode":"https://developer.roblox.com/en-us/api-reference/enum/CameraPanMode","CameraSpeedAdjustBinding":"https://developer.roblox.com/en-us/api-reference/enum/CameraSpeedAdjustBinding","CameraType":"https://developer.roblox.com/en-us/api-reference/enum/CameraType","CatalogCategoryFilter":"https://developer.roblox.com/en-us/api-reference/enum/CatalogCategoryFilter","CatalogSortAggregation":"https://developer.roblox.com/en-us/api-reference/enum/CatalogSortAggregation","CatalogSortType":"https://developer.roblox.com/en-us/api-reference/enum/CatalogSortType","CellBlock":"https://developer.roblox.com/en-us/api-reference/enum/CellBlock","CellMaterial":"https://developer.roblox.com/en-us/api-reference/enum/CellMaterial","CellOrientation":"https://developer.roblox.com/en-us/api-reference/enum/CellOrientation","CenterDialogType":"https://developer.roblox.com/en-us/api-reference/enum/CenterDialogType","CharacterControlMode":"https://developer.roblox.com/en-us/api-reference/enum/CharacterControlMode","ChatCallbackType":"https://developer.roblox.com/en-us/api-reference/enum/ChatCallbackType","ChatColor":"https://developer.roblox.com/en-us/api-reference/enum/ChatColor","ChatMode":"https://developer.roblox.com/en-us/api-reference/enum/ChatMode","ChatPrivacyMode":"https://developer.roblox.com/en-us/api-reference/enum/ChatPrivacyMode","ChatStyle":"https://developer.roblox.com/en-us/api-reference/enum/ChatStyle","ChatVersion":"https://developer.roblox.com/en-us/api-reference/enum/ChatVersion","ClientAnimatorThrottlingMode":"https://developer.roblox.com/en-us/api-reference/enum/ClientAnimatorThrottlingMode","CollaboratorStatus":"https://developer.roblox.com/en-us/api-reference/enum/CollaboratorStatus","CollisionFidelity":"https://developer.roblox.com/en-us/api-reference/enum/CollisionFidelity","CommandPermission":"https://developer.roblox.com/en-us/api-reference/enum/CommandPermission","CompileTarget":"https://developer.roblox.com/en-us/api-reference/enum/CompileTarget","CompletionItemKind":"https://developer.roblox.com/en-us/api-reference/enum/CompletionItemKind","CompletionItemTag":"https://developer.roblox.com/en-us/api-reference/enum/CompletionItemTag","CompletionTriggerKind":"https://developer.roblox.com/en-us/api-reference/enum/CompletionTriggerKind","ComputerCameraMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/ComputerCameraMovementMode","ComputerMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/ComputerMovementMode","ConnectionError":"https://developer.roblox.com/en-us/api-reference/enum/ConnectionError","ConnectionState":"https://developer.roblox.com/en-us/api-reference/enum/ConnectionState","ContextActionPriority":"https://developer.roblox.com/en-us/api-reference/enum/ContextActionPriority","ContextActionResult":"https://developer.roblox.com/en-us/api-reference/enum/ContextActionResult","ControlMode":"https://developer.roblox.com/en-us/api-reference/enum/ControlMode","CoreGuiType":"https://developer.roblox.com/en-us/api-reference/enum/CoreGuiType","CreateOutfitFailure":"https://developer.roblox.com/en-us/api-reference/enum/CreateOutfitFailure","CreatorType":"https://developer.roblox.com/en-us/api-reference/enum/CreatorType","CreatorTypeFilter":"https://developer.roblox.com/en-us/api-reference/enum/CreatorTypeFilter","CurrencyType":"https://developer.roblox.com/en-us/api-reference/enum/CurrencyType","CustomCameraMode":"https://developer.roblox.com/en-us/api-reference/enum/CustomCameraMode","DataStoreRequestType":"https://developer.roblox.com/en-us/api-reference/enum/DataStoreRequestType","DeathStyle":"https://developer.roblox.com/en-us/api-reference/enum/DeathStyle","DebuggerEndReason":"https://developer.roblox.com/en-us/api-reference/enum/DebuggerEndReason","DebuggerExceptionBreakMode":"https://developer.roblox.com/en-us/api-reference/enum/DebuggerExceptionBreakMode","DebuggerFrameType":"https://developer.roblox.com/en-us/api-reference/enum/DebuggerFrameType","DebuggerPauseReason":"https://developer.roblox.com/en-us/api-reference/enum/DebuggerPauseReason","DebuggerStatus":"https://developer.roblox.com/en-us/api-reference/enum/DebuggerStatus","DevCameraOcclusionMode":"https://developer.roblox.com/en-us/api-reference/enum/DevCameraOcclusionMode","DevComputerCameraMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/DevComputerCameraMovementMode","DevComputerMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/DevComputerMovementMode","DevTouchCameraMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/DevTouchCameraMovementMode","DevTouchMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/DevTouchMovementMode","DeveloperMemoryTag":"https://developer.roblox.com/en-us/api-reference/enum/DeveloperMemoryTag","DeviceType":"https://developer.roblox.com/en-us/api-reference/enum/DeviceType","DialogBehaviorType":"https://developer.roblox.com/en-us/api-reference/enum/DialogBehaviorType","DialogPurpose":"https://developer.roblox.com/en-us/api-reference/enum/DialogPurpose","DialogTone":"https://developer.roblox.com/en-us/api-reference/enum/DialogTone","DominantAxis":"https://developer.roblox.com/en-us/api-reference/enum/DominantAxis","DraftStatusCode":"https://developer.roblox.com/en-us/api-reference/enum/DraftStatusCode","DragDetectorDragStyle":"https://developer.roblox.com/en-us/api-reference/enum/DragDetectorDragStyle","DragDetectorPermissionPolicy":"https://developer.roblox.com/en-us/api-reference/enum/DragDetectorPermissionPolicy","DragDetectorResponseStyle":"https://developer.roblox.com/en-us/api-reference/enum/DragDetectorResponseStyle","DraggerCoordinateSpace":"https://developer.roblox.com/en-us/api-reference/enum/DraggerCoordinateSpace","DraggerMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/DraggerMovementMode","EasingDirection":"https://developer.roblox.com/en-us/api-reference/enum/EasingDirection","EasingStyle":"https://developer.roblox.com/en-us/api-reference/enum/EasingStyle","EditorLiveScripting":"https://developer.roblox.com/en-us/api-reference/enum/EditorLiveScripting","ElasticBehavior":"https://developer.roblox.com/en-us/api-reference/enum/ElasticBehavior","EnviromentalPhysicsThrottle":"https://developer.roblox.com/en-us/api-reference/enum/EnviromentalPhysicsThrottle","ExperienceAuthScope":"https://developer.roblox.com/en-us/api-reference/enum/ExperienceAuthScope","ExplosionType":"https://developer.roblox.com/en-us/api-reference/enum/ExplosionType","FACSDataLod":"https://developer.roblox.com/en-us/api-reference/enum/FACSDataLod","FacialAnimationStreamingState":"https://developer.roblox.com/en-us/api-reference/enum/FacialAnimationStreamingState","FieldOfViewMode":"https://developer.roblox.com/en-us/api-reference/enum/FieldOfViewMode","FillDirection":"https://developer.roblox.com/en-us/api-reference/enum/FillDirection","FilterResult":"https://developer.roblox.com/en-us/api-reference/enum/FilterResult","FinishRecordingOperation":"https://developer.roblox.com/en-us/api-reference/enum/FinishRecordingOperation","FluidFidelity":"https://developer.roblox.com/en-us/api-reference/enum/FluidFidelity","FluidForces":"https://developer.roblox.com/en-us/api-reference/enum/FluidForces","Font":"https://developer.roblox.com/en-us/api-reference/enum/Font","FontSize":"https://developer.roblox.com/en-us/api-reference/enum/FontSize","FontStyle":"https://developer.roblox.com/en-us/api-reference/enum/FontStyle","FontWeight":"https://developer.roblox.com/en-us/api-reference/enum/FontWeight","ForceLimitMode":"https://developer.roblox.com/en-us/api-reference/enum/ForceLimitMode","FormFactor":"https://developer.roblox.com/en-us/api-reference/enum/FormFactor","FrameStyle":"https://developer.roblox.com/en-us/api-reference/enum/FrameStyle","FramerateManagerMode":"https://developer.roblox.com/en-us/api-reference/enum/FramerateManagerMode","FriendRequestEvent":"https://developer.roblox.com/en-us/api-reference/enum/FriendRequestEvent","FriendStatus":"https://developer.roblox.com/en-us/api-reference/enum/FriendStatus","FunctionalTestResult":"https://developer.roblox.com/en-us/api-reference/enum/FunctionalTestResult","GameAvatarType":"https://developer.roblox.com/en-us/api-reference/enum/GameAvatarType","GearGenreSetting":"https://developer.roblox.com/en-us/api-reference/enum/GearGenreSetting","GearType":"https://developer.roblox.com/en-us/api-reference/enum/GearType","Genre":"https://developer.roblox.com/en-us/api-reference/enum/Genre","GraphicsMode":"https://developer.roblox.com/en-us/api-reference/enum/GraphicsMode","GuiState":"https://developer.roblox.com/en-us/api-reference/enum/GuiState","GuiType":"https://developer.roblox.com/en-us/api-reference/enum/GuiType","HandlesStyle":"https://developer.roblox.com/en-us/api-reference/enum/HandlesStyle","HighlightDepthMode":"https://developer.roblox.com/en-us/api-reference/enum/HighlightDepthMode","HorizontalAlignment":"https://developer.roblox.com/en-us/api-reference/enum/HorizontalAlignment","HoverAnimateSpeed":"https://developer.roblox.com/en-us/api-reference/enum/HoverAnimateSpeed","HttpCachePolicy":"https://developer.roblox.com/en-us/api-reference/enum/HttpCachePolicy","HttpCompression":"https://developer.roblox.com/en-us/api-reference/enum/HttpCompression","HttpContentType":"https://developer.roblox.com/en-us/api-reference/enum/HttpContentType","HttpError":"https://developer.roblox.com/en-us/api-reference/enum/HttpError","HttpRequestType":"https://developer.roblox.com/en-us/api-reference/enum/HttpRequestType","HumanoidCollisionType":"https://developer.roblox.com/en-us/api-reference/enum/HumanoidCollisionType","HumanoidDisplayDistanceType":"https://developer.roblox.com/en-us/api-reference/enum/HumanoidDisplayDistanceType","HumanoidHealthDisplayType":"https://developer.roblox.com/en-us/api-reference/enum/HumanoidHealthDisplayType","HumanoidRigType":"https://developer.roblox.com/en-us/api-reference/enum/HumanoidRigType","HumanoidStateType":"https://developer.roblox.com/en-us/api-reference/enum/HumanoidStateType","IKCollisionsMode":"https://developer.roblox.com/en-us/api-reference/enum/IKCollisionsMode","IKControlConstraintSupport":"https://developer.roblox.com/en-us/api-reference/enum/IKControlConstraintSupport","IKControlType":"https://developer.roblox.com/en-us/api-reference/enum/IKControlType","IXPLoadingStatus":"https://developer.roblox.com/en-us/api-reference/enum/IXPLoadingStatus","ImageCombineType":"https://developer.roblox.com/en-us/api-reference/enum/ImageCombineType","InOut":"https://developer.roblox.com/en-us/api-reference/enum/InOut","InfoType":"https://developer.roblox.com/en-us/api-reference/enum/InfoType","InitialDockState":"https://developer.roblox.com/en-us/api-reference/enum/InitialDockState","InputType":"https://developer.roblox.com/en-us/api-reference/enum/InputType","InterpolationThrottlingMode":"https://developer.roblox.com/en-us/api-reference/enum/InterpolationThrottlingMode","InviteState":"https://developer.roblox.com/en-us/api-reference/enum/InviteState","ItemLineAlignment":"https://developer.roblox.com/en-us/api-reference/enum/ItemLineAlignment","JointCreationMode":"https://developer.roblox.com/en-us/api-reference/enum/JointCreationMode","KeyCode":"https://developer.roblox.com/en-us/api-reference/enum/KeyCode","KeyInterpolationMode":"https://developer.roblox.com/en-us/api-reference/enum/KeyInterpolationMode","KeywordFilterType":"https://developer.roblox.com/en-us/api-reference/enum/KeywordFilterType","Language":"https://developer.roblox.com/en-us/api-reference/enum/Language","LeftRight":"https://developer.roblox.com/en-us/api-reference/enum/LeftRight","Limb":"https://developer.roblox.com/en-us/api-reference/enum/Limb","LineJoinMode":"https://developer.roblox.com/en-us/api-reference/enum/LineJoinMode","ListDisplayMode":"https://developer.roblox.com/en-us/api-reference/enum/ListDisplayMode","ListenerType":"https://developer.roblox.com/en-us/api-reference/enum/ListenerType","LiveEditingAtomicUpdateResponse":"https://developer.roblox.com/en-us/api-reference/enum/LiveEditingAtomicUpdateResponse","LiveEditingBroadcastMessageType":"https://developer.roblox.com/en-us/api-reference/enum/LiveEditingBroadcastMessageType","LoadCharacterLayeredClothing":"https://developer.roblox.com/en-us/api-reference/enum/LoadCharacterLayeredClothing","LoadDynamicHeads":"https://developer.roblox.com/en-us/api-reference/enum/LoadDynamicHeads","MarkupKind":"https://developer.roblox.com/en-us/api-reference/enum/MarkupKind","Material":"https://developer.roblox.com/en-us/api-reference/enum/Material","MaterialPattern":"https://developer.roblox.com/en-us/api-reference/enum/MaterialPattern","MembershipType":"https://developer.roblox.com/en-us/api-reference/enum/MembershipType","MeshPartDetailLevel":"https://developer.roblox.com/en-us/api-reference/enum/MeshPartDetailLevel","MeshPartHeadsAndAccessories":"https://developer.roblox.com/en-us/api-reference/enum/MeshPartHeadsAndAccessories","MeshScaleUnit":"https://developer.roblox.com/en-us/api-reference/enum/MeshScaleUnit","MeshType":"https://developer.roblox.com/en-us/api-reference/enum/MeshType","MessageType":"https://developer.roblox.com/en-us/api-reference/enum/MessageType","ModelLevelOfDetail":"https://developer.roblox.com/en-us/api-reference/enum/ModelLevelOfDetail","ModelStreamingBehavior":"https://developer.roblox.com/en-us/api-reference/enum/ModelStreamingBehavior","ModelStreamingMode":"https://developer.roblox.com/en-us/api-reference/enum/ModelStreamingMode","ModerationStatus":"https://developer.roblox.com/en-us/api-reference/enum/ModerationStatus","ModifierKey":"https://developer.roblox.com/en-us/api-reference/enum/ModifierKey","MouseBehavior":"https://developer.roblox.com/en-us/api-reference/enum/MouseBehavior","MoveState":"https://developer.roblox.com/en-us/api-reference/enum/MoveState","MuteState":"https://developer.roblox.com/en-us/api-reference/enum/MuteState","NameOcclusion":"https://developer.roblox.com/en-us/api-reference/enum/NameOcclusion","NetworkOwnership":"https://developer.roblox.com/en-us/api-reference/enum/NetworkOwnership","NetworkStatus":"https://developer.roblox.com/en-us/api-reference/enum/NetworkStatus","NoiseType":"https://developer.roblox.com/en-us/api-reference/enum/NoiseType","NormalId":"https://developer.roblox.com/en-us/api-reference/enum/NormalId","OperationType":"https://developer.roblox.com/en-us/api-reference/enum/OperationType","OrientationAlignmentMode":"https://developer.roblox.com/en-us/api-reference/enum/OrientationAlignmentMode","OutfitSource":"https://developer.roblox.com/en-us/api-reference/enum/OutfitSource","OutfitType":"https://developer.roblox.com/en-us/api-reference/enum/OutfitType","OutputLayoutMode":"https://developer.roblox.com/en-us/api-reference/enum/OutputLayoutMode","OverrideMouseIconBehavior":"https://developer.roblox.com/en-us/api-reference/enum/OverrideMouseIconBehavior","PackagePermission":"https://developer.roblox.com/en-us/api-reference/enum/PackagePermission","PartType":"https://developer.roblox.com/en-us/api-reference/enum/PartType","ParticleEmitterShape":"https://developer.roblox.com/en-us/api-reference/enum/ParticleEmitterShape","ParticleEmitterShapeInOut":"https://developer.roblox.com/en-us/api-reference/enum/ParticleEmitterShapeInOut","ParticleEmitterShapeStyle":"https://developer.roblox.com/en-us/api-reference/enum/ParticleEmitterShapeStyle","ParticleFlipbookLayout":"https://developer.roblox.com/en-us/api-reference/enum/ParticleFlipbookLayout","ParticleFlipbookMode":"https://developer.roblox.com/en-us/api-reference/enum/ParticleFlipbookMode","ParticleFlipbookTextureCompatible":"https://developer.roblox.com/en-us/api-reference/enum/ParticleFlipbookTextureCompatible","ParticleOrientation":"https://developer.roblox.com/en-us/api-reference/enum/ParticleOrientation","PathStatus":"https://developer.roblox.com/en-us/api-reference/enum/PathStatus","PathWaypointAction":"https://developer.roblox.com/en-us/api-reference/enum/PathWaypointAction","PermissionLevelShown":"https://developer.roblox.com/en-us/api-reference/enum/PermissionLevelShown","PhysicsSimulationRate":"https://developer.roblox.com/en-us/api-reference/enum/PhysicsSimulationRate","PhysicsSteppingMethod":"https://developer.roblox.com/en-us/api-reference/enum/PhysicsSteppingMethod","PlaybackState":"https://developer.roblox.com/en-us/api-reference/enum/PlaybackState","PlayerActions":"https://developer.roblox.com/en-us/api-reference/enum/PlayerActions","PlayerCharacterDestroyBehavior":"https://developer.roblox.com/en-us/api-reference/enum/PlayerCharacterDestroyBehavior","PlayerChatType":"https://developer.roblox.com/en-us/api-reference/enum/PlayerChatType","PoseEasingDirection":"https://developer.roblox.com/en-us/api-reference/enum/PoseEasingDirection","PoseEasingStyle":"https://developer.roblox.com/en-us/api-reference/enum/PoseEasingStyle","PositionAlignmentMode":"https://developer.roblox.com/en-us/api-reference/enum/PositionAlignmentMode","PrimalPhysicsSolver":"https://developer.roblox.com/en-us/api-reference/enum/PrimalPhysicsSolver","PrimitiveType":"https://developer.roblox.com/en-us/api-reference/enum/PrimitiveType","PrivilegeType":"https://developer.roblox.com/en-us/api-reference/enum/PrivilegeType","ProductLocationRestriction":"https://developer.roblox.com/en-us/api-reference/enum/ProductLocationRestriction","ProductPurchaseDecision":"https://developer.roblox.com/en-us/api-reference/enum/ProductPurchaseDecision","PromptCreateAssetResult":"https://developer.roblox.com/en-us/api-reference/enum/PromptCreateAssetResult","PromptCreateAvatarResult":"https://developer.roblox.com/en-us/api-reference/enum/PromptCreateAvatarResult","PromptPublishAssetResult":"https://developer.roblox.com/en-us/api-reference/enum/PromptPublishAssetResult","PropertyStatus":"https://developer.roblox.com/en-us/api-reference/enum/PropertyStatus","ProximityPromptExclusivity":"https://developer.roblox.com/en-us/api-reference/enum/ProximityPromptExclusivity","ProximityPromptInputType":"https://developer.roblox.com/en-us/api-reference/enum/ProximityPromptInputType","ProximityPromptStyle":"https://developer.roblox.com/en-us/api-reference/enum/ProximityPromptStyle","QualityLevel":"https://developer.roblox.com/en-us/api-reference/enum/QualityLevel","R15CollisionType":"https://developer.roblox.com/en-us/api-reference/enum/R15CollisionType","RaycastFilterType":"https://developer.roblox.com/en-us/api-reference/enum/RaycastFilterType","RejectCharacterDeletions":"https://developer.roblox.com/en-us/api-reference/enum/RejectCharacterDeletions","RenderFidelity":"https://developer.roblox.com/en-us/api-reference/enum/RenderFidelity","RenderPriority":"https://developer.roblox.com/en-us/api-reference/enum/RenderPriority","RenderingTestComparisonMethod":"https://developer.roblox.com/en-us/api-reference/enum/RenderingTestComparisonMethod","ReplicateInstanceDestroySetting":"https://developer.roblox.com/en-us/api-reference/enum/ReplicateInstanceDestroySetting","ResamplerMode":"https://developer.roblox.com/en-us/api-reference/enum/ResamplerMode","ReservedHighlightId":"https://developer.roblox.com/en-us/api-reference/enum/ReservedHighlightId","RestPose":"https://developer.roblox.com/en-us/api-reference/enum/RestPose","ReturnKeyType":"https://developer.roblox.com/en-us/api-reference/enum/ReturnKeyType","ReverbType":"https://developer.roblox.com/en-us/api-reference/enum/ReverbType","RibbonTool":"https://developer.roblox.com/en-us/api-reference/enum/RibbonTool","RigScale":"https://developer.roblox.com/en-us/api-reference/enum/RigScale","RigType":"https://developer.roblox.com/en-us/api-reference/enum/RigType","RollOffMode":"https://developer.roblox.com/en-us/api-reference/enum/RollOffMode","RotationOrder":"https://developer.roblox.com/en-us/api-reference/enum/RotationOrder","RotationType":"https://developer.roblox.com/en-us/api-reference/enum/RotationType","RtlTextSupport":"https://developer.roblox.com/en-us/api-reference/enum/RtlTextSupport","RunContext":"https://developer.roblox.com/en-us/api-reference/enum/RunContext","RuntimeUndoBehavior":"https://developer.roblox.com/en-us/api-reference/enum/RuntimeUndoBehavior","SafeAreaCompatibility":"https://developer.roblox.com/en-us/api-reference/enum/SafeAreaCompatibility","SalesTypeFilter":"https://developer.roblox.com/en-us/api-reference/enum/SalesTypeFilter","SaveAvatarThumbnailCustomizationFailure":"https://developer.roblox.com/en-us/api-reference/enum/SaveAvatarThumbnailCustomizationFailure","SaveFilter":"https://developer.roblox.com/en-us/api-reference/enum/SaveFilter","SavedQualitySetting":"https://developer.roblox.com/en-us/api-reference/enum/SavedQualitySetting","ScaleType":"https://developer.roblox.com/en-us/api-reference/enum/ScaleType","ScopeCheckResult":"https://developer.roblox.com/en-us/api-reference/enum/ScopeCheckResult","ScreenInsets":"https://developer.roblox.com/en-us/api-reference/enum/ScreenInsets","ScreenOrientation":"https://developer.roblox.com/en-us/api-reference/enum/ScreenOrientation","ScrollBarInset":"https://developer.roblox.com/en-us/api-reference/enum/ScrollBarInset","ScrollingDirection":"https://developer.roblox.com/en-us/api-reference/enum/ScrollingDirection","SelectionBehavior":"https://developer.roblox.com/en-us/api-reference/enum/SelectionBehavior","SelectionRenderMode":"https://developer.roblox.com/en-us/api-reference/enum/SelectionRenderMode","SelfViewPosition":"https://developer.roblox.com/en-us/api-reference/enum/SelfViewPosition","SensorMode":"https://developer.roblox.com/en-us/api-reference/enum/SensorMode","SensorUpdateType":"https://developer.roblox.com/en-us/api-reference/enum/SensorUpdateType","ServerAudioBehavior":"https://developer.roblox.com/en-us/api-reference/enum/ServerAudioBehavior","ServerLiveEditingMode":"https://developer.roblox.com/en-us/api-reference/enum/ServerLiveEditingMode","ServiceVisibility":"https://developer.roblox.com/en-us/api-reference/enum/ServiceVisibility","Severity":"https://developer.roblox.com/en-us/api-reference/enum/Severity","SignalBehavior":"https://developer.roblox.com/en-us/api-reference/enum/SignalBehavior","SizeConstraint":"https://developer.roblox.com/en-us/api-reference/enum/SizeConstraint","SolverConvergenceMetricType":"https://developer.roblox.com/en-us/api-reference/enum/SolverConvergenceMetricType","SolverConvergenceVisualizationMode":"https://developer.roblox.com/en-us/api-reference/enum/SolverConvergenceVisualizationMode","SortDirection":"https://developer.roblox.com/en-us/api-reference/enum/SortDirection","SortOrder":"https://developer.roblox.com/en-us/api-reference/enum/SortOrder","SpecialKey":"https://developer.roblox.com/en-us/api-reference/enum/SpecialKey","StartCorner":"https://developer.roblox.com/en-us/api-reference/enum/StartCorner","StreamOutBehavior":"https://developer.roblox.com/en-us/api-reference/enum/StreamOutBehavior","StreamingIntegrityMode":"https://developer.roblox.com/en-us/api-reference/enum/StreamingIntegrityMode","StreamingPauseMode":"https://developer.roblox.com/en-us/api-reference/enum/StreamingPauseMode","StudioCloseMode":"https://developer.roblox.com/en-us/api-reference/enum/StudioCloseMode","StudioDataModelType":"https://developer.roblox.com/en-us/api-reference/enum/StudioDataModelType","StudioPlaceUpdateFailureReason":"https://developer.roblox.com/en-us/api-reference/enum/StudioPlaceUpdateFailureReason","StudioScriptEditorColorCategories":"https://developer.roblox.com/en-us/api-reference/enum/StudioScriptEditorColorCategories","StudioScriptEditorColorPresets":"https://developer.roblox.com/en-us/api-reference/enum/StudioScriptEditorColorPresets","StudioStyleGuideColor":"https://developer.roblox.com/en-us/api-reference/enum/StudioStyleGuideColor","StudioStyleGuideModifier":"https://developer.roblox.com/en-us/api-reference/enum/StudioStyleGuideModifier","Style":"https://developer.roblox.com/en-us/api-reference/enum/Style","SubscriptionExpirationReason":"https://developer.roblox.com/en-us/api-reference/enum/SubscriptionExpirationReason","SubscriptionPaymentStatus":"https://developer.roblox.com/en-us/api-reference/enum/SubscriptionPaymentStatus","SubscriptionPeriod":"https://developer.roblox.com/en-us/api-reference/enum/SubscriptionPeriod","SubscriptionState":"https://developer.roblox.com/en-us/api-reference/enum/SubscriptionState","SurfaceConstraint":"https://developer.roblox.com/en-us/api-reference/enum/SurfaceConstraint","SurfaceGuiShape":"https://developer.roblox.com/en-us/api-reference/enum/SurfaceGuiShape","SurfaceGuiSizingMode":"https://developer.roblox.com/en-us/api-reference/enum/SurfaceGuiSizingMode","SurfaceType":"https://developer.roblox.com/en-us/api-reference/enum/SurfaceType","SwipeDirection":"https://developer.roblox.com/en-us/api-reference/enum/SwipeDirection","TableMajorAxis":"https://developer.roblox.com/en-us/api-reference/enum/TableMajorAxis","Technology":"https://developer.roblox.com/en-us/api-reference/enum/Technology","TeleportMethod":"https://developer.roblox.com/en-us/api-reference/enum/TeleportMethod","TeleportResult":"https://developer.roblox.com/en-us/api-reference/enum/TeleportResult","TeleportState":"https://developer.roblox.com/en-us/api-reference/enum/TeleportState","TeleportType":"https://developer.roblox.com/en-us/api-reference/enum/TeleportType","TerrainAcquisitionMethod":"https://developer.roblox.com/en-us/api-reference/enum/TerrainAcquisitionMethod","TerrainFace":"https://developer.roblox.com/en-us/api-reference/enum/TerrainFace","TextChatMessageStatus":"https://developer.roblox.com/en-us/api-reference/enum/TextChatMessageStatus","TextDirection":"https://developer.roblox.com/en-us/api-reference/enum/TextDirection","TextFilterContext":"https://developer.roblox.com/en-us/api-reference/enum/TextFilterContext","TextInputType":"https://developer.roblox.com/en-us/api-reference/enum/TextInputType","TextTruncate":"https://developer.roblox.com/en-us/api-reference/enum/TextTruncate","TextXAlignment":"https://developer.roblox.com/en-us/api-reference/enum/TextXAlignment","TextYAlignment":"https://developer.roblox.com/en-us/api-reference/enum/TextYAlignment","TextureMode":"https://developer.roblox.com/en-us/api-reference/enum/TextureMode","TextureQueryType":"https://developer.roblox.com/en-us/api-reference/enum/TextureQueryType","ThreadPoolConfig":"https://developer.roblox.com/en-us/api-reference/enum/ThreadPoolConfig","ThrottlingPriority":"https://developer.roblox.com/en-us/api-reference/enum/ThrottlingPriority","ThumbnailSize":"https://developer.roblox.com/en-us/api-reference/enum/ThumbnailSize","ThumbnailType":"https://developer.roblox.com/en-us/api-reference/enum/ThumbnailType","TickCountSampleMethod":"https://developer.roblox.com/en-us/api-reference/enum/TickCountSampleMethod","TopBottom":"https://developer.roblox.com/en-us/api-reference/enum/TopBottom","TouchCameraMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/TouchCameraMovementMode","TouchMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/TouchMovementMode","TrackerError":"https://developer.roblox.com/en-us/api-reference/enum/TrackerError","TrackerExtrapolationFlagMode":"https://developer.roblox.com/en-us/api-reference/enum/TrackerExtrapolationFlagMode","TrackerFaceTrackingStatus":"https://developer.roblox.com/en-us/api-reference/enum/TrackerFaceTrackingStatus","TrackerLodFlagMode":"https://developer.roblox.com/en-us/api-reference/enum/TrackerLodFlagMode","TrackerLodValueMode":"https://developer.roblox.com/en-us/api-reference/enum/TrackerLodValueMode","TrackerMode":"https://developer.roblox.com/en-us/api-reference/enum/TrackerMode","TrackerPromptEvent":"https://developer.roblox.com/en-us/api-reference/enum/TrackerPromptEvent","TriStateBoolean":"https://developer.roblox.com/en-us/api-reference/enum/TriStateBoolean","TweenStatus":"https://developer.roblox.com/en-us/api-reference/enum/TweenStatus","UIFlexAlignment":"https://developer.roblox.com/en-us/api-reference/enum/UIFlexAlignment","UIFlexMode":"https://developer.roblox.com/en-us/api-reference/enum/UIFlexMode","UITheme":"https://developer.roblox.com/en-us/api-reference/enum/UITheme","UiMessageType":"https://developer.roblox.com/en-us/api-reference/enum/UiMessageType","UsageContext":"https://developer.roblox.com/en-us/api-reference/enum/UsageContext","UserCFrame":"https://developer.roblox.com/en-us/api-reference/enum/UserCFrame","UserInputState":"https://developer.roblox.com/en-us/api-reference/enum/UserInputState","UserInputType":"https://developer.roblox.com/en-us/api-reference/enum/UserInputType","VRComfortSetting":"https://developer.roblox.com/en-us/api-reference/enum/VRComfortSetting","VRSafetyBubbleMode":"https://developer.roblox.com/en-us/api-reference/enum/VRSafetyBubbleMode","VRScaling":"https://developer.roblox.com/en-us/api-reference/enum/VRScaling","VRSessionState":"https://developer.roblox.com/en-us/api-reference/enum/VRSessionState","VRTouchpad":"https://developer.roblox.com/en-us/api-reference/enum/VRTouchpad","VRTouchpadMode":"https://developer.roblox.com/en-us/api-reference/enum/VRTouchpadMode","VelocityConstraintMode":"https://developer.roblox.com/en-us/api-reference/enum/VelocityConstraintMode","VerticalAlignment":"https://developer.roblox.com/en-us/api-reference/enum/VerticalAlignment","VerticalScrollBarPosition":"https://developer.roblox.com/en-us/api-reference/enum/VerticalScrollBarPosition","VibrationMotor":"https://developer.roblox.com/en-us/api-reference/enum/VibrationMotor","ViewMode":"https://developer.roblox.com/en-us/api-reference/enum/ViewMode","VirtualCursorMode":"https://developer.roblox.com/en-us/api-reference/enum/VirtualCursorMode","VirtualInputMode":"https://developer.roblox.com/en-us/api-reference/enum/VirtualInputMode","VoiceChatState":"https://developer.roblox.com/en-us/api-reference/enum/VoiceChatState","VoiceControlPath":"https://developer.roblox.com/en-us/api-reference/enum/VoiceControlPath","VolumetricAudio":"https://developer.roblox.com/en-us/api-reference/enum/VolumetricAudio","WaterDirection":"https://developer.roblox.com/en-us/api-reference/enum/WaterDirection","WaterForce":"https://developer.roblox.com/en-us/api-reference/enum/WaterForce","WeldConstraintPreserve":"https://developer.roblox.com/en-us/api-reference/enum/WeldConstraintPreserve","WrapLayerAutoSkin":"https://developer.roblox.com/en-us/api-reference/enum/WrapLayerAutoSkin","WrapLayerDebugMode":"https://developer.roblox.com/en-us/api-reference/enum/WrapLayerDebugMode","WrapTargetDebugMode":"https://developer.roblox.com/en-us/api-reference/enum/WrapTargetDebugMode","ZIndexBehavior":"https://developer.roblox.com/en-us/api-reference/enum/ZIndexBehavior","Axes":"https://developer.roblox.com/en-us/api-reference/datatype/Axes","BrickColor":"https://developer.roblox.com/en-us/api-reference/datatype/BrickColor","CFrame":"https://developer.roblox.com/en-us/api-reference/datatype/CFrame","Color3":"https://developer.roblox.com/en-us/api-reference/datatype/Color3","ColorSequence":"https://developer.roblox.com/en-us/api-reference/datatype/ColorSequence","ColorSequenceKeypoint":"https://developer.roblox.com/en-us/api-reference/datatype/ColorSequenceKeypoint","DockWidgetPluginGuiInfo":"https://developer.roblox.com/en-us/api-reference/datatype/DockWidgetPluginGuiInfo","Enum":"https://developer.roblox.com/en-us/api-reference/datatype/Enum","EnumItem":"https://developer.roblox.com/en-us/api-reference/datatype/EnumItem","Enums":"https://developer.roblox.com/en-us/api-reference/datatype/Enums","Faces":"https://developer.roblox.com/en-us/api-reference/datatype/Faces","NumberRange":"https://developer.roblox.com/en-us/api-reference/datatype/NumberRange","NumberSequence":"https://developer.roblox.com/en-us/api-reference/datatype/NumberSequence","NumberSequenceKeypoint":"https://developer.roblox.com/en-us/api-reference/datatype/NumberSequenceKeypoint","PathWaypoint":"https://developer.roblox.com/en-us/api-reference/datatype/PathWaypoint","PhysicalProperties":"https://developer.roblox.com/en-us/api-reference/datatype/PhysicalProperties","Random":"https://developer.roblox.com/en-us/api-reference/datatype/Random","Ray":"https://developer.roblox.com/en-us/api-reference/datatype/Ray","RBXScriptConnection":"https://developer.roblox.com/en-us/api-reference/datatype/RBXScriptConnection","RBXScriptSignal":"https://developer.roblox.com/en-us/api-reference/datatype/RBXScriptSignal","Rect":"https://developer.roblox.com/en-us/api-reference/datatype/Rect","Region3":"https://developer.roblox.com/en-us/api-reference/datatype/Region3","Region3int16":"https://developer.roblox.com/en-us/api-reference/datatype/Region3int16","TweenInfo":"https://developer.roblox.com/en-us/api-reference/datatype/TweenInfo","UDim":"https://developer.roblox.com/en-us/api-reference/datatype/UDim","UDim2":"https://developer.roblox.com/en-us/api-reference/datatype/UDim2","Vector2":"https://developer.roblox.com/en-us/api-reference/datatype/Vector2","Vector2int16":"https://developer.roblox.com/en-us/api-reference/datatype/Vector2int16","Vector3":"https://developer.roblox.com/en-us/api-reference/datatype/Vector3","Vector3int16":"https://developer.roblox.com/en-us/api-reference/datatype/Vector3int16","Basic":"/Iris/api/Basic","Combo":"/Iris/api/Combo","Drag":"/Iris/api/Drag","Format":"/Iris/api/Format","Input":"/Iris/api/Input","Internal":"/Iris/api/Internal","Iris":"/Iris/api/Iris","Menu":"/Iris/api/Menu","Plot":"/Iris/api/Plot","Slider":"/Iris/api/Slider","State":"/Iris/api/State","Table":"/Iris/api/Table","Text":"/Iris/api/Text","Tree":"/Iris/api/Tree","Window":"/Iris/api/Window"}')}}]); \ No newline at end of file diff --git a/assets/js/20214626.81b78b28.js b/assets/js/20214626.81b78b28.js new file mode 100644 index 0000000..fda4143 --- /dev/null +++ b/assets/js/20214626.81b78b28.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7588],{85492:e=>{e.exports=JSON.parse('{"Instance":"https://developer.roblox.com/en-us/api-reference/datatype/Instance","AccessoryDescription":"https://developer.roblox.com/en-us/api-reference/class/AccessoryDescription","AccountService":"https://developer.roblox.com/en-us/api-reference/class/AccountService","Accoutrement":"https://developer.roblox.com/en-us/api-reference/class/Accoutrement","Accessory":"https://developer.roblox.com/en-us/api-reference/class/Accessory","Hat":"https://developer.roblox.com/en-us/api-reference/class/Hat","AchievementService":"https://developer.roblox.com/en-us/api-reference/class/AchievementService","AdPortal":"https://developer.roblox.com/en-us/api-reference/class/AdPortal","AdService":"https://developer.roblox.com/en-us/api-reference/class/AdService","AdvancedDragger":"https://developer.roblox.com/en-us/api-reference/class/AdvancedDragger","AnalyticsService":"https://developer.roblox.com/en-us/api-reference/class/AnalyticsService","Animation":"https://developer.roblox.com/en-us/api-reference/class/Animation","AnimationClip":"https://developer.roblox.com/en-us/api-reference/class/AnimationClip","CurveAnimation":"https://developer.roblox.com/en-us/api-reference/class/CurveAnimation","KeyframeSequence":"https://developer.roblox.com/en-us/api-reference/class/KeyframeSequence","AnimationClipProvider":"https://developer.roblox.com/en-us/api-reference/class/AnimationClipProvider","AnimationController":"https://developer.roblox.com/en-us/api-reference/class/AnimationController","AnimationFromVideoCreatorService":"https://developer.roblox.com/en-us/api-reference/class/AnimationFromVideoCreatorService","AnimationFromVideoCreatorStudioService":"https://developer.roblox.com/en-us/api-reference/class/AnimationFromVideoCreatorStudioService","AnimationRigData":"https://developer.roblox.com/en-us/api-reference/class/AnimationRigData","AnimationStreamTrack":"https://developer.roblox.com/en-us/api-reference/class/AnimationStreamTrack","AnimationTrack":"https://developer.roblox.com/en-us/api-reference/class/AnimationTrack","Animator":"https://developer.roblox.com/en-us/api-reference/class/Animator","Annotation":"https://developer.roblox.com/en-us/api-reference/class/Annotation","WorkspaceAnnotation":"https://developer.roblox.com/en-us/api-reference/class/WorkspaceAnnotation","AnnotationsService":"https://developer.roblox.com/en-us/api-reference/class/AnnotationsService","AppLifecycleObserverService":"https://developer.roblox.com/en-us/api-reference/class/AppLifecycleObserverService","AppUpdateService":"https://developer.roblox.com/en-us/api-reference/class/AppUpdateService","AssetCounterService":"https://developer.roblox.com/en-us/api-reference/class/AssetCounterService","AssetDeliveryProxy":"https://developer.roblox.com/en-us/api-reference/class/AssetDeliveryProxy","AssetImportService":"https://developer.roblox.com/en-us/api-reference/class/AssetImportService","AssetImportSession":"https://developer.roblox.com/en-us/api-reference/class/AssetImportSession","AssetManagerService":"https://developer.roblox.com/en-us/api-reference/class/AssetManagerService","AssetPatchSettings":"https://developer.roblox.com/en-us/api-reference/class/AssetPatchSettings","AssetService":"https://developer.roblox.com/en-us/api-reference/class/AssetService","Atmosphere":"https://developer.roblox.com/en-us/api-reference/class/Atmosphere","Attachment":"https://developer.roblox.com/en-us/api-reference/class/Attachment","Bone":"https://developer.roblox.com/en-us/api-reference/class/Bone","AudioAnalyzer":"https://developer.roblox.com/en-us/api-reference/class/AudioAnalyzer","AudioChorus":"https://developer.roblox.com/en-us/api-reference/class/AudioChorus","AudioCompressor":"https://developer.roblox.com/en-us/api-reference/class/AudioCompressor","AudioDeviceInput":"https://developer.roblox.com/en-us/api-reference/class/AudioDeviceInput","AudioDeviceOutput":"https://developer.roblox.com/en-us/api-reference/class/AudioDeviceOutput","AudioDistortion":"https://developer.roblox.com/en-us/api-reference/class/AudioDistortion","AudioEcho":"https://developer.roblox.com/en-us/api-reference/class/AudioEcho","AudioEmitter":"https://developer.roblox.com/en-us/api-reference/class/AudioEmitter","AudioEqualizer":"https://developer.roblox.com/en-us/api-reference/class/AudioEqualizer","AudioFader":"https://developer.roblox.com/en-us/api-reference/class/AudioFader","AudioFilter":"https://developer.roblox.com/en-us/api-reference/class/AudioFilter","AudioFlanger":"https://developer.roblox.com/en-us/api-reference/class/AudioFlanger","AudioListener":"https://developer.roblox.com/en-us/api-reference/class/AudioListener","AudioPitchShifter":"https://developer.roblox.com/en-us/api-reference/class/AudioPitchShifter","AudioPlayer":"https://developer.roblox.com/en-us/api-reference/class/AudioPlayer","AudioReverb":"https://developer.roblox.com/en-us/api-reference/class/AudioReverb","AudioSearchParams":"https://developer.roblox.com/en-us/api-reference/class/AudioSearchParams","AvatarChatService":"https://developer.roblox.com/en-us/api-reference/class/AvatarChatService","AvatarCreationService":"https://developer.roblox.com/en-us/api-reference/class/AvatarCreationService","AvatarEditorService":"https://developer.roblox.com/en-us/api-reference/class/AvatarEditorService","AvatarGenerationJob":"https://developer.roblox.com/en-us/api-reference/class/AvatarGenerationJob","Avatar2DGenerationJob":"https://developer.roblox.com/en-us/api-reference/class/Avatar2DGenerationJob","Avatar3DGenerationJob":"https://developer.roblox.com/en-us/api-reference/class/Avatar3DGenerationJob","AvatarGenerationSession":"https://developer.roblox.com/en-us/api-reference/class/AvatarGenerationSession","AvatarImportService":"https://developer.roblox.com/en-us/api-reference/class/AvatarImportService","Backpack":"https://developer.roblox.com/en-us/api-reference/class/Backpack","BadgeService":"https://developer.roblox.com/en-us/api-reference/class/BadgeService","BaseImportData":"https://developer.roblox.com/en-us/api-reference/class/BaseImportData","AnimationImportData":"https://developer.roblox.com/en-us/api-reference/class/AnimationImportData","FacsImportData":"https://developer.roblox.com/en-us/api-reference/class/FacsImportData","GroupImportData":"https://developer.roblox.com/en-us/api-reference/class/GroupImportData","JointImportData":"https://developer.roblox.com/en-us/api-reference/class/JointImportData","MaterialImportData":"https://developer.roblox.com/en-us/api-reference/class/MaterialImportData","MeshImportData":"https://developer.roblox.com/en-us/api-reference/class/MeshImportData","RootImportData":"https://developer.roblox.com/en-us/api-reference/class/RootImportData","BasePlayerGui":"https://developer.roblox.com/en-us/api-reference/class/BasePlayerGui","CoreGui":"https://developer.roblox.com/en-us/api-reference/class/CoreGui","PlayerGui":"https://developer.roblox.com/en-us/api-reference/class/PlayerGui","StarterGui":"https://developer.roblox.com/en-us/api-reference/class/StarterGui","BaseRemoteEvent":"https://developer.roblox.com/en-us/api-reference/class/BaseRemoteEvent","RemoteEvent":"https://developer.roblox.com/en-us/api-reference/class/RemoteEvent","UnreliableRemoteEvent":"https://developer.roblox.com/en-us/api-reference/class/UnreliableRemoteEvent","BaseWrap":"https://developer.roblox.com/en-us/api-reference/class/BaseWrap","WrapDeformer":"https://developer.roblox.com/en-us/api-reference/class/WrapDeformer","WrapLayer":"https://developer.roblox.com/en-us/api-reference/class/WrapLayer","WrapTarget":"https://developer.roblox.com/en-us/api-reference/class/WrapTarget","Beam":"https://developer.roblox.com/en-us/api-reference/class/Beam","BindableEvent":"https://developer.roblox.com/en-us/api-reference/class/BindableEvent","BindableFunction":"https://developer.roblox.com/en-us/api-reference/class/BindableFunction","BodyMover":"https://developer.roblox.com/en-us/api-reference/class/BodyMover","BodyAngularVelocity":"https://developer.roblox.com/en-us/api-reference/class/BodyAngularVelocity","BodyForce":"https://developer.roblox.com/en-us/api-reference/class/BodyForce","BodyGyro":"https://developer.roblox.com/en-us/api-reference/class/BodyGyro","BodyPosition":"https://developer.roblox.com/en-us/api-reference/class/BodyPosition","BodyThrust":"https://developer.roblox.com/en-us/api-reference/class/BodyThrust","BodyVelocity":"https://developer.roblox.com/en-us/api-reference/class/BodyVelocity","RocketPropulsion":"https://developer.roblox.com/en-us/api-reference/class/RocketPropulsion","BodyPartDescription":"https://developer.roblox.com/en-us/api-reference/class/BodyPartDescription","Breakpoint":"https://developer.roblox.com/en-us/api-reference/class/Breakpoint","BrowserService":"https://developer.roblox.com/en-us/api-reference/class/BrowserService","BubbleChatMessageProperties":"https://developer.roblox.com/en-us/api-reference/class/BubbleChatMessageProperties","BulkImportService":"https://developer.roblox.com/en-us/api-reference/class/BulkImportService","CacheableContentProvider":"https://developer.roblox.com/en-us/api-reference/class/CacheableContentProvider","HSRDataContentProvider":"https://developer.roblox.com/en-us/api-reference/class/HSRDataContentProvider","MeshContentProvider":"https://developer.roblox.com/en-us/api-reference/class/MeshContentProvider","SolidModelContentProvider":"https://developer.roblox.com/en-us/api-reference/class/SolidModelContentProvider","CalloutService":"https://developer.roblox.com/en-us/api-reference/class/CalloutService","Camera":"https://developer.roblox.com/en-us/api-reference/class/Camera","CaptureService":"https://developer.roblox.com/en-us/api-reference/class/CaptureService","ChangeHistoryService":"https://developer.roblox.com/en-us/api-reference/class/ChangeHistoryService","CharacterAppearance":"https://developer.roblox.com/en-us/api-reference/class/CharacterAppearance","BodyColors":"https://developer.roblox.com/en-us/api-reference/class/BodyColors","CharacterMesh":"https://developer.roblox.com/en-us/api-reference/class/CharacterMesh","Clothing":"https://developer.roblox.com/en-us/api-reference/class/Clothing","Pants":"https://developer.roblox.com/en-us/api-reference/class/Pants","Shirt":"https://developer.roblox.com/en-us/api-reference/class/Shirt","ShirtGraphic":"https://developer.roblox.com/en-us/api-reference/class/ShirtGraphic","Skin":"https://developer.roblox.com/en-us/api-reference/class/Skin","Chat":"https://developer.roblox.com/en-us/api-reference/class/Chat","ChatbotUIService":"https://developer.roblox.com/en-us/api-reference/class/ChatbotUIService","ClickDetector":"https://developer.roblox.com/en-us/api-reference/class/ClickDetector","DragDetector":"https://developer.roblox.com/en-us/api-reference/class/DragDetector","Clouds":"https://developer.roblox.com/en-us/api-reference/class/Clouds","ClusterPacketCache":"https://developer.roblox.com/en-us/api-reference/class/ClusterPacketCache","Collaborator":"https://developer.roblox.com/en-us/api-reference/class/Collaborator","CollaboratorsService":"https://developer.roblox.com/en-us/api-reference/class/CollaboratorsService","CollectionService":"https://developer.roblox.com/en-us/api-reference/class/CollectionService","CommandInstance":"https://developer.roblox.com/en-us/api-reference/class/CommandInstance","CommandService":"https://developer.roblox.com/en-us/api-reference/class/CommandService","CommerceService":"https://developer.roblox.com/en-us/api-reference/class/CommerceService","Configuration":"https://developer.roblox.com/en-us/api-reference/class/Configuration","ConfigureServerService":"https://developer.roblox.com/en-us/api-reference/class/ConfigureServerService","ConnectivityService":"https://developer.roblox.com/en-us/api-reference/class/ConnectivityService","Constraint":"https://developer.roblox.com/en-us/api-reference/class/Constraint","AlignOrientation":"https://developer.roblox.com/en-us/api-reference/class/AlignOrientation","AlignPosition":"https://developer.roblox.com/en-us/api-reference/class/AlignPosition","AngularVelocity":"https://developer.roblox.com/en-us/api-reference/class/AngularVelocity","AnimationConstraint":"https://developer.roblox.com/en-us/api-reference/class/AnimationConstraint","BallSocketConstraint":"https://developer.roblox.com/en-us/api-reference/class/BallSocketConstraint","HingeConstraint":"https://developer.roblox.com/en-us/api-reference/class/HingeConstraint","LineForce":"https://developer.roblox.com/en-us/api-reference/class/LineForce","LinearVelocity":"https://developer.roblox.com/en-us/api-reference/class/LinearVelocity","PlaneConstraint":"https://developer.roblox.com/en-us/api-reference/class/PlaneConstraint","Plane":"https://developer.roblox.com/en-us/api-reference/class/Plane","RigidConstraint":"https://developer.roblox.com/en-us/api-reference/class/RigidConstraint","RodConstraint":"https://developer.roblox.com/en-us/api-reference/class/RodConstraint","RopeConstraint":"https://developer.roblox.com/en-us/api-reference/class/RopeConstraint","SlidingBallConstraint":"https://developer.roblox.com/en-us/api-reference/class/SlidingBallConstraint","CylindricalConstraint":"https://developer.roblox.com/en-us/api-reference/class/CylindricalConstraint","PrismaticConstraint":"https://developer.roblox.com/en-us/api-reference/class/PrismaticConstraint","SpringConstraint":"https://developer.roblox.com/en-us/api-reference/class/SpringConstraint","Torque":"https://developer.roblox.com/en-us/api-reference/class/Torque","TorsionSpringConstraint":"https://developer.roblox.com/en-us/api-reference/class/TorsionSpringConstraint","UniversalConstraint":"https://developer.roblox.com/en-us/api-reference/class/UniversalConstraint","VectorForce":"https://developer.roblox.com/en-us/api-reference/class/VectorForce","ContentProvider":"https://developer.roblox.com/en-us/api-reference/class/ContentProvider","ContextActionService":"https://developer.roblox.com/en-us/api-reference/class/ContextActionService","Controller":"https://developer.roblox.com/en-us/api-reference/class/Controller","HumanoidController":"https://developer.roblox.com/en-us/api-reference/class/HumanoidController","SkateboardController":"https://developer.roblox.com/en-us/api-reference/class/SkateboardController","VehicleController":"https://developer.roblox.com/en-us/api-reference/class/VehicleController","ControllerBase":"https://developer.roblox.com/en-us/api-reference/class/ControllerBase","AirController":"https://developer.roblox.com/en-us/api-reference/class/AirController","ClimbController":"https://developer.roblox.com/en-us/api-reference/class/ClimbController","GroundController":"https://developer.roblox.com/en-us/api-reference/class/GroundController","SwimController":"https://developer.roblox.com/en-us/api-reference/class/SwimController","ControllerManager":"https://developer.roblox.com/en-us/api-reference/class/ControllerManager","ControllerService":"https://developer.roblox.com/en-us/api-reference/class/ControllerService","ConversationalAIAcceptanceService":"https://developer.roblox.com/en-us/api-reference/class/ConversationalAIAcceptanceService","CookiesService":"https://developer.roblox.com/en-us/api-reference/class/CookiesService","CorePackages":"https://developer.roblox.com/en-us/api-reference/class/CorePackages","CoreScriptDebuggingManagerHelper":"https://developer.roblox.com/en-us/api-reference/class/CoreScriptDebuggingManagerHelper","CoreScriptSyncService":"https://developer.roblox.com/en-us/api-reference/class/CoreScriptSyncService","CreationDBService":"https://developer.roblox.com/en-us/api-reference/class/CreationDBService","CrossDMScriptChangeListener":"https://developer.roblox.com/en-us/api-reference/class/CrossDMScriptChangeListener","CustomEvent":"https://developer.roblox.com/en-us/api-reference/class/CustomEvent","CustomEventReceiver":"https://developer.roblox.com/en-us/api-reference/class/CustomEventReceiver","DataModelMesh":"https://developer.roblox.com/en-us/api-reference/class/DataModelMesh","BevelMesh":"https://developer.roblox.com/en-us/api-reference/class/BevelMesh","BlockMesh":"https://developer.roblox.com/en-us/api-reference/class/BlockMesh","CylinderMesh":"https://developer.roblox.com/en-us/api-reference/class/CylinderMesh","EditableMesh":"https://developer.roblox.com/en-us/api-reference/class/EditableMesh","RobloxEditableMesh":"https://developer.roblox.com/en-us/api-reference/class/RobloxEditableMesh","FileMesh":"https://developer.roblox.com/en-us/api-reference/class/FileMesh","SpecialMesh":"https://developer.roblox.com/en-us/api-reference/class/SpecialMesh","DataModelPatchService":"https://developer.roblox.com/en-us/api-reference/class/DataModelPatchService","DataModelSession":"https://developer.roblox.com/en-us/api-reference/class/DataModelSession","DataStoreGetOptions":"https://developer.roblox.com/en-us/api-reference/class/DataStoreGetOptions","DataStoreIncrementOptions":"https://developer.roblox.com/en-us/api-reference/class/DataStoreIncrementOptions","DataStoreInfo":"https://developer.roblox.com/en-us/api-reference/class/DataStoreInfo","DataStoreKey":"https://developer.roblox.com/en-us/api-reference/class/DataStoreKey","DataStoreKeyInfo":"https://developer.roblox.com/en-us/api-reference/class/DataStoreKeyInfo","DataStoreObjectVersionInfo":"https://developer.roblox.com/en-us/api-reference/class/DataStoreObjectVersionInfo","DataStoreOptions":"https://developer.roblox.com/en-us/api-reference/class/DataStoreOptions","DataStoreService":"https://developer.roblox.com/en-us/api-reference/class/DataStoreService","DataStoreSetOptions":"https://developer.roblox.com/en-us/api-reference/class/DataStoreSetOptions","Debris":"https://developer.roblox.com/en-us/api-reference/class/Debris","DebugSettings":"https://developer.roblox.com/en-us/api-reference/class/DebugSettings","DebuggablePluginWatcher":"https://developer.roblox.com/en-us/api-reference/class/DebuggablePluginWatcher","DebuggerBreakpoint":"https://developer.roblox.com/en-us/api-reference/class/DebuggerBreakpoint","DebuggerConnection":"https://developer.roblox.com/en-us/api-reference/class/DebuggerConnection","LocalDebuggerConnection":"https://developer.roblox.com/en-us/api-reference/class/LocalDebuggerConnection","DebuggerConnectionManager":"https://developer.roblox.com/en-us/api-reference/class/DebuggerConnectionManager","DebuggerLuaResponse":"https://developer.roblox.com/en-us/api-reference/class/DebuggerLuaResponse","DebuggerManager":"https://developer.roblox.com/en-us/api-reference/class/DebuggerManager","DebuggerUIService":"https://developer.roblox.com/en-us/api-reference/class/DebuggerUIService","DebuggerVariable":"https://developer.roblox.com/en-us/api-reference/class/DebuggerVariable","DebuggerWatch":"https://developer.roblox.com/en-us/api-reference/class/DebuggerWatch","DeviceIdService":"https://developer.roblox.com/en-us/api-reference/class/DeviceIdService","Dialog":"https://developer.roblox.com/en-us/api-reference/class/Dialog","DialogChoice":"https://developer.roblox.com/en-us/api-reference/class/DialogChoice","DraftsService":"https://developer.roblox.com/en-us/api-reference/class/DraftsService","Dragger":"https://developer.roblox.com/en-us/api-reference/class/Dragger","DraggerService":"https://developer.roblox.com/en-us/api-reference/class/DraggerService","EditableImage":"https://developer.roblox.com/en-us/api-reference/class/EditableImage","RobloxEditableImage":"https://developer.roblox.com/en-us/api-reference/class/RobloxEditableImage","EngineAPICloudProcessingService":"https://developer.roblox.com/en-us/api-reference/class/EngineAPICloudProcessingService","EulerRotationCurve":"https://developer.roblox.com/en-us/api-reference/class/EulerRotationCurve","EventIngestService":"https://developer.roblox.com/en-us/api-reference/class/EventIngestService","ExampleService":"https://developer.roblox.com/en-us/api-reference/class/ExampleService","ExperienceAuthService":"https://developer.roblox.com/en-us/api-reference/class/ExperienceAuthService","ExperienceInviteOptions":"https://developer.roblox.com/en-us/api-reference/class/ExperienceInviteOptions","ExperienceNotificationService":"https://developer.roblox.com/en-us/api-reference/class/ExperienceNotificationService","ExperienceService":"https://developer.roblox.com/en-us/api-reference/class/ExperienceService","ExperienceStateCaptureService":"https://developer.roblox.com/en-us/api-reference/class/ExperienceStateCaptureService","Explosion":"https://developer.roblox.com/en-us/api-reference/class/Explosion","FaceAnimatorService":"https://developer.roblox.com/en-us/api-reference/class/FaceAnimatorService","FaceControls":"https://developer.roblox.com/en-us/api-reference/class/FaceControls","FaceInstance":"https://developer.roblox.com/en-us/api-reference/class/FaceInstance","Decal":"https://developer.roblox.com/en-us/api-reference/class/Decal","Texture":"https://developer.roblox.com/en-us/api-reference/class/Texture","FacialAnimationRecordingService":"https://developer.roblox.com/en-us/api-reference/class/FacialAnimationRecordingService","FacialAnimationStreamingServiceStats":"https://developer.roblox.com/en-us/api-reference/class/FacialAnimationStreamingServiceStats","FacialAnimationStreamingServiceV2":"https://developer.roblox.com/en-us/api-reference/class/FacialAnimationStreamingServiceV2","FacialAnimationStreamingSubsessionStats":"https://developer.roblox.com/en-us/api-reference/class/FacialAnimationStreamingSubsessionStats","Feature":"https://developer.roblox.com/en-us/api-reference/class/Feature","Hole":"https://developer.roblox.com/en-us/api-reference/class/Hole","MotorFeature":"https://developer.roblox.com/en-us/api-reference/class/MotorFeature","File":"https://developer.roblox.com/en-us/api-reference/class/File","Fire":"https://developer.roblox.com/en-us/api-reference/class/Fire","FlagStandService":"https://developer.roblox.com/en-us/api-reference/class/FlagStandService","FloatCurve":"https://developer.roblox.com/en-us/api-reference/class/FloatCurve","FlyweightService":"https://developer.roblox.com/en-us/api-reference/class/FlyweightService","CSGDictionaryService":"https://developer.roblox.com/en-us/api-reference/class/CSGDictionaryService","NonReplicatedCSGDictionaryService":"https://developer.roblox.com/en-us/api-reference/class/NonReplicatedCSGDictionaryService","Folder":"https://developer.roblox.com/en-us/api-reference/class/Folder","ForceField":"https://developer.roblox.com/en-us/api-reference/class/ForceField","FriendService":"https://developer.roblox.com/en-us/api-reference/class/FriendService","FunctionalTest":"https://developer.roblox.com/en-us/api-reference/class/FunctionalTest","GamePassService":"https://developer.roblox.com/en-us/api-reference/class/GamePassService","GameSettings":"https://developer.roblox.com/en-us/api-reference/class/GameSettings","GamepadService":"https://developer.roblox.com/en-us/api-reference/class/GamepadService","GenericChallengeService":"https://developer.roblox.com/en-us/api-reference/class/GenericChallengeService","Geometry":"https://developer.roblox.com/en-us/api-reference/class/Geometry","GeometryService":"https://developer.roblox.com/en-us/api-reference/class/GeometryService","GetTextBoundsParams":"https://developer.roblox.com/en-us/api-reference/class/GetTextBoundsParams","GlobalDataStore":"https://developer.roblox.com/en-us/api-reference/class/GlobalDataStore","DataStore":"https://developer.roblox.com/en-us/api-reference/class/DataStore","OrderedDataStore":"https://developer.roblox.com/en-us/api-reference/class/OrderedDataStore","GoogleAnalyticsConfiguration":"https://developer.roblox.com/en-us/api-reference/class/GoogleAnalyticsConfiguration","GroupService":"https://developer.roblox.com/en-us/api-reference/class/GroupService","GuiBase":"https://developer.roblox.com/en-us/api-reference/class/GuiBase","GuiBase2d":"https://developer.roblox.com/en-us/api-reference/class/GuiBase2d","GuiObject":"https://developer.roblox.com/en-us/api-reference/class/GuiObject","CanvasGroup":"https://developer.roblox.com/en-us/api-reference/class/CanvasGroup","Frame":"https://developer.roblox.com/en-us/api-reference/class/Frame","GuiButton":"https://developer.roblox.com/en-us/api-reference/class/GuiButton","ImageButton":"https://developer.roblox.com/en-us/api-reference/class/ImageButton","TextButton":"https://developer.roblox.com/en-us/api-reference/class/TextButton","GuiLabel":"https://developer.roblox.com/en-us/api-reference/class/GuiLabel","ImageLabel":"https://developer.roblox.com/en-us/api-reference/class/ImageLabel","TextLabel":"https://developer.roblox.com/en-us/api-reference/class/TextLabel","ScrollingFrame":"https://developer.roblox.com/en-us/api-reference/class/ScrollingFrame","TextBox":"https://developer.roblox.com/en-us/api-reference/class/TextBox","VideoFrame":"https://developer.roblox.com/en-us/api-reference/class/VideoFrame","ViewportFrame":"https://developer.roblox.com/en-us/api-reference/class/ViewportFrame","LayerCollector":"https://developer.roblox.com/en-us/api-reference/class/LayerCollector","BillboardGui":"https://developer.roblox.com/en-us/api-reference/class/BillboardGui","PluginGui":"https://developer.roblox.com/en-us/api-reference/class/PluginGui","DockWidgetPluginGui":"https://developer.roblox.com/en-us/api-reference/class/DockWidgetPluginGui","QWidgetPluginGui":"https://developer.roblox.com/en-us/api-reference/class/QWidgetPluginGui","ScreenGui":"https://developer.roblox.com/en-us/api-reference/class/ScreenGui","GuiMain":"https://developer.roblox.com/en-us/api-reference/class/GuiMain","SurfaceGuiBase":"https://developer.roblox.com/en-us/api-reference/class/SurfaceGuiBase","AdGui":"https://developer.roblox.com/en-us/api-reference/class/AdGui","SurfaceGui":"https://developer.roblox.com/en-us/api-reference/class/SurfaceGui","GuiBase3d":"https://developer.roblox.com/en-us/api-reference/class/GuiBase3d","FloorWire":"https://developer.roblox.com/en-us/api-reference/class/FloorWire","InstanceAdornment":"https://developer.roblox.com/en-us/api-reference/class/InstanceAdornment","SelectionBox":"https://developer.roblox.com/en-us/api-reference/class/SelectionBox","PVAdornment":"https://developer.roblox.com/en-us/api-reference/class/PVAdornment","HandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/HandleAdornment","BoxHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/BoxHandleAdornment","ConeHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/ConeHandleAdornment","CylinderHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/CylinderHandleAdornment","ImageHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/ImageHandleAdornment","LineHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/LineHandleAdornment","SphereHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/SphereHandleAdornment","WireframeHandleAdornment":"https://developer.roblox.com/en-us/api-reference/class/WireframeHandleAdornment","ParabolaAdornment":"https://developer.roblox.com/en-us/api-reference/class/ParabolaAdornment","SelectionSphere":"https://developer.roblox.com/en-us/api-reference/class/SelectionSphere","PartAdornment":"https://developer.roblox.com/en-us/api-reference/class/PartAdornment","HandlesBase":"https://developer.roblox.com/en-us/api-reference/class/HandlesBase","ArcHandles":"https://developer.roblox.com/en-us/api-reference/class/ArcHandles","Handles":"https://developer.roblox.com/en-us/api-reference/class/Handles","SurfaceSelection":"https://developer.roblox.com/en-us/api-reference/class/SurfaceSelection","SelectionLasso":"https://developer.roblox.com/en-us/api-reference/class/SelectionLasso","SelectionPartLasso":"https://developer.roblox.com/en-us/api-reference/class/SelectionPartLasso","SelectionPointLasso":"https://developer.roblox.com/en-us/api-reference/class/SelectionPointLasso","Path2D":"https://developer.roblox.com/en-us/api-reference/class/Path2D","GuiService":"https://developer.roblox.com/en-us/api-reference/class/GuiService","GuidRegistryService":"https://developer.roblox.com/en-us/api-reference/class/GuidRegistryService","HapticService":"https://developer.roblox.com/en-us/api-reference/class/HapticService","HeightmapImporterService":"https://developer.roblox.com/en-us/api-reference/class/HeightmapImporterService","HiddenSurfaceRemovalAsset":"https://developer.roblox.com/en-us/api-reference/class/HiddenSurfaceRemovalAsset","Highlight":"https://developer.roblox.com/en-us/api-reference/class/Highlight","Hopper":"https://developer.roblox.com/en-us/api-reference/class/Hopper","HttpRbxApiService":"https://developer.roblox.com/en-us/api-reference/class/HttpRbxApiService","HttpRequest":"https://developer.roblox.com/en-us/api-reference/class/HttpRequest","HttpService":"https://developer.roblox.com/en-us/api-reference/class/HttpService","Humanoid":"https://developer.roblox.com/en-us/api-reference/class/Humanoid","HumanoidDescription":"https://developer.roblox.com/en-us/api-reference/class/HumanoidDescription","IKControl":"https://developer.roblox.com/en-us/api-reference/class/IKControl","ILegacyStudioBridge":"https://developer.roblox.com/en-us/api-reference/class/ILegacyStudioBridge","LegacyStudioBridge":"https://developer.roblox.com/en-us/api-reference/class/LegacyStudioBridge","IXPService":"https://developer.roblox.com/en-us/api-reference/class/IXPService","IncrementalPatchBuilder":"https://developer.roblox.com/en-us/api-reference/class/IncrementalPatchBuilder","InputObject":"https://developer.roblox.com/en-us/api-reference/class/InputObject","InsertService":"https://developer.roblox.com/en-us/api-reference/class/InsertService","JointInstance":"https://developer.roblox.com/en-us/api-reference/class/JointInstance","DynamicRotate":"https://developer.roblox.com/en-us/api-reference/class/DynamicRotate","RotateP":"https://developer.roblox.com/en-us/api-reference/class/RotateP","RotateV":"https://developer.roblox.com/en-us/api-reference/class/RotateV","Glue":"https://developer.roblox.com/en-us/api-reference/class/Glue","ManualSurfaceJointInstance":"https://developer.roblox.com/en-us/api-reference/class/ManualSurfaceJointInstance","ManualGlue":"https://developer.roblox.com/en-us/api-reference/class/ManualGlue","ManualWeld":"https://developer.roblox.com/en-us/api-reference/class/ManualWeld","Motor":"https://developer.roblox.com/en-us/api-reference/class/Motor","Motor6D":"https://developer.roblox.com/en-us/api-reference/class/Motor6D","Rotate":"https://developer.roblox.com/en-us/api-reference/class/Rotate","Snap":"https://developer.roblox.com/en-us/api-reference/class/Snap","VelocityMotor":"https://developer.roblox.com/en-us/api-reference/class/VelocityMotor","Weld":"https://developer.roblox.com/en-us/api-reference/class/Weld","JointsService":"https://developer.roblox.com/en-us/api-reference/class/JointsService","KeyboardService":"https://developer.roblox.com/en-us/api-reference/class/KeyboardService","Keyframe":"https://developer.roblox.com/en-us/api-reference/class/Keyframe","KeyframeMarker":"https://developer.roblox.com/en-us/api-reference/class/KeyframeMarker","KeyframeSequenceProvider":"https://developer.roblox.com/en-us/api-reference/class/KeyframeSequenceProvider","LSPFileSyncService":"https://developer.roblox.com/en-us/api-reference/class/LSPFileSyncService","LanguageService":"https://developer.roblox.com/en-us/api-reference/class/LanguageService","Light":"https://developer.roblox.com/en-us/api-reference/class/Light","PointLight":"https://developer.roblox.com/en-us/api-reference/class/PointLight","SpotLight":"https://developer.roblox.com/en-us/api-reference/class/SpotLight","SurfaceLight":"https://developer.roblox.com/en-us/api-reference/class/SurfaceLight","Lighting":"https://developer.roblox.com/en-us/api-reference/class/Lighting","LinkingService":"https://developer.roblox.com/en-us/api-reference/class/LinkingService","LiveScriptingService":"https://developer.roblox.com/en-us/api-reference/class/LiveScriptingService","LocalStorageService":"https://developer.roblox.com/en-us/api-reference/class/LocalStorageService","AppStorageService":"https://developer.roblox.com/en-us/api-reference/class/AppStorageService","UserStorageService":"https://developer.roblox.com/en-us/api-reference/class/UserStorageService","LocalizationService":"https://developer.roblox.com/en-us/api-reference/class/LocalizationService","LocalizationTable":"https://developer.roblox.com/en-us/api-reference/class/LocalizationTable","CloudLocalizationTable":"https://developer.roblox.com/en-us/api-reference/class/CloudLocalizationTable","LodDataEntity":"https://developer.roblox.com/en-us/api-reference/class/LodDataEntity","LodDataService":"https://developer.roblox.com/en-us/api-reference/class/LodDataService","LogReporterService":"https://developer.roblox.com/en-us/api-reference/class/LogReporterService","LogService":"https://developer.roblox.com/en-us/api-reference/class/LogService","LoginService":"https://developer.roblox.com/en-us/api-reference/class/LoginService","LuaSettings":"https://developer.roblox.com/en-us/api-reference/class/LuaSettings","LuaSourceContainer":"https://developer.roblox.com/en-us/api-reference/class/LuaSourceContainer","BaseScript":"https://developer.roblox.com/en-us/api-reference/class/BaseScript","CoreScript":"https://developer.roblox.com/en-us/api-reference/class/CoreScript","Script":"https://developer.roblox.com/en-us/api-reference/class/Script","LocalScript":"https://developer.roblox.com/en-us/api-reference/class/LocalScript","ModuleScript":"https://developer.roblox.com/en-us/api-reference/class/ModuleScript","LuaWebService":"https://developer.roblox.com/en-us/api-reference/class/LuaWebService","LuauScriptAnalyzerService":"https://developer.roblox.com/en-us/api-reference/class/LuauScriptAnalyzerService","MarkerCurve":"https://developer.roblox.com/en-us/api-reference/class/MarkerCurve","MarketplaceService":"https://developer.roblox.com/en-us/api-reference/class/MarketplaceService","MaterialGenerationService":"https://developer.roblox.com/en-us/api-reference/class/MaterialGenerationService","MaterialGenerationSession":"https://developer.roblox.com/en-us/api-reference/class/MaterialGenerationSession","MaterialService":"https://developer.roblox.com/en-us/api-reference/class/MaterialService","MaterialVariant":"https://developer.roblox.com/en-us/api-reference/class/MaterialVariant","MemStorageConnection":"https://developer.roblox.com/en-us/api-reference/class/MemStorageConnection","MemStorageService":"https://developer.roblox.com/en-us/api-reference/class/MemStorageService","MemoryStoreHashMap":"https://developer.roblox.com/en-us/api-reference/class/MemoryStoreHashMap","MemoryStoreQueue":"https://developer.roblox.com/en-us/api-reference/class/MemoryStoreQueue","MemoryStoreService":"https://developer.roblox.com/en-us/api-reference/class/MemoryStoreService","MemoryStoreSortedMap":"https://developer.roblox.com/en-us/api-reference/class/MemoryStoreSortedMap","Message":"https://developer.roblox.com/en-us/api-reference/class/Message","Hint":"https://developer.roblox.com/en-us/api-reference/class/Hint","MessageBusConnection":"https://developer.roblox.com/en-us/api-reference/class/MessageBusConnection","MessageBusService":"https://developer.roblox.com/en-us/api-reference/class/MessageBusService","MessagingService":"https://developer.roblox.com/en-us/api-reference/class/MessagingService","MetaBreakpoint":"https://developer.roblox.com/en-us/api-reference/class/MetaBreakpoint","MetaBreakpointContext":"https://developer.roblox.com/en-us/api-reference/class/MetaBreakpointContext","MetaBreakpointManager":"https://developer.roblox.com/en-us/api-reference/class/MetaBreakpointManager","Mouse":"https://developer.roblox.com/en-us/api-reference/class/Mouse","PlayerMouse":"https://developer.roblox.com/en-us/api-reference/class/PlayerMouse","PluginMouse":"https://developer.roblox.com/en-us/api-reference/class/PluginMouse","MouseService":"https://developer.roblox.com/en-us/api-reference/class/MouseService","MultipleDocumentInterfaceInstance":"https://developer.roblox.com/en-us/api-reference/class/MultipleDocumentInterfaceInstance","NetworkMarker":"https://developer.roblox.com/en-us/api-reference/class/NetworkMarker","NetworkPeer":"https://developer.roblox.com/en-us/api-reference/class/NetworkPeer","NetworkClient":"https://developer.roblox.com/en-us/api-reference/class/NetworkClient","NetworkServer":"https://developer.roblox.com/en-us/api-reference/class/NetworkServer","NetworkReplicator":"https://developer.roblox.com/en-us/api-reference/class/NetworkReplicator","ClientReplicator":"https://developer.roblox.com/en-us/api-reference/class/ClientReplicator","ServerReplicator":"https://developer.roblox.com/en-us/api-reference/class/ServerReplicator","NetworkSettings":"https://developer.roblox.com/en-us/api-reference/class/NetworkSettings","NoCollisionConstraint":"https://developer.roblox.com/en-us/api-reference/class/NoCollisionConstraint","Noise":"https://developer.roblox.com/en-us/api-reference/class/Noise","NotificationService":"https://developer.roblox.com/en-us/api-reference/class/NotificationService","OmniRecommendationsService":"https://developer.roblox.com/en-us/api-reference/class/OmniRecommendationsService","OpenCloudApiV1":"https://developer.roblox.com/en-us/api-reference/class/OpenCloudApiV1","OpenCloudService":"https://developer.roblox.com/en-us/api-reference/class/OpenCloudService","OperationGraph":"https://developer.roblox.com/en-us/api-reference/class/OperationGraph","PVInstance":"https://developer.roblox.com/en-us/api-reference/class/PVInstance","BasePart":"https://developer.roblox.com/en-us/api-reference/class/BasePart","CornerWedgePart":"https://developer.roblox.com/en-us/api-reference/class/CornerWedgePart","FormFactorPart":"https://developer.roblox.com/en-us/api-reference/class/FormFactorPart","Part":"https://developer.roblox.com/en-us/api-reference/class/Part","FlagStand":"https://developer.roblox.com/en-us/api-reference/class/FlagStand","Platform":"https://developer.roblox.com/en-us/api-reference/enum/Platform","Seat":"https://developer.roblox.com/en-us/api-reference/class/Seat","SkateboardPlatform":"https://developer.roblox.com/en-us/api-reference/class/SkateboardPlatform","SpawnLocation":"https://developer.roblox.com/en-us/api-reference/class/SpawnLocation","WedgePart":"https://developer.roblox.com/en-us/api-reference/class/WedgePart","Terrain":"https://developer.roblox.com/en-us/api-reference/class/Terrain","TriangleMeshPart":"https://developer.roblox.com/en-us/api-reference/class/TriangleMeshPart","MeshPart":"https://developer.roblox.com/en-us/api-reference/class/MeshPart","PartOperation":"https://developer.roblox.com/en-us/api-reference/class/PartOperation","IntersectOperation":"https://developer.roblox.com/en-us/api-reference/class/IntersectOperation","NegateOperation":"https://developer.roblox.com/en-us/api-reference/class/NegateOperation","UnionOperation":"https://developer.roblox.com/en-us/api-reference/class/UnionOperation","TrussPart":"https://developer.roblox.com/en-us/api-reference/class/TrussPart","VehicleSeat":"https://developer.roblox.com/en-us/api-reference/class/VehicleSeat","Model":"https://developer.roblox.com/en-us/api-reference/class/Model","Actor":"https://developer.roblox.com/en-us/api-reference/class/Actor","BackpackItem":"https://developer.roblox.com/en-us/api-reference/class/BackpackItem","HopperBin":"https://developer.roblox.com/en-us/api-reference/class/HopperBin","Tool":"https://developer.roblox.com/en-us/api-reference/class/Tool","Flag":"https://developer.roblox.com/en-us/api-reference/class/Flag","Status":"https://developer.roblox.com/en-us/api-reference/enum/Status","WorldRoot":"https://developer.roblox.com/en-us/api-reference/class/WorldRoot","Workspace":"https://developer.roblox.com/en-us/api-reference/class/Workspace","WorldModel":"https://developer.roblox.com/en-us/api-reference/class/WorldModel","PackageLink":"https://developer.roblox.com/en-us/api-reference/class/PackageLink","PackageService":"https://developer.roblox.com/en-us/api-reference/class/PackageService","PackageUIService":"https://developer.roblox.com/en-us/api-reference/class/PackageUIService","Pages":"https://developer.roblox.com/en-us/api-reference/class/Pages","AudioPages":"https://developer.roblox.com/en-us/api-reference/class/AudioPages","BanHistoryPages":"https://developer.roblox.com/en-us/api-reference/class/BanHistoryPages","CatalogPages":"https://developer.roblox.com/en-us/api-reference/class/CatalogPages","DataStoreKeyPages":"https://developer.roblox.com/en-us/api-reference/class/DataStoreKeyPages","DataStoreListingPages":"https://developer.roblox.com/en-us/api-reference/class/DataStoreListingPages","DataStorePages":"https://developer.roblox.com/en-us/api-reference/class/DataStorePages","DataStoreVersionPages":"https://developer.roblox.com/en-us/api-reference/class/DataStoreVersionPages","FriendPages":"https://developer.roblox.com/en-us/api-reference/class/FriendPages","InventoryPages":"https://developer.roblox.com/en-us/api-reference/class/InventoryPages","EmotesPages":"https://developer.roblox.com/en-us/api-reference/class/EmotesPages","MemoryStoreHashMapPages":"https://developer.roblox.com/en-us/api-reference/class/MemoryStoreHashMapPages","OutfitPages":"https://developer.roblox.com/en-us/api-reference/class/OutfitPages","StandardPages":"https://developer.roblox.com/en-us/api-reference/class/StandardPages","PartOperationAsset":"https://developer.roblox.com/en-us/api-reference/class/PartOperationAsset","ParticleEmitter":"https://developer.roblox.com/en-us/api-reference/class/ParticleEmitter","PatchBundlerFileWatch":"https://developer.roblox.com/en-us/api-reference/class/PatchBundlerFileWatch","PatchMapping":"https://developer.roblox.com/en-us/api-reference/class/PatchMapping","Path":"https://developer.roblox.com/en-us/api-reference/class/Path","PathfindingLink":"https://developer.roblox.com/en-us/api-reference/class/PathfindingLink","PathfindingModifier":"https://developer.roblox.com/en-us/api-reference/class/PathfindingModifier","PathfindingService":"https://developer.roblox.com/en-us/api-reference/class/PathfindingService","PausedState":"https://developer.roblox.com/en-us/api-reference/class/PausedState","PausedStateBreakpoint":"https://developer.roblox.com/en-us/api-reference/class/PausedStateBreakpoint","PausedStateException":"https://developer.roblox.com/en-us/api-reference/class/PausedStateException","PermissionsService":"https://developer.roblox.com/en-us/api-reference/class/PermissionsService","PhysicsService":"https://developer.roblox.com/en-us/api-reference/class/PhysicsService","PhysicsSettings":"https://developer.roblox.com/en-us/api-reference/class/PhysicsSettings","PlaceStatsService":"https://developer.roblox.com/en-us/api-reference/class/PlaceStatsService","PlacesService":"https://developer.roblox.com/en-us/api-reference/class/PlacesService","PlatformCloudStorageService":"https://developer.roblox.com/en-us/api-reference/class/PlatformCloudStorageService","PlatformFriendsService":"https://developer.roblox.com/en-us/api-reference/class/PlatformFriendsService","Player":"https://developer.roblox.com/en-us/api-reference/class/Player","PlayerEmulatorService":"https://developer.roblox.com/en-us/api-reference/class/PlayerEmulatorService","PlayerHydrationService":"https://developer.roblox.com/en-us/api-reference/class/PlayerHydrationService","PlayerScripts":"https://developer.roblox.com/en-us/api-reference/class/PlayerScripts","PlayerViewService":"https://developer.roblox.com/en-us/api-reference/class/PlayerViewService","Players":"https://developer.roblox.com/en-us/api-reference/class/Players","Plugin":"https://developer.roblox.com/en-us/api-reference/class/Plugin","PluginAction":"https://developer.roblox.com/en-us/api-reference/class/PluginAction","PluginCapabilities":"https://developer.roblox.com/en-us/api-reference/class/PluginCapabilities","PluginDebugService":"https://developer.roblox.com/en-us/api-reference/class/PluginDebugService","PluginDragEvent":"https://developer.roblox.com/en-us/api-reference/class/PluginDragEvent","PluginGuiService":"https://developer.roblox.com/en-us/api-reference/class/PluginGuiService","PluginManagementService":"https://developer.roblox.com/en-us/api-reference/class/PluginManagementService","PluginManager":"https://developer.roblox.com/en-us/api-reference/class/PluginManager","PluginManagerInterface":"https://developer.roblox.com/en-us/api-reference/class/PluginManagerInterface","PluginMenu":"https://developer.roblox.com/en-us/api-reference/class/PluginMenu","PluginPolicyService":"https://developer.roblox.com/en-us/api-reference/class/PluginPolicyService","PluginToolbar":"https://developer.roblox.com/en-us/api-reference/class/PluginToolbar","PluginToolbarButton":"https://developer.roblox.com/en-us/api-reference/class/PluginToolbarButton","PointsService":"https://developer.roblox.com/en-us/api-reference/class/PointsService","PolicyService":"https://developer.roblox.com/en-us/api-reference/class/PolicyService","PoseBase":"https://developer.roblox.com/en-us/api-reference/class/PoseBase","NumberPose":"https://developer.roblox.com/en-us/api-reference/class/NumberPose","Pose":"https://developer.roblox.com/en-us/api-reference/class/Pose","PostEffect":"https://developer.roblox.com/en-us/api-reference/class/PostEffect","BloomEffect":"https://developer.roblox.com/en-us/api-reference/class/BloomEffect","BlurEffect":"https://developer.roblox.com/en-us/api-reference/class/BlurEffect","ColorCorrectionEffect":"https://developer.roblox.com/en-us/api-reference/class/ColorCorrectionEffect","ColorGradingEffect":"https://developer.roblox.com/en-us/api-reference/class/ColorGradingEffect","DepthOfFieldEffect":"https://developer.roblox.com/en-us/api-reference/class/DepthOfFieldEffect","SunRaysEffect":"https://developer.roblox.com/en-us/api-reference/class/SunRaysEffect","ProcessInstancePhysicsService":"https://developer.roblox.com/en-us/api-reference/class/ProcessInstancePhysicsService","ProjectFolderService":"https://developer.roblox.com/en-us/api-reference/class/ProjectFolderService","ProximityPrompt":"https://developer.roblox.com/en-us/api-reference/class/ProximityPrompt","ProximityPromptService":"https://developer.roblox.com/en-us/api-reference/class/ProximityPromptService","PublishService":"https://developer.roblox.com/en-us/api-reference/class/PublishService","RTAnimationTracker":"https://developer.roblox.com/en-us/api-reference/class/RTAnimationTracker","RbxAnalyticsService":"https://developer.roblox.com/en-us/api-reference/class/RbxAnalyticsService","ReflectionMetadata":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadata","ReflectionMetadataCallbacks":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataCallbacks","ReflectionMetadataClasses":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataClasses","ReflectionMetadataEnums":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataEnums","ReflectionMetadataEvents":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataEvents","ReflectionMetadataFunctions":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataFunctions","ReflectionMetadataItem":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataItem","ReflectionMetadataClass":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataClass","ReflectionMetadataEnum":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataEnum","ReflectionMetadataEnumItem":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataEnumItem","ReflectionMetadataMember":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataMember","ReflectionMetadataProperties":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataProperties","ReflectionMetadataYieldFunctions":"https://developer.roblox.com/en-us/api-reference/class/ReflectionMetadataYieldFunctions","ReflectionService":"https://developer.roblox.com/en-us/api-reference/class/ReflectionService","RemoteCursorService":"https://developer.roblox.com/en-us/api-reference/class/RemoteCursorService","RemoteDebuggerServer":"https://developer.roblox.com/en-us/api-reference/class/RemoteDebuggerServer","RemoteFunction":"https://developer.roblox.com/en-us/api-reference/class/RemoteFunction","RenderSettings":"https://developer.roblox.com/en-us/api-reference/class/RenderSettings","RenderingTest":"https://developer.roblox.com/en-us/api-reference/class/RenderingTest","ReplicatedFirst":"https://developer.roblox.com/en-us/api-reference/class/ReplicatedFirst","ReplicatedStorage":"https://developer.roblox.com/en-us/api-reference/class/ReplicatedStorage","RibbonNotificationService":"https://developer.roblox.com/en-us/api-reference/class/RibbonNotificationService","RobloxPluginGuiService":"https://developer.roblox.com/en-us/api-reference/class/RobloxPluginGuiService","RobloxReplicatedStorage":"https://developer.roblox.com/en-us/api-reference/class/RobloxReplicatedStorage","RobloxServerStorage":"https://developer.roblox.com/en-us/api-reference/class/RobloxServerStorage","RomarkService":"https://developer.roblox.com/en-us/api-reference/class/RomarkService","RotationCurve":"https://developer.roblox.com/en-us/api-reference/class/RotationCurve","RtMessagingService":"https://developer.roblox.com/en-us/api-reference/class/RtMessagingService","RunService":"https://developer.roblox.com/en-us/api-reference/class/RunService","RuntimeScriptService":"https://developer.roblox.com/en-us/api-reference/class/RuntimeScriptService","SafetyService":"https://developer.roblox.com/en-us/api-reference/class/SafetyService","ScreenshotHud":"https://developer.roblox.com/en-us/api-reference/class/ScreenshotHud","ScriptBuilder":"https://developer.roblox.com/en-us/api-reference/class/ScriptBuilder","SyncScriptBuilder":"https://developer.roblox.com/en-us/api-reference/class/SyncScriptBuilder","ScriptChangeService":"https://developer.roblox.com/en-us/api-reference/class/ScriptChangeService","ScriptCloneWatcher":"https://developer.roblox.com/en-us/api-reference/class/ScriptCloneWatcher","ScriptCloneWatcherHelper":"https://developer.roblox.com/en-us/api-reference/class/ScriptCloneWatcherHelper","ScriptCommitService":"https://developer.roblox.com/en-us/api-reference/class/ScriptCommitService","ScriptContext":"https://developer.roblox.com/en-us/api-reference/class/ScriptContext","ScriptDebugger":"https://developer.roblox.com/en-us/api-reference/class/ScriptDebugger","ScriptDocument":"https://developer.roblox.com/en-us/api-reference/class/ScriptDocument","ScriptEditorService":"https://developer.roblox.com/en-us/api-reference/class/ScriptEditorService","ScriptProfilerService":"https://developer.roblox.com/en-us/api-reference/class/ScriptProfilerService","ScriptRegistrationService":"https://developer.roblox.com/en-us/api-reference/class/ScriptRegistrationService","ScriptRuntime":"https://developer.roblox.com/en-us/api-reference/class/ScriptRuntime","ScriptService":"https://developer.roblox.com/en-us/api-reference/class/ScriptService","Selection":"https://developer.roblox.com/en-us/api-reference/class/Selection","SelectionHighlightManager":"https://developer.roblox.com/en-us/api-reference/class/SelectionHighlightManager","SensorBase":"https://developer.roblox.com/en-us/api-reference/class/SensorBase","AtmosphereSensor":"https://developer.roblox.com/en-us/api-reference/class/AtmosphereSensor","BuoyancySensor":"https://developer.roblox.com/en-us/api-reference/class/BuoyancySensor","ControllerSensor":"https://developer.roblox.com/en-us/api-reference/class/ControllerSensor","ControllerPartSensor":"https://developer.roblox.com/en-us/api-reference/class/ControllerPartSensor","ServerScriptService":"https://developer.roblox.com/en-us/api-reference/class/ServerScriptService","ServerStorage":"https://developer.roblox.com/en-us/api-reference/class/ServerStorage","ServiceProvider":"https://developer.roblox.com/en-us/api-reference/class/ServiceProvider","DataModel":"https://developer.roblox.com/en-us/api-reference/class/DataModel","GenericSettings":"https://developer.roblox.com/en-us/api-reference/class/GenericSettings","AnalysticsSettings":"https://developer.roblox.com/en-us/api-reference/class/AnalysticsSettings","GlobalSettings":"https://developer.roblox.com/en-us/api-reference/class/GlobalSettings","UserSettings":"https://developer.roblox.com/en-us/api-reference/class/UserSettings","ServiceVisibilityService":"https://developer.roblox.com/en-us/api-reference/class/ServiceVisibilityService","SessionService":"https://developer.roblox.com/en-us/api-reference/class/SessionService","SharedTableRegistry":"https://developer.roblox.com/en-us/api-reference/class/SharedTableRegistry","ShorelineUpgraderService":"https://developer.roblox.com/en-us/api-reference/class/ShorelineUpgraderService","Sky":"https://developer.roblox.com/en-us/api-reference/class/Sky","Smoke":"https://developer.roblox.com/en-us/api-reference/class/Smoke","SmoothVoxelsUpgraderService":"https://developer.roblox.com/en-us/api-reference/class/SmoothVoxelsUpgraderService","SnippetService":"https://developer.roblox.com/en-us/api-reference/class/SnippetService","SocialService":"https://developer.roblox.com/en-us/api-reference/class/SocialService","Sound":"https://developer.roblox.com/en-us/api-reference/class/Sound","SoundEffect":"https://developer.roblox.com/en-us/api-reference/class/SoundEffect","ChorusSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/ChorusSoundEffect","CompressorSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/CompressorSoundEffect","CustomSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/CustomSoundEffect","AssetSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/AssetSoundEffect","ChannelSelectorSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/ChannelSelectorSoundEffect","DistortionSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/DistortionSoundEffect","EchoSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/EchoSoundEffect","EqualizerSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/EqualizerSoundEffect","FlangeSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/FlangeSoundEffect","PitchShiftSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/PitchShiftSoundEffect","ReverbSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/ReverbSoundEffect","TremoloSoundEffect":"https://developer.roblox.com/en-us/api-reference/class/TremoloSoundEffect","SoundGroup":"https://developer.roblox.com/en-us/api-reference/class/SoundGroup","SoundService":"https://developer.roblox.com/en-us/api-reference/class/SoundService","Sparkles":"https://developer.roblox.com/en-us/api-reference/class/Sparkles","SpawnerService":"https://developer.roblox.com/en-us/api-reference/class/SpawnerService","StackFrame":"https://developer.roblox.com/en-us/api-reference/class/StackFrame","StandalonePluginScripts":"https://developer.roblox.com/en-us/api-reference/class/StandalonePluginScripts","StarterGear":"https://developer.roblox.com/en-us/api-reference/class/StarterGear","StarterPack":"https://developer.roblox.com/en-us/api-reference/class/StarterPack","StarterPlayer":"https://developer.roblox.com/en-us/api-reference/class/StarterPlayer","StarterPlayerScripts":"https://developer.roblox.com/en-us/api-reference/class/StarterPlayerScripts","StarterCharacterScripts":"https://developer.roblox.com/en-us/api-reference/class/StarterCharacterScripts","StartupMessageService":"https://developer.roblox.com/en-us/api-reference/class/StartupMessageService","Stats":"https://developer.roblox.com/en-us/api-reference/class/Stats","StatsItem":"https://developer.roblox.com/en-us/api-reference/class/StatsItem","RunningAverageItemDouble":"https://developer.roblox.com/en-us/api-reference/class/RunningAverageItemDouble","RunningAverageItemInt":"https://developer.roblox.com/en-us/api-reference/class/RunningAverageItemInt","RunningAverageTimeIntervalItem":"https://developer.roblox.com/en-us/api-reference/class/RunningAverageTimeIntervalItem","TotalCountTimeIntervalItem":"https://developer.roblox.com/en-us/api-reference/class/TotalCountTimeIntervalItem","StopWatchReporter":"https://developer.roblox.com/en-us/api-reference/class/StopWatchReporter","StreamingService":"https://developer.roblox.com/en-us/api-reference/class/StreamingService","Studio":"https://developer.roblox.com/en-us/api-reference/class/Studio","StudioAssetService":"https://developer.roblox.com/en-us/api-reference/class/StudioAssetService","StudioAttachment":"https://developer.roblox.com/en-us/api-reference/class/StudioAttachment","StudioCallout":"https://developer.roblox.com/en-us/api-reference/class/StudioCallout","StudioData":"https://developer.roblox.com/en-us/api-reference/class/StudioData","StudioDeviceEmulatorService":"https://developer.roblox.com/en-us/api-reference/class/StudioDeviceEmulatorService","StudioObjectBase":"https://developer.roblox.com/en-us/api-reference/class/StudioObjectBase","StudioWidget":"https://developer.roblox.com/en-us/api-reference/class/StudioWidget","StudioPublishService":"https://developer.roblox.com/en-us/api-reference/class/StudioPublishService","StudioScriptDebugEventListener":"https://developer.roblox.com/en-us/api-reference/class/StudioScriptDebugEventListener","StudioSdkService":"https://developer.roblox.com/en-us/api-reference/class/StudioSdkService","StudioService":"https://developer.roblox.com/en-us/api-reference/class/StudioService","StudioTheme":"https://developer.roblox.com/en-us/api-reference/class/StudioTheme","StudioWidgetsService":"https://developer.roblox.com/en-us/api-reference/class/StudioWidgetsService","StyleBase":"https://developer.roblox.com/en-us/api-reference/class/StyleBase","StyleRule":"https://developer.roblox.com/en-us/api-reference/class/StyleRule","StyleSheet":"https://developer.roblox.com/en-us/api-reference/class/StyleSheet","StyleDerive":"https://developer.roblox.com/en-us/api-reference/class/StyleDerive","StyleLink":"https://developer.roblox.com/en-us/api-reference/class/StyleLink","StylingService":"https://developer.roblox.com/en-us/api-reference/class/StylingService","SurfaceAppearance":"https://developer.roblox.com/en-us/api-reference/class/SurfaceAppearance","TaskScheduler":"https://developer.roblox.com/en-us/api-reference/class/TaskScheduler","Team":"https://developer.roblox.com/en-us/api-reference/class/Team","TeamCreateData":"https://developer.roblox.com/en-us/api-reference/class/TeamCreateData","TeamCreatePublishService":"https://developer.roblox.com/en-us/api-reference/class/TeamCreatePublishService","TeamCreateService":"https://developer.roblox.com/en-us/api-reference/class/TeamCreateService","Teams":"https://developer.roblox.com/en-us/api-reference/class/Teams","TeleportAsyncResult":"https://developer.roblox.com/en-us/api-reference/class/TeleportAsyncResult","TeleportOptions":"https://developer.roblox.com/en-us/api-reference/class/TeleportOptions","TeleportService":"https://developer.roblox.com/en-us/api-reference/class/TeleportService","TemporaryCageMeshProvider":"https://developer.roblox.com/en-us/api-reference/class/TemporaryCageMeshProvider","TemporaryScriptService":"https://developer.roblox.com/en-us/api-reference/class/TemporaryScriptService","TerrainDetail":"https://developer.roblox.com/en-us/api-reference/class/TerrainDetail","TerrainRegion":"https://developer.roblox.com/en-us/api-reference/class/TerrainRegion","TestService":"https://developer.roblox.com/en-us/api-reference/class/TestService","TextBoxService":"https://developer.roblox.com/en-us/api-reference/class/TextBoxService","TextChannel":"https://developer.roblox.com/en-us/api-reference/class/TextChannel","TextChatCommand":"https://developer.roblox.com/en-us/api-reference/class/TextChatCommand","TextChatConfigurations":"https://developer.roblox.com/en-us/api-reference/class/TextChatConfigurations","BubbleChatConfiguration":"https://developer.roblox.com/en-us/api-reference/class/BubbleChatConfiguration","ChatInputBarConfiguration":"https://developer.roblox.com/en-us/api-reference/class/ChatInputBarConfiguration","ChatWindowConfiguration":"https://developer.roblox.com/en-us/api-reference/class/ChatWindowConfiguration","TextChatMessage":"https://developer.roblox.com/en-us/api-reference/class/TextChatMessage","TextChatMessageProperties":"https://developer.roblox.com/en-us/api-reference/class/TextChatMessageProperties","TextChatService":"https://developer.roblox.com/en-us/api-reference/class/TextChatService","TextFilterResult":"https://developer.roblox.com/en-us/api-reference/class/TextFilterResult","TextFilterTranslatedResult":"https://developer.roblox.com/en-us/api-reference/class/TextFilterTranslatedResult","TextService":"https://developer.roblox.com/en-us/api-reference/class/TextService","TextSource":"https://developer.roblox.com/en-us/api-reference/class/TextSource","TextureGenerationPartGroup":"https://developer.roblox.com/en-us/api-reference/class/TextureGenerationPartGroup","TextureGenerationService":"https://developer.roblox.com/en-us/api-reference/class/TextureGenerationService","TextureGenerationUnwrappingRequest":"https://developer.roblox.com/en-us/api-reference/class/TextureGenerationUnwrappingRequest","ThirdPartyUserService":"https://developer.roblox.com/en-us/api-reference/class/ThirdPartyUserService","ThreadState":"https://developer.roblox.com/en-us/api-reference/class/ThreadState","TimerService":"https://developer.roblox.com/en-us/api-reference/class/TimerService","ToastNotificationService":"https://developer.roblox.com/en-us/api-reference/class/ToastNotificationService","TouchInputService":"https://developer.roblox.com/en-us/api-reference/class/TouchInputService","TouchTransmitter":"https://developer.roblox.com/en-us/api-reference/class/TouchTransmitter","TracerService":"https://developer.roblox.com/en-us/api-reference/class/TracerService","TrackerLodController":"https://developer.roblox.com/en-us/api-reference/class/TrackerLodController","TrackerStreamAnimation":"https://developer.roblox.com/en-us/api-reference/class/TrackerStreamAnimation","Trail":"https://developer.roblox.com/en-us/api-reference/class/Trail","Translator":"https://developer.roblox.com/en-us/api-reference/class/Translator","TutorialService":"https://developer.roblox.com/en-us/api-reference/class/TutorialService","TweenBase":"https://developer.roblox.com/en-us/api-reference/class/TweenBase","Tween":"https://developer.roblox.com/en-us/api-reference/class/Tween","TweenService":"https://developer.roblox.com/en-us/api-reference/class/TweenService","UGCAvatarService":"https://developer.roblox.com/en-us/api-reference/class/UGCAvatarService","UGCValidationService":"https://developer.roblox.com/en-us/api-reference/class/UGCValidationService","UIBase":"https://developer.roblox.com/en-us/api-reference/class/UIBase","UIComponent":"https://developer.roblox.com/en-us/api-reference/class/UIComponent","UIConstraint":"https://developer.roblox.com/en-us/api-reference/class/UIConstraint","UIAspectRatioConstraint":"https://developer.roblox.com/en-us/api-reference/class/UIAspectRatioConstraint","UISizeConstraint":"https://developer.roblox.com/en-us/api-reference/class/UISizeConstraint","UITextSizeConstraint":"https://developer.roblox.com/en-us/api-reference/class/UITextSizeConstraint","UICorner":"https://developer.roblox.com/en-us/api-reference/class/UICorner","UIDragDetector":"https://developer.roblox.com/en-us/api-reference/class/UIDragDetector","UIFlexItem":"https://developer.roblox.com/en-us/api-reference/class/UIFlexItem","UIGradient":"https://developer.roblox.com/en-us/api-reference/class/UIGradient","UILayout":"https://developer.roblox.com/en-us/api-reference/class/UILayout","UIGridStyleLayout":"https://developer.roblox.com/en-us/api-reference/class/UIGridStyleLayout","UIGridLayout":"https://developer.roblox.com/en-us/api-reference/class/UIGridLayout","UIListLayout":"https://developer.roblox.com/en-us/api-reference/class/UIListLayout","UIPageLayout":"https://developer.roblox.com/en-us/api-reference/class/UIPageLayout","UITableLayout":"https://developer.roblox.com/en-us/api-reference/class/UITableLayout","UIPadding":"https://developer.roblox.com/en-us/api-reference/class/UIPadding","UIScale":"https://developer.roblox.com/en-us/api-reference/class/UIScale","UIStroke":"https://developer.roblox.com/en-us/api-reference/class/UIStroke","UIDragDetectorService":"https://developer.roblox.com/en-us/api-reference/class/UIDragDetectorService","UnvalidatedAssetService":"https://developer.roblox.com/en-us/api-reference/class/UnvalidatedAssetService","UserGameSettings":"https://developer.roblox.com/en-us/api-reference/class/UserGameSettings","UserInputService":"https://developer.roblox.com/en-us/api-reference/class/UserInputService","UserService":"https://developer.roblox.com/en-us/api-reference/class/UserService","VRService":"https://developer.roblox.com/en-us/api-reference/class/VRService","VRStatusService":"https://developer.roblox.com/en-us/api-reference/class/VRStatusService","ValueBase":"https://developer.roblox.com/en-us/api-reference/class/ValueBase","BinaryStringValue":"https://developer.roblox.com/en-us/api-reference/class/BinaryStringValue","BoolValue":"https://developer.roblox.com/en-us/api-reference/class/BoolValue","BrickColorValue":"https://developer.roblox.com/en-us/api-reference/class/BrickColorValue","CFrameValue":"https://developer.roblox.com/en-us/api-reference/class/CFrameValue","Color3Value":"https://developer.roblox.com/en-us/api-reference/class/Color3Value","DoubleConstrainedValue":"https://developer.roblox.com/en-us/api-reference/class/DoubleConstrainedValue","IntConstrainedValue":"https://developer.roblox.com/en-us/api-reference/class/IntConstrainedValue","IntValue":"https://developer.roblox.com/en-us/api-reference/class/IntValue","NumberValue":"https://developer.roblox.com/en-us/api-reference/class/NumberValue","ObjectValue":"https://developer.roblox.com/en-us/api-reference/class/ObjectValue","RayValue":"https://developer.roblox.com/en-us/api-reference/class/RayValue","StringValue":"https://developer.roblox.com/en-us/api-reference/class/StringValue","Vector3Value":"https://developer.roblox.com/en-us/api-reference/class/Vector3Value","Vector3Curve":"https://developer.roblox.com/en-us/api-reference/class/Vector3Curve","VersionControlService":"https://developer.roblox.com/en-us/api-reference/class/VersionControlService","VideoCaptureService":"https://developer.roblox.com/en-us/api-reference/class/VideoCaptureService","VideoDeviceInput":"https://developer.roblox.com/en-us/api-reference/class/VideoDeviceInput","VideoService":"https://developer.roblox.com/en-us/api-reference/class/VideoService","VirtualInputManager":"https://developer.roblox.com/en-us/api-reference/class/VirtualInputManager","VirtualUser":"https://developer.roblox.com/en-us/api-reference/class/VirtualUser","VisibilityCheckDispatcher":"https://developer.roblox.com/en-us/api-reference/class/VisibilityCheckDispatcher","Visit":"https://developer.roblox.com/en-us/api-reference/class/Visit","VisualizationMode":"https://developer.roblox.com/en-us/api-reference/class/VisualizationMode","VisualizationModeCategory":"https://developer.roblox.com/en-us/api-reference/class/VisualizationModeCategory","VisualizationModeService":"https://developer.roblox.com/en-us/api-reference/class/VisualizationModeService","VoiceChatInternal":"https://developer.roblox.com/en-us/api-reference/class/VoiceChatInternal","VoiceChatService":"https://developer.roblox.com/en-us/api-reference/class/VoiceChatService","WeldConstraint":"https://developer.roblox.com/en-us/api-reference/class/WeldConstraint","Wire":"https://developer.roblox.com/en-us/api-reference/class/Wire","AccessModifierType":"https://developer.roblox.com/en-us/api-reference/enum/AccessModifierType","AccessoryType":"https://developer.roblox.com/en-us/api-reference/enum/AccessoryType","ActionType":"https://developer.roblox.com/en-us/api-reference/enum/ActionType","ActuatorRelativeTo":"https://developer.roblox.com/en-us/api-reference/enum/ActuatorRelativeTo","ActuatorType":"https://developer.roblox.com/en-us/api-reference/enum/ActuatorType","AdEventType":"https://developer.roblox.com/en-us/api-reference/enum/AdEventType","AdShape":"https://developer.roblox.com/en-us/api-reference/enum/AdShape","AdTeleportMethod":"https://developer.roblox.com/en-us/api-reference/enum/AdTeleportMethod","AdUIEventType":"https://developer.roblox.com/en-us/api-reference/enum/AdUIEventType","AdUIType":"https://developer.roblox.com/en-us/api-reference/enum/AdUIType","AdUnitStatus":"https://developer.roblox.com/en-us/api-reference/enum/AdUnitStatus","AdornCullingMode":"https://developer.roblox.com/en-us/api-reference/enum/AdornCullingMode","AlignType":"https://developer.roblox.com/en-us/api-reference/enum/AlignType","AlphaMode":"https://developer.roblox.com/en-us/api-reference/enum/AlphaMode","AnalyticsCustomFieldKeys":"https://developer.roblox.com/en-us/api-reference/enum/AnalyticsCustomFieldKeys","AnalyticsEconomyAction":"https://developer.roblox.com/en-us/api-reference/enum/AnalyticsEconomyAction","AnalyticsEconomyFlowType":"https://developer.roblox.com/en-us/api-reference/enum/AnalyticsEconomyFlowType","AnalyticsEconomyTransactionType":"https://developer.roblox.com/en-us/api-reference/enum/AnalyticsEconomyTransactionType","AnalyticsLogLevel":"https://developer.roblox.com/en-us/api-reference/enum/AnalyticsLogLevel","AnalyticsProgressionStatus":"https://developer.roblox.com/en-us/api-reference/enum/AnalyticsProgressionStatus","AnalyticsProgressionType":"https://developer.roblox.com/en-us/api-reference/enum/AnalyticsProgressionType","AnimationClipFromVideoStatus":"https://developer.roblox.com/en-us/api-reference/enum/AnimationClipFromVideoStatus","AnimationPriority":"https://developer.roblox.com/en-us/api-reference/enum/AnimationPriority","AnimatorRetargetingMode":"https://developer.roblox.com/en-us/api-reference/enum/AnimatorRetargetingMode","AppShellActionType":"https://developer.roblox.com/en-us/api-reference/enum/AppShellActionType","AppShellFeature":"https://developer.roblox.com/en-us/api-reference/enum/AppShellFeature","AppUpdateStatus":"https://developer.roblox.com/en-us/api-reference/enum/AppUpdateStatus","ApplyStrokeMode":"https://developer.roblox.com/en-us/api-reference/enum/ApplyStrokeMode","AspectType":"https://developer.roblox.com/en-us/api-reference/enum/AspectType","AssetCreatorType":"https://developer.roblox.com/en-us/api-reference/enum/AssetCreatorType","AssetFetchStatus":"https://developer.roblox.com/en-us/api-reference/enum/AssetFetchStatus","AssetType":"https://developer.roblox.com/en-us/api-reference/enum/AssetType","AssetTypeVerification":"https://developer.roblox.com/en-us/api-reference/enum/AssetTypeVerification","AudioApiRollout":"https://developer.roblox.com/en-us/api-reference/enum/AudioApiRollout","AudioFilterType":"https://developer.roblox.com/en-us/api-reference/enum/AudioFilterType","AudioSubType":"https://developer.roblox.com/en-us/api-reference/enum/AudioSubType","AudioWindowSize":"https://developer.roblox.com/en-us/api-reference/enum/AudioWindowSize","AutoIndentRule":"https://developer.roblox.com/en-us/api-reference/enum/AutoIndentRule","AutomaticSize":"https://developer.roblox.com/en-us/api-reference/enum/AutomaticSize","AvatarAssetType":"https://developer.roblox.com/en-us/api-reference/enum/AvatarAssetType","AvatarChatServiceFeature":"https://developer.roblox.com/en-us/api-reference/enum/AvatarChatServiceFeature","AvatarContextMenuOption":"https://developer.roblox.com/en-us/api-reference/enum/AvatarContextMenuOption","AvatarGenerationError":"https://developer.roblox.com/en-us/api-reference/enum/AvatarGenerationError","AvatarGenerationJobStatus":"https://developer.roblox.com/en-us/api-reference/enum/AvatarGenerationJobStatus","AvatarItemType":"https://developer.roblox.com/en-us/api-reference/enum/AvatarItemType","AvatarJointUpgrade":"https://developer.roblox.com/en-us/api-reference/enum/AvatarJointUpgrade","AvatarPromptResult":"https://developer.roblox.com/en-us/api-reference/enum/AvatarPromptResult","AvatarThumbnailCustomizationType":"https://developer.roblox.com/en-us/api-reference/enum/AvatarThumbnailCustomizationType","AvatarUnificationMode":"https://developer.roblox.com/en-us/api-reference/enum/AvatarUnificationMode","Axis":"https://developer.roblox.com/en-us/api-reference/enum/Axis","BinType":"https://developer.roblox.com/en-us/api-reference/enum/BinType","BodyPart":"https://developer.roblox.com/en-us/api-reference/enum/BodyPart","BodyPartR15":"https://developer.roblox.com/en-us/api-reference/enum/BodyPartR15","BorderMode":"https://developer.roblox.com/en-us/api-reference/enum/BorderMode","BreakReason":"https://developer.roblox.com/en-us/api-reference/enum/BreakReason","BreakpointRemoveReason":"https://developer.roblox.com/en-us/api-reference/enum/BreakpointRemoveReason","BulkMoveMode":"https://developer.roblox.com/en-us/api-reference/enum/BulkMoveMode","BundleType":"https://developer.roblox.com/en-us/api-reference/enum/BundleType","Button":"https://developer.roblox.com/en-us/api-reference/enum/Button","ButtonStyle":"https://developer.roblox.com/en-us/api-reference/enum/ButtonStyle","CSGAsyncDynamicCollision":"https://developer.roblox.com/en-us/api-reference/enum/CSGAsyncDynamicCollision","CageType":"https://developer.roblox.com/en-us/api-reference/enum/CageType","CameraMode":"https://developer.roblox.com/en-us/api-reference/enum/CameraMode","CameraPanMode":"https://developer.roblox.com/en-us/api-reference/enum/CameraPanMode","CameraSpeedAdjustBinding":"https://developer.roblox.com/en-us/api-reference/enum/CameraSpeedAdjustBinding","CameraType":"https://developer.roblox.com/en-us/api-reference/enum/CameraType","CatalogCategoryFilter":"https://developer.roblox.com/en-us/api-reference/enum/CatalogCategoryFilter","CatalogSortAggregation":"https://developer.roblox.com/en-us/api-reference/enum/CatalogSortAggregation","CatalogSortType":"https://developer.roblox.com/en-us/api-reference/enum/CatalogSortType","CellBlock":"https://developer.roblox.com/en-us/api-reference/enum/CellBlock","CellMaterial":"https://developer.roblox.com/en-us/api-reference/enum/CellMaterial","CellOrientation":"https://developer.roblox.com/en-us/api-reference/enum/CellOrientation","CenterDialogType":"https://developer.roblox.com/en-us/api-reference/enum/CenterDialogType","CharacterControlMode":"https://developer.roblox.com/en-us/api-reference/enum/CharacterControlMode","ChatCallbackType":"https://developer.roblox.com/en-us/api-reference/enum/ChatCallbackType","ChatColor":"https://developer.roblox.com/en-us/api-reference/enum/ChatColor","ChatMode":"https://developer.roblox.com/en-us/api-reference/enum/ChatMode","ChatPrivacyMode":"https://developer.roblox.com/en-us/api-reference/enum/ChatPrivacyMode","ChatStyle":"https://developer.roblox.com/en-us/api-reference/enum/ChatStyle","ChatVersion":"https://developer.roblox.com/en-us/api-reference/enum/ChatVersion","ClientAnimatorThrottlingMode":"https://developer.roblox.com/en-us/api-reference/enum/ClientAnimatorThrottlingMode","CollaboratorStatus":"https://developer.roblox.com/en-us/api-reference/enum/CollaboratorStatus","CollisionFidelity":"https://developer.roblox.com/en-us/api-reference/enum/CollisionFidelity","CommandPermission":"https://developer.roblox.com/en-us/api-reference/enum/CommandPermission","CompileTarget":"https://developer.roblox.com/en-us/api-reference/enum/CompileTarget","CompletionItemKind":"https://developer.roblox.com/en-us/api-reference/enum/CompletionItemKind","CompletionItemTag":"https://developer.roblox.com/en-us/api-reference/enum/CompletionItemTag","CompletionTriggerKind":"https://developer.roblox.com/en-us/api-reference/enum/CompletionTriggerKind","ComputerCameraMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/ComputerCameraMovementMode","ComputerMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/ComputerMovementMode","ConnectionError":"https://developer.roblox.com/en-us/api-reference/enum/ConnectionError","ConnectionState":"https://developer.roblox.com/en-us/api-reference/enum/ConnectionState","ContextActionPriority":"https://developer.roblox.com/en-us/api-reference/enum/ContextActionPriority","ContextActionResult":"https://developer.roblox.com/en-us/api-reference/enum/ContextActionResult","ControlMode":"https://developer.roblox.com/en-us/api-reference/enum/ControlMode","CoreGuiType":"https://developer.roblox.com/en-us/api-reference/enum/CoreGuiType","CreateOutfitFailure":"https://developer.roblox.com/en-us/api-reference/enum/CreateOutfitFailure","CreatorType":"https://developer.roblox.com/en-us/api-reference/enum/CreatorType","CreatorTypeFilter":"https://developer.roblox.com/en-us/api-reference/enum/CreatorTypeFilter","CurrencyType":"https://developer.roblox.com/en-us/api-reference/enum/CurrencyType","CustomCameraMode":"https://developer.roblox.com/en-us/api-reference/enum/CustomCameraMode","DataStoreRequestType":"https://developer.roblox.com/en-us/api-reference/enum/DataStoreRequestType","DebuggerEndReason":"https://developer.roblox.com/en-us/api-reference/enum/DebuggerEndReason","DebuggerExceptionBreakMode":"https://developer.roblox.com/en-us/api-reference/enum/DebuggerExceptionBreakMode","DebuggerFrameType":"https://developer.roblox.com/en-us/api-reference/enum/DebuggerFrameType","DebuggerPauseReason":"https://developer.roblox.com/en-us/api-reference/enum/DebuggerPauseReason","DebuggerStatus":"https://developer.roblox.com/en-us/api-reference/enum/DebuggerStatus","DecreaseMinimumPartDensityMode":"https://developer.roblox.com/en-us/api-reference/enum/DecreaseMinimumPartDensityMode","DevCameraOcclusionMode":"https://developer.roblox.com/en-us/api-reference/enum/DevCameraOcclusionMode","DevComputerCameraMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/DevComputerCameraMovementMode","DevComputerMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/DevComputerMovementMode","DevTouchCameraMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/DevTouchCameraMovementMode","DevTouchMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/DevTouchMovementMode","DeveloperMemoryTag":"https://developer.roblox.com/en-us/api-reference/enum/DeveloperMemoryTag","DeviceFeatureType":"https://developer.roblox.com/en-us/api-reference/enum/DeviceFeatureType","DeviceType":"https://developer.roblox.com/en-us/api-reference/enum/DeviceType","DialogBehaviorType":"https://developer.roblox.com/en-us/api-reference/enum/DialogBehaviorType","DialogPurpose":"https://developer.roblox.com/en-us/api-reference/enum/DialogPurpose","DialogTone":"https://developer.roblox.com/en-us/api-reference/enum/DialogTone","DominantAxis":"https://developer.roblox.com/en-us/api-reference/enum/DominantAxis","DraftStatusCode":"https://developer.roblox.com/en-us/api-reference/enum/DraftStatusCode","DragDetectorDragStyle":"https://developer.roblox.com/en-us/api-reference/enum/DragDetectorDragStyle","DragDetectorPermissionPolicy":"https://developer.roblox.com/en-us/api-reference/enum/DragDetectorPermissionPolicy","DragDetectorResponseStyle":"https://developer.roblox.com/en-us/api-reference/enum/DragDetectorResponseStyle","DraggerCoordinateSpace":"https://developer.roblox.com/en-us/api-reference/enum/DraggerCoordinateSpace","DraggerMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/DraggerMovementMode","EasingDirection":"https://developer.roblox.com/en-us/api-reference/enum/EasingDirection","EasingStyle":"https://developer.roblox.com/en-us/api-reference/enum/EasingStyle","ElasticBehavior":"https://developer.roblox.com/en-us/api-reference/enum/ElasticBehavior","EnviromentalPhysicsThrottle":"https://developer.roblox.com/en-us/api-reference/enum/EnviromentalPhysicsThrottle","ExperienceAuthScope":"https://developer.roblox.com/en-us/api-reference/enum/ExperienceAuthScope","ExplosionType":"https://developer.roblox.com/en-us/api-reference/enum/ExplosionType","FACSDataLod":"https://developer.roblox.com/en-us/api-reference/enum/FACSDataLod","FacialAnimationStreamingState":"https://developer.roblox.com/en-us/api-reference/enum/FacialAnimationStreamingState","FieldOfViewMode":"https://developer.roblox.com/en-us/api-reference/enum/FieldOfViewMode","FillDirection":"https://developer.roblox.com/en-us/api-reference/enum/FillDirection","FilterResult":"https://developer.roblox.com/en-us/api-reference/enum/FilterResult","FinishRecordingOperation":"https://developer.roblox.com/en-us/api-reference/enum/FinishRecordingOperation","FluidFidelity":"https://developer.roblox.com/en-us/api-reference/enum/FluidFidelity","FluidForces":"https://developer.roblox.com/en-us/api-reference/enum/FluidForces","Font":"https://developer.roblox.com/en-us/api-reference/enum/Font","FontSize":"https://developer.roblox.com/en-us/api-reference/enum/FontSize","FontStyle":"https://developer.roblox.com/en-us/api-reference/enum/FontStyle","FontWeight":"https://developer.roblox.com/en-us/api-reference/enum/FontWeight","ForceLimitMode":"https://developer.roblox.com/en-us/api-reference/enum/ForceLimitMode","FormFactor":"https://developer.roblox.com/en-us/api-reference/enum/FormFactor","FrameStyle":"https://developer.roblox.com/en-us/api-reference/enum/FrameStyle","FramerateManagerMode":"https://developer.roblox.com/en-us/api-reference/enum/FramerateManagerMode","FriendRequestEvent":"https://developer.roblox.com/en-us/api-reference/enum/FriendRequestEvent","FriendStatus":"https://developer.roblox.com/en-us/api-reference/enum/FriendStatus","FunctionalTestResult":"https://developer.roblox.com/en-us/api-reference/enum/FunctionalTestResult","GameAvatarType":"https://developer.roblox.com/en-us/api-reference/enum/GameAvatarType","GamepadType":"https://developer.roblox.com/en-us/api-reference/enum/GamepadType","GearGenreSetting":"https://developer.roblox.com/en-us/api-reference/enum/GearGenreSetting","GearType":"https://developer.roblox.com/en-us/api-reference/enum/GearType","Genre":"https://developer.roblox.com/en-us/api-reference/enum/Genre","GraphicsMode":"https://developer.roblox.com/en-us/api-reference/enum/GraphicsMode","GuiState":"https://developer.roblox.com/en-us/api-reference/enum/GuiState","GuiType":"https://developer.roblox.com/en-us/api-reference/enum/GuiType","HandlesStyle":"https://developer.roblox.com/en-us/api-reference/enum/HandlesStyle","HighlightDepthMode":"https://developer.roblox.com/en-us/api-reference/enum/HighlightDepthMode","HorizontalAlignment":"https://developer.roblox.com/en-us/api-reference/enum/HorizontalAlignment","HoverAnimateSpeed":"https://developer.roblox.com/en-us/api-reference/enum/HoverAnimateSpeed","HttpCachePolicy":"https://developer.roblox.com/en-us/api-reference/enum/HttpCachePolicy","HttpCompression":"https://developer.roblox.com/en-us/api-reference/enum/HttpCompression","HttpContentType":"https://developer.roblox.com/en-us/api-reference/enum/HttpContentType","HttpError":"https://developer.roblox.com/en-us/api-reference/enum/HttpError","HttpRequestType":"https://developer.roblox.com/en-us/api-reference/enum/HttpRequestType","HumanoidCollisionType":"https://developer.roblox.com/en-us/api-reference/enum/HumanoidCollisionType","HumanoidDisplayDistanceType":"https://developer.roblox.com/en-us/api-reference/enum/HumanoidDisplayDistanceType","HumanoidHealthDisplayType":"https://developer.roblox.com/en-us/api-reference/enum/HumanoidHealthDisplayType","HumanoidRigType":"https://developer.roblox.com/en-us/api-reference/enum/HumanoidRigType","HumanoidStateType":"https://developer.roblox.com/en-us/api-reference/enum/HumanoidStateType","IKCollisionsMode":"https://developer.roblox.com/en-us/api-reference/enum/IKCollisionsMode","IKControlConstraintSupport":"https://developer.roblox.com/en-us/api-reference/enum/IKControlConstraintSupport","IKControlType":"https://developer.roblox.com/en-us/api-reference/enum/IKControlType","IXPLoadingStatus":"https://developer.roblox.com/en-us/api-reference/enum/IXPLoadingStatus","ImageAlphaType":"https://developer.roblox.com/en-us/api-reference/enum/ImageAlphaType","ImageCombineType":"https://developer.roblox.com/en-us/api-reference/enum/ImageCombineType","InOut":"https://developer.roblox.com/en-us/api-reference/enum/InOut","InfoType":"https://developer.roblox.com/en-us/api-reference/enum/InfoType","InitialDockState":"https://developer.roblox.com/en-us/api-reference/enum/InitialDockState","InputType":"https://developer.roblox.com/en-us/api-reference/enum/InputType","InterpolationThrottlingMode":"https://developer.roblox.com/en-us/api-reference/enum/InterpolationThrottlingMode","InviteState":"https://developer.roblox.com/en-us/api-reference/enum/InviteState","ItemLineAlignment":"https://developer.roblox.com/en-us/api-reference/enum/ItemLineAlignment","JoinSource":"https://developer.roblox.com/en-us/api-reference/enum/JoinSource","JointCreationMode":"https://developer.roblox.com/en-us/api-reference/enum/JointCreationMode","KeyCode":"https://developer.roblox.com/en-us/api-reference/enum/KeyCode","KeyInterpolationMode":"https://developer.roblox.com/en-us/api-reference/enum/KeyInterpolationMode","KeywordFilterType":"https://developer.roblox.com/en-us/api-reference/enum/KeywordFilterType","Language":"https://developer.roblox.com/en-us/api-reference/enum/Language","LeftRight":"https://developer.roblox.com/en-us/api-reference/enum/LeftRight","Limb":"https://developer.roblox.com/en-us/api-reference/enum/Limb","LineJoinMode":"https://developer.roblox.com/en-us/api-reference/enum/LineJoinMode","ListDisplayMode":"https://developer.roblox.com/en-us/api-reference/enum/ListDisplayMode","ListenerType":"https://developer.roblox.com/en-us/api-reference/enum/ListenerType","LiveEditingAtomicUpdateResponse":"https://developer.roblox.com/en-us/api-reference/enum/LiveEditingAtomicUpdateResponse","LiveEditingBroadcastMessageType":"https://developer.roblox.com/en-us/api-reference/enum/LiveEditingBroadcastMessageType","LoadCharacterLayeredClothing":"https://developer.roblox.com/en-us/api-reference/enum/LoadCharacterLayeredClothing","LoadDynamicHeads":"https://developer.roblox.com/en-us/api-reference/enum/LoadDynamicHeads","MarketplaceBulkPurchasePromptStatus":"https://developer.roblox.com/en-us/api-reference/enum/MarketplaceBulkPurchasePromptStatus","MarketplaceItemPurchaseStatus":"https://developer.roblox.com/en-us/api-reference/enum/MarketplaceItemPurchaseStatus","MarketplaceProductType":"https://developer.roblox.com/en-us/api-reference/enum/MarketplaceProductType","MarkupKind":"https://developer.roblox.com/en-us/api-reference/enum/MarkupKind","Material":"https://developer.roblox.com/en-us/api-reference/enum/Material","MaterialPattern":"https://developer.roblox.com/en-us/api-reference/enum/MaterialPattern","MembershipType":"https://developer.roblox.com/en-us/api-reference/enum/MembershipType","MeshPartDetailLevel":"https://developer.roblox.com/en-us/api-reference/enum/MeshPartDetailLevel","MeshPartHeadsAndAccessories":"https://developer.roblox.com/en-us/api-reference/enum/MeshPartHeadsAndAccessories","MeshScaleUnit":"https://developer.roblox.com/en-us/api-reference/enum/MeshScaleUnit","MeshType":"https://developer.roblox.com/en-us/api-reference/enum/MeshType","MessageType":"https://developer.roblox.com/en-us/api-reference/enum/MessageType","ModelLevelOfDetail":"https://developer.roblox.com/en-us/api-reference/enum/ModelLevelOfDetail","ModelStreamingBehavior":"https://developer.roblox.com/en-us/api-reference/enum/ModelStreamingBehavior","ModelStreamingMode":"https://developer.roblox.com/en-us/api-reference/enum/ModelStreamingMode","ModerationStatus":"https://developer.roblox.com/en-us/api-reference/enum/ModerationStatus","ModifierKey":"https://developer.roblox.com/en-us/api-reference/enum/ModifierKey","MouseBehavior":"https://developer.roblox.com/en-us/api-reference/enum/MouseBehavior","MoveState":"https://developer.roblox.com/en-us/api-reference/enum/MoveState","MoverConstraintRootBehaviorMode":"https://developer.roblox.com/en-us/api-reference/enum/MoverConstraintRootBehaviorMode","MuteState":"https://developer.roblox.com/en-us/api-reference/enum/MuteState","NameOcclusion":"https://developer.roblox.com/en-us/api-reference/enum/NameOcclusion","NetworkOwnership":"https://developer.roblox.com/en-us/api-reference/enum/NetworkOwnership","NetworkStatus":"https://developer.roblox.com/en-us/api-reference/enum/NetworkStatus","NoiseType":"https://developer.roblox.com/en-us/api-reference/enum/NoiseType","NormalId":"https://developer.roblox.com/en-us/api-reference/enum/NormalId","OperationType":"https://developer.roblox.com/en-us/api-reference/enum/OperationType","OrientationAlignmentMode":"https://developer.roblox.com/en-us/api-reference/enum/OrientationAlignmentMode","OutfitSource":"https://developer.roblox.com/en-us/api-reference/enum/OutfitSource","OutfitType":"https://developer.roblox.com/en-us/api-reference/enum/OutfitType","OutputLayoutMode":"https://developer.roblox.com/en-us/api-reference/enum/OutputLayoutMode","OverrideMouseIconBehavior":"https://developer.roblox.com/en-us/api-reference/enum/OverrideMouseIconBehavior","PackagePermission":"https://developer.roblox.com/en-us/api-reference/enum/PackagePermission","PartType":"https://developer.roblox.com/en-us/api-reference/enum/PartType","ParticleEmitterShape":"https://developer.roblox.com/en-us/api-reference/enum/ParticleEmitterShape","ParticleEmitterShapeInOut":"https://developer.roblox.com/en-us/api-reference/enum/ParticleEmitterShapeInOut","ParticleEmitterShapeStyle":"https://developer.roblox.com/en-us/api-reference/enum/ParticleEmitterShapeStyle","ParticleFlipbookLayout":"https://developer.roblox.com/en-us/api-reference/enum/ParticleFlipbookLayout","ParticleFlipbookMode":"https://developer.roblox.com/en-us/api-reference/enum/ParticleFlipbookMode","ParticleFlipbookTextureCompatible":"https://developer.roblox.com/en-us/api-reference/enum/ParticleFlipbookTextureCompatible","ParticleOrientation":"https://developer.roblox.com/en-us/api-reference/enum/ParticleOrientation","PathStatus":"https://developer.roblox.com/en-us/api-reference/enum/PathStatus","PathWaypointAction":"https://developer.roblox.com/en-us/api-reference/enum/PathWaypointAction","PermissionLevelShown":"https://developer.roblox.com/en-us/api-reference/enum/PermissionLevelShown","PhysicsSimulationRate":"https://developer.roblox.com/en-us/api-reference/enum/PhysicsSimulationRate","PhysicsSteppingMethod":"https://developer.roblox.com/en-us/api-reference/enum/PhysicsSteppingMethod","PlaybackState":"https://developer.roblox.com/en-us/api-reference/enum/PlaybackState","PlayerActions":"https://developer.roblox.com/en-us/api-reference/enum/PlayerActions","PlayerCharacterDestroyBehavior":"https://developer.roblox.com/en-us/api-reference/enum/PlayerCharacterDestroyBehavior","PlayerChatType":"https://developer.roblox.com/en-us/api-reference/enum/PlayerChatType","PoseEasingDirection":"https://developer.roblox.com/en-us/api-reference/enum/PoseEasingDirection","PoseEasingStyle":"https://developer.roblox.com/en-us/api-reference/enum/PoseEasingStyle","PositionAlignmentMode":"https://developer.roblox.com/en-us/api-reference/enum/PositionAlignmentMode","PreferredTextSize":"https://developer.roblox.com/en-us/api-reference/enum/PreferredTextSize","PrimalPhysicsSolver":"https://developer.roblox.com/en-us/api-reference/enum/PrimalPhysicsSolver","PrimitiveType":"https://developer.roblox.com/en-us/api-reference/enum/PrimitiveType","PrivilegeType":"https://developer.roblox.com/en-us/api-reference/enum/PrivilegeType","ProductLocationRestriction":"https://developer.roblox.com/en-us/api-reference/enum/ProductLocationRestriction","ProductPurchaseDecision":"https://developer.roblox.com/en-us/api-reference/enum/ProductPurchaseDecision","PromptCreateAssetResult":"https://developer.roblox.com/en-us/api-reference/enum/PromptCreateAssetResult","PromptCreateAvatarResult":"https://developer.roblox.com/en-us/api-reference/enum/PromptCreateAvatarResult","PromptPublishAssetResult":"https://developer.roblox.com/en-us/api-reference/enum/PromptPublishAssetResult","PropertyStatus":"https://developer.roblox.com/en-us/api-reference/enum/PropertyStatus","ProximityPromptExclusivity":"https://developer.roblox.com/en-us/api-reference/enum/ProximityPromptExclusivity","ProximityPromptInputType":"https://developer.roblox.com/en-us/api-reference/enum/ProximityPromptInputType","ProximityPromptStyle":"https://developer.roblox.com/en-us/api-reference/enum/ProximityPromptStyle","QualityLevel":"https://developer.roblox.com/en-us/api-reference/enum/QualityLevel","R15CollisionType":"https://developer.roblox.com/en-us/api-reference/enum/R15CollisionType","RaycastFilterType":"https://developer.roblox.com/en-us/api-reference/enum/RaycastFilterType","RejectCharacterDeletions":"https://developer.roblox.com/en-us/api-reference/enum/RejectCharacterDeletions","RenderFidelity":"https://developer.roblox.com/en-us/api-reference/enum/RenderFidelity","RenderPriority":"https://developer.roblox.com/en-us/api-reference/enum/RenderPriority","RenderingCacheOptimizationMode":"https://developer.roblox.com/en-us/api-reference/enum/RenderingCacheOptimizationMode","RenderingTestComparisonMethod":"https://developer.roblox.com/en-us/api-reference/enum/RenderingTestComparisonMethod","ReplicateInstanceDestroySetting":"https://developer.roblox.com/en-us/api-reference/enum/ReplicateInstanceDestroySetting","ResamplerMode":"https://developer.roblox.com/en-us/api-reference/enum/ResamplerMode","ReservedHighlightId":"https://developer.roblox.com/en-us/api-reference/enum/ReservedHighlightId","RestPose":"https://developer.roblox.com/en-us/api-reference/enum/RestPose","ReturnKeyType":"https://developer.roblox.com/en-us/api-reference/enum/ReturnKeyType","ReverbType":"https://developer.roblox.com/en-us/api-reference/enum/ReverbType","RibbonTool":"https://developer.roblox.com/en-us/api-reference/enum/RibbonTool","RigScale":"https://developer.roblox.com/en-us/api-reference/enum/RigScale","RigType":"https://developer.roblox.com/en-us/api-reference/enum/RigType","RollOffMode":"https://developer.roblox.com/en-us/api-reference/enum/RollOffMode","RotationOrder":"https://developer.roblox.com/en-us/api-reference/enum/RotationOrder","RotationType":"https://developer.roblox.com/en-us/api-reference/enum/RotationType","RtlTextSupport":"https://developer.roblox.com/en-us/api-reference/enum/RtlTextSupport","RunContext":"https://developer.roblox.com/en-us/api-reference/enum/RunContext","RunState":"https://developer.roblox.com/en-us/api-reference/enum/RunState","RuntimeUndoBehavior":"https://developer.roblox.com/en-us/api-reference/enum/RuntimeUndoBehavior","SafeAreaCompatibility":"https://developer.roblox.com/en-us/api-reference/enum/SafeAreaCompatibility","SalesTypeFilter":"https://developer.roblox.com/en-us/api-reference/enum/SalesTypeFilter","SaveAvatarThumbnailCustomizationFailure":"https://developer.roblox.com/en-us/api-reference/enum/SaveAvatarThumbnailCustomizationFailure","SaveFilter":"https://developer.roblox.com/en-us/api-reference/enum/SaveFilter","SavedQualitySetting":"https://developer.roblox.com/en-us/api-reference/enum/SavedQualitySetting","ScaleType":"https://developer.roblox.com/en-us/api-reference/enum/ScaleType","ScopeCheckResult":"https://developer.roblox.com/en-us/api-reference/enum/ScopeCheckResult","ScreenInsets":"https://developer.roblox.com/en-us/api-reference/enum/ScreenInsets","ScreenOrientation":"https://developer.roblox.com/en-us/api-reference/enum/ScreenOrientation","ScrollBarInset":"https://developer.roblox.com/en-us/api-reference/enum/ScrollBarInset","ScrollingDirection":"https://developer.roblox.com/en-us/api-reference/enum/ScrollingDirection","SelectionBehavior":"https://developer.roblox.com/en-us/api-reference/enum/SelectionBehavior","SelectionRenderMode":"https://developer.roblox.com/en-us/api-reference/enum/SelectionRenderMode","SelfViewPosition":"https://developer.roblox.com/en-us/api-reference/enum/SelfViewPosition","SensorMode":"https://developer.roblox.com/en-us/api-reference/enum/SensorMode","SensorUpdateType":"https://developer.roblox.com/en-us/api-reference/enum/SensorUpdateType","ServerLiveEditingMode":"https://developer.roblox.com/en-us/api-reference/enum/ServerLiveEditingMode","ServiceVisibility":"https://developer.roblox.com/en-us/api-reference/enum/ServiceVisibility","Severity":"https://developer.roblox.com/en-us/api-reference/enum/Severity","SignalBehavior":"https://developer.roblox.com/en-us/api-reference/enum/SignalBehavior","SizeConstraint":"https://developer.roblox.com/en-us/api-reference/enum/SizeConstraint","SolverConvergenceMetricType":"https://developer.roblox.com/en-us/api-reference/enum/SolverConvergenceMetricType","SolverConvergenceVisualizationMode":"https://developer.roblox.com/en-us/api-reference/enum/SolverConvergenceVisualizationMode","SortDirection":"https://developer.roblox.com/en-us/api-reference/enum/SortDirection","SortOrder":"https://developer.roblox.com/en-us/api-reference/enum/SortOrder","SpecialKey":"https://developer.roblox.com/en-us/api-reference/enum/SpecialKey","StartCorner":"https://developer.roblox.com/en-us/api-reference/enum/StartCorner","StreamOutBehavior":"https://developer.roblox.com/en-us/api-reference/enum/StreamOutBehavior","StreamingIntegrityMode":"https://developer.roblox.com/en-us/api-reference/enum/StreamingIntegrityMode","StreamingPauseMode":"https://developer.roblox.com/en-us/api-reference/enum/StreamingPauseMode","StudioCloseMode":"https://developer.roblox.com/en-us/api-reference/enum/StudioCloseMode","StudioDataModelType":"https://developer.roblox.com/en-us/api-reference/enum/StudioDataModelType","StudioPlaceUpdateFailureReason":"https://developer.roblox.com/en-us/api-reference/enum/StudioPlaceUpdateFailureReason","StudioScriptEditorColorCategories":"https://developer.roblox.com/en-us/api-reference/enum/StudioScriptEditorColorCategories","StudioScriptEditorColorPresets":"https://developer.roblox.com/en-us/api-reference/enum/StudioScriptEditorColorPresets","StudioStyleGuideColor":"https://developer.roblox.com/en-us/api-reference/enum/StudioStyleGuideColor","StudioStyleGuideModifier":"https://developer.roblox.com/en-us/api-reference/enum/StudioStyleGuideModifier","Style":"https://developer.roblox.com/en-us/api-reference/enum/Style","SubscriptionExpirationReason":"https://developer.roblox.com/en-us/api-reference/enum/SubscriptionExpirationReason","SubscriptionPaymentStatus":"https://developer.roblox.com/en-us/api-reference/enum/SubscriptionPaymentStatus","SubscriptionPeriod":"https://developer.roblox.com/en-us/api-reference/enum/SubscriptionPeriod","SubscriptionState":"https://developer.roblox.com/en-us/api-reference/enum/SubscriptionState","SurfaceConstraint":"https://developer.roblox.com/en-us/api-reference/enum/SurfaceConstraint","SurfaceGuiShape":"https://developer.roblox.com/en-us/api-reference/enum/SurfaceGuiShape","SurfaceGuiSizingMode":"https://developer.roblox.com/en-us/api-reference/enum/SurfaceGuiSizingMode","SurfaceType":"https://developer.roblox.com/en-us/api-reference/enum/SurfaceType","SwipeDirection":"https://developer.roblox.com/en-us/api-reference/enum/SwipeDirection","TableMajorAxis":"https://developer.roblox.com/en-us/api-reference/enum/TableMajorAxis","Technology":"https://developer.roblox.com/en-us/api-reference/enum/Technology","TeleportMethod":"https://developer.roblox.com/en-us/api-reference/enum/TeleportMethod","TeleportResult":"https://developer.roblox.com/en-us/api-reference/enum/TeleportResult","TeleportState":"https://developer.roblox.com/en-us/api-reference/enum/TeleportState","TeleportType":"https://developer.roblox.com/en-us/api-reference/enum/TeleportType","TerrainAcquisitionMethod":"https://developer.roblox.com/en-us/api-reference/enum/TerrainAcquisitionMethod","TerrainFace":"https://developer.roblox.com/en-us/api-reference/enum/TerrainFace","TextChatMessageStatus":"https://developer.roblox.com/en-us/api-reference/enum/TextChatMessageStatus","TextDirection":"https://developer.roblox.com/en-us/api-reference/enum/TextDirection","TextFilterContext":"https://developer.roblox.com/en-us/api-reference/enum/TextFilterContext","TextInputType":"https://developer.roblox.com/en-us/api-reference/enum/TextInputType","TextTruncate":"https://developer.roblox.com/en-us/api-reference/enum/TextTruncate","TextXAlignment":"https://developer.roblox.com/en-us/api-reference/enum/TextXAlignment","TextYAlignment":"https://developer.roblox.com/en-us/api-reference/enum/TextYAlignment","TextureMode":"https://developer.roblox.com/en-us/api-reference/enum/TextureMode","TextureQueryType":"https://developer.roblox.com/en-us/api-reference/enum/TextureQueryType","ThreadPoolConfig":"https://developer.roblox.com/en-us/api-reference/enum/ThreadPoolConfig","ThrottlingPriority":"https://developer.roblox.com/en-us/api-reference/enum/ThrottlingPriority","ThumbnailSize":"https://developer.roblox.com/en-us/api-reference/enum/ThumbnailSize","ThumbnailType":"https://developer.roblox.com/en-us/api-reference/enum/ThumbnailType","TickCountSampleMethod":"https://developer.roblox.com/en-us/api-reference/enum/TickCountSampleMethod","TonemapperPreset":"https://developer.roblox.com/en-us/api-reference/enum/TonemapperPreset","TopBottom":"https://developer.roblox.com/en-us/api-reference/enum/TopBottom","TouchCameraMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/TouchCameraMovementMode","TouchMovementMode":"https://developer.roblox.com/en-us/api-reference/enum/TouchMovementMode","TrackerError":"https://developer.roblox.com/en-us/api-reference/enum/TrackerError","TrackerExtrapolationFlagMode":"https://developer.roblox.com/en-us/api-reference/enum/TrackerExtrapolationFlagMode","TrackerFaceTrackingStatus":"https://developer.roblox.com/en-us/api-reference/enum/TrackerFaceTrackingStatus","TrackerLodFlagMode":"https://developer.roblox.com/en-us/api-reference/enum/TrackerLodFlagMode","TrackerLodValueMode":"https://developer.roblox.com/en-us/api-reference/enum/TrackerLodValueMode","TrackerMode":"https://developer.roblox.com/en-us/api-reference/enum/TrackerMode","TrackerPromptEvent":"https://developer.roblox.com/en-us/api-reference/enum/TrackerPromptEvent","TrackerType":"https://developer.roblox.com/en-us/api-reference/enum/TrackerType","TriStateBoolean":"https://developer.roblox.com/en-us/api-reference/enum/TriStateBoolean","TweenStatus":"https://developer.roblox.com/en-us/api-reference/enum/TweenStatus","UIDragDetectorDragRelativity":"https://developer.roblox.com/en-us/api-reference/enum/UIDragDetectorDragRelativity","UIDragDetectorDragSpace":"https://developer.roblox.com/en-us/api-reference/enum/UIDragDetectorDragSpace","UIDragDetectorDragStyle":"https://developer.roblox.com/en-us/api-reference/enum/UIDragDetectorDragStyle","UIDragDetectorResponseStyle":"https://developer.roblox.com/en-us/api-reference/enum/UIDragDetectorResponseStyle","UIFlexAlignment":"https://developer.roblox.com/en-us/api-reference/enum/UIFlexAlignment","UIFlexMode":"https://developer.roblox.com/en-us/api-reference/enum/UIFlexMode","UITheme":"https://developer.roblox.com/en-us/api-reference/enum/UITheme","UiMessageType":"https://developer.roblox.com/en-us/api-reference/enum/UiMessageType","UsageContext":"https://developer.roblox.com/en-us/api-reference/enum/UsageContext","UserCFrame":"https://developer.roblox.com/en-us/api-reference/enum/UserCFrame","UserInputState":"https://developer.roblox.com/en-us/api-reference/enum/UserInputState","UserInputType":"https://developer.roblox.com/en-us/api-reference/enum/UserInputType","VRComfortSetting":"https://developer.roblox.com/en-us/api-reference/enum/VRComfortSetting","VRSafetyBubbleMode":"https://developer.roblox.com/en-us/api-reference/enum/VRSafetyBubbleMode","VRScaling":"https://developer.roblox.com/en-us/api-reference/enum/VRScaling","VRSessionState":"https://developer.roblox.com/en-us/api-reference/enum/VRSessionState","VRTouchpad":"https://developer.roblox.com/en-us/api-reference/enum/VRTouchpad","VRTouchpadMode":"https://developer.roblox.com/en-us/api-reference/enum/VRTouchpadMode","VelocityConstraintMode":"https://developer.roblox.com/en-us/api-reference/enum/VelocityConstraintMode","VerticalAlignment":"https://developer.roblox.com/en-us/api-reference/enum/VerticalAlignment","VerticalScrollBarPosition":"https://developer.roblox.com/en-us/api-reference/enum/VerticalScrollBarPosition","VibrationMotor":"https://developer.roblox.com/en-us/api-reference/enum/VibrationMotor","VideoDeviceCaptureQuality":"https://developer.roblox.com/en-us/api-reference/enum/VideoDeviceCaptureQuality","VideoError":"https://developer.roblox.com/en-us/api-reference/enum/VideoError","ViewMode":"https://developer.roblox.com/en-us/api-reference/enum/ViewMode","VirtualCursorMode":"https://developer.roblox.com/en-us/api-reference/enum/VirtualCursorMode","VirtualInputMode":"https://developer.roblox.com/en-us/api-reference/enum/VirtualInputMode","VoiceChatState":"https://developer.roblox.com/en-us/api-reference/enum/VoiceChatState","VoiceControlPath":"https://developer.roblox.com/en-us/api-reference/enum/VoiceControlPath","VolumetricAudio":"https://developer.roblox.com/en-us/api-reference/enum/VolumetricAudio","WaterDirection":"https://developer.roblox.com/en-us/api-reference/enum/WaterDirection","WaterForce":"https://developer.roblox.com/en-us/api-reference/enum/WaterForce","WeldConstraintPreserve":"https://developer.roblox.com/en-us/api-reference/enum/WeldConstraintPreserve","WrapLayerAutoSkin":"https://developer.roblox.com/en-us/api-reference/enum/WrapLayerAutoSkin","WrapLayerDebugMode":"https://developer.roblox.com/en-us/api-reference/enum/WrapLayerDebugMode","WrapTargetDebugMode":"https://developer.roblox.com/en-us/api-reference/enum/WrapTargetDebugMode","ZIndexBehavior":"https://developer.roblox.com/en-us/api-reference/enum/ZIndexBehavior","Axes":"https://developer.roblox.com/en-us/api-reference/datatype/Axes","BrickColor":"https://developer.roblox.com/en-us/api-reference/datatype/BrickColor","CFrame":"https://developer.roblox.com/en-us/api-reference/datatype/CFrame","Color3":"https://developer.roblox.com/en-us/api-reference/datatype/Color3","ColorSequence":"https://developer.roblox.com/en-us/api-reference/datatype/ColorSequence","ColorSequenceKeypoint":"https://developer.roblox.com/en-us/api-reference/datatype/ColorSequenceKeypoint","DockWidgetPluginGuiInfo":"https://developer.roblox.com/en-us/api-reference/datatype/DockWidgetPluginGuiInfo","Enum":"https://developer.roblox.com/en-us/api-reference/datatype/Enum","EnumItem":"https://developer.roblox.com/en-us/api-reference/datatype/EnumItem","Enums":"https://developer.roblox.com/en-us/api-reference/datatype/Enums","Faces":"https://developer.roblox.com/en-us/api-reference/datatype/Faces","NumberRange":"https://developer.roblox.com/en-us/api-reference/datatype/NumberRange","NumberSequence":"https://developer.roblox.com/en-us/api-reference/datatype/NumberSequence","NumberSequenceKeypoint":"https://developer.roblox.com/en-us/api-reference/datatype/NumberSequenceKeypoint","PathWaypoint":"https://developer.roblox.com/en-us/api-reference/datatype/PathWaypoint","PhysicalProperties":"https://developer.roblox.com/en-us/api-reference/datatype/PhysicalProperties","Random":"https://developer.roblox.com/en-us/api-reference/datatype/Random","Ray":"https://developer.roblox.com/en-us/api-reference/datatype/Ray","RBXScriptConnection":"https://developer.roblox.com/en-us/api-reference/datatype/RBXScriptConnection","RBXScriptSignal":"https://developer.roblox.com/en-us/api-reference/datatype/RBXScriptSignal","Rect":"https://developer.roblox.com/en-us/api-reference/datatype/Rect","Region3":"https://developer.roblox.com/en-us/api-reference/datatype/Region3","Region3int16":"https://developer.roblox.com/en-us/api-reference/datatype/Region3int16","TweenInfo":"https://developer.roblox.com/en-us/api-reference/datatype/TweenInfo","UDim":"https://developer.roblox.com/en-us/api-reference/datatype/UDim","UDim2":"https://developer.roblox.com/en-us/api-reference/datatype/UDim2","Vector2":"https://developer.roblox.com/en-us/api-reference/datatype/Vector2","Vector2int16":"https://developer.roblox.com/en-us/api-reference/datatype/Vector2int16","Vector3":"https://developer.roblox.com/en-us/api-reference/datatype/Vector3","Vector3int16":"https://developer.roblox.com/en-us/api-reference/datatype/Vector3int16","Basic":"/Iris/api/Basic","Combo":"/Iris/api/Combo","Drag":"/Iris/api/Drag","Format":"/Iris/api/Format","Input":"/Iris/api/Input","Internal":"/Iris/api/Internal","Iris":"/Iris/api/Iris","Menu":"/Iris/api/Menu","Plot":"/Iris/api/Plot","Slider":"/Iris/api/Slider","State":"/Iris/api/State","Table":"/Iris/api/Table","Text":"/Iris/api/Text","Tree":"/Iris/api/Tree","Window":"/Iris/api/Window"}')}}]); \ No newline at end of file diff --git a/assets/js/25e8a157.b2c04533.js b/assets/js/25e8a157.b2c04533.js deleted file mode 100644 index 4858cfb..0000000 --- a/assets/js/25e8a157.b2c04533.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1695],{27909:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Window","desc":"The top-level container for all other widgets to be created within.\\nCan be moved and resized across the screen. Cannot contain embedded windows.\\nMenus can be appended to windows creating a menubar.\\n\\n```lua\\nhasChildren = true\\nhasState = true\\nArguments = {\\n Title: string,\\n NoTitleBar: boolean? = false,\\n NoBackground: boolean? = false, -- the background behind the widget container.\\n NoCollapse: boolean? = false,\\n NoClose: boolean? = false,\\n NoMove: boolean? = false,\\n NoScrollbar: boolean? = false, -- the scrollbar if the window is too short for all widgets.\\n NoResize: boolean? = false,\\n NoNav: boolean? = false, -- unimplemented.\\n NoMenu: boolean? -- whether the menubar will show if created.\\n}\\nEvents = {\\n opened: () -> boolean, -- once when opened.\\n closed: () -> boolean, -- once when closed.\\n collapsed: () -> boolean, -- once when collapsed.\\n uncollapsed: () -> boolean, -- once when uncollapsed.\\n hovered: () -> boolean -- fires when the mouse hovers over any of the window.\\n}\\nStates = {\\n size = State?,\\n position = State?,\\n isUncollapsed = State?,\\n isOpened = State?,\\n scrollDistance = State? -- vertical scroll distance, if too short.\\n}\\n```\\n ","lua_type":"Iris.Window","tags":["Widget","HasChildren","HasState"],"source":{"line":80,"path":"lib/API.lua"}},{"name":"Tooltip","desc":"Displays a text label next to the cursor\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string\\n}\\n```\\n ","lua_type":"Iris.Tooltip","tags":["Widget"],"source":{"line":106,"path":"lib/API.lua"}}],"types":[],"name":"Window","desc":"Windows are the fundamental widget for Iris. Every other widget must be a descendant of a window.\\n\\n```lua\\nIris.Window({ \\"Example Window\\" })\\n Iris.Text({ \\"This is an example window!\\" })\\nIris.End()\\n```\\n\\nIf you do not want the code inside a window to run unless it is open then you can use the following:\\n```lua\\nlocal window = Iris.Window({ \\"Many Widgets Window\\" })\\n\\nif window.state.isOpened.value and window.state.isUncollapsed.value then\\n Iris.Text({ \\"I will only be created when the window is open.\\" })\\nend\\nIris.End() -- must always call Iris.End(), regardless of whether the window is open or not.\\n```\\n ","source":{"line":37,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/25e8a157.b42f6140.js b/assets/js/25e8a157.b42f6140.js new file mode 100644 index 0000000..aea0fc6 --- /dev/null +++ b/assets/js/25e8a157.b42f6140.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1695],{27909:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Window","desc":"The top-level container for all other widgets to be created within.\\nCan be moved and resized across the screen. Cannot contain embedded windows.\\nMenus can be appended to windows creating a menubar.\\n\\n```lua\\nhasChildren = true\\nhasState = true\\nArguments = {\\n Title: string,\\n NoTitleBar: boolean? = false,\\n NoBackground: boolean? = false, -- the background behind the widget container.\\n NoCollapse: boolean? = false,\\n NoClose: boolean? = false,\\n NoMove: boolean? = false,\\n NoScrollbar: boolean? = false, -- the scrollbar if the window is too short for all widgets.\\n NoResize: boolean? = false,\\n NoNav: boolean? = false, -- unimplemented.\\n NoMenu: boolean? -- whether the menubar will show if created.\\n}\\nEvents = {\\n opened: () -> boolean, -- once when opened.\\n closed: () -> boolean, -- once when closed.\\n collapsed: () -> boolean, -- once when collapsed.\\n uncollapsed: () -> boolean, -- once when uncollapsed.\\n hovered: () -> boolean -- fires when the mouse hovers over any of the window.\\n}\\nStates = {\\n size = State? = Vector2.new(400, 300),\\n position = State?,\\n isUncollapsed = State? = true,\\n isOpened = State? = true,\\n scrollDistance = State? -- vertical scroll distance, if too short.\\n}\\n```\\n ","lua_type":"Iris.Window","tags":["Widget","HasChildren","HasState"],"source":{"line":82,"path":"lib/API.lua"}},{"name":"Tooltip","desc":"Displays a text label next to the cursor\\n\\n```lua\\nIris.Tooltip({\\"My custom tooltip\\"})\\n```\\n\\n![Basic tooltip example](../assets/basicTooltip.png)\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string\\n}\\n```\\n ","lua_type":"Iris.Tooltip","tags":["Widget"],"source":{"line":114,"path":"lib/API.lua"}}],"types":[],"name":"Window","desc":"Windows are the fundamental widget for Iris. Every other widget must be a descendant of a window.\\n\\n```lua\\nIris.Window({ \\"Example Window\\" })\\n Iris.Text({ \\"This is an example window!\\" })\\nIris.End()\\n```\\n\\n![Example window](../assets/basicWindow.png)\\n\\nIf you do not want the code inside a window to run unless it is open then you can use the following:\\n```lua\\nlocal window = Iris.Window({ \\"Many Widgets Window\\" })\\n\\nif window.state.isOpened.value and window.state.isUncollapsed.value then\\n Iris.Text({ \\"I will only be created when the window is open.\\" })\\nend\\nIris.End() -- must always call Iris.End(), regardless of whether the window is open or not.\\n```\\n ","source":{"line":39,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/287f4516.5e3e8d51.js b/assets/js/287f4516.e9dae9e5.js similarity index 85% rename from assets/js/287f4516.5e3e8d51.js rename to assets/js/287f4516.e9dae9e5.js index 66057a1..52ce50f 100644 --- a/assets/js/287f4516.5e3e8d51.js +++ b/assets/js/287f4516.e9dae9e5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7647],{46699:e=>{e.exports=JSON.parse('{"functions":[{"name":"_cycle","desc":"Called every frame to handle all of the widget management. Any previous frame data is ammended and everything updates.\\n ","params":[],"returns":[],"function_type":"static","source":{"line":177,"path":"lib/Internal.lua"}},{"name":"_NoOp","desc":"A dummy function which does nothing. Used as a placeholder for optional methods in a widget class.\\nUsed in `Internal.WidgetConstructor`\\n ","params":[],"returns":[],"function_type":"static","ignore":true,"source":{"line":280,"path":"lib/Internal.lua"}},{"name":"WidgetConstructor","desc":"For each widget, a widget class is created which handles all the operations of a widget. This removes the class nature\\nof widgets, and simplifies the available functions which can be applied to any widget. The widgets themselves are\\ndumb tables containing all the data but no methods to handle any of the data apart from events.\\n ","params":[{"name":"type","desc":"name used to denote the widget class.","lua_type":"string"},{"name":"widgetClass","desc":"table of methods for the new widget.","lua_type":"Types.WidgetClass"}],"returns":[],"function_type":"static","source":{"line":294,"path":"lib/Internal.lua"}},{"name":"_Insert","desc":"Every widget is created through _Insert. An ID is generated based on the line of the calling code and is used to\\nfind the previous frame widget if it exists. If no widget exists, a new one is created.\\n ","params":[{"name":"widgetType:","desc":"name of widget class.","lua_type":"string"},{"name":"arguments","desc":"arguments of the widget.","lua_type":"Types.WidgetArguments?"},{"name":"states","desc":"states of the widget.","lua_type":"Types.States?"}],"returns":[{"desc":"the widget.","lua_type":"Types.Widget"}],"function_type":"static","source":{"line":403,"path":"lib/Internal.lua"}},{"name":"_GenNewWidget","desc":"All widgets are created as tables with properties. The widget class contains the functions to create the UI instances and\\nupdate the widget or change state.\\n ","params":[{"name":"widgetType","desc":"","lua_type":"string"},{"name":"arguments","desc":"arguments of the widget.","lua_type":"Types.Arguments"},{"name":"states","desc":"states of the widget.","lua_type":"Types.States?"},{"name":"ID","desc":"id of the new widget. Determined in `Internal._Insert`","lua_type":"Types.ID"}],"returns":[{"desc":"the newly created widget.","lua_type":"Types.Widget"}],"function_type":"static","source":{"line":483,"path":"lib/Internal.lua"}},{"name":"_ContinueWidget","desc":"Since the widget has already been created this frame, we can just add it back to the stack. There is no checking of\\narguments or states.\\nBasically equivalent to the end of `Internal._Insert`.\\n ","params":[{"name":"ID","desc":"id of the widget.","lua_type":"Types.ID"},{"name":"widgetType","desc":"","lua_type":"string"}],"returns":[{"desc":"the widget.","lua_type":"Types.Widget"}],"function_type":"static","source":{"line":557,"path":"lib/Internal.lua"}},{"name":"_DiscardWidget","desc":"Destroys the widget instance and updates any parent. This happens if the widget was not called in the\\nprevious frame. There is no code which needs to update any widget tables since they are already reset\\nat the start before discarding happens.\\n ","params":[{"name":"widgetToDiscard","desc":"","lua_type":"Types.Widget"}],"returns":[],"function_type":"static","source":{"line":580,"path":"lib/Internal.lua"}},{"name":"_widgetState","desc":"Connects the state to the widget. If no state exists then a new one is created. Called for every state in every\\nwidget if the user does not provide a state.\\n ","params":[{"name":"thisWidget","desc":"widget the state belongs to.","lua_type":"Types.Widget"},{"name":"stateName","desc":"","lua_type":"string"},{"name":"initialValue","desc":"","lua_type":"any"}],"returns":[{"desc":"the state for the widget.","lua_type":"Types.State"}],"function_type":"static","source":{"line":602,"path":"lib/Internal.lua"}},{"name":"_EventCall","desc":"A wrapper for any event on any widget. Automatically, Iris does not initialize events unless they are explicitly\\ncalled so in the first frame, the event connections are set up. Every event is a function which returns a boolean.\\n ","params":[{"name":"thisWidget","desc":"","lua_type":"Types.Widget"},{"name":"evetName","desc":"","lua_type":"string"}],"returns":[{"desc":"the value of the event.","lua_type":"boolean"}],"function_type":"static","source":{"line":628,"path":"lib/Internal.lua"}},{"name":"_GetParentWidget","desc":"Returns the parent widget of the currently active widget, based on the stack depth.\\n ","params":[],"returns":[{"desc":"the parent widget","lua_type":"Types.Widget"}],"function_type":"static","source":{"line":647,"path":"lib/Internal.lua"}},{"name":"_generateEmptyVDOM","desc":"Creates the VDOM at the start of each frame containing jsut the root instance.\\n ","params":[],"returns":[],"function_type":"static","ignore":true,"source":{"line":660,"path":"lib/Internal.lua"}},{"name":"_generateRootInstance","desc":"Creates the root instance.\\n ","params":[],"returns":[],"function_type":"static","ignore":true,"source":{"line":673,"path":"lib/Internal.lua"}},{"name":"_generateSelctionImageObject","desc":"Creates the selection object for buttons.\\n ","params":[],"returns":[],"function_type":"static","ignore":true,"source":{"line":687,"path":"lib/Internal.lua"}},{"name":"_getID","desc":"Generates a unique ID for each widget which is based on the line that the widget is\\ncreated from. This ensures that the function is heuristic and always returns the same\\nid for the same widget.\\n ","params":[{"name":"levelsToIgnore","desc":"used to skip over internal calls to `_getID`.","lua_type":"number"}],"returns":[],"function_type":"static","source":{"line":727,"path":"lib/Internal.lua"}},{"name":"_deepCompare","desc":"Compares two tables to check if they are the same. It uses a recursive iteration through one table\\nto compare against the other. Used to determine if the arguments of a widget have changed since last\\nframe.\\n ","params":[{"name":"t1","desc":"","lua_type":"table"},{"name":"t2","desc":"","lua_type":"table"}],"returns":[],"function_type":"static","ignore":true,"source":{"line":765,"path":"lib/Internal.lua"}},{"name":"_deepCopy","desc":"Performs a deep copy of a table so that neither table contains a shared reference.\\n ","params":[{"name":"t","desc":"","lua_type":"table"}],"returns":[],"function_type":"static","ignore":true,"source":{"line":795,"path":"lib/Internal.lua"}}],"properties":[{"name":"_cycleCoroutine","desc":"The thread which handles all connected functions. Each connection is within a pcall statement which prevents\\nIris from crashing and instead stopping at the error.\\n ","lua_type":"thread","source":{"line":69,"path":"lib/Internal.lua"}}],"types":[],"name":"Internal","desc":"An internal class within Iris containing all the backend data and functions for Iris to operate.\\nIt is recommended that you don\'t generally interact with Internal unless you understand what you are doing.\\n ","source":{"line":9,"path":"lib/Internal.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7647],{46699:e=>{e.exports=JSON.parse('{"functions":[{"name":"_cycle","desc":"Called every frame to handle all of the widget management. Any previous frame data is ammended and everything updates.\\n ","params":[],"returns":[],"function_type":"static","source":{"line":181,"path":"lib/Internal.lua"}},{"name":"_NoOp","desc":"A dummy function which does nothing. Used as a placeholder for optional methods in a widget class.\\nUsed in `Internal.WidgetConstructor`\\n ","params":[],"returns":[],"function_type":"static","ignore":true,"source":{"line":284,"path":"lib/Internal.lua"}},{"name":"WidgetConstructor","desc":"For each widget, a widget class is created which handles all the operations of a widget. This removes the class nature\\nof widgets, and simplifies the available functions which can be applied to any widget. The widgets themselves are\\ndumb tables containing all the data but no methods to handle any of the data apart from events.\\n ","params":[{"name":"type","desc":"name used to denote the widget class.","lua_type":"string"},{"name":"widgetClass","desc":"table of methods for the new widget.","lua_type":"Types.WidgetClass"}],"returns":[],"function_type":"static","source":{"line":298,"path":"lib/Internal.lua"}},{"name":"_Insert","desc":"Every widget is created through _Insert. An ID is generated based on the line of the calling code and is used to\\nfind the previous frame widget if it exists. If no widget exists, a new one is created.\\n ","params":[{"name":"widgetType:","desc":"name of widget class.","lua_type":"string"},{"name":"arguments","desc":"arguments of the widget.","lua_type":"Types.WidgetArguments?"},{"name":"states","desc":"states of the widget.","lua_type":"Types.States?"}],"returns":[{"desc":"the widget.","lua_type":"Types.Widget"}],"function_type":"static","source":{"line":407,"path":"lib/Internal.lua"}},{"name":"_GenNewWidget","desc":"All widgets are created as tables with properties. The widget class contains the functions to create the UI instances and\\nupdate the widget or change state.\\n ","params":[{"name":"widgetType","desc":"","lua_type":"string"},{"name":"arguments","desc":"arguments of the widget.","lua_type":"Types.Arguments"},{"name":"states","desc":"states of the widget.","lua_type":"Types.States?"},{"name":"ID","desc":"id of the new widget. Determined in `Internal._Insert`","lua_type":"Types.ID"}],"returns":[{"desc":"the newly created widget.","lua_type":"Types.Widget"}],"function_type":"static","source":{"line":487,"path":"lib/Internal.lua"}},{"name":"_ContinueWidget","desc":"Since the widget has already been created this frame, we can just add it back to the stack. There is no checking of\\narguments or states.\\nBasically equivalent to the end of `Internal._Insert`.\\n ","params":[{"name":"ID","desc":"id of the widget.","lua_type":"Types.ID"},{"name":"widgetType","desc":"","lua_type":"string"}],"returns":[{"desc":"the widget.","lua_type":"Types.Widget"}],"function_type":"static","source":{"line":561,"path":"lib/Internal.lua"}},{"name":"_DiscardWidget","desc":"Destroys the widget instance and updates any parent. This happens if the widget was not called in the\\nprevious frame. There is no code which needs to update any widget tables since they are already reset\\nat the start before discarding happens.\\n ","params":[{"name":"widgetToDiscard","desc":"","lua_type":"Types.Widget"}],"returns":[],"function_type":"static","source":{"line":584,"path":"lib/Internal.lua"}},{"name":"_widgetState","desc":"Connects the state to the widget. If no state exists then a new one is created. Called for every state in every\\nwidget if the user does not provide a state.\\n ","params":[{"name":"thisWidget","desc":"widget the state belongs to.","lua_type":"Types.Widget"},{"name":"stateName","desc":"","lua_type":"string"},{"name":"initialValue","desc":"","lua_type":"any"}],"returns":[{"desc":"the state for the widget.","lua_type":"Types.State"}],"function_type":"static","source":{"line":606,"path":"lib/Internal.lua"}},{"name":"_EventCall","desc":"A wrapper for any event on any widget. Automatically, Iris does not initialize events unless they are explicitly\\ncalled so in the first frame, the event connections are set up. Every event is a function which returns a boolean.\\n ","params":[{"name":"thisWidget","desc":"","lua_type":"Types.Widget"},{"name":"evetName","desc":"","lua_type":"string"}],"returns":[{"desc":"the value of the event.","lua_type":"boolean"}],"function_type":"static","source":{"line":632,"path":"lib/Internal.lua"}},{"name":"_GetParentWidget","desc":"Returns the parent widget of the currently active widget, based on the stack depth.\\n ","params":[],"returns":[{"desc":"the parent widget","lua_type":"Types.Widget"}],"function_type":"static","source":{"line":651,"path":"lib/Internal.lua"}},{"name":"_generateEmptyVDOM","desc":"Creates the VDOM at the start of each frame containing jsut the root instance.\\n ","params":[],"returns":[],"function_type":"static","ignore":true,"source":{"line":664,"path":"lib/Internal.lua"}},{"name":"_generateRootInstance","desc":"Creates the root instance.\\n ","params":[],"returns":[],"function_type":"static","ignore":true,"source":{"line":677,"path":"lib/Internal.lua"}},{"name":"_generateSelctionImageObject","desc":"Creates the selection object for buttons.\\n ","params":[],"returns":[],"function_type":"static","ignore":true,"source":{"line":691,"path":"lib/Internal.lua"}},{"name":"_getID","desc":"Generates a unique ID for each widget which is based on the line that the widget is\\ncreated from. This ensures that the function is heuristic and always returns the same\\nid for the same widget.\\n ","params":[{"name":"levelsToIgnore","desc":"used to skip over internal calls to `_getID`.","lua_type":"number"}],"returns":[],"function_type":"static","source":{"line":731,"path":"lib/Internal.lua"}},{"name":"_deepCompare","desc":"Compares two tables to check if they are the same. It uses a recursive iteration through one table\\nto compare against the other. Used to determine if the arguments of a widget have changed since last\\nframe.\\n ","params":[{"name":"t1","desc":"","lua_type":"table"},{"name":"t2","desc":"","lua_type":"table"}],"returns":[],"function_type":"static","ignore":true,"source":{"line":769,"path":"lib/Internal.lua"}},{"name":"_deepCopy","desc":"Performs a deep copy of a table so that neither table contains a shared reference.\\n ","params":[{"name":"t","desc":"","lua_type":"table"}],"returns":[],"function_type":"static","ignore":true,"source":{"line":799,"path":"lib/Internal.lua"}}],"properties":[{"name":"_cycleCoroutine","desc":"The thread which handles all connected functions. Each connection is within a pcall statement which prevents\\nIris from crashing and instead stopping at the error.\\n ","lua_type":"thread","source":{"line":69,"path":"lib/Internal.lua"}}],"types":[],"name":"Internal","desc":"An internal class within Iris containing all the backend data and functions for Iris to operate.\\nIt is recommended that you don\'t generally interact with Internal unless you understand what you are doing.\\n ","source":{"line":9,"path":"lib/Internal.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/5302351d.28cb0998.js b/assets/js/5302351d.215a80d2.js similarity index 77% rename from assets/js/5302351d.28cb0998.js rename to assets/js/5302351d.215a80d2.js index ff056d3..b3ff7a1 100644 --- a/assets/js/5302351d.28cb0998.js +++ b/assets/js/5302351d.215a80d2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9387],{7636:e=>{e.exports=JSON.parse('[{"type":"link","href":"/api/Iris","label":"\u200bIris"},{"type":"category","label":"Widgets","collapsible":true,"collapsed":true,"items":[{"type":"link","href":"/api/Window","label":"\u200bWindow"},{"type":"link","href":"/api/Menu","label":"\u200bMenu"},{"type":"link","href":"/api/Format","label":"\u200bFormat"},{"type":"link","href":"/api/Text","label":"\u200bText"},{"type":"link","href":"/api/Basic","label":"\u200bBasic"},{"type":"link","href":"/api/Tree","label":"\u200bTree"},{"type":"link","href":"/api/Input","label":"\u200bInput"},{"type":"link","href":"/api/Drag","label":"\u200bDrag"},{"type":"link","href":"/api/Slider","label":"\u200bSlider"},{"type":"link","href":"/api/Combo","label":"\u200bCombo"},{"type":"link","href":"/api/Table","label":"\u200bTable"}]},{"type":"link","href":"/api/State","label":"\u200bState"},{"type":"link","href":"/api/Internal","label":"\u200bInternal"},{"type":"link","href":"/api/Plot","label":"\u200bPlot"}]')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9387],{7636:e=>{e.exports=JSON.parse('[{"type":"link","href":"/api/Iris","label":"\u200bIris"},{"type":"category","label":"Widgets","collapsible":true,"collapsed":true,"items":[{"type":"link","href":"/api/Window","label":"\u200bWindow"},{"type":"link","href":"/api/Menu","label":"\u200bMenu"},{"type":"link","href":"/api/Format","label":"\u200bFormat"},{"type":"link","href":"/api/Text","label":"\u200bText"},{"type":"link","href":"/api/Basic","label":"\u200bBasic"},{"type":"link","href":"/api/Tree","label":"\u200bTree"},{"type":"link","href":"/api/Input","label":"\u200bInput"},{"type":"link","href":"/api/Drag","label":"\u200bDrag"},{"type":"link","href":"/api/Slider","label":"\u200bSlider"},{"type":"link","href":"/api/Combo","label":"\u200bCombo"},{"type":"link","href":"/api/Plot","label":"\u200bPlot"},{"type":"link","href":"/api/Table","label":"\u200bTable"}]},{"type":"link","href":"/api/State","label":"\u200bState"},{"type":"link","href":"/api/Internal","label":"\u200bInternal"}]')}}]); \ No newline at end of file diff --git a/assets/js/5e9d13b8.acefe325.js b/assets/js/5e9d13b8.20d9c67e.js similarity index 88% rename from assets/js/5e9d13b8.acefe325.js rename to assets/js/5e9d13b8.20d9c67e.js index d755114..3e38ac6 100644 --- a/assets/js/5e9d13b8.acefe325.js +++ b/assets/js/5e9d13b8.20d9c67e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7783],{72983:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Button","desc":"A clickable button the size of the text with padding. Can listen to the `clicked()` event to determine if it was pressed.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n}\\nEvents = {\\n clicked: () -> boolean,\\n rightClicked: () -> boolean,\\n doubleClicked: () -> boolean,\\n ctrlClicked: () -> boolean, -- when the control key is down and clicked.\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.Button","tags":["Widget"],"source":{"line":466,"path":"lib/API.lua"}},{"name":"SmallButton","desc":"A smaller clickable button, the same as a [Iris.Button](Basic#Button) but without padding. Can listen to the `clicked()` event to determine if it was pressed.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n}\\nEvents = {\\n clicked: () -> boolean,\\n rightClicked: () -> boolean,\\n doubleClicked: () -> boolean,\\n ctrlClicked: () -> boolean, -- when the control key is down and clicked.\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.SmallButton","tags":["Widget"],"source":{"line":490,"path":"lib/API.lua"}},{"name":"Checkbox","desc":"A checkable box with a visual tick to represent a boolean true or false state.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string\\n}\\nEvents = {\\n checked: () -> boolean, -- once when checked.\\n unchecked: () -> boolean, -- once when unchecked.\\n hovered: () -> boolean\\n}\\nState = {\\n isChecked = State? -- whether the box is checked.\\n}\\n```\\n ","lua_type":"Iris.Checkbox","tags":["Widget","HasState"],"source":{"line":516,"path":"lib/API.lua"}},{"name":"RadioButton","desc":"A circular selectable button, changing the state to its index argument. Used in conjunction with multiple other RadioButtons sharing the same state to represent one value from multiple options.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string,\\n Index: any -- the state object is set to when clicked.\\n}\\nEvents = {\\n selected: () -> boolean,\\n unselected: () -> boolean,\\n active: () -> boolean, -- if the state index equals the RadioButton\'s index.\\n hovered: () -> boolean\\n}\\nState = {\\n index = State? -- the state set by the index of a RadioButton.\\n}\\n```\\n ","lua_type":"Iris.RadioButton","tags":["Widget","HasState"],"source":{"line":544,"path":"lib/API.lua"}}],"types":[],"name":"Basic","desc":"Basic Widget API\\n ","source":{"line":443,"path":"lib/API.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7783],{72983:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Button","desc":"A clickable button the size of the text with padding. Can listen to the `clicked()` event to determine if it was pressed.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n}\\nEvents = {\\n clicked: () -> boolean,\\n rightClicked: () -> boolean,\\n doubleClicked: () -> boolean,\\n ctrlClicked: () -> boolean, -- when the control key is down and clicked.\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.Button","tags":["Widget"],"source":{"line":474,"path":"lib/API.lua"}},{"name":"SmallButton","desc":"A smaller clickable button, the same as a [Iris.Button](Basic#Button) but without padding. Can listen to the `clicked()` event to determine if it was pressed.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n}\\nEvents = {\\n clicked: () -> boolean,\\n rightClicked: () -> boolean,\\n doubleClicked: () -> boolean,\\n ctrlClicked: () -> boolean, -- when the control key is down and clicked.\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.SmallButton","tags":["Widget"],"source":{"line":498,"path":"lib/API.lua"}},{"name":"Checkbox","desc":"A checkable box with a visual tick to represent a boolean true or false state.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string\\n}\\nEvents = {\\n checked: () -> boolean, -- once when checked.\\n unchecked: () -> boolean, -- once when unchecked.\\n hovered: () -> boolean\\n}\\nState = {\\n isChecked = State? -- whether the box is checked.\\n}\\n```\\n ","lua_type":"Iris.Checkbox","tags":["Widget","HasState"],"source":{"line":524,"path":"lib/API.lua"}},{"name":"RadioButton","desc":"A circular selectable button, changing the state to its index argument. Used in conjunction with multiple other RadioButtons sharing the same state to represent one value from multiple options.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string,\\n Index: any -- the state object is set to when clicked.\\n}\\nEvents = {\\n selected: () -> boolean,\\n unselected: () -> boolean,\\n active: () -> boolean, -- if the state index equals the RadioButton\'s index.\\n hovered: () -> boolean\\n}\\nState = {\\n index = State? -- the state set by the index of a RadioButton.\\n}\\n```\\n ","lua_type":"Iris.RadioButton","tags":["Widget","HasState"],"source":{"line":552,"path":"lib/API.lua"}}],"types":[],"name":"Basic","desc":"Basic Widget API\\n ","source":{"line":451,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/6a1501b6.bea8a47d.js b/assets/js/6a1501b6.bea8a47d.js new file mode 100644 index 0000000..dbeef47 --- /dev/null +++ b/assets/js/6a1501b6.bea8a47d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6559],{76717:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"InputNum","desc":"An input box for numbers. The number can be either an integer or a float.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputNum\\",\\n Increment: number? = nil,\\n Min: number? = nil,\\n Max: number? = nil,\\n Format: string? | { string }? = [DYNAMIC], -- Iris will dynamically generate an approriate format.\\n NoButtons: boolean? = false -- whether to display + and - buttons next to the input box.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputNum","tags":["Widget","HasState"],"source":{"line":691,"path":"lib/API.lua"}},{"name":"InputVector2","desc":"An input box for Vector2. The numbers can be either integers or floats.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputVector2\\",\\n Increment: Vector2? = nil,\\n Min: Vector2? = nil,\\n Max: Vector2? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputVector2","tags":["Widget","HasState"],"source":{"line":721,"path":"lib/API.lua"}},{"name":"InputVector3","desc":"An input box for Vector3. The numbers can be either integers or floats.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputVector3\\",\\n Increment: Vector3? = nil,\\n Min: Vector3? = nil,\\n Max: Vector3? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputVector3","tags":["Widget","HasState"],"source":{"line":751,"path":"lib/API.lua"}},{"name":"InputUDim","desc":"An input box for UDim. The Scale box will be a float and the Offset box will be\\nan integer, unless specified differently.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputUDim\\",\\n Increment: UDim? = nil,\\n Min: UDim? = nil,\\n Max: UDim? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputUDim","tags":["Widget","HasState"],"source":{"line":782,"path":"lib/API.lua"}},{"name":"InputUDim2","desc":"An input box for UDim2. The Scale boxes will be floats and the Offset boxes will be\\nintegers, unless specified differently.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputUDim2\\",\\n Increment: UDim2? = nil,\\n Min: UDim2? = nil,\\n Max: UDim2? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputUDim2","tags":["Widget","HasState"],"source":{"line":813,"path":"lib/API.lua"}},{"name":"InputRect","desc":"An input box for Rect. The numbers will default to integers, unless specified differently.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputRect\\",\\n Increment: Rect? = nil,\\n Min: Rect? = nil,\\n Max: Rect? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputRect","tags":["Widget","HasState"],"source":{"line":843,"path":"lib/API.lua"}},{"name":"InputColor3","desc":"An input box for Color3. The input boxes are draggable between 0 and 255 or if UseFloats then between 0 and 1.\\nInput can also be done using HSV instead of the default RGB.\\nIf no format argument is provided then a default R, G, B or H, S, V prefix is applied.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputColor3\\",\\n UseFloats: boolean? = false, -- constrain the values between floats 0 and 1 or integers 0 and 255.\\n UseHSV: boolean? = false, -- input using HSV instead.\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n color: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputColor3","tags":["Widget","HasState"],"source":{"line":1080,"path":"lib/API.lua"}},{"name":"InputColor4","desc":"An input box for Color4. Color4 is a combination of Color3 and a fourth transparency argument.\\nIt has two states for this purpose.\\nThe input boxes are draggable between 0 and 255 or if UseFloats then between 0 and 1.\\nInput can also be done using HSV instead of the default RGB.\\nIf no format argument is provided then a default R, G, B, T or H, S, V, T prefix is applied.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputColor4\\",\\n UseFloats: boolean? = false, -- constrain the values between floats 0 and 1 or integers 0 and 255.\\n UseHSV: boolean? = false, -- input using HSV instead.\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n color: State?,\\n transparency: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputColor4","tags":["Widget","HasState"],"source":{"line":1114,"path":"lib/API.lua"}}],"types":[],"name":"Input","desc":"Input Widget API\\n\\nInput Widgets are textboxes for typing in specific number values. See [Drag], [Slider] or [InputText](Text#InputText) for more input types.\\n\\nIris provides a set of specific inputs for the datatypes:\\nNumber,\\n[Vector2](https://create.roblox.com/docs/reference/engine/datatypes/Vector2),\\n[Vector3](https://create.roblox.com/docs/reference/engine/datatypes/Vector3),\\n[UDim](https://create.roblox.com/docs/reference/engine/datatypes/UDim),\\n[UDim2](https://create.roblox.com/docs/reference/engine/datatypes/UDim2),\\n[Rect](https://create.roblox.com/docs/reference/engine/datatypes/Rect),\\n[Color3](https://create.roblox.com/docs/reference/engine/datatypes/Color3)\\nand the custom [Color4](https://create.roblox.com/docs/reference/engine/datatypes/Color3).\\n\\nEach Input widget has the same arguments but the types depend of the DataType:\\n1. Text: string? = \\"Input{type}\\" -- the text to be displayed to the right of the textbox.\\n2. Increment: DataType? = nil, -- the increment argument determines how a value will be rounded once the textbox looses focus.\\n3. Min: DataType? = nil, -- the minimum value that the widget will allow, no clamping by default.\\n4. Max: DataType? = nil, -- the maximum value that the widget will allow, no clamping by default.\\n5. Format: string | { string }? = [DYNAMIC] -- uses `string.format` to customise visual display.\\n\\nThe format string can either by a single value which will apply to every box, or a table allowing specific text.\\n\\n:::note\\nIf you do not specify a format option then Iris will dynamically calculate a relevant number of sigifs and format option.\\nFor example, if you have Increment, Min and Max values of 1, 0 and 100, then Iris will guess that you are only using integers\\nand will format the value as an integer.\\nAs another example, if you have Increment, Min and max values of 0.005, 0, 1, then Iris will guess you are using a float of 3\\nsignificant figures.\\n\\nAdditionally, for certain DataTypes, Iris will append an prefix to each box if no format option is provided.\\nFor example, a Vector3 box will have the append values of \\"X: \\", \\"Y: \\" and \\"Z: \\" to the relevant input box.\\n:::\\n ","source":{"line":661,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/6a1501b6.d93a137a.js b/assets/js/6a1501b6.d93a137a.js deleted file mode 100644 index 757c2af..0000000 --- a/assets/js/6a1501b6.d93a137a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6559],{76717:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"InputNum","desc":"An input box for numbers. The number can be either an integer or a float.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputNum\\",\\n Increment: number? = nil,\\n Min: number? = nil,\\n Max: number? = nil,\\n Format: string? | { string }? = [DYNAMIC], -- Iris will dynamically generate an approriate format.\\n NoButtons: boolean? = false -- whether to display + and - buttons next to the input box.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputNum","tags":["Widget","HasState"],"source":{"line":683,"path":"lib/API.lua"}},{"name":"InputVector2","desc":"An input box for Vector2. The numbers can be either integers or floats.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputVector2\\",\\n Increment: Vector2? = nil,\\n Min: Vector2? = nil,\\n Max: Vector2? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputVector2","tags":["Widget","HasState"],"source":{"line":713,"path":"lib/API.lua"}},{"name":"InputVector3","desc":"An input box for Vector3. The numbers can be either integers or floats.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputVector3\\",\\n Increment: Vector3? = nil,\\n Min: Vector3? = nil,\\n Max: Vector3? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputVector3","tags":["Widget","HasState"],"source":{"line":743,"path":"lib/API.lua"}},{"name":"InputUDim","desc":"An input box for UDim. The Scale box will be a float and the Offset box will be\\nan integer, unless specified differently.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputUDim\\",\\n Increment: UDim? = nil,\\n Min: UDim? = nil,\\n Max: UDim? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputUDim","tags":["Widget","HasState"],"source":{"line":774,"path":"lib/API.lua"}},{"name":"InputUDim2","desc":"An input box for UDim2. The Scale boxes will be floats and the Offset boxes will be\\nintegers, unless specified differently.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputUDim2\\",\\n Increment: UDim2? = nil,\\n Min: UDim2? = nil,\\n Max: UDim2? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputUDim2","tags":["Widget","HasState"],"source":{"line":805,"path":"lib/API.lua"}},{"name":"InputRect","desc":"An input box for Rect. The numbers will default to integers, unless specified differently.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputRect\\",\\n Increment: Rect? = nil,\\n Min: Rect? = nil,\\n Max: Rect? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputRect","tags":["Widget","HasState"],"source":{"line":835,"path":"lib/API.lua"}}],"types":[],"name":"Input","desc":"Input Widget API\\n\\nInput Widgets are textboxes for typing in specific number values. See [Drag], [Slider] or [InputText](Text#InputText) for more input types.\\n\\nIris provides a set of specific inputs for the datatypes:\\nNumber,\\n[Vector2](https://create.roblox.com/docs/reference/engine/datatypes/Vector2),\\n[Vector3](https://create.roblox.com/docs/reference/engine/datatypes/Vector3),\\n[UDim](https://create.roblox.com/docs/reference/engine/datatypes/UDim),\\n[UDim2](https://create.roblox.com/docs/reference/engine/datatypes/UDim2),\\n[Rect](https://create.roblox.com/docs/reference/engine/datatypes/Rect),\\n[Color3](https://create.roblox.com/docs/reference/engine/datatypes/Color3)\\nand the custom [Color4](https://create.roblox.com/docs/reference/engine/datatypes/Color3).\\n\\nEach Input widget has the same arguments but the types depend of the DataType:\\n1. Text: string? = \\"Input{type}\\" -- the text to be displayed to the right of the textbox.\\n2. Increment: DataType? = nil, -- the increment argument determines how a value will be rounded once the textbox looses focus.\\n3. Min: DataType? = nil, -- the minimum value that the widget will allow, no clamping by default.\\n4. Max: DataType? = nil, -- the maximum value that the widget will allow, no clamping by default.\\n5. Format: string | { string }? = [DYNAMIC] -- uses `string.format` to customise visual display.\\n\\nThe format string can either by a single value which will apply to every box, or a table allowing specific text.\\n\\n:::note\\nIf you do not specify a format option then Iris will dynamically calculate a relevant number of sigifs and format option.\\nFor example, if you have Increment, Min and Max values of 1, 0 and 100, then Iris will guess that you are only using integers\\nand will format the value as an integer.\\nAs another example, if you have Increment, Min and max values of 0.005, 0, 1, then Iris will guess you are using a float of 3\\nsignificant figures.\\n\\nAdditionally, for certain DataTypes, Iris will append an prefix to each box if no format option is provided.\\nFor example, a Vector3 box will have the append values of \\"X: \\", \\"Y: \\" and \\"Z: \\" to the relevant input box.\\n:::\\n ","source":{"line":653,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/6aa4fd11.5f8db3aa.js b/assets/js/6aa4fd11.9d186a4b.js similarity index 90% rename from assets/js/6aa4fd11.5f8db3aa.js rename to assets/js/6aa4fd11.9d186a4b.js index 8d5705a..46aeb1e 100644 --- a/assets/js/6aa4fd11.5f8db3aa.js +++ b/assets/js/6aa4fd11.9d186a4b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4782],{22056:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"MenuBar","desc":"Creates a MenuBar for the current window. Must be called directly under a Window and not within a child widget.\\n:::info\\n This does not create any menus, just tells the window that we going to add menus within.\\n:::\\n\\n```lua\\nhasChildren = true\\nhasState = false\\n```\\n ","lua_type":"Iris.MenuBar","tags":["Widget","HasChildren"],"source":{"line":134,"path":"lib/API.lua"}},{"name":"Menu","desc":"Creates an collapsable menu. If the Menu is created directly under a MenuBar, then the widget will\\nbe placed horizontally below the window title. If the menu Menu is created within another menu, then\\nit will be placed vertically alongside MenuItems and display an arrow alongside.\\n\\nThe opened menu will be a vertically listed box below or next to the button.\\n\\n:::info\\nThere are widgets which are designed for being parented to a menu whilst other happens to work. There is nothing\\npreventing you from adding any widget as a child, but the behaviour is unexplained and not intended, despite allowed.\\n:::\\n\\n```lua\\nhasChildren = true\\nhasState = true\\nArguments = {\\n Text: string -- menu text.\\n}\\nEvents = {\\n clicked: () -> boolean,\\n opened: () -> boolean, -- once when opened.\\n closed: () -> boolean, -- once when closed.\\n hovered: () -> boolean\\n}\\nStates = {\\n isOpened: State? -- whether the menu is open, including any sub-menus within.\\n}\\n```\\n ","lua_type":"Iris.Menu","tags":["Widget","HasChildren","HasState"],"source":{"line":171,"path":"lib/API.lua"}},{"name":"MenuItem","desc":"Creates a button within a menu. The optional KeyCode and ModiferKey arguments will show the keys next\\nto the title, but **will not** bind any connection to them. You will need to do this yourself.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n KeyCode: Enum.KeyCode? = nil, -- an optional keycode, does not actually connect an event.\\n ModifierKey: Enum.ModifierKey? = nil -- an optional modifer key for the key code.\\n}\\nEvents = {\\n clicked: () -> boolean,\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.MenuItem","tags":["Widget"],"source":{"line":195,"path":"lib/API.lua"}},{"name":"MenuToggle","desc":"Creates a togglable button within a menu. The optional KeyCode and ModiferKey arguments act the same\\nas the MenuItem. It is not visually the same as a checkbox, but has the same functionality.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string,\\n KeyCode: Enum.KeyCode? = nil, -- an optional keycode, does not actually connect an event.\\n ModifierKey: Enum.ModifierKey? = nil -- an optional modifer key for the key code.\\n}\\nEvents = {\\n checked: () -> boolean, -- once on check.\\n unchecked: () -> boolean, -- once on uncheck.\\n hovered: () -> boolean\\n}\\nStates = {\\n isChecked: State?\\n}\\n```\\n ","lua_type":"Iris.MenuToggle","tags":["Widget","HasState"],"source":{"line":224,"path":"lib/API.lua"}}],"types":[],"name":"Menu","desc":"Menu API\\n ","source":{"line":117,"path":"lib/API.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4782],{22056:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"MenuBar","desc":"Creates a MenuBar for the current window. Must be called directly under a Window and not within a child widget.\\n:::info\\n This does not create any menus, just tells the window that we going to add menus within.\\n:::\\n\\n```lua\\nhasChildren = true\\nhasState = false\\n```\\n ","lua_type":"Iris.MenuBar","tags":["Widget","HasChildren"],"source":{"line":142,"path":"lib/API.lua"}},{"name":"Menu","desc":"Creates an collapsable menu. If the Menu is created directly under a MenuBar, then the widget will\\nbe placed horizontally below the window title. If the menu Menu is created within another menu, then\\nit will be placed vertically alongside MenuItems and display an arrow alongside.\\n\\nThe opened menu will be a vertically listed box below or next to the button.\\n\\n:::info\\nThere are widgets which are designed for being parented to a menu whilst other happens to work. There is nothing\\npreventing you from adding any widget as a child, but the behaviour is unexplained and not intended, despite allowed.\\n:::\\n\\n```lua\\nhasChildren = true\\nhasState = true\\nArguments = {\\n Text: string -- menu text.\\n}\\nEvents = {\\n clicked: () -> boolean,\\n opened: () -> boolean, -- once when opened.\\n closed: () -> boolean, -- once when closed.\\n hovered: () -> boolean\\n}\\nStates = {\\n isOpened: State? -- whether the menu is open, including any sub-menus within.\\n}\\n```\\n ","lua_type":"Iris.Menu","tags":["Widget","HasChildren","HasState"],"source":{"line":179,"path":"lib/API.lua"}},{"name":"MenuItem","desc":"Creates a button within a menu. The optional KeyCode and ModiferKey arguments will show the keys next\\nto the title, but **will not** bind any connection to them. You will need to do this yourself.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n KeyCode: Enum.KeyCode? = nil, -- an optional keycode, does not actually connect an event.\\n ModifierKey: Enum.ModifierKey? = nil -- an optional modifer key for the key code.\\n}\\nEvents = {\\n clicked: () -> boolean,\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.MenuItem","tags":["Widget"],"source":{"line":203,"path":"lib/API.lua"}},{"name":"MenuToggle","desc":"Creates a togglable button within a menu. The optional KeyCode and ModiferKey arguments act the same\\nas the MenuItem. It is not visually the same as a checkbox, but has the same functionality.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string,\\n KeyCode: Enum.KeyCode? = nil, -- an optional keycode, does not actually connect an event.\\n ModifierKey: Enum.ModifierKey? = nil -- an optional modifer key for the key code.\\n}\\nEvents = {\\n checked: () -> boolean, -- once on check.\\n unchecked: () -> boolean, -- once on uncheck.\\n hovered: () -> boolean\\n}\\nStates = {\\n isChecked: State?\\n}\\n```\\n ","lua_type":"Iris.MenuToggle","tags":["Widget","HasState"],"source":{"line":232,"path":"lib/API.lua"}}],"types":[],"name":"Menu","desc":"Menu API\\n ","source":{"line":125,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.114848cc.js b/assets/js/935f2afb.114848cc.js new file mode 100644 index 0000000..24e7f93 --- /dev/null +++ b/assets/js/935f2afb.114848cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Creating Custom Widgets","href":"/Iris/docs/creatingCustomWidgets","docId":"creatingCustomWidgets"},{"type":"link","label":"Events","href":"/Iris/docs/events","docId":"events"},{"type":"link","label":"Iris","href":"/Iris/docs/intro","docId":"intro"}]},"docs":{"creatingCustomWidgets":{"id":"creatingCustomWidgets","title":"Creating Custom Widgets","description":"Iris has a widget constructor method to create widgets with. Once a widget has been constructed, you can than use it like any other widget. Every widget follows a set of guidelines it must follow when constructed.","sidebar":"defaultSidebar"},"events":{"id":"events","title":"Events","description":"Each widget has a number of events connected to it. You can see these events on the API page.","sidebar":"defaultSidebar"},"intro":{"id":"intro","title":"Iris","description":"Iris is an Immediate mode GUI Library for Roblox, Based on Dear ImGui. It solves the same problems as Dear ImGui. It is fast, portable, and self-contained.","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.cf6576f7.js b/assets/js/935f2afb.cf6576f7.js deleted file mode 100644 index 84d26fc..0000000 --- a/assets/js/935f2afb.cf6576f7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Creating Custom Widgets","href":"/Iris/docs/creatingCustomWidgets","docId":"creatingCustomWidgets"},{"type":"link","label":"Events","href":"/Iris/docs/events","docId":"events"},{"type":"link","label":"Iris","href":"/Iris/docs/intro","docId":"intro"}]},"docs":{"creatingCustomWidgets":{"id":"creatingCustomWidgets","title":"Creating Custom Widgets","description":"Iris comes with the function Iris.WidgetConstructor, which allows you to Construct your own widgets.","sidebar":"defaultSidebar"},"events":{"id":"events","title":"Events","description":"Each widget has a number of events connected to it. You can see these events on the API page.","sidebar":"defaultSidebar"},"intro":{"id":"intro","title":"Iris","description":"Iris is an Immediate mode GUI Library for Roblox, Based on Dear ImGui. It solves the same problems as Dear ImGui. It is fast, portable, and self-contained.","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/95860a96.40f00d12.js b/assets/js/95860a96.0c2cdd69.js similarity index 83% rename from assets/js/95860a96.40f00d12.js rename to assets/js/95860a96.0c2cdd69.js index 9de7b11..ee2700f 100644 --- a/assets/js/95860a96.40f00d12.js +++ b/assets/js/95860a96.0c2cdd69.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6251],{43474:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Selectable","desc":"An object which can be selected.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string,\\n Index: any, -- index of selectable value.\\n NoClick: boolean? = false -- prevents the selectable from being clicked by the user.\\n}\\nEvents = {\\n selected: () -> boolean,\\n unselected: () -> boolean,\\n active: () -> boolean,\\n clicked: () -> boolean,\\n rightClicked: () -> boolean,\\n doubleClicked: () -> boolean,\\n ctrlClicked: () -> boolean,\\n hovered: () -> boolean,\\n}\\nStates = {\\n index: State -- a shared state between all selectables.\\n}\\n```\\n ","lua_type":"Iris.Selectable","tags":["Widget","HasState"],"source":{"line":1382,"path":"lib/API.lua"}},{"name":"Combo","desc":"A selection box to choose a value from a range of values.\\n\\n```lua\\nhasChildren = true\\nhasState = true\\nArguments = {\\n Text: string,\\n NoButton: boolean? = false, -- hide the dropdown button.\\n NoPreview: boolean? = false -- hide the preview field.\\n}\\nEvents = {\\n opened: () -> boolean,\\n clsoed: () -> boolean,\\n clicked: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n index: State,\\n isOpened: State?\\n}\\n```\\n ","lua_type":"Iris.Combo","tags":["Widget","HasChildren","HasState"],"source":{"line":1413,"path":"lib/API.lua"}},{"name":"ComboArray","desc":"A selection box to choose a value from an array.\\n\\n```lua\\nhasChildren = true\\nhasState = true\\nArguments = {\\n Text: string,\\n NoButton: boolean? = false, -- hide the dropdown button.\\n NoPreview: boolean? = false -- hide the preview field.\\n}\\nEvents = {\\n opened: () -> boolean,\\n clsoed: () -> boolean,\\n clicked: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n index: State,\\n isOpened: State?\\n}\\nExtra = {\\n selectionArray: { any } -- the array to generate a combo from.\\n}\\n```\\n ","lua_type":"Iris.Combo","tags":["Widget","HasChildren","HasState"],"source":{"line":1447,"path":"lib/API.lua"}},{"name":"ComboEnum","desc":"A selection box to choose a value from an Enum.\\n\\n```lua\\nhasChildren = true\\nhasState = true\\nArguments = {\\n Text: string,\\n NoButton: boolean? = false, -- hide the dropdown button.\\n NoPreview: boolean? = false -- hide the preview field.\\n}\\nEvents = {\\n opened: () -> boolean,\\n clsoed: () -> boolean,\\n clicked: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n index: State,\\n isOpened: State?\\n}\\nExtra = {\\n enumType: Enum -- the enum to generate a combo from.\\n}\\n```\\n ","lua_type":"Iris.Combo","tags":["Widget","HasChildren","HasState"],"source":{"line":1496,"path":"lib/API.lua"}}],"types":[],"name":"Combo","desc":"Combo Widget API\\n ","source":{"line":1350,"path":"lib/API.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6251],{43474:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Selectable","desc":"An object which can be selected.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string,\\n Index: any, -- index of selectable value.\\n NoClick: boolean? = false -- prevents the selectable from being clicked by the user.\\n}\\nEvents = {\\n selected: () -> boolean,\\n unselected: () -> boolean,\\n active: () -> boolean,\\n clicked: () -> boolean,\\n rightClicked: () -> boolean,\\n doubleClicked: () -> boolean,\\n ctrlClicked: () -> boolean,\\n hovered: () -> boolean,\\n}\\nStates = {\\n index: State -- a shared state between all selectables.\\n}\\n```\\n ","lua_type":"Iris.Selectable","tags":["Widget","HasState"],"source":{"line":1390,"path":"lib/API.lua"}},{"name":"Combo","desc":"A selection box to choose a value from a range of values.\\n\\n```lua\\nhasChildren = true\\nhasState = true\\nArguments = {\\n Text: string,\\n NoButton: boolean? = false, -- hide the dropdown button.\\n NoPreview: boolean? = false -- hide the preview field.\\n}\\nEvents = {\\n opened: () -> boolean,\\n closed: () -> boolean,\\n clicked: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n index: State,\\n isOpened: State?\\n}\\n```\\n ","lua_type":"Iris.Combo","tags":["Widget","HasChildren","HasState"],"source":{"line":1421,"path":"lib/API.lua"}},{"name":"ComboArray","desc":"A selection box to choose a value from an array.\\n\\n```lua\\nhasChildren = true\\nhasState = true\\nArguments = {\\n Text: string,\\n NoButton: boolean? = false, -- hide the dropdown button.\\n NoPreview: boolean? = false -- hide the preview field.\\n}\\nEvents = {\\n opened: () -> boolean,\\n closed: () -> boolean,\\n clicked: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n index: State,\\n isOpened: State?\\n}\\nExtra = {\\n selectionArray: { any } -- the array to generate a combo from.\\n}\\n```\\n ","lua_type":"Iris.Combo","tags":["Widget","HasChildren","HasState"],"source":{"line":1455,"path":"lib/API.lua"}},{"name":"ComboEnum","desc":"A selection box to choose a value from an Enum.\\n\\n```lua\\nhasChildren = true\\nhasState = true\\nArguments = {\\n Text: string,\\n NoButton: boolean? = false, -- hide the dropdown button.\\n NoPreview: boolean? = false -- hide the preview field.\\n}\\nEvents = {\\n opened: () -> boolean,\\n closed: () -> boolean,\\n clicked: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n index: State,\\n isOpened: State?\\n}\\nExtra = {\\n enumType: Enum -- the enum to generate a combo from.\\n}\\n```\\n ","lua_type":"Iris.Combo","tags":["Widget","HasChildren","HasState"],"source":{"line":1504,"path":"lib/API.lua"}}],"types":[],"name":"Combo","desc":"Combo Widget API\\n ","source":{"line":1358,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/99d2f0b4.94446b1e.js b/assets/js/99d2f0b4.94446b1e.js new file mode 100644 index 0000000..e773fd4 --- /dev/null +++ b/assets/js/99d2f0b4.94446b1e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8983],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),o=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c=function(e){var t=o(e.components);return a.createElement(l.Provider,{value:t},e.children)},h="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,l=e.parentName,c=d(e,["components","mdxType","originalType","parentName"]),h=o(n),p=i,g=h["".concat(l,".").concat(p)]||h[p]||u[p]||r;return n?a.createElement(g,s(s({ref:t},c),{},{components:n})):a.createElement(g,s({ref:t},c))}));function g(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,s=new Array(r);s[0]=p;var d={};for(var l in t)hasOwnProperty.call(t,l)&&(d[l]=t[l]);d.originalType=e,d[h]="string"==typeof e?e:i,s[1]=d;for(var o=2;o{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>d,toc:()=>o});var a=n(87462),i=(n(67294),n(3905));const r={},s="Creating Custom Widgets",d={unversionedId:"creatingCustomWidgets",id:"creatingCustomWidgets",title:"Creating Custom Widgets",description:"Iris has a widget constructor method to create widgets with. Once a widget has been constructed, you can than use it like any other widget. Every widget follows a set of guidelines it must follow when constructed.",source:"@site/docs/creatingCustomWidgets.md",sourceDirName:".",slug:"/creatingCustomWidgets",permalink:"/Iris/docs/creatingCustomWidgets",draft:!1,editUrl:"https://github.com/Michael-48/Iris/edit/main/docs/creatingCustomWidgets.md",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",next:{title:"Events",permalink:"/Iris/docs/events"}},l={},o=[{value:"Widget Construction",id:"widget-construction",level:2},{value:"Generate",id:"generate",level:3},{value:"Update",id:"update",level:3},{value:"Discard",id:"discard",level:3},{value:"Events",id:"events",level:3},{value:"Args",id:"args",level:3},{value:"GenerateState",id:"generatestate",level:3},{value:"UpdateState",id:"updatestate",level:3},{value:"ChildAdded",id:"childadded",level:3},{value:"ChildDiscarded",id:"childdiscarded",level:3},{value:"Widget Usage",id:"widget-usage",level:2},{value:"When does a widget need to have state?",id:"when-does-a-widget-need-to-have-state",level:2}],c={toc:o},h="wrapper";function u(e){let{components:t,...n}=e;return(0,i.kt)(h,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"creating-custom-widgets"},"Creating Custom Widgets"),(0,i.kt)("h1",{id:"overview"},"Overview"),(0,i.kt)("p",null,"Iris has a widget constructor method to create widgets with. Once a widget has been constructed, you can than use it like any other widget. Every widget follows a set of guidelines it must follow when constructed."),(0,i.kt)("p",null,"To construct a new widget, you can call ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.WidgetConstructor()")," with the widget name and widget class. To then use the widget you can call ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Internal._Insert()")," with the widget name and then optional argument and state tables."),(0,i.kt)("h1",{id:"documentation"},"Documentation"),(0,i.kt)("h2",{id:"widget-construction"},"Widget Construction"),(0,i.kt)("p",null,"For Instance, this is the call to ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.WidgetConstructor")," for the ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Text")," widget:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'Iris.WidgetConstructor("Text", {\n hasState = false,\n hasChildren = false,\n Args = {\n ["Text"] = 1\n },\n Events {\n ["hovered"] = {\n ...\n }\n }\n Generate = function(thisWidget)\n local Text = Instance.new("TextLabel")\n \n ...\n\n return Text\n end,\n Update = function(thisWidget)\n ...\n end,\n Discard = function(thisWidget)\n thisWidget.Instance:Destroy()\n end\n})\n')),(0,i.kt)("p",null,"The first argument, ",(0,i.kt)("inlineCode",{parentName:"p"},"type: string"),", specifies a name for the widget."),(0,i.kt)("p",null,"The second argument is the widget class. The methods which a widget class has depends on the value of ",(0,i.kt)("inlineCode",{parentName:"p"},"hasState")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"hasChildren"),". Every widget class should specify if it ",(0,i.kt)("inlineCode",{parentName:"p"},"hasState")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"hasChildren"),". The example widget, a text label, has no state, and it does not contain other widgets, so both are false. Every widget must have the following functions:"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"All Widgets"),(0,i.kt)("th",{parentName:"tr",align:null},"Widgets with State"),(0,i.kt)("th",{parentName:"tr",align:null},"Widgets with Children"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Generate"),(0,i.kt)("td",{parentName:"tr",align:null},"GenerateState"),(0,i.kt)("td",{parentName:"tr",align:null},"ChildAdded")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Update"),(0,i.kt)("td",{parentName:"tr",align:null},"UpdateState"),(0,i.kt)("td",{parentName:"tr",align:null},"ChildDiscarded (optional)")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Discard"),(0,i.kt)("td",{parentName:"tr",align:null}),(0,i.kt)("td",{parentName:"tr",align:null})),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Args"),(0,i.kt)("td",{parentName:"tr",align:null}),(0,i.kt)("td",{parentName:"tr",align:null})),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Events"),(0,i.kt)("td",{parentName:"tr",align:null}),(0,i.kt)("td",{parentName:"tr",align:null})))),(0,i.kt)("h3",{id:"generate"},"Generate"),(0,i.kt)("p",null,"Generate is called when a widget is first instantiated. It should create all the instances and properly adjust them to fit the config properties.\nGenerate is also called when style properties change."),(0,i.kt)("p",null,"Generate should return the instance which acts as the root of the widget. (what should be parented to the parents designated Instance)"),(0,i.kt)("h3",{id:"update"},"Update"),(0,i.kt)("p",null,"Update is called only after instantiation and when widget arguments have changed.\nFor instance, in ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Text")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'Update = function(thisWidget)\n local Text = thisWidget.Instance\n if thisWidget.arguments.Text == nil then\n error("Iris.Text Text Argument is required", 5)\n end\n Text.Text = thisWidget.arguments.Text\nend\n')),(0,i.kt)("h3",{id:"discard"},"Discard"),(0,i.kt)("p",null,"Discard is called when the widget stops being displayed. In most cases the function body should resemble this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},"Discard = function(thisWidget)\n thisWidget.Instance:Destroy()\nend\n")),(0,i.kt)("h3",{id:"events"},"Events"),(0,i.kt)("p",null,"Events is a table, not a method. It contains all of the possible events which a widget can have. Lets look at the hovered event as an example."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'["hovered"] = {\n ["Init"] = function(thisWidget)\n local hoveredGuiObject = thisWidget.Instance\n thisWidget.isHoveredEvent = false\n\n hoveredGuiObject.MouseEnter:Connect(function()\n thisWidget.isHoveredEvent = true\n end)\n hoveredGuiObject.MouseLeave:Connect(function()\n thisWidget.isHoveredEvent = false\n end)\n end,\n ["Get"] = function(thisWidget)\n return thisWidget.isHoveredEvent\n end\n}\n')),(0,i.kt)("p",null,"Every event has 2 methods, ",(0,i.kt)("inlineCode",{parentName:"p"},"Init")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"Get"),".\n",(0,i.kt)("inlineCode",{parentName:"p"},"Init")," is called when a widget first polls the value of an event.\nBecause of this, you can instantiate events and variables for an event to only widgets which need it.\n",(0,i.kt)("inlineCode",{parentName:"p"},"Get")," is the actual function which is called by the call to an event (like ",(0,i.kt)("inlineCode",{parentName:"p"},"Button.hovered()"),"), it should return the event value."),(0,i.kt)("h3",{id:"args"},"Args"),(0,i.kt)("p",null,"Args is a table, not a method. It enumerates all of the possible arguments which may be passed as arguments into the widget.\nThe order of the tables indicies indicate which position the Argument will be interpreted as. For instance, in ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Text"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'Args = {\n ["Text"] = 1\n}\n')),(0,i.kt)("p",null,"when a Text widget is generated, the first index of the Arguments table will be interpreted as the 'Text' parameter"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'Iris.Text({[1] = "Hello"})\n-- same result\nIris.Text({"Hello"})\n')),(0,i.kt)("p",null,"the ",(0,i.kt)("inlineCode",{parentName:"p"},"Update")," function can retrieve arguments from ",(0,i.kt)("inlineCode",{parentName:"p"},"thisWidget.arguments"),", such as ",(0,i.kt)("inlineCode",{parentName:"p"},"thisWidget.arguments.Text")),(0,i.kt)("h3",{id:"generatestate"},"GenerateState"),(0,i.kt)("p",null,"GenerateState is called when the widget is first Instantiated, It should generate any state objects which weren't passed as a state by the user.\nFor Instance, in ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Checkbox"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'GenerateState = function(thisWidget)\n if thisWidget.state.isChecked == nil then\n thisWidget.state.isChecked = Iris._widgetState(thisWidget, "checked", false)\n end\nend\n')),(0,i.kt)("h3",{id:"updatestate"},"UpdateState"),(0,i.kt)("p",null,"UpdateState is called whenever ANY state objects are updated, using its :set() method.\nFor instance, in ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Checkbox"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'UpdateState = function(thisWidget)\n local Checkbox = thisWidget.Instance.CheckboxBox\n if thisWidget.state.isChecked.value then\n Checkbox.Text = ICONS.CHECK_MARK\n thisWidget.events.checked = true\n else\n Checkbox.Text = ""\n thisWidget.events.unchecked = true\n end\nend\n')),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"calling :set() to any of a widget's own state objects inside of UpdateState may cause an infinite loop of state updates.\nUpdateState should avoid calling :set().")),(0,i.kt)("h3",{id:"childadded"},"ChildAdded"),(0,i.kt)("p",null,"ChildAdded is called when a widget is first Initiated and is a child of the widget. ChildAdded should return the Instance which the Child will be parented to."),(0,i.kt)("h3",{id:"childdiscarded"},"ChildDiscarded"),(0,i.kt)("p",null,"ChildDiscarded is called when a widget is Discarded and is a child of the widget. ChildDiscarded is optional."),(0,i.kt)("h2",{id:"widget-usage"},"Widget Usage"),(0,i.kt)("p",null,"To use this widget once it has been constructed, you can use:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'Iris.Internal._Insert("Text", {"Sampele text"}, nil) -- "Text" argument and no state\n')),(0,i.kt)("p",null,"This is the same as calling any other widget but requires the widget name as passed to ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.WidgetConstructor()")," as the first argument."),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"when-does-a-widget-need-to-have-state"},"When does a widget need to have state?"),(0,i.kt)("p",null,"State should only be used by widgets when there are properties which are able to be set by BOTH the widget, and by the user's code."),(0,i.kt)("p",null,"For Instance, ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Window")," has a state, ",(0,i.kt)("inlineCode",{parentName:"p"},"size"),". This field can be changed by the user's code, to adjust or initiate the size, and the widget also changes the size when it is resized."),(0,i.kt)("p",null,"If the window was never able to change the size property, such as if there were no resize feature, then instead it should be an argument."),(0,i.kt)("p",null,"This table demonstrates the relation between User / Widget permissions, and where the field should belong inside the widget class."),(0,i.kt)("div",{align:"Left"},(0,i.kt)("img",{src:"https://raw.githubusercontent.com/Michael-48/Iris/main/assets/IrisHelpfulChart.png",alt:"Sample Display Output"})))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/99d2f0b4.fbb78023.js b/assets/js/99d2f0b4.fbb78023.js deleted file mode 100644 index e16777e..0000000 --- a/assets/js/99d2f0b4.fbb78023.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8983],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>g});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),o=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},h=function(e){var t=o(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,l=e.parentName,h=d(e,["components","mdxType","originalType","parentName"]),c=o(n),p=i,g=c["".concat(l,".").concat(p)]||c[p]||u[p]||r;return n?a.createElement(g,s(s({ref:t},h),{},{components:n})):a.createElement(g,s({ref:t},h))}));function g(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,s=new Array(r);s[0]=p;var d={};for(var l in t)hasOwnProperty.call(t,l)&&(d[l]=t[l]);d.originalType=e,d[c]="string"==typeof e?e:i,s[1]=d;for(var o=2;o{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>d,toc:()=>o});var a=n(87462),i=(n(67294),n(3905));const r={},s="Creating Custom Widgets",d={unversionedId:"creatingCustomWidgets",id:"creatingCustomWidgets",title:"Creating Custom Widgets",description:"Iris comes with the function Iris.WidgetConstructor, which allows you to Construct your own widgets.",source:"@site/docs/creatingCustomWidgets.md",sourceDirName:".",slug:"/creatingCustomWidgets",permalink:"/Iris/docs/creatingCustomWidgets",draft:!1,editUrl:"https://github.com/Michael-48/Iris/edit/master/docs/creatingCustomWidgets.md",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",next:{title:"Events",permalink:"/Iris/docs/events"}},l={},o=[{value:"Generate",id:"generate",level:3},{value:"Update",id:"update",level:3},{value:"Discard",id:"discard",level:3},{value:"Events",id:"events",level:3},{value:"Args",id:"args",level:3},{value:"GenerateState",id:"generatestate",level:3},{value:"UpdateState",id:"updatestate",level:3},{value:"ChildAdded",id:"childadded",level:3},{value:"ChildDiscarded",id:"childdiscarded",level:3},{value:"When does a widget need to have state?",id:"when-does-a-widget-need-to-have-state",level:2}],h={toc:o},c="wrapper";function u(e){let{components:t,...n}=e;return(0,i.kt)(c,(0,a.Z)({},h,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"creating-custom-widgets"},"Creating Custom Widgets"),(0,i.kt)("h1",{id:"overview"},"Overview"),(0,i.kt)("p",null,"Iris comes with the function ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.WidgetConstructor"),", which allows you to Construct your own widgets. "),(0,i.kt)("p",null,"For Instance, This is the call to ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.WidgetConstructor")," for the ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Text")," widget:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'Iris.WidgetConstructor("Text", {\n hasState = false,\n hasChildren = false,\n Args = {\n ["Text"] = 1\n },\n Events {\n ["hovered"] = {\n ...\n }\n }\n Generate = function(thisWidget)\n local Text = Instance.new("TextLabel")\n \n ...\n\n return Text\n end,\n Update = function(thisWidget)\n ...\n end,\n Discard = function(thisWidget)\n thisWidget.Instance:Destroy()\n end\n})\n')),(0,i.kt)("p",null,"The First argument, ",(0,i.kt)("inlineCode",{parentName:"p"},"type: string"),", specifies a name for the widget"),(0,i.kt)("p",null,"The fourth argument contains the class for the widget. The methods which a widget class may have depend on the value of ",(0,i.kt)("inlineCode",{parentName:"p"},"hasState")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"hasChildren"),".\nevery widget class should specify if it hasState and hasChildren. In the instance of Iris.Text, It has no state, and it cant contain other widgets, so both are false."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"All Widgets"),(0,i.kt)("th",{parentName:"tr",align:null},"Widgets with State"),(0,i.kt)("th",{parentName:"tr",align:null},"Widgets with Children"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Generate"),(0,i.kt)("td",{parentName:"tr",align:null},"GenerateState"),(0,i.kt)("td",{parentName:"tr",align:null},"ChildAdded")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Update"),(0,i.kt)("td",{parentName:"tr",align:null},"UpdateState"),(0,i.kt)("td",{parentName:"tr",align:null},"ChildDiscarded (optional)")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Discard"),(0,i.kt)("td",{parentName:"tr",align:null}),(0,i.kt)("td",{parentName:"tr",align:null})),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Args"),(0,i.kt)("td",{parentName:"tr",align:null}),(0,i.kt)("td",{parentName:"tr",align:null})),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Events"),(0,i.kt)("td",{parentName:"tr",align:null}),(0,i.kt)("td",{parentName:"tr",align:null})))),(0,i.kt)("h3",{id:"generate"},"Generate"),(0,i.kt)("p",null,"Generate is called when a widget is first instantiated. It should create all the instances and properly adjust them to fit the config properties.\nGenerate is also called when style properties change."),(0,i.kt)("p",null,"Generate should return the instance which acts as the root of the widget. (what should be parented to the parents designated Instance)"),(0,i.kt)("h3",{id:"update"},"Update"),(0,i.kt)("p",null,"Update is called only after instantiation and when widget arguments have changed.\nFor instance, in ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Text")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'Update = function(thisWidget)\n local Text = thisWidget.Instance\n if thisWidget.arguments.Text == nil then\n error("Iris.Text Text Argument is required", 5)\n end\n Text.Text = thisWidget.arguments.Text\nend\n')),(0,i.kt)("h3",{id:"discard"},"Discard"),(0,i.kt)("p",null,"Discard is called when the widget stops being displayed. In most cases the function body should resemble this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},"Discard = function(thisWidget)\n thisWidget.Instance:Destroy()\nend\n")),(0,i.kt)("h3",{id:"events"},"Events"),(0,i.kt)("p",null,"Events is a table, not a method. It contains all of the possible events which a widget can have. Lets look at the hovered event as an example."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'["hovered"] = {\n ["Init"] = function(thisWidget)\n local hoveredGuiObject = thisWidget.Instance\n thisWidget.isHoveredEvent = false\n\n hoveredGuiObject.MouseEnter:Connect(function()\n thisWidget.isHoveredEvent = true\n end)\n hoveredGuiObject.MouseLeave:Connect(function()\n thisWidget.isHoveredEvent = false\n end)\n end,\n ["Get"] = function(thisWidget)\n return thisWidget.isHoveredEvent\n end\n}\n')),(0,i.kt)("p",null,"Every event has 2 methods, ",(0,i.kt)("inlineCode",{parentName:"p"},"Init")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"Get"),".\n",(0,i.kt)("inlineCode",{parentName:"p"},"Init")," is called when a widget first polls the value of an event.\nBecause of this, you can instantiate events and variables for an event to only widgets which need it.\n",(0,i.kt)("inlineCode",{parentName:"p"},"Get")," is the actual function which is called by the call to an event (like ",(0,i.kt)("inlineCode",{parentName:"p"},"Button.hovered()"),"), it should return the event value."),(0,i.kt)("h3",{id:"args"},"Args"),(0,i.kt)("p",null,"Args is a table, not a method. It enumerates all of the possible arguments which may be passed as arguments into the widget.\nThe order of the tables indicies indicate which position the Argument will be interpreted as. For instance, in ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Text"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'Args = {\n ["Text"] = 1\n}\n')),(0,i.kt)("p",null,"when a Text widget is generated, the first index of the Arguments table will be interpreted as the 'Text' parameter"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'Iris.Text({[1] = "Hello"})\n-- same result\nIris.Text({"Hello"})\n')),(0,i.kt)("p",null,"the ",(0,i.kt)("inlineCode",{parentName:"p"},"Update")," function can retrieve arguments from ",(0,i.kt)("inlineCode",{parentName:"p"},"thisWidget.arguments"),", such as ",(0,i.kt)("inlineCode",{parentName:"p"},"thisWidget.arguments.Text")),(0,i.kt)("h3",{id:"generatestate"},"GenerateState"),(0,i.kt)("p",null,"GenerateState is called when the widget is first Instantiated, It should generate any state objects which weren't passed as a state by the user.\nFor Instance, in ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Checkbox"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'GenerateState = function(thisWidget)\n if thisWidget.state.isChecked == nil then\n thisWidget.state.isChecked = Iris._widgetState(thisWidget, "checked", false)\n end\nend\n')),(0,i.kt)("h3",{id:"updatestate"},"UpdateState"),(0,i.kt)("p",null,"UpdateState is called whenever ANY state objects are updated, using its :set() method.\nFor instance, in ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Checkbox"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-lua"},'UpdateState = function(thisWidget)\n local Checkbox = thisWidget.Instance.CheckboxBox\n if thisWidget.state.isChecked.value then\n Checkbox.Text = ICONS.CHECK_MARK\n thisWidget.events.checked = true\n else\n Checkbox.Text = ""\n thisWidget.events.unchecked = true\n end\nend\n')),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"calling :set() to any of a widget's own state objects inside of UpdateState may cause an infinite loop of state updates.\nUpdateState should avoid calling :set().")),(0,i.kt)("h3",{id:"childadded"},"ChildAdded"),(0,i.kt)("p",null,"ChildAdded is called when a widget is first Initiated and is a child of the widget. ChildAdded should return the Instance which the Child will be parented to."),(0,i.kt)("h3",{id:"childdiscarded"},"ChildDiscarded"),(0,i.kt)("p",null,"ChildDiscarded is called when a widget is Discarded and is a child of the widget. ChildDiscarded is optional."),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"when-does-a-widget-need-to-have-state"},"When does a widget need to have state?"),(0,i.kt)("p",null,"State should only be used by widgets when there are properties which are able to be set by BOTH the widget, and by the user's code."),(0,i.kt)("p",null,"For Instance, ",(0,i.kt)("inlineCode",{parentName:"p"},"Iris.Window")," has a state, ",(0,i.kt)("inlineCode",{parentName:"p"},"size"),". This field can be changed by the user's code, to adjust or initiate the size, and the widget also changes the size when it is resized."),(0,i.kt)("p",null,"If the window was never able to change the size property, such as if there were no resize feature, then instead it should be an argument."),(0,i.kt)("p",null,"This table demonstrates the relation between User / Widget permissions, and where the field should belong inside the widget class."),(0,i.kt)("div",{align:"Left"},(0,i.kt)("img",{src:"https://raw.githubusercontent.com/Michael-48/Iris/main/assets/IrisHelpfulChart.png",alt:"Sample Display Output"})))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a26a5453.241c0d7c.js b/assets/js/a26a5453.e5cff4e2.js similarity index 80% rename from assets/js/a26a5453.241c0d7c.js rename to assets/js/a26a5453.e5cff4e2.js index 351df37..652c4a0 100644 --- a/assets/js/a26a5453.241c0d7c.js +++ b/assets/js/a26a5453.e5cff4e2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6857],{62643:e=>{e.exports=JSON.parse('{"functions":[{"name":"get","desc":"Returns the states current value.\\n ","params":[],"returns":[{"desc":"","lua_type":"any"}],"function_type":"method","source":{"line":128,"path":"lib/Internal.lua"}},{"name":"set","desc":"Allows the caller to assign the state object a new value, and returns the new value.\\n ","params":[],"returns":[],"function_type":"method","source":{"line":138,"path":"lib/Internal.lua"}},{"name":"onChange","desc":"Allows the caller to connect a callback which is called when the states value is changed.\\n ","params":[],"returns":[],"function_type":"method","source":{"line":159,"path":"lib/Internal.lua"}}],"properties":[],"types":[],"name":"State","desc":"This class wraps a value in getters and setters, its main purpose is to allow primatives to be passed as objects.\\nConstructors for this class are available in [Iris]\\n\\n```lua\\nlocal state = Iris.State(0) -- we initialise the state with a value of 0\\n\\n-- these are equivalent. Ideally you should use `:get()` and ignore `.value`.\\nprint(state:get())\\nprint(state.value)\\n\\nstate:set(state:get() + 1) -- increments the state by getting the current value and adding 1.\\n\\nstate:onChange(function(newValue)\\n print(`The value of the state is now: {newValue}`)\\nend)\\n```\\n\\n:::caution\\nNever call \':set()` on a state when inside the the `:onChange()` callback of the same state. This will cause a continous callback.\\n\\nNever chain states together so that each state changes the value of another state in a cyclic nature. This will cause a continous callback.\\n:::\\n ","source":{"line":117,"path":"lib/Internal.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6857],{62643:e=>{e.exports=JSON.parse('{"functions":[{"name":"get","desc":"Returns the states current value.\\n ","params":[],"returns":[{"desc":"","lua_type":"any"}],"function_type":"method","source":{"line":128,"path":"lib/Internal.lua"}},{"name":"set","desc":"Allows the caller to assign the state object a new value, and returns the new value.\\n ","params":[],"returns":[],"function_type":"method","source":{"line":138,"path":"lib/Internal.lua"}},{"name":"onChange","desc":"Allows the caller to connect a callback which is called when the states value is changed.\\n ","params":[],"returns":[],"function_type":"method","source":{"line":159,"path":"lib/Internal.lua"}}],"properties":[],"types":[],"name":"State","desc":"This class wraps a value in getters and setters, its main purpose is to allow primatives to be passed as objects.\\nConstructors for this class are available in [Iris]\\n\\n```lua\\nlocal state = Iris.State(0) -- we initialise the state with a value of 0\\n\\n-- these are equivalent. Ideally you should use `:get()` and ignore `.value`.\\nprint(state:get())\\nprint(state.value)\\n\\nstate:set(state:get() + 1) -- increments the state by getting the current value and adding 1.\\n\\nstate:onChange(function(newValue)\\n print(`The value of the state is now: {newValue}`)\\nend)\\n```\\n\\n:::caution\\nNever call `:set()` on a state when inside the `:onChange()` callback of the same state. This will cause a continous callback.\\n\\nNever chain states together so that each state changes the value of another state in a cyclic nature. This will cause a continous callback.\\n:::\\n ","source":{"line":117,"path":"lib/Internal.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/adbcaee3.91b7c60b.js b/assets/js/adbcaee3.1e9378eb.js similarity index 88% rename from assets/js/adbcaee3.91b7c60b.js rename to assets/js/adbcaee3.1e9378eb.js index 5e103a4..f22f207 100644 --- a/assets/js/adbcaee3.91b7c60b.js +++ b/assets/js/adbcaee3.1e9378eb.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3298],{70781:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Text","desc":"A text label to display the text argument.\\nThe Wrapped argument will make the text wrap around if it is cut off by its parent.\\nThe Color argument will change the color of the text, by default it is defined in the configuration file.\\nThe RichText argument will \\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n Wrapped: boolean? = [CONFIG] = false, -- whether the text will wrap around inside the parent container. If not specified, then equal to the config\\n Color: Color3? = Iris._config.TextColor, -- the colour of the text.\\n RichText: boolean? = [CONFIG] = false -- enable RichText. If not specified, then equal to the config\\n}\\nEvents = {\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.Text","tags":["Widget"],"source":{"line":336,"path":"lib/API.lua"}},{"name":"TextWrapped","desc":"An alias for [Iris.Text](Text#Text) with the Wrapped argument set to true, and the text will wrap around if cut off by its parent.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n}\\nEvents = {\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.Text","tags":["Widget"],"deprecated":{"version":"v2.0.0","desc":"Use \'Text\' with the Wrapped argument or change the config."},"source":{"line":357,"path":"lib/API.lua"}},{"name":"TextColored","desc":"An alias for [Iris.Text](Text#Text) with the color set by the Color argument.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n Color: Color3 -- the colour of the text.\\n}\\nEvents = {\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.Text","tags":["Widget"],"deprecated":{"version":"v2.0.0","desc":"Use \'Text\' with the Color argument or change the config."},"source":{"line":382,"path":"lib/API.lua"}},{"name":"SeparatorText","desc":"Similar to [Iris.Separator](Format#Separator) but with a text label to be used as a header\\nwhen an [Iris.Tree](Tree#Tree) or [Iris.CollapsingHeader](Tree#CollapsingHeader) is not appropriate.\\n\\nVisually a full width thin line with a text label clipping out part of the line.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string\\n}\\n```\\n ","lua_type":"Iris.SeparatorText","tags":["Widget"],"source":{"line":406,"path":"lib/API.lua"}},{"name":"InputText","desc":"A field which allows the user to enter text.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputText\\",\\n TextHint: string? = \\"\\" -- a hint to display when the text box is empty.\\n}\\nEvents = {\\n textChanged: () -> boolean, -- whenever the textbox looses focus and a change was made.\\n hovered: () -> boolean\\n}\\nStates = {\\n text: State?\\n}\\n```\\n ","lua_type":"Iris.InputText","tags":["Widget","HasState"],"source":{"line":432,"path":"lib/API.lua"}}],"types":[],"name":"Text","desc":"Text Widget API\\n ","source":{"line":311,"path":"lib/API.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3298],{70781:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Text","desc":"A text label to display the text argument.\\nThe Wrapped argument will make the text wrap around if it is cut off by its parent.\\nThe Color argument will change the color of the text, by default it is defined in the configuration file.\\nThe RichText argument will \\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n Wrapped: boolean? = [CONFIG] = false, -- whether the text will wrap around inside the parent container. If not specified, then equal to the config\\n Color: Color3? = Iris._config.TextColor, -- the colour of the text.\\n RichText: boolean? = [CONFIG] = false -- enable RichText. If not specified, then equal to the config\\n}\\nEvents = {\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.Text","tags":["Widget"],"source":{"line":344,"path":"lib/API.lua"}},{"name":"TextWrapped","desc":"An alias for [Iris.Text](Text#Text) with the Wrapped argument set to true, and the text will wrap around if cut off by its parent.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n}\\nEvents = {\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.Text","tags":["Widget"],"deprecated":{"version":"v2.0.0","desc":"Use \'Text\' with the Wrapped argument or change the config."},"source":{"line":365,"path":"lib/API.lua"}},{"name":"TextColored","desc":"An alias for [Iris.Text](Text#Text) with the color set by the Color argument.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string,\\n Color: Color3 -- the colour of the text.\\n}\\nEvents = {\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.Text","tags":["Widget"],"deprecated":{"version":"v2.0.0","desc":"Use \'Text\' with the Color argument or change the config."},"source":{"line":390,"path":"lib/API.lua"}},{"name":"SeparatorText","desc":"Similar to [Iris.Separator](Format#Separator) but with a text label to be used as a header\\nwhen an [Iris.Tree](Tree#Tree) or [Iris.CollapsingHeader](Tree#CollapsingHeader) is not appropriate.\\n\\nVisually a full width thin line with a text label clipping out part of the line.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\nArguments = {\\n Text: string\\n}\\n```\\n ","lua_type":"Iris.SeparatorText","tags":["Widget"],"source":{"line":414,"path":"lib/API.lua"}},{"name":"InputText","desc":"A field which allows the user to enter text.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputText\\",\\n TextHint: string? = \\"\\" -- a hint to display when the text box is empty.\\n}\\nEvents = {\\n textChanged: () -> boolean, -- whenever the textbox looses focus and a change was made.\\n hovered: () -> boolean\\n}\\nStates = {\\n text: State?\\n}\\n```\\n ","lua_type":"Iris.InputText","tags":["Widget","HasState"],"source":{"line":440,"path":"lib/API.lua"}}],"types":[],"name":"Text","desc":"Text Widget API\\n ","source":{"line":319,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/c287ee48.16075345.js b/assets/js/c287ee48.16075345.js deleted file mode 100644 index bd1e922..0000000 --- a/assets/js/c287ee48.16075345.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5814],{32639:e=>{e.exports=JSON.parse('[{"value":"Types","id":"types","level":2},{"value":"Properties","id":"properties","level":2},{"value":"Args","id":"Args","level":3},{"value":"Disabled","id":"Disabled","level":3},{"value":"TemplateConfig","id":"TemplateConfig","level":3},{"value":"Functions","id":"functions","level":2},{"value":":Connect","id":"Connect","level":3},{"value":":Shutdown","id":"Shutdown","level":3},{"value":".Append","id":"Append","level":3},{"value":".ComputedState","id":"ComputedState","level":3},{"value":".End","id":"End","level":3},{"value":".ForceRefresh","id":"ForceRefresh","level":3},{"value":".Init","id":"Init","level":3},{"value":".PopConfig","id":"PopConfig","level":3},{"value":".PopId","id":"PopId","level":3},{"value":".PushConfig","id":"PushConfig","level":3},{"value":".PushId","id":"PushId","level":3},{"value":".SetFocusedWindow","id":"SetFocusedWindow","level":3},{"value":".SetNextWidgetId","id":"SetNextWidgetId","level":3},{"value":".ShowDemoWindow","id":"ShowDemoWindow","level":3},{"value":".State","id":"State","level":3},{"value":".UpdateGlobalConfig","id":"UpdateGlobalConfig","level":3},{"value":".WeakState","id":"WeakState","level":3}]')}}]); \ No newline at end of file diff --git a/assets/js/c287ee48.deec9374.js b/assets/js/c287ee48.deec9374.js new file mode 100644 index 0000000..79197f4 --- /dev/null +++ b/assets/js/c287ee48.deec9374.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5814],{32639:e=>{e.exports=JSON.parse('[{"value":"Types","id":"types","level":2},{"value":"Properties","id":"properties","level":2},{"value":"Args","id":"Args","level":3},{"value":"Disabled","id":"Disabled","level":3},{"value":"TemplateConfig","id":"TemplateConfig","level":3},{"value":"Functions","id":"functions","level":2},{"value":":Connect","id":"Connect","level":3},{"value":".Append","id":"Append","level":3},{"value":".ComputedState","id":"ComputedState","level":3},{"value":".End","id":"End","level":3},{"value":".ForceRefresh","id":"ForceRefresh","level":3},{"value":".Init","id":"Init","level":3},{"value":".PopConfig","id":"PopConfig","level":3},{"value":".PopId","id":"PopId","level":3},{"value":".PushConfig","id":"PushConfig","level":3},{"value":".PushId","id":"PushId","level":3},{"value":".SetFocusedWindow","id":"SetFocusedWindow","level":3},{"value":".SetNextWidgetID","id":"SetNextWidgetID","level":3},{"value":".ShowDemoWindow","id":"ShowDemoWindow","level":3},{"value":".Shutdown","id":"Shutdown","level":3},{"value":".State","id":"State","level":3},{"value":".UpdateGlobalConfig","id":"UpdateGlobalConfig","level":3},{"value":".WeakState","id":"WeakState","level":3}]')}}]); \ No newline at end of file diff --git a/assets/js/c91d22a1.bdf50a7d.js b/assets/js/c91d22a1.60b66644.js similarity index 61% rename from assets/js/c91d22a1.bdf50a7d.js rename to assets/js/c91d22a1.60b66644.js index d3fa68a..6509033 100644 --- a/assets/js/c91d22a1.bdf50a7d.js +++ b/assets/js/c91d22a1.60b66644.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6398],{35579:n=>{n.exports=JSON.parse('{"functions":[],"properties":[{"name":"DragNum","desc":"A field which allows the user to click and drag their cursor to enter a number.\\nYou can ctrl + click to directly input a number, like InputNum.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragNum\\",\\n Increment: number? = nil,\\n Min: number? = nil,\\n Max: number? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragNum","tags":["Widget","HasState"],"source":{"line":881,"path":"lib/API.lua"}},{"name":"DragVector2","desc":"A field which allows the user to click and drag their cursor to enter a Vector2.\\nYou can ctrl + click to directly input a Vector2, like InputVector2.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragVector2\\",\\n Increment: Vector2? = nil,\\n Min: Vector2? = nil,\\n Max: Vector2? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragVector2","tags":["Widget","HasState"],"source":{"line":913,"path":"lib/API.lua"}},{"name":"DragVector3","desc":"A field which allows the user to click and drag their cursor to enter a Vector3.\\nYou can ctrl + click to directly input a Vector3, like InputVector3.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragVector3\\",\\n Increment: Vector3? = nil,\\n Min: Vector3? = nil,\\n Max: Vector3? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragVector3","tags":["Widget","HasState"],"source":{"line":945,"path":"lib/API.lua"}},{"name":"DragUDim","desc":"A field which allows the user to click and drag their cursor to enter a UDim.\\nYou can ctrl + click to directly input a UDim, like InputUDim.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragUDim\\",\\n Increment: UDim? = nil,\\n Min: UDim? = nil,\\n Max: UDim? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragUDim","tags":["Widget","HasState"],"source":{"line":977,"path":"lib/API.lua"}},{"name":"DragUDim2","desc":"A field which allows the user to click and drag their cursor to enter a UDim2.\\nYou can ctrl + click to directly input a UDim2, like InputUDim2.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragUDim2\\",\\n Increment: UDim2? = nil,\\n Min: UDim2? = nil,\\n Max: UDim2? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragUDim2","tags":["Widget","HasState"],"source":{"line":1009,"path":"lib/API.lua"}},{"name":"DragRect","desc":"A field which allows the user to click and drag their cursor to enter a Rect.\\nYou can ctrl + click to directly input a Rect, like InputRect.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragRect\\",\\n Increment: Rect? = nil,\\n Min: Rect? = nil,\\n Max: Rect? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragRect","tags":["Widget","HasState"],"source":{"line":1041,"path":"lib/API.lua"}},{"name":"InputColor3","desc":"An input box for Color3. The input boxes are draggable between 0 and 255 or if UseFloats then between 0 and 1.\\nInput can also be done using HSV instead of the default RGB.\\nIf no format argument is provided then a default R, G, B or H, S, V prefix is applied.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputColor3\\",\\n UseFloats: boolean? = false, -- constrain the values between floats 0 and 1 or integers 0 and 255.\\n UseHSV: boolean? = false, -- input using HSV instead.\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n color: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputColor3","tags":["Widget","HasState"],"source":{"line":1072,"path":"lib/API.lua"}},{"name":"InputColor4","desc":"An input box for Color4. Color4 is a combination of Color3 and a fourth transparency argument.\\nIt has two states for this purpose.\\nThe input boxes are draggable between 0 and 255 or if UseFloats then between 0 and 1.\\nInput can also be done using HSV instead of the default RGB.\\nIf no format argument is provided then a default R, G, B, T or H, S, V, T prefix is applied.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"InputColor4\\",\\n UseFloats: boolean? = false, -- constrain the values between floats 0 and 1 or integers 0 and 255.\\n UseHSV: boolean? = false, -- input using HSV instead.\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n color: State?,\\n transparency: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.InputColor4","tags":["Widget","HasState"],"source":{"line":1106,"path":"lib/API.lua"}}],"types":[],"name":"Drag","desc":"Drag Widget API\\n\\nA draggable widget for each datatype. Allows direct typing input but also dragging values by clicking and holding.\\n\\nSee [Input] for more details on the arguments.\\n ","source":{"line":850,"path":"lib/API.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6398],{35579:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"DragNum","desc":"A field which allows the user to click and drag their cursor to enter a number.\\nYou can ctrl + click to directly input a number, like InputNum.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragNum\\",\\n Increment: number? = nil,\\n Min: number? = nil,\\n Max: number? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragNum","tags":["Widget","HasState"],"source":{"line":889,"path":"lib/API.lua"}},{"name":"DragVector2","desc":"A field which allows the user to click and drag their cursor to enter a Vector2.\\nYou can ctrl + click to directly input a Vector2, like InputVector2.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragVector2\\",\\n Increment: Vector2? = nil,\\n Min: Vector2? = nil,\\n Max: Vector2? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragVector2","tags":["Widget","HasState"],"source":{"line":921,"path":"lib/API.lua"}},{"name":"DragVector3","desc":"A field which allows the user to click and drag their cursor to enter a Vector3.\\nYou can ctrl + click to directly input a Vector3, like InputVector3.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragVector3\\",\\n Increment: Vector3? = nil,\\n Min: Vector3? = nil,\\n Max: Vector3? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragVector3","tags":["Widget","HasState"],"source":{"line":953,"path":"lib/API.lua"}},{"name":"DragUDim","desc":"A field which allows the user to click and drag their cursor to enter a UDim.\\nYou can ctrl + click to directly input a UDim, like InputUDim.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragUDim\\",\\n Increment: UDim? = nil,\\n Min: UDim? = nil,\\n Max: UDim? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragUDim","tags":["Widget","HasState"],"source":{"line":985,"path":"lib/API.lua"}},{"name":"DragUDim2","desc":"A field which allows the user to click and drag their cursor to enter a UDim2.\\nYou can ctrl + click to directly input a UDim2, like InputUDim2.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragUDim2\\",\\n Increment: UDim2? = nil,\\n Min: UDim2? = nil,\\n Max: UDim2? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragUDim2","tags":["Widget","HasState"],"source":{"line":1017,"path":"lib/API.lua"}},{"name":"DragRect","desc":"A field which allows the user to click and drag their cursor to enter a Rect.\\nYou can ctrl + click to directly input a Rect, like InputRect.\\nYou can hold Shift to increase speed, and Alt to decrease speed when dragging.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"DragRect\\",\\n Increment: Rect? = nil,\\n Min: Rect? = nil,\\n Max: Rect? = nil,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.DragRect","tags":["Widget","HasState"],"source":{"line":1049,"path":"lib/API.lua"}}],"types":[],"name":"Drag","desc":"Drag Widget API\\n\\nA draggable widget for each datatype. Allows direct typing input but also dragging values by clicking and holding.\\n\\nSee [Input] for more details on the arguments.\\n ","source":{"line":858,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/d321cc47.86450b19.js b/assets/js/d321cc47.f5f5efd4.js similarity index 68% rename from assets/js/d321cc47.86450b19.js rename to assets/js/d321cc47.f5f5efd4.js index 89114c5..6806f46 100644 --- a/assets/js/d321cc47.86450b19.js +++ b/assets/js/d321cc47.f5f5efd4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3230],{83682:e=>{e.exports=JSON.parse('[{"value":"Types","id":"types","level":2},{"value":"Properties","id":"properties","level":2},{"value":"DragNum","id":"DragNum","level":3},{"value":"DragRect","id":"DragRect","level":3},{"value":"DragUDim","id":"DragUDim","level":3},{"value":"DragUDim2","id":"DragUDim2","level":3},{"value":"DragVector2","id":"DragVector2","level":3},{"value":"DragVector3","id":"DragVector3","level":3},{"value":"InputColor3","id":"InputColor3","level":3},{"value":"InputColor4","id":"InputColor4","level":3},{"value":"Functions","id":"functions","level":2}]')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3230],{83682:e=>{e.exports=JSON.parse('[{"value":"Types","id":"types","level":2},{"value":"Properties","id":"properties","level":2},{"value":"DragNum","id":"DragNum","level":3},{"value":"DragRect","id":"DragRect","level":3},{"value":"DragUDim","id":"DragUDim","level":3},{"value":"DragUDim2","id":"DragUDim2","level":3},{"value":"DragVector2","id":"DragVector2","level":3},{"value":"DragVector3","id":"DragVector3","level":3},{"value":"Functions","id":"functions","level":2}]')}}]); \ No newline at end of file diff --git a/assets/js/d52f5411.ab084b3d.js b/assets/js/d52f5411.31697e92.js similarity index 80% rename from assets/js/d52f5411.ab084b3d.js rename to assets/js/d52f5411.31697e92.js index b331d57..b4e84b5 100644 --- a/assets/js/d52f5411.ab084b3d.js +++ b/assets/js/d52f5411.31697e92.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4071],{28404:e=>{e.exports=JSON.parse('{"functions":[{"name":"NextColumn","desc":"In a table, moves to the next available cell. if the current cell is in the last column,\\nthen the next cell will be the first column of the next row.\\n ","params":[],"returns":[],"function_type":"static","source":{"line":1591,"path":"lib/API.lua"}},{"name":"SetColumnIndex","desc":"In a table, directly sets the index of the column.\\n ","params":[{"name":"index","desc":"","lua_type":"number"}],"returns":[],"function_type":"static","source":{"line":1602,"path":"lib/API.lua"}},{"name":"NextRow","desc":"In a table, moves to the next available row,\\nskipping cells in the previous column if the last cell wasn\'t in the last column\\n ","params":[],"returns":[],"function_type":"static","source":{"line":1615,"path":"lib/API.lua"}}],"properties":[{"name":"Table","desc":"A layout widget which allows children to be displayed in configurable columns and rows.\\n\\n```lua\\nhasChildren = true\\nhasState = false\\nArguments = {\\n NumColumns = number,\\n RowBg = boolean? = false, -- whether the row backgrounds alternate a background fill.\\n BordersOuter = boolean? = false,\\n BordersInner = boolean? = false, -- borders on each cell.\\n}\\nEvents = {\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.Table","tags":["Widget","HasChildren"],"source":{"line":1582,"path":"lib/API.lua"}}],"types":[],"name":"Table","desc":"Table Widget API\\n ","source":{"line":1559,"path":"lib/API.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4071],{28404:e=>{e.exports=JSON.parse('{"functions":[{"name":"NextColumn","desc":"In a table, moves to the next available cell. if the current cell is in the last column,\\nthen the next cell will be the first column of the next row.\\n ","params":[],"returns":[],"function_type":"static","source":{"line":1599,"path":"lib/API.lua"}},{"name":"SetColumnIndex","desc":"In a table, directly sets the index of the column.\\n ","params":[{"name":"index","desc":"","lua_type":"number"}],"returns":[],"function_type":"static","source":{"line":1610,"path":"lib/API.lua"}},{"name":"NextRow","desc":"In a table, moves to the next available row,\\nskipping cells in the previous column if the last cell wasn\'t in the last column\\n ","params":[],"returns":[],"function_type":"static","source":{"line":1623,"path":"lib/API.lua"}}],"properties":[{"name":"Table","desc":"A layout widget which allows children to be displayed in configurable columns and rows.\\n\\n```lua\\nhasChildren = true\\nhasState = false\\nArguments = {\\n NumColumns = number,\\n RowBg = boolean? = false, -- whether the row backgrounds alternate a background fill.\\n BordersOuter = boolean? = false,\\n BordersInner = boolean? = false, -- borders on each cell.\\n}\\nEvents = {\\n hovered: () -> boolean\\n}\\n```\\n ","lua_type":"Iris.Table","tags":["Widget","HasChildren"],"source":{"line":1590,"path":"lib/API.lua"}}],"types":[],"name":"Table","desc":"Table Widget API\\n ","source":{"line":1567,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/d700bc26.5b4c02e4.js b/assets/js/d700bc26.d016a74b.js similarity index 55% rename from assets/js/d700bc26.5b4c02e4.js rename to assets/js/d700bc26.d016a74b.js index a3623be..0561eb8 100644 --- a/assets/js/d700bc26.5b4c02e4.js +++ b/assets/js/d700bc26.d016a74b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1141],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),m=a,d=u["".concat(c,".").concat(m)]||u[m]||h[m]||o;return n?r.createElement(d,i(i({ref:t},p),{},{components:n})):r.createElement(d,i({ref:t},p))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var l=2;l{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={},i="Events",s={unversionedId:"events",id:"events",title:"Events",description:"Each widget has a number of events connected to it. You can see these events on the API page.",source:"@site/docs/events.md",sourceDirName:".",slug:"/events",permalink:"/Iris/docs/events",draft:!1,editUrl:"https://github.com/Michael-48/Iris/edit/master/docs/events.md",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Creating Custom Widgets",permalink:"/Iris/docs/creatingCustomWidgets"},next:{title:"Iris",permalink:"/Iris/docs/intro"}},c={},l=[],p={toc:l},u="wrapper";function h(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"events"},"Events"),(0,a.kt)("p",null,"Each widget has a number of events connected to it. You can see these events on the ",(0,a.kt)("a",{parentName:"p",href:"../API"},"API page"),"."),(0,a.kt)("p",null,"Certain events will happen once, such as a window being collapsed or a button being clicked. Other events can be continuous, such as a widget being hovered.\nEach event is a function which returns a boolean value for whether the event has happened that frame or not."),(0,a.kt)("p",null,"To listen to an event, use the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-lua"},'local button = Iris.Button({ "Please click me!" })\nif button.clicked() then\n print("The button was clicked!")\nend\n')),(0,a.kt)("p",null,"Events will fire the frame after the initial action happened. This is so that any changes caused by that event can propogate visually.\nFor example on a checkbox:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frames 1 - 60]","\nThe mouse is elsewhere.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frames 61 - 80]","\nThe user is moving their moues towards the checkbox.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frame 81 - 100]","\nThe mouse enters the checkbox.\nThe .hovered() event fires because this event will fire on the frame.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frame 101]","\nThe user presses MouseButton1 down on the checkbox.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frame 102]","\nThe user releases the MouseButton1.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frame 103]","\nThe checkbox tick appears.\nThe .checked() event fires."))))}h.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1141],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),m=a,d=u["".concat(c,".").concat(m)]||u[m]||h[m]||o;return n?r.createElement(d,i(i({ref:t},p),{},{components:n})):r.createElement(d,i({ref:t},p))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var l=2;l{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var r=n(87462),a=(n(67294),n(3905));const o={},i="Events",s={unversionedId:"events",id:"events",title:"Events",description:"Each widget has a number of events connected to it. You can see these events on the API page.",source:"@site/docs/events.md",sourceDirName:".",slug:"/events",permalink:"/Iris/docs/events",draft:!1,editUrl:"https://github.com/Michael-48/Iris/edit/main/docs/events.md",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Creating Custom Widgets",permalink:"/Iris/docs/creatingCustomWidgets"},next:{title:"Iris",permalink:"/Iris/docs/intro"}},c={},l=[],p={toc:l},u="wrapper";function h(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"events"},"Events"),(0,a.kt)("p",null,"Each widget has a number of events connected to it. You can see these events on the ",(0,a.kt)("a",{parentName:"p",href:"../API"},"API page"),"."),(0,a.kt)("p",null,"Certain events will happen once, such as a window being collapsed or a button being clicked. Other events can be continuous, such as a widget being hovered.\nEach event is a function which returns a boolean value for whether the event has happened that frame or not."),(0,a.kt)("p",null,"To listen to an event, use the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-lua"},'local button = Iris.Button({ "Please click me!" })\nif button.clicked() then\n print("The button was clicked!")\nend\n')),(0,a.kt)("p",null,"Events will fire the frame after the initial action happened. This is so that any changes caused by that event can propogate visually.\nFor example on a checkbox:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frames 1 - 60]","\nThe mouse is elsewhere.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frames 61 - 80]","\nThe user is moving their moues towards the checkbox.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frame 81 - 100]","\nThe mouse enters the checkbox.\nThe .hovered() event fires because this event will fire on the frame.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frame 101]","\nThe user presses MouseButton1 down on the checkbox.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frame 102]","\nThe user releases the MouseButton1.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"[Frame 103]","\nThe checkbox tick appears.\nThe .checked() event fires."))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/da44a874.bbb857ad.js b/assets/js/da44a874.e267a029.js similarity index 91% rename from assets/js/da44a874.bbb857ad.js rename to assets/js/da44a874.e267a029.js index ff29eef..fb1c304 100644 --- a/assets/js/da44a874.bbb857ad.js +++ b/assets/js/da44a874.e267a029.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4651],{63648:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"SliderNum","desc":"A field which allows the user to slide a grip to enter a number within a range.\\nYou can ctrl + click to directly input a number, like InputNum.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderNum\\",\\n Increment: number? = 1,\\n Min: number? = 0,\\n Max: number? = 100,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderNum","tags":["Widget","HasState"],"source":{"line":1152,"path":"lib/API.lua"}},{"name":"SliderVector2","desc":"A field which allows the user to slide a grip to enter a Vector2 within a range.\\nYou can ctrl + click to directly input a Vector2, like InputVector2.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderVector2\\",\\n Increment: Vector2? = { 1, 1 },\\n Min: Vector2? = { 0, 0 },\\n Max: Vector2? = { 100, 100 },\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderVector2","tags":["Widget","HasState"],"source":{"line":1183,"path":"lib/API.lua"}},{"name":"SliderVector3","desc":"A field which allows the user to slide a grip to enter a Vector3 within a range.\\nYou can ctrl + click to directly input a Vector3, like InputVector3.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderVector3\\",\\n Increment: Vector3? = { 1, 1, 1 },\\n Min: Vector3? = { 0, 0, 0 },\\n Max: Vector3? = { 100, 100, 100 },\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderVector3","tags":["Widget","HasState"],"source":{"line":1214,"path":"lib/API.lua"}},{"name":"SliderUDim","desc":"A field which allows the user to slide a grip to enter a UDim within a range.\\nYou can ctrl + click to directly input a UDim, like InputUDim.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderUDim\\",\\n Increment: UDim? = { 0.01, 1 },\\n Min: UDim? = { 0, 0 },\\n Max: UDim? = { 1, 960 },\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderUDim","tags":["Widget","HasState"],"source":{"line":1245,"path":"lib/API.lua"}},{"name":"SliderUDim2","desc":"A field which allows the user to slide a grip to enter a UDim2 within a range.\\nYou can ctrl + click to directly input a UDim2, like InputUDim2.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderUDim2\\",\\n Increment: UDim2? = { 0.01, 1, 0.01, 1 },\\n Min: UDim2? = { 0, 0, 0, 0 },\\n Max: UDim2? = { 1, 960, 1, 960 },\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderUDim2","tags":["Widget","HasState"],"source":{"line":1276,"path":"lib/API.lua"}},{"name":"SliderRect","desc":"A field which allows the user to slide a grip to enter a Rect within a range.\\nYou can ctrl + click to directly input a Rect, like InputRect.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderRect\\",\\n Increment: Rect? = { 1, 1, 1, 1 },\\n Min: Rect? = { 0, 0, 0, 0 },\\n Max: Rect? = { 960, 960, 960, 960 },\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderRect","tags":["Widget","HasState"],"source":{"line":1307,"path":"lib/API.lua"}},{"name":"SliderNum","desc":"A field which allows the user to slide a grip to enter a number within a range.\\nYou can ctrl + click to directly input a number, like InputNum.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderNum\\",\\n Increment: number? = 1,\\n Min: number? = 0,\\n Max: number? = 100,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderNum","tags":["Widget","HasState"],"private":true,"source":{"line":1339,"path":"lib/API.lua"}}],"types":[],"name":"Slider","desc":"Slider Widget API\\n\\nA draggable widget with a visual bar constrained between a min and max for each datatype.\\nAllows direct typing input but also dragging the slider by clicking and holding anywhere in the box.\\n\\nSee [Input] for more details on the arguments.\\n ","source":{"line":1122,"path":"lib/API.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4651],{63648:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"SliderNum","desc":"A field which allows the user to slide a grip to enter a number within a range.\\nYou can ctrl + click to directly input a number, like InputNum.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderNum\\",\\n Increment: number? = 1,\\n Min: number? = 0,\\n Max: number? = 100,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderNum","tags":["Widget","HasState"],"source":{"line":1160,"path":"lib/API.lua"}},{"name":"SliderVector2","desc":"A field which allows the user to slide a grip to enter a Vector2 within a range.\\nYou can ctrl + click to directly input a Vector2, like InputVector2.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderVector2\\",\\n Increment: Vector2? = { 1, 1 },\\n Min: Vector2? = { 0, 0 },\\n Max: Vector2? = { 100, 100 },\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderVector2","tags":["Widget","HasState"],"source":{"line":1191,"path":"lib/API.lua"}},{"name":"SliderVector3","desc":"A field which allows the user to slide a grip to enter a Vector3 within a range.\\nYou can ctrl + click to directly input a Vector3, like InputVector3.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderVector3\\",\\n Increment: Vector3? = { 1, 1, 1 },\\n Min: Vector3? = { 0, 0, 0 },\\n Max: Vector3? = { 100, 100, 100 },\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderVector3","tags":["Widget","HasState"],"source":{"line":1222,"path":"lib/API.lua"}},{"name":"SliderUDim","desc":"A field which allows the user to slide a grip to enter a UDim within a range.\\nYou can ctrl + click to directly input a UDim, like InputUDim.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderUDim\\",\\n Increment: UDim? = { 0.01, 1 },\\n Min: UDim? = { 0, 0 },\\n Max: UDim? = { 1, 960 },\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderUDim","tags":["Widget","HasState"],"source":{"line":1253,"path":"lib/API.lua"}},{"name":"SliderUDim2","desc":"A field which allows the user to slide a grip to enter a UDim2 within a range.\\nYou can ctrl + click to directly input a UDim2, like InputUDim2.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderUDim2\\",\\n Increment: UDim2? = { 0.01, 1, 0.01, 1 },\\n Min: UDim2? = { 0, 0, 0, 0 },\\n Max: UDim2? = { 1, 960, 1, 960 },\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderUDim2","tags":["Widget","HasState"],"source":{"line":1284,"path":"lib/API.lua"}},{"name":"SliderRect","desc":"A field which allows the user to slide a grip to enter a Rect within a range.\\nYou can ctrl + click to directly input a Rect, like InputRect.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderRect\\",\\n Increment: Rect? = { 1, 1, 1, 1 },\\n Min: Rect? = { 0, 0, 0, 0 },\\n Max: Rect? = { 960, 960, 960, 960 },\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderRect","tags":["Widget","HasState"],"source":{"line":1315,"path":"lib/API.lua"}},{"name":"SliderNum","desc":"A field which allows the user to slide a grip to enter a number within a range.\\nYou can ctrl + click to directly input a number, like InputNum.\\n\\n```lua\\nhasChildren = false\\nhasState = true\\nArguments = {\\n Text: string? = \\"SliderNum\\",\\n Increment: number? = 1,\\n Min: number? = 0,\\n Max: number? = 100,\\n Format: string? | { string }? = [DYNAMIC] -- Iris will dynamically generate an approriate format.\\n}\\nEvents = {\\n numberChanged: () -> boolean,\\n hovered: () -> boolean\\n}\\nStates = {\\n number: State?,\\n editingText: State?\\n}\\n```\\n ","lua_type":"Iris.SliderNum","tags":["Widget","HasState"],"private":true,"source":{"line":1347,"path":"lib/API.lua"}}],"types":[],"name":"Slider","desc":"Slider Widget API\\n\\nA draggable widget with a visual bar constrained between a min and max for each datatype.\\nAllows direct typing input but also dragging the slider by clicking and holding anywhere in the box.\\n\\nSee [Input] for more details on the arguments.\\n ","source":{"line":1130,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/f6b40ff7.585726a2.js b/assets/js/f6b40ff7.585726a2.js deleted file mode 100644 index 311334b..0000000 --- a/assets/js/f6b40ff7.585726a2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4739],{63891:s=>{s.exports=JSON.parse('{"sourceUrl":"https://github.com/Michael-48/Iris/blob/master","baseUrl":"/Iris/","classOrder":[{"classes":["Iris"]},{"section":"Widgets","classes":["Window","Menu","Format","Text","Basic","Tree","Input","Drag","Slider","Combo","Table"]},{"classes":["State","Internal"]}],"apiCategories":[]}')}}]); \ No newline at end of file diff --git a/assets/js/f6b40ff7.b808461f.js b/assets/js/f6b40ff7.b808461f.js new file mode 100644 index 0000000..852fe7c --- /dev/null +++ b/assets/js/f6b40ff7.b808461f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4739],{63891:s=>{s.exports=JSON.parse('{"sourceUrl":"https://github.com/Michael-48/Iris/blob/main","baseUrl":"/Iris/","classOrder":[{"classes":["Iris"]},{"section":"Widgets","classes":["Window","Menu","Format","Text","Basic","Tree","Input","Drag","Slider","Combo","Plot","Table"]},{"classes":["State","Internal"]}],"apiCategories":[]}')}}]); \ No newline at end of file diff --git a/assets/js/fbdf1fa3.2ae477dd.js b/assets/js/fbdf1fa3.f21e066a.js similarity index 79% rename from assets/js/fbdf1fa3.2ae477dd.js rename to assets/js/fbdf1fa3.f21e066a.js index baea60a..b76290f 100644 --- a/assets/js/fbdf1fa3.2ae477dd.js +++ b/assets/js/fbdf1fa3.f21e066a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3655],{10343:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Separator","desc":"A vertical or horizonal line, depending on the context, which visually seperates widgets.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\n```\\n ","lua_type":"Iris.Separator","tags":["Widget"],"source":{"line":248,"path":"lib/API.lua"}},{"name":"Indent","desc":"Indents its child widgets.\\n\\n```lua\\nhasChildren = true\\nhasState = false\\nArguments = {\\n Width: number? = Iris._config.IndentSpacing -- indent width ammount.\\n}\\n```\\n ","lua_type":"Iris.Indent","tags":["Widget","HasChildren"],"source":{"line":266,"path":"lib/API.lua"}},{"name":"Sameline","desc":"Positions its children in a row, horizontally.\\n\\n```lua\\nhasChildren = true\\nhasState = false\\nArguments = {\\n Width: number? = Iris._config.ItemSpacing.X, -- horizontal spacing between child widgets.\\n VerticalAlignment: Enum.VerticalAlignment? = Enum.VerticalAlignment.Center -- how widgets are aligned to the widget.\\n}\\n```\\n ","lua_type":"Iris.Sameline","tags":["Widget","HasChildren"],"source":{"line":285,"path":"lib/API.lua"}},{"name":"Group","desc":"Layout widget which contains its children as a single group.\\n\\n```lua\\nhasChildren = true\\nhasState = false\\n```\\n ","lua_type":"Iris.Group","tags":["Widget","HasChildren"],"source":{"line":300,"path":"lib/API.lua"}}],"types":[],"name":"Format","desc":"Format API\\n ","source":{"line":235,"path":"lib/API.lua"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3655],{10343:e=>{e.exports=JSON.parse('{"functions":[],"properties":[{"name":"Separator","desc":"A vertical or horizonal line, depending on the context, which visually seperates widgets.\\n\\n```lua\\nhasChildren = false\\nhasState = false\\n```\\n ","lua_type":"Iris.Separator","tags":["Widget"],"source":{"line":256,"path":"lib/API.lua"}},{"name":"Indent","desc":"Indents its child widgets.\\n\\n```lua\\nhasChildren = true\\nhasState = false\\nArguments = {\\n Width: number? = Iris._config.IndentSpacing -- indent width ammount.\\n}\\n```\\n ","lua_type":"Iris.Indent","tags":["Widget","HasChildren"],"source":{"line":274,"path":"lib/API.lua"}},{"name":"Sameline","desc":"Positions its children in a row, horizontally.\\n\\n```lua\\nhasChildren = true\\nhasState = false\\nArguments = {\\n Width: number? = Iris._config.ItemSpacing.X, -- horizontal spacing between child widgets.\\n VerticalAlignment: Enum.VerticalAlignment? = Enum.VerticalAlignment.Center -- how widgets are aligned to the widget.\\n}\\n```\\n ","lua_type":"Iris.Sameline","tags":["Widget","HasChildren"],"source":{"line":293,"path":"lib/API.lua"}},{"name":"Group","desc":"Layout widget which contains its children as a single group.\\n\\n```lua\\nhasChildren = true\\nhasState = false\\n```\\n ","lua_type":"Iris.Group","tags":["Widget","HasChildren"],"source":{"line":308,"path":"lib/API.lua"}}],"types":[],"name":"Format","desc":"Format API\\n ","source":{"line":243,"path":"lib/API.lua"}}')}}]); \ No newline at end of file diff --git a/assets/js/main.af96550f.js b/assets/js/main.a2301958.js similarity index 97% rename from assets/js/main.af96550f.js rename to assets/js/main.a2301958.js index 3bfa044..28ed9a3 100644 --- a/assets/js/main.af96550f.js +++ b/assets/js/main.a2301958.js @@ -1,2 +1,2 @@ -/*! For license information please see main.af96550f.js.LICENSE.txt */ -(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(67294),a=n(87462),o=n(68356),i=n.n(o),l=n(16887);const s={"02fae9b5":[()=>n.e(1331).then(n.bind(n,24948)),"@site/pages/index.md",24948],"03b9a31d":[()=>n.e(9532).then(n.t.bind(n,30863,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Text-toc.json",30863],"04447019":[()=>n.e(7416).then(n.t.bind(n,42894,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Tree.json",42894],"062df6c6":[()=>n.e(1872).then(n.t.bind(n,54159,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Plot.json",54159],"0e384e19":[()=>n.e(9671).then(n.bind(n,59881)),"@site/docs/intro.md",59881],"12e9ac83":[()=>n.e(5673).then(n.t.bind(n,46972,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Iris.json",46972],17896441:[()=>Promise.all([n.e(532),n.e(5289),n.e(7918)]).then(n.bind(n,15462)),"@theme/DocItem",15462],"1a161c2d":[()=>n.e(724).then(n.t.bind(n,91606,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Slider-toc.json",91606],"1b758a53":[()=>n.e(130).then(n.t.bind(n,83769,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-content-docs\\default\\plugin-route-context-module-100.json",83769],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,90606)),"@theme/DocPage",90606],"1c4890df":[()=>n.e(9945).then(n.t.bind(n,76362,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Input-toc.json",76362],"1f391b9e":[()=>Promise.all([n.e(532),n.e(5289),n.e(3085)]).then(n.bind(n,14247)),"@theme/MDXPage",14247],20214626:[()=>n.e(7588).then(n.t.bind(n,85492,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\typeLinks.json",85492],"25e8a157":[()=>n.e(1695).then(n.t.bind(n,27909,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Window.json",27909],"287f4516":[()=>n.e(7647).then(n.t.bind(n,46699,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Internal.json",46699],"39afb954":[()=>n.e(8241).then(n.t.bind(n,24599,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Window-toc.json",24599],"3e738690":[()=>n.e(8583).then(n.t.bind(n,15745,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-content-pages\\default\\plugin-route-context-module-100.json",15745],"485c08d2":[()=>n.e(7665).then(n.t.bind(n,35045,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Tree-toc.json",35045],"497a7e78":[()=>n.e(233).then(n.t.bind(n,89435,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Plot-toc.json",89435],"5302351d":[()=>n.e(9387).then(n.t.bind(n,7636,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\sidebar.json",7636],"5c982b62":[()=>n.e(9822).then(n.t.bind(n,59656,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Format-toc.json",59656],"5e9d13b8":[()=>n.e(7783).then(n.t.bind(n,72983,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Basic.json",72983],"6a1501b6":[()=>n.e(6559).then(n.t.bind(n,76717,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Input.json",76717],"6aa4fd11":[()=>n.e(4782).then(n.t.bind(n,22056,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Menu.json",22056],"6f852df3":[()=>n.e(3249).then(n.bind(n,23424)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\node_modules\\docusaurus-plugin-moonwave\\src\\components\\Redirect.js",23424],"778ae56a":[()=>n.e(1035).then(n.t.bind(n,69481,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\State-toc.json",69481],"86b23f44":[()=>n.e(5679).then(n.t.bind(n,67387,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Table-toc.json",67387],"893fc217":[()=>n.e(2419).then(n.t.bind(n,86107,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Basic-toc.json",86107],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"95860a96":[()=>n.e(6251).then(n.t.bind(n,43474,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Combo.json",43474],"95b8c34c":[()=>n.e(6327).then(n.t.bind(n,55959,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Menu-toc.json",55959],"99d2f0b4":[()=>n.e(8983).then(n.bind(n,61810)),"@site/docs/creatingCustomWidgets.md",61810],a238f9c2:[()=>n.e(3508).then(n.t.bind(n,67147,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Internal-toc.json",67147],a26a5453:[()=>n.e(6857).then(n.t.bind(n,62643,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\State.json",62643],adbcaee3:[()=>n.e(3298).then(n.t.bind(n,70781,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Text.json",70781],b10d31cc:[()=>n.e(2206).then(n.t.bind(n,88303,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\plugin-route-context-module-100.json",88303],c287ee48:[()=>n.e(5814).then(n.t.bind(n,32639,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Iris-toc.json",32639],c7714e2c:[()=>n.e(686).then(n.t.bind(n,62960,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Combo-toc.json",62960],c91d22a1:[()=>n.e(6398).then(n.t.bind(n,35579,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Drag.json",35579],d321cc47:[()=>n.e(3230).then(n.t.bind(n,83682,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Drag-toc.json",83682],d52f5411:[()=>n.e(4071).then(n.t.bind(n,28404,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Table.json",28404],d700bc26:[()=>n.e(1141).then(n.bind(n,44606)),"@site/docs/events.md",44606],da44a874:[()=>n.e(4651).then(n.t.bind(n,63648,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Slider.json",63648],f451ae7f:[()=>Promise.all([n.e(532),n.e(2006)]).then(n.bind(n,81117)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\node_modules\\docusaurus-plugin-moonwave\\src\\components\\LuaClass.js",81117],f6b40ff7:[()=>n.e(4739).then(n.t.bind(n,63891,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\options.json",63891],fbdf1fa3:[()=>n.e(3655).then(n.t.bind(n,10343,19)),"C:\\Users\\micha\\AppData\\Local\\moonwave\\Cache\\Iris\\.docusaurus\\docusaurus-plugin-moonwave\\moonwave\\Format.json",10343]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(99670),d=n(30226);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.Z)(o);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/Iris/api/",component:f("/Iris/api/","673"),exact:!0},{path:"/Iris/api/Basic",component:f("/Iris/api/Basic","26d"),exact:!0},{path:"/Iris/api/Combo",component:f("/Iris/api/Combo","e0f"),exact:!0},{path:"/Iris/api/Drag",component:f("/Iris/api/Drag","309"),exact:!0},{path:"/Iris/api/Format",component:f("/Iris/api/Format","43c"),exact:!0},{path:"/Iris/api/Input",component:f("/Iris/api/Input","8c8"),exact:!0},{path:"/Iris/api/Internal",component:f("/Iris/api/Internal","844"),exact:!0},{path:"/Iris/api/Iris",component:f("/Iris/api/Iris","d0a"),exact:!0},{path:"/Iris/api/Menu",component:f("/Iris/api/Menu","dc1"),exact:!0},{path:"/Iris/api/Plot",component:f("/Iris/api/Plot","447"),exact:!0},{path:"/Iris/api/Slider",component:f("/Iris/api/Slider","63b"),exact:!0},{path:"/Iris/api/State",component:f("/Iris/api/State","b97"),exact:!0},{path:"/Iris/api/Table",component:f("/Iris/api/Table","62e"),exact:!0},{path:"/Iris/api/Text",component:f("/Iris/api/Text","977"),exact:!0},{path:"/Iris/api/Tree",component:f("/Iris/api/Tree","9bd"),exact:!0},{path:"/Iris/api/Window",component:f("/Iris/api/Window","402"),exact:!0},{path:"/Iris/docs",component:f("/Iris/docs","417"),routes:[{path:"/Iris/docs/creatingCustomWidgets",component:f("/Iris/docs/creatingCustomWidgets","7dd"),exact:!0,sidebar:"defaultSidebar"},{path:"/Iris/docs/events",component:f("/Iris/docs/events","938"),exact:!0,sidebar:"defaultSidebar"},{path:"/Iris/docs/intro",component:f("/Iris/docs/intro","83a"),exact:!0,sidebar:"defaultSidebar"}]},{path:"/Iris/",component:f("/Iris/","1ea"),exact:!0},{path:"*",component:f("*")}]},98934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(67294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},49383:(e,t,n)=>{"use strict";var r=n(67294),a=n(73935),o=n(73727),i=n(70405),l=n(10412);const s=[n(32497),n(3310),n(18320),n(34197)];var u=n(723),c=n(16550),d=n(18790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(87462),m=n(35742),h=n(52263),g=n(44996),v=n(86668),b=n(1944),y=n(94711),w=n(19727),E=n(43320),k=n(90197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),a=function(){const{siteConfig:{url:e}}=(0,h.Z)(),{pathname:t}=(0,c.TH)();return e+(0,g.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function _(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,v.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(b.d,{image:n}),r.createElement(C,null),r.createElement(S,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const x=new Map;function T(e){if(x.has(e.pathname))return{...e,pathname:x.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return x.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return x.set(e.pathname,t),{...e,pathname:t}}var I=n(98934),L=n(58940);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),A("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class P extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const R=P,D="docusaurus-base-url-issue-banner-container",M="docusaurus-base-url-issue-banner",F="docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function U(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,U(e))),r.createElement("div",{id:D}))}function j(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement($,null):null}function z(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Z=n(44763);function H(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(Z.Z,null,r.createElement(L.M,null,r.createElement(I.t,null,r.createElement(f,null,r.createElement(z,null),r.createElement(_,null),r.createElement(j,null),r.createElement(R,{location:T(t)},e)))))}var V=n(16887);const W=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var G=n(99670);const q=new Set,Y=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,X={prefetch(e){if(!(e=>!K()&&!Y.has(e)&&!q.has(e))(e))return!1;q.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,G.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?W(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!Y.has(e))(e)&&(Y.add(e),O(e))},Q=Object.freeze(X);if(l.Z.canUseDOM){window.docusaurus=Q;const e=a.hydrate;O(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},58940:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(67294),a=n(36809);const o=JSON.parse('{"docusaurus-lunr-search":{"default":{"fileNames":{"searchDoc":"search-doc-1709315505812.json","lunrIndex":"lunr-index-1709315505812.json"}}},"docusaurus-plugin-content-docs":{"default":{"path":"/Iris/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/Iris/docs","mainDocId":"creatingCustomWidgets","docs":[{"id":"creatingCustomWidgets","path":"/Iris/docs/creatingCustomWidgets","sidebar":"defaultSidebar"},{"id":"events","path":"/Iris/docs/events","sidebar":"defaultSidebar"},{"id":"intro","path":"/Iris/docs/intro","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/Iris/docs/creatingCustomWidgets","label":"creatingCustomWidgets"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(57529);const s=JSON.parse('{"docusaurusVersion":"2.3.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.3.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.3.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.3.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.3.1"},"docusaurus-plugin-moonwave":{"type":"package","name":"docusaurus-plugin-moonwave","version":"1.1.1"},"docusaurus-lunr-search":{"type":"package","name":"docusaurus-lunr-search","version":"2.3.2"}}}'),u={siteConfig:a.Z,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},44763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(67294),a=n(10412),o=n(35742),i=n(34510);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},r.createElement("h1",null,"This page crashed."),r.createElement("p",null,t.message),r.createElement("button",{type:"button",onClick:n},"Try again"))}function s(e){let{error:t,tryAgain:n}=e;return r.createElement(c,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(i.Z,null,r.createElement(l,{error:t,tryAgain:n})))}const u=e=>r.createElement(s,e);class c extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??u)(e)}return e??null}}},10412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},35742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(70405);function o(e){return r.createElement(a.ql,e)}},39960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var r=n(87462),a=n(67294),o=n(73727),i=n(18780),l=n(52263),s=n(13919),u=n(10412);const c=a.createContext({collectLink:()=>{}}),d=()=>(0,a.useContext)(c);var f=n(44996);const p=e=>e.startsWith("/");function m(e,t){let{isNavLink:n,to:c,href:m,activeClassName:h,isActive:g,"data-noBrokenLinkCheck":v,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:w,baseUrl:E}}=(0,l.Z)(),{withBaseUrl:k}=(0,f.C)(),S=d(),C=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>C.current));const _=c||m;const x=(0,s.Z)(_),T=_?.replace("pathname://","");let I=void 0!==T?(L=T,b&&p(L)?k(L):L):void 0;var L;I&&x&&(I=(0,i.applyTrailingSlash)(I,{trailingSlash:w,baseUrl:E}));const A=(0,a.useRef)(!1),N=n?o.OL:o.rU,O=u.Z.canUseIntersectionObserver,P=(0,a.useRef)(),R=()=>{A.current||null==I||(window.docusaurus.preload(I),A.current=!0)};(0,a.useEffect)((()=>(!O&&x&&null!=I&&window.docusaurus.prefetch(I),()=>{O&&P.current&&P.current.disconnect()})),[P,I,O,x]);const D=I?.startsWith("#")??!1,M=!I||!x||D;return M||v||S.collectLink(I),M?a.createElement("a",(0,r.Z)({ref:C,href:I},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},y)):a.createElement(N,(0,r.Z)({},y,{onMouseEnter:R,onTouchStart:R,innerRef:e=>{C.current=e,O&&e&&x&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=I&&window.docusaurus.prefetch(I))}))})),P.current.observe(e))},to:I},n&&{isActive:g,activeClassName:h}))}const h=a.forwardRef(m)},95999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(67294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(57529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},29935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},13919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},44996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(67294),a=n(52263),o=n(13919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},52263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(58940);function o(){return(0,r.useContext)(a._)}},28084:(e,t,n)=>{"use strict";n.d(t,{OD:()=>o,eZ:()=>i});var r=n(52263),a=n(29935);function o(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=o(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},72389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(98934);function o(){return(0,r.useContext)(a._)}},99670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t=".",n={};return function e(a,o){Object.entries(a).forEach((a=>{let[i,l]=a;const s=o?`${o}${t}${i}`:i;r(l)?e(l,s):n[s]=l}))}(e),n}},30226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(67294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},94104:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>p,gA:()=>c,_r:()=>s,Jo:()=>m,zh:()=>u,yW:()=>f,gB:()=>d});var r=n(16550),a=n(28084);const o=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=function(e,t){const n=o(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const l={},s=()=>(0,a.OD)("docusaurus-plugin-content-docs")??l,u=e=>(0,a.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function c(e){void 0===e&&(e={});const t=s(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function d(e){return u(e).versions}function f(e){const t=u(e);return o(t)}function p(e){const t=u(e),{pathname:n}=(0,r.TH)();return i(t,n)}function m(e){const t=u(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=o(e);return{latestDocSuggestion:i(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},18320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(74865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(87410),a=n(36809);!function(e){const{themeConfig:{prism:t}}=a.Z,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(33003)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},39471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},34510:(e,t,n)=>{"use strict";n.d(t,{Z:()=>ut});var r=n(67294),a=n(86010),o=n(44763),i=n(1944),l=n(87462),s=n(16550),u=n(95999),c=n(85936);const d="docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var g=n(35281),v=n(19727);const b={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(h,{className:b.skipToContent})}var w=n(86668),E=n(59689);function k(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function C(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(k,{width:14,height:14,strokeWidth:3.1}))}const _={content:"content_knG7"};function x(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function I(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(x,{className:T.announcementBarContent}),i&&r.createElement(C,{onClick:n,className:T.announcementBarClose}))}var L=n(72961),A=n(12466);var N=n(902),O=n(13102);const P=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,L.e)(),t=(0,O.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,N.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(P.Provider,{value:n},t)}function D(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function M(){const e=(0,r.useContext)(P);if(!e)throw new N.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,O.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:D(o)})),[a,o,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=M();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var B=n(92949),U=n(72389);function $(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function j(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const z={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,value:n,onChange:o}=e;const i=(0,U.Z)(),l=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(z.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",z.toggleButton,!i&&z.toggleButtonDisabled),type:"button",onClick:()=>o("dark"===n?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite"},r.createElement($,{className:(0,a.Z)(z.toggleIcon,z.lightToggleIcon)}),r.createElement(j,{className:(0,a.Z)(z.toggleIcon,z.darkToggleIcon)})))}const H=r.memo(Z);function V(e){let{className:t}=e;const n=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,B.I)();return n?null:r.createElement(H,{className:t,value:a,onChange:o})}var W=n(21327);function G(){return r.createElement(W.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function q(){const e=(0,L.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(k,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(G,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(q,null))}var K=n(39960),X=n(44996),Q=n(13919);function J(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var ee=n(39471);function te(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,X.Z)(a),p=(0,X.Z)(t),m=(0,X.Z)(o,{forcePrependBaseUrl:!0}),h=i&&o&&!(0,Q.Z)(o),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(ee.Z,u&&{width:12,height:12}))};return o?r.createElement(K.Z,(0,l.Z)({href:c?m:o},d,g)):r.createElement(K.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?J(n,t.pathname):t.pathname.startsWith(p)},d,g))}function ne(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(te,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function re(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(te,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function ae(e){let{mobile:t=!1,position:n,...a}=e;const o=t?re:ne;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var oe=n(86043),ie=n(48596),le=n(52263);function se(e,t){return e.some((e=>function(e,t){return!!(0,ie.Mg)(e.to,t)||!!J(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(te,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,n)=>r.createElement(Te,(0,l.Z)({isDropdownItem:!0,onKeyDown:e=>{if(n===t.length-1&&"Tab"===e.key){e.preventDefault(),d(!1);const t=u.current.nextElementSibling;if(t){(t instanceof HTMLAnchorElement?t:t.querySelector("a")).focus()}}},activeClassName:"dropdown__link--active"},e,{key:n}))))))}function ce(e){let{items:t,className:n,position:o,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=se(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,oe.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(te,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(oe.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(Te,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function de(e){let{mobile:t=!1,...n}=e;const a=t?ce:ue;return r.createElement(a,n)}var fe=n(94711);function pe(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const me={iconLanguage:"iconLanguage_nlXk"};var he=n(28084),ge=n(94184),ve=n.n(ge);const be=e=>{const t=(0,r.useRef)(!1),a=(0,r.useRef)(null),o=(0,s.k6)(),{siteConfig:i={}}=(0,le.Z)(),{baseUrl:l}=i;(0,r.useEffect)((()=>{const e=e=>{"s"!==e.key&&"/"!==e.key||a.current&&e.srcElement===document.body&&(e.preventDefault(),a.current.focus())};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[]);const u=(0,he.eZ)("docusaurus-lunr-search"),c=()=>{t.current||(Promise.all([fetch(`${l}${u.fileNames.searchDoc}`).then((e=>e.json())),fetch(`${l}${u.fileNames.lunrIndex}`).then((e=>e.json())),Promise.all([n.e(9878),n.e(1245)]).then(n.bind(n,24130)),Promise.all([n.e(532),n.e(3343)]).then(n.bind(n,53343))]).then((e=>{let[t,n,{default:r}]=e;0!==t.length&&((e,t,n)=>{new n({searchDocs:e,searchIndex:t,inputSelector:"#search_input_react",handleSelected:(e,t,n)=>{const r=l+n.url;document.createElement("a").href=r,o.push(r)}})})(t,n,r)})),t.current=!0)},d=(0,r.useCallback)((t=>{a.current.contains(t.target)||a.current.focus(),e.handleSearchBarToggle&&e.handleSearchBarToggle(!e.isSearchBarExpanded)}),[e.isSearchBarExpanded]);return r.createElement("div",{className:"navbar__search",key:"search-box"},r.createElement("span",{"aria-label":"expand searchbar",role:"button",className:ve()("search-icon",{"search-icon-hidden":e.isSearchBarExpanded}),onClick:d,onKeyDown:d,tabIndex:0}),r.createElement("input",{id:"search_input_react",type:"search",placeholder:"Press S to Search...","aria-label":"Search",className:ve()("navbar__search-input",{"search-bar-expanded":e.isSearchBarExpanded},{"search-bar":!e.isSearchBarExpanded}),onClick:c,onMouseOver:c,onFocus:d,onBlur:d,ref:a}))},ye={searchBox:"searchBox_ZlJk"};function we(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,ye.searchBox)},t)}var Ee=n(94104),ke=n(52802);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));var Ce=n(60373);const _e=e=>e.docs.find((t=>t.id===e.mainDocId));const xe={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),f=(0,fe.l)(),{search:p,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(de,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(pe,{className:me.iconLanguage}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(we,{className:n},r.createElement(be,null))},dropdown:de,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Ee.Iw)(a),s=(0,ke.vY)(t,a);return null===s?null:r.createElement(ae,(0,l.Z)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Ee.Iw)(a),s=(0,ke.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,ke.lO)(a)[0],s=t??i.label,u=n??Se(i).path;return r.createElement(ae,(0,l.Z)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,Ee.Iw)(n),m=(0,Ee.gB)(n),{savePreferredVersionName:h}=(0,Ce.J)(n),g=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??_e(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),...i],v=(0,ke.lO)(n)[0],b=t&&g.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):v.label,y=t&&g.length>1?void 0:_e(v).path;return g.length<=1?r.createElement(ae,(0,l.Z)({},c,{mobile:t,label:b,to:y,isActive:a?()=>!1:void 0})):r.createElement(de,(0,l.Z)({},c,{mobile:t,label:b,to:y,items:g,isActive:a?()=>!1:void 0}))}};function Te(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=xe[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function Ie(){const e=(0,L.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Te,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Le(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Ae(){const e=0===(0,w.L)().navbar.items.length,t=M();return r.createElement(r.Fragment,null,!e&&r.createElement(Le,{onClick:()=>t.hide()}),t.content)}function Ne(){const e=(0,L.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(F,{header:r.createElement(Y,null),primaryMenu:r.createElement(Ie,null),secondaryMenu:r.createElement(Ae,null)}):null}const Oe={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Pe(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,L.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,A.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Oe.navbarHideable,!s&&Oe.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Pe,{onClick:i.toggle}),r.createElement(Ne,null))}const De="right";function Me(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Fe(){const{toggle:e,shown:t}=(0,L.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Me,null))}const Be={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Te,(0,l.Z)({},e,{key:t})))))}function $e(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function je(){const e=(0,L.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??De)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement($e,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Fe,null),r.createElement(G,null),r.createElement(Ue,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ue,{items:a}),r.createElement(V,{className:Be.colorModeToggle}),!o&&r.createElement(we,null,r.createElement(be,null)))})}function ze(){return r.createElement(Re,null,r.createElement(je,null))}function Ze(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(K.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?c:a}:{to:u},s),o,a&&!(0,Q.Z)(a)&&r.createElement(ee.Z,null))}function He(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ze,{item:t}))}function Ve(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(He,{key:t,item:e})))))}function We(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Ve,{key:t,column:e}))))}function Ge(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function qe(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ze,{item:t})}function Ye(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(qe,{item:e}),t.length!==n+1&&r.createElement(Ge,null))))))}function Ke(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(We,{columns:t}):r.createElement(Ye,{links:t})}var Xe=n(50941);const Qe={footerLogoLink:"footerLogoLink_BH7S"};function Je(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Xe.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function et(e){let{logo:t}=e;return t.href?r.createElement(K.Z,{href:t.href,className:Qe.footerLogoLink,target:t.target},r.createElement(Je,{logo:t})):r.createElement(Je,{logo:t})}function tt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function nt(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function rt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(nt,{style:o,links:n&&n.length>0&&r.createElement(Ke,{links:n}),logo:a&&r.createElement(et,{logo:a}),copyright:t&&r.createElement(tt,{copyright:t})})}const at=r.memo(rt),ot=(0,N.Qc)([B.S,E.pl,A.OC,Ce.L5,i.VC,function(e){let{children:t}=e;return r.createElement(O.n2,null,r.createElement(L.M,null,r.createElement(R,null,t)))}]);function it(e){let{children:t}=e;return r.createElement(ot,null,t)}function lt(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}const st={mainWrapper:"mainWrapper_z2l0"};function ut(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,v.t)(),r.createElement(it,null,r.createElement(i.d,{title:s,description:u}),r.createElement(y,null),r.createElement(I,null),r.createElement(ze,null),r.createElement("div",{id:d,className:(0,a.Z)(g.k.wrapper.main,st.mainWrapper,l)},r.createElement(o.Z,{fallback:e=>r.createElement(lt,e)},t)),!n&&r.createElement(at,null))}},21327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(87462),a=n(67294),o=n(39960),i=n(44996),l=n(52263),s=n(86668),u=n(50941);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(u.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return a.createElement(o.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},90197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(35742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},50941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(87462),a=n(67294),o=n(86010),i=n(72389),l=n(92949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},86043:(e,t,n)=>{"use strict";n.d(t,{u:()=>l,z:()=>h});var r=n(87462),a=n(67294),o=n(10412);const i="ease-in-out";function l(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const s={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function c(e,t){const n=t?s:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function d(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??i}`,height:`${t}px`}}function l(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return c(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=s.height,e.style.overflow=s.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!o.Z.canUseDOM)return e?s:u}function p(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,a.useRef)(null);return d({collapsibleRef:u,collapsed:n,animation:o}),a.createElement(t,{ref:u,style:s?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(c(u.current,n),i?.(n))},className:l},r)}function m(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(p,(0,r.Z)({},n,{collapsed:l})):null}function h(e){let{lazy:t,...n}=e;const r=t?m:p;return a.createElement(r,n)}},59689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(67294),a=n(72389),o=n(50012),i=n(902),l=n(86668);const s=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},92949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(67294),a=n(10412),o=n(902),i=n(50012),l=n(86668);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,t,n)=>{"use strict";n.d(t,{J:()=>b,L5:()=>g});var r=n(67294),a=n(94104),o=n(29935),i=n(86668),l=n(52802),s=n(902),u=n(50012);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function v(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=v(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(67294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},72961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(67294),a=n(13102),o=n(87524),i=n(16550),l=(n(61688),n(902));function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(86668);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},13102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(67294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},19727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(67294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},87524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(67294),a=n(10412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},35281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},52802:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>h,cE:()=>d,hI:()=>E,lO:()=>b,vY:()=>w,oz:()=>y,s1:()=>v});var r=n(67294),a=n(16550),o=n(18790),i=n(94104),l=n(60373),s=n(1116);function u(e){return Array.from(new Set(e))}var c=n(48596);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,c.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,c.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function v(){const e=(0,s.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function b(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,a].filter(Boolean))),[t,n,a])}function y(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\n Available sidebar ids are:\n - ${Object.keys(t).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`DocNavbarItem: couldn't find any doc with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:u}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(67294),a=n(86010),o=n(35742),i=n(30226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(44996),u=n(52263);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(67294);const a=n(10412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},48596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(67294),a=n(723),o=n(52263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},12466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d});var r=n(67294),a=n(10412),o=n(72389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},43320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(52263);const r="default";function a(e,t){return`docs-${e}-${t}`}},50012:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(67294),n(61688);const r="localStorage";function a(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},94711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(52263),a=n(16550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},85936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(67294),a=n(16550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},86668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(52263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},18780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}})},94184:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>S,q_:()=>L,ob:()=>h,PP:()=>N,Ep:()=>m,Hp:()=>g});var r=n(87462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function l(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const s=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=l(t),a=l(n);return r!==t||a!==n?e(r,a):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var u=n(38776);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function h(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&s(e.state,t.state)}function v(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=h(e,t,f(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(59864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},32497:(e,t,n)=>{"use strict";n.r(t)},34197:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},27418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],h=n[2],g=n[3],v=n[4],b=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=h&&null!=m&&m!==h,k="+"===y||"*"===y,S="?"===y||"*"===y,C=n[2]||c,_=v||b;r.push({name:g||o++,prefix:h||"",delimiter:C,optional:S,repeat:k,partial:E,asterisk:!!w,pattern:_?u(_):w?".*":"[^"+s(C)+"]+?"})}}return i{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=k.value.length,k=k.next){var C=k.value;if(t.length>e.length)return;if(!(C instanceof a)){var _,x=1;if(b){if(!(_=o(E,S,e,v))||_.index>=e.length)break;var T=_.index,I=_.index+_[0].length,L=S;for(L+=k.value.length;T>=L;)L+=(k=k.next).value.length;if(S=L-=k.value.length,k.value instanceof a)continue;for(var A=k;A!==t.tail&&(Ld.reach&&(d.reach=R);var D=k.prev;if(O&&(D=s(t,D,O),S+=O.length),u(t,D,x),k=s(t,D,new a(f,g?r.tokenize(N,g):N,y,N)),P&&s(t,k,P),x>1){var M={cause:f+","+m,reach:R};i(e,t,n,k.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),v=f.substring(m+p.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),v&&b.push.apply(b,i([v])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},66841:()=>{Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/}},33003:(e,t,n)=>{var r={"./prism-lua":66841};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=33003},92703:(e,t,n)=>{"use strict";var r=n(50414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var r=n(67294),a=n(27418),o=n(63840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n