@maestro_io/maestro-web-sdk 4.0.0-beta.4 → 4.0.0

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 (500) hide show
  1. package/dist/index.d.ts +1733 -0
  2. package/dist/maestro-web-sdk.esm.js +1 -1
  3. package/dist/maestro-web-sdk.esm.js.map +1 -1
  4. package/dist/maestro-web-sdk.umd.js +1 -1
  5. package/dist/maestro-web-sdk.umd.js.map +1 -1
  6. package/package.json +3 -2
  7. package/dist/f8820fca3a2a7957f753167da0884f9d.png +0 -0
  8. package/dist/package.json +0 -91
  9. package/dist/src/__mocks__/sentry.d.ts +0 -4
  10. package/dist/src/components/atoms/BaseButton/BaseButton.d.ts +0 -7
  11. package/dist/src/components/atoms/BaseButton/BaseButton.js +0 -11
  12. package/dist/src/components/atoms/BaseButton/index.d.ts +0 -2
  13. package/dist/src/components/atoms/BaseButton/index.js +0 -2
  14. package/dist/src/components/atoms/Image/index.d.ts +0 -13
  15. package/dist/src/components/atoms/Image/index.js +0 -34
  16. package/dist/src/components/atoms/Rive/index.d.ts +0 -219
  17. package/dist/src/components/atoms/Rive/index.js +0 -53
  18. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.d.ts +0 -3
  19. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.js +0 -9
  20. package/dist/src/components/atoms/SvgIcon/BetsIcon.d.ts +0 -7
  21. package/dist/src/components/atoms/SvgIcon/BetsIcon.js +0 -11
  22. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.d.ts +0 -7
  23. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.js +0 -11
  24. package/dist/src/components/atoms/SvgIcon/ChatIcon.d.ts +0 -4
  25. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.d.ts +0 -3
  26. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.js +0 -6
  27. package/dist/src/components/atoms/SvgIcon/CollapseIcon.d.ts +0 -3
  28. package/dist/src/components/atoms/SvgIcon/CollapseIcon.js +0 -6
  29. package/dist/src/components/atoms/SvgIcon/ExpandIcon.d.ts +0 -3
  30. package/dist/src/components/atoms/SvgIcon/ExpandIcon.js +0 -6
  31. package/dist/src/components/atoms/SvgIcon/FantasyIcon.d.ts +0 -7
  32. package/dist/src/components/atoms/SvgIcon/FantasyIcon.js +0 -15
  33. package/dist/src/components/atoms/SvgIcon/FlameIcon.d.ts +0 -7
  34. package/dist/src/components/atoms/SvgIcon/FlameIcon.js +0 -11
  35. package/dist/src/components/atoms/SvgIcon/HelloWorldIcon.d.ts +0 -3
  36. package/dist/src/components/atoms/SvgIcon/Icon.d.ts +0 -40
  37. package/dist/src/components/atoms/SvgIcon/Icon.js +0 -44
  38. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.d.ts +0 -6
  39. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.js +0 -10
  40. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.d.ts +0 -7
  41. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.js +0 -11
  42. package/dist/src/components/atoms/SvgIcon/PlayIcon.d.ts +0 -6
  43. package/dist/src/components/atoms/SvgIcon/PlayIcon.js +0 -8
  44. package/dist/src/components/atoms/SvgIcon/ShopIcon.d.ts +0 -5
  45. package/dist/src/components/atoms/SvgIcon/ShopIcon.js +0 -7
  46. package/dist/src/components/atoms/SvgIcon/ShopifyIcon.d.ts +0 -4
  47. package/dist/src/components/atoms/SvgIcon/StatsIcon.d.ts +0 -6
  48. package/dist/src/components/atoms/SvgIcon/StatsIcon.js +0 -12
  49. package/dist/src/components/atoms/SvgIcon/TimesIcon.d.ts +0 -3
  50. package/dist/src/components/atoms/SvgIcon/TimesIcon.js +0 -6
  51. package/dist/src/components/atoms/SvgIcon/WarningIcon.d.ts +0 -6
  52. package/dist/src/components/atoms/SvgIcon/WarningIcon.js +0 -8
  53. package/dist/src/components/atoms/SvgIcon/index.d.ts +0 -2
  54. package/dist/src/components/atoms/SvgIcon/index.js +0 -2
  55. package/dist/src/components/core/App/App.d.ts +0 -11
  56. package/dist/src/components/core/App/App.js +0 -35
  57. package/dist/src/components/core/App/index.d.ts +0 -2
  58. package/dist/src/components/core/App/index.js +0 -2
  59. package/dist/src/components/core/OverlayContainer.d.ts +0 -3
  60. package/dist/src/components/core/OverlayContainer.js +0 -58
  61. package/dist/src/components/core/PanelManager/PanelManager.d.ts +0 -21
  62. package/dist/src/components/core/PanelManager/PanelManager.js +0 -86
  63. package/dist/src/components/core/PanelManager/index.d.ts +0 -2
  64. package/dist/src/components/core/PanelManager/index.js +0 -2
  65. package/dist/src/components/core/ScrollableContainer/FocusableItem.d.ts +0 -6
  66. package/dist/src/components/core/ScrollableContainer/FocusableItem.js +0 -38
  67. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.d.ts +0 -78
  68. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.js +0 -169
  69. package/dist/src/components/core/ScrollableContainer/index.d.ts +0 -2
  70. package/dist/src/components/core/ScrollableContainer/index.js +0 -2
  71. package/dist/src/components/molecules/ActionButton/ActionButton.d.ts +0 -94
  72. package/dist/src/components/molecules/ActionButton/ActionButton.js +0 -10
  73. package/dist/src/components/molecules/ActionButton/index.d.ts +0 -2
  74. package/dist/src/components/molecules/ActionButton/index.js +0 -2
  75. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.d.ts +0 -16
  76. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.js +0 -50
  77. package/dist/src/components/molecules/HeadshotImage/index.d.ts +0 -2
  78. package/dist/src/components/molecules/HeadshotImage/index.js +0 -2
  79. package/dist/src/components/molecules/Overlay/Overlay.d.ts +0 -34
  80. package/dist/src/components/molecules/Overlay/Overlay.js +0 -139
  81. package/dist/src/components/molecules/Overlay/index.d.ts +0 -2
  82. package/dist/src/components/molecules/Overlay/index.js +0 -2
  83. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.d.ts +0 -104
  84. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +0 -27
  85. package/dist/src/components/molecules/PanelNavButton/index.d.ts +0 -2
  86. package/dist/src/components/molecules/PanelNavButton/index.js +0 -2
  87. package/dist/src/components/molecules/SegmentButton/SegmentButton.d.ts +0 -9
  88. package/dist/src/components/molecules/SegmentButton/SegmentButton.js +0 -10
  89. package/dist/src/components/molecules/SegmentButton/index.d.ts +0 -2
  90. package/dist/src/components/molecules/SegmentButton/index.js +0 -2
  91. package/dist/src/components/molecules/TabLoadError/TabLoadError.d.ts +0 -94
  92. package/dist/src/components/molecules/TabLoadError/TabLoadError.js +0 -14
  93. package/dist/src/components/molecules/TabLoadError/index.d.ts +0 -2
  94. package/dist/src/components/molecules/TabLoadError/index.js +0 -2
  95. package/dist/src/components/molecules/WatchButton/WatchButton.d.ts +0 -10
  96. package/dist/src/components/molecules/WatchButton/WatchButton.js +0 -15
  97. package/dist/src/components/molecules/WatchButton/index.d.ts +0 -2
  98. package/dist/src/components/molecules/WatchButton/index.js +0 -2
  99. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.d.ts +0 -16
  100. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +0 -60
  101. package/dist/src/components/organisms/PanelNavigation/index.d.ts +0 -2
  102. package/dist/src/components/organisms/PanelNavigation/index.js +0 -2
  103. package/dist/src/components/organisms/SegmentController/SegmentController.d.ts +0 -30
  104. package/dist/src/components/organisms/SegmentController/SegmentController.js +0 -76
  105. package/dist/src/components/organisms/SegmentController/index.d.ts +0 -3
  106. package/dist/src/components/organisms/SegmentController/index.js +0 -2
  107. package/dist/src/development/MaestroEventDelegate.d.ts +0 -27
  108. package/dist/src/development/MaestroEventDelegate.js +0 -109
  109. package/dist/src/development/TimeSeek.d.ts +0 -22
  110. package/dist/src/development/TimeSeek.js +0 -218
  111. package/dist/src/development/development.d.ts +0 -1
  112. package/dist/src/development/development.js +0 -36
  113. package/dist/src/external/AxiosNetworkClient.d.ts +0 -28
  114. package/dist/src/external/AxiosNetworkClient.js +0 -110
  115. package/dist/src/external/LocalStorageCacheManager.d.ts +0 -65
  116. package/dist/src/external/LocalStorageCacheManager.js +0 -213
  117. package/dist/src/external/ReactRenderer.d.ts +0 -17
  118. package/dist/src/external/ReactRenderer.js +0 -65
  119. package/dist/src/external/mocks/MockExternalNetworkClient.d.ts +0 -104
  120. package/dist/src/external/mocks/MockExternalNetworkClient.js +0 -187
  121. package/dist/src/external/ports/cacheManager.d.ts +0 -17
  122. package/dist/src/external/ports/cacheManager.js +0 -1
  123. package/dist/src/external/ports/networkClient.d.ts +0 -19
  124. package/dist/src/external/ports/networkClient.js +0 -1
  125. package/dist/src/external/ports/renderer.d.ts +0 -4
  126. package/dist/src/external/ports/renderer.js +0 -1
  127. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.d.ts +0 -8
  128. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.js +0 -7
  129. package/dist/src/external/spatial-navigation/index.d.ts +0 -4
  130. package/dist/src/external/spatial-navigation/index.js +0 -3
  131. package/dist/src/external/spatial-navigation/measureLayout.d.ts +0 -2
  132. package/dist/src/external/spatial-navigation/measureLayout.js +0 -30
  133. package/dist/src/external/spatial-navigation/spatialNavigation.d.ts +0 -155
  134. package/dist/src/external/spatial-navigation/spatialNavigation.js +0 -876
  135. package/dist/src/external/spatial-navigation/utils.d.ts +0 -20
  136. package/dist/src/external/spatial-navigation/utils.js +0 -6
  137. package/dist/src/external/spatial-navigation/visualDebugger.d.ts +0 -17
  138. package/dist/src/external/spatial-navigation/visualDebugger.js +0 -76
  139. package/dist/src/external/spatial-navigation/withFocusable.d.ts +0 -123
  140. package/dist/src/external/spatial-navigation/withFocusable.js +0 -245
  141. package/dist/src/helpers/Observable.d.ts +0 -12
  142. package/dist/src/helpers/Observable.js +0 -37
  143. package/dist/src/helpers/strings.d.ts +0 -2
  144. package/dist/src/helpers/strings.js +0 -14
  145. package/dist/src/helpers/url.d.ts +0 -1
  146. package/dist/src/helpers/url.js +0 -12
  147. package/dist/src/index.d.ts +0 -54
  148. package/dist/src/index.js +0 -165
  149. package/dist/src/interfaces/IMaestroEvent.d.ts +0 -126
  150. package/dist/src/interfaces/IMaestroEvent.js +0 -18
  151. package/dist/src/interfaces/IMaestroEventDelegate.d.ts +0 -74
  152. package/dist/src/interfaces/IMaestroEventDelegate.js +0 -1
  153. package/dist/src/interfaces/IMaestroManager.d.ts +0 -45
  154. package/dist/src/interfaces/IMaestroManager.js +0 -1
  155. package/dist/src/interfaces/IUserSettings.d.ts +0 -44
  156. package/dist/src/interfaces/IUserSettings.js +0 -20
  157. package/dist/src/models/IModel.d.ts +0 -7
  158. package/dist/src/models/IModel.js +0 -1
  159. package/dist/src/models/IPanel.d.ts +0 -15
  160. package/dist/src/models/IPanel.js +0 -40
  161. package/dist/src/models/ITheme.d.ts +0 -77
  162. package/dist/src/models/ITheme.js +0 -20
  163. package/dist/src/models/IWinningBet.d.ts +0 -7
  164. package/dist/src/models/IWinningBet.js +0 -1
  165. package/dist/src/modules/bets/interfaces/IBets.d.ts +0 -192
  166. package/dist/src/modules/bets/interfaces/IBets.js +0 -1
  167. package/dist/src/modules/bets/mocks.d.ts +0 -2
  168. package/dist/src/modules/bets/mocks.js +0 -573
  169. package/dist/src/modules/bets/types/BetsAnalyticsTypes.d.ts +0 -8
  170. package/dist/src/modules/bets/types/BetsAnalyticsTypes.js +0 -1
  171. package/dist/src/modules/bets/view/BetsView.d.ts +0 -28
  172. package/dist/src/modules/bets/view/BetsView.js +0 -143
  173. package/dist/src/modules/bets/view/HotProps/HotPropsView.d.ts +0 -100
  174. package/dist/src/modules/bets/view/HotProps/HotPropsView.js +0 -150
  175. package/dist/src/modules/bets/view/SixPack/SixPackView.d.ts +0 -23
  176. package/dist/src/modules/bets/view/SixPack/SixPackView.js +0 -110
  177. package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.d.ts +0 -6
  178. package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.js +0 -6
  179. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.d.ts +0 -101
  180. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.js +0 -149
  181. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.d.ts +0 -26
  182. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.js +0 -34
  183. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.d.ts +0 -7
  184. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.js +0 -18
  185. package/dist/src/modules/bets/view/UserBets/Boost/Boost.d.ts +0 -7
  186. package/dist/src/modules/bets/view/UserBets/Boost/Boost.js +0 -6
  187. package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.d.ts +0 -6
  188. package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.js +0 -9
  189. package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.d.ts +0 -8
  190. package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.js +0 -13
  191. package/dist/src/modules/bets/view/UserBets/Straight/Straight.d.ts +0 -7
  192. package/dist/src/modules/bets/view/UserBets/Straight/Straight.js +0 -6
  193. package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.d.ts +0 -7
  194. package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.js +0 -13
  195. package/dist/src/modules/bets/view/UserBets/UserBetsView.d.ts +0 -25
  196. package/dist/src/modules/bets/view/UserBets/UserBetsView.js +0 -107
  197. package/dist/src/modules/bets/view/components/Bet/Bet.d.ts +0 -158
  198. package/dist/src/modules/bets/view/components/Bet/Bet.js +0 -32
  199. package/dist/src/modules/bets/view/components/BetPill/BetPill.d.ts +0 -6
  200. package/dist/src/modules/bets/view/components/BetPill/BetPill.js +0 -6
  201. package/dist/src/modules/bets/view/components/BetsCard/BetsCard.d.ts +0 -10
  202. package/dist/src/modules/bets/view/components/BetsCard/BetsCard.js +0 -15
  203. package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.d.ts +0 -16
  204. package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.js +0 -20
  205. package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.d.ts +0 -8
  206. package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +0 -14
  207. package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.d.ts +0 -10
  208. package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.js +0 -16
  209. package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.d.ts +0 -18
  210. package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +0 -78
  211. package/dist/src/modules/bets/view/components/PromoCodeBanner/index.d.ts +0 -1
  212. package/dist/src/modules/bets/view/components/PromoCodeBanner/index.js +0 -1
  213. package/dist/src/modules/bets/view-model/BetsViewModel.d.ts +0 -219
  214. package/dist/src/modules/bets/view-model/BetsViewModel.js +0 -974
  215. package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.d.ts +0 -28
  216. package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.js +0 -107
  217. package/dist/src/modules/fantasy/components/ExpandedAthleteList/index.d.ts +0 -1
  218. package/dist/src/modules/fantasy/components/ExpandedAthleteList/index.js +0 -1
  219. package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.d.ts +0 -102
  220. package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.js +0 -20
  221. package/dist/src/modules/fantasy/components/LeagueCard/index.d.ts +0 -2
  222. package/dist/src/modules/fantasy/components/LeagueCard/index.js +0 -2
  223. package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.d.ts +0 -99
  224. package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.js +0 -29
  225. package/dist/src/modules/fantasy/components/TopPlayerCard/index.d.ts +0 -2
  226. package/dist/src/modules/fantasy/components/TopPlayerCard/index.js +0 -2
  227. package/dist/src/modules/fantasy/mocks.d.ts +0 -7620
  228. package/dist/src/modules/fantasy/mocks.js +0 -3682
  229. package/dist/src/modules/fantasy/types.d.ts +0 -176
  230. package/dist/src/modules/fantasy/types.js +0 -6
  231. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.d.ts +0 -21
  232. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.js +0 -74
  233. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/index.d.ts +0 -2
  234. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/index.js +0 -2
  235. package/dist/src/modules/fantasy/view/ErrorBoundary.d.ts +0 -13
  236. package/dist/src/modules/fantasy/view/FantasyItemView.d.ts +0 -22
  237. package/dist/src/modules/fantasy/view/FantasyItemView.js +0 -74
  238. package/dist/src/modules/fantasy/view/FantasyView.d.ts +0 -27
  239. package/dist/src/modules/fantasy/view/FantasyView.js +0 -133
  240. package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.d.ts +0 -23
  241. package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.js +0 -95
  242. package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.d.ts +0 -98
  243. package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.js +0 -13
  244. package/dist/src/modules/fantasy/view/InactiveLeague/index.d.ts +0 -2
  245. package/dist/src/modules/fantasy/view/InactiveLeague/index.js +0 -2
  246. package/dist/src/modules/fantasy/view/LoginView/LoginView.d.ts +0 -94
  247. package/dist/src/modules/fantasy/view/LoginView/LoginView.js +0 -27
  248. package/dist/src/modules/fantasy/view/LoginView/index.d.ts +0 -2
  249. package/dist/src/modules/fantasy/view/LoginView/index.js +0 -2
  250. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.d.ts +0 -95
  251. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.js +0 -25
  252. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/index.d.ts +0 -2
  253. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/index.js +0 -2
  254. package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.d.ts +0 -14
  255. package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.js +0 -9
  256. package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.d.ts +0 -100
  257. package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.js +0 -118
  258. package/dist/src/modules/fantasy/view/MatchupPair/index.d.ts +0 -2
  259. package/dist/src/modules/fantasy/view/MatchupPair/index.js +0 -2
  260. package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.d.ts +0 -14
  261. package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.js +0 -9
  262. package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.d.ts +0 -100
  263. package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.js +0 -108
  264. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.d.ts +0 -95
  265. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.js +0 -18
  266. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/index.d.ts +0 -2
  267. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/index.js +0 -2
  268. package/dist/src/modules/fantasy/view/MatchupSingle/index.d.ts +0 -2
  269. package/dist/src/modules/fantasy/view/MatchupSingle/index.js +0 -2
  270. package/dist/src/modules/fantasy/view/PromoView/PromoView.d.ts +0 -98
  271. package/dist/src/modules/fantasy/view/PromoView/PromoView.js +0 -12
  272. package/dist/src/modules/fantasy/view/PromoView/index.d.ts +0 -2
  273. package/dist/src/modules/fantasy/view/PromoView/index.js +0 -2
  274. package/dist/src/modules/fantasy/view/index.d.ts +0 -2
  275. package/dist/src/modules/fantasy/view/index.js +0 -2
  276. package/dist/src/modules/fantasy/view-model/FantasyViewModel.FantasyPolling.d.ts +0 -32
  277. package/dist/src/modules/fantasy/view-model/FantasyViewModel.FantasyPolling.js +0 -132
  278. package/dist/src/modules/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.d.ts +0 -32
  279. package/dist/src/modules/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.js +0 -141
  280. package/dist/src/modules/fantasy/view-model/FantasyViewModel.d.ts +0 -148
  281. package/dist/src/modules/fantasy/view-model/FantasyViewModel.js +0 -534
  282. package/dist/src/modules/hello-world/HelloWorldImage.d.ts +0 -3
  283. package/dist/src/modules/hello-world/HelloWorldView.d.ts +0 -11
  284. package/dist/src/modules/hello-world/HelloWorldView.js +0 -33
  285. package/dist/src/modules/hello-world/index.d.ts +0 -2
  286. package/dist/src/modules/hello-world/index.js +0 -2
  287. package/dist/src/modules/key-plays/constants.d.ts +0 -3
  288. package/dist/src/modules/key-plays/constants.js +0 -292
  289. package/dist/src/modules/key-plays/interfaces/IKeyPlays.d.ts +0 -32
  290. package/dist/src/modules/key-plays/interfaces/IKeyPlays.js +0 -14
  291. package/dist/src/modules/key-plays/interfaces/IKeyPlaysResponse.d.ts +0 -44
  292. package/dist/src/modules/key-plays/interfaces/IKeyPlaysResponse.js +0 -1
  293. package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.d.ts +0 -9
  294. package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.js +0 -16
  295. package/dist/src/modules/key-plays/view/KeyPlayCardView.d.ts +0 -39
  296. package/dist/src/modules/key-plays/view/KeyPlayCardView.js +0 -139
  297. package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.d.ts +0 -13
  298. package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.js +0 -65
  299. package/dist/src/modules/key-plays/view/KeyPlaysView.d.ts +0 -37
  300. package/dist/src/modules/key-plays/view/KeyPlaysView.js +0 -151
  301. package/dist/src/modules/key-plays/view-model/KeyPlaysViewModel.d.ts +0 -37
  302. package/dist/src/modules/key-plays/view-model/KeyPlaysViewModel.js +0 -246
  303. package/dist/src/modules/shop/mocks.d.ts +0 -22
  304. package/dist/src/modules/shop/mocks.js +0 -391
  305. package/dist/src/modules/shop/types.d.ts +0 -161
  306. package/dist/src/modules/shop/types.js +0 -7
  307. package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.d.ts +0 -9
  308. package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.js +0 -60
  309. package/dist/src/modules/shop/view/ProductDetailView/index.d.ts +0 -2
  310. package/dist/src/modules/shop/view/ProductDetailView/index.js +0 -2
  311. package/dist/src/modules/shop/view/ShopView.d.ts +0 -35
  312. package/dist/src/modules/shop/view/ShopView.js +0 -182
  313. package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.d.ts +0 -101
  314. package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.js +0 -23
  315. package/dist/src/modules/shop/view/components/BrowseCard/index.d.ts +0 -2
  316. package/dist/src/modules/shop/view/components/BrowseCard/index.js +0 -2
  317. package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.d.ts +0 -102
  318. package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.js +0 -26
  319. package/dist/src/modules/shop/view/components/ProductSummaryCard/index.d.ts +0 -2
  320. package/dist/src/modules/shop/view/components/ProductSummaryCard/index.js +0 -1
  321. package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.d.ts +0 -8
  322. package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.js +0 -19
  323. package/dist/src/modules/shop/view/components/ShopPromoView/index.d.ts +0 -1
  324. package/dist/src/modules/shop/view/components/ShopPromoView/index.js +0 -1
  325. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.d.ts +0 -23
  326. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.js +0 -61
  327. package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.d.ts +0 -18
  328. package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.js +0 -22
  329. package/dist/src/modules/shop/view/components/ShopSection/index.d.ts +0 -1
  330. package/dist/src/modules/shop/view/components/ShopSection/index.js +0 -1
  331. package/dist/src/modules/shop/view/index.d.ts +0 -2
  332. package/dist/src/modules/shop/view/index.js +0 -2
  333. package/dist/src/modules/shop/view-model/ShopViewModel.ShopPolling.d.ts +0 -31
  334. package/dist/src/modules/shop/view-model/ShopViewModel.ShopPolling.js +0 -111
  335. package/dist/src/modules/shop/view-model/ShopViewModel.d.ts +0 -77
  336. package/dist/src/modules/shop/view-model/ShopViewModel.js +0 -357
  337. package/dist/src/modules/stats/interfaces/IStats.d.ts +0 -226
  338. package/dist/src/modules/stats/interfaces/IStats.js +0 -1
  339. package/dist/src/modules/stats/mocks.d.ts +0 -2
  340. package/dist/src/modules/stats/mocks.js +0 -746
  341. package/dist/src/modules/stats/utils/driveSummaryUtils.d.ts +0 -18
  342. package/dist/src/modules/stats/utils/driveSummaryUtils.js +0 -48
  343. package/dist/src/modules/stats/utils/renderTeamStatistic.d.ts +0 -20
  344. package/dist/src/modules/stats/utils/renderTeamStatistic.js +0 -16
  345. package/dist/src/modules/stats/utils.d.ts +0 -39
  346. package/dist/src/modules/stats/utils.js +0 -62
  347. package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.d.ts +0 -22
  348. package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.js +0 -98
  349. package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.d.ts +0 -4
  350. package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.js +0 -27
  351. package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.d.ts +0 -22
  352. package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.js +0 -89
  353. package/dist/src/modules/stats/view/ActiveAthletes/index.d.ts +0 -2
  354. package/dist/src/modules/stats/view/ActiveAthletes/index.js +0 -2
  355. package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.d.ts +0 -106
  356. package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.js +0 -70
  357. package/dist/src/modules/stats/view/DriveSummary/DriveSummary.d.ts +0 -17
  358. package/dist/src/modules/stats/view/DriveSummary/DriveSummary.js +0 -87
  359. package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.d.ts +0 -27
  360. package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.js +0 -129
  361. package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.d.ts +0 -12
  362. package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.js +0 -26
  363. package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.d.ts +0 -10
  364. package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.js +0 -24
  365. package/dist/src/modules/stats/view/DriveSummary/index.d.ts +0 -2
  366. package/dist/src/modules/stats/view/DriveSummary/index.js +0 -2
  367. package/dist/src/modules/stats/view/GameLeaders/GameLeaders.d.ts +0 -21
  368. package/dist/src/modules/stats/view/GameLeaders/GameLeaders.js +0 -48
  369. package/dist/src/modules/stats/view/GameLeaders/index.d.ts +0 -2
  370. package/dist/src/modules/stats/view/GameLeaders/index.js +0 -2
  371. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.d.ts +0 -17
  372. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.js +0 -55
  373. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/index.d.ts +0 -2
  374. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/index.js +0 -1
  375. package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.d.ts +0 -98
  376. package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.js +0 -60
  377. package/dist/src/modules/stats/view/MatchPredictor/index.d.ts +0 -3
  378. package/dist/src/modules/stats/view/MatchPredictor/index.js +0 -2
  379. package/dist/src/modules/stats/view/Penalties/Penalties.d.ts +0 -9
  380. package/dist/src/modules/stats/view/Penalties/Penalties.js +0 -6
  381. package/dist/src/modules/stats/view/Penalties/index.d.ts +0 -2
  382. package/dist/src/modules/stats/view/Penalties/index.js +0 -2
  383. package/dist/src/modules/stats/view/RecentGames/RecentGames.d.ts +0 -98
  384. package/dist/src/modules/stats/view/RecentGames/RecentGames.js +0 -23
  385. package/dist/src/modules/stats/view/RecentGames/index.d.ts +0 -2
  386. package/dist/src/modules/stats/view/RecentGames/index.js +0 -2
  387. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.d.ts +0 -30
  388. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.js +0 -123
  389. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.d.ts +0 -2
  390. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.js +0 -2
  391. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.d.ts +0 -98
  392. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.js +0 -62
  393. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/index.d.ts +0 -2
  394. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/index.js +0 -2
  395. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.d.ts +0 -6
  396. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.js +0 -23
  397. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/index.d.ts +0 -2
  398. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/index.js +0 -2
  399. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.d.ts +0 -29
  400. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.js +0 -125
  401. package/dist/src/modules/stats/view/ScoringSummary/index.d.ts +0 -2
  402. package/dist/src/modules/stats/view/ScoringSummary/index.js +0 -2
  403. package/dist/src/modules/stats/view/StatsItemView.d.ts +0 -22
  404. package/dist/src/modules/stats/view/StatsItemView.js +0 -92
  405. package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.d.ts +0 -98
  406. package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.js +0 -36
  407. package/dist/src/modules/stats/view/StatsQRCode/index.d.ts +0 -2
  408. package/dist/src/modules/stats/view/StatsQRCode/index.js +0 -1
  409. package/dist/src/modules/stats/view/StatsView.d.ts +0 -27
  410. package/dist/src/modules/stats/view/StatsView.js +0 -137
  411. package/dist/src/modules/stats/view/TeamStats/TeamStatsView.d.ts +0 -98
  412. package/dist/src/modules/stats/view/TeamStats/TeamStatsView.js +0 -43
  413. package/dist/src/modules/stats/view/TeamStats/index.d.ts +0 -2
  414. package/dist/src/modules/stats/view/TeamStats/index.js +0 -1
  415. package/dist/src/modules/stats/view/Teams/StatsCarousel.d.ts +0 -25
  416. package/dist/src/modules/stats/view/Teams/StatsCarousel.js +0 -83
  417. package/dist/src/modules/stats/view/Teams/StatsProgressBar.d.ts +0 -6
  418. package/dist/src/modules/stats/view/Teams/StatsProgressBar.js +0 -19
  419. package/dist/src/modules/stats/view/Teams/Teams.d.ts +0 -98
  420. package/dist/src/modules/stats/view/Teams/Teams.js +0 -43
  421. package/dist/src/modules/stats/view/Teams/index.d.ts +0 -2
  422. package/dist/src/modules/stats/view/Teams/index.js +0 -2
  423. package/dist/src/modules/stats/view/WinProbability/WinProbability.d.ts +0 -98
  424. package/dist/src/modules/stats/view/WinProbability/WinProbability.js +0 -28
  425. package/dist/src/modules/stats/view/WinProbability/index.d.ts +0 -2
  426. package/dist/src/modules/stats/view/WinProbability/index.js +0 -2
  427. package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.d.ts +0 -113
  428. package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.js +0 -89
  429. package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.d.ts +0 -3
  430. package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.js +0 -12
  431. package/dist/src/modules/stats/view/components/AthletesStatistics/index.d.ts +0 -2
  432. package/dist/src/modules/stats/view/components/AthletesStatistics/index.js +0 -2
  433. package/dist/src/modules/stats/view/index.d.ts +0 -2
  434. package/dist/src/modules/stats/view/index.js +0 -2
  435. package/dist/src/modules/stats/view-model/StatsViewModel.d.ts +0 -241
  436. package/dist/src/modules/stats/view-model/StatsViewModel.js +0 -989
  437. package/dist/src/sentry.d.ts +0 -3
  438. package/dist/src/sentry.js +0 -31
  439. package/dist/src/services/AnalyticsService/AnalyticsService.d.ts +0 -84
  440. package/dist/src/services/AnalyticsService/AnalyticsService.js +0 -404
  441. package/dist/src/services/AnalyticsService/types.d.ts +0 -65
  442. package/dist/src/services/AnalyticsService/types.js +0 -1
  443. package/dist/src/services/BetsService.d.ts +0 -81
  444. package/dist/src/services/BetsService.js +0 -122
  445. package/dist/src/services/FantasyService.d.ts +0 -53
  446. package/dist/src/services/FantasyService.js +0 -92
  447. package/dist/src/services/GlobalService/GlobalService.d.ts +0 -9
  448. package/dist/src/services/GlobalService/PageService.d.ts +0 -9
  449. package/dist/src/services/GlobalService/index.d.ts +0 -2
  450. package/dist/src/services/GlobalService/mocks.d.ts +0 -2
  451. package/dist/src/services/GlobalService/types.d.ts +0 -11
  452. package/dist/src/services/InsightsService/InsightsPayloadBuilder.d.ts +0 -279
  453. package/dist/src/services/InsightsService/InsightsPayloadBuilder.js +0 -386
  454. package/dist/src/services/InsightsService/InsightsService.d.ts +0 -11
  455. package/dist/src/services/InsightsService/InsightsService.js +0 -74
  456. package/dist/src/services/NetworkManager/NetworkManager.d.ts +0 -147
  457. package/dist/src/services/NetworkManager/NetworkManager.js +0 -457
  458. package/dist/src/services/NetworkManager/NetworkManagerFactory.d.ts +0 -42
  459. package/dist/src/services/NetworkManager/NetworkManagerFactory.js +0 -101
  460. package/dist/src/services/NetworkManager/errors.d.ts +0 -17
  461. package/dist/src/services/NetworkManager/errors.js +0 -45
  462. package/dist/src/services/NetworkManager/types.d.ts +0 -103
  463. package/dist/src/services/NetworkManager/types.js +0 -10
  464. package/dist/src/services/PageService/PageService.d.ts +0 -9
  465. package/dist/src/services/PageService/PageService.js +0 -39
  466. package/dist/src/services/PageService/index.d.ts +0 -2
  467. package/dist/src/services/PageService/index.js +0 -2
  468. package/dist/src/services/PageService/mocks.d.ts +0 -2
  469. package/dist/src/services/PageService/mocks.js +0 -104
  470. package/dist/src/services/PageService/types.d.ts +0 -76
  471. package/dist/src/services/PageService/types.js +0 -1
  472. package/dist/src/services/ShopService.d.ts +0 -23
  473. package/dist/src/services/ShopService.js +0 -46
  474. package/dist/src/services/StaticService/PageService.d.ts +0 -9
  475. package/dist/src/services/StaticService/StaticService.d.ts +0 -12
  476. package/dist/src/services/StaticService/StaticService.js +0 -59
  477. package/dist/src/services/StaticService/index.d.ts +0 -2
  478. package/dist/src/services/StaticService/index.js +0 -2
  479. package/dist/src/services/StaticService/mocks.d.ts +0 -2
  480. package/dist/src/services/StaticService/mocks.js +0 -104
  481. package/dist/src/services/StaticService/types.d.ts +0 -76
  482. package/dist/src/services/StaticService/types.js +0 -1
  483. package/dist/src/services/StatsService.d.ts +0 -46
  484. package/dist/src/services/StatsService.js +0 -147
  485. package/dist/src/services/ThemeManager/constants.d.ts +0 -2
  486. package/dist/src/services/ThemeManager/constants.js +0 -47
  487. package/dist/src/services/UserSettingsManager.d.ts +0 -63
  488. package/dist/src/services/UserSettingsManager.js +0 -155
  489. package/dist/src/test-polyfills.d.ts +0 -1
  490. package/dist/src/test-polyfills.js +0 -15
  491. package/dist/src/types/OverlayTypes.d.ts +0 -43
  492. package/dist/src/types/OverlayTypes.js +0 -4
  493. package/dist/src/view-models/MaestroEventViewModel.d.ts +0 -63
  494. package/dist/src/view-models/MaestroEventViewModel.js +0 -304
  495. package/dist/src/view-models/OverlayViewModel.d.ts +0 -33
  496. package/dist/src/view-models/OverlayViewModel.js +0 -222
  497. package/dist/src/view-models/PanelManagerViewModel.d.ts +0 -46
  498. package/dist/src/view-models/PanelManagerViewModel.js +0 -212
  499. package/dist/src/view-models/ViewModel.d.ts +0 -12
  500. package/dist/src/view-models/ViewModel.js +0 -32
