@maestro_io/maestro-web-sdk 5.2.1 → 5.2.2

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 (688) hide show
  1. package/README.md +25 -0
  2. package/dist/index.d.ts +4 -3
  3. package/dist/maestro-web-sdk.esm.js +3 -3
  4. package/dist/maestro-web-sdk.esm.js.map +1 -1
  5. package/dist/maestro-web-sdk.umd.js +3 -3
  6. package/dist/maestro-web-sdk.umd.js.map +1 -1
  7. package/package.json +1 -1
  8. package/dist/1.maestro-web-sdk.esm.js +0 -2
  9. package/dist/1.maestro-web-sdk.esm.js.map +0 -1
  10. package/dist/10.maestro-web-sdk.esm.js +0 -2
  11. package/dist/10.maestro-web-sdk.esm.js.map +0 -1
  12. package/dist/11.maestro-web-sdk.esm.js +0 -2
  13. package/dist/11.maestro-web-sdk.esm.js.map +0 -1
  14. package/dist/12.maestro-web-sdk.esm.js +0 -2
  15. package/dist/12.maestro-web-sdk.esm.js.map +0 -1
  16. package/dist/13.maestro-web-sdk.esm.js +0 -2
  17. package/dist/13.maestro-web-sdk.esm.js.map +0 -1
  18. package/dist/14.maestro-web-sdk.esm.js +0 -2
  19. package/dist/14.maestro-web-sdk.esm.js.map +0 -1
  20. package/dist/15.maestro-web-sdk.esm.js +0 -2
  21. package/dist/15.maestro-web-sdk.esm.js.map +0 -1
  22. package/dist/16.maestro-web-sdk.esm.js +0 -2
  23. package/dist/16.maestro-web-sdk.esm.js.map +0 -1
  24. package/dist/17.maestro-web-sdk.esm.js +0 -2
  25. package/dist/17.maestro-web-sdk.esm.js.map +0 -1
  26. package/dist/18.maestro-web-sdk.esm.js +0 -2
  27. package/dist/18.maestro-web-sdk.esm.js.map +0 -1
  28. package/dist/19.maestro-web-sdk.esm.js +0 -2
  29. package/dist/19.maestro-web-sdk.esm.js.map +0 -1
  30. package/dist/2.maestro-web-sdk.esm.js +0 -2
  31. package/dist/2.maestro-web-sdk.esm.js.map +0 -1
  32. package/dist/20.maestro-web-sdk.esm.js +0 -2
  33. package/dist/20.maestro-web-sdk.esm.js.map +0 -1
  34. package/dist/21.maestro-web-sdk.esm.js +0 -2
  35. package/dist/21.maestro-web-sdk.esm.js.map +0 -1
  36. package/dist/22.maestro-web-sdk.esm.js +0 -2
  37. package/dist/22.maestro-web-sdk.esm.js.map +0 -1
  38. package/dist/23.maestro-web-sdk.esm.js +0 -2
  39. package/dist/23.maestro-web-sdk.esm.js.map +0 -1
  40. package/dist/24.maestro-web-sdk.esm.js +0 -2
  41. package/dist/24.maestro-web-sdk.esm.js.map +0 -1
  42. package/dist/25.maestro-web-sdk.esm.js +0 -2
  43. package/dist/25.maestro-web-sdk.esm.js.map +0 -1
  44. package/dist/26.maestro-web-sdk.esm.js +0 -2
  45. package/dist/26.maestro-web-sdk.esm.js.map +0 -1
  46. package/dist/27.maestro-web-sdk.esm.js +0 -2
  47. package/dist/27.maestro-web-sdk.esm.js.map +0 -1
  48. package/dist/28.maestro-web-sdk.esm.js +0 -2
  49. package/dist/28.maestro-web-sdk.esm.js.map +0 -1
  50. package/dist/29.maestro-web-sdk.esm.js +0 -2
  51. package/dist/29.maestro-web-sdk.esm.js.map +0 -1
  52. package/dist/3.maestro-web-sdk.esm.js +0 -2
  53. package/dist/3.maestro-web-sdk.esm.js.map +0 -1
  54. package/dist/30.maestro-web-sdk.esm.js +0 -2
  55. package/dist/30.maestro-web-sdk.esm.js.map +0 -1
  56. package/dist/31.maestro-web-sdk.esm.js +0 -2
  57. package/dist/31.maestro-web-sdk.esm.js.map +0 -1
  58. package/dist/32.maestro-web-sdk.esm.js +0 -2
  59. package/dist/32.maestro-web-sdk.esm.js.map +0 -1
  60. package/dist/33.maestro-web-sdk.esm.js +0 -2
  61. package/dist/33.maestro-web-sdk.esm.js.map +0 -1
  62. package/dist/34.maestro-web-sdk.esm.js +0 -2
  63. package/dist/34.maestro-web-sdk.esm.js.map +0 -1
  64. package/dist/35.maestro-web-sdk.esm.js +0 -2
  65. package/dist/35.maestro-web-sdk.esm.js.map +0 -1
  66. package/dist/36.maestro-web-sdk.esm.js +0 -2
  67. package/dist/36.maestro-web-sdk.esm.js.map +0 -1
  68. package/dist/37.maestro-web-sdk.esm.js +0 -2
  69. package/dist/37.maestro-web-sdk.esm.js.map +0 -1
  70. package/dist/38.maestro-web-sdk.esm.js +0 -2
  71. package/dist/38.maestro-web-sdk.esm.js.map +0 -1
  72. package/dist/39.maestro-web-sdk.esm.js +0 -2
  73. package/dist/39.maestro-web-sdk.esm.js.map +0 -1
  74. package/dist/4.maestro-web-sdk.esm.js +0 -2
  75. package/dist/4.maestro-web-sdk.esm.js.map +0 -1
  76. package/dist/40.maestro-web-sdk.esm.js +0 -2
  77. package/dist/40.maestro-web-sdk.esm.js.map +0 -1
  78. package/dist/5.maestro-web-sdk.esm.js +0 -2
  79. package/dist/5.maestro-web-sdk.esm.js.map +0 -1
  80. package/dist/6.maestro-web-sdk.esm.js +0 -2
  81. package/dist/6.maestro-web-sdk.esm.js.map +0 -1
  82. package/dist/7.maestro-web-sdk.esm.js +0 -2
  83. package/dist/7.maestro-web-sdk.esm.js.map +0 -1
  84. package/dist/8.maestro-web-sdk.esm.js +0 -2
  85. package/dist/8.maestro-web-sdk.esm.js.map +0 -1
  86. package/dist/9.maestro-web-sdk.esm.js +0 -2
  87. package/dist/9.maestro-web-sdk.esm.js.map +0 -1
  88. package/dist/package.json +0 -94
  89. package/dist/src/components/atoms/BaseButton/BaseButton.d.ts +0 -7
  90. package/dist/src/components/atoms/BaseButton/BaseButton.js +0 -11
  91. package/dist/src/components/atoms/BaseButton/index.d.ts +0 -2
  92. package/dist/src/components/atoms/BaseButton/index.js +0 -2
  93. package/dist/src/components/atoms/Image/index.d.ts +0 -13
  94. package/dist/src/components/atoms/Image/index.js +0 -34
  95. package/dist/src/components/atoms/Rive/index.d.ts +0 -221
  96. package/dist/src/components/atoms/Rive/index.js +0 -53
  97. package/dist/src/components/atoms/SvgIcon/AddIcon.d.ts +0 -3
  98. package/dist/src/components/atoms/SvgIcon/AddIcon.js +0 -6
  99. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.d.ts +0 -3
  100. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.js +0 -9
  101. package/dist/src/components/atoms/SvgIcon/BetsIcon.d.ts +0 -3
  102. package/dist/src/components/atoms/SvgIcon/BetsIcon.js +0 -8
  103. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.d.ts +0 -7
  104. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.js +0 -11
  105. package/dist/src/components/atoms/SvgIcon/BuilderIcon.d.ts +0 -3
  106. package/dist/src/components/atoms/SvgIcon/BuilderIcon.js +0 -8
  107. package/dist/src/components/atoms/SvgIcon/ChatIcon.d.ts +0 -3
  108. package/dist/src/components/atoms/SvgIcon/ChatIcon.js +0 -6
  109. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.d.ts +0 -3
  110. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.js +0 -6
  111. package/dist/src/components/atoms/SvgIcon/CollapseIcon.d.ts +0 -3
  112. package/dist/src/components/atoms/SvgIcon/CollapseIcon.js +0 -6
  113. package/dist/src/components/atoms/SvgIcon/ExpandIcon.d.ts +0 -3
  114. package/dist/src/components/atoms/SvgIcon/ExpandIcon.js +0 -6
  115. package/dist/src/components/atoms/SvgIcon/FantasyIcon.d.ts +0 -7
  116. package/dist/src/components/atoms/SvgIcon/FantasyIcon.js +0 -15
  117. package/dist/src/components/atoms/SvgIcon/FlameIcon.d.ts +0 -7
  118. package/dist/src/components/atoms/SvgIcon/FlameIcon.js +0 -11
  119. package/dist/src/components/atoms/SvgIcon/FoxKeyPlaysIcon.d.ts +0 -3
  120. package/dist/src/components/atoms/SvgIcon/FoxKeyPlaysIcon.js +0 -7
  121. package/dist/src/components/atoms/SvgIcon/FoxMultiViewIcon.d.ts +0 -3
  122. package/dist/src/components/atoms/SvgIcon/FoxMultiViewIcon.js +0 -10
  123. package/dist/src/components/atoms/SvgIcon/FoxStatsIcon.d.ts +0 -3
  124. package/dist/src/components/atoms/SvgIcon/FoxStatsIcon.js +0 -7
  125. package/dist/src/components/atoms/SvgIcon/HelloWorldIcon.d.ts +0 -3
  126. package/dist/src/components/atoms/SvgIcon/HelloWorldIcon.js +0 -6
  127. package/dist/src/components/atoms/SvgIcon/Icon.d.ts +0 -15
  128. package/dist/src/components/atoms/SvgIcon/Icon.js +0 -70
  129. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.d.ts +0 -6
  130. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.js +0 -10
  131. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.d.ts +0 -7
  132. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.js +0 -11
  133. package/dist/src/components/atoms/SvgIcon/PlayIcon.d.ts +0 -6
  134. package/dist/src/components/atoms/SvgIcon/PlayIcon.js +0 -8
  135. package/dist/src/components/atoms/SvgIcon/ShopIcon.d.ts +0 -5
  136. package/dist/src/components/atoms/SvgIcon/ShopIcon.js +0 -7
  137. package/dist/src/components/atoms/SvgIcon/ShopifyIcon.d.ts +0 -3
  138. package/dist/src/components/atoms/SvgIcon/ShopifyIcon.js +0 -6
  139. package/dist/src/components/atoms/SvgIcon/StatsIcon.d.ts +0 -6
  140. package/dist/src/components/atoms/SvgIcon/StatsIcon.js +0 -12
  141. package/dist/src/components/atoms/SvgIcon/TimesIcon.d.ts +0 -3
  142. package/dist/src/components/atoms/SvgIcon/TimesIcon.js +0 -6
  143. package/dist/src/components/atoms/SvgIcon/WarningIcon.d.ts +0 -6
  144. package/dist/src/components/atoms/SvgIcon/WarningIcon.js +0 -8
  145. package/dist/src/components/atoms/SvgIcon/index.d.ts +0 -2
  146. package/dist/src/components/atoms/SvgIcon/index.js +0 -2
  147. package/dist/src/components/core/App/App.d.ts +0 -11
  148. package/dist/src/components/core/App/App.js +0 -35
  149. package/dist/src/components/core/App/index.d.ts +0 -2
  150. package/dist/src/components/core/App/index.js +0 -2
  151. package/dist/src/components/core/PanelManager/PanelManager.d.ts +0 -21
  152. package/dist/src/components/core/PanelManager/PanelManager.js +0 -104
  153. package/dist/src/components/core/PanelManager/index.d.ts +0 -2
  154. package/dist/src/components/core/PanelManager/index.js +0 -2
  155. package/dist/src/components/core/ScrollableContainer/FocusableItem.d.ts +0 -11
  156. package/dist/src/components/core/ScrollableContainer/FocusableItem.js +0 -24
  157. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.d.ts +0 -54
  158. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.js +0 -111
  159. package/dist/src/components/core/ScrollableContainer/index.d.ts +0 -6
  160. package/dist/src/components/core/ScrollableContainer/index.js +0 -5
  161. package/dist/src/components/core/ScrollableContainer/useScrollableContainer.d.ts +0 -14
  162. package/dist/src/components/core/ScrollableContainer/useScrollableContainer.js +0 -22
  163. package/dist/src/components/molecules/ActionButton/ActionButton.d.ts +0 -96
  164. package/dist/src/components/molecules/ActionButton/ActionButton.js +0 -15
  165. package/dist/src/components/molecules/ActionButton/index.d.ts +0 -2
  166. package/dist/src/components/molecules/ActionButton/index.js +0 -2
  167. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.d.ts +0 -16
  168. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.js +0 -50
  169. package/dist/src/components/molecules/HeadshotImage/index.d.ts +0 -2
  170. package/dist/src/components/molecules/HeadshotImage/index.js +0 -2
  171. package/dist/src/components/molecules/NetworkDialog/NetworkDialog.d.ts +0 -11
  172. package/dist/src/components/molecules/NetworkDialog/NetworkDialog.js +0 -34
  173. package/dist/src/components/molecules/NetworkDialog/index.d.ts +0 -2
  174. package/dist/src/components/molecules/NetworkDialog/index.js +0 -2
  175. package/dist/src/components/molecules/NetworkError/NetworkError.d.ts +0 -104
  176. package/dist/src/components/molecules/NetworkError/NetworkError.js +0 -26
  177. package/dist/src/components/molecules/NetworkError/index.d.ts +0 -2
  178. package/dist/src/components/molecules/NetworkError/index.js +0 -2
  179. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.d.ts +0 -107
  180. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +0 -36
  181. package/dist/src/components/molecules/PanelNavButton/index.d.ts +0 -2
  182. package/dist/src/components/molecules/PanelNavButton/index.js +0 -2
  183. package/dist/src/components/molecules/SegmentButton/SegmentButton.d.ts +0 -9
  184. package/dist/src/components/molecules/SegmentButton/SegmentButton.js +0 -10
  185. package/dist/src/components/molecules/SegmentButton/index.d.ts +0 -2
  186. package/dist/src/components/molecules/SegmentButton/index.js +0 -2
  187. package/dist/src/components/molecules/TabLoadError/TabLoadError.d.ts +0 -96
  188. package/dist/src/components/molecules/TabLoadError/TabLoadError.js +0 -14
  189. package/dist/src/components/molecules/TabLoadError/index.d.ts +0 -2
  190. package/dist/src/components/molecules/TabLoadError/index.js +0 -2
  191. package/dist/src/components/molecules/WatchButton/WatchButton.d.ts +0 -10
  192. package/dist/src/components/molecules/WatchButton/WatchButton.js +0 -15
  193. package/dist/src/components/molecules/WatchButton/index.d.ts +0 -2
  194. package/dist/src/components/molecules/WatchButton/index.js +0 -2
  195. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.d.ts +0 -17
  196. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +0 -64
  197. package/dist/src/components/organisms/PanelNavigation/index.d.ts +0 -2
  198. package/dist/src/components/organisms/PanelNavigation/index.js +0 -2
  199. package/dist/src/components/organisms/SegmentController/SegmentController.d.ts +0 -12
  200. package/dist/src/components/organisms/SegmentController/SegmentController.js +0 -35
  201. package/dist/src/components/organisms/SegmentController/index.d.ts +0 -3
  202. package/dist/src/components/organisms/SegmentController/index.js +0 -2
  203. package/dist/src/development/MaestroEventDelegate.d.ts +0 -27
  204. package/dist/src/development/MaestroEventDelegate.js +0 -110
  205. package/dist/src/development/TimeSeek.d.ts +0 -22
  206. package/dist/src/development/TimeSeek.js +0 -218
  207. package/dist/src/development/development.d.ts +0 -1
  208. package/dist/src/development/development.js +0 -39
  209. package/dist/src/external/AxiosNetworkClient.d.ts +0 -28
  210. package/dist/src/external/AxiosNetworkClient.js +0 -110
  211. package/dist/src/external/LocalStorageCacheManager.d.ts +0 -65
  212. package/dist/src/external/LocalStorageCacheManager.js +0 -213
  213. package/dist/src/external/ReactRenderer.d.ts +0 -17
  214. package/dist/src/external/ReactRenderer.js +0 -66
  215. package/dist/src/external/mocks/MockExternalNetworkClient.d.ts +0 -104
  216. package/dist/src/external/mocks/MockExternalNetworkClient.js +0 -187
  217. package/dist/src/external/ports/cacheManager.d.ts +0 -17
  218. package/dist/src/external/ports/cacheManager.js +0 -1
  219. package/dist/src/external/ports/networkClient.d.ts +0 -19
  220. package/dist/src/external/ports/networkClient.js +0 -1
  221. package/dist/src/external/ports/renderer.d.ts +0 -4
  222. package/dist/src/external/ports/renderer.js +0 -1
  223. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.d.ts +0 -8
  224. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.js +0 -7
  225. package/dist/src/external/spatial-navigation/index.d.ts +0 -4
  226. package/dist/src/external/spatial-navigation/index.js +0 -3
  227. package/dist/src/external/spatial-navigation/measureLayout.d.ts +0 -2
  228. package/dist/src/external/spatial-navigation/measureLayout.js +0 -30
  229. package/dist/src/external/spatial-navigation/spatialNavigation.d.ts +0 -160
  230. package/dist/src/external/spatial-navigation/spatialNavigation.js +0 -944
  231. package/dist/src/external/spatial-navigation/utils.d.ts +0 -22
  232. package/dist/src/external/spatial-navigation/utils.js +0 -6
  233. package/dist/src/external/spatial-navigation/visualDebugger.d.ts +0 -17
  234. package/dist/src/external/spatial-navigation/visualDebugger.js +0 -76
  235. package/dist/src/external/spatial-navigation/withFocusable.d.ts +0 -131
  236. package/dist/src/external/spatial-navigation/withFocusable.js +0 -254
  237. package/dist/src/helpers/Observable.d.ts +0 -12
  238. package/dist/src/helpers/Observable.js +0 -37
  239. package/dist/src/helpers/site.d.ts +0 -1
  240. package/dist/src/helpers/site.js +0 -6
  241. package/dist/src/helpers/siteConfig.d.ts +0 -1
  242. package/dist/src/helpers/siteConfig.js +0 -5
  243. package/dist/src/helpers/strings.d.ts +0 -2
  244. package/dist/src/helpers/strings.js +0 -14
  245. package/dist/src/helpers/url.d.ts +0 -1
  246. package/dist/src/helpers/url.js +0 -12
  247. package/dist/src/hooks/useMaxHeightToBottom.d.ts +0 -11
  248. package/dist/src/hooks/useMaxHeightToBottom.js +0 -48
  249. package/dist/src/index.d.ts +0 -53
  250. package/dist/src/index.js +0 -197
  251. package/dist/src/interfaces/IMaestroEvent.d.ts +0 -108
  252. package/dist/src/interfaces/IMaestroEvent.js +0 -1
  253. package/dist/src/interfaces/IMaestroEventDelegate.d.ts +0 -81
  254. package/dist/src/interfaces/IMaestroEventDelegate.js +0 -1
  255. package/dist/src/interfaces/IMaestroManager.d.ts +0 -81
  256. package/dist/src/interfaces/IMaestroManager.js +0 -1
  257. package/dist/src/interfaces/IUserSettings.d.ts +0 -44
  258. package/dist/src/interfaces/IUserSettings.js +0 -20
  259. package/dist/src/models/IModel.d.ts +0 -7
  260. package/dist/src/models/IModel.js +0 -1
  261. package/dist/src/models/IPanel.d.ts +0 -19
  262. package/dist/src/models/IPanel.js +0 -12
  263. package/dist/src/models/ITheme.d.ts +0 -77
  264. package/dist/src/models/ITheme.js +0 -20
  265. package/dist/src/modules/espn/bets/interfaces/IBets.d.ts +0 -192
  266. package/dist/src/modules/espn/bets/interfaces/IBets.js +0 -1
  267. package/dist/src/modules/espn/bets/interfaces/IBetsViewModel.d.ts +0 -5
  268. package/dist/src/modules/espn/bets/interfaces/IBetsViewModel.js +0 -1
  269. package/dist/src/modules/espn/bets/mocks.d.ts +0 -2
  270. package/dist/src/modules/espn/bets/mocks.js +0 -573
  271. package/dist/src/modules/espn/bets/services/BetsService.d.ts +0 -81
  272. package/dist/src/modules/espn/bets/services/BetsService.js +0 -123
  273. package/dist/src/modules/espn/bets/types/BetsAnalyticsTypes.d.ts +0 -8
  274. package/dist/src/modules/espn/bets/types/BetsAnalyticsTypes.js +0 -1
  275. package/dist/src/modules/espn/bets/view/BetsView.d.ts +0 -30
  276. package/dist/src/modules/espn/bets/view/BetsView.js +0 -169
  277. package/dist/src/modules/espn/bets/view/HotProps/HotPropsView.d.ts +0 -103
  278. package/dist/src/modules/espn/bets/view/HotProps/HotPropsView.js +0 -133
  279. package/dist/src/modules/espn/bets/view/SixPack/SixPackView.d.ts +0 -9
  280. package/dist/src/modules/espn/bets/view/SixPack/SixPackView.js +0 -77
  281. package/dist/src/modules/espn/bets/view/UserBets/BetResult/BetResult.d.ts +0 -6
  282. package/dist/src/modules/espn/bets/view/UserBets/BetResult/BetResult.js +0 -6
  283. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCard.d.ts +0 -104
  284. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCard.js +0 -140
  285. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCardEvent.d.ts +0 -16
  286. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCardEvent.js +0 -8
  287. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCardFooter.d.ts +0 -7
  288. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCardFooter.js +0 -18
  289. package/dist/src/modules/espn/bets/view/UserBets/Boost/Boost.d.ts +0 -7
  290. package/dist/src/modules/espn/bets/view/UserBets/Boost/Boost.js +0 -6
  291. package/dist/src/modules/espn/bets/view/UserBets/OutcomeBadge/OutcomeBadge.d.ts +0 -6
  292. package/dist/src/modules/espn/bets/view/UserBets/OutcomeBadge/OutcomeBadge.js +0 -9
  293. package/dist/src/modules/espn/bets/view/UserBets/Parlay/Parlay.d.ts +0 -8
  294. package/dist/src/modules/espn/bets/view/UserBets/Parlay/Parlay.js +0 -13
  295. package/dist/src/modules/espn/bets/view/UserBets/Straight/Straight.d.ts +0 -7
  296. package/dist/src/modules/espn/bets/view/UserBets/Straight/Straight.js +0 -6
  297. package/dist/src/modules/espn/bets/view/UserBets/Teaser/Teaser.d.ts +0 -7
  298. package/dist/src/modules/espn/bets/view/UserBets/Teaser/Teaser.js +0 -13
  299. package/dist/src/modules/espn/bets/view/UserBets/UserBetsView.d.ts +0 -25
  300. package/dist/src/modules/espn/bets/view/UserBets/UserBetsView.js +0 -107
  301. package/dist/src/modules/espn/bets/view/components/Bet/Bet.d.ts +0 -10
  302. package/dist/src/modules/espn/bets/view/components/Bet/Bet.js +0 -41
  303. package/dist/src/modules/espn/bets/view/components/BetPill/BetPill.d.ts +0 -6
  304. package/dist/src/modules/espn/bets/view/components/BetPill/BetPill.js +0 -6
  305. package/dist/src/modules/espn/bets/view/components/BetsCard/BetsCard.d.ts +0 -10
  306. package/dist/src/modules/espn/bets/view/components/BetsCard/BetsCard.js +0 -24
  307. package/dist/src/modules/espn/bets/view/components/BetsCard/BetsCardHeader.d.ts +0 -16
  308. package/dist/src/modules/espn/bets/view/components/BetsCard/BetsCardHeader.js +0 -20
  309. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.d.ts +0 -7
  310. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +0 -31
  311. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/index.d.ts +0 -1
  312. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/index.js +0 -1
  313. package/dist/src/modules/espn/bets/view/components/LocationWarning/LocationWarning.d.ts +0 -10
  314. package/dist/src/modules/espn/bets/view/components/LocationWarning/LocationWarning.js +0 -16
  315. package/dist/src/modules/espn/bets/view/components/PromoCodeBanner/PromoCodeBanner.d.ts +0 -5
  316. package/dist/src/modules/espn/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +0 -45
  317. package/dist/src/modules/espn/bets/view/components/PromoCodeBanner/index.d.ts +0 -1
  318. package/dist/src/modules/espn/bets/view/components/PromoCodeBanner/index.js +0 -1
  319. package/dist/src/modules/espn/bets/view-model/BetsViewModel.d.ts +0 -218
  320. package/dist/src/modules/espn/bets/view-model/BetsViewModel.js +0 -947
  321. package/dist/src/modules/espn/components/TabLoadError/TabLoadError.d.ts +0 -96
  322. package/dist/src/modules/espn/components/TabLoadError/TabLoadError.js +0 -14
  323. package/dist/src/modules/espn/components/TabLoadError/index.d.ts +0 -2
  324. package/dist/src/modules/espn/components/TabLoadError/index.js +0 -2
  325. package/dist/src/modules/espn/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.d.ts +0 -28
  326. package/dist/src/modules/espn/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.js +0 -107
  327. package/dist/src/modules/espn/fantasy/components/ExpandedAthleteList/index.d.ts +0 -1
  328. package/dist/src/modules/espn/fantasy/components/ExpandedAthleteList/index.js +0 -1
  329. package/dist/src/modules/espn/fantasy/components/LeagueCard/LeagueCard.d.ts +0 -104
  330. package/dist/src/modules/espn/fantasy/components/LeagueCard/LeagueCard.js +0 -20
  331. package/dist/src/modules/espn/fantasy/components/LeagueCard/index.d.ts +0 -2
  332. package/dist/src/modules/espn/fantasy/components/LeagueCard/index.js +0 -2
  333. package/dist/src/modules/espn/fantasy/components/TopPlayerCard/TopPlayerCard.d.ts +0 -101
  334. package/dist/src/modules/espn/fantasy/components/TopPlayerCard/TopPlayerCard.js +0 -29
  335. package/dist/src/modules/espn/fantasy/components/TopPlayerCard/index.d.ts +0 -2
  336. package/dist/src/modules/espn/fantasy/components/TopPlayerCard/index.js +0 -2
  337. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.d.ts +0 -103
  338. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.js +0 -28
  339. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/index.d.ts +0 -1
  340. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/index.js +0 -1
  341. package/dist/src/modules/espn/fantasy/mocks.d.ts +0 -7620
  342. package/dist/src/modules/espn/fantasy/mocks.js +0 -3682
  343. package/dist/src/modules/espn/fantasy/services/FantasyService.d.ts +0 -76
  344. package/dist/src/modules/espn/fantasy/services/FantasyService.js +0 -127
  345. package/dist/src/modules/espn/fantasy/types.d.ts +0 -294
  346. package/dist/src/modules/espn/fantasy/types.js +0 -9
  347. package/dist/src/modules/espn/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.d.ts +0 -21
  348. package/dist/src/modules/espn/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.js +0 -74
  349. package/dist/src/modules/espn/fantasy/view/ActiveAthletesMarquee/index.d.ts +0 -2
  350. package/dist/src/modules/espn/fantasy/view/ActiveAthletesMarquee/index.js +0 -2
  351. package/dist/src/modules/espn/fantasy/view/FantasyHeaderView.d.ts +0 -8
  352. package/dist/src/modules/espn/fantasy/view/FantasyHeaderView.js +0 -8
  353. package/dist/src/modules/espn/fantasy/view/FantasyItemView.d.ts +0 -8
  354. package/dist/src/modules/espn/fantasy/view/FantasyItemView.js +0 -48
  355. package/dist/src/modules/espn/fantasy/view/FantasyView.d.ts +0 -34
  356. package/dist/src/modules/espn/fantasy/view/FantasyView.js +0 -213
  357. package/dist/src/modules/espn/fantasy/view/InactiveLeague/DraftDateCountdown.d.ts +0 -23
  358. package/dist/src/modules/espn/fantasy/view/InactiveLeague/DraftDateCountdown.js +0 -95
  359. package/dist/src/modules/espn/fantasy/view/InactiveLeague/InactiveLeague.d.ts +0 -100
  360. package/dist/src/modules/espn/fantasy/view/InactiveLeague/InactiveLeague.js +0 -13
  361. package/dist/src/modules/espn/fantasy/view/InactiveLeague/index.d.ts +0 -2
  362. package/dist/src/modules/espn/fantasy/view/InactiveLeague/index.js +0 -2
  363. package/dist/src/modules/espn/fantasy/view/LoginView/LoginView.d.ts +0 -96
  364. package/dist/src/modules/espn/fantasy/view/LoginView/LoginView.js +0 -27
  365. package/dist/src/modules/espn/fantasy/view/LoginView/index.d.ts +0 -2
  366. package/dist/src/modules/espn/fantasy/view/LoginView/index.js +0 -2
  367. package/dist/src/modules/espn/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.d.ts +0 -97
  368. package/dist/src/modules/espn/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.js +0 -25
  369. package/dist/src/modules/espn/fantasy/view/MatchupPair/DoubleAthleteCard/index.d.ts +0 -2
  370. package/dist/src/modules/espn/fantasy/view/MatchupPair/DoubleAthleteCard/index.js +0 -2
  371. package/dist/src/modules/espn/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.d.ts +0 -14
  372. package/dist/src/modules/espn/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.js +0 -9
  373. package/dist/src/modules/espn/fantasy/view/MatchupPair/MatchupPair.d.ts +0 -102
  374. package/dist/src/modules/espn/fantasy/view/MatchupPair/MatchupPair.js +0 -118
  375. package/dist/src/modules/espn/fantasy/view/MatchupPair/index.d.ts +0 -2
  376. package/dist/src/modules/espn/fantasy/view/MatchupPair/index.js +0 -2
  377. package/dist/src/modules/espn/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.d.ts +0 -14
  378. package/dist/src/modules/espn/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.js +0 -9
  379. package/dist/src/modules/espn/fantasy/view/MatchupSingle/MatchupSingle.d.ts +0 -102
  380. package/dist/src/modules/espn/fantasy/view/MatchupSingle/MatchupSingle.js +0 -108
  381. package/dist/src/modules/espn/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.d.ts +0 -97
  382. package/dist/src/modules/espn/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.js +0 -18
  383. package/dist/src/modules/espn/fantasy/view/MatchupSingle/SingleAthleteCard/index.d.ts +0 -2
  384. package/dist/src/modules/espn/fantasy/view/MatchupSingle/SingleAthleteCard/index.js +0 -2
  385. package/dist/src/modules/espn/fantasy/view/MatchupSingle/index.d.ts +0 -2
  386. package/dist/src/modules/espn/fantasy/view/MatchupSingle/index.js +0 -2
  387. package/dist/src/modules/espn/fantasy/view/PromoView/PromoView.d.ts +0 -100
  388. package/dist/src/modules/espn/fantasy/view/PromoView/PromoView.js +0 -12
  389. package/dist/src/modules/espn/fantasy/view/PromoView/index.d.ts +0 -2
  390. package/dist/src/modules/espn/fantasy/view/PromoView/index.js +0 -2
  391. package/dist/src/modules/espn/fantasy/view/TournamentBracketCard/TournamentBracketCard.d.ts +0 -101
  392. package/dist/src/modules/espn/fantasy/view/TournamentBracketCard/TournamentBracketCard.js +0 -37
  393. package/dist/src/modules/espn/fantasy/view/TournamentBracketCard/index.d.ts +0 -2
  394. package/dist/src/modules/espn/fantasy/view/TournamentBracketCard/index.js +0 -2
  395. package/dist/src/modules/espn/fantasy/view/index.d.ts +0 -2
  396. package/dist/src/modules/espn/fantasy/view/index.js +0 -2
  397. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.FantasyPolling.d.ts +0 -32
  398. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.FantasyPolling.js +0 -135
  399. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.d.ts +0 -32
  400. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.js +0 -144
  401. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.TournamentPolling.d.ts +0 -32
  402. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.TournamentPolling.js +0 -143
  403. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.d.ts +0 -168
  404. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.js +0 -815
  405. package/dist/src/modules/espn/key-plays/constants.d.ts +0 -3
  406. package/dist/src/modules/espn/key-plays/constants.js +0 -292
  407. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlays.d.ts +0 -32
  408. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlays.js +0 -14
  409. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlaysResponse.d.ts +0 -44
  410. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlaysResponse.js +0 -1
  411. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlaysViewModel.d.ts +0 -17
  412. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlaysViewModel.js +0 -1
  413. package/dist/src/modules/espn/key-plays/view/KeyPlayCardScoreTagView.d.ts +0 -9
  414. package/dist/src/modules/espn/key-plays/view/KeyPlayCardScoreTagView.js +0 -16
  415. package/dist/src/modules/espn/key-plays/view/KeyPlayCardView.d.ts +0 -27
  416. package/dist/src/modules/espn/key-plays/view/KeyPlayCardView.js +0 -115
  417. package/dist/src/modules/espn/key-plays/view/KeyPlayErrorStateView.d.ts +0 -13
  418. package/dist/src/modules/espn/key-plays/view/KeyPlayErrorStateView.js +0 -65
  419. package/dist/src/modules/espn/key-plays/view/KeyPlaysView.d.ts +0 -39
  420. package/dist/src/modules/espn/key-plays/view/KeyPlaysView.js +0 -179
  421. package/dist/src/modules/espn/key-plays/view-model/KeyPlaysViewModel.d.ts +0 -37
  422. package/dist/src/modules/espn/key-plays/view-model/KeyPlaysViewModel.js +0 -245
  423. package/dist/src/modules/espn/shop/mocks.d.ts +0 -22
  424. package/dist/src/modules/espn/shop/mocks.js +0 -391
  425. package/dist/src/modules/espn/shop/services/ShopService.d.ts +0 -23
  426. package/dist/src/modules/espn/shop/services/ShopService.js +0 -44
  427. package/dist/src/modules/espn/shop/types.d.ts +0 -164
  428. package/dist/src/modules/espn/shop/types.js +0 -7
  429. package/dist/src/modules/espn/shop/view/ProductDetailView/ProductDetailView.d.ts +0 -10
  430. package/dist/src/modules/espn/shop/view/ProductDetailView/ProductDetailView.js +0 -60
  431. package/dist/src/modules/espn/shop/view/ProductDetailView/index.d.ts +0 -2
  432. package/dist/src/modules/espn/shop/view/ProductDetailView/index.js +0 -2
  433. package/dist/src/modules/espn/shop/view/ShopView.d.ts +0 -38
  434. package/dist/src/modules/espn/shop/view/ShopView.js +0 -223
  435. package/dist/src/modules/espn/shop/view/components/BrowseCard/BrowseCard.d.ts +0 -103
  436. package/dist/src/modules/espn/shop/view/components/BrowseCard/BrowseCard.js +0 -23
  437. package/dist/src/modules/espn/shop/view/components/BrowseCard/index.d.ts +0 -2
  438. package/dist/src/modules/espn/shop/view/components/BrowseCard/index.js +0 -2
  439. package/dist/src/modules/espn/shop/view/components/ProductSummaryCard/ProductSummaryCard.d.ts +0 -104
  440. package/dist/src/modules/espn/shop/view/components/ProductSummaryCard/ProductSummaryCard.js +0 -26
  441. package/dist/src/modules/espn/shop/view/components/ProductSummaryCard/index.d.ts +0 -2
  442. package/dist/src/modules/espn/shop/view/components/ProductSummaryCard/index.js +0 -1
  443. package/dist/src/modules/espn/shop/view/components/ShopPromoView/ShopPromoView.d.ts +0 -8
  444. package/dist/src/modules/espn/shop/view/components/ShopPromoView/ShopPromoView.js +0 -19
  445. package/dist/src/modules/espn/shop/view/components/ShopPromoView/index.d.ts +0 -1
  446. package/dist/src/modules/espn/shop/view/components/ShopPromoView/index.js +0 -1
  447. package/dist/src/modules/espn/shop/view/components/ShopSection/ShopSection.d.ts +0 -12
  448. package/dist/src/modules/espn/shop/view/components/ShopSection/ShopSection.js +0 -34
  449. package/dist/src/modules/espn/shop/view/components/ShopSection/index.d.ts +0 -1
  450. package/dist/src/modules/espn/shop/view/components/ShopSection/index.js +0 -1
  451. package/dist/src/modules/espn/shop/view/index.d.ts +0 -2
  452. package/dist/src/modules/espn/shop/view/index.js +0 -2
  453. package/dist/src/modules/espn/shop/view-model/ShopViewModel.ShopPolling.d.ts +0 -31
  454. package/dist/src/modules/espn/shop/view-model/ShopViewModel.ShopPolling.js +0 -111
  455. package/dist/src/modules/espn/shop/view-model/ShopViewModel.d.ts +0 -73
  456. package/dist/src/modules/espn/shop/view-model/ShopViewModel.js +0 -323
  457. package/dist/src/modules/espn/stats/components/TeamStatistic.d.ts +0 -16
  458. package/dist/src/modules/espn/stats/components/TeamStatistic.js +0 -13
  459. package/dist/src/modules/espn/stats/interfaces/IStats.d.ts +0 -330
  460. package/dist/src/modules/espn/stats/interfaces/IStats.js +0 -46
  461. package/dist/src/modules/espn/stats/interfaces/IStatsViewModel.d.ts +0 -7
  462. package/dist/src/modules/espn/stats/interfaces/IStatsViewModel.js +0 -1
  463. package/dist/src/modules/espn/stats/mocks.d.ts +0 -2
  464. package/dist/src/modules/espn/stats/mocks.js +0 -746
  465. package/dist/src/modules/espn/stats/services/StatsService.d.ts +0 -54
  466. package/dist/src/modules/espn/stats/services/StatsService.js +0 -155
  467. package/dist/src/modules/espn/stats/utils/driveSummaryUtils.d.ts +0 -18
  468. package/dist/src/modules/espn/stats/utils/driveSummaryUtils.js +0 -48
  469. package/dist/src/modules/espn/stats/utils/playerStatusUtils.d.ts +0 -4
  470. package/dist/src/modules/espn/stats/utils/playerStatusUtils.js +0 -17
  471. package/dist/src/modules/espn/stats/utils.d.ts +0 -39
  472. package/dist/src/modules/espn/stats/utils.js +0 -62
  473. package/dist/src/modules/espn/stats/view/ActiveAthletes/ActiveAthletes.d.ts +0 -22
  474. package/dist/src/modules/espn/stats/view/ActiveAthletes/ActiveAthletes.js +0 -98
  475. package/dist/src/modules/espn/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.d.ts +0 -4
  476. package/dist/src/modules/espn/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.js +0 -27
  477. package/dist/src/modules/espn/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.d.ts +0 -22
  478. package/dist/src/modules/espn/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.js +0 -89
  479. package/dist/src/modules/espn/stats/view/ActiveAthletes/index.d.ts +0 -2
  480. package/dist/src/modules/espn/stats/view/ActiveAthletes/index.js +0 -2
  481. package/dist/src/modules/espn/stats/view/CareerMatchup/CareerMatchup.d.ts +0 -101
  482. package/dist/src/modules/espn/stats/view/CareerMatchup/CareerMatchup.js +0 -59
  483. package/dist/src/modules/espn/stats/view/CareerMatchup/index.d.ts +0 -1
  484. package/dist/src/modules/espn/stats/view/CareerMatchup/index.js +0 -1
  485. package/dist/src/modules/espn/stats/view/DriveSummary/DrivePlayCard.d.ts +0 -105
  486. package/dist/src/modules/espn/stats/view/DriveSummary/DrivePlayCard.js +0 -32
  487. package/dist/src/modules/espn/stats/view/DriveSummary/DriveSummary.d.ts +0 -10
  488. package/dist/src/modules/espn/stats/view/DriveSummary/DriveSummary.js +0 -40
  489. package/dist/src/modules/espn/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.d.ts +0 -27
  490. package/dist/src/modules/espn/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.js +0 -129
  491. package/dist/src/modules/espn/stats/view/DriveSummary/Header/DriveSummaryHeader.d.ts +0 -12
  492. package/dist/src/modules/espn/stats/view/DriveSummary/Header/DriveSummaryHeader.js +0 -26
  493. package/dist/src/modules/espn/stats/view/DriveSummary/MainStat/MainStat.d.ts +0 -10
  494. package/dist/src/modules/espn/stats/view/DriveSummary/MainStat/MainStat.js +0 -24
  495. package/dist/src/modules/espn/stats/view/DriveSummary/index.d.ts +0 -2
  496. package/dist/src/modules/espn/stats/view/DriveSummary/index.js +0 -2
  497. package/dist/src/modules/espn/stats/view/GameLeaders/GameLeaders.d.ts +0 -9
  498. package/dist/src/modules/espn/stats/view/GameLeaders/GameLeaders.js +0 -22
  499. package/dist/src/modules/espn/stats/view/GameLeaders/index.d.ts +0 -2
  500. package/dist/src/modules/espn/stats/view/GameLeaders/index.js +0 -2
  501. package/dist/src/modules/espn/stats/view/MatchPredictor/DonutChart/DonutChart.d.ts +0 -17
  502. package/dist/src/modules/espn/stats/view/MatchPredictor/DonutChart/DonutChart.js +0 -55
  503. package/dist/src/modules/espn/stats/view/MatchPredictor/DonutChart/index.d.ts +0 -2
  504. package/dist/src/modules/espn/stats/view/MatchPredictor/DonutChart/index.js +0 -1
  505. package/dist/src/modules/espn/stats/view/MatchPredictor/MatchPredictorView.d.ts +0 -100
  506. package/dist/src/modules/espn/stats/view/MatchPredictor/MatchPredictorView.js +0 -60
  507. package/dist/src/modules/espn/stats/view/MatchPredictor/index.d.ts +0 -3
  508. package/dist/src/modules/espn/stats/view/MatchPredictor/index.js +0 -2
  509. package/dist/src/modules/espn/stats/view/Penalties/Penalties.d.ts +0 -9
  510. package/dist/src/modules/espn/stats/view/Penalties/Penalties.js +0 -6
  511. package/dist/src/modules/espn/stats/view/Penalties/index.d.ts +0 -2
  512. package/dist/src/modules/espn/stats/view/Penalties/index.js +0 -2
  513. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/ExpandedPlayerStats.d.ts +0 -16
  514. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/ExpandedPlayerStats.js +0 -66
  515. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsCard.d.ts +0 -99
  516. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsCard.js +0 -26
  517. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsMinified.d.ts +0 -6
  518. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsMinified.js +0 -17
  519. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsView.d.ts +0 -8
  520. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsView.js +0 -165
  521. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/index.d.ts +0 -1
  522. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/index.js +0 -1
  523. package/dist/src/modules/espn/stats/view/RecentGames/RecentGames.d.ts +0 -100
  524. package/dist/src/modules/espn/stats/view/RecentGames/RecentGames.js +0 -23
  525. package/dist/src/modules/espn/stats/view/RecentGames/index.d.ts +0 -2
  526. package/dist/src/modules/espn/stats/view/RecentGames/index.js +0 -2
  527. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.d.ts +0 -30
  528. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.js +0 -123
  529. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/ExpandedSummary.d.ts +0 -100
  530. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/ExpandedSummary.js +0 -24
  531. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/index.d.ts +0 -2
  532. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/index.js +0 -2
  533. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoreItem/ScoreItem.d.ts +0 -100
  534. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoreItem/ScoreItem.js +0 -62
  535. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoreItem/index.d.ts +0 -2
  536. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoreItem/index.js +0 -2
  537. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoresSection/ScoresSection.d.ts +0 -6
  538. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoresSection/ScoresSection.js +0 -23
  539. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoresSection/index.d.ts +0 -2
  540. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoresSection/index.js +0 -2
  541. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoringSummary.d.ts +0 -12
  542. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoringSummary.js +0 -167
  543. package/dist/src/modules/espn/stats/view/ScoringSummary/index.d.ts +0 -1
  544. package/dist/src/modules/espn/stats/view/ScoringSummary/index.js +0 -1
  545. package/dist/src/modules/espn/stats/view/StatsItemView.d.ts +0 -8
  546. package/dist/src/modules/espn/stats/view/StatsItemView.js +0 -66
  547. package/dist/src/modules/espn/stats/view/StatsQRCode/StatsQRCodeView.d.ts +0 -100
  548. package/dist/src/modules/espn/stats/view/StatsQRCode/StatsQRCodeView.js +0 -36
  549. package/dist/src/modules/espn/stats/view/StatsQRCode/index.d.ts +0 -2
  550. package/dist/src/modules/espn/stats/view/StatsQRCode/index.js +0 -1
  551. package/dist/src/modules/espn/stats/view/StatsView.d.ts +0 -29
  552. package/dist/src/modules/espn/stats/view/StatsView.js +0 -164
  553. package/dist/src/modules/espn/stats/view/TeamStats/TeamStatsView.d.ts +0 -101
  554. package/dist/src/modules/espn/stats/view/TeamStats/TeamStatsView.js +0 -77
  555. package/dist/src/modules/espn/stats/view/TeamStats/index.d.ts +0 -2
  556. package/dist/src/modules/espn/stats/view/TeamStats/index.js +0 -1
  557. package/dist/src/modules/espn/stats/view/Teams/StatsCarousel.d.ts +0 -25
  558. package/dist/src/modules/espn/stats/view/Teams/StatsCarousel.js +0 -83
  559. package/dist/src/modules/espn/stats/view/Teams/StatsProgressBar.d.ts +0 -6
  560. package/dist/src/modules/espn/stats/view/Teams/StatsProgressBar.js +0 -19
  561. package/dist/src/modules/espn/stats/view/Teams/Teams.d.ts +0 -100
  562. package/dist/src/modules/espn/stats/view/Teams/Teams.js +0 -39
  563. package/dist/src/modules/espn/stats/view/Teams/index.d.ts +0 -2
  564. package/dist/src/modules/espn/stats/view/Teams/index.js +0 -2
  565. package/dist/src/modules/espn/stats/view/WinProbability/WinProbability.d.ts +0 -100
  566. package/dist/src/modules/espn/stats/view/WinProbability/WinProbability.js +0 -28
  567. package/dist/src/modules/espn/stats/view/WinProbability/index.d.ts +0 -2
  568. package/dist/src/modules/espn/stats/view/WinProbability/index.js +0 -2
  569. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/AthletesStatistics.d.ts +0 -115
  570. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/AthletesStatistics.js +0 -89
  571. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/StatisticTable.d.ts +0 -3
  572. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/StatisticTable.js +0 -12
  573. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/index.d.ts +0 -2
  574. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/index.js +0 -2
  575. package/dist/src/modules/espn/stats/view/index.d.ts +0 -2
  576. package/dist/src/modules/espn/stats/view/index.js +0 -2
  577. package/dist/src/modules/espn/stats/view-model/StatsViewModel.d.ts +0 -322
  578. package/dist/src/modules/espn/stats/view-model/StatsViewModel.js +0 -1416
  579. package/dist/src/modules/fox/components/TabLoadError/TabLoadError.d.ts +0 -96
  580. package/dist/src/modules/fox/components/TabLoadError/TabLoadError.js +0 -19
  581. package/dist/src/modules/fox/components/TabLoadError/index.d.ts +0 -2
  582. package/dist/src/modules/fox/components/TabLoadError/index.js +0 -2
  583. package/dist/src/modules/fox/key-plays/view/FoxKeyPlays.d.ts +0 -2
  584. package/dist/src/modules/fox/key-plays/view/FoxKeyPlays.js +0 -5
  585. package/dist/src/modules/fox/multi-view/interfaces/IMultiViewViewModel.d.ts +0 -3
  586. package/dist/src/modules/fox/multi-view/interfaces/IMultiViewViewModel.js +0 -1
  587. package/dist/src/modules/fox/multi-view/services/MultiViewService.d.ts +0 -104
  588. package/dist/src/modules/fox/multi-view/services/MultiViewService.js +0 -97
  589. package/dist/src/modules/fox/multi-view/types.d.ts +0 -68
  590. package/dist/src/modules/fox/multi-view/types.js +0 -86
  591. package/dist/src/modules/fox/multi-view/view/BuildYourOwn/BuildYourOwn.d.ts +0 -7
  592. package/dist/src/modules/fox/multi-view/view/BuildYourOwn/BuildYourOwn.js +0 -99
  593. package/dist/src/modules/fox/multi-view/view/BuildYourOwn/index.d.ts +0 -2
  594. package/dist/src/modules/fox/multi-view/view/BuildYourOwn/index.js +0 -2
  595. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/CuratedMultiviews.d.ts +0 -8
  596. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/CuratedMultiviews.js +0 -92
  597. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/index.d.ts +0 -2
  598. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/index.js +0 -2
  599. package/dist/src/modules/fox/multi-view/view/FoxMultiView.d.ts +0 -3
  600. package/dist/src/modules/fox/multi-view/view/FoxMultiView.js +0 -68
  601. package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/BuildYourOwnTabs.d.ts +0 -8
  602. package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/BuildYourOwnTabs.js +0 -30
  603. package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/index.d.ts +0 -2
  604. package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/index.js +0 -2
  605. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/CustomMultiviewStreamsCard.d.ts +0 -118
  606. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/CustomMultiviewStreamsCard.js +0 -51
  607. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/index.d.ts +0 -2
  608. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/index.js +0 -2
  609. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.d.ts +0 -13
  610. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.js +0 -40
  611. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/index.d.ts +0 -2
  612. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/index.js +0 -2
  613. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/CuratedMultiviewCard.d.ts +0 -101
  614. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/CuratedMultiviewCard.js +0 -41
  615. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/index.d.ts +0 -2
  616. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/index.js +0 -2
  617. package/dist/src/modules/fox/multi-view/view-model/MultiViewViewModel.d.ts +0 -84
  618. package/dist/src/modules/fox/multi-view/view-model/MultiViewViewModel.js +0 -509
  619. package/dist/src/modules/fox/multi-view/view-model/index.d.ts +0 -1
  620. package/dist/src/modules/fox/multi-view/view-model/index.js +0 -1
  621. package/dist/src/modules/fox/stats/view/FoxStatsView.d.ts +0 -2
  622. package/dist/src/modules/fox/stats/view/FoxStatsView.js +0 -5
  623. package/dist/src/modules/maestro/builder/components/BuilderSection/BuilderSection.d.ts +0 -11
  624. package/dist/src/modules/maestro/builder/components/BuilderSection/BuilderSection.js +0 -52
  625. package/dist/src/modules/maestro/builder/components/BuilderSection/index.d.ts +0 -2
  626. package/dist/src/modules/maestro/builder/components/BuilderSection/index.js +0 -2
  627. package/dist/src/modules/maestro/builder/components/ExpandableCard/ExpandableCard.d.ts +0 -110
  628. package/dist/src/modules/maestro/builder/components/ExpandableCard/ExpandableCard.js +0 -37
  629. package/dist/src/modules/maestro/builder/components/ExpandableCard/index.d.ts +0 -2
  630. package/dist/src/modules/maestro/builder/components/ExpandableCard/index.js +0 -2
  631. package/dist/src/modules/maestro/builder/components/SimpleCard/SimpleCard.d.ts +0 -104
  632. package/dist/src/modules/maestro/builder/components/SimpleCard/SimpleCard.js +0 -12
  633. package/dist/src/modules/maestro/builder/components/SimpleCard/index.d.ts +0 -2
  634. package/dist/src/modules/maestro/builder/components/SimpleCard/index.js +0 -2
  635. package/dist/src/modules/maestro/builder/index.d.ts +0 -7
  636. package/dist/src/modules/maestro/builder/index.js +0 -7
  637. package/dist/src/modules/maestro/builder/mocks/mockBuilderPanel.d.ts +0 -149
  638. package/dist/src/modules/maestro/builder/mocks/mockBuilderPanel.js +0 -240
  639. package/dist/src/modules/maestro/builder/types.d.ts +0 -52
  640. package/dist/src/modules/maestro/builder/types.js +0 -1
  641. package/dist/src/modules/maestro/builder/view/BuilderPanelView.d.ts +0 -4
  642. package/dist/src/modules/maestro/builder/view/BuilderPanelView.js +0 -52
  643. package/dist/src/modules/maestro/builder/view-model/BuilderPanelViewModel.d.ts +0 -40
  644. package/dist/src/modules/maestro/builder/view-model/BuilderPanelViewModel.js +0 -229
  645. package/dist/src/modules/maestro/builder/view-model/index.d.ts +0 -1
  646. package/dist/src/modules/maestro/builder/view-model/index.js +0 -1
  647. package/dist/src/modules/maestro/hello-world/HelloWorldImage.d.ts +0 -2
  648. package/dist/src/modules/maestro/hello-world/HelloWorldImage.js +0 -32
  649. package/dist/src/modules/maestro/hello-world/HelloWorldView.d.ts +0 -11
  650. package/dist/src/modules/maestro/hello-world/HelloWorldView.js +0 -40
  651. package/dist/src/modules/maestro/hello-world/index.d.ts +0 -2
  652. package/dist/src/modules/maestro/hello-world/index.js +0 -2
  653. package/dist/src/sentry.d.ts +0 -3
  654. package/dist/src/sentry.js +0 -51
  655. package/dist/src/services/AnalyticsService/AnalyticsService.d.ts +0 -85
  656. package/dist/src/services/AnalyticsService/AnalyticsService.js +0 -406
  657. package/dist/src/services/AnalyticsService/types.d.ts +0 -65
  658. package/dist/src/services/AnalyticsService/types.js +0 -1
  659. package/dist/src/services/InsightsService/InsightsPayloadBuilder.d.ts +0 -279
  660. package/dist/src/services/InsightsService/InsightsPayloadBuilder.js +0 -385
  661. package/dist/src/services/InsightsService/InsightsService.d.ts +0 -11
  662. package/dist/src/services/InsightsService/InsightsService.js +0 -74
  663. package/dist/src/services/NetworkManager/NetworkManager.d.ts +0 -153
  664. package/dist/src/services/NetworkManager/NetworkManager.js +0 -434
  665. package/dist/src/services/NetworkManager/errors.d.ts +0 -19
  666. package/dist/src/services/NetworkManager/errors.js +0 -59
  667. package/dist/src/services/NetworkManager/types.d.ts +0 -7
  668. package/dist/src/services/NetworkManager/types.js +0 -1
  669. package/dist/src/services/StaticService/StaticService.d.ts +0 -20
  670. package/dist/src/services/StaticService/StaticService.js +0 -86
  671. package/dist/src/services/StaticService/index.d.ts +0 -2
  672. package/dist/src/services/StaticService/index.js +0 -2
  673. package/dist/src/services/StaticService/mocks.d.ts +0 -3
  674. package/dist/src/services/StaticService/mocks.js +0 -119
  675. package/dist/src/services/StaticService/types.d.ts +0 -78
  676. package/dist/src/services/StaticService/types.js +0 -1
  677. package/dist/src/services/ThemeManager/constants.d.ts +0 -2
  678. package/dist/src/services/ThemeManager/constants.js +0 -47
  679. package/dist/src/services/UserSettingsManager.d.ts +0 -63
  680. package/dist/src/services/UserSettingsManager.js +0 -158
  681. package/dist/src/test-polyfills.d.ts +0 -1
  682. package/dist/src/test-polyfills.js +0 -15
  683. package/dist/src/view-models/MaestroEventViewModel.d.ts +0 -96
  684. package/dist/src/view-models/MaestroEventViewModel.js +0 -386
  685. package/dist/src/view-models/PanelManagerViewModel.d.ts +0 -49
  686. package/dist/src/view-models/PanelManagerViewModel.js +0 -195
  687. package/dist/src/view-models/ViewModel.d.ts +0 -12
  688. package/dist/src/view-models/ViewModel.js +0 -32
