@lightningtv/solid 3.0.0-1 → 3.0.0-11

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 (87) hide show
  1. package/LICENSE +1 -1
  2. package/dist/src/devtools/index.d.ts +6 -0
  3. package/dist/src/devtools/index.js +65 -0
  4. package/dist/src/devtools/index.js.map +1 -0
  5. package/dist/src/index.d.ts +1 -1
  6. package/dist/src/index.js +1 -1
  7. package/dist/src/index.js.map +1 -1
  8. package/dist/src/jsx-runtime.d.ts +1 -3
  9. package/dist/src/primitives/Column.jsx +2 -2
  10. package/dist/src/primitives/Column.jsx.map +1 -1
  11. package/dist/src/primitives/FPSCounter.jsx +60 -61
  12. package/dist/src/primitives/FPSCounter.jsx.map +1 -1
  13. package/dist/src/primitives/Grid.d.ts +15 -6
  14. package/dist/src/primitives/Grid.jsx +36 -23
  15. package/dist/src/primitives/Grid.jsx.map +1 -1
  16. package/dist/src/primitives/Lazy.jsx +15 -11
  17. package/dist/src/primitives/Lazy.jsx.map +1 -1
  18. package/dist/src/primitives/LazyUp.jsx +1 -0
  19. package/dist/src/primitives/LazyUp.jsx.map +1 -1
  20. package/dist/src/primitives/Marquee.d.ts +64 -0
  21. package/dist/src/primitives/Marquee.jsx +86 -0
  22. package/dist/src/primitives/Marquee.jsx.map +1 -0
  23. package/dist/src/primitives/Preserve.d.ts +4 -0
  24. package/dist/src/primitives/Preserve.jsx +11 -0
  25. package/dist/src/primitives/Preserve.jsx.map +1 -0
  26. package/dist/src/primitives/Row.jsx +2 -2
  27. package/dist/src/primitives/Row.jsx.map +1 -1
  28. package/dist/src/primitives/Suspense.d.ts +23 -0
  29. package/dist/src/primitives/Suspense.jsx +34 -0
  30. package/dist/src/primitives/Suspense.jsx.map +1 -0
  31. package/dist/src/primitives/announcer/announcer.d.ts +1 -0
  32. package/dist/src/primitives/announcer/announcer.js +6 -5
  33. package/dist/src/primitives/announcer/announcer.js.map +1 -1
  34. package/dist/src/primitives/announcer/index.d.ts +5 -1
  35. package/dist/src/primitives/announcer/index.js +8 -2
  36. package/dist/src/primitives/announcer/index.js.map +1 -1
  37. package/dist/src/primitives/announcer/speech.d.ts +2 -2
  38. package/dist/src/primitives/announcer/speech.js +67 -28
  39. package/dist/src/primitives/announcer/speech.js.map +1 -1
  40. package/dist/src/primitives/index.d.ts +5 -1
  41. package/dist/src/primitives/index.js +5 -1
  42. package/dist/src/primitives/index.js.map +1 -1
  43. package/dist/src/primitives/types.d.ts +2 -0
  44. package/dist/src/primitives/useHold.d.ts +27 -0
  45. package/dist/src/primitives/useHold.js +54 -0
  46. package/dist/src/primitives/useHold.js.map +1 -0
  47. package/dist/src/primitives/utils/chainFunctions.d.ts +30 -4
  48. package/dist/src/primitives/utils/chainFunctions.js +14 -3
  49. package/dist/src/primitives/utils/chainFunctions.js.map +1 -1
  50. package/dist/src/primitives/utils/createSpriteMap.js.map +1 -1
  51. package/dist/src/primitives/utils/handleNavigation.js +11 -2
  52. package/dist/src/primitives/utils/handleNavigation.js.map +1 -1
  53. package/dist/src/primitives/utils/withScrolling.d.ts +3 -0
  54. package/dist/src/primitives/utils/withScrolling.js +14 -1
  55. package/dist/src/primitives/utils/withScrolling.js.map +1 -1
  56. package/dist/src/render.d.ts +5 -5
  57. package/dist/src/render.js +8 -6
  58. package/dist/src/render.js.map +1 -1
  59. package/dist/src/solidOpts.d.ts +7 -0
  60. package/dist/src/solidOpts.js +39 -7
  61. package/dist/src/solidOpts.js.map +1 -1
  62. package/dist/tsconfig.tsbuildinfo +1 -1
  63. package/{src/jsx-runtime.ts → jsx-runtime.d.ts} +3 -3
  64. package/package.json +23 -8
  65. package/src/devtools/index.ts +77 -0
  66. package/src/index.ts +1 -1
  67. package/src/primitives/Column.tsx +2 -2
  68. package/src/primitives/FPSCounter.tsx +61 -61
  69. package/src/primitives/Grid.tsx +59 -35
  70. package/src/primitives/Lazy.tsx +21 -12
  71. package/src/primitives/Marquee.tsx +149 -0
  72. package/src/primitives/Preserve.tsx +18 -0
  73. package/src/primitives/Row.tsx +1 -1
  74. package/src/primitives/Suspense.tsx +41 -0
  75. package/src/primitives/announcer/announcer.ts +9 -10
  76. package/src/primitives/announcer/index.ts +12 -2
  77. package/src/primitives/announcer/speech.ts +82 -28
  78. package/src/primitives/index.ts +9 -1
  79. package/src/primitives/types.ts +9 -0
  80. package/src/primitives/useHold.ts +69 -0
  81. package/src/primitives/utils/chainFunctions.ts +40 -9
  82. package/src/primitives/utils/createSpriteMap.ts +2 -2
  83. package/src/primitives/utils/handleNavigation.ts +11 -2
  84. package/src/primitives/utils/withScrolling.ts +25 -2
  85. package/src/render.ts +12 -12
  86. package/src/solidOpts.ts +51 -7
  87. package/src/primitives/jsx-runtime.d.ts +0 -8
