@maestro_io/maestro-web-sdk 3.3.1 → 4.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/dist/f8820fca3a2a7957f753167da0884f9d.png +0 -0
  2. package/dist/maestro-web-sdk.esm.js +12 -12
  3. package/dist/maestro-web-sdk.esm.js.map +1 -1
  4. package/dist/maestro-web-sdk.umd.js +12 -12
  5. package/dist/maestro-web-sdk.umd.js.map +1 -1
  6. package/dist/package.json +91 -0
  7. package/dist/src/__mocks__/sentry.d.ts +4 -0
  8. package/dist/src/components/atoms/BaseButton/BaseButton.d.ts +1 -1
  9. package/dist/src/components/atoms/BaseButton/BaseButton.js +11 -0
  10. package/dist/src/components/atoms/BaseButton/index.js +2 -0
  11. package/dist/src/components/atoms/Image/index.d.ts +1 -1
  12. package/dist/src/components/atoms/Image/index.js +34 -0
  13. package/dist/src/components/atoms/Rive/index.d.ts +141 -11
  14. package/dist/src/components/atoms/Rive/index.js +53 -0
  15. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.d.ts +1 -2
  16. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.js +9 -0
  17. package/dist/src/components/atoms/SvgIcon/BetsIcon.d.ts +1 -1
  18. package/dist/src/components/atoms/SvgIcon/BetsIcon.js +11 -0
  19. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.d.ts +1 -1
  20. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.js +11 -0
  21. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.d.ts +1 -2
  22. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.js +6 -0
  23. package/dist/src/components/atoms/SvgIcon/CollapseIcon.d.ts +1 -2
  24. package/dist/src/components/atoms/SvgIcon/CollapseIcon.js +6 -0
  25. package/dist/src/components/atoms/SvgIcon/ExpandIcon.d.ts +1 -2
  26. package/dist/src/components/atoms/SvgIcon/ExpandIcon.js +6 -0
  27. package/dist/src/components/atoms/SvgIcon/FantasyIcon.d.ts +1 -1
  28. package/dist/src/components/atoms/SvgIcon/FantasyIcon.js +15 -0
  29. package/dist/src/components/atoms/SvgIcon/FlameIcon.d.ts +1 -1
  30. package/dist/src/components/atoms/SvgIcon/FlameIcon.js +11 -0
  31. package/dist/src/components/atoms/SvgIcon/Icon.d.ts +5 -5
  32. package/dist/src/components/atoms/SvgIcon/Icon.js +44 -0
  33. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.d.ts +1 -1
  34. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.js +10 -0
  35. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.d.ts +1 -1
  36. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.js +11 -0
  37. package/dist/src/components/atoms/SvgIcon/PlayIcon.d.ts +1 -1
  38. package/dist/src/components/atoms/SvgIcon/PlayIcon.js +8 -0
  39. package/dist/src/components/atoms/SvgIcon/ShopIcon.d.ts +1 -1
  40. package/dist/src/components/atoms/SvgIcon/ShopIcon.js +7 -0
  41. package/dist/src/components/atoms/SvgIcon/StatsIcon.d.ts +1 -1
  42. package/dist/src/components/atoms/SvgIcon/StatsIcon.js +12 -0
  43. package/dist/src/components/atoms/SvgIcon/TimesIcon.d.ts +1 -2
  44. package/dist/src/components/atoms/SvgIcon/TimesIcon.js +6 -0
  45. package/dist/src/components/atoms/SvgIcon/WarningIcon.d.ts +1 -1
  46. package/dist/src/components/atoms/SvgIcon/WarningIcon.js +8 -0
  47. package/dist/src/components/atoms/SvgIcon/index.js +2 -0
  48. package/dist/src/components/core/App/App.d.ts +1 -1
  49. package/dist/src/components/core/App/App.js +35 -0
  50. package/dist/src/components/core/App/index.js +2 -0
  51. package/dist/src/components/core/OverlayContainer.js +58 -0
  52. package/dist/src/components/core/PanelManager/PanelManager.d.ts +1 -1
  53. package/dist/src/components/core/PanelManager/PanelManager.js +86 -0
  54. package/dist/src/components/core/PanelManager/index.js +2 -0
  55. package/dist/src/components/core/ScrollableContainer/FocusableItem.js +38 -0
  56. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.d.ts +8 -7
  57. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.js +169 -0
  58. package/dist/src/components/core/ScrollableContainer/index.js +2 -0
  59. package/dist/src/components/molecules/ActionButton/ActionButton.d.ts +53 -7
  60. package/dist/src/components/molecules/ActionButton/ActionButton.js +10 -0
  61. package/dist/src/components/molecules/ActionButton/index.js +2 -0
  62. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.d.ts +1 -1
  63. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.js +50 -0
  64. package/dist/src/components/molecules/HeadshotImage/index.js +2 -0
  65. package/dist/src/components/molecules/Overlay/Overlay.d.ts +1 -1
  66. package/dist/src/components/molecules/Overlay/Overlay.js +139 -0
  67. package/dist/src/components/molecules/Overlay/index.js +2 -0
  68. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.d.ts +53 -7
  69. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +27 -0
  70. package/dist/src/components/molecules/PanelNavButton/index.js +2 -0
  71. package/dist/src/components/molecules/SegmentButton/SegmentButton.js +10 -0
  72. package/dist/src/components/molecules/SegmentButton/index.js +2 -0
  73. package/dist/src/components/molecules/TabLoadError/TabLoadError.d.ts +53 -7
  74. package/dist/src/components/molecules/TabLoadError/TabLoadError.js +14 -0
  75. package/dist/src/components/molecules/TabLoadError/index.js +2 -0
  76. package/dist/src/components/molecules/WatchButton/WatchButton.d.ts +1 -1
  77. package/dist/src/components/molecules/WatchButton/WatchButton.js +15 -0
  78. package/dist/src/components/molecules/WatchButton/index.js +2 -0
  79. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.d.ts +1 -1
  80. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +60 -0
  81. package/dist/src/components/organisms/PanelNavigation/index.js +2 -0
  82. package/dist/src/components/organisms/SegmentController/SegmentController.d.ts +5 -4
  83. package/dist/src/components/organisms/SegmentController/SegmentController.js +76 -0
  84. package/dist/src/components/organisms/SegmentController/index.js +2 -0
  85. package/dist/src/development/MaestroEventDelegate.js +109 -0
  86. package/dist/src/development/TimeSeek.d.ts +1 -1
  87. package/dist/src/development/TimeSeek.js +218 -0
  88. package/dist/src/development/development.js +36 -0
  89. package/dist/src/external/AxiosNetworkClient.js +110 -0
  90. package/dist/src/external/LocalStorageCacheManager.js +213 -0
  91. package/dist/src/external/ReactRenderer.js +65 -0
  92. package/dist/src/external/mocks/MockExternalNetworkClient.js +187 -0
  93. package/dist/src/external/ports/cacheManager.js +1 -0
  94. package/dist/src/external/ports/networkClient.js +1 -0
  95. package/dist/src/external/ports/renderer.d.ts +1 -2
  96. package/dist/src/external/ports/renderer.js +1 -0
  97. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.d.ts +8 -0
  98. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.js +7 -0
  99. package/dist/src/external/spatial-navigation/index.js +3 -0
  100. package/dist/src/external/spatial-navigation/measureLayout.js +30 -0
  101. package/dist/src/external/spatial-navigation/spatialNavigation.js +876 -0
  102. package/dist/src/external/spatial-navigation/utils.js +6 -0
  103. package/dist/src/external/spatial-navigation/visualDebugger.js +76 -0
  104. package/dist/src/external/spatial-navigation/withFocusable.d.ts +53 -7
  105. package/dist/src/external/spatial-navigation/withFocusable.js +245 -0
  106. package/dist/src/helpers/Observable.js +37 -0
  107. package/dist/src/helpers/strings.js +14 -0
  108. package/dist/src/helpers/url.js +12 -0
  109. package/dist/src/index.d.ts +5 -5
  110. package/dist/src/index.js +165 -0
  111. package/dist/src/interfaces/IMaestroEvent.js +18 -0
  112. package/dist/src/interfaces/IMaestroEventDelegate.js +1 -0
  113. package/dist/src/interfaces/IMaestroManager.js +1 -0
  114. package/dist/src/interfaces/IUserSettings.js +20 -0
  115. package/dist/src/models/IModel.js +1 -0
  116. package/dist/src/models/IPanel.js +40 -0
  117. package/dist/src/models/ITheme.js +20 -0
  118. package/dist/src/models/IWinningBet.js +1 -0
  119. package/dist/src/modules/bets/interfaces/IBets.js +1 -0
  120. package/dist/src/modules/bets/mocks.js +573 -0
  121. package/dist/src/modules/bets/types/BetsAnalyticsTypes.js +1 -0
  122. package/dist/src/modules/bets/view/BetsView.d.ts +3 -3
  123. package/dist/src/modules/bets/view/BetsView.js +143 -0
  124. package/dist/src/modules/bets/view/HotProps/HotPropsView.d.ts +53 -7
  125. package/dist/src/modules/bets/view/HotProps/HotPropsView.js +150 -0
  126. package/dist/src/modules/bets/view/SixPack/SixPackView.d.ts +5 -4
  127. package/dist/src/modules/bets/view/SixPack/SixPackView.js +110 -0
  128. package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.d.ts +1 -1
  129. package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.js +6 -0
  130. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.d.ts +53 -7
  131. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.js +149 -0
  132. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.d.ts +5 -4
  133. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.js +34 -0
  134. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.d.ts +1 -2
  135. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.js +18 -0
  136. package/dist/src/modules/bets/view/UserBets/Boost/Boost.d.ts +1 -2
  137. package/dist/src/modules/bets/view/UserBets/Boost/Boost.js +6 -0
  138. package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.d.ts +1 -2
  139. package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.js +9 -0
  140. package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.d.ts +1 -2
  141. package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.js +13 -0
  142. package/dist/src/modules/bets/view/UserBets/Straight/Straight.d.ts +1 -2
  143. package/dist/src/modules/bets/view/UserBets/Straight/Straight.js +6 -0
  144. package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.d.ts +1 -2
  145. package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.js +13 -0
  146. package/dist/src/modules/bets/view/UserBets/UserBetsView.d.ts +3 -3
  147. package/dist/src/modules/bets/view/UserBets/UserBetsView.js +107 -0
  148. package/dist/src/modules/bets/view/components/Bet/Bet.d.ts +99 -11
  149. package/dist/src/modules/bets/view/components/Bet/Bet.js +32 -0
  150. package/dist/src/modules/bets/view/components/BetPill/BetPill.d.ts +1 -1
  151. package/dist/src/modules/bets/view/components/BetPill/BetPill.js +6 -0
  152. package/dist/src/modules/bets/view/components/BetsCard/BetsCard.js +15 -0
  153. package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.d.ts +1 -1
  154. package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.js +20 -0
  155. package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.d.ts +1 -1
  156. package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +14 -0
  157. package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.d.ts +1 -1
  158. package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.js +16 -0
  159. package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.d.ts +5 -4
  160. package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +78 -0
  161. package/dist/src/modules/bets/view/components/PromoCodeBanner/index.js +1 -0
  162. package/dist/src/modules/bets/view-model/BetsViewModel.js +974 -0
  163. package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.d.ts +1 -1
  164. package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.js +107 -0
  165. package/dist/src/modules/fantasy/components/ExpandedAthleteList/index.js +1 -0
  166. package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.d.ts +53 -7
  167. package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.js +20 -0
  168. package/dist/src/modules/fantasy/components/LeagueCard/index.js +2 -0
  169. package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.d.ts +53 -7
  170. package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.js +29 -0
  171. package/dist/src/modules/fantasy/components/TopPlayerCard/index.js +2 -0
  172. package/dist/src/modules/fantasy/mocks.js +3682 -0
  173. package/dist/src/modules/fantasy/types.js +6 -0
  174. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.d.ts +1 -1
  175. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.js +74 -0
  176. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/index.js +2 -0
  177. package/dist/src/modules/fantasy/view/ErrorBoundary.d.ts +13 -0
  178. package/dist/src/modules/fantasy/view/FantasyItemView.d.ts +6 -5
  179. package/dist/src/modules/fantasy/view/FantasyItemView.js +74 -0
  180. package/dist/src/modules/fantasy/view/FantasyView.d.ts +3 -3
  181. package/dist/src/modules/fantasy/view/FantasyView.js +133 -0
  182. package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.d.ts +1 -1
  183. package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.js +95 -0
  184. package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.d.ts +53 -7
  185. package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.js +13 -0
  186. package/dist/src/modules/fantasy/view/InactiveLeague/index.js +2 -0
  187. package/dist/src/modules/fantasy/view/LoginView/LoginView.d.ts +53 -7
  188. package/dist/src/modules/fantasy/view/LoginView/LoginView.js +27 -0
  189. package/dist/src/modules/fantasy/view/LoginView/index.js +2 -0
  190. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.d.ts +53 -7
  191. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.js +25 -0
  192. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/index.js +2 -0
  193. package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.d.ts +1 -1
  194. package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.js +9 -0
  195. package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.d.ts +53 -7
  196. package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.js +118 -0
  197. package/dist/src/modules/fantasy/view/MatchupPair/index.js +2 -0
  198. package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.d.ts +1 -1
  199. package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.js +9 -0
  200. package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.d.ts +53 -7
  201. package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.js +108 -0
  202. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.d.ts +53 -7
  203. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.js +18 -0
  204. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/index.js +2 -0
  205. package/dist/src/modules/fantasy/view/MatchupSingle/index.js +2 -0
  206. package/dist/src/modules/fantasy/view/PromoView/PromoView.d.ts +53 -7
  207. package/dist/src/modules/fantasy/view/PromoView/PromoView.js +12 -0
  208. package/dist/src/modules/fantasy/view/PromoView/index.js +2 -0
  209. package/dist/src/modules/fantasy/view/index.js +2 -0
  210. package/dist/src/modules/fantasy/view-model/FantasyViewModel.FantasyPolling.js +132 -0
  211. package/dist/src/modules/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.js +141 -0
  212. package/dist/src/modules/fantasy/view-model/FantasyViewModel.js +534 -0
  213. package/dist/src/modules/key-plays/constants.js +292 -0
  214. package/dist/src/modules/key-plays/interfaces/IKeyPlays.js +14 -0
  215. package/dist/src/modules/key-plays/interfaces/IKeyPlaysResponse.js +1 -0
  216. package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.d.ts +1 -1
  217. package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.js +16 -0
  218. package/dist/src/modules/key-plays/view/KeyPlayCardView.d.ts +7 -6
  219. package/dist/src/modules/key-plays/view/KeyPlayCardView.js +139 -0
  220. package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.d.ts +1 -1
  221. package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.js +65 -0
  222. package/dist/src/modules/key-plays/view/KeyPlaysView.d.ts +3 -3
  223. package/dist/src/modules/key-plays/view/KeyPlaysView.js +151 -0
  224. package/dist/src/modules/key-plays/view-model/KeyPlaysViewModel.js +247 -0
  225. package/dist/src/modules/shop/mocks.js +390 -0
  226. package/dist/src/modules/shop/types.js +7 -0
  227. package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.d.ts +1 -2
  228. package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.js +56 -0
  229. package/dist/src/modules/shop/view/ProductDetailView/index.js +2 -0
  230. package/dist/src/modules/shop/view/ShopView.d.ts +3 -3
  231. package/dist/src/modules/shop/view/ShopView.js +182 -0
  232. package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.d.ts +54 -8
  233. package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.js +23 -0
  234. package/dist/src/modules/shop/view/components/BrowseCard/index.js +2 -0
  235. package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.d.ts +53 -7
  236. package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.js +26 -0
  237. package/dist/src/modules/shop/view/components/ProductSummaryCard/index.js +1 -0
  238. package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.d.ts +1 -2
  239. package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.js +19 -0
  240. package/dist/src/modules/shop/view/components/ShopPromoView/index.js +1 -0
  241. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.d.ts +6 -4
  242. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.js +61 -0
  243. package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.d.ts +18 -0
  244. package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.js +22 -0
  245. package/dist/src/modules/shop/view/components/ShopSection/index.js +1 -0
  246. package/dist/src/modules/shop/view/index.js +2 -0
  247. package/dist/src/modules/shop/view-model/ShopViewModel.ShopPolling.js +111 -0
  248. package/dist/src/modules/shop/view-model/ShopViewModel.js +353 -0
  249. package/dist/src/modules/stats/interfaces/IStats.js +1 -0
  250. package/dist/src/modules/stats/mocks.js +746 -0
  251. package/dist/src/modules/stats/utils/driveSummaryUtils.js +48 -0
  252. package/dist/src/modules/stats/utils/renderTeamStatistic.d.ts +1 -2
  253. package/dist/src/modules/stats/utils/renderTeamStatistic.js +16 -0
  254. package/dist/src/modules/stats/utils.js +62 -0
  255. package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.d.ts +2 -2
  256. package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.js +98 -0
  257. package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.d.ts +1 -2
  258. package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.js +27 -0
  259. package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.d.ts +1 -1
  260. package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.js +89 -0
  261. package/dist/src/modules/stats/view/ActiveAthletes/index.js +2 -0
  262. package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.d.ts +53 -7
  263. package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.js +70 -0
  264. package/dist/src/modules/stats/view/DriveSummary/DriveSummary.d.ts +1 -1
  265. package/dist/src/modules/stats/view/DriveSummary/DriveSummary.js +87 -0
  266. package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.d.ts +1 -1
  267. package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.js +129 -0
  268. package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.d.ts +1 -2
  269. package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.js +26 -0
  270. package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.d.ts +1 -2
  271. package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.js +24 -0
  272. package/dist/src/modules/stats/view/DriveSummary/index.js +2 -0
  273. package/dist/src/modules/stats/view/GameLeaders/GameLeaders.d.ts +5 -4
  274. package/dist/src/modules/stats/view/GameLeaders/GameLeaders.js +48 -0
  275. package/dist/src/modules/stats/view/GameLeaders/index.js +2 -0
  276. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.d.ts +2 -2
  277. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.js +55 -0
  278. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/index.js +1 -0
  279. package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.d.ts +53 -7
  280. package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.js +60 -0
  281. package/dist/src/modules/stats/view/MatchPredictor/index.js +2 -0
  282. package/dist/src/modules/stats/view/Penalties/Penalties.d.ts +1 -2
  283. package/dist/src/modules/stats/view/Penalties/Penalties.js +6 -0
  284. package/dist/src/modules/stats/view/Penalties/index.js +2 -0
  285. package/dist/src/modules/stats/view/RecentGames/RecentGames.d.ts +53 -7
  286. package/dist/src/modules/stats/view/RecentGames/RecentGames.js +23 -0
  287. package/dist/src/modules/stats/view/RecentGames/index.js +2 -0
  288. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.d.ts +1 -1
  289. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.js +121 -0
  290. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.js +2 -0
  291. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.d.ts +53 -7
  292. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.js +62 -0
  293. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/index.js +2 -0
  294. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.d.ts +1 -2
  295. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.js +23 -0
  296. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/index.js +2 -0
  297. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.d.ts +2 -2
  298. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.js +106 -0
  299. package/dist/src/modules/stats/view/ScoringSummary/index.js +2 -0
  300. package/dist/src/modules/stats/view/StatsItemView.d.ts +6 -5
  301. package/dist/src/modules/stats/view/StatsItemView.js +92 -0
  302. package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.d.ts +53 -7
  303. package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.js +36 -0
  304. package/dist/src/modules/stats/view/StatsQRCode/index.js +1 -0
  305. package/dist/src/modules/stats/view/StatsView.d.ts +3 -3
  306. package/dist/src/modules/stats/view/StatsView.js +137 -0
  307. package/dist/src/modules/stats/view/TeamStats/TeamStatsView.d.ts +53 -7
  308. package/dist/src/modules/stats/view/TeamStats/TeamStatsView.js +43 -0
  309. package/dist/src/modules/stats/view/TeamStats/index.js +1 -0
  310. package/dist/src/modules/stats/view/Teams/StatsCarousel.d.ts +2 -2
  311. package/dist/src/modules/stats/view/Teams/StatsCarousel.js +83 -0
  312. package/dist/src/modules/stats/view/Teams/StatsProgressBar.d.ts +1 -2
  313. package/dist/src/modules/stats/view/Teams/StatsProgressBar.js +19 -0
  314. package/dist/src/modules/stats/view/Teams/Teams.d.ts +53 -7
  315. package/dist/src/modules/stats/view/Teams/Teams.js +43 -0
  316. package/dist/src/modules/stats/view/Teams/index.js +2 -0
  317. package/dist/src/modules/stats/view/WinProbability/WinProbability.d.ts +53 -7
  318. package/dist/src/modules/stats/view/WinProbability/WinProbability.js +28 -0
  319. package/dist/src/modules/stats/view/WinProbability/index.js +2 -0
  320. package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.d.ts +53 -7
  321. package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.js +89 -0
  322. package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.d.ts +1 -2
  323. package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.js +12 -0
  324. package/dist/src/modules/stats/view/components/AthletesStatistics/index.js +2 -0
  325. package/dist/src/modules/stats/view/index.js +2 -0
  326. package/dist/src/modules/stats/view-model/StatsViewModel.js +966 -0
  327. package/dist/src/sentry.js +31 -0
  328. package/dist/src/services/AnalyticsService/AnalyticsService.d.ts +12 -7
  329. package/dist/src/services/AnalyticsService/AnalyticsService.js +402 -0
  330. package/dist/src/services/AnalyticsService/types.js +1 -0
  331. package/dist/src/services/BetsService.js +122 -0
  332. package/dist/src/services/FantasyService.js +92 -0
  333. package/dist/src/services/GlobalService/GlobalService.d.ts +9 -0
  334. package/dist/src/services/GlobalService/PageService.d.ts +9 -0
  335. package/dist/src/services/GlobalService/index.d.ts +2 -0
  336. package/dist/src/services/GlobalService/mocks.d.ts +2 -0
  337. package/dist/src/services/GlobalService/types.d.ts +11 -0
  338. package/dist/src/services/InsightsService/InsightsPayloadBuilder.d.ts +1 -2
  339. package/dist/src/services/InsightsService/InsightsPayloadBuilder.js +386 -0
  340. package/dist/src/services/InsightsService/InsightsService.js +74 -0
  341. package/dist/src/services/NetworkManager/NetworkManager.js +457 -0
  342. package/dist/src/services/NetworkManager/NetworkManagerFactory.js +101 -0
  343. package/dist/src/services/NetworkManager/errors.js +45 -0
  344. package/dist/src/services/NetworkManager/types.js +10 -0
  345. package/dist/src/services/PageService/PageService.d.ts +9 -0
  346. package/dist/src/services/PageService/PageService.js +39 -0
  347. package/dist/src/services/PageService/index.d.ts +2 -0
  348. package/dist/src/services/PageService/index.js +2 -0
  349. package/dist/src/services/PageService/mocks.d.ts +2 -0
  350. package/dist/src/services/PageService/mocks.js +104 -0
  351. package/dist/src/services/PageService/types.d.ts +76 -0
  352. package/dist/src/services/PageService/types.js +1 -0
  353. package/dist/src/services/ShopService.js +46 -0
  354. package/dist/src/services/StaticService/PageService.d.ts +9 -0
  355. package/dist/src/services/StaticService/StaticService.d.ts +3 -1
  356. package/dist/src/services/StaticService/StaticService.js +59 -0
  357. package/dist/src/services/StaticService/index.js +2 -0
  358. package/dist/src/services/StaticService/mocks.js +104 -0
  359. package/dist/src/services/StaticService/types.js +1 -0
  360. package/dist/src/services/StatsService.js +136 -0
  361. package/dist/src/services/ThemeManager/constants.js +47 -0
  362. package/dist/src/services/UserSettingsManager.js +155 -0
  363. package/dist/src/test-polyfills.js +15 -0
  364. package/dist/src/types/OverlayTypes.js +4 -0
  365. package/dist/src/view-models/MaestroEventViewModel.d.ts +0 -2
  366. package/dist/src/view-models/MaestroEventViewModel.js +280 -0
  367. package/dist/src/view-models/OverlayViewModel.js +222 -0
  368. package/dist/src/view-models/PanelManagerViewModel.js +212 -0
  369. package/dist/src/view-models/ViewModel.js +32 -0
  370. package/package.json +13 -9
