@maestro_io/maestro-web-sdk 4.0.2 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (596) hide show
  1. package/dist/1.maestro-web-sdk.esm.js +1 -1
  2. package/dist/1.maestro-web-sdk.esm.js.map +1 -1
  3. package/dist/10.maestro-web-sdk.esm.js +1 -1
  4. package/dist/10.maestro-web-sdk.esm.js.map +1 -1
  5. package/dist/11.maestro-web-sdk.esm.js +1 -1
  6. package/dist/11.maestro-web-sdk.esm.js.map +1 -1
  7. package/dist/12.maestro-web-sdk.esm.js +1 -1
  8. package/dist/12.maestro-web-sdk.esm.js.map +1 -1
  9. package/dist/13.maestro-web-sdk.esm.js +1 -1
  10. package/dist/13.maestro-web-sdk.esm.js.map +1 -1
  11. package/dist/14.maestro-web-sdk.esm.js +1 -1
  12. package/dist/14.maestro-web-sdk.esm.js.map +1 -1
  13. package/dist/15.maestro-web-sdk.esm.js +1 -1
  14. package/dist/15.maestro-web-sdk.esm.js.map +1 -1
  15. package/dist/16.maestro-web-sdk.esm.js +1 -1
  16. package/dist/16.maestro-web-sdk.esm.js.map +1 -1
  17. package/dist/17.maestro-web-sdk.esm.js +1 -1
  18. package/dist/17.maestro-web-sdk.esm.js.map +1 -1
  19. package/dist/18.maestro-web-sdk.esm.js +1 -1
  20. package/dist/18.maestro-web-sdk.esm.js.map +1 -1
  21. package/dist/19.maestro-web-sdk.esm.js +1 -1
  22. package/dist/19.maestro-web-sdk.esm.js.map +1 -1
  23. package/dist/2.maestro-web-sdk.esm.js +1 -1
  24. package/dist/2.maestro-web-sdk.esm.js.map +1 -1
  25. package/dist/20.maestro-web-sdk.esm.js +1 -1
  26. package/dist/20.maestro-web-sdk.esm.js.map +1 -1
  27. package/dist/21.maestro-web-sdk.esm.js +1 -1
  28. package/dist/21.maestro-web-sdk.esm.js.map +1 -1
  29. package/dist/22.maestro-web-sdk.esm.js +1 -1
  30. package/dist/22.maestro-web-sdk.esm.js.map +1 -1
  31. package/dist/23.maestro-web-sdk.esm.js +1 -1
  32. package/dist/23.maestro-web-sdk.esm.js.map +1 -1
  33. package/dist/24.maestro-web-sdk.esm.js +1 -1
  34. package/dist/24.maestro-web-sdk.esm.js.map +1 -1
  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 +1 -1
  46. package/dist/3.maestro-web-sdk.esm.js.map +1 -1
  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 +1 -1
  66. package/dist/4.maestro-web-sdk.esm.js.map +1 -1
  67. package/dist/5.maestro-web-sdk.esm.js +1 -1
  68. package/dist/5.maestro-web-sdk.esm.js.map +1 -1
  69. package/dist/6.maestro-web-sdk.esm.js +1 -1
  70. package/dist/6.maestro-web-sdk.esm.js.map +1 -1
  71. package/dist/7.maestro-web-sdk.esm.js +1 -1
  72. package/dist/7.maestro-web-sdk.esm.js.map +1 -1
  73. package/dist/8.maestro-web-sdk.esm.js +1 -1
  74. package/dist/8.maestro-web-sdk.esm.js.map +1 -1
  75. package/dist/9.maestro-web-sdk.esm.js +1 -1
  76. package/dist/9.maestro-web-sdk.esm.js.map +1 -1
  77. package/dist/index.d.ts +233 -1144
  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 +7 -5
  83. package/dist/src/components/atoms/Rive/index.d.ts +4 -2
  84. package/dist/src/components/atoms/SvgIcon/BuilderIcon.d.ts +3 -0
  85. package/dist/src/components/atoms/SvgIcon/BuilderIcon.js +8 -0
  86. package/dist/src/components/atoms/SvgIcon/FoxKeyPlaysIcon.d.ts +3 -0
  87. package/dist/src/components/atoms/SvgIcon/FoxKeyPlaysIcon.js +7 -0
  88. package/dist/src/components/atoms/SvgIcon/FoxMultiViewIcon.d.ts +3 -0
  89. package/dist/src/components/atoms/SvgIcon/FoxMultiViewIcon.js +10 -0
  90. package/dist/src/components/atoms/SvgIcon/FoxStatsIcon.d.ts +3 -0
  91. package/dist/src/components/atoms/SvgIcon/FoxStatsIcon.js +7 -0
  92. package/dist/src/components/atoms/SvgIcon/Icon.d.ts +1 -25
  93. package/dist/src/components/atoms/SvgIcon/Icon.js +46 -22
  94. package/dist/src/components/core/PanelManager/PanelManager.js +28 -12
  95. package/dist/src/components/core/ScrollableContainer/FocusableItem.d.ts +7 -2
  96. package/dist/src/components/core/ScrollableContainer/FocusableItem.js +19 -33
  97. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.d.ts +10 -34
  98. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.js +89 -147
  99. package/dist/src/components/core/ScrollableContainer/index.d.ts +4 -0
  100. package/dist/src/components/core/ScrollableContainer/index.js +3 -0
  101. package/dist/src/components/core/ScrollableContainer/useScrollableContainer.d.ts +14 -0
  102. package/dist/src/components/core/ScrollableContainer/useScrollableContainer.js +22 -0
  103. package/dist/src/components/molecules/ActionButton/ActionButton.d.ts +4 -2
  104. package/dist/src/components/molecules/ActionButton/ActionButton.js +6 -1
  105. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.js +1 -1
  106. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.d.ts +4 -2
  107. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +1 -1
  108. package/dist/src/components/molecules/TabLoadError/TabLoadError.d.ts +4 -2
  109. package/dist/src/components/organisms/SegmentController/SegmentController.d.ts +1 -19
  110. package/dist/src/components/organisms/SegmentController/SegmentController.js +31 -72
  111. package/dist/src/development/MaestroEventDelegate.js +1 -1
  112. package/dist/src/development/development.js +4 -1
  113. package/dist/src/external/ReactRenderer.js +5 -4
  114. package/dist/src/external/spatial-navigation/spatialNavigation.d.ts +13 -8
  115. package/dist/src/external/spatial-navigation/spatialNavigation.js +73 -5
  116. package/dist/src/external/spatial-navigation/utils.d.ts +2 -0
  117. package/dist/src/external/spatial-navigation/withFocusable.d.ts +10 -2
  118. package/dist/src/external/spatial-navigation/withFocusable.js +12 -3
  119. package/dist/src/hooks/useMaxHeightToBottom.d.ts +11 -0
  120. package/dist/src/hooks/useMaxHeightToBottom.js +48 -0
  121. package/dist/src/index.d.ts +10 -11
  122. package/dist/src/index.js +51 -19
  123. package/dist/src/interfaces/IMaestroEvent.d.ts +1 -19
  124. package/dist/src/interfaces/IMaestroEvent.js +0 -17
  125. package/dist/src/interfaces/IMaestroManager.d.ts +39 -3
  126. package/dist/src/models/IPanel.d.ts +10 -6
  127. package/dist/src/models/IPanel.js +10 -38
  128. package/dist/src/modules/espn/bets/interfaces/IBetsViewModel.d.ts +5 -0
  129. package/dist/src/{services → modules/espn/bets/services}/BetsService.d.ts +3 -3
  130. package/dist/src/{services → modules/espn/bets/services}/BetsService.js +4 -3
  131. package/dist/src/modules/{bets → espn/bets}/view/BetsView.d.ts +4 -2
  132. package/dist/src/modules/{bets → espn/bets}/view/BetsView.js +38 -12
  133. package/dist/src/modules/{bets → espn/bets}/view/HotProps/HotPropsView.d.ts +21 -18
  134. package/dist/src/modules/{bets → espn/bets}/view/HotProps/HotPropsView.js +17 -34
  135. package/dist/src/modules/espn/bets/view/SixPack/SixPackView.d.ts +9 -0
  136. package/dist/src/modules/{bets → espn/bets}/view/SixPack/SixPackView.js +19 -52
  137. package/dist/src/modules/{bets → espn/bets}/view/UserBets/BetsCard/BetsCard.d.ts +22 -19
  138. package/dist/src/modules/{bets → espn/bets}/view/UserBets/BetsCard/BetsCard.js +16 -25
  139. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCardEvent.d.ts +16 -0
  140. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCardEvent.js +8 -0
  141. package/dist/src/modules/{bets → espn/bets}/view/UserBets/BetsCard/BetsCardFooter.d.ts +1 -1
  142. package/dist/src/modules/{bets → espn/bets}/view/UserBets/BetsCard/BetsCardFooter.js +1 -1
  143. package/dist/src/modules/{bets → espn/bets}/view/UserBets/Boost/Boost.d.ts +1 -1
  144. package/dist/src/modules/{bets → espn/bets}/view/UserBets/Parlay/Parlay.d.ts +1 -1
  145. package/dist/src/modules/{bets → espn/bets}/view/UserBets/Straight/Straight.d.ts +1 -1
  146. package/dist/src/modules/{bets → espn/bets}/view/UserBets/Teaser/Teaser.d.ts +1 -1
  147. package/dist/src/modules/espn/bets/view/components/Bet/Bet.d.ts +10 -0
  148. package/dist/src/modules/{bets → espn/bets}/view/components/Bet/Bet.js +12 -3
  149. package/dist/src/modules/{bets → espn/bets}/view/components/BetsCard/BetsCard.d.ts +2 -2
  150. package/dist/src/modules/espn/bets/view/components/BetsCard/BetsCard.js +24 -0
  151. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.d.ts +7 -0
  152. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +31 -0
  153. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/index.d.ts +1 -0
  154. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/index.js +1 -0
  155. package/dist/src/modules/espn/bets/view/components/PromoCodeBanner/PromoCodeBanner.d.ts +5 -0
  156. package/dist/src/modules/espn/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +45 -0
  157. package/dist/src/modules/{bets → espn/bets}/view-model/BetsViewModel.d.ts +4 -5
  158. package/dist/src/modules/{bets → espn/bets}/view-model/BetsViewModel.js +6 -33
  159. package/dist/src/modules/espn/fantasy/components/LeagueCard/LeagueCard.d.ts +104 -0
  160. package/dist/src/modules/espn/fantasy/components/TopPlayerCard/TopPlayerCard.d.ts +101 -0
  161. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.d.ts +103 -0
  162. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.js +94 -0
  163. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/index.d.ts +1 -0
  164. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/index.js +1 -0
  165. package/dist/src/{services → modules/espn/fantasy/services}/FantasyService.d.ts +27 -4
  166. package/dist/src/modules/espn/fantasy/services/FantasyService.js +124 -0
  167. package/dist/src/modules/{fantasy → espn/fantasy}/types.d.ts +118 -0
  168. package/dist/src/modules/{fantasy → espn/fantasy}/types.js +3 -0
  169. package/dist/src/modules/espn/fantasy/view/FantasyHeaderView.d.ts +8 -0
  170. package/dist/src/modules/espn/fantasy/view/FantasyHeaderView.js +8 -0
  171. package/dist/src/modules/espn/fantasy/view/FantasyItemView.d.ts +8 -0
  172. package/dist/src/modules/espn/fantasy/view/FantasyItemView.js +48 -0
  173. package/dist/src/modules/{fantasy → espn/fantasy}/view/FantasyView.d.ts +7 -0
  174. package/dist/src/modules/{fantasy → espn/fantasy}/view/FantasyView.js +86 -7
  175. package/dist/src/modules/espn/fantasy/view/InactiveLeague/InactiveLeague.d.ts +100 -0
  176. package/dist/src/modules/espn/fantasy/view/LoginView/LoginView.d.ts +96 -0
  177. package/dist/src/modules/espn/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.d.ts +97 -0
  178. package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupPair/MatchupPair.d.ts +18 -16
  179. package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupSingle/MatchupSingle.d.ts +18 -16
  180. package/dist/src/modules/espn/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.d.ts +97 -0
  181. package/dist/src/modules/{fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.d.ts → espn/fantasy/view/PromoView/PromoView.d.ts} +30 -25
  182. package/dist/src/modules/{fantasy → espn/fantasy}/view/PromoView/PromoView.js +2 -2
  183. package/dist/src/modules/espn/fantasy/view/TournamentBracketCard/TournamentBracketCard.d.ts +101 -0
  184. package/dist/src/modules/{fantasy → espn/fantasy}/view/TournamentBracketCard/TournamentBracketCard.js +10 -6
  185. package/dist/src/modules/{fantasy → espn/fantasy}/view-model/FantasyViewModel.FantasyPolling.d.ts +1 -1
  186. package/dist/src/modules/{fantasy → espn/fantasy}/view-model/FantasyViewModel.LeagueManagerPolling.d.ts +1 -1
  187. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.TournamentPolling.d.ts +32 -0
  188. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.TournamentPolling.js +140 -0
  189. package/dist/src/modules/{fantasy → espn/fantasy}/view-model/FantasyViewModel.d.ts +22 -3
  190. package/dist/src/modules/{fantasy → espn/fantasy}/view-model/FantasyViewModel.js +310 -46
  191. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlaysViewModel.d.ts +17 -0
  192. package/dist/src/modules/{key-plays → espn/key-plays}/view/KeyPlayCardView.d.ts +2 -14
  193. package/dist/src/modules/{key-plays → espn/key-plays}/view/KeyPlayCardView.js +18 -42
  194. package/dist/src/modules/{key-plays → espn/key-plays}/view/KeyPlayErrorStateView.js +13 -13
  195. package/dist/src/modules/{key-plays → espn/key-plays}/view/KeyPlaysView.d.ts +2 -0
  196. package/dist/src/modules/{key-plays → espn/key-plays}/view/KeyPlaysView.js +33 -5
  197. package/dist/src/modules/{key-plays → espn/key-plays}/view-model/KeyPlaysViewModel.d.ts +1 -1
  198. package/dist/src/modules/{key-plays → espn/key-plays}/view-model/KeyPlaysViewModel.js +2 -3
  199. package/dist/src/{services → modules/espn/shop/services}/ShopService.d.ts +3 -3
  200. package/dist/src/{services → modules/espn/shop/services}/ShopService.js +2 -4
  201. package/dist/src/modules/{shop → espn/shop}/types.d.ts +3 -0
  202. package/dist/src/modules/{shop → espn/shop}/view/ProductDetailView/ProductDetailView.d.ts +1 -0
  203. package/dist/src/modules/{shop → espn/shop}/view/ShopView.d.ts +3 -0
  204. package/dist/src/modules/{shop → espn/shop}/view/ShopView.js +45 -4
  205. package/dist/src/modules/espn/shop/view/components/BrowseCard/BrowseCard.d.ts +103 -0
  206. package/dist/src/modules/{shop → espn/shop}/view/components/BrowseCard/BrowseCard.js +1 -1
  207. package/dist/src/modules/{shop → espn/shop}/view/components/ProductSummaryCard/ProductSummaryCard.d.ts +18 -16
  208. package/dist/src/modules/{shop → espn/shop}/view/components/ShopPromoView/ShopPromoView.js +2 -2
  209. package/dist/src/modules/espn/shop/view/components/ShopSection/ShopSection.d.ts +12 -0
  210. package/dist/src/modules/espn/shop/view/components/ShopSection/ShopSection.js +34 -0
  211. package/dist/src/modules/{shop → espn/shop}/view-model/ShopViewModel.ShopPolling.d.ts +1 -1
  212. package/dist/src/modules/{shop → espn/shop}/view-model/ShopViewModel.d.ts +4 -8
  213. package/dist/src/modules/{shop → espn/shop}/view-model/ShopViewModel.js +5 -39
  214. package/dist/src/modules/{stats/utils/renderTeamStatistic.d.ts → espn/stats/components/TeamStatistic.d.ts} +2 -6
  215. package/dist/src/modules/{stats/utils/renderTeamStatistic.js → espn/stats/components/TeamStatistic.js} +4 -7
  216. package/dist/src/modules/{stats → espn/stats}/interfaces/IStats.d.ts +124 -20
  217. package/dist/src/modules/espn/stats/interfaces/IStats.js +46 -0
  218. package/dist/src/modules/espn/stats/interfaces/IStatsViewModel.d.ts +7 -0
  219. package/dist/src/modules/espn/stats/interfaces/IStatsViewModel.js +1 -0
  220. package/dist/src/{services → modules/espn/stats/services}/StatsService.d.ts +3 -3
  221. package/dist/src/{services → modules/espn/stats/services}/StatsService.js +5 -4
  222. package/dist/src/modules/{stats → espn/stats}/utils/playerStatusUtils.js +1 -0
  223. package/dist/src/modules/espn/stats/view/CareerMatchup/CareerMatchup.d.ts +101 -0
  224. package/dist/src/modules/{stats → espn/stats}/view/CareerMatchup/CareerMatchup.js +6 -6
  225. package/dist/src/modules/espn/stats/view/DriveSummary/DrivePlayCard.d.ts +105 -0
  226. package/dist/src/modules/espn/stats/view/DriveSummary/DrivePlayCard.js +32 -0
  227. package/dist/src/modules/{stats → espn/stats}/view/DriveSummary/DriveSummary.d.ts +2 -9
  228. package/dist/src/modules/espn/stats/view/DriveSummary/DriveSummary.js +40 -0
  229. package/dist/src/modules/espn/stats/view/GameLeaders/GameLeaders.d.ts +9 -0
  230. package/dist/src/modules/espn/stats/view/GameLeaders/GameLeaders.js +22 -0
  231. package/dist/src/modules/{stats → espn/stats}/view/MatchPredictor/DonutChart/DonutChart.js +2 -2
  232. package/dist/src/modules/{fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.d.ts → espn/stats/view/MatchPredictor/MatchPredictorView.d.ts} +30 -25
  233. package/dist/src/modules/{stats → espn/stats}/view/Penalties/Penalties.js +1 -1
  234. package/dist/src/modules/{stats → espn/stats}/view/PlayerSeasonStats/ExpandedPlayerStats.js +11 -8
  235. package/dist/src/modules/{stats/view/ScoringSummary/ScoreItem/ScoreItem.d.ts → espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsCard.d.ts} +6 -5
  236. package/dist/src/modules/{stats → espn/stats}/view/PlayerSeasonStats/PlayerSeasonStatsCard.js +2 -2
  237. package/dist/src/modules/{stats → espn/stats}/view/PlayerSeasonStats/PlayerSeasonStatsMinified.js +1 -1
  238. package/dist/src/modules/{stats → espn/stats}/view/PlayerSeasonStats/PlayerSeasonStatsView.js +1 -1
  239. package/dist/src/modules/{stats/view/components/AthletesStatistics/AthletesStatistics.d.ts → espn/stats/view/RecentGames/RecentGames.d.ts} +29 -42
  240. package/dist/src/modules/{stats → espn/stats}/view/ScoringSummary/ExpandedScores/ExpandedScores.d.ts +1 -1
  241. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/ExpandedSummary.d.ts +100 -0
  242. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/ExpandedSummary.js +24 -0
  243. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/index.d.ts +2 -0
  244. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/index.js +2 -0
  245. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoreItem/ScoreItem.d.ts +100 -0
  246. package/dist/src/modules/{stats → espn/stats}/view/ScoringSummary/ScoreItem/ScoreItem.js +1 -1
  247. package/dist/src/modules/{stats → espn/stats}/view/ScoringSummary/ScoresSection/ScoresSection.d.ts +1 -1
  248. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoringSummary.d.ts +12 -0
  249. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoringSummary.js +167 -0
  250. package/dist/src/modules/espn/stats/view/ScoringSummary/index.d.ts +1 -0
  251. package/dist/src/modules/espn/stats/view/ScoringSummary/index.js +1 -0
  252. package/dist/src/modules/espn/stats/view/StatsItemView.d.ts +8 -0
  253. package/dist/src/modules/espn/stats/view/StatsItemView.js +66 -0
  254. package/dist/src/modules/espn/stats/view/StatsQRCode/StatsQRCodeView.d.ts +100 -0
  255. package/dist/src/modules/{stats → espn/stats}/view/StatsView.d.ts +2 -0
  256. package/dist/src/modules/{stats → espn/stats}/view/StatsView.js +31 -4
  257. package/dist/src/modules/{stats → espn/stats}/view/TeamStats/TeamStatsView.d.ts +29 -26
  258. package/dist/src/modules/espn/stats/view/TeamStats/TeamStatsView.js +77 -0
  259. package/dist/src/modules/espn/stats/view/Teams/Teams.d.ts +100 -0
  260. package/dist/src/modules/{stats → espn/stats}/view/Teams/Teams.js +15 -19
  261. package/dist/src/modules/espn/stats/view/WinProbability/WinProbability.d.ts +100 -0
  262. package/dist/src/modules/{stats → espn/stats}/view/WinProbability/WinProbability.js +1 -1
  263. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/AthletesStatistics.d.ts +115 -0
  264. package/dist/src/modules/{stats → espn/stats}/view/components/AthletesStatistics/AthletesStatistics.js +1 -1
  265. package/dist/src/modules/{stats → espn/stats}/view-model/StatsViewModel.d.ts +101 -20
  266. package/dist/src/modules/{stats → espn/stats}/view-model/StatsViewModel.js +527 -100
  267. package/dist/src/modules/fox/key-plays/view/FoxKeyPlays.d.ts +2 -0
  268. package/dist/src/modules/fox/key-plays/view/FoxKeyPlays.js +5 -0
  269. package/dist/src/modules/fox/multi-view/view/FoxMultiView.d.ts +2 -0
  270. package/dist/src/modules/fox/multi-view/view/FoxMultiView.js +5 -0
  271. package/dist/src/modules/fox/stats/view/FoxStatsView.d.ts +2 -0
  272. package/dist/src/modules/fox/stats/view/FoxStatsView.js +5 -0
  273. package/dist/src/modules/maestro/builder/components/BuilderSection/BuilderSection.d.ts +11 -0
  274. package/dist/src/modules/maestro/builder/components/BuilderSection/BuilderSection.js +52 -0
  275. package/dist/src/modules/maestro/builder/components/BuilderSection/index.d.ts +2 -0
  276. package/dist/src/modules/maestro/builder/components/BuilderSection/index.js +2 -0
  277. package/dist/src/modules/maestro/builder/components/ExpandableCard/ExpandableCard.d.ts +110 -0
  278. package/dist/src/modules/maestro/builder/components/ExpandableCard/ExpandableCard.js +37 -0
  279. package/dist/src/modules/maestro/builder/components/ExpandableCard/index.d.ts +2 -0
  280. package/dist/src/modules/maestro/builder/components/ExpandableCard/index.js +2 -0
  281. package/dist/src/modules/{shop/view/components/BrowseCard/BrowseCard.d.ts → maestro/builder/components/SimpleCard/SimpleCard.d.ts} +32 -29
  282. package/dist/src/modules/maestro/builder/components/SimpleCard/SimpleCard.js +12 -0
  283. package/dist/src/modules/maestro/builder/components/SimpleCard/index.d.ts +2 -0
  284. package/dist/src/modules/maestro/builder/components/SimpleCard/index.js +2 -0
  285. package/dist/src/modules/maestro/builder/index.d.ts +7 -0
  286. package/dist/src/modules/maestro/builder/index.js +7 -0
  287. package/dist/src/modules/maestro/builder/mocks/mockBuilderPanel.d.ts +149 -0
  288. package/dist/src/modules/maestro/builder/mocks/mockBuilderPanel.js +240 -0
  289. package/dist/src/modules/maestro/builder/types.d.ts +52 -0
  290. package/dist/src/modules/maestro/builder/types.js +1 -0
  291. package/dist/src/modules/maestro/builder/view/BuilderPanelView.d.ts +4 -0
  292. package/dist/src/modules/maestro/builder/view/BuilderPanelView.js +52 -0
  293. package/dist/src/modules/maestro/builder/view-model/BuilderPanelViewModel.d.ts +40 -0
  294. package/dist/src/modules/maestro/builder/view-model/BuilderPanelViewModel.js +229 -0
  295. package/dist/src/modules/maestro/builder/view-model/index.d.ts +1 -0
  296. package/dist/src/modules/maestro/builder/view-model/index.js +1 -0
  297. package/dist/src/sentry.d.ts +1 -1
  298. package/dist/src/sentry.js +41 -21
  299. package/dist/src/services/AnalyticsService/AnalyticsService.d.ts +3 -2
  300. package/dist/src/services/AnalyticsService/AnalyticsService.js +3 -1
  301. package/dist/src/services/InsightsService/InsightsPayloadBuilder.d.ts +1 -1
  302. package/dist/src/services/InsightsService/InsightsPayloadBuilder.js +1 -2
  303. package/dist/src/services/InsightsService/InsightsService.js +1 -1
  304. package/dist/src/services/NetworkManager/NetworkManager.d.ts +6 -0
  305. package/dist/src/services/NetworkManager/NetworkManager.js +39 -62
  306. package/dist/src/services/NetworkManager/types.d.ts +0 -96
  307. package/dist/src/services/NetworkManager/types.js +1 -10
  308. package/dist/src/services/StaticService/StaticService.d.ts +10 -2
  309. package/dist/src/services/StaticService/StaticService.js +32 -7
  310. package/dist/src/services/StaticService/mocks.d.ts +1 -0
  311. package/dist/src/services/StaticService/mocks.js +114 -99
  312. package/dist/src/services/StaticService/types.d.ts +3 -1
  313. package/dist/src/services/UserSettingsManager.js +9 -6
  314. package/dist/src/view-models/MaestroEventViewModel.d.ts +47 -16
  315. package/dist/src/view-models/MaestroEventViewModel.js +124 -58
  316. package/dist/src/view-models/PanelManagerViewModel.d.ts +4 -1
  317. package/dist/src/view-models/PanelManagerViewModel.js +41 -58
  318. package/package.json +7 -5
  319. package/dist/1.maestro-web-sdk.umd.js +0 -2
  320. package/dist/1.maestro-web-sdk.umd.js.map +0 -1
  321. package/dist/10.maestro-web-sdk.umd.js +0 -2
  322. package/dist/10.maestro-web-sdk.umd.js.map +0 -1
  323. package/dist/11.maestro-web-sdk.umd.js +0 -2
  324. package/dist/11.maestro-web-sdk.umd.js.map +0 -1
  325. package/dist/12.maestro-web-sdk.umd.js +0 -2
  326. package/dist/12.maestro-web-sdk.umd.js.map +0 -1
  327. package/dist/13.maestro-web-sdk.umd.js +0 -2
  328. package/dist/13.maestro-web-sdk.umd.js.map +0 -1
  329. package/dist/14.maestro-web-sdk.umd.js +0 -2
  330. package/dist/14.maestro-web-sdk.umd.js.map +0 -1
  331. package/dist/15.maestro-web-sdk.umd.js +0 -2
  332. package/dist/15.maestro-web-sdk.umd.js.map +0 -1
  333. package/dist/16.maestro-web-sdk.umd.js +0 -2
  334. package/dist/16.maestro-web-sdk.umd.js.map +0 -1
  335. package/dist/17.maestro-web-sdk.umd.js +0 -2
  336. package/dist/17.maestro-web-sdk.umd.js.map +0 -1
  337. package/dist/18.maestro-web-sdk.umd.js +0 -2
  338. package/dist/18.maestro-web-sdk.umd.js.map +0 -1
  339. package/dist/19.maestro-web-sdk.umd.js +0 -2
  340. package/dist/19.maestro-web-sdk.umd.js.map +0 -1
  341. package/dist/2.maestro-web-sdk.umd.js +0 -2
  342. package/dist/2.maestro-web-sdk.umd.js.map +0 -1
  343. package/dist/20.maestro-web-sdk.umd.js +0 -2
  344. package/dist/20.maestro-web-sdk.umd.js.map +0 -1
  345. package/dist/21.maestro-web-sdk.umd.js +0 -2
  346. package/dist/21.maestro-web-sdk.umd.js.map +0 -1
  347. package/dist/22.maestro-web-sdk.umd.js +0 -2
  348. package/dist/22.maestro-web-sdk.umd.js.map +0 -1
  349. package/dist/23.maestro-web-sdk.umd.js +0 -2
  350. package/dist/23.maestro-web-sdk.umd.js.map +0 -1
  351. package/dist/24.maestro-web-sdk.umd.js +0 -2
  352. package/dist/24.maestro-web-sdk.umd.js.map +0 -1
  353. package/dist/3.maestro-web-sdk.umd.js +0 -2
  354. package/dist/3.maestro-web-sdk.umd.js.map +0 -1
  355. package/dist/4.maestro-web-sdk.umd.js +0 -2
  356. package/dist/4.maestro-web-sdk.umd.js.map +0 -1
  357. package/dist/5.maestro-web-sdk.umd.js +0 -2
  358. package/dist/5.maestro-web-sdk.umd.js.map +0 -1
  359. package/dist/6.maestro-web-sdk.umd.js +0 -2
  360. package/dist/6.maestro-web-sdk.umd.js.map +0 -1
  361. package/dist/7.maestro-web-sdk.umd.js +0 -2
  362. package/dist/7.maestro-web-sdk.umd.js.map +0 -1
  363. package/dist/8.maestro-web-sdk.umd.js +0 -2
  364. package/dist/8.maestro-web-sdk.umd.js.map +0 -1
  365. package/dist/9.maestro-web-sdk.umd.js +0 -2
  366. package/dist/9.maestro-web-sdk.umd.js.map +0 -1
  367. package/dist/bundle-report.html +0 -53
  368. package/dist/src/components/molecules/Overlay/Overlay.d.ts +0 -34
  369. package/dist/src/components/molecules/Overlay/Overlay.js +0 -139
  370. package/dist/src/components/molecules/Overlay/index.d.ts +0 -2
  371. package/dist/src/components/molecules/Overlay/index.js +0 -2
  372. package/dist/src/models/IWinningBet.d.ts +0 -7
  373. package/dist/src/modules/bets/view/SixPack/SixPackView.d.ts +0 -23
  374. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.d.ts +0 -26
  375. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.js +0 -34
  376. package/dist/src/modules/bets/view/components/Bet/Bet.d.ts +0 -158
  377. package/dist/src/modules/bets/view/components/BetsCard/BetsCard.js +0 -15
  378. package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.d.ts +0 -8
  379. package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +0 -14
  380. package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.d.ts +0 -18
  381. package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +0 -78
  382. package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.d.ts +0 -102
  383. package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.d.ts +0 -99
  384. package/dist/src/modules/fantasy/view/FantasyItemView.d.ts +0 -22
  385. package/dist/src/modules/fantasy/view/FantasyItemView.js +0 -74
  386. package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.d.ts +0 -98
  387. package/dist/src/modules/fantasy/view/LoginView/LoginView.d.ts +0 -94
  388. package/dist/src/modules/fantasy/view/PromoView/PromoView.d.ts +0 -98
  389. package/dist/src/modules/fantasy/view/TournamentBracketCard/TournamentBracketCard.d.ts +0 -99
  390. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.d.ts +0 -23
  391. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.js +0 -61
  392. package/dist/src/modules/stats/view/CareerMatchup/CareerMatchup.d.ts +0 -100
  393. package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.d.ts +0 -106
  394. package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.js +0 -70
  395. package/dist/src/modules/stats/view/DriveSummary/DriveSummary.js +0 -87
  396. package/dist/src/modules/stats/view/GameLeaders/GameLeaders.d.ts +0 -21
  397. package/dist/src/modules/stats/view/GameLeaders/GameLeaders.js +0 -48
  398. package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.d.ts +0 -98
  399. package/dist/src/modules/stats/view/PlayerSeasonStats/PlayerSeasonStatsCard.d.ts +0 -97
  400. package/dist/src/modules/stats/view/RecentGames/RecentGames.d.ts +0 -98
  401. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.d.ts +0 -2
  402. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.js +0 -2
  403. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.d.ts +0 -29
  404. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.js +0 -125
  405. package/dist/src/modules/stats/view/ScoringSummary/index.d.ts +0 -2
  406. package/dist/src/modules/stats/view/ScoringSummary/index.js +0 -2
  407. package/dist/src/modules/stats/view/StatsItemView.d.ts +0 -22
  408. package/dist/src/modules/stats/view/StatsItemView.js +0 -92
  409. package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.d.ts +0 -98
  410. package/dist/src/modules/stats/view/TeamStats/TeamStatsView.js +0 -43
  411. package/dist/src/modules/stats/view/Teams/Teams.d.ts +0 -98
  412. package/dist/src/modules/stats/view/WinProbability/WinProbability.d.ts +0 -98
  413. package/dist/src/services/FantasyService.js +0 -92
  414. package/dist/src/services/NetworkManager/NetworkManagerFactory.d.ts +0 -42
  415. package/dist/src/services/NetworkManager/NetworkManagerFactory.js +0 -101
  416. package/dist/src/types/OverlayTypes.d.ts +0 -43
  417. package/dist/src/types/OverlayTypes.js +0 -4
  418. package/dist/src/view-models/OverlayViewModel.d.ts +0 -33
  419. package/dist/src/view-models/OverlayViewModel.js +0 -222
  420. /package/dist/src/modules/{bets → espn/bets}/interfaces/IBets.d.ts +0 -0
  421. /package/dist/src/modules/{bets → espn/bets}/interfaces/IBets.js +0 -0
  422. /package/dist/src/{models/IWinningBet.js → modules/espn/bets/interfaces/IBetsViewModel.js} +0 -0
  423. /package/dist/src/modules/{bets → espn/bets}/mocks.d.ts +0 -0
  424. /package/dist/src/modules/{bets → espn/bets}/mocks.js +0 -0
  425. /package/dist/src/modules/{bets → espn/bets}/types/BetsAnalyticsTypes.d.ts +0 -0
  426. /package/dist/src/modules/{bets → espn/bets}/types/BetsAnalyticsTypes.js +0 -0
  427. /package/dist/src/modules/{bets → espn/bets}/view/UserBets/BetResult/BetResult.d.ts +0 -0
  428. /package/dist/src/modules/{bets → espn/bets}/view/UserBets/BetResult/BetResult.js +0 -0
  429. /package/dist/src/modules/{bets → espn/bets}/view/UserBets/Boost/Boost.js +0 -0
  430. /package/dist/src/modules/{bets → espn/bets}/view/UserBets/OutcomeBadge/OutcomeBadge.d.ts +0 -0
  431. /package/dist/src/modules/{bets → espn/bets}/view/UserBets/OutcomeBadge/OutcomeBadge.js +0 -0
  432. /package/dist/src/modules/{bets → espn/bets}/view/UserBets/Parlay/Parlay.js +0 -0
  433. /package/dist/src/modules/{bets → espn/bets}/view/UserBets/Straight/Straight.js +0 -0
  434. /package/dist/src/modules/{bets → espn/bets}/view/UserBets/Teaser/Teaser.js +0 -0
  435. /package/dist/src/modules/{bets → espn/bets}/view/UserBets/UserBetsView.d.ts +0 -0
  436. /package/dist/src/modules/{bets → espn/bets}/view/UserBets/UserBetsView.js +0 -0
  437. /package/dist/src/modules/{bets → espn/bets}/view/components/BetPill/BetPill.d.ts +0 -0
  438. /package/dist/src/modules/{bets → espn/bets}/view/components/BetPill/BetPill.js +0 -0
  439. /package/dist/src/modules/{bets → espn/bets}/view/components/BetsCard/BetsCardHeader.d.ts +0 -0
  440. /package/dist/src/modules/{bets → espn/bets}/view/components/BetsCard/BetsCardHeader.js +0 -0
  441. /package/dist/src/modules/{bets → espn/bets}/view/components/LocationWarning/LocationWarning.d.ts +0 -0
  442. /package/dist/src/modules/{bets → espn/bets}/view/components/LocationWarning/LocationWarning.js +0 -0
  443. /package/dist/src/modules/{bets → espn/bets}/view/components/PromoCodeBanner/index.d.ts +0 -0
  444. /package/dist/src/modules/{bets → espn/bets}/view/components/PromoCodeBanner/index.js +0 -0
  445. /package/dist/src/modules/{fantasy → espn/fantasy}/components/ExpandedAthleteList/ExpandedAthletesList.d.ts +0 -0
  446. /package/dist/src/modules/{fantasy → espn/fantasy}/components/ExpandedAthleteList/ExpandedAthletesList.js +0 -0
  447. /package/dist/src/modules/{fantasy → espn/fantasy}/components/ExpandedAthleteList/index.d.ts +0 -0
  448. /package/dist/src/modules/{fantasy → espn/fantasy}/components/ExpandedAthleteList/index.js +0 -0
  449. /package/dist/src/modules/{fantasy → espn/fantasy}/components/LeagueCard/LeagueCard.js +0 -0
  450. /package/dist/src/modules/{fantasy → espn/fantasy}/components/LeagueCard/index.d.ts +0 -0
  451. /package/dist/src/modules/{fantasy → espn/fantasy}/components/LeagueCard/index.js +0 -0
  452. /package/dist/src/modules/{fantasy → espn/fantasy}/components/TopPlayerCard/TopPlayerCard.js +0 -0
  453. /package/dist/src/modules/{fantasy → espn/fantasy}/components/TopPlayerCard/index.d.ts +0 -0
  454. /package/dist/src/modules/{fantasy → espn/fantasy}/components/TopPlayerCard/index.js +0 -0
  455. /package/dist/src/modules/{fantasy → espn/fantasy}/mocks.d.ts +0 -0
  456. /package/dist/src/modules/{fantasy → espn/fantasy}/mocks.js +0 -0
  457. /package/dist/src/modules/{fantasy → espn/fantasy}/view/ActiveAthletesMarquee/ActiveAthletesMarquee.d.ts +0 -0
  458. /package/dist/src/modules/{fantasy → espn/fantasy}/view/ActiveAthletesMarquee/ActiveAthletesMarquee.js +0 -0
  459. /package/dist/src/modules/{fantasy → espn/fantasy}/view/ActiveAthletesMarquee/index.d.ts +0 -0
  460. /package/dist/src/modules/{fantasy → espn/fantasy}/view/ActiveAthletesMarquee/index.js +0 -0
  461. /package/dist/src/modules/{fantasy → espn/fantasy}/view/InactiveLeague/DraftDateCountdown.d.ts +0 -0
  462. /package/dist/src/modules/{fantasy → espn/fantasy}/view/InactiveLeague/DraftDateCountdown.js +0 -0
  463. /package/dist/src/modules/{fantasy → espn/fantasy}/view/InactiveLeague/InactiveLeague.js +0 -0
  464. /package/dist/src/modules/{fantasy → espn/fantasy}/view/InactiveLeague/index.d.ts +0 -0
  465. /package/dist/src/modules/{fantasy → espn/fantasy}/view/InactiveLeague/index.js +0 -0
  466. /package/dist/src/modules/{fantasy → espn/fantasy}/view/LoginView/LoginView.js +0 -0
  467. /package/dist/src/modules/{fantasy → espn/fantasy}/view/LoginView/index.d.ts +0 -0
  468. /package/dist/src/modules/{fantasy → espn/fantasy}/view/LoginView/index.js +0 -0
  469. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.js +0 -0
  470. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupPair/DoubleAthleteCard/index.d.ts +0 -0
  471. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupPair/DoubleAthleteCard/index.js +0 -0
  472. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupPair/ExpandedDoubleAthleteCards.d.ts +0 -0
  473. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupPair/ExpandedDoubleAthleteCards.js +0 -0
  474. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupPair/MatchupPair.js +0 -0
  475. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupPair/index.d.ts +0 -0
  476. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupPair/index.js +0 -0
  477. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupSingle/ExpandedSingleAthleteCards.d.ts +0 -0
  478. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupSingle/ExpandedSingleAthleteCards.js +0 -0
  479. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupSingle/MatchupSingle.js +0 -0
  480. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.js +0 -0
  481. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupSingle/SingleAthleteCard/index.d.ts +0 -0
  482. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupSingle/SingleAthleteCard/index.js +0 -0
  483. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupSingle/index.d.ts +0 -0
  484. /package/dist/src/modules/{fantasy → espn/fantasy}/view/MatchupSingle/index.js +0 -0
  485. /package/dist/src/modules/{fantasy → espn/fantasy}/view/PromoView/index.d.ts +0 -0
  486. /package/dist/src/modules/{fantasy → espn/fantasy}/view/PromoView/index.js +0 -0
  487. /package/dist/src/modules/{fantasy → espn/fantasy}/view/TournamentBracketCard/index.d.ts +0 -0
  488. /package/dist/src/modules/{fantasy → espn/fantasy}/view/TournamentBracketCard/index.js +0 -0
  489. /package/dist/src/modules/{fantasy → espn/fantasy}/view/index.d.ts +0 -0
  490. /package/dist/src/modules/{fantasy → espn/fantasy}/view/index.js +0 -0
  491. /package/dist/src/modules/{fantasy → espn/fantasy}/view-model/FantasyViewModel.FantasyPolling.js +0 -0
  492. /package/dist/src/modules/{fantasy → espn/fantasy}/view-model/FantasyViewModel.LeagueManagerPolling.js +0 -0
  493. /package/dist/src/modules/{key-plays → espn/key-plays}/constants.d.ts +0 -0
  494. /package/dist/src/modules/{key-plays → espn/key-plays}/constants.js +0 -0
  495. /package/dist/src/modules/{key-plays → espn/key-plays}/interfaces/IKeyPlays.d.ts +0 -0
  496. /package/dist/src/modules/{key-plays → espn/key-plays}/interfaces/IKeyPlays.js +0 -0
  497. /package/dist/src/modules/{key-plays → espn/key-plays}/interfaces/IKeyPlaysResponse.d.ts +0 -0
  498. /package/dist/src/modules/{key-plays → espn/key-plays}/interfaces/IKeyPlaysResponse.js +0 -0
  499. /package/dist/src/modules/{stats/interfaces/IStats.js → espn/key-plays/interfaces/IKeyPlaysViewModel.js} +0 -0
  500. /package/dist/src/modules/{key-plays → espn/key-plays}/view/KeyPlayCardScoreTagView.d.ts +0 -0
  501. /package/dist/src/modules/{key-plays → espn/key-plays}/view/KeyPlayCardScoreTagView.js +0 -0
  502. /package/dist/src/modules/{key-plays → espn/key-plays}/view/KeyPlayErrorStateView.d.ts +0 -0
  503. /package/dist/src/modules/{shop → espn/shop}/mocks.d.ts +0 -0
  504. /package/dist/src/modules/{shop → espn/shop}/mocks.js +0 -0
  505. /package/dist/src/modules/{shop → espn/shop}/types.js +0 -0
  506. /package/dist/src/modules/{shop → espn/shop}/view/ProductDetailView/ProductDetailView.js +0 -0
  507. /package/dist/src/modules/{shop → espn/shop}/view/ProductDetailView/index.d.ts +0 -0
  508. /package/dist/src/modules/{shop → espn/shop}/view/ProductDetailView/index.js +0 -0
  509. /package/dist/src/modules/{shop → espn/shop}/view/components/BrowseCard/index.d.ts +0 -0
  510. /package/dist/src/modules/{shop → espn/shop}/view/components/BrowseCard/index.js +0 -0
  511. /package/dist/src/modules/{shop → espn/shop}/view/components/ProductSummaryCard/ProductSummaryCard.js +0 -0
  512. /package/dist/src/modules/{shop → espn/shop}/view/components/ProductSummaryCard/index.d.ts +0 -0
  513. /package/dist/src/modules/{shop → espn/shop}/view/components/ProductSummaryCard/index.js +0 -0
  514. /package/dist/src/modules/{shop → espn/shop}/view/components/ShopPromoView/ShopPromoView.d.ts +0 -0
  515. /package/dist/src/modules/{shop → espn/shop}/view/components/ShopPromoView/index.d.ts +0 -0
  516. /package/dist/src/modules/{shop → espn/shop}/view/components/ShopPromoView/index.js +0 -0
  517. /package/dist/src/modules/{shop → espn/shop}/view/components/ShopSection/index.d.ts +0 -0
  518. /package/dist/src/modules/{shop → espn/shop}/view/components/ShopSection/index.js +0 -0
  519. /package/dist/src/modules/{shop → espn/shop}/view/index.d.ts +0 -0
  520. /package/dist/src/modules/{shop → espn/shop}/view/index.js +0 -0
  521. /package/dist/src/modules/{shop → espn/shop}/view-model/ShopViewModel.ShopPolling.js +0 -0
  522. /package/dist/src/modules/{stats → espn/stats}/mocks.d.ts +0 -0
  523. /package/dist/src/modules/{stats → espn/stats}/mocks.js +0 -0
  524. /package/dist/src/modules/{stats → espn/stats}/utils/driveSummaryUtils.d.ts +0 -0
  525. /package/dist/src/modules/{stats → espn/stats}/utils/driveSummaryUtils.js +0 -0
  526. /package/dist/src/modules/{stats → espn/stats}/utils/playerStatusUtils.d.ts +0 -0
  527. /package/dist/src/modules/{stats → espn/stats}/utils.d.ts +0 -0
  528. /package/dist/src/modules/{stats → espn/stats}/utils.js +0 -0
  529. /package/dist/src/modules/{stats → espn/stats}/view/ActiveAthletes/ActiveAthletes.d.ts +0 -0
  530. /package/dist/src/modules/{stats → espn/stats}/view/ActiveAthletes/ActiveAthletes.js +0 -0
  531. /package/dist/src/modules/{stats → espn/stats}/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.d.ts +0 -0
  532. /package/dist/src/modules/{stats → espn/stats}/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.js +0 -0
  533. /package/dist/src/modules/{stats → espn/stats}/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.d.ts +0 -0
  534. /package/dist/src/modules/{stats → espn/stats}/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.js +0 -0
  535. /package/dist/src/modules/{stats → espn/stats}/view/ActiveAthletes/index.d.ts +0 -0
  536. /package/dist/src/modules/{stats → espn/stats}/view/ActiveAthletes/index.js +0 -0
  537. /package/dist/src/modules/{stats → espn/stats}/view/CareerMatchup/index.d.ts +0 -0
  538. /package/dist/src/modules/{stats → espn/stats}/view/CareerMatchup/index.js +0 -0
  539. /package/dist/src/modules/{stats → espn/stats}/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.d.ts +0 -0
  540. /package/dist/src/modules/{stats → espn/stats}/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.js +0 -0
  541. /package/dist/src/modules/{stats → espn/stats}/view/DriveSummary/Header/DriveSummaryHeader.d.ts +0 -0
  542. /package/dist/src/modules/{stats → espn/stats}/view/DriveSummary/Header/DriveSummaryHeader.js +0 -0
  543. /package/dist/src/modules/{stats → espn/stats}/view/DriveSummary/MainStat/MainStat.d.ts +0 -0
  544. /package/dist/src/modules/{stats → espn/stats}/view/DriveSummary/MainStat/MainStat.js +0 -0
  545. /package/dist/src/modules/{stats → espn/stats}/view/DriveSummary/index.d.ts +0 -0
  546. /package/dist/src/modules/{stats → espn/stats}/view/DriveSummary/index.js +0 -0
  547. /package/dist/src/modules/{stats → espn/stats}/view/GameLeaders/index.d.ts +0 -0
  548. /package/dist/src/modules/{stats → espn/stats}/view/GameLeaders/index.js +0 -0
  549. /package/dist/src/modules/{stats → espn/stats}/view/MatchPredictor/DonutChart/DonutChart.d.ts +0 -0
  550. /package/dist/src/modules/{stats → espn/stats}/view/MatchPredictor/DonutChart/index.d.ts +0 -0
  551. /package/dist/src/modules/{stats → espn/stats}/view/MatchPredictor/DonutChart/index.js +0 -0
  552. /package/dist/src/modules/{stats → espn/stats}/view/MatchPredictor/MatchPredictorView.js +0 -0
  553. /package/dist/src/modules/{stats → espn/stats}/view/MatchPredictor/index.d.ts +0 -0
  554. /package/dist/src/modules/{stats → espn/stats}/view/MatchPredictor/index.js +0 -0
  555. /package/dist/src/modules/{stats → espn/stats}/view/Penalties/Penalties.d.ts +0 -0
  556. /package/dist/src/modules/{stats → espn/stats}/view/Penalties/index.d.ts +0 -0
  557. /package/dist/src/modules/{stats → espn/stats}/view/Penalties/index.js +0 -0
  558. /package/dist/src/modules/{stats → espn/stats}/view/PlayerSeasonStats/ExpandedPlayerStats.d.ts +0 -0
  559. /package/dist/src/modules/{stats → espn/stats}/view/PlayerSeasonStats/PlayerSeasonStatsMinified.d.ts +0 -0
  560. /package/dist/src/modules/{stats → espn/stats}/view/PlayerSeasonStats/PlayerSeasonStatsView.d.ts +0 -0
  561. /package/dist/src/modules/{stats → espn/stats}/view/PlayerSeasonStats/index.d.ts +0 -0
  562. /package/dist/src/modules/{stats → espn/stats}/view/PlayerSeasonStats/index.js +0 -0
  563. /package/dist/src/modules/{stats → espn/stats}/view/RecentGames/RecentGames.js +0 -0
  564. /package/dist/src/modules/{stats → espn/stats}/view/RecentGames/index.d.ts +0 -0
  565. /package/dist/src/modules/{stats → espn/stats}/view/RecentGames/index.js +0 -0
  566. /package/dist/src/modules/{stats → espn/stats}/view/ScoringSummary/ExpandedScores/ExpandedScores.js +0 -0
  567. /package/dist/src/modules/{stats → espn/stats}/view/ScoringSummary/ScoreItem/index.d.ts +0 -0
  568. /package/dist/src/modules/{stats → espn/stats}/view/ScoringSummary/ScoreItem/index.js +0 -0
  569. /package/dist/src/modules/{stats → espn/stats}/view/ScoringSummary/ScoresSection/ScoresSection.js +0 -0
  570. /package/dist/src/modules/{stats → espn/stats}/view/ScoringSummary/ScoresSection/index.d.ts +0 -0
  571. /package/dist/src/modules/{stats → espn/stats}/view/ScoringSummary/ScoresSection/index.js +0 -0
  572. /package/dist/src/modules/{stats → espn/stats}/view/StatsQRCode/StatsQRCodeView.js +0 -0
  573. /package/dist/src/modules/{stats → espn/stats}/view/StatsQRCode/index.d.ts +0 -0
  574. /package/dist/src/modules/{stats → espn/stats}/view/StatsQRCode/index.js +0 -0
  575. /package/dist/src/modules/{stats → espn/stats}/view/TeamStats/index.d.ts +0 -0
  576. /package/dist/src/modules/{stats → espn/stats}/view/TeamStats/index.js +0 -0
  577. /package/dist/src/modules/{stats → espn/stats}/view/Teams/StatsCarousel.d.ts +0 -0
  578. /package/dist/src/modules/{stats → espn/stats}/view/Teams/StatsCarousel.js +0 -0
  579. /package/dist/src/modules/{stats → espn/stats}/view/Teams/StatsProgressBar.d.ts +0 -0
  580. /package/dist/src/modules/{stats → espn/stats}/view/Teams/StatsProgressBar.js +0 -0
  581. /package/dist/src/modules/{stats → espn/stats}/view/Teams/index.d.ts +0 -0
  582. /package/dist/src/modules/{stats → espn/stats}/view/Teams/index.js +0 -0
  583. /package/dist/src/modules/{stats → espn/stats}/view/WinProbability/index.d.ts +0 -0
  584. /package/dist/src/modules/{stats → espn/stats}/view/WinProbability/index.js +0 -0
  585. /package/dist/src/modules/{stats → espn/stats}/view/components/AthletesStatistics/StatisticTable.d.ts +0 -0
  586. /package/dist/src/modules/{stats → espn/stats}/view/components/AthletesStatistics/StatisticTable.js +0 -0
  587. /package/dist/src/modules/{stats → espn/stats}/view/components/AthletesStatistics/index.d.ts +0 -0
  588. /package/dist/src/modules/{stats → espn/stats}/view/components/AthletesStatistics/index.js +0 -0
  589. /package/dist/src/modules/{stats → espn/stats}/view/index.d.ts +0 -0
  590. /package/dist/src/modules/{stats → espn/stats}/view/index.js +0 -0
  591. /package/dist/src/modules/{hello-world → maestro/hello-world}/HelloWorldImage.d.ts +0 -0
  592. /package/dist/src/modules/{hello-world → maestro/hello-world}/HelloWorldImage.js +0 -0
  593. /package/dist/src/modules/{hello-world → maestro/hello-world}/HelloWorldView.d.ts +0 -0
  594. /package/dist/src/modules/{hello-world → maestro/hello-world}/HelloWorldView.js +0 -0
  595. /package/dist/src/modules/{hello-world → maestro/hello-world}/index.d.ts +0 -0
  596. /package/dist/src/modules/{hello-world → maestro/hello-world}/index.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/BetsWarningIcon.tsx"],"names":["BetsWarningIcon","React","Component","constructor","props","super","render","createElement","width","this","height","viewBox","fill","xmlns","fillRule","clipRule","d"],"mappings":"yFAAA,2BAGA,MAAMA,UAAwBC,IAAMC,UAClCC,YAAYC,GACVC,MAAMD,GAGRE,SACE,OACEL,IAAAM,cAAA,OACEC,MAAOC,KAAKL,MAAMI,MAClBE,OAAQD,KAAKL,MAAMM,OACnBC,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAENZ,IAAAM,cAAA,QACEO,SAAS,UACTC,SAAS,UACTC,EAAE,4MACFJ,KAAK,cAOAZ","file":"9.maestro-web-sdk.esm.js","sourcesContent":["import React from 'react';\nimport { IconProps } from './Icon';\n\nclass BetsWarningIcon extends React.Component<IconProps> {\n constructor(props: IconProps) {\n super(props);\n }\n\n render() {\n return (\n <svg\n width={this.props.width}\n height={this.props.height}\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3 16C3 8.8203 8.8203 3 16 3C23.1797 3 29 8.8203 29 16C29 23.1797 23.1797 29 16 29C8.8203 29 3 23.1797 3 16ZM14.6001 12.0668H17.4001V9.26676H14.6001V12.0668ZM17.3333 22.6667V14H14.6667V22.6667H17.3333Z\"\n fill=\"#FFB759\"\n />\n </svg>\n );\n }\n}\n\nexport default BetsWarningIcon;\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///./src/helpers/strings.ts","webpack:///./src/helpers/url.ts","webpack:///./src/modules/espn/stats/mocks.ts","webpack:///./src/modules/espn/stats/interfaces/IStats.ts","webpack:///./src/modules/espn/stats/services/StatsService.ts","webpack:///./src/modules/espn/stats/utils/driveSummaryUtils.ts","webpack:///./src/modules/espn/stats/view-model/StatsViewModel.ts"],"names":["slugify","str","toLowerCase","trim","replace","stringHashCode","hash","i","length","charCodeAt","setImageDimensions","url","width","height","urlObj","URL","searchParams","set","toString","err","console","warn","MOCK_STATS_API_PRE_GAME_RESPONSE","entities","teams","id","uid","slug","location","name","abbreviation","displayName","shortDisplayName","color","alternateColor","logo","statistics","$key","value","displayValue","homeAway","record","displayOrder","athletes","guid","shortName","jersey","headshot","links","rel","href","text","position","leaders","home","team","athlete","away","header","linescores","linescoresHeader","predictor","imageUrl","homeTeam","gameProjection","awayTeam","winProbability","winPercentage","previousGames","events","score","gameResult","gameState","promotion","title","description","qrCode","backgroundImage","activeAthletes","displayText","statLine","drives","plays","clock","period","number","type","start","downDistanceText","meta","gp_topic","picker_topic","isTeamStatistic","data","isTabbedStatisticsArray","Array","isArray","every","item","stats","isTabbedStatistics","StatsService","constructor","delegate","_defineProperty","this","networkManager","NetworkManager","externalBaseURL","getStatsAPIBaseURL","timeCode","externalApiRequest","endpoint","getSyncEndpoint","method","HttpMethod","GET","params","headers","pollStatsByUrl","interval","onData","onError","pollExternalApiRequest","overrideUrl","log","leagueId","mainId","getIdsFromPageConfig","formatTimeCodeForAPI","pageConfig","SDK","getPageConfig","Error","metadata","page","eventId","external_field_1","leagueField","external_field_5","availableFields","Object","keys","join","fauxcastId","parseLeagueData","parsed","JSON","parse","parseError","error","captureException","rawValue","isNaN","isFinite","date","Date","getTime","now","toISOString","parseDriveDescription","_parts$","_parts$2","yards","time","parts","split","formatLastPlayMarquee","lastPlay","_lastPlay$period","ordinalSuffix","lastTwoDigits","getOrdinalSuffix","STATS_ITEM_TYPE_CARD_MAP","driveSummary","gameLeaders","headerTeam","matchPredictor","playerSeasonStats","recentGames","scoringSummary","teamStats","careerMatchup","penalties","StatsViewModel","ViewModel","analyticsService","options","super","Observable","isActive","currentUrl","lastUpdateTime","panelClick","card","game_state","currentGameState","useMockData","statsService","setDataToPanel","panelData","fetchMockData","currentTimeCode","getCurrentTimeCode","onUpdatePlayerTimeCode","panelView","maestroEventViewModel","getMaestroEventViewModel","getPlayerTimeCode","context","cleanup","stopTimecodePolling","clearSmartPollingTimeout","resetTimecodePollingState","playerTimeCode","currentPlayerTimeCode","performSmartPolling","handleTimecodeError","clearTabLoadFailure","errorState","immediateStats","getStatsByUrl","processPolledData","smartPollingTimeout","window","setTimeout","startTimecodePolling","_error$constructor","errorDetails","errorType","errorMessage","message","String","timestamp","currentTimecode","hasExistingData","statsItems","lastResponseHash","timecodePollingState","hasEverSuccessfullyLoaded","clearTimeout","timecodePollingTask","stop","processData","isDataLoading","responseString","stringify","currentHash","parseHeaderTeams","push","parseMatchPredictor","parseCareerMatchup","parsePlayerSeasonStats","parseScoringSummary","parseWinProbability","parseTeamSeasonStatistics","parseTeamsStatistics","parseDriveSummary","parsePenalties","parseActiveAthletes","parseGameLeaders","parseRecentGames","parsePromotion","_data$entities","result","drive","_drive$team","reverse","lastPlayMarquee","playsQuantity","_data$entities2","values","find","awayStat","homeStat","awayTeamDisplayValue","homeTeamDisplayValue","awayTeamValue","homeTeamValue","_data$entities3","_data$statTeams$secti","_data$statTeams$teams","_data$statTeams$teams2","_data$statTeams$teams3","statTeams","sections","awayTeamKey","homeTeamKey","tabbedStatistics","forEach","section","sectionKeyStatistics","_awaySectionStats$sta","_homeSectionStats$sta","homeSectionStats","st","awaySectionStats","Number","entries","_data$entities4","homePercentage","parseFloat","awayPercentage","percentage","response","_response$entities","toText","maybeDisplayName","filter","map","items","_item$athlete","athleteKey","undefined","statusText","status","isHighlighted","stat","parseHeaderTeamsFromTeamHeader","parseHeaderTeamsFromHeader","_response$header","_response$header2","headerTeams","buildHeaderTeamsItem","linescoresRowHeader","isLiveFromHeaderSource","_response$header3","_response$teamHeader","_response$teamHeader2","_response$teamHeader3","_response$teamHeader4","_response$teamHeader5","_response$teamHeader6","_response$teamHeader7","teamHeaderTeams","teamHeader","teamHeaderHasLinescores","some","t","teamHeaderHasLinescoresHeader","style","rowHeader","_response$entities2","rawLinescoresHeader","homeTeamHeader","awayTeamHeader","fallbackAwayTeamHeader","fallbackHomeTeamHeader","resolvedHomeTeamHeader","resolvedAwayTeamHeader","statisticsSet","Set","rawAwayStats","rawHomeStats","awayStatistics","homeStatistics","add","statKey","buildLinescores","l","maybeDetails","details","Boolean","awayDetails","homeDetails","awayTeamLinescores","homeTeamLinescores","lastThreeHeaders","slice","includes","statsCount","inningsCount","maxInningsToShow","inningsToRemove","isLive","_response$entities3","_awayTeamPreviousGame","_homeTeamPreviousGame","awayTeamPreviousGame","game","homeTeamPreviousGame","event","_event$team","eventTeam","teamLogo","_event$team2","_response$entities4","chartImageUrl","_response$entities5","_response$entities6","isPre","leader","_leader$away","_leader$away$athlete","_leader$home","_leader$home$athlete","_awayAthlete$position","_homeAthlete$position","awayAthlete","homeAthlete","awayAthleteStatistics","homeAthleteStatistics","_response$entities7","getActiveAthletesTeamInfo","index","_awayAthleteInfo$posi","_homeAthleteInfo$posi","awayAthleteInfo","homeAthleteInfo","awayStatLine","homeStatLine","awayDisplayValue","awayAbbreviation","homeStats","homeDisplayValue","homeAbbreviation","minifiedStatistics","_data$activeAthletes","_data$entities5","entitiesTeams","_data$entities6","_data$entities7","isMlbScoringSummary","_section$items","_item$team","_item$athlete2","_athlete$position","athleteNumber","athleteName","textParts","featured","teamName","athleteShortName","athleteJersey","athletePosition","shortText","h","_h$featured","_h$title","tag","isHockeyScoringSummary","hockeySummary","_item$team2","_item$athlete3","_item$athlete4","_athlete$position2","atheleteKey","itemTitle","athleteNameWithAssists","athleteAssists","_data$entities8","_data$entities9","penaltySummary","_item$team3","_item$athlete5","_athlete$position3","athleteDisplayName","s","_data$entities0","_data$entities1","_playerStats$teams","playerStats","parsedTeams","playerStatsTeam","_section$items2","_item$athlete6","_item$athlete7","_athlete$position4","_item$status$displayN","_item$status$type","featuredStat","label","playerStatus","teamKey"],"mappings":"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","file":"9.maestro-web-sdk.esm.js","sourcesContent":["export const slugify = (str: string) =>\n str\n .toLowerCase()\n .trim()\n .replace(/[\\s\\W-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n\nexport function stringHashCode(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n}\n","export const setImageDimensions = (\n url: string,\n width: number,\n height: number\n) => {\n try {\n const urlObj = new URL(url);\n urlObj.searchParams.set('w', width.toString());\n urlObj.searchParams.set('h', height.toString());\n return urlObj.toString();\n } catch (err) {\n console.warn('Malformed URL:', url, err);\n return url; // Return the original URL if it cannot be parsed\n }\n};\n","import { StatsApiResponse } from './interfaces/IStats';\n\nexport const MOCK_STATS_API_PRE_GAME_RESPONSE: StatsApiResponse = {\n entities: {\n teams: {\n '9': {\n id: '9',\n uid: 's:40~l:59~t:9',\n slug: 'new-york-liberty',\n location: 'New York',\n name: 'Liberty',\n abbreviation: 'NY',\n displayName: 'New York Liberty',\n shortDisplayName: 'Liberty',\n color: '86cebc',\n alternateColor: '000000',\n logo: 'https://a.espncdn.com/i/teamlogos/wnba/500/ny.png',\n statistics: [\n {\n $key: 'fieldGoalPct',\n value: 45.8,\n displayValue: '45.8',\n displayName: 'Field Goal %',\n },\n {\n $key: 'threePointFieldGoalPct',\n value: 34.7,\n displayValue: '34.7',\n displayName: 'Three Point %',\n },\n ],\n homeAway: 'away',\n record: '11-4',\n displayOrder: 1,\n },\n '11': {\n id: '11',\n uid: 's:40~l:59~t:11',\n slug: 'phoenix-mercury',\n location: 'Phoenix',\n name: 'Mercury',\n abbreviation: 'PHX',\n displayName: 'Phoenix Mercury',\n shortDisplayName: 'Mercury',\n color: '3c286e',\n alternateColor: 'e56020',\n logo: 'https://a.espncdn.com/i/teamlogos/wnba/500/phx.png',\n statistics: [\n {\n $key: 'fieldGoalPct',\n value: 43.1,\n displayValue: '43.1',\n displayName: 'Field Goal %',\n },\n {\n $key: 'threePointFieldGoalPct',\n value: 34.8,\n displayValue: '34.8',\n displayName: 'Three Point %',\n },\n ],\n homeAway: 'home',\n record: '12-4',\n displayOrder: 2,\n },\n '14': {\n id: '14',\n uid: 's:40~l:59~t:14',\n abbreviation: 'SEA',\n displayName: 'Seattle Storm',\n logo: 'https://a.espncdn.com/i/teamlogos/wnba/500/sea.png',\n },\n '17': {\n id: '17',\n uid: 's:40~l:59~t:17',\n abbreviation: 'LV',\n displayName: 'Las Vegas Aces',\n logo: 'https://a.espncdn.com/i/teamlogos/wnba/500/lv.png',\n },\n '18': {\n id: '18',\n uid: 's:40~l:59~t:18',\n abbreviation: 'CONN',\n displayName: 'Connecticut Sun',\n logo: 'https://a.espncdn.com/i/teamlogos/wnba/500/conn.png',\n },\n '19': {\n id: '19',\n uid: 's:40~l:59~t:19',\n abbreviation: 'CHI',\n displayName: 'Chicago Sky',\n logo: 'https://a.espncdn.com/i/teamlogos/wnba/500/chi.png',\n },\n '20': {\n id: '20',\n uid: 's:40~l:59~t:20',\n abbreviation: 'ATL',\n displayName: 'Atlanta Dream',\n logo: 'https://a.espncdn.com/i/teamlogos/wnba/500/atl.png',\n },\n '129689': {\n id: '129689',\n uid: 's:40~l:59~t:129689',\n abbreviation: 'GS',\n displayName: 'Golden State Valkyries',\n logo: 'https://a.espncdn.com/i/teamlogos/wnba/500/gs.png',\n },\n '130': {\n id: '121245',\n uid: 's:20~l:28~t:12',\n abbreviation: 'KC',\n displayName: 'Kansas City Chiefs',\n shortDisplayName: 'Kansas City',\n color: 'e31837',\n alternateColor: 'ffcb05',\n logo: 'https://a.espncdn.com/i/teamlogos/nfl/500/kc.png',\n homeAway: 'home',\n },\n '164': {\n id: '11232',\n uid: 's:20~l:28~t:12',\n abbreviation: 'KC',\n displayName: 'Kansas City Chiefs',\n shortDisplayName: 'Kansas City',\n color: 'e31837',\n alternateColor: 'ffcb05',\n logo: 'https://a.espncdn.com/i/teamlogos/nfl/500/kc.png',\n homeAway: 'away',\n },\n },\n athletes: {\n '2529137': {\n id: '2529137',\n uid: 's:40~l:59~a:2529137',\n guid: 'c3d35267-fedd-d8d2-8c24-64ee7aa144ac',\n displayName: 'Natasha Cloud',\n shortName: 'N. Cloud',\n jersey: '9',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529137.jpg?w=184&h=144',\n links: [\n {\n rel: ['playercard', 'desktop', 'athlete'],\n href:\n 'https://www.espnqa.com/wnba/player/_/id/2529137/natasha-cloud',\n text: 'Player Card',\n },\n ],\n position: {\n abbreviation: 'G',\n },\n },\n '4700818': {\n id: '2529137',\n uid: 's:40~l:59~a:2529137',\n guid: 'c3d35267-fedd-d8d2-8c24-64ee7aa144ac',\n displayName: 'Natasha Cloud',\n shortName: 'N. Cloud',\n jersey: '9',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529137.jpg?w=184&h=144',\n links: [\n {\n rel: ['playercard', 'desktop', 'athlete'],\n href:\n 'https://www.espnqa.com/wnba/player/_/id/2529137/natasha-cloud',\n text: 'Player Card',\n },\n ],\n position: {\n abbreviation: 'G',\n },\n },\n '4837356': {\n id: '2529137156425',\n uid: 's:40~l:59~a:2529137',\n guid: 'c3d35267-fedd-d8d2-8c24-64ee7aa144ac',\n displayName: 'Natasha Cloud',\n shortName: 'N. Cloud',\n jersey: '9',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529137.jpg?w=184&h=144',\n links: [\n {\n rel: ['playercard', 'desktop', 'athlete'],\n href:\n 'https://www.espnqa.com/wnba/player/_/id/2529137/natasha-cloud',\n text: 'Player Card',\n },\n ],\n position: {\n abbreviation: 'G',\n },\n },\n '5037871': {\n id: '252913653447',\n uid: 's:40~l:59~a:2529137',\n guid: 'c3d35267-fedd-d8d2-8c24-64ee7aa144ac',\n displayName: 'Natasha Cloud',\n shortName: 'N. Cloud',\n jersey: '9',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529137.jpg?w=184&h=144',\n links: [\n {\n rel: ['playercard', 'desktop', 'athlete'],\n href:\n 'https://www.espnqa.com/wnba/player/_/id/2529137/natasha-cloud',\n text: 'Player Card',\n },\n ],\n position: {\n abbreviation: 'G',\n },\n },\n '4873138': {\n id: '25275349137',\n uid: 's:40~l:59~a:2529137',\n guid: 'c3d35267-fedd-d8d2-8c24-64ee7aa144ac',\n displayName: 'Natasha Cloud',\n shortName: 'N. Cloud',\n jersey: '9',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529137.jpg?w=184&h=144',\n links: [\n {\n rel: ['playercard', 'desktop', 'athlete'],\n href:\n 'https://www.espnqa.com/wnba/player/_/id/2529137/natasha-cloud',\n text: 'Player Card',\n },\n ],\n position: {\n abbreviation: 'G',\n },\n },\n '2529140': {\n id: '2529147630',\n uid: 's:40~l:59~a:2529140',\n guid: '908608e9-31d4-62f2-dfe2-9fee9024e7e2',\n displayName: 'Alyssa Thomas',\n shortName: 'A. Thomas',\n jersey: '25',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529140.jpg?w=184&h=144',\n links: [\n {\n rel: ['playercard', 'desktop', 'athlete'],\n href:\n 'https://www.espnqa.com/wnba/player/_/id/2529140/alyssa-thomas',\n text: 'Player Card',\n },\n ],\n position: {\n abbreviation: 'F',\n },\n },\n '2998928': {\n id: '29989212758',\n uid: 's:40~l:59~a:2998928',\n guid: '4d83d500-2f40-c89e-4f85-62927c5abbeb',\n displayName: 'Breanna Stewart',\n shortName: 'B. Stewart',\n jersey: '30',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2998928.jpg?w=184&h=144',\n links: [\n {\n rel: ['playercard', 'desktop', 'athlete'],\n href:\n 'https://www.espnqa.com/wnba/player/_/id/2998928/breanna-stewart',\n text: 'Player Card',\n },\n ],\n position: {\n abbreviation: 'F',\n },\n },\n '2999101': {\n id: '2999112756501',\n uid: 's:40~l:59~a:2999101',\n guid: 'd5154a93-4a46-71af-8b55-f69328b84b54',\n displayName: 'Jonquel Jones',\n shortName: 'J. Jones',\n jersey: '35',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2999101.jpg?w=184&h=144',\n links: [\n {\n rel: ['playercard', 'desktop', 'athlete'],\n href:\n 'https://www.espnqa.com/wnba/player/_/id/2999101/jonquel-jones',\n text: 'Player Card',\n },\n ],\n position: {\n abbreviation: 'C',\n },\n },\n '4281929': {\n id: '428191234729',\n uid: 's:40~l:59~a:4281929',\n guid: 'd4c403bb-a2c8-ed6b-aeaa-c290d8afea9b',\n displayName: 'Satou Sabally',\n shortName: 'S. Sabally',\n jersey: '0',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4281929.jpg?w=184&h=144',\n links: [\n {\n rel: ['playercard', 'desktop', 'athlete'],\n href:\n 'https://www.espnqa.com/wnba/player/_/id/4281929/satou-sabally',\n text: 'Player Card',\n },\n ],\n position: {\n abbreviation: 'F',\n },\n },\n },\n },\n leaders: [\n {\n displayName: 'Points',\n name: 'pointsPerGame',\n home: {\n team: {\n $key: '11',\n },\n athlete: {\n $key: '4281929',\n statistics: [\n {\n displayValue: '19.1',\n abbreviation: 'PTS',\n },\n {\n displayValue: '39.3',\n abbreviation: 'FG%',\n },\n {\n displayValue: '81.9',\n abbreviation: 'FT%',\n },\n ],\n },\n },\n away: {\n team: {\n $key: '9',\n },\n athlete: {\n $key: '2998928',\n statistics: [\n {\n displayValue: '20.7',\n abbreviation: 'PTS',\n },\n {\n displayValue: '52.0',\n abbreviation: 'FG%',\n },\n {\n displayValue: '81.6',\n abbreviation: 'FT%',\n },\n ],\n },\n },\n },\n {\n displayName: 'Assists',\n name: 'assistsPerGame',\n home: {\n team: {\n $key: '11',\n },\n athlete: {\n $key: '2529140',\n statistics: [\n {\n displayValue: '9.3',\n abbreviation: 'AST',\n },\n {\n displayValue: '3.2',\n abbreviation: 'TO',\n },\n {\n displayValue: '30.3',\n abbreviation: 'MIN',\n },\n ],\n },\n },\n away: {\n team: {\n $key: '9',\n },\n athlete: {\n $key: '2529137',\n statistics: [\n {\n displayValue: '6.5',\n abbreviation: 'AST',\n },\n {\n displayValue: '2.1',\n abbreviation: 'TO',\n },\n {\n displayValue: '28.3',\n abbreviation: 'MIN',\n },\n ],\n },\n },\n },\n {\n displayName: 'Rebounds',\n name: 'reboundsPerGame',\n home: {\n team: {\n $key: '11',\n },\n athlete: {\n $key: '4281929',\n statistics: [\n {\n displayValue: '8.0',\n abbreviation: 'REB',\n },\n {\n displayValue: '6.5',\n abbreviation: 'DR',\n },\n {\n displayValue: '1.5',\n abbreviation: 'OR',\n },\n ],\n },\n },\n away: {\n team: {\n $key: '9',\n },\n athlete: {\n $key: '2999101',\n statistics: [\n {\n displayValue: '9.6',\n abbreviation: 'REB',\n },\n {\n displayValue: '7.7',\n abbreviation: 'DR',\n },\n {\n displayValue: '1.9',\n abbreviation: 'OR',\n },\n ],\n },\n },\n },\n ],\n header: {\n teams: [\n {\n $key: '11',\n linescores: [\n {\n displayValue: '28',\n },\n {\n displayValue: '33',\n },\n {\n displayValue: '27',\n },\n {\n displayValue: '18',\n },\n {\n displayValue: '106',\n },\n ],\n },\n {\n $key: '9',\n linescores: [\n {\n displayValue: '19',\n },\n {\n displayValue: '24',\n },\n {\n displayValue: '27',\n },\n {\n displayValue: '21',\n },\n {\n displayValue: '91',\n },\n ],\n },\n ],\n linescoresHeader: ['1', '2', '3', '4', 'T'],\n },\n predictor: {\n header: 'Matchup Predictor',\n imageUrl: 'https://platform.espnqa.com/lrd/matchuppredictor/401736212',\n homeTeam: {\n team: {\n $key: '11',\n },\n gameProjection: '31.8',\n },\n awayTeam: {\n team: {\n $key: '9',\n },\n gameProjection: '68.2',\n },\n },\n winProbability: {\n imageUrl:\n 'https://platform.espnqa.com/lrd/winprobability/401736212/401736212576',\n homeTeam: {\n team: {\n $key: '11',\n },\n winPercentage: '100',\n },\n awayTeam: {\n team: {\n $key: '9',\n },\n winPercentage: '0',\n },\n },\n previousGames: [\n {\n displayOrder: 2,\n team: {\n $key: '11',\n },\n events: [\n {\n team: {\n $key: '17',\n homeAway: 'home',\n },\n score: '76-70',\n gameResult: 'W',\n },\n {\n team: {\n $key: '18',\n homeAway: 'home',\n },\n score: '83-75',\n gameResult: 'W',\n },\n {\n team: {\n $key: '9',\n homeAway: 'home',\n },\n score: '89-81',\n gameResult: 'W',\n },\n {\n team: {\n $key: '19',\n homeAway: 'home',\n },\n score: '107-86',\n gameResult: 'W',\n },\n {\n team: {\n $key: '9',\n homeAway: 'away',\n },\n score: '106-91',\n gameResult: 'W',\n },\n ],\n },\n {\n displayOrder: 1,\n team: {\n $key: '9',\n },\n events: [\n {\n team: {\n $key: '20',\n homeAway: 'away',\n },\n score: '86-81',\n gameResult: 'W',\n },\n {\n team: {\n $key: '11',\n homeAway: 'away',\n },\n score: '89-81',\n gameResult: 'L',\n },\n {\n team: {\n $key: '14',\n homeAway: 'home',\n },\n score: '89-79',\n gameResult: 'L',\n },\n {\n team: {\n $key: '129689',\n homeAway: 'home',\n },\n score: '81-78',\n gameResult: 'W',\n },\n {\n team: {\n $key: '11',\n homeAway: 'home',\n },\n score: '106-91',\n gameResult: 'L',\n },\n ],\n },\n ],\n gameState: 'in',\n promotion: {\n title: 'Serving Sports Fans. Anytime.',\n description: 'Open the ESPN app on a mobile device to checkout more stats!',\n logo:\n 'https://www.espn.com/redesign/assets/img/ictv/logo_qr/1x/logo_qr_espn.png',\n qrCode:\n 'https://stitcher.espn.com/qr-code/.png?url=sportscenter%3A%2F%2Fx-callback-url%2FshowGame%3FsportName%3Dbasketball%26leagueAbbrev%3Dwnba%26gameId%3D401736212&width=200&height=200',\n backgroundImage:\n 'https://www.espn.com/redesign/assets/img/ictv/bkg_qr_espn.jpg',\n },\n activeAthletes: {\n displayText: 'Active Athletes',\n teams: [\n {\n team: {\n $key: '130',\n },\n athletes: [\n {\n $key: '4700818',\n statLine: '16.6 PTS, 5.2 REB',\n },\n {\n $key: '4837356',\n statLine: '4.1 AST, 2.2 TO',\n },\n ],\n },\n {\n team: {\n $key: '164',\n },\n athletes: [\n {\n $key: '5037871',\n statLine: '19.4 PTS, 4.0 AST',\n },\n {\n $key: '4873138',\n statLine: '7.2 REB, 2.1 OR',\n },\n ],\n },\n ],\n },\n drives: [\n {\n id: 'drive-1',\n team: {\n $key: '9',\n },\n description: '4 PLAYS, 41 YARDS, 2:15',\n plays: [\n {\n id: 'play-1',\n clock: {\n displayValue: '8:21',\n },\n period: {\n number: 1,\n },\n type: {\n text: 'Shotgun',\n },\n text: 'I.Pacheco left tackle to PHI 20 for 24 yards (M.Epps).',\n start: {\n downDistanceText: '2nd & 5 at PHI 44',\n },\n },\n {\n id: 'play-2',\n clock: {\n displayValue: '9:33',\n },\n period: {\n number: 1,\n },\n type: {\n text: 'Shotgun',\n },\n text:\n 'P.Mahomes pass short middle to T.Kelce to KC 48 for 20 yards (T.Edwards).',\n start: {\n downDistanceText: '1st & 10 @ KC 25',\n },\n },\n {\n id: 'play-3',\n clock: {\n displayValue: '10:09',\n },\n period: {\n number: 1,\n },\n type: {\n text: 'Shotgun',\n },\n text: 'I.Pacheco up the middle to KC 28 for 3 yards (J.Hargrave).',\n start: {\n downDistanceText: '1st & 10 @ KC 25',\n },\n },\n {\n id: 'play-4',\n clock: {\n displayValue: '11:15',\n },\n period: {\n number: 1,\n },\n type: {\n text: 'Shotgun',\n },\n text:\n 'P.Mahomes pass complete short right to T.Kelce to KC 35 for 10 yards (J.Bradberry).',\n start: {\n downDistanceText: '2nd & 10 at KC 25',\n },\n },\n ],\n },\n ],\n meta: {\n gp_topic: 'gp-basketball-wnba-401736212',\n picker_topic: 'picker-basketball-wnba',\n gameState: 'in',\n },\n};\n","export interface TeamStatistic {\n $key: string;\n value: number;\n displayValue: string;\n displayName: string;\n}\n\nexport const isTeamStatistic = (data: any): data is TeamStatistic => {\n return (\n data &&\n typeof data === 'object' &&\n '$key' in data &&\n 'value' in data &&\n 'displayValue' in data &&\n 'displayName' in data\n );\n};\n\nexport const isTabbedStatistics = (data: any): data is TeamTabbedStatistics => {\n return (\n data &&\n typeof data === 'object' &&\n 'stats' in data &&\n Array.isArray(data.stats)\n );\n};\n\nexport const isTabbedStatisticsArray = (\n data: any\n): data is TeamTabbedStatistics[] => {\n return Array.isArray(data) && data.every((item) => isTabbedStatistics(item));\n};\n\nexport const isHockeyScoringSummary = (\n data: any\n): data is RawScoringSummary => {\n return (\n data &&\n typeof data === 'object' &&\n 'title' in data &&\n 'sections' in data &&\n data.sections &&\n Array.isArray(data.sections) &&\n data.sections.every(\n (section: any) =>\n section &&\n 'title' in section &&\n 'items' in section &&\n Array.isArray(section.items) &&\n section.items.every(\n (item: any) =>\n item &&\n 'clock' in item &&\n 'title' in item &&\n 'team' in item &&\n 'athlete' in item\n )\n )\n );\n};\n\nexport const isMlbScoringSummary = (data: any): data is RawScoringSummary => {\n return (\n data &&\n typeof data === 'object' &&\n 'title' in data &&\n 'sections' in data &&\n data.sections &&\n Array.isArray(data.sections) &&\n data.sections.some(\n (section: any) =>\n section &&\n 'items' in section &&\n Array.isArray(section.items) &&\n section.items.some(\n (item: any) =>\n item && ('text' in item || 'shortText' in item || 'header' in item)\n )\n )\n );\n};\n\nexport interface TeamTabbedStatistics {\n $key?: string;\n stats?: {\n abbreviation?: string;\n displayName?: string;\n displayValue?: string;\n name?: string;\n }[];\n}\n\nexport interface Team {\n id: string;\n uid: string;\n slug?: string;\n location?: string;\n name?: string;\n abbreviation: string;\n displayName: string;\n shortDisplayName?: string;\n color?: string;\n alternateColor?: string;\n logo?: string;\n statistics?: TeamStatistic[] | TeamTabbedStatistics[];\n homeAway?: string;\n record?: string;\n displayOrder?: number;\n}\n\ninterface AthleteLink {\n rel: string[];\n href: string;\n text: string;\n}\n\ninterface AthletePosition {\n name?: string;\n displayName?: string;\n abbreviation: string;\n}\n\nexport interface Athlete {\n id: string;\n uid: string;\n guid: string;\n displayName: string;\n shortName: string;\n jersey: string;\n headshot?: string;\n links?: AthleteLink[];\n position?: AthletePosition;\n statistics?: {\n $key: string;\n value?: number;\n displayValue: string;\n }[];\n}\n\nexport interface EntityMap<T> {\n [id: string]: T;\n}\n\nexport interface LeaderStatistic {\n displayValue: string;\n abbreviation: string;\n}\n\ninterface LeaderAthlete {\n $key: string;\n statistics?: LeaderStatistic[];\n}\n\ninterface LeaderTeam {\n team: {\n $key: string;\n };\n athlete: LeaderAthlete;\n}\n\nexport interface Leader {\n displayName: string;\n name: string;\n home?: LeaderTeam;\n away?: LeaderTeam;\n}\n\ninterface LineScore {\n displayValue: string;\n}\n\ninterface HeaderTeam {\n $key: string;\n score?: string;\n linescores?: LineScore[];\n}\n\nexport interface Header {\n teams: HeaderTeam[];\n linescoresHeader?: string[];\n}\n\ninterface TeamHeaderTeam {\n $key: string;\n details?: string[];\n linescores?: LineScore[];\n}\n\nexport interface TeamHeader {\n teams: TeamHeaderTeam[];\n linescoresHeader?: string[];\n style?: {\n linescores?: {\n rowHeader?: string;\n };\n };\n}\n\nexport interface PredictorTeam {\n team: {\n $key: string;\n };\n gameProjection: string;\n teamChanceLoss?: string;\n}\n\nexport interface Predictor {\n header: string;\n imageUrl: string;\n homeTeam: PredictorTeam;\n awayTeam: PredictorTeam;\n}\n\nexport interface WinProbabilityTeam {\n team: {\n $key: string;\n };\n winPercentage: string;\n}\n\nexport interface WinProbability {\n imageUrl: string;\n homeTeam: WinProbabilityTeam;\n awayTeam: WinProbabilityTeam;\n}\n\ninterface ActiveAthletesTeam {\n team: {\n $key: string;\n };\n athletes: {\n $key: string;\n statLine: string;\n }[];\n}\n\nexport interface ActiveAthletes {\n displayText: string;\n teams: ActiveAthletesTeam[];\n}\n\nexport interface Meta {\n gp_topic: string;\n picker_topic: string;\n lastUpdatedAt?: string;\n firstPlayWallClock?: string;\n lastPlayWallClock?: string;\n gameState: string;\n syncUrl?: string;\n}\n\nexport interface StatsPromotion {\n backgroundImage?: string;\n description?: string;\n logoPng?: string;\n logo?: string;\n qrCode?: string;\n title?: string;\n}\n\n// Drive Summary interfaces\nexport interface DrivePlay {\n id: string;\n clock: {\n displayValue: string;\n };\n period: {\n number: number;\n };\n type: {\n text: string;\n };\n text: string;\n start: {\n downDistanceText: string;\n };\n}\n\nexport interface Drive {\n id: string;\n team: {\n $key: string;\n };\n description: string;\n plays: DrivePlay[];\n}\n\nexport interface StatsTeam {\n title?: string;\n teams?: {\n $key?: string;\n }[];\n sections?: {\n $key?: string;\n title?: string;\n }[];\n}\n\n// Player Stats interfaces (Pre-Game Season Stats)\nexport interface PlayerStatsAthleteStatistic {\n displayValue?: string;\n label?: string;\n featured?: boolean;\n}\n\nexport interface PlayerStatsAthlete {\n $key?: string;\n statistics?: PlayerStatsAthleteStatistic[];\n}\n\nexport interface PlayerStatsAthleteStatus {\n displayName?: string;\n type?: string;\n}\n\nexport interface PlayerStatsItem {\n title?: string;\n athlete?: PlayerStatsAthlete;\n status?: PlayerStatsAthleteStatus;\n}\n\nexport interface PlayerStatsSection {\n title?: string;\n items?: PlayerStatsItem[];\n}\n\nexport interface PlayerStatsTeam {\n $key?: string;\n sections?: PlayerStatsSection[];\n}\n\nexport interface PlayerStats {\n teams?: PlayerStatsTeam[];\n}\n\nexport interface CareerMatchupStatistic {\n displayValue?: string;\n abbreviation?: string;\n}\n\ntype TextLike =\n | string\n | {\n type?: string;\n displayName?: string;\n };\n\nexport interface CareerMatchupItem {\n status?: TextLike;\n type?: TextLike;\n displayName?: TextLike;\n athlete?: {\n $key?: string;\n };\n}\n\nexport interface CareerMatchupSection {\n items?: CareerMatchupItem[];\n statistics?: CareerMatchupStatistic[];\n}\n\nexport interface CareerMatchup {\n title?: string;\n sections?: CareerMatchupSection[];\n}\n\n// Scoring Summary interfaces - raw API response types\n// These interfaces represent the API response format before transformation\nexport interface RawScoringSummaryItem {\n team?: {\n $key?: string;\n };\n athlete?: {\n $key?: string;\n };\n clock?: string;\n title?: string;\n description?: string;\n header?: {\n title?: string;\n featured?: boolean;\n }[];\n text?: string;\n shortText?: string;\n}\n\nexport interface RawScoringSummarySection {\n title?: string;\n items?: RawScoringSummaryItem[];\n}\n\nexport interface RawScoringSummary {\n title?: string;\n sections?: RawScoringSummarySection[];\n}\n\nexport interface StatsApiResponse {\n entities: {\n teams: EntityMap<Team>;\n athletes?: EntityMap<Athlete>;\n };\n leaders?: Leader[];\n header?: Header;\n teamHeader?: TeamHeader;\n predictor?: Predictor;\n winProbability?: WinProbability;\n gameState: string;\n activeAthletes?: ActiveAthletes;\n meta: Meta;\n promotion?: StatsPromotion;\n drives?: Drive[];\n statTeams?: StatsTeam;\n previousGames?: {\n displayOrder: number;\n team: {\n $key: string;\n };\n events: {\n team: {\n $key: string;\n homeAway: string;\n };\n score: string;\n gameResult: string;\n }[];\n }[];\n scoringSummary?: RawScoringSummary;\n penaltySummary?: {\n title: string;\n sections: {\n title: string;\n items: {\n team: {\n $key: string;\n };\n athlete: {\n $key: string;\n };\n clock: string;\n title: string;\n description: string;\n }[];\n }[];\n };\n playerStats?: PlayerStats;\n careerMatchup?: CareerMatchup;\n}\n","import NetworkManager, {\n HttpMethod,\n} from '../../../../services/NetworkManager/NetworkManager';\nimport { StatsApiResponse } from '../interfaces/IStats';\nimport IMaestroEventDelegate from '@/interfaces/IMaestroEventDelegate';\nimport SDK from '../../../..';\nimport { captureException } from '@/sentry';\n\n/**\n * Service for handling stats-related API calls\n */\nclass StatsService {\n public networkManager: NetworkManager;\n public overrideUrl: string | null = null;\n\n constructor(delegate: IMaestroEventDelegate) {\n this.networkManager = new NetworkManager({\n externalBaseURL: delegate.getStatsAPIBaseURL(),\n });\n }\n\n /**\n * Get stats using a full sync URL (for timecode support)\n *\n * @param timeCode - The timecode in milliseconds, or null for 'latest'\n * @returns Promise with the stats data\n */\n async getStatsByUrl(timeCode: number | null): Promise<StatsApiResponse> {\n return this.networkManager.externalApiRequest({\n endpoint: this.getSyncEndpoint(timeCode),\n method: HttpMethod.GET,\n params: {},\n headers: {},\n });\n }\n\n /**\n * Start polling using a full sync URL (for timecode support)\n *\n * @param timeCode - The timecode in milliseconds, or null for 'latest'\n * @param interval - The polling interval in milliseconds\n * @param onData - Callback for successful data fetch\n * @param onError - Callback for errors\n * @returns Object with a stop function to stop polling\n */\n pollStatsByUrl(\n timeCode: number | null,\n interval: number,\n onData: (data: StatsApiResponse) => void,\n onError?: (error: Error) => void\n ): { stop: () => void } {\n return this.networkManager.pollExternalApiRequest({\n endpoint: this.getSyncEndpoint(timeCode),\n interval,\n method: HttpMethod.GET,\n params: {},\n headers: {},\n onData,\n onError,\n });\n }\n\n /**\n * Build sync URL for timecode-based stats fetching\n * @param timeCode - The timecode in milliseconds, or null for 'latest'\n * @returns Complete sync URL for the fauxcast stats endpoint\n */\n private getSyncEndpoint(timeCode: number | null): string {\n if (this.overrideUrl) {\n console.log('[StatsService] Using overrideUrl:', this.overrideUrl);\n return this.overrideUrl;\n }\n\n const { leagueId, mainId } = this.getIdsFromPageConfig();\n const formattedTimeCode = this.formatTimeCodeForAPI(timeCode);\n\n return `/${leagueId}/${mainId}/en/us/${formattedTimeCode}`;\n }\n\n /**\n * Extract event, league, and main IDs from page config metadata\n * @returns Object containing eventId, leagueId, and mainId\n */\n private getIdsFromPageConfig(): {\n eventId: string;\n leagueId: string;\n mainId: string;\n } {\n const pageConfig = SDK.getPageConfig();\n if (!pageConfig) {\n throw new Error('Page config is null or undefined');\n }\n\n const metadata = pageConfig.page.metadata;\n const eventId = metadata?.external_field_1;\n const leagueField = metadata?.external_field_5;\n\n if (!eventId || !leagueField) {\n const availableFields = Object.keys(metadata || {}).join(', ');\n throw new Error(\n 'Missing eventId or leagueId in page config metadata. Cannot build sync URL. ' +\n `Required fields: external_field_1 (eventId), external_field_5 (leagueId). ` +\n `Available fields: ${availableFields}`\n );\n }\n\n const { leagueId, fauxcastId } = this.parseLeagueData(leagueField);\n const mainId = fauxcastId || eventId;\n\n if (!mainId.trim() || !leagueId.trim()) {\n throw new Error(\n 'MainId or leagueId is empty string in page config metadata'\n );\n }\n\n return { eventId, leagueId, mainId };\n }\n\n /**\n * Parse league data from external_field_5 JSON string\n * @param leagueField - JSON string containing leagueId and optional fauxcastId\n * @returns Parsed league data\n */\n private parseLeagueData(\n leagueField: string\n ): {\n leagueId: string;\n fauxcastId?: string;\n } {\n try {\n const parsed = JSON.parse(leagueField);\n\n if (!parsed.leagueId) {\n throw new Error('leagueId not found in parsed JSON');\n }\n\n return { leagueId: parsed.leagueId, fauxcastId: parsed.fauxcastId };\n } catch (parseError) {\n const error = new Error(\n `Failed to parse leagueId from external_field_5. Raw value: ${leagueField}`\n );\n captureException(error, { rawValue: leagueField, parseError });\n throw error;\n }\n }\n\n /**\n * Format timecode for API consumption\n * @param timeCode - Timecode in milliseconds or null\n * @returns ISO date string, \"pre.json\" for pre-game, or \"latest\" for post-game\n */\n private formatTimeCodeForAPI(timeCode: number | null): string {\n if (!timeCode || timeCode === 0) {\n return 'latest';\n }\n\n if (\n typeof timeCode !== 'number' ||\n isNaN(timeCode) ||\n !isFinite(timeCode)\n ) {\n console.warn('Invalid timecode provided, using \"latest\":', timeCode);\n return 'latest';\n }\n\n try {\n const date = new Date(timeCode);\n\n if (isNaN(date.getTime())) {\n console.warn('Invalid date from timecode, using \"latest\":', timeCode);\n return 'latest';\n }\n\n // For future timecodes, use \"latest\" since we can't fetch future data\n const now = Date.now();\n const timeDiff = now - timeCode;\n if (timeDiff < 0) {\n return 'latest';\n }\n\n // Return ISO date string without milliseconds to match API format\n const isoString = date.toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n return isoString;\n } catch (error) {\n captureException(error as Error, { timeCode });\n console.warn(\n 'Error formatting timecode, using \"latest\":',\n timeCode,\n error\n );\n return 'latest';\n }\n }\n}\n\nexport default StatsService;\n","import { DrivePlay } from '../interfaces/IStats';\n\n/**\n * Get ordinal suffix for a number (1st, 2nd, 3rd, 4th, etc.)\n */\nexport const getOrdinalSuffix = (number: number): string => {\n const lastTwoDigits = number % 100;\n if (lastTwoDigits >= 11 && lastTwoDigits <= 13) {\n return 'th';\n }\n\n const lastDigit = number % 10;\n switch (lastDigit) {\n case 1:\n return 'st';\n case 2:\n return 'nd';\n case 3:\n return 'rd';\n default:\n return 'th';\n }\n};\n\n/**\n * Parse drive description to get individual components\n * Format: \"11 PLAYS, 61 YARDS, 5:43\"\n */\nexport const parseDriveDescription = (description: string) => {\n if (!description) {\n return {\n plays: '0',\n yards: '0',\n time: '',\n };\n }\n\n const parts = description.split(', ');\n\n const plays = parts[0]?.split(' ')[0] || '0';\n const yards = parts[1]?.split(' ')[0] || '0';\n const time = parts[2] || '';\n\n return { plays, yards, time };\n};\n\n/**\n * Format the marquee text for the last play\n */\nexport const formatLastPlayMarquee = (lastPlay: DrivePlay): string => {\n if (!lastPlay?.period?.number) {\n return '';\n }\n const ordinalSuffix = getOrdinalSuffix(lastPlay.period.number);\n return `(${lastPlay.clock.displayValue} - ${lastPlay.period.number}${ordinalSuffix}) (${lastPlay.type.text}) ${lastPlay.text}`;\n};\n","import { Observable } from '../../../../helpers/Observable';\nimport { ViewModel } from '../../../../view-models/ViewModel';\nimport { MOCK_STATS_API_PRE_GAME_RESPONSE } from '../mocks';\nimport {\n Athlete,\n CareerMatchupStatistic,\n DrivePlay,\n isTabbedStatisticsArray,\n isTeamStatistic,\n isHockeyScoringSummary,\n isMlbScoringSummary,\n RawScoringSummary,\n StatsApiResponse,\n Team,\n TeamStatistic,\n} from '../interfaces/IStats';\nimport { AthletesStatisticsItem } from '../view/components/AthletesStatistics/AthletesStatistics';\nimport StatsService from '../services/StatsService';\nimport IMaestroEventDelegate from '@/interfaces/IMaestroEventDelegate';\n\nimport {\n formatLastPlayMarquee,\n parseDriveDescription,\n} from '../utils/driveSummaryUtils';\nimport AnalyticsService from '@/services/AnalyticsService/AnalyticsService';\nimport { setImageDimensions } from '@/helpers/url';\nimport SDK from '@/index';\nimport { captureException } from '@/sentry';\nimport { stringHashCode } from '@/helpers/strings';\n\nconst STATS_ERROR_STATE = {\n NONE: 'none',\n TAB_LOAD_FAILURE: 'tabLoadFailure',\n} as const;\nexport type StatsErrorState = typeof STATS_ERROR_STATE[keyof typeof STATS_ERROR_STATE];\n\ninterface TimecodePollingState {\n isActive: boolean;\n currentUrl: string | null;\n lastUpdateTime: number;\n}\n\n// Constants for configuration\nconst DEFAULT_POLLING_INTERVAL = 10000; // 10 seconds\nconst SMART_POLLING_DELAY = 1000; // 1 second delay after smart polling immediate call\n\ntype GetTeamInfoResponse = {\n awayTeam: {\n index: number;\n id: string;\n logo?: string;\n name: string;\n };\n homeTeam: {\n index: number;\n id: string;\n logo?: string;\n name: string;\n };\n};\n\nexport type HeaderTeamStatItem = {\n type: 'headerTeam';\n isLive: boolean;\n linescoresHeader: string[];\n linescoresRowHeader?: 'teamLogo' | 'teamName';\n statistics?: {\n displayName: string;\n homeTeamValue: number;\n awayTeamValue: number;\n awayTeamDisplayValue: string;\n homeTeamDisplayValue: string;\n }[];\n homeTeam: Pick<\n Team,\n 'color' | 'id' | 'logo' | 'name' | 'abbreviation' | 'record'\n > & {\n linescores: string[];\n details?: string[];\n };\n awayTeam: Pick<\n Team,\n 'color' | 'id' | 'logo' | 'name' | 'abbreviation' | 'record'\n > & {\n linescores: string[];\n details?: string[];\n };\n};\n\ntype HeaderLikeTeam = {\n $key: string;\n score?: string;\n linescores?: { displayValue: string }[];\n details?: string[];\n};\n\ntype RecentGamesPreviousGame = {\n score: string;\n gameResult: string;\n teamLogo?: string;\n homeAway: string;\n};\n\ntype RecentGamesTeam = {\n logo?: string;\n name?: string;\n events: RecentGamesPreviousGame[];\n};\n\nexport type RecentGamesStatsItem = {\n type: 'recentGames';\n awayTeam: RecentGamesTeam;\n homeTeam: RecentGamesTeam;\n};\n\nexport type WinProbabilityStatsItem = {\n type: 'winProbability';\n chartImageUrl: string;\n awayTeam: Pick<Team, 'id' | 'abbreviation' | 'logo'> & {\n winPercentage: string;\n };\n homeTeam: Pick<Team, 'id' | 'abbreviation' | 'logo'> & {\n winPercentage: string;\n };\n};\n\nexport type GameLeadersStatsItem = {\n type: 'gameLeaders';\n displayText: string;\n items: AthletesStatisticsItem[];\n};\n\nexport type ActiveAthletesItem = {\n type: 'activeAthletes';\n displayText: string;\n awayTeam: Pick<Team, 'id' | 'logo' | 'name'>;\n homeTeam: Pick<Team, 'id' | 'logo' | 'name'>;\n athletes: AthletesStatisticsItem[];\n};\n\nexport type StatsPromotionItem = {\n type: 'promotion';\n title: string;\n description: string;\n logo: string;\n qrCode: string;\n backgroundImage: string;\n};\n\nexport type StatsMatchPredictorItem = {\n type: 'matchPredictor';\n header: string;\n imageUrl: string;\n awayTeam: Pick<Team, 'abbreviation' | 'logo' | 'displayName'> & {\n percentage: number;\n };\n homeTeam: Pick<Team, 'abbreviation' | 'logo' | 'displayName'> & {\n percentage: number;\n };\n};\n\nexport type TeamStatsStatistics = {\n displayName: string;\n awayTeamDisplayValue: string;\n homeTeamDisplayValue: string;\n awayTeamValue: number;\n homeTeamValue: number;\n};\n\nexport type TeamStatsItem = {\n type: 'teamStats';\n awayTeam: Pick<Team, 'logo' | 'displayName' | 'color' | 'abbreviation'>;\n homeTeam: Pick<Team, 'logo' | 'displayName' | 'color' | 'abbreviation'>;\n statistics?: TeamStatsStatistics[];\n tabbedStatistics?: Record<\n string,\n {\n title: string;\n entries: TeamStatsStatistics[];\n }\n >;\n title: string;\n};\n\nexport type DriveSummaryItem = {\n type: 'driveSummary';\n id: string;\n team: Pick<Team, 'logo' | 'displayName'>;\n playsQuantity: string;\n yards: string;\n time: string;\n lastPlayMarquee: string;\n plays: DrivePlay[];\n};\n\nexport type IScoreItem = {\n teamLogo?: string;\n teamName?: string;\n athletePosition?: string;\n athleteNumber?: string;\n athleteName?: string;\n athleteAssists?: string;\n athleteThumbnail?: string;\n description: string;\n clock: string;\n};\n\nexport type IScoreSection = {\n title: string;\n scores: IScoreItem[];\n};\n\nexport type ScoringSummarySectionTeam = {\n teamLogo: string;\n teamName: string;\n header: Array<{ featured: boolean; title: string }>;\n text: string;\n shortText: Array<{ featured: boolean; title: string }>;\n headshot?: string;\n athleteShortName?: string;\n athletePosition?: string;\n athleteJersey?: string;\n};\n\nexport type ScoringSummarySection = {\n title: string;\n items: ScoringSummarySectionTeam[];\n};\n\nexport type ScoringSummaryItem = {\n type: 'scoringSummary';\n tag: string;\n title: string;\n sections: ScoringSummarySection[];\n};\n\nexport type PenaltiesItem = {\n type: 'penalties';\n tag: string;\n title: string;\n sections: ScoringSummarySection[];\n};\n\nexport type PlayerSeasonStatsPlayerItem = {\n title: string;\n headshot: string;\n position: string;\n jersey: string;\n featuredStat: { displayValue: string; label: string } | null;\n statistics: Array<{ displayValue: string; label: string }>;\n playerStatus: { displayName: string; type: string } | null;\n};\n\nexport type PlayerSeasonStatsSection = {\n title: string;\n items: PlayerSeasonStatsPlayerItem[];\n};\n\nexport type PlayerSeasonStatsTeam = {\n teamKey: string;\n shortDisplayName: string;\n color: string;\n sections: PlayerSeasonStatsSection[];\n};\n\nexport type PlayerSeasonStatsItem = {\n type: 'playerSeasonStats';\n teams: PlayerSeasonStatsTeam[];\n};\n\nexport interface CareerMatchupViewItem {\n status?: string; // e.g. \"On Deck\"\n isHighlighted?: boolean; // True if status usually indicates warning/attention like \"On Deck\"\n type: string; // e.g. \"batter\" or \"pitcher\"\n displayName: string; // e.g. \"At-Bat\"\n athlete?: Athlete;\n}\n\nexport interface CareerMatchupViewSection {\n items: CareerMatchupViewItem[];\n statistics: CareerMatchupStatistic[];\n}\n\nexport type CareerMatchupStatsItem = {\n type: 'careerMatchup';\n title: string;\n sections: CareerMatchupViewSection[];\n};\n\nexport type StatsItem =\n | HeaderTeamStatItem\n | RecentGamesStatsItem\n | WinProbabilityStatsItem\n | GameLeadersStatsItem\n | ActiveAthletesItem\n | StatsPromotionItem\n | StatsMatchPredictorItem\n | TeamStatsItem\n | DriveSummaryItem\n | ScoringSummaryItem\n | PenaltiesItem\n | PlayerSeasonStatsItem\n | CareerMatchupStatsItem;\n\n// The interval for polling stats data (in milliseconds)\nconst STATS_ITEM_TYPE_CARD_MAP: Record<\n StatsItem['type'],\n keyof StatsApiResponse\n> = {\n activeAthletes: 'activeAthletes',\n driveSummary: 'drives',\n gameLeaders: 'leaders',\n headerTeam: 'header',\n matchPredictor: 'predictor',\n playerSeasonStats: 'playerStats',\n promotion: 'promotion',\n recentGames: 'previousGames',\n scoringSummary: 'scoringSummary',\n teamStats: 'entities',\n winProbability: 'winProbability',\n careerMatchup: 'careerMatchup',\n penalties: 'penaltySummary',\n};\n\nexport class StatsViewModel extends ViewModel {\n isDataLoading = new Observable<boolean>(true);\n hasEverSuccessfullyLoaded = new Observable<boolean>(false);\n eventId: string;\n statsItems = new Observable<StatsItem[]>([]);\n errorState = new Observable<StatsErrorState>('none');\n currentGameState = new Observable<string>('');\n statsService: StatsService;\n analyticsService: AnalyticsService;\n\n // Properties\n private useMockData: boolean = false;\n private lastResponseHash: number | null = null;\n\n // Enhanced timecode-related properties\n private currentPlayerTimeCode: number | null = null;\n private timecodePollingTask: { stop: () => void } | null = null;\n private smartPollingTimeout: number | null = null;\n private timecodePollingState: TimecodePollingState = {\n isActive: false,\n currentUrl: null,\n lastUpdateTime: 0,\n };\n\n constructor(\n eventId: string,\n delegate: IMaestroEventDelegate,\n analyticsService: AnalyticsService,\n options: {\n useMockData?: boolean;\n } = {}\n ) {\n super();\n this.eventId = eventId;\n this.useMockData = options.useMockData || false;\n this.statsService = new StatsService(delegate);\n this.analyticsService = analyticsService;\n }\n\n /**\n * Sets panel-specific data configuration\n * @param panelData - Object containing panel configuration\n */\n setDataToPanel(panelData: Record<string, any>): void {\n if ('overrideUrl' in panelData) {\n const overrideUrl = panelData.overrideUrl;\n if (typeof overrideUrl === 'string' && overrideUrl.length > 0) {\n console.log('[StatsViewModel] Setting overrideUrl:', overrideUrl);\n this.statsService.overrideUrl = overrideUrl;\n }\n }\n }\n\n /**\n * Initialize the ViewModel and start data fetching\n */\n async init(): Promise<void> {\n if (this.useMockData) {\n await this.fetchMockData();\n } else {\n // Get the current timecode from MaestroEventViewModel instead of defaulting to null\n // This ensures we don't override the current timecode when switching tabs\n const currentTimeCode = this.getCurrentTimeCode();\n this.onUpdatePlayerTimeCode(currentTimeCode);\n this.analyticsService.panelView('espnStats');\n }\n }\n\n /**\n * Get the current timecode from the MaestroEventViewModel\n * This prevents the stats panel from always defaulting to real-time data\n */\n private getCurrentTimeCode(): number | null {\n try {\n // Access the MaestroEventViewModel through the imported SDK to get current timecode\n const maestroEventViewModel = SDK.getMaestroEventViewModel();\n if (\n maestroEventViewModel &&\n typeof maestroEventViewModel.getPlayerTimeCode === 'function'\n ) {\n return maestroEventViewModel.getPlayerTimeCode();\n }\n } catch (error) {\n captureException(error, {\n context: 'StatsViewModel.getCurrentTimeCode',\n });\n\n console.warn(\n 'Could not get current timecode from MaestroEventViewModel:',\n error\n );\n }\n\n // Fallback to null (real-time) if we can't get the current timecode\n return null;\n }\n\n onEngage = (type: StatsItem['type']): void => {\n this.analyticsService.panelClick({\n type: 'espnStats',\n name: 'stats_item_clicked',\n metadata: {\n card: [STATS_ITEM_TYPE_CARD_MAP[type]],\n game_state: [this.currentGameState.value],\n },\n });\n };\n\n /**\n * Clean up resources when the ViewModel is no longer needed\n */\n cleanup(): void {\n this.stopTimecodePolling();\n this.clearSmartPollingTimeout();\n this.resetTimecodePollingState();\n }\n\n /**\n * Handle player timecode updates with enhanced logging and validation\n *\n * @param playerTimeCode - The timecode in milliseconds, or null for live\n */\n onUpdatePlayerTimeCode(playerTimeCode: number | null): void {\n this.currentPlayerTimeCode = playerTimeCode;\n\n if (this.useMockData) {\n return;\n }\n\n try {\n this.performSmartPolling(playerTimeCode);\n } catch (error) {\n captureException(error, {\n context: 'StatsViewModel.onUpdatePlayerTimeCode',\n });\n\n console.error('Error handling player timecode update:', error);\n\n this.handleTimecodeError('Error handling player timecode update', error);\n }\n }\n\n clearTabLoadFailure() {\n this.errorState.value = 'none';\n const currentTimeCode = this.getCurrentTimeCode();\n this.onUpdatePlayerTimeCode(currentTimeCode);\n }\n\n /**\n * Implement smart polling strategy: immediate API call + delayed polling resumption\n *\n * @param playerTimeCode - The timecode in milliseconds, or null\n */\n private async performSmartPolling(\n playerTimeCode: number | null\n ): Promise<void> {\n this.clearSmartPollingTimeout();\n this.stopTimecodePolling();\n\n try {\n const immediateStats = await this.statsService.getStatsByUrl(\n playerTimeCode\n );\n\n if (!immediateStats) {\n throw new Error('API returned undefined or null response');\n }\n\n this.processPolledData(immediateStats);\n\n this.smartPollingTimeout = window.setTimeout(() => {\n this.startTimecodePolling(playerTimeCode);\n this.smartPollingTimeout = null;\n }, SMART_POLLING_DELAY);\n } catch (error) {\n captureException(error, {\n context: 'StatsViewModel.performSmartPolling',\n });\n\n console.error('Error during smart polling immediate call:', error);\n\n this.handleTimecodeError(\n 'Error during smart polling immediate call',\n error\n );\n\n this.stopTimecodePolling();\n this.startTimecodePolling(playerTimeCode);\n }\n }\n\n /**\n * Enhanced error handling for timecode-related operations\n *\n * @param context - Description of where the error occurred\n * @param error - The error that occurred\n */\n private handleTimecodeError(context: string, error: unknown): void {\n const errorDetails = {\n context,\n errorType: error?.constructor?.name || 'Unknown',\n errorMessage: error instanceof Error ? error.message : String(error),\n timestamp: new Date().toISOString(),\n currentTimecode: this.currentPlayerTimeCode,\n hasExistingData: this.statsItems.value.length > 0,\n lastResponseHash: this.lastResponseHash,\n url: this.timecodePollingState.currentUrl,\n };\n\n console.error(`${context}:`, errorDetails);\n\n if (!this.hasEverSuccessfullyLoaded.value) {\n this.errorState.value = 'tabLoadFailure';\n }\n }\n\n /**\n * Clear any pending smart polling timeout\n */\n private clearSmartPollingTimeout(): void {\n if (this.smartPollingTimeout) {\n clearTimeout(this.smartPollingTimeout);\n this.smartPollingTimeout = null;\n }\n }\n\n /**\n * Reset timecode polling state\n */\n private resetTimecodePollingState(): void {\n this.timecodePollingState = {\n isActive: false,\n currentUrl: null,\n lastUpdateTime: 0,\n };\n }\n\n /**\n * Start timecode-based polling with enhanced logging\n *\n * @param playerTimeCode - The timecode in milliseconds, or null\n */\n private startTimecodePolling(playerTimeCode: number | null): void {\n this.stopTimecodePolling();\n try {\n this.timecodePollingTask = this.statsService.pollStatsByUrl(\n playerTimeCode,\n DEFAULT_POLLING_INTERVAL,\n (data) => {\n this.processPolledData(data);\n },\n (error) => {\n console.error('Timecode polling error:', error);\n\n this.handleTimecodeError('Timecode polling error', error);\n }\n );\n\n this.timecodePollingState.isActive = true;\n } catch (error) {\n captureException(error, {\n context: 'StatsViewModel.startTimecodePolling',\n });\n\n console.error('Error setting up timecode-based Stats polling:', error);\n\n this.handleTimecodeError(\n 'Error setting up timecode-based Stats polling',\n error\n );\n }\n }\n\n /**\n * Stop timecode-based polling with enhanced logging\n */\n private stopTimecodePolling(): void {\n if (this.timecodePollingTask) {\n this.timecodePollingTask.stop();\n this.timecodePollingTask = null;\n }\n\n this.timecodePollingState.isActive = false;\n }\n\n /**\n * Fetch mock data for testing\n */\n private async fetchMockData(): Promise<void> {\n this.processData(MOCK_STATS_API_PRE_GAME_RESPONSE);\n this.hasEverSuccessfullyLoaded.value = true;\n this.isDataLoading.value = false;\n }\n\n /**\n * Process polled data with hash comparison to avoid unnecessary re-renders\n * Enhanced with comprehensive logging to show data changes\n *\n * @param data - The stats data received from the API\n */\n private processPolledData(data: StatsApiResponse): void {\n const responseString = JSON.stringify(data);\n const currentHash = stringHashCode(responseString);\n\n if (\n this.hasEverSuccessfullyLoaded.value &&\n currentHash === this.lastResponseHash\n ) {\n return;\n }\n\n this.lastResponseHash = currentHash;\n\n this.hasEverSuccessfullyLoaded.value = true;\n this.errorState.value = 'none';\n\n this.processData(data);\n\n if (data.gameState === 'post') {\n this.stopTimecodePolling();\n }\n }\n\n private processData(data: StatsApiResponse) {\n const statsItems: StatsItem[] = [];\n\n const headerTeam = this.parseHeaderTeams(data);\n if (headerTeam) {\n statsItems.push(headerTeam);\n }\n\n const matchPredictor = this.parseMatchPredictor(data);\n if (matchPredictor) {\n statsItems.push(matchPredictor);\n }\n\n const careerMatchup = this.parseCareerMatchup(data);\n if (careerMatchup) {\n statsItems.push(careerMatchup);\n }\n\n const playerSeasonStats = this.parsePlayerSeasonStats(data);\n if (playerSeasonStats) {\n statsItems.push(playerSeasonStats);\n }\n\n const scoringSummary = this.parseScoringSummary(data);\n if (scoringSummary) {\n statsItems.push(scoringSummary);\n }\n\n const winProbability = this.parseWinProbability(data);\n if (winProbability) {\n statsItems.push(winProbability);\n }\n\n // Team Stats (prefer season stats when available; fallback to game stats)\n const teamStats =\n this.parseTeamSeasonStatistics(data) || this.parseTeamsStatistics(data);\n if (teamStats) {\n statsItems.push(teamStats);\n }\n\n const driveSummary = this.parseDriveSummary(data);\n if (driveSummary.length > 0) {\n statsItems.push(...driveSummary);\n }\n\n const penalties = this.parsePenalties(data);\n if (penalties) {\n statsItems.push(penalties);\n }\n\n const activeAthletes = this.parseActiveAthletes(data);\n if (activeAthletes) {\n statsItems.push(activeAthletes);\n }\n\n const gameLeaders = this.parseGameLeaders(data);\n if (gameLeaders) {\n statsItems.push(gameLeaders);\n }\n\n const recentGames = this.parseRecentGames(data);\n if (recentGames) {\n statsItems.push(recentGames);\n }\n\n const promotion = this.parsePromotion(data);\n if (promotion) {\n statsItems.push(promotion);\n }\n\n // Update the stats items observable\n this.statsItems.value = statsItems;\n this.currentGameState.value = data.gameState;\n }\n\n private parseDriveSummary(data: StatsApiResponse): DriveSummaryItem[] {\n const teams = data.entities?.teams;\n const drives = data.drives;\n\n if (!teams || !drives || drives.length === 0) {\n return [];\n }\n\n const result: DriveSummaryItem[] = [];\n for (const drive of drives) {\n if (!drive?.team?.$key) {\n continue;\n }\n\n const plays = [...(drive.plays || [])].reverse();\n const lastPlay = plays[plays.length - 1] || null;\n let lastPlayMarquee = '';\n\n if (lastPlay) {\n lastPlayMarquee = formatLastPlayMarquee(lastPlay);\n }\n\n const { plays: playsQuantity, time, yards } = parseDriveDescription(\n drive.description || ''\n );\n\n const team = teams[drive.team.$key];\n\n if (!team) {\n continue;\n }\n\n result.push({\n id: drive.id,\n lastPlayMarquee,\n plays,\n playsQuantity,\n team,\n time,\n type: 'driveSummary',\n yards,\n });\n }\n\n return result;\n }\n\n private parseTeamsStatistics(data: StatsApiResponse): TeamStatsItem | null {\n const teams = data.entities?.teams;\n\n if (!teams) {\n return null;\n }\n\n const awayTeam = Object.values(teams).find(\n (team) => team.homeAway === 'away'\n );\n\n const homeTeam = Object.values(teams).find(\n (team) => team.homeAway === 'home'\n );\n\n if (!awayTeam || !homeTeam) {\n return null;\n }\n\n // Ensure both teams have statistics\n if (!awayTeam.statistics || !homeTeam.statistics) {\n return null;\n }\n\n const statistics: TeamStatsItem['statistics'] = [];\n for (let i = 0; i < awayTeam.statistics.length; i++) {\n const awayStat = awayTeam.statistics[i];\n const homeStat = homeTeam.statistics[i];\n\n if (isTeamStatistic(awayStat) && isTeamStatistic(homeStat)) {\n statistics.push({\n awayTeamDisplayValue: awayStat?.displayValue || '0',\n displayName: awayStat.displayName || '',\n homeTeamDisplayValue: homeStat?.displayValue || '0',\n awayTeamValue: awayStat?.value || 0,\n homeTeamValue: homeStat?.value || 0,\n });\n }\n }\n\n if (!statistics.length) {\n return null;\n }\n\n return {\n type: 'teamStats',\n title: 'Team Stats',\n awayTeam: {\n logo: awayTeam.logo,\n displayName: awayTeam.displayName || '',\n color: awayTeam.color || '',\n abbreviation: awayTeam.abbreviation || '',\n },\n homeTeam: {\n logo: homeTeam.logo,\n displayName: homeTeam.displayName || '',\n color: homeTeam.color || '',\n abbreviation: homeTeam.abbreviation || '',\n },\n statistics,\n };\n }\n\n private parseTeamSeasonStatistics(\n data: StatsApiResponse\n ): TeamStatsItem | null {\n const teams = data.entities?.teams || {};\n\n if (\n !Object.keys(teams).length ||\n !data.statTeams ||\n !data.statTeams.title ||\n !data.statTeams.sections?.length ||\n !data.statTeams.teams?.length\n ) {\n return null;\n }\n\n const awayTeamKey = data.statTeams.teams[0]?.$key;\n const homeTeamKey = data.statTeams.teams[1]?.$key;\n if (!awayTeamKey || !homeTeamKey) {\n return null;\n }\n const awayTeam = teams[awayTeamKey];\n const homeTeam = teams[homeTeamKey];\n if (!homeTeam || !awayTeam) {\n return null;\n }\n\n const tabbedStatistics: Record<\n string,\n {\n title: string;\n entries: TeamStatsStatistics[];\n }\n > = {};\n data.statTeams.sections.forEach((section) => {\n if (!!section.$key && !!section.title) {\n const sectionKeyStatistics: TeamStatsItem['statistics'] = [];\n if (\n isTabbedStatisticsArray(homeTeam.statistics) &&\n isTabbedStatisticsArray(awayTeam.statistics)\n ) {\n const homeSectionStats = homeTeam.statistics.find(\n (st) => st.$key === section.$key\n );\n const awaySectionStats = awayTeam.statistics.find(\n (st) => st.$key === section.$key\n );\n\n if (\n homeSectionStats &&\n awaySectionStats &&\n awaySectionStats.stats?.length &&\n homeSectionStats.stats?.length\n ) {\n for (let i = 0; i < awaySectionStats.stats.length; i++) {\n const awayStat = awaySectionStats.stats[i];\n const homeStat = homeSectionStats.stats[i];\n\n sectionKeyStatistics.push({\n awayTeamDisplayValue: awayStat?.displayValue || '0',\n displayName: awayStat.displayName || '',\n homeTeamDisplayValue: homeStat?.displayValue || '0',\n awayTeamValue: awayStat?.displayValue\n ? Number(awayStat.displayValue)\n : 0,\n homeTeamValue: homeStat?.displayValue\n ? Number(homeStat.displayValue)\n : 0,\n });\n }\n tabbedStatistics[section.$key] = {\n title: section.title,\n entries: sectionKeyStatistics,\n };\n }\n }\n }\n });\n\n return {\n type: 'teamStats',\n title: data.statTeams.title,\n awayTeam: {\n abbreviation: awayTeam.abbreviation,\n displayName: awayTeam.displayName || '',\n color: awayTeam.color || '',\n logo: awayTeam.logo,\n },\n homeTeam: {\n abbreviation: homeTeam.abbreviation,\n displayName: homeTeam.displayName || '',\n color: homeTeam.color || '',\n logo: homeTeam.logo,\n },\n tabbedStatistics,\n };\n }\n\n private parseMatchPredictor(\n data: StatsApiResponse\n ): StatsMatchPredictorItem | null {\n const teams = data.entities?.teams;\n const predictor = data.predictor;\n\n if (!teams || !predictor || !predictor.homeTeam || !predictor.awayTeam) {\n return null;\n }\n\n // Get team data\n const homeTeam = teams[predictor.homeTeam.team.$key];\n const awayTeam = teams[predictor.awayTeam.team.$key];\n\n if (!homeTeam || !awayTeam) {\n return null;\n }\n\n // Parse percentages\n const homePercentage = parseFloat(predictor.homeTeam.gameProjection);\n const awayPercentage = parseFloat(predictor.awayTeam.gameProjection);\n\n return {\n type: 'matchPredictor',\n header: predictor.header,\n imageUrl: predictor.imageUrl,\n awayTeam: {\n percentage: awayPercentage,\n abbreviation: awayTeam.abbreviation,\n logo: awayTeam.logo,\n displayName: awayTeam.displayName || '',\n },\n homeTeam: {\n percentage: homePercentage,\n abbreviation: homeTeam.abbreviation,\n logo: homeTeam.logo,\n displayName: homeTeam.displayName || '',\n },\n };\n }\n\n private parsePromotion(\n response: StatsApiResponse\n ): StatsPromotionItem | null {\n const promotion = response.promotion;\n\n if (!promotion) {\n return null;\n }\n\n return {\n type: 'promotion',\n title: promotion.title || '',\n description: promotion.description || '',\n logo: promotion.logo || '',\n qrCode: promotion.qrCode || '',\n backgroundImage: promotion.backgroundImage || '',\n };\n }\n\n private parseCareerMatchup(\n response: StatsApiResponse\n ): CareerMatchupStatsItem | null {\n const careerMatchup = response.careerMatchup;\n const athletes = response.entities?.athletes;\n\n if (!careerMatchup || !careerMatchup.sections) {\n return null;\n }\n\n const toText = (value: unknown): string => {\n if (typeof value === 'string') return value;\n if (value && typeof value === 'object') {\n const maybeDisplayName = (value as { displayName?: unknown })\n .displayName;\n if (typeof maybeDisplayName === 'string') return maybeDisplayName;\n }\n return '';\n };\n\n const sections = careerMatchup.sections\n .filter((section) => !!section)\n .map((section) => {\n const items = (section.items || [])\n .filter((item) => !!item)\n .map((item) => {\n const athleteKey = item.athlete?.$key;\n const athlete =\n athletes && athleteKey ? athletes[athleteKey] : undefined;\n // Determine if this item should be highlighted (e.g. warning color)\n // This abstraction allows the View to be sport-agnostic.\n // Currently only \"On Deck\" in MLB triggers this.\n const statusText = toText(item.status);\n const isHighlighted = statusText === 'On Deck';\n\n return {\n status: statusText,\n type: toText(item.type) || '',\n displayName: toText(item.displayName) || '',\n athlete,\n isHighlighted,\n };\n });\n\n const statistics = (section.statistics || [])\n .filter((stat) => !!stat)\n .map((stat) => ({\n abbreviation: stat.abbreviation || '',\n displayValue: stat.displayValue || '',\n }));\n\n return {\n items,\n statistics,\n };\n });\n\n return {\n type: 'careerMatchup',\n title: careerMatchup.title || '',\n sections,\n };\n }\n\n private parseHeaderTeams(\n response: StatsApiResponse\n ): HeaderTeamStatItem | null {\n return (\n this.parseHeaderTeamsFromTeamHeader(response) ||\n this.parseHeaderTeamsFromHeader(response)\n );\n }\n\n private parseHeaderTeamsFromHeader(\n response: StatsApiResponse\n ): HeaderTeamStatItem | null {\n const headerTeams: HeaderLikeTeam[] =\n ((response.header?.teams as unknown) as HeaderLikeTeam[] | undefined) ||\n [];\n\n if (headerTeams.length === 0) {\n return null;\n }\n\n return this.buildHeaderTeamsItem({\n response,\n headerTeams,\n linescoresHeader: response.header?.linescoresHeader || [],\n linescoresRowHeader: undefined,\n isLiveFromHeaderSource: false,\n });\n }\n\n private parseHeaderTeamsFromTeamHeader(\n response: StatsApiResponse\n ): HeaderTeamStatItem | null {\n const headerTeams: HeaderLikeTeam[] =\n ((response.header?.teams as unknown) as HeaderLikeTeam[] | undefined) ||\n [];\n const teamHeaderTeams: HeaderLikeTeam[] =\n ((response.teamHeader?.teams as unknown) as\n | HeaderLikeTeam[]\n | undefined) || [];\n\n if (teamHeaderTeams.length === 0) {\n return null;\n }\n\n const teamHeaderHasLinescores = teamHeaderTeams.some(\n (t) => Array.isArray(t.linescores) && t.linescores.length > 0\n );\n const teamHeaderHasLinescoresHeader =\n (response.teamHeader?.linescoresHeader?.length || 0) > 0;\n\n if (\n !teamHeaderHasLinescores &&\n !teamHeaderHasLinescoresHeader &&\n headerTeams.length > 0\n ) {\n return null;\n }\n\n const linescoresRowHeader =\n response.teamHeader?.style?.linescores?.rowHeader === 'teamLogo'\n ? 'teamLogo'\n : undefined;\n\n return this.buildHeaderTeamsItem({\n response,\n headerTeams: teamHeaderTeams,\n linescoresHeader: response.teamHeader?.linescoresHeader || [],\n linescoresRowHeader,\n isLiveFromHeaderSource:\n teamHeaderHasLinescores || teamHeaderHasLinescoresHeader,\n });\n }\n\n private buildHeaderTeamsItem(params: {\n response: StatsApiResponse;\n headerTeams: HeaderLikeTeam[];\n linescoresHeader: string[];\n linescoresRowHeader?: 'teamLogo' | 'teamName';\n isLiveFromHeaderSource: boolean;\n }): HeaderTeamStatItem | null {\n const {\n response,\n headerTeams,\n linescoresHeader: rawLinescoresHeader,\n linescoresRowHeader,\n isLiveFromHeaderSource,\n } = params;\n\n const teams = response.entities?.teams;\n if (!teams || headerTeams.length === 0) {\n return null;\n }\n\n const homeTeamHeader = headerTeams.find((t) => {\n const team = teams[t.$key];\n return team && team.homeAway === 'home';\n });\n\n const awayTeamHeader = headerTeams.find((t) => {\n const team = teams[t.$key];\n return team && team.homeAway === 'away';\n });\n\n // If home/away isn't provided, fall back to list order.\n const fallbackAwayTeamHeader = headerTeams[0];\n const fallbackHomeTeamHeader = headerTeams[1];\n\n const resolvedHomeTeamHeader = homeTeamHeader || fallbackHomeTeamHeader;\n const resolvedAwayTeamHeader = awayTeamHeader || fallbackAwayTeamHeader;\n\n if (!resolvedHomeTeamHeader || !resolvedAwayTeamHeader) {\n return null;\n }\n\n const homeTeam = teams[resolvedHomeTeamHeader.$key];\n const awayTeam = teams[resolvedAwayTeamHeader.$key];\n\n if (!homeTeam || !awayTeam) {\n return null;\n }\n\n const statistics: {\n displayName: string;\n homeTeamValue: number;\n awayTeamValue: number;\n awayTeamDisplayValue: string;\n homeTeamDisplayValue: string;\n }[] = [];\n\n const statisticsSet = new Set<string>();\n const rawAwayStats = awayTeam.statistics || [];\n const rawHomeStats = homeTeam.statistics || [];\n const awayStatistics = (rawAwayStats as TeamStatistic[]).filter(\n isTeamStatistic\n );\n const homeStatistics = (rawHomeStats as TeamStatistic[]).filter(\n isTeamStatistic\n );\n\n [...awayStatistics, ...homeStatistics].forEach((st) => {\n statisticsSet.add(st.$key);\n });\n\n // Ensure all statistics from both teams are included\n statisticsSet.forEach((statKey) => {\n const awayStat = awayStatistics.find((st) => st.$key === statKey);\n const homeStat = homeStatistics.find((st) => st.$key === statKey);\n\n if (!awayStat || !homeStat) {\n return;\n }\n\n statistics.push({\n displayName: awayStat?.displayName || homeStat?.displayName || '',\n awayTeamValue: awayStat?.value || 0,\n homeTeamValue: homeStat?.value || 0,\n awayTeamDisplayValue: awayStat?.displayValue || '0',\n homeTeamDisplayValue: homeStat?.displayValue || '0',\n });\n });\n\n const buildLinescores = (t: HeaderLikeTeam): string[] => {\n if (t.linescores && t.linescores.length > 0) {\n return t.linescores.map((l) => l.displayValue);\n }\n if (typeof t.score === 'string' && t.score.length > 0) {\n return [t.score];\n }\n return [];\n };\n\n const maybeDetails = (t: HeaderLikeTeam): string[] | undefined => {\n if (Array.isArray(t.details) && t.details.filter(Boolean).length > 0) {\n return t.details.filter(Boolean);\n }\n return undefined;\n };\n\n const awayDetails = maybeDetails(resolvedAwayTeamHeader);\n const homeDetails = maybeDetails(resolvedHomeTeamHeader);\n\n let linescoresHeader = rawLinescoresHeader;\n let awayTeamLinescores = buildLinescores(resolvedAwayTeamHeader);\n let homeTeamLinescores = buildLinescores(resolvedHomeTeamHeader);\n\n // If more than 9 innings are present, show only the last 9 innings plus R, H, E\n const hasLinescoresAndHeader =\n linescoresHeader.length > 0 &&\n (awayTeamLinescores.length > 0 || homeTeamLinescores.length > 0);\n\n if (hasLinescoresAndHeader && linescoresRowHeader === 'teamLogo') {\n const lastThreeHeaders = linescoresHeader.slice(-3);\n const isMlbFormat =\n lastThreeHeaders.includes('R') ||\n lastThreeHeaders.includes('H') ||\n lastThreeHeaders.includes('E');\n\n if (isMlbFormat && linescoresHeader.length > 12) {\n // More than 9 innings + 3 stats (R, H, E)\n const statsCount = 3; // R, H, E\n const inningsCount = linescoresHeader.length - statsCount;\n const maxInningsToShow = 9;\n\n if (inningsCount > maxInningsToShow) {\n const inningsToRemove = inningsCount - maxInningsToShow;\n\n // Slice header to keep last 9 innings + stats (R, H, E)\n linescoresHeader = linescoresHeader.slice(inningsToRemove);\n\n // Apply same slicing to team linescores\n awayTeamLinescores = awayTeamLinescores.slice(inningsToRemove);\n homeTeamLinescores = homeTeamLinescores.slice(inningsToRemove);\n }\n }\n }\n\n const isLive =\n response.gameState === 'in' ||\n response.gameState === 'post' ||\n isLiveFromHeaderSource;\n\n return {\n type: 'headerTeam',\n linescoresHeader,\n linescoresRowHeader,\n isLive,\n statistics,\n awayTeam: {\n abbreviation: awayTeam.abbreviation,\n color: awayTeam.color,\n id: awayTeam.id,\n linescores: awayTeamLinescores,\n logo: awayTeam.logo,\n name: awayTeam.name,\n record: awayTeam.record,\n ...(awayDetails ? { details: awayDetails } : {}),\n },\n homeTeam: {\n abbreviation: homeTeam.abbreviation,\n color: homeTeam.color,\n id: homeTeam.id,\n linescores: homeTeamLinescores,\n logo: homeTeam.logo,\n name: homeTeam.name,\n record: homeTeam.record,\n ...(homeDetails ? { details: homeDetails } : {}),\n },\n };\n }\n\n private parseRecentGames(\n response: StatsApiResponse\n ): RecentGamesStatsItem | null {\n const teams = response.entities?.teams;\n const previousGames = response.previousGames;\n\n if (!teams || !previousGames || previousGames.length === 0) {\n return null;\n }\n\n const awayTeamPreviousGame = previousGames.find(\n (game) => game?.displayOrder === 1\n );\n\n const homeTeamPreviousGame = previousGames.find(\n (game) => game?.displayOrder === 2\n );\n\n if (!awayTeamPreviousGame || !homeTeamPreviousGame) {\n return null;\n }\n\n if (!awayTeamPreviousGame.events || !homeTeamPreviousGame.events) {\n return null;\n }\n\n if (!awayTeamPreviousGame.team?.$key || !homeTeamPreviousGame.team?.$key) {\n return null;\n }\n\n const awayTeam = teams[awayTeamPreviousGame.team.$key];\n const homeTeam = teams[homeTeamPreviousGame.team.$key];\n\n if (!awayTeam || !homeTeam) {\n return null;\n }\n\n const previousGame: RecentGamesStatsItem = {\n type: 'recentGames',\n awayTeam: {\n events: [...awayTeamPreviousGame.events]\n .reverse()\n .filter((event) => event?.team?.$key)\n .map((event) => {\n const eventTeam = teams[event.team.$key];\n\n return {\n gameResult: event.gameResult,\n homeAway: event.team.homeAway,\n score: event.score,\n teamLogo: eventTeam?.logo,\n };\n }),\n logo: awayTeam.logo,\n name: awayTeam.shortDisplayName,\n },\n homeTeam: {\n events: [...homeTeamPreviousGame.events]\n .reverse()\n .filter((event) => event?.team?.$key)\n .map((event) => {\n const eventTeam = teams[event.team.$key];\n\n return {\n gameResult: event.gameResult,\n homeAway: event.team.homeAway,\n score: event.score,\n teamLogo: eventTeam?.logo,\n };\n }),\n logo: homeTeam.logo,\n name: homeTeam.shortDisplayName,\n },\n };\n\n return previousGame;\n }\n\n private parseWinProbability(\n response: StatsApiResponse\n ): WinProbabilityStatsItem | null {\n const winProbability = response.winProbability;\n if (\n !winProbability ||\n !winProbability.homeTeam ||\n !winProbability.awayTeam\n ) {\n return null;\n }\n\n const teams = response.entities?.teams;\n if (!teams) {\n return null;\n }\n\n const homeTeam = teams[winProbability.homeTeam.team.$key];\n const awayTeam = teams[winProbability.awayTeam.team.$key];\n\n if (!homeTeam || !awayTeam) {\n return null;\n }\n\n return {\n type: 'winProbability',\n chartImageUrl: winProbability.imageUrl,\n awayTeam: {\n id: awayTeam.id,\n abbreviation: awayTeam.abbreviation,\n logo: awayTeam.logo,\n winPercentage: winProbability.awayTeam.winPercentage,\n },\n homeTeam: {\n id: homeTeam.id,\n abbreviation: homeTeam.abbreviation,\n logo: homeTeam.logo,\n winPercentage: winProbability.homeTeam.winPercentage,\n },\n };\n }\n\n private parseGameLeaders(\n response: StatsApiResponse\n ): GameLeadersStatsItem | null {\n if (!response.entities?.athletes || !response.entities?.teams) {\n return null;\n }\n\n const leaders = response.leaders;\n const isPre = response.gameState === 'pre';\n if (!leaders || leaders.length === 0) {\n return null;\n }\n\n const items: GameLeadersStatsItem['items'] = [];\n for (const leader of leaders) {\n if (!leader.away || !leader.home) {\n continue;\n }\n\n if (!leader.away?.athlete?.$key || !leader.home?.athlete?.$key) {\n continue;\n }\n\n const awayAthlete = response.entities.athletes[leader.away.athlete.$key];\n const homeAthlete = response.entities.athletes[leader.home.athlete.$key];\n\n if (!awayAthlete || !homeAthlete) {\n continue;\n }\n\n const awayAthleteStatistics = leader.away.athlete.statistics || [];\n const homeAthleteStatistics = leader.home.athlete.statistics || [];\n\n const value: GameLeadersStatsItem['items'][number] = {\n displayName: leader.displayName,\n awayAthlete: {\n id: awayAthlete.id,\n displayName: awayAthlete.displayName,\n headshot: awayAthlete.headshot\n ? setImageDimensions(awayAthlete.headshot, 256, 144)\n : '',\n position: awayAthlete.position?.abbreviation || '-',\n shortName: awayAthlete.shortName,\n jersey: awayAthlete.jersey,\n statistics: awayAthleteStatistics,\n },\n homeAthlete: {\n id: homeAthlete.id,\n displayName: homeAthlete.displayName,\n headshot: homeAthlete.headshot\n ? setImageDimensions(homeAthlete.headshot, 256, 144)\n : '',\n position: homeAthlete.position?.abbreviation || '-',\n shortName: homeAthlete.shortName,\n jersey: homeAthlete.jersey,\n statistics: homeAthleteStatistics,\n },\n };\n\n items.push(value);\n }\n\n if (!items.length) {\n return null;\n }\n\n return {\n type: 'gameLeaders',\n items,\n displayText: isPre ? 'Season Leaders' : 'Game Leaders',\n };\n }\n\n private parseActiveAthletes(\n response: StatsApiResponse\n ): ActiveAthletesItem | null {\n const activeAthletes = response.activeAthletes;\n const { awayTeam, homeTeam } = this.getActiveAthletesTeamInfo(response);\n const athletes: ActiveAthletesItem['athletes'] = [];\n\n if (\n !response.entities?.athletes ||\n !activeAthletes ||\n awayTeam.index === -1 ||\n homeTeam.index === -1\n ) {\n return null;\n }\n\n for (\n let i = 0;\n i < activeAthletes.teams[awayTeam.index].athletes.length;\n i++\n ) {\n const awayAthlete = activeAthletes.teams[awayTeam.index].athletes[i];\n const homeAthlete = activeAthletes.teams[homeTeam.index].athletes[i];\n\n if (!awayAthlete?.$key || !homeAthlete?.$key) {\n continue;\n }\n\n const awayAthleteInfo = response.entities.athletes[awayAthlete.$key];\n const homeAthleteInfo = response.entities.athletes[homeAthlete.$key];\n\n if (!awayAthleteInfo || !homeAthleteInfo) {\n continue;\n }\n\n const awayAthleteStatistics: {\n displayValue: string;\n abbreviation: string;\n value: number;\n }[] = [];\n const homeAthleteStatistics: {\n displayValue: string;\n abbreviation: string;\n value: number;\n }[] = [];\n\n const awayStatLine = awayAthlete.statLine || '';\n const homeStatLine = homeAthlete.statLine || '';\n\n awayStatLine\n .trim()\n .split(',')\n .forEach((st, index) => {\n const [awayDisplayValue, awayAbbreviation] = st.trim().split(' ');\n const homeStats = homeStatLine.trim().split(',')[index];\n\n if (!homeStats) {\n return;\n }\n\n const [homeDisplayValue, homeAbbreviation] = homeStats\n .trim()\n .split(' ');\n\n awayAthleteStatistics.push({\n displayValue: awayDisplayValue || '0',\n abbreviation: awayAbbreviation || '-',\n value: parseFloat(awayDisplayValue) || 0,\n });\n\n homeAthleteStatistics.push({\n displayValue: homeDisplayValue || '0',\n abbreviation: homeAbbreviation || '-',\n value: parseFloat(homeDisplayValue) || 0,\n });\n });\n\n athletes.push({\n awayAthlete: {\n id: awayAthleteInfo.id,\n displayName: awayAthleteInfo.displayName,\n headshot: awayAthleteInfo.headshot\n ? setImageDimensions(awayAthleteInfo.headshot, 256, 144)\n : '',\n position: awayAthleteInfo.position?.abbreviation || '-',\n shortName: awayAthleteInfo.shortName,\n jersey: awayAthleteInfo.jersey,\n statistics: awayAthleteStatistics,\n minifiedStatistics: awayAthlete.statLine,\n },\n homeAthlete: {\n id: homeAthleteInfo.id,\n displayName: homeAthleteInfo.displayName,\n headshot: homeAthleteInfo.headshot\n ? setImageDimensions(homeAthleteInfo.headshot, 256, 144)\n : '',\n position: homeAthleteInfo.position?.abbreviation || '-',\n shortName: homeAthleteInfo.shortName,\n jersey: homeAthleteInfo.jersey,\n statistics: homeAthleteStatistics,\n minifiedStatistics: homeAthlete.statLine,\n },\n });\n }\n\n if (!athletes.length) {\n return null;\n }\n\n return {\n type: 'activeAthletes',\n awayTeam,\n homeTeam,\n athletes,\n displayText: activeAthletes.displayText,\n };\n }\n\n private getActiveAthletesTeamInfo(\n data: StatsApiResponse\n ): GetTeamInfoResponse {\n const teams = data.activeAthletes?.teams || [];\n let awayTeam: GetTeamInfoResponse['awayTeam'] = {\n index: -1,\n id: '',\n logo: '',\n name: '-',\n };\n let homeTeam: GetTeamInfoResponse['homeTeam'] = {\n index: -1,\n id: '',\n logo: '',\n name: '-',\n };\n\n const entitiesTeams = data.entities?.teams;\n if (!entitiesTeams) {\n return { awayTeam, homeTeam };\n }\n\n for (let i = 0; i < teams.length; i++) {\n const teamInfo = teams[i];\n const team = entitiesTeams[teamInfo.team.$key];\n\n if (!team) {\n continue;\n }\n\n if (team.homeAway === 'away') {\n awayTeam = {\n index: i,\n id: team.id,\n logo: team.logo,\n name: team.name || '-',\n };\n } else if (team.homeAway === 'home') {\n homeTeam = {\n index: i,\n id: team.id,\n logo: team.logo,\n name: team.name || '-',\n };\n }\n }\n\n return { awayTeam, homeTeam };\n }\n\n private parseScoringSummary(\n data: StatsApiResponse\n ): ScoringSummaryItem | null {\n const scoringSummary = data.scoringSummary;\n if (!scoringSummary || !scoringSummary.sections) {\n return null;\n }\n\n const teams = data.entities?.teams;\n const athletes = data.entities?.athletes;\n\n // Handle MLB Scoring Summary\n if (isMlbScoringSummary(scoringSummary)) {\n const sections: ScoringSummarySection[] = [];\n\n for (const section of scoringSummary.sections) {\n if (!section.title || !section.items?.length) {\n continue;\n }\n const items: ScoringSummarySectionTeam[] = [];\n for (const item of section.items) {\n if (!item?.team?.$key || !item?.athlete?.$key) {\n continue;\n }\n const team = teams?.[item.team.$key];\n const athlete = athletes?.[item.athlete.$key];\n const athleteNumber = `#${athlete?.jersey || ''}`;\n const athleteName = athlete?.shortName || '';\n\n if (!team || !athlete) {\n continue;\n }\n\n const textParts: Array<{ featured: boolean; title: string }> = [];\n if (athleteNumber) {\n textParts.push({\n featured: false,\n title: athleteNumber,\n });\n }\n if (athleteName) {\n textParts.push({\n featured: true,\n title: athleteName,\n });\n }\n\n items.push({\n teamLogo: team?.logo || '',\n teamName: team?.abbreviation,\n headshot: athlete?.headshot\n ? setImageDimensions(athlete.headshot, 200, 144)\n : undefined,\n athleteShortName: athlete?.shortName || '',\n athleteJersey: athlete?.jersey || '',\n athletePosition: athlete?.position?.abbreviation || '',\n text: item?.text || '',\n shortText: textParts,\n header: (item?.header || []).map((h, index) => ({\n featured: h.featured ?? false,\n title: `${h.title ?? ''}${index === 0 ? ',' : ''}`,\n })),\n });\n }\n if (items.length > 0) {\n sections.push({\n title: section.title,\n items,\n });\n }\n }\n\n if (sections.length === 0) {\n return null;\n }\n return {\n type: 'scoringSummary',\n tag: 'mlb',\n title: scoringSummary.title || 'Scoring Summary',\n sections,\n };\n }\n // Handle Hockey Scoring Summary - transform to unified format\n else if (isHockeyScoringSummary(scoringSummary)) {\n const hockeySummary = scoringSummary as RawScoringSummary;\n const sections: ScoringSummarySection[] = [];\n\n for (const section of hockeySummary.sections || []) {\n const items: ScoringSummarySectionTeam[] = [];\n\n for (const item of section.items || []) {\n if (!item?.team?.$key || !item?.athlete?.$key || !item?.title) {\n continue;\n }\n\n const team =\n item.team && item.team.$key ? teams?.[item.team.$key] : undefined;\n const atheleteKey = item.athlete?.$key || '';\n const athlete = athletes?.[atheleteKey];\n const itemTitle = item.title || '';\n const [athleteNumber, ...athleteNameWithAssists] = itemTitle.split(\n ' '\n );\n let athleteAssists = '';\n let athleteName = '';\n if (athleteNameWithAssists.length > 0) {\n athleteAssists =\n athleteNameWithAssists[athleteNameWithAssists.length - 1];\n athleteName = athleteNameWithAssists.slice(0, -1).join(' ');\n }\n\n const header: Array<{ featured: boolean; title: string }> = [];\n if (item.clock) {\n header.push({ featured: true, title: item.clock });\n }\n if (team?.abbreviation) {\n header.push({ featured: false, title: team.abbreviation });\n }\n\n const textParts: Array<{ featured: boolean; title: string }> = [];\n if (athleteNumber) {\n textParts.push({ featured: false, title: athleteNumber });\n }\n if (athleteName) {\n textParts.push({ featured: true, title: athleteName });\n }\n if (athleteAssists) {\n textParts.push({ featured: false, title: athleteAssists });\n }\n\n items.push({\n teamLogo: team?.logo || '',\n teamName: team?.abbreviation || '',\n header,\n text: item?.description || '',\n shortText: textParts,\n headshot: athlete?.headshot\n ? setImageDimensions(athlete.headshot, 200, 144)\n : undefined,\n athleteShortName: athleteName,\n athletePosition: athlete?.position?.abbreviation || '',\n athleteJersey: athleteNumber,\n });\n }\n\n if (items.length > 0) {\n sections.push({\n title: section?.title || '',\n items,\n });\n }\n }\n\n if (sections.length === 0) {\n return null;\n }\n\n return {\n type: 'scoringSummary',\n tag: 'hockey',\n title: hockeySummary.title || 'Scoring Summary',\n sections,\n };\n }\n\n return null;\n }\n\n private parsePenalties(data: StatsApiResponse): PenaltiesItem | null {\n const penalties = data.penaltySummary;\n if (!penalties || !penalties.sections) {\n return null;\n }\n\n const teams = data.entities?.teams;\n const athletes = data.entities?.athletes;\n\n const sections = penalties.sections.map(\n (section): ScoringSummarySection => {\n const items = section.items\n .filter((item) => item?.team?.$key && item?.athlete?.$key)\n .map(\n (item): ScoringSummarySectionTeam => {\n const team = teams?.[item.team.$key];\n const athlete = athletes?.[item.athlete.$key];\n const [athleteNumber, ...athleteName] = item.title.split(' ');\n const athleteDisplayName = (athleteName ?? []).join(' ') || '';\n\n const textParts: Array<{ featured: boolean; title: string }> = [];\n if (athleteNumber) {\n textParts.push({\n featured: false,\n title: athleteNumber,\n });\n }\n if (athleteDisplayName) {\n textParts.push({\n featured: true,\n title: athleteDisplayName,\n });\n }\n\n return {\n teamLogo: team?.logo || '',\n teamName: team?.abbreviation || '',\n header: [{ title: item.clock || '', featured: false }],\n text: item.description || '',\n shortText: textParts,\n headshot: athlete?.headshot\n ? setImageDimensions(athlete.headshot, 200, 144)\n : undefined,\n athleteShortName: athleteName.join(' '),\n athletePosition: athlete?.position?.abbreviation || '',\n athleteJersey: athleteNumber || '',\n };\n }\n );\n\n return {\n title: section.title,\n items,\n };\n }\n );\n\n if (!sections.length || sections.every((s) => s.items.length === 0)) {\n return null;\n }\n\n return {\n type: 'penalties',\n tag: 'penalties',\n title: penalties.title,\n sections,\n };\n }\n\n private parsePlayerSeasonStats(\n data: StatsApiResponse\n ): PlayerSeasonStatsItem | null {\n const playerStats = data.playerStats;\n const teams = data.entities?.teams;\n const athletes = data.entities?.athletes;\n\n if (!playerStats?.teams?.length || !teams) {\n return null;\n }\n\n const parsedTeams: PlayerSeasonStatsTeam[] = [];\n\n for (const playerStatsTeam of playerStats.teams) {\n if (!playerStatsTeam.$key) {\n continue;\n }\n\n const team = teams[playerStatsTeam.$key];\n if (!team) {\n continue;\n }\n\n const sections: PlayerSeasonStatsSection[] = [];\n\n for (const section of playerStatsTeam.sections || []) {\n if (!section.title || !section.items?.length) {\n continue;\n }\n\n const items: PlayerSeasonStatsPlayerItem[] = [];\n\n for (const item of section.items) {\n if (!item.title) {\n continue;\n }\n\n const athleteKey = item.athlete?.$key;\n const athlete: Athlete | undefined = athleteKey\n ? athletes?.[athleteKey]\n : undefined;\n\n const statistics = item.athlete?.statistics || [];\n const featuredStat = statistics.find((s) => s.featured);\n\n items.push({\n title: item.title,\n headshot: athlete?.headshot\n ? setImageDimensions(athlete.headshot, 256, 144)\n : '',\n position: athlete?.position?.abbreviation || '',\n jersey: athlete?.jersey || '',\n featuredStat: featuredStat\n ? {\n displayValue: featuredStat.displayValue || '',\n label: featuredStat.label || '',\n }\n : null,\n statistics: statistics\n .filter((s) => !s.featured)\n .map((s) => ({\n displayValue: s.displayValue || '',\n label: s.label || '',\n })),\n playerStatus: item?.status\n ? {\n displayName: item.status.displayName ?? '',\n type: item.status.type ?? '',\n }\n : null,\n });\n }\n\n if (items.length > 0) {\n sections.push({\n title: section.title,\n items,\n });\n }\n }\n\n if (sections.length > 0) {\n parsedTeams.push({\n teamKey: playerStatsTeam.$key,\n shortDisplayName: team.shortDisplayName || team.displayName || '',\n color: team.color || '',\n sections,\n });\n }\n }\n\n if (parsedTeams.length === 0) {\n return null;\n }\n\n return {\n type: 'playerSeasonStats',\n teams: parsedTeams,\n };\n }\n}\n\nexport default StatsViewModel;\n"],"sourceRoot":""}