@@ -0,0 +1,64 @@
1
+ import * as lng from '@lightningtv/solid';
2
+ export interface MarqueeAnimationProps {
3
+ /** delay in ms between animations, @default 1000 */
4
+ delay?: number;
5
+ /** pixels per second, @default 200 */
6
+ speed?: number;
7
+ /**
8
+ * distance between the end of the text and the start of the next animation
9
+ * @default `0.5 * clipWidth`
10
+ */
11
+ scrollGap?: number;
12
+ /** easing function, @default 'linear' */
13
+ easing?: string;
14
+ }
15
+ export interface MarqueeControlProps {
16
+ /** whether to scroll the text or show it contained */
17
+ marquee: boolean;
18
+ }
19
+ export interface MarqueeTextProps extends lng.TextProps, MarqueeControlProps, MarqueeAnimationProps {
20
+ /** width of the container */
21
+ clipWidth: number;
22
+ }
23
+ export interface MarqueeProps extends lng.NewOmit<lng.NodeProps, 'children'>, MarqueeControlProps, MarqueeAnimationProps {
24
+ textProps?: lng.TextProps;
25
+ children: lng.TextProps['children'];
26
+ }
27
+ /**
28
+ * MarqueeText is a component that scrolls text when it overflows the container.
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * <view width={400} height={28} clipping>
33
+ * <MarqueeText
34
+ * clipWidth={400}
35
+ * marquee={inFocus()}
36
+ * speed={200}
37
+ * delay={1000}
38
+ * scrollGap={24}
39
+ * easing='ease-in-out'
40
+ * >
41
+ * This is a long text that will scroll when it overflows the container.
42
+ * </MarqueeText>
43
+ * </view>
44
+ */
45
+ export declare function MarqueeText(props: MarqueeTextProps): lng.JSX.Element;
46
+ /**
47
+ * Marquee is a component that scrolls text when it overflows the container.
48
+ * It uses the {@link MarqueeText} component to do the actual scrolling.
49
+ *
50
+ * @example
51
+ * ```tsx
52
+ * <Marquee
53
+ * width={400}
54
+ * marquee={inFocus()}
55
+ * easing='ease-in-out'
56
+ * textProps={{
57
+ * fontSize: 28,
58
+ * }}
59
+ * >
60
+ * This is a long text that will scroll when it overflows the container.
61
+ * </Marquee>
62
+ * ```
63
+ */
64
+ export declare function Marquee(props: MarqueeProps): lng.JSX.Element;
@@ -0,0 +1,86 @@
1
+ import * as s from 'solid-js';
2
+ import { chainFunctions } from './utils/chainFunctions.js';
3
+ const SAFETY_MARGIN = 10;
4
+ /**
5
+ * MarqueeText is a component that scrolls text when it overflows the container.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <view width={400} height={28} clipping>
10
+ * <MarqueeText
11
+ * clipWidth={400}
12
+ * marquee={inFocus()}
13
+ * speed={200}
14
+ * delay={1000}
15
+ * scrollGap={24}
16
+ * easing='ease-in-out'
17
+ * >
18
+ * This is a long text that will scroll when it overflows the container.
19
+ * </MarqueeText>
20
+ * </view>
21
+ */
22
+ export function MarqueeText(props) {
23
+ const speed = s.createMemo(() => props.speed || 200);
24
+ const delay = s.createMemo(() => props.delay ?? 1000);
25
+ const scrollGap = s.createMemo(() => props.scrollGap ?? (props.clipWidth * 0.5));
26
+ const [textWidth, setTextWidth] = s.createSignal(0);
27
+ const isTextOverflowing = s.createMemo(() => textWidth() > props.clipWidth - SAFETY_MARGIN);
28
+ const shouldScroll = s.createMemo(() => props.marquee && isTextOverflowing());
29
+ const wasFocusedBefore = s.createMemo(p => p || props.marquee, false);
30
+ s.createEffect(() => {
31
+ if (shouldScroll()) {
32
+ let options = {
33
+ duration: (textWidth() + scrollGap()) / speed() * 1000,
34
+ delay: delay(),
35
+ loop: true,
36
+ easing: props.easing,
37
+ };
38
+ text1.lng.x = 0;
39
+ text2.lng.x = textWidth() + scrollGap();
40
+ let a1 = text1.lng.animate({ x: -textWidth() - scrollGap() }, options).start();
41
+ let a2 = text2.lng.animate({ x: 0 }, options).start();
42
+ s.onCleanup(() => {
43
+ a1.stop();
44
+ a2.stop();
45
+ });
46
+ }
47
+ });
48
+ const events = { loaded(el) { setTextWidth(el.width); } };
49
+ let text1;
50
+ let text2;
51
+ return (<>
52
+ {wasFocusedBefore() && <>
53
+ <text {...props} ref={text1} hidden={!shouldScroll()} rtt maxLines={1} onEvent={events}/>
54
+ <text {...props} ref={text2} hidden={!shouldScroll()} rtt maxLines={1}/>
55
+ </>}
56
+ <text {...props} maxLines={1} hidden={shouldScroll()} contain='width'/>
57
+ </>);
58
+ }
59
+ /**
60
+ * Marquee is a component that scrolls text when it overflows the container.
61
+ * It uses the {@link MarqueeText} component to do the actual scrolling.
62
+ *
63
+ * @example
64
+ * ```tsx
65
+ * <Marquee
66
+ * width={400}
67
+ * marquee={inFocus()}
68
+ * easing='ease-in-out'
69
+ * textProps={{
70
+ * fontSize: 28,
71
+ * }}
72
+ * >
73
+ * This is a long text that will scroll when it overflows the container.
74
+ * </Marquee>
75
+ * ```
76
+ */
77
+ export function Marquee(props) {
78
+ const [clipWidth, setClipWidth] = s.createSignal(props.width || 0);
79
+ const clipHeight = s.createMemo(() => props.height || props.textProps?.lineHeight || ((props.textProps?.fontSize || 16) * 1.5));
80
+ return (<view {...props} height={clipHeight()} onLayout={/* @once */chainFunctions(props.onLayout, (e) => setClipWidth(e.width))} clipping={props.marquee}>
81
+ <MarqueeText {...props.textProps} marquee={props.marquee} clipWidth={clipWidth()} speed={props.speed} delay={props.delay} scrollGap={props.scrollGap} easing={props.easing}>
82
+ {props.children}
83
+ </MarqueeText>
84
+ </view>);
85
+ }
86
+ //# sourceMappingURL=Marquee.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Marquee.jsx","sourceRoot":"","sources":["../../../src/primitives/Marquee.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import * as s from 'solid-js';
2
+ import * as lng from '@lightningtv/solid';
3
+ declare function Preserve(props: lng.NodeProps): s.JSX.Element;
4
+ export default Preserve;
@@ -0,0 +1,11 @@
1
+ import * as s from 'solid-js';
2
+ function Preserve(props) {
3
+ let view = <view {...props}/>;
4
+ view.preserve = true;
5
+ view.onRender ??= () => { view.hidden = false; };
6
+ view.onRemove ??= () => { view.hidden = true; };
7
+ s.onCleanup(() => { view.destroy(); });
8
+ return view;
9
+ }
10
+ export default Preserve;
11
+ //# sourceMappingURL=Preserve.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Preserve.jsx","sourceRoot":"","sources":["../../../src/primitives/Preserve.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAG7B,SAAS,QAAQ,CAAC,KAAoB;IAEpC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAA6B,CAAA;IAExD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IAErB,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE,GAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA,CAAA,CAAC,CAAA;IAC7C,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE,GAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA,CAAA,CAAC,CAAA;IAE5C,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAE,IAAI,CAAC,OAAO,EAAE,CAAA,CAAA,CAAC,CAAC,CAAA;IAEnC,OAAO,IAA4B,CAAA;AACrC,CAAC;AAED,eAAe,QAAQ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { combineStyles, View } from '@lightningtv/solid';
1
+ import { combineStyles } from '@lightningtv/solid';
2
2
  import { chainFunctions } from './utils/chainFunctions.js';