@@ -0,0 +1,390 @@
1
+ /**
2
+ * Mock shop data for NFL game with multiple sections
3
+ * Covers: regular products, sale products, and browse card
4
+ */
5
+ export const MOCK_SHOP_NFL_RESPONSE = {
6
+ shop: [
7
+ {
8
+ sections: [
9
+ {
10
+ title: 'Chiefs Shop',
11
+ items: [
12
+ {
13
+ type: 'product',
14
+ name: "Men's Kansas City Chiefs Patrick Mahomes Nike Red Game Player Jersey",
15
+ image: {
16
+ 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',
17
+ },
18
+ price: {
19
+ displayRetail: '$119.99',
20
+ },
21
+ detail: {
22
+ title: 'Chiefs Shop',
23
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/chiefs-mahomes-jersey',
24
+ link: {
25
+ href: 'https://fanatics.com/chiefs-mahomes-jersey',
26
+ text: 'Scan to shop',
27
+ },
28
+ },
29
+ },
30
+ {
31
+ type: 'product',
32
+ name: 'Kansas City Chiefs New Era 2024 AFC Conference Champions Locker Room 9FORTY Adjustable Hat - Red',
33
+ image: {
34
+ 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',
35
+ },
36
+ price: {
37
+ displayRetail: '$34.99',
38
+ displaySale: '$24.99',
39
+ },
40
+ detail: {
41
+ title: 'Chiefs Shop',
42
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/chiefs-hat',
43
+ link: {
44
+ href: 'https://fanatics.com/chiefs-hat',
45
+ text: 'Scan to shop',
46
+ },
47
+ },
48
+ },
49
+ {
50
+ type: 'browse',
51
+ name: 'Want More?',
52
+ caption: 'Browse all Chiefs merch',
53
+ image: {
54
+ href: 'https://a.espncdn.com/i/teamlogos/nfl/500/kc.png',
55
+ },
56
+ detail: {
57
+ title: 'Chiefs Shop',
58
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/chiefs',
59
+ link: {
60
+ href: 'https://fanatics.com/chiefs',
61
+ text: 'Scan to browse all',
62
+ },
63
+ },
64
+ },
65
+ ],
66
+ },
67
+ {
68
+ title: '49ers Shop',
69
+ items: [
70
+ {
71
+ type: 'product',
72
+ name: "Men's San Francisco 49ers Brock Purdy Nike Scarlet Game Player Jersey",
73
+ image: {
74
+ href: 'https://fanatics.frgimages.com/san-francisco-49ers/mens-san-francisco-49ers-brock-purdy-nike-scarlet-game-player-jersey_pi5068000_ff_5068449_full.jpg',
75
+ },
76
+ price: {
77
+ displayRetail: '$119.99',
78
+ },
79
+ detail: {
80
+ title: '49ers Shop',
81
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/49ers-purdy-jersey',
82
+ link: {
83
+ href: 'https://fanatics.com/49ers-purdy-jersey',
84
+ text: 'Scan to shop',
85
+ },
86
+ },
87
+ },
88
+ {
89
+ type: 'product',
90
+ name: "Men's San Francisco 49ers George Kittle Nike Scarlet Game Player Jersey",
91
+ image: {
92
+ href: 'https://fanatics.frgimages.com/san-francisco-49ers/mens-san-francisco-49ers-george-kittle-nike-scarlet-game-player-jersey_pi4234000_ff_4234524_full.jpg',
93
+ },
94
+ price: {
95
+ displayRetail: '$119.99',
96
+ displayClearance: '$79.99',
97
+ },
98
+ detail: {
99
+ title: '49ers Shop',
100
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/49ers-kittle-jersey',
101
+ link: {
102
+ href: 'https://fanatics.com/49ers-kittle-jersey',
103
+ text: 'Scan to shop',
104
+ },
105
+ },
106
+ },
107
+ {
108
+ type: 'browse',
109
+ name: 'Want More?',
110
+ caption: 'Browse all 49ers merch',
111
+ image: {
112
+ href: 'https://a.espncdn.com/i/teamlogos/nfl/500/sf.png',
113
+ },
114
+ detail: {
115
+ title: '49ers Shop',
116
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/49ers',
117
+ link: {
118
+ href: 'https://fanatics.com/49ers',
119
+ text: 'Scan to browse all',
120
+ },
121
+ },
122
+ },
123
+ ],
124
+ },
125
+ {
126
+ title: 'NFL Shop',
127
+ items: [
128
+ {
129
+ type: 'product',
130
+ name: 'NFL Nike Official Authentic Game Football',
131
+ image: {
132
+ href: 'https://fanatics.frgimages.com/nfl/nfl-nike-official-authentic-game-football_pi4759000_ff_4759291_full.jpg',
133
+ },
134
+ price: {
135
+ displayRetail: '$99.99',
136
+ },
137
+ detail: {
138
+ title: 'NFL Shop',
139
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/nfl-football',
140
+ link: {
141
+ href: 'https://fanatics.com/nfl-football',
142
+ text: 'Scan to shop',
143
+ },
144
+ },
145
+ },
146
+ {
147
+ type: 'browse',
148
+ name: 'Want More?',
149
+ caption: 'Browse all NFL merch',
150
+ image: {
151
+ href: 'https://a.espncdn.com/i/teamlogos/leagues/500/nfl.png',
152
+ },
153
+ detail: {
154
+ title: 'NFL Shop',
155
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/nfl',
156
+ link: {
157
+ href: 'https://fanatics.com/nfl',
158
+ text: 'Scan to browse all',
159
+ },
160
+ },
161
+ },
162
+ ],
163
+ },
164
+ ],
165
+ },
166
+ ],
167
+ };
168
+ /**
169
+ * Mock shop data for NBA game
170
+ */
171
+ export const MOCK_SHOP_NBA_RESPONSE = {
172
+ shop: [
173
+ {
174
+ sections: [
175
+ {
176
+ title: 'Lakers Shop',
177
+ items: [
178
+ {
179
+ type: 'product',
180
+ name: "Men's Los Angeles Lakers LeBron James Nike Purple Swingman Jersey - Icon Edition",
181
+ image: {
182
+ 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',
183
+ },
184
+ price: {
185
+ displayRetail: '$129.99',
186
+ },
187
+ detail: {
188
+ title: 'Lakers Shop',
189
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/lakers-lebron-jersey',
190
+ link: {
191
+ href: 'https://fanatics.com/lakers-lebron-jersey',
192
+ text: 'Scan to shop',
193
+ },
194
+ },
195
+ },
196
+ {
197
+ type: 'product',
198
+ name: "Men's Los Angeles Lakers Anthony Davis Nike Gold Swingman Jersey - City Edition",
199
+ image: {
200
+ 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',
201
+ },
202
+ price: {
203
+ displayRetail: '$129.99',
204
+ },
205
+ detail: {
206
+ title: 'Lakers Shop',
207
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/lakers-davis-jersey',
208
+ link: {
209
+ href: 'https://fanatics.com/lakers-davis-jersey',
210
+ text: 'Scan to shop',
211
+ },
212
+ },
213
+ },
214
+ {
215
+ type: 'browse',
216
+ name: 'Want More?',
217
+ caption: 'Browse all Lakers merch',
218
+ image: {
219
+ href: 'https://a.espncdn.com/i/teamlogos/nba/500/lal.png',
220
+ },
221
+ detail: {
222
+ title: 'Lakers Shop',
223
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/lakers',
224
+ link: {
225
+ href: 'https://fanatics.com/lakers',
226
+ text: 'Scan to browse all',
227
+ },
228
+ },
229
+ },
230
+ ],
231
+ },
232
+ ],
233
+ },
234
+ ],
235
+ };
236
+ /**
237
+ * Mock shop data for NCAA Football
238
+ */
239
+ export const MOCK_SHOP_NCF_RESPONSE = {
240
+ shop: [
241
+ {
242
+ sections: [
243
+ {
244
+ title: 'Texas Football Shop',
245
+ items: [
246
+ {
247
+ type: 'product',
248
+ name: 'Texas Longhorns Champion University Tee - Burnt Orange',
249
+ image: {
250
+ href: 'https://fanatics.frgimages.com/texas-longhorns/texas-longhorns-champion-university-tee-burnt-orange_pi4892000_ff_4892615_full.jpg',
251
+ },
252
+ price: {
253
+ displayRetail: '$34.99',
254
+ },
255
+ detail: {
256
+ title: 'Texas Shop',
257
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas-tee',
258
+ link: {
259
+ href: 'https://fanatics.com/texas-tee',
260
+ text: 'Scan to shop',
261
+ },
262
+ },
263
+ },
264
+ {
265
+ type: 'browse',
266
+ name: 'Want More?',
267
+ caption: 'Browse all Texas merch',
268
+ image: {
269
+ href: 'https://a.espncdn.com/i/teamlogos/ncaa/500/251.png',
270
+ },
271
+ detail: {
272
+ title: 'Texas Shop',
273
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas',
274
+ link: {
275
+ href: 'https://fanatics.com/texas',
276
+ text: 'Scan to browse all',
277
+ },
278
+ },
279
+ },
280
+ ],
281
+ },
282
+ {
283
+ title: 'Texas A&M Shop',
284
+ items: [
285
+ {
286
+ type: 'product',
287
+ name: 'Texas A&M Aggies New Era Maroon 9FORTY Adjustable Hat',
288
+ image: {
289
+ href: 'https://fanatics.frgimages.com/texas-am-aggies/texas-am-aggies-new-era-maroon-9forty-adjustable-hat_pi4156000_ff_4156429_full.jpg',
290
+ },
291
+ price: {
292
+ displayRetail: '$29.99',
293
+ },
294
+ detail: {
295
+ title: 'Texas A&M Shop',
296
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas-am-hat',
297
+ link: {
298
+ href: 'https://fanatics.com/texas-am-hat',
299
+ text: 'Scan to shop',
300
+ },
301
+ },
302
+ },
303
+ {
304
+ type: 'browse',
305
+ name: 'Want More?',
306
+ caption: 'Browse all Texas A&M merch',
307
+ image: {
308
+ href: 'https://a.espncdn.com/i/teamlogos/ncaa/500/245.png',
309
+ },
310
+ detail: {
311
+ title: 'Texas A&M Shop',
312
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas-am',
313
+ link: {
314
+ href: 'https://fanatics.com/texas-am',
315
+ text: 'Scan to browse all',
316
+ },
317
+ },
318
+ },
319
+ ],
320
+ },
321
+ ],
322
+ },
323
+ ],
324
+ };
325
+ /**
326
+ * Mock shop data with empty sections
327
+ */
328
+ export const MOCK_SHOP_EMPTY_RESPONSE = {
329
+ shop: [
330
+ {
331
+ sections: [],
332
+ defaultItem: {
333
+ detail: {
334
+ disclaimer: 'Visit shop.espn.com to explore more products and exclusive offers.',
335
+ title: 'Shop the ESPN Store',
336
+ },
337
+ },
338
+ },
339
+ ],
340
+ };
341
+ /**
342
+ * Mock shop data with single section
343
+ */
344
+ export const MOCK_SHOP_SINGLE_SECTION_RESPONSE = {
345
+ shop: [
346
+ {
347
+ sections: [
348
+ {
349
+ title: 'Team Shop',
350
+ items: [
351
+ {
352
+ type: 'product',
353
+ name: 'Premium Team Jersey - Official Merchandise',
354
+ image: {
355
+ href: 'https://via.placeholder.com/400x400/0066cc/ffffff?text=Team+Jersey',
356
+ },
357
+ price: {
358
+ displayRetail: '$89.99',
359
+ },
360
+ detail: {
361
+ title: 'Team Shop',
362
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/team-jersey',
363
+ link: {
364
+ href: 'https://fanatics.com/team-jersey',
365
+ text: 'Scan to shop',
366
+ },
367
+ },
368
+ },
369
+ {
370
+ type: 'browse',
371
+ name: 'Want More?',
372
+ caption: 'Browse all team merch',
373
+ image: {
374
+ href: 'https://via.placeholder.com/400x400/0066cc/ffffff?text=Team+Logo',
375
+ },
376
+ detail: {
377
+ title: 'Team Shop',
378
+ qrCode: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/team',
379
+ link: {
380
+ href: 'https://fanatics.com/team',
381
+ text: 'Scan to browse all',
382
+ },
383
+ },
384
+ },
385
+ ],
386
+ },
387
+ ],
388
+ },
389
+ ],
390
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Shop module type definitions
3
+ * Based on ESPN Shop API structure
4
+ */
5
+ export const isShopProduct = (item) => {
6
+ return item.type === 'product';
7
+ };
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import './ProductDetailView.styles.css';
3
2
  import { IShopBrowseCard, IShopProduct } from '../../types';
4
3
  import { WithFocusableProps } from '@/external/spatial-navigation';
@@ -6,5 +5,5 @@ export type ProductDetailViewProps = {
6
5
  product: IShopProduct | IShopBrowseCard;
7
6
  focusKey: string;
8
7
  };
9
- declare const ProductDetailView: (props: ProductDetailViewProps & WithFocusableProps) => React.JSX.Element;
8
+ declare const ProductDetailView: (props: ProductDetailViewProps & WithFocusableProps) => JSX.Element;
10
9
  export default ProductDetailView;
@@ -0,0 +1,56 @@
1
+ import React from 'react';
2
+ import './ProductDetailView.styles.css';
3
+ import { isShopProduct } from '../../types';
4
+ import ProductSummaryCard from '../components/ProductSummaryCard';
5
+ import ActionButton from '@/components/molecules/ActionButton';
6
+ import Image from '@/components/atoms/Image';
7
+ import { withFocusable, } from '@/external/spatial-navigation';
8
+ import BrowseCard from '../components/BrowseCard';
9
+ import { setImageDimensions } from '@/helpers/url';
10
+ const ProductDetail = (props) => {
11
+ const { product, focused } = props;
12
+ const detail = product.detail;
13
+ const getBackgroundImage = () => {
14
+ const bgImage = detail?.backgroundImage;
15
+ if (!bgImage) {
16
+ return null;
17
+ }
18
+ try {
19
+ const url = new URL(bgImage);
20
+ if (url.hostname.includes('stitcher')) {
21
+ const newBgImage = setImageDimensions(bgImage, 1024, 1024);
22
+ return newBgImage;
23
+ }
24
+ }
25
+ catch {
26
+ // Fallback to original check if URL parsing fails
27
+ if (bgImage.includes('stitcher')) {
28
+ const newBgImage = setImageDimensions(bgImage, 1024, 1024);
29
+ return newBgImage;
30
+ }
31
+ }
32
+ return bgImage;
33
+ };
34
+ const bgImage = getBackgroundImage();
35
+ return (React.createElement("div", { className: "product-detail-card focus-ring", "data-focused": focused, style: {
36
+ ...(bgImage && {
37
+ backgroundImage: `url(${bgImage})`,
38
+ backgroundSize: 'cover',
39
+ backgroundClip: 'padding-box',
40
+ backgroundPosition: 'center',
41
+ }),
42
+ } },
43
+ React.createElement("div", { className: "product-detail-title T70" }, detail?.title || 'Shop the look'),
44
+ React.createElement("div", { className: "product-detail-product" }, isShopProduct(product) ? (React.createElement(ProductSummaryCard, { product: product, focusable: false })) : (React.createElement(BrowseCard, { browseCard: product, focusable: false }))),
45
+ detail?.qrCode && (React.createElement("div", { className: "product-detail-qr" },
46
+ React.createElement(Image, { src: detail.qrCode, alt: "QR Code", className: "product-detail-qr-image" }))),
47
+ React.createElement("div", { className: "product-detail-instruction T05_ALT" }, detail?.link?.text),
48
+ React.createElement(ActionButton, { "data-focused": focused }, "Dismiss")));
49
+ };
50
+ const FocusableProductDetail = withFocusable()(ProductDetail);
51
+ const ProductDetailView = (props) => {
52
+ return (React.createElement("div", { className: "product-detail-view-wrapper" },
53
+ React.createElement(FocusableProductDetail, { ...props }),
54
+ props.product.detail?.disclaimer && (React.createElement("div", { className: "product-detail-disclaimer T02 TEXT_200 FONT_BOLD" }, props.product.detail.disclaimer))));
55
+ };
56
+ export default ProductDetailView;
@@ -0,0 +1,2 @@
1
+ export { default } from './ProductDetailView';
2
+ export * from './ProductDetailView';
@@ -1,4 +1,4 @@
1
- import React, { Component } from 'react';
1
+ import { Component } from 'react';
2
2
  import './ShopView.styles.css';
3
3
  import { Direction } from '@/external/spatial-navigation/utils';
4
4
  import ShopViewModel, { ShopErrorState } from '../view-model/ShopViewModel';
@@ -29,7 +29,7 @@ declare class ShopView extends Component<{}, State> {
29
29
  openItemDetail: (selectedItem: IShopProduct | IShopBrowseCard, selectedShopSection: IShopSection, selectedItemFocusKey: string) => void;
30
30
  closeProductDetail: () => void;
31
31
  trackPromoEnterPress: () => void;
32
- renderContent: () => React.JSX.Element | React.JSX.Element[];
33
- render(): React.JSX.Element;
32
+ renderContent: () => JSX.Element | JSX.Element[];
33
+ render(): JSX.Element;
34
34
  }
35
35
  export default ShopView;
@@ -0,0 +1,182 @@
1
+ import React, { Component } from 'react';
2
+ import './ShopView.styles.css';
3
+ import ScrollableContainer from '@/components/core/ScrollableContainer';
4
+ import SDK from '@/index';
5
+ import TabLoadErrorView from '@/components/molecules/TabLoadError';
6
+ import { isShopProduct, } from '../types';
7
+ import ShopSection from './components/ShopSection';
8
+ import ProductDetailView from './ProductDetailView';
9
+ import ShopPromoView from './components/ShopPromoView';
10
+ class ShopView extends Component {
11
+ constructor(props) {
12
+ super(props);
13
+ Object.defineProperty(this, "container", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: null
18
+ });
19
+ Object.defineProperty(this, "sectionsListener", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: null
24
+ });
25
+ Object.defineProperty(this, "isDataLoadingListener", {
26
+ enumerable: true,
27
+ configurable: true,
28
+ writable: true,
29
+ value: null
30
+ });
31
+ Object.defineProperty(this, "errorStateListener", {
32
+ enumerable: true,
33
+ configurable: true,
34
+ writable: true,
35
+ value: null
36
+ });
37
+ Object.defineProperty(this, "promoDataListener", {
38
+ enumerable: true,
39
+ configurable: true,
40
+ writable: true,
41
+ value: null
42
+ });
43
+ Object.defineProperty(this, "vm", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: void 0
48
+ });
49
+ Object.defineProperty(this, "clearTabLoadFailure", {
50
+ enumerable: true,
51
+ configurable: true,
52
+ writable: true,
53
+ value: () => {
54
+ this.viewModel.clearTabLoadFailure();
55
+ }
56
+ });
57
+ Object.defineProperty(this, "onArrowPress", {
58
+ enumerable: true,
59
+ configurable: true,
60
+ writable: true,
61
+ value: (d) => {
62
+ if (d === 'left') {
63
+ SDK.getMaestroEventViewModel().deliverFocus();
64
+ }
65
+ }
66
+ });
67
+ Object.defineProperty(this, "openItemDetail", {
68
+ enumerable: true,
69
+ configurable: true,
70
+ writable: true,
71
+ value: (selectedItem, selectedShopSection, selectedItemFocusKey) => {
72
+ const card = isShopProduct(selectedItem)
73
+ ? 'product_summary'
74
+ : 'want more';
75
+ this.viewModel.trackItemClick(card, selectedItem, selectedShopSection);
76
+ this.setState({ selectedItem, selectedItemFocusKey, selectedShopSection }, () => {
77
+ SDK.getMaestroEventViewModel().navigation.setFocus('product-detail-view');
78
+ });
79
+ }
80
+ });
81
+ Object.defineProperty(this, "closeProductDetail", {
82
+ enumerable: true,
83
+ configurable: true,
84
+ writable: true,
85
+ value: () => {
86
+ if (!this.state.selectedItem || !this.state.selectedShopSection) {
87
+ return;
88
+ }
89
+ this.viewModel.trackItemClick('product_detail', this.state.selectedItem, this.state.selectedShopSection);
90
+ this.setState({ selectedItem: null, selectedShopSection: null }, () => {
91
+ if (this.state.selectedItemFocusKey) {
92
+ // Added a small delay so all the focusable items are rendered and we have the ref of them
93
+ setTimeout(() => {
94
+ SDK.getMaestroEventViewModel().navigation.setFocus(this.state.selectedItemFocusKey);
95
+ }, 100);
96
+ }
97
+ });
98
+ }
99
+ });
100
+ Object.defineProperty(this, "trackPromoEnterPress", {
101
+ enumerable: true,
102
+ configurable: true,
103
+ writable: true,
104
+ value: () => {
105
+ this.viewModel.trackItemClick('fallback', null, null);
106
+ }
107
+ });
108
+ Object.defineProperty(this, "renderContent", {
109
+ enumerable: true,
110
+ configurable: true,
111
+ writable: true,
112
+ value: () => {
113
+ const { sections, errorState, selectedItem, promoData } = this.state;
114
+ // Show product detail view if a product is selected
115
+ if (selectedItem) {
116
+ return (React.createElement(ProductDetailView, { product: selectedItem, onEnterPress: this.closeProductDetail, onArrowPress: this.onArrowPress, focusKey: "product-detail-view" }));
117
+ }
118
+ // Show error state if tab load failed
119
+ if (errorState === 'tabLoadFailure') {
120
+ return (React.createElement(TabLoadErrorView, { onEnterPress: this.clearTabLoadFailure, onArrowPress: this.onArrowPress }));
121
+ }
122
+ // Show promo view if shop is empty and promo data is available
123
+ if ((errorState === 'emptyShop' || sections.length === 0) && promoData) {
124
+ return (React.createElement(ShopPromoView, { promoData: promoData, onEnterPress: this.trackPromoEnterPress }));
125
+ }
126
+ // Render sections
127
+ return sections.map((section, index) => (React.createElement(ShopSection, { key: index, sectionIndex: index, section: section, onArrowPress: this.onArrowPress, onItemClick: this.openItemDetail })));
128
+ }
129
+ });
130
+ this.vm = SDK.getMaestroEventViewModel().shopViewModel;
131
+ this.state = {
132
+ container: null,
133
+ sections: this.viewModel.sections.value,
134
+ isDataLoading: this.viewModel.isDataLoading.value,
135
+ errorState: this.viewModel.errorState.value,
136
+ selectedItem: null,
137
+ selectedItemFocusKey: '',
138
+ promoData: this.viewModel.promoData.value,
139
+ selectedShopSection: null,
140
+ };
141
+ }
142
+ get viewModel() {
143
+ if (!this.vm) {
144
+ throw new Error('ShopViewModel is not initialized');
145
+ }
146
+ return this.vm;
147
+ }
148
+ componentDidMount() {
149
+ this.setState({
150
+ container: this.container,
151
+ });
152
+ this.sectionsListener = this.viewModel.sections.subscribe((sections) => {
153
+ this.setState({ sections });
154
+ });
155
+ this.isDataLoadingListener = this.viewModel.isDataLoading.subscribe((isDataLoading) => {
156
+ this.setState({ isDataLoading });
157
+ });
158
+ this.errorStateListener = this.viewModel.errorState.subscribe((errorState) => {
159
+ this.setState({ errorState });
160
+ });
161
+ this.promoDataListener = this.viewModel.promoData.subscribe((promoData) => {
162
+ this.setState({ promoData });
163
+ });
164
+ // Initialize the view model
165
+ this.viewModel.init();
166
+ }
167
+ componentWillUnmount() {
168
+ this.sectionsListener && this.sectionsListener();
169
+ this.isDataLoadingListener && this.isDataLoadingListener();
170
+ this.errorStateListener && this.errorStateListener();
171
+ this.promoDataListener && this.promoDataListener();
172
+ // Clean up the view model
173
+ this.viewModel.cleanup();
174
+ }
175
+ render() {
176
+ return (React.createElement(ScrollableContainer, { scrollableContainerRef: this.state.container, containerTopOffset: 40, "data-has-product-selected": !!this.state.selectedItem, "data-has-error": this.state.errorState !== 'none' },
177
+ React.createElement("div", { className: "shop-view", ref: (e) => (this.container = e) },
178
+ this.renderContent(),
179
+ React.createElement("div", { className: "shop-bottom-padding" }))));
180
+ }
181
+ }
182
+ export default ShopView;