@roku-sdk/components 0.0.0-stage → 2.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/BREAKING_CHANGES.md +84 -0
  2. package/LICENSE +21 -0
  3. package/README.md +19 -2
  4. package/core-jsx.d.ts +53 -0
  5. package/eslint.config.mjs +3 -0
  6. package/jsx.d.ts +273 -0
  7. package/package.json +84 -3
  8. package/src/__tests__/container.test.tsx +150 -0
  9. package/src/__tests__/glyphs.test.ts +202 -0
  10. package/src/__tests__/modal-boundary-export.test.ts +12 -0
  11. package/src/__tests__/native-modal.test.tsx +224 -0
  12. package/src/__tests__/tween-release.test.tsx +125 -0
  13. package/src/__tests__/tween-stops-shape.test.tsx +165 -0
  14. package/src/__tests__/tween-without-compat.test.tsx +64 -0
  15. package/src/__tests__/tween.test.tsx +195 -0
  16. package/src/blended-busy-spinner.props.ts +37 -0
  17. package/src/blended-busy-spinner.tsx +13 -0
  18. package/src/bounding-tracker.props.ts +18 -0
  19. package/src/bounding-tracker.tsx +13 -0
  20. package/src/button-row.tsx +126 -0
  21. package/src/channel-store.props.ts +425 -0
  22. package/src/channel-store.tsx +76 -0
  23. package/src/container.tsx +130 -0
  24. package/src/core/jsx-runtime.ts +39 -0
  25. package/src/focusable-group.props.ts +8 -0
  26. package/src/focusable-group.tsx +17 -0
  27. package/src/focusable.props.ts +14 -0
  28. package/src/focusable.tsx +17 -0
  29. package/src/glyphs.ts +116 -0
  30. package/src/helpers/index.tsx +4 -0
  31. package/src/helpers/resolution-context.tsx +68 -0
  32. package/src/helpers/scale-for-device-resolution.ts +31 -0
  33. package/src/index.tsx +70 -0
  34. package/src/jsx-props.ts +87 -0
  35. package/src/kdfs.d.ts +14 -0
  36. package/src/kdfs.ts +15 -0
  37. package/src/key-handler.props.ts +33 -0
  38. package/src/key-handler.tsx +24 -0
  39. package/src/modal-dialog.props.ts +38 -0
  40. package/src/modal-dialog.tsx +41 -0
  41. package/src/retain-asset.ts +24 -0
  42. package/src/sg-intrinsics.json +1153 -0
  43. package/src/sg-nodes/__tests__/__snapshots__/font.test.tsx.snap +13 -0
  44. package/src/sg-nodes/__tests__/__snapshots__/prop-forwarding.test.tsx.snap +4409 -0
  45. package/src/sg-nodes/__tests__/core-props.test.ts +301 -0
  46. package/src/sg-nodes/__tests__/font.test.tsx +141 -0
  47. package/src/sg-nodes/__tests__/imperative-methods.test.ts +268 -0
  48. package/src/sg-nodes/__tests__/prop-forwarding.test.tsx +1049 -0
  49. package/src/sg-nodes/__tests__/solid-integration.test.tsx +719 -0
  50. package/src/sg-nodes/animated-image.props.ts +64 -0
  51. package/src/sg-nodes/animated-image.tsx +23 -0
  52. package/src/sg-nodes/animation.props.ts +292 -0
  53. package/src/sg-nodes/animation.tsx +190 -0
  54. package/src/sg-nodes/array-grid.ts +602 -0
  55. package/src/sg-nodes/audio.props.ts +302 -0
  56. package/src/sg-nodes/audio.tsx +57 -0
  57. package/src/sg-nodes/busy-spinner.props.ts +59 -0
  58. package/src/sg-nodes/busy-spinner.tsx +84 -0
  59. package/src/sg-nodes/button-group.props.ts +141 -0
  60. package/src/sg-nodes/button-group.tsx +30 -0
  61. package/src/sg-nodes/button.props.ts +119 -0
  62. package/src/sg-nodes/button.tsx +31 -0
  63. package/src/sg-nodes/check-list.props.ts +71 -0
  64. package/src/sg-nodes/check-list.tsx +55 -0
  65. package/src/sg-nodes/content-node.props.ts +1316 -0
  66. package/src/sg-nodes/content-node.tsx +153 -0
  67. package/src/sg-nodes/core-props.ts +197 -0
  68. package/src/sg-nodes/custom-keyboard.props.ts +108 -0
  69. package/src/sg-nodes/custom-keyboard.tsx +48 -0
  70. package/src/sg-nodes/dialog.props.ts +159 -0
  71. package/src/sg-nodes/dialog.tsx +36 -0
  72. package/src/sg-nodes/dynamic-key-grid.props.ts +22 -0
  73. package/src/sg-nodes/dynamic-key-grid.tsx +16 -0
  74. package/src/sg-nodes/dynamic-keyboard.props.ts +30 -0
  75. package/src/sg-nodes/dynamic-keyboard.tsx +18 -0
  76. package/src/sg-nodes/dynamic-mini-keyboard.props.ts +22 -0
  77. package/src/sg-nodes/dynamic-mini-keyboard.tsx +18 -0
  78. package/src/sg-nodes/dynamic-pinpad.props.ts +57 -0
  79. package/src/sg-nodes/dynamic-pinpad.tsx +18 -0
  80. package/src/sg-nodes/effect.props.ts +116 -0
  81. package/src/sg-nodes/effect.tsx +39 -0
  82. package/src/sg-nodes/font.props.ts +45 -0
  83. package/src/sg-nodes/font.tsx +80 -0
  84. package/src/sg-nodes/group.props.ts +105 -0
  85. package/src/sg-nodes/group.tsx +30 -0
  86. package/src/sg-nodes/label-list.props.ts +86 -0
  87. package/src/sg-nodes/label-list.tsx +64 -0
  88. package/src/sg-nodes/label.props.ts +207 -0
  89. package/src/sg-nodes/label.tsx +56 -0
  90. package/src/sg-nodes/layout-group.props.ts +69 -0
  91. package/src/sg-nodes/layout-group.tsx +75 -0
  92. package/src/sg-nodes/list-panel.props.ts +104 -0
  93. package/src/sg-nodes/list-panel.tsx +49 -0
  94. package/src/sg-nodes/markup-grid.props.ts +78 -0
  95. package/src/sg-nodes/markup-grid.tsx +38 -0
  96. package/src/sg-nodes/markup-list.props.ts +68 -0
  97. package/src/sg-nodes/markup-list.tsx +38 -0
  98. package/src/sg-nodes/mask-group.props.ts +78 -0
  99. package/src/sg-nodes/mask-group.tsx +59 -0
  100. package/src/sg-nodes/media-playback-methods.ts +20 -0
  101. package/src/sg-nodes/node.ts +77 -0
  102. package/src/sg-nodes/overhang.props.ts +169 -0
  103. package/src/sg-nodes/overhang.tsx +29 -0
  104. package/src/sg-nodes/panel-set.props.ts +71 -0
  105. package/src/sg-nodes/panel-set.tsx +53 -0
  106. package/src/sg-nodes/panel.props.ts +176 -0
  107. package/src/sg-nodes/panel.tsx +56 -0
  108. package/src/sg-nodes/poster-grid.props.ts +277 -0
  109. package/src/sg-nodes/poster-grid.tsx +45 -0
  110. package/src/sg-nodes/poster.props.ts +125 -0
  111. package/src/sg-nodes/poster.tsx +44 -0
  112. package/src/sg-nodes/radio-button-list.props.ts +59 -0
  113. package/src/sg-nodes/radio-button-list.tsx +68 -0
  114. package/src/sg-nodes/rectangle.props.ts +29 -0
  115. package/src/sg-nodes/rectangle.tsx +27 -0
  116. package/src/sg-nodes/row-list.props.ts +288 -0
  117. package/src/sg-nodes/row-list.tsx +47 -0
  118. package/src/sg-nodes/scene.props.ts +65 -0
  119. package/src/sg-nodes/scene.tsx +15 -0
  120. package/src/sg-nodes/scrollable-text.props.ts +133 -0
  121. package/src/sg-nodes/scrollable-text.tsx +64 -0
  122. package/src/sg-nodes/scrolling-label.props.ts +106 -0
  123. package/src/sg-nodes/scrolling-label.tsx +42 -0
  124. package/src/sg-nodes/simple-label.props.ts +156 -0
  125. package/src/sg-nodes/simple-label.tsx +59 -0
  126. package/src/sg-nodes/sound-effect.props.ts +130 -0
  127. package/src/sg-nodes/sound-effect.tsx +65 -0
  128. package/src/sg-nodes/standard-dialog.props.ts +520 -0
  129. package/src/sg-nodes/standard-dialog.tsx +428 -0
  130. package/src/sg-nodes/standard-keyboard-dialog.props.ts +84 -0
  131. package/src/sg-nodes/standard-keyboard-dialog.tsx +59 -0
  132. package/src/sg-nodes/standard-message-dialog.props.ts +56 -0
  133. package/src/sg-nodes/standard-message-dialog.tsx +48 -0
  134. package/src/sg-nodes/standard-pinpad-dialog.props.ts +64 -0
  135. package/src/sg-nodes/standard-pinpad-dialog.tsx +46 -0
  136. package/src/sg-nodes/standard-progress-dialog.props.ts +30 -0
  137. package/src/sg-nodes/standard-progress-dialog.tsx +43 -0
  138. package/src/sg-nodes/target-group.props.ts +278 -0
  139. package/src/sg-nodes/target-group.tsx +63 -0
  140. package/src/sg-nodes/target-list.props.ts +128 -0
  141. package/src/sg-nodes/target-list.tsx +66 -0
  142. package/src/sg-nodes/target-set.props.ts +63 -0
  143. package/src/sg-nodes/target-set.tsx +42 -0
  144. package/src/sg-nodes/time-grid.props.ts +646 -0
  145. package/src/sg-nodes/time-grid.tsx +87 -0
  146. package/src/sg-nodes/tween.props.ts +115 -0
  147. package/src/sg-nodes/types.ts +150 -0
  148. package/src/sg-nodes/video.props.ts +573 -0
  149. package/src/sg-nodes/video.tsx +73 -0
  150. package/src/sg-nodes/voice-text-edit-box.props.ts +91 -0
  151. package/src/sg-nodes/voice-text-edit-box.tsx +15 -0
  152. package/src/sg-nodes/zoom-row-list.props.ts +416 -0
  153. package/src/sg-nodes/zoom-row-list.tsx +42 -0
  154. package/src/standard-dialog-next/__tests__/standard-dialog-next.test.tsx +186 -0
  155. package/src/standard-dialog-next/index.ts +5 -0
  156. package/src/standard-dialog-next/standard-dialog-next.props.ts +80 -0
  157. package/src/standard-dialog-next/standard-dialog-next.tsx +326 -0
  158. package/src/test-helpers/tween-test-setup.ts +78 -0
  159. package/src/tween.tsx +173 -0
  160. package/src/types.ts +8 -0
  161. package/src/xml-components/blended-busy-spinner/BlendedBusySpinner.brs +13 -0
  162. package/src/xml-components/blended-busy-spinner/BlendedBusySpinner.xml +10 -0
  163. package/src/xml-components/blended-busy-spinner/BlendedBusySpinner.xml.d.ts +42 -0
  164. package/src/xml-components/bounding-tracker/BoundingTracker.brs +26 -0
  165. package/src/xml-components/bounding-tracker/BoundingTracker.xml +14 -0
  166. package/src/xml-components/bounding-tracker/BoundingTracker.xml.d.ts +42 -0
  167. package/src/xml-components/channel-store/channelStoreExt.brs +159 -0
  168. package/src/xml-components/channel-store/channelStoreExt.xml +29 -0
  169. package/src/xml-components/channel-store/channelStoreExt.xml.d.ts +57 -0
  170. package/src/xml-components/focus/focusable-group.brs +251 -0
  171. package/src/xml-components/focus/focusable-group.xml +15 -0
  172. package/src/xml-components/focus/focusable-group.xml.d.ts +42 -0
  173. package/src/xml-components/focus/focusable.xml +18 -0
  174. package/src/xml-components/focus/focusable.xml.d.ts +48 -0
  175. package/src/xml-components/keyboards/CustomAddressKDF.keyboard.json +547 -0
  176. package/src/xml-components/keyboards/CustomKeyboard.brs +322 -0
  177. package/src/xml-components/keyboards/CustomKeyboard.xml +45 -0
  178. package/src/xml-components/keyboards/CustomKeyboard.xml.d.ts +73 -0
  179. package/src/xml-components/keyboards/KeyGridExt.xml +4 -0
  180. package/src/xml-components/keyboards/KeyGridExt.xml.d.ts +37 -0
  181. package/src/xml-components/keyboards/KeyboardExt.xml +4 -0
  182. package/src/xml-components/keyboards/KeyboardExt.xml.d.ts +37 -0
  183. package/src/xml-components/keyboards/MOPPinPadCustomKDF.keyboard.json +151 -0
  184. package/src/xml-components/keyboards/MiniKeyboardExt.xml +4 -0
  185. package/src/xml-components/keyboards/MiniKeyboardExt.xml.d.ts +37 -0
  186. package/src/xml-components/keyboards/PhonePadCustomKDF.keyboard.json +42 -0
  187. package/src/xml-components/keyboards/PinPadExt.brs +102 -0
  188. package/src/xml-components/keyboards/PinPadExt.xml +17 -0
  189. package/src/xml-components/keyboards/PinPadExt.xml.d.ts +49 -0
  190. package/src/xml-components/keyboards/WifiCustomKDF.keyboard.json +1242 -0
  191. package/src/xml-components/keyhandler/KeyHandler.brs +30 -0
  192. package/src/xml-components/keyhandler/KeyHandler.xml +16 -0
  193. package/src/xml-components/keyhandler/KeyHandler.xml.d.ts +45 -0
  194. package/src/xml-components/managed-list-panel/ManagedListPanel.brs +137 -0
  195. package/src/xml-components/managed-list-panel/ManagedListPanel.xml +10 -0
  196. package/src/xml-components/managed-list-panel/ManagedListPanel.xml.d.ts +37 -0
  197. package/src/xml-components/modal/Modal.brs +105 -0
  198. package/src/xml-components/modal/Modal.xml +22 -0
  199. package/src/xml-components/modal/Modal.xml.d.ts +54 -0
  200. package/src/xml-components/modal/StandardDialogExt.xml +10 -0
  201. package/src/xml-components/modal/StandardDialogExt.xml.d.ts +37 -0
  202. package/src/xml-components/modal/StandardKeyboardDialogExt.xml +10 -0
  203. package/src/xml-components/modal/StandardKeyboardDialogExt.xml.d.ts +37 -0
  204. package/src/xml-components/modal/StandardMessageDialogExt.xml +10 -0
  205. package/src/xml-components/modal/StandardMessageDialogExt.xml.d.ts +37 -0
  206. package/src/xml-components/modal/StandardPinPadDialogExt.xml +10 -0
  207. package/src/xml-components/modal/StandardPinPadDialogExt.xml.d.ts +37 -0
  208. package/src/xml-components/modal/StandardProgressDialogExt.xml +10 -0
  209. package/src/xml-components/modal/StandardProgressDialogExt.xml.d.ts +37 -0
  210. package/src/xml-components/modal/tests/Modal.test.brs +195 -0
  211. package/tsconfig.json +10 -0
