@maestro_io/maestro-web-sdk 3.3.1 → 4.0.0-beta.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 (370) hide show
  1. package/dist/f8820fca3a2a7957f753167da0884f9d.png +0 -0
  2. package/dist/maestro-web-sdk.esm.js +12 -12
  3. package/dist/maestro-web-sdk.esm.js.map +1 -1
  4. package/dist/maestro-web-sdk.umd.js +12 -12
  5. package/dist/maestro-web-sdk.umd.js.map +1 -1
  6. package/dist/package.json +91 -0
  7. package/dist/src/__mocks__/sentry.d.ts +4 -0
  8. package/dist/src/components/atoms/BaseButton/BaseButton.d.ts +1 -1
  9. package/dist/src/components/atoms/BaseButton/BaseButton.js +11 -0
  10. package/dist/src/components/atoms/BaseButton/index.js +2 -0
  11. package/dist/src/components/atoms/Image/index.d.ts +1 -1
  12. package/dist/src/components/atoms/Image/index.js +34 -0
  13. package/dist/src/components/atoms/Rive/index.d.ts +141 -11
  14. package/dist/src/components/atoms/Rive/index.js +53 -0
  15. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.d.ts +1 -2
  16. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.js +9 -0
  17. package/dist/src/components/atoms/SvgIcon/BetsIcon.d.ts +1 -1
  18. package/dist/src/components/atoms/SvgIcon/BetsIcon.js +11 -0
  19. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.d.ts +1 -1
  20. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.js +11 -0
  21. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.d.ts +1 -2
  22. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.js +6 -0
  23. package/dist/src/components/atoms/SvgIcon/CollapseIcon.d.ts +1 -2
  24. package/dist/src/components/atoms/SvgIcon/CollapseIcon.js +6 -0
  25. package/dist/src/components/atoms/SvgIcon/ExpandIcon.d.ts +1 -2
  26. package/dist/src/components/atoms/SvgIcon/ExpandIcon.js +6 -0
  27. package/dist/src/components/atoms/SvgIcon/FantasyIcon.d.ts +1 -1
  28. package/dist/src/components/atoms/SvgIcon/FantasyIcon.js +15 -0
  29. package/dist/src/components/atoms/SvgIcon/FlameIcon.d.ts +1 -1
  30. package/dist/src/components/atoms/SvgIcon/FlameIcon.js +11 -0
  31. package/dist/src/components/atoms/SvgIcon/Icon.d.ts +5 -5
  32. package/dist/src/components/atoms/SvgIcon/Icon.js +44 -0
  33. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.d.ts +1 -1
  34. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.js +10 -0
  35. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.d.ts +1 -1
  36. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.js +11 -0
  37. package/dist/src/components/atoms/SvgIcon/PlayIcon.d.ts +1 -1
  38. package/dist/src/components/atoms/SvgIcon/PlayIcon.js +8 -0
  39. package/dist/src/components/atoms/SvgIcon/ShopIcon.d.ts +1 -1
  40. package/dist/src/components/atoms/SvgIcon/ShopIcon.js +7 -0
  41. package/dist/src/components/atoms/SvgIcon/StatsIcon.d.ts +1 -1
  42. package/dist/src/components/atoms/SvgIcon/StatsIcon.js +12 -0
  43. package/dist/src/components/atoms/SvgIcon/TimesIcon.d.ts +1 -2
  44. package/dist/src/components/atoms/SvgIcon/TimesIcon.js +6 -0
  45. package/dist/src/components/atoms/SvgIcon/WarningIcon.d.ts +1 -1
  46. package/dist/src/components/atoms/SvgIcon/WarningIcon.js +8 -0
  47. package/dist/src/components/atoms/SvgIcon/index.js +2 -0
  48. package/dist/src/components/core/App/App.d.ts +1 -1
  49. package/dist/src/components/core/App/App.js +35 -0
  50. package/dist/src/components/core/App/index.js +2 -0
  51. package/dist/src/components/core/OverlayContainer.js +58 -0
  52. package/dist/src/components/core/PanelManager/PanelManager.d.ts +1 -1
  53. package/dist/src/components/core/PanelManager/PanelManager.js +86 -0
  54. package/dist/src/components/core/PanelManager/index.js +2 -0
  55. package/dist/src/components/core/ScrollableContainer/FocusableItem.js +38 -0
  56. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.d.ts +8 -7
  57. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.js +169 -0
  58. package/dist/src/components/core/ScrollableContainer/index.js +2 -0
  59. package/dist/src/components/molecules/ActionButton/ActionButton.d.ts +53 -7
  60. package/dist/src/components/molecules/ActionButton/ActionButton.js +10 -0
  61. package/dist/src/components/molecules/ActionButton/index.js +2 -0
  62. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.d.ts +1 -1
  63. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.js +50 -0
  64. package/dist/src/components/molecules/HeadshotImage/index.js +2 -0
  65. package/dist/src/components/molecules/Overlay/Overlay.d.ts +1 -1
  66. package/dist/src/components/molecules/Overlay/Overlay.js +139 -0
  67. package/dist/src/components/molecules/Overlay/index.js +2 -0
  68. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.d.ts +53 -7
  69. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +27 -0
  70. package/dist/src/components/molecules/PanelNavButton/index.js +2 -0
  71. package/dist/src/components/molecules/SegmentButton/SegmentButton.js +10 -0
  72. package/dist/src/components/molecules/SegmentButton/index.js +2 -0
  73. package/dist/src/components/molecules/TabLoadError/TabLoadError.d.ts +53 -7
  74. package/dist/src/components/molecules/TabLoadError/TabLoadError.js +14 -0
  75. package/dist/src/components/molecules/TabLoadError/index.js +2 -0
  76. package/dist/src/components/molecules/WatchButton/WatchButton.d.ts +1 -1
  77. package/dist/src/components/molecules/WatchButton/WatchButton.js +15 -0
  78. package/dist/src/components/molecules/WatchButton/index.js +2 -0
  79. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.d.ts +1 -1
  80. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +60 -0
  81. package/dist/src/components/organisms/PanelNavigation/index.js +2 -0
  82. package/dist/src/components/organisms/SegmentController/SegmentController.d.ts +5 -4
  83. package/dist/src/components/organisms/SegmentController/SegmentController.js +76 -0
  84. package/dist/src/components/organisms/SegmentController/index.js +2 -0
  85. package/dist/src/development/MaestroEventDelegate.js +109 -0
  86. package/dist/src/development/TimeSeek.d.ts +1 -1
  87. package/dist/src/development/TimeSeek.js +218 -0
  88. package/dist/src/development/development.js +36 -0
  89. package/dist/src/external/AxiosNetworkClient.js +110 -0
  90. package/dist/src/external/LocalStorageCacheManager.js +213 -0
  91. package/dist/src/external/ReactRenderer.js +65 -0
  92. package/dist/src/external/mocks/MockExternalNetworkClient.js +187 -0
  93. package/dist/src/external/ports/cacheManager.js +1 -0
  94. package/dist/src/external/ports/networkClient.js +1 -0
  95. package/dist/src/external/ports/renderer.d.ts +1 -2
  96. package/dist/src/external/ports/renderer.js +1 -0
  97. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.d.ts +8 -0
  98. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.js +7 -0
  99. package/dist/src/external/spatial-navigation/index.js +3 -0
  100. package/dist/src/external/spatial-navigation/measureLayout.js +30 -0
  101. package/dist/src/external/spatial-navigation/spatialNavigation.js +876 -0
  102. package/dist/src/external/spatial-navigation/utils.js +6 -0
  103. package/dist/src/external/spatial-navigation/visualDebugger.js +76 -0
  104. package/dist/src/external/spatial-navigation/withFocusable.d.ts +53 -7
  105. package/dist/src/external/spatial-navigation/withFocusable.js +245 -0
  106. package/dist/src/helpers/Observable.js +37 -0
  107. package/dist/src/helpers/strings.js +14 -0
  108. package/dist/src/helpers/url.js +12 -0
  109. package/dist/src/index.d.ts +5 -5
  110. package/dist/src/index.js +165 -0
  111. package/dist/src/interfaces/IMaestroEvent.js +18 -0
  112. package/dist/src/interfaces/IMaestroEventDelegate.js +1 -0
  113. package/dist/src/interfaces/IMaestroManager.js +1 -0
  114. package/dist/src/interfaces/IUserSettings.js +20 -0
  115. package/dist/src/models/IModel.js +1 -0
  116. package/dist/src/models/IPanel.js +40 -0
  117. package/dist/src/models/ITheme.js +20 -0
  118. package/dist/src/models/IWinningBet.js +1 -0
  119. package/dist/src/modules/bets/interfaces/IBets.js +1 -0
  120. package/dist/src/modules/bets/mocks.js +573 -0
  121. package/dist/src/modules/bets/types/BetsAnalyticsTypes.js +1 -0
  122. package/dist/src/modules/bets/view/BetsView.d.ts +3 -3
  123. package/dist/src/modules/bets/view/BetsView.js +143 -0
  124. package/dist/src/modules/bets/view/HotProps/HotPropsView.d.ts +53 -7
  125. package/dist/src/modules/bets/view/HotProps/HotPropsView.js +150 -0
  126. package/dist/src/modules/bets/view/SixPack/SixPackView.d.ts +5 -4
  127. package/dist/src/modules/bets/view/SixPack/SixPackView.js +110 -0
  128. package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.d.ts +1 -1
  129. package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.js +6 -0
  130. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.d.ts +53 -7
  131. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.js +149 -0
  132. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.d.ts +5 -4
  133. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.js +34 -0
  134. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.d.ts +1 -2
  135. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.js +18 -0
  136. package/dist/src/modules/bets/view/UserBets/Boost/Boost.d.ts +1 -2
  137. package/dist/src/modules/bets/view/UserBets/Boost/Boost.js +6 -0
  138. package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.d.ts +1 -2
  139. package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.js +9 -0
  140. package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.d.ts +1 -2
  141. package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.js +13 -0
  142. package/dist/src/modules/bets/view/UserBets/Straight/Straight.d.ts +1 -2
  143. package/dist/src/modules/bets/view/UserBets/Straight/Straight.js +6 -0
  144. package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.d.ts +1 -2
  145. package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.js +13 -0
  146. package/dist/src/modules/bets/view/UserBets/UserBetsView.d.ts +3 -3
  147. package/dist/src/modules/bets/view/UserBets/UserBetsView.js +107 -0
  148. package/dist/src/modules/bets/view/components/Bet/Bet.d.ts +99 -11
  149. package/dist/src/modules/bets/view/components/Bet/Bet.js +32 -0
  150. package/dist/src/modules/bets/view/components/BetPill/BetPill.d.ts +1 -1
  151. package/dist/src/modules/bets/view/components/BetPill/BetPill.js +6 -0
  152. package/dist/src/modules/bets/view/components/BetsCard/BetsCard.js +15 -0
  153. package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.d.ts +1 -1
  154. package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.js +20 -0
  155. package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.d.ts +1 -1
  156. package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +14 -0
  157. package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.d.ts +1 -1
  158. package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.js +16 -0
  159. package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.d.ts +5 -4
  160. package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +78 -0
  161. package/dist/src/modules/bets/view/components/PromoCodeBanner/index.js +1 -0
  162. package/dist/src/modules/bets/view-model/BetsViewModel.js +974 -0
  163. package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.d.ts +1 -1
  164. package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.js +107 -0
  165. package/dist/src/modules/fantasy/components/ExpandedAthleteList/index.js +1 -0
  166. package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.d.ts +53 -7
  167. package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.js +20 -0
  168. package/dist/src/modules/fantasy/components/LeagueCard/index.js +2 -0
  169. package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.d.ts +53 -7
  170. package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.js +29 -0
  171. package/dist/src/modules/fantasy/components/TopPlayerCard/index.js +2 -0
  172. package/dist/src/modules/fantasy/mocks.js +3682 -0
  173. package/dist/src/modules/fantasy/types.js +6 -0
  174. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.d.ts +1 -1
  175. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.js +74 -0
  176. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/index.js +2 -0
  177. package/dist/src/modules/fantasy/view/ErrorBoundary.d.ts +13 -0
  178. package/dist/src/modules/fantasy/view/FantasyItemView.d.ts +6 -5
  179. package/dist/src/modules/fantasy/view/FantasyItemView.js +74 -0
  180. package/dist/src/modules/fantasy/view/FantasyView.d.ts +3 -3
  181. package/dist/src/modules/fantasy/view/FantasyView.js +133 -0
  182. package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.d.ts +1 -1
  183. package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.js +95 -0
  184. package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.d.ts +53 -7
  185. package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.js +13 -0
  186. package/dist/src/modules/fantasy/view/InactiveLeague/index.js +2 -0
  187. package/dist/src/modules/fantasy/view/LoginView/LoginView.d.ts +53 -7
  188. package/dist/src/modules/fantasy/view/LoginView/LoginView.js +27 -0
  189. package/dist/src/modules/fantasy/view/LoginView/index.js +2 -0
  190. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.d.ts +53 -7
  191. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.js +25 -0
  192. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/index.js +2 -0
  193. package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.d.ts +1 -1
  194. package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.js +9 -0
  195. package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.d.ts +53 -7
  196. package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.js +118 -0
  197. package/dist/src/modules/fantasy/view/MatchupPair/index.js +2 -0
  198. package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.d.ts +1 -1
  199. package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.js +9 -0
  200. package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.d.ts +53 -7
  201. package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.js +108 -0
  202. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.d.ts +53 -7
  203. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.js +18 -0
  204. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/index.js +2 -0
  205. package/dist/src/modules/fantasy/view/MatchupSingle/index.js +2 -0
  206. package/dist/src/modules/fantasy/view/PromoView/PromoView.d.ts +53 -7
  207. package/dist/src/modules/fantasy/view/PromoView/PromoView.js +12 -0
  208. package/dist/src/modules/fantasy/view/PromoView/index.js +2 -0
  209. package/dist/src/modules/fantasy/view/index.js +2 -0
  210. package/dist/src/modules/fantasy/view-model/FantasyViewModel.FantasyPolling.js +132 -0
  211. package/dist/src/modules/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.js +141 -0
  212. package/dist/src/modules/fantasy/view-model/FantasyViewModel.js +534 -0
  213. package/dist/src/modules/key-plays/constants.js +292 -0
  214. package/dist/src/modules/key-plays/interfaces/IKeyPlays.js +14 -0
  215. package/dist/src/modules/key-plays/interfaces/IKeyPlaysResponse.js +1 -0
  216. package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.d.ts +1 -1
  217. package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.js +16 -0
  218. package/dist/src/modules/key-plays/view/KeyPlayCardView.d.ts +7 -6
  219. package/dist/src/modules/key-plays/view/KeyPlayCardView.js +139 -0
  220. package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.d.ts +1 -1
  221. package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.js +65 -0
  222. package/dist/src/modules/key-plays/view/KeyPlaysView.d.ts +3 -3
  223. package/dist/src/modules/key-plays/view/KeyPlaysView.js +151 -0
  224. package/dist/src/modules/key-plays/view-model/KeyPlaysViewModel.js +247 -0
  225. package/dist/src/modules/shop/mocks.js +390 -0
  226. package/dist/src/modules/shop/types.js +7 -0
  227. package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.d.ts +1 -2
  228. package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.js +56 -0
  229. package/dist/src/modules/shop/view/ProductDetailView/index.js +2 -0
  230. package/dist/src/modules/shop/view/ShopView.d.ts +3 -3
  231. package/dist/src/modules/shop/view/ShopView.js +182 -0
  232. package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.d.ts +54 -8
  233. package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.js +23 -0
  234. package/dist/src/modules/shop/view/components/BrowseCard/index.js +2 -0
  235. package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.d.ts +53 -7
  236. package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.js +26 -0
  237. package/dist/src/modules/shop/view/components/ProductSummaryCard/index.js +1 -0
  238. package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.d.ts +1 -2
  239. package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.js +19 -0
  240. package/dist/src/modules/shop/view/components/ShopPromoView/index.js +1 -0
  241. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.d.ts +6 -4
  242. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.js +61 -0
  243. package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.d.ts +18 -0
  244. package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.js +22 -0
  245. package/dist/src/modules/shop/view/components/ShopSection/index.js +1 -0
  246. package/dist/src/modules/shop/view/index.js +2 -0
  247. package/dist/src/modules/shop/view-model/ShopViewModel.ShopPolling.js +111 -0
  248. package/dist/src/modules/shop/view-model/ShopViewModel.js +353 -0
  249. package/dist/src/modules/stats/interfaces/IStats.js +1 -0
  250. package/dist/src/modules/stats/mocks.js +746 -0
  251. package/dist/src/modules/stats/utils/driveSummaryUtils.js +48 -0
  252. package/dist/src/modules/stats/utils/renderTeamStatistic.d.ts +1 -2
  253. package/dist/src/modules/stats/utils/renderTeamStatistic.js +16 -0
  254. package/dist/src/modules/stats/utils.js +62 -0
  255. package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.d.ts +2 -2
  256. package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.js +98 -0
  257. package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.d.ts +1 -2
  258. package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.js +27 -0
  259. package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.d.ts +1 -1
  260. package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.js +89 -0
  261. package/dist/src/modules/stats/view/ActiveAthletes/index.js +2 -0
  262. package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.d.ts +53 -7
  263. package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.js +70 -0
  264. package/dist/src/modules/stats/view/DriveSummary/DriveSummary.d.ts +1 -1
  265. package/dist/src/modules/stats/view/DriveSummary/DriveSummary.js +87 -0
  266. package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.d.ts +1 -1
  267. package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.js +129 -0
  268. package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.d.ts +1 -2
  269. package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.js +26 -0
  270. package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.d.ts +1 -2
  271. package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.js +24 -0
  272. package/dist/src/modules/stats/view/DriveSummary/index.js +2 -0
  273. package/dist/src/modules/stats/view/GameLeaders/GameLeaders.d.ts +5 -4
  274. package/dist/src/modules/stats/view/GameLeaders/GameLeaders.js +48 -0
  275. package/dist/src/modules/stats/view/GameLeaders/index.js +2 -0
  276. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.d.ts +2 -2
  277. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.js +55 -0
  278. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/index.js +1 -0
  279. package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.d.ts +53 -7
  280. package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.js +60 -0
  281. package/dist/src/modules/stats/view/MatchPredictor/index.js +2 -0
  282. package/dist/src/modules/stats/view/Penalties/Penalties.d.ts +1 -2
  283. package/dist/src/modules/stats/view/Penalties/Penalties.js +6 -0
  284. package/dist/src/modules/stats/view/Penalties/index.js +2 -0
  285. package/dist/src/modules/stats/view/RecentGames/RecentGames.d.ts +53 -7
  286. package/dist/src/modules/stats/view/RecentGames/RecentGames.js +23 -0
  287. package/dist/src/modules/stats/view/RecentGames/index.js +2 -0
  288. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.d.ts +1 -1
  289. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.js +121 -0
  290. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.js +2 -0
  291. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.d.ts +53 -7
  292. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.js +62 -0
  293. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/index.js +2 -0
  294. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.d.ts +1 -2
  295. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.js +23 -0
  296. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/index.js +2 -0
  297. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.d.ts +2 -2
  298. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.js +106 -0
  299. package/dist/src/modules/stats/view/ScoringSummary/index.js +2 -0
  300. package/dist/src/modules/stats/view/StatsItemView.d.ts +6 -5
  301. package/dist/src/modules/stats/view/StatsItemView.js +92 -0
  302. package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.d.ts +53 -7
  303. package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.js +36 -0
  304. package/dist/src/modules/stats/view/StatsQRCode/index.js +1 -0
  305. package/dist/src/modules/stats/view/StatsView.d.ts +3 -3
  306. package/dist/src/modules/stats/view/StatsView.js +137 -0
  307. package/dist/src/modules/stats/view/TeamStats/TeamStatsView.d.ts +53 -7
  308. package/dist/src/modules/stats/view/TeamStats/TeamStatsView.js +43 -0
  309. package/dist/src/modules/stats/view/TeamStats/index.js +1 -0
  310. package/dist/src/modules/stats/view/Teams/StatsCarousel.d.ts +2 -2
  311. package/dist/src/modules/stats/view/Teams/StatsCarousel.js +83 -0
  312. package/dist/src/modules/stats/view/Teams/StatsProgressBar.d.ts +1 -2
  313. package/dist/src/modules/stats/view/Teams/StatsProgressBar.js +19 -0
  314. package/dist/src/modules/stats/view/Teams/Teams.d.ts +53 -7
  315. package/dist/src/modules/stats/view/Teams/Teams.js +43 -0
  316. package/dist/src/modules/stats/view/Teams/index.js +2 -0
  317. package/dist/src/modules/stats/view/WinProbability/WinProbability.d.ts +53 -7
  318. package/dist/src/modules/stats/view/WinProbability/WinProbability.js +28 -0
  319. package/dist/src/modules/stats/view/WinProbability/index.js +2 -0
  320. package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.d.ts +53 -7
  321. package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.js +89 -0
  322. package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.d.ts +1 -2
  323. package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.js +12 -0
  324. package/dist/src/modules/stats/view/components/AthletesStatistics/index.js +2 -0
  325. package/dist/src/modules/stats/view/index.js +2 -0
  326. package/dist/src/modules/stats/view-model/StatsViewModel.js +966 -0
  327. package/dist/src/sentry.js +31 -0
  328. package/dist/src/services/AnalyticsService/AnalyticsService.d.ts +12 -7
  329. package/dist/src/services/AnalyticsService/AnalyticsService.js +402 -0
  330. package/dist/src/services/AnalyticsService/types.js +1 -0
  331. package/dist/src/services/BetsService.js +122 -0
  332. package/dist/src/services/FantasyService.js +92 -0
  333. package/dist/src/services/GlobalService/GlobalService.d.ts +9 -0
  334. package/dist/src/services/GlobalService/PageService.d.ts +9 -0
  335. package/dist/src/services/GlobalService/index.d.ts +2 -0
  336. package/dist/src/services/GlobalService/mocks.d.ts +2 -0
  337. package/dist/src/services/GlobalService/types.d.ts +11 -0
  338. package/dist/src/services/InsightsService/InsightsPayloadBuilder.d.ts +1 -2
  339. package/dist/src/services/InsightsService/InsightsPayloadBuilder.js +386 -0
  340. package/dist/src/services/InsightsService/InsightsService.js +74 -0
  341. package/dist/src/services/NetworkManager/NetworkManager.js +457 -0
  342. package/dist/src/services/NetworkManager/NetworkManagerFactory.js +101 -0
  343. package/dist/src/services/NetworkManager/errors.js +45 -0
  344. package/dist/src/services/NetworkManager/types.js +10 -0
  345. package/dist/src/services/PageService/PageService.d.ts +9 -0
  346. package/dist/src/services/PageService/PageService.js +39 -0
  347. package/dist/src/services/PageService/index.d.ts +2 -0
  348. package/dist/src/services/PageService/index.js +2 -0
  349. package/dist/src/services/PageService/mocks.d.ts +2 -0
  350. package/dist/src/services/PageService/mocks.js +104 -0
  351. package/dist/src/services/PageService/types.d.ts +76 -0
  352. package/dist/src/services/PageService/types.js +1 -0
  353. package/dist/src/services/ShopService.js +46 -0
  354. package/dist/src/services/StaticService/PageService.d.ts +9 -0
  355. package/dist/src/services/StaticService/StaticService.d.ts +3 -1
  356. package/dist/src/services/StaticService/StaticService.js +59 -0
  357. package/dist/src/services/StaticService/index.js +2 -0
  358. package/dist/src/services/StaticService/mocks.js +104 -0
  359. package/dist/src/services/StaticService/types.js +1 -0
  360. package/dist/src/services/StatsService.js +136 -0
  361. package/dist/src/services/ThemeManager/constants.js +47 -0
  362. package/dist/src/services/UserSettingsManager.js +155 -0
  363. package/dist/src/test-polyfills.js +15 -0
  364. package/dist/src/types/OverlayTypes.js +4 -0
  365. package/dist/src/view-models/MaestroEventViewModel.d.ts +0 -2
  366. package/dist/src/view-models/MaestroEventViewModel.js +280 -0
  367. package/dist/src/view-models/OverlayViewModel.js +222 -0
  368. package/dist/src/view-models/PanelManagerViewModel.js +212 -0
  369. package/dist/src/view-models/ViewModel.js +32 -0
  370. package/package.json +13 -9
