@lightningtv/solid 3.0.0-0 → 3.0.0-10

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 (93) 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 +0 -2
  9. package/dist/src/primitives/Column.jsx +9 -3
  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/FadeInOut.d.ts +10 -0
  14. package/dist/src/primitives/FadeInOut.jsx +22 -0
  15. package/dist/src/primitives/FadeInOut.jsx.map +1 -0
  16. package/dist/src/primitives/Grid.d.ts +15 -6
  17. package/dist/src/primitives/Grid.jsx +36 -23
  18. package/dist/src/primitives/Grid.jsx.map +1 -1
  19. package/dist/src/primitives/Lazy.d.ts +4 -5
  20. package/dist/src/primitives/Lazy.jsx +16 -12
  21. package/dist/src/primitives/Lazy.jsx.map +1 -1
  22. package/dist/src/primitives/LazyUp.jsx +1 -0
  23. package/dist/src/primitives/LazyUp.jsx.map +1 -1
  24. package/dist/src/primitives/Marquee.d.ts +64 -0
  25. package/dist/src/primitives/Marquee.jsx +86 -0
  26. package/dist/src/primitives/Marquee.jsx.map +1 -0
  27. package/dist/src/primitives/Preserve.d.ts +4 -0
  28. package/dist/src/primitives/Preserve.jsx +11 -0
  29. package/dist/src/primitives/Preserve.jsx.map +1 -0
  30. package/dist/src/primitives/Row.jsx +9 -3
  31. package/dist/src/primitives/Row.jsx.map +1 -1
  32. package/dist/src/primitives/Suspense.d.ts +23 -0
  33. package/dist/src/primitives/Suspense.jsx +34 -0
  34. package/dist/src/primitives/Suspense.jsx.map +1 -0
  35. package/dist/src/primitives/announcer/announcer.d.ts +1 -0
  36. package/dist/src/primitives/announcer/announcer.js +6 -5
  37. package/dist/src/primitives/announcer/announcer.js.map +1 -1
  38. package/dist/src/primitives/announcer/index.d.ts +5 -1
  39. package/dist/src/primitives/announcer/index.js +8 -2
  40. package/dist/src/primitives/announcer/index.js.map +1 -1
  41. package/dist/src/primitives/announcer/speech.d.ts +2 -2
  42. package/dist/src/primitives/announcer/speech.js +67 -28
  43. package/dist/src/primitives/announcer/speech.js.map +1 -1
  44. package/dist/src/primitives/index.d.ts +6 -2
  45. package/dist/src/primitives/index.js +6 -2
  46. package/dist/src/primitives/index.js.map +1 -1
  47. package/dist/src/primitives/types.d.ts +2 -0
  48. package/dist/src/primitives/useHold.d.ts +27 -0
  49. package/dist/src/primitives/useHold.js +54 -0
  50. package/dist/src/primitives/useHold.js.map +1 -0
  51. package/dist/src/primitives/utils/chainFunctions.d.ts +30 -4
  52. package/dist/src/primitives/utils/chainFunctions.js +14 -3
  53. package/dist/src/primitives/utils/chainFunctions.js.map +1 -1
  54. package/dist/src/primitives/utils/createSpriteMap.js.map +1 -1
  55. package/dist/src/primitives/utils/handleNavigation.js +11 -2
  56. package/dist/src/primitives/utils/handleNavigation.js.map +1 -1
  57. package/dist/src/primitives/utils/withScrolling.d.ts +3 -0
  58. package/dist/src/primitives/utils/withScrolling.js +15 -2
  59. package/dist/src/primitives/utils/withScrolling.js.map +1 -1
  60. package/dist/src/render.d.ts +5 -5
  61. package/dist/src/render.js +8 -6
  62. package/dist/src/render.js.map +1 -1
  63. package/dist/src/solidOpts.d.ts +7 -0
  64. package/dist/src/solidOpts.js +39 -7
  65. package/dist/src/solidOpts.js.map +1 -1
  66. package/dist/tsconfig.tsbuildinfo +1 -1
  67. package/{src/jsx-runtime.ts → jsx-runtime.d.ts} +2 -2
  68. package/package.json +33 -15
  69. package/src/devtools/index.ts +77 -0
  70. package/src/index.ts +1 -1
  71. package/src/primitives/Column.tsx +11 -4
  72. package/src/primitives/FPSCounter.tsx +61 -61
  73. package/src/primitives/FadeInOut.tsx +34 -0
  74. package/src/primitives/Grid.tsx +59 -35
  75. package/src/primitives/Lazy.tsx +27 -18
  76. package/src/primitives/Marquee.tsx +149 -0
  77. package/src/primitives/Preserve.tsx +18 -0
  78. package/src/primitives/Row.tsx +11 -4
  79. package/src/primitives/Suspense.tsx +41 -0
  80. package/src/primitives/announcer/announcer.ts +9 -10
  81. package/src/primitives/announcer/index.ts +12 -2
  82. package/src/primitives/announcer/speech.ts +82 -28
  83. package/src/primitives/index.ts +10 -2
  84. package/src/primitives/types.ts +9 -0
  85. package/src/primitives/useHold.ts +69 -0
  86. package/src/primitives/utils/chainFunctions.ts +40 -9
  87. package/src/primitives/utils/createSpriteMap.ts +2 -2
  88. package/src/primitives/utils/handleNavigation.ts +11 -2
  89. package/src/primitives/utils/withScrolling.ts +29 -5
  90. package/src/render.ts +12 -12
  91. package/src/solidOpts.ts +51 -7
  92. package/src/primitives/LazyUp.tsx +0 -71
  93. package/src/primitives/jsx-runtime.d.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"LazyUp.jsx","sourceRoot":"","sources":["../../../src/primitives/LazyUp.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,IAAI,GAGL,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,OAAO,EAAoB,MAAM,oBAAoB,CAAC;AAE/D,MAAM,UAAU,MAAM,CACpB,KASG;IAEH,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE;QACpC,WAAW;QACX,MAAM;QACN,UAAU;QACV,UAAU;KACX,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAE5C,YAAY,CAAC,GAAG,EAAE;QAChB,SAAS,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAE/E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,OAAO,CACL,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK;YAC5D,MAAM,CAAC,KAAK,EAAE,aAAa,KAAK,KAAK;YACrC,MAAM,CAAC,aAAa,KAAK,KAAK,CAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;QAClC,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,SAAS,CACP,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CACtE,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAClB;MAAA,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAC7D;QAAA,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EACnE;MAAA,EAAE,OAAO,CACX;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"LazyUp.jsx","sourceRoot":"","sources":["../../../src/primitives/LazyUp.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,IAAI,GAGL,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,OAAO,EAAoB,MAAM,oBAAoB,CAAC;AAE/D,MAAM,UAAU,MAAM,CACpB,KASG;IAEH,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE;QACpC,WAAW;QACX,MAAM;QACN,UAAU;QACV,UAAU;KACX,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAE5C,YAAY,CAAC,GAAG,EAAE;QAChB,SAAS,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAE/E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,OAAO,CACL,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK;YAC5D,MAAM,CAAC,KAAK,EAAE,aAAa,KAAK,KAAK;YACrC,MAAM,CAAC,aAAa,KAAK,KAAK,CAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;QAClC,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,SAAS,CACP,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CACtE,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAClB;MAAA,CAAC,gBAAgB,CACjB;MAAA,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAC7D;QAAA,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EACnE;MAAA,EAAE,OAAO,CACX;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
@@ -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, Config } 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,9 +21,15 @@ 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
+ const gridFocus = onGridFocus(props.onSelectedChanged);
25
+ const refocus = (elm) => {
26
+ if (elm.states.has(Config.focusStateKey)) {
27
+ gridFocus.call(elm);
28
+ }
29
+ };
30
+ return (<view {...props} selected={props.selected || 0} onLeft={/* @once */chainFunctions(props.onLeft, onLeft)} onRight={/* @once */chainFunctions(props.onRight, onRight)} forwardFocus={gridFocus} scrollToIndex={scrollToIndex} onLayout={
25
31
  /* @once */
26
- props.selected ? chainFunctions(props.onLayout, scroll) : props.onLayout} onSelectedChanged={
32
+ props.selected ? chainFunctions(props.onLayout, refocus, scroll) : props.onLayout} onSelectedChanged={
27
33
  /* @once */ chainFunctions(props.onSelectedChanged, props.scroll !== 'none' ? scroll : undefined)} style={/* @once */combineStyles(props.style, RowStyles)}/>);
