@applicaster/zapp-react-native-utils 12.0.0-alpha.4043183114 → 12.0.0-alpha.4081044014

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 (63) hide show
  1. package/analyticsUtils/AnalyticPlayerListener.ts +141 -0
  2. package/analyticsUtils/PlayerAnalyticsManager.ts +90 -0
  3. package/analyticsUtils/{analyticsTracker.ts → playerAnalyticsTracker.ts} +19 -10
  4. package/appUtils/HooksManager/{Hook.ts → Hook.js} +11 -17
  5. package/appUtils/HooksManager/{constants.ts → constants.js} +1 -1
  6. package/appUtils/HooksManager/{index.ts → index.js} +109 -98
  7. package/appUtils/RiverFocusManager/index.js +12 -17
  8. package/appUtils/accessibilityManager/hooks.ts +16 -7
  9. package/appUtils/accessibilityManager/index.ts +33 -28
  10. package/appUtils/focusManager/treeDataStructure/Tree/index.js +3 -2
  11. package/appUtils/focusManager/treeDataStructure/Utils/index.js +3 -1
  12. package/appUtils/{index.ts → index.js} +1 -1
  13. package/appUtils/keyCodes/{index.ts → index.js} +0 -2
  14. package/appUtils/keyCodes/{keys/keyEventMapper.ts → keys.android.js} +19 -0
  15. package/appUtils/keyCodes/keys.ios.js +46 -0
  16. package/appUtils/platform/platformUtils.ts +49 -2
  17. package/appUtils/playerManager/index.ts +9 -27
  18. package/appUtils/playerManager/playerHooks/usePlayerCurrentTime.tsx +57 -0
  19. package/appUtils/playerManager/playerNative.ts +1 -1
  20. package/appUtils/playerManager/usePlayerControllerSetup.tsx +1 -1
  21. package/appUtils/playerManager/usePlayerState.tsx +19 -34
  22. package/arrayUtils/index.ts +11 -0
  23. package/cellUtils/index.ts +38 -5
  24. package/domUtils/{cookieManager.ts → cookieManager.js} +2 -1
  25. package/focusManager/FocusManager.ts +20 -5
  26. package/focusManager/__tests__/FocusManager.test.ts +0 -1
  27. package/functionUtils/index.ts +49 -15
  28. package/index.d.ts +15 -0
  29. package/manifestUtils/defaultManifestConfigurations/player.js +121 -0
  30. package/manifestUtils/keys.js +2 -1
  31. package/modalState/index.ts +5 -1
  32. package/navigationUtils/index.ts +6 -15
  33. package/numberUtils/__tests__/toNumber.test.ts +2 -2
  34. package/numberUtils/__tests__/toPositiveNumberWithDefault.test.ts +66 -0
  35. package/numberUtils/__tests__/toPositiveNumberWithDefaultZero.test.ts +66 -0
  36. package/numberUtils/index.ts +20 -0
  37. package/package.json +2 -2
  38. package/playerUtils/configurationGenerator.ts +120 -0
  39. package/playerUtils/imaScriptDom.ts +59 -0
  40. package/reactHooks/cell-click/index.ts +17 -3
  41. package/reactHooks/debugging/__tests__/index.test.js +81 -11
  42. package/reactHooks/feed/__tests__/useBatchLoading.test.tsx +69 -6
  43. package/reactHooks/feed/useBatchLoading.ts +52 -28
  44. package/reactHooks/layout/useDimensions/__tests__/useDimensions.test.ts +134 -0
  45. package/reactHooks/layout/useDimensions/useDimensions.ts +2 -0
  46. package/reactHooks/navigation/index.ts +5 -8
  47. package/reactHooks/player/useAutoSeek.tsx +9 -7
  48. package/reactHooks/resolvers/useCellResolver.ts +5 -1
  49. package/reactHooks/useConfiguration.ts +2 -2
  50. package/reactUtils/index.ts +15 -2
  51. package/testUtils/index.tsx +42 -9
  52. package/appUtils/HooksManager/types.ts +0 -93
  53. package/appUtils/keyCodes/keys/index.ts +0 -3
  54. package/appUtils/keyCodes/keys/keys.android.ts +0 -18
  55. package/appUtils/keyCodes/keys/keys.ios.ts +0 -25
  56. package/appUtils/keyCodes/keys/keys.ts +0 -15
  57. /package/appUtils/HooksManager/{logger.ts → logger.js} +0 -0
  58. /package/appUtils/{directionHelper.ts → directionHelper.js} +0 -0
  59. /package/appUtils/keyCodes/{androidTVKeys.ts → androidTVKeys.js} +0 -0
  60. /package/appUtils/keyCodes/{keys/keys.web.ts → keys.web.js} +0 -0
  61. /package/appUtils/keyCodes/{keys/keysByPlatform.ts → keysByPlatform.js} +0 -0
  62. /package/appUtils/{localizationsHelper.ts → localizationsHelper.js} +0 -0
  63. /package/domUtils/{logger.ts → logger.js} +0 -0
