@24i/bigscreen-sdk 1.0.33-alpha.2548 → 1.0.33

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 (1055) hide show
  1. package/README.md +47 -47
  2. package/__mocks__/@24i/bigscreen-sdk/animations.ts +2 -2
  3. package/package.json +8 -8
  4. package/packages/adobe-heartbeat/README.md +46 -46
  5. package/packages/adobe-heartbeat/src/AdobeHeartbeat.ts +244 -244
  6. package/packages/adobe-heartbeat/src/__external__/Adobe/Adobe.d.ts +24 -24
  7. package/packages/adobe-heartbeat/src/__external__/Adobe/MediaSDK.min.d.ts +126 -126
  8. package/packages/adobe-heartbeat/src/__external__/Adobe/MediaSDK.min.js +76 -76
  9. package/packages/adobe-heartbeat/src/index.ts +5 -5
  10. package/packages/adobe-heartbeat/src/types.ts +67 -67
  11. package/packages/analytics/README.md +7 -7
  12. package/packages/analytics/src/A.ts +1 -1
  13. package/packages/analytics/src/Analytics.ts +1 -1
  14. package/packages/analytics/src/analyticsOnScroll.ts +1 -1
  15. package/packages/analytics/src/clients/ConsoleAnalytics/ConsoleAnalytics.ts +1 -1
  16. package/packages/analytics/src/clients/ConsoleAnalytics/index.ts +1 -1
  17. package/packages/analytics/src/clients/GoogleAnalytics/GoogleAnalytics.ts +200 -200
  18. package/packages/analytics/src/clients/GoogleAnalytics/constants.ts +118 -118
  19. package/packages/analytics/src/clients/GoogleAnalytics/generateSessionId.ts +8 -8
  20. package/packages/analytics/src/clients/GoogleAnalytics/getUrl.ts +17 -17
  21. package/packages/analytics/src/clients/GoogleAnalytics/index.ts +2 -2
  22. package/packages/analytics/src/clients/GoogleAnalytics/interface.ts +77 -77
  23. package/packages/analytics/src/clients/GoogleAnalytics/mapPayload.ts +50 -50
  24. package/packages/analytics/src/clients/GoogleAnalytics/prepareBody.ts +14 -14
  25. package/packages/analytics/src/clients/TwentyFourIQ/TwentyFourIQClient.ts +116 -116
  26. package/packages/analytics/src/clients/TwentyFourIQ/constants.ts +99 -99
  27. package/packages/analytics/src/clients/TwentyFourIQ/generateSessionId.ts +8 -8
  28. package/packages/analytics/src/clients/TwentyFourIQ/helper.ts +34 -34
  29. package/packages/analytics/src/clients/TwentyFourIQ/index.ts +2 -2
  30. package/packages/analytics/src/clients/TwentyFourIQ/interface.ts +31 -31
  31. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdLoaded.ts +13 -13
  32. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdSkipped.ts +16 -16
  33. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBase.ts +21 -21
  34. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBuffering.ts +15 -15
  35. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerClose.ts +24 -24
  36. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerOpen.ts +18 -18
  37. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapSceneView.ts +15 -15
  38. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapScroll.ts +17 -17
  39. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoComplete.ts +21 -21
  40. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoPause.ts +24 -24
  41. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoProgress.ts +24 -24
  42. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStart.ts +34 -34
  43. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStop.ts +32 -32
  44. package/packages/analytics/src/clients/TwentyFourIQ/types.ts +115 -115
  45. package/packages/analytics/src/constants.ts +1 -1
  46. package/packages/analytics/src/index.ts +3 -3
  47. package/packages/analytics/src/interface.ts +1 -1
  48. package/packages/animations/README.md +85 -85
  49. package/packages/animations/src/AnimationUtils.ts +238 -238
  50. package/packages/animations/src/JSAnimations.ts +144 -144
  51. package/packages/animations/src/__mocks__/JSAnimations.ts +30 -30
  52. package/packages/animations/src/index.ts +3 -3
  53. package/packages/announcement-banner/README.md +49 -49
  54. package/packages/announcement-banner/src/AnnouncementBanner.scss +8 -8
  55. package/packages/announcement-banner/src/AnnouncementBanner.tsx +136 -136
  56. package/packages/announcement-banner/src/index.ts +1 -1
  57. package/packages/async-image/README.md +47 -47
  58. package/packages/async-image/src/AsyncImage.tsx +101 -101
  59. package/packages/async-image/src/index.ts +2 -2
  60. package/packages/conviva/README.md +47 -47
  61. package/packages/conviva/src/ConvivaSDK.ts +38 -38
  62. package/packages/conviva/src/__mocks__/ConvivaMock.ts +36 -36
  63. package/packages/conviva/src/index.ts +1 -1
  64. package/packages/conviva/src/theoPlugin/ConvivaConviguration.ts +19 -19
  65. package/packages/conviva/src/theoPlugin/__external__/Conviva_4.0.15.js +698 -698
  66. package/packages/conviva/src/theoPlugin/__external__/convivaTheoPlugin.d.ts +7 -7
  67. package/packages/conviva/src/theoPlugin/__external__/convivaTheoPlugin.js +635 -635
  68. package/packages/conviva/src/theoPlugin/convivaTheoPluginWrapper.ts +61 -61
  69. package/packages/conviva/src/theoPlugin/index.ts +2 -2
  70. package/packages/developer-tools/DeveloperConsole/README.md +114 -114
  71. package/packages/developer-tools/DeveloperConsole/index.ts +3 -3
  72. package/packages/developer-tools/DeveloperConsole/unstyled.ts +1 -1
  73. package/packages/developer-tools/DeveloperToolsService/README.md +54 -54
  74. package/packages/developer-tools/DeveloperToolsService/index.ts +3 -3
  75. package/packages/developer-tools/DeveloperToolsService/unstyled.ts +1 -1
  76. package/packages/developer-tools/EnvironmentSelection/README.md +77 -77
  77. package/packages/developer-tools/EnvironmentSelection/index.ts +3 -3
  78. package/packages/developer-tools/EnvironmentSelection/unstyled.ts +1 -1
  79. package/packages/developer-tools/PlayerDebugWindow/README.md +65 -65
  80. package/packages/developer-tools/PlayerDebugWindow/index.ts +3 -3
  81. package/packages/developer-tools/PlayerDebugWindow/unstyled.ts +1 -1
  82. package/packages/developer-tools/README.md +24 -24
  83. package/packages/developer-tools/TechnicalInfo/README.md +90 -90
  84. package/packages/developer-tools/TechnicalInfo/index.ts +9 -9
  85. package/packages/developer-tools/TechnicalInfo/unstyled.ts +6 -6
  86. package/packages/developer-tools/src/DeveloperConsole/ControlButton.tsx +16 -16
  87. package/packages/developer-tools/src/DeveloperConsole/DeveloperConsole.tsx +389 -389
  88. package/packages/developer-tools/src/DeveloperConsole/Panel.tsx +108 -108
  89. package/packages/developer-tools/src/DeveloperConsole/PanelMessage.tsx +33 -33
  90. package/packages/developer-tools/src/DeveloperConsole/helpers/Queue.ts +38 -38
  91. package/packages/developer-tools/src/DeveloperConsole/helpers/index.ts +2 -2
  92. package/packages/developer-tools/src/DeveloperConsole/helpers/instrumentHandler.ts +165 -165
  93. package/packages/developer-tools/src/DeveloperConsole/index.ts +2 -2
  94. package/packages/developer-tools/src/DeveloperConsole/initDeveloperConsole.tsx +8 -8
  95. package/packages/developer-tools/src/DeveloperConsole/styles/DeveloperConsole/DeveloperConsole.scss +91 -91
  96. package/packages/developer-tools/src/DeveloperConsole/styles/DeveloperConsole/DeveloperConsole.styles.1080.scss +2 -2
  97. package/packages/developer-tools/src/DeveloperConsole/styles/DeveloperConsole/DeveloperConsole.styles.scss +2 -2
  98. package/packages/developer-tools/src/DeveloperConsole/styles/DeveloperConsole/_sizes.1080.scss +16 -16
  99. package/packages/developer-tools/src/DeveloperConsole/styles/DeveloperConsole/_sizes.scss +16 -16
  100. package/packages/developer-tools/src/DeveloperConsole/styles/Panel/Panel.scss +87 -87
  101. package/packages/developer-tools/src/DeveloperConsole/styles/Panel/Panel.styles.1080.scss +2 -2
  102. package/packages/developer-tools/src/DeveloperConsole/styles/Panel/Panel.styles.scss +2 -2
  103. package/packages/developer-tools/src/DeveloperConsole/styles/Panel/_sizes.1080.scss +9 -9
  104. package/packages/developer-tools/src/DeveloperConsole/styles/Panel/_sizes.scss +9 -9
  105. package/packages/developer-tools/src/DeveloperConsole/styles.ts +2 -2
  106. package/packages/developer-tools/src/DeveloperConsole/types.ts +49 -49
  107. package/packages/developer-tools/src/DeveloperConsole/utils/formatTime.ts +13 -13
  108. package/packages/developer-tools/src/DeveloperConsole/utils/index.ts +3 -3
  109. package/packages/developer-tools/src/DeveloperConsole/utils/stringify.ts +10 -10
  110. package/packages/developer-tools/src/DeveloperConsole/utils/styles.ts +24 -24
  111. package/packages/developer-tools/src/DeveloperToolsService/DeveloperToolItem.tsx +21 -21
  112. package/packages/developer-tools/src/DeveloperToolsService/DeveloperToolsList.tsx +125 -125
  113. package/packages/developer-tools/src/DeveloperToolsService/DeveloperToolsService.tsx +122 -122
  114. package/packages/developer-tools/src/DeveloperToolsService/index.ts +1 -1
  115. package/packages/developer-tools/src/DeveloperToolsService/styles/DeveloperToolsService.scss +64 -64
  116. package/packages/developer-tools/src/DeveloperToolsService/styles/DeveloperToolsService.styles.1080.scss +2 -2
  117. package/packages/developer-tools/src/DeveloperToolsService/styles/DeveloperToolsService.styles.animated.1080.scss +3 -3
  118. package/packages/developer-tools/src/DeveloperToolsService/styles/DeveloperToolsService.styles.animated.scss +4 -4
  119. package/packages/developer-tools/src/DeveloperToolsService/styles/DeveloperToolsService.styles.scss +2 -2
  120. package/packages/developer-tools/src/DeveloperToolsService/styles/_animated.scss +5 -5
  121. package/packages/developer-tools/src/DeveloperToolsService/styles/_sizes.1080.scss +16 -16
  122. package/packages/developer-tools/src/DeveloperToolsService/styles/_sizes.scss +16 -16
  123. package/packages/developer-tools/src/DeveloperToolsService/styles.ts +1 -1
  124. package/packages/developer-tools/src/EnvironmentSelection/EnvironmentList.tsx +90 -90
  125. package/packages/developer-tools/src/EnvironmentSelection/EnvironmentListItem.tsx +106 -106
  126. package/packages/developer-tools/src/EnvironmentSelection/EnvironmentSelection.tsx +102 -102
  127. package/packages/developer-tools/src/EnvironmentSelection/assets/checkmark.svg +18 -18
  128. package/packages/developer-tools/src/EnvironmentSelection/config.ts +43 -43
  129. package/packages/developer-tools/src/EnvironmentSelection/constants.ts +1 -1
  130. package/packages/developer-tools/src/EnvironmentSelection/index.ts +2 -2
  131. package/packages/developer-tools/src/EnvironmentSelection/sizes.1080.ts +5 -5
  132. package/packages/developer-tools/src/EnvironmentSelection/sizes.ts +5 -5
  133. package/packages/developer-tools/src/EnvironmentSelection/styles/EnvironmentSelection.scss +141 -141
  134. package/packages/developer-tools/src/EnvironmentSelection/styles/EnvironmentSelection.styles.1080.scss +2 -2
  135. package/packages/developer-tools/src/EnvironmentSelection/styles/EnvironmentSelection.styles.animated.1080.scss +3 -3
  136. package/packages/developer-tools/src/EnvironmentSelection/styles/EnvironmentSelection.styles.animated.scss +3 -3
  137. package/packages/developer-tools/src/EnvironmentSelection/styles/EnvironmentSelection.styles.scss +2 -2
  138. package/packages/developer-tools/src/EnvironmentSelection/styles/_animated.scss +9 -9
  139. package/packages/developer-tools/src/EnvironmentSelection/styles/_sizes.1080.scss +26 -26
  140. package/packages/developer-tools/src/EnvironmentSelection/styles/_sizes.scss +26 -26
  141. package/packages/developer-tools/src/EnvironmentSelection/styles.ts +1 -1
  142. package/packages/developer-tools/src/EnvironmentSelection/types.ts +10 -10
  143. package/packages/developer-tools/src/EnvironmentSelection/utils/format.ts +4 -4
  144. package/packages/developer-tools/src/IDeveloperTool.ts +14 -14
  145. package/packages/developer-tools/src/PlayerDebugWindow/PlayerDebugWindow.tsx +115 -115
  146. package/packages/developer-tools/src/PlayerDebugWindow/constants.ts +128 -128
  147. package/packages/developer-tools/src/PlayerDebugWindow/index.ts +1 -1
  148. package/packages/developer-tools/src/PlayerDebugWindow/styles/PlayerDebugWindow.scss +29 -29
  149. package/packages/developer-tools/src/PlayerDebugWindow/styles/PlayerDebugWindow.styles.1080.scss +2 -2
  150. package/packages/developer-tools/src/PlayerDebugWindow/styles/PlayerDebugWindow.styles.scss +2 -2
  151. package/packages/developer-tools/src/PlayerDebugWindow/styles/_sizes.1080.scss +11 -11
  152. package/packages/developer-tools/src/PlayerDebugWindow/styles/_sizes.scss +11 -11
  153. package/packages/developer-tools/src/PlayerDebugWindow/styles.ts +1 -1
  154. package/packages/developer-tools/src/TechnicalInfo/ITechnicalInfoProvider.ts +5 -5
  155. package/packages/developer-tools/src/TechnicalInfo/TechnicalInfo.tsx +125 -125
  156. package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoDetail.tsx +77 -77
  157. package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoProvider.ts +349 -349
  158. package/packages/developer-tools/src/TechnicalInfo/__mocks__/Device.ts +55 -55
  159. package/packages/developer-tools/src/TechnicalInfo/__mocks__/Player.ts +7 -7
  160. package/packages/developer-tools/src/TechnicalInfo/__mocks__/Storage.ts +9 -9
  161. package/packages/developer-tools/src/TechnicalInfo/icons/arrow-down.svg +18 -18
  162. package/packages/developer-tools/src/TechnicalInfo/icons/arrow-up.svg +18 -18
  163. package/packages/developer-tools/src/TechnicalInfo/index.ts +5 -5
  164. package/packages/developer-tools/src/TechnicalInfo/sizes.1080.ts +1 -1
  165. package/packages/developer-tools/src/TechnicalInfo/sizes.ts +1 -1
  166. package/packages/developer-tools/src/TechnicalInfo/styles/TechnicalInfo.scss +187 -187
  167. package/packages/developer-tools/src/TechnicalInfo/styles/TechnicalInfo.styles.1080.scss +2 -2
  168. package/packages/developer-tools/src/TechnicalInfo/styles/TechnicalInfo.styles.animated.1080.scss +3 -3
  169. package/packages/developer-tools/src/TechnicalInfo/styles/TechnicalInfo.styles.animated.scss +3 -3
  170. package/packages/developer-tools/src/TechnicalInfo/styles/TechnicalInfo.styles.scss +2 -2
  171. package/packages/developer-tools/src/TechnicalInfo/styles/_animated.scss +16 -16
  172. package/packages/developer-tools/src/TechnicalInfo/styles/_sizes.1080.scss +50 -50
  173. package/packages/developer-tools/src/TechnicalInfo/styles/_sizes.scss +50 -50
  174. package/packages/developer-tools/src/TechnicalInfo/styles.ts +1 -1
  175. package/packages/developer-tools/src/TechnicalInfo/translations.ts +79 -79
  176. package/packages/developer-tools/src/TechnicalInfo/utils/eme01bSupport.ts +58 -58
  177. package/packages/developer-tools/src/TechnicalInfo/utils/emeSupport.ts +84 -84
  178. package/packages/developer-tools/src/TechnicalInfo/utils/formatTimezone.ts +15 -15
  179. package/packages/developer-tools/src/TechnicalInfo/utils/mseSupport.ts +14 -14
  180. package/packages/developer-tools/src/utils/reload.ts +6 -6
  181. package/packages/device/README.md +219 -219
  182. package/packages/device/keymap.ts +1 -1
  183. package/packages/device/resolver/index.ts +2 -2
  184. package/packages/device/resolver/keymap.ts +1 -1
  185. package/packages/device/src/DeviceEventMap.ts +1 -1
  186. package/packages/device/src/device.ts +6 -6
  187. package/packages/device/src/driver/index.android.tv.ts +1 -1
  188. package/packages/device/src/driver/index.entone.ts +1 -1
  189. package/packages/device/src/driver/index.firetv.ts +1 -1
  190. package/packages/device/src/driver/index.hbbtv.tv.ts +1 -1
  191. package/packages/device/src/driver/index.kreatv.ts +1 -1
  192. package/packages/device/src/driver/index.saphi.tv.ts +1 -1
  193. package/packages/device/src/driver/index.smartcast.tv.ts +1 -1
  194. package/packages/device/src/driver/index.tizen.tv.ts +1 -1
  195. package/packages/device/src/driver/index.ts +1 -1
  196. package/packages/device/src/driver/index.vidaa.tv.ts +1 -1
  197. package/packages/device/src/driver/index.webos.tv.ts +1 -1
  198. package/packages/device/src/getKeyDigit.ts +35 -35
  199. package/packages/device/src/getKeyMap.ts +4 -4
  200. package/packages/device/src/index.ts +8 -8
  201. package/packages/device/src/isClickOrEnter.ts +3 -3
  202. package/packages/device/src/resolver/index.ts +2 -2
  203. package/packages/device/src/resolver/resolver.ts +84 -84
  204. package/packages/digital-clock/README.md +26 -26
  205. package/packages/digital-clock/src/DigitalClock.tsx +78 -78
  206. package/packages/digital-clock/src/index.ts +1 -1
  207. package/packages/driver-androidtv/src/DeviceAndroidTV.ts +224 -224
  208. package/packages/driver-androidtv/src/__mocks__/javaScriptBridge.ts +36 -36
  209. package/packages/driver-androidtv/src/formatUserAgent.ts +11 -11
  210. package/packages/driver-androidtv/src/index.ts +1 -1
  211. package/packages/driver-androidtv/src/keymap.ts +27 -27
  212. package/packages/driver-androidtv/src/types.ts +113 -113
  213. package/packages/driver-base/DeviceBase.md +139 -139
  214. package/packages/driver-base/README.md +44 -44
  215. package/packages/driver-base/src/ConnectionType.ts +1 -1
  216. package/packages/driver-base/src/DeviceBase.ts +224 -224
  217. package/packages/driver-base/src/KeyMap/Key.ts +48 -48
  218. package/packages/driver-base/src/KeyMap/KeyMap.ts +390 -390
  219. package/packages/driver-base/src/KeyMap/generateKeyCodeKeyMap.ts +11 -11
  220. package/packages/driver-base/src/KeyMap/index.ts +5 -5
  221. package/packages/driver-base/src/KeyMap/interface.ts +8 -8
  222. package/packages/driver-base/src/KeyMap/overrideValues.ts +17 -17
  223. package/packages/driver-base/src/KeyMap/switchByKey.ts +18 -18
  224. package/packages/driver-base/src/ScreenSize.ts +1 -1
  225. package/packages/driver-base/src/VolumeRange.ts +5 -5
  226. package/packages/driver-base/src/__mocks__/DeviceBase.ts +100 -100
  227. package/packages/driver-base/src/__mocks__/keyMap.ts +42 -42
  228. package/packages/driver-base/src/bindPreventDefaultEvent.ts +5 -5
  229. package/packages/driver-base/src/errors.ts +32 -32
  230. package/packages/driver-base/src/index.ts +10 -10
  231. package/packages/driver-base/src/loadObject.ts +30 -30
  232. package/packages/driver-base/src/types/DeviceEvent.ts +11 -11
  233. package/packages/driver-base/src/types/ExitOptions.ts +1 -1
  234. package/packages/driver-base/src/types/KeycodeKeyMap.ts +86 -86
  235. package/packages/driver-base/src/types/ScreenSaverStatus.ts +3 -3
  236. package/packages/driver-base/src/utils.ts +10 -10
  237. package/packages/driver-browser/src/DeviceBrowser.ts +170 -170
  238. package/packages/driver-browser/src/getBrowser.ts +51 -51
  239. package/packages/driver-browser/src/getOsName.ts +30 -30
  240. package/packages/driver-browser/src/index.ts +1 -1
  241. package/packages/driver-browser/src/keymap.ts +22 -22
  242. package/packages/driver-browser/src/patchSuitestKeys.ts +27 -27
  243. package/packages/driver-entone/README.md +9 -9
  244. package/packages/driver-entone/src/DeviceEntone.ts +232 -232
  245. package/packages/driver-entone/src/IEntone.ts +460 -460
  246. package/packages/driver-entone/src/__mocks__/entone.ts +177 -177
  247. package/packages/driver-entone/src/constants.ts +73 -73
  248. package/packages/driver-entone/src/index.ts +1 -1
  249. package/packages/driver-entone/src/keymap.ts +57 -57
  250. package/packages/driver-firetv/src/DeviceFireTV.ts +18 -18
  251. package/packages/driver-firetv/src/__mocks__/javaScriptBridge.ts +36 -36
  252. package/packages/driver-firetv/src/index.ts +1 -1
  253. package/packages/driver-hbbtv/src/DeviceHbbTV.ts +313 -313
  254. package/packages/driver-hbbtv/src/__mocks__/hbbtv.ts +17 -17
  255. package/packages/driver-hbbtv/src/constants.ts +28 -28
  256. package/packages/driver-hbbtv/src/deviceInfo.ts +23 -23
  257. package/packages/driver-hbbtv/src/getVersion.ts +16 -16
  258. package/packages/driver-hbbtv/src/index.ts +1 -1
  259. package/packages/driver-hbbtv/src/keymap.ts +45 -45
  260. package/packages/driver-hbbtv/src/types.ts +366 -366
  261. package/packages/driver-kreatv/src/DeviceKreaTV.ts +271 -271
  262. package/packages/driver-kreatv/src/IToi.ts +379 -379
  263. package/packages/driver-kreatv/src/__mocks__/toi2.ts +76 -76
  264. package/packages/driver-kreatv/src/__mocks__/toi3.ts +43 -43
  265. package/packages/driver-kreatv/src/index.ts +1 -1
  266. package/packages/driver-kreatv/src/keymap.ts +31 -31
  267. package/packages/driver-kreatv/src/toi2.ts +107 -107
  268. package/packages/driver-kreatv/src/toi3.ts +102 -102
  269. package/packages/driver-kreatv/src/types.ts +35 -35
  270. package/packages/driver-saphi/src/DeviceSaphi.ts +144 -144
  271. package/packages/driver-saphi/src/__mocks__/SmartTvA_API.ts +11 -11
  272. package/packages/driver-saphi/src/__mocks__/userAgent.ts +4 -4
  273. package/packages/driver-saphi/src/constants.ts +1 -1
  274. package/packages/driver-saphi/src/formatUserAgent.ts +19 -19
  275. package/packages/driver-saphi/src/index.ts +1 -1
  276. package/packages/driver-saphi/src/keymap.ts +64 -64
  277. package/packages/driver-saphi/src/types.ts +75 -75
  278. package/packages/driver-smartcast/src/DeviceSmartCast.ts +310 -310
  279. package/packages/driver-smartcast/src/__mocks__/api.ts +49 -49
  280. package/packages/driver-smartcast/src/index.ts +1 -1
  281. package/packages/driver-smartcast/src/keymap.ts +9 -9
  282. package/packages/driver-smartcast/src/types.ts +65 -65
  283. package/packages/driver-tizen/src/DeviceTizen.ts +298 -298
  284. package/packages/driver-tizen/src/ITizen.ts +212 -212
  285. package/packages/driver-tizen/src/IWebapis.ts +95 -95
  286. package/packages/driver-tizen/src/TizenKeys.ts +96 -96
  287. package/packages/driver-tizen/src/__mocks__/tizen.ts +35 -35
  288. package/packages/driver-tizen/src/constants.ts +197 -197
  289. package/packages/driver-tizen/src/index.ts +1 -1
  290. package/packages/driver-tizen/src/types.ts +14 -14
  291. package/packages/driver-vidaa/src/DeviceVidaa.ts +141 -141
  292. package/packages/driver-vidaa/src/__mocks__/vidaa.ts +21 -21
  293. package/packages/driver-vidaa/src/constants.ts +8 -8
  294. package/packages/driver-vidaa/src/formatUserAgent.ts +16 -16
  295. package/packages/driver-vidaa/src/index.ts +1 -1
  296. package/packages/driver-vidaa/src/keymap.ts +56 -56
  297. package/packages/driver-vidaa/src/types.ts +90 -90
  298. package/packages/driver-webos/src/DeviceWebos.ts +313 -313
  299. package/packages/driver-webos/src/__mocks__/webos.ts +172 -172
  300. package/packages/driver-webos/src/constants.ts +20 -20
  301. package/packages/driver-webos/src/index.ts +1 -1
  302. package/packages/driver-webos/src/keymap.ts +10 -10
  303. package/packages/driver-webos/src/types.ts +344 -344
  304. package/packages/driver-webos/src/utils.ts +60 -60
  305. package/packages/driver-webos/src/webOSTVjs/webOSTVjs.js +12 -12
  306. package/packages/driver-xbox/__external__/winjs/directionalnavigation-1.0.0.0.js +1015 -1015
  307. package/packages/driver-xbox/src/DeviceXbox.ts +231 -231
  308. package/packages/driver-xbox/src/__mocks__/Windows.ts +94 -94
  309. package/packages/driver-xbox/src/index.ts +1 -1
  310. package/packages/driver-xbox/src/interfaces.ts +138 -138
  311. package/packages/driver-xbox/src/keymap.ts +96 -96
  312. package/packages/driver-xbox/src/utils.ts +23 -23
  313. package/packages/epg/IMPLEMENTATION.md +228 -228
  314. package/packages/epg/MockGenerator.md +102 -102
  315. package/packages/epg/README.md +585 -585
  316. package/packages/epg/src/v2/Cell.tsx +222 -222
  317. package/packages/epg/src/v2/CellsManager.ts +1 -1
  318. package/packages/epg/src/v2/DataManager.ts +372 -372
  319. package/packages/epg/src/v2/DatePicker.tsx +110 -110
  320. package/packages/epg/src/v2/DateToast/DateToast.scss +28 -28
  321. package/packages/epg/src/v2/DateToast/DateToast.styles.1080.scss +2 -2
  322. package/packages/epg/src/v2/DateToast/DateToast.styles.scss +2 -2
  323. package/packages/epg/src/v2/DateToast/DateToast.tsx +90 -90
  324. package/packages/epg/src/v2/DateToast/_sizes.1080.scss +7 -7
  325. package/packages/epg/src/v2/DateToast/_sizes.scss +7 -7
  326. package/packages/epg/src/v2/DateToast/index.tsx +1 -1
  327. package/packages/epg/src/v2/DateToast/styles.ts +1 -1
  328. package/packages/epg/src/v2/Day.tsx +33 -33
  329. package/packages/epg/src/v2/Epg.tsx +462 -462
  330. package/packages/epg/src/v2/Header.tsx +41 -41
  331. package/packages/epg/src/v2/IdleController.ts +25 -25
  332. package/packages/epg/src/v2/InputEvents.ts +301 -301
  333. package/packages/epg/src/v2/MockGenerator/config.1080.ts +2 -2
  334. package/packages/epg/src/v2/MockGenerator/config.ts +2 -2
  335. package/packages/epg/src/v2/MockGenerator/generator.ts +174 -174
  336. package/packages/epg/src/v2/MockGenerator/index.ts +2 -2
  337. package/packages/epg/src/v2/MockGenerator/mocks/data.ts +102 -102
  338. package/packages/epg/src/v2/MockGenerator/types.ts +25 -25
  339. package/packages/epg/src/v2/MockGenerator/utils.ts +28 -28
  340. package/packages/epg/src/v2/MouseNavigation/MouseNavigation.tsx +88 -88
  341. package/packages/epg/src/v2/MouseNavigation/MouseNavigationFallback.ts +4 -4
  342. package/packages/epg/src/v2/MouseNavigation/index.tizen.tv.ts +1 -1
  343. package/packages/epg/src/v2/MouseNavigation/index.ts +1 -1
  344. package/packages/epg/src/v2/MouseNavigation/index.web.ts +1 -1
  345. package/packages/epg/src/v2/MouseNavigation/index.webos.tv.ts +1 -1
  346. package/packages/epg/src/v2/NowLine.tsx +66 -66
  347. package/packages/epg/src/v2/Program.tsx +58 -58
  348. package/packages/epg/src/v2/ProgramInfo/ProgramInfo.scss +67 -67
  349. package/packages/epg/src/v2/ProgramInfo/ProgramInfo.styles.1080.scss +3 -3
  350. package/packages/epg/src/v2/ProgramInfo/ProgramInfo.styles.animated.1080.scss +2 -2
  351. package/packages/epg/src/v2/ProgramInfo/ProgramInfo.styles.animated.scss +2 -2
  352. package/packages/epg/src/v2/ProgramInfo/ProgramInfo.styles.scss +3 -3
  353. package/packages/epg/src/v2/ProgramInfo/ProgramInfo.tsx +149 -149
  354. package/packages/epg/src/v2/ProgramInfo/_animated.scss +8 -8
  355. package/packages/epg/src/v2/ProgramInfo/_mixins.scss +5 -5
  356. package/packages/epg/src/v2/ProgramInfo/_sizes.1080.scss +21 -21
  357. package/packages/epg/src/v2/ProgramInfo/_sizes.scss +21 -21
  358. package/packages/epg/src/v2/ProgramInfo/index.ts +1 -1
  359. package/packages/epg/src/v2/ProgramInfo/rtl.scss +7 -7
  360. package/packages/epg/src/v2/ProgramInfo/sizes.1080.ts +3 -3
  361. package/packages/epg/src/v2/ProgramInfo/sizes.ts +3 -3
  362. package/packages/epg/src/v2/ProgramInfo/styles.ts +1 -1
  363. package/packages/epg/src/v2/ProgramInfo/utils.ts +28 -28
  364. package/packages/epg/src/v2/Row.tsx +134 -134
  365. package/packages/epg/src/v2/RowsManager.ts +1 -1
  366. package/packages/epg/src/v2/TimeManager.ts +58 -58
  367. package/packages/epg/src/v2/Timeline.ts +1 -1
  368. package/packages/epg/src/v2/TimelineSection.tsx +50 -50
  369. package/packages/epg/src/v2/basic/CellsManager.tsx +300 -300
  370. package/packages/epg/src/v2/basic/RowsManager.tsx +503 -503
  371. package/packages/epg/src/v2/basic/Timeline.tsx +88 -88
  372. package/packages/epg/src/v2/index.ts +1 -1
  373. package/packages/epg/src/v2/interface.ts +1519 -1519
  374. package/packages/epg/src/v2/sizes.1080.ts +2 -2
  375. package/packages/epg/src/v2/sizes.ts +2 -2
  376. package/packages/epg/src/v2/styles/Basic/Basic.scss +116 -116
  377. package/packages/epg/src/v2/styles/Basic/index.ts +1 -1
  378. package/packages/epg/src/v2/styles/Whitelabel/index.ts +1 -1
  379. package/packages/epg/src/v2/utils.ts +40 -40
  380. package/packages/events-manager/src/EventsManager.ts +1 -1
  381. package/packages/events-manager/src/index.ts +2 -2
  382. package/packages/floating-focus/README.md +64 -64
  383. package/packages/floating-focus/src/FloatingFocus.ts +106 -106
  384. package/packages/floating-focus/src/Horizontal.tsx +20 -20
  385. package/packages/floating-focus/src/Vertical.tsx +20 -20
  386. package/packages/floating-focus/src/index.ts +4 -4
  387. package/packages/floating-focus/src/types.ts +20 -20
  388. package/packages/floating-focus/src/utils.ts +43 -43
  389. package/packages/focus/README.md +348 -348
  390. package/packages/focus/src/IFocusable.ts +5 -5
  391. package/packages/focus/src/Layout/Base.tsx +166 -166
  392. package/packages/focus/src/Layout/Horizontal.ts +15 -15
  393. package/packages/focus/src/Layout/Matrix.tsx +357 -357
  394. package/packages/focus/src/Layout/Vertical.ts +12 -12
  395. package/packages/focus/src/Layout/constants.ts +10 -10
  396. package/packages/focus/src/Layout/isRtl.ts +12 -12
  397. package/packages/focus/src/Layout/types.ts +7 -7
  398. package/packages/focus/src/candidate.ts +106 -106
  399. package/packages/focus/src/focusFirstExisting.ts +19 -19
  400. package/packages/focus/src/hasFocus.ts +36 -36
  401. package/packages/focus/src/index.ts +16 -16
  402. package/packages/focus/src/refocusAfterHashChange.ts +19 -19
  403. package/packages/focus/src/safeFocus.ts +15 -15
  404. package/packages/gallup/README.md +27 -27
  405. package/packages/gallup/src/Gallup.ts +80 -80
  406. package/packages/gallup/src/GallupMock.ts +7 -7
  407. package/packages/gallup/src/__external__/SpringStreams.d.ts +39 -39
  408. package/packages/gallup/src/__mocks__/SpringStreams.js +18 -18
  409. package/packages/gallup/src/index.ts +1 -1
  410. package/packages/grid/BasicGrid/README.md +78 -78
  411. package/packages/grid/BasicGrid/index.ts +1 -1
  412. package/packages/grid/FirstOnlyGrid/README.md +43 -43
  413. package/packages/grid/FirstOnlyGrid/index.ts +1 -1
  414. package/packages/grid/FixedToEndGrid/README.md +45 -45
  415. package/packages/grid/FixedToEndGrid/index.ts +1 -1
  416. package/packages/grid/Item/index.ts +1 -1
  417. package/packages/grid/README.md +169 -169
  418. package/packages/grid/src/Base/Base.tsx +492 -492
  419. package/packages/grid/src/Base/MouseNavigation/MouseNavigation.tsx +82 -82
  420. package/packages/grid/src/Base/MouseNavigation/MouseNavigationFallback.ts +4 -4
  421. package/packages/grid/src/Base/MouseNavigation/index.tizen.tv.ts +1 -1
  422. package/packages/grid/src/Base/MouseNavigation/index.ts +1 -1
  423. package/packages/grid/src/Base/MouseNavigation/index.webos.tv.ts +1 -1
  424. package/packages/grid/src/Base/MouseNavigation/index.webtv.ts +1 -1
  425. package/packages/grid/src/Base/index.ts +1 -1
  426. package/packages/grid/src/Base/interface.ts +47 -47
  427. package/packages/grid/src/BasicGrid/BasicGrid.tsx +137 -137
  428. package/packages/grid/src/BasicGrid/config.ts +13 -13
  429. package/packages/grid/src/FastFocusingOptimizer/FastFocusingOptimizer.ts +54 -54
  430. package/packages/grid/src/FirstOnlyGrid/FirstOnlyGrid.tsx +112 -112
  431. package/packages/grid/src/FirstOnlyGrid/config.ts +13 -13
  432. package/packages/grid/src/FirstOnlyGrid/controller.ts +10 -10
  433. package/packages/grid/src/FixedToEndGrid/FixedToEndGrid.tsx +112 -112
  434. package/packages/grid/src/FixedToEndGrid/config.ts +13 -13
  435. package/packages/grid/src/FixedToEndGrid/controller.ts +36 -36
  436. package/packages/grid/src/UnifiedGridController/UnifiedGridController.ts +555 -555
  437. package/packages/grid/src/UnifiedGridController/index.ts +2 -2
  438. package/packages/grid/src/UnifiedGridController/interface.ts +92 -92
  439. package/packages/grid/src/animate.animated.ts +1 -1
  440. package/packages/grid/src/animate.ts +1 -1
  441. package/packages/grid/src/interface.ts +30 -30
  442. package/packages/grid/src/mocks/index.tsx +41 -41
  443. package/packages/grid/src/types.ts +69 -69
  444. package/packages/grid/src/utils.ts +69 -69
  445. package/packages/i18n/README.md +460 -460
  446. package/packages/i18n/src/I18n.ts +246 -246
  447. package/packages/i18n/src/Translation.tsx +36 -36
  448. package/packages/i18n/src/addResourceBundle.ts +73 -73
  449. package/packages/i18n/src/direction.ts +33 -33
  450. package/packages/i18n/src/index.ts +4 -4
  451. package/packages/i18n/src/isRtl.ts +3 -3
  452. package/packages/i18n/src/middlewares/i18next/Context/Context.ts +25 -25
  453. package/packages/i18n/src/middlewares/i18next/Context/index.ts +1 -1
  454. package/packages/i18n/src/middlewares/i18next/Interpolation/Interpolation.ts +95 -95
  455. package/packages/i18n/src/middlewares/i18next/Interpolation/index.ts +1 -1
  456. package/packages/i18n/src/middlewares/i18next/Nesting/Nesting.ts +38 -38
  457. package/packages/i18n/src/middlewares/i18next/Nesting/index.ts +1 -1
  458. package/packages/i18n/src/middlewares/i18next/Plurals/Plurals.ts +123 -123
  459. package/packages/i18n/src/middlewares/i18next/Plurals/Resolvers.ts +124 -124
  460. package/packages/i18n/src/middlewares/i18next/Plurals/index.ts +1 -1
  461. package/packages/i18n/src/middlewares/i18next/Plurals/types.ts +6 -6
  462. package/packages/i18n/src/middlewares/icu/DateInterpolation/DateInterpolation.ts +64 -64
  463. package/packages/i18n/src/middlewares/icu/DateInterpolation/index.ts +1 -1
  464. package/packages/i18n/src/middlewares/icu/Interpolation/Interpolation.ts +39 -39
  465. package/packages/i18n/src/middlewares/icu/Interpolation/index.ts +1 -1
  466. package/packages/i18n/src/middlewares/icu/NumberInterpolation/NumberInterpolation.ts +41 -41
  467. package/packages/i18n/src/middlewares/icu/NumberInterpolation/index.ts +1 -1
  468. package/packages/i18n/src/middlewares/icu/Plurals/Plurals.ts +65 -65
  469. package/packages/i18n/src/middlewares/icu/Plurals/Resolvers.ts +130 -130
  470. package/packages/i18n/src/middlewares/icu/Plurals/index.ts +1 -1
  471. package/packages/i18n/src/middlewares/icu/Plurals/types.ts +15 -15
  472. package/packages/i18n/src/middlewares/icu/Select/Select.ts +36 -36
  473. package/packages/i18n/src/middlewares/icu/Select/index.ts +1 -1
  474. package/packages/i18n/src/middlewares/icu/TimeInterpolation/TimeInterpolation.ts +65 -65
  475. package/packages/i18n/src/middlewares/icu/TimeInterpolation/index.ts +1 -1
  476. package/packages/i18n/src/middlewares/icu/shared/hasVariable.ts +5 -5
  477. package/packages/i18n/src/middlewares/icu/shared/matchSwitchCase.ts +80 -80
  478. package/packages/i18n/src/middlewares/icu/shared/unwrap.ts +1 -1
  479. package/packages/i18n/src/pluralsCommon/PluralsHelper.ts +54 -54
  480. package/packages/i18n/src/pluralsCommon/ResolverByLanguage.ts +129 -129
  481. package/packages/i18n/src/t.tsx +6 -6
  482. package/packages/i18n/src/typedTranslate.ts +31 -31
  483. package/packages/i18n/src/types.ts +66 -66
  484. package/packages/i18n/src/utils.ts +76 -76
  485. package/packages/icon/README.md +107 -107
  486. package/packages/icon/src/Icon.tsx +71 -71
  487. package/packages/icon/src/index.ts +1 -1
  488. package/packages/ime/README.md +72 -72
  489. package/packages/ime/src/IKeyboard.ts +6 -6
  490. package/packages/ime/src/IKeyboardEvent.ts +7 -7
  491. package/packages/ime/src/ImeManager.ts +33 -33
  492. package/packages/ime/src/SystemKeyboard/SystemKeyboard.ts +33 -33
  493. package/packages/ime/src/SystemKeyboard/SystemKeyboardBase.ts +98 -98
  494. package/packages/ime/src/SystemKeyboard/TizenSystemKeyboard.ts +66 -66
  495. package/packages/ime/src/SystemKeyboard/WebosSystemKeyboard.ts +74 -74
  496. package/packages/ime/src/SystemKeyboard/index.tizen.tv.ts +1 -1
  497. package/packages/ime/src/SystemKeyboard/index.ts +1 -1
  498. package/packages/ime/src/SystemKeyboard/index.webos.tv.ts +1 -1
  499. package/packages/ime/src/index.ts +3 -3
  500. package/packages/input/README.md +65 -65
  501. package/packages/input/__mocks__/MockKeyboard.ts +40 -40
  502. package/packages/input/src/Input.scss +9 -9
  503. package/packages/input/src/Input.tsx +267 -267
  504. package/packages/input/src/index.ts +1 -1
  505. package/packages/input/src/utils.ts +71 -71
  506. package/packages/interactable/README.md +38 -38
  507. package/packages/interactable/src/Interactable.tsx +33 -33
  508. package/packages/interactable/src/index.ts +1 -1
  509. package/packages/interactable/src/interface.ts +7 -7
  510. package/packages/ipify/README.md +30 -30
  511. package/packages/ipify/src/index.ts +1 -1
  512. package/packages/ipify/src/ipify.ts +41 -41
  513. package/packages/jsx/README.md +388 -388
  514. package/packages/jsx/src/Component.ts +68 -68
  515. package/packages/jsx/src/createRef.ts +5 -5
  516. package/packages/jsx/src/forwardRef.ts +8 -8
  517. package/packages/jsx/src/index.ts +31 -31
  518. package/packages/jsx/src/jsx-runtime.ts +5 -5
  519. package/packages/jsx/src/manipulation/attachNode.ts +30 -30
  520. package/packages/jsx/src/manipulation/attachNodeBefore.ts +44 -44
  521. package/packages/jsx/src/manipulation/clearNode.ts +14 -14
  522. package/packages/jsx/src/manipulation/detachNode.ts +26 -26
  523. package/packages/jsx/src/manipulation/index.ts +7 -7
  524. package/packages/jsx/src/manipulation/removeNode.ts +18 -18
  525. package/packages/jsx/src/manipulation/replaceNode.ts +42 -42
  526. package/packages/jsx/src/manipulation/swapNodes.ts +53 -53
  527. package/packages/jsx/src/mount/guards.ts +26 -26
  528. package/packages/jsx/src/mount/handleLifecycle.ts +71 -71
  529. package/packages/jsx/src/mount/index.ts +1 -1
  530. package/packages/jsx/src/mount/lifecycle.ts +38 -38
  531. package/packages/jsx/src/mount/lifecycleHelpers.ts +29 -29
  532. package/packages/jsx/src/mount/mount.ts +141 -141
  533. package/packages/jsx/src/mount/namespaces.ts +7 -7
  534. package/packages/jsx/src/mount/props.ts +121 -121
  535. package/packages/jsx/src/nodeUtils.ts +69 -69
  536. package/packages/jsx/src/setText.ts +15 -15
  537. package/packages/jsx/src/test-utils/MountedComponent.ts +50 -50
  538. package/packages/jsx/src/test-utils/README.md +72 -72
  539. package/packages/jsx/src/test-utils/click.ts +7 -7
  540. package/packages/jsx/src/test-utils/enter.ts +4 -4
  541. package/packages/jsx/src/test-utils/index.ts +6 -6
  542. package/packages/jsx/src/test-utils/keydown.ts +27 -27
  543. package/packages/jsx/src/test-utils/keyup.ts +27 -27
  544. package/packages/jsx/src/test-utils/shallow.ts +33 -33
  545. package/packages/jsx/src/test-utils/spec-utils.ts +6 -6
  546. package/packages/jsx/src/textNode.ts +9 -9
  547. package/packages/jsx/src/types.ts +128 -128
  548. package/packages/jsx/src/utils.ts +35 -35
  549. package/packages/jsx/src/virtualDOM.ts +121 -121
  550. package/packages/key-sequence/README.md +44 -44
  551. package/packages/key-sequence/src/KeySequence.ts +56 -56
  552. package/packages/key-sequence/src/arrayEndsWithKeyCombo.ts +22 -22
  553. package/packages/key-sequence/src/index.ts +1 -1
  554. package/packages/key-sequence/src/types.ts +13 -13
  555. package/packages/keyboard/README.md +237 -237
  556. package/packages/keyboard/src/AndroidKeyboard/Keyboard.scss +140 -140
  557. package/packages/keyboard/src/AndroidKeyboard/Keyboard.styles.1080.scss +2 -2
  558. package/packages/keyboard/src/AndroidKeyboard/Keyboard.styles.animated.1080.scss +3 -3
  559. package/packages/keyboard/src/AndroidKeyboard/Keyboard.styles.animated.scss +3 -3
  560. package/packages/keyboard/src/AndroidKeyboard/Keyboard.styles.scss +2 -2
  561. package/packages/keyboard/src/AndroidKeyboard/Keyboard.tsx +235 -235
  562. package/packages/keyboard/src/AndroidKeyboard/_animated.scss +7 -7
  563. package/packages/keyboard/src/AndroidKeyboard/_sizes.1080.scss +15 -15
  564. package/packages/keyboard/src/AndroidKeyboard/_sizes.scss +15 -15
  565. package/packages/keyboard/src/AndroidKeyboard/icons/arrow_left.svg +6 -6
  566. package/packages/keyboard/src/AndroidKeyboard/icons/arrow_right.svg +6 -6
  567. package/packages/keyboard/src/AndroidKeyboard/icons/key_backspace.svg +12 -12
  568. package/packages/keyboard/src/AndroidKeyboard/index.ts +1 -1
  569. package/packages/keyboard/src/AndroidKeyboard/makeLayout.ts +19 -19
  570. package/packages/keyboard/src/Backdrop/Backdrop.scss +17 -17
  571. package/packages/keyboard/src/Backdrop/Backdrop.styles.1080.scss +2 -2
  572. package/packages/keyboard/src/Backdrop/Backdrop.styles.scss +2 -2
  573. package/packages/keyboard/src/Backdrop/Backdrop.tsx +31 -31
  574. package/packages/keyboard/src/Backdrop/_sizes.1080.scss +2 -2
  575. package/packages/keyboard/src/Backdrop/_sizes.scss +2 -2
  576. package/packages/keyboard/src/DefaultKeyboard/Keyboard.scss +73 -73
  577. package/packages/keyboard/src/DefaultKeyboard/Keyboard.styles.1080.scss +2 -2
  578. package/packages/keyboard/src/DefaultKeyboard/Keyboard.styles.scss +2 -2
  579. package/packages/keyboard/src/DefaultKeyboard/Keyboard.tsx +155 -155
  580. package/packages/keyboard/src/DefaultKeyboard/_sizes.1080.scss +12 -12
  581. package/packages/keyboard/src/DefaultKeyboard/_sizes.scss +12 -12
  582. package/packages/keyboard/src/DefaultKeyboard/index.ts +1 -1
  583. package/packages/keyboard/src/KeyboardBase.tsx +344 -344
  584. package/packages/keyboard/src/MobiKeyboard/Keyboard.scss +180 -180
  585. package/packages/keyboard/src/MobiKeyboard/Keyboard.styles.1080.scss +2 -2
  586. package/packages/keyboard/src/MobiKeyboard/Keyboard.styles.animated.1080.scss +3 -3
  587. package/packages/keyboard/src/MobiKeyboard/Keyboard.styles.animated.scss +3 -3
  588. package/packages/keyboard/src/MobiKeyboard/Keyboard.styles.scss +2 -2
  589. package/packages/keyboard/src/MobiKeyboard/Keyboard.tsx +278 -278
  590. package/packages/keyboard/src/MobiKeyboard/_animated.scss +7 -7
  591. package/packages/keyboard/src/MobiKeyboard/_sizes.1080.scss +10 -10
  592. package/packages/keyboard/src/MobiKeyboard/_sizes.scss +10 -10
  593. package/packages/keyboard/src/MobiKeyboard/icons/arrow_left.svg +6 -6
  594. package/packages/keyboard/src/MobiKeyboard/icons/arrow_right.svg +6 -6
  595. package/packages/keyboard/src/MobiKeyboard/icons/key_backspace.svg +12 -12
  596. package/packages/keyboard/src/MobiKeyboard/icons/key_space.svg +6 -6
  597. package/packages/keyboard/src/MobiKeyboard/index.ts +1 -1
  598. package/packages/keyboard/src/MobiKeyboard/utils.ts +19 -19
  599. package/packages/keyboard/src/QwertyKeyboardBase/QwertyKeyboardBase.tsx +54 -54
  600. package/packages/keyboard/src/ShiftMode.ts +25 -25
  601. package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.scss +168 -168
  602. package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.styles.1080.scss +2 -2
  603. package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.styles.scss +2 -2
  604. package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.tsx +353 -353
  605. package/packages/keyboard/src/WhitelabelKeyboard/WhitelabelStyles/_sizes.1080.scss +7 -7
  606. package/packages/keyboard/src/WhitelabelKeyboard/WhitelabelStyles/_sizes.scss +7 -7
  607. package/packages/keyboard/src/WhitelabelKeyboard/WhitelabelStyles/index.ts +1 -1
  608. package/packages/keyboard/src/WhitelabelKeyboard/WhitelabelStyles/whitelabel.scss +81 -81
  609. package/packages/keyboard/src/WhitelabelKeyboard/WhitelabelStyles/whitelabel.styles.1080.scss +2 -2
  610. package/packages/keyboard/src/WhitelabelKeyboard/WhitelabelStyles/whitelabel.styles.scss +2 -2
  611. package/packages/keyboard/src/WhitelabelKeyboard/_sizes.1080.scss +32 -32
  612. package/packages/keyboard/src/WhitelabelKeyboard/_sizes.scss +32 -32
  613. package/packages/keyboard/src/WhitelabelKeyboard/icons/arrow_left.svg +9 -9
  614. package/packages/keyboard/src/WhitelabelKeyboard/icons/arrow_right.svg +9 -9
  615. package/packages/keyboard/src/WhitelabelKeyboard/icons/key_backspace.svg +9 -9
  616. package/packages/keyboard/src/WhitelabelKeyboard/icons/key_language.svg +20 -20
  617. package/packages/keyboard/src/WhitelabelKeyboard/icons/key_shift.svg +9 -9
  618. package/packages/keyboard/src/WhitelabelKeyboard/icons/key_shift_active.svg +9 -9
  619. package/packages/keyboard/src/WhitelabelKeyboard/index.ts +2 -2
  620. package/packages/keyboard/src/WhitelabelKeyboard/layouts/hebrew.ts +28 -28
  621. package/packages/keyboard/src/WhitelabelKeyboard/layouts/index.ts +8 -8
  622. package/packages/keyboard/src/WhitelabelKeyboard/layouts/korean.ts +26 -26
  623. package/packages/keyboard/src/WhitelabelKeyboard/layouts/latin.ts +26 -26
  624. package/packages/keyboard/src/WhitelabelKeyboard/layouts/russian.ts +27 -27
  625. package/packages/keyboard/src/WhitelabelKeyboard/layouts/special.ts +28 -28
  626. package/packages/keyboard/src/WhitelabelKeyboard/layouts/tibetan.ts +26 -26
  627. package/packages/keyboard/src/WhitelabelKeyboard/layouts/turkish.ts +26 -26
  628. package/packages/keyboard/src/WhitelabelKeyboard/layouts/urdu.ts +26 -26
  629. package/packages/keyboard/src/WhitelabelKeyboard/types.ts +28 -28
  630. package/packages/keyboard/src/WhitelabelNumericKeyboard/NumericKeyboard.scss +105 -105
  631. package/packages/keyboard/src/WhitelabelNumericKeyboard/NumericKeyboard.styles.1080.scss +2 -2
  632. package/packages/keyboard/src/WhitelabelNumericKeyboard/NumericKeyboard.styles.scss +2 -2
  633. package/packages/keyboard/src/WhitelabelNumericKeyboard/NumericKeyboard.tsx +161 -161
  634. package/packages/keyboard/src/WhitelabelNumericKeyboard/WhitelabelStyles/_sizes.1080.scss +7 -7
  635. package/packages/keyboard/src/WhitelabelNumericKeyboard/WhitelabelStyles/_sizes.scss +7 -7
  636. package/packages/keyboard/src/WhitelabelNumericKeyboard/WhitelabelStyles/index.ts +1 -1
  637. package/packages/keyboard/src/WhitelabelNumericKeyboard/WhitelabelStyles/whitelabel.scss +62 -62
  638. package/packages/keyboard/src/WhitelabelNumericKeyboard/WhitelabelStyles/whitelabel.styles.1080.scss +2 -2
  639. package/packages/keyboard/src/WhitelabelNumericKeyboard/WhitelabelStyles/whitelabel.styles.scss +2 -2
  640. package/packages/keyboard/src/WhitelabelNumericKeyboard/_sizes.1080.scss +29 -29
  641. package/packages/keyboard/src/WhitelabelNumericKeyboard/_sizes.scss +29 -29
  642. package/packages/keyboard/src/WhitelabelNumericKeyboard/icons/key_backspace.svg +9 -9
  643. package/packages/keyboard/src/WhitelabelNumericKeyboard/index.ts +2 -2
  644. package/packages/keyboard/src/WhitelabelNumericKeyboard/layout.ts +14 -14
  645. package/packages/keyboard/src/hwKeyboardEventToChar.ts +11 -11
  646. package/packages/keyboard/src/types/index.ts +11 -11
  647. package/packages/keyboard/src/utils/caret.ts +48 -48
  648. package/packages/keyboard/src/utils/generateFocusMatrixFromStringMatrix.ts +12 -12
  649. package/packages/keyboard/src/utils/input.ts +40 -40
  650. package/packages/l10n/README.md +120 -120
  651. package/packages/l10n/interface.ts +1 -1
  652. package/packages/l10n/locales/cs.ts +4 -4
  653. package/packages/l10n/locales/en-001.ts +4 -4
  654. package/packages/l10n/locales/en-us.ts +4 -4
  655. package/packages/l10n/src/Locale.tsx +44 -44
  656. package/packages/l10n/src/date/common.ts +165 -165
  657. package/packages/l10n/src/date/cs.ts +89 -89
  658. package/packages/l10n/src/date/de.ts +97 -97
  659. package/packages/l10n/src/date/en-001.ts +76 -76
  660. package/packages/l10n/src/date/en-common.ts +55 -55
  661. package/packages/l10n/src/date/en-us.ts +83 -83
  662. package/packages/l10n/src/date/es.ts +71 -71
  663. package/packages/l10n/src/date/fr.ts +94 -94
  664. package/packages/l10n/src/date/he.ts +101 -101
  665. package/packages/l10n/src/date/iso.ts +63 -63
  666. package/packages/l10n/src/date/types.ts +56 -56
  667. package/packages/l10n/src/index.ts +2 -2
  668. package/packages/l10n/src/l10n.ts +112 -112
  669. package/packages/l10n/src/types.ts +22 -22
  670. package/packages/list/AttachDetachItem/README.md +128 -128
  671. package/packages/list/AttachDetachItem/index.ts +3 -3
  672. package/packages/list/BasicList/README.md +71 -71
  673. package/packages/list/BasicList/index.ts +1 -1
  674. package/packages/list/CenteredList/README.md +42 -42
  675. package/packages/list/CenteredList/index.ts +1 -1
  676. package/packages/list/EdgeOffsetList/README.md +58 -58
  677. package/packages/list/EdgeOffsetList/index.ts +1 -1
  678. package/packages/list/FirstOnlyList/README.md +39 -39
  679. package/packages/list/FirstOnlyList/index.ts +1 -1
  680. package/packages/list/FirstOnlyVariedList/README.md +105 -105
  681. package/packages/list/FirstOnlyVariedList/index.ts +1 -1
  682. package/packages/list/FixedToEndList/README.md +42 -42
  683. package/packages/list/FixedToEndList/index.ts +1 -1
  684. package/packages/list/Item/index.ts +1 -1
  685. package/packages/list/README.md +193 -193
  686. package/packages/list/src/AttachDetachItem/AttachDetachItem.tsx +96 -96
  687. package/packages/list/src/AttachDetachItem/prepareAttachDetachItemData.ts +13 -13
  688. package/packages/list/src/Base/Base.tsx +392 -392
  689. package/packages/list/src/Base/MouseNavigation/MouseNavigation.tsx +82 -82
  690. package/packages/list/src/Base/MouseNavigation/MouseNavigationFallback.ts +4 -4
  691. package/packages/list/src/Base/MouseNavigation/index.tizen.tv.ts +1 -1
  692. package/packages/list/src/Base/MouseNavigation/index.ts +1 -1
  693. package/packages/list/src/Base/MouseNavigation/index.webos.tv.ts +1 -1
  694. package/packages/list/src/Base/MouseNavigation/index.webtv.ts +1 -1
  695. package/packages/list/src/Base/index.ts +1 -1
  696. package/packages/list/src/Base/interface.ts +39 -39
  697. package/packages/list/src/BasicList/BasicList.tsx +178 -178
  698. package/packages/list/src/BasicList/config.ts +13 -13
  699. package/packages/list/src/CenteredList/CenteredList.tsx +116 -116
  700. package/packages/list/src/CenteredList/config.ts +13 -13
  701. package/packages/list/src/CenteredList/controller.ts +46 -46
  702. package/packages/list/src/CenteredList/interface.ts +10 -10
  703. package/packages/list/src/EdgeOffsetList/EdgeOffsetList.tsx +173 -173
  704. package/packages/list/src/EdgeOffsetList/config.ts +13 -13
  705. package/packages/list/src/FastFocusingOptimizer/FastFocusingOptimizer.ts +54 -54
  706. package/packages/list/src/FirstOnlyList/FirstOnlyList.tsx +122 -122
  707. package/packages/list/src/FirstOnlyList/config.ts +13 -13
  708. package/packages/list/src/FirstOnlyList/controller.ts +11 -11
  709. package/packages/list/src/FirstOnlyVariedList/FirstOnlyVariedList.tsx +132 -132
  710. package/packages/list/src/FirstOnlyVariedList/config.ts +13 -13
  711. package/packages/list/src/FixedToEndList/FixedToEndList.tsx +125 -125
  712. package/packages/list/src/FixedToEndList/config.ts +13 -13
  713. package/packages/list/src/FixedToEndList/controller.ts +44 -44
  714. package/packages/list/src/UnifiedListController/UnifiedListController.ts +258 -258
  715. package/packages/list/src/UnifiedListController/UnifiedListControllerBase.ts +241 -241
  716. package/packages/list/src/UnifiedListController/UnifiedVariedListController.ts +241 -241
  717. package/packages/list/src/UnifiedListController/interface.ts +81 -81
  718. package/packages/list/src/__test__/utils.spec.ts +59 -59
  719. package/packages/list/src/animate.animated.ts +1 -1
  720. package/packages/list/src/animate.ts +1 -1
  721. package/packages/list/src/index.ts +1 -1
  722. package/packages/list/src/interface.ts +48 -48
  723. package/packages/list/src/mocks/index.tsx +55 -55
  724. package/packages/list/src/types.ts +132 -132
  725. package/packages/list/src/utils.ts +142 -142
  726. package/packages/list/utils/index.ts +1 -1
  727. package/packages/logger/README.md +117 -117
  728. package/packages/logger/src/LoggerManager.ts +60 -60
  729. package/packages/logger/src/LoggerService.ts +43 -43
  730. package/packages/logger/src/__mocks__/LoggerBase.ts +13 -13
  731. package/packages/logger/src/index.ts +3 -3
  732. package/packages/logger/src/loggers/ConsoleLogger/ConsoleLogger.ts +51 -51
  733. package/packages/logger/src/loggers/ConsoleLogger/README.md +39 -39
  734. package/packages/logger/src/loggers/ConsoleLogger/index.ts +1 -1
  735. package/packages/logger/src/loggers/LoggerBase/LoggerBase.ts +67 -67
  736. package/packages/logger/src/loggers/LoggerBase/README.md +69 -69
  737. package/packages/logger/src/loggers/LoggerBase/index.ts +1 -1
  738. package/packages/logger/src/loggers/SentryLogger/README.md +98 -98
  739. package/packages/logger/src/loggers/SentryLogger/Sentry.ts +2 -2
  740. package/packages/logger/src/loggers/SentryLogger/SentryLogger.ts +179 -179
  741. package/packages/logger/src/loggers/SentryLogger/index.ts +2 -2
  742. package/packages/logger/src/loggers/SentryLogger/mock.ts +6 -6
  743. package/packages/logger/src/loggers/index.ts +2 -2
  744. package/packages/logger/src/types.ts +46 -46
  745. package/packages/logger/src/utils/deviceInfo.ts +25 -25
  746. package/packages/logger/src/utils/index.ts +1 -1
  747. package/packages/lottie-animations/README.md +217 -217
  748. package/packages/lottie-animations/src/LottieAnimation.tsx +125 -125
  749. package/packages/lottie-animations/src/index.ts +7 -7
  750. package/packages/menu/README.md +90 -90
  751. package/packages/menu/WhitelabelMenu/index.ts +1 -1
  752. package/packages/menu/WhitelabelMenu/interface.ts +2 -2
  753. package/packages/menu/WhitelabelMenu/styles.ts +2 -2
  754. package/packages/menu/interface.ts +3 -3
  755. package/packages/menu/src/MenuAndContentContainer/MenuAndContentContainer.tsx +211 -211
  756. package/packages/menu/src/MenuAndContentContainer/index.ts +1 -1
  757. package/packages/menu/src/MenuAndContentContainer/interface.ts +164 -164
  758. package/packages/menu/src/MenuAndContentContainer/service.ts +5 -5
  759. package/packages/menu/src/WhitelabelMenu/SideMenu.scss +41 -41
  760. package/packages/menu/src/WhitelabelMenu/SideMenu.styles.1080.scss +2 -2
  761. package/packages/menu/src/WhitelabelMenu/SideMenu.styles.animated.1080.scss +3 -3
  762. package/packages/menu/src/WhitelabelMenu/SideMenu.styles.animated.scss +3 -3
  763. package/packages/menu/src/WhitelabelMenu/SideMenu.styles.scss +2 -2
  764. package/packages/menu/src/WhitelabelMenu/SideMenu.tsx +248 -248
  765. package/packages/menu/src/WhitelabelMenu/SideMenuItem/SideMenuItem.scss +56 -56
  766. package/packages/menu/src/WhitelabelMenu/SideMenuItem/SideMenuItem.styles.1080.scss +2 -2
  767. package/packages/menu/src/WhitelabelMenu/SideMenuItem/SideMenuItem.styles.animated.1080.scss +3 -3
  768. package/packages/menu/src/WhitelabelMenu/SideMenuItem/SideMenuItem.styles.animated.scss +3 -3
  769. package/packages/menu/src/WhitelabelMenu/SideMenuItem/SideMenuItem.styles.scss +2 -2
  770. package/packages/menu/src/WhitelabelMenu/SideMenuItem/SideMenuItem.tsx +78 -78
  771. package/packages/menu/src/WhitelabelMenu/SideMenuItem/_animated.scss +12 -12
  772. package/packages/menu/src/WhitelabelMenu/SideMenuItem/_sizes.1080.scss +17 -17
  773. package/packages/menu/src/WhitelabelMenu/SideMenuItem/_sizes.scss +17 -17
  774. package/packages/menu/src/WhitelabelMenu/SideMenuItem/index.ts +1 -1
  775. package/packages/menu/src/WhitelabelMenu/SideMenuItem/interface.ts +49 -49
  776. package/packages/menu/src/WhitelabelMenu/SideMenuItem/rtl.scss +12 -12
  777. package/packages/menu/src/WhitelabelMenu/SideMenuItem/sizes.1080.ts +2 -2
  778. package/packages/menu/src/WhitelabelMenu/SideMenuItem/sizes.ts +2 -2
  779. package/packages/menu/src/WhitelabelMenu/SideMenuItem/styles.ts +1 -1
  780. package/packages/menu/src/WhitelabelMenu/VisualController.animated.ts +48 -48
  781. package/packages/menu/src/WhitelabelMenu/VisualController.ts +20 -20
  782. package/packages/menu/src/WhitelabelMenu/VisualControllerBase.ts +71 -71
  783. package/packages/menu/src/WhitelabelMenu/_animated.scss +39 -39
  784. package/packages/menu/src/WhitelabelMenu/_sizes.1080.scss +14 -14
  785. package/packages/menu/src/WhitelabelMenu/_sizes.scss +14 -14
  786. package/packages/menu/src/WhitelabelMenu/constants.animated.ts +1 -1
  787. package/packages/menu/src/WhitelabelMenu/constants.ts +1 -1
  788. package/packages/menu/src/WhitelabelMenu/index.ts +1 -1
  789. package/packages/menu/src/WhitelabelMenu/interface.ts +14 -14
  790. package/packages/menu/src/WhitelabelMenu/rtl.scss +22 -22
  791. package/packages/menu/src/WhitelabelMenu/sizes.1080.ts +1 -1
  792. package/packages/menu/src/WhitelabelMenu/sizes.ts +1 -1
  793. package/packages/menu/src/WhitelabelMenu/styles.ts +1 -1
  794. package/packages/menu/src/WhitelabelMenu/utils.ts +34 -34
  795. package/packages/menu/src/index.ts +2 -2
  796. package/packages/modal-service/README.md +50 -50
  797. package/packages/modal-service/src/IModal.ts +3 -3
  798. package/packages/modal-service/src/ModalService.scss +7 -7
  799. package/packages/modal-service/src/ModalService.styles.1080.scss +2 -2
  800. package/packages/modal-service/src/ModalService.styles.scss +2 -2
  801. package/packages/modal-service/src/ModalService.tsx +102 -102
  802. package/packages/modal-service/src/_sizes.1080.scss +2 -2
  803. package/packages/modal-service/src/_sizes.scss +2 -2
  804. package/packages/modal-service/src/index.ts +2 -2
  805. package/packages/mouse-navigation/README.md +105 -105
  806. package/packages/mouse-navigation/src/ArrowNavigation/Arrow.tsx +58 -58
  807. package/packages/mouse-navigation/src/ArrowNavigation/ArrowNavigation.tsx +95 -95
  808. package/packages/mouse-navigation/src/ArrowNavigation/__test__/Arrow.spec.tsx +35 -35
  809. package/packages/mouse-navigation/src/ArrowNavigation/__test__/ArrowNavigation.spec.tsx +45 -45
  810. package/packages/mouse-navigation/src/ArrowNavigation/index.tsx +1 -1
  811. package/packages/mouse-navigation/src/MouseElementWrapper.tsx +70 -70
  812. package/packages/mouse-navigation/src/MouseNavigation.tsx +157 -157
  813. package/packages/mouse-navigation/src/MouseNavigationInterface.ts +8 -8
  814. package/packages/mouse-navigation/src/index.ts +3 -3
  815. package/packages/numeric-zapper/README.md +153 -153
  816. package/packages/numeric-zapper/src/NumericZapper.scss +20 -20
  817. package/packages/numeric-zapper/src/NumericZapper.styles.1080.scss +2 -2
  818. package/packages/numeric-zapper/src/NumericZapper.styles.scss +2 -2
  819. package/packages/numeric-zapper/src/NumericZapper.tsx +257 -257
  820. package/packages/numeric-zapper/src/ZapperAllower.ts +15 -15
  821. package/packages/numeric-zapper/src/ZapperService.tsx +8 -8
  822. package/packages/numeric-zapper/src/_sizes.1080.scss +7 -7
  823. package/packages/numeric-zapper/src/_sizes.scss +7 -7
  824. package/packages/numeric-zapper/src/index.ts +4 -4
  825. package/packages/numeric-zapper/src/interface.ts +1 -1
  826. package/packages/numeric-zapper/src/styles.ts +1 -1
  827. package/packages/perf-utils/README.md +7 -7
  828. package/packages/perf-utils/src/array/filter.ts +1 -1
  829. package/packages/perf-utils/src/array/find.ts +1 -1
  830. package/packages/perf-utils/src/array/findIndex.ts +1 -1
  831. package/packages/perf-utils/src/array/forEach.ts +1 -1
  832. package/packages/perf-utils/src/array/includes.ts +1 -1
  833. package/packages/perf-utils/src/array/includesNaN.ts +1 -1
  834. package/packages/perf-utils/src/array/index.ts +1 -1
  835. package/packages/perf-utils/src/array/map.ts +1 -1
  836. package/packages/picker/README.md +70 -70
  837. package/packages/picker/src/DatePicker.tsx +55 -55
  838. package/packages/picker/src/ModalPicker/Checkbox.tsx +38 -38
  839. package/packages/picker/src/ModalPicker/PickerItem.tsx +86 -86
  840. package/packages/picker/src/ModalPicker/PickerModal.tsx +98 -98
  841. package/packages/picker/src/ModalPicker/index.ts +1 -1
  842. package/packages/picker/src/ModalPicker/modalPicker.tsx +48 -48
  843. package/packages/picker/src/Picker.tsx +127 -127
  844. package/packages/picker/src/index.ts +3 -3
  845. package/packages/picker/src/types.ts +25 -25
  846. package/packages/pin-input/README.md +55 -55
  847. package/packages/pin-input/src/PinInput.scss +5 -5
  848. package/packages/pin-input/src/PinInput.tsx +169 -169
  849. package/packages/pin-input/src/index.ts +1 -1
  850. package/packages/player-ui/README.md +207 -207
  851. package/packages/player-ui/src/BackwardButton.tsx +41 -41
  852. package/packages/player-ui/src/CurrentTime.tsx +56 -56
  853. package/packages/player-ui/src/Duration.tsx +60 -60
  854. package/packages/player-ui/src/ForwardButton.tsx +41 -41
  855. package/packages/player-ui/src/PauseButton.tsx +57 -57
  856. package/packages/player-ui/src/PlayButton.tsx +57 -57
  857. package/packages/player-ui/src/PlayPauseButton.tsx +63 -63
  858. package/packages/player-ui/src/PlayerInteractable.tsx +67 -67
  859. package/packages/player-ui/src/PlayerTime.tsx +57 -57
  860. package/packages/player-ui/src/PlayerUI.tsx +267 -267
  861. package/packages/player-ui/src/RemainingTime.tsx +74 -74
  862. package/packages/player-ui/src/Seekbar.tsx +274 -274
  863. package/packages/player-ui/src/Seeking.ts +163 -163
  864. package/packages/player-ui/src/StopButton.tsx +35 -35
  865. package/packages/player-ui/src/Subtitles.tsx +151 -151
  866. package/packages/player-ui/src/index.ts +15 -15
  867. package/packages/player-ui/src/mocks.ts +65 -65
  868. package/packages/player-ui/src/timeUtils.ts +142 -142
  869. package/packages/player-ui/src/types.ts +48 -48
  870. package/packages/progress-bar/README.md +31 -31
  871. package/packages/progress-bar/src/ProgressBar.tsx +41 -41
  872. package/packages/progress-bar/src/index.ts +1 -1
  873. package/packages/progress-bar/src/interface.ts +14 -14
  874. package/packages/qr-code/README.md +79 -79
  875. package/packages/qr-code/src/QRCode.tsx +39 -39
  876. package/packages/qr-code/src/index.ts +2 -2
  877. package/packages/qr-code/src/qrGenerator/__external__/constants.ts +23 -23
  878. package/packages/qr-code/src/qrGenerator/__external__/qrcode.d.ts +31 -31
  879. package/packages/qr-code/src/qrGenerator/__external__/qrcode.js +618 -618
  880. package/packages/qr-code/src/qrGenerator/generateQr.ts +7 -7
  881. package/packages/qr-code/src/qrGenerator/index.ts +3 -3
  882. package/packages/router/README.md +163 -163
  883. package/packages/router/src/Route.tsx +166 -166
  884. package/packages/router/src/Router.tsx +220 -220
  885. package/packages/router/src/focusActiveRoute.ts +5 -5
  886. package/packages/router/src/history.ts +31 -31
  887. package/packages/router/src/index.ts +6 -6
  888. package/packages/router/src/types.ts +13 -13
  889. package/packages/router/src/utils.ts +35 -35
  890. package/packages/runtime-config/README.md +37 -37
  891. package/packages/runtime-config/src/Config.ts +44 -44
  892. package/packages/runtime-config/src/index.ts +1 -1
  893. package/packages/sass-utils/README.md +197 -197
  894. package/packages/sass-utils/src/box-shadow.scss +5 -5
  895. package/packages/sass-utils/src/ellipsis.scss +15 -15
  896. package/packages/sass-utils/src/linear-gradient.scss +43 -43
  897. package/packages/sass-utils/src/prefix-property.scss +7 -7
  898. package/packages/sass-utils/src/prefix-value.scss +6 -6
  899. package/packages/sass-utils/src/prefix.scss +6 -6
  900. package/packages/sass-utils/src/scale.1080.scss +3 -3
  901. package/packages/sass-utils/src/scale.720.scss +5 -5
  902. package/packages/sass-utils/src/transform.scss +5 -5
  903. package/packages/sass-utils/src/transition.scss +6 -6
  904. package/packages/scheduler/README.md +55 -55
  905. package/packages/scheduler/src/Scheduler.ts +43 -43
  906. package/packages/scheduler/src/Task.ts +72 -72
  907. package/packages/scheduler/src/index.ts +4 -4
  908. package/packages/scheduler/src/timeProvider.ts +3 -3
  909. package/packages/scroll-text/README.md +77 -77
  910. package/packages/scroll-text/src/Base.tsx +146 -146
  911. package/packages/scroll-text/src/ScrollText.animated.tsx +80 -80
  912. package/packages/scroll-text/src/ScrollText.tsx +53 -53
  913. package/packages/scroll-text/src/ScrollTextBaseClass.tsx +86 -86
  914. package/packages/scroll-text/src/index.ts +1 -1
  915. package/packages/scroller/README.md +77 -77
  916. package/packages/scroller/src/Scroller.tsx +51 -51
  917. package/packages/scroller/src/index.ts +1 -1
  918. package/packages/splash/AnimatedSplash.ts +1 -1
  919. package/packages/splash/AnimatedSplashAnimated.ts +1 -1
  920. package/packages/splash/AnimatedSplashBasic.ts +1 -1
  921. package/packages/splash/AutomaticSplashAnimated.ts +1 -1
  922. package/packages/splash/AutomaticSplashBasic.ts +1 -1
  923. package/packages/splash/README.md +93 -93
  924. package/packages/splash/StaticSplash.ts +1 -1
  925. package/packages/splash/StaticSplashAnimated.ts +1 -1
  926. package/packages/splash/StaticSplashBasic.ts +1 -1
  927. package/packages/splash/src/AnimatedSplash.animated.tsx +78 -78
  928. package/packages/splash/src/AnimatedSplash.basic.tsx +37 -37
  929. package/packages/splash/src/AutomaticSplash.animated.tsx +20 -20
  930. package/packages/splash/src/AutomaticSplash.basic.tsx +20 -20
  931. package/packages/splash/src/Splash.scss +8 -8
  932. package/packages/splash/src/StaticSplash.animated.tsx +48 -48
  933. package/packages/splash/src/StaticSplash.basic.tsx +26 -26
  934. package/packages/splash/src/index.animated.ts +1 -1
  935. package/packages/splash/src/index.ts +1 -1
  936. package/packages/splash/src/styles.ts +1 -1
  937. package/packages/splash/src/types.ts +20 -20
  938. package/packages/storage/README.md +61 -61
  939. package/packages/storage/src/CookieStorage/CookieStorage.ts +57 -57
  940. package/packages/storage/src/CookieStorage/index.ts +1 -1
  941. package/packages/storage/src/LocalStorage/LocalStorage.ts +58 -58
  942. package/packages/storage/src/LocalStorage/index.ts +1 -1
  943. package/packages/storage/src/index.ts +2 -2
  944. package/packages/storage/src/shared.ts +41 -41
  945. package/packages/storage/src/types.ts +33 -33
  946. package/packages/throbber/README.md +53 -53
  947. package/packages/throbber/src/Throbber.scss +52 -52
  948. package/packages/throbber/src/Throbber.tsx +19 -19
  949. package/packages/throbber/src/ThrobberService.tsx +55 -55
  950. package/packages/throbber/src/controlsHandling.ts +14 -14
  951. package/packages/throbber/src/index.ts +2 -2
  952. package/packages/time/README.md +116 -116
  953. package/packages/time/src/Time.ts +257 -257
  954. package/packages/time/src/adapters/24iMediaTimeApi.ts +47 -47
  955. package/packages/time/src/adapters/worldTimeApi.ts +74 -74
  956. package/packages/time/src/constants.ts +14 -14
  957. package/packages/time/src/index.ts +1 -1
  958. package/packages/time/src/services/24iMediaTimeApi/24iMediaTimeApi.ts +43 -43
  959. package/packages/time/src/services/24iMediaTimeApi/index.ts +6 -6
  960. package/packages/time/src/services/worldTimeApi/index.ts +7 -7
  961. package/packages/time/src/services/worldTimeApi/types.ts +75 -75
  962. package/packages/time/src/services/worldTimeApi/worldTimeApi.ts +77 -77
  963. package/packages/time/src/types.ts +39 -39
  964. package/packages/time/src/utils.ts +79 -79
  965. package/packages/toast/README.md +116 -116
  966. package/packages/toast/src/Toast/IVisualController.ts +7 -7
  967. package/packages/toast/src/Toast/Toast.scss +22 -22
  968. package/packages/toast/src/Toast/Toast.styles.1080.scss +2 -2
  969. package/packages/toast/src/Toast/Toast.styles.scss +2 -2
  970. package/packages/toast/src/Toast/Toast.tsx +83 -83
  971. package/packages/toast/src/Toast/VisualController.animated.ts +20 -20
  972. package/packages/toast/src/Toast/VisualController.ts +9 -9
  973. package/packages/toast/src/Toast/_sizes.1080.scss +8 -8
  974. package/packages/toast/src/Toast/_sizes.scss +8 -8
  975. package/packages/toast/src/Toast/index.ts +2 -2
  976. package/packages/toast/src/Toast/styles.ts +1 -1
  977. package/packages/toast/src/ToastService.scss +8 -8
  978. package/packages/toast/src/ToastService.styles.1080.scss +2 -2
  979. package/packages/toast/src/ToastService.styles.scss +2 -2
  980. package/packages/toast/src/ToastService.tsx +59 -59
  981. package/packages/toast/src/_sizes.1080.scss +2 -2
  982. package/packages/toast/src/_sizes.scss +2 -2
  983. package/packages/toast/src/index.ts +4 -4
  984. package/packages/toast/src/types.ts +4 -4
  985. package/packages/types-bigscreen-jsx/README.md +12 -12
  986. package/packages/types-bigscreen-jsx/global.d.ts +0 -0
  987. package/packages/types-bigscreen-jsx/index.d.ts +32 -32
  988. package/packages/types-bigscreen-jsx/src/copyTypes.js +14 -14
  989. package/packages/utils/README.md +363 -363
  990. package/packages/utils/src/addClass.ts +9 -9
  991. package/packages/utils/src/counter.ts +49 -49
  992. package/packages/utils/src/debounce.ts +54 -54
  993. package/packages/utils/src/displayToggler.scss +3 -3
  994. package/packages/utils/src/displayToggler.ts +38 -38
  995. package/packages/utils/src/elementUtils.ts +105 -105
  996. package/packages/utils/src/forceReflow.ts +14 -14
  997. package/packages/utils/src/generateUuid.ts +19 -19
  998. package/packages/utils/src/index.ts +43 -43
  999. package/packages/utils/src/keyPress/index.ts +6 -6
  1000. package/packages/utils/src/keyPress/keyPressSimulator.ts +74 -74
  1001. package/packages/utils/src/keyPress/simulateKeyPress.ts +25 -25
  1002. package/packages/utils/src/memoryInfo.ts +21 -21
  1003. package/packages/utils/src/nTimes.ts +9 -9
  1004. package/packages/utils/src/noop.ts +1 -1
  1005. package/packages/utils/src/offsetPosition.ts +56 -56
  1006. package/packages/utils/src/removeClass.ts +9 -9
  1007. package/packages/utils/src/scaledImage.ts +24 -24
  1008. package/packages/utils/src/sizes.1080.ts +1 -1
  1009. package/packages/utils/src/sizes.ts +1 -1
  1010. package/packages/utils/src/stopEvent.ts +10 -10
  1011. package/packages/utils/src/textUtils.ts +57 -57
  1012. package/packages/utils/src/timeConstants.ts +11 -11
  1013. package/packages/utils/src/timers/createInterval.ts +19 -19
  1014. package/packages/utils/src/timers/createTimeout.ts +22 -22
  1015. package/packages/utils/src/timers/index.ts +4 -4
  1016. package/packages/utils/src/timers/runAsync.ts +3 -3
  1017. package/packages/utils/src/timers/types.ts +9 -9
  1018. package/packages/utils/src/wait.ts +3 -3
  1019. package/packages/utils/src/xhr/__mocks__/xhr.ts +29 -29
  1020. package/packages/utils/src/xhr/index.ts +11 -11
  1021. package/packages/utils/src/xhr/xhrSend.ts +141 -141
  1022. package/packages/utils/src/xhr/xhrSendRetry.ts +79 -79
  1023. package/packages/volume-control/README.md +79 -79
  1024. package/packages/volume-control/src/IVolumeControlUI.ts +26 -26
  1025. package/packages/volume-control/src/VolumeControlService.tsx +110 -110
  1026. package/packages/volume-control/src/VolumeControlUI/VisualController.animated.ts +28 -28
  1027. package/packages/volume-control/src/VolumeControlUI/VisualController.ts +3 -3
  1028. package/packages/volume-control/src/VolumeControlUI/VisualControllerBase.ts +26 -26
  1029. package/packages/volume-control/src/VolumeControlUI/VolumeControl.scss +18 -18
  1030. package/packages/volume-control/src/VolumeControlUI/VolumeControl.styles.animated.scss +2 -2
  1031. package/packages/volume-control/src/VolumeControlUI/VolumeControl.styles.scss +1 -1
  1032. package/packages/volume-control/src/VolumeControlUI/VolumeControlUI.tsx +80 -80
  1033. package/packages/volume-control/src/VolumeControlUI/_animated.scss +8 -8
  1034. package/packages/volume-control/src/VolumeControlUI/index.ts +1 -1
  1035. package/packages/volume-control/src/__mocks__/VolumeControlUIMock.tsx +22 -22
  1036. package/packages/volume-control/src/index.ts +2 -2
  1037. package/packages/zapping/README.md +87 -87
  1038. package/packages/zapping/src/ChannelZapping.ts +143 -143
  1039. package/packages/zapping/src/Zapping.tsx +115 -115
  1040. package/packages/zapping/src/index.ts +1 -1
  1041. package/packages/zapping/src/interface.ts +1 -1
  1042. package/utils/create-export-maps/index.ts +3 -3
  1043. package/utils/create-export-maps/src/__tests__/createExportMaps.spec.ts +50 -50
  1044. package/utils/create-export-maps/src/createExportMaps.ts +61 -61
  1045. package/utils/create-package/README.md +39 -39
  1046. package/utils/create-package/src/createPackage.ts +72 -72
  1047. package/utils/create-package/src/index.ts +3 -3
  1048. package/utils/create-package/src/questionnaire/questions.ts +19 -19
  1049. package/utils/create-package/src/settings/Settings.ts +5 -5
  1050. package/utils/create-package/src/types.ts +4 -4
  1051. package/utils/create-package/templates/typescript/README.md +8 -8
  1052. package/utils/create-package/templates/typescript/exports.json +6 -6
  1053. package/utils/run-scripts/index.ts +3 -3
  1054. package/utils/run-scripts/src/__tests__/runScripts.spec.ts +45 -45
  1055. package/utils/run-scripts/src/runScripts.ts +20 -20