@@ -1,2 +0,0 @@
1
- (window.webpackJsonp=window.webpackJsonp||[]).push([[10],{104:function(e,t,a){"use strict";a.d(t,"a",(function(){return i})),a.d(t,"b",(function(){return s}));const i=e=>e.toLowerCase().trim().replace(/[\s\W-]+/g,"-").replace(/^-+|-+$/g,"");function s(e){let t=0;for(let a=0;a<e.length;a++){t=(t<<5)-t+e.charCodeAt(a),t&=t}return t}},120:function(e,t,a){"use strict";a.d(t,"a",(function(){return i}));const i=(e,t,a)=>{try{const i=new URL(e);return i.searchParams.set("w",t.toString()),i.searchParams.set("h",a.toString()),i.toString()}catch(t){return console.warn("Malformed URL:",e,t),e}}},243:function(e,t,a){"use strict";a.r(t),a.d(t,"StatsViewModel",(function(){return f}));var i=a(3),s=a(34);const o={entities:{teams:{9:{id:"9",uid:"s:40~l:59~t:9",slug:"new-york-liberty",location:"New York",name:"Liberty",abbreviation:"NY",displayName:"New York Liberty",shortDisplayName:"Liberty",color:"86cebc",alternateColor:"000000",logo:"https://a.espncdn.com/i/teamlogos/wnba/500/ny.png",statistics:[{$key:"fieldGoalPct",value:45.8,displayValue:"45.8",displayName:"Field Goal %"},{$key:"threePointFieldGoalPct",value:34.7,displayValue:"34.7",displayName:"Three Point %"}],homeAway:"away",record:"11-4",displayOrder:1},11:{id:"11",uid:"s:40~l:59~t:11",slug:"phoenix-mercury",location:"Phoenix",name:"Mercury",abbreviation:"PHX",displayName:"Phoenix Mercury",shortDisplayName:"Mercury",color:"3c286e",alternateColor:"e56020",logo:"https://a.espncdn.com/i/teamlogos/wnba/500/phx.png",statistics:[{$key:"fieldGoalPct",value:43.1,displayValue:"43.1",displayName:"Field Goal %"},{$key:"threePointFieldGoalPct",value:34.8,displayValue:"34.8",displayName:"Three Point %"}],homeAway:"home",record:"12-4",displayOrder:2},14:{id:"14",uid:"s:40~l:59~t:14",abbreviation:"SEA",displayName:"Seattle Storm",logo:"https://a.espncdn.com/i/teamlogos/wnba/500/sea.png"},17:{id:"17",uid:"s:40~l:59~t:17",abbreviation:"LV",displayName:"Las Vegas Aces",logo:"https://a.espncdn.com/i/teamlogos/wnba/500/lv.png"},18:{id:"18",uid:"s:40~l:59~t:18",abbreviation:"CONN",displayName:"Connecticut Sun",logo:"https://a.espncdn.com/i/teamlogos/wnba/500/conn.png"},19:{id:"19",uid:"s:40~l:59~t:19",abbreviation:"CHI",displayName:"Chicago Sky",logo:"https://a.espncdn.com/i/teamlogos/wnba/500/chi.png"},20:{id:"20",uid:"s:40~l:59~t:20",abbreviation:"ATL",displayName:"Atlanta Dream",logo:"https://a.espncdn.com/i/teamlogos/wnba/500/atl.png"},129689:{id:"129689",uid:"s:40~l:59~t:129689",abbreviation:"GS",displayName:"Golden State Valkyries",logo:"https://a.espncdn.com/i/teamlogos/wnba/500/gs.png"},130:{id:"121245",uid:"s:20~l:28~t:12",abbreviation:"KC",displayName:"Kansas City Chiefs",shortDisplayName:"Kansas City",color:"e31837",alternateColor:"ffcb05",logo:"https://a.espncdn.com/i/teamlogos/nfl/500/kc.png",homeAway:"home"},164:{id:"11232",uid:"s:20~l:28~t:12",abbreviation:"KC",displayName:"Kansas City Chiefs",shortDisplayName:"Kansas City",color:"e31837",alternateColor:"ffcb05",logo:"https://a.espncdn.com/i/teamlogos/nfl/500/kc.png",homeAway:"away"}},athletes:{2529137:{id:"2529137",uid:"s:40~l:59~a:2529137",guid:"c3d35267-fedd-d8d2-8c24-64ee7aa144ac",displayName:"Natasha Cloud",shortName:"N. Cloud",jersey:"9",headshot:"https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529137.jpg?w=184&h=144",links:[{rel:["playercard","desktop","athlete"],href:"https://www.espnqa.com/wnba/player/_/id/2529137/natasha-cloud",text:"Player Card"}],position:{abbreviation:"G"}},4700818:{id:"2529137",uid:"s:40~l:59~a:2529137",guid:"c3d35267-fedd-d8d2-8c24-64ee7aa144ac",displayName:"Natasha Cloud",shortName:"N. Cloud",jersey:"9",headshot:"https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529137.jpg?w=184&h=144",links:[{rel:["playercard","desktop","athlete"],href:"https://www.espnqa.com/wnba/player/_/id/2529137/natasha-cloud",text:"Player Card"}],position:{abbreviation:"G"}},4837356:{id:"2529137156425",uid:"s:40~l:59~a:2529137",guid:"c3d35267-fedd-d8d2-8c24-64ee7aa144ac",displayName:"Natasha Cloud",shortName:"N. Cloud",jersey:"9",headshot:"https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529137.jpg?w=184&h=144",links:[{rel:["playercard","desktop","athlete"],href:"https://www.espnqa.com/wnba/player/_/id/2529137/natasha-cloud",text:"Player Card"}],position:{abbreviation:"G"}},5037871:{id:"252913653447",uid:"s:40~l:59~a:2529137",guid:"c3d35267-fedd-d8d2-8c24-64ee7aa144ac",displayName:"Natasha Cloud",shortName:"N. Cloud",jersey:"9",headshot:"https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529137.jpg?w=184&h=144",links:[{rel:["playercard","desktop","athlete"],href:"https://www.espnqa.com/wnba/player/_/id/2529137/natasha-cloud",text:"Player Card"}],position:{abbreviation:"G"}},4873138:{id:"25275349137",uid:"s:40~l:59~a:2529137",guid:"c3d35267-fedd-d8d2-8c24-64ee7aa144ac",displayName:"Natasha Cloud",shortName:"N. Cloud",jersey:"9",headshot:"https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529137.jpg?w=184&h=144",links:[{rel:["playercard","desktop","athlete"],href:"https://www.espnqa.com/wnba/player/_/id/2529137/natasha-cloud",text:"Player Card"}],position:{abbreviation:"G"}},2529140:{id:"2529147630",uid:"s:40~l:59~a:2529140",guid:"908608e9-31d4-62f2-dfe2-9fee9024e7e2",displayName:"Alyssa Thomas",shortName:"A. Thomas",jersey:"25",headshot:"https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2529140.jpg?w=184&h=144",links:[{rel:["playercard","desktop","athlete"],href:"https://www.espnqa.com/wnba/player/_/id/2529140/alyssa-thomas",text:"Player Card"}],position:{abbreviation:"F"}},2998928:{id:"29989212758",uid:"s:40~l:59~a:2998928",guid:"4d83d500-2f40-c89e-4f85-62927c5abbeb",displayName:"Breanna Stewart",shortName:"B. Stewart",jersey:"30",headshot:"https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2998928.jpg?w=184&h=144",links:[{rel:["playercard","desktop","athlete"],href:"https://www.espnqa.com/wnba/player/_/id/2998928/breanna-stewart",text:"Player Card"}],position:{abbreviation:"F"}},2999101:{id:"2999112756501",uid:"s:40~l:59~a:2999101",guid:"d5154a93-4a46-71af-8b55-f69328b84b54",displayName:"Jonquel Jones",shortName:"J. Jones",jersey:"35",headshot:"https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2999101.jpg?w=184&h=144",links:[{rel:["playercard","desktop","athlete"],href:"https://www.espnqa.com/wnba/player/_/id/2999101/jonquel-jones",text:"Player Card"}],position:{abbreviation:"C"}},4281929:{id:"428191234729",uid:"s:40~l:59~a:4281929",guid:"d4c403bb-a2c8-ed6b-aeaa-c290d8afea9b",displayName:"Satou Sabally",shortName:"S. Sabally",jersey:"0",headshot:"https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4281929.jpg?w=184&h=144",links:[{rel:["playercard","desktop","athlete"],href:"https://www.espnqa.com/wnba/player/_/id/4281929/satou-sabally",text:"Player Card"}],position:{abbreviation:"F"}}}},leaders:[{displayName:"Points",name:"pointsPerGame",home:{team:{$key:"11"},athlete:{$key:"4281929",statistics:[{displayValue:"19.1",abbreviation:"PTS"},{displayValue:"39.3",abbreviation:"FG%"},{displayValue:"81.9",abbreviation:"FT%"}]}},away:{team:{$key:"9"},athlete:{$key:"2998928",statistics:[{displayValue:"20.7",abbreviation:"PTS"},{displayValue:"52.0",abbreviation:"FG%"},{displayValue:"81.6",abbreviation:"FT%"}]}}},{displayName:"Assists",name:"assistsPerGame",home:{team:{$key:"11"},athlete:{$key:"2529140",statistics:[{displayValue:"9.3",abbreviation:"AST"},{displayValue:"3.2",abbreviation:"TO"},{displayValue:"30.3",abbreviation:"MIN"}]}},away:{team:{$key:"9"},athlete:{$key:"2529137",statistics:[{displayValue:"6.5",abbreviation:"AST"},{displayValue:"2.1",abbreviation:"TO"},{displayValue:"28.3",abbreviation:"MIN"}]}}},{displayName:"Rebounds",name:"reboundsPerGame",home:{team:{$key:"11"},athlete:{$key:"4281929",statistics:[{displayValue:"8.0",abbreviation:"REB"},{displayValue:"6.5",abbreviation:"DR"},{displayValue:"1.5",abbreviation:"OR"}]}},away:{team:{$key:"9"},athlete:{$key:"2999101",statistics:[{displayValue:"9.6",abbreviation:"REB"},{displayValue:"7.7",abbreviation:"DR"},{displayValue:"1.9",abbreviation:"OR"}]}}}],header:{teams:[{$key:"11",linescores:[{displayValue:"28"},{displayValue:"33"},{displayValue:"27"},{displayValue:"18"},{displayValue:"106"}]},{$key:"9",linescores:[{displayValue:"19"},{displayValue:"24"},{displayValue:"27"},{displayValue:"21"},{displayValue:"91"}]}],linescoresHeader:["1","2","3","4","T"]},predictor:{header:"Matchup Predictor",imageUrl:"https://platform.espnqa.com/lrd/matchuppredictor/401736212",homeTeam:{team:{$key:"11"},gameProjection:"31.8"},awayTeam:{team:{$key:"9"},gameProjection:"68.2"}},winProbability:{imageUrl:"https://platform.espnqa.com/lrd/winprobability/401736212/401736212576",homeTeam:{team:{$key:"11"},winPercentage:"100"},awayTeam:{team:{$key:"9"},winPercentage:"0"}},previousGames:[{displayOrder:2,team:{$key:"11"},events:[{team:{$key:"17",homeAway:"home"},score:"76-70",gameResult:"W"},{team:{$key:"18",homeAway:"home"},score:"83-75",gameResult:"W"},{team:{$key:"9",homeAway:"home"},score:"89-81",gameResult:"W"},{team:{$key:"19",homeAway:"home"},score:"107-86",gameResult:"W"},{team:{$key:"9",homeAway:"away"},score:"106-91",gameResult:"W"}]},{displayOrder:1,team:{$key:"9"},events:[{team:{$key:"20",homeAway:"away"},score:"86-81",gameResult:"W"},{team:{$key:"11",homeAway:"away"},score:"89-81",gameResult:"L"},{team:{$key:"14",homeAway:"home"},score:"89-79",gameResult:"L"},{team:{$key:"129689",homeAway:"home"},score:"81-78",gameResult:"W"},{team:{$key:"11",homeAway:"home"},score:"106-91",gameResult:"L"}]}],gameState:"in",promotion:{title:"Serving Sports Fans. Anytime.",description:"Open the ESPN app on a mobile device to checkout more stats!",logo:"https://www.espn.com/redesign/assets/img/ictv/logo_qr/1x/logo_qr_espn.png",qrCode:"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",backgroundImage:"https://www.espn.com/redesign/assets/img/ictv/bkg_qr_espn.jpg"},activeAthletes:{displayText:"Active Athletes",teams:[{team:{$key:"130"},athletes:[{$key:"4700818",statLine:"16.6 PTS, 5.2 REB"},{$key:"4837356",statLine:"4.1 AST, 2.2 TO"}]},{team:{$key:"164"},athletes:[{$key:"5037871",statLine:"19.4 PTS, 4.0 AST"},{$key:"4873138",statLine:"7.2 REB, 2.1 OR"}]}]},drives:[{id:"drive-1",team:{$key:"9"},description:"4 PLAYS, 41 YARDS, 2:15",plays:[{id:"play-1",clock:{displayValue:"8:21"},period:{number:1},type:{text:"Shotgun"},text:"I.Pacheco left tackle to PHI 20 for 24 yards (M.Epps).",start:{downDistanceText:"2nd & 5 at PHI 44"}},{id:"play-2",clock:{displayValue:"9:33"},period:{number:1},type:{text:"Shotgun"},text:"P.Mahomes pass short middle to T.Kelce to KC 48 for 20 yards (T.Edwards).",start:{downDistanceText:"1st & 10 @ KC 25"}},{id:"play-3",clock:{displayValue:"10:09"},period:{number:1},type:{text:"Shotgun"},text:"I.Pacheco up the middle to KC 28 for 3 yards (J.Hargrave).",start:{downDistanceText:"1st & 10 @ KC 25"}},{id:"play-4",clock:{displayValue:"11:15"},period:{number:1},type:{text:"Shotgun"},text:"P.Mahomes pass complete short right to T.Kelce to KC 35 for 10 yards (J.Bradberry).",start:{downDistanceText:"2nd & 10 at KC 25"}}]}],meta:{gp_topic:"gp-basketball-wnba-401736212",picker_topic:"picker-basketball-wnba",gameState:"in"}},l=e=>e&&"object"==typeof e&&"$key"in e&&"value"in e&&"displayValue"in e&&"displayName"in e,r=e=>Array.isArray(e)&&e.every(e=>(e=>e&&"object"==typeof e&&"stats"in e&&Array.isArray(e.stats))(e));var n=a(35),d=a(8),c=a(4);function u(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var i=a.call(e,t||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var m=class{constructor(e){u(this,"networkManager",void 0),u(this,"overrideUrl",null),this.networkManager=new n.b({externalBaseURL:e.getStatsAPIBaseURL()})}async getStatsByUrl(e){return this.networkManager.externalApiRequest({endpoint:this.getSyncEndpoint(e),method:n.a.GET,params:{deviceType:"ictv"},headers:{}})}pollStatsByUrl(e,t,a,i){return this.networkManager.pollExternalApiRequest({endpoint:this.getSyncEndpoint(e),interval:t,method:n.a.GET,params:{deviceType:"ictv"},headers:{},onData:a,onError:i})}getSyncEndpoint(e){if(this.overrideUrl)return console.log("[StatsService] Using overrideUrl:",this.overrideUrl),this.overrideUrl;const{leagueId:t,mainId:a}=this.getIdsFromPageConfig();return`/${t}/${a}/en/us/${this.formatTimeCodeForAPI(e)}`}getIdsFromPageConfig(){const e=d.default.getPageConfig();if(!e)throw new Error("Page config is null or undefined");const t=e.page.metadata,a=null==t?void 0:t.external_field_1,i=null==t?void 0:t.external_field_5;if(!a||!i){const e=Object.keys(t||{}).join(", ");throw new Error("Missing eventId or leagueId in page config metadata. Cannot build sync URL. Required fields: external_field_1 (eventId), external_field_5 (leagueId). Available fields: "+e)}const{leagueId:s,fauxcastId:o}=this.parseLeagueData(i),l=o||a;if(!l.trim()||!s.trim())throw new Error("MainId or leagueId is empty string in page config metadata");return{eventId:a,leagueId:s,mainId:l}}parseLeagueData(e){try{const t=JSON.parse(e);if(!t.leagueId)throw new Error("leagueId not found in parsed JSON");return{leagueId:t.leagueId,fauxcastId:t.fauxcastId}}catch(t){const a=new Error("Failed to parse leagueId from external_field_5. Raw value: "+e);throw Object(c.a)(a,{rawValue:e,parseError:t}),a}}formatTimeCodeForAPI(e){if(!e||0===e)return"latest";if("number"!=typeof e||isNaN(e)||!isFinite(e))return console.warn('Invalid timecode provided, using "latest":',e),"latest";try{const t=new Date(e);if(isNaN(t.getTime()))return console.warn('Invalid date from timecode, using "latest":',e),"latest";const a=Date.now();if(a-e<0)return"latest";return t.toISOString().replace(/\.\d{3}Z$/,"Z")}catch(t){return Object(c.a)(t,{timeCode:e}),console.warn('Error formatting timecode, using "latest":',e,t),"latest"}}};const h=e=>{var t,a;if(!e)return{plays:"0",yards:"0",time:""};const i=e.split(", ");return{plays:(null===(t=i[0])||void 0===t?void 0:t.split(" ")[0])||"0",yards:(null===(a=i[1])||void 0===a?void 0:a.split(" ")[0])||"0",time:i[2]||""}},p=e=>{var t;if(null==e||null===(t=e.period)||void 0===t||!t.number)return"";const a=(e=>{const t=e%100;if(t>=11&&t<=13)return"th";switch(e%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}})(e.period.number);return`(${e.clock.displayValue} - ${e.period.number}${a}) (${e.type.text}) ${e.text}`};var y=a(120),v=a(104);function g(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var i=a.call(e,t||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const b={activeAthletes:"activeAthletes",driveSummary:"drives",gameLeaders:"leaders",headerTeam:"header",matchPredictor:"predictor",playerSeasonStats:"playerStats",promotion:"promotion",recentGames:"previousGames",scoringSummary:"scoringSummary",teamStats:"entities",winProbability:"winProbability",careerMatchup:"careerMatchup",penalties:"penaltySummary"};class f extends s.a{constructor(e,t,a,s={}){super(),g(this,"isDataLoading",new i.a(!0)),g(this,"hasEverSuccessfullyLoaded",new i.a(!1)),g(this,"eventId",void 0),g(this,"statsItems",new i.a([])),g(this,"errorState",new i.a("none")),g(this,"currentGameState",new i.a("")),g(this,"statsService",void 0),g(this,"analyticsService",void 0),g(this,"useMockData",!1),g(this,"lastResponseHash",null),g(this,"currentPlayerTimeCode",null),g(this,"timecodePollingTask",null),g(this,"smartPollingTimeout",null),g(this,"timecodePollingState",{isActive:!1,currentUrl:null,lastUpdateTime:0}),g(this,"onEngage",e=>{this.analyticsService.panelClick({type:"espnStats",name:"stats_item_clicked",metadata:{card:[b[e]],game_state:[this.currentGameState.value]}})}),this.eventId=e,this.useMockData=s.useMockData||!1,this.statsService=new m(t),this.analyticsService=a}setDataToPanel(e){if("overrideUrl"in e){const t=e.overrideUrl;"string"==typeof t&&t.length>0&&(console.log("[StatsViewModel] Setting overrideUrl:",t),this.statsService.overrideUrl=t)}}async init(){if(this.useMockData)await this.fetchMockData();else{const e=this.getCurrentTimeCode();this.onUpdatePlayerTimeCode(e),this.analyticsService.panelView("espnStats")}}getCurrentTimeCode(){try{const e=d.default.getMaestroEventViewModel();if(e&&"function"==typeof e.getPlayerTimeCode)return e.getPlayerTimeCode()}catch(e){Object(c.a)(e,{context:"StatsViewModel.getCurrentTimeCode"}),console.warn("Could not get current timecode from MaestroEventViewModel:",e)}return null}cleanup(){this.stopTimecodePolling(),this.clearSmartPollingTimeout(),this.resetTimecodePollingState()}onUpdatePlayerTimeCode(e){if(this.currentPlayerTimeCode=e,!this.useMockData)try{this.performSmartPolling(e)}catch(e){Object(c.a)(e,{context:"StatsViewModel.onUpdatePlayerTimeCode"}),console.error("Error handling player timecode update:",e),this.handleTimecodeError("Error handling player timecode update",e)}}clearTabLoadFailure(){this.errorState.value="none";const e=this.getCurrentTimeCode();this.onUpdatePlayerTimeCode(e)}async performSmartPolling(e){this.clearSmartPollingTimeout(),this.stopTimecodePolling();try{const t=await this.statsService.getStatsByUrl(e);if(!t)throw new Error("API returned undefined or null response");this.processPolledData(t),this.smartPollingTimeout=window.setTimeout(()=>{this.startTimecodePolling(e),this.smartPollingTimeout=null},1e3)}catch(t){Object(c.a)(t,{context:"StatsViewModel.performSmartPolling"}),console.error("Error during smart polling immediate call:",t),this.handleTimecodeError("Error during smart polling immediate call",t),this.stopTimecodePolling(),this.startTimecodePolling(e)}}handleTimecodeError(e,t){var a;const i={context:e,errorType:(null==t||null===(a=t.constructor)||void 0===a?void 0:a.name)||"Unknown",errorMessage:t instanceof Error?t.message:String(t),timestamp:(new Date).toISOString(),currentTimecode:this.currentPlayerTimeCode,hasExistingData:this.statsItems.value.length>0,lastResponseHash:this.lastResponseHash,url:this.timecodePollingState.currentUrl};console.error(e+":",i),this.hasEverSuccessfullyLoaded.value||(this.errorState.value="tabLoadFailure")}clearSmartPollingTimeout(){this.smartPollingTimeout&&(clearTimeout(this.smartPollingTimeout),this.smartPollingTimeout=null)}resetTimecodePollingState(){this.timecodePollingState={isActive:!1,currentUrl:null,lastUpdateTime:0}}startTimecodePolling(e){this.stopTimecodePolling();try{this.timecodePollingTask=this.statsService.pollStatsByUrl(e,1e4,e=>{this.processPolledData(e)},e=>{console.error("Timecode polling error:",e),this.handleTimecodeError("Timecode polling error",e)}),this.timecodePollingState.isActive=!0}catch(e){Object(c.a)(e,{context:"StatsViewModel.startTimecodePolling"}),console.error("Error setting up timecode-based Stats polling:",e),this.handleTimecodeError("Error setting up timecode-based Stats polling",e)}}stopTimecodePolling(){this.timecodePollingTask&&(this.timecodePollingTask.stop(),this.timecodePollingTask=null),this.timecodePollingState.isActive=!1}async fetchMockData(){this.processData(o),this.hasEverSuccessfullyLoaded.value=!0,this.isDataLoading.value=!1}processPolledData(e){const t=JSON.stringify(e),a=Object(v.b)(t);this.hasEverSuccessfullyLoaded.value&&a===this.lastResponseHash||(this.lastResponseHash=a,this.hasEverSuccessfullyLoaded.value=!0,this.errorState.value="none",this.processData(e),"post"===e.gameState&&this.stopTimecodePolling())}processData(e){const t=[],a=this.parseHeaderTeams(e);a&&t.push(a);const i=this.parseMatchPredictor(e);i&&t.push(i);const s=this.parseCareerMatchup(e);s&&t.push(s);const o=this.parsePlayerSeasonStats(e);o&&t.push(o);const l=this.parseScoringSummary(e);l&&t.push(l);const r=this.parseWinProbability(e);r&&t.push(r);const n=this.parseTeamSeasonStatistics(e)||this.parseTeamsStatistics(e);n&&t.push(n);const d=this.parseDriveSummary(e);d.length>0&&t.push(...d);const c=this.parsePenalties(e);c&&t.push(c);const u=this.parseActiveAthletes(e);u&&t.push(u);const m=this.parseGameLeaders(e);m&&t.push(m);const h=this.parseRecentGames(e);h&&t.push(h);const p=this.parsePromotion(e);p&&t.push(p),this.statsItems.value=t,this.currentGameState.value=e.gameState}parseDriveSummary(e){var t;const a=null===(t=e.entities)||void 0===t?void 0:t.teams,i=e.drives;if(!a||!i||0===i.length)return[];const s=[];for(const e of i){var o;if(null==e||null===(o=e.team)||void 0===o||!o.$key)continue;const t=[...e.plays||[]].reverse(),i=t[t.length-1]||null;let l="";i&&(l=p(i));const{plays:r,time:n,yards:d}=h(e.description||""),c=a[e.team.$key];c&&s.push({id:e.id,lastPlayMarquee:l,plays:t,playsQuantity:r,team:c,time:n,type:"driveSummary",yards:d})}return s}parseTeamsStatistics(e){var t;const a=null===(t=e.entities)||void 0===t?void 0:t.teams;if(!a)return null;const i=Object.values(a).find(e=>"away"===e.homeAway),s=Object.values(a).find(e=>"home"===e.homeAway);if(!i||!s)return null;if(!i.statistics||!s.statistics)return null;const o=[];for(let e=0;e<i.statistics.length;e++){const t=i.statistics[e],a=s.statistics[e];l(t)&&l(a)&&o.push({awayTeamDisplayValue:(null==t?void 0:t.displayValue)||"0",displayName:t.displayName||"",homeTeamDisplayValue:(null==a?void 0:a.displayValue)||"0",awayTeamValue:(null==t?void 0:t.value)||0,homeTeamValue:(null==a?void 0:a.value)||0})}return o.length?{type:"teamStats",title:"Team Stats",awayTeam:{logo:i.logo,displayName:i.displayName||"",color:i.color||"",abbreviation:i.abbreviation||""},homeTeam:{logo:s.logo,displayName:s.displayName||"",color:s.color||"",abbreviation:s.abbreviation||""},statistics:o}:null}parseTeamSeasonStatistics(e){var t,a,i,s,o;const l=(null===(t=e.entities)||void 0===t?void 0:t.teams)||{};if(!(Object.keys(l).length&&e.statTeams&&e.statTeams.title&&null!==(a=e.statTeams.sections)&&void 0!==a&&a.length&&null!==(i=e.statTeams.teams)&&void 0!==i&&i.length))return null;const n=null===(s=e.statTeams.teams[0])||void 0===s?void 0:s.$key,d=null===(o=e.statTeams.teams[1])||void 0===o?void 0:o.$key;if(!n||!d)return null;const c=l[n],u=l[d];if(!u||!c)return null;const m={};return e.statTeams.sections.forEach(e=>{if(e.$key&&e.title){const i=[];if(r(u.statistics)&&r(c.statistics)){var t,a;const s=u.statistics.find(t=>t.$key===e.$key),o=c.statistics.find(t=>t.$key===e.$key);if(s&&o&&null!==(t=o.stats)&&void 0!==t&&t.length&&null!==(a=s.stats)&&void 0!==a&&a.length){for(let e=0;e<o.stats.length;e++){const t=o.stats[e],a=s.stats[e];i.push({awayTeamDisplayValue:(null==t?void 0:t.displayValue)||"0",displayName:t.displayName||"",homeTeamDisplayValue:(null==a?void 0:a.displayValue)||"0",awayTeamValue:null!=t&&t.displayValue?Number(t.displayValue):0,homeTeamValue:null!=a&&a.displayValue?Number(a.displayValue):0})}m[e.$key]={title:e.title,entries:i}}}}}),{type:"teamStats",title:e.statTeams.title,awayTeam:{abbreviation:c.abbreviation,displayName:c.displayName||"",color:c.color||"",logo:c.logo},homeTeam:{abbreviation:u.abbreviation,displayName:u.displayName||"",color:u.color||"",logo:u.logo},tabbedStatistics:m}}parseMatchPredictor(e){var t;const a=null===(t=e.entities)||void 0===t?void 0:t.teams,i=e.predictor;if(!(a&&i&&i.homeTeam&&i.awayTeam))return null;const s=a[i.homeTeam.team.$key],o=a[i.awayTeam.team.$key];if(!s||!o)return null;const l=parseFloat(i.homeTeam.gameProjection),r=parseFloat(i.awayTeam.gameProjection);return{type:"matchPredictor",header:i.header,imageUrl:i.imageUrl,awayTeam:{percentage:r,abbreviation:o.abbreviation,logo:o.logo,displayName:o.displayName||""},homeTeam:{percentage:l,abbreviation:s.abbreviation,logo:s.logo,displayName:s.displayName||""}}}parsePromotion(e){const t=e.promotion;return t?{type:"promotion",title:t.title||"",description:t.description||"",logo:t.logo||"",qrCode:t.qrCode||"",backgroundImage:t.backgroundImage||""}:null}parseCareerMatchup(e){var t;const a=e.careerMatchup,i=null===(t=e.entities)||void 0===t?void 0:t.athletes;if(!a||!a.sections)return null;const s=e=>{if("string"==typeof e)return e;if(e&&"object"==typeof e){const t=e.displayName;if("string"==typeof t)return t}return""},o=a.sections.filter(e=>!!e).map(e=>({items:(e.items||[]).filter(e=>!!e).map(e=>{var t;const a=null===(t=e.athlete)||void 0===t?void 0:t.$key,o=i&&a?i[a]:void 0,l=s(e.status),r="On Deck"===l;return{status:l,type:s(e.type)||"",displayName:s(e.displayName)||"",athlete:o,isHighlighted:r}}),statistics:(e.statistics||[]).filter(e=>!!e).map(e=>({abbreviation:e.abbreviation||"",displayValue:e.displayValue||""}))}));return{type:"careerMatchup",title:a.title||"",sections:o}}parseHeaderTeams(e){return this.parseHeaderTeamsFromTeamHeader(e)||this.parseHeaderTeamsFromHeader(e)}parseHeaderTeamsFromHeader(e){var t,a;const i=(null===(t=e.header)||void 0===t?void 0:t.teams)||[];return 0===i.length?null:this.buildHeaderTeamsItem({response:e,headerTeams:i,linescoresHeader:(null===(a=e.header)||void 0===a?void 0:a.linescoresHeader)||[],linescoresRowHeader:void 0,isLiveFromHeaderSource:!1})}parseHeaderTeamsFromTeamHeader(e){var t,a,i,s,o,l,r,n;const d=(null===(t=e.header)||void 0===t?void 0:t.teams)||[],c=(null===(a=e.teamHeader)||void 0===a?void 0:a.teams)||[];if(0===c.length)return null;const u=c.some(e=>Array.isArray(e.linescores)&&e.linescores.length>0),m=((null===(i=e.teamHeader)||void 0===i||null===(s=i.linescoresHeader)||void 0===s?void 0:s.length)||0)>0;if(!u&&!m&&d.length>0)return null;const h="teamLogo"===(null===(o=e.teamHeader)||void 0===o||null===(l=o.style)||void 0===l||null===(r=l.linescores)||void 0===r?void 0:r.rowHeader)?"teamLogo":void 0;return this.buildHeaderTeamsItem({response:e,headerTeams:c,linescoresHeader:(null===(n=e.teamHeader)||void 0===n?void 0:n.linescoresHeader)||[],linescoresRowHeader:h,isLiveFromHeaderSource:u||m})}buildHeaderTeamsItem(e){var t;const{response:a,headerTeams:i,linescoresHeader:s,linescoresRowHeader:o,isLiveFromHeaderSource:r}=e,n=null===(t=a.entities)||void 0===t?void 0:t.teams;if(!n||0===i.length)return null;const d=i.find(e=>{const t=n[e.$key];return t&&"home"===t.homeAway}),c=i.find(e=>{const t=n[e.$key];return t&&"away"===t.homeAway}),u=i[0],m=i[1],h=d||m,p=c||u;if(!h||!p)return null;const y=n[h.$key],v=n[p.$key];if(!y||!v)return null;const g=[],b=new Set,f=v.statistics||[],w=y.statistics||[],k=f.filter(l),T=w.filter(l);[...k,...T].forEach(e=>{b.add(e.$key)}),b.forEach(e=>{const t=k.find(t=>t.$key===e),a=T.find(t=>t.$key===e);t&&a&&g.push({displayName:(null==t?void 0:t.displayName)||(null==a?void 0:a.displayName)||"",awayTeamValue:(null==t?void 0:t.value)||0,homeTeamValue:(null==a?void 0:a.value)||0,awayTeamDisplayValue:(null==t?void 0:t.displayValue)||"0",homeTeamDisplayValue:(null==a?void 0:a.displayValue)||"0"})});const S=e=>e.linescores&&e.linescores.length>0?e.linescores.map(e=>e.displayValue):"string"==typeof e.score&&e.score.length>0?[e.score]:[],P=e=>{if(Array.isArray(e.details)&&e.details.filter(Boolean).length>0)return e.details.filter(Boolean)},N=P(p),$=P(h);let A=s,V=S(p),C=S(h);if(A.length>0&&(V.length>0||C.length>0)&&"teamLogo"===o){const e=A.slice(-3);if((e.includes("R")||e.includes("H")||e.includes("E"))&&A.length>12){const e=3,t=A.length-e,a=9;if(t>a){const e=t-a;A=A.slice(e),V=V.slice(e),C=C.slice(e)}}}return{type:"headerTeam",linescoresHeader:A,linescoresRowHeader:o,isLive:"in"===a.gameState||"post"===a.gameState||r,statistics:g,awayTeam:{abbreviation:v.abbreviation,color:v.color,id:v.id,linescores:V,logo:v.logo,name:v.name,record:v.record,...N?{details:N}:{}},homeTeam:{abbreviation:y.abbreviation,color:y.color,id:y.id,linescores:C,logo:y.logo,name:y.name,record:y.record,...$?{details:$}:{}}}}parseRecentGames(e){var t,a,i;const s=null===(t=e.entities)||void 0===t?void 0:t.teams,o=e.previousGames;if(!s||!o||0===o.length)return null;const l=o.find(e=>1===(null==e?void 0:e.displayOrder)),r=o.find(e=>2===(null==e?void 0:e.displayOrder));if(!l||!r)return null;if(!l.events||!r.events)return null;if(null===(a=l.team)||void 0===a||!a.$key||null===(i=r.team)||void 0===i||!i.$key)return null;const n=s[l.team.$key],d=s[r.team.$key];if(!n||!d)return null;return{type:"recentGames",awayTeam:{events:[...l.events].reverse().filter(e=>{var t;return null==e||null===(t=e.team)||void 0===t?void 0:t.$key}).map(e=>{const t=s[e.team.$key];return{gameResult:e.gameResult,homeAway:e.team.homeAway,score:e.score,teamLogo:null==t?void 0:t.logo}}),logo:n.logo,name:n.shortDisplayName},homeTeam:{events:[...r.events].reverse().filter(e=>{var t;return null==e||null===(t=e.team)||void 0===t?void 0:t.$key}).map(e=>{const t=s[e.team.$key];return{gameResult:e.gameResult,homeAway:e.team.homeAway,score:e.score,teamLogo:null==t?void 0:t.logo}}),logo:d.logo,name:d.shortDisplayName}}}parseWinProbability(e){var t;const a=e.winProbability;if(!a||!a.homeTeam||!a.awayTeam)return null;const i=null===(t=e.entities)||void 0===t?void 0:t.teams;if(!i)return null;const s=i[a.homeTeam.team.$key],o=i[a.awayTeam.team.$key];return s&&o?{type:"winProbability",chartImageUrl:a.imageUrl,awayTeam:{id:o.id,abbreviation:o.abbreviation,logo:o.logo,winPercentage:a.awayTeam.winPercentage},homeTeam:{id:s.id,abbreviation:s.abbreviation,logo:s.logo,winPercentage:a.homeTeam.winPercentage}}:null}parseGameLeaders(e){var t,a;if(null===(t=e.entities)||void 0===t||!t.athletes||null===(a=e.entities)||void 0===a||!a.teams)return null;const i=e.leaders,s="pre"===e.gameState;if(!i||0===i.length)return null;const o=[];for(const t of i){var l,r,n,d,c,u;if(!t.away||!t.home)continue;if(null===(l=t.away)||void 0===l||null===(r=l.athlete)||void 0===r||!r.$key||null===(n=t.home)||void 0===n||null===(d=n.athlete)||void 0===d||!d.$key)continue;const a=e.entities.athletes[t.away.athlete.$key],i=e.entities.athletes[t.home.athlete.$key];if(!a||!i)continue;const s=t.away.athlete.statistics||[],m=t.home.athlete.statistics||[],h={displayName:t.displayName,awayAthlete:{id:a.id,displayName:a.displayName,headshot:a.headshot?Object(y.a)(a.headshot,256,144):"",position:(null===(c=a.position)||void 0===c?void 0:c.abbreviation)||"-",shortName:a.shortName,jersey:a.jersey,statistics:s},homeAthlete:{id:i.id,displayName:i.displayName,headshot:i.headshot?Object(y.a)(i.headshot,256,144):"",position:(null===(u=i.position)||void 0===u?void 0:u.abbreviation)||"-",shortName:i.shortName,jersey:i.jersey,statistics:m}};o.push(h)}return o.length?{type:"gameLeaders",items:o,displayText:s?"Season Leaders":"Game Leaders"}:null}parseActiveAthletes(e){var t;const a=e.activeAthletes,{awayTeam:i,homeTeam:s}=this.getActiveAthletesTeamInfo(e),o=[];if(null===(t=e.entities)||void 0===t||!t.athletes||!a||-1===i.index||-1===s.index)return null;for(let t=0;t<a.teams[i.index].athletes.length;t++){var l,r;const n=a.teams[i.index].athletes[t],d=a.teams[s.index].athletes[t];if(null==n||!n.$key||null==d||!d.$key)continue;const c=e.entities.athletes[n.$key],u=e.entities.athletes[d.$key];if(!c||!u)continue;const m=[],h=[],p=n.statLine||"",v=d.statLine||"";p.trim().split(",").forEach((e,t)=>{const[a,i]=e.trim().split(" "),s=v.trim().split(",")[t];if(!s)return;const[o,l]=s.trim().split(" ");m.push({displayValue:a||"0",abbreviation:i||"-",value:parseFloat(a)||0}),h.push({displayValue:o||"0",abbreviation:l||"-",value:parseFloat(o)||0})}),o.push({awayAthlete:{id:c.id,displayName:c.displayName,headshot:c.headshot?Object(y.a)(c.headshot,256,144):"",position:(null===(l=c.position)||void 0===l?void 0:l.abbreviation)||"-",shortName:c.shortName,jersey:c.jersey,statistics:m,minifiedStatistics:n.statLine},homeAthlete:{id:u.id,displayName:u.displayName,headshot:u.headshot?Object(y.a)(u.headshot,256,144):"",position:(null===(r=u.position)||void 0===r?void 0:r.abbreviation)||"-",shortName:u.shortName,jersey:u.jersey,statistics:h,minifiedStatistics:d.statLine}})}return o.length?{type:"activeAthletes",awayTeam:i,homeTeam:s,athletes:o,displayText:a.displayText}:null}getActiveAthletesTeamInfo(e){var t,a;const i=(null===(t=e.activeAthletes)||void 0===t?void 0:t.teams)||[];let s={index:-1,id:"",logo:"",name:"-"},o={index:-1,id:"",logo:"",name:"-"};const l=null===(a=e.entities)||void 0===a?void 0:a.teams;if(!l)return{awayTeam:s,homeTeam:o};for(let e=0;e<i.length;e++){const t=l[i[e].team.$key];t&&("away"===t.homeAway?s={index:e,id:t.id,logo:t.logo,name:t.name||"-"}:"home"===t.homeAway&&(o={index:e,id:t.id,logo:t.logo,name:t.name||"-"}))}return{awayTeam:s,homeTeam:o}}parseScoringSummary(e){var t,a;const i=e.scoringSummary;if(!i||!i.sections)return null;const s=null===(t=e.entities)||void 0===t?void 0:t.teams,o=null===(a=e.entities)||void 0===a?void 0:a.athletes;if((e=>e&&"object"==typeof e&&"title"in e&&"sections"in e&&e.sections&&Array.isArray(e.sections)&&e.sections.some(e=>e&&"items"in e&&Array.isArray(e.items)&&e.items.some(e=>e&&("text"in e||"shortText"in e||"header"in e))))(i)){const e=[];for(const t of i.sections){var l;if(!t.title||null===(l=t.items)||void 0===l||!l.length)continue;const a=[];for(const e of t.items){var r,n,d;if(null==e||null===(r=e.team)||void 0===r||!r.$key||null==e||null===(n=e.athlete)||void 0===n||!n.$key)continue;const t=null==s?void 0:s[e.team.$key],i=null==o?void 0:o[e.athlete.$key],l="#"+((null==i?void 0:i.jersey)||""),c=(null==i?void 0:i.shortName)||"";if(!t||!i)continue;const u=[];l&&u.push({featured:!1,title:l}),c&&u.push({featured:!0,title:c}),a.push({teamLogo:(null==t?void 0:t.logo)||"",teamName:null==t?void 0:t.abbreviation,headshot:null!=i&&i.headshot?Object(y.a)(i.headshot,200,144):void 0,athleteShortName:(null==i?void 0:i.shortName)||"",athleteJersey:(null==i?void 0:i.jersey)||"",athletePosition:(null==i||null===(d=i.position)||void 0===d?void 0:d.abbreviation)||"",text:(null==e?void 0:e.text)||"",shortText:u,header:((null==e?void 0:e.header)||[]).map((e,t)=>{var a,i;return{featured:null!==(a=e.featured)&&void 0!==a&&a,title:`${null!==(i=e.title)&&void 0!==i?i:""}${0===t?",":""}`}})})}a.length>0&&e.push({title:t.title,items:a})}return 0===e.length?null:{type:"scoringSummary",tag:"mlb",title:i.title||"Scoring Summary",sections:e}}if((e=>e&&"object"==typeof e&&"title"in e&&"sections"in e&&e.sections&&Array.isArray(e.sections)&&e.sections.every(e=>e&&"title"in e&&"items"in e&&Array.isArray(e.items)&&e.items.every(e=>e&&"clock"in e&&"title"in e&&"team"in e&&"athlete"in e)))(i)){const e=i,t=[];for(const a of e.sections||[]){const e=[];for(const t of a.items||[]){var c,u,m,h;if(null==t||null===(c=t.team)||void 0===c||!c.$key||null==t||null===(u=t.athlete)||void 0===u||!u.$key||null==t||!t.title)continue;const a=t.team&&t.team.$key?null==s?void 0:s[t.team.$key]:void 0,i=(null===(m=t.athlete)||void 0===m?void 0:m.$key)||"",l=null==o?void 0:o[i],r=t.title||"",[n,...d]=r.split(" ");let p="",v="";d.length>0&&(p=d[d.length-1],v=d.slice(0,-1).join(" "));const g=[];t.clock&&g.push({featured:!0,title:t.clock}),null!=a&&a.abbreviation&&g.push({featured:!1,title:a.abbreviation});const b=[];n&&b.push({featured:!1,title:n}),v&&b.push({featured:!0,title:v}),p&&b.push({featured:!1,title:p}),e.push({teamLogo:(null==a?void 0:a.logo)||"",teamName:(null==a?void 0:a.abbreviation)||"",header:g,text:(null==t?void 0:t.description)||"",shortText:b,headshot:null!=l&&l.headshot?Object(y.a)(l.headshot,200,144):void 0,athleteShortName:v,athletePosition:(null==l||null===(h=l.position)||void 0===h?void 0:h.abbreviation)||"",athleteJersey:n})}e.length>0&&t.push({title:(null==a?void 0:a.title)||"",items:e})}return 0===t.length?null:{type:"scoringSummary",tag:"hockey",title:e.title||"Scoring Summary",sections:t}}return null}parsePenalties(e){var t,a;const i=e.penaltySummary;if(!i||!i.sections)return null;const s=null===(t=e.entities)||void 0===t?void 0:t.teams,o=null===(a=e.entities)||void 0===a?void 0:a.athletes,l=i.sections.map(e=>{const t=e.items.filter(e=>{var t,a;return(null==e||null===(t=e.team)||void 0===t?void 0:t.$key)&&(null==e||null===(a=e.athlete)||void 0===a?void 0:a.$key)}).map(e=>{var t;const a=null==s?void 0:s[e.team.$key],i=null==o?void 0:o[e.athlete.$key],[l,...r]=e.title.split(" "),n=(null!=r?r:[]).join(" ")||"",d=[];return l&&d.push({featured:!1,title:l}),n&&d.push({featured:!0,title:n}),{teamLogo:(null==a?void 0:a.logo)||"",teamName:(null==a?void 0:a.abbreviation)||"",header:[{title:e.clock||"",featured:!1}],text:e.description||"",shortText:d,headshot:null!=i&&i.headshot?Object(y.a)(i.headshot,200,144):void 0,athleteShortName:r.join(" "),athletePosition:(null==i||null===(t=i.position)||void 0===t?void 0:t.abbreviation)||"",athleteJersey:l||""}});return{title:e.title,items:t}});return!l.length||l.every(e=>0===e.items.length)?null:{type:"penalties",tag:"penalties",title:i.title,sections:l}}parsePlayerSeasonStats(e){var t,a,i;const s=e.playerStats,o=null===(t=e.entities)||void 0===t?void 0:t.teams,l=null===(a=e.entities)||void 0===a?void 0:a.athletes;if(null==s||null===(i=s.teams)||void 0===i||!i.length||!o)return null;const r=[];for(const e of s.teams){if(!e.$key)continue;const t=o[e.$key];if(!t)continue;const a=[];for(const t of e.sections||[]){var n;if(!t.title||null===(n=t.items)||void 0===n||!n.length)continue;const e=[];for(const a of t.items){var d,c,u,m,h;if(!a.title)continue;const t=null===(d=a.athlete)||void 0===d?void 0:d.$key,i=t?null==l?void 0:l[t]:void 0,s=(null===(c=a.athlete)||void 0===c?void 0:c.statistics)||[],o=s.find(e=>e.featured);e.push({title:a.title,headshot:null!=i&&i.headshot?Object(y.a)(i.headshot,256,144):"",position:(null==i||null===(u=i.position)||void 0===u?void 0:u.abbreviation)||"",jersey:(null==i?void 0:i.jersey)||"",featuredStat:o?{displayValue:o.displayValue||"",label:o.label||""}:null,statistics:s.filter(e=>!e.featured).map(e=>({displayValue:e.displayValue||"",label:e.label||""})),playerStatus:null!=a&&a.status?{displayName:null!==(m=a.status.displayName)&&void 0!==m?m:"",type:null!==(h=a.status.type)&&void 0!==h?h:""}:null})}e.length>0&&a.push({title:t.title,items:e})}a.length>0&&r.push({teamKey:e.$key,shortDisplayName:t.shortDisplayName||t.displayName||"",color:t.color||"",sections:a})}return 0===r.length?null:{type:"playerSeasonStats",teams:r}}}t.default=f}}]);
2
- //# sourceMappingURL=10.maestro-web-sdk.esm.js.map
@@ -1 +0,0 @@
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","deviceType","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":"10.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: { deviceType: 'ictv' },\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: { deviceType: 'ictv' },\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":""}
@@ -1,2 +0,0 @@
1
- (window.webpackJsonp=window.webpackJsonp||[]).push([[11],{104:function(e,t,a){"use strict";a.d(t,"a",(function(){return s})),a.d(t,"b",(function(){return i}));const s=e=>e.toLowerCase().trim().replace(/[\s\W-]+/g,"-").replace(/^-+|-+$/g,"");function i(e){let t=0;for(let a=0;a<e.length;a++){t=(t<<5)-t+e.charCodeAt(a),t&=t}return t}},122:function(e,t,a){"use strict";a.d(t,"a",(function(){return s}));const s=e=>"product"===e.type},245:function(e,t,a){"use strict";a.r(t),a.d(t,"ShopViewModel",(function(){return k}));var s=a(3),i=a(35);function r(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var s=a.call(e,t||"default");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var o=class{constructor(e){r(this,"networkManager",void 0),r(this,"eventId",void 0),this.eventId=e,this.networkManager=new i.b({externalBaseURL:"https://site.api.espn.com"})}pollShopData(e,t,a){return this.networkManager.pollExternalApiRequestWithHeaders({endpoint:`/apis/site/v2/events/${this.eventId}/shop`,interval:e,method:i.a.GET,params:{deviceType:"ictv"},headers:{},onData:t,onError:a})}},n=a(34),l=a(122);const c={shop:[{sections:[{title:"Chiefs Shop",items:[{type:"product",name:"Men's Kansas City Chiefs Patrick Mahomes Nike Red Game Player Jersey",image:{href:"https://fanatics.frgimages.com/kansas-city-chiefs/mens-kansas-city-chiefs-patrick-mahomes-nike-red-game-player-jersey_pi3453000_ff_3453170-8a4fb50f27b4aacd8c3b_full.jpg"},price:{displayRetail:"$119.99"},detail:{title:"Chiefs Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/chiefs-mahomes-jersey",link:{href:"https://fanatics.com/chiefs-mahomes-jersey",text:"Scan to shop"}}},{type:"product",name:"Kansas City Chiefs New Era 2024 AFC Conference Champions Locker Room 9FORTY Adjustable Hat - Red",image:{href:"https://fanatics.frgimages.com/kansas-city-chiefs/kansas-city-chiefs-new-era-2024-afc-conference-champions-locker-room-9forty-adjustable-hat-red_pi5595000_ff_5595784_full.jpg"},price:{displayRetail:"$34.99",displaySale:"$24.99"},detail:{title:"Chiefs Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/chiefs-hat",link:{href:"https://fanatics.com/chiefs-hat",text:"Scan to shop"}}},{type:"browse",name:"Want More?",caption:"Browse all Chiefs merch",image:{href:"https://a.espncdn.com/i/teamlogos/nfl/500/kc.png"},detail:{title:"Chiefs Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/chiefs",link:{href:"https://fanatics.com/chiefs",text:"Scan to browse all"}}}]},{title:"49ers Shop",items:[{type:"product",name:"Men's San Francisco 49ers Brock Purdy Nike Scarlet Game Player Jersey",image:{href:"https://fanatics.frgimages.com/san-francisco-49ers/mens-san-francisco-49ers-brock-purdy-nike-scarlet-game-player-jersey_pi5068000_ff_5068449_full.jpg"},price:{displayRetail:"$119.99"},detail:{title:"49ers Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/49ers-purdy-jersey",link:{href:"https://fanatics.com/49ers-purdy-jersey",text:"Scan to shop"}}},{type:"product",name:"Men's San Francisco 49ers George Kittle Nike Scarlet Game Player Jersey",image:{href:"https://fanatics.frgimages.com/san-francisco-49ers/mens-san-francisco-49ers-george-kittle-nike-scarlet-game-player-jersey_pi4234000_ff_4234524_full.jpg"},price:{displayRetail:"$119.99",displayClearance:"$79.99"},detail:{title:"49ers Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/49ers-kittle-jersey",link:{href:"https://fanatics.com/49ers-kittle-jersey",text:"Scan to shop"}}},{type:"browse",name:"Want More?",caption:"Browse all 49ers merch",image:{href:"https://a.espncdn.com/i/teamlogos/nfl/500/sf.png"},detail:{title:"49ers Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/49ers",link:{href:"https://fanatics.com/49ers",text:"Scan to browse all"}}}]},{title:"NFL Shop",items:[{type:"product",name:"NFL Nike Official Authentic Game Football",image:{href:"https://fanatics.frgimages.com/nfl/nfl-nike-official-authentic-game-football_pi4759000_ff_4759291_full.jpg"},price:{displayRetail:"$99.99"},detail:{title:"NFL Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/nfl-football",link:{href:"https://fanatics.com/nfl-football",text:"Scan to shop"}}},{type:"browse",name:"Want More?",caption:"Browse all NFL merch",image:{href:"https://a.espncdn.com/i/teamlogos/leagues/500/nfl.png"},detail:{title:"NFL Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/nfl",link:{href:"https://fanatics.com/nfl",text:"Scan to browse all"}}}]}]}]},p={shop:[{sections:[{title:"Lakers Shop",items:[{type:"product",name:"Men's Los Angeles Lakers LeBron James Nike Purple Swingman Jersey - Icon Edition",image:{href:"https://fanatics.frgimages.com/los-angeles-lakers/mens-los-angeles-lakers-lebron-james-nike-purple-swingman-jersey-icon-edition_pi4548000_ff_4548764_full.jpg"},price:{displayRetail:"$129.99"},detail:{title:"Lakers Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/lakers-lebron-jersey",link:{href:"https://fanatics.com/lakers-lebron-jersey",text:"Scan to shop"}}},{type:"product",name:"Men's Los Angeles Lakers Anthony Davis Nike Gold Swingman Jersey - City Edition",image:{href:"https://fanatics.frgimages.com/los-angeles-lakers/mens-los-angeles-lakers-anthony-davis-nike-gold-swingman-jersey-city-edition_pi5129000_ff_5129446_full.jpg"},price:{displayRetail:"$129.99"},detail:{title:"Lakers Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/lakers-davis-jersey",link:{href:"https://fanatics.com/lakers-davis-jersey",text:"Scan to shop"}}},{type:"browse",name:"Want More?",caption:"Browse all Lakers merch",image:{href:"https://a.espncdn.com/i/teamlogos/nba/500/lal.png"},detail:{title:"Lakers Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/lakers",link:{href:"https://fanatics.com/lakers",text:"Scan to browse all"}}}]}]}]},h={shop:[{sections:[{title:"Texas Football Shop",items:[{type:"product",name:"Texas Longhorns Champion University Tee - Burnt Orange",image:{href:"https://fanatics.frgimages.com/texas-longhorns/texas-longhorns-champion-university-tee-burnt-orange_pi4892000_ff_4892615_full.jpg"},price:{displayRetail:"$34.99"},detail:{title:"Texas Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas-tee",link:{href:"https://fanatics.com/texas-tee",text:"Scan to shop"}}},{type:"browse",name:"Want More?",caption:"Browse all Texas merch",image:{href:"https://a.espncdn.com/i/teamlogos/ncaa/500/251.png"},detail:{title:"Texas Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas",link:{href:"https://fanatics.com/texas",text:"Scan to browse all"}}}]},{title:"Texas A&M Shop",items:[{type:"product",name:"Texas A&M Aggies New Era Maroon 9FORTY Adjustable Hat",image:{href:"https://fanatics.frgimages.com/texas-am-aggies/texas-am-aggies-new-era-maroon-9forty-adjustable-hat_pi4156000_ff_4156429_full.jpg"},price:{displayRetail:"$29.99"},detail:{title:"Texas A&M Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas-am-hat",link:{href:"https://fanatics.com/texas-am-hat",text:"Scan to shop"}}},{type:"browse",name:"Want More?",caption:"Browse all Texas A&M merch",image:{href:"https://a.espncdn.com/i/teamlogos/ncaa/500/245.png"},detail:{title:"Texas A&M Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas-am",link:{href:"https://fanatics.com/texas-am",text:"Scan to browse all"}}}]}]}]},d={shop:[{sections:[],defaultItem:{detail:{disclaimer:"Visit shop.espn.com to explore more products and exclusive offers.",title:"Shop the ESPN Store",backgroundImage:"https://placedog.net/568x704"}}}]},f={shop:[{sections:[{title:"Team Shop",items:[{type:"product",name:"Premium Team Jersey - Official Merchandise",image:{href:"https://via.placeholder.com/400x400/0066cc/ffffff?text=Team+Jersey"},price:{displayRetail:"$89.99"},detail:{title:"Team Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/team-jersey",link:{href:"https://fanatics.com/team-jersey",text:"Scan to shop"}}},{type:"browse",name:"Want More?",caption:"Browse all team merch",image:{href:"https://via.placeholder.com/400x400/0066cc/ffffff?text=Team+Logo"},detail:{title:"Team Shop",qrCode:"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/team",link:{href:"https://fanatics.com/team",text:"Scan to browse all"}}}]}]}]};var m=a(4),u=a(104);function v(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var s=a.call(e,t||"default");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class g{constructor(e){v(this,"polling",{interval:3e4,task:null,lastResponseHash:null}),v(this,"shopService",void 0),this.shopService=e}refresh(e){this.stop(),this.start(e)}stop(){this.polling.task&&(this.polling.task.stop(),this.polling.task=null)}removeLastResponseHash(){this.polling.lastResponseHash=null}start(e){try{this.polling.task=this.shopService.pollShopData(this.polling.interval,t=>{this.updateInterval(t.headers,e),this.processPolledData(t.data,e)},e=>this.handlePollingError(e))}catch(e){Object(m.a)(e,{context:"ShopViewModel.pollShop"}),console.error("[SHOP] Error setting up shop polling:",e)}}updateInterval(e,t){const a=this.getResponseHeaderPollingIntervalValue(e);a&&a!==this.polling.interval&&(console.log(`[SHOP] Updating shop polling interval from ${this.polling.interval}ms to ${a}ms`),this.polling.interval=a,this.refresh(t))}getResponseHeaderPollingIntervalValue(e){const t=e["polling-interval"];if(!t)return null;const a=parseInt(t,10);return isNaN(a)||a<=0?(console.warn(`[SHOP] Invalid polling interval header received: ${t}.`),null):1e3*a}processPolledData(e,t){const a=Object(u.b)(JSON.stringify(e));this.polling.lastResponseHash!==a?(this.polling.lastResponseHash=a,t(e)):console.log("[SHOP] Shop Response hash is the same as last successful response - skipping update")}handlePollingError(e){console.error("[SHOP] Shop polling error:",e),Object(m.a)(e,{context:"ShopViewModel.pollShop",extra:{pollingInterval:this.polling.interval}})}}var y=a(8);function S(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var s=a.call(e,t||"default");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class k extends n.a{constructor(e,t,a={}){super(),S(this,"sections",new s.a([])),S(this,"isDataLoading",new s.a(!0)),S(this,"errorState",new s.a("none")),S(this,"hasEverSuccessfullyLoaded",new s.a(!1)),S(this,"promoData",new s.a(null)),S(this,"shopService",void 0),S(this,"analyticsService",void 0),S(this,"shopPolling",void 0),S(this,"useMockData",!1),S(this,"mockDataType","nfl"),S(this,"initialized",!1),this.shopService=new o(e),this.analyticsService=t,this.shopPolling=new g(this.shopService),this.useMockData=a.useMockData||!1,this.mockDataType=a.mockDataType||"nfl"}init(){this.trackPanelView(),this.fetchNewData(),this.initialized=!0}cleanup(){this.shopPolling.stop(),this.initialized=!1}async trackPanelView(){try{var e;const t=(null===(e=y.default.getMaestroEventViewModel().statsViewModel)||void 0===e?void 0:e.currentGameState.value)||"unknown";await this.analyticsService.panelView("espnShop",{game_state:[t]})}catch(e){Object(m.a)(e,{context:"ShopViewModel.trackPanelView"}),console.error("[SHOP] Error tracking panel view:",e)}}parsePriceToNumber(e){const t=e.replace(/[^0-9.,]/g,""),a=t.lastIndexOf(","),s=t.lastIndexOf(".");let i;return i=a>s?t.replace(/\./g,"").replace(",","."):s>a?t.replace(/,/g,""):-1!==a?t.replace(",","."):t,Number(i)||0}async trackItemClick(e,t,a){try{var s,i,r,o;let d=0,f=null;const m=(null===(s=y.default.getMaestroEventViewModel().statsViewModel)||void 0===s?void 0:s.currentGameState.value)||"unknown";if(t&&Object(l.a)(t)){var n,c,p,h;const e=null===(n=t.price)||void 0===n?void 0:n.displayRetail,a=(null===(c=t.price)||void 0===c?void 0:c.displayClearance)||(null===(p=t.price)||void 0===p?void 0:p.displaySale)||(null===(h=t.price)||void 0===h?void 0:h.displayRetail);if(a&&e){const t=this.parsePriceToNumber(e),s=this.parsePriceToNumber(a);d=t>0?Math.round(100*(1-s/t)):0,f=a}}await this.analyticsService.panelClick({type:"espnShop",name:"shop_item_clicked",metadata:{card:[e],game_state:[m],product:(null==a||null===(i=a.product)||void 0===i?void 0:i.id)||null,entity_type:[(null==a||null===(r=a.product)||void 0===r?void 0:r.type)||"unknown"],entity_name:[(null==a||null===(o=a.product)||void 0===o?void 0:o.shortDisplayName)||"unknown"],price:f,sale:[d+"%"]}})}catch(e){Object(m.a)(e,{context:"ShopViewModel.trackItemClick",item:t,section:a}),console.error("[SHOP] Error tracking shop item click:",e)}}refreshPolling(){try{if(this.useMockData)return;this.shopPolling.refresh(this.processShopData.bind(this))}catch(e){this.setTabLoadFailure()}}processShopData(e){try{var t;const a=null===(t=e.shop)||void 0===t?void 0:t[0],s=(null==a?void 0:a.sections)||[];if((null==s||!s.length)&&null!=a&&a.defaultItem)return this.errorState.value="emptyShop",this.sections.value=[],void(this.promoData.value=a.defaultItem);this.sections.value=s,this.errorState.value="none",this.hasEverSuccessfullyLoaded.value=!0,this.isDataLoading.value&&(this.isDataLoading.value=!1)}catch(e){Object(m.a)(e,{context:"ShopViewModel.processShopData"}),console.error("[SHOP] Error processing shop data:",e),this.setTabLoadFailure()}}setTabLoadFailure(){this.hasEverSuccessfullyLoaded.value||(this.errorState.value="tabLoadFailure",this.sections.value=[]),this.isDataLoading.value&&(this.isDataLoading.value=!1)}fetchNewData(){this.isDataLoading.value=!0;try{if(this.useMockData)return this.sections.value=[],void this.fetchMockData();this.refreshPolling()}catch(e){Object(m.a)(e,{context:"ShopViewModel.fetchNewData"}),console.error("[SHOP] Error fetching shop data:",e),this.setTabLoadFailure()}}fetchMockData(){let e;switch(this.mockDataType){case"nba":e=p;break;case"ncf":e=h;break;case"empty":e=d;break;case"single":e=f;break;case"nfl":default:e=c}this.processShopData(e),this.hasEverSuccessfullyLoaded.value=!0,this.isDataLoading.value=!1}clearTabLoadFailure(){this.errorState.value="none",this.shopPolling.removeLastResponseHash(),setTimeout(()=>{this.refreshPolling()},100)}}t.default=k}}]);
2
- //# sourceMappingURL=11.maestro-web-sdk.esm.js.map