28
34
  };
29
35
  //# sourceMappingURL=Row.jsx.map
@@ -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,EAAE,MAAM,oBAAoB,CAAC;AACpG,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,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,CAAC,GAAgB,EAAE,EAAE;QACnC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IAEF,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,SAAS,CAAC,CACxB,aAAa,CAAC,CAAC,aAAa,CAAC,CAC7B,QAAQ,CAAC,CAAC;QACR,WAAW;QACX,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAC3E,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":"AAUA,sCAAsC;AACtC,SAAS,cAAc,CAAC,SAAuB,EAAE;IAC/C,MAAM,eAAe,GAAG,EAAE,CAAC;IAE3B,IAAI,CAAC,CAAC;IACN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IACD,6EAA6E;IAC7E,oEAAoE;IACpE,8EAA8E;IAC9E,kEAAkE;IAClE,OAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAkB,CAAC,MAAM,CAC5D,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,KAAK,CACZ,MAAc,EACd,UAAsC,EACtC,IAAI,GAAG,OAAO;IAEd,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC;IACrC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACvD,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,SAAS,CAAC,KAAK,GAAG,GAAG,EAAE;YACrB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;YACxB,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC;QACF,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAClB,MAAkB,EAClB,IAAY,EACZ,IAAI,GAAG,IAAI;IAEX,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC;IACrC,MAAM,gBAAgB,GAAG,cAAc,CACrC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAC1C,CAAC;IACF,MAAM,mBAAmB,GAAmB,EAAE,CAAC;IAC/C;;;;MAIE;IACF,MAAM,UAAU,GAA+B,EAAE,CAAC;IAClD,IAAI,MAAM,GAAY,IAAI,CAAC;IAE3B,MAAM,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;QAC9B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;oBACP,yEAAyE;oBACzE,MAAM;gBACR,CAAC;qBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnE,WAAW;oBACX,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;oBACrD,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;wBACjB,KAAK,GAAG,CAAC,CAAC;oBACZ,CAAC;oBACD,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;qBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBACvD,WAAW;oBACX,MAAM,YAAY,GAAG,CAAC,CAAC;oBACvB,IAAI,WAAW,GAAG,YAAY,CAAC;oBAC/B,OAAO,MAAM,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;wBACjC,IAAI,CAAC;4BACH,MAAM,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;4BACtC,WAAW,GAAG,CAAC,CAAC;wBAClB,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACX,IAAI,CAAC,YAAY,yBAAyB,EAAE,CAAC;gCAC3C,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oCAC1B,WAAW,EAAE,CAAC;oCACd,OAAO,CAAC,IAAI,CACV,iDAAiD,WAAW,EAAE,CAC/D,CAAC;oCACF,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC;gCAClD,CAAC;qCAAM,IACL,CAAC,CAAC,KAAK,KAAK,UAAU;oCACtB,CAAC,CAAC,KAAK,KAAK,aAAa,EACzB,CAAC;oCACD,qCAAqC;oCACrC,WAAW,GAAG,CAAC,CAAC;gCAClB,CAAC;qCAAM,CAAC;oCACN,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gCAC3D,CAAC;4BACH,CAAC;iCAAM,CAAC;gCACN,MAAM,CAAC,CAAC;4BACV,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;oBACxC,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;oBACxD,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACvC,MAAM,YAAY,CAAC,MAAM,CAAC;gBAC5B,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjC,yBAAyB;oBACzB,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;oBACtD,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACvC,MAAM,YAAY,CAAC,MAAM,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IACL,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,IAAI,MAAM;YACR,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,EAAE,CAAC,OAAmB,EAAE,EAAE;YAC9B,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,EAAE,GAAG,EAAE;YACX,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC;YACD,mBAAmB,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,EAAE;gBAClD,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,IAAI,aAAuC,CAAC;AAC5C,MAAM,CAAC,OAAO,WAAW,OAAmB,EAAE,OAAe,OAAO;IAClE,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;IACxC,aAAa,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,OAAO,aAAa,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"speech.js","sourceRoot":"","sources":["../../../../src/primitives/announcer/speech.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,6 @@ export * from './announcer/index.js';
3
3
  export * from './createInfiniteItems.js';
4
4
  export * from './useMouse.js';
5
5
  export * from './portal.jsx';
6
- export * from './LazyUp.jsx';
7
6
  export * from './Lazy.jsx';
8
7
  export * from './Visible.jsx';
9
8
  export * from './router.js';
@@ -11,9 +10,14 @@ export * from './Column.jsx';
11
10
  export * from './Row.jsx';
12
11
  export * from './Grid.jsx';
13
12
  export * from './FPSCounter.jsx';
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';