@@ -0,0 +1,44 @@
1
+ import React from 'react';
2
+ import KeyPlaysIcon from './KeyPlaysIcon';
3
+ import PlayIcon from './PlayIcon';
4
+ import BetsIcon from './BetsIcon';
5
+ import StatsIcon from './StatsIcon';
6
+ import WarningIcon from './WarningIcon';
7
+ import ExpandIcon from './ExpandIcon';
8
+ import CollapseIcon from './CollapseIcon';
9
+ import TimesIcon from './TimesIcon';
10
+ import CheckmarkIcon from './CheckmarkIcon';
11
+ import FlameIcon from './FlameIcon';
12
+ import BetsWarningIcon from './BetsWarningIcon';
13
+ import MobilePhoneIcon from './MobilePhoneIcon';
14
+ import FantasyIcon from './FantasyIcon';
15
+ import ShopIcon from './ShopIcon';
16
+ const iconImports = {
17
+ keyPlays: KeyPlaysIcon,
18
+ play: PlayIcon,
19
+ bets: BetsIcon,
20
+ stats: StatsIcon,
21
+ warning: WarningIcon,
22
+ expand: ExpandIcon,
23
+ collapse: CollapseIcon,
24
+ times: TimesIcon,
25
+ checkmark: CheckmarkIcon,
26
+ flame: FlameIcon,
27
+ betsWarning: BetsWarningIcon,
28
+ mobilePhone: MobilePhoneIcon,
29
+ fantasy: FantasyIcon,
30
+ shop: ShopIcon,
31
+ };
32
+ // Skeleton component for loading state
33
+ const Skeleton = (props) => (React.createElement("div", { style: { width: props.width, height: props.height } }));
34
+ class Icon extends React.Component {
35
+ render() {
36
+ const { iconName, width, height } = this.props;
37
+ const IconComponent = iconImports[iconName];
38
+ if (!IconComponent) {
39
+ return React.createElement(Skeleton, { width: width, height: height });
40
+ }
41
+ return React.createElement(IconComponent, { iconName: iconName, width: width, height: height });
42
+ }
43
+ }
44
+ export default Icon;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { IconProps } from './Icon';
3
3
  declare class KeyPlaysIcon extends React.Component<IconProps, {}> {
4
- render(): React.JSX.Element;
4
+ render(): JSX.Element;
5
5
  }
