@24i/bigscreen-sdk 1.1.0 → 2.1.1-alpha.2133

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 (256) hide show
  1. package/README.md +1 -1
  2. package/package.json +34 -53
  3. package/packages/adobe-heartbeat/src/AdobeHeartbeat.ts +9 -9
  4. package/packages/async-image/src/AsyncImage.tsx +10 -15
  5. package/packages/developer-tools/PlayerDebugWindow/README.md +1 -1
  6. package/packages/developer-tools/src/DeveloperToolsService/DeveloperToolsList.tsx +0 -11
  7. package/packages/developer-tools/src/PlayerDebugWindow/PlayerDebugWindow.tsx +5 -5
  8. package/packages/developer-tools/src/PlayerDebugWindow/constants.ts +0 -15
  9. package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoDetail.tsx +1 -2
  10. package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoProvider.ts +3 -34
  11. package/packages/developer-tools/src/TechnicalInfo/__mocks__/Device.ts +0 -4
  12. package/packages/developer-tools/src/TechnicalInfo/translations.ts +0 -4
  13. package/packages/device/src/getKeyDigit.ts +2 -2
  14. package/packages/device/src/resolver/resolver.ts +5 -18
  15. package/packages/digital-clock/src/DigitalClock.tsx +4 -15
  16. package/packages/driver-androidtv/src/DeviceAndroidTV.ts +9 -54
  17. package/packages/driver-androidtv/src/__mocks__/javaScriptBridge.ts +5 -29
  18. package/packages/driver-androidtv/src/keymap.ts +0 -18
  19. package/packages/driver-androidtv/src/types.ts +16 -102
  20. package/packages/driver-base/src/DeviceBase.ts +2 -61
  21. package/packages/driver-base/src/KeyMap/Key.ts +1 -8
  22. package/packages/driver-base/src/KeyMap/KeyMap.ts +0 -4
  23. package/packages/driver-base/src/KeyMap/interface.ts +0 -1
  24. package/packages/driver-base/src/KeyMap/overrideValues.ts +1 -2
  25. package/packages/driver-base/src/__mocks__/keyMap.ts +0 -1
  26. package/packages/driver-base/src/types/DeviceEvent.ts +0 -2
  27. package/packages/driver-base/src/types/KeycodeKeyMap.ts +0 -1
  28. package/packages/driver-browser/src/keymap.ts +0 -8
  29. package/packages/driver-entone/src/keymap.ts +0 -1
  30. package/packages/driver-tizen/src/TizenKeys.ts +0 -2
  31. package/packages/driver-vidaa/src/DeviceVidaa.ts +2 -3
  32. package/packages/driver-vidaa/src/__mocks__/vidaa.ts +1 -1
  33. package/packages/driver-vidaa/src/keymap.ts +0 -2
  34. package/packages/driver-webos/src/DeviceWebos.ts +0 -8
  35. package/packages/driver-webos/src/keymap.ts +1 -2
  36. package/packages/driver-xbox/src/keymap.ts +1 -1
  37. package/packages/epg/README.md +1 -3
  38. package/packages/epg/src/v2/Cell.tsx +2 -16
  39. package/packages/epg/src/v2/DataManager.ts +41 -112
  40. package/packages/epg/src/v2/DatePicker.tsx +3 -9
  41. package/packages/epg/src/v2/DateToast/DateToast.tsx +9 -12
  42. package/packages/epg/src/v2/Day.tsx +3 -6
  43. package/packages/epg/src/v2/Epg.tsx +5 -5
  44. package/packages/epg/src/v2/MockGenerator/generator.ts +2 -3
  45. package/packages/epg/src/v2/ProgramInfo/utils.ts +3 -4
  46. package/packages/epg/src/v2/Row.tsx +1 -3
  47. package/packages/epg/src/v2/TimelineSection.tsx +1 -4
  48. package/packages/epg/src/v2/basic/CellsManager.tsx +2 -7
  49. package/packages/epg/src/v2/basic/RowsManager.tsx +1 -3
  50. package/packages/epg/src/v2/interface.ts +0 -13
  51. package/packages/events-manager/src/EventsManager.ts +56 -1
  52. package/packages/focus/README.md +0 -33
  53. package/packages/focus/src/IFocusable.ts +0 -1
  54. package/packages/focus/src/Layout/Base.tsx +6 -41
  55. package/packages/focus/src/Layout/Matrix.tsx +19 -51
  56. package/packages/focus/src/Layout/__test__/Base.spec.ts +180 -0
  57. package/packages/focus/src/Layout/__test__/Horizontal.spec.ts +94 -0
  58. package/packages/focus/src/Layout/__test__/Matrix.spec.ts +261 -0
  59. package/packages/focus/src/Layout/__test__/Vertical.spec.ts +46 -0
  60. package/packages/focus/src/Layout/__test__/isRtl.spec.ts +23 -0
  61. package/packages/focus/src/Layout/__test__/shared.ts +19 -0
  62. package/packages/focus/src/focusFirstExisting.ts +1 -7
  63. package/packages/focus/src/index.ts +1 -2
  64. package/packages/gallup/src/Gallup.ts +3 -3
  65. package/packages/grid/src/Base/Base.tsx +10 -15
  66. package/packages/grid/src/FirstOnlyGrid/FirstOnlyGrid.tsx +2 -4
  67. package/packages/icon/src/Icon.tsx +5 -27
  68. package/packages/input/README.md +1 -4
  69. package/packages/input/src/Input.tsx +29 -65
  70. package/packages/input/src/handleOverflow.ts +29 -0
  71. package/packages/interactable/README.md +1 -2
  72. package/packages/interactable/src/Interactable.tsx +3 -9
  73. package/packages/interactable/src/interface.ts +0 -1
  74. package/packages/jsx/src/index.ts +1 -1
  75. package/packages/jsx/src/test-utils/index.ts +0 -1
  76. package/packages/keyboard/src/Backdrop/Backdrop.scss +0 -2
  77. package/packages/keyboard/src/KeyboardBase.tsx +4 -16
  78. package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.scss +0 -4
  79. package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.tsx +20 -28
  80. package/packages/keyboard/src/WhitelabelKeyboard/_sizes.1080.scss +0 -1
  81. package/packages/keyboard/src/WhitelabelKeyboard/_sizes.scss +0 -1
  82. package/packages/keyboard/src/WhitelabelKeyboard/layouts/index.ts +0 -11
  83. package/packages/keyboard/src/WhitelabelKeyboard/types.ts +0 -1
  84. package/packages/l10n/README.md +0 -18
  85. package/packages/l10n/src/date/common.ts +6 -18
  86. package/packages/l10n/src/date/cs.ts +8 -2
  87. package/packages/l10n/src/date/en-001.ts +3 -3
  88. package/packages/l10n/src/date/en-common.ts +4 -5
  89. package/packages/l10n/src/date/en-us.ts +3 -3
  90. package/packages/l10n/src/date/iso.ts +13 -12
  91. package/packages/l10n/src/date/types.ts +0 -9
  92. package/packages/l10n/src/l10n.ts +3 -61
  93. package/packages/list/src/Base/Base.tsx +9 -19
  94. package/packages/list/src/Base/interface.ts +2 -2
  95. package/packages/list/src/CenteredList/controller.ts +1 -0
  96. package/packages/list/src/EdgeOffsetList/EdgeOffsetList.tsx +3 -3
  97. package/packages/list/src/UnifiedListController/UnifiedListController.ts +2 -6
  98. package/packages/logger/src/loggers/SentryLogger/Sentry.ts +0 -1
  99. package/packages/logger/src/loggers/SentryLogger/SentryLogger.ts +2 -2
  100. package/packages/menu/src/MenuAndContentContainer/MenuAndContentContainer.tsx +3 -31
  101. package/packages/menu/src/MenuAndContentContainer/interface.ts +0 -8
  102. package/packages/modal-service/README.md +1 -4
  103. package/packages/modal-service/src/ModalService.tsx +5 -29
  104. package/packages/perf-utils/README.md +120 -1
  105. package/packages/perf-utils/src/array/filter.ts +54 -1
  106. package/packages/perf-utils/src/array/find.ts +43 -1
  107. package/packages/perf-utils/src/array/findIndex.ts +43 -1
  108. package/packages/perf-utils/src/array/forEach.ts +48 -1
  109. package/packages/perf-utils/src/array/includes.ts +41 -1
  110. package/packages/perf-utils/src/array/includesNaN.ts +32 -1
  111. package/packages/perf-utils/src/array/index.ts +7 -1
  112. package/packages/perf-utils/src/array/map.ts +52 -1
  113. package/packages/player-ui/README.md +1 -1
  114. package/packages/player-ui/src/CurrentTime.tsx +2 -2
  115. package/packages/player-ui/src/Duration.tsx +2 -2
  116. package/packages/player-ui/src/PauseButton.tsx +0 -8
  117. package/packages/player-ui/src/PlayerInteractable.tsx +0 -1
  118. package/packages/player-ui/src/PlayerTime.tsx +1 -3
  119. package/packages/player-ui/src/PlayerUI.tsx +35 -68
  120. package/packages/player-ui/src/RemainingTime.tsx +2 -2
  121. package/packages/player-ui/src/Seekbar.tsx +18 -110
  122. package/packages/player-ui/src/Seeking.ts +16 -57
  123. package/packages/player-ui/src/Subtitles.tsx +2 -2
  124. package/packages/player-ui/src/index.ts +0 -1
  125. package/packages/player-ui/src/mocks.ts +8 -32
  126. package/packages/player-ui/src/timeUtils.ts +3 -3
  127. package/packages/player-ui/src/types.ts +3 -9
  128. package/packages/router/src/Route.tsx +27 -61
  129. package/packages/router/src/Router.tsx +13 -59
  130. package/packages/router/src/history.ts +1 -8
  131. package/packages/router/src/index.ts +1 -1
  132. package/packages/router/src/utils.ts +4 -9
  133. package/packages/sass-utils/src/linear-gradient.scss +4 -9
  134. package/packages/sass-utils/src/scale.1080.scss +1 -3
  135. package/packages/sass-utils/src/scale.720.scss +1 -1
  136. package/packages/time/README.md +1 -4
  137. package/packages/time/src/Time.ts +13 -35
  138. package/packages/time/src/constants.ts +0 -1
  139. package/packages/toast/src/ToastService.tsx +5 -16
  140. package/packages/types-bigscreen-jsx/README.md +4 -5
  141. package/packages/types-bigscreen-jsx/index.d.ts +67 -72
  142. package/packages/utils/README.md +0 -27
  143. package/packages/utils/src/elementUtils.ts +0 -25
  144. package/packages/utils/src/index.ts +0 -8
  145. package/packages/utils/src/scaledImage.ts +3 -6
  146. package/packages/utils/src/textUtils.ts +14 -46
  147. package/packages/utils/src/wait.ts +1 -3
  148. package/packages/utils/src/xhr/xhrSend.ts +1 -3
  149. package/packages/utils/src/xhr/xhrSendRetry.ts +1 -3
  150. package/packages/zapping/src/ChannelZapping.ts +0 -9
  151. package/packages/zapping/src/Zapping.tsx +0 -10
  152. package/.vscode/settings.json +0 -6
  153. package/packages/analytics/README.md +0 -8
  154. package/packages/analytics/src/A.ts +0 -1
  155. package/packages/analytics/src/Analytics.ts +0 -1
  156. package/packages/analytics/src/analyticsOnScroll.ts +0 -1
  157. package/packages/analytics/src/clients/ConsoleAnalytics/ConsoleAnalytics.ts +0 -1
  158. package/packages/analytics/src/clients/ConsoleAnalytics/index.ts +0 -1
  159. package/packages/analytics/src/clients/GoogleAnalytics/GoogleAnalytics.ts +0 -200
  160. package/packages/analytics/src/clients/GoogleAnalytics/constants.ts +0 -118
  161. package/packages/analytics/src/clients/GoogleAnalytics/getUrl.ts +0 -17
  162. package/packages/analytics/src/clients/GoogleAnalytics/index.ts +0 -2
  163. package/packages/analytics/src/clients/GoogleAnalytics/interface.ts +0 -77
  164. package/packages/analytics/src/clients/GoogleAnalytics/mapPayload.ts +0 -50
  165. package/packages/analytics/src/clients/GoogleAnalytics/prepareBody.ts +0 -14
  166. package/packages/analytics/src/clients/TealiumAnalytics/TealiumAnalytics.ts +0 -169
  167. package/packages/analytics/src/clients/TealiumAnalytics/constants.ts +0 -102
  168. package/packages/analytics/src/clients/TealiumAnalytics/findIdForLanguage.ts +0 -9
  169. package/packages/analytics/src/clients/TealiumAnalytics/index.ts +0 -4
  170. package/packages/analytics/src/clients/TealiumAnalytics/interface.ts +0 -33
  171. package/packages/analytics/src/clients/TealiumAnalytics/mappers/__mocks__/mediaPayload.ts +0 -70
  172. package/packages/analytics/src/clients/TealiumAnalytics/mappers/helper.ts +0 -36
  173. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapAppError.ts +0 -13
  174. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteAdd.ts +0 -11
  175. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteRemove.ts +0 -11
  176. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerClose.ts +0 -15
  177. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerOpen.ts +0 -15
  178. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSceneView.ts +0 -18
  179. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearch.ts +0 -18
  180. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchFailed.ts +0 -8
  181. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchSuccess.ts +0 -8
  182. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoPause.ts +0 -15
  183. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoProgress.ts +0 -18
  184. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoResume.ts +0 -15
  185. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStart.ts +0 -15
  186. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStop.ts +0 -15
  187. package/packages/analytics/src/clients/TealiumAnalytics/types.ts +0 -156
  188. package/packages/analytics/src/clients/TwentyFourIQ/TwentyFourIQClient.ts +0 -116
  189. package/packages/analytics/src/clients/TwentyFourIQ/constants.ts +0 -99
  190. package/packages/analytics/src/clients/TwentyFourIQ/helper.ts +0 -34
  191. package/packages/analytics/src/clients/TwentyFourIQ/index.ts +0 -2
  192. package/packages/analytics/src/clients/TwentyFourIQ/interface.ts +0 -31
  193. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdLoaded.ts +0 -13
  194. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdSkipped.ts +0 -16
  195. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBase.ts +0 -21
  196. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBuffering.ts +0 -15
  197. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerClose.ts +0 -24
  198. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerOpen.ts +0 -18
  199. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapSceneView.ts +0 -15
  200. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapScroll.ts +0 -17
  201. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoComplete.ts +0 -21
  202. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoPause.ts +0 -24
  203. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoProgress.ts +0 -24
  204. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStart.ts +0 -34
  205. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStop.ts +0 -32
  206. package/packages/analytics/src/clients/TwentyFourIQ/types.ts +0 -115
  207. package/packages/analytics/src/constants.ts +0 -1
  208. package/packages/analytics/src/index.ts +0 -3
  209. package/packages/analytics/src/interface.ts +0 -1
  210. package/packages/analytics/src/utils/generateSessionId.ts +0 -8
  211. package/packages/create-package/dist/createPackage.js +0 -66
  212. package/packages/create-package/dist/createPackage.js.map +0 -1
  213. package/packages/create-package/dist/index.js +0 -5
  214. package/packages/create-package/dist/index.js.map +0 -1
  215. package/packages/create-package/dist/questionnaire/questions.js +0 -35
  216. package/packages/create-package/dist/questionnaire/questions.js.map +0 -1
  217. package/packages/create-package/dist/settings/Settings.js +0 -10
  218. package/packages/create-package/dist/settings/Settings.js.map +0 -1
  219. package/packages/create-package/dist/types.js +0 -3
  220. package/packages/create-package/dist/types.js.map +0 -1
  221. package/packages/device/src/driver/index.firetv.ts +0 -1
  222. package/packages/device/src/driver/index.smartcast.tv.ts +0 -1
  223. package/packages/driver-firetv/src/DeviceFireTV.ts +0 -18
  224. package/packages/driver-firetv/src/__mocks__/javaScriptBridge.ts +0 -36
  225. package/packages/driver-firetv/src/index.ts +0 -1
  226. package/packages/driver-smartcast/src/DeviceSmartCast.ts +0 -317
  227. package/packages/driver-smartcast/src/__mocks__/api.ts +0 -49
  228. package/packages/driver-smartcast/src/index.ts +0 -1
  229. package/packages/driver-smartcast/src/keymap.ts +0 -9
  230. package/packages/driver-smartcast/src/types.ts +0 -65
  231. package/packages/focus/src/hasFocus.ts +0 -36
  232. package/packages/input/src/utils.ts +0 -71
  233. package/packages/jsx/src/test-utils/keyup.ts +0 -27
  234. package/packages/keyboard/src/WhitelabelKeyboard/layouts/arabic.ts +0 -27
  235. package/packages/keyboard/src/WhitelabelKeyboard/layouts/burmese.ts +0 -27
  236. package/packages/keyboard/src/WhitelabelKeyboard/layouts/dari.ts +0 -28
  237. package/packages/keyboard/src/WhitelabelKeyboard/layouts/korean.ts +0 -26
  238. package/packages/keyboard/src/WhitelabelKeyboard/layouts/pashto.ts +0 -27
  239. package/packages/keyboard/src/WhitelabelKeyboard/layouts/persian.ts +0 -27
  240. package/packages/keyboard/src/WhitelabelKeyboard/layouts/russian.ts +0 -27
  241. package/packages/keyboard/src/WhitelabelKeyboard/layouts/tibetan.ts +0 -26
  242. package/packages/keyboard/src/WhitelabelKeyboard/layouts/turkish.ts +0 -26
  243. package/packages/keyboard/src/WhitelabelKeyboard/layouts/ukrainian.ts +0 -27
  244. package/packages/keyboard/src/WhitelabelKeyboard/layouts/urdu.ts +0 -26
  245. package/packages/l10n/src/date/de.ts +0 -97
  246. package/packages/l10n/src/date/es.ts +0 -71
  247. package/packages/l10n/src/date/fr.ts +0 -94
  248. package/packages/l10n/src/date/he.ts +0 -101
  249. package/packages/time/src/adapters/24iMediaTimeApi.ts +0 -47
  250. package/packages/time/src/services/24iMediaTimeApi/24iMediaTimeApi.ts +0 -43
  251. package/packages/time/src/services/24iMediaTimeApi/index.ts +0 -6
  252. package/packages/utils/src/forceReflow.ts +0 -14
  253. package/packages/utils/src/keyPress/index.ts +0 -6
  254. package/packages/utils/src/keyPress/keyPressSimulator.ts +0 -74
  255. package/packages/utils/src/keyPress/simulateKeyPress.ts +0 -25
  256. package/utils/release/release.ts +0 -154
