@maestro_io/maestro-web-sdk 2.3.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/maestro-web-sdk.umd.js +17 -3
  2. package/dist/maestro-web-sdk.umd.js.map +1 -1
  3. package/dist/{development → src/development}/MaestroEventDelegate.d.ts +8 -2
  4. package/dist/src/helpers/strings.d.ts +1 -0
  5. package/dist/{index.d.ts → src/index.d.ts} +3 -30
  6. package/dist/src/interfaces/IMaestroManager.d.ts +45 -0
  7. package/dist/{modules → src/modules}/bets/interfaces/IBets.d.ts +1 -0
  8. package/dist/{modules → src/modules}/bets/view/BetsView.d.ts +2 -1
  9. package/dist/{modules → src/modules}/bets/view/SixPack/SixPackView.d.ts +1 -0
  10. package/dist/{modules → src/modules}/bets/view/components/PromoCodeBanner/PromoCodeBanner.d.ts +1 -0
  11. package/dist/{modules → src/modules}/bets/view-model/BetsViewModel.d.ts +7 -3
  12. package/dist/{modules → src/modules}/key-plays/view/KeyPlayCardView.d.ts +2 -0
  13. package/dist/{modules → src/modules}/key-plays/view/KeyPlaysView.d.ts +3 -1
  14. package/dist/{modules → src/modules}/stats/interfaces/IStats.d.ts +35 -1
  15. package/dist/{modules → src/modules}/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.d.ts +1 -0
  16. package/dist/src/modules/stats/view/Penalties/Penalties.d.ts +10 -0
  17. package/dist/src/modules/stats/view/Penalties/index.d.ts +2 -0
  18. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.d.ts +30 -0
  19. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.d.ts +2 -0
  20. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.d.ts +52 -0
  21. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/index.d.ts +2 -0
  22. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.d.ts +7 -0
  23. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/index.d.ts +2 -0
  24. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.d.ts +26 -0
  25. package/dist/src/modules/stats/view/ScoringSummary/index.d.ts +2 -0
  26. package/dist/{modules → src/modules}/stats/view/StatsView.d.ts +2 -1
  27. package/dist/{modules → src/modules}/stats/view-model/StatsViewModel.d.ts +29 -1
  28. package/dist/src/sentry.d.ts +3 -0
  29. package/dist/{services → src/services}/AnalyticsService/AnalyticsService.d.ts +10 -0
  30. package/dist/{services → src/services}/InsightsService/InsightsPayloadBuilder.d.ts +6 -6
  31. package/dist/{services → src/services}/NetworkManager/NetworkManager.d.ts +1 -2
  32. package/dist/{services → src/services}/PageService/PageService.d.ts +1 -0
  33. package/dist/src/test-polyfills.d.ts +1 -0
  34. package/dist/{view-models → src/view-models}/MaestroEventViewModel.d.ts +5 -3
  35. package/package.json +3 -1
  36. package/dist/development/development.d.ts +0 -2
  37. package/dist/interfaces/IMaestroManager.d.ts +0 -103
  38. /package/dist/{components → src/components}/atoms/BaseButton/BaseButton.d.ts +0 -0
  39. /package/dist/{components → src/components}/atoms/BaseButton/index.d.ts +0 -0
  40. /package/dist/{components → src/components}/atoms/Image/index.d.ts +0 -0
  41. /package/dist/{components → src/components}/atoms/Rive/index.d.ts +0 -0
  42. /package/dist/{components → src/components}/atoms/SvgIcon/BetGeneralIcon.d.ts +0 -0
  43. /package/dist/{components → src/components}/atoms/SvgIcon/BetsIcon.d.ts +0 -0
  44. /package/dist/{components → src/components}/atoms/SvgIcon/BetsWarningIcon.d.ts +0 -0
  45. /package/dist/{components → src/components}/atoms/SvgIcon/CheckmarkIcon.d.ts +0 -0
  46. /package/dist/{components → src/components}/atoms/SvgIcon/CollapseIcon.d.ts +0 -0
  47. /package/dist/{components → src/components}/atoms/SvgIcon/ExpandIcon.d.ts +0 -0
  48. /package/dist/{components → src/components}/atoms/SvgIcon/FlameIcon.d.ts +0 -0
  49. /package/dist/{components → src/components}/atoms/SvgIcon/Icon.d.ts +0 -0
  50. /package/dist/{components → src/components}/atoms/SvgIcon/KeyPlaysIcon.d.ts +0 -0
  51. /package/dist/{components → src/components}/atoms/SvgIcon/MobilePhoneIcon.d.ts +0 -0
  52. /package/dist/{components → src/components}/atoms/SvgIcon/PlayIcon.d.ts +0 -0
  53. /package/dist/{components → src/components}/atoms/SvgIcon/StatsIcon.d.ts +0 -0
  54. /package/dist/{components → src/components}/atoms/SvgIcon/TimesIcon.d.ts +0 -0
  55. /package/dist/{components → src/components}/atoms/SvgIcon/WarningIcon.d.ts +0 -0
  56. /package/dist/{components → src/components}/atoms/SvgIcon/index.d.ts +0 -0
  57. /package/dist/{components → src/components}/core/App/App.d.ts +0 -0
  58. /package/dist/{components → src/components}/core/App/index.d.ts +0 -0
  59. /package/dist/{components → src/components}/core/OverlayContainer.d.ts +0 -0
  60. /package/dist/{components → src/components}/core/PanelManager/PanelManager.d.ts +0 -0
  61. /package/dist/{components → src/components}/core/PanelManager/index.d.ts +0 -0
  62. /package/dist/{components → src/components}/core/ScrollableContainer/FocusableItem.d.ts +0 -0
  63. /package/dist/{components → src/components}/core/ScrollableContainer/ScrollableContainer.d.ts +0 -0
  64. /package/dist/{components → src/components}/core/ScrollableContainer/index.d.ts +0 -0
  65. /package/dist/{components → src/components}/molecules/ActionButton/ActionButton.d.ts +0 -0
  66. /package/dist/{components → src/components}/molecules/ActionButton/index.d.ts +0 -0
  67. /package/dist/{components → src/components}/molecules/Overlay/Overlay.d.ts +0 -0
  68. /package/dist/{components → src/components}/molecules/Overlay/index.d.ts +0 -0
  69. /package/dist/{components → src/components}/molecules/PanelNavButton/PanelNavButton.d.ts +0 -0
  70. /package/dist/{components → src/components}/molecules/PanelNavButton/index.d.ts +0 -0
  71. /package/dist/{components → src/components}/molecules/SegmentButton/SegmentButton.d.ts +0 -0
  72. /package/dist/{components → src/components}/molecules/SegmentButton/index.d.ts +0 -0
  73. /package/dist/{components → src/components}/molecules/TabLoadError/TabLoadError.d.ts +0 -0
  74. /package/dist/{components → src/components}/molecules/TabLoadError/index.d.ts +0 -0
  75. /package/dist/{components → src/components}/molecules/WatchButton/WatchButton.d.ts +0 -0
  76. /package/dist/{components → src/components}/molecules/WatchButton/index.d.ts +0 -0
  77. /package/dist/{components → src/components}/organisms/PanelNavigation/PanelNavigation.d.ts +0 -0
  78. /package/dist/{components → src/components}/organisms/PanelNavigation/index.d.ts +0 -0
  79. /package/dist/{components → src/components}/organisms/SegmentController/SegmentController.d.ts +0 -0
  80. /package/dist/{components → src/components}/organisms/SegmentController/index.d.ts +0 -0
  81. /package/dist/{development → src/development}/TimeSeek.d.ts +0 -0
  82. /package/dist/{test-polyfills.d.ts → src/development/development.d.ts} +0 -0
  83. /package/dist/{external → src/external}/AxiosNetworkClient.d.ts +0 -0
  84. /package/dist/{external → src/external}/LocalStorageCacheManager.d.ts +0 -0
  85. /package/dist/{external → src/external}/ReactRenderer.d.ts +0 -0
  86. /package/dist/{external → src/external}/mocks/MockExternalNetworkClient.d.ts +0 -0
  87. /package/dist/{external → src/external}/ports/cacheManager.d.ts +0 -0
  88. /package/dist/{external → src/external}/ports/networkClient.d.ts +0 -0
  89. /package/dist/{external → src/external}/ports/renderer.d.ts +0 -0
  90. /package/dist/{external → src/external}/spatial-navigation/index.d.ts +0 -0
  91. /package/dist/{external → src/external}/spatial-navigation/measureLayout.d.ts +0 -0
  92. /package/dist/{external → src/external}/spatial-navigation/spatialNavigation.d.ts +0 -0
  93. /package/dist/{external → src/external}/spatial-navigation/utils.d.ts +0 -0
  94. /package/dist/{external → src/external}/spatial-navigation/visualDebugger.d.ts +0 -0
  95. /package/dist/{external → src/external}/spatial-navigation/withFocusable.d.ts +0 -0
  96. /package/dist/{helpers → src/helpers}/Observable.d.ts +0 -0
  97. /package/dist/{helpers → src/helpers}/url.d.ts +0 -0
  98. /package/dist/{interfaces → src/interfaces}/IMaestroEvent.d.ts +0 -0
  99. /package/dist/{interfaces → src/interfaces}/IMaestroEventDelegate.d.ts +0 -0
  100. /package/dist/{interfaces → src/interfaces}/IUserSettings.d.ts +0 -0
  101. /package/dist/{models → src/models}/IModel.d.ts +0 -0
  102. /package/dist/{models → src/models}/IPanel.d.ts +0 -0
  103. /package/dist/{models → src/models}/ITheme.d.ts +0 -0
  104. /package/dist/{models → src/models}/IWinningBet.d.ts +0 -0
  105. /package/dist/{modules → src/modules}/bets/mocks.d.ts +0 -0
  106. /package/dist/{modules → src/modules}/bets/types/BetsAnalyticsTypes.d.ts +0 -0
  107. /package/dist/{modules → src/modules}/bets/view/HotProps/HotPropsView.d.ts +0 -0
  108. /package/dist/{modules → src/modules}/bets/view/UserBets/BetResult/BetResult.d.ts +0 -0
  109. /package/dist/{modules → src/modules}/bets/view/UserBets/BetsCard/BetsCard.d.ts +0 -0
  110. /package/dist/{modules → src/modules}/bets/view/UserBets/BetsCard/BetsCardEvent.d.ts +0 -0
  111. /package/dist/{modules → src/modules}/bets/view/UserBets/BetsCard/BetsCardFooter.d.ts +0 -0
  112. /package/dist/{modules → src/modules}/bets/view/UserBets/Boost/Boost.d.ts +0 -0
  113. /package/dist/{modules → src/modules}/bets/view/UserBets/OutcomeBadge/OutcomeBadge.d.ts +0 -0
  114. /package/dist/{modules → src/modules}/bets/view/UserBets/Parlay/Parlay.d.ts +0 -0
  115. /package/dist/{modules → src/modules}/bets/view/UserBets/Straight/Straight.d.ts +0 -0
  116. /package/dist/{modules → src/modules}/bets/view/UserBets/Teaser/Teaser.d.ts +0 -0
  117. /package/dist/{modules → src/modules}/bets/view/UserBets/UserBetsView.d.ts +0 -0
  118. /package/dist/{modules → src/modules}/bets/view/components/Bet/Bet.d.ts +0 -0
  119. /package/dist/{modules → src/modules}/bets/view/components/BetPill/BetPill.d.ts +0 -0
  120. /package/dist/{modules → src/modules}/bets/view/components/BetsCard/BetsCard.d.ts +0 -0
  121. /package/dist/{modules → src/modules}/bets/view/components/BetsCard/BetsCardHeader.d.ts +0 -0
  122. /package/dist/{modules → src/modules}/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.d.ts +0 -0
  123. /package/dist/{modules → src/modules}/bets/view/components/LocationWarning/LocationWarning.d.ts +0 -0
  124. /package/dist/{modules → src/modules}/bets/view/components/PromoCodeBanner/index.d.ts +0 -0
  125. /package/dist/{modules → src/modules}/key-plays/constants.d.ts +0 -0
  126. /package/dist/{modules → src/modules}/key-plays/interfaces/IKeyPlays.d.ts +0 -0
  127. /package/dist/{modules → src/modules}/key-plays/interfaces/IKeyPlaysResponse.d.ts +0 -0
  128. /package/dist/{modules → src/modules}/key-plays/view/KeyPlayCardScoreTagView.d.ts +0 -0
  129. /package/dist/{modules → src/modules}/key-plays/view/KeyPlayErrorStateView.d.ts +0 -0
  130. /package/dist/{modules → src/modules}/key-plays/view-model/KeyPlaysViewModel.d.ts +0 -0
  131. /package/dist/{modules → src/modules}/stats/mocks.d.ts +0 -0
  132. /package/dist/{modules → src/modules}/stats/utils/driveSummaryUtils.d.ts +0 -0
  133. /package/dist/{modules → src/modules}/stats/utils/renderTeamStatistic.d.ts +0 -0
  134. /package/dist/{modules → src/modules}/stats/utils.d.ts +0 -0
  135. /package/dist/{modules → src/modules}/stats/view/ActiveAthletes/ActiveAthletes.d.ts +0 -0
  136. /package/dist/{modules → src/modules}/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.d.ts +0 -0
  137. /package/dist/{modules → src/modules}/stats/view/ActiveAthletes/index.d.ts +0 -0
  138. /package/dist/{modules → src/modules}/stats/view/DriveSummary/DrivePlayCard.d.ts +0 -0
  139. /package/dist/{modules → src/modules}/stats/view/DriveSummary/DriveSummary.d.ts +0 -0
  140. /package/dist/{modules → src/modules}/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.d.ts +0 -0
  141. /package/dist/{modules → src/modules}/stats/view/DriveSummary/Header/DriveSummaryHeader.d.ts +0 -0
  142. /package/dist/{modules → src/modules}/stats/view/DriveSummary/MainStat/MainStat.d.ts +0 -0
  143. /package/dist/{modules → src/modules}/stats/view/DriveSummary/index.d.ts +0 -0
  144. /package/dist/{modules → src/modules}/stats/view/GameLeaders/GameLeaders.d.ts +0 -0
  145. /package/dist/{modules → src/modules}/stats/view/GameLeaders/index.d.ts +0 -0
  146. /package/dist/{modules → src/modules}/stats/view/MatchPredictor/DonutChart/DonutChart.d.ts +0 -0
  147. /package/dist/{modules → src/modules}/stats/view/MatchPredictor/DonutChart/index.d.ts +0 -0
  148. /package/dist/{modules → src/modules}/stats/view/MatchPredictor/MatchPredictorView.d.ts +0 -0
  149. /package/dist/{modules → src/modules}/stats/view/MatchPredictor/index.d.ts +0 -0
  150. /package/dist/{modules → src/modules}/stats/view/RecentGames/RecentGames.d.ts +0 -0
  151. /package/dist/{modules → src/modules}/stats/view/RecentGames/index.d.ts +0 -0
  152. /package/dist/{modules → src/modules}/stats/view/StatsItemView.d.ts +0 -0
  153. /package/dist/{modules → src/modules}/stats/view/StatsQRCode/StatsQRCodeView.d.ts +0 -0
  154. /package/dist/{modules → src/modules}/stats/view/StatsQRCode/index.d.ts +0 -0
  155. /package/dist/{modules → src/modules}/stats/view/TeamStats/TeamStatsView.d.ts +0 -0
  156. /package/dist/{modules → src/modules}/stats/view/TeamStats/index.d.ts +0 -0
  157. /package/dist/{modules → src/modules}/stats/view/Teams/StatsCarousel.d.ts +0 -0
  158. /package/dist/{modules → src/modules}/stats/view/Teams/StatsProgressBar.d.ts +0 -0
  159. /package/dist/{modules → src/modules}/stats/view/Teams/Teams.d.ts +0 -0
  160. /package/dist/{modules → src/modules}/stats/view/Teams/index.d.ts +0 -0
  161. /package/dist/{modules → src/modules}/stats/view/WinProbability/WinProbability.d.ts +0 -0
  162. /package/dist/{modules → src/modules}/stats/view/WinProbability/index.d.ts +0 -0
  163. /package/dist/{modules → src/modules}/stats/view/components/AthletesStatistics/AthletesStatistics.d.ts +0 -0
  164. /package/dist/{modules → src/modules}/stats/view/components/AthletesStatistics/StatisticTable.d.ts +0 -0
  165. /package/dist/{modules → src/modules}/stats/view/components/AthletesStatistics/index.d.ts +0 -0
  166. /package/dist/{modules → src/modules}/stats/view/index.d.ts +0 -0
  167. /package/dist/{services → src/services}/AnalyticsService/types.d.ts +0 -0
  168. /package/dist/{services → src/services}/BetsService.d.ts +0 -0
  169. /package/dist/{services → src/services}/InsightsService/InsightsService.d.ts +0 -0
  170. /package/dist/{services → src/services}/NetworkManager/NetworkManagerFactory.d.ts +0 -0
  171. /package/dist/{services → src/services}/NetworkManager/errors.d.ts +0 -0
  172. /package/dist/{services → src/services}/NetworkManager/types.d.ts +0 -0
  173. /package/dist/{services → src/services}/PageService/index.d.ts +0 -0
  174. /package/dist/{services → src/services}/PageService/mocks.d.ts +0 -0
  175. /package/dist/{services → src/services}/PageService/types.d.ts +0 -0
  176. /package/dist/{services → src/services}/StatsService.d.ts +0 -0
  177. /package/dist/{services → src/services}/ThemeManager/constants.d.ts +0 -0
  178. /package/dist/{services → src/services}/UserSettingsManager.d.ts +0 -0
  179. /package/dist/{types → src/types}/OverlayTypes.d.ts +0 -0
  180. /package/dist/{view-models → src/view-models}/OverlayViewModel.d.ts +0 -0
  181. /package/dist/{view-models → src/view-models}/PanelManagerViewModel.d.ts +0 -0
  182. /package/dist/{view-models → src/view-models}/ViewModel.d.ts +0 -0