@@ -0,0 +1,84 @@
1
+ # Breaking Changes
2
+
3
+ See the [Tween value-shape contract](../../documentation/core-concepts/tween.md) for target and settle shapes.
4
+
5
+ ## `<tween>` follows the native field contract
6
+
7
+ _Lands after 2.16.0._ The `<tween>` intrinsic no longer accepts `toY` or `delay`.
8
+ For a two-axis destination, pass `targetVector={[x, y]}` instead of `targetValue={x}`
9
+ and `toY={y}`. A scalar `targetValue` on a vector field now moves both axes to that
10
+ value. To delay an animation, write its target from an application-owned timer.
11
+
12
+ `onAnimationState` now receives one tuple, `[state, value]`, where `value` is
13
+ `number | Vector2D`. The `@roku-sdk/flex-grid` `Tween` wrapper still adapts this to
14
+ its two-argument callback; this change applies to the intrinsic.
15
+
16
+ The native node is selected only on firmware that reports the `tween` feature
17
+ (`roku.hasFeature("tween")`). Otherwise the build-injected `@roku-sdk/compat` supplies
18
+ `RsgTweenShim`; with `app.compat: false`, creating `<tween>` throws an error naming the
19
+ missing feature. The firmware feature set starts empty, so devices use the shim until
20
+ firmware adds `"tween"`. There is no OS-version gate.
21
+
22
+ **Migration.**
23
+
24
+ ```tsx
25
+ // before
26
+ <tween
27
+ targetNode={node}
28
+ axis="both"
29
+ targetValue={x}
30
+ toY={y}
31
+ delay={0.2}
32
+ onAnimationState={state => logState(state)}
33
+ />
34
+
35
+ // after
36
+ <tween
37
+ targetNode={node}
38
+ axis="all"
39
+ targetVector={[x, y]}
40
+ onAnimationState={([state, value]) => logState(state, value)}
41
+ />
42
+ ```
43
+
44
+ ## `axis="both"` is removed; use `axis="all"`
45
+
46
+ _Lands after 2.16.0._ `axis` accepts `"x"`, `"y"` and `"all"`. `"x"` and `"y"` move one
47
+ component and hold the other at `preserveOther`; `"all"` moves the whole vector. `"both"` meant
48
+ the same thing as `"all"` and is no longer part of the type. Write `"all"`.
49
+
50
+ The behavioural change is in settlement. A vector settle used to pick one dominant axis from the
51
+ armed span, apply the chosen stop to that component, and leave the other on whatever value it
52
+ happened to hold. It now picks one whole `[x, y]` candidate and applies it to every component the
53
+ axis owns, so a diagonal glide lands on both coordinates. A candidate is accepted when it lies
54
+ strictly ahead on every owned component the span moves (a component the span does not move
55
+ imposes no constraint), and the nearest accepted candidate by Euclidean distance wins. The
56
+ canonical `proposedStops` form for a vector field under `"all"` is therefore `[x, y][]`. A
57
+ candidate has the arity of the value being settled, so the shape follows the field and the axis:
58
+
59
+ - float fields, and `axis` `"x"` / `"y"` on a vector field: `number[]`;
60
+ - `axis` `"all"` (the default) on a vector field: `[number, number][]`;
61
+ - `axis` is ignored on float fields.
62
+
63
+ An entry of the wrong arity is skipped and logged once per settle, and the valid entries in a
64
+ mixed list still compete. A scalar under `"all"` is not expanded to `[s, s]` the way a scalar
65
+ `targetValue` is, and an array under `"x"` or `"y"` (an `[x, y]` pair included) is not read on
66
+ the owned component. A list with nothing of the right arity left in it means no settle. A
67
+ single candidate is read as a destination rather than a choice, so the direction-of-travel
68
+ filter does not apply to it.
69
+
70
+ A flat two-scalar `proposedStops` array used to be one `[x, y]` destination point under
71
+ `"both"`. Under `"all"` it is now two scalars of the wrong arity, both skipped, so it settles
72
+ nowhere. Write one point as `[[x, y]]`.
73
+
74
+ `onAnimationStop` still carries one scalar position. Under `"x"` or `"y"` it is that coordinate;
75
+ under `"all"` it is the chosen point's coordinate that travels further. The full point is
76
+ `proposedStops[index]`.
77
+
78
+ ```tsx
79
+ // before — dominant axis wins, the other component is left where it was
80
+ <tween targetNode={node} axis="both" targetVector={[x, y]} proposedStops={[x, y]} />
81
+
82
+ // after — both components settle
83
+ <tween targetNode={node} axis="all" targetVector={[x, y]} proposedStops={[[x, y]]} />
84
+ ```
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Roku, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,20 @@
1
- # Temporary Holding Version
1
+ # `@roku-sdk/components`
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ SolidJS components for SceneGraph nodes in the RSG 2.0 SDK. Each component wraps one node, such as a Label, Poster, Rectangle or Effect, or composes several, and takes the node's fields as typed JSX props.
4
+
5
+ Every props interface extends `INodeProps`, which holds the props all nodes accept, such as `id`, `ref` and `focusable`. The package also exports character constants for Roku remote-button glyphs and common symbols, from `@roku-sdk/components/glyphs`.
6
+
7
+ ## Install
8
+
9
+ ```sh
10
+ pnpm add @roku-sdk/components
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```tsx
16
+ import { Effect } from "@roku-sdk/components";
17
+
18
+ const framed = <Effect borderRadius={24} borderWidth={6} borderColor="0xF39C12FF" />;
19
+ <rectangle width={300} height={140} effect={framed} />;
20
+ ```
package/core-jsx.d.ts ADDED
@@ -0,0 +1,53 @@
1
+ // Copyright (c) 2026 Roku, Inc.
2
+ // SPDX-License-Identifier: MIT
3
+
4
+ // JSX intrinsic map for the frozen core property contract.
5
+ //
6
+ // A build that sets `jsxImportSource: "@roku-sdk/components/core"` resolves `JSX.IntrinsicElements`
7
+ // through `@roku-sdk/components/core/jsx-runtime`, which this file augments. Reach it by adding
8
+ // "@roku-sdk/components/core-jsx" to the tsconfig's `types[]`.
9
+ //
10
+ // Unlike `jsx.d.ts` this file is not generated. `CorePropsByTag` in `src/sg-nodes/core-props.ts` is
11
+ // the authoritative tag-to-interface table, and every member below is its entry for that tag. A
12
+ // primitive absent from that table has no mapping, which is the element-level half of the contract
13
+ // — using its tag is a `Property '<tag>' does not exist on type 'JSX.IntrinsicElements'` error by
14
+ // name rather than a silent pass.
15
+ //
16
+ // Each tag MUST be declared as a direct member. `interface IntrinsicElements extends CorePropsByTag`
17
+ // looks equivalent and is not: the augmented interface already inherits solid-js's DOM tags through
18
+ // its own base interfaces, and an inherited member cannot displace another inherited member. `label`
19
+ // is the collision that matters — solid-js supplies it via `JSX.HTMLElementTags`, so under an
20
+ // `extends` clause `<label>` silently binds `LabelHTMLAttributes<HTMLLabelElement>` instead of
21
+ // `ILabelCoreProps`, and every core `<label>` in an app fails to typecheck against the DOM type. A
22
+ // direct member outranks anything inherited, which is why each generated per-renderer map
23
+ // spells its tags out. The cost is that this list no longer tracks `CorePropsByTag` on its own, so
24
+ // `core-props.test.ts` asserts the two key sets are equal in both directions.
25
+ //
26
+ // `export {}` makes this a TypeScript MODULE file (not a script), enabling proper module
27
+ // augmentation. Without it, `declare module` creates a standalone ambient namespace that shadows
28
+ // JSX.ElementChildrenAttribute from solid-js, breaking automatic `children` handling in `<Show>`,
29
+ // `<For>`, `<ErrorBoundary>`, etc.
30
+
31
+ import type {
32
+ IEffectCoreProps,
33
+ IGroupCoreProps,
34
+ ILabelCoreProps,
35
+ IPosterCoreProps,
36
+ IRectangleCoreProps,
37
+ ITweenCoreProps
38
+ } from "./src/sg-nodes/core-props";
39
+
40
+ export {};
41
+
42
+ declare module "@roku-sdk/components/core/jsx-runtime" {
43
+ namespace JSX {
44
+ interface IntrinsicElements {
45
+ group: IGroupCoreProps;
46
+ rectangle: IRectangleCoreProps;
47
+ label: ILabelCoreProps;
48
+ poster: IPosterCoreProps;
49
+ effect: IEffectCoreProps;
50
+ tween: ITweenCoreProps;
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,3 @@
1
+ import rokuSdkToolsLinterConfig from "@roku-sdk/dev-tools/linter-config/eslint.config.mjs";
2
+
3
+ export default rokuSdkToolsLinterConfig;
package/jsx.d.ts ADDED
@@ -0,0 +1,273 @@
1
+ // Auto-generated. DO NOT EDIT.
2
+ // Source: src/sg-intrinsics.json — run `pnpm generate:sg-intrinsics` to regenerate.
3
+
4
+ import type {
5
+ IAnimatedImageProps,
6
+ IAnimationBaseProps,
7
+ IAnimationProps,
8
+ IAudioProps,
9
+ IBifDisplayProps,
10
+ IBlendedBusySpinnerProps,
11
+ IBoundingTrackerProps,
12
+ IBusySpinnerProps,
13
+ IButtonGroupProps,
14
+ IButtonProps,
15
+ IChannelStoreProps,
16
+ ICheckListProps,
17
+ IColorFieldInterpolatorProps,
18
+ IContentNodeProps,
19
+ IDialogProps,
20
+ IDynamicKeyboardProps,
21
+ IDynamicKeyGridProps,
22
+ IDynamicMiniKeyboardProps,
23
+ IDynamicPinPadProps,
24
+ IEffectProps,
25
+ IFloatFieldInterpolatorProps,
26
+ IFocusableGroupProps,
27
+ IFocusableProps,
28
+ IFontProps,
29
+ IFullPanelProps,
30
+ IGroupProps,
31
+ IKeyboardPropsWithVoice,
32
+ IKeyHandlerProps,
33
+ ILabelListProps,
34
+ ILabelProps,
35
+ ILayoutGroupProps,
36
+ IListPanelProps,
37
+ IMarkupGridProps,
38
+ IMarkupListProps,
39
+ IMaskGroupProps,
40
+ IModalProps,
41
+ IMultiStyleLabelProps,
42
+ IOverhangProps,
43
+ IPanelProps,
44
+ IPanelSetProps,
45
+ IPosterGridProps,
46
+ IPosterProps,
47
+ IProgressBarProps,
48
+ IRadioButtonListProps,
49
+ IRectangleProps,
50
+ IRowListProps,
51
+ ISceneProps,
52
+ IScrollableTextProps,
53
+ IScrollingLabelProps,
54
+ ISimpleLabelProps,
55
+ ISoundEffectProps,
56
+ IStandardDialogProps,
57
+ IStandardDialogRSGPaletteNodeProps,
58
+ IStandardKeyboardDialogProps,
59
+ IStandardMessageDialogProps,
60
+ IStandardPinPadDialogProps,
61
+ IStandardProgressDialogProps,
62
+ IStdDlgActionCardItemProps,
63
+ IStdDlgBulletTextItemProps,
64
+ IStdDlgButtonAreaProps,
65
+ IStdDlgButtonProps,
66
+ IStdDlgContentAreaProps,
67
+ IStdDlgCustomItemProps,
68
+ IStdDlgDeterminateProgressItemProps,
69
+ IStdDlgGraphicItemProps,
70
+ IStdDlgItemGroupProps,
71
+ IStdDlgKeyboardItemProps,
72
+ IStdDlgMultiStyleTextItemProps,
73
+ IStdDlgProgressItemProps,
74
+ IStdDlgSideCardAreaProps,
75
+ IStdDlgTextItemProps,
76
+ IStdDlgTitleAreaProps,
77
+ ITargetGroupProps,
78
+ ITargetListProps,
79
+ ITargetSetProps,
80
+ ITimeGridProps,
81
+ ITrickPlayBarProps,
82
+ ITweenProps,
83
+ IVector2DFieldInterpolatorProps,
84
+ IVideoProps,
85
+ IVoiceTextEditBoxProps,
86
+ IZoomRowListProps
87
+ } from "./src/jsx-props";
88
+
89
+ declare module "solid-js" {
90
+ namespace JSX {
91
+ interface IntrinsicElements {
92
+ checkList: ICheckListProps;
93
+ labelList: ILabelListProps;
94
+ markupList: IMarkupListProps;
95
+ label: ILabelProps;
96
+ scrollingLabel: IScrollingLabelProps;
97
+ simpleLabel: ISimpleLabelProps;
98
+ multiStyleLabel: IMultiStyleLabelProps;
99
+ button: IButtonProps;
100
+ buttonGroup: IButtonGroupProps;
101
+ busySpinner: IBusySpinnerProps;
102
+ blendedBusySpinner: IBlendedBusySpinnerProps;
103
+ group: IGroupProps;
104
+ "key-handler": IKeyHandlerProps;
105
+ animatedImage: IAnimatedImageProps;
106
+ poster: IPosterProps;
107
+ overhang: IOverhangProps;
108
+ animation: IAnimationProps;
109
+ sequentialAnimation: IAnimationBaseProps;
110
+ floatFieldInterpolator: IFloatFieldInterpolatorProps;
111
+ colorFieldInterpolator: IColorFieldInterpolatorProps;
112
+ vector2dFieldInterpolator: IVector2DFieldInterpolatorProps;
113
+ rectangle: IRectangleProps;
114
+ rowList: IRowListProps;
115
+ timeGrid: ITimeGridProps;
116
+ zoomRowList: IZoomRowListProps;
117
+ layoutGroup: ILayoutGroupProps;
118
+ listPanel: IListPanelProps;
119
+ panelSet: IPanelSetProps;
120
+ panel: IPanelProps;
121
+ radioButtonList: IRadioButtonListProps;
122
+ modal: IModalProps;
123
+ "modal-dialog": IModalProps;
124
+ standardDialogExt: IStandardDialogProps;
125
+ standardDialog: IStandardDialogProps;
126
+ standardKeyboardDialogExt: IStandardKeyboardDialogProps;
127
+ standardMessageDialogExt: IStandardMessageDialogProps;
128
+ standardPinPadDialogExt: IStandardPinPadDialogProps;
129
+ standardProgressDialogExt: IStandardProgressDialogProps;
130
+ dialog: IDialogProps;
131
+ stdDlgTitleArea: IStdDlgTitleAreaProps;
132
+ stdDlgContentArea: IStdDlgContentAreaProps;
133
+ stdDlgButtonArea: IStdDlgButtonAreaProps;
134
+ stdDlgSideCardArea: IStdDlgSideCardAreaProps;
135
+ stdDlgButton: IStdDlgButtonProps;
136
+ stdDlgItemGroup: IStdDlgItemGroupProps;
137
+ stdDlgActionCardItem: IStdDlgActionCardItemProps;
138
+ stdDlgBulletTextItem: IStdDlgBulletTextItemProps;
139
+ stdDlgDeterminateProgressItem: IStdDlgDeterminateProgressItemProps;
140
+ stdDlgGraphicItem: IStdDlgGraphicItemProps;
141
+ stdDlgMultiStyleTextItem: IStdDlgMultiStyleTextItemProps;
142
+ stdDlgKeyboardItem: IStdDlgKeyboardItemProps;
143
+ stdDlgProgressItem: IStdDlgProgressItemProps;
144
+ stdDlgTextItem: IStdDlgTextItemProps;
145
+ stdDlgCustomItem: IStdDlgCustomItemProps;
146
+ contentNode: IContentNodeProps;
147
+ posterGrid: IPosterGridProps;
148
+ markupGrid: IMarkupGridProps;
149
+ video: IVideoProps;
150
+ bifDisplay: IBifDisplayProps;
151
+ trickPlayBar: ITrickPlayBarProps;
152
+ progressBar: IProgressBarProps;
153
+ "bounding-tracker": IBoundingTrackerProps;
154
+ "focusable-group": IFocusableGroupProps;
155
+ focusable: IFocusableProps;
156
+ font: IFontProps;
157
+ channelStoreExt: IChannelStoreProps;
158
+ audio: IAudioProps;
159
+ soundEffect: ISoundEffectProps;
160
+ rsgPalette: IStandardDialogRSGPaletteNodeProps;
161
+ effect: IEffectProps;
162
+ targetGroup: ITargetGroupProps;
163
+ targetList: ITargetListProps;
164
+ targetSet: ITargetSetProps;
165
+ customKeyboard: IKeyboardPropsWithVoice;
166
+ dynamicKeyGrid: IDynamicKeyGridProps;
167
+ keyGridExt: IDynamicKeyGridProps;
168
+ dynamicKeyboard: IDynamicKeyboardProps;
169
+ keyboardExt: IDynamicKeyboardProps;
170
+ dynamicMiniKeyboard: IDynamicMiniKeyboardProps;
171
+ miniKeyboardExt: IDynamicMiniKeyboardProps;
172
+ dynamicPinPad: IDynamicPinPadProps;
173
+ pinPadExt: IDynamicPinPadProps;
174
+ voiceTextEditBox: IVoiceTextEditBoxProps;
175
+ tween: ITweenProps;
176
+ }
177
+ }
178
+ }
179
+
180
+ declare module "@roku-sdk/solid" {
181
+ namespace JSX {
182
+ interface IntrinsicElements {
183
+ checkList: ICheckListProps;
184
+ labelList: ILabelListProps;
185
+ markupList: IMarkupListProps;
186
+ maskGroup: IMaskGroupProps;
187
+ label: ILabelProps;
188
+ scrollingLabel: IScrollingLabelProps;
189
+ scrollableText: IScrollableTextProps;
190
+ simpleLabel: ISimpleLabelProps;
191
+ multiStyleLabel: IMultiStyleLabelProps;
192
+ button: IButtonProps;
193
+ buttonGroup: IButtonGroupProps;
194
+ busySpinner: IBusySpinnerProps;
195
+ blendedBusySpinner: IBlendedBusySpinnerProps;
196
+ group: IGroupProps;
197
+ "key-handler": IKeyHandlerProps;
198
+ animatedImage: IAnimatedImageProps;
199
+ poster: IPosterProps;
200
+ overhang: IOverhangProps;
201
+ animation: IAnimationProps;
202
+ sequentialAnimation: IAnimationBaseProps;
203
+ floatFieldInterpolator: IFloatFieldInterpolatorProps;
204
+ colorFieldInterpolator: IColorFieldInterpolatorProps;
205
+ vector2dFieldInterpolator: IVector2DFieldInterpolatorProps;
206
+ rectangle: IRectangleProps;
207
+ rowList: IRowListProps;
208
+ timeGrid: ITimeGridProps;
209
+ zoomRowList: IZoomRowListProps;
210
+ scene: ISceneProps;
211
+ layoutGroup: ILayoutGroupProps;
212
+ managedListPanel: IListPanelProps;
213
+ listPanel: IFullPanelProps;
214
+ panelSet: IPanelSetProps;
215
+ panel: IPanelProps;
216
+ radioButtonList: IRadioButtonListProps;
217
+ modal: IModalProps;
218
+ "modal-dialog": IModalProps;
219
+ standardDialogExt: IStandardDialogProps;
220
+ standardDialog: IStandardDialogProps;
221
+ standardKeyboardDialogExt: IStandardKeyboardDialogProps;
222
+ standardMessageDialogExt: IStandardMessageDialogProps;
223
+ standardPinPadDialogExt: IStandardPinPadDialogProps;
224
+ standardProgressDialogExt: IStandardProgressDialogProps;
225
+ dialog: IDialogProps;
226
+ stdDlgTitleArea: IStdDlgTitleAreaProps;
227
+ stdDlgContentArea: IStdDlgContentAreaProps;
228
+ stdDlgButtonArea: IStdDlgButtonAreaProps;
229
+ stdDlgSideCardArea: IStdDlgSideCardAreaProps;
230
+ stdDlgButton: IStdDlgButtonProps;
231
+ stdDlgItemGroup: IStdDlgItemGroupProps;
232
+ stdDlgActionCardItem: IStdDlgActionCardItemProps;
233
+ stdDlgBulletTextItem: IStdDlgBulletTextItemProps;
234
+ stdDlgDeterminateProgressItem: IStdDlgDeterminateProgressItemProps;
235
+ stdDlgGraphicItem: IStdDlgGraphicItemProps;
236
+ stdDlgMultiStyleTextItem: IStdDlgMultiStyleTextItemProps;
237
+ stdDlgKeyboardItem: IStdDlgKeyboardItemProps;
238
+ stdDlgProgressItem: IStdDlgProgressItemProps;
239
+ stdDlgTextItem: IStdDlgTextItemProps;
240
+ stdDlgCustomItem: IStdDlgCustomItemProps;
241
+ contentNode: IContentNodeProps;
242
+ posterGrid: IPosterGridProps;
243
+ markupGrid: IMarkupGridProps;
244
+ video: IVideoProps;
245
+ bifDisplay: IBifDisplayProps;
246
+ trickPlayBar: ITrickPlayBarProps;
247
+ progressBar: IProgressBarProps;
248
+ "bounding-tracker": IBoundingTrackerProps;
249
+ "focusable-group": IFocusableGroupProps;
250
+ focusable: IFocusableProps;
251
+ font: IFontProps;
252
+ channelStoreExt: IChannelStoreProps;
253
+ audio: IAudioProps;
254
+ soundEffect: ISoundEffectProps;
255
+ rsgPalette: IStandardDialogRSGPaletteNodeProps;
256
+ effect: IEffectProps;
257
+ targetGroup: ITargetGroupProps;
258
+ targetList: ITargetListProps;
259
+ targetSet: ITargetSetProps;
260
+ customKeyboard: IKeyboardPropsWithVoice;
261
+ dynamicKeyGrid: IDynamicKeyGridProps;
262
+ keyGridExt: IDynamicKeyGridProps;
263
+ dynamicKeyboard: IDynamicKeyboardProps;
264
+ keyboardExt: IDynamicKeyboardProps;
265
+ dynamicMiniKeyboard: IDynamicMiniKeyboardProps;
266
+ miniKeyboardExt: IDynamicMiniKeyboardProps;
267
+ dynamicPinPad: IDynamicPinPadProps;
268
+ pinPadExt: IDynamicPinPadProps;
269
+ voiceTextEditBox: IVoiceTextEditBoxProps;
270
+ tween: ITweenProps;
271
+ }
272
+ }
273
+ }
package/package.json CHANGED
@@ -1,6 +1,87 @@
1
1
  {
2
2
  "name": "@roku-sdk/components",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "2.18.0",
4
+ "description": "Roku SceneGraph Solid components",
5
+ "sideEffects": [
6
+ "src/**/*.brs",
7
+ "src/sg-nodes/animation.tsx",
8
+ "src/sg-nodes/audio.tsx",
9
+ "src/sg-nodes/sound-effect.tsx",
10
+ "src/sg-nodes/video.tsx"
11
+ ],
12
+ "main": "src/index.tsx",
13
+ "exports": {
14
+ ".": "./src/index.tsx",
15
+ "./types": "./src/types.ts",
16
+ "./glyphs": {
17
+ "types": "./src/glyphs.ts",
18
+ "default": "./src/glyphs.ts"
19
+ },
20
+ "./kdfs": {
21
+ "types": "./src/kdfs.d.ts",
22
+ "default": "./src/kdfs.ts"
23
+ },
24
+ "./jsx": "./jsx.d.ts",
25
+ "./jsx-props": "./src/jsx-props.ts",
26
+ "./core-props": "./src/sg-nodes/core-props.ts",
27
+ "./core-jsx": "./core-jsx.d.ts",
28
+ "./core/jsx-runtime": "./src/core/jsx-runtime.ts",
29
+ "./animation": "./src/sg-nodes/animation.tsx",
30
+ "./busy-spinner": "./src/sg-nodes/busy-spinner.tsx",
31
+ "./helpers": "./src/helpers/index.tsx",
32
+ "./standard-dialog-next": "./src/standard-dialog-next/index.ts"
33
+ },
34
+ "type": "module",
35
+ "files": [
36
+ "src/",
37
+ "dist/",
38
+ "eslint.config.mjs",
39
+ "tsconfig.json",
40
+ "jsx.d.ts",
41
+ "core-jsx.d.ts",
42
+ "README.md",
43
+ "BREAKING_CHANGES.md"
44
+ ],
45
+ "engines": {
46
+ "npm": ">=8.5.0",
47
+ "node": ">=24.0.0"
48
+ },
49
+ "dependencies": {
50
+ "@roku-sdk/common": "2.18.0",
51
+ "@roku-sdk/runtime": "2.18.0",
52
+ "@roku-sdk/solid": "2.18.0",
53
+ "@roku-sdk/navigation": "2.18.0",
54
+ "@roku-sdk/interfaces": "2.18.0"
55
+ },
56
+ "devDependencies": {
57
+ "@jest/globals": "^30.4.1",
58
+ "@types/jest": "^30.0.0",
59
+ "jest": "^30.4.1",
60
+ "jest-transform-stub": "^2.0.0",
61
+ "@roku-sdk/dev-tools": "2.18.0",
62
+ "@roku-sdk/testing-library": "2.18.0",
63
+ "@roku-sdk/compat": "2.18.0"
64
+ },
65
+ "author": "Roku Inc",
66
+ "license": "MIT",
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "git+https://gitlab.com/rokudev/rsg-sdk.git",
70
+ "directory": "packages/components"
71
+ },
72
+ "homepage": "https://gitlab.com/rokudev/rsg-sdk/-/tree/main/packages/components#readme",
73
+ "bugs": {
74
+ "url": "https://gitlab.com/rokudev/rsg-sdk/-/issues"
75
+ },
76
+ "publishConfig": {
77
+ "access": "public"
78
+ },
79
+ "scripts": {
80
+ "generate:sg-intrinsics": "node scripts/generate-sg-intrinsics.mjs",
81
+ "test": "jest --passWithNoTests",
82
+ "coverage": "jest --coverage --runInBand --passWithNoTests --testTimeout=60000 --forceExit",
83
+ "clean": "rm -rf dist",
84
+ "lint": "eslint --no-error-on-unmatched-pattern \"src/**/*.{ts,tsx,mjs,cjs,js}\"",
85
+ "core-props:gap": "node scripts/core-props-gap.mjs"
86
+ }
6
87
  }