@@ -4,12 +4,6 @@ import { SCREEN_WIDTH } from './sizes';
4
4
 
5
5
  const SAFE_TIMEOUT = 100;
6
6
 
7
- /**
8
- * Test if the element (or element in the reference) is wrapped visible. This means that the
9
- * element does not have `display: none` or `visibility: hidden`.
10
- * @param elementOrReference DOM element or reference to element on which we test wrapping
11
- * @returns true if element is visible
12
- */
13
7
  export const isElementVisible = (
14
8
  elementOrReference: HTMLElement | Reference<HTMLElement>,
15
9
  ) => {
@@ -19,18 +13,10 @@ export const isElementVisible = (
19
13
  return style.display !== 'none' && style.visibility !== 'hidden';
20
14
  };
21
15
 
22
- /**
23
- * Test if the element (or element in the reference) is wrapped fully visible. This means that the
24
- * element does not have `display: none` or `visibility: hidden` and exists
25
- * inside visible DOM tree, which exists in the document.body.
26
- * @param elementOrReference DOM element or reference to element on which we test wrapping
27
- * @returns true if element is visible
28
- */
29
16
  export const isElementFullyVisible = (
30
17
  elementOrReference: HTMLElement | Reference<HTMLElement>,
31
18
  ) => {
32
19
  const element = unwrapReference(elementOrReference);
33
- if (!element) return false;
34
20
  if (isElementVisible(element)) {
35
21
  let parent = element.parentElement;
36
22
  while (parent) {
@@ -47,16 +33,6 @@ export const isElementFullyVisible = (
47
33
  return false;
48
34
  };
49
35
 
50
- /**
51
- * Test if the element (or element in the reference) is wrapped by another element.
52
- * @param elementOrReference DOM element or reference to element on which we test wrapping
53
- * @param wrapperElementOrReferenceOrCondition wrapper element or certain condition (utils is
54
- * running upwards in the DOM tree from first element till some element has some specific condition)
55
- * @param includesElementItself if true, test will check also provided element itself.
56
- * This is useful in some cases when we need to include also provided element as wrapper
57
- * in one run of the util.
58
- * @returns true if the element is wrapped by provided wrapper
59
- */
60
36
  export const isElementWrappedBy = (
61
37
  elementOrReference: HTMLElement | Reference<HTMLElement>,
62
38
  wrapperElementOrReferenceOrCondition:
@@ -64,7 +40,6 @@ export const isElementWrappedBy = (
64
40
  includesElementItself = false,
65
41
  ) => {
66
42
  const element = unwrapReference(elementOrReference);
67
- if (!element) return false;
68
43
  let currentParent = includesElementItself ? element : element.parentElement;
69
44
  let wrapperElement: HTMLElement | null = null;
70
45
  let condition: ((currentWrapper: HTMLElement) => boolean) | null = null;
@@ -6,7 +6,6 @@ export { addClass } from './addClass';
6
6
  export { removeClass } from './removeClass';
7
7
  export { debounce } from './debounce';
8
8
  export { wait } from './wait';
9
- export { forceReflow } from './forceReflow';
10
9
  export { scaledImage } from './scaledImage';
11
10
  export { nTimes } from './nTimes';
12
11
  export { getDisplayToggler, DISPLAY_NONE } from './displayToggler';
@@ -16,7 +15,6 @@ export {
16
15
  isElementVisible,
17
16
  isElementFullyVisible,
18
17
  isElementWrappedBy,
19
- preventDefaultScroll,
20
18
  } from './elementUtils';
21
19
  export { createInterval, createTimeout, runAsync } from './timers';
22
20
  export type { TimedFunction } from './timers';
@@ -35,9 +33,3 @@ export {
35
33
  } from './timeConstants';
36
34
  export { xhrSend, xhrSendRetry, defaultRetryConfig, mockXhr } from './xhr';
37
35
  export type { XhrOptions, XhrResponse, RetryConfig, RSOptions, ShouldRetryParam } from './xhr';
38
- export {
39
- registerKeyPressSimulator,
40
- unregisterKeyPressSimulator,
41
- dispatchKeyboardEvent,
42
- simulateKeyPress,
43
- } from './keyPress';
@@ -1,18 +1,15 @@
1
+ export const DEFAULT_SCALING_ENDPOINT = 'http://imageresize.24i.com';
2
+
1
3
  type Dimensions = {
2
4
  height: number,
3
5
  width: number,
4
6
  fit?: 'cover' | 'contain' | 'inside',
5
7
  };
6
8
 
7
- const getEndpointProtocol = (protocol: string) => (protocol === 'https:' ? 'https:' : 'http:');
8
-
9
9
  const attention = (fit: Dimensions['fit']) => (
10
10
  fit === 'cover' ? '&a=attention' : ''
11
11
  );
12
12
 
13
- // eslint-disable-next-line max-len
14
- export const DEFAULT_SCALING_ENDPOINT = `${getEndpointProtocol(window.location.protocol)}//imageresize.24i.com`;
15
-
16
13
  const scaledImage = (
17
14
  url: string,
18
15
  { height, width, fit = 'cover' }: Dimensions,
@@ -21,4 +18,4 @@ const scaledImage = (
21
18
  `${scalingEndpoint}?url=${url}&h=${height}&w=${width}&fit=${fit}${attention(fit)}`
22
19
  );
23
20
 
24
- export { scaledImage, Dimensions, getEndpointProtocol };
21
+ export { scaledImage, Dimensions };
@@ -1,57 +1,25 @@
1
1
  const ELLIPSIS = '...';
2
2
 
3
- const trimWithEllipsis = (
4
- row: HTMLSpanElement | HTMLDivElement,
5
- requestedNumberOfLines: number,
6
- ellipsis = ELLIPSIS,
7
- ending = false,
8
- ) : void => {
9
- if (!row.textContent) {
10
- return;
11
- }
12
- const { visibility } = row.style;
13
- row.style.visibility = 'hidden';
14
- const lineHeightString = window.getComputedStyle(row, null).getPropertyValue('line-height');
15
- const lineHeight = parseInt(lineHeightString, 10);
16
- let numberOfLines = row.offsetHeight / lineHeight;
17
- if (numberOfLines > requestedNumberOfLines) {
18
- const originalTextContent = row.textContent!;
19
- row.textContent = ellipsis;
20
- let stringBuffer = '';
21
- if (ending) {
22
- let currentPosition = 0;
23
- do {
24
- stringBuffer += originalTextContent.charAt(currentPosition);
25
- row.textContent = stringBuffer + ellipsis;
26
- currentPosition += 1;
27
- numberOfLines = row.offsetHeight / lineHeight;
28
- } while (numberOfLines <= requestedNumberOfLines
29
- && currentPosition < originalTextContent.length);
30
- row.textContent = stringBuffer.substring(0, stringBuffer.length - 1) + ellipsis;
31
-
32
- } else {
3
+ export const trimWithLeadingEllipsis = (row: HTMLSpanElement, requestedNumberOfLines: number) => {
4
+ if (row && row.textContent != null) {
5
+ row.style.visibility = 'hidden';
6
+ const lineHeightString = window.getComputedStyle(row, null).getPropertyValue('line-height');
7
+ const lineHeight = parseInt(lineHeightString, 10);
8
+ let numberOfLines = row.offsetHeight / lineHeight;
9
+ if (numberOfLines > requestedNumberOfLines) {
10
+ const originalTextContent = row.textContent;
11
+ row.textContent = ELLIPSIS;
12
+ let stringBuffer = '';
33
13
  let currentPosition = originalTextContent.length - 1;
34
14
  do {
35
- const charToAdd = originalTextContent.charAt(currentPosition);
15
+ const charToAdd = originalTextContent.at(currentPosition);
36
16
  stringBuffer = `${charToAdd}${stringBuffer}`;
37
- row.textContent = `${ellipsis}${stringBuffer}`;
17
+ row.textContent = `${ELLIPSIS}${stringBuffer}`;
38
18
  currentPosition -= 1;
39
19
  numberOfLines = Math.floor(row.offsetHeight / lineHeight);
40
20
  } while (numberOfLines <= requestedNumberOfLines && currentPosition >= 0);
41
- row.textContent = `${ellipsis}${stringBuffer.substring(1)}`;
21
+ row.textContent = `${ELLIPSIS}${stringBuffer.substring(1)}`;
42
22
  }
23
+ row.style.visibility = '';
43
24
  }
44
- row.style.visibility = visibility;
45
25
  };
46
-
47
- export const trimWithLeadingEllipsis = (
48
- row: HTMLSpanElement | HTMLDivElement,
49
- requestedNumberOfLines: number,
50
- ellipsis = ELLIPSIS,
51
- ) => trimWithEllipsis(row, requestedNumberOfLines, ellipsis, false);
52
-
53
- export const trimWithEndingEllipsis = (
54
- row: HTMLSpanElement | HTMLDivElement,
55
- requestedNumberOfLines: number,
56
- ellipsis = ELLIPSIS,
57
- ) => trimWithEllipsis(row, requestedNumberOfLines, ellipsis, true);
@@ -1,3 +1 @@
1
- export const wait = (waitMs: number) => new Promise((r) => {
2
- setTimeout(r, waitMs);
3
- });
1
+ export const wait = (waitMs: number) => new Promise((r) => setTimeout(r, waitMs));
@@ -84,9 +84,7 @@ function xhrSend(url: string, options: Partial<XhrOptions> = {}): Promise<XhrRes
84
84
  const xhr = new XMLHttpRequest();
85
85
 
86
86
  function onLoad() {
87
- const dataText = 'response' in (xhr as XMLHttpRequest)
88
- ? xhr.response
89
- : xhr.responseText;
87
+ const dataText = 'response' in xhr ? xhr.response : xhr.responseText;
90
88
  const dataJson = parseJson(dataText);
91
89
  const status = xhr.status === undefined ? HttpStatusCode.OK : xhr.status;
92
90
  const statusText = xhr.statusText === undefined ? 'OK' : xhr.statusText;
@@ -68,9 +68,7 @@ Promise<XhrResponse | TypeError> {
68
68
  const shouldRetryFn = config.shouldRetry || defaultRetryConfig.shouldRetry;
69
69
  const shouldRetry = shouldRetryFn({ options, response, error });
70
70
  if (shouldRetry) {
71
- await new Promise((res) => {
72
- window.setTimeout(res, config.retryDelay);
73
- });
71
+ await new Promise((res) => window.setTimeout(res, config.retryDelay));
74
72
  config.currentRetryAttempt += 1;
75
73
  return xhrSendRetry(url, options);
76
74
  }
@@ -99,15 +99,6 @@ export class ChannelZapping<T extends Asset = Asset> {
99
99
  }
100
100
  }
101
101
 
102
- /**
103
- * Updates the current index of channel zapping.
104
- * @param channels the array of all channels
105
- * @param currentChannel currently active channel
106
- */
107
- onUpdate(channels: T[], currentChannel: T) {
108
- this.currentIndex = getCurrentChannelIndex(channels, currentChannel);
109
- }
110
-
111
102
  /**
112
103
  * Changes to the next/previous channel.
113
104
  * @param direction direction of the change
@@ -96,20 +96,10 @@ export class Zapping<T extends Asset = Asset> extends Component<Props<T>> {
96
96
  this.channelZapping!.onKeyDown(event);
97
97
  };
98
98
 
99
- /**
100
- * Updates channel zapping with new data.
101
- * @param channels the array of all channels
102
- * @param currentChannel currently active channel
103
- */
104
- onUpdate(channels: T[], currentChannel: T) {
105
- this.channelZapping!.onUpdate(channels, currentChannel);
106
- }
107
-
108
99
  render() {
109
100
  const { numericZapper } = this.props;
110
101
  return numericZapper
111
102
  ? <NumericZapper {...numericZapper} ref={zapperServiceRef} />
112
- // eslint-disable-next-line react/jsx-no-useless-fragment
113
103
  : <></>;
114
104
  }
115
105
  }
@@ -1,6 +0,0 @@
1
- {
2
- "cSpell.words": [
3
- "MEDIAPAYLOAD",
4
- "Tealium"
5
- ]
6
- }
@@ -1,8 +0,0 @@
1
- ---
2
- id: README
3
- title: Analytics
4
- hide_title: true
5
- sidebar_label: Analytics
6
- ---
7
-
8
- https://github.com/24i/appstage-shared-packages/blob/main/packages/analytics/README.md
@@ -1 +0,0 @@
1
- export { A } from '@24i/appstage-shared-analytics';
@@ -1 +0,0 @@
1
- export { analytics } from '@24i/appstage-shared-analytics';
@@ -1 +0,0 @@
1
- export { analyticsOnScroll } from '@24i/appstage-shared-analytics';
@@ -1 +0,0 @@
1
- export { ConsoleAnalytics } from '@24i/appstage-shared-analytics/dist/clients/ConsoleAnalytics';
@@ -1 +0,0 @@
1
- export { ConsoleAnalytics } from './ConsoleAnalytics';
@@ -1,200 +0,0 @@
1
- import { Storage } from '@24i/bigscreen-sdk/storage';
2
- import { device } from '@24i/bigscreen-sdk/device';
3
- import { debounce } from '@24i/bigscreen-sdk/utils/debounce';
4
- import { createTimeout } from '@24i/bigscreen-sdk/utils/timers';
5
- import { MINUTE_IN_MS } from '@24i/bigscreen-sdk/utils/timeConstants';
6
- import { generateUuid } from '@24i/bigscreen-sdk/utils/generateUuid';
7
- import { i18n } from '@24i/bigscreen-sdk/i18n';
8
- import type { AnalyticsClient, AnalyticsEventsMap, SceneInfo } from '../../interface';
9
- import { mapEventParamsToUrlParams, mapPayload } from './mapPayload';
10
- import { prepareBody } from './prepareBody';
11
- import { getUrl } from './getUrl';
12
- import { generateSessionId } from '../../utils/generateSessionId';
13
- import { GOOGLE_ANALYTICS_TRIGGERS, TRIGGER_NAME_TO_GA_EVENTS } from './constants';
14
- import {
15
- GAEventsNames,
16
- QueuedEvent,
17
- ConstantUrlParams,
18
- SessionInfo,
19
- EventUrlParams,
20
- } from './interface';
21
-
22
- const SEND_DEBOUNCE_MS = 5000;
23
- const MAX_QUEUE_LENGTH = 10;
24
- // eslint-disable-next-line no-magic-numbers
25
- const SESSION_TIMEOUT = 30 * MINUTE_IN_MS;
26
-
27
- const GA_CLIENT_ID = 'GA_client_id';
28
- const GA_SESSION_COUNTER = 'GA_session_counter';
29
- const GA_FIRST_VISIT = 'GA_first_visit';
30
-
31
- export class GoogleAnalytics implements AnalyticsClient {
32
- name = 'GoogleAnalytics';
33
-
34
- constantUrlParams: ConstantUrlParams = {
35
- cid: '',
36
- sid: 0,
37
- seg: 0,
38
- sct: 0,
39
- _p: generateUuid(),
40
- 'up.device_manufacturer': '',
41
- 'up.device_platform': '',
42
- 'up.device_platform_version': '',
43
- 'up.app_version': '',
44
- };
45
-
46
- manufacturer = '';
47
-
48
- platform = '';
49
-
50
- platformVersion = '';
51
-
52
- lastOnEvent: number | undefined = undefined;
53
-
54
- eventsQueue: QueuedEvent[] = [];
55
-
56
- sessionTimeout = createTimeout();
57
-
58
- isSessionActive = false;
59
-
60
- sessionStartSent = false;
61
-
62
- firstEvent = true;
63
-
64
- firstVisit: boolean | undefined = undefined;
65
-
66
- constructor(private id: string, private appVersion: string = '') {
67
- this.init();
68
- }
69
-
70
- async init() {
71
- const params = this.constantUrlParams;
72
- params.cid = await Storage.getItem(GA_CLIENT_ID) ?? '';
73
- if (!params.cid) {
74
- params.cid = generateUuid();
75
- await Storage.setItem(GA_CLIENT_ID, params.cid);
76
- }
77
- this.firstVisit = !(await Storage.getItem(GA_FIRST_VISIT)) ?? true;
78
- if (this.firstVisit) {
79
- await Storage.setItem(GA_FIRST_VISIT, '0');
80
- }
81
- this.manufacturer = await device.getManufacturerName();
82
- this.platform = await device.getPlatformName();
83
- this.platformVersion = await device.getPlatformVersion();
84
- await this.startSession();
85
- }
86
-
87
- async startSession() {
88
- const sessionNumber = parseInt(await Storage.getItem(GA_SESSION_COUNTER) ?? '0', 10) + 1;
89
- this.constantUrlParams.sct = sessionNumber;
90
- this.constantUrlParams.sid = generateSessionId();
91
- this.constantUrlParams['up.device_manufacturer'] = this.manufacturer;
92
- this.constantUrlParams['up.device_platform'] = this.platform;
93
- this.constantUrlParams['up.device_platform_version'] = this.platformVersion;
94
- this.constantUrlParams['up.app_version'] = this.appVersion;
95
- await Storage.setItem(GA_SESSION_COUNTER, sessionNumber.toString());
96
- this.isSessionActive = true;
97
- this.setSessionTimeout();
98
- }
99
-
100
- setSessionTimeout() {
101
- this.sessionTimeout.set(() => {
102
- this.isSessionActive = false;
103
- this.sessionStartSent = false;
104
- this.constantUrlParams.seg = 0;
105
- }, SESSION_TIMEOUT);
106
- }
107
-
108
- // @ts-ignore - cross event typing
109
- async onEvent<Event extends keyof AnalyticsEventsMap>(
110
- triggerName: Event,
111
- payload: Parameters<AnalyticsEventsMap[Event]>[0],
112
- ) {
113
- if (this.isSessionActive) {
114
- this.setSessionTimeout();
115
- } else {
116
- await this.startSession();
117
- }
118
- const events = TRIGGER_NAME_TO_GA_EVENTS[
119
- triggerName as typeof GOOGLE_ANALYTICS_TRIGGERS[number]
120
- ];
121
- const now = Date.now();
122
- const engagementTime = this.lastOnEvent ? now - this.lastOnEvent : undefined;
123
- this.lastOnEvent = now;
124
- await Promise.all(events.map(async (event, index) => {
125
- const sessionInfo = await this.getSessionInfo(
126
- index === 0 ? engagementTime : undefined,
127
- );
128
- const gtagPayload = mapPayload(
129
- event, triggerName, {
130
- ...payload,
131
- ...sessionInfo,
132
- },
133
- );
134
- const urlParams = mapEventParamsToUrlParams({
135
- ...sessionInfo as SessionInfo,
136
- ...payload as SceneInfo,
137
- });
138
- this.send(event, gtagPayload, urlParams);
139
- }));
140
- }
141
-
142
- private send(name: GAEventsNames, params: Record<string, any>, urlParams: EventUrlParams) {
143
- const lastUrlParams = JSON.stringify(
144
- this.eventsQueue[this.eventsQueue.length - 1]?.urlParams ?? {},
145
- );
146
- if (lastUrlParams !== '{}' && lastUrlParams !== JSON.stringify(urlParams)) {
147
- this.sendQueue();
148
- }
149
- if (this.constantUrlParams.seg === 0) {
150
- this.eventsQueue.push({ name, params, urlParams });
151
- this.sendQueue();
152
- this.constantUrlParams.seg = 1;
153
- return;
154
- }
155
- this.eventsQueue.push({ name, params, urlParams });
156
- if (this.eventsQueue.length >= MAX_QUEUE_LENGTH) {
157
- this.sendQueue();
158
- } else {
159
- this.sendQueueWithDelay();
160
- }
161
- }
162
-
163
- private sendQueue = () => {
164
- if (this.eventsQueue.length === 0) return;
165
- const body = prepareBody(this.eventsQueue);
166
- const { urlParams } = this.eventsQueue[0];
167
- this.eventsQueue.length = 0;
168
- try {
169
- fetch(getUrl(this.id, {
170
- ...this.constantUrlParams,
171
- ...urlParams,
172
- }), { method: 'POST', body });
173
- } catch (e) {
174
- // Effort to send was made.
175
- }
176
- };
177
-
178
- private sendQueueWithDelay = debounce(this.sendQueue, SEND_DEBOUNCE_MS);
179
-
180
- private async getSessionInfo(engagementTime: number | undefined): Promise<SessionInfo> {
181
- const sessionStarted = !this.sessionStartSent;
182
- this.sessionStartSent = true;
183
- const { firstEvent } = this;
184
- this.firstEvent = false;
185
- const { firstVisit } = this;
186
- this.firstVisit = false;
187
- return {
188
- appVersion: this.appVersion,
189
- manufacturer: this.manufacturer,
190
- language: i18n.getLanguage(),
191
- resolution: `${window.screen.width}x${window.screen.height}`,
192
- referrer: document.referrer,
193
- platform: this.platform,
194
- sessionStarted,
195
- engagementTime,
196
- firstEvent,
197
- firstVisit: firstVisit as boolean,
198
- };
199
- }
200
- }
@@ -1,118 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { GAEventsNames } from './interface';
3
-
4
- const stringParameter = 'ep';
5
- const numericParameter = 'epn';
6
-
7
- export const GOOGLE_ANALYTICS_TRIGGERS = [
8
- AnalyticsTriggers.SCENE_VIEW,
9
- AnalyticsTriggers.APP_CLOSE,
10
- // player triggers
11
- AnalyticsTriggers.PLAYBACK_10,
12
- AnalyticsTriggers.PLAYBACK_25,
13
- AnalyticsTriggers.PLAYBACK_50,
14
- AnalyticsTriggers.PLAYBACK_75,
15
- AnalyticsTriggers.PLAYBACK_90,
16
- AnalyticsTriggers.PLAYBACK_PAUSE,
17
- AnalyticsTriggers.PLAYBACK_START,
18
- AnalyticsTriggers.PLAYBACK_STOP,
19
- AnalyticsTriggers.PLAYER_CLOSE,
20
- AnalyticsTriggers.PLAYER_OPEN,
21
- AnalyticsTriggers.HEARTBEAT_5,
22
- // scroll triggers
23
- AnalyticsTriggers.SCROLL_25,
24
- AnalyticsTriggers.SCROLL_50,
25
- AnalyticsTriggers.SCROLL_75,
26
- AnalyticsTriggers.SCROLL_90,
27
- // additional triggers
28
- AnalyticsTriggers.APP_ERROR,
29
- AnalyticsTriggers.FAVORITE_ADD,
30
- AnalyticsTriggers.FAVORITE_REMOVE,
31
- AnalyticsTriggers.SEARCH,
32
- AnalyticsTriggers.RATE_CONTENT,
33
- // ads triggers
34
- AnalyticsTriggers.AD_LOADED,
35
- AnalyticsTriggers.AD_SKIPPED,
36
- // user triggers
37
- AnalyticsTriggers.LOGIN,
38
- AnalyticsTriggers.LOGOUT,
39
- AnalyticsTriggers.SIGN_UP,
40
- // purchases
41
- AnalyticsTriggers.PURCHASE_CANCEL,
42
- AnalyticsTriggers.PURCHASE_COMPLETE,
43
- AnalyticsTriggers.PURCHASE_START,
44
-
45
- ] as const;
46
-
47
- export const TRIGGER_NAME_TO_GA_EVENTS: Record<
48
- typeof GOOGLE_ANALYTICS_TRIGGERS[number], GAEventsNames[]
49
- > = {
50
- // App
51
- [AnalyticsTriggers.APP_CLOSE]: ['close_player_session', 'video_progress'],
52
-
53
- // Playback
54
- [AnalyticsTriggers.HEARTBEAT_5]: ['video_progress'],
55
- [AnalyticsTriggers.PLAYBACK_10]: ['video_progress'],
56
- [AnalyticsTriggers.PLAYBACK_25]: ['video_progress'],
57
- [AnalyticsTriggers.PLAYBACK_50]: ['video_progress'],
58
- [AnalyticsTriggers.PLAYBACK_75]: ['video_progress'],
59
- [AnalyticsTriggers.PLAYBACK_90]: ['video_complete'],
60
- [AnalyticsTriggers.PLAYBACK_PAUSE]: ['video_progress'],
61
- [AnalyticsTriggers.PLAYBACK_START]: ['video_start'],
62
- [AnalyticsTriggers.PLAYBACK_STOP]: ['video_progress'],
63
-
64
- // Player
65
- [AnalyticsTriggers.PLAYER_CLOSE]: ['close_player_session', 'video_progress'],
66
- [AnalyticsTriggers.PLAYER_OPEN]: ['open_player_session'],
67
-
68
- // Scenes
69
- [AnalyticsTriggers.SCENE_VIEW]: ['page_view'],
70
-
71
- // Scrolling in scene
72
- [AnalyticsTriggers.SCROLL_25]: ['scroll'],
73
- [AnalyticsTriggers.SCROLL_50]: ['scroll'],
74
- [AnalyticsTriggers.SCROLL_75]: ['scroll'],
75
- [AnalyticsTriggers.SCROLL_90]: ['scroll'],
76
-
77
- // purchases
78
- [AnalyticsTriggers.PURCHASE_CANCEL]: [],
79
- [AnalyticsTriggers.PURCHASE_COMPLETE]: [],
80
- [AnalyticsTriggers.PURCHASE_START]: [],
81
-
82
- // additional triggers
83
- [AnalyticsTriggers.APP_ERROR]: ['app_exception'],
84
- [AnalyticsTriggers.FAVORITE_ADD]: ['favorite_add'],
85
- [AnalyticsTriggers.FAVORITE_REMOVE]: ['favorite_remove'],
86
- [AnalyticsTriggers.SEARCH]: ['search'],
87
- [AnalyticsTriggers.RATE_CONTENT]: ['rate_content'],
88
-
89
- // ads triggers
90
- [AnalyticsTriggers.AD_LOADED]: ['ad_loaded'],
91
- [AnalyticsTriggers.AD_SKIPPED]: ['ad_skipped'],
92
-
93
- // user triggers
94
- [AnalyticsTriggers.LOGIN]: ['login'],
95
- [AnalyticsTriggers.LOGOUT]: ['logout'],
96
- [AnalyticsTriggers.SIGN_UP]: ['sign_up'],
97
- };
98
-
99
- export const gtagPayloadParams: Record<string, string> = {
100
- contentType: `${stringParameter}.content_type`,
101
- itemId: `${stringParameter}.video_asset_id`,
102
- episodeNumber: `${numericParameter}.video_episode_number`,
103
- seasonNumber: `${numericParameter}.video_season_number`,
104
- currentTime: `${numericParameter}.video_current_time`,
105
- duration: `${numericParameter}.video_duration`,
106
- percent: `${numericParameter}.video_percent`,
107
- provider: `${stringParameter}.video_provider`,
108
- title: `${stringParameter}.video_title`,
109
- seriesTitle: `${stringParameter}.video_series_title`,
110
- url: `${stringParameter}.video_url`,
111
- assetId: `${stringParameter}.video_asset_id`,
112
- externalId: `${stringParameter}.video_external_id`,
113
- channelNumber: `${numericParameter}.channel_number`,
114
- channelTitle: `${stringParameter}.channel_title`,
115
- method: `${stringParameter}.method`,
116
- searchTerm: `${stringParameter}.search_term`,
117
- message: `${stringParameter}.message`,
118
- };
@@ -1,17 +0,0 @@
1
- import { ConstantUrlParams, EventUrlParams } from './interface';
2
-
3
- const TRANSPORT_URL = 'https://www.google-analytics.com/g/collect?';
4
- // You can use the following URL for debugging if the events are not getting collected.
5
- // const TRANSPORT_URL = 'https://www.google-analytics.com/debug/g/collec?';
6
-
7
- export const getUrl = (id: string, params: ConstantUrlParams & EventUrlParams) => {
8
- const urlParts = [
9
- TRANSPORT_URL,
10
- `v=2&tid=${id}`,
11
- ];
12
- (Object.keys(params) as (keyof (ConstantUrlParams & EventUrlParams))[])
13
- .forEach((paramName: keyof (ConstantUrlParams & EventUrlParams)) => {
14
- urlParts.push(`&${paramName}=${encodeURIComponent(params[paramName])}`);
15
- });
16
- return urlParts.join('');
17
- };
@@ -1,2 +0,0 @@
1
- export { GoogleAnalytics } from './GoogleAnalytics';
2
- export { GOOGLE_ANALYTICS_TRIGGERS } from './constants';