@@ -1,876 +0,0 @@
1
- import measureLayout from './measureLayout';
2
- import { KEY_BACK } from './utils';
3
- import { DIRECTION_DOWN, KEY_ENTER } from './utils';
4
- import { DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP } from './utils';
5
- import VisualDebugger from './visualDebugger';
6
- export const ROOT_FOCUS_KEY = 'SN:ROOT';
7
- const ADJACENT_SLICE_THRESHOLD = 0.2;
8
- /**
9
- * Adjacent slice is 5 times more important than diagonal
10
- */
11
- const ADJACENT_SLICE_WEIGHT = 5;
12
- const DIAGONAL_SLICE_WEIGHT = 1;
13
- /**
14
- * Main coordinate distance is 5 times more important
15
- */
16
- const MAIN_COORDINATE_WEIGHT = 5;
17
- const DEFAULT_KEY_MAP = {
18
- [DIRECTION_LEFT]: [37],
19
- [DIRECTION_UP]: [38],
20
- [DIRECTION_RIGHT]: [39],
21
- [DIRECTION_DOWN]: [40],
22
- [KEY_ENTER]: [13],
23
- [KEY_BACK]: [8, 10009, 461],
24
- };
25
- const DEBUG_FN_COLORS = ['#0FF', '#FF0', '#F0F'];
26
- const THROTTLE_OPTIONS = {
27
- leading: true,
28
- trailing: false,
29
- };
30
- export const getChildClosestToOrigin = (children) => {
31
- const childrenClosestToOrigin = sortBy(children, ({ layout }) => Math.abs(layout.left) + Math.abs(layout.top));
32
- return first(childrenClosestToOrigin);
33
- };
34
- const throttle = (func, wait, options = {}) => {
35
- let timeout = null;
36
- let previous = 0;
37
- const { leading = true, trailing = true } = options;
38
- return function (...args) {
39
- const now = Date.now();
40
- if (!previous && !leading)
41
- previous = now;
42
- const remaining = wait - (now - previous);
43
- if (remaining <= 0 || remaining > wait) {
44
- if (timeout) {
45
- clearTimeout(timeout);
46
- timeout = null;
47
- }
48
- previous = now;
49
- func.apply(this, args);
50
- }
51
- else if (!timeout && trailing) {
52
- timeout = window.setTimeout(() => {
53
- previous = leading ? Date.now() : 0;
54
- timeout = null;
55
- func.apply(this, args);
56
- }, remaining);
57
- }
58
- };
59
- };
60
- const sortBy = (array, iteratee) => [...array].sort((a, b) => {
61
- const aValue = iteratee(a);
62
- const bValue = iteratee(b);
63
- return aValue < bValue ? -1 : aValue > bValue ? 1 : 0;
64
- });
65
- const first = (array) => array[0];
66
- const difference = (array, values) => array.filter((x) => !values.includes(x));
67
- const forEach = (array, iteratee) => array.forEach(iteratee);
68
- /* eslint-disable no-nested-ternary */
69
- class SpatialNavigation {
70
- /**
71
- * Used to determine the coordinate that will be used to filter items that are over the "edge"
72
- */
73
- static getCutoffCoordinate(isVertical, isIncremental, isSibling, layout) {
74
- const itemX = layout.left;
75
- const itemY = layout.top;
76
- const itemWidth = layout.width;
77
- const itemHeight = layout.height;
78
- const coordinate = isVertical ? itemY : itemX;
79
- const itemSize = isVertical ? itemHeight : itemWidth;
80
- return isIncremental
81
- ? isSibling
82
- ? coordinate
83
- : coordinate + itemSize
84
- : isSibling
85
- ? coordinate + itemSize
86
- : coordinate;
87
- }
88
- /**
89
- * Returns two corners (a and b) coordinates that are used as a reference points
90
- * Where "a" is always leftmost and topmost corner, and "b" is rightmost bottommost corner
91
- */
92
- static getRefCorners(direction, isSibling, layout) {
93
- const itemX = layout.left;
94
- const itemY = layout.top;
95
- const itemWidth = layout.width;
96
- const itemHeight = layout.height;
97
- const result = {
98
- a: {
99
- x: 0,
100
- y: 0,
101
- },
102
- b: {
103
- x: 0,
104
- y: 0,
105
- },
106
- };
107
- switch (direction) {
108
- case DIRECTION_UP: {
109
- const y = isSibling ? itemY + itemHeight : itemY;
110
- result.a = {
111
- x: itemX,
112
- y,
113
- };
114
- result.b = {
115
- x: itemX + itemWidth,
116
- y,
117
- };
118
- break;
119
- }
120
- case DIRECTION_DOWN: {
121
- const y = isSibling ? itemY : itemY + itemHeight;
122
- result.a = {
123
- x: itemX,
124
- y,
125
- };
126
- result.b = {
127
- x: itemX + itemWidth,
128
- y,
129
- };
130
- break;
131
- }
132
- case DIRECTION_LEFT: {
133
- const x = isSibling ? itemX + itemWidth : itemX;
134
- result.a = {
135
- x,
136
- y: itemY,
137
- };
138
- result.b = {
139
- x,
140
- y: itemY + itemHeight,
141
- };
142
- break;
143
- }
144
- case DIRECTION_RIGHT: {
145
- const x = isSibling ? itemX : itemX + itemWidth;
146
- result.a = {
147
- x,
148
- y: itemY,
149
- };
150
- result.b = {
151
- x,
152
- y: itemY + itemHeight,
153
- };
154
- break;
155
- }
156
- default:
157
- break;
158
- }
159
- return result;
160
- }
161
- /**
162
- * Calculates if the sibling node is intersecting enough with the ref node by the secondary coordinate
163
- */
164
- static isAdjacentSlice(refCorners, siblingCorners, isVerticalDirection) {
165
- const { a: refA, b: refB } = refCorners;
166
- const { a: siblingA, b: siblingB } = siblingCorners;
167
- const coordinate = isVerticalDirection ? 'x' : 'y';
168
- const refCoordinateA = refA[coordinate];
169
- const refCoordinateB = refB[coordinate];
170
- const siblingCoordinateA = siblingA[coordinate];
171
- const siblingCoordinateB = siblingB[coordinate];
172
- const thresholdDistance = (refCoordinateB - refCoordinateA) * ADJACENT_SLICE_THRESHOLD;
173
- const intersectionLength = Math.max(0, Math.min(refCoordinateB, siblingCoordinateB) -
174
- Math.max(refCoordinateA, siblingCoordinateA));
175
- return intersectionLength >= thresholdDistance;
176
- }
177
- static getPrimaryAxisDistance(refCorners, siblingCorners, isVerticalDirection) {
178
- const { a: refA } = refCorners;
179
- const { a: siblingA } = siblingCorners;
180
- const coordinate = isVerticalDirection ? 'y' : 'x';
181
- return Math.abs(siblingA[coordinate] - refA[coordinate]);
182
- }
183
- static getSecondaryAxisDistance(refCorners, siblingCorners, isVerticalDirection) {
184
- const { a: refA, b: refB } = refCorners;
185
- const { a: siblingA, b: siblingB } = siblingCorners;
186
- const coordinate = isVerticalDirection ? 'x' : 'y';
187
- const refCoordinateA = refA[coordinate];
188
- const refCoordinateB = refB[coordinate];
189
- const siblingCoordinateA = siblingA[coordinate];
190
- const siblingCoordinateB = siblingB[coordinate];
191
- const distancesToCompare = [];
192
- distancesToCompare.push(Math.abs(siblingCoordinateA - refCoordinateA));
193
- distancesToCompare.push(Math.abs(siblingCoordinateA - refCoordinateB));
194
- distancesToCompare.push(Math.abs(siblingCoordinateB - refCoordinateA));
195
- distancesToCompare.push(Math.abs(siblingCoordinateB - refCoordinateB));
196
- return Math.min(...distancesToCompare);
197
- }
198
- /**
199
- * Inspired by: https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS_for_TV/TV_remote_control_navigation#Algorithm_design
200
- * Ref Corners are the 2 corners of the current component in the direction of navigation
201
- * They used as a base to measure adjacent slices
202
- */
203
- sortSiblingsByPriority(siblings, currentLayout, direction, _focusKey) {
204
- const isVerticalDirection = direction === DIRECTION_DOWN || direction === DIRECTION_UP;
205
- const refCorners = SpatialNavigation.getRefCorners(direction, false, currentLayout);
206
- return [...siblings].sort((a, b) => {
207
- const aCorners = SpatialNavigation.getRefCorners(direction, true, a.layout);
208
- const bCorners = SpatialNavigation.getRefCorners(direction, true, b.layout);
209
- const aIsAdjacentSlice = SpatialNavigation.isAdjacentSlice(refCorners, aCorners, isVerticalDirection);
210
- const bIsAdjacentSlice = SpatialNavigation.isAdjacentSlice(refCorners, bCorners, isVerticalDirection);
211
- const aPrimaryAxisFunction = aIsAdjacentSlice
212
- ? SpatialNavigation.getPrimaryAxisDistance
213
- : SpatialNavigation.getSecondaryAxisDistance;
214
- const bPrimaryAxisFunction = bIsAdjacentSlice
215
- ? SpatialNavigation.getPrimaryAxisDistance
216
- : SpatialNavigation.getSecondaryAxisDistance;
217
- const aSecondaryAxisFunction = aIsAdjacentSlice
218
- ? SpatialNavigation.getSecondaryAxisDistance
219
- : SpatialNavigation.getPrimaryAxisDistance;
220
- const bSecondaryAxisFunction = bIsAdjacentSlice
221
- ? SpatialNavigation.getSecondaryAxisDistance
222
- : SpatialNavigation.getPrimaryAxisDistance;
223
- const aPrimaryAxisDistance = aPrimaryAxisFunction(refCorners, aCorners, isVerticalDirection);
224
- const bPrimaryAxisDistance = bPrimaryAxisFunction(refCorners, bCorners, isVerticalDirection);
225
- const aSecondaryAxisDistance = aSecondaryAxisFunction(refCorners, aCorners, isVerticalDirection);
226
- const bSecondaryAxisDistance = bSecondaryAxisFunction(refCorners, bCorners, isVerticalDirection);
227
- const aTotalDistancePoints = aPrimaryAxisDistance * MAIN_COORDINATE_WEIGHT +
228
- aSecondaryAxisDistance;
229
- const bTotalDistancePoints = bPrimaryAxisDistance * MAIN_COORDINATE_WEIGHT +
230
- bSecondaryAxisDistance;
231
- const aPriority = (aTotalDistancePoints + 1) /
232
- (aIsAdjacentSlice ? ADJACENT_SLICE_WEIGHT : DIAGONAL_SLICE_WEIGHT);
233
- const bPriority = (bTotalDistancePoints + 1) /
234
- (bIsAdjacentSlice ? ADJACENT_SLICE_WEIGHT : DIAGONAL_SLICE_WEIGHT);
235
- return aPriority - bPriority;
236
- });
237
- }
238
- constructor(options = {}) {
239
- Object.defineProperty(this, "focusableComponents", {
240
- enumerable: true,
241
- configurable: true,
242
- writable: true,
243
- value: void 0
244
- });
245
- Object.defineProperty(this, "focusKey", {
246
- enumerable: true,
247
- configurable: true,
248
- writable: true,
249
- value: void 0
250
- });
251
- Object.defineProperty(this, "parentsHavingFocusedChild", {
252
- enumerable: true,
253
- configurable: true,
254
- writable: true,
255
- value: void 0
256
- });
257
- Object.defineProperty(this, "nativeMode", {
258
- enumerable: true,
259
- configurable: true,
260
- writable: true,
261
- value: void 0
262
- });
263
- Object.defineProperty(this, "throttle", {
264
- enumerable: true,
265
- configurable: true,
266
- writable: true,
267
- value: void 0
268
- });
269
- Object.defineProperty(this, "throttleKeypresses", {
270
- enumerable: true,
271
- configurable: true,
272
- writable: true,
273
- value: void 0
274
- });
275
- Object.defineProperty(this, "pressedKeys", {
276
- enumerable: true,
277
- configurable: true,
278
- writable: true,
279
- value: void 0
280
- });
281
- Object.defineProperty(this, "paused", {
282
- enumerable: true,
283
- configurable: true,
284
- writable: true,
285
- value: void 0
286
- });
287
- Object.defineProperty(this, "keyDownEventListener", {
288
- enumerable: true,
289
- configurable: true,
290
- writable: true,
291
- value: void 0
292
- });
293
- Object.defineProperty(this, "keyUpEventListener", {
294
- enumerable: true,
295
- configurable: true,
296
- writable: true,
297
- value: void 0
298
- });
299
- Object.defineProperty(this, "keyMap", {
300
- enumerable: true,
301
- configurable: true,
302
- writable: true,
303
- value: void 0
304
- });
305
- Object.defineProperty(this, "debug", {
306
- enumerable: true,
307
- configurable: true,
308
- writable: true,
309
- value: void 0
310
- });
311
- Object.defineProperty(this, "visualDebugger", {
312
- enumerable: true,
313
- configurable: true,
314
- writable: true,
315
- value: void 0
316
- });
317
- Object.defineProperty(this, "logIndex", {
318
- enumerable: true,
319
- configurable: true,
320
- writable: true,
321
- value: void 0
322
- });
323
- this.focusableComponents = {};
324
- this.focusKey = null;
325
- this.parentsHavingFocusedChild = [];
326
- this.nativeMode = false;
327
- this.throttle = 0;
328
- this.throttleKeypresses = false;
329
- this.pressedKeys = {};
330
- this.paused = true;
331
- this.keyDownEventListener = null;
332
- this.keyUpEventListener = null;
333
- this.keyMap = DEFAULT_KEY_MAP;
334
- this.debug = false;
335
- this.visualDebugger = null;
336
- this.logIndex = 0;
337
- this.onKeyEvent = this.onKeyEvent.bind(this);
338
- this.pause = this.pause.bind(this);
339
- this.resume = this.resume.bind(this);
340
- this.setFocus = this.setFocus.bind(this);
341
- this.updateAllLayouts = this.updateAllLayouts.bind(this);
342
- this.navigateByDirection = this.navigateByDirection.bind(this);
343
- this.init = this.init.bind(this);
344
- this.setKeyMap = this.setKeyMap.bind(this);
345
- this.init(options);
346
- }
347
- init({ debug = false, visualDebug = false, nativeMode = false, throttle = 0, throttleKeypresses = false, } = {}) {
348
- this.nativeMode = nativeMode;
349
- this.throttleKeypresses = throttleKeypresses;
350
- this.debug = debug;
351
- if (!this.nativeMode) {
352
- if (Number.isInteger(throttle) && throttle > 0) {
353
- this.throttle = throttle;
354
- }
355
- this.bindEventHandlers();
356
- if (visualDebug) {
357
- this.visualDebugger = new VisualDebugger();
358
- this.startDrawLayouts();
359
- }
360
- }
361
- }
362
- startDrawLayouts() {
363
- const draw = () => {
364
- requestAnimationFrame(() => {
365
- this.visualDebugger?.clearLayouts();
366
- Object.entries(this.focusableComponents).forEach(([focusKey, component]) => {
367
- this.visualDebugger?.drawLayout(component.layout, focusKey, component.parentFocusKey);
368
- });
369
- draw();
370
- });
371
- };
372
- draw();
373
- }
374
- destroy() {
375
- this.unbindEventHandlers();
376
- }
377
- getEventType(keyCode) {
378
- return Object.keys(this.getKeyMap()).find((key) => this.getKeyMap()[key].includes(keyCode));
379
- }
380
- bindEventHandlers() {
381
- if (typeof window !== 'undefined' && window.addEventListener) {
382
- const keyDownHandler = (event) => {
383
- if (this.paused === true) {
384
- return;
385
- }
386
- if (this.debug) {
387
- this.logIndex += 1;
388
- }
389
- const eventType = this.getEventType(event.keyCode);
390
- if (!eventType) {
391
- return;
392
- }
393
- this.pressedKeys[eventType] = this.pressedKeys[eventType]
394
- ? this.pressedKeys[eventType] + 1
395
- : 1;
396
- event.preventDefault();
397
- event.stopPropagation();
398
- const details = {
399
- pressedKeys: this.pressedKeys,
400
- };
401
- if (this.focusKey && this.getNodeLayoutByFocusKey(this.focusKey)) {
402
- details.layout = this.getNodeLayoutByFocusKey(this.focusKey);
403
- }
404
- if (eventType === KEY_ENTER && this.focusKey) {
405
- this.onEnterPress(details);
406
- return;
407
- }
408
- if (eventType === KEY_BACK && this.focusKey) {
409
- this.onBackPress(details);
410
- return;
411
- }
412
- const preventDefaultNavigation = this.onArrowPress(eventType, details) === false;
413
- if (preventDefaultNavigation) {
414
- this.log('keyDownEventListener', 'default navigation prevented');
415
- this.visualDebugger?.clear();
416
- }
417
- else {
418
- this.onKeyEvent(event);
419
- }
420
- };
421
- this.keyDownEventListener = this.throttle
422
- ? throttle(keyDownHandler, this.throttle, THROTTLE_OPTIONS)
423
- : keyDownHandler;
424
- this.keyUpEventListener = (event) => {
425
- const eventType = this.getEventType(event.keyCode);
426
- if (eventType) {
427
- delete this.pressedKeys[eventType];
428
- }
429
- if (this.throttle && !this.throttleKeypresses) {
430
- // @ts-ignore
431
- this.keyDownEventListener?.cancel?.();
432
- }
433
- if (eventType === KEY_ENTER && this.focusKey) {
434
- this.onEnterRelease();
435
- }
436
- };
437
- window.addEventListener('keyup', this.keyUpEventListener);
438
- window.addEventListener('keydown', this.keyDownEventListener);
439
- }
440
- }
441
- unbindEventHandlers() {
442
- if (typeof window !== 'undefined' && window.removeEventListener) {
443
- window.removeEventListener('keydown', this.keyDownEventListener);
444
- this.keyDownEventListener = null;
445
- if (this.throttle) {
446
- window.removeEventListener('keyup', this.keyUpEventListener);
447
- this.keyUpEventListener = null;
448
- }
449
- }
450
- }
451
- onEnterPress(details) {
452
- const component = this.focusableComponents[this.focusKey];
453
- if (!component) {
454
- this.log('onEnterPress', 'noComponent');
455
- return;
456
- }
457
- if (!component.focusable) {
458
- this.log('onEnterPress', 'componentNotFocusable');
459
- return;
460
- }
461
- component.onEnterPressHandler?.(details);
462
- }
463
- onBackPress(details) {
464
- const component = this.focusableComponents[this.focusKey];
465
- if (!component) {
466
- this.log('onBackPress', 'noComponent');
467
- return;
468
- }
469
- if (!component.focusable) {
470
- this.log('onBackPress', 'componentNotFocusable');
471
- return;
472
- }
473
- component.onBackPressHandler?.(details);
474
- }
475
- onEnterRelease() {
476
- const component = this.focusableComponents[this.focusKey];
477
- if (!component) {
478
- this.log('onEnterRelease', 'noComponent');
479
- return;
480
- }
481
- if (!component.focusable) {
482
- this.log('onEnterRelease', 'componentNotFocusable');
483
- return;
484
- }
485
- component.onEnterReleaseHandler?.();
486
- }
487
- onArrowPress(direction, details) {
488
- const component = this.focusableComponents[this.focusKey];
489
- if (!component) {
490
- this.log('onArrowPress', 'noComponent');
491
- return undefined;
492
- }
493
- return component.onArrowPressHandler?.(direction, details);
494
- }
495
- navigateByDirection(direction, details = {}) {
496
- if (this.paused === true) {
497
- return;
498
- }
499
- const validDirections = [
500
- DIRECTION_DOWN,
501
- DIRECTION_UP,
502
- DIRECTION_LEFT,
503
- DIRECTION_RIGHT,
504
- ];
505
- if (validDirections.includes(direction)) {
506
- this.log('navigateByDirection', 'direction', direction);
507
- this.smartNavigate(direction, null, details);
508
- }
509
- else {
510
- this.log('navigateByDirection', `Invalid direction. You passed: \`${direction}\`, but you can use only these: `, validDirections);
511
- }
512
- }
513
- onKeyEvent(event) {
514
- this.visualDebugger?.clear();
515
- const direction = Object.keys(this.getKeyMap()).find((key) => this.getKeyMap()[key].includes(event.keyCode));
516
- if (direction) {
517
- this.smartNavigate(direction, null, { event });
518
- }
519
- }
520
- smartNavigate(direction, fromParentFocusKey, details) {
521
- this.log('smartNavigate', 'direction', direction);
522
- this.log('smartNavigate', 'fromParentFocusKey', fromParentFocusKey);
523
- this.log('smartNavigate', 'this.focusKey', this.focusKey);
524
- if (!this.nativeMode && !fromParentFocusKey) {
525
- Object.values(this.focusableComponents).forEach((component) => {
526
- component.layoutUpdated = false;
527
- });
528
- }
529
- const currentComponent = this.focusableComponents[fromParentFocusKey || this.focusKey];
530
- this.log('smartNavigate', 'currentComponent', currentComponent ? currentComponent.focusKey : undefined, currentComponent ? currentComponent.node : undefined);
531
- if (currentComponent) {
532
- this.updateLayout(currentComponent.focusKey);
533
- const { parentFocusKey, focusKey, layout } = currentComponent;
534
- const isVerticalDirection = direction === DIRECTION_DOWN || direction === DIRECTION_UP;
535
- const isIncrementalDirection = direction === DIRECTION_DOWN || direction === DIRECTION_RIGHT;
536
- const currentCutoffCoordinate = SpatialNavigation.getCutoffCoordinate(isVerticalDirection, isIncrementalDirection, false, layout);
537
- /**
538
- * Get only the siblings with the coords on the way of our moving direction
539
- */
540
- const siblings = Object.values(this.focusableComponents).filter((component) => {
541
- if (component.parentFocusKey === parentFocusKey &&
542
- component.focusable) {
543
- this.updateLayout(component.focusKey);
544
- const siblingCutoffCoordinate = SpatialNavigation.getCutoffCoordinate(isVerticalDirection, isIncrementalDirection, true, component.layout);
545
- return isIncrementalDirection
546
- ? siblingCutoffCoordinate >= currentCutoffCoordinate
547
- : siblingCutoffCoordinate <= currentCutoffCoordinate;
548
- }
549
- return false;
550
- });
551
- if (this.debug) {
552
- this.log('smartNavigate', 'siblings', siblings);
553
- }
554
- if (siblings.length > 0) {
555
- const sortedSiblings = this.sortSiblingsByPriority(siblings, layout, direction, focusKey);
556
- if (this.debug) {
557
- this.log('smartNavigate', 'sortedSiblings', sortedSiblings);
558
- }
559
- const nextComponent = sortedSiblings[0];
560
- if (nextComponent) {
561
- this.setFocus(nextComponent.focusKey, details);
562
- }
563
- }
564
- else {
565
- this.log('smartNavigate', 'noSiblings');
566
- if (parentFocusKey) {
567
- this.smartNavigate(direction, parentFocusKey, details);
568
- }
569
- }
570
- }
571
- }
572
- saveLastFocusedChildKey(component, focusKey) {
573
- if (component) {
574
- this.log('saveLastFocusedChildKey', `${component.focusKey} lastFocusedChildKey set`, focusKey);
575
- component.lastFocusedChildKey = focusKey;
576
- }
577
- }
578
- log(functionName, debugString, ...rest) {
579
- if (this.debug) {
580
- console.log(`%c${functionName}%c${debugString}`, `background: ${DEBUG_FN_COLORS[this.logIndex % DEBUG_FN_COLORS.length]}; color: black; padding: 1px 5px;`, 'background: #333; color: #BADA55; padding: 1px 5px;', ...rest);
581
- }
582
- }
583
- getNextFocusKey(targetFocusKey) {
584
- this.log('getNextFocusKey', 'targetFocusKey', targetFocusKey);
585
- const targetComponent = this.focusableComponents[targetFocusKey];
586
- if (!targetComponent) {
587
- return targetFocusKey;
588
- }
589
- const { trackChildren } = targetComponent;
590
- if (!trackChildren) {
591
- return targetFocusKey;
592
- }
593
- const children = Object.values(this.focusableComponents).filter((component) => component.parentFocusKey === targetFocusKey && component.focusable);
594
- if (children.length === 0) {
595
- return targetFocusKey;
596
- }
597
- const { lastFocusedChildKey, preferredChildFocusKey } = targetComponent;
598
- /**
599
- * First of all trying to focus last focused child
600
- */
601
- if (lastFocusedChildKey &&
602
- !targetComponent.forgetLastFocusedChild &&
603
- this.isParticipatingFocusableComponent(lastFocusedChildKey)) {
604
- this.log('getNextFocusKey', 'lastFocusedChildKey will be focused', lastFocusedChildKey);
605
- return this.getNextFocusKey(lastFocusedChildKey);
606
- }
607
- /**
608
- * If there is no lastFocusedChild, trying to focus the preferred focused key
609
- */
610
- if (preferredChildFocusKey &&
611
- this.isParticipatingFocusableComponent(preferredChildFocusKey)) {
612
- this.log('getNextFocusKey', 'preferredChildFocusKey will be focused', preferredChildFocusKey);
613
- return this.getNextFocusKey(preferredChildFocusKey);
614
- }
615
- /**
616
- * Otherwise, trying to focus something by coordinates
617
- */
618
- children.forEach((component) => this.updateLayout(component.focusKey));
619
- const { focusKey: childKey } = getChildClosestToOrigin(children);
620
- this.log('getNextFocusKey', 'childKey will be focused', childKey);
621
- return this.getNextFocusKey(childKey);
622
- }
623
- addFocusable({ focusKey, node, parentFocusKey, onEnterPressHandler, onEnterReleaseHandler, onBackPressHandler, onArrowPressHandler, onBecameFocusedHandler, onBecameBlurredHandler, forgetLastFocusedChild, trackChildren, onUpdateFocus, onUpdateHasFocusedChild, preferredChildFocusKey, autoRestoreFocus, focusable = true, blockNavigationOut, }) {
624
- this.focusableComponents[focusKey] = {
625
- focusKey,
626
- node,
627
- parentFocusKey,
628
- onEnterPressHandler,
629
- onEnterReleaseHandler,
630
- onBackPressHandler,
631
- onArrowPressHandler,
632
- onBecameFocusedHandler,
633
- onBecameBlurredHandler,
634
- onUpdateFocus,
635
- onUpdateHasFocusedChild,
636
- forgetLastFocusedChild,
637
- trackChildren,
638
- lastFocusedChildKey: null,
639
- preferredChildFocusKey,
640
- focusable,
641
- blockNavigationOut,
642
- autoRestoreFocus,
643
- layout: {
644
- x: 0,
645
- y: 0,
646
- width: 0,
647
- height: 0,
648
- left: 0,
649
- top: 0,
650
- node,
651
- },
652
- layoutUpdated: false,
653
- };
654
- if (this.nativeMode) {
655
- return;
656
- }
657
- this.updateLayout(focusKey);
658
- /**
659
- * If for some reason this component was already focused before it was added, call the update
660
- */
661
- if (focusKey === this.focusKey) {
662
- this.setFocus(focusKey);
663
- }
664
- }
665
- removeFocusable({ focusKey }) {
666
- const componentToRemove = this.focusableComponents[focusKey];
667
- if (componentToRemove) {
668
- const { parentFocusKey } = componentToRemove;
669
- Reflect.deleteProperty(this.focusableComponents, focusKey);
670
- const parentComponent = this.focusableComponents[parentFocusKey];
671
- const wasFocused = focusKey === this.focusKey;
672
- // If a component was unmounted and it was focused, we need to clear focusKey if the focus is in the Client App so the focus don't get lost.
673
- if (wasFocused) {
674
- if (this.paused) {
675
- this.focusKey = null;
676
- }
677
- else {
678
- // if its not paused, we need to focus on a component that is visible so we don't lose focus
679
- this.setFocus('PANEL_NAVIGATION');
680
- }
681
- }
682
- /**
683
- * If the component was stored as lastFocusedChild, clear lastFocusedChildKey from parent
684
- */
685
- parentComponent &&
686
- parentComponent.lastFocusedChildKey === focusKey &&
687
- (parentComponent.lastFocusedChildKey = null);
688
- if (this.nativeMode) {
689
- return;
690
- }
691
- /**
692
- * If the component was also focused at this time, focus another one
693
- */
694
- if (wasFocused &&
695
- parentComponent &&
696
- parentComponent.autoRestoreFocus &&
697
- !this.paused) {
698
- this.setFocus(parentFocusKey);
699
- }
700
- }
701
- }
702
- getNodeLayoutByFocusKey(focusKey) {
703
- const component = this.focusableComponents[focusKey];
704
- if (component) {
705
- this.updateLayout(component.focusKey);
706
- return component.layout;
707
- }
708
- return null;
709
- }
710
- setCurrentFocusedKey(newFocusKey, details) {
711
- if (this.isFocusableComponent(this.focusKey) &&
712
- newFocusKey !== this.focusKey) {
713
- const oldComponent = this.focusableComponents[this.focusKey];
714
- const parentComponent = this.focusableComponents[oldComponent.parentFocusKey];
715
- this.saveLastFocusedChildKey(parentComponent, this.focusKey);
716
- oldComponent.onUpdateFocus?.(false);
717
- oldComponent.onBecameBlurredHandler?.(this.getNodeLayoutByFocusKey(this.focusKey), details);
718
- }
719
- this.focusKey = newFocusKey;
720
- if (this.isFocusableComponent(this.focusKey)) {
721
- const newComponent = this.focusableComponents[this.focusKey];
722
- newComponent.onUpdateFocus?.(true);
723
- newComponent.onBecameFocusedHandler?.(this.getNodeLayoutByFocusKey(this.focusKey), details);
724
- }
725
- }
726
- updateParentsHasFocusedChild(focusKey, details) {
727
- const parents = [];
728
- let currentComponent = this.focusableComponents[focusKey];
729
- /**
730
- * Recursively iterate the tree up and find all the parents' focus keys
731
- */
732
- while (currentComponent) {
733
- const { parentFocusKey } = currentComponent;
734
- const parentComponent = this.focusableComponents[parentFocusKey];
735
- if (parentComponent) {
736
- const { focusKey: currentParentFocusKey } = parentComponent;
737
- parents.push(currentParentFocusKey);
738
- }
739
- currentComponent = parentComponent;
740
- }
741
- const parentsToRemoveFlag = difference(this.parentsHavingFocusedChild, parents);
742
- const parentsToAddFlag = difference(parents, this.parentsHavingFocusedChild);
743
- forEach(parentsToRemoveFlag, (parentFocusKey) => {
744
- const parentComponent = this.focusableComponents[parentFocusKey];
745
- parentComponent &&
746
- parentComponent.trackChildren &&
747
- parentComponent.onUpdateHasFocusedChild?.(false);
748
- this.onIntermediateNodeBecameBlurred(parentFocusKey, details);
749
- });
750
- forEach(parentsToAddFlag, (parentFocusKey) => {
751
- const parentComponent = this.focusableComponents[parentFocusKey];
752
- parentComponent &&
753
- parentComponent.trackChildren &&
754
- parentComponent.onUpdateHasFocusedChild?.(true);
755
- this.onIntermediateNodeBecameFocused(parentFocusKey, details);
756
- });
757
- this.parentsHavingFocusedChild = parents;
758
- }
759
- updateParentsLastFocusedChild(focusKey) {
760
- let currentComponent = this.focusableComponents[focusKey];
761
- /**
762
- * Recursively iterate the tree up and update all the parent's lastFocusedChild
763
- */
764
- while (currentComponent) {
765
- const { parentFocusKey } = currentComponent;
766
- const parentComponent = this.focusableComponents[parentFocusKey];
767
- if (parentComponent) {
768
- this.saveLastFocusedChildKey(parentComponent, currentComponent.focusKey);
769
- }
770
- currentComponent = parentComponent;
771
- }
772
- }
773
- getKeyMap() {
774
- return this.keyMap;
775
- }
776
- setKeyMap(keyMap) {
777
- this.keyMap = {
778
- ...this.getKeyMap(),
779
- ...keyMap,
780
- };
781
- }
782
- isFocusableComponent(focusKey) {
783
- return !!this.focusableComponents[focusKey];
784
- }
785
- /**
786
- * Checks whether the focusableComponent is actually participating in spatial navigation (in other words, is a
787
- * 'focusable' focusableComponent). Seems less confusing than calling it isFocusableFocusableComponent()
788
- */
789
- isParticipatingFocusableComponent(focusKey) {
790
- return (this.isFocusableComponent(focusKey) &&
791
- this.focusableComponents[focusKey].focusable);
792
- }
793
- onIntermediateNodeBecameFocused(focusKey, details) {
794
- this.isParticipatingFocusableComponent(focusKey) &&
795
- this.focusableComponents[focusKey].onBecameFocusedHandler?.(this.getNodeLayoutByFocusKey(focusKey), details);
796
- }
797
- onIntermediateNodeBecameBlurred(focusKey, details) {
798
- this.isParticipatingFocusableComponent(focusKey) &&
799
- this.focusableComponents[focusKey].onBecameBlurredHandler?.(this.getNodeLayoutByFocusKey(focusKey), details);
800
- }
801
- pause() {
802
- this.parentsHavingFocusedChild = [];
803
- this.pressedKeys = {};
804
- this.log('pause', 'paused');
805
- this.visualDebugger?.clear();
806
- this.visualDebugger?.clearLayouts();
807
- this.getFocusableComponents().forEach((component) => {
808
- component.onUpdateFocus?.(false);
809
- });
810
- this.paused = true;
811
- }
812
- resume() {
813
- this.paused = false;
814
- }
815
- setFocus(targetFocusKey, details = {}) {
816
- const lastFocusedKey = this.focusKey;
817
- const newFocusKey = this.getNextFocusKey(targetFocusKey);
818
- this.log('setFocus', 'newFocusKey', newFocusKey);
819
- this.setCurrentFocusedKey(newFocusKey, details);
820
- this.updateParentsHasFocusedChild(newFocusKey, details);
821
- this.updateParentsLastFocusedChild(lastFocusedKey);
822
- }
823
- updateAllLayouts() {
824
- if (this.nativeMode) {
825
- return;
826
- }
827
- Object.entries(this.focusableComponents).forEach(([focusKey]) => {
828
- this.updateLayout(focusKey);
829
- });
830
- }
831
- updateLayout(focusKey) {
832
- const component = this.focusableComponents[focusKey];
833
- if (!component || this.nativeMode || component.layoutUpdated) {
834
- return;
835
- }
836
- const { node } = component;
837
- measureLayout(node, (x, y, width, height, left, top) => {
838
- component.layout = {
839
- x,
840
- y,
841
- width,
842
- height,
843
- left,
844
- top,
845
- node,
846
- };
847
- });
848
- }
849
- updateFocusable(focusKey, { node, preferredChildFocusKey, focusable, blockNavigationOut, }) {
850
- if (this.nativeMode) {
851
- return;
852
- }
853
- const component = this.focusableComponents[focusKey];
854
- if (component) {
855
- component.preferredChildFocusKey = preferredChildFocusKey;
856
- component.focusable = focusable ?? component.focusable;
857
- component.blockNavigationOut = blockNavigationOut;
858
- if (node) {
859
- component.node = node;
860
- }
861
- }
862
- }
863
- isNativeMode() {
864
- return this.nativeMode;
865
- }
866
- getFocusableComponents() {
867
- return Object.values(this.focusableComponents);
868
- }
869
- getFocusableComponentsByParentFocusKey(parentFocusKey) {
870
- return Object.values(this.focusableComponents).filter((component) => component.parentFocusKey === parentFocusKey);
871
- }
872
- }
873
- /**
874
- * Export singleton
875
- */
876
- export default SpatialNavigation;