@lightningtv/solid 2.12.0 → 2.12.2
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/dist/src/primitives/announcer/announcer.d.ts +1 -0
- package/dist/src/primitives/announcer/announcer.js +4 -3
- package/dist/src/primitives/announcer/announcer.js.map +1 -1
- package/dist/src/primitives/announcer/speech.d.ts +1 -1
- package/dist/src/primitives/announcer/speech.js +98 -8
- package/dist/src/primitives/announcer/speech.js.map +1 -1
- package/dist/src/primitives/useMouse.d.ts +19 -1
- package/dist/src/primitives/useMouse.js +142 -59
- package/dist/src/primitives/useMouse.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -3
- package/src/primitives/announcer/announcer.ts +10 -3
- package/src/primitives/announcer/speech.ts +113 -6
- package/src/primitives/useMouse.ts +254 -81
|
@@ -70,16 +70,17 @@ function onFocusChangeCore(focusPath = []) {
|
|
|
70
70
|
return Announcer.speak(toAnnounceText.reduce((acc, val) => acc.concat(val), []));
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
-
function textToSpeech(toSpeak, lang, voice) {
|
|
73
|
+
function textToSpeech(toSpeak, aria, lang, voice) {
|
|
74
74
|
if (voiceOutDisabled) {
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
|
-
return (currentlySpeaking = SpeechEngine(toSpeak, lang, voice));
|
|
77
|
+
return (currentlySpeaking = SpeechEngine(toSpeak, aria, lang, voice));
|
|
78
78
|
}
|
|
79
79
|
export const Announcer = {
|
|
80
80
|
debug: false,
|
|
81
81
|
enabled: true,
|
|
82
82
|
lang: 'en-US',
|
|
83
|
+
aria: false,
|
|
83
84
|
cancel: function () {
|
|
84
85
|
currentlySpeaking && currentlySpeaking.cancel();
|
|
85
86
|
},
|
|
@@ -94,7 +95,7 @@ export const Announcer = {
|
|
|
94
95
|
}
|
|
95
96
|
else {
|
|
96
97
|
Announcer.cancel();
|
|
97
|
-
textToSpeech(text, Announcer.lang, Announcer.voice);
|
|
98
|
+
textToSpeech(text, Announcer.aria, Announcer.lang, Announcer.voice);
|
|
98
99
|
}
|
|
99
100
|
if (notification) {
|
|
100
101
|
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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"}
|
|
@@ -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, voice?: string): SeriesResult;
|
|
9
|
+
export default function (toSpeak: SpeechType, aria: boolean, lang?: string, voice?: string): SeriesResult;
|
|
10
10
|
export {};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
const ARIA_PARENT_ID = 'aria-parent';
|
|
2
|
+
let ariaLabelPhrases = [];
|
|
1
3
|
/* global SpeechSynthesisErrorEvent */
|
|
2
4
|
function flattenStrings(series = []) {
|
|
3
5
|
const flattenedSeries = [];
|
|
@@ -22,6 +24,72 @@ function delay(pause) {
|
|
|
22
24
|
setTimeout(resolve, pause);
|
|
23
25
|
});
|
|
24
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* @description This function is called at the end of the speak series
|
|
29
|
+
* @param Phrase is an object containing the text and the language
|
|
30
|
+
*/
|
|
31
|
+
function addChildrenToAriaDiv(phrase) {
|
|
32
|
+
if (phrase?.text?.trim().length === 0)
|
|
33
|
+
return;
|
|
34
|
+
ariaLabelPhrases.push(phrase);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @description This function is triggered finally when the speak series is finished and we are to speak the aria labels
|
|
38
|
+
*/
|
|
39
|
+
function focusElementForAria() {
|
|
40
|
+
const element = createAriaElement();
|
|
41
|
+
if (!element) {
|
|
42
|
+
console.error(`ARIA div not found: ${ARIA_PARENT_ID}`);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
for (const object of ariaLabelPhrases) {
|
|
46
|
+
const span = document.createElement('span');
|
|
47
|
+
// TODO: Not sure LG or Samsung support lang attribute on span or switching language
|
|
48
|
+
span.setAttribute('lang', object.lang);
|
|
49
|
+
span.setAttribute('aria-label', object.text);
|
|
50
|
+
element.appendChild(span);
|
|
51
|
+
}
|
|
52
|
+
// Cleanup
|
|
53
|
+
setTimeout(() => {
|
|
54
|
+
ariaLabelPhrases = [];
|
|
55
|
+
cleanAriaLabelParent();
|
|
56
|
+
focusCanvas();
|
|
57
|
+
}, 100);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @description Clean the aria label parent after speaking
|
|
61
|
+
*/
|
|
62
|
+
function cleanAriaLabelParent() {
|
|
63
|
+
const parentTag = document.getElementById(ARIA_PARENT_ID);
|
|
64
|
+
if (parentTag) {
|
|
65
|
+
while (parentTag.firstChild) {
|
|
66
|
+
parentTag.removeChild(parentTag.firstChild);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* @description Focus the canvas element
|
|
72
|
+
*/
|
|
73
|
+
function focusCanvas() {
|
|
74
|
+
const canvas = document.getElementById('app')?.firstChild;
|
|
75
|
+
canvas?.focus();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @description Create the aria element in the DOM if it doesn't exist
|
|
79
|
+
* @private For xbox, we may need to create a different element each time we wanna use aria
|
|
80
|
+
*/
|
|
81
|
+
function createAriaElement() {
|
|
82
|
+
const aria_container = document.getElementById(ARIA_PARENT_ID);
|
|
83
|
+
if (!aria_container) {
|
|
84
|
+
const element = document.createElement('div');
|
|
85
|
+
element.setAttribute('id', ARIA_PARENT_ID);
|
|
86
|
+
element.setAttribute('aria-live', 'assertive');
|
|
87
|
+
element.setAttribute('tabindex', '0');
|
|
88
|
+
document.body.appendChild(element);
|
|
89
|
+
return element;
|
|
90
|
+
}
|
|
91
|
+
return aria_container;
|
|
92
|
+
}
|
|
25
93
|
/**
|
|
26
94
|
* Speak a string
|
|
27
95
|
*
|
|
@@ -54,7 +122,7 @@ function speak(phrase, utterances, lang = 'en-US', voiceName) {
|
|
|
54
122
|
synth.speak(utterance);
|
|
55
123
|
});
|
|
56
124
|
}
|
|
57
|
-
function speakSeries(series, lang, voice, root = true) {
|
|
125
|
+
function speakSeries(series, aria, lang, voice, root = true) {
|
|
58
126
|
const synth = window.speechSynthesis;
|
|
59
127
|
const remainingPhrases = flattenStrings(Array.isArray(series) ? series : [series]);
|
|
60
128
|
const nestedSeriesResults = [];
|
|
@@ -83,7 +151,10 @@ function speakSeries(series, lang, voice, root = true) {
|
|
|
83
151
|
let retriesLeft = totalRetries;
|
|
84
152
|
while (active && retriesLeft > 0) {
|
|
85
153
|
try {
|
|
86
|
-
|
|
154
|
+
if (aria)
|
|
155
|
+
addChildrenToAriaDiv({ text: phrase, lang });
|
|
156
|
+
else
|
|
157
|
+
await speak(phrase, utterances, lang, voice);
|
|
87
158
|
retriesLeft = 0; // Exit retry loop on success
|
|
88
159
|
}
|
|
89
160
|
catch (e) {
|
|
@@ -117,8 +188,13 @@ function speakSeries(series, lang, voice, root = true) {
|
|
|
117
188
|
const objectVoice = phrase?.voice;
|
|
118
189
|
while (active && retriesLeft > 0) {
|
|
119
190
|
try {
|
|
120
|
-
|
|
121
|
-
|
|
191
|
+
if (text) {
|
|
192
|
+
if (aria)
|
|
193
|
+
addChildrenToAriaDiv({ text, lang: objectLang });
|
|
194
|
+
else
|
|
195
|
+
await speak(text, utterances, objectLang, objectVoice?.name);
|
|
196
|
+
retriesLeft = 0; // Exit retry loop on success
|
|
197
|
+
}
|
|
122
198
|
}
|
|
123
199
|
catch (e) {
|
|
124
200
|
if (e instanceof SpeechSynthesisErrorEvent) {
|
|
@@ -144,13 +220,13 @@ function speakSeries(series, lang, voice, root = true) {
|
|
|
144
220
|
}
|
|
145
221
|
else if (typeof phrase === 'function') {
|
|
146
222
|
// Handle functions
|
|
147
|
-
const seriesResult = speakSeries(phrase(), lang, voice, false);
|
|
223
|
+
const seriesResult = speakSeries(phrase(), aria, lang, voice, false);
|
|
148
224
|
nestedSeriesResults.push(seriesResult);
|
|
149
225
|
await seriesResult.series;
|
|
150
226
|
}
|
|
151
227
|
else if (Array.isArray(phrase)) {
|
|
152
228
|
// Handle nested arrays
|
|
153
|
-
const seriesResult = speakSeries(phrase, lang, voice, false);
|
|
229
|
+
const seriesResult = speakSeries(phrase, aria, lang, voice, false);
|
|
154
230
|
nestedSeriesResults.push(seriesResult);
|
|
155
231
|
await seriesResult.series;
|
|
156
232
|
}
|
|
@@ -158,6 +234,10 @@ function speakSeries(series, lang, voice, root = true) {
|
|
|
158
234
|
}
|
|
159
235
|
finally {
|
|
160
236
|
active = false;
|
|
237
|
+
// Call completion logic only for the original (root) series
|
|
238
|
+
if (root && aria) {
|
|
239
|
+
focusElementForAria();
|
|
240
|
+
}
|
|
161
241
|
}
|
|
162
242
|
})();
|
|
163
243
|
return {
|
|
@@ -173,6 +253,16 @@ function speakSeries(series, lang, voice, root = true) {
|
|
|
173
253
|
return;
|
|
174
254
|
}
|
|
175
255
|
if (root) {
|
|
256
|
+
if (aria) {
|
|
257
|
+
const element = createAriaElement();
|
|
258
|
+
if (element) {
|
|
259
|
+
ariaLabelPhrases = [];
|
|
260
|
+
cleanAriaLabelParent();
|
|
261
|
+
element.focus();
|
|
262
|
+
focusCanvas();
|
|
263
|
+
}
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
176
266
|
synth.cancel(); // Cancel all ongoing speech
|
|
177
267
|
}
|
|
178
268
|
nestedSeriesResults.forEach((nestedSeriesResult) => {
|
|
@@ -183,9 +273,9 @@ function speakSeries(series, lang, voice, root = true) {
|
|
|
183
273
|
};
|
|
184
274
|
}
|
|
185
275
|
let currentSeries;
|
|
186
|
-
export default function (toSpeak, lang = 'en-US', voice) {
|
|
276
|
+
export default function (toSpeak, aria, lang = 'en-US', voice) {
|
|
187
277
|
currentSeries && currentSeries.cancel();
|
|
188
|
-
currentSeries = speakSeries(toSpeak, lang, voice);
|
|
278
|
+
currentSeries = speakSeries(toSpeak, aria, lang, voice);
|
|
189
279
|
return currentSeries;
|
|
190
280
|
}
|
|
191
281
|
//# 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":"AAgBA,MAAM,cAAc,GAAG,aAAa,CAAC;AACrC,IAAI,gBAAgB,GAAgB,EAAE,CAAC;AAEvC,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;;;GAGG;AACH,SAAS,oBAAoB,CAAC,MAAiB;IAC7C,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9C,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB;IAC1B,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uBAAuB,cAAc,EAAE,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAE5C,oFAAoF;QACpF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,UAAU;IACV,UAAU,CAAC,GAAG,EAAE;QACd,gBAAgB,GAAG,EAAE,CAAC;QACtB,oBAAoB,EAAE,CAAC;QACvB,WAAW,EAAE,CAAC;IAChB,CAAC,EAAE,GAAG,CAAC,CAAC;AACV,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB;IAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC1D,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC,UAAU,EAAE,CAAC;YAC5B,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW;IAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAyB,CAAC;IACzE,MAAM,EAAE,KAAK,EAAE,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB;IACxB,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAE/D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC3C,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC/C,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,KAAK,CACZ,MAAc,EACd,UAAsC,EACtC,IAAI,GAAG,OAAO,EACd,SAAkB;IAElB,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC;IAErC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,aAAa,CAAC;QAClB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YAC1C,aAAa;gBACX,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACvD,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,IAAI,aAAa,EAAE,CAAC;YAClB,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC;QAClC,CAAC;QACD,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,IAAa,EACb,IAAY,EACZ,KAAc,EACd,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,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,MAAM,CAAC,mBAAmB;gBAC5B,CAAC;gBAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5D,gBAAgB;oBAChB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;oBACvD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;wBAClB,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;qBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACtC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,SAAS,CAAC,qBAAqB;oBACjC,CAAC;oBACD,0CAA0C;oBAC1C,MAAM,YAAY,GAAG,CAAC,CAAC;oBACvB,IAAI,WAAW,GAAG,YAAY,CAAC;oBAE/B,OAAO,MAAM,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;wBACjC,IAAI,CAAC;4BACH,IAAI,IAAI;gCAAE,oBAAoB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;;gCAClD,MAAM,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;4BAClD,WAAW,GAAG,CAAC,CAAC,CAAC,6BAA6B;wBAChD,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,MAAM,YAAY,wBAAwB,EAAE,CAAC;oBACtD,2DAA2D;oBAC3D,MAAM,YAAY,GAAG,CAAC,CAAC;oBACvB,IAAI,WAAW,GAAG,YAAY,CAAC;oBAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;oBACzB,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,CAAC;oBAChC,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,CAAC;oBAElC,OAAO,MAAM,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;wBACjC,IAAI,CAAC;4BACH,IAAI,IAAI,EAAE,CAAC;gCACT,IAAI,IAAI;oCAAE,oBAAoB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;;oCAEzD,MAAM,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;gCAC/D,WAAW,GAAG,CAAC,CAAC,CAAC,6BAA6B;4BAChD,CAAC;wBACH,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,mBAAmB;oBACnB,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBACrE,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,uBAAuB;oBACvB,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBACnE,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;YACf,4DAA4D;YAC5D,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,mBAAmB,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,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;YAED,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;oBAEpC,IAAI,OAAO,EAAE,CAAC;wBACZ,gBAAgB,GAAG,EAAE,CAAC;wBACtB,oBAAoB,EAAE,CAAC;wBACvB,OAAO,CAAC,KAAK,EAAE,CAAC;wBAChB,WAAW,EAAE,CAAC;oBAChB,CAAC;oBAED,OAAO;gBACT,CAAC;gBAED,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,4BAA4B;YAC9C,CAAC;YACD,mBAAmB,CAAC,OAAO,CAAC,CAAC,kBAAkB,EAAE,EAAE;gBACjD,kBAAkB,CAAC,MAAM,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,IAAI,aAAuC,CAAC;AAC5C,MAAM,CAAC,OAAO,WACZ,OAAmB,EACnB,IAAa,EACb,OAAe,OAAO,EACtB,KAAc;IAEd,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;IACxC,aAAa,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -1,8 +1,26 @@
|
|
|
1
|
+
import type { ElementText, TextNode } from '@lightningtv/core';
|
|
1
2
|
import { ElementNode } from '@lightningtv/solid';
|
|
3
|
+
type CustomState = `$${string}`;
|
|
4
|
+
type RenderableNode = ElementNode | ElementText | TextNode;
|
|
5
|
+
interface MouseStateOptions {
|
|
6
|
+
hoverState: CustomState;
|
|
7
|
+
pressedState: CustomState;
|
|
8
|
+
pressedStateDuration?: number;
|
|
9
|
+
}
|
|
10
|
+
type UseMouseOptions = {
|
|
11
|
+
customStates: MouseStateOptions;
|
|
12
|
+
} | {
|
|
13
|
+
customStates: undefined;
|
|
14
|
+
};
|
|
2
15
|
declare module '@lightningtv/core' {
|
|
3
16
|
interface ElementNode {
|
|
17
|
+
onEnter?: () => void;
|
|
4
18
|
/** function to be called on mouse click */
|
|
5
19
|
onMouseClick?: (this: ElementNode, event: MouseEvent, active: ElementNode) => void;
|
|
6
20
|
}
|
|
7
21
|
}
|
|
8
|
-
export declare function
|
|
22
|
+
export declare function addCustomStateToElement(element: RenderableNode, state: CustomState): void;
|
|
23
|
+
export declare function removeCustomStateFromElement(element: RenderableNode, state: CustomState): void;
|
|
24
|
+
export declare function hasCustomState(element: RenderableNode, state: CustomState): boolean;
|
|
25
|
+
export declare function useMouse<TApp extends ElementNode = ElementNode>(myApp?: TApp, throttleBy?: number, options?: UseMouseOptions): void;
|
|
26
|
+
export {};
|
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
import { ElementNode, activeElement, isElementNode, isTextNode, rootNode,
|
|
1
|
+
import { Config, ElementNode, activeElement, isElementNode, isFunc, isTextNode, rootNode, } from '@lightningtv/solid';
|
|
2
2
|
import { makeEventListener } from '@solid-primitives/event-listener';
|
|
3
3
|
import { useMousePosition } from '@solid-primitives/mouse';
|
|
4
4
|
import { createScheduled, throttle } from '@solid-primitives/scheduled';
|
|
5
|
-
import { createEffect } from 'solid-js';
|
|
5
|
+
import { createEffect, getOwner, runWithOwner } from 'solid-js';
|
|
6
|
+
const DEFAULT_PRESSED_STATE_DURATION = 150;
|
|
7
|
+
export function addCustomStateToElement(element, state) {
|
|
8
|
+
element.states?.add(state);
|
|
9
|
+
}
|
|
10
|
+
export function removeCustomStateFromElement(element, state) {
|
|
11
|
+
element?.states?.remove(state);
|
|
12
|
+
}
|
|
13
|
+
export function hasCustomState(element, state) {
|
|
14
|
+
return element.states?.has(state);
|
|
15
|
+
}
|
|
6
16
|
function createKeyboardEvent(key, keyCode, eventName = 'keydown') {
|
|
7
17
|
return new KeyboardEvent(eventName, {
|
|
8
18
|
key,
|
|
@@ -32,33 +42,105 @@ const handleScroll = throttle((e) => {
|
|
|
32
42
|
document.body.dispatchEvent(createKeyboardEvent('ArrowDown', 40, 'keyup'));
|
|
33
43
|
}, 250);
|
|
34
44
|
}, 250);
|
|
35
|
-
|
|
45
|
+
function findElementWithCustomState(myApp, x, y, customState) {
|
|
46
|
+
const result = getChildrenByPosition(myApp, x, y).filter((el) => hasCustomState(el, customState));
|
|
47
|
+
if (result.length === 0) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
let element = result[result.length - 1];
|
|
51
|
+
while (element) {
|
|
52
|
+
const elmParent = element.parent;
|
|
53
|
+
if (elmParent?.forwardStates && hasCustomState(elmParent, customState)) {
|
|
54
|
+
element = elmParent;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return element;
|
|
61
|
+
}
|
|
62
|
+
function findElementByActiveElement(e) {
|
|
36
63
|
const active = activeElement();
|
|
37
64
|
const precision = Config.rendererOptions?.deviceLogicalPixelRatio || 1;
|
|
38
65
|
if (active instanceof ElementNode &&
|
|
39
66
|
testCollision(e.clientX, e.clientY, (active.lng.absX || 0) * precision, (active.lng.absY || 0) * precision, (active.width || 0) * precision, (active.height || 0) * precision)) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
67
|
+
return active;
|
|
68
|
+
}
|
|
69
|
+
let parent = active?.parent;
|
|
70
|
+
while (parent) {
|
|
71
|
+
if (isFunc(parent.onMouseClick) &&
|
|
72
|
+
active &&
|
|
73
|
+
testCollision(e.clientX, e.clientY, (parent.lng.absX || 0) * precision, (parent.lng.absY || 0) * precision, (parent.width || 0) * precision, (parent.height || 0) * precision)) {
|
|
74
|
+
return parent;
|
|
43
75
|
}
|
|
76
|
+
parent = parent.parent;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
function applyPressedState(element, pressedState, pressedStateDuration = DEFAULT_PRESSED_STATE_DURATION) {
|
|
81
|
+
addCustomStateToElement(element, pressedState);
|
|
82
|
+
setTimeout(() => {
|
|
83
|
+
removeCustomStateFromElement(element, pressedState);
|
|
84
|
+
}, pressedStateDuration);
|
|
85
|
+
}
|
|
86
|
+
function handleElementClick(clickedElement, e, customStates) {
|
|
87
|
+
if (customStates?.pressedState) {
|
|
88
|
+
applyPressedState(clickedElement, customStates.pressedState, customStates.pressedStateDuration);
|
|
89
|
+
}
|
|
90
|
+
if (isFunc(clickedElement.onMouseClick)) {
|
|
91
|
+
clickedElement.onMouseClick(e, clickedElement);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
else if (isFunc(clickedElement.onEnter)) {
|
|
95
|
+
clickedElement.onEnter();
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
clickedElement.setFocus();
|
|
99
|
+
setTimeout(() => {
|
|
44
100
|
document.dispatchEvent(createKeyboardEvent('Enter', 13));
|
|
45
101
|
setTimeout(() => document.body.dispatchEvent(createKeyboardEvent('Enter', 13, 'keyup')), 1);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
parent = parent.parent;
|
|
102
|
+
}, 1);
|
|
103
|
+
}
|
|
104
|
+
function createHandleClick(myApp, customStates) {
|
|
105
|
+
return (e) => {
|
|
106
|
+
const clickedElement = customStates
|
|
107
|
+
? findElementWithCustomState(myApp, e.clientX, e.clientY, customStates.hoverState)
|
|
108
|
+
: findElementByActiveElement(e);
|
|
109
|
+
if (!clickedElement) {
|
|
110
|
+
return;
|
|
56
111
|
}
|
|
57
|
-
|
|
58
|
-
};
|
|
112
|
+
handleElementClick(clickedElement, e, customStates);
|
|
113
|
+
};
|
|
114
|
+
}
|
|
59
115
|
function testCollision(px, py, cx, cy, cw = 0, ch = 0) {
|
|
60
116
|
return px >= cx && px <= cx + cw && py >= cy && py <= cy + ch;
|
|
61
117
|
}
|
|
118
|
+
function isNodeAtPosition(node, x, y, precision) {
|
|
119
|
+
if (!isElementNode(node)) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
return (node.alpha !== 0 &&
|
|
123
|
+
!node.skipFocus &&
|
|
124
|
+
testCollision(x, y, (node.lng.absX || 0) * precision, (node.lng.absY || 0) * precision, (node.width || 0) * precision, (node.height || 0) * precision));
|
|
125
|
+
}
|
|
126
|
+
function findHighestZIndexNode(nodes) {
|
|
127
|
+
if (nodes.length === 0) {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
if (nodes.length === 1) {
|
|
131
|
+
return nodes[0];
|
|
132
|
+
}
|
|
133
|
+
let maxZIndex = -1;
|
|
134
|
+
let highestNode = undefined;
|
|
135
|
+
for (const node of nodes) {
|
|
136
|
+
const zIndex = node.zIndex ?? -1;
|
|
137
|
+
if (zIndex >= maxZIndex) {
|
|
138
|
+
maxZIndex = zIndex;
|
|
139
|
+
highestNode = node;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return highestNode;
|
|
143
|
+
}
|
|
62
144
|
function getChildrenByPosition(node, x, y) {
|
|
63
145
|
const result = [];
|
|
64
146
|
const precision = Config.rendererOptions?.deviceLogicalPixelRatio || 1;
|
|
@@ -66,72 +148,73 @@ function getChildrenByPosition(node, x, y) {
|
|
|
66
148
|
let queue = [node];
|
|
67
149
|
while (queue.length > 0) {
|
|
68
150
|
// Process nodes at the current level
|
|
69
|
-
const currentLevelNodes =
|
|
70
|
-
|
|
71
|
-
if (isElementNode(currentNode) &&
|
|
72
|
-
currentNode.alpha !== 0 &&
|
|
73
|
-
!currentNode.skipFocus &&
|
|
74
|
-
testCollision(x, y, (currentNode.lng.absX || 0) * precision, (currentNode.lng.absY || 0) * precision, (currentNode.width || 0) * precision, (currentNode.height || 0) * precision)) {
|
|
75
|
-
currentLevelNodes.push(currentNode);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
const size = currentLevelNodes.length;
|
|
79
|
-
if (size === 0) {
|
|
151
|
+
const currentLevelNodes = queue.filter((currentNode) => isNodeAtPosition(currentNode, x, y, precision));
|
|
152
|
+
if (currentLevelNodes.length === 0) {
|
|
80
153
|
break;
|
|
81
154
|
}
|
|
82
|
-
|
|
83
|
-
if (
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
let maxZIndex = -1;
|
|
88
|
-
for (const node of currentLevelNodes) {
|
|
89
|
-
const zIndex = node.zIndex ?? -1;
|
|
90
|
-
if (zIndex > maxZIndex) {
|
|
91
|
-
maxZIndex = zIndex;
|
|
92
|
-
highestZIndexNode = node;
|
|
93
|
-
}
|
|
94
|
-
else if (zIndex === maxZIndex) {
|
|
95
|
-
highestZIndexNode = node;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
if (highestZIndexNode && !isTextNode(highestZIndexNode)) {
|
|
100
|
-
result.push(highestZIndexNode);
|
|
101
|
-
queue = highestZIndexNode.children;
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
queue = [];
|
|
155
|
+
const highestZIndexNode = findHighestZIndexNode(currentLevelNodes);
|
|
156
|
+
if (!highestZIndexNode || isTextNode(highestZIndexNode)) {
|
|
157
|
+
break;
|
|
105
158
|
}
|
|
159
|
+
result.push(highestZIndexNode);
|
|
160
|
+
queue = highestZIndexNode.children;
|
|
106
161
|
}
|
|
107
162
|
return result;
|
|
108
163
|
}
|
|
109
|
-
export function useMouse(myApp = rootNode, throttleBy = 100) {
|
|
164
|
+
export function useMouse(myApp = rootNode, throttleBy = 100, options) {
|
|
110
165
|
const pos = useMousePosition();
|
|
111
166
|
const scheduled = createScheduled((fn) => throttle(fn, throttleBy));
|
|
167
|
+
let previousElement = null;
|
|
168
|
+
const customStates = options?.customStates;
|
|
169
|
+
const hoverState = customStates?.hoverState;
|
|
170
|
+
const handleClick = createHandleClick(myApp, customStates);
|
|
171
|
+
const owner = getOwner();
|
|
172
|
+
const handleClickContext = (e) => {
|
|
173
|
+
runWithOwner(owner, () => handleClick(e));
|
|
174
|
+
};
|
|
112
175
|
makeEventListener(window, 'wheel', handleScroll);
|
|
113
|
-
makeEventListener(window, 'click',
|
|
176
|
+
makeEventListener(window, 'click', handleClickContext);
|
|
114
177
|
createEffect(() => {
|
|
115
178
|
if (scheduled()) {
|
|
116
|
-
const result = getChildrenByPosition(myApp, pos.x, pos.y).filter((el) => el.
|
|
179
|
+
const result = getChildrenByPosition(myApp, pos.x, pos.y).filter((el) => !!(el.onEnter ||
|
|
180
|
+
el.onMouseClick ||
|
|
181
|
+
el.onFocus ||
|
|
182
|
+
el[Config.focusStateKey] ||
|
|
183
|
+
(hoverState ? el[hoverState] : false)));
|
|
117
184
|
if (result.length) {
|
|
118
185
|
let activeElm = result[result.length - 1];
|
|
119
186
|
while (activeElm) {
|
|
120
187
|
const elmParent = activeElm.parent;
|
|
121
188
|
if (elmParent?.forwardStates) {
|
|
122
|
-
activeElm =
|
|
189
|
+
activeElm = elmParent;
|
|
123
190
|
}
|
|
124
191
|
else {
|
|
125
192
|
break;
|
|
126
193
|
}
|
|
127
194
|
}
|
|
195
|
+
if (!activeElm) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
128
198
|
// Update Row & Column Selected property
|
|
129
|
-
const activeElmParent = activeElm
|
|
130
|
-
if (
|
|
199
|
+
const activeElmParent = activeElm.parent;
|
|
200
|
+
if (activeElmParent?.selected !== undefined) {
|
|
131
201
|
activeElmParent.selected =
|
|
132
202
|
activeElmParent.children.indexOf(activeElm);
|
|
133
203
|
}
|
|
134
|
-
activeElm
|
|
204
|
+
if (previousElement && previousElement !== activeElm && hoverState) {
|
|
205
|
+
removeCustomStateFromElement(previousElement, hoverState);
|
|
206
|
+
}
|
|
207
|
+
if (hoverState) {
|
|
208
|
+
addCustomStateToElement(activeElm, hoverState);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
activeElm.setFocus();
|
|
212
|
+
}
|
|
213
|
+
previousElement = activeElm;
|
|
214
|
+
}
|
|
215
|
+
else if (previousElement && hoverState) {
|
|
216
|
+
removeCustomStateFromElement(previousElement, hoverState);
|
|
217
|
+
previousElement = null;
|
|
135
218
|
}
|
|
136
219
|
}
|
|
137
220
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMouse.js","sourceRoot":"","sources":["../../../src/primitives/useMouse.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,QAAQ,
|
|
1
|
+
{"version":3,"file":"useMouse.js","sourceRoot":"","sources":["../../../src/primitives/useMouse.ts"],"names":[],"mappings":"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"}
|