@maestro_io/maestro-web-sdk 5.0.0 → 5.1.1

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