3
3
  import { handleNavigation, onGridFocus, } from './utils/handleNavigation.js';
4
4
  import { withScrolling } from './utils/withScrolling.js';
@@ -21,7 +21,7 @@ function scrollToIndex(index) {
21
21
  this.setFocus();
22
22
  }
23
23
  export const Row = (props) => {
24
- return (<View {...props} selected={props.selected || 0} onLeft={/* @once */chainFunctions(props.onLeft, onLeft)} onRight={/* @once */chainFunctions(props.onRight, onRight)} forwardFocus={/* once */onGridFocus(props.onSelectedChanged)} scrollToIndex={scrollToIndex} onLayout={
24
+ return (<view {...props} selected={props.selected || 0} onLeft={/* @once */chainFunctions(props.onLeft, onLeft)} onRight={/* @once */chainFunctions(props.onRight, onRight)} forwardFocus={/* once */onGridFocus(props.onSelectedChanged)} scrollToIndex={scrollToIndex} onLayout={
25
25
  /* @once */
26
26
  props.selected ? chainFunctions(props.onLayout, scroll) : props.onLayout} onSelectedChanged={
27
27
  /* @once */ chainFunctions(props.onSelectedChanged, props.scroll !== 'none' ? scroll : undefined)} style={/* @once */combineStyles(props.style, RowStyles)}/>);
@@ -1 +1 @@
1
- {"version":3,"file":"Row.jsx","sourceRoot":"","sources":["../../../src/primitives/Row.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAmB,IAAI,EAAoB,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,WAAW,GACZ,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,MAAM,SAAS,GAAe;IAC5B,OAAO,EAAE,MAAM;IACf,GAAG,EAAE,EAAE;IACP,UAAU,EAAE;QACV,CAAC,EAAE;YACD,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,aAAa;SACtB;KACF;CACF,CAAC;AAEF,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACxC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AAEnC,SAAS,aAAa,CAAoB,KAAa;IACrD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACtB,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAwB,CAAC,KAAK,EAAE,EAAE;IAChD,OAAO,CACL,CAAC,IAAI,CACH,IAAI,KAAK,CAAC,CACV,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAC9B,MAAM,CAAC,CAAC,WAAY,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CACzD,OAAO,CAAC,CAAC,WAAY,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAC5D,YAAY,CAAC,CAAC,UAAW,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAC9D,aAAa,CAAC,CAAC,aAAa,CAAC,CAC7B,QAAQ,CAAC,CAAC;QACR,WAAW;QACX,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAClE,CAAC,CACD,iBAAiB,CAAC,CAAC;QACjB,WAAW,CAAC,cAAc,CACxB,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAEhD,CAAC,CACD,KAAK,CAAC,CAAC,WAAY,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EACzD,CACH,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"Row.jsx","sourceRoot":"","sources":["../../../src/primitives/Row.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAA2C,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,WAAW,GACZ,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,MAAM,SAAS,GAAe;IAC5B,OAAO,EAAE,MAAM;IACf,GAAG,EAAE,EAAE;IACP,UAAU,EAAE;QACV,CAAC,EAAE;YACD,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,aAAa;SACtB;KACF;CACF,CAAC;AAEF,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACxC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AAEnC,SAAS,aAAa,CAAoB,KAAa;IACrD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACtB,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAwB,CAAC,KAAK,EAAE,EAAE;IAChD,OAAO,CACL,CAAC,IAAI,CACH,IAAI,KAAK,CAAC,CACV,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAC9B,MAAM,CAAC,CAAC,WAAY,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CACzD,OAAO,CAAC,CAAC,WAAY,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAC5D,YAAY,CAAC,CAAC,UAAW,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAC9D,aAAa,CAAC,CAAC,aAAa,CAAC,CAC7B,QAAQ,CAAC,CAAC;QACR,WAAW;QACX,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAClE,CAAC,CACD,iBAAiB,CAAC,CAAC;QACjB,WAAW,CAAC,cAAc,CACxB,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAEhD,CAAC,CACD,KAAK,CAAC,CAAC,WAAY,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EACzD,CACH,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import * as s from 'solid-js';
2
+ /**
3
+ * Tracks all resources inside a component and renders a fallback until they are all resolved.
4
+ *
5
+ * ```tsx
6
+ * const [data] = createResource(async () => ...);
7
+ *
8
+ * <Suspense fallback={<LoadingIndicator />}>
9
+ * <view>
10
+ * <text>{data()}</text>
11
+ * </view>
12
+ * </Suspense>
13
+ * ```
14
+ *
15
+ * This is a modified version of the SolidJS Suspense component that works with Lightning.
16
+ *
17
+ * @see https://docs.solidjs.com/reference/components/suspense
18
+ */
19
+ declare function Suspense(props: {
20
+ fallback?: s.JSX.Element;
21
+ children: s.JSX.Element;
22
+ }): s.JSX.Element;
23
+ export default Suspense;
@@ -0,0 +1,34 @@
1
+ import * as s from 'solid-js';
2
+ /**
3
+ * Tracks all resources inside a component and renders a fallback until they are all resolved.
4
+ *
5
+ * ```tsx
6
+ * const [data] = createResource(async () => ...);
7
+ *
8
+ * <Suspense fallback={<LoadingIndicator />}>
9
+ * <view>
10
+ * <text>{data()}</text>
11
+ * </view>
12
+ * </Suspense>
13
+ * ```
14
+ *
15
+ * This is a modified version of the SolidJS Suspense component that works with Lightning.
16
+ *
17
+ * @see https://docs.solidjs.com/reference/components/suspense
18
+ */
19
+ function Suspense(props) {
20
+ let children;
21
+ let suspense = s.Suspense({
22
+ get children() {
23
+ return [children = s.children(() => props.children)];
24
+ },
25
+ });
26
+ return <>
27
+ {suspense() ?? props.fallback}
28
+ <view hidden>
29
+ {suspense() ? null : children}
30
+ </view>
31
+ </>;
32
+ }
33
+ export default Suspense;
34
+ //# sourceMappingURL=Suspense.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Suspense.jsx","sourceRoot":"","sources":["../../../src/primitives/Suspense.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,QAAQ,CAAC,KAGjB;IAEC,IAAI,QAAuB,CAAC;IAE5B,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QACxB,IAAI,QAAQ;YACV,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAQ,CAAC,CAAC;QAC9D,CAAC;KACF,CAA+B,CAAC;IAEjC,OAAO,EACL;IAAA,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,QAAQ,CAC7B;IAAA,CAAC,IAAI,CAAC,MAAM,CACV;MAAA,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAC/B;IAAA,EAAE,IAAI,CACR;EAAA,GAAG,CAAA;AACL,CAAC;AAED,eAAe,QAAQ,CAAC"}
@@ -21,6 +21,7 @@ export interface Announcer {
21
21
  debug: boolean;
22
22
  enabled: boolean;
23
23
  lang: string;
24
+ voice?: string;
24
25
  cancel: VoidFunction;
25
26
  clearPrevFocus: (depth?: number) => void;
26
27
  speak: (text: SpeechType, options?: {
@@ -37,7 +37,9 @@ function onFocusChangeCore(focusPath = []) {
37
37
  }
38
38
  prevFocusPath = focusPath.slice(0);
39
39
  const toAnnounceText = [];
40
- const toAnnounce = focusDiff.reduce((acc, elm) => {
40
+ const toAnnounce = focusDiff
41
+ .reverse()
42
+ .reduce((acc, elm) => {
41
43
  if (elm.announce) {
42
44
  acc.push([getElmName(elm), 'Announce', elm.announce]);
43
45
  toAnnounceText.push(elm.announce);
@@ -68,11 +70,11 @@ function onFocusChangeCore(focusPath = []) {
68
70
  return Announcer.speak(toAnnounceText.reduce((acc, val) => acc.concat(val), []));
69
71
  }
70
72
  }
71
- function textToSpeech(toSpeak, lang) {
73
+ function textToSpeech(toSpeak, lang, voice) {
72
74
  if (voiceOutDisabled) {
73
75
  return;
74
76
  }
75
- return (currentlySpeaking = SpeechEngine(toSpeak, lang));
77
+ return (currentlySpeaking = SpeechEngine(toSpeak, lang, voice));
76
78
  }
77
79
  export const Announcer = {
78
80
  debug: false,
@@ -87,13 +89,12 @@ export const Announcer = {
87
89
  },
88
90
  speak: function (text, { append = false, notification = false } = {}) {
89
91
  if (Announcer.onFocusChange && Announcer.enabled) {
90
- Announcer.onFocusChange.flush();
91
92
  if (append && currentlySpeaking && currentlySpeaking.active) {
92
93
  currentlySpeaking.append(text);
93
94
  }
94
95
  else {
95
96
  Announcer.cancel();
96
- textToSpeech(text, Announcer.lang);
97
+ textToSpeech(text, Announcer.lang, Announcer.voice);
97
98
  }
98
99
  if (notification) {
99
100
  voiceOutDisabled = true;
@@ -1 +1 @@
1
- {"version":3,"file":"announcer.js","sourceRoot":"","sources":["../../../../src/primitives/announcer/announcer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"announcer.js","sourceRoot":"","sources":["../../../../src/primitives/announcer/announcer.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,6 @@
1
1
  import { Announcer } from './announcer.js';
2
- export declare const useAnnouncer: () => Announcer;
2
+ export declare const useAnnouncer: (options?: {
3
+ focusDebounce?: number;
4
+ focusChangeTimeout?: number;
5
+ }) => Announcer;
6
+ export { Announcer };
@@ -1,9 +1,15 @@
1
1
  import { createEffect, on } from 'solid-js';
2
2
  import { Announcer } from './announcer.js';
3
3
  import { focusPath } from '../useFocusManager.js';
4
- export const useAnnouncer = () => {
5
- Announcer.setupTimers();
4
+ let doOnce = false;
5
+ export const useAnnouncer = (options) => {
6
+ if (doOnce) {
7
+ return Announcer;
8
+ }
9
+ doOnce = true;
10
+ Announcer.setupTimers(options);
6
11
  createEffect(on(focusPath, Announcer.onFocusChange, { defer: true }));
7
12
  return Announcer;
8
13
  };
14
+ export { Announcer };
9
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/primitives/announcer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,SAAS,CAAC,WAAW,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,aAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEvE,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/primitives/announcer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAG5B,EAAE,EAAE;IACH,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,IAAI,CAAC;IACd,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,aAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEvE,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- type CoreSpeechType = string | (() => SpeechType) | SpeechType[];
1
+ type CoreSpeechType = string | (() => SpeechType) | SpeechType[] | SpeechSynthesisUtterance;
2
2
  export type SpeechType = CoreSpeechType | Promise<CoreSpeechType>;
3
3
  export interface SeriesResult {
4
4
  series: Promise<void>;
@@ -6,5 +6,5 @@ export interface SeriesResult {
6
6
  append: (toSpeak: SpeechType) => void;
7
7
  cancel: () => void;
8
8
  }
9
- export default function (toSpeak: SpeechType, lang?: string): SeriesResult;
9
+ export default function (toSpeak: SpeechType, lang?: string, voice?: string): SeriesResult;
10
10
  export {};
@@ -30,11 +30,20 @@ function delay(pause) {
30
30
  * @param lang Language to speak in
31
31
  * @return {Promise<void>} Promise resolved when the utterance has finished speaking, and rejected if there's an error
32
32
  */
33
- function speak(phrase, utterances, lang = 'en-US') {
33
+ function speak(phrase, utterances, lang = 'en-US', voiceName) {
34
34
  const synth = window.speechSynthesis;
35
35
  return new Promise((resolve, reject) => {
36
+ let selectedVoice;
37
+ if (voiceName) {
38
+ const availableVoices = synth.getVoices();
39
+ selectedVoice =
40
+ availableVoices.find((v) => v.name === voiceName) || availableVoices[0];
41
+ }
36
42
  const utterance = new SpeechSynthesisUtterance(phrase);
37
43
  utterance.lang = lang;
44
+ if (selectedVoice) {
45
+ utterance.voice = selectedVoice;
46
+ }
38
47
  utterance.onend = () => {
39
48
  resolve();
40
49
  };
@@ -45,15 +54,10 @@ function speak(phrase, utterances, lang = 'en-US') {
45
54
  synth.speak(utterance);
46
55
  });
47
56
  }
48
- function speakSeries(series, lang, root = true) {
57
+ function speakSeries(series, lang, voice, root = true) {
49
58
  const synth = window.speechSynthesis;
50
59
  const remainingPhrases = flattenStrings(Array.isArray(series) ? series : [series]);
51
60
  const nestedSeriesResults = [];
52
- /*
53
- We hold this array of SpeechSynthesisUtterances in order to prevent them from being
54
- garbage collected prematurely on STB hardware which can cause the 'onend' events of
55
- utterances to not fire consistently.
56
- */
57
61
  const utterances = [];
58
62
  let active = true;
59
63
  const seriesChain = (async () => {
@@ -61,26 +65,60 @@ function speakSeries(series, lang, root = true) {
61
65
  while (active && remainingPhrases.length) {
62
66
  const phrase = await Promise.resolve(remainingPhrases.shift());
63
67
  if (!active) {
64
- // Exit
65
- // Need to check this after the await in case it was cancelled in between
66
- break;
68
+ break; // Exit if canceled
69
+ }
70
+ if (typeof phrase === 'string' && phrase.includes('PAUSE-')) {
71
+ // Handle pauses
72
+ const pause = Number(phrase.split('PAUSE-')[1]) * 1000;
73
+ if (!isNaN(pause)) {
74
+ await delay(pause);
75
+ }
67
76
  }
68
- else if (typeof phrase === 'string' && phrase.includes('PAUSE-')) {
69
- // Pause it
70
- let pause = Number(phrase.split('PAUSE-')[1]) * 1000;
71
- if (isNaN(pause)) {
72
- pause = 0;
77
+ else if (typeof phrase === 'string') {
78
+ if (!phrase) {
79
+ continue; // Skip empty strings
80
+ }
81
+ // Handle regular strings with retry logic
82
+ const totalRetries = 3;
83
+ let retriesLeft = totalRetries;
84
+ while (active && retriesLeft > 0) {
85
+ try {
86
+ await speak(phrase, utterances, lang, voice);
87
+ retriesLeft = 0; // Exit retry loop on success
88
+ }
89
+ catch (e) {
90
+ if (e instanceof SpeechSynthesisErrorEvent) {
91
+ if (e.error === 'network') {
92
+ retriesLeft--;
93
+ console.warn(`Speech synthesis network error. Retries left: ${retriesLeft}`);
94
+ await delay(500 * (totalRetries - retriesLeft));
95
+ }
96
+ else if (e.error === 'canceled' ||
97
+ e.error === 'interrupted') {
98
+ // Cancel or interrupt error (ignore)
99
+ retriesLeft = 0;
100
+ }
101
+ else {
102
+ throw new Error(`SpeechSynthesisErrorEvent: ${e.error}`);
103
+ }
104
+ }
105
+ else {
106
+ throw e;
107
+ }
108
+ }
73
109
  }
74
- await delay(pause);
75
110
  }
76
- else if (typeof phrase === 'string' && phrase.length) {
77
- // Speak it
111
+ else if (phrase instanceof SpeechSynthesisUtterance) {
112
+ // Handle SpeechSynthesisUtterance objects with retry logic
78
113
  const totalRetries = 3;
79
114
  let retriesLeft = totalRetries;
115
+ const text = phrase.text;
116
+ const objectLang = phrase?.lang;
117
+ const objectVoice = phrase?.voice;
80
118
  while (active && retriesLeft > 0) {
81
119
  try {
82
- await speak(phrase, utterances, lang);
83
- retriesLeft = 0;
120
+ await speak(text, utterances, objectLang, objectVoice?.name);
121
+ retriesLeft = 0; // Exit retry loop on success
84
122
  }
85
123
  catch (e) {
86
124
  if (e instanceof SpeechSynthesisErrorEvent) {
@@ -105,13 +143,14 @@ function speakSeries(series, lang, root = true) {
105
143
  }
106
144
  }
107
145
  else if (typeof phrase === 'function') {
108
- const seriesResult = speakSeries(phrase(), lang, false);
146
+ // Handle functions
147
+ const seriesResult = speakSeries(phrase(), lang, voice, false);
109
148
  nestedSeriesResults.push(seriesResult);
110
149
  await seriesResult.series;
111
150
  }
112
151
  else if (Array.isArray(phrase)) {
113
- // Speak it (recursively)
114
- const seriesResult = speakSeries(phrase, lang, false);
152
+ // Handle nested arrays
153
+ const seriesResult = speakSeries(phrase, lang, voice, false);
115
154
  nestedSeriesResults.push(seriesResult);
116
155
  await seriesResult.series;
117
156
  }
@@ -134,19 +173,19 @@ function speakSeries(series, lang, root = true) {
134
173
  return;
135
174
  }
136
175
  if (root) {
137
- synth.cancel();
176
+ synth.cancel(); // Cancel all ongoing speech
138
177
  }
139
- nestedSeriesResults.forEach((nestedSeriesResults) => {
140
- nestedSeriesResults.cancel();
178
+ nestedSeriesResults.forEach((nestedSeriesResult) => {
179
+ nestedSeriesResult.cancel();
141
180
  });
142
181
  active = false;
143
182
  },
144
183
  };
145
184
  }
146
185
  let currentSeries;
147
- export default function (toSpeak, lang = 'en-US') {
186
+ export default function (toSpeak, lang = 'en-US', voice) {
148
187
  currentSeries && currentSeries.cancel();
149
- currentSeries = speakSeries(toSpeak, lang);
188
+ currentSeries = speakSeries(toSpeak, lang, voice);
150
189
  return currentSeries;
151
190
  }
152
191
  //# sourceMappingURL=speech.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"speech.js","sourceRoot":"","sources":["../../../../src/primitives/announcer/speech.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"speech.js","sourceRoot":"","sources":["../../../../src/primitives/announcer/speech.ts"],"names":[],"mappings":"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"}
@@ -11,9 +11,13 @@ export * from './Row.jsx';
11
11
  export * from './Grid.jsx';
12
12
  export * from './FPSCounter.jsx';
13
13
  export * from './FadeInOut.jsx';
14
+ export * from './Preserve.jsx';
15
+ export * from './Suspense.jsx';
16
+ export * from './Marquee.jsx';
14
17
  export * from './createFocusStack.jsx';
18
+ export * from './useHold.js';
15
19
  export { withScrolling } from './utils/withScrolling.js';
16
- export { chainFunctions } from './utils/chainFunctions.js';
20
+ export { type AnyFunction, chainFunctions, chainRefs, } from './utils/chainFunctions.js';
17
21
  export { handleNavigation, onGridFocus } from './utils/handleNavigation.js';
18
22
  export { createSpriteMap, type SpriteDef } from './utils/createSpriteMap.js';
19
23
  export type * from './types.js';
@@ -11,9 +11,13 @@ export * from './Row.jsx';
11
11
  export * from './Grid.jsx';
12
12
  export * from './FPSCounter.jsx';
13
13
  export * from './FadeInOut.jsx';
14
+ export * from './Preserve.jsx';
15
+ export * from './Suspense.jsx';
16
+ export * from './Marquee.jsx';
14
17
  export * from './createFocusStack.jsx';
18
+ export * from './useHold.js';
15
19
  export { withScrolling } from './utils/withScrolling.js';
16
- export { chainFunctions } from './utils/chainFunctions.js';
20
+ export { chainFunctions, chainRefs, } from './utils/chainFunctions.js';
17
21
  export { handleNavigation, onGridFocus } from './utils/handleNavigation.js';
18
22
  export { createSpriteMap } from './utils/createSpriteMap.js';
19
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/primitives/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAkB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/primitives/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAEL,cAAc,EACd,SAAS,GACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAkB,MAAM,4BAA4B,CAAC"}
@@ -28,6 +28,8 @@ export interface NavigableProps extends NodeProps {
28
28
  * Wrap the row so active goes back to the beginning of the row
29
29
  */
30
30
  wrap?: boolean;
31
+ /** function to be called when scrolled */
32
+ onScrolled?: (elm: NavigableElement, offset: number, isInitial: boolean) => void;
31
33
  }
32
34
  export interface NavigableElement extends ElementNode, NavigableProps {
33
35
  selected: number;