@@ -0,0 +1,134 @@
1
+ import { renderHook } from "@testing-library/react-hooks";
2
+ import { Dimensions, StatusBar } from "react-native";
3
+
4
+ const mockUsePickFromState = jest.fn();
5
+ const mockUseIsScreenActive = jest.fn();
6
+ const mockGetInitialDimensions = jest.fn();
7
+ const mockGetDeviceInfo = jest.fn();
8
+
9
+ jest.mock("@applicaster/zapp-react-native-redux/hooks", () => ({
10
+ ...(jest.requireActual("@applicaster/zapp-react-native-redux/hooks") as {}),
11
+ usePickFromState: mockUsePickFromState,
12
+ }));
13
+
14
+ jest.mock("../../../navigation", () => ({
15
+ useIsScreenActive: mockUseIsScreenActive,
16
+ }));
17
+
18
+ jest.mock("../helpers", () => ({
19
+ getInitialDimensions: mockGetInitialDimensions,
20
+ }));
21
+
22
+ jest.mock("../../getDeviceInfo", () => ({
23
+ getDeviceInfo: mockGetDeviceInfo,
24
+ }));
25
+
26
+ const { useDimensions } = require("../useDimensions");
27
+
28
+ describe("useDimensions", () => {
29
+ const mockDimensions = { width: 100, height: 200, scale: 1, fontScale: 1 };
30
+ const mockAppData = { someData: "test" };
31
+
32
+ beforeEach(() => {
33
+ jest.clearAllMocks();
34
+ Dimensions.get = jest.fn().mockReturnValue(mockDimensions);
35
+
36
+ Dimensions.addEventListener = jest.fn().mockReturnValue({
37
+ remove: jest.fn(),
38
+ });
39
+
40
+ mockUsePickFromState.mockReturnValue({ appData: mockAppData });
41
+ mockUseIsScreenActive.mockReturnValue(true);
42
+ mockGetInitialDimensions.mockReturnValue(mockDimensions);
43
+ mockGetDeviceInfo.mockReturnValue({ deviceInfo: "testDeviceInfo" });
44
+ });
45
+
46
+ it("returns correct initial dimensions", () => {
47
+ const { result } = renderHook(() =>
48
+ useDimensions("window", { fullDimensions: false })
49
+ );
50
+
51
+ expect(result.current).toEqual({
52
+ ...mockDimensions,
53
+ statusBarHeight: StatusBar.currentHeight,
54
+ });
55
+
56
+ expect(mockGetInitialDimensions).toHaveBeenCalledWith("window");
57
+ });
58
+
59
+ it("calls handler on mount", () => {
60
+ renderHook(() => useDimensions("window", { fullDimensions: false }));
61
+
62
+ expect(Dimensions.addEventListener).toHaveBeenCalledWith(
63
+ "change",
64
+ expect.any(Function)
65
+ );
66
+ });
67
+
68
+ it("calls handler on isActive change", () => {
69
+ const { rerender } = renderHook(() =>
70
+ useDimensions("window", { fullDimensions: false })
71
+ );
72
+
73
+ mockUseIsScreenActive.mockReturnValue(false);
74
+ rerender();
75
+
76
+ expect(Dimensions.addEventListener).toHaveBeenCalledWith(
77
+ "change",
78
+ expect.any(Function)
79
+ );
80
+ });
81
+
82
+ it("handles fullDimensions option", () => {
83
+ const { result } = renderHook(() =>
84
+ useDimensions("window", { fullDimensions: true })
85
+ );
86
+
87
+ expect(result.current).toEqual({
88
+ ...mockDimensions,
89
+ scale: 1,
90
+ fontScale: 1,
91
+ statusBarHeight: StatusBar.currentHeight,
92
+ });
93
+ });
94
+
95
+ it("handles excludeStatusBar option", () => {
96
+ const { result } = renderHook(() =>
97
+ useDimensions("window", { excludeStatusBar: true })
98
+ );
99
+
100
+ expect(result.current.height).toBe(
101
+ mockDimensions.height - StatusBar.currentHeight ?? 0
102
+ );
103
+ });
104
+
105
+ it("handles rounded option", () => {
106
+ const { result } = renderHook(() =>
107
+ useDimensions("window", { rounded: true })
108
+ );
109
+
110
+ expect(result.current.width).toBe(Math.ceil(mockDimensions.width));
111
+ expect(result.current.height).toBe(Math.ceil(mockDimensions.height));
112
+ });
113
+
114
+ it("handles deviceInfo option", () => {
115
+ const { result } = renderHook(() =>
116
+ useDimensions("window", { deviceInfo: true })
117
+ );
118
+
119
+ expect(result.current.deviceInfo).toMatchObject({
120
+ deviceInfo: "testDeviceInfo",
121
+ });
122
+ });
123
+
124
+ it("logs deprecation warning when fullDimensions is boolean", () => {
125
+ const consoleWarnSpy = jest.spyOn(console, "warn").mockImplementation();
126
+ renderHook(() => useDimensions("window", true));
127
+
128
+ expect(consoleWarnSpy).toHaveBeenCalledWith(
129
+ "Deprecation Warning\nSecond argument is now the options object. {fullDimensions: boolean, ...}"
130
+ );
131
+
132
+ consoleWarnSpy.mockRestore();
133
+ });
134
+ });
@@ -95,6 +95,8 @@ export const useDimensions: UseDimensions = (
95
95
 
96
96
  const activeSubscription = Dimensions.addEventListener("change", handler);
97
97
 
98
+ handler({ [context]: Dimensions.get(context) });
99
+
98
100
  return () => {
99
101
  activeSubscription.remove();
100
102
  };
@@ -17,7 +17,7 @@ import {
17
17
  QUICK_BRICK_NAVBAR,
18
18
  QUICK_BRICK_CONTENT,
19
19
  } from "@applicaster/quick-brick-core/const";
20
- import { useZappHooksModalState } from "@applicaster/zapp-react-dom-ui-components/Components/ZappHooksModal/ZappHooksModal";
20
+ import { useZappHooksModalState } from "@applicaster/zapp-react-dom-ui-components/Components/ZappHooksModal/hooks/useZappHooksModalState";
21
21
  import { ZappHookModalContext } from "@applicaster/zapp-react-native-ui-components/Contexts";
22
22
  import { PathnameContext } from "@applicaster/zapp-react-native-ui-components/Contexts/PathnameContext";
23
23
  import { HookModalContextT } from "@applicaster/zapp-react-native-ui-components/Contexts/ZappHookModalContext";
@@ -320,19 +320,16 @@ export const useZappHooksForEntry = (
320
320
  callbacks?.handleHookComplete?.(props);
321
321
  };
322
322
 
323
- const hookManager = HooksManager(hooksOptions);
324
-
325
- hookManager.subscriber
323
+ const hookManager = HooksManager(hooksOptions)
326
324
  .on(HOOKS_EVENTS.PRESENT_SCREEN_HOOK, handleHookPresent)
327
325
  .on(HOOKS_EVENTS.ERROR, handleHookError)
328
326
  .on(HOOKS_EVENTS.CANCEL, handleHookCancel)
329
327
  .on(HOOKS_EVENTS.START_BACKGROUND_HOOK, handleBackgroundHook)
330
- .on(HOOKS_EVENTS.COMPLETE, handleHookComplete);
331
-
332
- hookManager.handleHooks(entry);
328
+ .on(HOOKS_EVENTS.COMPLETE, handleHookComplete)
329
+ .handleHooks(entry);
333
330
 
334
331
  return () => {
335
- hookManager.subscriber
332
+ hookManager
336
333
  .removeHandler(HOOKS_EVENTS.PRESENT_SCREEN_HOOK, handleHookPresent)
337
334
  .removeHandler(HOOKS_EVENTS.ERROR, handleHookError)
338
335
  .removeHandler(HOOKS_EVENTS.CANCEL, handleHookCancel)
@@ -1,5 +1,4 @@
1
1
  import React, { useEffect, useState } from "react";
2
- import * as R from "ramda";
3
2
  import { usePrevious } from "@applicaster/zapp-react-native-utils/reactHooks/utils";
4
3
  import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils/playerManager";
5
4
  import {
@@ -17,10 +16,6 @@ export const useAutoSeek = (resetHUDTimer = noop) => {
17
16
  const intervalTimer = React.useRef(null);
18
17
  const prevRunning = usePrevious(isRunning);
19
18
 
20
- const setIntervalTimer = (cb) => {
21
- intervalTimer.current = setInterval(cb, ON_HOLD_INTERVAL);
22
- };
23
-
24
19
  const clearIntervalTimer = () => {
25
20
  try {
26
21
  clearInterval(intervalTimer.current);
@@ -29,6 +24,11 @@ export const useAutoSeek = (resetHUDTimer = noop) => {
29
24
  }
30
25
  };
31
26
 
27
+ const setIntervalTimer = (cb) => {
28
+ clearIntervalTimer();
29
+ intervalTimer.current = setInterval(cb, ON_HOLD_INTERVAL);
30
+ };
31
+
32
32
  const resetState = () => {
33
33
  setIsRunning(false);
34
34
  setDirection(null);
@@ -42,7 +42,7 @@ export const useAutoSeek = (resetHUDTimer = noop) => {
42
42
  if (!player) return;
43
43
 
44
44
  if (direction) {
45
- player[direction](R.min(MAX_SEEK_TIME, SKIP_TIME_BASE * multiplier));
45
+ player[direction](Math.min(MAX_SEEK_TIME, SKIP_TIME_BASE * multiplier));
46
46
  resetHUDTimer();
47
47
  }
48
48
  }, [multiplier, direction]);
@@ -50,7 +50,9 @@ export const useAutoSeek = (resetHUDTimer = noop) => {
50
50
  useEffect(() => {
51
51
  if (isRunning && isRunning !== prevRunning) {
52
52
  setIntervalTimer(() => {
53
- setMultiplier(R.add(1));
53
+ setMultiplier((prev) => {
54
+ return prev + 1;
55
+ });
54
56
  });
55
57
  } else if (!isRunning && isRunning !== prevRunning) {
56
58
  resetState();
@@ -48,7 +48,11 @@ export function useCellResolver({
48
48
  ...cellResolverOptions
49
49
  }: Props) {
50
50
  let _component = Object.assign({}, component);
51
- const { width, height } = useDimensions("screen");
51
+
52
+ const { width, height } = useDimensions("screen", {
53
+ updateForInactiveScreens: false,
54
+ });
55
+
52
56
  const { plugins, cellStyles } = usePickFromState(["plugins", "cellStyles"]);
53
57
  const isRTL = useIsRTL();
54
58
 
@@ -67,7 +67,7 @@ export const useConfiguration = ({
67
67
  if (component) {
68
68
  const remappedStylesConfiguration = remapUpdatedKeys(
69
69
  pluginManifest,
70
- component.styles
70
+ component
71
71
  );
72
72
 
73
73
  R.forEachObjIndexed((value, key) => {
@@ -83,7 +83,7 @@ export const useConfiguration = ({
83
83
 
84
84
  const styles = populateConfigurationValues(
85
85
  pluginManifest?.styles?.fields,
86
- remappedStylesConfiguration,
86
+ remappedStylesConfiguration.styles,
87
87
  skipDefaults
88
88
  );
89
89
 
@@ -109,6 +109,20 @@ export const isTvOSPlatform = () => getPlatform() === "tvos";
109
109
 
110
110
  export const isAndroidTVPlatform = () => getPlatform() === "android_tv";
111
111
 
112
+ declare global {
113
+ interface Window {
114
+ VIZIO?: {
115
+ Chromevox: {
116
+ play: (text: string) => void;
117
+ };
118
+ exitApplication: () => void;
119
+ setClosedCaptionHandler: (
120
+ callback: (isCCEnabled: boolean) => void
121
+ ) => void;
122
+ };
123
+ }
124
+ }
125
+
112
126
  /**
113
127
  * Platforms found in userAgent string, please note that simulators
114
128
  * might not have the same agents that the devices have
@@ -138,8 +152,7 @@ export const hasTizen = typeof window?.tizen !== "undefined";
138
152
  */
139
153
  export const hasWebOS = typeof window?.webOS !== "undefined";
140
154
 
141
- export const getUserAgent = () =>
142
- window?.navigator?.userAgent || global?.navigator?.userAgent;
155
+ export const getUserAgent = () => window?.navigator?.userAgent;
143
156
 
144
157
  export const isLgPlatform = () => {
145
158
  const userAgent = getUserAgent();
@@ -7,9 +7,11 @@ import { Provider } from "react-redux";
7
7
  import thunk from "redux-thunk";
8
8
  import configureStore from "redux-mock-store";
9
9
  import { SafeAreaProvider } from "react-native-safe-area-context";
10
+ import { appStore } from "@applicaster/zapp-react-native-redux/AppStore";
10
11
 
11
12
  import { render } from "@testing-library/react-native";
12
13
  import { AnalyticsProvider } from "../analyticsUtils";
14
+ import { ThemeContext } from "../theme";
13
15
 
14
16
  export { getByTestId } from "./getByTestId";
15
17
 
@@ -59,7 +61,9 @@ const initialState = {
59
61
  appSettings: {},
60
62
  plugins: [],
61
63
  appState: { appReady: true, appLaunched: true },
64
+ pluginConfigurations: {},
62
65
  appData: { layoutVersion: "v1" },
66
+ zappPipes: {},
63
67
  contentTypes: null,
64
68
  };
65
69
 
@@ -68,20 +72,49 @@ export const WrappedWithProviders = ({
68
72
  store: storeObj = {},
69
73
  }: any) => {
70
74
  const _store = configureStore([thunk])(
71
- R.mergeDeepWith(R.concat, { ...initialState }, storeObj)
75
+ R.mergeDeepRight(initialState, { ...storeObj })
72
76
  );
73
77
 
78
+ appStore.set(_store);
79
+
74
80
  return (
75
- <SafeAreaProvider
76
- initialMetrics={{
77
- insets: { top: 0, left: 0, right: 0, bottom: 0 },
78
- frame: { x: 0, y: 0, width: 0, height: 0 },
81
+ <ThemeContext.Provider
82
+ value={{
83
+ themes: {
84
+ light: {
85
+ component_margin_top: 0,
86
+ component_margin_bottom: 0,
87
+ component_margin_left: 0,
88
+ component_margin_right: 0,
89
+ component_padding_top: 0,
90
+ component_padding_bottom: 0,
91
+ component_padding_left: 0,
92
+ component_padding_right: 0,
93
+ component_gutter_vertical: 0,
94
+ component_gutter_horizontal: 0,
95
+ component_corner_radius: 0,
96
+ app_background_color: "rgba(0,0,0,0)",
97
+ screen_margin_top: 0,
98
+ screen_margin_bottom: 0,
99
+ component_anchor_point_y: 0,
100
+ assets: "",
101
+ },
102
+ },
103
+ selectedThemeId: "light",
104
+ setSelectedThemeId: () => {},
79
105
  }}
80
106
  >
81
- <Provider store={_store}>
82
- <AnalyticsProvider>{children}</AnalyticsProvider>
83
- </Provider>
84
- </SafeAreaProvider>
107
+ <SafeAreaProvider
108
+ initialMetrics={{
109
+ insets: { top: 0, left: 0, right: 0, bottom: 0 },
110
+ frame: { x: 0, y: 0, width: 0, height: 0 },
111
+ }}
112
+ >
113
+ <Provider store={_store}>
114
+ <AnalyticsProvider>{children}</AnalyticsProvider>
115
+ </Provider>
116
+ </SafeAreaProvider>
117
+ </ThemeContext.Provider>
85
118
  );
86
119
  };
87
120
 
@@ -1,93 +0,0 @@
1
- import { SubscriberObj } from "../../functionUtils";
2
- import { HOOKS_EVENTS } from "./constants";
3
-
4
- export interface HookConfiguration {}
5
-
6
- export interface HookModule {
7
- ModalContainer: React.ComponentType<any>;
8
- Component: React.ComponentType<any>;
9
- presentFullScreen: boolean;
10
- run: (
11
- arg0: unknown,
12
- callback: () => void,
13
- configuration: HookConfiguration
14
- ) => void;
15
- configuration: HookConfiguration;
16
- isFlowBlocker: () => boolean;
17
- skipHook: boolean;
18
- setSkipHook: (skipHook: boolean) => void;
19
- shouldSkipHook: () => boolean;
20
- runInBackground: (
21
- arg0: unknown,
22
- callback: () => void,
23
- hookPlugin: Hook,
24
- presentUI: boolean
25
- ) => void;
26
- }
27
-
28
- export type HookManagerArgs = {
29
- rivers: Record<string, ZappRiver>;
30
- plugins: ZappPlugin[];
31
- targetScreen: ZappRiver;
32
- startUpHooksData?: {
33
- startUpHooks?: unknown[] | "in_process";
34
- setStartUpHooks?: (arg0: string) => void;
35
- };
36
- };
37
-
38
- export interface HookManager {
39
- subscriber: SubscriberObj;
40
- presentScreenHook: (
41
- hook: Hook,
42
- payload: unknown,
43
- callback: (...any) => void
44
- ) => void;
45
- executeHook: (
46
- hook: Hook,
47
- payload: unknown,
48
- callback: (...any) => void
49
- ) => void;
50
- handleHooks: (payload: unknown) => void;
51
- runInBackground: (
52
- hook: Hook,
53
- payload: unknown,
54
- callback: (...any) => void,
55
- presentUI: boolean
56
- ) => void;
57
- }
58
-
59
- export type HookIniObj = {
60
- hook: HookModule & {
61
- module: HookModule;
62
- general: unknown;
63
- screen_id?: string;
64
- identifier?: string;
65
- weight?: number | string;
66
- };
67
- hooks: Hook<any>[];
68
- manager: HookManager;
69
- };
70
-
71
- export interface Hook<T extends HookModule = HookModule> {
72
- manager: HookManager;
73
- lastHook: boolean;
74
- state: number;
75
- module: T;
76
- screen_id: string;
77
- identifier: string;
78
- configuration: T["configuration"];
79
- setStateAndNotify(
80
- event: typeof HOOKS_EVENTS[keyof typeof HOOKS_EVENTS],
81
- opts: {
82
- error?: typeof Error;
83
- route?: string;
84
- hookPlugin: Hook<T>;
85
- payload: unknown;
86
- }
87
- );
88
- general?: {
89
- transition_type: typeof HOOKS_EVENTS[keyof typeof HOOKS_EVENTS];
90
- allow_screen_plugin_presentation: boolean;
91
- is_flow_blocker: boolean;
92
- };
93
- }
@@ -1,3 +0,0 @@
1
- export * from "./keys";
2
-
3
- export { keyEventMapper } from "./keyEventMapper";
@@ -1,18 +0,0 @@
1
- export const KEYS = {
2
- Enter: { code: "Enter", keyCode: 13 },
3
- EnterKeyboard: { code: "EnterKeyboard", keyCode: 66 },
4
- Back: { code: "Back", keyCode: 8 },
5
- Space: { code: "Space", keyCode: 32 },
6
- m: { code: "m", keyCode: 77 },
7
- ArrowLeft: { code: "ArrowLeft", keyCode: 37 },
8
- ArrowUp: { code: "ArrowUp", keyCode: 38 },
9
- ArrowRight: { code: "ArrowRight", keyCode: 39 },
10
- ArrowDown: { code: "ArrowDown", keyCode: 40 },
11
- };
12
-
13
- export const ARROW_KEYS = [
14
- KEYS.ArrowUp,
15
- KEYS.ArrowLeft,
16
- KEYS.ArrowDown,
17
- KEYS.ArrowRight,
18
- ];
@@ -1,25 +0,0 @@
1
- export const KEYS = {
2
- Enter: { code: "Enter", keyCode: 13 },
3
- Space: { code: "Space", keyCode: 32 },
4
- m: { code: "m", keyCode: 77 },
5
- ArrowLeft: { code: "ArrowLeft", keyCode: 37 },
6
- ArrowUp: { code: "ArrowUp", keyCode: 38 },
7
- ArrowRight: { code: "ArrowRight", keyCode: 39 },
8
- ArrowDown: { code: "ArrowDown", keyCode: 40 },
9
- Back: { code: "Backspace", keyCode: 8 },
10
- Play: { code: "PlayPause", keyCode: 179 },
11
- Pause: { code: "Pause", keyCode: 179 },
12
- Forward: { code: "Forward", keyCode: 176 },
13
- Rewind: { code: "Rewind", keyCode: 177 },
14
- VolumeUp: { code: "VolumeUp", keyCode: 175 },
15
- VolumeDown: { code: "VolumeDown", keyCode: 174 },
16
- ToggleMute: { code: "VolumeMute", keyCode: 173 },
17
- Stop: { code: "Q", keyCode: 81 },
18
- };
19
-
20
- export const ARROW_KEYS = [
21
- KEYS.ArrowUp,
22
- KEYS.ArrowLeft,
23
- KEYS.ArrowDown,
24
- KEYS.ArrowRight,
25
- ];
@@ -1,15 +0,0 @@
1
- // dummy file to make sure the folder structure is created
2
- export const KEYS: Record<string, { code: string; keyCode: number }> = {
3
- ArrowLeft: { code: "ArrowLeft", keyCode: -1 },
4
- ArrowUp: { code: "ArrowUp", keyCode: -1 },
5
- ArrowRight: { code: "ArrowRight", keyCode: -1 },
6
- ArrowDown: { code: "ArrowDown", keyCode: -1 },
7
- Back: { code: "Back", keyCode: -1 },
8
- };
9
-
10
- export const ARROW_KEYS = [
11
- KEYS.ArrowUp,
12
- KEYS.ArrowLeft,
13
- KEYS.ArrowDown,
14
- KEYS.ArrowRight,
15
- ];
File without changes
File without changes