@@ -1,12 +1,17 @@
1
1
  import IMaestroEventDelegate from '../interfaces/IMaestroEventDelegate';
2
- import { Environment } from '..';
3
2
  import { ActionTrackEvent, ImpressionTrackEvent } from '../services/AnalyticsService/types';
3
+ type Environment = 'development' | 'production';
4
4
  /**
5
5
  * Our own implementation of the IMaestroEventDelegate interface. Useful for Development and Testing
6
6
  */
7
7
  export default class MaestroEventDelegate implements IMaestroEventDelegate {
8
+ loggedIn: boolean;
8
9
  env: Environment;
9
- constructor(env?: Environment);
10
+ constructor({ env, loggedIn, }?: {
11
+ env: Environment;
12
+ loggedIn: boolean;
13
+ });
14
+ toggleLogin(): void;
10
15
  trackImpression(impression: ImpressionTrackEvent): void;
11
16
  trackAction(action: ActionTrackEvent): void;
12
17
  getStatsAPIBaseURL(): string;
@@ -18,3 +23,4 @@ export default class MaestroEventDelegate implements IMaestroEventDelegate {
18
23
  getUserToken(): Promise<string | null>;
19
24
  playClip(atIndex: number): void;
20
25
  }
26
+ export {};
@@ -0,0 +1 @@
1
+ export declare const slugify: (str: string) => string;
@@ -12,7 +12,6 @@ export { IWinningBet } from './models/IWinningBet';
12
12
  export { ActionTrackEvent, ImpressionTrackEvent, Metadata, PanelClickAction, PanelViewAction, } from './services/AnalyticsService/types';
13
13
  export { IMaestroEventDelegate, IMaestroEvent, IMaestroKeyPlaysResponse, MaestroPanelType, };
14
14
  export { IUserSettings, DEFAULT_USER_SETTINGS, } from './interfaces/IUserSettings';
15
- export type Environment = 'development' | 'production';
16
15
  /**
17
16
  * Main SDK class that serves as the entry point for the Maestro TV SDK
18
17
  * Follows a singleton pattern similar to the Swift implementation
@@ -20,13 +19,8 @@ export type Environment = 'development' | 'production';
20
19
  declare class MaestroWebSDK implements IMaestroManager {
21
20
  private static instance;
22
21
  private renderer;
23
- private siteID?;
24
- private userID?;
25
- private maestroJwt?;
26
- private clientAppToken?;
27
- private clientAppSwid?;
22
+ private siteID;
28
23
  private maestroEventViewModel;
29
- private environment;
30
24
  private pageConfig;
31
25
  private constructor();
32
26
  /**
@@ -37,12 +31,6 @@ declare class MaestroWebSDK implements IMaestroManager {
37
31
  userDidStartWatchingEvent(eventID: string, delegate: IMaestroEventDelegate, userSettings?: IUserSettings): Promise<IMaestroEvent>;
38
32
  userDidStopWatchingEvent(_: string): void;
39
33
  configure(configParams: SDKConfigParams): void;
40
- /**
41
- * Sets the environment for the SDK
42
- * @param environment The environment to set
43
- */
44
- setEnvironment(environment: Environment): void;
45
- getEnvironment(): Environment;
46
34
  /**
47
35
  * Checks if this is an authorized client based on siteID
48
36
  */
@@ -51,29 +39,14 @@ declare class MaestroWebSDK implements IMaestroManager {
51
39
  * Sets the site ID for the SDK
52
40
  * @param siteID The site ID to set
53
41
  */
54
- setSiteID(siteID?: string): void;
55
- getSiteID(): string | undefined;
56
- /**
57
- * Sets the user ID for the SDK
58
- * @param userID The user ID to set
59
- */
60
- setUserID(userID: string): void;
61
- getUserID(): string | undefined;
42
+ setSiteID(siteID: string): void;
43
+ getSiteID(): string;
62
44
  /**
63
45
  * Gets the event view model
64
46
  * @returns The current event view model
65
47
  */
66
48
  getMaestroEventViewModel(): MaestroEventViewModel;
67
49
  renderPanel(id: string): Promise<() => void>;
68
- setMaestroJwt(jwt: string | undefined): void;
69
- setClientAppSwid(swid: string | undefined): void;
70
- setClientAppToken(jwt: string | undefined): void;
71
- authenticateUser(swid: string, token: string): Promise<void>;
72
- deauthenticateUser(): Promise<void>;
73
- getCurrentMaestroJwt(): string | undefined;
74
- getClientAppToken(): string | undefined;
75
- getCurrentUserID(): string | undefined;
76
- getClientAppSwid(): string | undefined;
77
50
  getPageConfig(): PageConfig | null;
78
51
  }
79
52
  declare const SDK: MaestroWebSDK;
@@ -0,0 +1,45 @@
1
+ import IMaestroEventDelegate from './IMaestroEventDelegate';
2
+ import IMaestroEvent from './IMaestroEvent';
3
+ import { IUserSettings } from './IUserSettings';
4
+ export type SDKConfigParams = {
5
+ /**
6
+ * The site ID to use for the SDK.
7
+ */
8
+ siteID: string;
9
+ /**
10
+ * User settings for customizing SDK behavior (panel visibility, feature toggles, etc.)
11
+ */
12
+ userSettings?: IUserSettings;
13
+ };
14
+ /**
15
+ This is the MaestroKit top-level API for initializing and configuring the framework. It encompasses all functionality that is not specific to an event.
16
+ */
17
+ export default interface IMaestroManager {
18
+ /**
19
+ * @description Configure the MaestroWebSDK.
20
+ * @param {SDKConfigParams} configParams - Configuration parameters
21
+ * @param {SDKConfigParams['siteID']} configParams.siteID - The site ID to use for the SDK.
22
+ * @param {SDKConfigParams['userSettings']} configParams.userSettings - User settings for customizing SDK behavior.
23
+ */
24
+ configure(configParams: SDKConfigParams): void;
25
+ /**
26
+ Tells the SDK the user has opened an event in the app's player.
27
+ Arguments:
28
+ - eventID: The Event ID for the event opened in the player.
29
+ - delegate: an instance of the app's implementation of IMaestroEventDelegate
30
+ - userSettings: Optional user settings to override the configured settings for this event
31
+ The function returns an instance of MaestroEventViewModel, which includes an implementation of IMaestroEvent. IMaestroEvent represents the app-facing portion of the MaestroKit API related to the currently-loaded event. So after `userDidStartWatchingEvent` is called, the SDK has access to the API detailed in `MaestroEventDelegate` for making calls to the app, and the app has access to the API detailed in `IMaestroEvent` for making calls to the SDK.
32
+ */
33
+ userDidStartWatchingEvent(eventID: string, delegate: IMaestroEventDelegate, userSettings?: IUserSettings): Promise<IMaestroEvent>;
34
+ /**
35
+ * @description Tells the SDK the user has closed an event that was open in the app's player.
36
+ * @param eventID
37
+ */
38
+ userDidStopWatchingEvent(eventID: string): void;
39
+ /**
40
+ * Render the PanelManager with the available panels for the current event in the specified HTML id element.
41
+ * @param id - The ID of the HTML element where the panel will be rendered.
42
+ * @return A Promise that resolves to a function to remove the panel when no longer needed.
43
+ */
44
+ renderPanel(id: string): Promise<() => void>;
45
+ }
@@ -12,6 +12,7 @@ export interface ITeam {
12
12
  color: string;
13
13
  alternateColor: string;
14
14
  favored: boolean;
15
+ favoredAtOpen?: boolean;
15
16
  }
16
17
  export interface IOddsValue {
17
18
  /** "-110", "+138", "EVEN", etc. */
@@ -1,6 +1,6 @@
1
1
  import React, { Component } from 'react';
2
2
  import './BetsView.styles.css';
3
- import { BetItem, BetsErrorState } from '../view-model/BetsViewModel';
3
+ import BetsViewModel, { BetItem, BetsErrorState } from '../view-model/BetsViewModel';
4
4
  import { Direction } from '@/external/spatial-navigation/utils';
5
5
  interface BetsViewState {
6
6
  container: HTMLDivElement | null;
@@ -17,6 +17,7 @@ declare class BetsView extends Component<{}, BetsViewState> {
17
17
  private hideWagersUnsub;
18
18
  private vm;
19
19
  constructor(props: {});
20
+ get viewModel(): BetsViewModel;
20
21
  componentDidMount(): void;
21
22
  componentWillUnmount(): void;
22
23
  renderBetItem: (item: BetItem) => React.JSX.Element | null;
@@ -15,6 +15,7 @@ export default class FocusableSixPackViewWrapper extends React.Component<Props>
15
15
  context: import("@/components/core/ScrollableContainer/ScrollableContainer").ScrollableContainerContextType;
16
16
  onBecameFocused: (layout: Layout) => void;
17
17
  onArrowPress: (d: Direction, _props: any) => void;
18
+ get viewModel(): import("../../view-model/BetsViewModel").BetsViewModel;
18
19
  onEnterPress: () => void;
19
20
  render(): React.JSX.Element;
20
21
  }
@@ -11,6 +11,7 @@ export default class FocusablePromoCodeBannerWrapper extends React.Component<IBe
11
11
  context: import("@/components/core/ScrollableContainer/ScrollableContainer").ScrollableContainerContextType;
12
12
  onBecameFocused: (layout: Layout) => void;
13
13
  onArrowPress: (d: Direction, _props: any) => void;
14
+ get viewModel(): import("@/modules/bets/view-model/BetsViewModel").BetsViewModel;
14
15
  onEnterPress: () => void;
15
16
  render(): React.JSX.Element;
16
17
  }
@@ -24,10 +24,14 @@ type TeamOdd = {
24
24
  moneylineFirstLine: string;
25
25
  };
26
26
  export type ISixPackOdds = {
27
- awayTeamOdds: TeamOdd;
28
- homeTeamOdds: TeamOdd;
27
+ topTeamOdds: TeamOdd;
28
+ bottomTeamOdds: TeamOdd;
29
+ drawOdds?: TeamOdd;
30
+ orderedColumns: {
31
+ abbreviation: string;
32
+ type: string;
33
+ }[];
29
34
  gameState: string;
30
- sport: string;
31
35
  };
32
36
  export type IUserBets = {
33
37
  defaultTab: string;
@@ -2,6 +2,7 @@ import IKeyPlay, { KeyPlayLoadFailureStatus } from '../interfaces/IKeyPlays';
2
2
  import './KeyPlayCardView.styles.css';
3
3
  import React from 'react';
4
4
  import { WithFocusableProps } from '@/external/spatial-navigation';
5
+ import KeyPlaysViewModel from '../view-model/KeyPlaysViewModel';
5
6
  import { Direction, Layout } from '@/external/spatial-navigation/utils';
6
7
  type KeyPlayCardViewProps = IKeyPlay & {
7
8
  isPlaying: boolean;
@@ -16,6 +17,7 @@ export declare class KeyPlayCardView extends React.Component<KeyPlayCardViewProp
16
17
  private failedClipListener;
17
18
  private vm;
18
19
  constructor(props: KeyPlayCardViewProps);
20
+ get viewModel(): KeyPlaysViewModel;
19
21
  componentDidMount(): void;
20
22
  componentWillUnmount(): void;
21
23
  onLoad: () => void;
@@ -1,7 +1,7 @@
1
1
  import React, { Component } from 'react';
2
2
  import './KeyPlaysView.styles.css';
3
3
  import { KeyPlaysErrorState } from '../interfaces/IKeyPlays';
4
- import { KeyPlayItem } from '../view-model/KeyPlaysViewModel';
4
+ import KeyPlaysViewModel, { KeyPlayItem } from '../view-model/KeyPlaysViewModel';
5
5
  interface IKeyPlaysState {
6
6
  playbackProgress: number | null;
7
7
  playbackIndex: number | null;
@@ -15,6 +15,7 @@ export declare class KeyPlays extends Component<{}, IKeyPlaysState> {
15
15
  private itemsUnsub;
16
16
  private vm;
17
17
  constructor(props: {});
18
+ get viewModel(): KeyPlaysViewModel;
18
19
  componentDidMount(): void;
19
20
  componentWillUnmount(): void;
20
21
  private handlePlayClip;
@@ -27,6 +28,7 @@ export default class KeyPlaysWithErrorState extends Component<{}, KeyPlaysWithEr
27
28
  private errorStateUnsub;
28
29
  private vm;
29
30
  constructor(props: {});
31
+ get viewModel(): KeyPlaysViewModel;
30
32
  componentDidMount(): void;
31
33
  componentWillUnmount(): void;
32
34
  private handleRetry;
@@ -39,7 +39,7 @@ export interface Athlete {
39
39
  shortName: string;
40
40
  jersey: string;
41
41
  headshot?: string;
42
- links: AthleteLink[];
42
+ links?: AthleteLink[];
43
43
  position?: AthletePosition;
44
44
  statistics?: {
45
45
  $key: string;
@@ -188,5 +188,39 @@ export interface StatsApiResponse {
188
188
  gameResult: string;
189
189
  }[];
190
190
  }[];
191
+ scoringSummary?: {
192
+ title: string;
193
+ sections: {
194
+ title: string;
195
+ items: {
196
+ team: {
197
+ $key: string;
198
+ };
199
+ athlete: {
200
+ $key: string;
201
+ };
202
+ clock: string;
203
+ title: string;
204
+ description: string;
205
+ }[];
206
+ }[];
207
+ };
208
+ penaltySummary?: {
209
+ title: string;
210
+ sections: {
211
+ title: string;
212
+ items: {
213
+ team: {
214
+ $key: string;
215
+ };
216
+ athlete: {
217
+ $key: string;
218
+ };
219
+ clock: string;
220
+ title: string;
221
+ description: string;
222
+ }[];
223
+ }[];
224
+ };
191
225
  }
192
226
  export {};
@@ -5,6 +5,7 @@ import { Direction } from '@/external/spatial-navigation/utils';
5
5
  type Props = {
6
6
  onArrowPress: (index: number) => (direction: Direction) => void;
7
7
  onBackPress: () => void;
8
+ parentFocusKey: string;
8
9
  } & Pick<ActiveAthletesProps, 'item' | 'onEnterPress'>;
9
10
  declare class ExpandedAthletes extends React.Component<Props> {
10
11
  refsArray: HTMLDivElement[];
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { PenaltiesItem } from '../../view-model/StatsViewModel';
3
+ import { Layout } from '@/external/spatial-navigation/utils';
4
+ type PenaltiesProps = {
5
+ item: PenaltiesItem;
6
+ onBecameFocused: (layout: Layout) => void;
7
+ onEnterPress: () => void;
8
+ };
9
+ declare const Penalties: (props: PenaltiesProps) => React.JSX.Element;
10
+ export default Penalties;
@@ -0,0 +1,2 @@
1
+ import Penalties from './Penalties';
2
+ export default Penalties;
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import { IScoreSection } from '@/modules/stats/view-model/StatsViewModel';
3
+ import './ExpandedScores.styles.css';
4
+ import { Direction } from '@/external/spatial-navigation/utils';
5
+ type Props = {
6
+ item: IScoreSection[];
7
+ noScoresText: string;
8
+ type: 'scoringSummary' | 'penalties';
9
+ onArrowPress: (props: {
10
+ index: number;
11
+ scoreIndex: number;
12
+ }) => (direction: Direction) => boolean;
13
+ onBackPress: () => void;
14
+ onEnterPress: () => void;
15
+ parentFocusKey: string;
16
+ };
17
+ declare class ExpandedScores extends React.Component<Props> {
18
+ refsArray: HTMLDivElement[];
19
+ titleRefsArray: HTMLDivElement[];
20
+ wrapperRef: HTMLDivElement | null;
21
+ state: {
22
+ maxHeight: string;
23
+ scrolled: boolean;
24
+ };
25
+ updateMaxHeight(sectionIndex: number, scoreFocusedIndex: number): void;
26
+ scrollToElement(focusedIndex: number): void;
27
+ onBecameFocused: (sectionIndex: number, scoreFocusedIndex: number) => () => void;
28
+ render(): React.JSX.Element;
29
+ }
30
+ export default ExpandedScores;
@@ -0,0 +1,2 @@
1
+ import ExpandedScores from './ExpandedScores';
2
+ export default ExpandedScores;
@@ -0,0 +1,52 @@
1
+ /// <reference types="prop-types" />
2
+ import React from 'react';
3
+ import { IScoreItem } from '@/modules/stats/view-model/StatsViewModel';
4
+ import { WithFocusableProps } from '@/external/spatial-navigation';
5
+ import './ScoreItem.styles.css';
6
+ type Props = {
7
+ item: IScoreItem;
8
+ };
9
+ declare const _default: {
10
+ new (props?: (Props & WithFocusableProps) | undefined, context?: any): {
11
+ state: import("../../../../../external/spatial-navigation/withFocusable").WithFocusableState;
12
+ navigation: import("../../../../../external/spatial-navigation/spatialNavigation").default;
13
+ getChildContext(): {
14
+ parentFocusKey: string;
15
+ };
16
+ setFocus: (focusKey: string) => void;
17
+ navigateByDirection: (direction: import("../../../../../external/spatial-navigation/utils").Direction, details?: Record<string, any>) => void;
18
+ stealFocus: () => void;
19
+ onUpdateFocus: (focused: boolean) => void;
20
+ onUpdateHasFocusedChild: (hasFocusedChild: boolean) => void;
21
+ onEnterPressHandler: (details: import("../../../../../external/spatial-navigation/utils").Details) => void;
22
+ onEnterReleaseHandler: () => void;
23
+ onBackPressHandler: (details: import("../../../../../external/spatial-navigation/utils").Details) => void;
24
+ onArrowPressHandler: (direction: import("../../../../../external/spatial-navigation/utils").Direction, details: import("../../../../../external/spatial-navigation/utils").Details) => boolean | void;
25
+ onBecameFocusedHandler: (layout: import("../../../../../external/spatial-navigation/utils").Layout, details: import("../../../../../external/spatial-navigation/utils").Details) => void;
26
+ onBecameBlurredHandler: (layout: import("../../../../../external/spatial-navigation/utils").Layout, details: import("../../../../../external/spatial-navigation/utils").Details) => void;
27
+ componentDidMount(): void;
28
+ componentDidUpdate(): void;
29
+ componentWillUnmount(): void;
30
+ render(): React.ReactElement<Props & WithFocusableProps>;
31
+ setState<K extends keyof import("../../../../../external/spatial-navigation/withFocusable").WithFocusableState>(state: import("../../../../../external/spatial-navigation/withFocusable").WithFocusableState | ((prevState: Readonly<import("../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, props: Props & WithFocusableProps) => import("../../../../../external/spatial-navigation/withFocusable").WithFocusableState | Pick<import("../../../../../external/spatial-navigation/withFocusable").WithFocusableState, K>) | Pick<import("../../../../../external/spatial-navigation/withFocusable").WithFocusableState, K>, callback?: (() => any) | undefined): void;
32
+ forceUpdate(callBack?: (() => any) | undefined): void;
33
+ props: Readonly<{
34
+ children?: React.ReactNode;
35
+ }> & Readonly<Props & WithFocusableProps>;
36
+ context: any;
37
+ refs: {
38
+ [key: string]: React.ReactInstance;
39
+ };
40
+ componentWillMount?(): void;
41
+ componentWillReceiveProps?(nextProps: Readonly<Props & WithFocusableProps>, nextContext: any): void;
42
+ shouldComponentUpdate?(nextProps: Readonly<Props & WithFocusableProps>, nextState: Readonly<import("../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): boolean;
43
+ componentWillUpdate?(nextProps: Readonly<Props & WithFocusableProps>, nextState: Readonly<import("../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): void;
44
+ };
45
+ contextTypes: {
46
+ parentFocusKey: import("prop-types").Requireable<string>;
47
+ };
48
+ childContextTypes: {
49
+ parentFocusKey: import("prop-types").Requireable<string>;
50
+ };
51
+ };
52
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import ScoreItem from './ScoreItem';
2
+ export default ScoreItem;
@@ -0,0 +1,7 @@
1
+ import { IScoreSection } from '@/modules/stats/view-model/StatsViewModel';
2
+ import React from 'react';
3
+ import './ScoresSection.styles.css';
4
+ declare const ScoresSection: (props: IScoreSection & {
5
+ noScoresText: string;
6
+ }) => React.JSX.Element;
7
+ export default ScoresSection;
@@ -0,0 +1,2 @@
1
+ import ScoresSection from './ScoresSection';
2
+ export default ScoresSection;
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { Direction, Layout } from '@/external/spatial-navigation/utils';
3
+ import { PenaltiesItem, ScoringSummaryItem } from '../../view-model/StatsViewModel';
4
+ import './ScoringSummary.styles.css';
5
+ export type ScoringSummaryProps = {
6
+ item: ScoringSummaryItem | PenaltiesItem;
7
+ noScoresText?: string;
8
+ onBecameFocused: (layout: Layout) => void;
9
+ onEnterPress: () => void;
10
+ };
11
+ declare class ScoringSummary extends React.Component<ScoringSummaryProps, {
12
+ expanded: boolean;
13
+ }> {
14
+ constructor(props: ScoringSummaryProps);
15
+ onEnterPress(): void;
16
+ onExpandedScoreArrowPress: (props: {
17
+ index: number;
18
+ scoreIndex: number;
19
+ }) => (d: Direction) => boolean;
20
+ get cardFocusKey(): string;
21
+ onExpandedScoreBackPress: () => void;
22
+ onArrowPress: (d: Direction) => void;
23
+ renderContent(): React.JSX.Element | React.JSX.Element[];
24
+ render(): React.JSX.Element;
25
+ }
26
+ export default ScoringSummary;
@@ -0,0 +1,2 @@
1
+ import ScoringSummary from './ScoringSummary';
2
+ export default ScoringSummary;
@@ -1,6 +1,6 @@
1
1
  import React, { Component } from 'react';
2
2
  import './StatsView.styles.css';
3
- import { StatsErrorState, StatsItem } from '../view-model/StatsViewModel';
3
+ import StatsViewModel, { StatsErrorState, StatsItem } from '../view-model/StatsViewModel';
4
4
  import { Direction } from '@/external/spatial-navigation/utils';
5
5
  interface StatsViewState {
6
6
  container: HTMLDivElement | null;
@@ -15,6 +15,7 @@ declare class StatsView extends Component<{}, StatsViewState> {
15
15
  private errorStateListener;
16
16
  private vm;
17
17
  constructor(props: {});
18
+ get viewModel(): StatsViewModel;
18
19
  componentDidMount(): void;
19
20
  componentWillUnmount(): void;
20
21
  clearTabLoadFailure: () => void;
@@ -57,6 +57,7 @@ export type WinProbabilityStatsItem = {
57
57
  };
58
58
  export type GameLeadersStatsItem = {
59
59
  type: 'gameLeaders';
60
+ displayText: string;
60
61
  items: AthletesStatisticsItem[];
61
62
  };
62
63
  export type ActiveAthletesItem = {
@@ -107,7 +108,32 @@ export type DriveSummaryItem = {
107
108
  lastPlayMarquee: string;
108
109
  plays: DrivePlay[];
109
110
  };
110
- export type StatsItem = HeaderTeamStatItem | RecentGamesStatsItem | WinProbabilityStatsItem | GameLeadersStatsItem | ActiveAthletesItem | StatsPromotionItem | StatsMatchPredictorItem | TeamStatsItem | DriveSummaryItem;
111
+ export type IScoreItem = {
112
+ teamLogo?: string;
113
+ teamName?: string;
114
+ athletePosition?: string;
115
+ athleteNumber?: string;
116
+ athleteName?: string;
117
+ athleteAssists?: string;
118
+ athleteThumbnail?: string;
119
+ description: string;
120
+ clock: string;
121
+ };
122
+ export type IScoreSection = {
123
+ title: string;
124
+ scores: IScoreItem[];
125
+ };
126
+ export type ScoringSummaryItem = {
127
+ type: 'scoringSummary';
128
+ title: string;
129
+ sections: IScoreSection[];
130
+ };
131
+ export type PenaltiesItem = {
132
+ type: 'penalties';
133
+ title: string;
134
+ sections: IScoreSection[];
135
+ };
136
+ export type StatsItem = HeaderTeamStatItem | RecentGamesStatsItem | WinProbabilityStatsItem | GameLeadersStatsItem | ActiveAthletesItem | StatsPromotionItem | StatsMatchPredictorItem | TeamStatsItem | DriveSummaryItem | ScoringSummaryItem | PenaltiesItem;
111
137
  export declare class StatsViewModel extends ViewModel {
112
138
  isDataLoading: Observable<boolean>;
113
139
  hasEverSuccessfullyLoaded: Observable<boolean>;
@@ -200,6 +226,8 @@ export declare class StatsViewModel extends ViewModel {
200
226
  private parseGameLeaders;
201
227
  private parseActiveAthletes;
202
228
  private getActiveAthletesTeamInfo;
229
+ private parseScoringSummary;
230
+ private parsePenalties;
203
231
  /**
204
232
  * Simulate a use case using mock StatsApiResponse data
205
233
  */
@@ -0,0 +1,3 @@
1
+ declare const initSentry: () => void;
2
+ export declare const captureException: (error: unknown, extra?: any) => void;
3
+ export default initSentry;
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import InsightsPayloadBuilder from '../InsightsService/InsightsPayloadBuilder';
2
3
  import InsightsService from '../InsightsService/InsightsService';
3
4
  import { PageConfig } from '../PageService/types';
@@ -38,6 +39,10 @@ type PanelData = {
38
39
  declare class AnalyticsService {
39
40
  insightsService: InsightsService;
40
41
  insightsPayloadBuilder: InsightsPayloadBuilder;
42
+ sessionId: string;
43
+ sessionBeaconTimeoutId: NodeJS.Timeout | null;
44
+ isSessionBeaconRunning: boolean;
45
+ isSessionActive: boolean;
41
46
  constructor();
42
47
  private trackAction;
43
48
  private trackImpression;
@@ -45,5 +50,10 @@ declare class AnalyticsService {
45
50
  panelClick({ type, metadata, name }: PanelClickPayload): Promise<void>;
46
51
  getBaseMetadataFromPageConfig(pageConfig: PageConfig | null): BaseMetadata;
47
52
  getPanelDataFromPageConfig(type: 'espnBet' | 'espnStats' | 'espnKeyPlays', pageConfig: PageConfig | null): PanelData;
53
+ sessionStart(): Promise<void>;
54
+ sessionEnd(): Promise<void>;
55
+ private scheduleNextBeacon;
56
+ private sendSessionBeacon;
57
+ private sessionBeacon;
48
58
  }
49
59
  export default AnalyticsService;
@@ -7,9 +7,9 @@ type EventData = {
7
7
  ontology: {
8
8
  kingdom: string;
9
9
  phylum: string;
10
- class: string;
10
+ class?: string;
11
11
  order?: string;
12
- family: string;
12
+ family?: string;
13
13
  genus?: string;
14
14
  species?: string;
15
15
  };
@@ -54,7 +54,7 @@ export default class InsightsPayloadBuilder {
54
54
  * @description Event class.
55
55
  * @example 'panel_type'
56
56
  */
57
- e2: string;
57
+ e2: string | undefined;
58
58
  /**
59
59
  * @description Event order.
60
60
  * @example 'panel_id'
@@ -64,7 +64,7 @@ export default class InsightsPayloadBuilder {
64
64
  * @description Event family.
65
65
  * @example 'panel_name'
66
66
  */
67
- e4: string;
67
+ e4: string | undefined;
68
68
  /**
69
69
  * @description Event genus. This is a more specific level of the ontology and can be used to identify the event type.
70
70
  */
@@ -206,7 +206,7 @@ export default class InsightsPayloadBuilder {
206
206
  * @description A unique identifier for the device, which can be used to track the device across sessions. You might wanna save this into a local storage or something related.
207
207
  * @example localStorage.getItem('devicePermanentId') || generateUniqueId()
208
208
  */
209
- d_pid: any;
209
+ d_pid: string;
210
210
  /**
211
211
  * @description Device screen height in pixels.
212
212
  * @example window.screen.height
@@ -263,7 +263,7 @@ export default class InsightsPayloadBuilder {
263
263
  }>;
264
264
  private getEventInsights;
265
265
  private getPageInsights;
266
- private getDevicePermanentID;
266
+ getDevicePermanentID(): string;
267
267
  private getDeviceCreated;
268
268
  private getTabID;
269
269
  private getDeviceInsights;
@@ -1,7 +1,6 @@
1
- import { Environment } from '@/index';
2
1
  import { ICacheManager } from '../../external/ports/cacheManager';
3
2
  import { INetworkClient } from '../../external/ports/networkClient';
4
- export declare const MAESTRO_BASE_URLS: Record<Environment, string>;
3
+ export declare const MAESTRO_BASE_URL = "https://api.maestro.io";
5
4
  export declare const SDK_FLAVOR = "MaestroKit_Web";
6
5
  export declare const ENDPOINTS: {
7
6
  CAN_I_PLAY: string;
@@ -5,4 +5,5 @@ export default class PageService {
5
5
  private client;
6
6
  constructor();
7
7
  fetchPageConfig(siteId: string, eventId: string): Promise<PageConfig | null>;
8
+ static isPanelAvailable(pageConfig: PageConfig | null, panelType: string): boolean | undefined;
8
9
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -10,6 +10,7 @@ import IMaestroKeyPlaysResponse from '../modules/key-plays/interfaces/IKeyPlaysR
10
10
  import { MaestroPanelType } from '@/models/IPanel';
11
11
  import { IUserSettings } from '../interfaces/IUserSettings';
12
12
  import { PanelManagerViewModel } from './PanelManagerViewModel';
13
+ import AnalyticsService from '@/services/AnalyticsService/AnalyticsService';
13
14
  export declare class MaestroEventViewModel extends ViewModel implements IMaestroEvent {
14
15
  private _eventId;
15
16
  private _title;
@@ -17,11 +18,12 @@ export declare class MaestroEventViewModel extends ViewModel implements IMaestro
17
18
  private _isShowingPanel;
18
19
  private playerTimeCode;
19
20
  delegate: IMaestroEventDelegate;
20
- keyPlaysViewModel: KeyPlaysViewModel;
21
- betsViewModel: BetsViewModel;
22
- statsViewModel: StatsViewModel;
21
+ keyPlaysViewModel: KeyPlaysViewModel | null;
22
+ betsViewModel: BetsViewModel | null;
23
+ statsViewModel: StatsViewModel | null;
23
24
  panelManagerViewModel: PanelManagerViewModel;
24
25
  navigation: SpatialNavigation;
26
+ analyticsService: AnalyticsService;
25
27
  constructor(eventId: string | undefined, delegate: IMaestroEventDelegate);
26
28
  setActivePanel(panelType: MaestroPanelType): void;
27
29
  updatePlayerTimeCode(timestamp: number): void;