@applicaster/zapp-react-dom-app 13.0.0-alpha.2635505531 → 13.0.0-alpha.3013227535
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/App/InteractionManager/index.tsx +43 -47
- package/App/Loader/__tests__/__snapshots__/loadDomPlugins.test.js.snap +6 -6
- package/App/Loader/loadLocale.js +2 -2
- package/App/Loader/utils/platform.js +46 -26
- package/Polyfills/Storage/__tests__/__snapshots__/storage.test.js.snap +4 -4
- package/package.json +17 -7
|
@@ -23,8 +23,6 @@ import {
|
|
|
23
23
|
|
|
24
24
|
import { showConfirmationDialog } from "@applicaster/zapp-react-native-utils/alertUtils";
|
|
25
25
|
|
|
26
|
-
import { withUseSeek } from "@applicaster/zapp-react-native-utils/reactHooks/player";
|
|
27
|
-
|
|
28
26
|
import {
|
|
29
27
|
DISPLAY_STATES,
|
|
30
28
|
DisplayStateContext,
|
|
@@ -48,6 +46,7 @@ import {
|
|
|
48
46
|
|
|
49
47
|
import { OnScreenKeyboard } from "@applicaster/zapp-react-dom-ui-components/Components/OnScreenKeyboard";
|
|
50
48
|
import { KeyboardLongPressManager } from "@applicaster/zapp-react-dom-ui-components/Utils/KeyboardLongPressManager";
|
|
49
|
+
import { KeyInputHandler } from "@applicaster/zapp-react-native-utils/appUtils/keyInputHandler/KeyInputHandler";
|
|
51
50
|
|
|
52
51
|
const { withXray } = getXray();
|
|
53
52
|
const globalAny: any = global;
|
|
@@ -62,14 +61,6 @@ type Props = {
|
|
|
62
61
|
navigator: QuickBrickAppNavigator;
|
|
63
62
|
rivers: {};
|
|
64
63
|
xray: XRayContext;
|
|
65
|
-
seekMethods: {
|
|
66
|
-
onRewindPress: () => void;
|
|
67
|
-
onRewindLongPress: () => void;
|
|
68
|
-
onForwardPress: () => void;
|
|
69
|
-
onForwardLongPress: () => void;
|
|
70
|
-
onRewindPressOut: () => void;
|
|
71
|
-
onForwardPressOut: () => void;
|
|
72
|
-
};
|
|
73
64
|
confirmDialog: typeof confirmationDialogStore;
|
|
74
65
|
};
|
|
75
66
|
|
|
@@ -344,14 +335,37 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
344
335
|
}
|
|
345
336
|
|
|
346
337
|
onKeyUp(event: KeyboardEvent) {
|
|
338
|
+
const { setDisplayState } = this.props;
|
|
339
|
+
|
|
347
340
|
if (this.keySupportsLongPress(event)) {
|
|
348
341
|
this.longPressDetector.endKeyPressMonitoring(event.code);
|
|
349
342
|
}
|
|
343
|
+
|
|
344
|
+
if (
|
|
345
|
+
keyCode(event).matches(KEYS.Enter) ||
|
|
346
|
+
(__DEV__ && keyCode(event).matches(KEYS.X))
|
|
347
|
+
) {
|
|
348
|
+
focusManager.pressOut();
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
if (
|
|
352
|
+
keyCode(event).matches(KEYS.Forward) ||
|
|
353
|
+
(__DEV__ && keyCode(event).matches(KEYS.C))
|
|
354
|
+
) {
|
|
355
|
+
setDisplayState(DISPLAY_STATES.HUD);
|
|
356
|
+
KeyInputHandler.getInstance().onForwardPressOut();
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
if (
|
|
360
|
+
keyCode(event).matches(KEYS.Rewind) ||
|
|
361
|
+
(__DEV__ && keyCode(event).matches(KEYS.Z))
|
|
362
|
+
) {
|
|
363
|
+
setDisplayState(DISPLAY_STATES.HUD);
|
|
364
|
+
KeyInputHandler.getInstance().onRewindPressOut();
|
|
365
|
+
}
|
|
350
366
|
}
|
|
351
367
|
|
|
352
368
|
onKeyDown(event) {
|
|
353
|
-
// console.log("Anton: event", event);
|
|
354
|
-
// debugger;
|
|
355
369
|
const { displayState, setDisplayState, navigator } = this.props;
|
|
356
370
|
const { isKeyboardVisible } = this.state;
|
|
357
371
|
|
|
@@ -372,8 +386,8 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
372
386
|
this.longPressDetector.monitorKeyPress(event.code, event);
|
|
373
387
|
}
|
|
374
388
|
|
|
375
|
-
//
|
|
376
|
-
if (event.repeat) return;
|
|
389
|
+
// Only handle repeat events for arrow keys
|
|
390
|
+
if (event.repeat && !keyCode(event).matchesAny(...ARROW_KEYS)) return;
|
|
377
391
|
|
|
378
392
|
/**
|
|
379
393
|
When the player is displayed, we listen to Native Play / Pause / Stop
|
|
@@ -414,20 +428,20 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
414
428
|
|
|
415
429
|
if (
|
|
416
430
|
keyCode(event).matches(KEYS.Forward) ||
|
|
417
|
-
keyCode(event).matches(KEYS.C)
|
|
431
|
+
(__DEV__ && keyCode(event).matches(KEYS.C))
|
|
418
432
|
) {
|
|
419
433
|
setDisplayState(DISPLAY_STATES.HUD);
|
|
420
|
-
|
|
434
|
+
KeyInputHandler.getInstance().onForwardPress();
|
|
421
435
|
|
|
422
436
|
return;
|
|
423
437
|
}
|
|
424
438
|
|
|
425
439
|
if (
|
|
426
440
|
keyCode(event).matches(KEYS.Rewind) ||
|
|
427
|
-
keyCode(event).matches(KEYS.Z)
|
|
441
|
+
(__DEV__ && keyCode(event).matches(KEYS.Z))
|
|
428
442
|
) {
|
|
429
443
|
setDisplayState(DISPLAY_STATES.HUD);
|
|
430
|
-
|
|
444
|
+
KeyInputHandler.getInstance().onRewindPress();
|
|
431
445
|
|
|
432
446
|
return;
|
|
433
447
|
}
|
|
@@ -465,7 +479,9 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
465
479
|
const isHookInHomescreen = entryData?.payload?.home;
|
|
466
480
|
|
|
467
481
|
const isHookFlowBlocker =
|
|
468
|
-
entryData?.hookPlugin?.module?.isFlowBlocker
|
|
482
|
+
typeof entryData?.hookPlugin?.module?.isFlowBlocker === "function"
|
|
483
|
+
? entryData?.hookPlugin?.module?.isFlowBlocker()
|
|
484
|
+
: entryData?.hookPlugin?.module?.isFlowBlocker;
|
|
469
485
|
|
|
470
486
|
if (isHookInHomescreen && isHookFlowBlocker) {
|
|
471
487
|
this.platformBack();
|
|
@@ -487,7 +503,10 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
487
503
|
}
|
|
488
504
|
}
|
|
489
505
|
|
|
490
|
-
if (
|
|
506
|
+
if (
|
|
507
|
+
keyCode(event).matches(KEYS.Enter) ||
|
|
508
|
+
(__DEV__ && keyCode(event).matches(KEYS.X))
|
|
509
|
+
) {
|
|
491
510
|
if (displayState === DISPLAY_STATES.PLAYER) {
|
|
492
511
|
setDisplayState(DISPLAY_STATES.HUD);
|
|
493
512
|
} else {
|
|
@@ -604,6 +623,7 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
604
623
|
|
|
605
624
|
if (
|
|
606
625
|
(target.tagName === "INPUT" && target.type === "text") ||
|
|
626
|
+
(target.tagName === "INPUT" && target.type === "password") ||
|
|
607
627
|
target.tagName === "TEXTAREA"
|
|
608
628
|
) {
|
|
609
629
|
this.setState({
|
|
@@ -702,26 +722,13 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
702
722
|
}, SEQUENCE_ENTRY_TIME);
|
|
703
723
|
}
|
|
704
724
|
|
|
725
|
+
// TODO: Delete it on next PR if not needed
|
|
705
726
|
private handleLongPress = (event: CustomEvent) => {
|
|
706
727
|
const { keyCode } = event.detail;
|
|
707
|
-
const { displayState } = this.props;
|
|
708
|
-
const playerState = displayState === DISPLAY_STATES.PLAYER;
|
|
709
|
-
const hudState = displayState === DISPLAY_STATES.HUD;
|
|
710
|
-
const playbackState = playerState || hudState;
|
|
711
728
|
this.longPressActive = true;
|
|
712
729
|
this.cancelHudTimeout();
|
|
713
730
|
|
|
714
731
|
switch (keyCode) {
|
|
715
|
-
case KEYS.Forward.code:
|
|
716
|
-
case KEYS.C.code:
|
|
717
|
-
playbackState && this.props.seekMethods.onForwardLongPress();
|
|
718
|
-
break;
|
|
719
|
-
|
|
720
|
-
case KEYS.Rewind.code:
|
|
721
|
-
case KEYS.Z.code:
|
|
722
|
-
playbackState && this.props.seekMethods.onRewindLongPress();
|
|
723
|
-
break;
|
|
724
|
-
|
|
725
732
|
case KEYS.Enter.code:
|
|
726
733
|
case KEYS.X.code:
|
|
727
734
|
focusManager.longPress();
|
|
@@ -729,26 +736,16 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
729
736
|
}
|
|
730
737
|
};
|
|
731
738
|
|
|
739
|
+
// TODO: Delete it on next PR if not needed
|
|
732
740
|
private handleLongPressRelease = (event: CustomEvent) => {
|
|
733
741
|
const { keyCode } = event.detail;
|
|
734
742
|
this.longPressActive = false;
|
|
735
743
|
this.resetHudTimeout();
|
|
736
|
-
// debugger;
|
|
737
744
|
|
|
738
745
|
switch (keyCode) {
|
|
739
|
-
case KEYS.Forward.code:
|
|
740
|
-
case KEYS.C.code:
|
|
741
|
-
this.props.seekMethods.onForwardPressOut();
|
|
742
|
-
break;
|
|
743
|
-
|
|
744
|
-
case KEYS.Rewind.code:
|
|
745
|
-
case KEYS.Z.code:
|
|
746
|
-
this.props.seekMethods.onRewindPressOut();
|
|
747
|
-
break;
|
|
748
|
-
|
|
749
746
|
case KEYS.Enter.code:
|
|
750
747
|
case KEYS.X.code:
|
|
751
|
-
focusManager.pressOut();
|
|
748
|
+
// focusManager.pressOut();
|
|
752
749
|
break;
|
|
753
750
|
}
|
|
754
751
|
};
|
|
@@ -780,7 +777,6 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
780
777
|
|
|
781
778
|
export const InteractionManager = R.compose(
|
|
782
779
|
withNavigator,
|
|
783
|
-
withUseSeek,
|
|
784
780
|
withXray,
|
|
785
781
|
connectToStore(R.pick(["rivers"])),
|
|
786
782
|
PlayerContentContext.withConsumer,
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
3
|
exports[`loadDomPlugins when there are plugins requiring to write to the dom skips plugins without init method 1`] = `
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
[
|
|
5
|
+
[
|
|
6
6
|
"could not initialize plugin Plugin with Dom node & no init method - it doesn't have an init method",
|
|
7
|
-
|
|
8
|
-
"plugin":
|
|
9
|
-
"configuration":
|
|
7
|
+
{
|
|
8
|
+
"plugin": {
|
|
9
|
+
"configuration": {
|
|
10
10
|
"foo": "bar",
|
|
11
11
|
},
|
|
12
|
-
"module":
|
|
12
|
+
"module": {
|
|
13
13
|
"requiresAppendingDomNode": true,
|
|
14
14
|
},
|
|
15
15
|
"name": "Plugin with Dom node & no init method",
|
package/App/Loader/loadLocale.js
CHANGED
|
@@ -4,8 +4,8 @@ import { QuickBrickCommunicationModule } from "../../Polyfills/QuickBrickCommuni
|
|
|
4
4
|
import { loadLocaleImpl, getLanguageCode } from "./utils";
|
|
5
5
|
|
|
6
6
|
type Locale = {
|
|
7
|
-
language: string
|
|
8
|
-
country: string
|
|
7
|
+
language: string;
|
|
8
|
+
country: string;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
async function getBrowserLocale() {
|
|
@@ -11,11 +11,28 @@ import {
|
|
|
11
11
|
PLATFORMS,
|
|
12
12
|
} from "./const";
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {"tv" | "web" | "other"} DeviceType
|
|
16
|
+
* @typedef {"samsung_tv" | "lg_tv" | unknown} CustomPlatformTypes
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Retrieves the user agent string from the browser or global navigator.
|
|
21
|
+
* @returns {string} The user agent string.
|
|
22
|
+
*/
|
|
14
23
|
export const getUserAgent = () =>
|
|
15
24
|
window?.navigator?.userAgent || global?.navigator?.userAgent;
|
|
16
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Checks if the device is HD (1280 width).
|
|
28
|
+
* @returns {boolean} True if the device is HD, false otherwise.
|
|
29
|
+
*/
|
|
17
30
|
export const isHD = () => window.innerWidth === 1280;
|
|
18
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Checks if the platform is LG.
|
|
34
|
+
* @returns {boolean} True if the platform is LG, false otherwise.
|
|
35
|
+
*/
|
|
19
36
|
export const isLgPlatform = () => {
|
|
20
37
|
const userAgent = getUserAgent();
|
|
21
38
|
|
|
@@ -23,10 +40,13 @@ export const isLgPlatform = () => {
|
|
|
23
40
|
return false;
|
|
24
41
|
}
|
|
25
42
|
|
|
26
|
-
// Note: LG uses the number 0 in their userAgent, possibly because of Palm WebOS
|
|
27
43
|
return hasWebOS || userAgent.includes(PLATFORMS.webos);
|
|
28
44
|
};
|
|
29
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Checks if the platform is Samsung.
|
|
48
|
+
* @returns {boolean} True if the platform is Samsung, false otherwise.
|
|
49
|
+
*/
|
|
30
50
|
export const isSamsungPlatform = () => {
|
|
31
51
|
const userAgent = getUserAgent();
|
|
32
52
|
|
|
@@ -42,42 +62,39 @@ export const isSamsungPlatform = () => {
|
|
|
42
62
|
};
|
|
43
63
|
|
|
44
64
|
/**
|
|
45
|
-
* Checks if
|
|
46
|
-
*
|
|
47
|
-
* Use this method when you need to identify the platform on runtime
|
|
48
|
-
* before the VIZIO Companion Library has loaded
|
|
65
|
+
* Checks if the platform is Vizio by using the user agent string.
|
|
66
|
+
* @returns {boolean} True if the platform is Vizio, false otherwise.
|
|
49
67
|
*/
|
|
50
68
|
export const isVizioPlatform = () => {
|
|
51
69
|
const userAgent = getUserAgent();
|
|
52
70
|
|
|
53
|
-
|
|
71
|
+
return (
|
|
54
72
|
userAgent.includes(PLATFORMS.vizio) ||
|
|
55
73
|
userAgent.includes(PLATFORMS.smartcast) ||
|
|
56
|
-
userAgent.includes(PLATFORMS.conjure)
|
|
57
|
-
|
|
58
|
-
return isVizioAgent;
|
|
74
|
+
userAgent.includes(PLATFORMS.conjure)
|
|
75
|
+
);
|
|
59
76
|
};
|
|
60
77
|
|
|
61
78
|
/**
|
|
62
|
-
* Checks if
|
|
63
|
-
*
|
|
64
|
-
* because it mainly checks whether we have access to apis, which may not be available yet
|
|
79
|
+
* Checks if the Vizio APIs are available.
|
|
80
|
+
* @returns {boolean} True if the Vizio APIs are available, false otherwise.
|
|
65
81
|
*/
|
|
66
82
|
export const hasVizioAPIs = () => {
|
|
67
|
-
|
|
83
|
+
return (
|
|
68
84
|
typeof window.VIZIO !== "undefined" &&
|
|
69
|
-
window?.applicaster?.vizioLibraryDidLoad
|
|
70
|
-
|
|
71
|
-
return hasAPIs;
|
|
85
|
+
window?.applicaster?.vizioLibraryDidLoad
|
|
86
|
+
);
|
|
72
87
|
};
|
|
73
88
|
|
|
74
89
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* @returns {"tv" | "web" | "other"} value
|
|
90
|
+
* Determines the device type based on the platform.
|
|
91
|
+
* @returns {DeviceType} The device type ("tv", "web", or "other").
|
|
78
92
|
*/
|
|
79
93
|
export const getDeviceType = () => {
|
|
80
|
-
|
|
94
|
+
/** @type {CustomPlatformTypes} */
|
|
95
|
+
const platformOS = Platform.OS;
|
|
96
|
+
|
|
97
|
+
switch (platformOS) {
|
|
81
98
|
case "samsung_tv":
|
|
82
99
|
return isSamsungPlatform() ? "tv" : "web";
|
|
83
100
|
case "lg_tv":
|
|
@@ -88,14 +105,15 @@ export const getDeviceType = () => {
|
|
|
88
105
|
};
|
|
89
106
|
|
|
90
107
|
/**
|
|
91
|
-
*
|
|
92
|
-
* @param {string} key - key
|
|
108
|
+
* Renames keys based on a predefined map.
|
|
109
|
+
* @param {string} key - The key to rename.
|
|
110
|
+
* @returns {string} The renamed key.
|
|
93
111
|
*/
|
|
94
112
|
export const renameKeys = (key) => desiredKeysMap?.[key] || key;
|
|
95
113
|
|
|
96
114
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
115
|
+
* Retrieves the connection info from WebOS.
|
|
116
|
+
* @returns {Promise<{networkType: string} | null>} A promise that resolves with the connection info or null.
|
|
99
117
|
*/
|
|
100
118
|
export const getWebOSConnectionInfo = () => {
|
|
101
119
|
return new Promise((resolve, reject) => {
|
|
@@ -108,7 +126,6 @@ export const getWebOSConnectionInfo = () => {
|
|
|
108
126
|
webOS.service.request("luna://com.palm.connectionmanager", {
|
|
109
127
|
method: "getStatus",
|
|
110
128
|
parameters: { subscribe: false },
|
|
111
|
-
|
|
112
129
|
onSuccess: (args) => {
|
|
113
130
|
const types = Object.keys(args)
|
|
114
131
|
.filter((key) => args[key].state === "connected")
|
|
@@ -116,7 +133,6 @@ export const getWebOSConnectionInfo = () => {
|
|
|
116
133
|
|
|
117
134
|
resolve({ networkType: types });
|
|
118
135
|
},
|
|
119
|
-
|
|
120
136
|
onFailure: (error) => {
|
|
121
137
|
console.error(
|
|
122
138
|
"getWebOSConnectionInfo: There was an error getting connection info",
|
|
@@ -129,6 +145,10 @@ export const getWebOSConnectionInfo = () => {
|
|
|
129
145
|
});
|
|
130
146
|
};
|
|
131
147
|
|
|
148
|
+
/**
|
|
149
|
+
* Retrieves the connection info from Tizen.
|
|
150
|
+
* @returns {Promise<{networkType: string} | null>} A promise that resolves with the connection info or null.
|
|
151
|
+
*/
|
|
132
152
|
export const getTizenConnectionInfo = () => {
|
|
133
153
|
return new Promise((resolve, reject) => {
|
|
134
154
|
if (!isSamsungPlatform) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
3
|
exports[`storageObject when the requested storage exists getAllItems returns all keys 1`] = `
|
|
4
|
-
|
|
4
|
+
{
|
|
5
5
|
"baz_::_foo": "baz",
|
|
6
6
|
"baz_::_otherKey": "otherValue",
|
|
7
7
|
"foo": "bar",
|
|
@@ -10,7 +10,7 @@ Object {
|
|
|
10
10
|
`;
|
|
11
11
|
|
|
12
12
|
exports[`storageObject when the requested storage exists getAllItems returns all keys 2`] = `
|
|
13
|
-
|
|
13
|
+
{
|
|
14
14
|
"baz_::_foo": "baz",
|
|
15
15
|
"baz_::_otherKey": "otherValue",
|
|
16
16
|
"foo": "bar",
|
|
@@ -19,14 +19,14 @@ Object {
|
|
|
19
19
|
`;
|
|
20
20
|
|
|
21
21
|
exports[`storageObject when the requested storage exists getAllItems returns all keys in the namespace if provided 1`] = `
|
|
22
|
-
|
|
22
|
+
{
|
|
23
23
|
"foo": "baz",
|
|
24
24
|
"otherKey": "otherValue",
|
|
25
25
|
}
|
|
26
26
|
`;
|
|
27
27
|
|
|
28
28
|
exports[`storageObject when the requested storage exists getAllItems returns all keys in the namespace if provided 2`] = `
|
|
29
|
-
|
|
29
|
+
{
|
|
30
30
|
"foo": "baz",
|
|
31
31
|
"otherKey": "otherValue",
|
|
32
32
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/zapp-react-dom-app",
|
|
3
|
-
"version": "13.0.0-alpha.
|
|
3
|
+
"version": "13.0.0-alpha.3013227535",
|
|
4
4
|
"description": "Zapp App Component for Applicaster's Quick Brick React Native App",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
},
|
|
23
23
|
"homepage": "https://github.com/applicaster/zapp-react-dom-app#readme",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@applicaster/zapp-react-dom-ui-components": "13.0.0-alpha.
|
|
26
|
-
"@applicaster/zapp-react-native-bridge": "13.0.0-alpha.
|
|
27
|
-
"@applicaster/zapp-react-native-redux": "13.0.0-alpha.
|
|
28
|
-
"@applicaster/zapp-react-native-ui-components": "13.0.0-alpha.
|
|
29
|
-
"@applicaster/zapp-react-native-utils": "13.0.0-alpha.
|
|
25
|
+
"@applicaster/zapp-react-dom-ui-components": "13.0.0-alpha.3013227535",
|
|
26
|
+
"@applicaster/zapp-react-native-bridge": "13.0.0-alpha.3013227535",
|
|
27
|
+
"@applicaster/zapp-react-native-redux": "13.0.0-alpha.3013227535",
|
|
28
|
+
"@applicaster/zapp-react-native-ui-components": "13.0.0-alpha.3013227535",
|
|
29
|
+
"@applicaster/zapp-react-native-utils": "13.0.0-alpha.3013227535",
|
|
30
30
|
"abortcontroller-polyfill": "^1.7.5",
|
|
31
31
|
"history": "^4.7.2",
|
|
32
32
|
"react-router-dom": "^5.1.2",
|
|
@@ -36,9 +36,19 @@
|
|
|
36
36
|
"videojs-contrib-quality-levels": "3.0.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
+
"@applicaster/zapp-pipes-v2-client": "*",
|
|
40
|
+
"@react-native-community/netinfo": "*",
|
|
41
|
+
"@types/node": "*",
|
|
39
42
|
"core-js": "3.29.1",
|
|
43
|
+
"immer": "*",
|
|
40
44
|
"react": "17.0.2",
|
|
41
45
|
"react-dom": "17.0.2",
|
|
42
|
-
"react-native
|
|
46
|
+
"react-native": "*",
|
|
47
|
+
"react-native-safe-area-context": "*",
|
|
48
|
+
"react-native-svg": "*",
|
|
49
|
+
"react-native-web": "0.18.11",
|
|
50
|
+
"uglify-js": "*",
|
|
51
|
+
"validate-color": "*",
|
|
52
|
+
"zustand": "*"
|
|
43
53
|
}
|
|
44
54
|
}
|