From de0e9ce07f206c5bab30cdb5311e64d9f2b25cbe Mon Sep 17 00:00:00 2001 From: Mark Pearce Date: Sun, 10 Apr 2022 22:08:10 -0300 Subject: [PATCH] Sorts data.json so nodes, compoenents, interfaces, events, properties, methods, implementors etc. are in alphabetical order --- scripts/scrape-roku-docs.ts | 50 +- src/roku-types/data.json | 25094 +++++++++++++++++----------------- 2 files changed, 12596 insertions(+), 12548 deletions(-) diff --git a/scripts/scrape-roku-docs.ts b/scripts/scrape-roku-docs.ts index cdd62be1f..12a637f91 100644 --- a/scripts/scrape-roku-docs.ts +++ b/scripts/scrape-roku-docs.ts @@ -56,8 +56,11 @@ class Runner { this.repairReferences(); this.linkMissingImplementers(); + //sort arrays internal to the data + this.sortInternalData(); + //store the output - fsExtra.outputFileSync(outPath, JSON.stringify(this.result, null, 4)); + fsExtra.outputFileSync(outPath, JSON.stringify(this.result, objectKeySorter, 4)); } /** @@ -136,6 +139,36 @@ class Runner { } } + /** + * Sorts internal arrays of the data in results, eg. implementers, properties, methods, etc. + */ + public sortInternalData() { + const nameComparer = (a: { name: string }, b: { name: string }) => (a.name.localeCompare(b.name)); + for (let component of Object.values(this.result.components)) { + component.constructors.sort((a, b) => b.params.length - a.params.length); + component.events.sort(nameComparer); + component.interfaces.sort(nameComparer); + } + + for (let evt of Object.values(this.result.events)) { + evt.implementers.sort(nameComparer); + evt.properties.sort(nameComparer); + evt.methods.sort(nameComparer); + } + + for (let iface of Object.values(this.result.interfaces)) { + iface.implementers.sort(nameComparer); + iface.properties.sort(nameComparer); + iface.methods.sort(nameComparer); + } + + for (let node of Object.values(this.result.nodes)) { + node.events.sort(nameComparer); + node.fields.sort(nameComparer); + node.interfaces.sort(nameComparer); + } + } + public buildRoSGNodeList() { // const asdf = this.httpGet('https://devtools.web.roku.com/schema/RokuSceneGraph.xsd'); } @@ -670,6 +703,21 @@ function repairMarkdownLinks(text: string) { return text; } +/** + * Replacer function for JSON.Stringify to sort keys in objects + * Note - this ignores the top level properties + * from: https://gist.github.com/davidfurlong/463a83a33b70a3b6618e97ec9679e490 + */ +function objectKeySorter(key, value) { + return (value instanceof Object && !(value instanceof Array)) && !!key + ? Object.keys(value) + .sort() + .reduce((sorted, key) => { + sorted[key] = value[key]; + return sorted; + }, {}) + : value; +} /** * A class to help manage the parsed markdown tokens diff --git a/src/roku-types/data.json b/src/roku-types/data.json index 78158e090..4b2392edb 100644 --- a/src/roku-types/data.json +++ b/src/roku-types/data.json @@ -1,5590 +1,5607 @@ { - "generatedDate": "2022-04-08T13:01:51.116Z", + "generatedDate": "2022-04-11T01:03:18.894Z", "nodes": { - "node": { - "name": "Node", - "url": "https://developer.roku.com/docs/references/scenegraph/node.md", - "description": "The abstract base class of all SceneGraph nodes and the equivalent of the BrightScript roSGNode component. See [roSGNode](https://developer.roku.com/docs/references/brightscript/components/rosgnode.md\"roSGNode\") for supported interfaces.\n\n**Node** class objects do not draw anything and are skipped in the render traversal of the SceneGraph node tree. The Node class provides the core parenting and key focus management functionality used by all nodes.", - "fields": [ - { - "name": "id", - "type": "string", - "default": "\"\"", - "accessPermission": "READ\\_WRITE", - "description": "Adds a dictionary entry that allows the node to be retrieved with \\[ifSGNodeDict\\](https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodedict.md\"ifSGNodeDict\") findNode() function." - }, - { - "name": "focusedChild", - "type": "N/A", - "default": "N/A", - "accessPermission": "READ\\_WRITE", - "description": "When a node or one of its children gains or loses the keyboard focus, the focusedChild field will be set and call its observer functions. In the observer function, typically, you use \\[ifSGNodeFocus\\](https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodefocus.md\"ifSGNodeFocus\") functions to query whether this node or some other node has the key focus or is in the key focus chain. Accessing the value of the field will result in script errors." - }, - { - "name": "focusable", - "type": "Boolean", - "default": "false", - "accessPermission": "READ\\_WRITE", - "description": "Provides a hint as to whether or not this node can take the key focus." - }, - { - "name": "change", - "type": "associative array", - "default": "{ Index1: 0, Index2: 0, Operation: none }", - "accessPermission": "READ\\_ONLY", - "description": "Operations affecting the set of children of a Node are recorded in this field if, and only if, this field has been observed. The field associative array indicates the operation and two indexes, index1 and index 2, involved in the change. The operation is denoted by these value strings:\n\n| Value | Meaning |\n| --- | --- |\n| none | No operation on the children nodes since the change field was observed, indexes are irrelevant |\n| insert | A child node was inserted at _index1_ |\n| add | A child node was added to the end of the children node tree (at _index 1_) |\n| remove | A child node was removed from position _index1_, and if _index2_\\>_index1_, all the children nodes between _index1_ and _index2_ inclusive were removed |\n| set | The child node at position _index1_ was replaced with a new child node |\n| clear | All the children nodes were removed |\n| move | The child node at position _index1_ was moved to the new position _index2_ |\n| setall | All the children nodes were replaced |\n| modify | A pre-defined content meta-data field of a **ContentNode** node child at _index1_ was changed (_only_ set for **ContentNode** node children when a pre-defined content meta-data field changes) |" - } - ], - "events": [ - { - "name": "roSGNodeEvent", - "url": "https://developer.roku.com/docs/references/brightscript/events/rosgnodeevent.md" - } - ], - "interfaces": [ - { - "name": "ifAssociativeArray", - "url": "https://developer.roku.com/docs/references/brightscript/interfaces/ifassociativearray.md" - }, - { - "name": "ifSGNodeChildren", - "url": "https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodechildren.md" - }, - { - "name": "ifSGNodeField", - "url": "https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodefield.md" - }, - { - "name": "ifSGNodeDict", - "url": "https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodedict.md" - }, - { - "name": "ifSGNodeFocus", - "url": "https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodefocus.md" - }, - { - "name": "ifSGNodeBoundingRect", - "url": "https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodeboundingrect.md" - }, - { - "name": "ifSGNodeHttpAgentAccess", - "url": "https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodehttpagentaccess.md" - } - ] - }, - "scene": { - "name": "Scene", - "url": "https://developer.roku.com/docs/references/scenegraph/scene.md", + "animation": { + "description": "Extends [**AnimationBase**](https://developer.roku.com/docs/references/scenegraph/abstract-nodes/animationbase.md\n\nThe Animation node class provides animations of renderable nodes, by applying interpolator functions to the values in specified renderable node fields. For an animation to take effect, an Animation node definition must include a child field interpolator node ([FloatFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/floatfieldinterpolator.md\"FloatFieldInterpolator\"), [Vector2DFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/vector2dfieldinterpolator.md\"Vector2DFieldInterpolator\"), [ColorFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/colorfieldinterpolator.md\"ColorFieldInterpolator\")) definition for each renderable node field that is animated.\n\nThe Animation node class provides a simple linear interpolator function, where the animation takes place smoothly and simply from beginning to end. The Animation node class also provides several more complex interpolator functions to allow custom animation effects. For example, you can move a graphic image around the screen at differing speeds and curved trajectories at different times in the animation by specifying the appropriate function in the easeFunction field (quadratic and exponential are two examples of functions that can be specified). The interpolator functions are divided into two parts: the beginning of the animation (ease-in), and the end of the animation (ease-out). You can apply a specified interpolator function to either or both ease-in and ease-out, or specify no function for either or both (which is the linear function). You can also change the portion of the animation that is ease-in and ease-out to arbitrary fractional values for a quadratic interpolator function applied to both ease-in and ease-out.", + "events": [], "extends": { - "name": "Group", - "url": "https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md" + "name": "AnimationBase", + "url": "https://developer.roku.com/docs/references/scenegraph/abstract-nodes/animationbase.md" }, - "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\nThe **Scene** node class serves as the root of a SceneGraph node tree. Every **roSGScreen** object must have a **Scene** node, or a node that derives from the **Scene** node class as its root, including an XML markup component that extends the Scene node class or subclass. That node must be created using the **roSGScreen** createScene() function, with an argument that is a string of the name of the **Scene** node object created. For example:\n\n```\nscreen = CreateObject(\"roSGScreen\")\nscene = screen.CreateScene(\"Scene\")\n```\n\nWhile it is technically possible to have more than one scene per channel, we recommend you only have one **roSGScreen** and one **Scene** node. Child nodes of the scene can be treated as different \"scenes\" where you can then implement transitions between them.", "fields": [ { - "name": "backgroundURI", - "type": "uri", - "default": "invalid", "accessPermission": "READ\\_WRITE", - "description": "Specifies a graphic image file to be used for the Scene node background." + "default": "0", + "description": "Sets the duration of the animation in seconds", + "name": "duration", + "type": "Time" }, { - "name": "backgroundColor", - "type": "color", - "default": "0x000000FF", "accessPermission": "READ\\_WRITE", - "description": "Specifies a background color for the scene. This color is only used if the backgroundURI field is set to an empty string. For example: scene.backgroundColor=\"0xEB1010FF\" scene.backgroundUri = \"\"" + "default": "\"outCubic\"", + "description": "Specifies the interpolator function to be used for the animation:\n\n| Value | Ease-In/Ease-Out Function |\n| --- | --- |\n| linear | No ease-in or ease-out |\n| inQuad | Quadratic ease-in function, no ease-out |\n| inCubic | Cubic ease-in function, no ease-out |\n| inQuartic | Quartic ease-in function, no ease-out |\n| inQuintic | Quintic ease-in function, no ease-out |\n| inExpo | Exponential ease-in function, no ease-out |\n| outQuad | Quadratic ease-out function, no ease-in |\n| outCubic | Cubic ease-out function, no ease-in |\n| outQuartic | Quartic ease-out function, no ease-in |\n| outQuintic | Quintic ease-out function, no ease-in |\n| outExpo | Exponential ease-out function, no ease-in |\n| inOutQuad | Quadratic ease-in and ease-out function |\n| inOutCubic | Cubic ease-in and ease-out function |\n| inOutQuartic | Quartic ease-in and ease-out function |\n| inOutQuintic | Quintic ease-in and ease-out function |\n| inOutExpo | Exponential ease-in and ease-out function |\n| piecewise | Quadratic ease-in and ease-out function with extra control over the percentage of the duration during which ease-in and ease-out occurs. The extra control is specified using the `easeInPercent` and `easeOutPercent` fields. |", + "name": "easeFunction", + "type": "string" }, { - "name": "backExitsScene", - "type": "Boolean", - "default": "true", "accessPermission": "READ\\_WRITE", - "description": "If true, a Back key press causes the scene to exit, back to the last user-focused item. If false, a Back key press does not cause the scene to exit. In order for the Back key to cause the scene to exit, the remote control focus must be explicitly set on the scene, or a child of the scene, using the \\[ifSGNodeFocus\\](https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodefocus.md\"ifSGNodeFocus\") interface setFocus(true) function. A Home key press always causes the scene to exit." + "default": "0.5", + "description": "If easeFunction is set to piecewise, easeInPercent sets the percentage of the animation duration during which ease-in is applied. Note that the values of easeInPercent plus easeOutPercent must be less than or equal to 1. For all other values of easeFunction, easeInPercent is ignored", + "name": "easeInPercent", + "type": "float" }, { - "name": "dialog", - "type": "Node", - "default": "invalid", - "accessPermission": "", - "description": "Setting this field to a node extended from a \\*\\*Dialog\\*\\* node causes the dialog to be displayed" + "accessPermission": "READ\\_WRITE", + "default": "0.5", + "description": "If easeFunction is set to piecewise, easeOutPercent sets the percentage of the animation duration during which ease-out is applied. Note that the values of easeInPercent plus easeOutPercent must be less than or equal to 1. For all other values of easeFunction, easeOutPercent is ignored", + "name": "easeOutPercent", + "type": "float" }, { - "name": "currentDesignResolution", - "type": "assocarray", - "default": "", "accessPermission": "READ\\_WRITE", - "description": "This read-only field is set when the Scene is initialized. It indicates which of a channel's design resolutions (per manifest's ui\\\\\\_resolutions value) is being used, based on the player model and connected display type. Previously, a developer could deduct the same information by using both \\[roDeviceInfo.GetUIResolution\\](https://developer.roku.com/docs/references/brightscript/interfaces/ifdeviceinfo.mdgetuiresolution-as-object() \"roDeviceInfo.GetUIResolution\") and \\[roAppInfo.getValue\\](https://developer.roku.com/docs/references/brightscript/interfaces/ifappinfo.mdgetvaluekey-as-string-as-string \"roAppInfo.getValue\")(\"ui\\\\\\_resolutions\"). This new field simplifies the process. The field is set to an AA with two numeric-valued keys — width and height — as well as a string value indicating the current design resolution (\"HD\", \"FHD\" or \"SD\"). \\`\\`\\` Brightscript Debugger> ? myNode.getScene().currentDesignResolution \\= { height: 720 resolution: \"HD\" width: 1280 } \\`\\`\\`" + "default": "false", + "description": "Set to true to skip animations on lower performing Roku devices (Paolo, Giga, Jackson, Tyler, and Sugarland). See \\[Roku Devices\\](/docs/specs/hardware.md#current-models \"Roku Devices\") for model numbers and code names. When an Animation has optional set to true, setting the control field to start will cause the state field to change to running and immediately change again to finished. These state changes allow any logic tied to state field observers that run at the start and end of the Animation to be properly called", + "name": "optional", + "type": "boolean" }, { - "name": "pallete", - "type": "RSGPalette node", - "default": "not set", - "accessPermission": "READ\\_WRITE", - "description": "Defines the default color palette used by those nodes that have a \\*\\*palette\\*\\* field (for example, the \\*\\*Scene\\*\\* node, \\[standard dialogs\\](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/standard-dialog.md, \\[dynamic custom voice keyboards\\](docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-keyboard-base.md), and so on). Channels typically set the \\*\\*Scene.palette\\*\\* field to consistently color the standard dialogs and keyboards in the channel. Nodes that include a \\*\\*palette\\*\\* field can be set to an \\*\\*RSGPalette\\*\\* node to override the default colors specified in the \\*\\*Scene\\*\\* node. If a node that supports a palette does not set its \\*\\*palette\\*\\* filed, the node looks up the scene graph until it finds a node with its \\*\\*palette\\*\\* field set. If no ancestor node is found with its palette field set, the default color palette is used (grey with white text). The RSGPalette color values used by the Scene node are as follows:\n\n| Palette Color Name | Usages |\n| --- | --- |\n| PrimaryTextColor | The text color used for the entered text displayed in the VoiceTextEditBox node. |\n| SecondaryTextColor | The text color used for the hints displayed in the VoiceTextEditBox. |\n| InputFieldColor | The blend color applied to the VoiceTextEditBox background |\n| DialogBackgroundColor | Blend color for dialog's background bitmap. |\n| DialogItemColor | Blend color for the following items: * [StdDlgProgressItem's](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-progress-item.md spinner bitmap * [StdDlgDeterminateProgressItem's](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-determinate-progress-item.md graphic |\n| DialogTextColor | Color for the text in the following items: * [StdDlgTextItem](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-text-item.md and [StdDlgGraphicItem](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-graphic-item.md if the **namedTextStyle** field is set to \"normal\" or \"bold\". * All [content area items](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-item-base.md, except for [StdDlgTextItem](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-text-item.md and [StdDlgGraphicItem](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-graphic-item.md. * [Title area](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-title-area.mdfields). Unfocused button. |\n| DialogFocusColor | Blend color for the following: * The [button area](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-button-area.mdfields) focus bitmap. * The focused scrollbar thumb. |\n| DialogFocusItemColor | Color for the text of the focused button. |\n| DialogSecondaryTextColor | Color for the text of in the following items: * [StdDlgTextItem](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-text-item.md and [StdDlgGraphicItem](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-graphic-item.md if the **namedTextStyle** field is set to \"secondary\". * Disabled button. |\n| DialogSecondaryItemColor | Color for the following items: * The divider displayed below the title area. * The unfilled portion of the [StdDlgDeterminateProgressItem's](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-determinate-progress-item.md graphic. |\n| DialogInputFieldColor | The blend color for the text edit box background bitmap for keyboards used inside dialogs. |\n| DialogKeyboardColor | The blend color for the keyboard background bitmap for keyboards used inside dialogs |\n| DialogFootprintColor | The blend color for the following items: * The button focus footprint bitmap that is displayed when the [button area](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/std-dlg-button-area.mdfields) does not have focus. * Unfocused scrollbar thumb and scrollbar track. |" + "accessPermission": "READ\\_ONLY", + "default": "false", + "description": "Indicates whether the animation runs or jumps to the end (effectively skipping the animation and rendering it in its final state).", + "name": "willBeSkipped (_Available since Roku OS 10.0_)", + "type": "boolean" } ], - "events": [], - "interfaces": [] + "interfaces": [], + "name": "Animation", + "url": "https://developer.roku.com/docs/references/scenegraph/animation-nodes/animation.md" }, "animationbase": { - "name": "AnimationBase", - "url": "https://developer.roku.com/docs/references/scenegraph/abstract-nodes/animationbase.md", + "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\"**Node**\")\n\nAnimationBase is an abstract node class that contains the fields common to the [Animation](https://developer.roku.com/docs/references/scenegraph/animation-nodes/animation.md\"Animation\"), [SequentialAnimation](https://developer.roku.com/docs/references/scenegraph/animation-nodes/sequentialanimation.md\"SequentialAnimation\"), and [ParallelAnimation](https://developer.roku.com/docs/references/scenegraph/animation-nodes/parallelanimation.md\"ParallelAnimation\") nodes. The purpose of the AnimationBase node class is to provide the basic functionality needed to animate screen elements, such as moving them across the display screen, fading them in and out of view, or changing their color. All node classes extended from AnimationBase require the use of the interpolator node classes [FloatFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/floatfieldinterpolator.md\"FloatFieldInterpolator\"), [Vector2DFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/vector2dfieldinterpolator.md\"Vector2DFieldInterpolator\"), and [ColorFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/colorfieldinterpolator.md\"ColorFieldInterpolator\") as child nodes to achieve a specific animation effect.\n\n> AnimationBase is not meant to be instantiated directly by channel code", + "events": [], "extends": { "name": "Node", "url": "https://developer.roku.com/docs/references/scenegraph/node.md" }, - "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\"**Node**\")\n\nAnimationBase is an abstract node class that contains the fields common to the [Animation](https://developer.roku.com/docs/references/scenegraph/animation-nodes/animation.md\"Animation\"), [SequentialAnimation](https://developer.roku.com/docs/references/scenegraph/animation-nodes/sequentialanimation.md\"SequentialAnimation\"), and [ParallelAnimation](https://developer.roku.com/docs/references/scenegraph/animation-nodes/parallelanimation.md\"ParallelAnimation\") nodes. The purpose of the AnimationBase node class is to provide the basic functionality needed to animate screen elements, such as moving them across the display screen, fading them in and out of view, or changing their color. All node classes extended from AnimationBase require the use of the interpolator node classes [FloatFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/floatfieldinterpolator.md\"FloatFieldInterpolator\"), [Vector2DFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/vector2dfieldinterpolator.md\"Vector2DFieldInterpolator\"), and [ColorFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/colorfieldinterpolator.md\"ColorFieldInterpolator\") as child nodes to achieve a specific animation effect.\n\n> AnimationBase is not meant to be instantiated directly by channel code", "fields": [ { - "name": "control", - "type": "option string", - "default": "none", "accessPermission": "READ\\_WRITE", - "description": "Controls the animation. Supported options include:\n\n| Option | Effect |\n| --- | --- |\n| none | Initial state with no associated action |\n| start | Always plays the animation from the beginning |\n| stop | Stops the animation in its current state |\n| pause | Pauses the animation in its current state |\n| resume | If paused, resumes the animation from its current state. If the animation is not paused, plays the animation from the beginning. |\n| finish | Jumps to the end of the animation, then stops. All animated fields will be immediately set to their final values as if the animation had completed. |" + "default": "none", + "description": "Controls the animation. Supported options include:\n\n| Option | Effect |\n| --- | --- |\n| none | Initial state with no associated action |\n| start | Always plays the animation from the beginning |\n| stop | Stops the animation in its current state |\n| pause | Pauses the animation in its current state |\n| resume | If paused, resumes the animation from its current state. If the animation is not paused, plays the animation from the beginning. |\n| finish | Jumps to the end of the animation, then stops. All animated fields will be immediately set to their final values as if the animation had completed. |", + "name": "control", + "type": "option string" }, { - "name": "state", - "type": "value string", - "default": "stopped", - "accessPermission": "READ\\_ONLY", - "description": "Indicates the state of the animation. Values include:\n\n| Value | Meaning |\n| --- | --- |\n| running | Indicates that the animation is in progress |\n| paused | Indicates that the animation has been paused |\n| stopped | Indicates that the animation has either run to completion or has been explicitly stopped |" + "accessPermission": "READ\\_WRITE", + "default": "0", + "description": "Delays the start of the animation by the specified number of seconds", + "name": "delay", + "type": "time" }, { - "name": "repeat", - "type": "Boolean", - "default": "false", "accessPermission": "READ\\_WRITE", - "description": "Controls whether the animation stops when it finishes (false) or repeats from the beginning (true)" + "default": "false", + "description": "Controls whether the animation stops when it finishes (false) or repeats from the beginning (true)", + "name": "repeat", + "type": "Boolean" }, { - "name": "delay", - "type": "time", - "default": "0", - "accessPermission": "READ\\_WRITE", - "description": "Delays the start of the animation by the specified number of seconds" + "accessPermission": "READ\\_ONLY", + "default": "stopped", + "description": "Indicates the state of the animation. Values include:\n\n| Value | Meaning |\n| --- | --- |\n| running | Indicates that the animation is in progress |\n| paused | Indicates that the animation has been paused |\n| stopped | Indicates that the animation has either run to completion or has been explicitly stopped |", + "name": "state", + "type": "value string" } ], - "events": [], - "interfaces": [] + "interfaces": [], + "name": "AnimationBase", + "url": "https://developer.roku.com/docs/references/scenegraph/abstract-nodes/animationbase.md" }, "arraygrid": { - "name": "ArrayGrid", - "url": "https://developer.roku.com/docs/references/scenegraph/abstract-nodes/arraygrid.md", + "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\nThe ArrayGrid node class is an abstract base class that provides functionality to the list and grid node classes that are extended from ArrayGrid. The field value settings and their effect in this abstract base class depend in many cases on whether a list, or a grid, node class is extended from ArrayGrid, and the specific type of list or grid.\n\nThe following node classes extended from ArrayGrid derive their basic functionality from the ArrayGrid abstract node class:\n\n* [LabelList](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/labellist.md\"LabelList\")\n* [MarkupList](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/markuplist.md\"MarkupList\")\n* [PosterGrid](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/postergrid.md\"PosterGrid\")\n* [MarkupGrid](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/markupgrid.md\"MarkupGrid\")\n* [RowList](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/rowlist.md\"RowList\")\n\n> ArrayGrid is not meant to be instantiated directly by channel code", + "events": [], "extends": { "name": "Group", "url": "https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md" }, - "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\nThe ArrayGrid node class is an abstract base class that provides functionality to the list and grid node classes that are extended from ArrayGrid. The field value settings and their effect in this abstract base class depend in many cases on whether a list, or a grid, node class is extended from ArrayGrid, and the specific type of list or grid.\n\nThe following node classes extended from ArrayGrid derive their basic functionality from the ArrayGrid abstract node class:\n\n* [LabelList](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/labellist.md\"LabelList\")\n* [MarkupList](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/markuplist.md\"MarkupList\")\n* [PosterGrid](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/postergrid.md\"PosterGrid\")\n* [MarkupGrid](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/markupgrid.md\"MarkupGrid\")\n* [RowList](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/rowlist.md\"RowList\")\n\n> ArrayGrid is not meant to be instantiated directly by channel code", "fields": [ { - "name": "content", - "type": "ContentNode", - "default": "none", - "accessPermission": "READ\\_WRITE", - "description": "Specifies the content meta-data for the list or grid. This field must be set with a ContentNode node that specifies the content meta-data for the list or grid in order for the list or grid to be displayed. See the Data Bindings section of each list or grid reference description for details on the content meta-data that must be specified in the ContentNode node" + "accessPermission": "WRITE\\_ONLY", + "default": "0", + "description": "When set to a valid item index, causes the list or grid to quickly scroll so that the item at the specified index moves into focus, or focus moves to the item", + "name": "animateToItem", + "type": "integer" }, { - "name": "itemSize", - "type": "vector2d", - "default": "\\[0,0\\]", "accessPermission": "READ\\_WRITE", - "description": "Specifies the width and height of each item in the list or grid. For list or grid items that are posters, itemSize is the value of a basePosterSize field and any sub-elements included with the poster" + "default": "\\[\\]", + "description": "Specifies differing spaces between each grid column, to allow the spacing between columns to vary from column to column. This field is not used by lists. The specified values override the itemSpacing field vector2d X-value for each grid column corresponding to its position in the array, in left to right order. If the array contains fewer elements than the number of columns needed to display all the items in the grid, the itemSpacing field vector2d X-value is used for any unspecified columns", + "name": "columnSpacings", + "type": "array of floats" }, { - "name": "itemSpacing", - "type": "vector2d", - "default": "\\[0,0\\]", "accessPermission": "READ\\_WRITE", - "description": "Specifies the horizontal and vertical spacing between the list or grid items. For lists, the vector2d Y-value specifies the vertical spacing between items in the list, and the vector2d X-value is ignored" + "default": "\\[\\]", + "description": "Specifies differing widths for each grid column, to allow the width of each column to vary from column to column. This field is not used by lists. The specified values override the itemSize field vector2d X-value for each grid column corresponding to its position in the array, in left to right order. If the array contains fewer elements than the number of columns needed to display all the items in the grid, the itemSize field vector2d X-value is used for any unspecified columns", + "name": "columnWidths", + "type": "array of floats" }, { - "name": "numRows", - "type": "integer", - "default": "0", "accessPermission": "READ\\_WRITE", - "description": "Specifies the number of visible rows displayed. Note that the actual number of rows may be more or less than the number specified depending on the number of items in the list or grid content" + "default": "none", + "description": "Specifies the content meta-data for the list or grid. This field must be set with a ContentNode node that specifies the content meta-data for the list or grid in order for the list or grid to be displayed. See the Data Bindings section of each list or grid reference description for details on the content meta-data that must be specified in the ContentNode node", + "name": "content", + "type": "ContentNode" }, { - "name": "numColumns", - "type": "integer", - "default": "0", "accessPermission": "READ\\_WRITE", - "description": "Specifies the number of columns in a grid. This field is not used for lists" + "default": "0.0", + "description": "Gives access to which column of a grid is in the focus position as the items scrolling around. So, currFocusColumn = 3.7 would mean that item 3 occupies 30% of the focus position while item 4 occupies 70% of the focus position. To maximize performance, the field should be kept to a minimum, as these scripts will run once during each render", + "name": "currFocusColumn", + "type": "float" }, { - "name": "focusRow", - "type": "integer", + "accessPermission": "READ\\_ONLY", "default": "0", - "accessPermission": "READ\\_WRITE", - "description": "Specifies the row that will have fixed focus if the vertFocusAnimationStyle field value is set to fixedFocusWrap" + "description": "This field provides access to the current opacity of the focus feedback indicator. It can be used to have other items on the screen fade in/out when the focus feedback indicator fades in/out.", + "name": "currFocusFeedbackOpacity", + "type": "float" }, { - "name": "focusColumn", - "type": "integer", - "default": "0", "accessPermission": "READ\\_WRITE", - "description": "Specifies the column that will have fixed focus for grids if the horizFocusAnimationStyle field value is set to fixedFocusWrap. This field is not used for lists" + "default": "0.0", + "description": "Gives access to which row of a grid is in the focus position as the items scrolling around. So, currFocusRow = 3.7 would mean that item 3 occupies 30% of the focus position while item 4 occupies 70% of the focus position. To maximize performance, the field should be kept to a minimum, as these scripts will run once during each render", + "name": "currFocusRow", + "type": "float" }, { - "name": "horizFocusAnimationStyle", - "type": "option string", - "default": "floatingFocus", "accessPermission": "READ\\_WRITE", - "description": "Specifies the how the focus indicator moves in a row of grid items in response to the remote direction pad Left and Right key presses. This field is not used for lists. The possible values are:\n\n| Option | Effect |\n| --- | --- |\n| floatingFocus | Causes the focus indicator to float left or right until it reaches the end of the row, at which point the focus indicator will stay fixed on the first or last item in the row, and the items will scroll left or right if there were items that were not visible. |\n| fixedFocusWrap | Causes the row to wrap around when the focus indicator reaches the first or last item in the row, as long as the row contains enough items to fill the row. If the row does not contain enough items to fill the row, the focus indicator will float left and right. |" + "default": "0.0", + "description": "Gives access to which section of a grid is in the focus position as the items scrolling around. So, currFocusSection = 3.7 would mean that item 3 occupies 30% of the focus position while item 4 occupies 70% of the focus position. To maximize performance, the field should be kept to a minimum, as these scripts will run once during each render", + "name": "currFocusSection", + "type": "float" }, { - "name": "vertFocusAnimationStyle", - "type": "option string", - "default": "floatingFocus", "accessPermission": "READ\\_WRITE", - "description": "Specifies the how the focus indicator moves in a list or a column of grid items in response to the remote direction pad Up and Down key presses. The possible values are:\n\n| Option | Effect |\n| --- | --- |\n| floatingFocus | Causes the focus indicator to float up or down until it reaches the end of the list or grid column, at which point the focus indicator will stay fixed on the first or last item in the list or grid column, and the items will scroll up or down if there are items that were not visible. Note that when this style is set, section dividers are not rendered. |\n| fixedFocusWrap | Causes the column to wrap around when the focus indicator reaches the first or last item in the list or grid column, as long as the list or grid column contains enough items to fill the list or grid column. If the list or grid column does not contain enough items to fill the list or grid column, the focus indicator will float up and down. |\n| fixedFocus | Causes the focus to stay fixed on the upper leftmost item. As the user scrolls down, the row containing the previously selected item scrolls up off screen. Scrolling continues until the last row is reached. |" + "default": "true", + "description": "Causes a specified bitmap to be drawn on list or grid items to indicate focus has moved to that item", + "name": "drawFocusFeedback", + "type": "Boolean" }, { - "name": "drawFocusFeedbackOnTop", - "type": "Boolean", - "default": "false", "accessPermission": "READ\\_WRITE", - "description": "If the drawFocusFeedback field value is set to true, specifies whether the specified focus indicator bitmap is drawn on top of the focused list or grid items. The default value draws the specified focus indicator bitmap below the focused list or grid item" + "default": "false", + "description": "If the drawFocusFeedback field value is set to true, specifies whether the specified focus indicator bitmap is drawn on top of the focused list or grid items. The default value draws the specified focus indicator bitmap below the focused list or grid item", + "name": "drawFocusFeedbackOnTop", + "type": "Boolean" }, { - "name": "drawFocusFeedback", - "type": "Boolean", - "default": "true", "accessPermission": "READ\\_WRITE", - "description": "Causes a specified bitmap to be drawn on list or grid items to indicate focus has moved to that item" + "default": "false", + "description": "When set to true, the focus feedback indicator will quickly fade out when scrolling multiple items and fade back in when the scrolling ends. The focus feedback indicator will also after in and out when using the FFW/Rewind keys to scroll a page at a time. Additionally, the focus behavior has been modified for situations where all the items in a RowList row are visible on screen at once. In the past, the focus would step once, then begin to scroll smoothly. Now, the focus steps one-by-one through each item.", + "name": "fadeFocusFeedbackWhenAutoScrolling", + "type": "Boolean" }, { - "name": "fadeFocusFeedbackWhenAutoScrolling", - "type": "Boolean", + "accessPermission": "READ\\_WRITE", "default": "false", + "description": "Specifies that a grid will have a layout of items of different widths configured by parameters included in a ContentNode node for the grid. This field is not used by lists", + "name": "fixedLayout", + "type": "Boolean" + }, + { "accessPermission": "READ\\_WRITE", - "description": "When set to true, the focus feedback indicator will quickly fade out when scrolling multiple items and fade back in when the scrolling ends. The focus feedback indicator will also after in and out when using the FFW/Rewind keys to scroll a page at a time. Additionally, the focus behavior has been modified for situations where all the items in a RowList row are visible on screen at once. In the past, the focus would step once, then begin to scroll smoothly. Now, the focus steps one-by-one through each item." + "default": "0xFFFFFFFF", + "description": "Blend the graphic image specified by focusBitmapUri with the specified color. If set to the default, 0xFFFFFFFF, no color blending will occur. Set this field to show a focus indicator graphic image with a different color than the image specified by focusBitmapUri", + "name": "focusBitmapBlendColor", + "type": "color" }, { - "name": "itemcurrFocusFeedbackOpacity", - "type": "Float", - "default": "0", "accessPermission": "READ\\_WRITE", - "description": "This field provides access to the current opacity of the focus feedback indicator. It can be used to have other items on the screen fade in/out when the focus feedback indicator fades in/out. Additionally, the focus behavior has been modified for situations where all the items in a RowList row are visible on screen at once. In the past, the focus would step once, then begin to scroll smoothly. Now, the focus steps one-by-one through each item." + "default": "", + "description": "If the drawFocusFeedback field value is set to true, specifies a custom bitmap to be drawn on list or grid items to indicate the focus has moved to that item. Only set this field to use a bitmap with a different appearance than the system default. In most cases, you will want to use a 9-patch PNG bitmap with both expandable regions as well as margins to fit around the item, which is the type of bitmap used as the system default", + "name": "focusBitmapUri", + "type": "uri" }, { - "name": "currFocusFeedbackOpacity", - "type": "float", + "accessPermission": "READ\\_WRITE", "default": "0", - "accessPermission": "READ\\_ONLY", - "description": "This field provides access to the current opacity of the focus feedback indicator. It can be used to have other items on the screen fade in/out when the focus feedback indicator fades in/out." + "description": "Specifies the column that will have fixed focus for grids if the horizFocusAnimationStyle field value is set to fixedFocusWrap. This field is not used for lists", + "name": "focusColumn", + "type": "integer" }, { - "name": "focusBitmapUri", - "type": "uri", + "accessPermission": "READ\\_WRITE", "default": "", + "description": "If the drawFocusFeedback field value is set to true, specifies a custom bitmap to be drawn on list or grid items to indicate focus on that item, when the list or grid itself does not have focus. Only set this field to use a bitmap with a different appearance than the system default. In most cases, you will want to use a 9-patch PNG bitmap with both expandable regions as well as margins to fit around the item, which is the type of bitmap used as the system default", + "name": "focusFootprintBitmapUri", + "type": "uri" + }, + { "accessPermission": "READ\\_WRITE", - "description": "If the drawFocusFeedback field value is set to true, specifies a custom bitmap to be drawn on list or grid items to indicate the focus has moved to that item. Only set this field to use a bitmap with a different appearance than the system default. In most cases, you will want to use a 9-patch PNG bitmap with both expandable regions as well as margins to fit around the item, which is the type of bitmap used as the system default" + "default": "0xFFFFFFFF", + "description": "Blend the graphic image specified by focusFootprintBitmapUri with the specified color. If set to the default, 0xFFFFFFFF, no color blending will occur. Set this field to show a focus footprint indicator graphic image with a different color than the image specified by focusFootprintBitmapUri", + "name": "focusFootprintBlendColor", + "type": "color" }, { - "name": "focusFootprintBitmapUri", - "type": "uri", - "default": "", "accessPermission": "READ\\_WRITE", - "description": "If the drawFocusFeedback field value is set to true, specifies a custom bitmap to be drawn on list or grid items to indicate focus on that item, when the list or grid itself does not have focus. Only set this field to use a bitmap with a different appearance than the system default. In most cases, you will want to use a 9-patch PNG bitmap with both expandable regions as well as margins to fit around the item, which is the type of bitmap used as the system default" + "default": "0", + "description": "Specifies the row that will have fixed focus if the vertFocusAnimationStyle field value is set to fixedFocusWrap", + "name": "focusRow", + "type": "integer" }, { - "name": "focusBitmapBlendColor", - "type": "color", - "default": "0xFFFFFFFF", "accessPermission": "READ\\_WRITE", - "description": "Blend the graphic image specified by focusBitmapUri with the specified color. If set to the default, 0xFFFFFFFF, no color blending will occur. Set this field to show a focus indicator graphic image with a different color than the image specified by focusBitmapUri" + "default": "floatingFocus", + "description": "Specifies the how the focus indicator moves in a row of grid items in response to the remote direction pad Left and Right key presses. This field is not used for lists. The possible values are:\n\n| Option | Effect |\n| --- | --- |\n| floatingFocus | Causes the focus indicator to float left or right until it reaches the end of the row, at which point the focus indicator will stay fixed on the first or last item in the row, and the items will scroll left or right if there were items that were not visible. |\n| fixedFocusWrap | Causes the row to wrap around when the focus indicator reaches the first or last item in the row, as long as the row contains enough items to fill the row. If the row does not contain enough items to fill the row, the focus indicator will float left and right. |", + "name": "horizFocusAnimationStyle", + "type": "option string" }, { - "name": "focusFootprintBlendColor", - "type": "color", - "default": "0xFFFFFFFF", "accessPermission": "READ\\_WRITE", - "description": "Blend the graphic image specified by focusFootprintBitmapUri with the specified color. If set to the default, 0xFFFFFFFF, no color blending will occur. Set this field to show a focus footprint indicator graphic image with a different color than the image specified by focusFootprintBitmapUri" + "default": "\\[ 0.0, 0.0, 0.0, 0.0 \\]", + "description": "Specifies a clipping region for the list or grid items", + "name": "itemClippingRect", + "type": "rect2d" }, { - "name": "wrapDividerBitmapUri", - "type": "uri", - "default": "", "accessPermission": "READ\\_WRITE", - "description": "If the vertFocusAnimationStyle field value is set to fixedFocusWrap, specifies a custom bitmap to use as a visual divider between the last and first list or grid items, when the list or grid wraps. Only set this field to use a bitmap with a different appearance than the system default. In most cases, you will want to use a 9-patch PNG bitmap with both expandable regions, which is the type of bitmap used as the system default" + "default": "0", + "description": "This field provides access to the current opacity of the focus feedback indicator. It can be used to have other items on the screen fade in/out when the focus feedback indicator fades in/out. Additionally, the focus behavior has been modified for situations where all the items in a RowList row are visible on screen at once. In the past, the focus would step once, then begin to scroll smoothly. Now, the focus steps one-by-one through each item.", + "name": "itemcurrFocusFeedbackOpacity", + "type": "Float" }, { - "name": "wrapDividerWidth", - "type": "float", + "accessPermission": "READ\\_ONLY", "default": "0", - "accessPermission": "READ\\_WRITE", - "description": "Additionally, the focus behavior has been modified for situations where all the items in a RowList row are visible on screen at once. In the past, the focus would step once, then begin to scroll smoothly. Now, the focus steps one-by-one through each item.If the vertFocusAnimationStyle field value is set to fixedFocusWrap, specifies the width of a bitmap used as a visual divider between the last and first list or grid items when the list or grid wraps. Only set this field to use a value with a different appearance than the system default" + "description": "When focus moves to a list or grid item, set to the index of the focused item", + "name": "itemFocused", + "type": "integer" }, { - "name": "wrapDividerHeight", - "type": "float", - "default": "36", - "accessPermission": "READ\\_WRITE", - "description": "If the vertFocusAnimationStyle field value is set to fixedFocusWrap, specifies the height of a bitmap used as a visual divider between the last and first list or grid items, when the list or grid wraps. Only set this field to use a value with a different appearance than the system default" + "accessPermission": "READ\\_ONLY", + "default": "0", + "description": "When a list or grid item is selected, set to the index of the selected item", + "name": "itemSelected", + "type": "integer" }, { - "name": "fixedLayout", - "type": "Boolean", - "default": "false", "accessPermission": "READ\\_WRITE", - "description": "Specifies that a grid will have a layout of items of different widths configured by parameters included in a ContentNode node for the grid. This field is not used by lists" + "default": "\\[0,0\\]", + "description": "Specifies the width and height of each item in the list or grid. For list or grid items that are posters, itemSize is the value of a basePosterSize field and any sub-elements included with the poster", + "name": "itemSize", + "type": "vector2d" }, { - "name": "numRenderPasses", - "type": "integer", - "default": "1", "accessPermission": "READ\\_WRITE", - "description": "Specifies the number of rendering operations to display a complex list or grid. This allows you to achieve a performance increase by specifying that individual sub-elements of the list or grid items occur on sequential rendering operations, rather than all of the item sub-elements being rendered in one rendering operation, which is the default. If you set this field to a value greater than 1, you must specify the rendering operation number for each of the item sub-elements as the renderPass field value for that sub-element. No sub-element that has a renderPass field value of 0 (the default), or has a renderPass field value greater than the value of the numRenderPasses field, will render" + "default": "\\[0,0\\]", + "description": "Specifies the horizontal and vertical spacing between the list or grid items. For lists, the vector2d Y-value specifies the vertical spacing between items in the list, and the vector2d X-value is ignored", + "name": "itemSpacing", + "type": "vector2d" }, { - "name": "rowHeights", - "type": "array of floats", - "default": "\\[\\]", - "accessPermission": "READ\\_WRITE", - "description": "Specifies differing heights for each list or grid row, to allow the height of each row to vary from row to row. The specified values override the itemSize field vector2d Y-value for each list or grid row corresponding to its position in the array, in top to bottom order. If the array contains fewer elements than the number of rows needed to display all the items in the list or grid, the itemSize field vector2d Y-value is used for any unspecified rows" + "accessPermission": "READ\\_ONLY", + "default": "0", + "description": "When focus moves away from a list or grid item, set to the index of the unfocused item", + "name": "itemUnfocused", + "type": "integer" }, { - "name": "columnWidths", - "type": "array of floats", - "default": "\\[\\]", - "accessPermission": "READ\\_WRITE", - "description": "Specifies differing widths for each grid column, to allow the width of each column to vary from column to column. This field is not used by lists. The specified values override the itemSize field vector2d X-value for each grid column corresponding to its position in the array, in left to right order. If the array contains fewer elements than the number of columns needed to display all the items in the grid, the itemSize field vector2d X-value is used for any unspecified columns" + "accessPermission": "WRITE\\_ONLY", + "default": "0", + "description": "When set to a valid item index, causes the list or grid to immediately update so that the item at the specified index moves into focus, or focus moves to the item", + "name": "jumpToItem", + "type": "integer" }, { - "name": "rowSpacings", - "type": "array of floats", - "default": "\\[\\]", "accessPermission": "READ\\_WRITE", - "description": "Specifies differing spaces between each list or grid row, to allow the spacing between rows to vary from row to row. The specified values override the itemSpacing field vector2d Y-value for each list or grid row corresponding to its position in the array, in top to bottom order. If the array contains fewer elements than the number of rows needed to display all the items in the list or grid, the itemSpacing field vector2d Y-value is used for any unspecified rows" + "default": "0", + "description": "Specifies the number of columns in a grid. This field is not used for lists", + "name": "numColumns", + "type": "integer" }, { - "name": "columnSpacings", - "type": "array of floats", - "default": "\\[\\]", "accessPermission": "READ\\_WRITE", - "description": "Specifies differing spaces between each grid column, to allow the spacing between columns to vary from column to column. This field is not used by lists. The specified values override the itemSpacing field vector2d X-value for each grid column corresponding to its position in the array, in left to right order. If the array contains fewer elements than the number of columns needed to display all the items in the grid, the itemSpacing field vector2d X-value is used for any unspecified columns" + "default": "1", + "description": "Specifies the number of rendering operations to display a complex list or grid. This allows you to achieve a performance increase by specifying that individual sub-elements of the list or grid items occur on sequential rendering operations, rather than all of the item sub-elements being rendered in one rendering operation, which is the default. If you set this field to a value greater than 1, you must specify the rendering operation number for each of the item sub-elements as the renderPass field value for that sub-element. No sub-element that has a renderPass field value of 0 (the default), or has a renderPass field value greater than the value of the numRenderPasses field, will render", + "name": "numRenderPasses", + "type": "integer" }, { - "name": "sectionDividerBitmapUri", - "type": "uri", - "default": "", "accessPermission": "READ\\_WRITE", - "description": "If the ContentNode node specifies sections for a list or grid, specifies a custom bitmap to use as a visual divider between the sections of the list or grid. Only set this field to use a bitmap with a different appearance than the system default. For sections that do not include an icon or a title, the system default or custom bitmap specified as the wrapDividerBitmapUri field value is used for the section dividers. In most cases, you will want to use a 9-patch PNG bitmap with both expandable regions, which is the type of bitmap used as the system default" + "default": "0", + "description": "Specifies the number of visible rows displayed. Note that the actual number of rows may be more or less than the number specified depending on the number of items in the list or grid content", + "name": "numRows", + "type": "integer" }, { - "name": "sectionDividerFont", - "type": "font", - "default": "system default", "accessPermission": "READ\\_WRITE", - "description": "If the ContentNode node specifies sections for a list or grid, specifies a custom font to use for the section title text. Only set this field to use a different font than the system default" + "default": "\\[\\]", + "description": "Specifies differing heights for each list or grid row, to allow the height of each row to vary from row to row. The specified values override the itemSize field vector2d Y-value for each list or grid row corresponding to its position in the array, in top to bottom order. If the array contains fewer elements than the number of rows needed to display all the items in the list or grid, the itemSize field vector2d Y-value is used for any unspecified rows", + "name": "rowHeights", + "type": "array of floats" }, { - "name": "sectionDividerTextColor", - "type": "color", - "default": "system default", "accessPermission": "READ\\_WRITE", - "description": "If the ContentNode node specifies sections for a list or grid, specifies a custom color to use for the section title text. Only set this field to use a different text color than the system default" + "default": "\\[\\]", + "description": "Specifies differing spaces between each list or grid row, to allow the spacing between rows to vary from row to row. The specified values override the itemSpacing field vector2d Y-value for each list or grid row corresponding to its position in the array, in top to bottom order. If the array contains fewer elements than the number of rows needed to display all the items in the list or grid, the itemSpacing field vector2d Y-value is used for any unspecified rows", + "name": "rowSpacings", + "type": "array of floats" }, { - "name": "sectionDividerSpacing", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "If the ContentNode node specifies sections for a list or grid, and the section dividers are specified to include an icon and/or a label, specifies the spacing between the icon, label, and section divider bitmap" + "default": "", + "description": "If the ContentNode node specifies sections for a list or grid, specifies a custom bitmap to use as a visual divider between the sections of the list or grid. Only set this field to use a bitmap with a different appearance than the system default. For sections that do not include an icon or a title, the system default or custom bitmap specified as the wrapDividerBitmapUri field value is used for the section dividers. In most cases, you will want to use a 9-patch PNG bitmap with both expandable regions, which is the type of bitmap used as the system default", + "name": "sectionDividerBitmapUri", + "type": "uri" }, { - "name": "sectionDividerWidth", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "If the ContentNode node specifies sections for a list or grid, specifies the width of the section divider bitmap" + "default": "system default", + "description": "If the ContentNode node specifies sections for a list or grid, specifies a custom font to use for the section title text. Only set this field to use a different font than the system default", + "name": "sectionDividerFont", + "type": "font" }, { - "name": "sectionDividerHeight", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "If the ContentNode node specifies sections for a list or grid, specifies the height of the section divider bitmap" - }, - { - "name": "sectionDividerMinWidth", - "type": "float", "default": "0.0", - "accessPermission": "READ\\_WRITE", - "description": "If the ContentNode node specifies sections for a list or grid, specifies the minimum width of the section divider bitmap" + "description": "If the ContentNode node specifies sections for a list or grid, specifies the height of the section divider bitmap", + "name": "sectionDividerHeight", + "type": "float" }, { - "name": "sectionDividerLeftOffset", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "If the ContentNode node specifies sections for a list or grid, specifies the left offset of the section divider from the list or grid" + "default": "0.0", + "description": "If the ContentNode node specifies sections for a list or grid, specifies the left offset of the section divider from the list or grid", + "name": "sectionDividerLeftOffset", + "type": "float" }, { - "name": "itemClippingRect", - "type": "rect2d", - "default": "\\[ 0.0, 0.0, 0.0, 0.0 \\]", "accessPermission": "READ\\_WRITE", - "description": "Specifies a clipping region for the list or grid items" - }, - { - "name": "itemSelected", - "type": "integer", - "default": "0", - "accessPermission": "READ\\_ONLY", - "description": "When a list or grid item is selected, set to the index of the selected item" + "default": "0.0", + "description": "If the ContentNode node specifies sections for a list or grid, specifies the minimum width of the section divider bitmap", + "name": "sectionDividerMinWidth", + "type": "float" }, { - "name": "itemFocused", - "type": "integer", - "default": "0", - "accessPermission": "READ\\_ONLY", - "description": "When focus moves to a list or grid item, set to the index of the focused item" + "accessPermission": "READ\\_WRITE", + "default": "0.0", + "description": "If the ContentNode node specifies sections for a list or grid, and the section dividers are specified to include an icon and/or a label, specifies the spacing between the icon, label, and section divider bitmap", + "name": "sectionDividerSpacing", + "type": "float" }, { - "name": "itemUnfocused", - "type": "integer", - "default": "0", - "accessPermission": "READ\\_ONLY", - "description": "When focus moves away from a list or grid item, set to the index of the unfocused item" + "accessPermission": "READ\\_WRITE", + "default": "system default", + "description": "If the ContentNode node specifies sections for a list or grid, specifies a custom color to use for the section title text. Only set this field to use a different text color than the system default", + "name": "sectionDividerTextColor", + "type": "color" }, { - "name": "jumpToItem", - "type": "integer", - "default": "0", - "accessPermission": "WRITE\\_ONLY", - "description": "When set to a valid item index, causes the list or grid to immediately update so that the item at the specified index moves into focus, or focus moves to the item" + "accessPermission": "READ\\_WRITE", + "default": "0.0", + "description": "If the ContentNode node specifies sections for a list or grid, specifies the width of the section divider bitmap", + "name": "sectionDividerWidth", + "type": "float" }, { - "name": "animateToItem", - "type": "integer", - "default": "0", - "accessPermission": "WRITE\\_ONLY", - "description": "When set to a valid item index, causes the list or grid to quickly scroll so that the item at the specified index moves into focus, or focus moves to the item" + "accessPermission": "READ\\_WRITE", + "default": "floatingFocus", + "description": "Specifies the how the focus indicator moves in a list or a column of grid items in response to the remote direction pad Up and Down key presses. The possible values are:\n\n| Option | Effect |\n| --- | --- |\n| floatingFocus | Causes the focus indicator to float up or down until it reaches the end of the list or grid column, at which point the focus indicator will stay fixed on the first or last item in the list or grid column, and the items will scroll up or down if there are items that were not visible. Note that when this style is set, section dividers are not rendered. |\n| fixedFocusWrap | Causes the column to wrap around when the focus indicator reaches the first or last item in the list or grid column, as long as the list or grid column contains enough items to fill the list or grid column. If the list or grid column does not contain enough items to fill the list or grid column, the focus indicator will float up and down. |\n| fixedFocus | Causes the focus to stay fixed on the upper leftmost item. As the user scrolls down, the row containing the previously selected item scrolls up off screen. Scrolling continues until the last row is reached. |", + "name": "vertFocusAnimationStyle", + "type": "option string" }, { - "name": "currFocusRow", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Gives access to which row of a grid is in the focus position as the items scrolling around. So, currFocusRow = 3.7 would mean that item 3 occupies 30% of the focus position while item 4 occupies 70% of the focus position. To maximize performance, the field should be kept to a minimum, as these scripts will run once during each render" + "default": "", + "description": "If the vertFocusAnimationStyle field value is set to fixedFocusWrap, specifies a custom bitmap to use as a visual divider between the last and first list or grid items, when the list or grid wraps. Only set this field to use a bitmap with a different appearance than the system default. In most cases, you will want to use a 9-patch PNG bitmap with both expandable regions, which is the type of bitmap used as the system default", + "name": "wrapDividerBitmapUri", + "type": "uri" }, { - "name": "currFocusColumn", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Gives access to which column of a grid is in the focus position as the items scrolling around. So, currFocusColumn = 3.7 would mean that item 3 occupies 30% of the focus position while item 4 occupies 70% of the focus position. To maximize performance, the field should be kept to a minimum, as these scripts will run once during each render" + "default": "36", + "description": "If the vertFocusAnimationStyle field value is set to fixedFocusWrap, specifies the height of a bitmap used as a visual divider between the last and first list or grid items, when the list or grid wraps. Only set this field to use a value with a different appearance than the system default", + "name": "wrapDividerHeight", + "type": "float" }, { - "name": "currFocusSection", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Gives access to which section of a grid is in the focus position as the items scrolling around. So, currFocusSection = 3.7 would mean that item 3 occupies 30% of the focus position while item 4 occupies 70% of the focus position. To maximize performance, the field should be kept to a minimum, as these scripts will run once during each render" + "default": "0", + "description": "Additionally, the focus behavior has been modified for situations where all the items in a RowList row are visible on screen at once. In the past, the focus would step once, then begin to scroll smoothly. Now, the focus steps one-by-one through each item.If the vertFocusAnimationStyle field value is set to fixedFocusWrap, specifies the width of a bitmap used as a visual divider between the last and first list or grid items when the list or grid wraps. Only set this field to use a value with a different appearance than the system default", + "name": "wrapDividerWidth", + "type": "float" } ], - "events": [], - "interfaces": [] + "interfaces": [], + "name": "ArrayGrid", + "url": "https://developer.roku.com/docs/references/scenegraph/abstract-nodes/arraygrid.md" }, - "label": { - "name": "Label", - "url": "https://developer.roku.com/docs/references/scenegraph/renderable-nodes/label.md", + "audio": { + "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\n\nThe Audio node class plays streaming audio.\n\nThe Audio node class has no built-in visual UI, but you can build your own UI for the node, including trick play, or showing an album cover or similar graphical image for each song selected by a user.", + "events": [], "extends": { - "name": "Group", - "url": "https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md" + "name": "Node", + "url": "https://developer.roku.com/docs/references/scenegraph/node.md" }, - "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\n\nThe Label node class is used to display a string of text. The Label node class supports many options including:\n\n* Specifying the color of the font\n* Specifying the font to be used by specifying a TrueType/OpenType font file\n* Single line and multi-line text\n* Horizontal and vertical alignment\n* Justification\n* Automatic ellipsizing of the text based on the specified width and number of lines", "fields": [ { - "name": "text", - "type": "string", + "accessPermission": "READ\\_ONLY", "default": "", - "accessPermission": "READ\\_WRITE", - "description": "Specifies the text to be displayed" + "description": "Contains the format of the currently playing audio.\n\n| Value | Meaning |\n| --- | --- |\n| \"\" | No stream playing |\n| aac | ISO/IEC 14496-3, Advanced Audio Coding |\n| aac\\_adif | ISO/IEC 14496-3, Advanced Audio Coding, ADIF container |\n| aac\\_adts | ISO/IEC 14496-3, Advanced Audio Coding, ADTS container |\n| aac\\_latm | ISO/IEC 14496-3, Advanced Audio Coding, LATM container |\n| ac3 | Dolby Digital |\n| alac | Apple Lossless |\n| dts | DTS Coherent Acoustics |\n| eac3 | Dolby Digital Plus |\n| flac | Free Lossless Audio Codec |\n| mp2 | ISO/IEC 11172-3, MPEG Audio Layer II |\n| mp3 | ISO/IEC 11172-3, MPEG Audio Layer III |\n| none | Stream contains no playable audio |\n| pcm | linear PCM |\n| unknown | Stream contains unknown audio |\n| vorbis | Ogg Vorbis |\n| wma | Microsoft Windows Media Audio |\n| wmapro | Microsoft Windows Media Pro Audio |", + "name": "audioFormat", + "type": "string" }, { - "name": "color", - "type": "color", - "default": "0xddddddff", - "accessPermission": "READ\\_WRITE", - "description": "Specifies the text color" + "accessPermission": "READ\\_ONLY", + "default": "invalid", + "description": "Contains information about stream buffering progress and status. This field is valid only while buffering is in progress, both at stream startup or when re-buffering is required. Observers will be notified when any element of the array changes, and also when buffering is complete and the field itself becomes invalid. The array contains the following name - value pairs.\n\n| Value | Meaning |\n| --- | --- |\n| percentage | Percent buffering complete as an integer. |\n| isUnderrun | Boolean value indicating if a stream underrun occurred. |", + "name": "bufferingStatus", + "type": "associative array" }, { - "name": "font", - "type": "Font", - "default": "system default", "accessPermission": "READ\\_WRITE", - "description": "Specifies the Font node to be used" + "default": "NULL", + "description": "The ContentNode node with the \\[Content Meta-Data\\](/docs/developer-program/getting-started/architecture/content-metadata.md) for the audio or audio playlist (a sequence of audios) to be played. If a audio playlist is to be played, the ContentNode node must include complete child ContentNode nodes for each audio in the playlist, with all attributes required to play that audio.", + "name": "content", + "type": "ContentNode" }, { - "name": "horizAlign", - "type": "string", - "default": "left", - "accessPermission": "READ\\_WRITE", - "description": "See \\[Horizontal Alignment\\](https://developer.roku.com/docs/references/scenegraph/typographic-nodes/scrollinglabel.mdalignment \"Vertical Alignment\")" + "accessPermission": "READ\\_ONLY", + "default": "\\-1", + "description": "The index of the audio in the audio playlist that is currently playing. Generally, you would only want to check this field if audio playlists are enabled (by setting the \\`contentIsPlaylist\\` field to true), but it is set to 0 when a single audio is playing and audio playlists are not enabled.", + "name": "contentIndex", + "type": "integer" }, { - "name": "vertAlign", - "type": "string", - "default": "top", "accessPermission": "READ\\_WRITE", - "description": "See \\[Vertical Alignment\\](https://developer.roku.com/docs/references/scenegraph/renderable-nodes/label.mdwrapping-text \"Wrapping\")" + "default": "false", + "description": "If set to true, enables audio playlists (a sequence of audios to be played). To enable audio playlists, the ContentNode node set in the \\`content\\` field must have children ContentNode nodes for each audio in the playlist. When audio playback is started, all of the audios in the playlist will be played in sequence.", + "name": "contentIsPlaylist", + "type": "Boolean" }, { - "name": "width", - "type": "float", - "default": "0", "accessPermission": "READ\\_WRITE", - "description": "Specifies the width of the label. If set to zero, the text is always displayed as a single line" + "default": "none", + "description": "Sets the desired play state for the audio, such as starting or stopping the audio play. Getting the value of this field returns the most recent value set, or \\`none\\` if no value has been set. In order to dynamically monitor the actual state of the audio, see the \\`state\\` field.\n\n| Option | Effect |\n| --- | --- |\n| none | No play state set |\n| play | Start audio play |\n| start | Start audio play |\n| stop | Stop audio play |\n| pause | Pause audio play |\n| resume | Resume audio play after a pause |\n| replay | Replay audio |\n| prebuffer | Starts buffering the audio stream before the Audio node actually begins playback. Only one audio stream can be buffering in the application at any time. Setting the `control` field to `prebuffer` for another audio stream after setting `prebuffer` for a previous audio stream stops the buffering of the previous audio stream. |\n| skipcontent | Skip the currently-playing content, and begin playing the next content in the playlist. If the content is not a playlist, or if the current content is the end of the playlist, this will end playback. |", + "name": "control", + "type": "option string" }, { - "name": "height", - "type": "float", + "accessPermission": "READ\\_ONLY", "default": "0", - "accessPermission": "READ\\_WRITE", - "description": "Specifies the height of the label. If set to zero, the actual height is determined by the value of the numLines field if it is greater than zero. See \\[Vertical Alignment\\](https://developer.roku.com/docs/references/scenegraph/typographic-nodes/scrollinglabel.mdalignment \"Vertical Alignment\") and \\[Wrapping\\](https://developer.roku.com/docs/references/scenegraph/renderable-nodes/label.mdwrapping-text \"Wrapping\") for more details" + "description": "The duration of the audio being played, specified in seconds. This becomes valid when playback begins and may change if the audio is dynamic content, such as a live event.", + "name": "duration", + "type": "time" }, { - "name": "numLines", - "type": "integer", + "accessPermission": "READ\\_ONLY", "default": "0", - "accessPermission": "READ\\_WRITE", - "description": "If the height field value is zero, provides an alternate way to specify the height of the bounding rectangle of the label. See \\[Vertical Alignment\\](https://developer.roku.com/docs/references/scenegraph/typographic-nodes/scrollinglabel.mdalignment \"Vertical Alignment\") and \\[Wrapping\\](https://developer.roku.com/docs/references/scenegraph/renderable-nodes/label.mdwrapping-text \"Wrapping\") for more details" + "description": "The error code associated with the audio play error set in the \\`state\\` field", + "name": "errorCode", + "type": "integer" }, { - "name": "maxLines", - "type": "integer", - "default": "0", - "accessPermission": "READ\\_WRITE", - "description": "If the height and numLines field values are both zero, specifies the maximum number of lines of text to be displayed. See \\[Vertical Alignment\\](https://developer.roku.com/docs/references/scenegraph/typographic-nodes/scrollinglabel.mdalignment \"Vertical Alignment\") and \\[Wrapping\\](https://developer.roku.com/docs/references/scenegraph/renderable-nodes/label.mdwrapping-text \"Wrapping\") for more details" + "accessPermission": "READ\\_ONLY", + "default": "", + "description": "An error message describing the audio play error set in the \\`state\\` field.", + "name": "errorMsg", + "type": "string" }, { - "name": "wrap", - "type": "boolean", - "default": "false", "accessPermission": "READ\\_WRITE", - "description": "See \\[Horizontal Alignment\\](https://developer.roku.com/docs/references/scenegraph/typographic-nodes/scrollinglabel.mdalignment \"Horizontal Alignment\")" + "default": "N/A", + "description": "When a node or one of its children gains or loses the keyboard focus, the focusedChild field will be set and call its observer functions. In the observer function, typically, you use \\[ifSGNodeFocus\\](https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodefocus.md functions to query whether this node or some other node has the key focus or is in the key focus chain. Accessing the value of the field will result in script errors.", + "name": "focusedChild", + "type": "N/A" }, { - "name": "lineSpacing", - "type": "float", - "default": "", "accessPermission": "READ\\_WRITE", - "description": "If the text is displayed on more than one line, specifies the amount of additional space added between lines" + "default": "false", + "description": "If set to true, the audio or audio playlist (if the \\`contentIsPlaylist\\` field is set to true to enable audio playlists) will be restarted from the beginning after the end is reached.", + "name": "loop", + "type": "Boolean" }, { - "name": "displayPartialLines", - "type": "Boolean", - "default": "false", "accessPermission": "READ\\_WRITE", - "description": "If the height field value is greater than zero, used to determine whether or not the last line of visible text is displayed if it would be clipped vertically" + "default": "\\-1", + "description": "If the \\`contentIsPlaylist\\` field is set to true to enable audio playlists, sets the index of the next audio in the playlist to be played. Setting this field does not immediately change the audio being played, but takes effect when the current audio is completed or skipped. By default, this value is -1, which performs the default index increment operation. After the audio specified by the index in this field begins playing, the field is set to the default -1 again, so the next audio played will be set by the default index increment operation, unless the field is set again to a different index.", + "name": "nextContentIndex", + "type": "integer" }, { - "name": "ellipsizeOnBoundary", - "type": "Boolean", - "default": "false", "accessPermission": "READ\\_WRITE", - "description": "If the width field value is greater than zero, controls whether or not the last line of text displayed should be ellipsized if it extends beyonds the specified width. It is ignored if the truncateOnDelimiter field value is set to a non-empty string \\* When set to true, text will be ellipsized by whole words. Example: \"This is the last line of...\" \\* When set to false, text will be ellipsized by characters. Example: \"This is the last line of tex...\"" + "default": "0.5", + "description": "The interval between notifications to observers of the position field, specified as the number of seconds. If the value is 0, no notifications are delivered. This value may be read or modified at any time.", + "name": "notificationInterval", + "type": "time" }, { - "name": "truncateOnDelimiter", - "type": "string", - "default": "", - "accessPermission": "READ\\_WRITE", - "description": "If the width field value is greater than zero, provides a set of characters that are used to determine how to truncate the last line of text that is displayed if it extends beyond the specified width. If none of the characters in the last line of text are included in the truncateOnDelimiter field value string, the entire last line is not displayed. When the value is set to a non-empty string, the ellipsizeOnBoundary field value is ignored" + "accessPermission": "READ\\_ONLY", + "default": "invalid", + "description": "The current position in the audio play, as the number of seconds.", + "name": "position", + "type": "time" }, { - "name": "wordBreakChars", - "type": "string", - "default": "", - "accessPermission": "READ\\_WRITE", - "description": "By default, space and hyphen characters are used to determine where lines can be divided. In addition, this field can specify additional characters to be used to determine where the text can be broken into lines" + "accessPermission": "WRITE\\_ONLY", + "default": "invalid", + "description": "Sets the current position in the audio. The value is the number seconds from the beginning of the stream, specified as a double.", + "name": "seek", + "type": "time" }, { - "name": "ellipsisText", - "type": "string", - "default": "", - "accessPermission": "READ\\_WRITE", - "description": "By default, three dots (...) are used to ellipsize the last line of text that extends beyond the bounding rectangle. This field specifies alternate characters to be displayed when the last line of text is ellipsized" + "accessPermission": "READ\\_ONLY", + "default": "none", + "description": "Describes the current audio play state, such as if the audio play has been paused.\n\n| Value | Meaning |\n| --- | --- |\n| none | No current play state |\n| buffering | Audio stream is currently buffering |\n| playing | Audio is currently playing |\n| paused | Audio is currently paused |\n| stopped | Audio is currently stopped |\n| finished | Audio has completed play |\n| error | An error has occurred in the audio play. The error code and error message can be found in the `errorCode` and `errorMsg` fields respectively. |", + "name": "state", + "type": "value string" + }, + { + "accessPermission": "READ\\_ONLY", + "default": "{ }", + "description": "Information about the audio segment that is currently streaming. This is only meaningful for segmented audio transports, such as DASH and HLS. The associative array has the following entries:\n\n| Key | Type | Value |\n| --- | --- | --- |\n| segBitrateBps | integer | Bitrate of the segment in bits per second |\n| segSequence | integer | The sequence number of the segment in the audio |\n| segStartTime | time | The start time of the segment from the start of the audio, specified in seconds |\n| segUrl | string | URL of the segment |", + "name": "streamingSegment", + "type": "associative array" }, { - "name": "isTextEllipsized", - "type": "Boolean", - "default": "false", "accessPermission": "READ\\_ONLY", - "description": "Indicates whether the last line of text has been ellipsized" + "default": "{ }", + "description": "The most recent timed meta data that has been decoded from the audio stream. Only meta data with a key that matches an entry in timedMetaDataSelectionKeys will be set into this field. The value of this field is an associative array which contains arbitrary keys and values, as found in the audio stream.", + "name": "timedMetaData", + "type": "associative array" + }, + { + "accessPermission": "READ\\_WRITE", + "default": "\\[ \\]", + "description": "If the audio stream contains timed meta data such as ID3 tags, any meta data with a key matching an entry in this array will be set into the timedMetaData field. If any entry in this array is \"\\\\\\*\", then all timed meta data will be selected.", + "name": "timedMetaDataSelectionKeys", + "type": "array of strings" } ], - "events": [], - "interfaces": [] + "interfaces": [], + "name": "Audio", + "url": "https://developer.roku.com/docs/references/scenegraph/media-playback-nodes/audio.md" }, - "poster": { - "name": "Poster", - "url": "https://developer.roku.com/docs/references/scenegraph/renderable-nodes/poster.md", + "busyspinner": { + "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\n\nThe BusySpinner node class is a simple widget that displays a continuously rotating bitmap. Since the BusySpinner node class uses an internal Poster node instance, the busy spinner bitmap can be specified by setting the internal Poster node uri field.\n\n[SimpleBusySpinner.zip](https://github.com/rokudev/samples/tree/master/ux%20components/widgets) is a sample channel that demonstrates usage of the BusySpinner.\n\n> Not all Roku Player hardware versions support arbitrary rotations. In particular, some hardware versions only support 90 degree rotation increments. In those cases, the icon will step through 90 degree, 180 degree, 270 degree and back to 0 degree rotations, rather than spin smoothly.", + "events": [], "extends": { "name": "Group", "url": "https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md" }, - "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\n\nThe Poster node class draws an image with the top/left corner located at the origin of the node local coordinate system. Because the Poster node class extends the Group node class, a Poster node can have child nodes. For example, a Poster node might have a Label node as a child that draws an annotation on top of the poster.\n\nThe Poster node class supports JPEG, PNG and (since Roku OS 9.4) [WebP](https://developers.google.com/speed/webp/) image files. Please observe [Special WebP considerations](/docs/specs/media/streaming-specifications.md#special-webp-considerations) when using the latter.\n\nThe Poster node class includes the capability to automatically scale graphical images to different sizes as they are loaded, by setting the loadWidth and loadHeight field values. After the graphical images are loaded, the images can be scaled to fit within the target screen element area specified by the width and height field values. To use this capability, select the scaling option you want as the value of the loadDisplayMode field.\n\nSee SceneGraph's [Texture Memory](/docs/developer-program/performance-guide/memory-management.md#texture-memory \"Texture Memory\") feature for more information.\n\n> In order for the load scaling options to work, the option fields must be set in XML markup before the uri field", "fields": [ { - "name": "uri", - "type": "string", - "default": "", "accessPermission": "READ\\_WRITE", - "description": "Specifies the URI of the image file. Images included as part of the application package can be referenced using the pkg:/images prefix. Images included as part of the application package that are to be localized can be referenced using the pkg:/locale/images/ prefix (see \\[Localizing Graphical Images in the Application Package\\](/docs/developer-program/core-concepts/localization.md#localizing-graphical-images-in-the-application-package \"Localizing Graphical Images in the Application Package\"))" + "default": "true", + "description": "Specifies whether the bitmap rotates in a clockwise or counterclockwise direction", + "name": "clockwise", + "type": "Boolean" }, { - "name": "width", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Specifies the width of the image in local coordinates. If set to 0.0, the width of the bitmap from the image file is used. If set to a value greater than 0.0, the bitmap is scaled to that width" + "default": "none", + "description": "Sets the operational state of the busy spinner\n\n| Option | Effect |\n| --- | --- |\n| none | No operational state set. The busy spinner will run if not set to `\"stop\"`. |\n| start | Starts the busy spinner if not running |\n| stop | Stops the busy spinner if running |", + "name": "control", + "type": "option string" }, { - "name": "height", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Specifies the height of the image in local coordinates. If set to 0.0, the height of the bitmap from the image file is used. If set to a value greater than 0.0, the bitmap is scaled to that height" + "default": "internal instance default", + "description": "Set the uri field of the Poster node to select the bitmap for the busy spinner", + "name": "poster", + "type": "Poster node" }, { - "name": "loadSync", - "type": "Boolean", - "default": "false", "accessPermission": "READ\\_WRITE", - "description": "Controls whether the image is loaded synchronously in the render thread, and appears immediately, or loaded asynchronously in a background thread, and may not appear immediately. If set to true, and the uri field specifies a local file (in the pkg:/images directory), the image is loaded synchronously, and appears immediately. If set to false, or if the uri field specifies a file from a remote server (a URL starting with http: or https:), the image is loaded asynchronously in a background thread, and may not appear immediately. Be careful when setting this field to true, as it might cause brief glitches in the rendering while the image is being fetched and loaded" + "default": "1", + "description": "The number of seconds to complete a 360-degree rotation of the spinner image. A value of 0 will cause the spinner to remain stationary and not spin", + "name": "spinInterval", + "type": "time" + } + ], + "interfaces": [], + "name": "BusySpinner", + "url": "https://developer.roku.com/docs/references/scenegraph/widget-nodes/busyspinner.md" + }, + "button": { + "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\nThe Button node is a simple widget that generates a buttonSelected event when the user selects it. The button can display a label and/or an icon, as well as a background image. Fields are provided to customize the label text and color depending on whether or not the button has the key focus. Similarly, the bitmaps used for the icon and background can be specified for both focused and unfocused button states.\n\nBy default, the background of the button is only shown when the button has the key focus. Buttons are typically used in a ButtonGroup node that manages which button in the group will have the key focus when the ButtonGroup node receives the focus. When the ButtonGroup node has the focus, the button in the group that has the focus will display the focusBitmapUri bitmap as its background. When the ButtonGroup node does not have the focus, it remembers which button in the group had the focus and sets that button showFocusFootprint field to true, causing it to a render a \"footprint\" bitmap as a visual indicator that it will be the focused button when the ButtonGroup node receives the focus again. All other buttons in the ButtonGroup node do not display a background image.\n\nWhen a Button node is created that is not a child of a ButtonGroup node, typically the showFootprintfield field should be set to true, so that the button always displays a background image.", + "events": [], + "extends": { + "name": "Group", + "url": "https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md" + }, + "fields": [ + { + "accessPermission": "READ\\_ONLY", + "default": "N/A", + "description": "The buttonSelected field is set whenever the button is selected. The field should be used to call observer callback functions when the button is selected", + "name": "buttonSelected", + "type": "Event" }, { - "name": "loadWidth", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Scale the graphical image to the specified width when loaded, preserving aspect ratio. If set to the default, no load-time scaling occurs. If the width field is not set, the loadWidth field is used as the default width of the displayed image" + "default": "\"\"", + "description": "Specifies the button background bitmap file to display when the button has the key focus. Only set this field to specify a custom bitmap that differs in appearance from the default bitmap", + "name": "focusBitmapUri", + "type": "uri" }, { - "name": "loadHeight", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Scale the graphical image to the specified height when loaded, preserving aspect ratio. If set to the default, no load-time scaling occurs. If the height field is not set, the loadHeight field is used as the default height of the displayed image" + "default": "\"\"", + "description": "Specifies a bitmap file for the button icon when the button has the key focus. Only set this field to specify a custom bitmap that differs in appearance from the default bitmap. For a button with no icon, set this field to an empty string (iconUri=\"\")", + "name": "focusedIconUri", + "type": "uri" }, { - "name": "loadDisplayMode", - "type": "option string", - "default": "noScale", "accessPermission": "READ\\_WRITE", - "description": "Provides automatic scaling of graphical images after loading. If you intend to load very large graphical images, such as larger than the user interface resolution, you must set one of the scaling options other than noScale, otherwise the image may fail to load. The following are the possible field values:\n\n| Option | Effect |\n| --- | --- |\n| limitSize | Scale the image while loading it into texture memory so that the maximum width and height in either dimension does not exceed the specified loadWidth or loadHeight values. If the image is smaller in both dimensions than the specified values, the image is loaded at its regular size. Aspect ratio is preserved. |\n| noScale | The bitmap will be loaded at the image's original resolution. If the Poster's width and height differ from the bitmap's resolution, it will be scaled to fill the Poster's dimensions. Aspect ratio is not preserved. |\n| scaleToFit | Scale the image to fit into the target screen element area, preserving the aspect ratio but \"letterboxing\" or \"pillarboxing\" the image (background-color bars at the top/bottom or left/right of the image). |\n| scaleToFill | Stretch the image dimensions to fill the target screen element area, distorting the image if the target screen element area has a different aspect ratio than the image. |\n| scaleToZoom | Scale the image to fill the target screen element area, preserving the aspect ratio but not \"letterboxing\" or \"pillarboxing\" the image, with some of the image cropped out. |" + "default": "0x262626ff", + "description": "Specifies the color of the button label when the button has the key focus", + "name": "focusedTextColor", + "type": "color" }, { - "name": "loadStatus", - "type": "value string", - "default": "none", - "accessPermission": "READ\\_ONLY", - "description": "Can be used to track the progress of loading the graphical image file. A typical use of this field is to set an observer so that when the field value changes to ready, an action can be triggered. The possible values are:\n\n| Value | Meaning |\n| --- | --- |\n| none | No loading or decoding of the graphical image file is taking place |\n| loading | Graphical image file is being fetched and decoded |\n| ready | Graphical image file has been fetched and decoded and is ready to be drawn |\n| failed | Graphical image file could not be loaded for some reason, such as the uri field value is set to a non-existent file location |" + "accessPermission": "READ\\_WRITE", + "default": "", + "description": "Specifies the font of the button label when the button has the key focus", + "name": "focusedTextFont", + "type": "Font" }, { - "name": "bitmapWidth", - "type": "float", - "default": "0.0", - "accessPermission": "READ\\_ONLY", - "description": "After the graphical image file is loaded, contains the width of the graphical image in pixels" + "accessPermission": "READ\\_WRITE", + "default": "\"\"", + "description": "Specifies the button focus \"footprint\" bitmap file to display when the button does not have key focus. Only set this field to specify a custom bitmap that differs in appearance from the default bitmap. By default the \"footprint\" bitmap is not displayed when the button does not have the key focus. To display the background when the button is unfocused, the showFocusFootprint field must be set to true", + "name": "focusFootprintBitmapUri", + "type": "uri" }, { - "name": "bitmapHeight", - "type": "float", - "default": "0.0", - "accessPermission": "READ\\_ONLY", - "description": "After the graphical image file is loaded, contains the height of the graphical image in pixels" + "accessPermission": "READ\\_WRITE", + "default": "64", + "description": "Specifies the height of the button", + "name": "height", + "type": "float" }, { - "name": "bitmapMargins", - "type": "associative array", - "default": "invalid", - "accessPermission": "READ\\_ONLY", - "description": "This field is set to an associative array with four elements \"left\", \"right\", \"top\" and \"bottom\". If the Poster's bitmap is a 9-patch image, the associative array is set to margin info encoded along the right and bottom edges of the image. If the Poster's bitmap is not a 9-patch image, all values in the associative array are set to 0. The bitmapMargins field is set whenever the Poster's loadStatus field changes (e.g. when the bitmap has been loaded)." + "accessPermission": "READ\\_WRITE", + "default": "\"\"", + "description": "Specifies a bitmap file for the button icon when the button does not have the key focus. Only set this field to specify a custom bitmap that differs in appearance from the default bitmap. For a button with no icon, set this field to an empty string (iconUri=\"\")", + "name": "iconUri", + "type": "uri" }, { - "name": "blendColor", - "type": "color", - "default": "0xFFFFFFFF", "accessPermission": "READ\\_WRITE", - "description": "Can be used to tint the image by multiplying the color of each pixel by the specified value. If this value is not set to a value other than the default value, no color blending will be performed" + "default": "32767", + "description": "Specifies the maximum width of the button. The maxWidth field must be greater than or equal to the minWidth field", + "name": "maxWidth", + "type": "float" }, { - "name": "loadingBitmapUri", - "type": "string", - "default": "", "accessPermission": "READ\\_WRITE", - "description": "Specifies a bitmap file to display while the poster image is loading. To execute a seamless cross-fade transition between posters, set the \\*\\*loadingBitmapUri\\*\\* of the next poster to be shown to the uri of the currently displayed poster." + "default": "0", + "description": "Specifies the minimum width of the button. The minWidth field must be less than or equal to the maxWidth field", + "name": "minWidth", + "type": "float" }, { - "name": "loadingBitmapOpacity", - "type": "float", - "default": "1.0", "accessPermission": "READ\\_WRITE", - "description": "Used to control the rendering opacity of the graphical image that indicates a bitmap is loading. This value multiplies the Poster node opacity" + "default": "false", + "description": "Controls whether the focus \"footprint\" bitmap is displayed when the button does not have the key focus. Since the default value of the showFocusFootprint field is false, the \"footprint\" bitmap is not displayed by default", + "name": "showFocusFootprint", + "type": "Boolean" }, { - "name": "failedBitmapUri", - "type": "string", - "default": "", "accessPermission": "READ\\_WRITE", - "description": "Specifies a bitmap file to display when the poster image failed to load" + "default": "\"\"", + "description": "Specifies the text to be displayed as the button label", + "name": "text", + "type": "string" }, { - "name": "failedBitmapOpacity", - "type": "float", - "default": "1.0", "accessPermission": "READ\\_WRITE", - "description": "Used to control the rendering opacity of the graphical image that indicates a bitmap failed to load. This value multiplies the Poster node opacity" + "default": "0xddddddff", + "description": "Specifies the color of the button label when the button does not have the key focus", + "name": "textColor", + "type": "color" }, { - "name": "audioGuideText", - "type": "string", - "default": "", "accessPermission": "READ\\_WRITE", - "description": "If muteAudioGuide is false, this string will be spoken when the poster is focused" + "default": "", + "description": "Specifies the font of the button label when the button does not have the key focus", + "name": "textFont", + "type": "Font" } ], - "events": [], - "interfaces": [] + "interfaces": [], + "name": "Button", + "url": "https://developer.roku.com/docs/references/scenegraph/widget-nodes/button.md" }, - "rectangle": { - "name": "Rectangle", - "url": "https://developer.roku.com/docs/references/scenegraph/renderable-nodes/rectangle.md", + "buttongroup": { + "description": "Extends [**LayoutGroup**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/layoutgroup.md\"**LayoutGroup**\")\n\nThe ButtonGroup node class manages the layout, visual attributes, and focus management of a vertical list of Button nodes. When the ButtonGroup node has focus, it sets the key focus on a single one of its child Button nodes.\n\n* The buttons can be easily created using default button appearances by setting the buttons field to an array of strings containing the labels for each button.\n* A single observer can watch for any of the Button nodes in the group to be selected by observing the buttonSelected field.\n* By default, Button nodes added to the group will have the default button appearance. Several fields exist that allow you to change an attribute of the appearance of all Button nodes in the group.", + "events": [], "extends": { - "name": "Group", - "url": "https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md" + "name": "LayoutGroup", + "url": "https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/layoutgroup.md" }, - "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\nThe Rectangle node class draws a solid color rectangle with the top/left corner of the rectangle drawn at the origin of the node local coordinate system. Because the Rectangle node class extends the Group node class, it can have child nodes. For example, a Rectangle node might have a child Label node, resulting in text being drawn inside of a box.", "fields": [ { - "name": "width", - "type": "float", - "default": "0.0", - "accessPermission": "READ\\_WRITE", - "description": "Specifies the width of the rectangle in local coordinates" + "accessPermission": "READ\\_ONLY", + "default": "0", + "description": "Set to the index of the focused button whenever a button in the group receives the key focus", + "name": "buttonFocused", + "type": "integer" }, { - "name": "height", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Specifies the height of rectangle in local coordinates" + "default": "0", + "description": "Specifies the height of each Button node in the group. Only set to override the system default", + "name": "buttonHeight", + "type": "float" }, { - "name": "color", - "type": "color (string containing hex value e.g. RGBA)", - "default": "0xFFFFFFFF", - "accessPermission": "READ\\_WRITE", - "description": "Specifies the color of the rectangle" + "accessPermission": "WRITE\\_ONLY", + "default": "\\[ \\]", + "description": "Allows a set of Button nodes to be easily created by providing an array of button labels. Each string in the array will result in a Button node to be added to the ButtonGroup node, using the string as the button label", + "name": "buttons", + "type": "array of strings" }, { - "name": "blendingEnabled", - "type": "boolean", - "default": "true", - "accessPermission": "READ\\_WRITE", - "description": "Specifies if the rectangle should be alpha blended with the nodes that are behind it" - } - ], - "events": [], - "interfaces": [] - }, - "simplelabel": { - "name": "SimpleLabel", - "url": "https://developer.roku.com/docs/references/scenegraph/renderable-nodes/simplelabel.md", - "extends": { - "name": "Group", - "url": "https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md" - }, - "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\nThe SimpleLabel node class is used to display a single line of text. SimpleLabel is a lightweight complement to the Label node. It supports simplified font style specification and is more memory efficient than the Label node.\n\nThe SimpleLabel node class supports:\n\n* Specifying either a built-in system font or a TrueType/OpenType font file\n* Specifying the color of the font\n* Customizable Horizontal and Vertical origin\n\nThe following shows a text layout derived from the SimpleLabel node:\n\n![simpleLabel node](https://image.roku.com/ZHZscHItMTc2/simplelabel.png \"simplelabel\")\n\nWith ui\\_resolutions=hd specified in the manifest, the following displays the text string \"Application Development Made Easy!\" using the medium bold system font, centered horizontally on display, and with the baseline of the text at the vertical center of the display.\n\n```\n\n\n\n\n\n\n\n\n\n\n\n```", - "fields": [ - { - "name": "scaleRotateCenter", - "type": "vector2d", - "default": "\\[0.0,0.0\\]", - "accessPermission": "READ\\_WRITE", - "description": "Describes the location of a point in the node local coordinate that serves as the center of the scale and rotation operations" + "accessPermission": "READ\\_ONLY", + "default": "0", + "description": "Set to the index of the selected button whenever the user selects a button in the group", + "name": "buttonSelected", + "type": "integer" }, { - "name": "visible", - "type": "Boolean", - "default": "true", "accessPermission": "READ\\_WRITE", - "description": "If true, the node and its children are rendered. If false, the node and its children do not render" + "default": "", + "description": "Specifies the bitmap to be used as the background for the Button node that has focus. Only set to override the system default", + "name": "focusBitmapUri", + "type": "uri" }, { - "name": "inheritParentOpacity", - "type": "Boolean", - "default": "true", - "accessPermission": "READ\\_WRITE", - "description": "If true, the node opacity is determined by multiplying opacity attribute of the node by the opacity of the parent node, which may have been determined by multiplying the opacity of its ancestor nodes. If false, the node opacity is determined by the opacity attribute set for the node or the default opacity attribute value" + "accessPermission": "WRITE\\_ONLY", + "default": "0", + "description": "Causes the button with the specified index to receive the focus when the ButtonGroup node has the key focus. Note that if the ButtonGroup node does not have the key focus when the focusButton field is set, the specified button will display the focus \"footprint\" as its background", + "name": "focusButton", + "type": "integer" }, { - "name": "rotation", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Defines the rotation angle about the scaleRotateCenter point (in radians) of the node local coordinate system. Positive values specify a counterclockwise rotation, negative values specify a clockwise rotation. For some Roku Player hardware, specifically Roku Players without OpenGL graphics support, only rotations of 0, 90, 180 and 270 degrees (in equivalent radians) are supported. (See \\[Roku Models and Features\\](/docs/specs/hardware.md#current-models \"Roku Models and Features\") for information on OpenGL support)" + "default": "", + "description": "Specifies the bitmap for the focused button icon. Only set to override the system default", + "name": "focusedIconUri", + "type": "uri" }, { - "name": "scale", - "type": "vector2d", - "default": "\\[1.0,1.0\\]", "accessPermission": "READ\\_WRITE", - "description": "Defines the scale factor to be applied to the node local coordinate" + "default": "0xffffffff", + "description": "Specifies the button label color for the Button node that has focus, if any. Only set to override the system default", + "name": "focusedTextColor", + "type": "color" }, { - "name": "renderTracking", - "type": "option as string", - "default": "disabled", "accessPermission": "READ\\_WRITE", - "description": "renderTracking is set to \"disabled\" when enableRenderTracking is set to false. The following options are only available when enableRenderTracking is set to true:\n\n| Option | Description |\n| --- | --- |\n| `\"none\"` | renderTracking is set to `\"none\"` if **one or more** of these conditions is true: the node's `visible` field is set to `false`the node's `opacity` field is set to `0.0`no `clippingRect` is specified and the node is completely offscreena `clippingRect` is specified and the node lies completely outside that `clippingRect's` coordinates or is completely offscreen |\n| `\"partial\"` | renderTracking is set to `\"partial\"` if **all** of the following conditions are true: the node's `visible` field is set to `true`the node's `opacity` field is greater than `0.0`no `clippingRect` is specified and the node is partially offscreena `clippingRect` is specified and the node lies partially inside the `clippingRect's` coordinates |\n| `\"full\"` | renderTracking is set to `\"full\"` if **all** of the following conditions are true: the node's `visible` field is set to `true`the node's `opacity` field is greater than `0.0`no `clippingRect` is specified and the node is completely onscreena `clippingRect` is specified and the node lies completely inside the `clippingRect's` coordinates |" + "default": "system: MediumBoldSystemFont", + "description": "Specifies the \\[Font\\](https://developer.roku.com/docs/references/scenegraph/typographic-nodes/font.md\"Font\") node for the Button node that has focus, if any. Only set to override the system default. See Font for a list of all system fonts available", + "name": "focusedTextFont", + "type": "Font" }, { - "name": "inheritParentTransform", - "type": "Boolean", - "default": "true", "accessPermission": "READ\\_WRITE", - "description": "If true, the node overall transformation is determined by combining the accumulated transformation matrix of all of its ancestors in the SceneGraph with the node local 2D transformation matrix described by its translation, rotation, scale and scaleRotateCenter fields. If false, the accumulated transformation of all of its ancestors in the SceneGraph is ignored and only the node local transformation matrix is used. This causes the node to be transformed relative to the root of the SceneGraph (that is, the Scene component)" + "default": "", + "description": "Specifies the bitmap to be used as the focus footprint background, when focus is not on the ButtonGroup node. The focus footprint is a visual indicator of the button that will take focus when focus moves back onto the ButtonGroup node. Only set to override the system default", + "name": "focusFootprintBitmapUri", + "type": "uri" }, { - "name": "renderPass", - "type": "integer", - "default": "0", "accessPermission": "READ\\_WRITE", - "description": "Used in combination with the numRenderPasses field of nodes extended from the \\[ArrayGrid\\](https://developer.roku.com/docs/references/scenegraph/abstract-nodes/arraygrid.md\"ArrayGrid\") abstract node class, to optimize rendering of lists and grids. This should never be set to a non-zero value unless you are optimizing the performance of a list or grid rendering by specifying the sequence of rendering operations for sub-elements of the list or grid items, and have set the numRenderPasses field value for the list or grid to a value greater than 1. If the numRenderPasses field value for the list or grid is set to a value greater than 1, you must set this field to a value greater than 0 for all sub-elements of the list or grid items, and not greater than the numRenderPasses field value. If the numRenderPasses field is set to a value greater than 1, and you set this field for a list or grid item sub-element to 0 (the default), or a value greater than the numRenderPasses field value, the list or grid item sub-element will not render" + "default": "", + "description": "Specifies the bitmap for the button icon for all unfocused Button nodes in the group. Only set to override the system default", + "name": "iconUri", + "type": "uri" }, { - "name": "childRenderOrder", - "type": "option as string", - "default": "renderLast", "accessPermission": "READ\\_WRITE", - "description": "| Option | Description |\n| --- | --- |\n| `\"renderFirst\"` | any drawing done by this node will be done **before** the node children are rendered |\n| `\"renderLast\"` | any drawing done by this node will be done **after** the node children are rendered |" + "default": "32767", + "description": "When set, specifies the maximum width for the Button nodes in the group. The maxWidth field must be greater than or equal to the minWidth field", + "name": "maxWidth", + "type": "float" }, { - "name": "clippingRect", - "type": "array of float", - "default": "\\[ 0.0, 0.0, 0.0, 0.0 \\]", "accessPermission": "READ\\_WRITE", - "description": "Specifies a rectangle in the node local coordinate system that is used to limit the region where this node and its children can render. If a non-empty rectangle is specified, then all drawing by this node and its children will be limited to that rectangular area. \\* \\`ClippingRects\\` can be specified by the node or by any of its ancestors in the SceneGraph. \\* \\`ClippingRects\\` are automatically set by some nodes such as lists and grids. \\* \\`ClippingRects\\` are always clipped to the screen boundaries, so if a \\`clippingRect\\` is specified that is partially or completely offscreen, it will be clipped to the screen boundaries. With respect to render tracking, although the node could be completely within the bounds of the specified \\`clippingRect\\`, it's \\`renderTracking\\` field could be set to \\`\"none\"\\` if the portion of the \\`clippingRect\\` it occupies is completely offscreen." + "default": "0", + "description": "Specifies the minimum width for the Button nodes in the group. The minWidth field must be less than or equal to the maxWidth field. Only set to override the system default", + "name": "minWidth", + "type": "float" }, { - "name": "enableRenderTracking", - "type": "Boolean", - "default": "false", "accessPermission": "READ\\_WRITE", - "description": "If true, renderTracking will be set to a string describing how much of the node is rendered on screen" + "default": "false", + "description": "Specifies whether the button labels and icons should be right- or left-justified. When right-justified and there is an icon, it appears to the right of the button label", + "name": "rightJustify", + "type": "Boolean" }, { - "name": "translation", - "type": "vector2d", - "default": "\\[0.0,0.0\\]", "accessPermission": "READ\\_WRITE", - "description": "Defines the origin of the node local coordinate system relative to its parent node" + "default": "0xffffffff", + "description": "Specifies the button label color for all unfocused Button nodes in the group. Only set to override the system default", + "name": "textColor", + "type": "color" }, { - "name": "opacity", - "type": "float", - "default": "1.0", "accessPermission": "READ\\_WRITE", - "description": "Sets the opacity of the node and its children. Opacity is the opposite of transparency. Opacity values range from 0.0 (fully transparent) to 1.0 (fully opaque). As the SceneGraph is traversed, the opacity values are combined by multiplying the current accumulated opacity with the node opacity, so that if the accumulated opacity of a node ancestors is 0.25 (75% transparent), the node will have opacity of 0.25 or less. This allows entire branches of the SceneGraph to fade in and out by animating the opacity of the node at the root of the branch" - }, + "default": "system: MediumSystemFont", + "description": "Specifies the \\[Font\\](https://developer.roku.com/docs/references/scenegraph/typographic-nodes/font.md\"Font\") node for all unfocused Button nodes in the group. Only set to override the system default. See Font for a list of all system fonts available", + "name": "textFont", + "type": "Font" + } + ], + "interfaces": [], + "name": "ButtonGroup", + "url": "https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/buttongroup.md" + }, + "channelstore": { + "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\n\nThe **ChannelStore** node class provides an interface to the Roku Channel Store. It provides functionality equivalent to the [roChannelStore](https://developer.roku.com/docs/references/brightscript/interfaces/ifchannelstore.md component. In general, the **ChannelStore** node class allows developers to issue one of several commands, which involves the following steps:\n\n1. Set the fields containing the data needed by the command (optional).\n2. Set up an observer of the result field associated with the command.\n3. Set the command field to the appropriate string to start the command execution.\n4. The field associated with the command is set to a **ContentNode** object containing the results of the command.\n\nEach of the commands starts a sequence of actions associated with the financial transaction that are handled by the Roku OS outside of control or monitoring by the channel SceneGraph markup. The SceneGraph markup merely initiates the purchase and receives a final result.", + "events": [], + "extends": { + "name": "Node", + "url": "https://developer.roku.com/docs/references/scenegraph/node.md" + }, + "fields": [ { - "name": "muteAudioGuide", - "type": "Boolean", - "default": "false", "accessPermission": "READ\\_WRITE", - "description": "Set to true to suppress the default CVAA text to speech. This allows channels to provide their own custom implementation" + "default": "", + "description": "Specifies the command to be executed: \\* \\[getUserData\\](#getuserdata) \\* \\[getUserRegionData\\](#getuserregiondata) (\\_Available since Roku OS 9.4\\_) \\* \\[getCatalog\\](#getcatalog) and \\[getStoreCatalog\\](#getstorecatalog) \\* \\[doOrder\\](#doorder) \\* \\[getPurchases\\](#getpurchases) and \\[getAllPurchases\\](#getallpurchases) (\\_Available since Roku OS 9.1\\_) \\* \\[storeChannelCredData\\](#storechannelcreddata) (\\_Available since Roku OS 9.1\\_) \\* \\[getChannelCred\\](#getchannelcred) (\\_Available since Roku OS 9.1\\_) \\* \\[requestPartnerOrder\\](#requestpartnerorder) \\* \\[confirmPartnerOrder\\](#confirmpartnerorder)", + "name": "command", + "type": "string" } ], - "events": [], - "interfaces": [] + "interfaces": [], + "name": "ChannelStore", + "url": "https://developer.roku.com/docs/references/scenegraph/control-nodes/channelstore.md" }, - "animation": { - "name": "Animation", - "url": "https://developer.roku.com/docs/references/scenegraph/animation-nodes/animation.md", + "checklist": { + "description": "Extends [**LabelList**](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/labellist.md\n\nThe CheckList node class is a simple list class that displays a list of items, some of which include checkboxes that allow the user to select or unselect that item. Each item in the list displays a text string and an optional checkbox icon positioned to the left of the text string.\n\nIf the checkbox is displayed, it is shown as either:\n\n* an empty box,\n* or a box with a checkmark indicator inside indicating whether the item is in the checked or unchecked state.", + "events": [], "extends": { - "name": "AnimationBase", - "url": "https://developer.roku.com/docs/references/scenegraph/abstract-nodes/animationbase.md" + "name": "LabelList", + "url": "https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/labellist.md" }, - "description": "Extends [**AnimationBase**](https://developer.roku.com/docs/references/scenegraph/abstract-nodes/animationbase.md\n\nThe Animation node class provides animations of renderable nodes, by applying interpolator functions to the values in specified renderable node fields. For an animation to take effect, an Animation node definition must include a child field interpolator node ([FloatFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/floatfieldinterpolator.md\"FloatFieldInterpolator\"), [Vector2DFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/vector2dfieldinterpolator.md\"Vector2DFieldInterpolator\"), [ColorFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/colorfieldinterpolator.md\"ColorFieldInterpolator\")) definition for each renderable node field that is animated.\n\nThe Animation node class provides a simple linear interpolator function, where the animation takes place smoothly and simply from beginning to end. The Animation node class also provides several more complex interpolator functions to allow custom animation effects. For example, you can move a graphic image around the screen at differing speeds and curved trajectories at different times in the animation by specifying the appropriate function in the easeFunction field (quadratic and exponential are two examples of functions that can be specified). The interpolator functions are divided into two parts: the beginning of the animation (ease-in), and the end of the animation (ease-out). You can apply a specified interpolator function to either or both ease-in and ease-out, or specify no function for either or both (which is the linear function). You can also change the portion of the animation that is ease-in and ease-out to arbitrary fractional values for a quadratic interpolator function applied to both ease-in and ease-out.", "fields": [ { - "name": "duration", - "type": "Time", - "default": "0", "accessPermission": "READ\\_WRITE", - "description": "Sets the duration of the animation in seconds" + "default": "", + "description": "Specifies the checkbox icon to use for list items that are in the checked state when that list item does not the key focus. Typically, the icon will include the outline of a box with a checkmark indicator inside. Only set this field to specify a custom bitmap that differs in appearance from the default bitmap.", + "name": "checkedIconUri", + "type": "uri" }, { - "name": "easeFunction", - "type": "string", - "default": "\"outCubic\"", "accessPermission": "READ\\_WRITE", - "description": "Specifies the interpolator function to be used for the animation:\n\n| Value | Ease-In/Ease-Out Function |\n| --- | --- |\n| linear | No ease-in or ease-out |\n| inQuad | Quadratic ease-in function, no ease-out |\n| inCubic | Cubic ease-in function, no ease-out |\n| inQuartic | Quartic ease-in function, no ease-out |\n| inQuintic | Quintic ease-in function, no ease-out |\n| inExpo | Exponential ease-in function, no ease-out |\n| outQuad | Quadratic ease-out function, no ease-in |\n| outCubic | Cubic ease-out function, no ease-in |\n| outQuartic | Quartic ease-out function, no ease-in |\n| outQuintic | Quintic ease-out function, no ease-in |\n| outExpo | Exponential ease-out function, no ease-in |\n| inOutQuad | Quadratic ease-in and ease-out function |\n| inOutCubic | Cubic ease-in and ease-out function |\n| inOutQuartic | Quartic ease-in and ease-out function |\n| inOutQuintic | Quintic ease-in and ease-out function |\n| inOutExpo | Exponential ease-in and ease-out function |\n| piecewise | Quadratic ease-in and ease-out function with extra control over the percentage of the duration during which ease-in and ease-out occurs. The extra control is specified using the `easeInPercent` and `easeOutPercent` fields. |" + "default": "all false", + "description": "Specifies the checked state of each item in the list. A value of true indicates the item is in the checked state. A value of false indicates that the item is in the unchecked state. When reading the value of the field, note that the field array will always include one value for each item in the list. When writing the value of the field, if the specified array includes fewer values than items in the list, the list items that are unspecified will remain in their current state. For example, if there are 10 items in the list and the field value is set to \\\\\\[ \\`true\\`, \\`true\\` \\\\\\], items 0 and 1 will have their checked state set to true, and the checked state of the remaining items (items 3 to 9) will be unchanged.", + "name": "checkedState", + "type": "array of Boolean" }, { - "name": "easeInPercent", - "type": "float", - "default": "0.5", "accessPermission": "READ\\_WRITE", - "description": "If easeFunction is set to piecewise, easeInPercent sets the percentage of the animation duration during which ease-in is applied. Note that the values of easeInPercent plus easeOutPercent must be less than or equal to 1. For all other values of easeFunction, easeInPercent is ignored" + "default": "true", + "description": "Controls whether or not pressing the remote control OK key causes the checkedState field to automatically toggle the checked state of the currently focused list item. By default, field value is set to true, but there are use cases where other behavior may be desired. In those cases, it is up to the developer to manage the checked state of the list items by setting the \\`checkedState\\` field to the desired index.", + "name": "checkOnSelect", + "type": "Boolean" }, { - "name": "easeOutPercent", - "type": "float", - "default": "0.5", "accessPermission": "READ\\_WRITE", - "description": "If easeFunction is set to piecewise, easeOutPercent sets the percentage of the animation duration during which ease-out is applied. Note that the values of easeInPercent plus easeOutPercent must be less than or equal to 1. For all other values of easeFunction, easeOutPercent is ignored" + "default": "", + "description": "Specifies the checkbox icon to use for list items that are in the checked state when that list item has the key focus. Typically, the icon will include the outline of a box with a checkmark indicator inside. Only set this field to specify a custom bitmap that differs in appearance from the default bitmap.", + "name": "focusedCheckedIconUri", + "type": "uri" }, { - "name": "optional", - "type": "boolean", - "default": "false", "accessPermission": "READ\\_WRITE", - "description": "Set to true to skip animations on lower performing Roku devices (Paolo, Giga, Jackson, Tyler, and Sugarland). See \\[Roku Devices\\](/docs/specs/hardware.md#current-models \"Roku Devices\") for model numbers and code names. When an Animation has optional set to true, setting the control field to start will cause the state field to change to running and immediately change again to finished. These state changes allow any logic tied to state field observers that run at the start and end of the Animation to be properly called" + "default": "", + "description": "Specifies the checkbox icon to use for list items that are in the unchecked state when that list item has the key focus. Typically, the icon will include the outline of an empty box. Only set this field to specify a custom bitmap that differs in appearance from the default bitmap.", + "name": "focusedUncheckedIconUri", + "type": "uri" }, { - "name": "willBeSkipped (_Available since Roku OS 10.0_)", - "type": "boolean", - "default": "false", - "accessPermission": "READ\\_ONLY", - "description": "Indicates whether the animation runs or jumps to the end (effectively skipping the animation and rendering it in its final state)." + "accessPermission": "READ\\_WRITE", + "default": "", + "description": "Specifies the checkbox icon to use for list items that are in the unchecked state when that list item does not have the key focus. Typically, the icon will include the outline of an empty box. Only set this field to specify a custom bitmap that differs in appearance from the default bitmap.", + "name": "uncheckedIconUri", + "type": "uri" } ], - "events": [], - "interfaces": [] - }, - "sequentialanimation": { - "name": "SequentialAnimation", - "url": "https://developer.roku.com/docs/references/scenegraph/animation-nodes/sequentialanimation.md", - "extends": { - "name": "AnimationBase", - "url": "https://developer.roku.com/docs/references/scenegraph/abstract-nodes/animationbase.md" - }, - "description": "Extends [**AnimationBase**](https://developer.roku.com/docs/references/scenegraph/abstract-nodes/animationbase.md\n\nThe SequentialAnimation node class allows you to specify that a set of animations should occur sequentially. The children of the SequentialAnimation node specify the set of animations to be executed. Note that the use of the delay field in the child animations allows a delay between any two animations to be specified, if desired.\n\nThe state field is set to running when any of the child animations is in progress. Once all the animations have run to completion, the state field is set to stopped.", - "fields": [], - "events": [], - "interfaces": [] - }, - "parallelanimation": { - "name": "ParallelAnimation", - "url": "https://developer.roku.com/docs/references/scenegraph/animation-nodes/parallelanimation.md", - "extends": { - "name": "AnimationBase", - "url": "https://developer.roku.com/docs/references/scenegraph/abstract-nodes/animationbase.md" - }, - "description": "Extends [**AnimationBase**](https://developer.roku.com/docs/references/scenegraph/abstract-nodes/animationbase.md\n\nThe ParallelAnimation node class allows you to specify that a set of animations should occur simultaneously. The children of a ParallelAnimation node specify the set of animations to be executed. Note that the use of the delay field in the child animations allows the start of the child animations to be offset from one another, if desired.\n\nThe state field is set to running when any of the child animations is in progress. Once all the animations have run to completion, the state field is set to stopped.", - "fields": [], - "events": [], - "interfaces": [] + "interfaces": [], + "name": "CheckList", + "url": "https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/checklist.md" }, "colorfieldinterpolator": { - "name": "ColorFieldInterpolator", - "url": "https://developer.roku.com/docs/references/scenegraph/animation-nodes/colorfieldinterpolator.md", + "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\n\nThe ColorFieldInterpolator node class specifies a keyframe animation sequence to be applied to the color field of a node (such as the color field of a Label node).\n\nAll field interpolators include a set of key/keyValue field pairs that define a keyframe of the animation. Field interpolators are generally used as children of an Animation node. As the animation progresses, it sets the fraction field of its field interpolators to a value between 0 and 1, indicating the fraction of the animation progress. The keyframe fields of the interpolator are key, the percentage where the keyframe should occur, and keyValue, the value that the field should have at that fraction of the animation.\n\nFor example, if a ColorFieldInterpolator node had three keyframes:\n\n* 0.0, 0xFF0000FF (red)\n* 0.4, 0x00FF00FF (green)\n* 1.0, 0x0000FFFF (blue)\n\nWhen the interpolator fraction field value was 0.0 (that is, 0%), the color field value would be set to red. When the fraction field value was 0.4 (that is, 40%), the color field value would be set to green. When the fraction field value was 1.0 (that is, 100%), the color field value would be set to blue.\n\nFor values of the fraction field between 0.0 and 0.4 (such as 0.2 or 20%), the field value is determined by linearly interpolating the keyValue field values for the first two keyframes. In this case, since the key of 0.2 is halfway between the key at 0.0 and the key at 0.4, the field would be set to a color halfway between red and green. Similarly, when the fraction field value is between the second and third keys (that is, between 0.4 and 1.0), the field value is determined by linearly interpolating the keyValue field values of the second and third keyframes.\n\nIf the first keyframe has a key field fraction value greater than zero, then the field value is equal to the keyValue field value of the first keyframe until the fraction field value reaches the first keyframe key field fraction value. Similarly, if the last keyframe has a key field fraction value less than one, the color field value is set to the keyValue field value of the last keyframe, from when the fraction field value equals the last keyframe key field fraction value percentage, and will not change as the fraction field value increases from that value to 1.0.\n\nThe ColorFieldInterpolator node class works in the HSV color space. Doing the interpolation in the HSV color space produces the most intuitive, visually pleasing results when animating color values.\n\n> While linear interpolation is used to compute the keyValue field values for fraction field values between successive keys, non-linear easing functions may be applied to the fraction field values computed by the Animation node, so the overall animation may vary in speed.", + "events": [], "extends": { "name": "Node", "url": "https://developer.roku.com/docs/references/scenegraph/node.md" }, - "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\n\nThe ColorFieldInterpolator node class specifies a keyframe animation sequence to be applied to the color field of a node (such as the color field of a Label node).\n\nAll field interpolators include a set of key/keyValue field pairs that define a keyframe of the animation. Field interpolators are generally used as children of an Animation node. As the animation progresses, it sets the fraction field of its field interpolators to a value between 0 and 1, indicating the fraction of the animation progress. The keyframe fields of the interpolator are key, the percentage where the keyframe should occur, and keyValue, the value that the field should have at that fraction of the animation.\n\nFor example, if a ColorFieldInterpolator node had three keyframes:\n\n* 0.0, 0xFF0000FF (red)\n* 0.4, 0x00FF00FF (green)\n* 1.0, 0x0000FFFF (blue)\n\nWhen the interpolator fraction field value was 0.0 (that is, 0%), the color field value would be set to red. When the fraction field value was 0.4 (that is, 40%), the color field value would be set to green. When the fraction field value was 1.0 (that is, 100%), the color field value would be set to blue.\n\nFor values of the fraction field between 0.0 and 0.4 (such as 0.2 or 20%), the field value is determined by linearly interpolating the keyValue field values for the first two keyframes. In this case, since the key of 0.2 is halfway between the key at 0.0 and the key at 0.4, the field would be set to a color halfway between red and green. Similarly, when the fraction field value is between the second and third keys (that is, between 0.4 and 1.0), the field value is determined by linearly interpolating the keyValue field values of the second and third keyframes.\n\nIf the first keyframe has a key field fraction value greater than zero, then the field value is equal to the keyValue field value of the first keyframe until the fraction field value reaches the first keyframe key field fraction value. Similarly, if the last keyframe has a key field fraction value less than one, the color field value is set to the keyValue field value of the last keyframe, from when the fraction field value equals the last keyframe key field fraction value percentage, and will not change as the fraction field value increases from that value to 1.0.\n\nThe ColorFieldInterpolator node class works in the HSV color space. Doing the interpolation in the HSV color space produces the most intuitive, visually pleasing results when animating color values.\n\n> While linear interpolation is used to compute the keyValue field values for fraction field values between successive keys, non-linear easing functions may be applied to the fraction field values computed by the Animation node, so the overall animation may vary in speed.", "fields": [ { - "name": "fieldToInterp", - "type": "string", - "default": "\"\"", "accessPermission": "READ\\_WRITE", - "description": "Specifies the field to interpolate. This generally refers to the field on a SceneGraph node that contains the color to animate, such as testRectangle.color field in the example below" + "default": "\"\"", + "description": "Specifies the field to interpolate. This generally refers to the field on a SceneGraph node that contains the color to animate, such as testRectangle.color field in the example below", + "name": "fieldToInterp", + "type": "string" }, { - "name": "key", - "type": "array of floats", - "default": "\\[ \\]", "accessPermission": "READ\\_WRITE", - "description": "Specifies the key fractions for the interpolator keyframes. Each key fraction should be a unique value from 0 to 1 indicating the fraction of the animation where the keyValue field value should occur. Behavior is undefined if the number of values in the key field does not match the number of values in the keyValue field" + "default": "0.0", + "description": "Specifies the fraction to be used to compute a value for the field", + "name": "fraction", + "type": "float" }, { - "name": "keyValue", - "type": "array of colors", - "default": "\\[ \\]", "accessPermission": "READ\\_WRITE", - "description": "Specifies the key values for the interpolator keyframes. Each value in the keyValue field array corresponds to a value in the key field array. Behavior is undefined if the number of values in the key field does not match the number of values in the keyValue field" + "default": "\\[ \\]", + "description": "Specifies the key fractions for the interpolator keyframes. Each key fraction should be a unique value from 0 to 1 indicating the fraction of the animation where the keyValue field value should occur. Behavior is undefined if the number of values in the key field does not match the number of values in the keyValue field", + "name": "key", + "type": "array of floats" }, { - "name": "fraction", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Specifies the fraction to be used to compute a value for the field" + "default": "\\[ \\]", + "description": "Specifies the key values for the interpolator keyframes. Each value in the keyValue field array corresponds to a value in the key field array. Behavior is undefined if the number of values in the key field does not match the number of values in the keyValue field", + "name": "keyValue", + "type": "array of colors" }, { - "name": "reverse", - "type": "boolean", - "default": "false", "accessPermission": "READ\\_WRITE", - "description": "Enables animation to be played in reverse" + "default": "false", + "description": "Enables animation to be played in reverse", + "name": "reverse", + "type": "boolean" } ], - "events": [], - "interfaces": [] + "interfaces": [], + "name": "ColorFieldInterpolator", + "url": "https://developer.roku.com/docs/references/scenegraph/animation-nodes/colorfieldinterpolator.md" }, - "floatfieldinterpolator": { - "name": "FloatFieldInterpolator", - "url": "https://developer.roku.com/docs/references/scenegraph/animation-nodes/floatfieldinterpolator.md", + "componentlibrary": { + "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\n\nThe ComponentLibrary node class downloads a library of custom SceneGraph components to be used in an application. The ComponentLibrary node should be used in a Scene node, such as Scene or OverhangPanelSetScene. One way to ensure that the library downloads before the SceneGraph application begins to compile the components for the application, is to begin the download in the main.brs file that creates the Scene node, by adding an field to the Scene node that can be used to monitor the download, and starts the application when the download is complete.", + "events": [], "extends": { "name": "Node", "url": "https://developer.roku.com/docs/references/scenegraph/node.md" }, - "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\n\nThe FloatFieldInterpolator node class specifies a keyframe animation sequence to be applied to a floating point field of a node (such as, an opacity, width or height value.)\n\nAll field interpolators include a set of key/keyValue pairs that define a keyframe of the animation. Field interpolators are generally used as children of an Animation node. As the animation progresses, it sets the fraction field of its field interpolators to a value between 0 and 1, indicating the percentage of the Animation's progress. The keyframes of the interpolator include a \"key\", the percentage where the keyframe should occur, and a \"keyValue\", the value that the field should have at that percentage.\n\nFor example, if a FloatFieldInterpolator had three keyframes, (0.0, 10.0), (0.4, 200.0) and (1.0, 87.0), then when the interpolator's fraction field was 0.0 (i.e. 0%), the field would be set to 10.0. When fraction was 0.4 (i.e. 40%), the field would be set to 200.0. When fraction was 1.0 (i.e. 100%), the field would be set to 87.0.\n\nFor values of fraction between 0.0 and 0.4 (e.g. 0.2 or 20%), the field value is determined by linearly interpolating the keyValues for the first two keyframes. In this case, since the key of 0.2 is halfway between the key at 0.0 and the key at 0.4, the field would be set to 10.0 + 0.5 \\* (10.0 + 200.0) = 105.0. Similarly, when fraction is between the second and third keys (i.e. between 0.4 and 1.0), the field value is determined by linearly interpolating the keyValues of the second and third keyframes.\n\nIf the first keyframe has a key percentage greater than zero, then the field value will be equal to the keyValue of the first keyframe until fraction reaches the first keyframe's key percentage. Similarly, if the last keyframe has a key percentage less than one, the field value will be set to the keyValue of the last keyframe from when fraction equals the the last keyframe's key percentage and will not change as fraction increases from that value to 1.0.\n\n> While linearly interpolation is used to compute the keyValue's for fraction values between successive keys, non-linear easing functions may be applied to the fraction values computed by the Animation node, so the overall animation may vary in speed.", "fields": [ { - "name": "fieldToInterp", - "type": "string", - "default": "\"\"", - "accessPermission": "READ\\_WRITE", - "description": "Specifies the field to interpolate. The string should contain the ID of a node in the scene and the name of a field of that node, separated by a dot \".\". For example, \"title.width\" would indicate that the interpolator should be applied to the width field of a node whose id field was \"title\". The specified field must be of type float" - }, - { - "name": "key", - "type": "array of float's", - "default": "\\[ \\]", "accessPermission": "READ\\_WRITE", - "description": "Specifies the key percentages for the interpolator's keyframes. Each key percentage should be a unique value from 0 to 1 indicating the percentage of the animation where the keyValue should occur. Behavior is undefined if the number of values in the key field does not match the number of values in the keyValue field" + "default": "no default", + "description": "Set to a unique ID for the library for the application", + "name": "id", + "type": "string" }, { - "name": "keyValue", - "type": "array of float's", - "default": "\\[ \\]", - "accessPermission": "READ\\_WRITE", - "description": "Specifies the key values or the interpolator's keyframes. Each value in the keyValue array corresponds to a value in the key field's array. The interpolator's behavior is undefined if the number of values in the key field does not match the number of values in the keyValue field" + "accessPermission": "READ\\_ONLY", + "default": "\"none\"", + "description": "Indicates the progress of the library download. The possible values are:\n\n| Value | Meaning |\n| --- | --- |\n| none | The default if the library is not being downloaded |\n| loading | Library is downloading |\n| ready | Library has downloaded successfully |\n| failed | Download of the library has failed |", + "name": "loadStatus", + "type": "value string" }, { - "name": "fraction", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Specifies the percentage to be used to compute a value for the field" - }, - { - "name": "reverse", - "type": "boolean", - "default": "false", - "accessPermission": "READ\\_WRITE", - "description": "Enables animation to be played in reverse." + "default": "no default", + "description": "The URL of the library to be downloaded", + "name": "uri", + "type": "uri" } ], - "events": [], - "interfaces": [] + "interfaces": [], + "name": "ComponentLibrary", + "url": "https://developer.roku.com/docs/references/scenegraph/control-nodes/componentlibrary.md" }, - "vector2dfieldinterpolator": { - "name": "Vector2DFieldInterpolator", - "url": "https://developer.roku.com/docs/references/scenegraph/animation-nodes/vector2dfieldinterpolator.md", + "contentnode": { + "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\n\nThe ContentNode node class allows you to specify the data used to configure a node or component. Many nodes and components require a ContentNode node as the specification of their content field in order to be properly configured. In general, lists, grids, and panels require a ContentNode node for configuration. The data included in a ContentNode node can be data such as the text for labels in the node or component, and the spacing between items in a list, grid, or panel, including data to create custom lists, grids, and panels. The reference information for every node or component that requires a ContentNode node includes a section that details the requirements of the ContentNode node for that node or component.\n\nContentNode nodes defined as the specification for a node or component content field are typically structured as one ContentNode parent node, with a hierarchy of child nodes that specify the actual data, and sections of data if needed. For example, a [LabelList](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/labellist.md\"LabelList\") node can have several sections that divide the entire list, each with their own section heading, and specific items in that section of the list. The ContentNode node for that LabelList node should have two levels of child ContentNode nodes, one level for the data to configure the list sections, and then another level of child ContentNode nodes for the data for each item in that list section.\n\nA ContentNode node can also be used to specify the data for custom components with defined interfaces, and for nodes and components that require [Content Meta-Data](/docs/developer-program/getting-started/architecture/content-metadata.md \" Content Meta-Data\"). Also, you should use a ContentNode node for complex structures of data for your application rather than associative arrays. ContentNode node objects are passed by reference in the application, while associative array objects are copied. For large complex data structures, passing ContentNode node objects is much quicker than passing the equivalent associative array object. You can use associative arrays for simpler data structures with just a few fixed members.\n\n> All of the attributes listed in [Content Meta-Data](/docs/developer-program/getting-started/architecture/content-metadata.md \"Content Meta-Data\") can be set as fields in a Content node. However, when creating a Content node, the fields themselves are not created until the valid attributes are set as fields, using either assignment (=), or set using [setField()](https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodefield.mdsetfieldfieldname-as-string-value-as-object-as-boolean \"setField\") or [setFields()](https://developer.roku.com/docs/references/brightscript/interfaces/ifsgnodefield.mdsetfieldsfields-as-object-as-boolean. \"setFields()\")", + "events": [], "extends": { "name": "Node", "url": "https://developer.roku.com/docs/references/scenegraph/node.md" }, - "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\n\nVector2DFieldInterpolator specifies a keyframe animation sequence to be applied to a pair Vector2D field of a node. Most typically, this is used to animate the (x,y) coordinates of a node's translation field.\n\nAll field interpolators include a set of key/keyValue pairs that define a keyframe of the animation. Field interpolators are generally used as children of an Animation node. As the animation progresses, it sets the fraction field of its field interpolators to a value between 0 and 1, indicating the percentage of the Animation's progress. The keyframes of the interpolator include a \"key\", the percentage where the keyframe should occur, and a \"keyValue\", the value that the field should have at that percentage.\n\nFor example, if a Vector2DFieldInterpolator had three keyframes, (0.0, \\[0.0, 0.0\\]), (0.4, \\[500.0, 0.0\\]) and (1.0, \\[500, 200.0\\]), then when the interpolator's fraction field was 0.0 (i.e. 0%), the field would be set to \\[0.0, 0.0\\]. When fraction was 0.4 (i.e. 40%), the field would be set to \\[500.0, 0.0\\]. When fraction was 1.0 (i.e. 100%), the field would be set to \\[500.0, 200.0\\].\n\nFor values of fraction between 0.0 and 0.4 (e.g. 0.2 or 20%), the field value is determined by linearly interpolating the keyValues for the first two keyframes. In this case, since the key of 0.2 is halfway between the key at 0.0 and the key at 0.4, the field would be set to \\[250.0, 0.0\\] (halfway between the point \\[0.0, 0.0\\] and \\[200.0, 0.0\\]. Similarly, when fraction is between the second and third keys (i.e. between 0.4 and 1.0), the field value is determined by linearly interpolating the keyValues of the second and third keyframes.\n\nFor this example, if the field being interpolated were the translation field of a Poster node parented to the Scene node, the Poster would originally be positioned with its top/left corner at the upper, left corner of the screen. As the animation proceeded from 0% to 40% complete, the Poster would slide horizontally to the right until it's top/left corner was at x=500.0, y=0.0. As the animation continued from 40% to 100% complete, the Poster would slide vertically down until its top/left corner was at x=500.0, y=200.0.\n\nIf the first keyframe has a key percentage greater than zero, then the field value will be equal to the keyValue of the first keyframe until fraction reaches the first keyframe's key percentage. Similarly, if the last keyframe has a key percentage less than one, the field value will be set to the keyValue of the last keyframe from when fraction equals the the last keyframe's key percentage and will not change as fraction increases from that value to 1.0.\n\n> While linearly interpolation is used to compute the keyValue's for fraction values between successive keys, non-linear easing functions may be applied to the fraction values computed by the Animation node, so the overall animation may vary in speed.", + "fields": [], + "interfaces": [], + "name": "ContentNode", + "url": "https://developer.roku.com/docs/references/scenegraph/control-nodes/contentnode.md" + }, + "dialog": { + "description": "> Roku OS 10.0 introduced a new [StandardDialog node](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/standard-dialog.md\"**Standard Dialog**\"), which features updated graphics and color palette support. This enables developers to provide a consistent user experience across the dialogs in their channel. Developers should replace the legacy Dialog nodes in their channel with the new [StandardDialog nodes](https://developer.roku.com/docs/references/scenegraph/standard-dialog-framework-nodes/standard-dialog.md\"**Standard Dialog**\").\n\nExtends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\nThe Dialog node class defines a modal pop-up dialog used to present the user with information requiring their immediate attention.\n\nSetting the dialog field of the current Scene node to a Dialog node causes the dialog to be displayed.\n\nThe Dialog node is configured to have up to five regions: the title, message, bullet text, graphic, and button regions. All of these are optional except for the title.\n\n* The title region consists of a an icon and a title label, along with a horizontal divider that visually separates the title from the rest of the dialog.\n \n* The message region consist of a string that is displayed below the title divider.\n \n* The bullet text region contains a set of zero or more bullet points. It is displayed below the message.\n \n* The graphic region consists of a single bitmap displayed center-aligned below the message and bullet text and above the button region.\n \n* The button region contains a ButtonGroup node that contains zero or more Button nodes, arranged vertically.\n \n\nDialogs are modal and intercept all key events except pressing the Home key. Dialogs are closed automatically when the user presses the Home key or the Back key. If the optionsDialog field is set to true, pressing the Options key also closes the dialog.\n\nOnly a single dialog may appear at any time. If a second dialog is shown, the previous dialog is closed automatically.", + "events": [], + "extends": { + "name": "Group", + "url": "https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md" + }, "fields": [ { - "name": "fieldToInterp", - "type": "string", - "default": "\"\"", "accessPermission": "READ\\_WRITE", - "description": "Specifies the field to interpolate. The string should contain the ID of a node in the scene and the name of a field of that node, separated by a dot \".\". For example, \"title.width\" would indicate that the interpolator should be applied to the width field of a node whose id field was \"title\". The specified field must be of type float" + "default": "\"\"", + "description": "Specifies the bitmap to be displayed as the dialog background. Usually this is a 9-patch image to support dynamic resizing. Only set this field to specify a custom bitmap that differs in appearance from the default bitmap", + "name": "backgroundUri", + "type": "uri" }, { - "name": "key", - "type": "array of float's", - "default": "\\[ \\]", "accessPermission": "READ\\_WRITE", - "description": "Specifies the key percentages for the interpolator's keyframes. Each key percentage should be a unique value from 0 to 1 indicating the percentage of the animation where the keyValue should occur. Behavior is undefined if the number of values in the key field does not match the number of values in the keyValue field" + "default": "\\[ \\]", + "description": "An array of strings to be displayed as a list of bullet points", + "name": "bulletText", + "type": "array of string" }, { - "name": "keyValue", - "type": "array of float's", - "default": "\\[ \\]", "accessPermission": "READ\\_WRITE", - "description": "Specifies the key values or the interpolator's keyframes. Each value in the keyValue array corresponds to a value in the key field's array. The interpolator's behavior is undefined if the number of values in the key field does not match the number of values in the keyValue field" + "default": "N/A", + "description": "When set, the color of the bullet point text", + "name": "bulletTextColor", + "type": "color" }, { - "name": "fraction", - "type": "float", - "default": "0.0", "accessPermission": "READ\\_WRITE", - "description": "Specifies the percentage to be used to compute a value for the field" + "default": "N/A", + "description": "When set, the font of the bullet point text", + "name": "bulletTextFont", + "type": "Font" }, { - "name": "reverse", - "type": "boolean", - "default": "false", - "accessPermission": "READ\\_WRITE", - "description": "Enables animation to be played in reverse." - } - ], - "events": [], - "interfaces": [] - }, - "font": { - "name": "Font", - "url": "https://developer.roku.com/docs/references/scenegraph/typographic-nodes/font.md", - "extends": { - "name": "Node", - "url": "https://developer.roku.com/docs/references/scenegraph/node.md" - }, - "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\n\nThe Font node class specifies the font to be used by a Label node, or any other nodes that render text.\n\nNodes that use fonts include a field that stores a Font node. The font to use is specified by creating a Font node, and setting its uri and size fields.\n\nThe uri field can be set to any TrueType/OpenType font file. For example, to specify a font in XML markup:\n\n```\n\n```\n\nA default system font can also be specified, such as in the following:\n\n```\n