6
6
  export default KeyPlaysIcon;
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ class KeyPlaysIcon extends React.Component {
3
+ render() {
4
+ return (React.createElement("svg", { width: this.props.width, height: this.props.height, viewBox: "0 0 30 32", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
5
+ React.createElement("path", { d: "M27.375 4.75H2.625V7H27.375V4.75Z", fill: "white" }),
6
+ React.createElement("path", { d: "M25.125 0.25H4.875V2.5H25.125V0.25Z", fill: "white" }),
7
+ React.createElement("path", { d: "M0.375 9.25V31.75H29.625V9.25H0.375ZM11.625 26.125V14.875L20.625 20.5L11.625 26.125Z", fill: "white" })));
8
+ }
9
+ }
10
+ export default KeyPlaysIcon;
@@ -2,6 +2,6 @@ import React from 'react';
2
2
  import { IconProps } from './Icon';
3
3
  declare class MobilePhoneIcon extends React.Component<IconProps> {
4
4
  constructor(props: IconProps);
5
- render(): React.JSX.Element;
5
+ render(): JSX.Element;
6
6
  }
7
7
  export default MobilePhoneIcon;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ class MobilePhoneIcon extends React.Component {
3
+ constructor(props) {
4
+ super(props);
5
+ }
6
+ render() {
7
+ return (React.createElement("svg", { width: this.props.width, height: this.props.height, viewBox: "0 0 32 32", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
8
+ React.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M9.33333 1.66663C8.04467 1.66663 7 2.7113 7 3.99996V28C7 29.2886 8.04467 30.3333 9.33333 30.3333H22.6667C23.9553 30.3333 25 29.2886 25 28V3.99996C25 2.7113 23.9553 1.66663 22.6667 1.66663H9.33333ZM9 7.66663V23H23V7.66663H9ZM18 26H14V27.3333H18V26Z", fill: "#6C6E6F" })));
9
+ }
10
+ }
11
+ export default MobilePhoneIcon;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { IconProps } from './Icon';
3
3
  declare class PlayIcon extends React.Component<IconProps, {}> {
4
- render(): React.JSX.Element;
4
+ render(): JSX.Element;
5
5
  }
6
6
  export default PlayIcon;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ class PlayIcon extends React.Component {
3
+ render() {
4
+ return (React.createElement("svg", { width: this.props.width, height: this.props.height, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
5
+ React.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M18.1891 8.29879C18.6116 8.5331 18.9367 8.80345 19.162 9.10985C19.3873 9.41624 19.5 9.71863 19.5 10.019C19.5 10.3194 19.396 10.6158 19.1837 10.9102C18.9713 11.2026 18.6463 11.4669 18.2108 11.7012L10.9111 15.6724L3.58975 19.6035C3.15207 19.8378 2.74256 19.9679 2.36122 19.994C1.98204 20.02 1.65703 19.9619 1.38836 19.8177C1.12185 19.6735 0.905177 19.4453 0.742673 19.1328C0.582335 18.8204 0.5 18.4419 0.5 17.9994V2.00062C0.5 1.55805 0.573669 1.17956 0.721006 0.867153C0.87051 0.554748 1.09152 0.326452 1.38836 0.182265C1.6852 0.0380777 2.02104 -0.0199976 2.39372 0.00603615C2.76639 0.0340725 3.16507 0.164241 3.58975 0.398545L10.9111 4.36769L18.1891 8.29879Z", fill: "white" })));
6
+ }
7
+ }
8
+ export default PlayIcon;
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import { IconProps } from './Icon';
3
3
  export default class ShopIcon extends React.Component<IconProps> {
4
- render(): React.JSX.Element;
4
+ render(): JSX.Element;
5
5
  }
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export default class ShopIcon extends React.Component {
3
+ render() {
4
+ return (React.createElement("svg", { width: this.props.width, height: this.props.height, viewBox: "0 0 36 36", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
5
+ React.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M12.3745 7.5V9.375H6.45201L4.99216 29.813C4.88362 31.3325 6.08709 32.625 7.61049 32.625H28.3886C29.912 32.625 31.1154 31.3325 31.0069 29.813L29.547 9.375H23.6245V7.5C23.6245 4.3934 21.1061 1.875 17.9995 1.875C14.8929 1.875 12.3745 4.3934 12.3745 7.5ZM17.9995 4.125C16.1356 4.125 14.6245 5.63604 14.6245 7.5V9.375H21.3745V7.5C21.3745 5.63604 19.8635 4.125 17.9995 4.125ZM12.3745 14.25V11.625H14.6245V14.25C14.6245 14.8713 14.1208 15.375 13.4995 15.375C12.8782 15.375 12.3745 14.8713 12.3745 14.25ZM21.3745 14.25V11.625H23.6245V14.25C23.6245 14.8713 23.1208 15.375 22.4995 15.375C21.8782 15.375 21.3745 14.8713 21.3745 14.25Z", fill: "white" })));
6
+ }
7
+ }
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { IconProps } from './Icon';
3
3
  declare class StatsIcon extends React.Component<IconProps, {}> {
4
- render(): React.JSX.Element;
4
+ render(): JSX.Element;
5
5
  }
6
6
  export default StatsIcon;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ class StatsIcon extends React.Component {
3
+ render() {
4
+ return (React.createElement("svg", { width: this.props.width, height: this.props.height, viewBox: "0 0 36 36", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
5
+ React.createElement("g", { clipPath: "url(#clip0_538_5831)" },
6
+ React.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M14.5925 1.7998V32.6941H10.4849V14.8588H3.671V32.6941H0.899902V34.7641H35.099V32.6941H32.3603V8.0125H25.514V32.6941H21.4397V1.7998H14.5925Z", fill: "#9DA0A6" })),
7
+ React.createElement("defs", null,
8
+ React.createElement("clipPath", { id: "clip0_538_5831" },
9
+ React.createElement("rect", { width: "36", height: "36", fill: "white" })))));
10
+ }
11
+ }
12
+ export default StatsIcon;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { IconProps } from './Icon';
3
- declare const TimesIcon: (props: IconProps) => React.JSX.Element;
2
+ declare const TimesIcon: (props: IconProps) => JSX.Element;
4
3
  export default TimesIcon;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ const TimesIcon = (props) => {
3
+ return (React.createElement("svg", { width: props.width, height: props.height, viewBox: "0 0 25 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
4
+ React.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M6.29999 3.73242L12.8 10.2324L19.3 3.73242L21.0678 5.50019L14.5678 12.0002L21.0678 18.5002L19.3 20.268L12.8 13.768L6.29999 20.268L4.53223 18.5002L11.0322 12.0002L4.53223 5.50019L6.29999 3.73242Z", fill: "#FF7F7F" })));
5
+ };
6
+ export default TimesIcon;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { IconProps } from './Icon';
3
3
  declare class WarningIcon extends React.Component<IconProps, {}> {
4
- render(): React.JSX.Element;
4
+ render(): JSX.Element;
5
5
  }
6
6
  export default WarningIcon;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ class WarningIcon extends React.Component {
3
+ render() {
4
+ return (React.createElement("svg", { width: this.props.width, height: this.props.height, viewBox: "0 0 22 20", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
5
+ React.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M11.0022 0.75L21.8012 19.4545H0.203125L11.0022 0.75ZM11.7522 13.5V7.5H10.2522V13.5H11.7522ZM11.8022 14.95H10.2022V16.55H11.8022V14.95Z", fill: "#F58B00" })));
6
+ }
7
+ }
8
+ export default WarningIcon;
@@ -0,0 +1,2 @@
1
+ import Icon from './Icon';
2
+ export default Icon;
@@ -6,6 +6,6 @@ declare class App extends React.Component<{
6
6
  get colors(): import("@/models/ITheme").IThemeColors;
7
7
  componentDidMount(): void;
8
8
  componentWillUnmount(): void;
9
- render(): React.JSX.Element;
9
+ render(): JSX.Element;
10
10
  }
11
11
  export default App;
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import { DARK_THEME } from '@/services/ThemeManager/constants';
3
+ import './App.styles.css';
4
+ import SDK from '@/index';
5
+ const FONT_FAMILY_MAP = {
6
+ body: 'BentonSans',
7
+ headline: 'BentonSansBold',
8
+ title: 'BentonSansMedium',
9
+ };
10
+ class App extends React.Component {
11
+ get colors() {
12
+ const config = SDK.getPageConfig();
13
+ return config?.theme?.colors || DARK_THEME.colors;
14
+ }
15
+ componentDidMount() {
16
+ Object.keys(this.colors).forEach((key) => {
17
+ document.documentElement.style.setProperty(`--sdk-${key}`, this.colors[key]);
18
+ });
19
+ Object.keys(FONT_FAMILY_MAP).forEach((key) => {
20
+ document.documentElement.style.setProperty(`--sdk-font-${key}`, FONT_FAMILY_MAP[key]);
21
+ });
22
+ }
23
+ componentWillUnmount() {
24
+ Object.keys(this.colors).forEach((key) => {
25
+ document.documentElement.style.removeProperty(`--sdk-${key}`);
26
+ });
27
+ Object.keys(FONT_FAMILY_MAP).forEach((key) => {
28
+ document.documentElement.style.removeProperty(`--sdk-font-${key}`);
29
+ });
30
+ }
31
+ render() {
32
+ return React.createElement("div", { className: "sdk-wrapper" }, this.props.children);
33
+ }
34
+ }
35
+ export default App;
@@ -0,0 +1,2 @@
1
+ import App from './App';
2
+ export default App;
@@ -0,0 +1,58 @@
1
+ import React from 'react';
2
+ const OverlayContainer = React.createClass({
3
+ propTypes: {
4
+ viewModels: React.PropTypes.object,
5
+ },
6
+ getInitialState() {
7
+ return {
8
+ isVisible: false,
9
+ currentOverlay: null,
10
+ };
11
+ },
12
+ componentDidMount() {
13
+ if (!this.props.viewModels?.overlayViewModel)
14
+ return;
15
+ const overlayVM = this.props.viewModels.overlayViewModel;
16
+ // Subscribe to overlay visibility changes
17
+ this.unsubscribeVisible = overlayVM.isVisible.subscribe((visible) => {
18
+ this.setState({ isVisible: visible });
19
+ });
20
+ // Subscribe to current overlay changes
21
+ this.unsubscribeOverlay = overlayVM.currentOverlay.subscribe((overlay) => {
22
+ this.setState({ currentOverlay: overlay });
23
+ });
24
+ },
25
+ componentWillUnmount() {
26
+ if (this.unsubscribeVisible)
27
+ this.unsubscribeVisible();
28
+ if (this.unsubscribeOverlay)
29
+ this.unsubscribeOverlay();
30
+ },
31
+ render() {
32
+ if (!this.state.isVisible || !this.state.currentOverlay) {
33
+ return null;
34
+ }
35
+ const overlay = this.state.currentOverlay;
36
+ const Overlay = require('../molecules/Overlay').default;
37
+ return React.createElement(Overlay, {
38
+ key: `overlay-${overlay.type}-${Date.now()}`,
39
+ id: 'sdk-managed-rive-overlay',
40
+ overlayType: overlay.type,
41
+ position: overlay.position,
42
+ winningBet: overlay.winningBet,
43
+ fantasy: overlay.fantasy,
44
+ onOverlayViewed: (overlayType) => {
45
+ if (this.props.viewModels?.overlayViewModel) {
46
+ this.props.viewModels.overlayViewModel.handleOverlayViewed(overlayType);
47
+ }
48
+ },
49
+ onOverlayAction: (overlayType) => {
50
+ if (this.props.viewModels?.overlayViewModel) {
51
+ this.props.viewModels.overlayViewModel.handleOverlayAction(overlayType);
52
+ this.props.viewModels.overlayViewModel.hideOverlay();
53
+ }
54
+ },
55
+ });
56
+ },
57
+ });
58
+ export default OverlayContainer;
@@ -16,6 +16,6 @@ declare class PanelManager extends React.Component<{}, PanelManagerState> {
16
16
  componentDidMount(): void;
17
17
  componentWillUnmount(): void;
18
18
  goToPanel(panel: MaestroPanelType): () => void;
19
- render(): React.JSX.Element;
19
+ render(): JSX.Element;
20
20
  }
21
21
  export default PanelManager;
@@ -0,0 +1,86 @@
1
+ import React from 'react';
2
+ import './PanelManager.styles.css';
3
+ import PanelNavigation from '@/components/organisms/PanelNavigation';
4
+ import KeyPlaysView from '@/modules/key-plays/view/KeyPlaysView';
5
+ import BetsView from '@/modules/bets/view/BetsView';
6
+ import StatsView from '@/modules/stats/view';
7
+ import SDK from '@/index';
8
+ import FantasyView from '@/modules/fantasy/view';
9
+ import ShopView from '@/modules/shop/view';
10
+ const PANELS_MAP = {
11
+ keyPlays: React.createElement(KeyPlaysView, null),
12
+ bets: React.createElement(BetsView, null),
13
+ stats: React.createElement(StatsView, null),
14
+ fantasy: React.createElement(FantasyView, null),
15
+ shop: React.createElement(ShopView, null),
16
+ };
17
+ class PanelManager extends React.Component {
18
+ constructor(props) {
19
+ super(props);
20
+ Object.defineProperty(this, "unsubscribe", {
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true,
24
+ value: null
25
+ });
26
+ Object.defineProperty(this, "panelsUnsubscribe", {
27
+ enumerable: true,
28
+ configurable: true,
29
+ writable: true,
30
+ value: null
31
+ });
32
+ Object.defineProperty(this, "viewModel", {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value: void 0
37
+ });
38
+ this.viewModel = SDK.getMaestroEventViewModel().panelManagerViewModel;
39
+ this.state = {
40
+ activePanel: this.viewModel.currentPanel,
41
+ visiblePanels: this.viewModel.panelsObservable.value,
42
+ };
43
+ }
44
+ componentDidMount() {
45
+ // Subscribe to changes in the current panel
46
+ this.unsubscribe = this.viewModel.currentPanelObservable.subscribe(() => {
47
+ this.setState({ activePanel: this.viewModel.currentPanel });
48
+ });
49
+ // Subscribe to changes in the visible panels
50
+ this.panelsUnsubscribe = this.viewModel.panelsObservable.subscribe((panels) => {
51
+ this.setState({ visiblePanels: panels });
52
+ });
53
+ }
54
+ componentWillUnmount() {
55
+ if (this.unsubscribe) {
56
+ this.unsubscribe();
57
+ this.unsubscribe = null;
58
+ }
59
+ if (this.panelsUnsubscribe) {
60
+ this.panelsUnsubscribe();
61
+ this.panelsUnsubscribe = null;
62
+ }
63
+ }
64
+ goToPanel(panel) {
65
+ return () => {
66
+ if (this.viewModel.currentPanel === panel) {
67
+ return;
68
+ }
69
+ this.viewModel.currentPanel = panel;
70
+ };
71
+ }
72
+ render() {
73
+ const { activePanel, visiblePanels } = this.state;
74
+ // Create panel items only for visible panels
75
+ const PANEL_ITEMS = visiblePanels.map((panel) => ({
76
+ iconName: panel.type,
77
+ onEnter: this.goToPanel(panel.type),
78
+ title: panel.title,
79
+ active: activePanel === panel.type,
80
+ }));
81
+ return (React.createElement("div", { className: "sdk--panel-manager" },
82
+ React.createElement(PanelNavigation, { items: PANEL_ITEMS }),
83
+ activePanel && (React.createElement("div", { className: "sdk--panel-wrapper" }, PANELS_MAP[activePanel]))));
84
+ }
85
+ }
86
+ export default PanelManager;
@@ -0,0 +1,2 @@
1
+ import PanelManager from './PanelManager';
2
+ export default PanelManager;
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import { DEFAULT_SCROLLABLE_CONTAINER_CONTEXT, SCROLLABLE_CONTEXT_TYPE, } from './ScrollableContainer';
3
+ /**
4
+ * Component to be used as a child of `ScrollableContainer`.
5
+ * Wraps the focusable item and registers it in the context
6
+ */
7
+ class FocusableItem extends React.Component {
8
+ constructor() {
9
+ super(...arguments);
10
+ Object.defineProperty(this, "ref", {
11
+ enumerable: true,
12
+ configurable: true,
13
+ writable: true,
14
+ value: null
15
+ });
16
+ Object.defineProperty(this, "context", {
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true,
20
+ value: DEFAULT_SCROLLABLE_CONTAINER_CONTEXT
21
+ });
22
+ }
23
+ componentDidMount() {
24
+ if (this.ref && this.context.setRef) {
25
+ this.context.setRef(this.ref);
26
+ }
27
+ }
28
+ render() {
29
+ return (React.createElement("div", { className: "focusable-item", ref: (e) => (this.ref = e) }, this.props.children));
30
+ }
31
+ }
32
+ Object.defineProperty(FocusableItem, "contextTypes", {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value: SCROLLABLE_CONTEXT_TYPE
37
+ });
38
+ export default FocusableItem;
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import PropTypes from 'prop-types';
2
3
  import './ScrollableContainer.styles.css';
3
4
  import { Layout } from '@/external/spatial-navigation/utils';
4
5
  export interface ScrollableContainerContextType {
@@ -55,9 +56,9 @@ declare class ScrollableContainer extends React.Component<ScrollableContainerPro
55
56
  };
56
57
  setRef: (ref: HTMLElement) => void;
57
58
  static childContextTypes: {
58
- refsMap: React.Requireable<any>;
59
- setRef: React.Requireable<any>;
60
- scrollToFocusedElement: React.Requireable<any>;
59
+ refsMap: PropTypes.Requireable<(HTMLElement | null | undefined)[]>;
60
+ setRef: PropTypes.Requireable<(...args: any[]) => any>;
61
+ scrollToFocusedElement: PropTypes.Requireable<(...args: any[]) => any>;
61
62
  };
62
63
  getOrderedRefs: () => HTMLElement[];
63
64
  /**
@@ -66,12 +67,12 @@ declare class ScrollableContainer extends React.Component<ScrollableContainerPro
66
67
  private scrollToFocusedElement;
67
68
  getChildContext(): ScrollableContainerContextType;
68
69
  componentWillUnmount(): void;
69
- render(): React.JSX.Element;
70
+ render(): JSX.Element;
70
71
  }
71
72
  export declare const DEFAULT_SCROLLABLE_CONTAINER_CONTEXT: ScrollableContainerContextType;
72
73
  export declare const SCROLLABLE_CONTEXT_TYPE: {
73
- refsMap: React.Requireable<any>;
74
- setRef: React.Requireable<any>;
75
- scrollToFocusedElement: React.Requireable<any>;
74
+ refsMap: PropTypes.Requireable<(HTMLElement | null | undefined)[]>;
75
+ setRef: PropTypes.Requireable<(...args: any[]) => any>;
76
+ scrollToFocusedElement: PropTypes.Requireable<(...args: any[]) => any>;
76
77
  };
77
78
  export default ScrollableContainer;
@@ -0,0 +1,169 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import './ScrollableContainer.styles.css';
4
+ const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
5
+ /**
6
+ * ScrollableContainer component provides a context for focusable items
7
+ * that allows them to register themselves and handle scrolling
8
+ * when they become focused.
9
+ * @example
10
+ * ```jsx
11
+ * <ScrollableContainer scrollableContainerRef={scrollableContainerRef}>
12
+ * <FocusableItem>Item 1</FocusableItem>
13
+ * <FocusableItem>Item 2</FocusableItem>
14
+ * <FocusableItem>Item 3</FocusableItem>
15
+ * </ScrollableContainer>
16
+ * ```
17
+ */
18
+ class ScrollableContainer extends React.Component {
19
+ constructor() {
20
+ super(...arguments);
21
+ Object.defineProperty(this, "refsMap", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: []
26
+ });
27
+ Object.defineProperty(this, "hash", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: ''
32
+ });
33
+ Object.defineProperty(this, "lastHash", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: ''
38
+ });
39
+ Object.defineProperty(this, "state", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: {
44
+ scrolled: false,
45
+ }
46
+ });
47
+ Object.defineProperty(this, "setRef", {
48
+ enumerable: true,
49
+ configurable: true,
50
+ writable: true,
51
+ value: (ref) => {
52
+ this.refsMap.push(ref);
53
+ this.hash = Math.random().toString(36).substring(2, 15);
54
+ }
55
+ });
56
+ Object.defineProperty(this, "getOrderedRefs", {
57
+ enumerable: true,
58
+ configurable: true,
59
+ writable: true,
60
+ value: () => {
61
+ if (this.hash === this.lastHash) {
62
+ return this.refsMap;
63
+ }
64
+ this.refsMap = this.refsMap.sort((a, b) => {
65
+ if (!this.props.scrollableContainerRef)
66
+ return 0;
67
+ const containerRect = this.props.scrollableContainerRef.getBoundingClientRect();
68
+ const aRect = a ? a.getBoundingClientRect() : { top: 0, bottom: 0 };
69
+ const bRect = b ? b.getBoundingClientRect() : { top: 0, bottom: 0 };
70
+ // Calculate the actual distance from container top (positive means below, negative means above)
71
+ const aDistance = aRect.top - containerRect.top;
72
+ const bDistance = bRect.top - containerRect.top;
73
+ return aDistance - bDistance;
74
+ });
75
+ this.lastHash = this.hash;
76
+ return this.refsMap;
77
+ }
78
+ });
79
+ /**
80
+ * @description - Scrolls the container to the focused element if necessary
81
+ */
82
+ Object.defineProperty(this, "scrollToFocusedElement", {
83
+ enumerable: true,
84
+ configurable: true,
85
+ writable: true,
86
+ value: async (layout, options) => {
87
+ if (!this.props.scrollableContainerRef || !layout.node)
88
+ return;
89
+ const offsetTop = options?.offsetTop || 0;
90
+ const refs = this.getOrderedRefs();
91
+ // Wait for the next frame to ensure the layout is updated
92
+ if (process.env.NODE_ENV !== 'test') {
93
+ await wait(0);
94
+ }
95
+ const containerRect = this.props.scrollableContainerRef.getBoundingClientRect();
96
+ const nodeRect = layout.node.getBoundingClientRect();
97
+ let index = -1;
98
+ for (let i = refs.length - 1; i >= 0; i--) {
99
+ if (refs[i].contains(layout.node)) {
100
+ index = i;
101
+ break;
102
+ }
103
+ }
104
+ if (index === -1) {
105
+ console.warn('Element not found in refsMap to focus to. Register the element wrapping it with <FocusableItem />');
106
+ return;
107
+ }
108
+ let hasOutside = false;
109
+ refs.slice(index).forEach((el) => {
110
+ const rect = el.getBoundingClientRect();
111
+ if (rect.bottom > containerRect.bottom || rect.top < containerRect.top) {
112
+ hasOutside = true;
113
+ }
114
+ });
115
+ if (!hasOutside)
116
+ return;
117
+ const target = index === 0
118
+ ? 0
119
+ : this.props.scrollableContainerRef.scrollTop +
120
+ (nodeRect.top -
121
+ containerRect.top -
122
+ (this.props.containerTopOffset || 0) -
123
+ offsetTop);
124
+ this.props.scrollableContainerRef.scrollTop = target;
125
+ const newScrolled = target > 0;
126
+ if (this.state.scrolled !== newScrolled) {
127
+ this.setState({ scrolled: newScrolled });
128
+ }
129
+ }
130
+ });
131
+ }
132
+ getChildContext() {
133
+ return {
134
+ refsMap: this.refsMap,
135
+ setRef: this.setRef,
136
+ scrollToFocusedElement: this.scrollToFocusedElement,
137
+ };
138
+ }
139
+ componentWillUnmount() {
140
+ this.refsMap = [];
141
+ this.hash = '';
142
+ this.lastHash = '';
143
+ }
144
+ render() {
145
+ const { scrollableContainerRef: _, containerTopOffset: __, ...rest } = this.props;
146
+ return (React.createElement("div", { className: "scrollable-container", "data-scrolled": this.state.scrolled, ...rest }, this.props.children));
147
+ }
148
+ }
149
+ Object.defineProperty(ScrollableContainer, "childContextTypes", {
150
+ enumerable: true,
151
+ configurable: true,
152
+ writable: true,
153
+ value: {
154
+ refsMap: PropTypes.arrayOf(PropTypes.instanceOf(HTMLElement)),
155
+ setRef: PropTypes.func,
156
+ scrollToFocusedElement: PropTypes.func,
157
+ }
158
+ });
159
+ export const DEFAULT_SCROLLABLE_CONTAINER_CONTEXT = {
160
+ setRef: (_) => { },
161
+ scrollToFocusedElement: () => { },
162
+ refsMap: [],
163
+ };
164
+ export const SCROLLABLE_CONTEXT_TYPE = {
165
+ refsMap: PropTypes.arrayOf(PropTypes.instanceOf(HTMLElement)),
166
+ setRef: PropTypes.func,
167
+ scrollToFocusedElement: PropTypes.func,
168
+ };
169
+ export default ScrollableContainer;
@@ -0,0 +1,2 @@
1
+ import ScrollableContainer from './ScrollableContainer';
2
+ export default ScrollableContainer;