@@ -1,585 +1,585 @@
1
- ---
2
- id: README
3
- title: EPG V2
4
- hide_title: true
5
- sidebar_label: EPG V2
6
- ---
7
-
8
- # EPG
9
- This package contains a prepared Electronic Program Guide component.
10
-
11
- **All timestamps are in milliseconds.**
12
-
13
- ## Props
14
- - `timelineWidthPx` - the width of the timeline (the part where the programs are) in pixels
15
- - `rowHeightPx` - the height of 1 row in pixels
16
- - `navigatableRows` - the number of rows that can be navigated with focus
17
- - `additionalRows` - the number of rows that are rendered below `navigatableRows` but cannot be focused
18
- - `channelHeaderWidthPx` - the width of the channel headers (the part before programs in a row) in pixels
19
- - `channelData` - the array of channels of a type that extends `EpgChannel` from the data layer
20
- - `fetchPrograms` - the function to fetch more programs for a channel in a given time range
21
- - `smallestAllowedCellPx` - optional - cells with width less than this are marked with `.too-small` class (defaults to `0`)
22
- - `timelineWidthMs` - optional - the width of the timeline (the part where the programs are) in milliseconds (defaults to `90 minutes`)
23
- - `scrollStepMs` - optional - the amount of movement step left/right in milliseconds (defaults to `0.5 hours`)
24
- - `idleTimerMs` - optional - the amount of ms without user input after which epg jumps to the current time (defaults to `scrollStepMs`)
25
- - `timelineSectionWidthMs` - optional - the width of timeline header section (above rows) in milliseconds (defaults to `0.5 hours`)
26
- - `limitFromMs` - optional - left limit for movement (cannot go more into history) (defaults to `-Infinity`)
27
- - `limitToMs` - optional - right limit for movement (cannot go further into future) (defaults to `Infinity`)
28
- - `timeProvider` - optional - a function returning current timestamp (defaults to `Date.now`)
29
- - `initialTimestamp` - optional - an initial point in time for EPG render (must be between `limitFromMs` and `limitToMs`) (defaults to `Date.now()`)
30
- - `initialChannelIndex` - optional - an initial channel index to scroll to and to focus (defaults to `0`)
31
- - `fetchDebounceTimeMs` - optional - time to debounce the fetch of programs (defaults to `500`)
32
- - `programTextModeResolver` - optional - function to set custom no-text/ellipsis-only/full-text breakpoints
33
- - `onItemPress` - callback for pressing an item
34
- - `onFocusChange` - optional - callback for changing a focus (works for mouse/mrcu as well)
35
- - `onScrolledToTimestamp` - optional - callback that is called with the current timestamp after scroll
36
- - `renderNowLineHeader` - optional - render function for now line header (e.g. the live pointer arrow)
37
- - `renderChannelHeader` - optional - render function for channel header (defaults to channel number and name)
38
- - `renderProgram` - optional - render function for program (the inside of each cell) (defaults to program name)
39
- - `renderDay` - optional - render function for day/date counter in the header (defaults to locale day, date, short month)
40
- - `renderTime` - optional - render function for timeline section (defaults to `hh:mm` and vertical pointer)
41
- - `datePickerProps` - optional - props for a DatePicker, if present DatePicker replaces `renderDay`
42
- - `plugins` - optional - an array of plugins
43
-
44
- ## Plugins
45
- The EPG supports plugins. Plugins are rendered at the end of the component, in the order of being inside
46
- the `plugins` prop.
47
- Plugins can react to scrolling, focus changes and item press events. They can also control EPG through
48
- its public interface.
49
-
50
- Available prepared plugins:
51
- - ProgramInfo - a box that shows more info from the currently focused program
52
- - DateToast - a toast that is displayed during fast horizontal scrolling and shows the current day and time
53
-
54
- ## Translations
55
- These are keys for translations that are used in EPG:
56
- - `date.yesterday` - used in the DatePicker, Day and DateToast for 'Yesterday' string
57
- - `date.today` - used in the DatePicker, Day and DateToast for 'Today' string
58
- - `date.tomorrow` - used in the DatePicker, Day and DateToast for 'Tomorrow' string
59
- - `epg.noData.title` - used in no-data holes fillers as a Program name
60
- - `common.status.loading` - used in the loading cells as a Program name
61
- - `common.status.loading` - it is displayed when the ProgramInfo is loading data
62
-
63
- ## How the EPG behaves
64
- - the time that EPG operates with is always in the center of the visible part
65
- - `onScrolledToTimestamp` returns the timestamp in the center of the EPG
66
- - `leftEdge` is always `currentTimestamp - timelineWidthMs / 2`
67
- - `rightEdge` is always `currentTimestamp + timelineWidthMs / 2`
68
- - `scrollToTimestamp` will move the EPG so the passed timestamp is in the center
69
- - the time of the EPG is always rounded
70
- - for better UX experience, the EPG rounds down (floors) the given timestamp
71
- to the closest `scrollStepMs` multiple
72
- - e.g., the current time is 13:55, `scrollStepMs` is set to default 0.5 hours,
73
- then the initial time of EPG will be `13:30` (if not set otherwise)
74
- - this rounding also applies to `scrollToTimestamp` function and `initialTimestamp` prop
75
- - the focus inside a channel jumps to the next/previous program
76
- - if the next/previous program is not visible in the range or it is just partially visible at the edge, the EPG scrolls by `scrollStepMs`
77
- - the focus between channels is driven by so-called `focusTimestamp`
78
- - you can imagine the `focusTimestamp` as a vertical line (similar to NowLine) that marks the horizontal position of the focus
79
- - the decision which program to focus, mark as live, etc. if the timestamp is exactly `startTime` of one and `endTime` of another
80
- - `startTime` is always taken as included = the part of the program
81
- - `endTime` is always taken as excluded = not the part of the program
82
- - so the program that gets focused/marked as live / etc. is the one that is just starting
83
- - when the Program displayed by the cell is currently live, the cell has an `.live` class
84
- - the Cell has also these following classes based on its width, breakpoints defined by `programTextModeResolver` and `smallestAllowedCellPx`
85
- - `.with-text` - this cell should display full or ellipsis truncated text
86
- - `.ellipsis-only` - this cell should display only ellipsis. You can use this class to center the text.
87
- - `.no-text` - this cell is so small that it should be empty
88
- - `.too-small` - this cell is too small to render the usual way, as in its only several pixels wide, less than the needed margin/border etc.
89
- - the element of the currently focused row has an `.active` class
90
-
91
- ## Styles
92
- There is a base for styles available for `import '@24i/bigscreen-sdk/epg/styles/Basic';`.
93
- (see [./styles/Basic.ts](https://github.com/24i/smartapps-bigscreen-sdk/blob/development/packages/epg/styles/Basic.ts))
94
-
95
- ## Interfaces
96
-
97
- ### EPG
98
- ```ts
99
- interface EPG<
100
- T extends EpgProgram,
101
- U extends EpgChannel<T>,
102
- V extends Header<U>,
103
- W extends Program<T>,
104
- > extends Component<Props>, IFocusable {
105
- /**
106
- * Function to return whether EPG is fast scrolling
107
- * @returns true if is fast scrolling in any axis, false otherwise
108
- */
109
- isFastScrolling: () => boolean,
110
- /**
111
- * Function to return whether EPG is fast scrolling horizontally
112
- * @returns true if is fast scrolling horizontally, false otherwise
113
- */
114
- isHorizontallyFastScrolling: () => boolean,
115
- /**
116
- * Function to return whether EPG is fast scrolling
117
- * @returns true if is fast scrolling vertically, false otherwise
118
- */
119
- isVerticallyFastScrolling: () => boolean,
120
- /**
121
- * Scrolls to given timestamp if possible, rounded down to nearest scrollStepMs multiple
122
- * @param timestamp Timestamp to scroll to
123
- * @throws when the timestamp is outside of limitFromMs and limitToMs range
124
- */
125
- scrollToTimestamp: (timestamp: number) => void,
126
- /**
127
- * Scrolls to given channel index if possible
128
- * @param index Index of the channel to scroll to
129
- * @throws when the index is outside of 0 and channels.length - 1 range
130
- */
131
- scrollToChannelIndex: (index: number) => void,
132
- }
133
- ```
134
-
135
- ### fetchPrograms
136
- ```ts
137
- type ProgramsFetcher<
138
- T extends EpgProgram,
139
- U extends EpgChannel<T>,
140
- > = (channel: U, fromMs: number, toMs: number) => Promise<T[]>;
141
- ```
142
-
143
- ### programTextModeResolver
144
- ```ts
145
- type ProgramTextMode = 'full' | 'ellipsis_only', 'empty';
146
-
147
- /**
148
- * Function to set custom breakpoints for different cell display styles
149
- * @param widthPx the width of the cell in pixels
150
- * @returns ProgramTextMode which mode should be displayed
151
- */
152
- type ProgramTextModeResolver = (widthPx: number) => ProgramTextMode;
153
- ```
154
-
155
- ### onItemPress
156
- ```ts
157
- type OnItemPress<
158
- T extends EpgProgram, // the model of the program used in the EPG
159
- U extends EpgChannel<U>, // the model of the channel used in the EPG
160
- V extends Program<T>, // the component rendered with renderProgram
161
- > = (data: T, channel: U, component: V) => void;
162
- ```
163
- `onItemPress` is not called for loading indicating cells.
164
-
165
- ### onFocusChange
166
- ```ts
167
- type OnFocusChange<
168
- T extends EpgProgram, // the model of the program used in the EPG
169
- U extends EpgChannel<U>, // the model of the channel used in the EPG
170
- V extends Program<T>, // the component rendered with renderProgram
171
- > = (data: T | undefined, channel: U, component: V) => void;
172
- ```
173
- `onFocusChange` is called each time a cell is focused. This can happen in multiple ways and can result
174
- in the same data getting focused. In case a loading cell is focused, the `data` is undefined.
175
-
176
- Events causing `onFocusChange`:
177
- - moving left/right between programs
178
- - moving up/down between channels
179
- - focusing cells with mouse or mrcu
180
- - data in cells getting updated with new data
181
-
182
- ### onScrolledToTimestamp
183
- ```ts
184
- type OnScrolledToTimestamp = (timestamp: number) => void;
185
- ```
186
- `onScrolledToTimestamp` is called each time the EPG scrolls to a new timestamp in ms. It is not called for
187
- the initial render.
188
-
189
- ### renderNowLineHeader
190
- This function allows a custom render of the top of the NowLine. NowLine is a vertical
191
- line that indicates the current time on the timeline. In most cases, this can be used to add a custom
192
- header to this line (e.g., an arrow pointer with LIVE). NowLine header can be a pure functional
193
- component. If you display the current time inside the header, you should implement NowLineHeader interface
194
- and then you can update it based on the current time easily.
195
- ```ts
196
- interface NowLineHeader extends Component<any> {
197
- updateData: (timestamp: number) => void, // current time in ms
198
- }
199
-
200
- type NowLineHeaderRenderer = (timestamp: number, ref: Reference<NowLineHeader>) => JSX.Element;
201
- ```
202
-
203
- ### renderChannelHeader
204
- This function allows changing the default channel header render. Because this component
205
- can be reused by multiple channels during its lifetime, it needs to implement `EpgHeader`
206
- interface.
207
- ```ts
208
- interface Header<
209
- T extends EpgChannel
210
- > extends Component<any> {
211
- show: () => void, // to show the header
212
- hide: () => void, // to hide the header
213
- updateData: (data: T) => void, // to update rendered data
214
- }
215
-
216
- type HeaderRenderer<
217
- T extends EpgChannel,
218
- U extends EpgHeader<T>,
219
- > = (data: T, ref: Reference<U>) => JSX.Element;
220
- ```
221
-
222
- ### renderProgram
223
- This function allows changing the default program cell content. The cell component that
224
- takes the care of focusing, pressing, showing and hiding is rendered by the EPG component.
225
- This makes this component easier as it only needs to handle the visuals.
226
- This component can also be reused by multiple programs and multiple channels.
227
- ```ts
228
- interface Program<T extends EpgProgram>
229
- extends Component<any> {
230
- /**
231
- * Function to offset the Program component inside the cell.
232
- * This is so the cells at the start of the viewport show text from the beginning
233
- * even though the Cell itself goes more to the past.
234
- * @param offset offset in x axis in px
235
- */
236
- setOffset?: (offset: number) => void,
237
- /**
238
- * Function to change the width of the Program component inside the cell.
239
- * This is so the cells at the start of the viewport show text from the beginning
240
- * even though the Cell itself goes more to the past.
241
- * @param width width in px
242
- */
243
- setWidth?: (width: number) => void,
244
- /**
245
- * Function to change data and the visuals.
246
- * (E.g. Use setText to change the name)
247
- * @param data New Program data
248
- * @param textMode ProgramTextMode that should be used currently
249
- * @param widthPx Cell's width if needed for visuals (e.g. showing/hiding replay icon)
250
- * @param xOffsetPx Cell's offset in pixels. If negative than widthPx + xOffsetPx = visibleWidthPx
251
- */
252
- updateData: (data: T, textMode: ProgramTextMode, widthPx: number, xOffsetPx: number) => void,
253
- }
254
-
255
- /**
256
- * This function should return custom visual for Program.
257
- * @typeparam T EpgProgram model - defaults to data-layer/models EpgProgram
258
- * @typeparam U Program component - defaults to EpgProgram component
259
- * @param isLoading Flag to mark whether it is just a loading placeholder
260
- * @param data Program data or undefined for loading placeholder
261
- * @param ref Reference to the component
262
- * @param widthPx The initial width of the Program component to render with
263
- * @param xOffsetPx The initial offset of the Program component to render with
264
- * @param textMode ProgramTextMode for initial render
265
- * @returns JSX.Element
266
- */
267
- export type ProgramRenderer<
268
- T extends EpgProgram,
269
- U extends Program<T>,
270
- > = (
271
- isLoading: boolean,
272
- data: T | undefined,
273
- ref: Reference<U>,
274
- widthPx: number,
275
- xOffsetPx: number,
276
- textMode: ProgramTextMode,
277
- ) => JSX.Element;
278
- ```
279
-
280
- ### renderDay
281
- This function allows changing the default day/date displayed in the timeline header.
282
- As the date changes, the day component needs to change as well. Therefore it needs to
283
- extend interface.
284
- ```ts
285
- interface Day extends Component<any> {
286
- updateData: (timestamp: number) => void,
287
- }
288
-
289
- type DayRenderer<
290
- T extends Day = Day,
291
- > = (timestamp: number, ref: Reference<T>) => JSX.Element;
292
- ```
293
-
294
- ### renderTime
295
- This function allow changing the default time rendered in the timeline header.
296
- Similar to other components it can be reused to display multiple times so it needs an
297
- update function (interface to extend).
298
- ```ts
299
- interface TimelineSection extends Component<any> {
300
- setOffset: (x: number) => void, // function to change the offset during scroll
301
- updateData: (timestamp: number) => void, // function to update the displayed time
302
- }
303
-
304
- type TimeRenderer<
305
- T extends TimelineSection = TimelineSection,
306
- > = (timestamp: number, offset: number, ref: Reference<T>) => JSX.Element;
307
- ```
308
-
309
- ### datePickerProps
310
- This prop can be used to render a DatePicker that seamlessly integrates with the EPG.
311
- If these are omitted, the `renderDay` component is displayed instead.
312
- The EPG uses regular `DatePicker` component from the [@24i/bigscreen-sdk/picker](../picker/README.md) package.
313
- The set of props that you need to pass to the EPG is limited (some props are provided by EPG)
314
- as well as extended to allow more functionality.
315
-
316
- The props that **you need to provide** are:
317
- - daysInPast - number of days in past to allow to be selected (EPG converts this to `from` prop for `DatePicker`)
318
- - daysToFuture - number of days in future to allow to be selected (EPG converts this to `to` prop for `DatePicker`)
319
- - visibleItems - number of items visible in the Picker (passed directly to `DatePicker`)
320
- - scrollStep - number of pixels to scroll on each Picker item (passed directly to `DatePicker`)
321
- - modalService - reference to modal service that the Picker should use (passed directly to `DatePicker`)
322
-
323
- The props that **EPG handles by itself and cannot be changed** (do not pass these, it won't change anything):
324
- - selectedValue - timestamp of the initial selected day - it is generated based on the EPG timestamp
325
- - onValueChange - callback for value change handled by EPG - if you want, you can listen to EPG's
326
- `onScrolledToTimestamp` that will be fired consequently to this event
327
-
328
- The props that **EPG handles by itself but can be overridden by you** (you can pass these):
329
- - dayStartOffsetMs - optional - number of milliseconds to start of the day
330
- (the time that is displayed after choosing the day) (defaults to 0) (impacts generated `from` and `to`)
331
- - format - optional - function to convert Date object to string
332
- (defaults to `l10n.date(date).toLocaleDateString({ weekday: 'short', day: 'numeric', month: 'short' })`)
333
- - overrides - optional - `Record<number, string>` object to override string values from format
334
- (defaults to object for strings `yesterday`, `today` and `tomorrow`)
335
- - mode - optional - PickerMode to use (defaults to `Picker.MODAL`)
336
- - className - optional - className to render DatePicker with (no default value --> Picker's default value will be used)
337
- - Checkbox - optional - Checkbox component to pass to DatePicker (no default value --> Picker's default value will be used)
338
-
339
- ### plugins
340
- EPG allows custom plugins to be rendered. They are rendered at the end of the EPG component (`div.epg`)
341
- in the order, they are in the `plugins` prop.
342
-
343
- ```tsx
344
- // how EPG renders plugins
345
- return (
346
- <div className="epg">
347
- {/* All default EPG Components go here */}
348
- {map(plugins, (Plugin) => (
349
- <Plugin ref={this.getPluginRef()} epg={this} />
350
- ))}
351
- </div>
352
- )
353
- ```
354
-
355
- The plugins can be either static or react to these events:
356
- - `onFocusChange`
357
- - `onItemPress`
358
- - `onScrolledToTimestamp`
359
- - `onFastScrollingStart`
360
- - `onFastScrollingEng`
361
- - `onFastVerticalScrollingStart`
362
- - `onFastVerticalScrollingEnd`
363
- - `onFastHorizontalScrollingStart`
364
- - `onFastHorizontalScrollingEnd`
365
-
366
- To achieve this behavior, the plugin should (but does not have to) implement the `Plugin` interface.
367
- In the case of a static plugin, it can be just a simple function component.
368
-
369
- ```ts
370
- interface Plugin<
371
- T extends EpgProgram = EpgProgram,
372
- U extends EpgChannel<T> = EpgChannel<T>,
373
- V extends Program<T> = Program<T>,
374
- > extends Component<any> {
375
- /**
376
- * Called each time a focus changes. Due to implementation this can result
377
- * in focus to different element with same data as before as same element
378
- * but different data. And also same element and same data
379
- */
380
- onFocusChange?: (data: T | undefined, channel: U, component: V) => void;
381
- /**
382
- * Called each time EPG scrolls left/right in time
383
- * @param timestamp current time of EPG in ms
384
- */
385
- onScrolledToTimestamp?: (timestamp: number) => void,
386
- /**
387
- * Called each time the Item is pressed. This is called before the outside
388
- * callback from props. However, it cannot stop the event. Intended more for
389
- * logging purposes than actual overrides.
390
- */
391
- onItemPress?: (data: T, channel: U, component: V) => void;
392
- /**
393
- * Called each time EPG switches to fast scrolling in either direction.
394
- * Called after onFast[Vertical/Horizontal]ScrollingStart.
395
- * If both are implemented, then both (directional and general) methods are called.
396
- */
397
- onFastScrollingStart?: () => void,
398
- /**
399
- * Called each time EPG switches to fast scrolling in vertical (channels) direction.
400
- */
401
- onFastVerticalScrollingStart?: () => void,
402
- /**
403
- * Called each time EPG switches to fast scrolling in horizontal (time) direction.
404
- */
405
- onFastHorizontalScrollingStart?: () => void,
406
- /**
407
- * Called each time EPG switches back to normal scrolling in either direction.
408
- * Called after onFast[Vertical/Horizontal]ScrollingEnd.
409
- * If both are implemented, then both (directional and general) methods are called.
410
- */
411
- onFastScrollingEnd?: () => void,
412
- /**
413
- * Called each time EPG switches back to normal scrolling in vertical (channels) direction.
414
- */
415
- onFastVerticalScrollingEnd?: () => void,
416
- /**
417
- * Called each time EPG switches back to normal scrolling in horizontal (time) direction.
418
- */
419
- onFastHorizontalScrollingEnd?: () => void,
420
- }
421
- ```
422
-
423
- There are several plugins already prepared. They do not import styles by default,
424
- so you need to import the styles by yourself.
425
-
426
- #### ProgramInfo
427
- Component that displays additional information about the focused program. The ProgramInfo show is
428
- debounced, so it does not display itself immediately.
429
-
430
- It hides itself during fast vertical scrolling. During horizontal scrolling (normal or fast) it
431
- displays "Loading..." text.
432
-
433
- If no detail information could've been obtained, "No information..." text is shown.
434
-
435
- If you want to change the debounce time (default is 700ms), you can do so through props. Then you will
436
- need to slightly alter the way you pass the plugin to the EPG component:
437
- ```tsx
438
- import { ProgramInfo } from '@24i/bigscreen-sdk/epg/ProgramInfo';
439
-
440
- // using default debounce time
441
- return (
442
- <EPG
443
- // ...
444
- plugins={[
445
- ProgramInfo,
446
- ]}
447
- />
448
- );
449
-
450
- // with custom debounce time
451
- return (
452
- <EPG
453
- // ...
454
- plugins={[
455
- forwardRef((props, ref) => (
456
- <ProgramInfo ref={ref} {...props} debounceMs={1000} />
457
- )),
458
- ]}
459
- />
460
- )
461
- ```
462
-
463
- #### DateToast
464
- Component that shows a toast with current date and time during fast horizontal scrolling.
465
- ```tsx
466
- import { DateToast } from '@24i/bigscreen-sdk/epg/DateToast';
467
-
468
- return (
469
- <EPG
470
- // ...
471
- plugins={[
472
- DateToast,
473
- ]}
474
- />
475
- );
476
- ```
477
-
478
- #### Example of a custom logging plugin
479
- ```tsx
480
- import { Component } from '@24i/bigscreen-sdk/jsx';
481
- import { Plugin } from '@24i/bigscreen-sdk/epg/interface';
482
- import { EpgProgram, EpgChannel } from '@24i/smart-apps-data-layer/epg';
483
-
484
- export class PressLogger<
485
- T extends EpgProgram,
486
- U extends EpgChannel<T>,
487
- > extends Component<{}> implements Plugin {
488
- onItemPress(data: T, channel: U) {
489
- log({ data, channel });
490
- }
491
-
492
- render() {
493
- return null;
494
- }
495
- }
496
- ```
497
- and then in EPG render:
498
- ```tsx
499
- render() {
500
- // ...
501
- return (
502
- // ...
503
- <EPG
504
- //...
505
- plugins={[
506
- PressLogger,
507
- ]}
508
- />
509
- );
510
- }
511
- ```
512
-
513
- ## Examples
514
-
515
- ### Minimal
516
- Minimal example of EPG with as much default stuff as possible:
517
- ```tsx
518
- return (
519
- <EPG
520
- timelineWidthPx={500}
521
- rowHeightPx={50}
522
- navigatableRows={4}
523
- additionalRows={3}
524
- channelHeaderWidthPx={200}
525
- channelData={this.channels}
526
- fetchPrograms={this.fetchPrograms}
527
- onItemPress={this.onItemPress}
528
- />
529
- );
530
- ```
531
-
532
- ### Full
533
- Full example with as much modifications as possible:
534
- ```tsx
535
- return (
536
- <EPG
537
- timelineWidthPx={500}
538
- timelineWidthMs={4 * HOUR_IN_MS}
539
- rowHeightPx={50}
540
- navigatableRows={4}
541
- additionalRows={3}
542
- channelHeaderWidthPx={200}
543
- scrollStepMs={HOUR_IN_MS}
544
- timelineSectionWidthMs={15 * MINUTE_IN_MS}
545
- limitFromMs={Date.now - WEEK_IN_MS}
546
- limitToMs={Date.now + WEEK_IN_MS}
547
- channelData={this.channels}
548
- fetchPrograms={this.fetchPrograms}
549
- timeProvider={() => time.getCurrentTime()}
550
- initialTimestamp={getTodayNoon()}
551
- initialChannelIndex={this.getCurrentChannelIndex()}
552
- onItemPress={this.onItemPress}
553
- onFocusChange={this.onFocusChange}
554
- onScrolledToTimestamp={this.onScrolledToTimestamp}
555
- renderNowLineHeader={
556
- () => <NowLineHeader />
557
- }
558
- renderChannelHeader={
559
- (data: U, ref: V) => <ChannelHeader ref={ref} channel={data} />
560
- }
561
- renderProgram={
562
- (isLoading: boolean, data: T | undefined, ref: W) => (
563
- <Program ref={ref} data={data} isLoading={isLoading} />
564
- )
565
- }
566
- renderTime={
567
- (timestamp: number, offset: number, ref: Reference<TimelineHeader>) => (
568
- <TimelineHeader ref={ref} timestamp={timestamp} offset={offset} />
569
- )
570
- }
571
- datePickerProps={{
572
- daysInPast: 7,
573
- daysToFuture: 7,
574
- visibleItems: 10,
575
- scrollStep: 72,
576
- modalService,
577
- dayStartOffsetMs: 12 * HOUR_IN_MS,
578
- }}
579
- plugins={[
580
- ProgramInfo,
581
- DateToast,
582
- ]}
583
- />
584
- );
585
- ```
1
+ ---
2
+ id: README
3
+ title: EPG V2
4
+ hide_title: true
5
+ sidebar_label: EPG V2
6
+ ---
7
+
8
+ # EPG
9
+ This package contains a prepared Electronic Program Guide component.
10
+
11
+ **All timestamps are in milliseconds.**
12
+
13
+ ## Props
14
+ - `timelineWidthPx` - the width of the timeline (the part where the programs are) in pixels
15
+ - `rowHeightPx` - the height of 1 row in pixels
16
+ - `navigatableRows` - the number of rows that can be navigated with focus
17
+ - `additionalRows` - the number of rows that are rendered below `navigatableRows` but cannot be focused
18
+ - `channelHeaderWidthPx` - the width of the channel headers (the part before programs in a row) in pixels
19
+ - `channelData` - the array of channels of a type that extends `EpgChannel` from the data layer
20
+ - `fetchPrograms` - the function to fetch more programs for a channel in a given time range
21
+ - `smallestAllowedCellPx` - optional - cells with width less than this are marked with `.too-small` class (defaults to `0`)
22
+ - `timelineWidthMs` - optional - the width of the timeline (the part where the programs are) in milliseconds (defaults to `90 minutes`)
23
+ - `scrollStepMs` - optional - the amount of movement step left/right in milliseconds (defaults to `0.5 hours`)
24
+ - `idleTimerMs` - optional - the amount of ms without user input after which epg jumps to the current time (defaults to `scrollStepMs`)
25
+ - `timelineSectionWidthMs` - optional - the width of timeline header section (above rows) in milliseconds (defaults to `0.5 hours`)
26
+ - `limitFromMs` - optional - left limit for movement (cannot go more into history) (defaults to `-Infinity`)
27
+ - `limitToMs` - optional - right limit for movement (cannot go further into future) (defaults to `Infinity`)
28
+ - `timeProvider` - optional - a function returning current timestamp (defaults to `Date.now`)
29
+ - `initialTimestamp` - optional - an initial point in time for EPG render (must be between `limitFromMs` and `limitToMs`) (defaults to `Date.now()`)
30
+ - `initialChannelIndex` - optional - an initial channel index to scroll to and to focus (defaults to `0`)
31
+ - `fetchDebounceTimeMs` - optional - time to debounce the fetch of programs (defaults to `500`)
32
+ - `programTextModeResolver` - optional - function to set custom no-text/ellipsis-only/full-text breakpoints
33
+ - `onItemPress` - callback for pressing an item
34
+ - `onFocusChange` - optional - callback for changing a focus (works for mouse/mrcu as well)
35
+ - `onScrolledToTimestamp` - optional - callback that is called with the current timestamp after scroll
36
+ - `renderNowLineHeader` - optional - render function for now line header (e.g. the live pointer arrow)
37
+ - `renderChannelHeader` - optional - render function for channel header (defaults to channel number and name)
38
+ - `renderProgram` - optional - render function for program (the inside of each cell) (defaults to program name)
39
+ - `renderDay` - optional - render function for day/date counter in the header (defaults to locale day, date, short month)
40
+ - `renderTime` - optional - render function for timeline section (defaults to `hh:mm` and vertical pointer)
41
+ - `datePickerProps` - optional - props for a DatePicker, if present DatePicker replaces `renderDay`
42
+ - `plugins` - optional - an array of plugins
43
+
44
+ ## Plugins
45
+ The EPG supports plugins. Plugins are rendered at the end of the component, in the order of being inside
46
+ the `plugins` prop.
47
+ Plugins can react to scrolling, focus changes and item press events. They can also control EPG through
48
+ its public interface.
49
+
50
+ Available prepared plugins:
51
+ - ProgramInfo - a box that shows more info from the currently focused program
52
+ - DateToast - a toast that is displayed during fast horizontal scrolling and shows the current day and time
53
+
54
+ ## Translations
55
+ These are keys for translations that are used in EPG:
56
+ - `date.yesterday` - used in the DatePicker, Day and DateToast for 'Yesterday' string
57
+ - `date.today` - used in the DatePicker, Day and DateToast for 'Today' string
58
+ - `date.tomorrow` - used in the DatePicker, Day and DateToast for 'Tomorrow' string
59
+ - `epg.noData.title` - used in no-data holes fillers as a Program name
60
+ - `common.status.loading` - used in the loading cells as a Program name
61
+ - `common.status.loading` - it is displayed when the ProgramInfo is loading data
62
+
63
+ ## How the EPG behaves
64
+ - the time that EPG operates with is always in the center of the visible part
65
+ - `onScrolledToTimestamp` returns the timestamp in the center of the EPG
66
+ - `leftEdge` is always `currentTimestamp - timelineWidthMs / 2`
67
+ - `rightEdge` is always `currentTimestamp + timelineWidthMs / 2`
68
+ - `scrollToTimestamp` will move the EPG so the passed timestamp is in the center
69
+ - the time of the EPG is always rounded
70
+ - for better UX experience, the EPG rounds down (floors) the given timestamp
71
+ to the closest `scrollStepMs` multiple
72
+ - e.g., the current time is 13:55, `scrollStepMs` is set to default 0.5 hours,
73
+ then the initial time of EPG will be `13:30` (if not set otherwise)
74
+ - this rounding also applies to `scrollToTimestamp` function and `initialTimestamp` prop
75
+ - the focus inside a channel jumps to the next/previous program
76
+ - if the next/previous program is not visible in the range or it is just partially visible at the edge, the EPG scrolls by `scrollStepMs`
77
+ - the focus between channels is driven by so-called `focusTimestamp`
78
+ - you can imagine the `focusTimestamp` as a vertical line (similar to NowLine) that marks the horizontal position of the focus
79
+ - the decision which program to focus, mark as live, etc. if the timestamp is exactly `startTime` of one and `endTime` of another
80
+ - `startTime` is always taken as included = the part of the program
81
+ - `endTime` is always taken as excluded = not the part of the program
82
+ - so the program that gets focused/marked as live / etc. is the one that is just starting
83
+ - when the Program displayed by the cell is currently live, the cell has an `.live` class
84
+ - the Cell has also these following classes based on its width, breakpoints defined by `programTextModeResolver` and `smallestAllowedCellPx`
85
+ - `.with-text` - this cell should display full or ellipsis truncated text
86
+ - `.ellipsis-only` - this cell should display only ellipsis. You can use this class to center the text.
87
+ - `.no-text` - this cell is so small that it should be empty
88
+ - `.too-small` - this cell is too small to render the usual way, as in its only several pixels wide, less than the needed margin/border etc.
89
+ - the element of the currently focused row has an `.active` class
90
+
91
+ ## Styles
92
+ There is a base for styles available for `import '@24i/bigscreen-sdk/epg/styles/Basic';`.
93
+ (see [./styles/Basic.ts](https://github.com/24i/smartapps-bigscreen-sdk/blob/development/packages/epg/styles/Basic.ts))
94
+
95
+ ## Interfaces
96
+
97
+ ### EPG
98
+ ```ts
99
+ interface EPG<
100
+ T extends EpgProgram,
101
+ U extends EpgChannel<T>,
102
+ V extends Header<U>,
103
+ W extends Program<T>,
104
+ > extends Component<Props>, IFocusable {
105
+ /**
106
+ * Function to return whether EPG is fast scrolling
107
+ * @returns true if is fast scrolling in any axis, false otherwise
108
+ */
109
+ isFastScrolling: () => boolean,
110
+ /**
111
+ * Function to return whether EPG is fast scrolling horizontally
112
+ * @returns true if is fast scrolling horizontally, false otherwise
113
+ */
114
+ isHorizontallyFastScrolling: () => boolean,
115
+ /**
116
+ * Function to return whether EPG is fast scrolling
117
+ * @returns true if is fast scrolling vertically, false otherwise
118
+ */
119
+ isVerticallyFastScrolling: () => boolean,
120
+ /**
121
+ * Scrolls to given timestamp if possible, rounded down to nearest scrollStepMs multiple
122
+ * @param timestamp Timestamp to scroll to
123
+ * @throws when the timestamp is outside of limitFromMs and limitToMs range
124
+ */
125
+ scrollToTimestamp: (timestamp: number) => void,
126
+ /**
127
+ * Scrolls to given channel index if possible
128
+ * @param index Index of the channel to scroll to
129
+ * @throws when the index is outside of 0 and channels.length - 1 range
130
+ */
131
+ scrollToChannelIndex: (index: number) => void,
132
+ }
133
+ ```
134
+
135
+ ### fetchPrograms
136
+ ```ts
137
+ type ProgramsFetcher<
138
+ T extends EpgProgram,
139
+ U extends EpgChannel<T>,
140
+ > = (channel: U, fromMs: number, toMs: number) => Promise<T[]>;
141
+ ```
142
+
143
+ ### programTextModeResolver
144
+ ```ts
145
+ type ProgramTextMode = 'full' | 'ellipsis_only', 'empty';
146
+
147
+ /**
148
+ * Function to set custom breakpoints for different cell display styles
149
+ * @param widthPx the width of the cell in pixels
150
+ * @returns ProgramTextMode which mode should be displayed
151
+ */
152
+ type ProgramTextModeResolver = (widthPx: number) => ProgramTextMode;
153
+ ```
154
+
155
+ ### onItemPress
156
+ ```ts
157
+ type OnItemPress<
158
+ T extends EpgProgram, // the model of the program used in the EPG
159
+ U extends EpgChannel<U>, // the model of the channel used in the EPG
160
+ V extends Program<T>, // the component rendered with renderProgram
161
+ > = (data: T, channel: U, component: V) => void;
162
+ ```
163
+ `onItemPress` is not called for loading indicating cells.
164
+
165
+ ### onFocusChange
166
+ ```ts
167
+ type OnFocusChange<
168
+ T extends EpgProgram, // the model of the program used in the EPG
169
+ U extends EpgChannel<U>, // the model of the channel used in the EPG
170
+ V extends Program<T>, // the component rendered with renderProgram
171
+ > = (data: T | undefined, channel: U, component: V) => void;
172
+ ```
173
+ `onFocusChange` is called each time a cell is focused. This can happen in multiple ways and can result
174
+ in the same data getting focused. In case a loading cell is focused, the `data` is undefined.
175
+
176
+ Events causing `onFocusChange`:
177
+ - moving left/right between programs
178
+ - moving up/down between channels
179
+ - focusing cells with mouse or mrcu
180
+ - data in cells getting updated with new data
181
+
182
+ ### onScrolledToTimestamp
183
+ ```ts
184
+ type OnScrolledToTimestamp = (timestamp: number) => void;
185
+ ```
186
+ `onScrolledToTimestamp` is called each time the EPG scrolls to a new timestamp in ms. It is not called for
187
+ the initial render.
188
+
189
+ ### renderNowLineHeader
190
+ This function allows a custom render of the top of the NowLine. NowLine is a vertical
191
+ line that indicates the current time on the timeline. In most cases, this can be used to add a custom
192
+ header to this line (e.g., an arrow pointer with LIVE). NowLine header can be a pure functional
193
+ component. If you display the current time inside the header, you should implement NowLineHeader interface
194
+ and then you can update it based on the current time easily.
195
+ ```ts
196
+ interface NowLineHeader extends Component<any> {
197
+ updateData: (timestamp: number) => void, // current time in ms
198
+ }
199
+
200
+ type NowLineHeaderRenderer = (timestamp: number, ref: Reference<NowLineHeader>) => JSX.Element;
201
+ ```
202
+
203
+ ### renderChannelHeader
204
+ This function allows changing the default channel header render. Because this component
205
+ can be reused by multiple channels during its lifetime, it needs to implement `EpgHeader`
206
+ interface.
207
+ ```ts
208
+ interface Header<
209
+ T extends EpgChannel
210
+ > extends Component<any> {
211
+ show: () => void, // to show the header
212
+ hide: () => void, // to hide the header
213
+ updateData: (data: T) => void, // to update rendered data
214
+ }
215
+
216
+ type HeaderRenderer<
217
+ T extends EpgChannel,
218
+ U extends EpgHeader<T>,
219
+ > = (data: T, ref: Reference<U>) => JSX.Element;
220
+ ```
221
+
222
+ ### renderProgram
223
+ This function allows changing the default program cell content. The cell component that
224
+ takes the care of focusing, pressing, showing and hiding is rendered by the EPG component.
225
+ This makes this component easier as it only needs to handle the visuals.
226
+ This component can also be reused by multiple programs and multiple channels.
227
+ ```ts
228
+ interface Program<T extends EpgProgram>
229
+ extends Component<any> {
230
+ /**
231
+ * Function to offset the Program component inside the cell.
232
+ * This is so the cells at the start of the viewport show text from the beginning
233
+ * even though the Cell itself goes more to the past.
234
+ * @param offset offset in x axis in px
235
+ */
236
+ setOffset?: (offset: number) => void,
237
+ /**
238
+ * Function to change the width of the Program component inside the cell.
239
+ * This is so the cells at the start of the viewport show text from the beginning
240
+ * even though the Cell itself goes more to the past.
241
+ * @param width width in px
242
+ */
243
+ setWidth?: (width: number) => void,
244
+ /**
245
+ * Function to change data and the visuals.
246
+ * (E.g. Use setText to change the name)
247
+ * @param data New Program data
248
+ * @param textMode ProgramTextMode that should be used currently
249
+ * @param widthPx Cell's width if needed for visuals (e.g. showing/hiding replay icon)
250
+ * @param xOffsetPx Cell's offset in pixels. If negative than widthPx + xOffsetPx = visibleWidthPx
251
+ */
252
+ updateData: (data: T, textMode: ProgramTextMode, widthPx: number, xOffsetPx: number) => void,
253
+ }
254
+
255
+ /**
256
+ * This function should return custom visual for Program.
257
+ * @typeparam T EpgProgram model - defaults to data-layer/models EpgProgram
258
+ * @typeparam U Program component - defaults to EpgProgram component
259
+ * @param isLoading Flag to mark whether it is just a loading placeholder
260
+ * @param data Program data or undefined for loading placeholder
261
+ * @param ref Reference to the component
262
+ * @param widthPx The initial width of the Program component to render with
263
+ * @param xOffsetPx The initial offset of the Program component to render with
264
+ * @param textMode ProgramTextMode for initial render
265
+ * @returns JSX.Element
266
+ */
267
+ export type ProgramRenderer<
268
+ T extends EpgProgram,
269
+ U extends Program<T>,
270
+ > = (
271
+ isLoading: boolean,
272
+ data: T | undefined,
273
+ ref: Reference<U>,
274
+ widthPx: number,
275
+ xOffsetPx: number,
276
+ textMode: ProgramTextMode,
277
+ ) => JSX.Element;
278
+ ```
279
+
280
+ ### renderDay
281
+ This function allows changing the default day/date displayed in the timeline header.
282
+ As the date changes, the day component needs to change as well. Therefore it needs to
283
+ extend interface.
284
+ ```ts
285
+ interface Day extends Component<any> {
286
+ updateData: (timestamp: number) => void,
287
+ }
288
+
289
+ type DayRenderer<
290
+ T extends Day = Day,
291
+ > = (timestamp: number, ref: Reference<T>) => JSX.Element;
292
+ ```
293
+
294
+ ### renderTime
295
+ This function allow changing the default time rendered in the timeline header.
296
+ Similar to other components it can be reused to display multiple times so it needs an
297
+ update function (interface to extend).
298
+ ```ts
299
+ interface TimelineSection extends Component<any> {
300
+ setOffset: (x: number) => void, // function to change the offset during scroll
301
+ updateData: (timestamp: number) => void, // function to update the displayed time
302
+ }
303
+
304
+ type TimeRenderer<
305
+ T extends TimelineSection = TimelineSection,
306
+ > = (timestamp: number, offset: number, ref: Reference<T>) => JSX.Element;
307
+ ```
308
+
309
+ ### datePickerProps
310
+ This prop can be used to render a DatePicker that seamlessly integrates with the EPG.
311
+ If these are omitted, the `renderDay` component is displayed instead.
312
+ The EPG uses regular `DatePicker` component from the [@24i/bigscreen-sdk/picker](../picker/README.md) package.
313
+ The set of props that you need to pass to the EPG is limited (some props are provided by EPG)
314
+ as well as extended to allow more functionality.
315
+
316
+ The props that **you need to provide** are:
317
+ - daysInPast - number of days in past to allow to be selected (EPG converts this to `from` prop for `DatePicker`)
318
+ - daysToFuture - number of days in future to allow to be selected (EPG converts this to `to` prop for `DatePicker`)
319
+ - visibleItems - number of items visible in the Picker (passed directly to `DatePicker`)
320
+ - scrollStep - number of pixels to scroll on each Picker item (passed directly to `DatePicker`)
321
+ - modalService - reference to modal service that the Picker should use (passed directly to `DatePicker`)
322
+
323
+ The props that **EPG handles by itself and cannot be changed** (do not pass these, it won't change anything):
324
+ - selectedValue - timestamp of the initial selected day - it is generated based on the EPG timestamp
325
+ - onValueChange - callback for value change handled by EPG - if you want, you can listen to EPG's
326
+ `onScrolledToTimestamp` that will be fired consequently to this event
327
+
328
+ The props that **EPG handles by itself but can be overridden by you** (you can pass these):
329
+ - dayStartOffsetMs - optional - number of milliseconds to start of the day
330
+ (the time that is displayed after choosing the day) (defaults to 0) (impacts generated `from` and `to`)
331
+ - format - optional - function to convert Date object to string
332
+ (defaults to `l10n.date(date).toLocaleDateString({ weekday: 'short', day: 'numeric', month: 'short' })`)
333
+ - overrides - optional - `Record<number, string>` object to override string values from format
334
+ (defaults to object for strings `yesterday`, `today` and `tomorrow`)
335
+ - mode - optional - PickerMode to use (defaults to `Picker.MODAL`)
336
+ - className - optional - className to render DatePicker with (no default value --> Picker's default value will be used)
337
+ - Checkbox - optional - Checkbox component to pass to DatePicker (no default value --> Picker's default value will be used)
338
+
339
+ ### plugins
340
+ EPG allows custom plugins to be rendered. They are rendered at the end of the EPG component (`div.epg`)
341
+ in the order, they are in the `plugins` prop.
342
+
343
+ ```tsx
344
+ // how EPG renders plugins
345
+ return (
346
+ <div className="epg">
347
+ {/* All default EPG Components go here */}
348
+ {map(plugins, (Plugin) => (
349
+ <Plugin ref={this.getPluginRef()} epg={this} />
350
+ ))}
351
+ </div>
352
+ )
353
+ ```
354
+
355
+ The plugins can be either static or react to these events:
356
+ - `onFocusChange`
357
+ - `onItemPress`
358
+ - `onScrolledToTimestamp`
359
+ - `onFastScrollingStart`
360
+ - `onFastScrollingEng`
361
+ - `onFastVerticalScrollingStart`
362
+ - `onFastVerticalScrollingEnd`
363
+ - `onFastHorizontalScrollingStart`
364
+ - `onFastHorizontalScrollingEnd`
365
+
366
+ To achieve this behavior, the plugin should (but does not have to) implement the `Plugin` interface.
367
+ In the case of a static plugin, it can be just a simple function component.
368
+
369
+ ```ts
370
+ interface Plugin<
371
+ T extends EpgProgram = EpgProgram,
372
+ U extends EpgChannel<T> = EpgChannel<T>,
373
+ V extends Program<T> = Program<T>,
374
+ > extends Component<any> {
375
+ /**
376
+ * Called each time a focus changes. Due to implementation this can result
377
+ * in focus to different element with same data as before as same element
378
+ * but different data. And also same element and same data
379
+ */
380
+ onFocusChange?: (data: T | undefined, channel: U, component: V) => void;
381
+ /**
382
+ * Called each time EPG scrolls left/right in time
383
+ * @param timestamp current time of EPG in ms
384
+ */
385
+ onScrolledToTimestamp?: (timestamp: number) => void,
386
+ /**
387
+ * Called each time the Item is pressed. This is called before the outside
388
+ * callback from props. However, it cannot stop the event. Intended more for
389
+ * logging purposes than actual overrides.
390
+ */
391
+ onItemPress?: (data: T, channel: U, component: V) => void;
392
+ /**
393
+ * Called each time EPG switches to fast scrolling in either direction.
394
+ * Called after onFast[Vertical/Horizontal]ScrollingStart.
395
+ * If both are implemented, then both (directional and general) methods are called.
396
+ */
397
+ onFastScrollingStart?: () => void,
398
+ /**
399
+ * Called each time EPG switches to fast scrolling in vertical (channels) direction.
400
+ */
401
+ onFastVerticalScrollingStart?: () => void,
402
+ /**
403
+ * Called each time EPG switches to fast scrolling in horizontal (time) direction.
404
+ */
405
+ onFastHorizontalScrollingStart?: () => void,
406
+ /**
407
+ * Called each time EPG switches back to normal scrolling in either direction.
408
+ * Called after onFast[Vertical/Horizontal]ScrollingEnd.
409
+ * If both are implemented, then both (directional and general) methods are called.
410
+ */
411
+ onFastScrollingEnd?: () => void,
412
+ /**
413
+ * Called each time EPG switches back to normal scrolling in vertical (channels) direction.
414
+ */
415
+ onFastVerticalScrollingEnd?: () => void,
416
+ /**
417
+ * Called each time EPG switches back to normal scrolling in horizontal (time) direction.
418
+ */
419
+ onFastHorizontalScrollingEnd?: () => void,
420
+ }
421
+ ```
422
+
423
+ There are several plugins already prepared. They do not import styles by default,
424
+ so you need to import the styles by yourself.
425
+
426
+ #### ProgramInfo
427
+ Component that displays additional information about the focused program. The ProgramInfo show is
428
+ debounced, so it does not display itself immediately.
429
+
430
+ It hides itself during fast vertical scrolling. During horizontal scrolling (normal or fast) it
431
+ displays "Loading..." text.
432
+
433
+ If no detail information could've been obtained, "No information..." text is shown.
434
+
435
+ If you want to change the debounce time (default is 700ms), you can do so through props. Then you will
436
+ need to slightly alter the way you pass the plugin to the EPG component:
437
+ ```tsx
438
+ import { ProgramInfo } from '@24i/bigscreen-sdk/epg/ProgramInfo';
439
+
440
+ // using default debounce time
441
+ return (
442
+ <EPG
443
+ // ...
444
+ plugins={[
445
+ ProgramInfo,
446
+ ]}
447
+ />
448
+ );
449
+
450
+ // with custom debounce time
451
+ return (
452
+ <EPG
453
+ // ...
454
+ plugins={[
455
+ forwardRef((props, ref) => (
456
+ <ProgramInfo ref={ref} {...props} debounceMs={1000} />
457
+ )),
458
+ ]}
459
+ />
460
+ )
461
+ ```
462
+
463
+ #### DateToast
464
+ Component that shows a toast with current date and time during fast horizontal scrolling.
465
+ ```tsx
466
+ import { DateToast } from '@24i/bigscreen-sdk/epg/DateToast';
467
+
468
+ return (
469
+ <EPG
470
+ // ...
471
+ plugins={[
472
+ DateToast,
473
+ ]}
474
+ />
475
+ );
476
+ ```
477
+
478
+ #### Example of a custom logging plugin
479
+ ```tsx
480
+ import { Component } from '@24i/bigscreen-sdk/jsx';
481
+ import { Plugin } from '@24i/bigscreen-sdk/epg/interface';
482
+ import { EpgProgram, EpgChannel } from '@24i/smart-apps-data-layer/epg';
483
+
484
+ export class PressLogger<
485
+ T extends EpgProgram,
486
+ U extends EpgChannel<T>,
487
+ > extends Component<{}> implements Plugin {
488
+ onItemPress(data: T, channel: U) {
489
+ log({ data, channel });
490
+ }
491
+
492
+ render() {
493
+ return null;
494
+ }
495
+ }
496
+ ```
497
+ and then in EPG render:
498
+ ```tsx
499
+ render() {
500
+ // ...
501
+ return (
502
+ // ...
503
+ <EPG
504
+ //...
505
+ plugins={[
506
+ PressLogger,
507
+ ]}
508
+ />
509
+ );
510
+ }
511
+ ```
512
+
513
+ ## Examples
514
+
515
+ ### Minimal
516
+ Minimal example of EPG with as much default stuff as possible:
517
+ ```tsx
518
+ return (
519
+ <EPG
520
+ timelineWidthPx={500}
521
+ rowHeightPx={50}
522
+ navigatableRows={4}
523
+ additionalRows={3}
524
+ channelHeaderWidthPx={200}
525
+ channelData={this.channels}
526
+ fetchPrograms={this.fetchPrograms}
527
+ onItemPress={this.onItemPress}
528
+ />
529
+ );
530
+ ```
531
+
532
+ ### Full
533
+ Full example with as much modifications as possible:
534
+ ```tsx
535
+ return (
536
+ <EPG
537
+ timelineWidthPx={500}
538
+ timelineWidthMs={4 * HOUR_IN_MS}
539
+ rowHeightPx={50}
540
+ navigatableRows={4}
541
+ additionalRows={3}
542
+ channelHeaderWidthPx={200}
543
+ scrollStepMs={HOUR_IN_MS}
544
+ timelineSectionWidthMs={15 * MINUTE_IN_MS}
545
+ limitFromMs={Date.now - WEEK_IN_MS}
546
+ limitToMs={Date.now + WEEK_IN_MS}
547
+ channelData={this.channels}
548
+ fetchPrograms={this.fetchPrograms}
549
+ timeProvider={() => time.getCurrentTime()}
550
+ initialTimestamp={getTodayNoon()}
551
+ initialChannelIndex={this.getCurrentChannelIndex()}
552
+ onItemPress={this.onItemPress}
553
+ onFocusChange={this.onFocusChange}
554
+ onScrolledToTimestamp={this.onScrolledToTimestamp}
555
+ renderNowLineHeader={
556
+ () => <NowLineHeader />
557
+ }
558
+ renderChannelHeader={
559
+ (data: U, ref: V) => <ChannelHeader ref={ref} channel={data} />
560
+ }
561
+ renderProgram={
562
+ (isLoading: boolean, data: T | undefined, ref: W) => (
563
+ <Program ref={ref} data={data} isLoading={isLoading} />
564
+ )
565
+ }
566
+ renderTime={
567
+ (timestamp: number, offset: number, ref: Reference<TimelineHeader>) => (
568
+ <TimelineHeader ref={ref} timestamp={timestamp} offset={offset} />
569
+ )
570
+ }
571
+ datePickerProps={{
572
+ daysInPast: 7,
573
+ daysToFuture: 7,
574
+ visibleItems: 10,
575
+ scrollStep: 72,
576
+ modalService,
577
+ dayStartOffsetMs: 12 * HOUR_IN_MS,
578
+ }}
579
+ plugins={[
580
+ ProgramInfo,
581
+ DateToast,
582
+ ]}
583
+ />
584
+ );
585
+ ```