@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.
- package/LICENSE +1 -1
- package/dist/src/devtools/index.d.ts +6 -0
- package/dist/src/devtools/index.js +65 -0
- package/dist/src/devtools/index.js.map +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/jsx-runtime.d.ts +1 -3
- package/dist/src/primitives/Column.jsx +2 -2
- package/dist/src/primitives/Column.jsx.map +1 -1
- package/dist/src/primitives/FPSCounter.jsx +60 -61
- package/dist/src/primitives/FPSCounter.jsx.map +1 -1
- package/dist/src/primitives/Grid.d.ts +15 -6
- package/dist/src/primitives/Grid.jsx +36 -23
- package/dist/src/primitives/Grid.jsx.map +1 -1
- package/dist/src/primitives/Lazy.jsx +15 -11
- package/dist/src/primitives/Lazy.jsx.map +1 -1
- package/dist/src/primitives/LazyUp.jsx +1 -0
- package/dist/src/primitives/LazyUp.jsx.map +1 -1
- package/dist/src/primitives/Marquee.d.ts +64 -0
- package/dist/src/primitives/Marquee.jsx +86 -0
- package/dist/src/primitives/Marquee.jsx.map +1 -0
- package/dist/src/primitives/Preserve.d.ts +4 -0
- package/dist/src/primitives/Preserve.jsx +11 -0
- package/dist/src/primitives/Preserve.jsx.map +1 -0
- package/dist/src/primitives/Row.jsx +2 -2
- package/dist/src/primitives/Row.jsx.map +1 -1
- package/dist/src/primitives/Suspense.d.ts +23 -0
- package/dist/src/primitives/Suspense.jsx +34 -0
- package/dist/src/primitives/Suspense.jsx.map +1 -0
- package/dist/src/primitives/announcer/announcer.d.ts +1 -0
- package/dist/src/primitives/announcer/announcer.js +6 -5
- package/dist/src/primitives/announcer/announcer.js.map +1 -1
- package/dist/src/primitives/announcer/index.d.ts +5 -1
- package/dist/src/primitives/announcer/index.js +8 -2
- package/dist/src/primitives/announcer/index.js.map +1 -1
- package/dist/src/primitives/announcer/speech.d.ts +2 -2
- package/dist/src/primitives/announcer/speech.js +67 -28
- package/dist/src/primitives/announcer/speech.js.map +1 -1
- package/dist/src/primitives/index.d.ts +5 -1
- package/dist/src/primitives/index.js +5 -1
- package/dist/src/primitives/index.js.map +1 -1
- package/dist/src/primitives/types.d.ts +2 -0
- package/dist/src/primitives/useHold.d.ts +27 -0
- package/dist/src/primitives/useHold.js +54 -0
- package/dist/src/primitives/useHold.js.map +1 -0
- package/dist/src/primitives/utils/chainFunctions.d.ts +30 -4
- package/dist/src/primitives/utils/chainFunctions.js +14 -3
- package/dist/src/primitives/utils/chainFunctions.js.map +1 -1
- package/dist/src/primitives/utils/createSpriteMap.js.map +1 -1
- package/dist/src/primitives/utils/handleNavigation.js +11 -2
- package/dist/src/primitives/utils/handleNavigation.js.map +1 -1
- package/dist/src/primitives/utils/withScrolling.d.ts +3 -0
- package/dist/src/primitives/utils/withScrolling.js +14 -1
- package/dist/src/primitives/utils/withScrolling.js.map +1 -1
- package/dist/src/render.d.ts +5 -5
- package/dist/src/render.js +8 -6
- package/dist/src/render.js.map +1 -1
- package/dist/src/solidOpts.d.ts +7 -0
- package/dist/src/solidOpts.js +39 -7
- package/dist/src/solidOpts.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/{src/jsx-runtime.ts → jsx-runtime.d.ts} +3 -3
- package/package.json +23 -8
- package/src/devtools/index.ts +77 -0
- package/src/index.ts +1 -1
- package/src/primitives/Column.tsx +2 -2
- package/src/primitives/FPSCounter.tsx +61 -61
- package/src/primitives/Grid.tsx +59 -35
- package/src/primitives/Lazy.tsx +21 -12
- package/src/primitives/Marquee.tsx +149 -0
- package/src/primitives/Preserve.tsx +18 -0
- package/src/primitives/Row.tsx +1 -1
- package/src/primitives/Suspense.tsx +41 -0
- package/src/primitives/announcer/announcer.ts +9 -10
- package/src/primitives/announcer/index.ts +12 -2
- package/src/primitives/announcer/speech.ts +82 -28
- package/src/primitives/index.ts +9 -1
- package/src/primitives/types.ts +9 -0
- package/src/primitives/useHold.ts +69 -0
- package/src/primitives/utils/chainFunctions.ts +40 -9
- package/src/primitives/utils/createSpriteMap.ts +2 -2
- package/src/primitives/utils/handleNavigation.ts +11 -2
- package/src/primitives/utils/withScrolling.ts +25 -2
- package/src/render.ts +12 -12
- package/src/solidOpts.ts +51 -7
- 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,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
|
|
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 (<
|
|
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,
|
|
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"}
|
|
@@ -37,7 +37,9 @@ function onFocusChangeCore(focusPath = []) {
|
|
|
37
37
|
}
|
|
38
38
|
prevFocusPath = focusPath.slice(0);
|
|
39
39
|
const toAnnounceText = [];
|
|
40
|
-
const toAnnounce = focusDiff
|
|
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":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,YAAoD,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAqBlD,IAAI,mBAAoD,CAAC;AACzD,IAAI,aAAa,GAAkB,EAAE,CAAC;AACtC,IAAI,iBAA2C,CAAC;AAChD,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAC7B,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,SAAS,iBAAiB,CACxB,QAA+B,EAC/B,IAAa;IAEb,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,WAAc,CAAC;IAEnB,MAAM,SAAS,GAAG,CAAC,QAAW,EAAE,EAAE;QAChC,WAAW,GAAG,QAAQ,CAAC;QACvB,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,SAAS,CAAC,KAAK,GAAG,GAAG,EAAE;QACrB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAEhC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,GAAgB;IAClC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAW,CAAC;AACxC,CAAC;AAED,SAAS,iBAAiB,CAAC,YAA2B,EAAE;IACtD,IAAI,CAAC,SAAS,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACnD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1E,mBAAmB,EAAE,CAAC;IAEtB,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;QACvC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,MAAM,cAAc,GAAiB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"announcer.js","sourceRoot":"","sources":["../../../../src/primitives/announcer/announcer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,YAAoD,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAqBlD,IAAI,mBAAoD,CAAC;AACzD,IAAI,aAAa,GAAkB,EAAE,CAAC;AACtC,IAAI,iBAA2C,CAAC;AAChD,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAC7B,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,SAAS,iBAAiB,CACxB,QAA+B,EAC/B,IAAa;IAEb,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,WAAc,CAAC;IAEnB,MAAM,SAAS,GAAG,CAAC,QAAW,EAAE,EAAE;QAChC,WAAW,GAAG,QAAQ,CAAC;QACvB,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,SAAS,CAAC,KAAK,GAAG,GAAG,EAAE;QACrB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAEhC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,GAAgB;IAClC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAW,CAAC;AACxC,CAAC;AAED,SAAS,iBAAiB,CAAC,YAA2B,EAAE;IACtD,IAAI,CAAC,SAAS,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACnD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1E,mBAAmB,EAAE,CAAC;IAEtB,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;QACvC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,MAAM,cAAc,GAAiB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,SAAS;SACzB,OAAO,EAAE;SACT,MAAM,CAAC,CAAC,GAAmC,EAAE,GAAG,EAAE,EAAE;QACnD,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAET,SAAS,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACtC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;YAC5D,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,UAAU,CAAC,CAAC;IAEf,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC,KAAK,CACpB,cAAc,CAAC,MAAM,CAAC,CAAC,GAAiB,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CACvE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAmB,EAAE,IAAY,EAAE,KAAc;IACrE,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,iBAAiB,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClE,CAAC;AAqBD,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,OAAO;IACb,MAAM,EAAE;QACN,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;IAClD,CAAC;IACD,cAAc,EAAE,UAAU,KAAK,GAAG,CAAC;QACjC,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9C,mBAAmB,EAAE,CAAC;IACxB,CAAC;IACD,KAAK,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,GAAG,EAAE;QAClE,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACjD,IAAI,MAAM,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBAC5D,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,MAAM,EAAE,CAAC;gBACnB,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,gBAAgB,GAAG,IAAI,CAAC;gBACxB,iBAAiB,EAAE,MAAM;qBACtB,OAAO,CAAC,GAAG,EAAE;oBACZ,gBAAgB,GAAG,KAAK,CAAC;oBACzB,SAAS,CAAC,OAAO,EAAE,CAAC;gBACtB,CAAC,CAAC;qBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,iBAAiC,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,UAAU,KAAK,GAAG,CAAC;QAC1B,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAChC,SAAS,CAAC,aAAa;YACrB,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,WAAW,EAAE,UAAU,EACrB,aAAa,GAAG,GAAG,EACnB,kBAAkB,GAAG,WAAW,GACjC,GAAG,EAAE;QACJ,SAAS,CAAC,aAAa,GAAG,iBAAiB,CACzC,iBAAiB,EACjB,aAAa,CACd,CAAC;QAEF,mBAAmB,GAAG,iBAAiB,CAAC,GAAG,EAAE;YAC3C,qCAAqC;YACrC,aAAa,GAAG,EAAE,CAAC;QACrB,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACzB,CAAC;CACF,CAAC"}
|
|
@@ -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
|
-
|
|
5
|
-
|
|
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,
|
|
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
|
-
|
|
66
|
-
|
|
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'
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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 (
|
|
77
|
-
//
|
|
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(
|
|
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
|
-
|
|
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
|
-
//
|
|
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((
|
|
140
|
-
|
|
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":"
|
|
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,
|
|
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;
|