{"version":3,"sources":["components/PlayerStats/ContentPitchingTable/ContentPitchingTable.module.scss","components/PlayerStats/BatterContentGraphs/FilteredGraphs/FilteredGraphs.module.scss","components/Game/PlaysHitting/PlaysHitting.module.scss","components/Game/Videos/Videos.module.scss","components/Game/Header/MobileOptionsBar/OptionsDropdown/OptionsDropdown.module.scss","components/Games/ContentSideTables/ContentSideTables.module.scss","components/Game/Header/Header.module.scss","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/FilteredGraphs.module.scss","components/PlayerStats/BatterContentGraphs/FilteredGraphs/TwinPitchesGraph/TwinPitchesGraph.module.scss","components/PlayerStats/ContentBattingTable/ContentBattingTable.module.scss","components/Game/PlaysSpin/PlaysSpin.module.scss","components/Game/Timeline/Timeline.module.scss","components/Game/PlaysEvents/PlaysEvents.module.scss","components/Game/Video/Video.module.scss","components/Game/ContentBox/MobileBox/ContentMobileBox.module.scss","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/TwinPitchesGraph/TwinPitchesGraph.module.scss","components/PlayerStats/BatterContentGraphs/FilteredGraphs/FacedGraph/FacedGraph.module.scss","components/Games/ContentTable/ContentTable.module.scss","components/Game/ContentBox/Graphs/TwinPitchesGraph/TwinPitchesGraph.module.scss","components/Stats/ContentTeamTable/ContentTeamTable.module.scss","components/Game/PlaysSpeed/PlaysSpeed.module.scss","components/Game/PlaysRunning/PlaysRunning.module.scss","components/Game/PlaysPitch/PitchValues/PitchValues.module.scss","components/PlayerStats/BatterContentGraphs/Banner/Banner.module.scss","components/Game/ContentBox/Graphs/PitchesSpeedField/FieldGraph/FieldGraph.module.scss","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesSpeedField/FieldGraph/FieldGraph.module.scss","components/Game/PlaysHitting/HittingField/HittingField.module.scss","components/PlayerStats/PitcherContentGraphs/Banner/Banner.module.scss","components/PlayerStats/ArsenalGraph/ArsenalGraph.module.scss","components/Game/Header/MobileOptionsBar/MobileOptionsBar.module.scss","components/Game/Content/Content.module.scss","components/Game/PlaysHitting/HittingVideos/HittingVideo.module.scss","components/Game/FiltersViewModes/FiltersViewModes.module.scss","components/Game/ContentSituationsList/ContentSituationsList.module.scss","components/Game/ContentBox/Graphs/PitchersReleaseSpeeds/PitchersReleaseSpeeds.module.scss","components/Game/ContentBox/ContentBox.module.scss","components/Games/ContentCalendar/ContentCalendar.module.scss","components/Game/ModalCameraSelector/CameraList.module.scss","components/Game/PlaysPitch/PitchVideo/PitchVideo.module.scss","components/Game/Plays/Plays.module.scss","components/Stats/HeaderSelections/HeaderSelections.module.scss","components/Stats/ContentPlayerTable/ContentPlayerTable.module.scss","components/PlayerStats/HeaderSelections/HeaderSelections.module.scss","components/Game/Header/MobileOptionsBar/InfoDropdown/InfoDropdown.module.scss","components/Game/PlaysField/PlaysField.module.scss","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/HitsAnglesGraphs/HitsAnglesGraph.module.scss","components/PlayerStats/BatterContentGraphs/FilteredGraphs/HitsAnglesGraphs/HitsAnglesGraph.module.scss","components/UI/dropdown/GamesDropdown/Dropdown.module.scss","components/Game/ContentGraphics/ContentGraphics.module.scss","components/UI/loaders/Loader/Loader.module.scss","components/UI/dropdown/CustomLeaguesDropdown/Dropdown.module.scss","components/PlayerStats/ContentMobileTable/ContentMobileTable.module.scss","components/Game/VideoOptions/VideoOptions.module.scss","components/PlayerStats/HeaderLeagues/HeaderLeagues.module.scss","components/Game/ContentCardReplacement/ContentCardReplacement.module.scss","components/PlayerStats/Content/Content.module.scss","components/Game/ContentBox/Graphs/BattersTable/BattersTable.module.scss","components/Game/ContentBox/Graphs/PitchesSpeedField/FrequencySpeedGraph/FrequencySpeedGraph.module.scss","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesSpeedField/FrequencySpeedGraph/FrequencySpeedGraph.module.scss","components/Games/HeaderLeagues/HeaderLeagues.module.scss","components/Stats/HeaderLeagues/HeaderLeagues.module.scss","components/Game/ContentBox/Graphs/PitchesTrajectories/PitchesTrajectories.module.scss","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesTrajectories/PitchesTrajectories.module.scss","components/PlayerStats/BatterContentGraphs/FilteredGraphs/PitchesTrajectories/PitchesTrajectories.module.scss","components/UI/icons/Bases/Bases.module.scss","components/UI/checkboxes/TimeDynamicCheckbox/TimeDynamicCheckbox.module.scss","components/Games/HeaderSelections/HeaderSelections.module.scss","components/TeamGames/HeaderLeagues/HeaderLeagues.module.scss","components/TeamGames/ContentMobileHeader/ContentMobileHeader.module.scss","components/Game/ContentCardSimple/ContentCardSimple.module.scss","components/UI/dropdown/VideoSpeedDropdown/VideoSpeedDropdown.module.scss","components/UI/togglers/OptionsToggler/OptionsToggler.module.scss","components/PlayerStats/MobileScrollingWrapper/MobileScrollingWrapper.module.scss","components/UI/icons/Rects/Rects.module.scss","components/Game/HeaderTeams/HeaderTeams.module.scss","components/UI/buttons/ForwardRepeat/ForwardRepeat.module.scss","components/Game/ContentSituationsListItem/ContentSituationsListItem.module.scss","components/Game/ContentCardComplexFooter/ContentCardComplexFooter.module.scss","components/TeamGames/ContentPlayersTable/ContentPlayersTable.module.scss","components/TeamGames/ContentGamesTable/ContentGamesTable.module.scss","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/GraphsHeader/GraphsHeader.module.scss","components/PlayerStats/BatterContentGraphs/FilteredGraphs/GraphsHeader/GraphsHeader.module.scss","components/Game/FiltersSituationsList/FiltersSituationsList.module.scss","components/Game/HeaderLogo/HeaderLogo.module.scss","components/Game/PlayerFilterField/PlayerFilterField.module.scss","components/Game/ContentCardComplexBody/ContentCardComplexBody.module.scss","components/Game/ContentBox/Graphs/GraphsHeader/GraphsHeader.module.scss","components/UI/sortField/SortField.module.scss","components/UI/dropdown/FilterField/FilterField.module.scss","components/Game/PlaysSpeed/Legend/Legend.module.scss","components/Game/ContentBox/Graphs/PitchersReleaseSpeeds/Legend/Legend.module.scss","components/NavBar/NavBar.module.scss","components/Game/HeaderScoresList/HeaderScoresList.module.scss","components/UI/buttons/Arrow/Arrow.module.scss","components/UI/dividers/VerticalScrollDivider/VerticalScrollDivider.module.scss","components/Game/Filters/Filters.module.scss","components/Game/ContentCardComplexHeader/ContentCardComplexHeader.module.scss","components/TeamGames/HeaderSelections/HeaderSelections.module.scss","components/Game/HeaderTabs/HeaderTabs.module.scss","components/Game/ContentPitcher/ContentPitcher.module.scss","components/Game/ContentBoxFooter/ContentBoxFooter.module.scss","components/Game/ModalCameraSelector/ModalCameraSelector.module.scss","components/Game/ContentControls/ContentControls.module.scss","components/UI/buttons/PlayOnline/PlayOnline.module.scss","components/Game/PlaysFooter/PlaysFooter.module.scss","components/UI/loaders/ProgressBar/ProgressBar.module.scss","components/Game/ContentBox/Graphs/GraphsBlock.module.scss","components/Stats/ContentPlayerTable/ContentPlayerFilterField.module.scss","components/ThreePage/Content/Content.module.scss","components/Game/HeaderInfo/HeaderInfo.module.scss","components/UI/buttons/CrossClose/CrossClose.module.scss","components/UI/togglers/SimpleToggler/SimpleToggler.module.scss","components/UI/buttons/FirstLastMoment/FirstLastMoment.module.scss","components/UI/buttons/Cross/Cross.module.scss","components/Game/ContentCardTitle/ContentCardTitle.module.scss","components/Game/ContentCardSigns/ContentCardSigns.module.scss","components/UI/icons/BallsStrikes/BallsStrikes.module.scss","components/UI/icons/Outs/Outs.module.scss","components/UI/dividers/SwitchArrow/SwitchArrow.module.scss","components/Game/ContentFooter/ContentFooter.module.scss","components/UI/buttons/UpDownArrow/UpDownArrow.module.scss","components/UI/icons/SortArrows/SortArrows.module.scss","components/Game/ContentBox/Graphs/ThreeGraphsRow/ThreeGraphsRow.module.scss","components/Game/ContentBox/ContentBoxTable.module.scss","components/UI/loaders/ErrorLoader/ErrorLoader.module.scss","components/NoDataMessage/NoDataMessage.module.scss","components/Games/Content/Content.module.scss","components/Games/Header/Header.module.scss","components/HeaderWrapper/HeaderWrapper.module.scss","components/TeamGames/Header/Header.module.scss","components/UI/loaders/RoundLoader/RoundLoader.module.scss","components/TeamGames/Content/Content.module.scss","components/Stats/Header/Header.module.scss","components/Stats/Content/Content.module.scss","components/UI/ActiveBodyCell/ActiveBodyCell.module.scss","components/PlayerStats/Header/Header.module.scss","components/PlayerStats/PitcherContentGraphs/PitcherContentGraphs.module.scss","context/PlayerStatsAnimationContext/PlayerStatsAnimationContext.module.scss","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesSpeedField/PitchesSpeedField.module.scss","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/HitsAnglesGraphs/HitsAnglesGraphs.module.scss","components/PlayerStats/BatterContentGraphs/BatterContentGraphs.module.scss","components/PlayerStats/BatterContentGraphs/FilteredGraphs/HitsAnglesGraphs/HitsAnglesGraphs.module.scss","components/NavBar/NavBar.js","utils/index.js","components/Game/HeaderTabs/HeaderTabsButton.js","components/Game/HeaderTabs/HeaderTabs.js","redux/gameReducer.js","components/Game/HeaderScoresList/HeaderScoresListItem.js","components/Game/HeaderScoresList/HeaderScoresList.js","hooks/useSummaryRHE.js","components/Game/HeaderInfo/HeaderInfo.js","components/Game/HeaderTeams/HeaderTeams.js","components/UI/buttons/Arrow/Arrow.js","components/UI/dividers/VerticalScrollDivider/VerticalScrollDivider.js","hooks/useScrollHorizontally.js","hooks/useFullDate.js","components/Game/HeaderLogo/HeaderLogo.js","components/UI/icons/ArrowDown.js","hooks/useComponentVisible.js","components/UI/buttons/CrossClose/CrossClose.js","components/UI/dropdown/GamesDropdown/Dropdown.js","hooks/useGameFocus.js","components/UI/icons/ReplaceEvent.js","hooks/usePitchTypes.js","components/Game/PlaysEvents/PlaysEventsItem.js","components/Game/PlaysEvents/PlaysEventsList.js","components/Game/ContentPitcher/ContentPitcher.js","components/Game/PlaysEvents/PlaysEvents.js","components/Game/Header/MobileHeaderEvents.js","components/Game/Content/MobilePitcherFilters.js","hooks/useFilterSituations.js","components/Game/Header/MobileFilters.js","components/Game/PlayerFilterField/PlayerFilterField.js","icons/options_button_icon.svg","components/UI/togglers/SimpleToggler/SimpleToggler.js","redux/sharedReducer.js","components/Game/Header/MobileOptionsBar/OptionsDropdown/ComponentsTogglers.js","components/UI/buttons/FirstLastMoment/FirstLastMoment.js","components/UI/buttons/ForwardRepeat/ForwardRepeat.js","components/Game/Header/MobileOptionsBar/OptionsDropdown/PlayModesTogglers.js","components/Game/Header/MobileOptionsBar/OptionsDropdown/SpeedSelectors.js","components/Game/Header/MobileOptionsBar/OptionsDropdown/OptionsDropdown.js","components/Game/Header/MobileOptionsBar/ScoreInfo.js","components/Game/ContentBoxFooter/ContentBoxFooterRow.js","components/Game/ContentBoxFooter/ContentBoxFooterColumn.js","components/Game/ContentBoxFooter/ContentBoxFooter.js","components/Game/Header/MobileOptionsBar/InfoDropdown/InfoPanel.js","components/Game/Header/MobileOptionsBar/InfoDropdown/InfoDropdown.js","components/Game/Header/MobileOptionsBar/MobileOptionsBar.js","components/Game/Header/MobileBoxModes.js","components/Game/Header/Header.js","components/Game/FiltersSituationsList/FiltersSituationsListItem.js","components/Game/FiltersSituationsList/FiltersSituationsList.js","icons/gear_icon.png","components/Game/ModalCameraSelector/CameraListItem.js","components/Game/ModalCameraSelector/CameraList.js","components/UI/buttons/Cross/Cross.js","components/Game/ModalCameraSelector/ModalCameraSelector.js","images/modal_cross.png","components/Game/FiltersViewModes/FiltersViewModes.js","hooks/useFiltersScrollingArrows.js","components/Game/Filters/Filters.js","images/portrait.png","components/Game/ContentCardPortrait/ContentCardPortrait.js","components/Game/ContentCardTitle/ContentCardTitle.js","components/UI/icons/Ellipse.js","components/UI/icons/BallsStrikes/BallsStrikes.js","components/UI/icons/Rectangle.js","components/UI/icons/Bases/Bases.js","components/UI/icons/Outs/Outs.js","components/Game/ContentCardSigns/ContentCardSigns.js","components/Game/ContentCardSimple/ContentCardSimple.js","components/Game/ContentCardComplexFooter/ContentCardComplexFooter.js","icons/switch_arrow.svg","components/UI/dividers/SwitchArrow/SwitchArrow.js","components/Game/ContentCardReplacement/ContentCardReplacementItem/ItemRowSideText.js","components/Game/ContentCardReplacement/ContentCardReplacementItem/ItemRow.js","components/Game/ContentCardReplacement/ContentCardReplacementItem/ItemTextBlockBody.js","components/Game/ContentCardReplacement/ContentCardReplacementItem/ItemTextBlockHeader.js","components/Game/ContentCardReplacement/ContentCardReplacementItem/ItemTextBlock.js","components/Game/ContentCardReplacement/ContentCardReplacementItem/ItemRightPortrait.js","components/Game/ContentCardReplacement/ContentCardReplacementItem/ContentCardReplacementItem.js","components/Game/ContentCardReplacement/ContentCardReplacement.js","components/UI/icons/Rects/RectText.js","components/UI/icons/Rects/RectScore.js","components/Game/ContentCardComplexBody/BodyTop.js","components/Game/ContentCardComplexBody/ContentCardComplexBody.js","components/Game/ContentCardComplexHeader/HeaderTop.js","components/Game/ContentCardComplexHeader/HeaderBottom.js","components/Game/ContentCardComplexHeader/ContentCardComplexHeader.js","components/Game/ContentCardComplex/ContentCardComplex.js","components/Game/ContentSituationsListItem/ContentSituationsListItem.js","hooks/useArrowNavigate.js","components/UI/buttons/PlayOnline/PlayOnline.js","components/Game/ContentControls/ContentControls.js","components/Game/PlaysFooter/PlaysFooter.js","components/Game/ContentSituationsList/MobileLandscapeTabs.js","components/Game/ContentSituationsList/ContentSituationsList.js","components/Game/ContentFooter/ContentFooter.js","components/Game/Video/NoVideoScreen.js","components/UI/icons/VideoControlsBtns/FullscreenBtn/FullscreenBtn.js","components/UI/icons/VideoControlsBtns/PlayBtn/PlayBtn.js","components/UI/icons/VideoControlsBtns/PauseBtn/PauseBtn.js","components/Game/VideoControls/VideoControls.js","components/Game/VideoOptions/Effects.js","components/Game/VideoOptions/ModeListItem.js","components/Game/VideoOptions/ModeList.js","components/UI/dropdown/VideoSpeedDropdown/VideoSpeedDropdown.js","components/Game/VideoOptions/SpeedSelector.js","components/Game/VideoOptions/VideoOptions.js","components/Game/Videos/SidePanel/Signs.js","components/Game/Videos/SidePanel/TeamInfo.js","components/Game/Video/SidePanel.js","components/UI/buttons/TimelineEventChanger/TimelineEventChanger.js","components/Game/Timeline/DraggableArea.js","components/Game/Timeline/Timeline.js","components/Game/Videos/BottomPanel/CurrentCard.js","components/Game/Video/BottomPanel.js","components/Game/Video/Video.js","components/Game/VideoList/VideoList.js","components/Game/Videos/SidePanel/SidePanel.js","components/Game/Videos/BottomPanel/BottomPanel.js","components/Game/Videos/Videos.js","images/field_right.jpg","images/field_icon.png","components/Game/PlaysHitting/HittingField/CameraView.js","hooks/useSetMomentById.js","components/Game/PlaysHitting/HittingField/Tooltip.js","components/Game/PlaysHitting/HittingField/HittingField.js","images/video_camera_icon.png","components/Game/PlaysHitting/HittingGraph.js","components/Game/PlaysHitting/HittingStats.js","components/Game/PlaysHitting/HittingVideos/HittingVideo.js","components/Game/PlaysHitting/HittingVideos/HittingVideos.js","components/Game/PlaysHitting/HittingVideos/BroadcastHittingVideos.js","components/Game/PlaysHitting/PlaysHitting.js","components/Game/PlaysField/PlaysFieldBall.js","components/Game/PlaysField/PlaysFieldBalls.js","components/Game/PlaysField/PlaysField.js","images/grid.png","components/Game/PlaysSpin/Chart/Lines.js","components/Game/PlaysSpin/Chart/LinesText.js","components/Game/PlaysSpin/Chart/Dots.js","components/Game/PlaysSpin/Chart/CurrentDotLines.js","components/Game/PlaysSpin/Chart/CurrentDot.js","components/Game/PlaysSpin/PlaysSpinChart.js","components/Game/PlaysSpin/PlaysSpin.js","components/UI/icons/ListDot/ListDot.js","components/Game/PlaysSpeed/Legend/LegendItem.js","components/Game/PlaysSpeed/Legend/Legend.js","components/Game/PlaysSpeed/Chart/Dots.js","components/Game/PlaysSpeed/Chart/CurrentDot.js","components/Game/PlaysSpeed/Chart/Lines.js","components/Game/PlaysSpeed/PlaysSpeedChart.js","components/Game/PlaysSpeed/PlaysSpeed.js","components/Game/PlaysPitch/PitchValues/PitchValues.js","components/Game/PlaysPitch/PitchVideo/PitchVideo.js","components/Game/PlaysPitch/PitchVideo/PitchVideos.js","components/Game/PlaysPitch/PitchVideo/BroadcastPitchVideos.js","components/Game/PlaysPitch/PlaysPitch.js","images/blue_ball_curve.jpg","components/Game/PlaysRunning/PlaysRunningField.js","components/Game/PlaysRunning/PlaysRunningInfoItem.js","components/Game/PlaysRunning/PlaysRunningInfoList.js","components/Game/PlaysRunning/PlaysRunningInfo.js","components/Game/PlaysRunning/PlaysRunning.js","components/Game/PlaysContent/PlaysContent.js","components/Game/Plays/Plays.js","components/Game/ContentGraphics/LandscapeScores.js","components/Game/ContentGraphics/ContentGraphics.js","components/UI/loaders/ProgressBar/ProgressBar.js","components/UI/loaders/Loader/Loader.js","axios-instance/index.js","components/Game/ContentBox/MobileBox/MobileBoxTableHeader.js","components/Game/ContentBox/MobileBox/MobileBoxTable.js","components/Game/ContentBox/Graphs/GraphsBlock.js","context/ThreeTextCtx.js","components/Game/ContentBox/Graphs/PitchesTrajectories/Curves/Curve.js","components/Game/ContentBox/Graphs/PitchesTrajectories/Curves/Curves.js","components/Game/ContentBox/Graphs/PitchesTrajectories/Tooltip.js","components/Game/ContentBox/Graphs/PitchesTrajectories/PitchesTrajectories.js","components/UI/togglers/OptionsToggler/OptionsToggler.js","components/UI/checkboxes/TimeDynamicCheckbox/TimeDynamicCheckbox.js","components/UI/buttons/UpDownArrow/UpDownArrow.js","components/Game/ContentBox/Graphs/GraphsHeader/GraphsHeader.js","components/UI/icons/SortArrows/SortArrows.js","components/Game/ContentBox/Graphs/BattersTable/BattersTable.js","components/Game/ContentBox/Graphs/PitchersReleaseSpeeds/HorizontalRows.js","components/Game/ContentBox/Graphs/PitchersReleaseSpeeds/LeftValues.js","components/Game/ContentBox/Graphs/PitchersReleaseSpeeds/VerticalPitcherRowsAndTitles.js","components/Game/ContentBox/Graphs/PitchersReleaseSpeeds/Dots.js","components/Game/ContentBox/Graphs/PitchersReleaseSpeeds/Legend/LegendItem.js","components/Game/ContentBox/Graphs/PitchersReleaseSpeeds/Legend/Legend.js","hooks/useScrollingArrows.js","components/PlayerStats/MobileScrollingWrapper/MobileScrollingWrapper.js","components/Game/ContentBox/Graphs/PitchersReleaseSpeeds/PitchersReleaseSpeeds.js","components/Game/ContentBox/Graphs/PitchesSpeedField/FrequencySpeedGraph/FrequencySpeedGraph.js","components/Game/ContentBox/Graphs/PitchesSpeedField/FieldGraph/Tooltip.js","components/Game/ContentBox/Graphs/PitchesSpeedField/FieldGraph/FieldGraph.js","components/Game/ContentBox/Graphs/PitchesSpeedField/PitchesSpeedField.js","components/Game/ContentBox/Graphs/TwinPitchesGraph/Tooltip.js","components/Game/ContentBox/Graphs/TwinPitchesGraph/TwinPitchesGraph.js","components/Game/ContentBox/Graphs/ThreeGraphsRow/ThreeGraphsRow.js","components/Game/ContentBox/Graphs/PitchersGraphRows.js","components/Game/ContentBox/Graphs/Graphs.js","components/Game/ContentBox/MobileBox/ContentMobileBox.js","components/Game/ContentBox/ContentBoxTableBodyCell.js","components/Game/ContentBox/ContentBoxTableBodyRow.js","components/Game/ContentBox/ContentBoxTableBody.js","components/Game/ContentBox/ContentBoxTableFooterCell.js","components/Game/ContentBox/ContentBoxTableFooter.js","components/Game/ContentBox/ContentBoxTableHeaderCell.js","components/Game/ContentBox/ContentBoxTableHeader.js","components/Game/ContentBox/ContentBoxTable.js","components/Game/ContentBox/ContentBoxButton.js","components/Game/ContentBox/ContentBoxButtons.js","components/Game/ContentBox/ContentBoxTables.js","components/Game/ContentBox/ContentBoxDesktop.js","components/Game/ContentBox/ContentBox.js","components/Game/Content/Content.js","components/UI/loaders/ErrorLoader/ErrorLoader.js","hooks/useGameFetch.js","pages/Game.js","components/Games/ContentSideTables/PctTable/Header.js","components/Games/ContentSideTables/PctTable/TableBody.js","components/Games/ContentSideTables/PctTable/TableHeader.js","components/Games/ContentSideTables/PctTable/Table.js","components/Games/ContentSideTables/PctTable/PctTable.js","redux/gamesReducer.js","components/Games/ContentSideTables/SwitchTable/Header.js","components/Games/ContentSideTables/SwitchTable/TableHeader.js","components/Games/ContentSideTables/SwitchTable/TableBodyRow.js","components/Games/ContentSideTables/SwitchTable/TableBody.js","components/Games/ContentSideTables/SwitchTable/Table.js","components/Games/ContentSideTables/SwitchTable/SwitchTable.js","components/Games/ContentSideTables/ContentSideTables.js","components/NoDataMessage/NoDataMessage.js","components/Games/ContentGridCalendar/ContentGridCalendar.js","images/calendar.png","components/Games/ContentCalendar/ContentCalendarListItem.js","components/Games/ContentCalendar/ContentCalendarList.js","components/Games/ContentCalendar/ContentCalendar.js","components/Games/ContentTable/ContentCalendars.js","components/Games/ContentTable/ContentTeam.js","images/league_image.png","components/Games/ContentTable/ContentTableModeLinks.js","components/Games/ContentTable/ContentTableHeader.js","components/Games/ContentTable/ContentTableListItem.js","components/Games/ContentTable/ContentTableList.js","components/Games/ContentTable/ContentTableSubHeader.js","components/Games/ContentTable/ContentTable.js","components/Games/Content/Content.js","components/HeaderWrapper/HeaderWrapper.js","context/index.js","components/Games/HeaderSelections/HeaderSelections.js","components/Games/HeaderLeagues/HeaderLeaguesListItem.js","components/Games/HeaderLeagues/HeaderLeaguesList.js","components/Games/HeaderLeagues/HeaderLeagues.js","components/Games/Header/Header.js","pages/Games.js","components/TeamGames/HeaderSelections/HeaderSelectionsTeamName.js","redux/teamGamesReducer.js","components/TeamGames/ContentMobileHeader/ContentHeaderModeLink.js","components/TeamGames/ContentMobileHeader/ContentHeaderModeLinks.js","components/TeamGames/HeaderSelections/HeaderSelectionsLinks.js","components/UI/loaders/RoundLoader/RoundLoader.js","components/TeamGames/HeaderSelections/HeaderSelectionsTeamInfo.js","images/team_logo.png","components/TeamGames/HeaderSelections/HeaderSelectionsYears.js","components/TeamGames/HeaderSelections/HeaderSelections.js","components/TeamGames/HeaderLeagues/HeaderLeaguesListItem.js","components/TeamGames/HeaderLeagues/HeaderLeaguesList.js","components/TeamGames/HeaderLeagues/HeaderLeagues.js","components/TeamGames/Header/Header.js","components/TeamGames/ContentPlayersTable/ContentPlayersTableHeader.js","components/TeamGames/ContentPlayersTable/ContentPlayersTableRow/RowPlayerHands.js","redux/playerStatsReducer.js","components/TeamGames/ContentPlayersTable/ContentPlayersTableRow/RowPlayerName.js","components/TeamGames/ContentPlayersTable/ContentPlayersTableRow/ContentPlayersTableRow.js","components/TeamGames/ContentPlayersTable/ContentPlayersTableBody.js","components/TeamGames/ContentPlayersTable/ContentPlayersTable.js","components/TeamGames/ContentGamesTable/ContentGamesTableHeader.js","components/TeamGames/ContentGamesTable/ContentGamesTableRow/RowDate.js","components/TeamGames/ContentGamesTable/ContentGamesTableRow/RowInningsInfo.js","components/TeamGames/ContentGamesTable/ContentGamesTableRow/RowLink.js","components/TeamGames/ContentGamesTable/ContentGamesTableRow/RowLinks.js","components/TeamGames/ContentGamesTable/ContentGamesTableRow/RowScores.js","components/TeamGames/ContentGamesTable/ContentGamesTableRow/RowTeamName.js","components/TeamGames/ContentGamesTable/ContentGamesTableRow/ContentGamesTableRow.js","components/TeamGames/ContentGamesTable/ContentGamesTableBody.js","components/TeamGames/ContentGamesTable/ContentGamesTable.js","components/TeamGames/ContentMobileHeader/ContentMobileHeaderStatsLink.js","components/TeamGames/ContentMobileHeader/ContentMobileHeader.js","components/TeamGames/Content/Content.js","pages/TeamGames.js","redux/statsReducer.js","components/Stats/ContentPlayerTable/ContentPlayerFilterField.js","components/Stats/HeaderSelections/HeaderSelections.js","components/Stats/HeaderLeagues/HeaderLeaguesListItem.js","context/StatsLoadingContext.js","components/Stats/HeaderLeagues/HeaderLeaguesList.js","components/Stats/HeaderLeagues/HeaderLeagues.js","components/Stats/Header/Header.js","icons/checkmark_blank.svg","icons/checkmark_filled.svg","components/UI/checkboxes/CheckMark/Checkmark.js","components/UI/dropdown/CustomLeaguesDropdown/Dropdown.js","components/Stats/ContentTeamTable/ContentTeamTable.js","components/Stats/ContentPlayerTable/MobileTable/MobileTable.js","components/Stats/ContentPlayerTable/ContentPlayerTable.js","components/UI/sortField/SortField.js","components/UI/ActiveBodyCell/ActiveBodyCell.js","components/Stats/Content/Content.js","pages/Stats.js","components/PlayerStats/HeaderSelections/HeaderSelections.js","components/PlayerStats/HeaderLeagues/HeaderLeaguesListItem.js","components/PlayerStats/HeaderLeagues/HeaderLeaguesList.js","components/PlayerStats/HeaderLeagues/HeaderLeagues.js","components/PlayerStats/Header/Header.js","components/PlayerStats/Content/ContentMobilePlayerInfo.js","context/PlayerStatsAnimationContext/PlayerStatsAnimationContext.js","components/PlayerStats/PitcherContentGraphs/Banner/Groups/TotalInfo.js","components/PlayerStats/PitcherContentGraphs/Banner/Groups/CommonGroup.js","components/PlayerStats/PitcherContentGraphs/Banner/Groups/CountsDistribution.js","components/PlayerStats/PitcherContentGraphs/Banner/BannerColumns.js","components/PlayerStats/PitcherContentGraphs/Banner/Banner.js","components/UI/dropdown/FilterField/FilterField.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/GraphsBlock.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesSpeedField/FrequencySpeedGraph/FrequencySpeedGraph.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesSpeedField/FieldGraph/Tooltip.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesSpeedField/FieldGraph/FieldGraph.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesSpeedField/PitchesSpeedField.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/GraphsHeader/GraphsHeader.js","hooks/useFilterGraphsData.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/GraphsTimeDynamicBlock.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesTrajectories/Curves/Curve.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesTrajectories/Curves/Curves.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesTrajectories/Tooltip.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/PitchesTrajectories/PitchesTrajectories.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/HitsAnglesGraphs/BgLayout.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/HitsAnglesGraphs/Footer.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/HitsAnglesGraphs/HitsAnglesGraph.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/HitsAnglesGraphs/HitsAnglesGraphs.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/TwinPitchesGraph/Tooltip.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/TwinPitchesGraph/SubTitle.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/TwinPitchesGraph/TwinPitchesGraph.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/TwinPitchesGraph/TwinPitchesGraphs.js","components/PlayerStats/ArsenalGraph/BottomMarks.js","components/PlayerStats/ArsenalGraph/HorizontalLinesAndNumbers.js","components/PlayerStats/ArsenalGraph/ArsenalGraph.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/ArsenalGraphs.js","components/PlayerStats/PitcherContentGraphs/FilteredGraphs/FilteredGraphs.js","components/PlayerStats/PitcherContentGraphs/PitcherContentGraphs.js","components/PlayerStats/ContentBattingTable/ContentBattingTableHeader.js","components/PlayerStats/ContentBattingTable/ContentBattingTableBody.js","components/PlayerStats/ContentBattingTable/ContentBattingTable.js","components/PlayerStats/ContentPitchingTable/ContentPitchingTableBody.js","components/PlayerStats/ContentPitchingTable/ContentPitchingTableHeader.js","components/PlayerStats/ContentPitchingTable/ContentPitchingTable.js","components/PlayerStats/ContentMobileTable/ContentMobileTableHeader.js","components/PlayerStats/ContentMobileTable/ContentMobileTableBody.js","components/PlayerStats/ContentMobileTable/ContentMobileTable.js","components/PlayerStats/ContentTables/ContentTables.js","components/PlayerStats/BatterContentGraphs/Banner/Groups/TotalInfo.js","components/PlayerStats/BatterContentGraphs/Banner/Groups/CommonGroup.js","components/PlayerStats/BatterContentGraphs/Banner/Groups/CountsDistribution.js","components/PlayerStats/BatterContentGraphs/Banner/BannerColumns.js","components/PlayerStats/BatterContentGraphs/Banner/Banner.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/GraphsBlock.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/GraphsHeader/GraphsHeader.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/PitchesTrajectories/Curves/Curve.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/PitchesTrajectories/Curves/Curves.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/PitchesTrajectories/Tooltip.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/PitchesTrajectories/PitchesTrajectories.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/HitsAnglesGraphs/BgLayout.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/HitsAnglesGraphs/Footer.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/HitsAnglesGraphs/HitsAnglesGraph.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/HitsAnglesGraphs/HitsAnglesGraphs.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/FacedGraph/BottomValues.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/FacedGraph/Footer.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/FacedGraph/Graph.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/FacedGraph/LeftValues.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/FacedGraph/StaticLayout.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/FacedGraph/MobileFooter.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/FacedGraph/FacedGraph.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/GraphsTimeDynamicBlock.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/TwinPitchesGraph/Tooltip.js","hooks/useIntersection.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/TwinPitchesGraph/GraphTitle.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/TwinPitchesGraph/TwinPitchesGraph.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/TwinPitchesGraph/TwinPitchesGraphs.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/ArsenalGraphs.js","components/PlayerStats/BatterContentGraphs/FilteredGraphs/FilteredGraphs.js","components/PlayerStats/BatterContentGraphs/BatterContentGraphs.js","components/PlayerStats/Content/Content.js","hooks/useFetch.js","pages/PlayerStats.js","redux/threeReducer.js","images/sun_texture.jpg","images/mercury_texture.jpg","images/venus_texture.jpg","images/earth_texture.jpg","images/mars_texture.jpg","images/jupiter_texture.jpg","images/saturn_texture.jpg","images/uranus_texture.jpg","components/ThreePage/Content/CanvasComp.js","components/ThreePage/Content/Content.js","pages/ThreePage.js","App.js","redux/rootReducer.js","redux/index.js","index.js"],"names":["module","exports","ROUTES","game","games","stats","NavBar","location","useLocation","isLandscapeVideos","useSelector","s","currentTab","pathname","includes","getClass","name","cl","active","wrapperClasses","classNames","navbar","landscapeDisplayNone","className","to","getSearchParam","param","URL","window","searchParams","get","setSearchParam","value","url","set","forEach","curParam","history","replaceState","getBeforeAfterFlags","cards","innings","result","before","i","length","inning","inning_number","side","top_runs","bot_runs","top_hits","bot_hits","top_err","bot_err","top_lob","bot_lob","after","runs","hits","err","lob","getShortName","slice","getFixedNumber","num","digits","zeroString","toFixed","replace","capitalizeFirstLetter","str","charAt","toUpperCase","openFullscreen","element","webkitRequestFullscreen","msRequestFullscreen","closeFullscreen","document","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","exitFullscreen","getFieldColor","dot","H","B1","B2","B3","getRndValue","min","max","Math","floor","random","getPitchColorByName","Undefined","Fastball","Curveball","Slider","Changeup","Subslider","Subfastball","getPitchСlassColorByName","Breaking","Offspeed","getPitchСlassPrimaryColorByName","MONTHS","getYears","YEARS","year","Date","getFullYear","push","reverse","HSVtoRGB","h","v","r","g","b","f","p","q","t","arguments","round","propsAreEqual","prevProps","nextProps","JSON","stringify","HeaderTabsButton","item","handleClick","itemName","onClick","HeaderTabs","isVideo","state","tabsArr","headerTabs","map","defaultState","preview","inningNumber","situations","situationFilter","currentCard","currentMoment","playersInfo","imagesData","filteredCards","playbackMode","viewMode","currentGameId","activeCardList","boxData","boxActiveButton","boxMode","isBroadcast","maxVideoMomentBroadcast","pitchState","hitState","runState","errorMsg","playerCardFilter","playerCardFilterBy","playerCardFilterFocused","videoPlaybackRate","videoState","preferredVideoState","isFilteredPlayer","isCameraSelector","moments","isFullscreen","videoCurrentTime","videoLengthMode","timelineSliderCoords","x1","x2","seekValue","isLastMomentMode","isRedLineDragging","timelineWidth","fullTimelineWidth","focus","isVideoEffects","listScrollTop","SET_FULL_DATA","SET_INNING_NUMBER","SET_SITUATIONS","SET_SITUATION_FILTER","SET_CURRENT_CARD","SET_CURRENT_TAB","SET_CURRENT_MOMENT","SET_PLAYERS_INFO","SET_IMAGES_DATA","SET_FILTERED_CARDS","SET_PLAYBACK_MODE","SET_VIEW_MODE","SET_CURRENT_GAME_ID","SET_ACTIVE_CARD_LIST","SET_BOX_DATA","SET_BOX_ACTIVE_BUTTON","SET_BOX_MODE","SET_IS_VIDEO","SET_IS_BROADCAST","SET_MAX_VIDEO_MOMENT_BROADCAST","SET_PITCH_STATE","SET_HIT_STATE","SET_RUN_STATE","RESET_DATA","SET_ERROR_MSG","SET_PLAYER_CARD_FILTER","TOGGLE_PLAYER_CARD_FILTER_BY","SET_PLAYER_CARD_FILTER_FOCUSED","SET_VIDEO_PLAYBACK_RATE","SET_VIDEO_STATE","SET_PREFERRED_VIDEO_STATE","SET_IS_FILTERED_PLAYER","SET_IS_CAMERA_SELECTOR","SET_MOMENTS","SET_IS_FULLSCREEN","SET_VIDEO_CURRENT_TIME","SET_VIDEO_LENGTH_MODE","SET_TIMELINE_SLIDER_COORDS","SET_SEEK_VALUE","SET_IS_LAST_MOMENT_MODE","SET_IS_RED_LINE_DRAGGING","SET_TIMELINE_WIDTH","SET_FULL_TIMELINE_WIDTH","SET_FOCUS","SET_IS_VIDEO_EFFECTS","SET_LIST_SCROLL_TOP","setFullData","payload","type","setInningNumber","setSituationFilter","setCurrentCard","setCurrentTab","setCurrentMoment","setPlayersInfo","setFilteredCards","setPlaybackMode","setViewMode","setCurrentGameId","setActiveCardList","setBoxActiveButton","setIsVideo","setIsBroadcast","setMaxVideoMomentBroadcast","setPitchState","setHitState","setRunState","setErrorMsg","setPlayerCardFilterFocused","setVideoPlaybackRate","setVideoState","setPreferredVideoState","setIsFilteredPlayer","setMoments","setVideoCurrentTime","setVideoLengthMode","setTimelineSliderCoords","setSeekValue","setIsLastMomentMode","setListScrollTop","HeaderScoresListItem","maxInnings","outerClasses","number","innerClasses","hidden","undefined","topScore","botScore","HeaderScoresList","forwardRef","ref","dispatch","useDispatch","newInnings","newCurrentCard","find","card","manualClick","renderedInnings","listClasses","scoresTable","inActiveList","useSummaryRHE","useMemo","reduce","sum","Object","keys","field","HeaderInfo","summaryRHE","info","HeaderTeams","names","guestsClasses","guests","ownersClasses","owners","handleTeamClick","teamNames","Arrow","direction","fillColor","addedClass","props","arrowBtn","arrowImg","width","height","viewBox","fill","xmlns","d","VerticalScrollDivider","classes","divider","left","right","join","useScrollHorizontally","scrollRef","useRef","useState","isLeftScroll","setIsLeftScroll","isRightScroll","setIsRightScroll","scrollHorizontally","e","event","delta","wheelDelta","detail","current","scrollLeft","clientWidth","scrollWidth","preventDefault","scrollFixation","addEventListener","attachEvent","removeEventListener","detachEvent","useFullDate","gameDate","date","month","getMonth","day","getDate","HeaderLogo","isLoaded","setLoaded","imgStyles","display","pHolderStyles","imgLogoUrl","logo","imgSrc","textClass","leftLogoText","rightLogoText","imgClass","leftLogo","rightLogo","teamName","src","alt","style","onLoad","ArrowDown","useComponentVisible","initialIsVisible","callback","isComponentVisible","setIsComponentVisible","handleClickOutside","contains","target","prev","useEffect","CrossClose","handleCrossClick","btn","y1","y2","stroke","strokeWidth","SearchField","setValue","searchField","placeholder","onChange","Dropdown","title","options","currentOption","wrapperStyles","listWrapperClass","listStyles","itemStyles","itemTextStyles","titleStyles","listWrapperStyles","shortNames","disabled","searchFieldValue","setSearchFieldValue","menuRef","isOpen","setIsOpen","handleOptionClick","option","titleClasses","filteredOptions","filterArr","split","filter","word","optionWord","toLowerCase","getFilteredOptions","dropdownWrapper","position","top","listWrapper","list","searchFieldWrapper","desktopDNone","padding","backgroundColor","useGameFocus","ReplaceEvent","usePitchTypes","isFull","pitchTypes","pitch_types","textIndex","PlaysEventsItem","moment","icons","inner","metering","table","isActive","id","refValue","playClasses","circ_text_play","circ_color_play","obr","playDataBefore","circ_text_pitch","batter_moment","topEventText","pitch","start_speed","ballsEnding","balls","strikesEnding","strikes","pitchTypeName","pitch_type","circ_color_pitch","text","onlyDesktop","PlaysEventsList","setClasses","animationClass","setAnimationClass","eventsChildRef","animationRef","isVideosList","setTimeout","parentNode","scrollTop","offsetTop","clientHeight","noVideo","scrollHeight","listBottomShadow","beforeBlue","shadowsArr","boxShadow","blueTopLoad","animation","taller","wider","offsetLeft","handleMomentClick","onScroll","scrollHandle","ContentPitcher","pitcher","ballsCount","balls_count","strikesCount","strikes_count","pitcherName","pitches_name","pitcherId","pitcher_id","isPitcher","playerName","PlaysEvents","eventsClasses","events","pitcherWrapper","MobileHeaderEvents","mobileHeaderEvents","MobilePitcherFilters","eventsWrapperClasses","mobileOnlyPortrait","eventsWrapper","mobilePitcherFilters","SORT_PRIORITY","All","Score","Single","Double","Triple","Strikeout","Stealing","Error","Walk","Balk","Groundout","GDP","Flyout","Pickoff","Sacrifice","Bunt","Replace","Interference","useSortFilteredSituations","newSituations","sortedSituations","filteredSituations","count","priority","newSituation","sit","findIndex","useFilterSituations","sort","a","MobileFilters","cur","mobileFiltersWrapper","maxHeight","marginRight","paddingLeft","PlayerFilterField","filterValue","setFilterValue","filterTimeoutRef","inputClasses","filterPlayerField","noPlayerFiltered","btnText","filterFieldsWrapper","clearTimeout","onFocus","onBlur","SimpleToggler","togglerLabel","newDate","currentLeague","currentYear","currentDate","currentLeaguesScroll","mobileWidth","isMobile","currentGameType","mobileOrientation","isMobileScoreboard","isMobileTimeline","SET_CURRENT_LEAGUE","SET_CURRENT_YEAR","SET_CURRENT_DATE","SET_CURRENT_LEAGUES_SCROLL","SET_MOBILE_WIDTH","SET_IS_MOBILE","SET_CURRENT_GAME_TYPE","SET_MOBILE_ORIENTATION","TOGGLE_IS_MOBILE_SCOREBOARD","TOGGLE_IS_MOBILE_TIMELINE","setCurrentYear","setCurrentDate","setCurrentLeaguesScroll","setCurrentGameType","ComponentsTogglers","shared","scoreboardRowClasses","row","onlyMobilePortrait","effectsRowClasses","onlyMobileLandscape","componentsTogglers","checked","FirstLastMoment","cx","cy","ForwardRepeat","forwardPathClasses","unfilled","filled","repeatPathClasses","fillOpacity","strokeOpacity","PlayModesTogglers","playModesTogglers","buttonWrapper","console","log","newMode","currentTarget","flexDirection","justifyContent","flexGap","SpeedOption","speed","optionsClasses","speedOption","VideoMode","mode","handleModeClick","SpeedSelectors","handleVideoModeClick","handleSpeedOptionClick","speedSelectors","playbackSpeed","speedValues","timeIntervalTogglers","videoMode","OptionsDropdown","panelStyles","mobileLandscapeVisible","optionsDropdown","BtnImg","optionsPanel","landscapeWrapper","effectsToggler","ScoreInfo","shallowEqual","teamSide","getTeamClasses","scoreWrapperClasses","scoreInfo","team","teamScore","score","ContentBoxFooterRow","rowTextArr","footerArr","columnIndex","rowIndex","ContentBoxFooterColumn","rowsArr","_","ContentBoxFooter","footer","columnsCount","ceil","columnsArr","Array","footerContainer","InfoPanel","addListeners","removeListeners","start","currentTime","easeInOutQuad","c","animateScroll","val","leftArrowGroup","visibility","rightArrowGroup","isFooter","scoresWrapperClasses","scoresWrapper","infoPanel","scoresListWrapper","arrowGroup","InfoDropdown","infoDropdown","MobileOptionsBar","portrait","landscape","optionsBarClasses","optionsBar","onlyPortraitMobile","onlyLandscapeMobile","isOptions","isInfo","BOX_MODES","MobileBoxModes","mobileBoxModesWrapper","Header","handleTabClick","tabsCurrentOption","teamTotalScoresWrapperClasses","teamTotalScoresWrapper","mobileDisplayNone","defenceScoreClasses","defenceTeamScore","header","headerContent","geo","leagueName","league_name","game_date","stadium_name","mainModeSelector","textAlign","marginLeft","scores","mobileOnlyFields","geoPitcherWrapper","FiltersSituationsListItem","situation","spanClass","buttonClass","newSituationFilter","FiltersSituationsList","horizontalScrollHandler","situationsList","CameraListItem","camera","activeMode","handleCameraClick","cameraClasses","cams_values","selected","active_cam","MODES_DATA","is_active","CAMERAS","CameraList","modesData","setModesData","activeModeNumber","cameraNumber","activeCam","values","camerasContainer","modesList","modeClasses","oneCamera","fourCameras","index","j","valueClasses","activeCameraBtn","valueIndex","modeIndex","Cross","crossBtn","ModalCameraSelector","activeNumber","handleCloseBtnClick","modalCameraSelectorWrapper","modalCameraSelectorInnerWrapper","stopPropagation","FiltersViewModes","activeNumberRef","getClassName","viewModes","GearIcon","useScrollingArrows","isLeftArrow","setIsLeftArrow","isRightArrow","setIsRightArrow","innerWrapperRef","Filters","tab","renderScrollArrow","flag","filtersContainer","filters","situationsWrapper","ContentCardPortrait","playerId","default","PortraitImg","ContentCardTitle","player","b2","b3","ab","hr","pa","subStr","isSubstr","getStats","who_id","hit_order","who","Ellipse","BallsStrikes","ellipses","Rectangle","x","y","transform","Bases","r1","r2","r3","rectangles","topRectangle","absolute","leftRectangle","rightRectangle","Outs","outs","ContentCardSigns","ContentCardSimple","noCardTitle","noSigns","lastMoment","eventsSummary","description","cardText","rectanglesEllipsesWrapper","classic","portraitTextWrapper","ContentCardComplexFooter","SwitchArrow","arrowWrapper","SwitchArrowIcon","ItemRowSideText","rowNumber","leftSideClasses","leftSide","textBold","left_row2_index","left_row1_index","rightSideClasses","rightSide","right_row1_index","right_row2_index","ItemRow","textRow","ItemTextBlockBody","isSecondRow","rows_numbers","ItemTextBlockHeader","headerClasses","textAlignCenter","ItemTextBlock","isHeader","textBlock","ItemRightPortrait","rightImgClass","old_player","rightImgSrc","ContentCardReplacementItem","leftImgClass","new_player","leftImgSrc","replaceClasses","ContentCardReplacement","headerTitle","RectText","rectText","rect_color","rect_text","RectScore","scoreText","score_gue","score_own","BodyTop","innerRects","useLayoutEffect","innerHTML","isRectScore","topRight","lineHeight","paddingTop","paddingBottom","rects","ContentCardComplexBody","bottomClasses","bottom","body","HeaderTop","HeaderBottom","isRectText","bottomStyles","ContentCardComplexHeader","ContentCardComplex","situationsArr","ENDINGS","ContentSituationsListItem","situationClick","cardIndex","beforeAfterData","itemClasses","listItem","dataBeforeNoVideo","activeRef","dataBefore","isDataAfter","styles","marginTop","marginBottom","dataAfterClasses","dataAfter","dataAfterNoVideo","KEYS","useArrowNavigate","key","newMoments","momentIndex","shiftKey","prevCard","nextCard","toFirstMoment","PlayOnline","playOnlineBtn","ContentControls","noPlayPause","isPlayOnline","controls","PlaysFooter","MobileLandscapeTabs","landscapeOnly","ControlsWrapper","controlsWrapper","ContentSituationsList","handleKeyDown","listRef","scrollTimeoutRef","timeout","isListScroll","scrollHandler","documentElement","innerHeight","wrapper","blueDiv","listNoVideo","mobilePlaysListHeight","mobilePlaysListHeightVideo","ContentFooter","NoVideoScreen","placeItems","background","color","fontWeight","FullscreenBtn","isOff","opacity","PlayBtn","PauseBtn","MobileArrows","curViewModeNumber","onlyMobile","VideoControls","setPlayPause","fullscreenAvailable","isSynchronization","setIsSynchronization","setGameFocus","timeoutRef","previousTimeRef","clickTimerRef","isFullscreenModeAvailable","timeDelta","now","handleFullscreenBtnClick","parentElement","playMode","prefVideoStateValue","handlePlayPauseBtnClick","handlePlayPauseBtnTouch","fullOpacity","leftZero","handleWrapperClick","activeArea","innerWrapper","comp","onTouchStart","getPlayPauseBtn","Effects","effectsWrapper","ModeListItem","currentMode","ModeList","modeList","VideoSpeedDropdown","listening","setListening","evt","listenForOutsideClicks","SpeedSelector","VideoOptions","timeData","time_start_pitch_window","hitting","hit","time_start_hit_window","isFirstBroadcastedVideo","parse","camera_views","cameras","isModeListDisabled","videoOptions","Signs","signs","TeamInfo","teamInfo","scoreTitle","SidePanel","sidePanelFull","TimelineEventChanger","bgColor","path","DraggableArea","handleMouseDown","viewBoxWidth","totalSeconds","SECONDS_SRC","forFullscreen","x1relative","x2relative","leftLineTotalSecs","leftLineMins","leftLineSecs","leftLineTime","rightLineTotalSecs","rightLineMins","rightLineSecs","rightLineTime","redLineTotalSecs","timeStart","redLineMins","rawSecs","redLineSecs","redLineMSecs","String","redLineTime","redLinePercent","redLineRelative","draggableRect","onMouseDown","onDragStart","draggableLine","redLine","siblingLine","whiteLineText","redLineText","verticalLineText","Timeline","sliderCoords","chartWidth","sliderRef","sliderNameRef","mouseDownXCoordRef","mouseDownStateRef","rectRef","mouseClickTimeRef","chartRef","firstLoadRef","videoLengthPrefix","video","timeEnd","time_end_pitch_window","time_end_hit_window","running","videos","handleMouseMove","parent","currentCoordPercents","clientX","getBoundingClientRect","secondsTotal","seekToValue","leftSliderTime","seekToTime","percentRatio","percentsDelta","setSliderCoords","getCoords","changedCoord","setChartWidth","noChange","Y_SHIFT","handleMouseUp","cursor","minutesSide","secondsSide","rightTitle","LINES_NUMBER","LINES_DATA","LINES_TEXT_ABBR","getRelativeX","time","totalSecsToX","bases","play","base","tempLineData","secondaryColor","time_start","time_end","textFrom","run_from","textTo","run_to","handleTimelineEvtChanger","timesArr","sortValue","sortValue2","closestValue","topShift","mobileLandscapeDNone","rightEvtChangesClasses","rightEvtChanger","eventsBtnsWrapper","sideChart","preserveAspectRatio","leftTitle","chart","attributes","xStart","yStart","xEnd","yEnd","pointerEvents","horizontalLineText","href","CurrentCard","changeCardBtnClick","currentCardWrapper","BottomPanel","ballPlayerName","speedValue","bottomPanelFull","players","BatPath","bat","batCoords","data_3d","speeds","curTimeCorr","totalHitTime","sliceCount","full_seconds_to","full_seconds_from","dotRadius","zCorrect","getDistance","coords","prevCoords","sqrt","firstDistance","defaultMinMaxDistance","minMaxDistance","curDistance","opacityCoef","arr","curOpacity","args","toneMapped","transparent","ControlSpheres","CanvasWrapper","aspect","rotation","degToRad","fov","fallback","intensity","Video","videoId","videoNumber","handleOnReady","stateChangeHandler","wrapperRef","timerRef","controlsWrapperRef","currentTimeInterval","clearInterval","videoClasses","videoWrapper","videoOne","videoTwo","videoThree","videoFour","aspectRatio16","fullscreenBtnClasses","btnWrapper","dnone","topLeftBtn","topRightBtn","bottomLeftBtn","bottomRightBtn","lastChild","isBatPath","onReady","onStateChange","data","opts","playerVars","autoplay","modestbranding","disablekb","onMouseMove","toFullScreen","videoControls","VideoList","video1Ref","video2Ref","video3Ref","video4Ref","timeIntervalRef","intervalRef","modeRef","startRef","endRef","nextMomentTimeoutRef","videoHandlingTimeoutRef","playTimeoutRef","alreadySeekingRef","isPrevMomentInterrupted","allTimesIntervalRef","syncTimeoutRef","modeNumber","VIDEO_NUMBERS","videoHandling","isInterruptedMoment","camera_info","broadcast_link_add_moment_from","code","currentState","getPlayerState","setInterval","video1Time","getCurrentTime","video2Time","video3Time","video4Time","delta2","abs","delta3","delta4","deltaArr","deltaCap","deltaCaps","getCamDelta","isBigDelta","some","pauseVideo","seekTo","entries","every","entry","entryState","playVideo","secondsFromRated","isForcePlay","noStartSeeking","toNextMomentOrCard","seekVideos","setPlaybackRate","rateChangeHandler","camDelta1","cameraInfo","cameraViews","getCamLink","broadcast_link_add","MODE_LINKS","videoId1","getYouTubeID","videoId2","videoId3","videoId4","viewModeNumber","nextMoment","nextVideo","secondsToRated","doSeek","seekToCurrentTime","maxVideoMoment","maxMoment","broadcast_seconds_to","sec","timeStartVideo","timeEndVideo","stateValue","Videos","outerWrapperClasses","outerWrapper","mobileLandscapeVideo","videos1","videos4","CameraView","camera2D","isVisible","ipCamLink","ip_cam_link","cameraView","containerClassName","useSetMomentById","tempCard","customMoment","Tooltip","tooltip","Model","lazy","OptionsBar","isAutoRotate","handleAutoRotateClick","handleResetClick","rotateBtnClass","optionsBarWrapper","arrowDown","Curve","coef","setDrawPoints","setMomentById","handlePointerOver","handlePointerOut","pointerOver","setPointerOver","cashedStepTotal","tubeRef","textRef","stepTotalRef","points","coord","newCoord","THREE","curveCoords","CatmullRomCurve3","useFrame","quaternion","copy","geometry","center","setDrawRange","isCurrentTube","distanceText","angle","distance","castShadow","FrontSide","onPointerOver","onPointerOut","CurveAndPoints","memo","drawPoints","data3D","propsComparison","Curves","batterMoments","TouchPoints","HittingField","setAutoRotate","isCameraView","setCameraView","isHovered","hovered","setHovered","camera_2d","controlsRef","TextureLoader","load","FieldBg","pointerTimeout","batterCards","btnIcon","FieldIcon","isBtnIcon","canvas","far","zoom","shadows","shadowMap","orthographic","PI","scale","transparency","OrbitControls","enableZoom","autoRotate","minPolarAngle","maxPolarAngle","minZoom","maxZoom","zoomSpeed","enableDamping","rotateSpeed","reset","cameraSwitchBtn","maxSpeed","maxSpeedValue","angleValue","headerWrapper","Graph","impactTime","curveIndex","setCurveIndex","curveTimeoutRef","svgRef","GRAPH_START_X","GRAPH_WIDTH","minSpeed","maxSpeedRounded","minSpeedRounded","leftTitles","verticalGraphPart","bottomTitles","maxXValue","xCoef","yCoef","impactDotCoords","newXCoord","newYCoord","GRAPH_START_Y","nextXCoord","nextYCoord","curvePath","shift","swingTimeStart","elapsedTime","redLineXCoord","isRedLine","graphWrapper","svgLeft","svgRight","svgWidth","graphFullWidth","graphStartsRel","pathStartsXCoord","pathWidth","clickPathRel","clickTime","sideTitle","textAnchor","verticalPart","impactDot","strokeDasharray","impactDotLine","HittingGraph","max_speed","attack_angle","impact_time","graph","HittingStats","startSpeed","max_height","exitVelocityValue","distanceValue","maxHeightValue","HittingVideo","videoWrapperRef","topLeftVideo","topRightVideo","bottomLeftVideo","bottomRightVideo","batterPosition","batter_position","POS_OPTIONS","firstChild","YTContainer","HittingVideos","prevBatterPositionRef","VIDEO_REFS","getVideoNumByPos","prevVideoStatesRef","fieldVideoTime","delta5","topLeftLink","left_add_link","topRightLink","right_add_link","bottomLeftLink","bat_right_link","bottomRightLink","bat_left_link","NEXT_SECONDS_SRC","timeStartHit","timeEndHit","video1","video2","video3","video4","video5","BroadcastHittingVideos","clPlays","HittingFieldVideos","fieldVideoRef","PlaysHitting","PlaysFieldBall","coordsLength","ballClasses","ball","onTop","ballHalfSize","xShadowHalfSize","ballStyles","shadowStyles","shadow","PlaysFieldBalls","pauseBallsCount","setPauseBallsCount","graphTimeout","pitchTimeStart","timePerBall","isCount","STRIKE_BALL_COLORS","STRIKE","BALL","PlaysField","isStrikeBallValue","strikeBallValue","is_strike","ballsCoords","data_2d","grid","strikeBallWrapper","Lines","startX","startY","LinesText","graphRatio","minMaxValues","maxY","minY","maxX","minX","averageY","averageX","graphTitle","Dots","chartData","visible","spinX","spinY","pitchType","hoveredDot","setHoveredDot","spinValueX","spinValueY","hoveredDotXCoord","hoveredDotYCoord","coordX","offsetX","coordY","offsetY","momentId","dotClass","showingGroup","radius","graphTooltip","CurrentDotLines","currentDot","currentDotRadius","setCurrentDotRadius","isCurrentDot","verticalLineY2Coord","horizontalLineX1Coord","lineClass","CurrentDot","classToggled","setClassToggled","whiteDotClasses","whiteDotClass","dotClasses","PlaysSpinChart","PlaysSpin","setChartData","setCurrentDot","testData","currentDotParams","offset_x","offset_y","is_pick_off","spin","ListDot","LegendItem","legendItem","Legend","legendData","legendWrapper","Dot","handleDotClick","dotsCoords","dotsArr","pair","plainText","minXCoord","maxYCoord","xInterval","minYAxisValue","yValuePerHeight","tempDotTextCoord","curDotTextCoord","curDotText","currentDotWhite","ballType","mphValue","maxYAxisValue","minYCoord","averageValue","yAxisValues","lineBtwAvg","PlaysSpeedChart","chartValuesArr","average","getMaxMinYAxisValue","maxXCoord","newValue","isDots","PlaysSpeed","pitchTypesSet","Set","add","pitchTypesArr","from","subHeader","PitchValues","initSpeed","plateSpeed","end_speed","releaseHeight","release_height","releaseSide","release_side","releaseValue","platePointValue","trueSpinValue","verticalBreakValue","horizontalBreakValue","releaseHeightValue","releaseSideValue","pitchValues","regularValue","spinInfo","breakValue","PitchVideo","bottomVideo","isVideoControls","isInvisWrapper","inset","PitchVideos","isAllReady","isTwoReadyOneBuffer","left_main_link","right_main_link","bottomLink","pitch_link","timeStartPitch","timeEndPitch","BroadcastPitchVideos","PlaysPitch","extend","TextGeometry","Line","runData","xStartPos","yStartPos","lineNumber","curLineNumber","lastCoords","curDataSlice","font","FontLoader","ComfortaaFont","renderedPart","runnerName","isRender","Vector3","size","setCount","setLineNumber","widerField","tempData3D","innerSum","curPair","lastX","lastY","avgX","avgY","curveCount","ToolTip","textCoords","CurvePath","textureRef","CurveTexture","setCurveCount","isRenderPath","PlaysRunningField","setRunningMode","zoomCoef","setZoomCoef","resultCoef","fieldWrapper","BASES_BY_NUMBER","PlaysRunningInfoItem","runFrom","runTo","infoItem","infoTitle","infoValue","PlaysRunningInfoList","PlaysRunningInfo","PlaysRunning","PlaysContent","renderComponent","Plays","defaultPtab","playsClasses","plays","playsNoVideo","videosGrid","leftArrow","rightArrow","LandscapeScores","landscapeScoresWrapper","ContentGraphics","graphicsClasses","graphics","videoTab","scoresClasses","portraitDisplayNone","displayNone","withMobileTimeline","verticalEvents","ProgressBar","progress","Loader","loadedPercents","isPercentsTitle","loader","leaf","translate","borderRadius","axiosInstance","axios","create","baseURL","axiosCancelToken","CancelToken","MobileBoxTableHeader","getTableHeaders","fullHeader","leftHeader","rightHeader","TABLES_INFO","Batting","headers","isWider","isWidest","Running","Pitching","Fielding","Catching","BATTING_TITLES","MobileBoxTable","tableData","isScrollable","setIsScrollable","rowsRef","orderedPlayersStats","headerScroll","rowDelta","players_stats","pitchers","catchers","isPitcherOrCatcher","mobileWrapper","widest","sides","leftRows","is_substituted","playerLinkName","content","tableRow","flex","footerRow","rightRows","tableMode","positions","pitching","Number","ERA","catching","batting","SB_pr","fielding","FLD","getValue","total_stats","GraphsBlock","defaultOption","children","noSelector","setCurrentOption","graphsBlock","ctx","createContext","useThreeTextCtx","useContext","ThreeTextCtx","Provider","hit_info","pitch_info","gameId","game_id","mom_id","colorsMin","distanceRel","meshColor","isNaN","colorsMax","open","hitsData","maxLength","curLength","curCurveCount","PitchesTrajectories","filteredMetrix","metrix","pitches_all","isGraphVisible","setGraphVisibility","graphRef","observer","IntersectionObserver","isIntersecting","root","rootMargin","threshold","observe","disconnect","isCurves","OptionsToggler","optionsArr","vertical","noSort","isDataArray","isArray","existData","sortedData","unshift","optionClasses","lastListItem","TimeDynamicCheckbox","availableOptions","classColor","inActive","whiteColor","UpDownArrow","up","GraphsHeader","subTitle","currentOption2","setCurrentOption2","currentOption3","setCurrentOption3","graphsArrow","optionsTogglerStyles","highTitle","graphsHeader","curOption","SortArrows","strokeLinecap","TableHeader","activeColumn","handleHeaderClick","clName","sortField","isActiveCell","cellClasses","headerCell","dir","TableCell","cell","ending","formattedValue","TableRow","rowCells","handleRowClick","colNumber","BattersTable","setActiveColumn","battersArr","velocity","batter_name","batter_surname","hitNumber","HorizontalRows","PARAMS","ROWS_NUMBER","rowsDelta","GRAPH_HEIGHT","LEFT_PADDING","TOP_PADDING","LeftValues","valueStep","leftValues","rowStep","leftValue","VerticalPitcherRowsAndTitles","linesArr","totalPitchesCount","pitchDeltaWidth","lineData","xCoord","accum","topYCoord","minMaxSpeedDelta","heightPerValue","zeroYCoord","pitcherData","pitches","yCoord","MobileScrollingWrapper","leftArrowClasses","leftArrowBtn","rightArrowClasses","rightArrowBtn","WRAPPER_WIDTH","WRAPPER_HEIGHT","MIN_MAX_VALUES_GAP","PitchersReleaseSpeeds","addedData","pitcher_name","pitcher_surname","pitchesSum","speedsArr","legendPitchTypes","concat","LEFT_VERTICAL_GRID_LINES_NUMBER","RIGHT_VERTICAL_GRID_LINES_NUMBER","VERTICAL_GRID_LINES_TOP","VERTICAL_GRID_LINES_LEFT","VERTICAL_GRID_LINES_HEIGHT","GRAPH_ROWS_HEIGHT","BETWEEN_ROWS_HEIGHT","Rows","maxSpeedLineValue","minSpeedLineValue","relValuesData","totalPitches","measure","thisArr","ZERO_COORDS","Y","leftSideWidth","LEFT_VERTICAL_GRID_LINES_STEP","leftEdgeLine","X","leftValueCoef","rightSideWidth","RIGHT_VERTICAL_GRID_LINES_STEP","rightValueCoef","rightFirstLine","measureFrequency","avgSpeed","skoSpeed","transition","innerValue","innerText","rightTextTitle","FrequencySpeedGraph","pitchName","curSpeed","sumDiffSpeedsAvg","minMaxSpeeds","mphSpeed","bottomLeftNumbers","bottomRightNumbers","bottomNumber","arrData","linesCoords","xCoordRelCoef","zeroXCoord","yZeroBreakCoef","zeroYBreakLine","breakCoords","break","pitchInfo","break_x","break_y","animatedDot","EllipsedDots","avgCoords","avgBreakX","avgBreakY","circleColor","opacityValue","sumDiffBreaks","breakValues","sumDiffBreaksAvg","skoBreaks","rx","ry","Frames","zone","yStrikeDown","y_strike_down","yStrikeUp","x_strike_up","xStrikeLeft","x_strike_left","xStrikeRight","x_strike_right","shadowBorder","shadow_border","yCoordAbsCoef","yCoordRelCoef","dashedFrameX","dashedFrameWidth","dashedFrameY","dashedFrameHeight","frames","VerticalGridLines","graphWidth","graphHeight","columnsNumber","rightBorderValue","centerLineX","xCoordPerLine","bottomTextTitle","colText","colXCoord","isBottomTextTitle","HorizontalGridLines","rowsNumber","topBorderValue","bottomBorderValue","centerLineY","centerLineValue","yCoordPerLine","leftTextTitle","rowText","rowYCoord","isLeftTextTitle","FieldGraph","filteredData","isChecked","setChecked","coordinates","sumX","sumY","sumBreakX","sumBreakY","zone_x","zone_y","minMaxAvgBreak","avgDelta","centerYFieldLine","topFieldLine","bottomYFieldLine","centerFieldValue","bottomYFieldValue","halfGraphWidth","leftBorderValue","svgWrapper","bottomWrapperTitle","leftWrapperTitle","PitchesSpeedField","isType","rectY","rectHeight","rectX","rectWidth","animated","HeatAreas","rowHeight","colWidth","maxValue","col","newPoint","maxRadius","point","firstLayerMaxValue","firstLayerRadius","blur2","secondLayerMaxValue","secondLayerRadius","thirdLayerRadius","title1","selectedPitchType","eventsNone","stdDeviation","LeftChart","mainTitle","TwinPitchesGraph","ThreeGraphsRow","pitchGraphCoords","PitchersGraphRow","PitchersGraphRows","Graphs","graphsData","battersMetrix","batters_metrix","pitchersMetrix","pitchers_metrix","ContentMobileBox","isTable","isGraphs","isStatistics","mobileBox","ContentBoxTableBodyCell","toFixList","tableName","cellStyle","filteredValue","ContentBoxTableBodyRow","ContentBoxTableBody","playersStats","playersArr","ContentBoxTableFooterCell","totalStats","ContentBoxTableFooter","footerStyles","ContentBoxTableHeaderCell","titleText","ContentBoxTableHeader","ContentBoxTable","tableClass","ContentBoxButton","activeButton","handleButtonClick","ContentBoxButtons","buttonsTopPosition","setButtonsTopPosition","buttonsRef","handleWindowResize","buttons","ContentBoxTables","tables","battingTable","footerOffset","pitchingTable","catchingTable","ContentBoxDesktop","box","ContentBox","isLoading","setIsLoading","boxGraphsData","setBoxGraphsData","useParams","cancelTokenRef","fetchBoxData","source","cancelToken","token","response","message","cancel","Content","setCards","situationsChildRef","gameIdRef","scrollToRef","beforeAfterRef","momentsDecompose","member","newCards","newCardsConcat","situationsConcat","tokens","newFilteredCards","getFilteredCards","newCurCard","noMomentChange","newMoment","lastCard","cardId","getWordsEquality","searchText","searchedWordsArr","filterWord","whoWord","tempFilteredCards","contentClasses","contentNoVideo","eventsArea","mobilePitcherFiltersClasses","mobilePitcherFiltersWrapper","zIndex","ErrorLoader","error","useGameFetch","setLoadedPercents","setError","dataRef","concatPlayersInfo","summary","photo","getFullData","firstTime","innerUrl","onDownloadProgress","total","loaded","resp","dataLength","has_measures","newPlayersInfo","isVideoGame","broadcast_link","isBroadcastGame","__CANCEL__","Game","defaultTab","useSearchParams","setCurrentSubTab","resizeHandle","innerWidth","toggleFullscreen","matches","matchMedia","isFilters","tabText","resultTabText","TableBody","leagues","leagueTeams","league","teams","sortedTeams","wins","loses","tableBody","underlineHover","pct","tableHeader","Table","pctTable","PctTable","pctWrapper","summaryYearsData","currentStadium","currentHome","currentGuests","leaguesImages","mobileTableMode","currentSwitchTableMode","currentSwitchDropdownValue","SET_SUMMARY_YEARS_DATA","SET_GAMES_AND_LEAGUES","SET_CURRENT_GAMES_LEAGUE","SET_CURRENT_STADIUM","SET_CURRENT_HOME","SET_CURRENT_GUESTS","ADD_LEAGUE_IMAGE","SET_MOBILE_TABLE_MODE","SET_CURRENT_SWITCH_TABLE_MODE","SET_CURRENT_SWITCH_DROPDOWN_VALUE","RESET_TABLE_FILTERS","setGamesAndLeagues","setCurrentLeague","setMobileTableMode","tableModeValue","drop","mobileTablemodeDropdownClass","DROPDOWN_VALUES","dropdownValue","avr","mobileValueDropdownClass","TableBodyRow","REPLACES","isToFixed","surname","curLeague","sortedPlayers","toSorted","switchTable","SwitchTable","switchWrapper","ContentSideTables","isTables","sideClasses","addHeight","NoDataMessage","noDataFound","ContentGridCalendar","setIsVisible","toggleCalendar","filteredGames","league_id","game_type","owners_name","guests_name","minDetail","locale","showNeighboringMonth","tileClassName","tileDate","setHours","getTimezoneOffset","toJSON","getDay","tileDisabled","DAYS","ContentCalendarListItem","ContentCalendarList","availableDates","dates","currentDateIndex","availableDate","tempDate","toDateString","ContentCalendar","calendarScroll","isScroll","amount","sortedDates","uniqueSortedDates","isDate","minDateDelta","minDate","tempDelta","handleDateClick","availDate","daysDelta","handleArrowClick","targetDate","arrow","calendar","ContentCalendars","setCalendarScroll","calendarsWrapper","Logo","logoUrlPart","imgUrl","ContentTeam","filteredHeadings","teamOptions","teamWrapper","teamSearch","teamFilters","teamSelector","ContentTableModeLinks","tableModes","ContentTableHeader","modeTitle","WEEK_DAYS","ItemLinks","linksClass","handleLinkClick","tabTitle","has_moments","has_videos","ContentTableListItem","scrollItemRef","weekDay","gameStartFullTime","start_time","tableRowClasses","withDate","paddingRightOne","completionClasses","completionSign","completedGame","end_status","scheduledGame","incompletedGame","stadiumName","score_owners","score_guests","links","inn","ContentTableList","rows","ContentTableSubHeader","curLeagueId","stadiumOptions","ContentTable","isGamesEmpty","HeaderWrapper","PlayerYearsContext","GamesLoadingContext","HeaderSelections","firstMountRef","handleTypeClick","yearsArr","selections","years","types","modeLinks","contentTeamWrapper","contentGridCalendarWrapper","HeaderLeaguesListItem","lightGray","HeaderLeaguesList","handleLeagueClick","HeaderLeagues","leaguesRef","leaguesScrollDispatch","scrollLeagues","scrollValue","filteredLeagues","newLeagues","leaguesWrapper","Games","paramsArray","fetchGamesData","curYear","tempLeague","yearData","margin","HeaderSelectionsTeamName","teamClass","teamData","SET_TEAM_DATA","SET_MOBILE_TEAM_GAMES_TABLE_MODE","ContentHeaderModeLink","teamGames","ContentHeaderModeLinks","HeaderSelectionsLinks","wrapperClass","RoundLoader","ldsSpinner","loaderStyles","imgWrapper","imgLoader","teamImg","HeaderSelectionsTeamInfo","linksWrapper","HeaderSelectionsYears","yearsClass","leagueClasses","currentScroll","leaguesArr","ContentPlayersTableHeader","headerStyle","RowPlayerHands","bat_hand","throw_hand","playerStatsData","playerCurrentTeam","tableType","SET_PLAYER_STATS_DATA","SET_PLAYER_CURRENT_TEAM","SET_TABLE_TYPE","SET_PLAYER_SORT_FIELD","setPlayerStatsData","setPlayerCurrentTeam","setTableType","setSortField","RowPlayerName","nameClass","setCurrentTeam","ContentPlayersTableRow","pos","weight","yob","ContentPlayersTableBody","PLAYERS_DATA","roster","curPlayer","sumPlayer","ContentPlayersTable","linkWrapper","ContentGamesTableHeader","RowDate","dateFormat","dateString","RowInningsInfo","lastInn","RowLink","RowLinks","last_inn","has_records","RowScores","homies","visitors","RowTeamName","gameType","ContentGamesTableRow","ContentGamesTableBody","ContentGamesTable","currentYearLeagues","gamesArray","sortedGamesArray","ContentMobileHeaderStatsLink","statsLink","ContentMobileHeader","mobileHeader","isPlayersTable","isGamesTable","TeamGames","isTeamLoading","setIsTeamLoading","cancelTeamTokenRef","statsData","customStatsData","currentCustomLeagues","currentCustomLeaguesForFetch","sortDirection","statsPlayerFilterValue","SET_STATS_DATA","SET_CUSTOM_STATS_DATA","SET_CURRENT_CUSTOM_LEAGUES","SET_CURRENT_CUSTOM_LEAGUES_FOR_FETCH","SET_TABLE_MODE","SET_SORT_FIELD","SET_SORT_DIRECTION","SET_STATS_PLAYER_FILTER_VALUE","setCustomStatsData","setCurrentCustomLeagues","setCurrentCustomLeaguesForFetch","setTableMode","setSortDirection","ContentPlayerFilterField","mobile","playerFilter","tempPlayerFilter","setTempPlayerFilter","filterField","TABLE_MODES","statsType","currentTeam","filteredStatsData","sortedTeamOptions","sortedTeamsArr","gameTypes","mobileListTypesDropdown","filterFieldWrapper","overflowY","fontSize","mobileTableModesDropdown","StatsLoadingProvider","scrollBehavior","Checkmark","CheckmarkFilled","CheckmarkBlank","handleOkBtn","currentOptions","isLeague","prevOption","okBtn","ContentTeamTable","getTableRows","getSortedStatsData","rowsScroll","handleFieldClick","leftHeaderStyles","borderRight","leaguesDropdownOptions","MobileTable","noPlayersFound","contentPlayerFilterFieldWrapper","mobileHeaderTeamDropdown","maxWidth","ContentPlayerTable","fullName","SortField","renamedField","arrowStyles","noAction","isArrows","defaultCursor","arrows","ActiveBodyCell","cellValue","fixed","isCustomLeagues","isRow","activeCell","cancelStatsTokenRef","isStatsLoading","setIsStatsLoading","fetchCustomStats","useCallback","statsByType","playersFielding","teamsFielding","wide2","wide2_5","tall","wide3","valueA","valueB","contentTable","Stats","statsTableMode","fetchStats","customResponse","leaguesByYears","sumByYear","modifiedLeagues","leaguePlayersFielding","leagueTeamsFielding","resultLeague","customData","defaultImgStyles","onError","playerYears","setPlayerYears","calculateTeamsArray","playerStats","teamsArray","getSortedTableOptions","selectedLeague","anotherTableType","anotherTableTypeFilteredLeagues","filteredLeague","playerInfo","teamsSelector","dropWrapper","tempTableType","teamArr","teamsArr","playerSurname","ContentMobilePlayerInfo","mobilePlayerChr","playerChr","usePlayerStatsAnimationCtx","PlayerStatsAnimationProvider","valueCoef","setValueCoef","bannerWrapper","TotalInfoItem","par1","par2","par2Title","getValues","animatedValue","groupItem","rhbLhbGroupItem","valueLeft","animatedValueLeft","valueRight","animatedValueRight","paddingRight","TotalInfo","group","CommonGroupItem","staticTitle","modifiedStaticTitle","absValue","absRelValue","abs_rel","rel","CommonGroup","itemsArr","CountsDistributionItem","formattedTitle","CountsDistribution","sortedList","BannerColumns","parentObj","GROUPS_PARAMS","BatterAppearance","OutsDistribution","PitchesZoneDistribution","PitchesSwingDistribution","BatterSwingResult","HitsDistribution","Banner","pitcher_banner","total_annual","annual","FilterField","handleChange","listValues","isAllOption","tempFilter","setTempFilter","loweredTempFilter","modifiedValues","pitchesSpeedFieldWrapper","handleMobileDatasetFilterClick","datasetBtn","batterGroupsArr","useFilterBatterGroupData","currentFilterValues","groupName","pitcherFullName","curPitcher","team_name","pitch_classes","pitchClassName","curPitchSpeed","pitcherGroupsArr","useFilterPitcherGroupData","batterFullName","batter","curBatter","GraphsTimeDynamicBlock","defaultOption2","defaultOption3","calculatedDefOptions2","dynamicBlock","openedHeight","closedHeight","isRenderCurves","receiveShadow","shadowSide","StraightLines","RadialLines","DegreesTitles","PitcherImg","BgLayout","Footer","angleValues","footerField","footerUnits","minMaxAvgValues","valueGroup","sumValues","sumHits","hitsCount","avg","avgValue","footerText","LINE_WIDTH","ZERO_X","ZERO_Y","RADIALS_NUMBER","MainTitle","MobileMainTitle","mobileTitle","RadialTitles","minMaxValue","valuePerCircle","titles","Segment","dataField","deg","minMaxDelta","secondDotXCoord","cos","secondDotYCoord","sin","centerDotXCoord","centerDotYCoord","thirdDotXCoord","thirdDotYCoord","pathFillColor","Segments","HitsAnglesGraph","HitsAnglesGraphs","notNullAngleData","defaultAnglesValues","sumVelocity","avgVelocity","sumDistance","avgDistance","exitVelocity","sumAngleObj","minVelocity","maxVelocity","minDistance","maxDistance","SubTitle","minMaxSpeed","minMax","Column","srcPercents","percents","percentValueRef","yCoordFilled","valueXCoord","percentsYCoord","legendCircleFill","isLegendText","percentsValue","percentValue","valueText","Columns","column","columnHeight","PercentsGraph","filteredPitches","filteredPitchesCount","pitchesCountByResult","swing","heart","swingHeart","edge","swingShadow","waste","swingChase","take","takeHeart","takeShadow","takeChase","totalHeart","totalShadow","totalChase","topRightPercents","topCenterPercents","topLeftPercents","topValues","bottomRight","topCenter","bottomCenter","topLeft","bottomLeft","bottomValues","percentTitle","TwinPitchesGraphs","twinGraphsWrapper","BottomMarks","bottomMarks","marksInterval","HORIZONTAL_GRID_LINES_WIDTH","yCoords","mark","HorizontalLinesAndNumbers","marks","graphType","isLeftMarks","marksDelta","leftMarkValue","HORIZONTAL_GRID_LINES_STEP","leftNumber","HORIZONTAL_GRID_LINES_NUMBER","HORIZONTAL_GRID_LINES_LEFT","HORIZONTAL_GRID_LINES_TOP","GRAPH_LINES_HEIGHT","HoveringLines","leftMarks","yScaleMultiplier","availablePitchTypes","leftValuesDelta","minValue","totalColumns","columnStepX","columnStartX","rowsStartY","defaultTotalValues","totalValues","obj","startPointX","startPointY","pathDest","pathSum","pathClasses","hoveringLine","pitchClasses","graphPath","graphNumberClasses","graphNumber","isPath","ArsenalGraph","currentPitchTypes","datesSet","getBottomMarks","graphsWithAllPitches","filteredByAvailablePitchTypes","getDefaultSumByType","getParamByType","convertToRel","getPercentInZoneByType","getPercentOutZoneByType","getPercentInsideByType","inside","getPercentOutsideByType","outside","getPercentLowByType","low","getPercentHighByType","high","getRelSumByType","allPitchesByTime","sumByType","relByType","getSpeedByType","speedsSumByType","getSpinByType","spinSumByType","getVerticalBreakByType","verticalBreakSumByType","getHorizontalBreakByType","horizontalBreakSumByType","getSumByTimeInterval","sliceTo","defaultSumByInterval","timeInterval","totalSum","interval","getFilteredPitches","getPitchesByTime","defaultSumByType","getSumByType","Pitches","HardByType","SwingByType","TakeByType","SoftByType","PitchesRel","Speed","Spin","VerticalBreak","HorizontalBreak","InZone","OutZone","Inside","Outside","Low","High","getGraphSummaryData","sumByTimeInterval","correctedMinMaxValues","getCorrectedMinMaxValues","intervalValuesWOZero","valueDelta","getValueDelta","GRAPH_FIXES","getLeftValues","getLeftMarks","ArsenalGraphs","FIELD_NAMES","Heart","Edge","Swing","Take","Miss","Contact","contact","Fly","Grounds","GroupItem","handleFilterClick","absValueTotal","relValue","staticText","isRelValueNumber","dataValue","itemBody","Group","groupData","filteredTeamName","filteredPlayerFullName","items","playerFullName","totalLength","modifiedGroupData","paramName","TextGroup","setTextGroupFilter","getSortedArr","uniqueValues","defaultValues","batters","tempData","batterName","batterSurname","textGroup","textGroupItem","CustomGroup","totalBatters","h_id","leftHandedBatters","rightHandedBattersLength","rightHandedRelValue","leftHandedRelValue","customGroupData","LeftColumnOptions","pitchesData","handleTeamNameChange","handlePlayerNameChange","isDatasetFilterVisible","setDatasetFilterVisible","leftColumnOuterWrapper","leftColumnWrapper","leftColumnOuterWrapperCrossBtn","RightColumnGraphs","rightColumnWrapper","mobileHeight","FilteredGraphs","setCurrentFilterValues","setFilteredTeamName","setFilteredPlayerFullName","textGroupFilter","overflow","touchAction","checkFieldIdentity","comparedFields","fieldFilter","exactComparing","newPitchesAll","teamFilter","gameFilter","batterFilter","matchedRegex","match","dateDay","dateMonth","gameDataCheck","filteredGraphsWrapper","PitcherContentGraphs","isFilteredGraphs","graphsWrapper","ContentBattingTableHeader","handleTableOptionClick","fieldsInfo","headerWrapped","sortFieldWrapper","childField","FIELDS_OBJ","G","AB","HR","RBI","BB","IBB","HP","SH","SF","SO","TB","AVG","SLG","OBP","OPS","CH","PO","A","E","DP","R","SB","CS","LOB","ContentBattingTableBody","filteredLeagueGamesSummary","teamGamesArr","games_batting","sumGame","games_fielding","games_running","sortedLeagueGames","sortedLeagues","allTeamGames","teamA","teamB","fieldTypeA","fieldTypeB","totalGames","leagueStyles","noCursor","yearsAllLeagueTeamTotals","annual_stats","yearsAllLeagueAllTeamTotals","getAllLeaguesBodyCells","getSelectedLeagueBodyCells","gRow","tableFooter","home_team","visit_team","wide","ContentBattingTable","ContentPitchingTableBody","games_pitching","ContentPitchingTableHeader","wide2_4","wide2_2","ContentPitchingTable","ContentMobileTableHeader","assign","ContentMobileTableBody","rowScrollRef","tableTypeA","tableTypeB","gameRow","ContentMobileTable","ContentTables","lhpRhpGroupItem","PARAM_VOCABULARY","Hits","HitsInPlay","swings","takes","countsGroupItem","PlateAppearance","PitchesBySwingDistribution","batting_banner","BottomValues","valuesDelta","COLS_NUMBER","graphDelta","valuesArr","PADDING_TOP","PADDING_LEFT","bottomValue","totalClasses","minMaxSum","footerWrapper","classTitle","footerValue","maxCount","heightPerHit","valuesByTypes","colHeight","graphColumn","hitsValues","HorizontalLines","VerticalLines","colDelta","Titles","leftTitleCoords","bottomTitleCoords","bottomTitle","StaticLayout","MobileFooter","mobileFooterWrapper","mobileFooterRow","PITCH_CLASSES_PRIORITY","FacedGraph","useIntersection","setVisibility","intersectionRef","GraphTitle","graphMainTitle","selectedField","RightFrames","byPitchZone","rightCoef","softLow","softHigh","softOutside","softInside","hardLow","hardHigh","hardOutside","hardInside","totalLow","totalHigh","totalOutside","totalInside","topRightCenterPercents","topLeftCenterPercents","topRightCenter","bottomRightCenter","topLeftCenter","bottomLeftCenter","rightCenter","leftCenter","lineLength","selectedPitchClass","subTitle1","subTitle2","graphWrapperClasses","pt2","Other","Fastballs","SpeedGroupItem","pitchClass","handleFilterChange","JSONspeeds","pitchClassValue","sliderCoordsTimer","minMaxMph","slider","sliderWidth","fixedX","x1SpeedValue","x2SpeedValue","x2SliderRightCoord","speedGroupItem","barWrapper","leftSlider","rightSlider","x1SpeedTitle","x2SpeedTitle","minSpeedTitle","maxSpeedTitle","SpeedGroup","formattedSpeed","getAbsValue","pitcherSurname","totalPitchers","batt","leftHandedPitchers","LHP","rightHandedPitchersLength","battingData","handleSpeedFilterChange","mobileTwinTitleWidth","pitcherFilter","mSValueMin","mSValueMax","BatterContentGraphs","isBatterGraphs","isPitcherGraphs","innerContainer","useFetch","fetchData","PlayerStats","setPitchesData","setBattingData","playerTableMode","statsError","urlPlayerYears","fetchPitches","fetchBatting","warn","pitchesResponse","battingResponse","isStars","isEvents","SET_COUNT","SET_IS_STARS","SET_IS_EVENTS","CanvasComp","three","ThreePage","App","IsMobileCard","check","navigator","userAgent","vendor","opera","test","substr","orientationChangeHandler","mql","setMobileOrientation","ReactRouterRoute","navigate","useNavigate","adaptedHistory","React","rootReducer","combineReducers","action","store","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","createStore","applyMiddleware","thunk","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.bca90d40.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"ContentPitchingTable_wrapper__165x7\",\"tableHeader\":\"ContentPitchingTable_tableHeader__UUldD\",\"dropWrapper\":\"ContentPitchingTable_dropWrapper__3my8y\",\"tableRow\":\"ContentPitchingTable_tableRow__EIv2I\",\"tableFooter\":\"ContentPitchingTable_tableFooter__1vooD\",\"league\":\"ContentPitchingTable_league__Zt7CK\",\"year\":\"ContentPitchingTable_year__2-xR7\",\"noCursor\":\"ContentPitchingTable_noCursor__1x0FZ\",\"game\":\"ContentPitchingTable_game__3jJo3\",\"teams\":\"ContentPitchingTable_teams__-ziLY\",\"teamName\":\"ContentPitchingTable_teamName__4THEZ\",\"wide\":\"ContentPitchingTable_wide__3ty6G\",\"wide2\":\"ContentPitchingTable_wide2__HNsYP\",\"wide2_2\":\"ContentPitchingTable_wide2_2__UPY3f\",\"wide2_4\":\"ContentPitchingTable_wide2_4__3m-nQ\",\"wide3\":\"ContentPitchingTable_wide3__20Ba3\",\"wider\":\"ContentPitchingTable_wider__1zEZ9\",\"rows\":\"ContentPitchingTable_rows__XJNKl\",\"arrows\":\"ContentPitchingTable_arrows__3BX2N\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"filteredGraphsWrapper\":\"FilteredGraphs_filteredGraphsWrapper__2NgwA\",\"header\":\"FilteredGraphs_header__1Xp58\",\"title\":\"FilteredGraphs_title__Bh9Fy\",\"mobileTwinTitleWidth\":\"FilteredGraphs_mobileTwinTitleWidth__2R-EO\",\"leftColumnOuterWrapper\":\"FilteredGraphs_leftColumnOuterWrapper__3FBJx\",\"leftColumnOuterWrapperCrossBtn\":\"FilteredGraphs_leftColumnOuterWrapperCrossBtn__1bdXY\",\"leftColumnWrapper\":\"FilteredGraphs_leftColumnWrapper__3vV1h\",\"body\":\"FilteredGraphs_body__14BUB\",\"textGroup\":\"FilteredGraphs_textGroup__140OM\",\"textGroupItem\":\"FilteredGraphs_textGroupItem__1SZAn\",\"speedGroupItem\":\"FilteredGraphs_speedGroupItem__17ZxF\",\"classTitle\":\"FilteredGraphs_classTitle__q_1yp\",\"barWrapper\":\"FilteredGraphs_barWrapper__3VYPX\",\"minSpeedTitle\":\"FilteredGraphs_minSpeedTitle__-Y0IW\",\"maxSpeedTitle\":\"FilteredGraphs_maxSpeedTitle__3Kmsd\",\"leftSlider\":\"FilteredGraphs_leftSlider__7xCV4\",\"rightSlider\":\"FilteredGraphs_rightSlider__17WS2\",\"x1SpeedTitle\":\"FilteredGraphs_x1SpeedTitle__C336j\",\"x2SpeedTitle\":\"FilteredGraphs_x2SpeedTitle__2U2ry\",\"groupItem\":\"FilteredGraphs_groupItem__11zFq\",\"dataValue\":\"FilteredGraphs_dataValue__iHGfC\",\"itemBody\":\"FilteredGraphs_itemBody__2CuEX\",\"customItemBody\":\"FilteredGraphs_customItemBody__3X_Ta\",\"rightColumnWrapper\":\"FilteredGraphs_rightColumnWrapper__R1brr\",\"graphsBlock\":\"FilteredGraphs_graphsBlock__12Y4o\",\"dynamicBlock\":\"FilteredGraphs_dynamicBlock__LXNtP\",\"openedHeight\":\"FilteredGraphs_openedHeight__yivf-\",\"closedHeight\":\"FilteredGraphs_closedHeight__10H7s\",\"twinGraphsWrapper\":\"FilteredGraphs_twinGraphsWrapper__3S8fj\",\"tempButton\":\"FilteredGraphs_tempButton__2oReT\",\"mobileHeight\":\"FilteredGraphs_mobileHeight__1NtKz\",\"visible\":\"FilteredGraphs_visible__34YZR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"stats\":\"PlaysHitting_stats__1PZ_o\",\"leftSide\":\"PlaysHitting_leftSide__261WU\",\"rightSide\":\"PlaysHitting_rightSide__1hYsz\",\"row\":\"PlaysHitting_row__2B6cm\",\"title\":\"PlaysHitting_title__1KzDv\",\"value\":\"PlaysHitting_value__28VSA\",\"graph\":\"PlaysHitting_graph__1pzei\",\"headerWrapper\":\"PlaysHitting_headerWrapper__ihDK9\",\"graphWrapper\":\"PlaysHitting_graphWrapper__1N3T5\",\"sideTitle\":\"PlaysHitting_sideTitle__1xylO\",\"impactDot\":\"PlaysHitting_impactDot__kJvxg\",\"impactDotLine\":\"PlaysHitting_impactDotLine__1OiBR\",\"videos\":\"PlaysHitting_videos__1ldLo\",\"dnone\":\"PlaysHitting_dnone__2QAse\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"outerWrapper\":\"Videos_outerWrapper__1672w\",\"sidePanelFull\":\"Videos_sidePanelFull__2Gap1\",\"bottomPanelFull\":\"Videos_bottomPanelFull__2Qj1C\",\"wrapper\":\"Videos_wrapper__OrFal\",\"openFullscreen\":\"Videos_openFullscreen__2z2pk\",\"closeFullscreen\":\"Videos_closeFullscreen__2z2z1\",\"playersInfo\":\"Videos_playersInfo__1iYde\",\"players\":\"Videos_players__3fl-i\",\"speed\":\"Videos_speed__hEBsT\",\"events\":\"Videos_events__18weJ\",\"options\":\"Videos_options__oxmX9\",\"teamInfo\":\"Videos_teamInfo__3Kkfk\",\"scoreTitle\":\"Videos_scoreTitle__1dUxU\",\"signs\":\"Videos_signs__3hEGX\",\"currentCardWrapper\":\"Videos_currentCardWrapper___Rtqa\",\"currentCard\":\"Videos_currentCard__2VnOh\",\"videos1\":\"Videos_videos1__3308p\",\"videos2\":\"Videos_videos2__1wctu\",\"videos3\":\"Videos_videos3__mUW4l\",\"videos4\":\"Videos_videos4__29mON\",\"eventsWrapper\":\"Videos_eventsWrapper__3kj9I\",\"controlsWrapper\":\"Videos_controlsWrapper__1V0am\",\"innerWrapper\":\"Videos_innerWrapper__3MRKv\",\"fullOpacity\":\"Videos_fullOpacity__2amyD\",\"activeArea\":\"Videos_activeArea__2zLut\",\"controls\":\"Videos_controls__35cHw\",\"leftZero\":\"Videos_leftZero__2io1F\",\"mobileLandscapeVideo\":\"Videos_mobileLandscapeVideo__mbY7j\",\"onlyMobile\":\"Videos_onlyMobile__ojWDA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dropdownWrapper\":\"OptionsDropdown_dropdownWrapper__3alSQ\",\"mobileLandscapeVisible\":\"OptionsDropdown_mobileLandscapeVisible__3jY3L\",\"optionsDropdown\":\"OptionsDropdown_optionsDropdown__2V496\",\"optionsPanel\":\"OptionsDropdown_optionsPanel__115G6\",\"popUp\":\"OptionsDropdown_popUp__3RSBd\",\"landscapeWrapper\":\"OptionsDropdown_landscapeWrapper__YZ4kb\",\"componentsTogglers\":\"OptionsDropdown_componentsTogglers__3mTnC\",\"effectsToggler\":\"OptionsDropdown_effectsToggler__1gx60\",\"row\":\"OptionsDropdown_row__USiNz\",\"playModesTogglers\":\"OptionsDropdown_playModesTogglers__1Bn0o\",\"buttonWrapper\":\"OptionsDropdown_buttonWrapper__1UCnm\",\"speedSelectors\":\"OptionsDropdown_speedSelectors__3bvGE\",\"playbackSpeed\":\"OptionsDropdown_playbackSpeed__1I3u8\",\"speedValues\":\"OptionsDropdown_speedValues__2pAj8\",\"speedOption\":\"OptionsDropdown_speedOption__3EvsP\",\"active\":\"OptionsDropdown_active__MN7AB\",\"timeIntervalTogglers\":\"OptionsDropdown_timeIntervalTogglers__2QMDT\",\"onlyMobilePortrait\":\"OptionsDropdown_onlyMobilePortrait__2p4LC\",\"onlyMobileLandscape\":\"OptionsDropdown_onlyMobileLandscape__Kd73G\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"side\":\"ContentSideTables_side__26dBW\",\"addHeight\":\"ContentSideTables_addHeight__5neOF\",\"pctWrapper\":\"ContentSideTables_pctWrapper__UL6xn\",\"pctTable\":\"ContentSideTables_pctTable__k6J4Z\",\"tableHeader\":\"ContentSideTables_tableHeader__t3gaS\",\"tableBody\":\"ContentSideTables_tableBody__1PcoT\",\"tableRow\":\"ContentSideTables_tableRow__3KEZJ\",\"header\":\"ContentSideTables_header__2_xvV\",\"avr\":\"ContentSideTables_avr__1dMOf\",\"drop\":\"ContentSideTables_drop__P19CX\",\"switchWrapper\":\"ContentSideTables_switchWrapper__21g7d\",\"switchTable\":\"ContentSideTables_switchTable__SjK4w\",\"underlineHover\":\"ContentSideTables_underlineHover__OIYaF\",\"mobileTablemodeDropdownClass\":\"ContentSideTables_mobileTablemodeDropdownClass__1Cfza\",\"mobileValueDropdownClass\":\"ContentSideTables_mobileValueDropdownClass__236QF\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header\":\"Header_header__1OXIp\",\"headerContent\":\"Header_headerContent__3spMt\",\"geo\":\"Header_geo__1jxXD\",\"date\":\"Header_date__16Z2m\",\"location\":\"Header_location__3O0X-\",\"leagueName\":\"Header_leagueName__yg5bi\",\"mainModeSelector\":\"Header_mainModeSelector__3FD7c\",\"teamTotalScoresWrapper\":\"Header_teamTotalScoresWrapper__2Adt6\",\"scores\":\"Header_scores__1nK2J\",\"guests\":\"Header_guests__3kfPC\",\"owners\":\"Header_owners__3clw_\",\"active\":\"Header_active__2k7CM\",\"dateLocation\":\"Header_dateLocation__NnwLG\",\"geoPitcherWrapper\":\"Header_geoPitcherWrapper__3_GWi\",\"teamScore\":\"Header_teamScore__3JV8u\",\"scoresWrapper\":\"Header_scoresWrapper__3rvn-\",\"mobileHeaderEvents\":\"Header_mobileHeaderEvents__g-DI2\",\"landscapeDisplayNone\":\"Header_landscapeDisplayNone__bX_Ib\",\"scoresListWrapper\":\"Header_scoresListWrapper__FDOxo\",\"arrowGroup\":\"Header_arrowGroup__3va7i\",\"mobileFiltersWrapper\":\"Header_mobileFiltersWrapper__k9lxQ\",\"mobileBoxModesWrapper\":\"Header_mobileBoxModesWrapper__3IhPk\",\"mobileOnlyFields\":\"Header_mobileOnlyFields__2NxzC\",\"onlyPortraitMobile\":\"Header_onlyPortraitMobile__17Niz\",\"mobileDisplayNone\":\"Header_mobileDisplayNone__5RfTT\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"filteredGraphsWrapper\":\"FilteredGraphs_filteredGraphsWrapper__2rjv8\",\"header\":\"FilteredGraphs_header__NE_HY\",\"title\":\"FilteredGraphs_title__2fdlZ\",\"leftColumnOuterWrapper\":\"FilteredGraphs_leftColumnOuterWrapper__qg3IL\",\"leftColumnOuterWrapperCrossBtn\":\"FilteredGraphs_leftColumnOuterWrapperCrossBtn__oEHxT\",\"leftColumnWrapper\":\"FilteredGraphs_leftColumnWrapper__2HVnm\",\"body\":\"FilteredGraphs_body__9mqRT\",\"textGroup\":\"FilteredGraphs_textGroup__3MEwu\",\"textGroupItem\":\"FilteredGraphs_textGroupItem__3Htur\",\"groupItem\":\"FilteredGraphs_groupItem__18YDO\",\"dataValue\":\"FilteredGraphs_dataValue__3Tv4b\",\"itemBody\":\"FilteredGraphs_itemBody__1M7Et\",\"customItemBody\":\"FilteredGraphs_customItemBody__DAsft\",\"rightColumnWrapper\":\"FilteredGraphs_rightColumnWrapper__2tlqw\",\"graphsBlock\":\"FilteredGraphs_graphsBlock__ZAvYQ\",\"dynamicBlock\":\"FilteredGraphs_dynamicBlock__2wTLt\",\"openedHeight\":\"FilteredGraphs_openedHeight__KxV4J\",\"closedHeight\":\"FilteredGraphs_closedHeight__1ebOv\",\"twinGraphsWrapper\":\"FilteredGraphs_twinGraphsWrapper__20w-O\",\"tempButton\":\"FilteredGraphs_tempButton__Hix9p\",\"mobileHeight\":\"FilteredGraphs_mobileHeight__1mvop\",\"visible\":\"FilteredGraphs_visible__2C7xd\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"outerWrapper\":\"TwinPitchesGraph_outerWrapper__sz0dB\",\"graphWrapper\":\"TwinPitchesGraph_graphWrapper__KBV7C\",\"pt2\":\"TwinPitchesGraph_pt2__3rf1F\",\"wrapper\":\"TwinPitchesGraph_wrapper__xj7OP\",\"increaseOpacity\":\"TwinPitchesGraph_increaseOpacity__1I7GQ\",\"graphMainTitle\":\"TwinPitchesGraph_graphMainTitle__xhxHN\",\"title\":\"TwinPitchesGraph_title__p76Wz\",\"valueText\":\"TwinPitchesGraph_valueText__Ad8Wh\",\"percentValue\":\"TwinPitchesGraph_percentValue__2Sdkb\",\"percentTitle\":\"TwinPitchesGraph_percentTitle__2gUyM\",\"animated\":\"TwinPitchesGraph_animated__1dPh2\",\"growRadius\":\"TwinPitchesGraph_growRadius__2bGXl\",\"growRadiusMore\":\"TwinPitchesGraph_growRadiusMore__2z42T\",\"blur2\":\"TwinPitchesGraph_blur2__2Ln66\",\"eventsNone\":\"TwinPitchesGraph_eventsNone__2INb4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"ContentBattingTable_wrapper__QIuGv\",\"tableHeader\":\"ContentBattingTable_tableHeader__1XZZR\",\"dropWrapper\":\"ContentBattingTable_dropWrapper__1Li2S\",\"tableRow\":\"ContentBattingTable_tableRow__1Se1B\",\"tableFooter\":\"ContentBattingTable_tableFooter__1hTmT\",\"league\":\"ContentBattingTable_league__2ozOI\",\"year\":\"ContentBattingTable_year__2Ypd7\",\"noCursor\":\"ContentBattingTable_noCursor__3_Pb-\",\"game\":\"ContentBattingTable_game__2Tmgs\",\"teams\":\"ContentBattingTable_teams__Stk3o\",\"teamName\":\"ContentBattingTable_teamName__1OjcW\",\"wide\":\"ContentBattingTable_wide__hSjGw\",\"tall\":\"ContentBattingTable_tall__3FZcp\",\"wide2\":\"ContentBattingTable_wide2__1mC_f\",\"wide2_5\":\"ContentBattingTable_wide2_5__14gYW\",\"wide3\":\"ContentBattingTable_wide3__2NXhi\",\"wider\":\"ContentBattingTable_wider__2_Oz7\",\"rows\":\"ContentBattingTable_rows__3vQYZ\",\"sortFieldWrapper\":\"ContentBattingTable_sortFieldWrapper__3u2Au\",\"arrows\":\"ContentBattingTable_arrows__1_oZN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"spin\":\"PlaysSpin_spin__3sSME\",\"subHeader\":\"PlaysSpin_subHeader__3WqeN\",\"regularValue\":\"PlaysSpin_regularValue__sGroi\",\"breakValue\":\"PlaysSpin_breakValue__6Wr9Y\",\"graphTitle\":\"PlaysSpin_graphTitle__3Nz0y\",\"graphTooltip\":\"PlaysSpin_graphTooltip__Gjl46\",\"dnone\":\"PlaysSpin_dnone__17Mjc\",\"spinInfo\":\"PlaysSpin_spinInfo__1eHjZ\",\"currentDotLine\":\"PlaysSpin_currentDotLine__2BqhL\",\"dot\":\"PlaysSpin_dot__3hVew\",\"growRadius\":\"PlaysSpin_growRadius__6tABI\",\"growRadiusMore\":\"PlaysSpin_growRadiusMore__iMqBe\",\"currentDot\":\"PlaysSpin_currentDot___HTcJ\",\"currentGrowRadius\":\"PlaysSpin_currentGrowRadius__1sk2d\",\"currentDotWhite\":\"PlaysSpin_currentDotWhite__3EkkS\",\"currentWhiteGrowRadius\":\"PlaysSpin_currentWhiteGrowRadius__3zK24\",\"showingGroup\":\"PlaysSpin_showingGroup__3N7SH\",\"showing\":\"PlaysSpin_showing__26AUK\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"Timeline_wrapper__VmMZT\",\"eventsBtnsWrapper\":\"Timeline_eventsBtnsWrapper__1Gkxb\",\"chart\":\"Timeline_chart__2pxGM\",\"sideChart\":\"Timeline_sideChart__2sPjb\",\"leftTitle\":\"Timeline_leftTitle__2Hj3i\",\"rightTitle\":\"Timeline_rightTitle__31fTD\",\"verticalLineText\":\"Timeline_verticalLineText__wy-si\",\"redLineText\":\"Timeline_redLineText__2l-OF\",\"whiteLineText\":\"Timeline_whiteLineText__3LeST\",\"eventRect\":\"Timeline_eventRect__2iGtL\",\"horizontalLineText\":\"Timeline_horizontalLineText__1XxMD\",\"draggableRect\":\"Timeline_draggableRect__1U-zi\",\"draggableLine\":\"Timeline_draggableLine__2vT1L\",\"siblingLine\":\"Timeline_siblingLine__Tufmf\",\"onlyMobile\":\"Timeline_onlyMobile__3oU7U\",\"rightEvtChanger\":\"Timeline_rightEvtChanger__1mHm5\",\"mobileDisplayNone\":\"Timeline_mobileDisplayNone__2FbSP\",\"mobileLandscapeDNone\":\"Timeline_mobileLandscapeDNone__3j4xk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"events\":\"PlaysEvents_events__YvVwZ\",\"noVideo\":\"PlaysEvents_noVideo__JToqC\",\"list\":\"PlaysEvents_list__3cNKk\",\"text\":\"PlaysEvents_text__EQVZw\",\"pitcherWrapper\":\"PlaysEvents_pitcherWrapper__3raWj\",\"beforeBlue\":\"PlaysEvents_beforeBlue__3cKtb\",\"blueTopLoad\":\"PlaysEvents_blueTopLoad__2U3g_\",\"wider\":\"PlaysEvents_wider__Z7gSo\",\"slideToRight\":\"PlaysEvents_slideToRight__957Y0\",\"taller\":\"PlaysEvents_taller__1gEM7\",\"slideToLeft\":\"PlaysEvents_slideToLeft__3LMMy\",\"leftShadow\":\"PlaysEvents_leftShadow__397cr\",\"rightShadow\":\"PlaysEvents_rightShadow__3dqI9\",\"isVideosList\":\"PlaysEvents_isVideosList__2CtS0\",\"active\":\"PlaysEvents_active__1UoqI\",\"backgroundChange\":\"PlaysEvents_backgroundChange__3xqe1\",\"obr\":\"PlaysEvents_obr__1JFiC\",\"listBottomShadow\":\"PlaysEvents_listBottomShadow__3oMR5\",\"total\":\"PlaysEvents_total__3cJjt\",\"red\":\"PlaysEvents_red__E1S9k\",\"green\":\"PlaysEvents_green__3XeYD\",\"blue\":\"PlaysEvents_blue__1XbtV\",\"yellow\":\"PlaysEvents_yellow__3Ue8H\",\"onlyDesktop\":\"PlaysEvents_onlyDesktop__19CWI\",\"rise\":\"PlaysEvents_rise__oZQ8Z\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"videoWrapper\":\"Video_videoWrapper__16MMQ\",\"controlsWrapper\":\"Video_controlsWrapper__2UmeW\",\"wrapper\":\"Video_wrapper__2hRuG\",\"btnWrapper\":\"Video_btnWrapper__HLGuE\",\"toFullScreen\":\"Video_toFullScreen__37HLW\",\"fromFullScreen\":\"Video_fromFullScreen__1DbnQ\",\"videoControls\":\"Video_videoControls__3S7iM\",\"sidePanelFull\":\"Video_sidePanelFull__JWnuG\",\"bottomPanelFull\":\"Video_bottomPanelFull__3zmP-\",\"playersInfo\":\"Video_playersInfo__13yX5\",\"players\":\"Video_players__1WKw1\",\"speed\":\"Video_speed__3bJ4P\",\"events\":\"Video_events__3kBjA\",\"options\":\"Video_options__2Yrln\",\"videoOne\":\"Video_videoOne__1D9Ud\",\"videoTwo\":\"Video_videoTwo__1eJy-\",\"videoThree\":\"Video_videoThree__2vm88\",\"videoFour\":\"Video_videoFour__19ZMK\",\"topLeftBtn\":\"Video_topLeftBtn__CgbhX\",\"topRightBtn\":\"Video_topRightBtn__2Dmv3\",\"bottomLeftBtn\":\"Video_bottomLeftBtn__1NRUn\",\"bottomRightBtn\":\"Video_bottomRightBtn__1-gfB\",\"dnone\":\"Video_dnone__3xdHN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"mobileBox\":\"ContentMobileBox_mobileBox__DCg4T\",\"boxHeader\":\"ContentMobileBox_boxHeader__2FK7S\",\"active\":\"ContentMobileBox_active__1wiXn\",\"mobileWrapper\":\"ContentMobileBox_mobileWrapper__1ePNj\",\"fullHeader\":\"ContentMobileBox_fullHeader__13cTA\",\"leftHeader\":\"ContentMobileBox_leftHeader__1MjC7\",\"rightHeader\":\"ContentMobileBox_rightHeader__3jlX2\",\"wider\":\"ContentMobileBox_wider__GkQnf\",\"widest\":\"ContentMobileBox_widest__1WkqY\",\"sides\":\"ContentMobileBox_sides__rvQBs\",\"footerSides\":\"ContentMobileBox_footerSides__13tf2\",\"leftRows\":\"ContentMobileBox_leftRows__1Wn8-\",\"tableRow\":\"ContentMobileBox_tableRow__2Yaj1\",\"fullName\":\"ContentMobileBox_fullName__1PloO\",\"playerName\":\"ContentMobileBox_playerName__3nkds\",\"footerRow\":\"ContentMobileBox_footerRow__PRDt9\",\"rightRows\":\"ContentMobileBox_rightRows__2reVM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"outerWrapper\":\"TwinPitchesGraph_outerWrapper__OWJaj\",\"wrapper\":\"TwinPitchesGraph_wrapper__2QD87\",\"increaseOpacity\":\"TwinPitchesGraph_increaseOpacity__3bdvt\",\"title\":\"TwinPitchesGraph_title__1ODqF\",\"subTitle\":\"TwinPitchesGraph_subTitle__5TjhD\",\"valueText\":\"TwinPitchesGraph_valueText__2rFT3\",\"percentValue\":\"TwinPitchesGraph_percentValue__UMP3B\",\"percentTitle\":\"TwinPitchesGraph_percentTitle__2Qb5M\",\"eventsNone\":\"TwinPitchesGraph_eventsNone__1oZaR\",\"animated\":\"TwinPitchesGraph_animated__2jJO9\",\"growRadius\":\"TwinPitchesGraph_growRadius__3LIaa\",\"growRadiusMore\":\"TwinPitchesGraph_growRadiusMore__2ItHF\",\"blur2\":\"TwinPitchesGraph_blur2__2xO1u\",\"showingGroup\":\"TwinPitchesGraph_showingGroup__XDR8-\",\"showing\":\"TwinPitchesGraph_showing__1_Mrg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"FacedGraph_wrapper__3RZOw\",\"graph\":\"FacedGraph_graph__XHMqH\",\"leftTitle\":\"FacedGraph_leftTitle__BgcIr\",\"bottomTitle\":\"FacedGraph_bottomTitle__2o5hH\",\"bottomValue\":\"FacedGraph_bottomValue__12cWX\",\"leftValue\":\"FacedGraph_leftValue__18a7m\",\"footerWrapper\":\"FacedGraph_footerWrapper__4IdqF\",\"mobileFooterWrapper\":\"FacedGraph_mobileFooterWrapper__3lPCW\",\"mobileFooterRow\":\"FacedGraph_mobileFooterRow__1SGe1\",\"footerValue\":\"FacedGraph_footerValue__FWJMB\",\"graphColumn\":\"FacedGraph_graphColumn__9I3gV\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"ContentTable_wrapper__qxLOF\",\"header\":\"ContentTable_header__1Vz9J\",\"calendarsWrapper\":\"ContentTable_calendarsWrapper__3Q6E9\",\"teamWrapper\":\"ContentTable_teamWrapper__3gEvS\",\"teamName\":\"ContentTable_teamName__1jITC\",\"teamSearch\":\"ContentTable_teamSearch__Y4DB5\",\"teamFilters\":\"ContentTable_teamFilters__D7I7s\",\"teamSelector\":\"ContentTable_teamSelector__1z4-W\",\"table\":\"ContentTable_table__3Bvvm\",\"tableHeader\":\"ContentTable_tableHeader__FZ_RK\",\"paddingRightOne\":\"ContentTable_paddingRightOne__2rbbq\",\"homeTitle\":\"ContentTable_homeTitle__27ypD\",\"guestsTitle\":\"ContentTable_guestsTitle__gd3xj\",\"rows\":\"ContentTable_rows__3k1oY\",\"tableRow\":\"ContentTable_tableRow__2BPfz\",\"withDate\":\"ContentTable_withDate__3EZ1c\",\"active\":\"ContentTable_active__ILtRq\",\"completionSign\":\"ContentTable_completionSign__cQ2nl\",\"completedGame\":\"ContentTable_completedGame__205_k\",\"scheduledGame\":\"ContentTable_scheduledGame__3NFiq\",\"incompletedGame\":\"ContentTable_incompletedGame__1Leux\",\"underlineHover\":\"ContentTable_underlineHover__39Qyr\",\"stadiumName\":\"ContentTable_stadiumName__1bTiX\",\"tableModes\":\"ContentTable_tableModes__3s2uy\",\"modeTitle\":\"ContentTable_modeTitle__3fJge\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"outerWrapper\":\"TwinPitchesGraph_outerWrapper__KRuM3\",\"wrapper\":\"TwinPitchesGraph_wrapper__1-3il\",\"increaseOpacity\":\"TwinPitchesGraph_increaseOpacity__UBKvq\",\"title\":\"TwinPitchesGraph_title__xibv3\",\"subTitle\":\"TwinPitchesGraph_subTitle__3KTmL\",\"valueText\":\"TwinPitchesGraph_valueText__1kuKN\",\"percentValue\":\"TwinPitchesGraph_percentValue__1LMIf\",\"percentTitle\":\"TwinPitchesGraph_percentTitle__uTOaS\",\"eventsNone\":\"TwinPitchesGraph_eventsNone__2sMrX\",\"animated\":\"TwinPitchesGraph_animated__hzHS9\",\"growRadius\":\"TwinPitchesGraph_growRadius__2srSY\",\"growRadiusMore\":\"TwinPitchesGraph_growRadiusMore__2K2em\",\"blur2\":\"TwinPitchesGraph_blur2__2VHqa\",\"showingGroup\":\"TwinPitchesGraph_showingGroup__2e1LE\",\"showing\":\"TwinPitchesGraph_showing__A-pRx\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"ContentTeamTable_wrapper__2mgpz\",\"tableHeader\":\"ContentTeamTable_tableHeader__28tVQ\",\"tableRow\":\"ContentTeamTable_tableRow__3T574\",\"teamName\":\"ContentTeamTable_teamName__2Cpdh\",\"tall\":\"ContentTeamTable_tall__1UsHF\",\"wide2\":\"ContentTeamTable_wide2__x0aLd\",\"wide2_5\":\"ContentTeamTable_wide2_5__2fYc1\",\"wide3\":\"ContentTeamTable_wide3__23w68\",\"wider\":\"ContentTeamTable_wider__3eTN9\",\"rows\":\"ContentTeamTable_rows__2RdtP\",\"mobileWrapper\":\"ContentTeamTable_mobileWrapper__1CTXR\",\"fullHeader\":\"ContentTeamTable_fullHeader__29kOQ\",\"leftHeader\":\"ContentTeamTable_leftHeader__2zskU\",\"rightHeader\":\"ContentTeamTable_rightHeader__12pE7\",\"sides\":\"ContentTeamTable_sides__31CSU\",\"leftRows\":\"ContentTeamTable_leftRows__1n3vm\",\"fullName\":\"ContentTeamTable_fullName__1mfV5\",\"teamNames\":\"ContentTeamTable_teamNames__HdhY4\",\"rightRows\":\"ContentTeamTable_rightRows__3PDF6\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"speed\":\"PlaysSpeed_speed__32aYN\",\"subHeader\":\"PlaysSpeed_subHeader__3FN_5\",\"chart\":\"PlaysSpeed_chart__38wnu\",\"plainText\":\"PlaysSpeed_plainText__2LLH1\",\"showingGroup\":\"PlaysSpeed_showingGroup__wu0ER\",\"showing\":\"PlaysSpeed_showing__1gpnD\",\"ballType\":\"PlaysSpeed_ballType__1cQX_\",\"mphValue\":\"PlaysSpeed_mphValue__3n-Lv\",\"dnone\":\"PlaysSpeed_dnone__2Eb6n\",\"dot\":\"PlaysSpeed_dot__pNjxc\",\"growRadius\":\"PlaysSpeed_growRadius__3cuUg\",\"growRadiusMore\":\"PlaysSpeed_growRadiusMore__1Y9j6\",\"currentDot\":\"PlaysSpeed_currentDot__Lzwba\",\"currentGrowRadius\":\"PlaysSpeed_currentGrowRadius__1mWlO\",\"currentDotWhite\":\"PlaysSpeed_currentDotWhite__2Ya3J\",\"currentWhiteGrowRadius\":\"PlaysSpeed_currentWhiteGrowRadius__y2TmS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"fieldWrapper\":\"PlaysRunning_fieldWrapper__2_Ssa\",\"field\":\"PlaysRunning_field__3tNYA\",\"canvas\":\"PlaysRunning_canvas__3QWuH\",\"optionsBarWrapper\":\"PlaysRunning_optionsBarWrapper__3ZQdd\",\"arrowDown\":\"PlaysRunning_arrowDown__16jGg\",\"optionsBar\":\"PlaysRunning_optionsBar__Xuzzy\",\"active\":\"PlaysRunning_active__SskPe\",\"info\":\"PlaysRunning_info__3Mk3U\",\"list\":\"PlaysRunning_list__2Nk6q\",\"subHeader\":\"PlaysRunning_subHeader__2qCAf\",\"infoItem\":\"PlaysRunning_infoItem__vrVn1\",\"infoTitle\":\"PlaysRunning_infoTitle__3W6FD\",\"infoValue\":\"PlaysRunning_infoValue__FqFFh\",\"rightArrowWrapper\":\"PlaysRunning_rightArrowWrapper__I64hS\",\"leftArrowWrapper\":\"PlaysRunning_leftArrowWrapper__1j3ii\",\"dnone\":\"PlaysRunning_dnone__2B22z\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pitchValues\":\"PitchValues_pitchValues__35JY9\",\"releaseData\":\"PitchValues_releaseData__1_Iya\",\"speedData\":\"PitchValues_speedData__32XzZ\",\"regularValue\":\"PitchValues_regularValue__1CE7m\",\"subHeader\":\"PitchValues_subHeader__2P3UC\",\"plateMobileHeader\":\"PitchValues_plateMobileHeader__16f9T\",\"releaseValue\":\"PitchValues_releaseValue__w2GDQ\",\"regularMobileValue\":\"PitchValues_regularMobileValue__2E2K_\",\"dnone\":\"PitchValues_dnone__1Pa3d\",\"breakValue\":\"PitchValues_breakValue__3M38V\",\"spinInfo\":\"PitchValues_spinInfo__a3YCl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"group\":\"Banner_group__jGwuK\",\"groupItem\":\"Banner_groupItem__OohfD\",\"countsGroupItem\":\"Banner_countsGroupItem__3X69j\",\"lhpRhpGroupItem\":\"Banner_lhpRhpGroupItem__33fSC\",\"title\":\"Banner_title__3lHTE\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"outerWrapper\":\"FieldGraph_outerWrapper__15AWq\",\"bottomWrapperTitle\":\"FieldGraph_bottomWrapperTitle__3XRas\",\"leftWrapperTitle\":\"FieldGraph_leftWrapperTitle__g5MiS\",\"svgWrapper\":\"FieldGraph_svgWrapper__3FiCY\",\"leftTextTitle\":\"FieldGraph_leftTextTitle__1CBPe\",\"bottomTextTitle\":\"FieldGraph_bottomTextTitle__3FJFH\",\"animatedDot\":\"FieldGraph_animatedDot__ZZRlE\",\"growRadius\":\"FieldGraph_growRadius__sEWkp\",\"growRadiusMore\":\"FieldGraph_growRadiusMore__khTIG\",\"animatedEllipse\":\"FieldGraph_animatedEllipse__GHkkR\",\"growRadiusEllipse\":\"FieldGraph_growRadiusEllipse__3eRNQ\",\"frames\":\"FieldGraph_frames__2V2fw\",\"showingGroup\":\"FieldGraph_showingGroup__j6LkM\",\"showing\":\"FieldGraph_showing__1m-Aw\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"outerWrapper\":\"FieldGraph_outerWrapper__3oTYK\",\"bottomWrapperTitle\":\"FieldGraph_bottomWrapperTitle__PubkX\",\"leftWrapperTitle\":\"FieldGraph_leftWrapperTitle__2XNT3\",\"svgWrapper\":\"FieldGraph_svgWrapper__1FL6h\",\"leftTextTitle\":\"FieldGraph_leftTextTitle__1Jnmn\",\"bottomTextTitle\":\"FieldGraph_bottomTextTitle__xclR5\",\"animatedDot\":\"FieldGraph_animatedDot__1M9Zk\",\"growRadius\":\"FieldGraph_growRadius__RfuEY\",\"growRadiusMore\":\"FieldGraph_growRadiusMore__2Xn-O\",\"animatedEllipse\":\"FieldGraph_animatedEllipse__3grpF\",\"growRadiusEllipse\":\"FieldGraph_growRadiusEllipse__3zxYd\",\"frames\":\"FieldGraph_frames__2Kwo2\",\"showingGroup\":\"FieldGraph_showingGroup__sCW0H\",\"showing\":\"FieldGraph_showing__b0y6X\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"field\":\"HittingField_field__3hRTY\",\"cameraView\":\"HittingField_cameraView__yPanm\",\"cameraSwitchBtn\":\"HittingField_cameraSwitchBtn__3POvB\",\"canvas\":\"HittingField_canvas__1PvIs\",\"optionsBarWrapper\":\"HittingField_optionsBarWrapper__1QjyG\",\"arrowDown\":\"HittingField_arrowDown__3uTqX\",\"optionsBar\":\"HittingField_optionsBar__hN7hl\",\"active\":\"HittingField_active__3BWtF\",\"tooltip\":\"HittingField_tooltip__3w0Kl\",\"hidden\":\"HittingField_hidden__3BHbJ\",\"dnone\":\"HittingField_dnone__d7i-h\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"bannerWrapper\":\"Banner_bannerWrapper__146hv\",\"group\":\"Banner_group__3M5po\",\"groupItem\":\"Banner_groupItem__17aco\",\"title\":\"Banner_title__13jVy\",\"rhbLhbGroupItem\":\"Banner_rhbLhbGroupItem__1fpPS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"ArsenalGraph_wrapper__2MFUd\",\"graph\":\"ArsenalGraph_graph__3h72z\",\"bottomNumber\":\"ArsenalGraph_bottomNumber__3LJVu\",\"leftNumber\":\"ArsenalGraph_leftNumber__rnb1L\",\"graphNumber\":\"ArsenalGraph_graphNumber__3G3N6\",\"innerText\":\"ArsenalGraph_innerText__3ANIO\",\"sideTitle\":\"ArsenalGraph_sideTitle__3x0RW\",\"hoveringLine\":\"ArsenalGraph_hoveringLine__394SO\",\"hoveringLine1\":\"ArsenalGraph_hoveringLine1__3u22k\",\"graphPath1\":\"ArsenalGraph_graphPath1__1aRXP\",\"hoveringLine2\":\"ArsenalGraph_hoveringLine2__1vmau\",\"graphPath2\":\"ArsenalGraph_graphPath2__3D4Yx\",\"hoveringLine3\":\"ArsenalGraph_hoveringLine3__EeJJv\",\"graphPath3\":\"ArsenalGraph_graphPath3__37WKg\",\"hoveringLine4\":\"ArsenalGraph_hoveringLine4__y1M0W\",\"graphPath4\":\"ArsenalGraph_graphPath4__2Xx3p\",\"hoveringLine5\":\"ArsenalGraph_hoveringLine5__1bVy2\",\"graphPath5\":\"ArsenalGraph_graphPath5__2JWEc\",\"hoveringLine6\":\"ArsenalGraph_hoveringLine6__30mq_\",\"graphPath6\":\"ArsenalGraph_graphPath6__16DkA\",\"graphNumber1\":\"ArsenalGraph_graphNumber1__3GA3o\",\"graphNumber2\":\"ArsenalGraph_graphNumber2__1QQf1\",\"graphNumber3\":\"ArsenalGraph_graphNumber3__2GhWe\",\"graphNumber4\":\"ArsenalGraph_graphNumber4__3Zjpr\",\"graphNumber5\":\"ArsenalGraph_graphNumber5__3GQbs\",\"graphNumber6\":\"ArsenalGraph_graphNumber6__3ganw\",\"graphPath\":\"ArsenalGraph_graphPath__PO109\",\"showing\":\"ArsenalGraph_showing__NqtVs\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"optionsBar\":\"MobileOptionsBar_optionsBar__1Ap3J\",\"onlyPortraitMobile\":\"MobileOptionsBar_onlyPortraitMobile__SKqpH\",\"onlyLandscapeMobile\":\"MobileOptionsBar_onlyLandscapeMobile__3nLz7\",\"scoreInfo\":\"MobileOptionsBar_scoreInfo__2BvoP\",\"noVideo\":\"MobileOptionsBar_noVideo__2Fdl0\",\"team\":\"MobileOptionsBar_team__1Lc3u\",\"teamName\":\"MobileOptionsBar_teamName__3oiBJ\",\"active\":\"MobileOptionsBar_active__1cuoU\",\"teamScore\":\"MobileOptionsBar_teamScore__19m7L\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"content\":\"Content_content__33BDr\",\"contentNoVideo\":\"Content_contentNoVideo__1PsJ4\",\"eventsArea\":\"Content_eventsArea__30rC7\",\"landscapeDisplayNone\":\"Content_landscapeDisplayNone__3aEDz\",\"mobileDisplayNone\":\"Content_mobileDisplayNone__1u6np\",\"mobilePitcherFiltersWrapper\":\"Content_mobilePitcherFiltersWrapper__2WPiS\",\"noVideo\":\"Content_noVideo__2840C\",\"mobilePitcherFilters\":\"Content_mobilePitcherFilters__2tL4n\",\"mobileOnlyPortrait\":\"Content_mobileOnlyPortrait__30vmF\",\"eventsWrapper\":\"Content_eventsWrapper__3_r0r\",\"backgroundChange\":\"Content_backgroundChange__2laFr\",\"rise\":\"Content_rise__3V198\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"video\":\"HittingVideo_video__3h_3V\",\"topLeftVideo\":\"HittingVideo_topLeftVideo__2HmS4\",\"topRightVideo\":\"HittingVideo_topRightVideo__1X8fc\",\"bottomLeftVideo\":\"HittingVideo_bottomLeftVideo__3iK7Z\",\"bottomRightVideo\":\"HittingVideo_bottomRightVideo__3lPvi\",\"YTContainer\":\"HittingVideo_YTContainer__3-cmU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"viewModes\":\"FiltersViewModes_viewModes__2D0Hj\",\"camera\":\"FiltersViewModes_camera__3-63k\",\"active\":\"FiltersViewModes_active___8sO6\",\"showGear\":\"FiltersViewModes_showGear__1M-iO\",\"dimColor\":\"FiltersViewModes_dimColor__3fLPT\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"ContentSituationsList_wrapper__1lCEN\",\"controls\":\"ContentSituationsList_controls__BlZgG\",\"controlsWrapper\":\"ContentSituationsList_controlsWrapper__1zOry\",\"list\":\"ContentSituationsList_list__2MHzd\",\"listNoVideo\":\"ContentSituationsList_listNoVideo__2h00D\",\"mobilePlaysListHeight\":\"ContentSituationsList_mobilePlaysListHeight__3y87J\",\"mobilePlaysListHeightVideo\":\"ContentSituationsList_mobilePlaysListHeightVideo__k80_f\",\"blueDiv\":\"ContentSituationsList_blueDiv__1ld3p\",\"wider\":\"ContentSituationsList_wider__1_Cg0\",\"slideToLeft\":\"ContentSituationsList_slideToLeft__3tfwX\",\"taller\":\"ContentSituationsList_taller__2E9fp\",\"slideToRight\":\"ContentSituationsList_slideToRight__VA8BK\",\"landscapeOnly\":\"ContentSituationsList_landscapeOnly__2gkl0\",\"mobileOnlyFields\":\"ContentSituationsList_mobileOnlyFields__1BB_l\",\"landscapeDisplayNone\":\"ContentSituationsList_landscapeDisplayNone__ufZuV\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"PitchersReleaseSpeeds_wrapper__23Lun\",\"innerWrapper\":\"PitchersReleaseSpeeds_innerWrapper__2Fl36\",\"graph\":\"PitchersReleaseSpeeds_graph__R2u0w\",\"leftValue\":\"PitchersReleaseSpeeds_leftValue__3izGg\",\"dot\":\"PitchersReleaseSpeeds_dot__2T9ag\",\"growRadius\":\"PitchersReleaseSpeeds_growRadius__Ot16u\",\"growRadiusMore\":\"PitchersReleaseSpeeds_growRadiusMore__2uVOU\",\"showingGroup\":\"PitchersReleaseSpeeds_showingGroup__10QvU\",\"showing\":\"PitchersReleaseSpeeds_showing__3RVRc\",\"plainText\":\"PitchersReleaseSpeeds_plainText__3e9ZH\",\"arrowBtn\":\"PitchersReleaseSpeeds_arrowBtn__GE9f0\",\"leftArrowBtn\":\"PitchersReleaseSpeeds_leftArrowBtn__1SLSb\",\"rightArrowBtn\":\"PitchersReleaseSpeeds_rightArrowBtn__3Zuo3\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"box\":\"ContentBox_box__27fsS\",\"rise\":\"ContentBox_rise__gF3YZ\",\"tables\":\"ContentBox_tables__2AEgk\",\"buttons\":\"ContentBox_buttons__kw__k\",\"active\":\"ContentBox_active__B3hh9\",\"wrapper\":\"ContentBox_wrapper__3gVdS\",\"battingTable\":\"ContentBox_battingTable__YCF9J\",\"pitchingTable\":\"ContentBox_pitchingTable__2Z97q\",\"catchingTable\":\"ContentBox_catchingTable__22VYg\",\"backgroundChange\":\"ContentBox_backgroundChange__DBrqH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"calendar\":\"ContentCalendar_calendar__2Et8d\",\"wrapper\":\"ContentCalendar_wrapper__1e6fH\",\"list\":\"ContentCalendar_list__1nVJw\",\"item\":\"ContentCalendar_item__1rAtx\",\"arrow\":\"ContentCalendar_arrow__3JdAd\",\"hidden\":\"ContentCalendar_hidden__2ejaU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"camerasContainer\":\"CameraList_camerasContainer__2GFmj\",\"camera\":\"CameraList_camera__2IbY_\",\"active\":\"CameraList_active__2P1Yl\",\"selected\":\"CameraList_selected__24gjB\",\"modesList\":\"CameraList_modesList__3Vz-d\",\"activeCameraBtn\":\"CameraList_activeCameraBtn__ZZOJA\",\"activeMode\":\"CameraList_activeMode__1uc2F\",\"oneCamera\":\"CameraList_oneCamera__37f7P\",\"fourCameras\":\"CameraList_fourCameras__3JDvX\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"video\":\"PitchVideo_video__lgHWj\",\"topLeftVideo\":\"PitchVideo_topLeftVideo__1V6u8\",\"topRightVideo\":\"PitchVideo_topRightVideo__sGmly\",\"bottomVideo\":\"PitchVideo_bottomVideo__3LCJP\",\"YTContainer\":\"PitchVideo_YTContainer__2mZfP\",\"dnone\":\"PitchVideo_dnone__zoIOf\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"plays\":\"Plays_plays__2Wbce\",\"pitch\":\"Plays_pitch__2z2SM\",\"videosGrid\":\"Plays_videosGrid__2L1bP\",\"hitting\":\"Plays_hitting__3l5ZI\",\"running\":\"Plays_running__1JcG6\",\"playsNoVideo\":\"Plays_playsNoVideo__1qgBM\",\"landscapeDisplayNone\":\"Plays_landscapeDisplayNone__1US0i\",\"onlyMobileLandscape\":\"Plays_onlyMobileLandscape__rEH3O\",\"arrowWrapper\":\"Plays_arrowWrapper__1btVl\",\"leftArrow\":\"Plays_leftArrow__1phb5\",\"rightArrow\":\"Plays_rightArrow__2b2in\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"selections\":\"HeaderSelections_selections__3denE\",\"types\":\"HeaderSelections_types__2qkhc\",\"teamName\":\"HeaderSelections_teamName__3rNFj\",\"years\":\"HeaderSelections_years__1scrf\",\"active\":\"HeaderSelections_active__3yTbv\",\"bottom\":\"HeaderSelections_bottom__W9IQX\",\"batting\":\"HeaderSelections_batting__3nxoe\",\"gameTypes\":\"HeaderSelections_gameTypes__c7nVn\",\"filterFieldWrapper\":\"HeaderSelections_filterFieldWrapper__329fn\",\"mobileListTypesDropdown\":\"HeaderSelections_mobileListTypesDropdown__2TPEb\",\"mobileTableModesDropdown\":\"HeaderSelections_mobileTableModesDropdown__2Yuuo\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"ContentPlayerTable_wrapper__2KNxC\",\"tableHeader\":\"ContentPlayerTable_tableHeader__2gYfE\",\"tableRow\":\"ContentPlayerTable_tableRow__1plxA\",\"fullName\":\"ContentPlayerTable_fullName__3EZQK\",\"teamNames\":\"ContentPlayerTable_teamNames__2naJI\",\"tall\":\"ContentPlayerTable_tall__2uEX_\",\"wide2\":\"ContentPlayerTable_wide2__2h1cD\",\"wide2_5\":\"ContentPlayerTable_wide2_5__Gc1Si\",\"wide3\":\"ContentPlayerTable_wide3__3zC6J\",\"wider\":\"ContentPlayerTable_wider__2sE5e\",\"pos\":\"ContentPlayerTable_pos__3KKpa\",\"rows\":\"ContentPlayerTable_rows__1olGM\",\"mobileWrapper\":\"ContentPlayerTable_mobileWrapper__1eXRX\",\"fullHeader\":\"ContentPlayerTable_fullHeader__3MGkI\",\"leftHeader\":\"ContentPlayerTable_leftHeader__26Y1y\",\"rightHeader\":\"ContentPlayerTable_rightHeader__qlsTS\",\"sides\":\"ContentPlayerTable_sides__2hg94\",\"leftRows\":\"ContentPlayerTable_leftRows__3O2ak\",\"rightRows\":\"ContentPlayerTable_rightRows__335uB\",\"widthAuto\":\"ContentPlayerTable_widthAuto__vRz4J\",\"noPlayersFound\":\"ContentPlayerTable_noPlayersFound__3OHyA\",\"contentPlayerFilterFieldWrapper\":\"ContentPlayerTable_contentPlayerFilterFieldWrapper__3aTds\",\"mobileHeaderTeamDropdown\":\"ContentPlayerTable_mobileHeaderTeamDropdown__3NZFv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"selections\":\"HeaderSelections_selections__80Xyi\",\"playerInfo\":\"HeaderSelections_playerInfo__1PuKO\",\"portrait\":\"HeaderSelections_portrait__2YNEV\",\"default\":\"HeaderSelections_default__9892W\",\"fullName\":\"HeaderSelections_fullName__22ntq\",\"years\":\"HeaderSelections_years__22YN6\",\"active\":\"HeaderSelections_active__2z3cL\",\"bottom\":\"HeaderSelections_bottom__2ml5f\",\"teamsSelector\":\"HeaderSelections_teamsSelector__2rDeZ\",\"dropWrapper\":\"HeaderSelections_dropWrapper__13Cml\",\"mobileTableModesDropdown\":\"HeaderSelections_mobileTableModesDropdown__2Z1Dl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dropdownWrapper\":\"InfoDropdown_dropdownWrapper__2TgQQ\",\"mobileLandscapeVisible\":\"InfoDropdown_mobileLandscapeVisible__16fIf\",\"infoDropdown\":\"InfoDropdown_infoDropdown__2aSWt\",\"infoPanel\":\"InfoDropdown_infoPanel__3ULY-\",\"popUp\":\"InfoDropdown_popUp__3o2qS\",\"landscapeWrapper\":\"InfoDropdown_landscapeWrapper__2r9y7\",\"onlyMobilePortrait\":\"InfoDropdown_onlyMobilePortrait__1c4hz\",\"onlyMobileLandscape\":\"InfoDropdown_onlyMobileLandscape__1SlHh\",\"scoresWrapper\":\"InfoDropdown_scoresWrapper__1g4Gs\",\"scoresListWrapper\":\"InfoDropdown_scoresListWrapper__2XxTa\",\"arrowGroup\":\"InfoDropdown_arrowGroup__1CoqZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"outerWrapper\":\"PlaysField_outerWrapper__3pNee\",\"field\":\"PlaysField_field__weZY1\",\"strikeBallWrapper\":\"PlaysField_strikeBallWrapper__lo9yf\",\"grid\":\"PlaysField_grid__mw5B7\",\"ball\":\"PlaysField_ball__1lirI\",\"shadow\":\"PlaysField_shadow__2riJr\",\"onTop\":\"PlaysField_onTop__31lPH\",\"top\":\"PlaysField_top__36dQY\",\"releaseData\":\"PlaysField_releaseData__23ImS\",\"speedData\":\"PlaysField_speedData__AEEei\",\"regularValue\":\"PlaysField_regularValue__39ncs\",\"subHeader\":\"PlaysField_subHeader__rfnQe\",\"plateTitle\":\"PlaysField_plateTitle__1x7q_\",\"plateMobileHeader\":\"PlaysField_plateMobileHeader__2kw2e\",\"releaseSpeed\":\"PlaysField_releaseSpeed__2k3Pj\",\"releaseValue\":\"PlaysField_releaseValue__3XHIX\",\"regularMobileValue\":\"PlaysField_regularMobileValue__38Iak\",\"dnone\":\"PlaysField_dnone__2COPR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"graphWrapper\":\"HitsAnglesGraph_graphWrapper__2vt16\",\"graph\":\"HitsAnglesGraph_graph__7z2lt\",\"title\":\"HitsAnglesGraph_title__sWGqY\",\"leftValues\":\"HitsAnglesGraph_leftValues__28zq8\",\"footerText\":\"HitsAnglesGraph_footerText__2M7Dh\",\"mobileTitle\":\"HitsAnglesGraph_mobileTitle__1s7ZV\",\"animated\":\"HitsAnglesGraph_animated__PDk1x\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"graphWrapper\":\"HitsAnglesGraph_graphWrapper__1FAzH\",\"graph\":\"HitsAnglesGraph_graph__2HBQZ\",\"title\":\"HitsAnglesGraph_title__93n8l\",\"leftValues\":\"HitsAnglesGraph_leftValues__3McYT\",\"footerText\":\"HitsAnglesGraph_footerText__22cSm\",\"mobileTitle\":\"HitsAnglesGraph_mobileTitle__3gPPv\",\"animated\":\"HitsAnglesGraph_animated__1LvwR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dropdownWrapper\":\"Dropdown_dropdownWrapper__bhEPr\",\"title\":\"Dropdown_title__2HWhh\",\"searchFieldWrapper\":\"Dropdown_searchFieldWrapper__12rET\",\"searchField\":\"Dropdown_searchField__2viPc\",\"listWrapper\":\"Dropdown_listWrapper__Jvpvi\",\"popUp\":\"Dropdown_popUp__3wYrQ\",\"list\":\"Dropdown_list__1_9oh\",\"active\":\"Dropdown_active__VyXl6\",\"disabled\":\"Dropdown_disabled__2i1rG\",\"desktopDNone\":\"Dropdown_desktopDNone__2AeCD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"graphics\":\"ContentGraphics_graphics__20CrF\",\"videoTab\":\"ContentGraphics_videoTab__1OMNR\",\"mobileLandscapeVideo\":\"ContentGraphics_mobileLandscapeVideo__323Ow\",\"landscapeDisplayNone\":\"ContentGraphics_landscapeDisplayNone__1ooqr\",\"portraitDisplayNone\":\"ContentGraphics_portraitDisplayNone__1URnl\",\"landscapeScoresWrapper\":\"ContentGraphics_landscapeScoresWrapper__3hGrJ\",\"scoresListWrapper\":\"ContentGraphics_scoresListWrapper__gwqGQ\",\"onlyMobileLandscape\":\"ContentGraphics_onlyMobileLandscape__2ShVx\",\"verticalEvents\":\"ContentGraphics_verticalEvents__1rDio\",\"withMobileTimeline\":\"ContentGraphics_withMobileTimeline__5OQb2\",\"displayNone\":\"ContentGraphics_displayNone__3_3Rd\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loader\":\"Loader_loader__LzHrJ\",\"leaf\":\"Loader_leaf__1puT3\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dropdownWrapper\":\"Dropdown_dropdownWrapper__1Jfid\",\"title\":\"Dropdown_title__20KZ0\",\"searchFieldWrapper\":\"Dropdown_searchFieldWrapper__NLwOI\",\"searchField\":\"Dropdown_searchField__3TZhd\",\"listWrapper\":\"Dropdown_listWrapper__3lXds\",\"popUp\":\"Dropdown_popUp__3azkV\",\"list\":\"Dropdown_list__1VR1X\",\"active\":\"Dropdown_active__1KKuU\",\"listItem\":\"Dropdown_listItem__1gj1-\",\"btnWrapper\":\"Dropdown_btnWrapper__3bI-t\",\"okBtn\":\"Dropdown_okBtn__7Ice1\",\"disabled\":\"Dropdown_disabled__2eFfU\",\"desktopDNone\":\"Dropdown_desktopDNone__mnUbc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"mobileWrapper\":\"ContentMobileTable_mobileWrapper__1PH9G\",\"fullHeader\":\"ContentMobileTable_fullHeader__2LGmW\",\"leftHeader\":\"ContentMobileTable_leftHeader__K-S2g\",\"years\":\"ContentMobileTable_years__2k83C\",\"league\":\"ContentMobileTable_league__2bShs\",\"game\":\"ContentMobileTable_game__2Q4ME\",\"rightHeader\":\"ContentMobileTable_rightHeader__1FnnX\",\"wider\":\"ContentMobileTable_wider__3hg5M\",\"sides\":\"ContentMobileTable_sides__2JnSx\",\"leftRows\":\"ContentMobileTable_leftRows__pPW6h\",\"tableRow\":\"ContentMobileTable_tableRow__1KoI5\",\"date\":\"ContentMobileTable_date__9G7Xv\",\"teamNames\":\"ContentMobileTable_teamNames__1bUYG\",\"fullName\":\"ContentMobileTable_fullName__38R_j\",\"tableFooter\":\"ContentMobileTable_tableFooter__g35Kx\",\"rightRows\":\"ContentMobileTable_rightRows__1WcCD\",\"arrows\":\"ContentMobileTable_arrows__2tCtC\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"VideoOptions_wrapper__1TUOB\",\"videoOptions\":\"VideoOptions_videoOptions__1DTuk\",\"modeList\":\"VideoOptions_modeList__28Mz7\",\"active\":\"VideoOptions_active__1bRhd\",\"effectsWrapper\":\"VideoOptions_effectsWrapper__3LgEX\",\"speedSelectorWrapper\":\"VideoOptions_speedSelectorWrapper__294Fl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"leaguesWrapper\":\"HeaderLeagues_leaguesWrapper__2hrVF\",\"leagues\":\"HeaderLeagues_leagues__2bslM\",\"disabled\":\"HeaderLeagues_disabled__hMDma\",\"league\":\"HeaderLeagues_league__CYIHP\",\"active\":\"HeaderLeagues_active__3g18h\",\"colorTransition\":\"HeaderLeagues_colorTransition__Kb7-I\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"replace\":\"ContentCardReplacement_replace__1ZLTF\",\"noVideo\":\"ContentCardReplacement_noVideo__3KKfd\",\"title\":\"ContentCardReplacement_title__jMco2\",\"text\":\"ContentCardReplacement_text__1ACdQ\",\"textRow\":\"ContentCardReplacement_textRow__PRdAK\",\"leftSide\":\"ContentCardReplacement_leftSide__3zKwX\",\"rightSide\":\"ContentCardReplacement_rightSide__3FgvP\",\"textBold\":\"ContentCardReplacement_textBold__2Kgae\",\"portrait\":\"ContentCardReplacement_portrait__3ydDI\",\"default\":\"ContentCardReplacement_default__IF7hc\",\"textAlignCenter\":\"ContentCardReplacement_textAlignCenter__33RCO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"content\":\"Content_content__2eDm_\",\"innerContainer\":\"Content_innerContainer__29S9x\",\"playerChr\":\"Content_playerChr__lc2Re\",\"mobilePlayerChr\":\"Content_mobilePlayerChr__m110m\",\"fullName\":\"Content_fullName__3q2Hu\",\"playerInfo\":\"Content_playerInfo__1-p1V\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"BattersTable_wrapper__1KdJ1\",\"row\":\"BattersTable_row__xFJQV\",\"header\":\"BattersTable_header__85SGY\",\"name\":\"BattersTable_name__3OLbV\",\"headerCell\":\"BattersTable_headerCell__1zU7P\",\"active\":\"BattersTable_active__rG-X4\",\"value\":\"BattersTable_value__kVRzB\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"graph\":\"FrequencySpeedGraph_graph__2PMOQ\",\"bottomNumber\":\"FrequencySpeedGraph_bottomNumber__2dsl9\",\"innerValue\":\"FrequencySpeedGraph_innerValue__3wWyJ\",\"innerText\":\"FrequencySpeedGraph_innerText__FKmHq\",\"rightTextTitle\":\"FrequencySpeedGraph_rightTextTitle__1TkLR\",\"sideTitle\":\"FrequencySpeedGraph_sideTitle__12paU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"graph\":\"FrequencySpeedGraph_graph__2vNSl\",\"bottomNumber\":\"FrequencySpeedGraph_bottomNumber__31ueg\",\"innerValue\":\"FrequencySpeedGraph_innerValue__3WtXS\",\"innerText\":\"FrequencySpeedGraph_innerText__s5jXU\",\"rightTextTitle\":\"FrequencySpeedGraph_rightTextTitle__3rE_Z\",\"sideTitle\":\"FrequencySpeedGraph_sideTitle__17o_i\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"leaguesWrapper\":\"HeaderLeagues_leaguesWrapper__3LPNG\",\"leagues\":\"HeaderLeagues_leagues__EnrwE\",\"league\":\"HeaderLeagues_league__M1Wwt\",\"active\":\"HeaderLeagues_active__1Hj5S\",\"colorTransition\":\"HeaderLeagues_colorTransition__1ICYe\",\"lightGray\":\"HeaderLeagues_lightGray__2j7Y4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"leaguesWrapper\":\"HeaderLeagues_leaguesWrapper__ULDmm\",\"leagues\":\"HeaderLeagues_leagues__2-dGt\",\"league\":\"HeaderLeagues_league__32vZm\",\"active\":\"HeaderLeagues_active__32qZi\",\"colorTransition\":\"HeaderLeagues_colorTransition__yLkOC\",\"lightGray\":\"HeaderLeagues_lightGray__2h0uJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"fieldWrapper\":\"PitchesTrajectories_fieldWrapper__3QKCx\",\"field\":\"PitchesTrajectories_field__BhGpm\",\"canvas\":\"PitchesTrajectories_canvas__1s7qy\",\"optionsBarWrapper\":\"PitchesTrajectories_optionsBarWrapper__1jR0Y\",\"optionsBar\":\"PitchesTrajectories_optionsBar__1pp4S\",\"active\":\"PitchesTrajectories_active__m0Zdo\",\"info\":\"PitchesTrajectories_info__3GfJi\",\"list\":\"PitchesTrajectories_list__1JTki\",\"subHeader\":\"PitchesTrajectories_subHeader__294cx\",\"infoItem\":\"PitchesTrajectories_infoItem__23cAO\",\"infoTitle\":\"PitchesTrajectories_infoTitle__Rxzxx\",\"infoValue\":\"PitchesTrajectories_infoValue__3bEgL\",\"rightArrowWrapper\":\"PitchesTrajectories_rightArrowWrapper__2k0MU\",\"leftArrowWrapper\":\"PitchesTrajectories_leftArrowWrapper__2OLEd\",\"tooltip\":\"PitchesTrajectories_tooltip__3Skzj\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"fieldWrapper\":\"PitchesTrajectories_fieldWrapper__3afRR\",\"field\":\"PitchesTrajectories_field__2bHXB\",\"canvas\":\"PitchesTrajectories_canvas__2kqKO\",\"optionsBarWrapper\":\"PitchesTrajectories_optionsBarWrapper__KkJjV\",\"optionsBar\":\"PitchesTrajectories_optionsBar__1lnLP\",\"active\":\"PitchesTrajectories_active__2c3Tg\",\"info\":\"PitchesTrajectories_info__1L-qG\",\"list\":\"PitchesTrajectories_list__4MtDw\",\"subHeader\":\"PitchesTrajectories_subHeader__wPkuM\",\"infoItem\":\"PitchesTrajectories_infoItem__3uS5f\",\"infoTitle\":\"PitchesTrajectories_infoTitle__HJCyv\",\"infoValue\":\"PitchesTrajectories_infoValue__1q8Zv\",\"rightArrowWrapper\":\"PitchesTrajectories_rightArrowWrapper__1soKx\",\"leftArrowWrapper\":\"PitchesTrajectories_leftArrowWrapper__3cqHN\",\"tooltip\":\"PitchesTrajectories_tooltip__204PJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"fieldWrapper\":\"PitchesTrajectories_fieldWrapper__2xgAd\",\"field\":\"PitchesTrajectories_field__3aSAa\",\"canvas\":\"PitchesTrajectories_canvas__3an97\",\"optionsBarWrapper\":\"PitchesTrajectories_optionsBarWrapper__3E736\",\"optionsBar\":\"PitchesTrajectories_optionsBar__2n3Ap\",\"active\":\"PitchesTrajectories_active__V5tHs\",\"info\":\"PitchesTrajectories_info__L3aFE\",\"list\":\"PitchesTrajectories_list__1CKwU\",\"subHeader\":\"PitchesTrajectories_subHeader__yWAVf\",\"infoItem\":\"PitchesTrajectories_infoItem__pkqhR\",\"infoTitle\":\"PitchesTrajectories_infoTitle__XF3eZ\",\"infoValue\":\"PitchesTrajectories_infoValue__1K7AT\",\"rightArrowWrapper\":\"PitchesTrajectories_rightArrowWrapper__2Gt80\",\"leftArrowWrapper\":\"PitchesTrajectories_leftArrowWrapper__3ZuDq\",\"tooltip\":\"PitchesTrajectories_tooltip__3i1yh\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"rectangles\":\"Bases_rectangles__3qZ9M\",\"absolute\":\"Bases_absolute__30Bi9\",\"topRectangle\":\"Bases_topRectangle__XcSG7\",\"leftRectangle\":\"Bases_leftRectangle__OYfl-\",\"rightRectangle\":\"Bases_rightRectangle__2eBsg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"TimeDynamicCheckbox_wrapper__2RCmn\",\"vertical\":\"TimeDynamicCheckbox_vertical__cYFZS\",\"option\":\"TimeDynamicCheckbox_option__1QH8-\",\"active\":\"TimeDynamicCheckbox_active__28FHD\",\"inActive\":\"TimeDynamicCheckbox_inActive__2hZRj\",\"children\":\"TimeDynamicCheckbox_children__adhEL\",\"lastListItem\":\"TimeDynamicCheckbox_lastListItem__2doOm\",\"whiteColor\":\"TimeDynamicCheckbox_whiteColor__2wJW4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"selections\":\"HeaderSelections_selections__2IBoJ\",\"years\":\"HeaderSelections_years__YHhn7\",\"types\":\"HeaderSelections_types__2Yrwr\",\"modeLinks\":\"HeaderSelections_modeLinks__2J20f\",\"contentTeamWrapper\":\"HeaderSelections_contentTeamWrapper__3VmoN\",\"contentGridCalendarWrapper\":\"HeaderSelections_contentGridCalendarWrapper__24JHn\",\"active\":\"HeaderSelections_active__1YPLp\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"leaguesWrapper\":\"HeaderLeagues_leaguesWrapper__3IeOp\",\"leagues\":\"HeaderLeagues_leagues__398u4\",\"league\":\"HeaderLeagues_league__3drRh\",\"active\":\"HeaderLeagues_active__19ouO\",\"colorTransition\":\"HeaderLeagues_colorTransition__2tiVg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"mobileHeader\":\"ContentMobileHeader_mobileHeader__3KHQV\",\"tableModes\":\"ContentMobileHeader_tableModes__UFSgH\",\"active\":\"ContentMobileHeader_active__1PZ4d\",\"linkWrapper\":\"ContentMobileHeader_linkWrapper__2V-Hc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"portraitTextWrapper\":\"ContentCardSimple_portraitTextWrapper__2W1OU\",\"portrait\":\"ContentCardSimple_portrait__3rAVb\",\"default\":\"ContentCardSimple_default__1S7TQ\",\"text\":\"ContentCardSimple_text__2XSF6\",\"rectanglesEllipsesWrapper\":\"ContentCardSimple_rectanglesEllipsesWrapper__CKs7j\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dropdownWrapper\":\"VideoSpeedDropdown_dropdownWrapper__1yr9L\",\"title\":\"VideoSpeedDropdown_title__2cxIY\",\"searchFieldWrapper\":\"VideoSpeedDropdown_searchFieldWrapper__1I_pE\",\"searchField\":\"VideoSpeedDropdown_searchField__3bxZ7\",\"list\":\"VideoSpeedDropdown_list__1ydHK\",\"popUp\":\"VideoSpeedDropdown_popUp__2Gw3z\",\"active\":\"VideoSpeedDropdown_active__2utS4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"OptionsToggler_wrapper__37BEw\",\"vertical\":\"OptionsToggler_vertical__R5kDc\",\"option\":\"OptionsToggler_option__1X_py\",\"active\":\"OptionsToggler_active__2Iczr\",\"children\":\"OptionsToggler_children__2HnZ6\",\"lastListItem\":\"OptionsToggler_lastListItem__1XGsi\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"MobileScrollingWrapper_wrapper__2QPQ2\",\"innerWrapper\":\"MobileScrollingWrapper_innerWrapper__3hlxI\",\"arrowBtn\":\"MobileScrollingWrapper_arrowBtn__1gOj3\",\"leftArrowBtn\":\"MobileScrollingWrapper_leftArrowBtn__1FXyi\",\"rightArrowBtn\":\"MobileScrollingWrapper_rightArrowBtn__34IzT\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"rectText\":\"Rects_rectText__jefwa\",\"score\":\"Rects_score__sybvh\",\"red\":\"Rects_red__1IeC4\",\"blue\":\"Rects_blue__3zRnD\",\"green\":\"Rects_green__L2PdY\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"teamNames\":\"HeaderTeams_teamNames__3NHF8\",\"guests\":\"HeaderTeams_guests__XgVAs\",\"owners\":\"HeaderTeams_owners__1Qkm8\",\"active\":\"HeaderTeams_active__1rM40\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"btn\":\"ForwardRepeat_btn__AoXxH\",\"unfilled\":\"ForwardRepeat_unfilled__1oqMk\",\"filled\":\"ForwardRepeat_filled__2a6IX\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"listItem\":\"ContentSituationsListItem_listItem__3jv3h\",\"dataAfter\":\"ContentSituationsListItem_dataAfter__2-SKE\",\"dataAfterNoVideo\":\"ContentSituationsListItem_dataAfterNoVideo__1ZvWH\",\"active\":\"ContentSituationsListItem_active__LYiBv\",\"backgroundChange\":\"ContentSituationsListItem_backgroundChange__2kojd\",\"dataBeforeNoVideo\":\"ContentSituationsListItem_dataBeforeNoVideo__1RmHl\",\"rise\":\"ContentSituationsListItem_rise__2MTRs\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"rectanglesEllipsesWrapper\":\"ContentCardComplexFooter_rectanglesEllipsesWrapper__1G2ep\",\"ellipses\":\"ContentCardComplexFooter_ellipses__3msXU\",\"text\":\"ContentCardComplexFooter_text__2nX6u\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"ContentPlayersTable_wrapper__24uH6\",\"table\":\"ContentPlayersTable_table__VvYVS\",\"tableHeader\":\"ContentPlayersTable_tableHeader__3llkA\",\"rows\":\"ContentPlayersTable_rows__3SKT-\",\"tableRow\":\"ContentPlayersTable_tableRow__4F3qQ\",\"withDate\":\"ContentPlayersTable_withDate__2ZhmH\",\"linkWrapper\":\"ContentPlayersTable_linkWrapper__1hfqH\",\"underlineHover\":\"ContentPlayersTable_underlineHover__3QRbJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"ContentGamesTable_wrapper__3K_TO\",\"table\":\"ContentGamesTable_table__3H6lR\",\"tableHeader\":\"ContentGamesTable_tableHeader__1YeUO\",\"rows\":\"ContentGamesTable_rows__1hgSN\",\"tableRow\":\"ContentGamesTable_tableRow__3_9XS\",\"withDate\":\"ContentGamesTable_withDate__1OW1L\",\"linkWrapper\":\"ContentGamesTable_linkWrapper__3aYxF\",\"underlineHover\":\"ContentGamesTable_underlineHover__3MAHF\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"graphsHeader\":\"GraphsHeader_graphsHeader__1yB3f\",\"header\":\"GraphsHeader_header__Rtw6H\",\"title\":\"GraphsHeader_title__1R1Lu\",\"highTitle\":\"GraphsHeader_highTitle__f7j-P\",\"datasetBtn\":\"GraphsHeader_datasetBtn__2b1Hg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"graphsHeader\":\"GraphsHeader_graphsHeader__J__M4\",\"header\":\"GraphsHeader_header___zrHT\",\"title\":\"GraphsHeader_title__1pUDT\",\"highTitle\":\"GraphsHeader_highTitle__nLQjd\",\"datasetBtn\":\"GraphsHeader_datasetBtn__2iPtJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"situationsList\":\"FiltersSituationsList_situationsList__3xmpy\",\"hidden\":\"FiltersSituationsList_hidden__2m4De\",\"active\":\"FiltersSituationsList_active__1ZQX5\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"leftLogo\":\"HeaderLogo_leftLogo__qxUmA\",\"rightLogo\":\"HeaderLogo_rightLogo__1Gm27\",\"leftLogoText\":\"HeaderLogo_leftLogoText__2FJfy\",\"rightLogoText\":\"HeaderLogo_rightLogoText__39UA2\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"btn\":\"PlayerFilterField_btn__1W-pq\",\"filterPlayerField\":\"PlayerFilterField_filterPlayerField__2V4EX\",\"filterFieldsWrapper\":\"PlayerFilterField_filterFieldsWrapper__2LemL\",\"noPlayerFiltered\":\"PlayerFilterField_noPlayerFiltered__ajk2T\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"body\":\"ContentCardComplexBody_body__2JuwD\",\"text\":\"ContentCardComplexBody_text__LIaR1\",\"bottom\":\"ContentCardComplexBody_bottom__1xtA7\",\"ellipses\":\"ContentCardComplexBody_ellipses__2ch1u\",\"topRight\":\"ContentCardComplexBody_topRight__OBAcE\",\"rects\":\"ContentCardComplexBody_rects__1aS_E\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"graphsHeader\":\"GraphsHeader_graphsHeader__Vysd-\",\"header\":\"GraphsHeader_header__1vbkA\",\"title\":\"GraphsHeader_title__15y7v\",\"highTitle\":\"GraphsHeader_highTitle__33f9N\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"cell\":\"SortField_cell__2JlRt\",\"active\":\"SortField_active__2pj0i\",\"bgShow\":\"SortField_bgShow__ZqNIW\",\"arrows\":\"SortField_arrows__2nk_4\",\"defaultCursor\":\"SortField_defaultCursor__2cd4x\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dropdownWrapper\":\"FilterField_dropdownWrapper__2b2mf\",\"filterField\":\"FilterField_filterField__dFhzt\",\"mobile\":\"FilterField_mobile__Tlo5y\",\"list\":\"FilterField_list__3_Bc6\",\"popUp\":\"FilterField_popUp__3GmLt\",\"active\":\"FilterField_active__OwAIG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"legendWrapper\":\"Legend_legendWrapper__1VNzY\",\"legendItem\":\"Legend_legendItem__2J2qV\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"legendWrapper\":\"Legend_legendWrapper__3i0fC\",\"legendItem\":\"Legend_legendItem__GVn4d\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"navbar\":\"NavBar_navbar__1YhL4\",\"active\":\"NavBar_active__3Tb7-\",\"landscapeDisplayNone\":\"NavBar_landscapeDisplayNone__YZfwn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"scoresTable\":\"HeaderScoresList_scoresTable__1Cz6Z\",\"hidden\":\"HeaderScoresList_hidden__3XF5B\",\"active\":\"HeaderScoresList_active__2Ia6E\",\"inActiveList\":\"HeaderScoresList_inActiveList__3WfF-\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"arrowBtn\":\"Arrow_arrowBtn__3lE-7\",\"arrowImg\":\"Arrow_arrowImg__2WIE7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"divider\":\"VerticalScrollDivider_divider__1qaTY\",\"left\":\"VerticalScrollDivider_left__3n0Nh\",\"right\":\"VerticalScrollDivider_right__3LiQO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"filtersContainer\":\"Filters_filtersContainer__22yQS\",\"filters\":\"Filters_filters__fdX7f\",\"situationsWrapper\":\"Filters_situationsWrapper__wjpZu\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header\":\"ContentCardComplexHeader_header__3oSFr\",\"portraitTextWrapper\":\"ContentCardComplexHeader_portraitTextWrapper__37zkZ\",\"topRight\":\"ContentCardComplexHeader_topRight__12sAB\",\"rects\":\"ContentCardComplexHeader_rects__1Yb-_\",\"portrait\":\"ContentCardComplexHeader_portrait__3-Xex\",\"default\":\"ContentCardComplexHeader_default__1qrI2\",\"text\":\"ContentCardComplexHeader_text__XZeiy\",\"bottom\":\"ContentCardComplexHeader_bottom__1oOx4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"selections\":\"HeaderSelections_selections__2LSdg\",\"teamInfo\":\"HeaderSelections_teamInfo__10-ZG\",\"teamName\":\"HeaderSelections_teamName__16Qbe\",\"imgWrapper\":\"HeaderSelections_imgWrapper__3LIjn\",\"imgLoader\":\"HeaderSelections_imgLoader__2WD4Z\",\"teamImg\":\"HeaderSelections_teamImg__3tQfp\",\"years\":\"HeaderSelections_years__3fL9t\",\"linksWrapper\":\"HeaderSelections_linksWrapper__1Zace\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"headerTabs\":\"HeaderTabs_headerTabs__1kbEq\",\"active\":\"HeaderTabs_active__2ndFL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"playerName\":\"ContentPitcher_playerName__1vcVT\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"ContentBoxFooter_footer__1y203\",\"footerContainer\":\"ContentBoxFooter_footerContainer__3znsv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"modalCameraSelectorWrapper\":\"ModalCameraSelector_modalCameraSelectorWrapper__1lapJ\",\"modalCameraSelectorInnerWrapper\":\"ModalCameraSelector_modalCameraSelectorInnerWrapper__2wrZz\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"controls\":\"ContentControls_controls__ybFmO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"playOnlineBtn\":\"PlayOnline_playOnlineBtn__2FNqR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"PlaysFooter_footer__2FElz\",\"active\":\"PlaysFooter_active__3P4iH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"ProgressBar_wrapper__ZyWqw\",\"progress\":\"ProgressBar_progress__33Q1C\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"graphsBlock\":\"GraphsBlock_graphsBlock__3tX3B\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"filterField\":\"ContentPlayerFilterField_filterField__2Ivue\",\"mobile\":\"ContentPlayerFilterField_mobile__OLr_7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"Content_wrapper__JWFW0\",\"youtubeFrame\":\"Content_youtubeFrame__1U_V3\",\"buttons\":\"Content_buttons__2tnqS\",\"eventsBtn\":\"Content_eventsBtn__1BvrP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"info\":\"HeaderInfo_info__nvS0u\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"btn\":\"CrossClose_btn__34bdt\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"togglerLabel\":\"SimpleToggler_togglerLabel__1dcxY\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"btn\":\"FirstLastMoment_btn__24lOv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"crossBtn\":\"Cross_crossBtn__3-Yro\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"playerName\":\"ContentCardTitle_playerName__1-LkV\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ellipses\":\"ContentCardSigns_ellipses__1Z4sG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ellipses\":\"BallsStrikes_ellipses__32pbz\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ellipses\":\"Outs_ellipses__fEhNy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"arrowWrapper\":\"SwitchArrow_arrowWrapper__3ZDDr\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"controlsWrapper\":\"ContentFooter_controlsWrapper__2sNgN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"UpDownArrow_wrapper__2ptal\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"SortArrows_wrapper__2tmud\",\"showing\":\"SortArrows_showing__3yFcA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"ThreeGraphsRow_wrapper__1WbT4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"table\":\"ContentBoxTable_table__1m4YJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"error\":\"ErrorLoader_error__2C2bM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"noDataFound\":\"NoDataMessage_noDataFound__2Kpwq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"content\":\"Content_content__HZpC8\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"headerContent\":\"Header_headerContent__KRMlN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header\":\"HeaderWrapper_header__11FQS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"headerContent\":\"Header_headerContent__TN-Gt\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ldsSpinner\":\"RoundLoader_ldsSpinner__37uft\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"content\":\"Content_content__3W61J\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"headerContent\":\"Header_headerContent__3Ruiy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"content\":\"Content_content__3Lqry\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"activeCell\":\"ActiveBodyCell_activeCell__2Yd1-\",\"bgShow\":\"ActiveBodyCell_bgShow__1IOpH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"headerContent\":\"Header_headerContent__1n_ck\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"graphRow\":\"PitcherContentGraphs_graphRow__3Ae-O\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"bannerWrapper\":\"PlayerStatsAnimationContext_bannerWrapper__1csCJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pitchesSpeedFieldWrapper\":\"PitchesSpeedField_pitchesSpeedFieldWrapper__12iAa\",\"pitchesByZoneThumb\":\"PitchesSpeedField_pitchesByZoneThumb__2V5iz\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"HitsAnglesGraphs_wrapper__1qybO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"graphRow\":\"BatterContentGraphs_graphRow__3I42d\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"HitsAnglesGraphs_wrapper__3mnK9\"};","import { Link, useLocation } from 'react-router-dom';\nimport cl from './NavBar.module.scss';\nimport { useSelector } from 'react-redux';\nimport classNames from 'classnames';\n\nconst ROUTES = {\n game: ['/game', '/game/'],\n games: ['/games', '/games/'],\n stats: ['/stats/player', '/stats/player/', '/stats/team', '/stats/team/']\n};\n\nconst NavBar = () => {\n const location = useLocation();\n\n const currentTab = useSelector(s => s.game.currentTab);\n\n const isLandscapeVideos = currentTab === 'videos' && location.pathname.includes('/game/');\n\n const getClass = name => (ROUTES[name].includes(location.pathname) ? cl.active : '');\n\n const wrapperClasses = classNames(cl.navbar, {\n [cl.landscapeDisplayNone]: isLandscapeVideos\n });\n return (\n \n );\n};\n\nexport default NavBar;\n","export const getSearchParam = param => new URL(window.location).searchParams.get(param);\n\nexport const setSearchParam = (param, value) => {\n const url = new URL(window.location);\n if (typeof param === 'string') {\n url.searchParams.set(param, value);\n } else {\n param.forEach(curParam => url.searchParams.set(curParam.param, curParam.value));\n }\n window.history.replaceState({}, '', url);\n};\n\nexport const getBeforeAfterFlags = (cards, innings) => {\n const result = { 0: { before: true } };\n for (let i = 0; i < cards.length; i++) {\n const { inning_number } = cards[i];\n const inning = innings[inning_number - 1];\n const { side } = cards[i];\n const {\n top_runs = 0,\n bot_runs = 0,\n top_hits = 0,\n bot_hits = 0,\n top_err = 0,\n bot_err = 0,\n top_lob = 0,\n bot_lob = 0\n } = inning;\n\n if (i === 0 && i === cards.length) {\n result[i] = {\n ...result[i],\n after: {\n runs: side === 'top' ? top_runs : bot_runs,\n hits: side === 'top' ? top_hits : bot_hits,\n err: side === 'top' ? top_err : bot_err,\n lob: side === 'top' ? top_lob : bot_lob\n }\n };\n continue;\n }\n\n if (\n i !== 0 &&\n (cards[i].inning_number !== cards[i - 1].inning_number || cards[i].side !== cards[i - 1].side)\n )\n result[i] = { before: true };\n\n if (\n i === cards.length - 1 ||\n cards[i].inning_number !== cards[i + 1].inning_number ||\n cards[i].side !== cards[i + 1].side\n ) {\n result[i] = {\n ...result[i],\n after: {\n runs: side === 'top' ? top_runs : bot_runs,\n hits: side === 'top' ? top_hits : bot_hits,\n err: side === 'top' ? top_err : bot_err,\n lob: side === 'top' ? top_lob : bot_lob\n }\n };\n }\n }\n\n return result;\n};\n\nexport const getShortName = (name, length) => (name.length > length ? name.slice(0, length - 1) + '…' : name);\n\nexport const getFixedNumber = (num, digits) => {\n let zeroString = '.';\n for (let i = 1; i <= digits; i++) zeroString += '0';\n\n return num.toFixed(digits).replace(zeroString, '');\n};\n\nexport const getObjectsSum = (obj1, obj2, ignoredKeys) => {\n const result = {};\n\n for (let key in obj1) {\n result[key] = ignoredKeys.includes(key) || obj1[key] === 'inf' ? obj1[key] : +obj1[key] + +obj2[key];\n }\n\n return result;\n};\n\nexport const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport const openFullscreen = element => {\n if (element.webkitRequestFullscreen) {\n element.webkitRequestFullscreen();\n } else if (element.webkitRequestFullscreen) {\n /* Safari */\n element.webkitRequestFullscreen();\n } else if (element.msRequestFullscreen) {\n /* IE11 */\n element.msRequestFullscreen();\n }\n};\n\nexport const closeFullscreen = () => {\n if (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement)\n document.exitFullscreen();\n};\n\nexport const isFullScreen = () => {\n const fullScreenElement =\n document.fullscreenElement ||\n document.webkitFullscreenElement ||\n document.mozFullScreenElement ||\n document.msFullscreenElement ||\n null;\n\n if (fullScreenElement === null) return false;\n return true;\n};\n\nexport const getFieldColor = dot =>\n ({\n H: '#1A4C96',\n B1: 'red',\n B2: 'green',\n B3: 'olive'\n }[dot]);\n\nexport const getChartColor = num =>\n ({\n '-1': 'lightgray',\n 1: '#1A4C96',\n 2: 'red',\n 3: 'green',\n 4: 'olive',\n 5: 'yellow',\n 6: 'purple',\n 7: 'lightgreen'\n }[num]);\n\nexport const getRndValue = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;\n\nexport const getPitchColorByName = name =>\n ({\n Undefined: '#BF9E56',\n Fastball: '#CE9587',\n Curveball: '#CBC8E5',\n Slider: '#EBE8B0',\n Changeup: '#9BCEA2',\n Subslider: '#B08194',\n Subfastball: '#B18FA1',\n 'All Pitches': '#1A4C96'\n }[name]);\n\nexport const getPitchСlassColorByName = name =>\n ({\n Fastball: '#ec9599',\n Breaking: '#92d4eb',\n Offspeed: '#c6dac7',\n '': '#BF9E56',\n 'All Pitches': '#1A4C96'\n }[name]);\n\nexport const getPitchСlassPrimaryColorByName = name =>\n ({\n // Fastball: '#ec9599',\n Fastball: '#D92B33',\n // Breaking: '#92d4eb',\n Breaking: '#24A8D7',\n // Offspeed: '#c6dac7'\n Offspeed: '#8DB58E'\n }[name]);\n\nexport const MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n];\n\nexport const getYears = () => {\n const YEARS = [];\n for (let year = 2000; year <= new Date().getFullYear(); year++) {\n YEARS.push(year);\n }\n\n return YEARS.reverse();\n};\n\nexport function HSVtoRGB(h, s, v) {\n var r, g, b, i, f, p, q, t;\n if (arguments.length === 1) {\n s = h.s;\n v = h.v;\n h = h.h;\n }\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n default:\n break;\n }\n return `rgb(${Math.round(r * 255)},${Math.round(g * 255)},${Math.round(b * 255)})`;\n}\n\nexport function propsAreEqual(prevProps, nextProps) {\n return JSON.stringify(prevProps) === JSON.stringify(nextProps);\n}\n","import React from 'react';\nimport { capitalizeFirstLetter } from 'utils';\n\nconst HeaderTabsButton = ({ item, handleClick, getClass }) => {\n const itemName = item === 'hit' ? 'hitting' : item === 'run' ? 'running' : item;\n\n return (\n
  • \n \n
  • \n );\n};\n\nexport default HeaderTabsButton;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './HeaderTabs.module.scss';\nimport HeaderTabsButton from './HeaderTabsButton';\n\nconst HeaderTabs = ({ currentTab, handleClick }) => {\n const isVideo = useSelector(state => state.game.isVideo);\n\n const tabsArr = isVideo ? ['box', 'videos', 'pitch', 'hit', 'run'] : ['box', 'plays'];\n\n const getClass = name =>\n currentTab === name ||\n (currentTab === 'plays' && name === 'pitch') ||\n (currentTab === 'pitch' && name === 'plays') ||\n (currentTab === 'videos' && name === 'plays' && !isVideo)\n ? cl.active\n : '';\n\n return (\n \n );\n};\n\nexport default HeaderTabs;\n","const defaultState = {\n innings: [],\n preview: {},\n inningNumber: 1,\n situations: ['All'],\n situationFilter: 'All',\n currentCard: {},\n currentTab: 'pitch',\n currentMoment: {},\n playersInfo: {},\n imagesData: {},\n filteredCards: [],\n playbackMode: 'pause',\n viewMode: 'mode-1',\n currentGameId: null,\n activeCardList: 'cards',\n\tboxData: {},\n boxActiveButton: 'guests',\n\tboxMode: 'Batting',\n isVideo: false,\n isBroadcast: false,\n\tmaxVideoMomentBroadcast: false,\n pitchState: 'Field',\n hitState: 'Field',\n runState: 'Field',\n errorMsg: null,\n playerCardFilter: '',\n playerCardFilterBy: 'batter',\n playerCardFilterFocused: false,\n videoPlaybackRate: 1,\n videoState: null,\n preferredVideoState: 2,\n isFilteredPlayer: true,\n isCameraSelector: false,\n moments: [],\n isFullscreen: false,\n videoCurrentTime: 0,\n videoLengthMode: 'Full',\n timelineSliderCoords: { x1: 0, x2: 100 },\n seekValue: null,\n isLastMomentMode: false,\n isRedLineDragging: false,\n timelineWidth: 825,\n fullTimelineWidth: 825,\n focus: 'list',\n isVideoEffects: false,\n listScrollTop: false\n};\n\nconst SET_FULL_DATA = 'SET_FULL_DATA';\nconst SET_INNING_NUMBER = 'SET_INNING_NUMBER';\nconst SET_SITUATIONS = 'SET_SITUATIONS';\nconst SET_SITUATION_FILTER = 'SET_SITUATION_FILTER';\nconst SET_CURRENT_CARD = 'SET_CURRENT_CARD';\nconst SET_CURRENT_TAB = 'SET_CURRENT_TAB';\nconst SET_CURRENT_MOMENT = 'SET_CURRENT_MOMENT';\nconst SET_PLAYERS_INFO = 'SET_PLAYERS_INFO';\nconst SET_IMAGES_DATA = 'SET_IMAGES_DATA';\nconst SET_FILTERED_CARDS = 'SET_FILTERED_CARDS';\nconst SET_PLAYBACK_MODE = 'SET_PLAYBACK_MODE';\nconst SET_VIEW_MODE = 'SET_VIEW_MODE';\nconst SET_CURRENT_GAME_ID = 'SET_CURRENT_GAME_ID';\nconst SET_ACTIVE_CARD_LIST = 'SET_ACTIVE_CARD_LIST';\nconst SET_BOX_DATA = 'SET_BOX_DATA';\nconst SET_BOX_ACTIVE_BUTTON = 'SET_BOX_ACTIVE_BUTTON';\nconst SET_BOX_MODE = 'SET_BOX_MODE';\nconst SET_IS_VIDEO = 'SET_IS_VIDEO';\nconst SET_IS_BROADCAST = 'SET_IS_BROADCAST';\nconst SET_MAX_VIDEO_MOMENT_BROADCAST = 'SET_MAX_VIDEO_MOMENT_BROADCAST';\nconst SET_PITCH_STATE = 'SET_PITCH_STATE';\nconst SET_HIT_STATE = 'SET_HIT_STATE';\nconst SET_RUN_STATE = 'SET_RUN_STATE';\nconst RESET_DATA = 'RESET_DATA';\nconst SET_ERROR_MSG = 'SET_ERROR_MSG';\nconst SET_PLAYER_CARD_FILTER = 'SET_PLAYER_CARD_FILTER';\nconst TOGGLE_PLAYER_CARD_FILTER_BY = 'TOGGLE_PLAYER_CARD_FILTER_BY';\nconst SET_PLAYER_CARD_FILTER_FOCUSED = 'SET_PLAYER_CARD_FILTER_FOCUSED';\nconst SET_VIDEO_PLAYBACK_RATE = 'SET_VIDEO_PLAYBACK_RATE';\nconst SET_VIDEO_STATE = 'SET_VIDEO_STATE';\nconst SET_PREFERRED_VIDEO_STATE = 'SET_PREFERRED_VIDEO_STATE';\nconst SET_IS_FILTERED_PLAYER = 'SET_IS_FILTERED_PLAYER';\nconst SET_IS_CAMERA_SELECTOR = 'SET_IS_CAMERA_SELECTOR';\nconst SET_MOMENTS = 'SET_MOMENTS';\nconst SET_IS_FULLSCREEN = 'SET_IS_FULLSCREEN';\nconst SET_VIDEO_CURRENT_TIME = 'SET_VIDEO_CURRENT_TIME';\nconst SET_VIDEO_LENGTH_MODE = 'SET_VIDEO_LENGTH_MODE';\nconst SET_TIMELINE_SLIDER_COORDS = 'SET_TIMELINE_SLIDER_COORDS';\nconst SET_SEEK_VALUE = 'SET_SEEK_VALUE';\nconst SET_IS_LAST_MOMENT_MODE = 'SET_IS_LAST_MOMENT_MODE';\nconst SET_IS_RED_LINE_DRAGGING = 'SET_IS_RED_LINE_DRAGGING';\nconst SET_TIMELINE_WIDTH = 'SET_TIMELINE_WIDTH';\nconst SET_FULL_TIMELINE_WIDTH = 'SET_FULL_TIMELINE_WIDTH';\nconst SET_FOCUS = 'SET_FOCUS';\nconst SET_IS_VIDEO_EFFECTS = 'SET_IS_VIDEO_EFFECTS';\nconst SET_LIST_SCROLL_TOP = 'SET_LIST_SCROLL_TOP';\n\nexport const gameReducer = (state = defaultState, action) => {\n switch (action.type) {\n case SET_FULL_DATA:\n return { ...state, innings: action.payload.innings, preview: action.payload.preview };\n case SET_INNING_NUMBER:\n return { ...state, inningNumber: action.payload };\n case SET_SITUATIONS:\n return { ...state, situations: action.payload };\n case SET_SITUATION_FILTER:\n return { ...state, situationFilter: action.payload };\n case SET_CURRENT_CARD:\n return { ...state, currentCard: action.payload };\n case SET_CURRENT_TAB:\n return { ...state, currentTab: action.payload };\n case SET_CURRENT_MOMENT:\n return { ...state, currentMoment: action.payload };\n case SET_PLAYERS_INFO:\n return { ...state, playersInfo: action.payload };\n case SET_IMAGES_DATA:\n return { ...state, imagesData: { ...state.imagesData, ...action.payload } };\n case SET_FILTERED_CARDS:\n return { ...state, filteredCards: action.payload };\n case SET_PLAYBACK_MODE:\n return { ...state, playbackMode: action.payload };\n case SET_VIEW_MODE:\n return { ...state, viewMode: action.payload };\n case SET_CURRENT_GAME_ID:\n return { ...state, currentGameId: action.payload };\n case SET_ACTIVE_CARD_LIST:\n return { ...state, activeCardList: action.payload };\n case SET_BOX_DATA:\n return { ...state, boxData: action.payload };\n case SET_BOX_ACTIVE_BUTTON:\n return { ...state, boxActiveButton: action.payload };\n case SET_BOX_MODE:\n return { ...state, boxMode: action.payload };\n case SET_IS_VIDEO:\n return { ...state, isVideo: action.payload };\n case SET_IS_BROADCAST:\n return { ...state, isBroadcast: action.payload };\n case SET_MAX_VIDEO_MOMENT_BROADCAST:\n return { ...state, maxVideoMomentBroadcast: action.payload };\n case SET_PITCH_STATE:\n return { ...state, pitchState: action.payload };\n case SET_HIT_STATE:\n return { ...state, hitState: action.payload };\n case SET_RUN_STATE:\n return { ...state, runState: action.payload };\n case RESET_DATA:\n return defaultState;\n case SET_ERROR_MSG:\n return { ...state, errorMsg: action.payload };\n case SET_PLAYER_CARD_FILTER:\n return { ...state, playerCardFilter: action.payload };\n case TOGGLE_PLAYER_CARD_FILTER_BY:\n return { ...state, playerCardFilterBy: state.playerCardFilterBy === 'pitcher' ? 'batter' : 'pitcher' };\n case SET_PLAYER_CARD_FILTER_FOCUSED:\n return { ...state, playerCardFilterFocused: action.payload };\n case SET_VIDEO_PLAYBACK_RATE:\n return { ...state, videoPlaybackRate: action.payload };\n case SET_VIDEO_STATE:\n return { ...state, videoState: action.payload };\n case SET_PREFERRED_VIDEO_STATE:\n return { ...state, preferredVideoState: action.payload };\n case SET_IS_FILTERED_PLAYER:\n return { ...state, isFilteredPlayer: action.payload };\n case SET_IS_CAMERA_SELECTOR:\n return { ...state, isCameraSelector: action.payload };\n case SET_MOMENTS:\n return { ...state, moments: action.payload };\n case SET_IS_FULLSCREEN:\n return { ...state, isFullscreen: action.payload };\n case SET_VIDEO_CURRENT_TIME:\n return { ...state, videoCurrentTime: action.payload };\n case SET_VIDEO_LENGTH_MODE:\n return { ...state, videoLengthMode: action.payload };\n case SET_TIMELINE_SLIDER_COORDS:\n return { ...state, timelineSliderCoords: action.payload };\n case SET_SEEK_VALUE:\n return { ...state, seekValue: action.payload };\n case SET_IS_LAST_MOMENT_MODE:\n return { ...state, isLastMomentMode: !state.isLastMomentMode };\n case SET_IS_RED_LINE_DRAGGING:\n return { ...state, isRedLineDragging: action.payload };\n case SET_TIMELINE_WIDTH:\n return { ...state, timelineWidth: action.payload };\n case SET_FULL_TIMELINE_WIDTH:\n return { ...state, fullTimelineWidth: action.payload };\n case SET_FOCUS:\n return { ...state, focus: action.payload };\n case SET_IS_VIDEO_EFFECTS:\n return { ...state, isVideoEffects: action.payload };\n case SET_LIST_SCROLL_TOP:\n return { ...state, listScrollTop: action.payload };\n default:\n return state;\n }\n};\n\nexport const setFullData = payload => ({ type: SET_FULL_DATA, payload });\nexport const setInningNumber = payload => ({ type: SET_INNING_NUMBER, payload });\nexport const setSituations = payload => ({ type: SET_SITUATIONS, payload });\nexport const setSituationFilter = payload => ({ type: SET_SITUATION_FILTER, payload });\nexport const setCurrentCard = payload => ({ type: SET_CURRENT_CARD, payload });\nexport const setCurrentTab = payload => ({ type: SET_CURRENT_TAB, payload });\nexport const setCurrentMoment = payload => ({ type: SET_CURRENT_MOMENT, payload });\nexport const setPlayersInfo = payload => ({ type: SET_PLAYERS_INFO, payload });\nexport const setImagesData = payload => ({ type: SET_IMAGES_DATA, payload });\nexport const setFilteredCards = payload => ({ type: SET_FILTERED_CARDS, payload });\nexport const setPlaybackMode = payload => ({ type: SET_PLAYBACK_MODE, payload });\nexport const setViewMode = payload => ({ type: SET_VIEW_MODE, payload });\nexport const setCurrentGameId = payload => ({ type: SET_CURRENT_GAME_ID, payload });\nexport const setActiveCardList = payload => ({ type: SET_ACTIVE_CARD_LIST, payload });\nexport const setBoxData = payload => ({ type: SET_BOX_DATA, payload });\nexport const setBoxActiveButton = payload => ({ type: SET_BOX_ACTIVE_BUTTON, payload });\nexport const setBoxMode = payload => ({ type: SET_BOX_MODE, payload });\nexport const setIsVideo = payload => ({ type: SET_IS_VIDEO, payload });\nexport const setIsBroadcast = payload => ({ type: SET_IS_BROADCAST, payload });\nexport const setMaxVideoMomentBroadcast = payload => ({ type: SET_MAX_VIDEO_MOMENT_BROADCAST, payload });\nexport const setPitchState = payload => ({ type: SET_PITCH_STATE, payload });\nexport const setHitState = payload => ({ type: SET_HIT_STATE, payload });\nexport const setRunState = payload => ({ type: SET_RUN_STATE, payload });\nexport const resetData = () => ({ type: RESET_DATA });\nexport const setErrorMsg = payload => ({ type: SET_ERROR_MSG, payload });\nexport const setPlayerCardFilter = payload => ({ type: SET_PLAYER_CARD_FILTER, payload });\nexport const togglePlayerCardFilterBy = () => ({ type: TOGGLE_PLAYER_CARD_FILTER_BY });\nexport const setPlayerCardFilterFocused = payload => ({ type: SET_PLAYER_CARD_FILTER_FOCUSED, payload });\nexport const setVideoPlaybackRate = payload => ({ type: SET_VIDEO_PLAYBACK_RATE, payload });\nexport const setVideoState = payload => ({ type: SET_VIDEO_STATE, payload });\nexport const setPreferredVideoState = payload => ({ type: SET_PREFERRED_VIDEO_STATE, payload });\nexport const setIsFilteredPlayer = payload => ({ type: SET_IS_FILTERED_PLAYER, payload });\nexport const setIsCameraSelector = payload => ({ type: SET_IS_CAMERA_SELECTOR, payload });\nexport const setMoments = payload => ({ type: SET_MOMENTS, payload });\nexport const setIsFullscreen = payload => ({ type: SET_IS_FULLSCREEN, payload });\nexport const setVideoCurrentTime = payload => ({ type: SET_VIDEO_CURRENT_TIME, payload });\nexport const setVideoLengthMode = payload => ({ type: SET_VIDEO_LENGTH_MODE, payload });\nexport const setTimelineSliderCoords = payload => ({ type: SET_TIMELINE_SLIDER_COORDS, payload });\nexport const setSeekValue = payload => ({ type: SET_SEEK_VALUE, payload });\nexport const setIsLastMomentMode = () => ({ type: SET_IS_LAST_MOMENT_MODE });\nexport const setIsRedLineDragging = () => ({ type: SET_IS_RED_LINE_DRAGGING });\nexport const setTimelineWidth = payload => ({ type: SET_TIMELINE_WIDTH, payload });\nexport const setFullTimelineWidth = payload => ({ type: SET_FULL_TIMELINE_WIDTH, payload });\nexport const setFocus = payload => ({ type: SET_FOCUS, payload });\nexport const setIsVideoEffects = payload => ({ type: SET_IS_VIDEO_EFFECTS, payload });\nexport const setListScrollTop = payload => ({ type: SET_LIST_SCROLL_TOP, payload });\n","import classNames from 'classnames';\n\nconst HeaderScoresListItem = ({ inning, inningNumber, maxInnings, cl, handleClick, currentTab }) => {\n const outerClasses = classNames({ [cl.active]: inning.number === inningNumber && currentTab !== 'box' });\n const innerClasses = classNames({ [cl.hidden]: inning['bottom/owners'] === undefined });\n\n const topScore = inning['top/guests'] ? inning.top_runs || 0 : 0;\n const botScore = inning['bottom/owners'] ? inning.bot_runs || 0 : 0;\n\n // Render main innings\n if (inning.number <= maxInnings) {\n return (\n
    \n {inning.number}\n {topScore}\n \n {botScore}\n \n
    \n );\n }\n\n // Render empty innings\n return (\n
    \n {inning.number}\n 0\n 0\n
    \n );\n};\n\nexport default HeaderScoresListItem;\n","import React, { forwardRef } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setCurrentCard, setPlaybackMode } from 'redux/gameReducer';\nimport cl from './HeaderScoresList.module.scss';\nimport HeaderScoresListItem from './HeaderScoresListItem';\nimport classNames from 'classnames';\n\nconst HeaderScoresList = forwardRef(({ innings, currentTab }, ref) => {\n const inningNumber = useSelector(state => state.game.inningNumber);\n const filteredCards = useSelector(state => state.game.filteredCards);\n const dispatch = useDispatch();\n const maxInnings = innings.length;\n const newInnings = innings.slice();\n\n if (maxInnings < 9) {\n for (let i = maxInnings + 1; i <= 9; i++) {\n newInnings.push({ number: i });\n }\n }\n\n const handleClick = (number, side) => () => {\n dispatch(setPlaybackMode('pause'));\n const newCurrentCard = filteredCards.find(card => card.inning_number === number && card.side === side);\n newCurrentCard && dispatch(setCurrentCard({ ...newCurrentCard, manualClick: false }));\n };\n\n const renderedInnings = newInnings.map(inning => (\n \n ));\n\n const listClasses = classNames(cl.scoresTable, { [cl.inActiveList]: currentTab === 'box' });\n return (\n \n );\n});\n\nexport default HeaderScoresList;\n","import { useMemo } from 'react';\n\nconst useSummaryRHE = innings =>\n useMemo(() => {\n const initialRHE = { bot_err: 0, top_err: 0, bot_hits: 0, bot_runs: 0, top_hits: 0, top_runs: 0 };\n const newInnings = innings.slice();\n\n return newInnings.reduce((sum, inning) => {\n Object.keys(sum).forEach(field => (sum[field] += inning[field] || 0));\n return sum;\n }, initialRHE);\n }, [innings]);\n\nexport default useSummaryRHE;\n","import React from 'react';\nimport cl from './HeaderInfo.module.scss';\nimport useSummaryRHE from 'hooks/useSummaryRHE';\n\nconst HeaderInfo = ({ innings }) => {\n const summaryRHE = useSummaryRHE(innings);\n\n return (\n
    \n
    \n R\n {summaryRHE.top_runs}\n {summaryRHE.bot_runs}\n
    \n
    \n H\n {summaryRHE.top_hits}\n {summaryRHE.bot_hits}\n
    \n
    \n E\n {summaryRHE.bot_err}\n {summaryRHE.top_err}\n
    \n
    \n );\n};\n\nexport default HeaderInfo;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setBoxActiveButton } from 'redux/gameReducer';\nimport { getShortName } from 'utils';\nimport cl from './HeaderTeams.module.scss';\nimport classNames from 'classnames';\n\nconst HeaderTeams = ({ names, currentTab }) => {\n const currentCard = useSelector(state => state.game.currentCard);\n const boxActiveButton = useSelector(state => state.game.boxActiveButton);\n const dispatch = useDispatch();\n\n const guestsClasses = classNames([cl.guests], {\n [cl.active]:\n (currentTab === 'box' && boxActiveButton === 'guests') ||\n (currentTab !== 'box' && currentCard.side === 'top')\n });\n\n const ownersClasses = classNames([cl.owners], {\n [cl.active]:\n (currentTab === 'box' && boxActiveButton !== 'guests') ||\n (currentTab !== 'box' && currentCard.side !== 'top')\n });\n\n const handleTeamClick = name => () => dispatch(setBoxActiveButton(name));\n return (\n
    \n \n {getShortName(names[0], 8)}\n \n \n {getShortName(names[1], 8)}\n \n
    \n );\n};\n\nexport default HeaderTeams;\n","import React from 'react';\nimport cl from './Arrow.module.scss';\n\nconst Arrow = ({ direction = 'left', fillColor = '#D1D1D1', addedClass = null, ...props }) => (\n \n {direction === 'left' ? (\n \n \n \n ) : (\n \n \n \n )}\n \n);\n\nexport default Arrow;\n","import React from 'react';\nimport cl from './VerticalScrollDivider.module.scss';\n\nconst VerticalScrollDivider = ({ direction = 'left', ...props }) => {\n\tconst classes = [cl.divider]\n\tclasses.push(direction === 'left' ? cl.left : cl.right)\n\n return
    ;\n};\n\nexport default VerticalScrollDivider;\n","import { useState, useRef } from 'react';\n\nconst useScrollHorizontally = () => {\n const scrollRef = useRef(0);\n const [isLeftScroll, setIsLeftScroll] = useState(false);\n const [isRightScroll, setIsRightScroll] = useState(false);\n\n const scrollHorizontally = e => {\n e = window.event || e;\n var delta = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail));\n scrollRef.current.scrollLeft -= delta * 32;\n setIsLeftScroll(scrollRef.current.scrollLeft !== 0);\n setIsRightScroll(\n scrollRef.current.scrollLeft + scrollRef.current.clientWidth < scrollRef.current.scrollWidth\n );\n e.preventDefault();\n };\n\n const scrollFixation = () => {\n if (scrollRef.current === null) return \n\t\tsetIsLeftScroll(scrollRef.current.scrollLeft !== 0);\n setIsRightScroll(\n scrollRef.current.scrollLeft + scrollRef.current.clientWidth < scrollRef.current.scrollWidth\n );\n };\n\n const addListeners = () => {\n if (scrollRef.current.addEventListener) {\n scrollRef.current.addEventListener('mousewheel', scrollHorizontally, false);\n scrollRef.current.addEventListener('scroll', scrollFixation, false);\n scrollRef.current.addEventListener('DOMMouseScroll', scrollHorizontally, false);\n } else {\n scrollRef.current.attachEvent('onmousewheel', scrollHorizontally);\n }\n };\n\n const removeListeners = ref => {\n if (ref.removeEventListener) {\n ref.removeEventListener('mousewheel', scrollHorizontally, false);\n ref.removeEventListener('scroll', scrollFixation, false);\n ref.removeEventListener('DOMMouseScroll', scrollHorizontally, false);\n } else {\n ref.detachEvent('onmousewheel', scrollHorizontally);\n }\n };\n\n return [scrollRef, isLeftScroll, isRightScroll, addListeners, removeListeners, scrollFixation];\n};\n\nexport default useScrollHorizontally;\n","import { useMemo } from 'react';\n\nconst MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\nconst useFullDate = gameDate =>\n useMemo(() => {\n const date = new Date(gameDate);\n const month = MONTHS[date.getMonth()];\n const day = date.getDate();\n const year = date.getFullYear();\n return `${month} ${day}, ${year}`;\n }, [gameDate]);\n\nexport default useFullDate;\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './HeaderLogo.module.scss';\n\nconst HeaderLogo = ({ side = 'guests' }) => {\n const [isLoaded, setLoaded] = useState(false);\n\n const { guests, owners } = useSelector(state => state.game.preview);\n\n const imgStyles = !isLoaded ? { display: 'none' } : {};\n const pHolderStyles = isLoaded ? { display: 'none' } : {};\n\t\n const imgLogoUrl = side === 'guests' ? guests.logo : owners.logo;\n\tconst imgSrc = `http://baseball-gametrack.ru/api/logo/${imgLogoUrl}`\n\t\n\tconst textClass = side === 'guests' ? cl.leftLogoText : cl.rightLogoText\n\tconst imgClass = side === 'guests' ? cl.leftLogo : cl.rightLogo\n\t\n\tconst teamName = side === 'guests' ? guests.name : owners.name;\n return (\n <>\n setLoaded(true)}\n />\n

    \n {teamName.slice(0, 2).toUpperCase()}\n

    \n \n );\n};\n\nexport default HeaderLogo;\n","import React from 'react';\n\nconst ArrowDown = () => (\n \n \n \n);\n\nexport default ArrowDown;\n","import { useState, useEffect, useRef } from 'react';\n\nexport default function useComponentVisible(initialIsVisible, callback = null) {\n const [isComponentVisible, setIsComponentVisible] = useState(initialIsVisible);\n const ref = useRef(null);\n\n const handleClickOutside = event => {\n if (ref.current && !ref.current.contains(event.target)) {\n\t\t\tsetIsComponentVisible(prev => {\n\t\t\t\t// prev && console.log(123);\n\n return false;\n });\n if (callback) callback('');\n }\n };\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside, true);\n return () => {\n document.removeEventListener('click', handleClickOutside, true);\n };\n }, []);\n\n return { ref, isComponentVisible, setIsComponentVisible };\n}\n","import classNames from 'classnames';\nimport cl from './CrossClose.module.scss';\n\nconst CrossClose = ({ handleCrossClick, addedClass = null, ...props }) => {\n const wrapperClasses = classNames(cl.btn, {\n [addedClass]: addedClass\n });\n\n return (\n \n );\n};\n\nexport default CrossClose;\n","import ArrowDown from 'components/UI/icons/ArrowDown';\nimport React, { useState } from 'react';\nimport { getShortName } from 'utils';\nimport cl from './Dropdown.module.scss';\nimport classNames from 'classnames';\nimport useComponentVisible from 'hooks/useComponentVisible';\nimport CrossClose from 'components/UI/buttons/CrossClose/CrossClose';\n\n// function listenForOutsideClicks(listening, setListening, menuRef, setIsOpen, setSearchFieldValue) {\n// return () => {\n// if (listening) return;\n// if (!menuRef.current) return;\n// setListening(true);\n// [`click`, `touchstart`].forEach(type => {\n// document.addEventListener(type, evt => {\n// if (menuRef.current?.contains(evt.target)) return;\n// setIsOpen(false);\n// setSearchFieldValue('');\n// });\n// });\n// };\n// }\n\nconst SearchField = ({ value, setValue }) => {\n const handleSearchFieldChange = e => {\n setValue(e.target.value);\n };\n return (\n \n );\n};\n\nconst Dropdown = ({\n title,\n options,\n currentOption,\n handleClick,\n wrapperStyles = null,\n\tlistWrapperClass = null,\n listStyles = null,\n itemStyles = null,\n itemTextStyles = null,\n titleStyles = null,\n\tlistWrapperStyles = null,\n shortNames = false,\n searchField = false,\n disabled = false\n}) => {\n // const [listening, setListening] = useState(false);\n // const [isOpen, setIsOpen] = useState(false);\n const [searchFieldValue, setSearchFieldValue] = useState('');\n\n // const menuRef = useRef(null);\n // eslint-disable-next-line\n // useEffect(listenForOutsideClicks(listening, setListening, menuRef, setIsOpen, setSearchFieldValue));\n const {\n ref: menuRef,\n isComponentVisible: isOpen,\n setIsComponentVisible: setIsOpen\n } = useComponentVisible(false, setSearchFieldValue);\n\n const handleTitleClick = () => {\n if (disabled) return;\n\n setIsOpen(!isOpen);\n };\n\n const handleOptionClick = option => () => {\n handleClick(option);\n setIsOpen(false);\n };\n\n const handleCrossClick = () => {\n setIsOpen(false);\n };\n\n const getFilteredOptions = options => {\n const filterArr = searchFieldValue.split(' ');\n\n return options.filter(option => {\n return filterArr.reduce((sum, word) => {\n if (\n !option\n .split(' ')\n .find(optionWord => optionWord.slice(0, word.length).toLowerCase() === word.toLowerCase())\n ) {\n sum = false;\n }\n return sum;\n }, true);\n });\n };\n\n const titleClasses = classNames(cl.title, {\n [cl.disabled]: disabled\n });\n\n const filteredOptions = searchFieldValue === '' ? options : getFilteredOptions(options);\n return (\n
    \n
    \n {title}\n
    \n \n
    \n
    \n {isOpen && (\n
    \n
      \n {searchField && (\n
    • \n \n
    • \n )}\n {filteredOptions.map((option, i) => (\n \n {shortNames ? getShortName(option, shortNames) : option}\n \n ))}\n
    \n \n
    \n )}\n
    \n );\n};\n\nexport default Dropdown;\n","import { useDispatch } from \"react-redux\"\nimport { setFocus } from \"redux/gameReducer\"\n\nconst useGameFocus = target => {\n\tconst dispatch = useDispatch()\n\n\tconst setGameFocus = () => dispatch(setFocus(target))\n\n\treturn setGameFocus\n}\n\t\nexport default useGameFocus","import React from 'react';\n\nconst ReplaceEvent = () => (\n
    \n \n \n \n \n \n \n
    \n);\n\nexport default ReplaceEvent;\n","import { useSelector } from 'react-redux';\n\nconst usePitchTypes = (num, isFull = true) => {\n const { pitch_types: pitchTypes } = useSelector(state => state.game.preview);\n\n\tif (num === null || num === undefined) return\n\n const textIndex = isFull ? 0 : 1;\n\n return pitchTypes[num][textIndex];\n};\n\nexport default usePitchTypes;\n","import ReplaceEvent from 'components/UI/icons/ReplaceEvent';\nimport usePitchTypes from 'hooks/usePitchTypes';\nimport React, { forwardRef } from 'react';\nimport cl from './PlaysEvents.module.scss';\n\nconst PlaysEventsItem = ({ moment, currentMoment, handleClick, isVideo }, ref) => {\n const { icons, inner, metering, table } = moment;\n\n const isActive = inner.id === currentMoment?.inner?.id;\n const classes = isActive ? cl.active : '';\n const refValue = isActive ? ref : null;\n\n const playClasses = [];\n icons.circ_text_play !== 'R' && playClasses.push(cl[icons.circ_color_play]);\n icons.circ_text_play === 'OBR' && playClasses.push(cl.obr);\n\n const playDataBefore = icons.circ_text_pitch || icons.circ_text_play === 'R' ? '' : icons.batter_moment;\n\n const topEventText = metering?.pitch?.start_speed ? metering?.pitch?.start_speed.toFixed(0) : '';\n\n const ballsEnding = table.balls > 1 ? 's' : '';\n const strikesEnding = table.strikes > 1 ? 's' : '';\n\n const pitchTypeName = usePitchTypes(metering.pitch?.pitch_type, false);\n return (\n <>\n {icons.circ_color_pitch && (\n
  • \n
    \n {icons.circ_text_pitch}\n
    \n
    \n {isVideo && (\n

    \n {pitchTypeName} {topEventText}\n

    \n )}\n
    \n {!isVideo && (\n <>{`(${table.balls} ball${ballsEnding} - ${table.strikes} strike${strikesEnding})`}\n )}\n
    \n
    \n
  • \n )}\n {icons.circ_color_play && (\n
  • \n
    \n {icons.circ_text_play !== 'R' ? icons.circ_text_play : }\n
    \n {!(icons.circ_color_pitch && icons.circ_color_play) && (\n
    \n {/* {icons.circ_color_pitch && icons.circ_color_play? (\n <>\n

     

     \n \n ) : (\n <> */}\n {isVideo && (\n

    \n {pitchTypeName} {topEventText}\n

    \n )}\n
    \n {!isVideo && (\n <>{`(${table.balls} ball${ballsEnding} - ${table.strikes} strike${strikesEnding})`}\n )}\n
    \n\n {/* ({table.balls} - {table.strikes}) */}\n {/* \n )} */}\n
    \n )}\n
  • \n )}\n \n );\n};\n\nexport default forwardRef(PlaysEventsItem);\n","import React, { useState, useRef, useEffect } from 'react';\nimport cl from './PlaysEvents.module.scss';\nimport PlaysEventsItem from './PlaysEventsItem';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setCurrentMoment } from 'redux/gameReducer';\n\nconst PlaysEventsList = ({ moments }) => {\n const activeCardList = useSelector(state => state.game.activeCardList);\n const currentMoment = useSelector(state => state.game.currentMoment);\n\tconst isVideo = useSelector(state => state.game.isVideo)\n const dispatch = useDispatch();\n const [classes, setClasses] = useState([cl.list]);\n const [animationClass, setAnimationClass] = useState('');\n const ref = useRef();\n const eventsChildRef = useRef(null);\n const animationRef = useRef(false);\n\n useEffect(() => {\n\t\tisVideo && setClasses(prev => [...prev, cl.isVideosList])\n\t\t\n setTimeout(() => {\n if (eventsChildRef.current) {\n eventsChildRef.current.parentNode.scrollTop =\n eventsChildRef.current.offsetTop + eventsChildRef.current.clientHeight / 2 - 320;\n }\n }, 0);\n\t\t// eslint-disable-next-line\n }, []);\n\n useEffect(() => {\n if (ref.current === null) return;\n\n const classes = [cl.list];\n\t\tisVideo && classes.push(cl.isVideosList)\n\t\t!isVideo && classes.push(cl.noVideo)\n ref.current.scrollHeight > ref.current.clientHeight\n ? classes.push(...[cl.listBottomShadow, cl.beforeBlue])\n : classes.push([cl.beforeBlue]);\n\n const shadowsArr = [];\n if (ref.current.scrollLeft > 0) {\n shadowsArr.push('8px 0 8px -8px inset rgba(0,0,0, .7)');\n }\n\n if (ref.current.scrollWidth > (ref.current.scrollLeft + ref.current.clientWidth)) {\n shadowsArr.push('-8px 0 8px -8px inset rgba(0,0,0, .7)');\n }\n\n ref.current.style.boxShadow = shadowsArr.length > 0 ? shadowsArr.join(',') : 'none';\n\n activeCardList === 'events' && classes.push(cl.blueTopLoad);\n setClasses(classes);\n // eslint-disable-next-line\n }, [moments]);\n\n useEffect(() => {\n if (!animationRef.current) {\n animationRef.current = true;\n return;\n }\n\n const animation = activeCardList === 'cards' ? cl.taller : cl.wider;\n setAnimationClass(animation);\n }, [activeCardList]);\n\n useEffect(() => {\n if (!eventsChildRef.current) return;\n\n eventsChildRef.current.parentNode.scrollTop =\n eventsChildRef.current.offsetTop + eventsChildRef.current.clientHeight / 2 - 320;\n eventsChildRef.current.parentNode.scrollLeft =\n eventsChildRef.current.offsetLeft + eventsChildRef.current.clientWidth / 2 - 150;\n }, [currentMoment]);\n\n const handleMomentClick = moment => () => {\n // dispatch(setPlaybackMode('pause'));\n dispatch(setCurrentMoment({...moment, manualClick: true}));\n };\n\n\tconst scrollHandle = e => {\n\t\tconst shadowsArr = []\n\t\tif (e.target.scrollLeft > 0) {\n\t\t\tshadowsArr.push('8px 0 8px -8px inset rgba(0,0,0, .7)')\n\t\t}\n\t\tif (e.target.scrollWidth > (e.target.scrollLeft + e.target.clientWidth)) {\n\t\t\tshadowsArr.push('-8px 0 8px -8px inset rgba(0,0,0, .7)')\n\t\t}\n\t\te.target.style.boxShadow = shadowsArr.length > 0 ? shadowsArr.join(',') : 'none';\n\t}\n return (\n scrollHandle(e)}>\n {moments.length !== 0 &&\n moments.map((moment, i) => (\n \n ))}\n \n );\n};\n\nexport default PlaysEventsList;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './ContentPitcher.module.scss';\nimport { Link } from 'react-router-dom';\n// import PlaysEventsTotal from '../PlaysEvents/PlaysEventsTotal';\n\nconst ContentPitcher = () => {\n const currentCard = useSelector(state => state.game.currentCard);\n const moments = useSelector(state => state.game.moments);\n\n const { balls_count: ballsCount, strikes_count: strikesCount } =\n (moments.length > 0 ? moments.slice(-1)[0].pitcher : currentCard.moments?.slice(-1)[0].pitcher) || '';\n\n const { pitches_name: pitcherName, pitcher_id: pitcherId } =\n currentCard.moments?.slice(-1)[0]?.pitcher || {};\n\n const isPitcher = currentCard.moments;\n\n const ballsEnding = ballsCount > 1 ? 's' : '';\n const strikesEnding = strikesCount > 1 ? 's' : '';\n return (\n
    \n

    \n Pitcher: {isPitcher && {pitcherName}}\n

    \n\n {/* */}\n

    \n Total:{' '}\n {isPitcher && (\n \n {ballsCount + strikesCount} ({ballsCount} ball{ballsEnding}, {strikesCount} strike\n {strikesEnding})\n \n )}\n

    \n
    \n );\n};\n\nexport default ContentPitcher;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport useGameFocus from 'hooks/useGameFocus';\nimport cl from './PlaysEvents.module.scss';\nimport PlaysEventsList from './PlaysEventsList';\n// import PlaysEventsTotal from './PlaysEventsTotal';\nimport ContentPitcher from '../ContentPitcher/ContentPitcher';\nimport classNames from 'classnames';\n\nconst PlaysEvents = () => {\n const moments = useSelector(state => state.game.moments);\n const isVideo = useSelector(state => state.game.isVideo);\n\n\tconst eventsClasses = classNames(cl.events, {\n\t\t[cl.noVideo]: !isVideo\n\t})\n return (\n
    \n \n {!isVideo && (\n
    \n \n
    \n )}\n {/* */}\n
    \n );\n};\n\nexport default PlaysEvents;\n","import React from 'react';\nimport PlaysEvents from '../PlaysEvents/PlaysEvents';\n\nconst MobileHeaderEvents = ({ cl }) => (\n
    \n \n
    \n);\nexport default MobileHeaderEvents;\n","// import { useSelector } from 'react-redux';\n// import ContentControls from '../ContentControls/ContentControls';\nimport classNames from 'classnames';\nimport ContentPitcher from '../ContentPitcher/ContentPitcher';\nimport PlaysEvents from '../PlaysEvents/PlaysEvents';\nimport cl from './Content.module.scss';\n\nconst MobilePitcherFilters = () => {\n // const isVideo = useSelector(state => state.game.isVideo);\n\n\tconst eventsWrapperClasses = classNames(cl.mobileOnlyPortrait, cl.eventsWrapper)\n return (\n
    \n \n\n
    \n \n
    \n {/* */}\n
    \n );\n};\n\nexport default MobilePitcherFilters;\n","import { useMemo } from 'react';\n\nconst SORT_PRIORITY = {\n All: 1,\n Score: 2,\n Single: 3,\n Double: 4,\n Triple: 5,\n 'Home Run': 6,\n Strikeout: 7,\n 'Double Play': 8,\n Stealing: 9,\n 'Caught Stealing': 10,\n Error: 11,\n 'Wild Pitch': 12,\n 'Passed Ball': 13,\n Walk: 14,\n 'Hit By Pitch': 15,\n Balk: 16,\n Groundout: 17,\n GDP: 18,\n Flyout: 19,\n Pickoff: 20,\n Sacrifice: 21,\n Bunt: 22,\n Replace: 23,\n Interference: 24\n};\n\nexport const useFilterSituations = newSituations =>\n useMemo(() => {\n let filteredSituations = [{ name: 'All', count: 1, priority: 1 }];\n for (let newSituation of newSituations) {\n let count = newSituations.filter(sit => sit === newSituation).length;\n let index = filteredSituations.findIndex(sit => sit.name === newSituation);\n if (index !== -1) continue;\n filteredSituations[filteredSituations.length] = {\n name: newSituation,\n count,\n priority: SORT_PRIORITY[newSituation]\n };\n }\n\n return filteredSituations;\n }, [newSituations]);\n\nexport const useSortFilteredSituations = newSituations => {\n const sortedSituations = useFilterSituations(newSituations);\n\n return useMemo(() => {\n sortedSituations.sort((a, b) => (a.priority > b.priority ? 1 : -1));\n\n return sortedSituations;\n }, [sortedSituations]);\n};\n","import cl from './Header.module.scss';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport { useSortFilteredSituations } from 'hooks/useFilterSituations';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setPlaybackMode, setSituationFilter } from 'redux/gameReducer';\n\nconst MobileFilters = () => {\n const situations = useSelector(s => s.game.situations);\n const playbackMode = useSelector(s => s.game.playbackMode);\n const situationFilter = useSelector(s => s.game.situationFilter);\n\n const dispatch = useDispatch();\n\n const handleClick = e => {\n playbackMode !== 'pause' && dispatch(setPlaybackMode('pause'));\n const newSituationFilter = situationFilter !== e ? e : 'All';\n dispatch(setSituationFilter(newSituationFilter));\n };\n\n const filteredSituations = useSortFilteredSituations(situations).reduce((sum, cur) => {\n sum.push(cur.name);\n return sum;\n }, []);\n return (\n
    \n \n
    \n );\n};\n\nexport default MobileFilters;\n","import classNames from 'classnames';\nimport React, { useState } from 'react';\nimport { useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useDispatch } from 'react-redux';\nimport { setPlayerCardFilter, togglePlayerCardFilterBy, setPlayerCardFilterFocused } from 'redux/gameReducer';\nimport cl from './PlayerFilterField.module.scss';\n\nconst PlayerFilterField = () => {\n\tconst isFilteredPlayer = useSelector(s => s.game.isFilteredPlayer)\n\tconst playerCardFilterBy = useSelector(s => s.game.playerCardFilterBy)\n\tconst playerCardFilter = useSelector(s => s.game.playerCardFilter)\n\n const [filterValue, setFilterValue] = useState(playerCardFilter);\n\t\n const dispatch = useDispatch();\n\n const filterTimeoutRef = useRef();\n\n const changeHandler = e => {\n const value = e.target.value;\n setFilterValue(value);\n clearTimeout(filterTimeoutRef.current);\n\n filterTimeoutRef.current = setTimeout(() => {\n dispatch(setPlayerCardFilter(value));\n }, 400);\n };\n\n const inputClasses = classNames([cl.filterPlayerField], {\n [cl.noPlayerFiltered]: !isFilteredPlayer\n });\n\n const btnText = playerCardFilterBy === 'pitcher' ? 'P' : 'B';\n\n const handleBtnClick = () => dispatch(togglePlayerCardFilterBy());\n const handleFieldFocus = () => dispatch(setPlayerCardFilterFocused(true));\n const handleFieldBlur = () => dispatch(setPlayerCardFilterFocused(false));\n return (\n
    \n \n \n
    \n );\n};\n\nexport default PlayerFilterField;\n","export default __webpack_public_path__ + \"static/media/options_button_icon.4598d9a1.svg\";","import React from 'react';\nimport cl from './SimpleToggler.module.scss';\n\nconst SimpleToggler = props => (\n \n);\nexport default SimpleToggler;\n","const newDate = new Date();\n// console.log(newDate);\n// console.log(newDate.getHours());\n// console.log(newDate.getTimezoneOffset());\n// newDate.setHours(newDate.getHours() - newDate.getTimezoneOffset() / 60);\n\nconst defaultState = {\n currentLeague: { id: -1, name: 'All' },\n // currentYear: 2022,\n currentYear: newDate.getFullYear(),\n currentDate: newDate,\n currentLeaguesScroll: 0,\n mobileWidth: 0,\n isMobile: false,\n currentGameType: 'Baseball',\n\tmobileOrientation: 0,\n\tisMobileScoreboard: true,\n isMobileTimeline: true\n\t// allYearsLeagues: {}\n};\n\nconst SET_CURRENT_LEAGUE = 'SET_CURRENT_LEAGUE';\nconst SET_CURRENT_YEAR = 'SET_CURRENT_YEAR';\nconst SET_CURRENT_DATE = 'SET_CURRENT_DATE';\nconst SET_CURRENT_LEAGUES_SCROLL = 'SET_CURRENT_LEAGUES_SCROLL';\nconst SET_MOBILE_WIDTH = 'SET_MOBILE_WIDTH';\nconst SET_IS_MOBILE = 'SET_IS_MOBILE';\nconst SET_CURRENT_GAME_TYPE = 'SET_CURRENT_GAME_TYPE';\nconst SET_MOBILE_ORIENTATION = 'SET_MOBILE_ORIENTATION';\n// const SET_ALL_YEARS_LEAGUES = 'SET_ALL_YEARS_LEAGUES';\nconst TOGGLE_IS_MOBILE_SCOREBOARD = 'TOGGLE_IS_MOBILE_SCOREBOARD';\nconst TOGGLE_IS_MOBILE_TIMELINE = 'TOGGLE_IS_MOBILE_TIMELINE';\n\nexport const sharedReducer = (state = defaultState, action) => {\n switch (action.type) {\n case SET_CURRENT_LEAGUE:\n return { ...state, currentLeague: action.payload };\n case SET_CURRENT_YEAR:\n return { ...state, currentYear: action.payload };\n case SET_CURRENT_DATE:\n return { ...state, currentDate: action.payload };\n case SET_CURRENT_LEAGUES_SCROLL:\n return { ...state, currentLeaguesScroll: action.payload };\n case SET_MOBILE_WIDTH:\n return { ...state, mobileWidth: action.payload };\n case SET_IS_MOBILE:\n return { ...state, isMobile: action.payload };\n case SET_CURRENT_GAME_TYPE:\n return { ...state, currentGameType: action.payload };\n case SET_MOBILE_ORIENTATION:\n return { ...state, mobileOrientation: action.payload };\n // case SET_ALL_YEARS_LEAGUES:\n // return { ...state, allYearsLeagues: {...state.allYearsLeagues, [action.payload.year]: action.payload.data} };\n\t\tcase TOGGLE_IS_MOBILE_SCOREBOARD:\n return { ...state, isMobileScoreboard: !state.isMobileScoreboard };\n case TOGGLE_IS_MOBILE_TIMELINE:\n return { ...state, isMobileTimeline: !state.isMobileTimeline };\n default:\n return state;\n }\n};\n\nexport const setCurrentLeague = payload => ({ type: SET_CURRENT_LEAGUE, payload });\nexport const setCurrentYear = payload => ({ type: SET_CURRENT_YEAR, payload });\nexport const setCurrentDate = payload => ({ type: SET_CURRENT_DATE, payload });\nexport const setCurrentLeaguesScroll = payload => ({ type: SET_CURRENT_LEAGUES_SCROLL, payload });\nexport const setMobileWidth = payload => ({ type: SET_MOBILE_WIDTH, payload });\nexport const setIsMobile = payload => ({ type: SET_IS_MOBILE, payload });\nexport const setCurrentGameType = payload => ({ type: SET_CURRENT_GAME_TYPE, payload });\nexport const setMobileOrientation = payload => ({ type: SET_MOBILE_ORIENTATION, payload });\n// export const setAllYearsLeagues = payload => ({ type: SET_ALL_YEARS_LEAGUES, payload });\nexport const toggleIsMobileScoreboard = () => ({ type: TOGGLE_IS_MOBILE_SCOREBOARD });\nexport const toggleIsMobileTimeline = () => ({ type: TOGGLE_IS_MOBILE_TIMELINE });","import cl from './OptionsDropdown.module.scss';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { toggleIsMobileScoreboard, toggleIsMobileTimeline } from 'redux/sharedReducer';\nimport SimpleToggler from 'components/UI/togglers/SimpleToggler/SimpleToggler';\nimport classNames from 'classnames';\n\nconst ComponentsTogglers = () => {\n\tconst isMobileScoreboard = useSelector(s => s.shared.isMobileScoreboard)\n\tconst isMobileTimeline = useSelector(s => s.shared.isMobileTimeline)\n\n\tconst dispatch = useDispatch()\n\n\tconst scoreboardRowClasses = classNames(cl.row, cl.onlyMobilePortrait)\n\tconst effectsRowClasses = classNames(cl.row, cl.onlyMobileLandscape)\n return (\n
    \n
    \n Scoreboard\n dispatch(toggleIsMobileScoreboard())} />\n
    \n
    \n Timeline\n dispatch(toggleIsMobileTimeline())} />\n
    \n
    \n Effects\n {}} />\n
    \n
    \n );\n};\n\nexport default ComponentsTogglers;\n","import React from 'react';\nimport cl from './FirstLastMoment.module.scss';\n\nconst FirstLastMoment = ({ isLastMomentMode, ...props }) => {\n return (\n \n );\n};\n\nexport default FirstLastMoment;\n","import classNames from 'classnames';\nimport React from 'react';\nimport cl from './ForwardRepeat.module.scss';\n\nconst ForwardRepeat = ({ playbackMode, ...props }) => {\n const forwardPathClasses = classNames({\n [cl.unfilled]: playbackMode !== 'play',\n [cl.filled]: playbackMode === 'play'\n });\n const repeatPathClasses = classNames({\n [cl.unfilled]: playbackMode === 'play',\n [cl.filled]: playbackMode !== 'play'\n });\n return (\n \n );\n};\n\nexport default ForwardRepeat;\n","import cl from './OptionsDropdown.module.scss';\nimport FirstLastMoment from 'components/UI/buttons/FirstLastMoment/FirstLastMoment';\nimport ForwardRepeat from 'components/UI/buttons/ForwardRepeat/ForwardRepeat';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setIsLastMomentMode, setPlaybackMode } from 'redux/gameReducer';\n\nconst PlayModesTogglers = () => {\n const playbackMode = useSelector(s => s.game.playbackMode);\n const isLastMomentMode = useSelector(s => s.game.isLastMomentMode);\n\n const dispatch = useDispatch();\n\n const playbackModeClick = e => {\n console.log(e);\n const newMode =\n e.currentTarget.name === 'play-pause' ? (playbackMode === 'play' ? 'pause' : 'play') : 'playOnline';\n dispatch(setPlaybackMode(newMode));\n };\n\n const handlefirstLastBtn = () => dispatch(setIsLastMomentMode());\n\n const getClassName = name => {\n if (\n (playbackMode !== 'playOnline' && name === 'play-pause') ||\n (playbackMode === 'playOnline' && name === 'play-online')\n )\n return cl.active;\n return '';\n };\n return (\n
    \n \n \n
    \n );\n};\n\nexport default PlayModesTogglers;\n","import classNames from 'classnames';\nimport cl from './OptionsDropdown.module.scss';\nimport { setVideoLengthMode, setVideoPlaybackRate } from 'redux/gameReducer';\nimport { useDispatch, useSelector } from 'react-redux';\n\nconst SpeedOption = ({ speed, handleOptionClick }) => {\n const videoPlaybackRate = useSelector(state => state.game.videoPlaybackRate);\n\n const optionsClasses = classNames(cl.speedOption, {\n [cl.active]: videoPlaybackRate === speed\n });\n return (\n
    \n {speed}\n
    \n );\n};\n\nconst VideoMode = ({ mode, handleModeClick }) => {\n const videoLengthMode = useSelector(state => state.game.videoLengthMode);\nconsole.log(videoLengthMode);\n return (\n \n );\n};\n\nconst SpeedSelectors = () => {\n const dispatch = useDispatch();\n\n const handleVideoModeClick = name => () => dispatch(setVideoLengthMode(name));\n\n const handleSpeedOptionClick = option => () => {\n dispatch(setVideoPlaybackRate(option));\n };\n\n const speedsArr = [0.25, 1, 2];\n const videoModes = ['Full', 'Short', 'Super Short'];\n return (\n
    \n
    \n

    Speed

    \n
    \n {speedsArr.map((speed, i) => (\n \n ))}\n
    \n
    \n
    \n {videoModes.map((videoMode, i) => (\n \n ))}\n
    \n
    \n );\n};\n\nexport default SpeedSelectors;\n","import BtnImg from 'icons/options_button_icon.svg';\nimport cl from './OptionsDropdown.module.scss';\nimport useComponentVisible from 'hooks/useComponentVisible';\nimport CrossClose from 'components/UI/buttons/CrossClose/CrossClose';\nimport SimpleToggler from 'components/UI/togglers/SimpleToggler/SimpleToggler';\nimport ComponentsTogglers from './ComponentsTogglers';\nimport PlayModesTogglers from './PlayModesTogglers';\nimport SpeedSelectors from './SpeedSelectors';\nimport classNames from 'classnames';\n\nconst OptionsDropdown = ({ panelStyles = null, mobileLandscapeVisible = false }) => {\n const {\n ref: menuRef,\n isComponentVisible: isOpen,\n setIsComponentVisible: setIsOpen\n } = useComponentVisible(false);\n\n const handleBtnClick = () => setIsOpen(prev => !prev);\n const handleCrossClick = () => setIsOpen(false);\n\n const wrapperClasses = classNames(cl.dropdownWrapper, {\n [cl.mobileLandscapeVisible]: mobileLandscapeVisible\n });\n return (\n
    \n \n {isOpen && (\n
    \n \n
    \n \n \n
    \n
    \n
    \n Effects\n {}} />\n
    \n
    \n \n
    \n )}\n
    \n );\n};\n\nexport default OptionsDropdown;\n","import classNames from 'classnames';\nimport cl from './MobileOptionsBar.module.scss';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { setBoxActiveButton } from 'redux/gameReducer';\n\nconst ScoreInfo = () => {\n const preview = useSelector(s => s.game.preview, shallowEqual);\n const isVideo = useSelector(s => s.game.isVideo);\n const currentTab = useSelector(s => s.game.currentTab);\n const boxActiveButton = useSelector(s => s.game.boxActiveButton);\n\n\tconst dispatch = useDispatch()\n\n\tconst handleTeamClick = teamSide => () => dispatch(setBoxActiveButton(teamSide))\n\n\tconst getTeamClasses = teamSide => classNames(cl.teamName, {\n\t\t[cl.active]: teamSide === boxActiveButton && currentTab === 'box'\n\t})\n\n const scoreWrapperClasses = classNames(cl.scoreInfo, {\n [cl.noVideo]: !isVideo\n });\n return (\n
    \n
    \n {preview.guests.name}\n {preview.guests.score}\n
    \n
    \n {preview.owners.name}\n {preview.owners.score}\n
    \n
    \n );\n};\n\nexport default ScoreInfo;\n","import React from 'react';\n\nconst ContentBoxFooterRow = ({ footerArr, columnIndex, rowIndex }) => {\n const rowTextArr = footerArr[columnIndex * 6 + rowIndex].split(':');\n\n return (\n

    \n {rowTextArr[0]}:\n {rowTextArr[1]}\n

    \n );\n};\n\nexport default ContentBoxFooterRow;\n","import React from 'react';\nimport ContentBoxFooterRow from './ContentBoxFooterRow';\n\nconst ContentBoxFooterColumn = ({ columnIndex, footerArr }) => {\n const rowsArr = [];\n\n for (let rowIndex = 0; rowIndex < 6; rowIndex++) {\n columnIndex * 6 + rowIndex < footerArr.length && rowsArr.push(null);\n }\n\n return (\n
    \n {rowsArr.map((_, rowIndex) => (\n \n ))}\n
    \n );\n};\n\nexport default ContentBoxFooterColumn;\n","import React from 'react';\nimport cl from './ContentBoxFooter.module.scss';\nimport ContentBoxFooterColumn from './ContentBoxFooterColumn';\n\nconst ContentBoxFooter = ({ footer }) => {\n const footerArr = footer.split('\\n');\n const columnsCount = Math.ceil(footerArr.length / 6);\n const columnsArr = new Array(columnsCount).fill('', 0, columnsCount);\n\n return (\n
    \n
    \n {columnsArr.map((_, columnIndex) => (\n \n ))}\n
    \n
    \n );\n};\n\nexport default ContentBoxFooter;","import cl from './InfoDropdown.module.scss';\nimport CrossClose from 'components/UI/buttons/CrossClose/CrossClose';\nimport HeaderTeams from 'components/Game/HeaderTeams/HeaderTeams';\nimport HeaderScoresList from 'components/Game/HeaderScoresList/HeaderScoresList';\nimport HeaderInfo from 'components/Game/HeaderInfo/HeaderInfo';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { useEffect } from 'react';\nimport useScrollHorizontally from 'hooks/useScrollHorizontally';\nimport Arrow from 'components/UI/buttons/Arrow/Arrow';\nimport VerticalScrollDivider from 'components/UI/dividers/VerticalScrollDivider/VerticalScrollDivider';\nimport classNames from 'classnames';\nimport ContentBoxFooter from 'components/Game/ContentBoxFooter/ContentBoxFooter';\n\nconst InfoPanel = ({ panelStyles, setIsOpen }) => {\n const innings = useSelector(s => s.game.innings, shallowEqual);\n const preview = useSelector(s => s.game.preview, shallowEqual);\n const { footer } = useSelector(s => s.game.boxData);\n\n const [scrollRef, isLeftScroll, isRightScroll, addListeners, removeListeners, scrollFixation] =\n useScrollHorizontally();\n\n useEffect(() => {\n const ref = scrollRef.current;\n scrollFixation();\n addListeners();\n return () => {\n removeListeners(ref);\n };\n }, [scrollFixation, addListeners, removeListeners, scrollRef]);\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollFixation();\n }\n }, [innings, scrollRef, scrollFixation]);\n\n const scrollHorizontally = e => {\n const start = scrollRef.current.scrollLeft,\n change = 120,\n increment = 10;\n let currentTime = 0;\n\n Math.easeInOutQuad = function (t, b, c, d) {\n t /= d / 2;\n if (t < 1) return (c / 2) * t * t + b;\n t--;\n return (-c / 2) * (t * (t - 2) - 1) + b;\n };\n\n const animateScroll = function (name) {\n currentTime += increment;\n const val = Math.easeInOutQuad(currentTime, start, name === 'scroll-left' ? -change : change, 300);\n scrollRef.current.scrollLeft = val;\n if (currentTime < 300) {\n setTimeout(() => animateScroll(name), increment);\n }\n };\n\n animateScroll(e.currentTarget.name);\n };\n\n const handleCrossClick = () => setIsOpen(false);\n\n const leftArrowGroup = isLeftScroll ? (\n <>\n \n \n \n ) : (\n <>\n \n \n \n );\n\n const rightArrowGroup = isRightScroll ? (\n <>\n \n \n \n ) : (\n <>\n \n \n \n );\n\n const isFooter = footer !== '';\n\n const scoresWrapperClasses = classNames(cl.scoresWrapper);\n return (\n
    \n
    \n \n
    \n
    {leftArrowGroup}
    \n \n
    {rightArrowGroup}
    \n
    \n \n
    \n {isFooter && }\n \n
    \n );\n};\n\nexport default InfoPanel;\n","import cl from './InfoDropdown.module.scss';\nimport useComponentVisible from 'hooks/useComponentVisible';\nimport classNames from 'classnames';\nimport ArrowDown from 'components/UI/icons/ArrowDown';\nimport InfoPanel from './InfoPanel';\n\nconst InfoDropdown = ({ panelStyles = null, mobileLandscapeVisible = false }) => {\n const {\n ref: menuRef,\n isComponentVisible: isOpen,\n setIsComponentVisible: setIsOpen\n } = useComponentVisible(false);\n\n const handleBtnClick = () => setIsOpen(prev => !prev);\n\n const wrapperClasses = classNames(cl.dropdownWrapper, {\n [cl.mobileLandscapeVisible]: mobileLandscapeVisible\n });\n return (\n
    \n \n {isOpen && }\n
    \n );\n};\n\nexport default InfoDropdown;\n","import classNames from 'classnames';\nimport cl from './MobileOptionsBar.module.scss';\nimport OptionsDropdown from './OptionsDropdown/OptionsDropdown';\nimport ScoreInfo from './ScoreInfo';\nimport { useSelector } from 'react-redux';\nimport InfoDropdown from './InfoDropdown/InfoDropdown';\n\nconst MobileOptionsBar = ({ currentTab = null, portrait = true, landscape = false }) => {\n const isVideo = useSelector(s => s.game.isVideo);\n\n const optionsBarClasses = classNames(cl.optionsBar, {\n [cl.onlyPortraitMobile]: portrait,\n [cl.onlyLandscapeMobile]: landscape,\n [cl.noVideo]: !isVideo\n });\n\n const isOptions = isVideo && currentTab !== 'box';\n const isInfo = currentTab === 'box';\n return (\n
    \n \n {isOptions && }\n {isInfo && }\n
    \n );\n};\n\nexport default MobileOptionsBar;\n","import cl from './Header.module.scss';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setBoxMode } from 'redux/gameReducer';\n\nconst BOX_MODES = ['Batting', 'Running', 'Fielding', 'Pitching', 'Catching', 'Machine Vision Statistics'];\n\nconst MobileBoxModes = () => {\n const boxMode = useSelector(s => s.game.boxMode);\n\n const dispatch = useDispatch();\n\n const handleClick = option => {\n dispatch(setBoxMode(option));\n };\n\n return (\n
    \n \n
    \n );\n};\n\nexport default MobileBoxModes;\n","import React, { useEffect } from 'react';\nimport cl from './Header.module.scss';\nimport HeaderTabs from '../HeaderTabs/HeaderTabs';\nimport HeaderScoresList from '../HeaderScoresList/HeaderScoresList';\nimport HeaderInfo from '../HeaderInfo/HeaderInfo';\nimport HeaderTeams from '../HeaderTeams/HeaderTeams';\nimport Arrow from 'components/UI/buttons/Arrow/Arrow';\nimport VerticalScrollDivider from 'components/UI/dividers/VerticalScrollDivider/VerticalScrollDivider';\nimport useScrollHorizontally from 'hooks/useScrollHorizontally';\nimport useFullDate from 'hooks/useFullDate';\nimport { useDispatch, useSelector } from 'react-redux';\n// import { setImagesData } from 'redux/gameReducer';\nimport HeaderLogo from '../HeaderLogo/HeaderLogo';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport { getSearchParam, getShortName } from 'utils';\nimport { setBoxActiveButton } from 'redux/gameReducer';\nimport MobileHeaderEvents from './MobileHeaderEvents';\nimport MobilePitcherFilters from '../Content/MobilePitcherFilters';\nimport MobileFilters from './MobileFilters';\nimport PlayerFilterField from '../PlayerFilterField/PlayerFilterField';\nimport classNames from 'classnames';\nimport MobileOptionsBar from './MobileOptionsBar/MobileOptionsBar';\nimport MobileBoxModes from './MobileBoxModes';\n\nconst Header = ({ currentTab, handleTabClick }) => {\n const [scrollRef, isLeftScroll, isRightScroll, addListeners, removeListeners, scrollFixation] =\n useScrollHorizontally();\n const innings = useSelector(state => state.game.innings);\n const preview = useSelector(state => state.game.preview);\n // const imagesData = useSelector(state => state.game.imagesData);\n const inningNumber = useSelector(state => state.game.inningNumber);\n const playbackMode = useSelector(state => state.game.playbackMode);\n const isVideo = useSelector(state => state.game.isVideo);\n const boxActiveButton = useSelector(state => state.game.boxActiveButton);\n const currentCard = useSelector(state => state.game.currentCard);\n\n const isMobileScoreboard = useSelector(state => state.shared.isMobileScoreboard);\n\n const dispatch = useDispatch();\n\n // useEffect(() => {\n // const fetchImage = async (teamName, url) => {\n // try {\n // const response = await axios.get(`http://baseball-gametrack.ru/api/logo/${url}`, {\n // responseType: 'arraybuffer',\n // timeout: 2500\n // });\n\n // dispatch(\n // setImagesData({\n // [teamName]: 'data:image/jpg;base64, ' + Buffer.from(response.data, 'binary').toString('base64')\n // })\n // );\n // } catch (err) {\n // // err.message === 'Request failed with status code 523' &&\n // setTimeout(() => fetchImage(teamName, url), 2500);\n // console.log(err.message);\n // }\n // };\n\n // !imagesData[preview.guests.name] &&\n // preview.guests.logo !== '' &&\n // fetchImage(preview.guests.name, preview.guests.logo);\n // !imagesData[preview.owners.name] &&\n // preview.owners.logo !== '' &&\n // fetchImage(preview.owners.name, preview.owners.logo);\n // // eslint-disable-next-line\n // }, []);\n\n useEffect(() => {\n const ref = scrollRef.current;\n scrollFixation();\n addListeners();\n return () => {\n removeListeners(ref);\n };\n }, [scrollFixation, addListeners, removeListeners, scrollRef]);\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollFixation();\n }\n }, [innings, scrollRef, scrollFixation]);\n\n useEffect(() => {\n if (playbackMode !== 'playOnline' || inningNumber < 10) return;\n scrollRef.current.scrollLeft = (inningNumber - 9) * 30;\n }, [playbackMode, inningNumber, scrollRef]);\n\n const scrollHorizontally = e => {\n const start = scrollRef.current.scrollLeft,\n change = 120,\n increment = 10;\n let currentTime = 0;\n\n Math.easeInOutQuad = function (t, b, c, d) {\n t /= d / 2;\n if (t < 1) return (c / 2) * t * t + b;\n t--;\n return (-c / 2) * (t * (t - 2) - 1) + b;\n };\n\n const animateScroll = function (name) {\n currentTime += increment;\n const val = Math.easeInOutQuad(currentTime, start, name === 'scroll-left' ? -change : change, 300);\n scrollRef.current.scrollLeft = val;\n if (currentTime < 300) {\n setTimeout(() => animateScroll(name), increment);\n }\n };\n\n animateScroll(e.currentTarget.name);\n };\n\n const handleTeamClick = name => () => dispatch(setBoxActiveButton(name));\n\n const leftArrowGroup = isLeftScroll ? (\n <>\n \n \n \n ) : (\n <>\n \n \n \n );\n\n const rightArrowGroup = isRightScroll ? (\n <>\n \n \n \n ) : (\n <>\n \n \n \n );\n\n const tabsArr = isVideo ? ['Box', 'Videos', 'Pitch', 'Hit', 'Run'] : ['Box', 'Plays'];\n\n const tabsCurrentOption =\n currentTab === 'hitting'\n ? 'Hit'\n : currentTab === 'running'\n ? 'Run'\n : currentTab[0].toUpperCase() + currentTab.slice(1);\n\n // Classnames\n const guestsClasses = classNames(cl.guests, {\n [cl.active]:\n (currentTab === 'box' && boxActiveButton === 'guests') ||\n (currentTab !== 'box' && currentCard.side === 'top')\n });\n const ownersClasses = classNames(cl.owners, {\n [cl.active]:\n (currentTab === 'box' && boxActiveButton !== 'guests') ||\n (currentTab !== 'box' && currentCard.side !== 'top')\n });\n const teamTotalScoresWrapperClasses = classNames(cl.teamTotalScoresWrapper, {\n [cl.landscapeDisplayNone]: getSearchParam('tab') !== 'box'\n });\n const scoresWrapperClasses = classNames(cl.scoresWrapper, {\n [cl.landscapeDisplayNone]: getSearchParam('tab') === 'box' || isVideo,\n [cl.mobileDisplayNone]: (!isMobileScoreboard && isVideo) || currentTab === 'box'\n });\n const defenceScoreClasses = classNames(cl.teamScore, cl.defenceTeamScore);\n const wrapperClasses = classNames(cl.header, {\n [cl.landscapeDisplayNone]: currentTab === 'videos'\n });\n return (\n
    \n
    \n
    \n
    \n

    {preview.league_name}

    \n

    {useFullDate(preview.game_date)}

    \n

    at Moscow ({preview.stadium_name})

    \n \n
    \n \n
    \n
    \n \n
    \n {preview.guests.score}\n  - \n {preview.owners.score}\n
    \n \n
    \n
    \n \n
    \n {currentTab !== 'box' && }\n {currentTab === 'box' && }\n {/*
    \n {`${useFullDate(preview.game_date)} At MOSCOW (${preview.stadium_name.toUpperCase()})`}\n
    */}\n
    \n {getSearchParam('tab') !== 'box' && }\n
    \n
    \n \n

    {preview.guests.score}

    \n \n
    \n \n
    \n
    {leftArrowGroup}
    \n \n
    {rightArrowGroup}
    \n
    \n \n {!isVideo && }\n
    \n

    {preview.owners.score}

    \n \n
    \n
    \n
    \n );\n};\n\nexport default Header;\n","import React from 'react';\nimport cl from './FiltersSituationsList.module.scss';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setPlaybackMode, setSituationFilter } from 'redux/gameReducer';\nimport { capitalizeFirstLetter } from 'utils';\n\nconst FiltersSituationsListItem = ({ situation }) => {\n const situationFilter = useSelector(s => s.game.situationFilter);\n const playbackMode = useSelector(s => s.game.playbackMode);\n const dispatch = useDispatch();\n const spanClass = situationFilter === situation.name ? cl.active : '';\n\tconst buttonClass = situation.count <= 1 ? cl.hidden : ''\n\n const handleClick = e => {\n playbackMode !== 'pause' && dispatch(setPlaybackMode('pause'));\n\t\tconst newSituationFilter = situationFilter !== e.currentTarget.name ? e.currentTarget.name : 'All'\n dispatch(setSituationFilter(newSituationFilter));\n };\n return (\n
  • \n \n {capitalizeFirstLetter(situation.name)}\n \n
  • \n );\n};\n\nexport default FiltersSituationsListItem;\n","import React, { forwardRef } from 'react';\nimport FiltersSituationsListItem from './FiltersSituationsListItem';\nimport cl from './FiltersSituationsList.module.scss';\nimport { useSortFilteredSituations } from 'hooks/useFilterSituations';\n\nconst FiltersSituationsList = ({ situations, horizontalScrollHandler }, ref) => {\n const filteredSituations = useSortFilteredSituations(situations).map((situation, i) => (\n \n ));\n\n return (\n
      \n {filteredSituations}\n
    \n );\n};\n\nexport default forwardRef(FiltersSituationsList);\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAE7SURBVHgBnVLRUcMwFLPdDOBukE6QZgLoBMAEaScg3YANIBNQJuCYoGWCOBOQDfAECVLu5TDG7Ud953OspxfJsrVKjLZtrTHmO8SGYViWZeljrlHpsU5geYqYiWIOxRuofGLrF4vF3TiOf4jAKvD6SdWYilw4cpkARypg5daj2cZKwGrUt7K1+OEJ60bjr1sUXtUVAy726DWPiZpnkcHJ3BGLSezNUHyYjxDUapzvLdgf4NSD9x5gPXs1vyTEr1m9KIplwpXquo5Xa8V+yRDna7TqymGgvo6sWWD3MZFhh0LsoXMNW7SeR3wGVsPmh5ArLE/qv1PHEBsQnqMCiQd5F5fGyxSic+6otb5Vv1d1LhMf1HqEvZok8Mr2Ynkls0k0N0F9h7khqFMyEmwbYmzAtZ1i7rlD9gnMpYg/v4egKOR2/XAAAAAASUVORK5CYII=\"","import React from 'react';\nimport classNames from 'classnames';\nimport cl from './CameraList.module.scss';\n\nconst CameraListItem = ({ camera, activeMode, handleCameraClick }) => {\n const cameraClasses = classNames([cl.camera], {\n [cl.active]: activeMode.cams_values.includes(camera.number),\n\t\t[cl.selected]: camera.number === activeMode.cams_values[activeMode.active_cam - 1]\n });\n\n return (\n \n );\n};\n\nexport default CameraListItem;\n","import classNames from 'classnames';\nimport React, { useState } from 'react';\nimport cl from './CameraList.module.scss';\nimport CameraListItem from './CameraListItem';\n\nconst MODES_DATA = [\n { number: 1, cams_values: [2], active_cam: 1, is_active: true },\n { number: 2, cams_values: [1, 3, 5, 7], active_cam: 4, is_active: false },\n { number: 3, cams_values: [2, 6, 4, 8], active_cam: 2, is_active: false }\n];\n\nconst CAMERAS = [\n { number: 1, title: 'Base left main' },\n { number: 2, title: 'Base right main' },\n { number: 3, title: 'Base left add' },\n { number: 4, title: 'Base right add' },\n { number: 5, title: 'Bat left' },\n { number: 6, title: 'Bat right' },\n { number: 7, title: 'Pitch' },\n { number: 8, title: 'IP' }\n];\n\nconst CameraList = () => {\n const [modesData, setModesData] = useState(MODES_DATA);\n\n const handleModeClick = index => {\n !modesData[index].is_active &&\n setModesData(prev =>\n prev.map((mode, i) => (i === index ? { ...mode, is_active: true } : { ...mode, is_active: false }))\n );\n };\n\n const handleModeValueClick = (modeIndex, valueIndex) => {\n modesData[modeIndex].is_active &&\n setModesData(prev =>\n prev.map((mode, i) => (i === modeIndex ? { ...mode, active_cam: valueIndex + 1 } : mode))\n );\n };\n\n const handleCameraClick = (activeModeNumber, cameraNumber, activeCam) => {\n setModesData(prev =>\n prev.map((mode, i) => {\n if (mode.number === activeModeNumber) {\n const values = mode.cams_values;\n values[activeCam - 1] = cameraNumber;\n\n return { ...mode, cams_values: values };\n }\n return mode;\n })\n );\n };\n\n const activeMode = modesData.find(mode => mode.is_active);\n\n return (\n
    \n {CAMERAS.map((camera, i) => (\n \n ))}\n
    \n {modesData.map((mode, i) => {\n const modeClasses = classNames({\n [cl.oneCamera]: mode.cams_values.length === 1,\n [cl.fourCameras]: mode.cams_values.length === 4,\n [cl.activeMode]: mode.is_active\n });\n return (\n
    handleModeClick(i)}>\n {mode.cams_values.map((value, j) => {\n const valueClasses = classNames({\n [cl.activeCameraBtn]: mode.is_active && mode.active_cam - 1 === j\n });\n return (\n \n );\n })}\n
    \n );\n })}\n
    \n
    \n );\n};\n\nexport default CameraList;\n","import React from 'react';\nimport cl from './Cross.module.scss';\n\nconst Cross = ({ imgSrc, handleClick, alt = 'close' }) => {\n return (\n \n );\n};\n\nexport default Cross;\n","import React from 'react';\nimport cl from './ModalCameraSelector.module.scss';\nimport ModalCross from 'images/modal_cross.png';\nimport { setIsCameraSelector } from 'redux/gameReducer';\nimport { useDispatch } from 'react-redux';\nimport CameraList from './CameraList';\nimport Cross from 'components/UI/buttons/Cross/Cross';\n\nconst ModalCameraSelector = ({ activeNumber }) => {\n const dispatch = useDispatch();\n\n const handleCloseBtnClick = () => dispatch(setIsCameraSelector(false));\n return (\n
    \n
    e.stopPropagation()}>\n \n \n
    \n
    \n );\n};\n\nexport default ModalCameraSelector;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAdCAYAAAC9pNwMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEjSURBVHgBxZeNDYIwEIWPxAEcwRE6giO4gW7gCOAEuoFuwgi4gSMwwvOI13AQ+W2vvKQJP9f3QSjvgIgFwFFqMTTHTzkZS1i53ynQygzO3nfFcUng7PkU75rHqX/youB3iiD22fMoFdQNFR6loNGTAiTQSrw+PA5TE5wUQibuaTn0oDymoQMTq9kTQ6AhBiEXvBouj6gOeUT/4KOLpLcoXxRLY68Fb5/R6kEWau5GwU88rgpakKXQTbk0UAUvFbSkFEI37L1sOxt6YQ/rzjaxqqM3Fw1d8h4HNRdvuDS5fO365MIWWY0tuhMihP1iOCKGPWY0F194RqsoYY+pby4Yhz16zcUfzC2hCq5Tzu34WCbnblmWFWSkxpuBfvvtryb5v9MXlssxG0Xg0MsAAAAASUVORK5CYII=\"","import React, { useRef } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setIsCameraSelector, setSeekValue, setViewMode } from 'redux/gameReducer';\nimport cl from './FiltersViewModes.module.scss';\nimport GearIcon from 'icons/gear_icon.png';\nimport ModalCameraSelector from '../ModalCameraSelector/ModalCameraSelector';\n\nconst FiltersViewModes = () => {\n const activeNumberRef = useRef(1);\n\n const viewMode = useSelector(s => s.game.viewMode);\n const isCameraSelector = useSelector(s => s.game.isCameraSelector);\n\n const dispatch = useDispatch();\n\n const handleModeClick = e => {\n\t\tif (e.currentTarget.name === viewMode) {\n\t\t\treturn\n // dispatch(setIsCameraSelector(true));\n\t\t\t// return\n }\n dispatch(setViewMode(e.currentTarget.name));\n dispatch(setSeekValue(null));\n activeNumberRef.current = +e.currentTarget.name.slice(-1);\n };\n const getClassName = mode => (viewMode === mode ? cl.active : '');\n\n return (\n <>\n
    \n \n \n \n
    \n {isCameraSelector && }\n \n );\n};\n\nexport default FiltersViewModes;\n","import { useEffect, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nconst useScrollingArrows = () => {\n const [isLeftArrow, setIsLeftArrow] = useState(false);\n const [isRightArrow, setIsRightArrow] = useState(false);\n\n const innerWrapperRef = useRef(null);\n\n\tconst situations = useSelector(s => s.game.situations)\n\tconst currentTab = useSelector(s => s.game.currentTab)\n\tconst mobileWidth = useSelector(s => s.shared.mobileWidth)\n\n useEffect(() => {\n if (innerWrapperRef.current === null) return;\n\n setIsLeftArrow(innerWrapperRef.current.scrollLeft <= 0 ? false : true);\n setIsRightArrow(\n innerWrapperRef.current.scrollLeft + innerWrapperRef.current.clientWidth <\n innerWrapperRef.current.scrollWidth\n ? true\n : false\n );\n }, [situations, mobileWidth, currentTab]);\n\n const horizontalScrollHandler = e => {\n setIsLeftArrow(e.target.scrollLeft <= 0 ? false : true);\n setIsRightArrow(e.target.scrollLeft + e.target.clientWidth < e.target.scrollWidth ? true : false);\n };\n\n return [isLeftArrow, isRightArrow, innerWrapperRef, horizontalScrollHandler];\n};\n\nexport default useScrollingArrows;\n","import React from 'react';\nimport cl from './Filters.module.scss';\nimport FiltersSituationsList from '../FiltersSituationsList/FiltersSituationsList';\nimport FiltersViewModes from '../FiltersViewModes/FiltersViewModes';\nimport Arrow from 'components/UI/buttons/Arrow/Arrow';\n// import useScrollHorizontally from 'hooks/useScrollHorizontally';\nimport { useSelector } from 'react-redux';\nimport { getSearchParam } from 'utils';\nimport PlayerFilterField from '../PlayerFilterField/PlayerFilterField';\nimport useScrollingArrows from 'hooks/useFiltersScrollingArrows';\n\nconst Filters = () => {\n const tab = getSearchParam('tab');\n const situations = useSelector(s => s.game.situations);\n const isBroadcast = useSelector(s => s.game.isBroadcast);\n const isVideo = useSelector(s => s.game.isVideo);\n\n // const [scrollRef, isLeftScroll, isRightScroll, addListeners, removeListeners, scrollFixation] =\n // useScrollHorizontally();\n\n const [isLeftArrow, isRightArrow, innerWrapperRef, horizontalScrollHandler] = useScrollingArrows();\n\n // useEffect(() => {\n // const ref = scrollRef.current;\n // setTimeout(scrollFixation, 600);\n // addListeners();\n // return () => {\n // removeListeners(ref);\n // };\n // // eslint-disable-next-line\n // }, []);\n\n // useEffect(() => {\n // if (scrollRef.current) {\n // scrollFixation();\n // }\n // // eslint-disable-next-line\n // }, [situations]);\n\n const scrollHorizontally = e => {\n const start = innerWrapperRef.current.scrollLeft,\n change = 580,\n increment = 10;\n let currentTime = 0;\n\n Math.easeInOutQuad = function (t, b, c, d) {\n t /= d / 2;\n if (t < 1) return (c / 2) * t * t + b;\n t--;\n return (-c / 2) * (t * (t - 2) - 1) + b;\n };\n\n const animateScroll = function (name) {\n currentTime += increment;\n const val = Math.easeInOutQuad(currentTime, start, name === 'scroll-left' ? -change : change, 300);\n innerWrapperRef.current.scrollLeft = val;\n if (currentTime < 300) {\n setTimeout(() => animateScroll(name), increment);\n }\n };\n\n animateScroll(e.currentTarget.name);\n };\n\n const renderScrollArrow = (flag, direction = 'left') => (\n \n );\n\n return (\n
    \n
    \n \n
    \n {renderScrollArrow(isLeftArrow)}\n \n {renderScrollArrow(isRightArrow, 'right')}\n
    \n {tab === 'videos' && !isBroadcast && isVideo && }\n
    \n
    \n );\n};\n\nexport default Filters;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAqCAYAAAAwPULrAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARQSURBVHgBzVhdSFRREJ5dXXfd1XV3NcV0Q8UfAhHKMhILo9AkoyKECiIpkiD6eaweSomghx7Ch6IeyurNggqJKKhEIsiH/pBIqLYeLDPDZS1MV3f75t67uIE/5569u/rB3XP23pk5c8/MmZk7RJLIyMhwOxyOYyaT6V5ycnI/rkBSUlIoJSXFj7EnMzPzPMgKKJFobm62mc3m01AqgL/h6Av3Q9H/QfOltLS0gRKB4uLiJVar9bW2cDg1NfU+dmiHzWYraGhocIbDYVNNTY3bbrevxrO7UUp/xL2DFE9AiRvagr6cnJw189Gnp6dfhYk/R5QE/zmKBzweTx0vgMUGSKcvYXf3gk9xg+zs7O1kNGDOBywc5jlMEnC5XPuY32Kx9JKR6OzsTMJpHGHhFRUV2SSB2tpaPkiKjKKiolIyCvCdtSwUYeIVxQCY9ibLgbytIvRmEaLR0VGrNh2g2DDFP8Fg0C1CLKRcFH5TDIBZ+dQSLBAWohchgr8pI2Kbg2JAKBSy8Dg+Pj4oQi+kHAKqImxqaqqMYgBezqvJmSCjgOhvhUnGcAXLysrSSQJNTU0psMAYZ5aqqqpMMhIQ/A5DOC8vTyoMIL6tYH7IeSnKI3wgkDe/8jg8PLyNJIAKZgePMOk3UR4h5ZC6vFBuC89x0oZJAhMTE9+16QYUEE4yELWk5tWHFANg2rcsB7l2tQi90M6lpaUN8Qh/kT6tXE7hWspzJP8hMgoQaoZiP3kKRQ8hibtIH1xIWSdITYFvyGjAJMdJq8uw0Ek9vKhoLkR44b8HKE64SGpl26GHCb7aRWqxqeuldKG8vLyCgyiuEQ7MIjytra02uESQ+XJzc5dRPIFdeEGq7x0RoYd7HiW1SH1M8QaC6WZSI/0v+FIRza3YCryMn9TMspESARyO66SW3E/moXvOdE6n8xJJQG89pwAmvRZZfy46+JkiHwfhFklASrkIEP/mIzEpPyZTiCQgpRzKbIu26Jx1GZ7/1UY7SUBKOTh5ocKsfk3NisnJSaVI9fv9eZQIeL3e9dgJLp/YpvvmosWB2E9qwTAIvlUULyBZr0VouKMpxSe1Q4QPqe4Kab0V5kEgXk5GoLKy0p6VlbULgrtZuLZIAMn7tB45MP8ZKPaHprtP3Wih7WxvbxfKMv+Be28Q2MppiqZbWiMIvGcLCwtzSALcicJ1GTJ+RMn0ISy18bN5BTQ2NiLL2NuilYK/PENHaQ/mesukGVFXV+eAzGZ80fVGrRGAgqe45puNrwDm+hBhAHMXTBo/JwawESuh2O3ImkiH/TRDB4tv+EjNmX1w4nWUQJSUlHAEUNZnPZCHpz8dofF7Uuutpy0tLVIBM1bk5+d7oKDSNWVXUm6y/UnTuL6+3kMLCD6I0Ic/HcOofjZxaunR/uymRQDEUq4T2b0emTgpc5uhurq6wO12x9RFMgI+n29JX1/fJ46nfHSF2lELgWTsWoAWKf4BVwckBwJLE8YAAAAASUVORK5CYII=\"","import React, { useState } from 'react';\nimport PortraitImg from 'images/portrait.png';\n\nconst ContentCardPortrait = ({ playerId, cl, ...props }) => {\n const [isLoaded, setLoaded] = useState(false);\n\n\tconst pHolderStyles = isLoaded ? { display: 'none' } : {}\n\tconst imgStyles = !isLoaded ? { display: 'none' } : {}\n return (\n
    \n \n setLoaded(true)}\n style={imgStyles}\n alt='Portrait'\n />\n
    \n );\n};\n\nexport default ContentCardPortrait;\n","import React from 'react';\nimport cl from './ContentCardTitle.module.scss';\nimport { Link } from 'react-router-dom';\n\nconst ContentCardTitle = ({ player }) => {\n const { h, '2b': b2, '3b': b3, ab, hr, pa } = player;\n\n const isStats = b2 !== undefined && b3 !== undefined && hr !== undefined;\n\n const getStats = () => {\n let subStr = [];\n b2 && subStr.push(`${b2 > 1 ? `${b2} ` : ''}2B`);\n b3 && subStr.push(`${b3 > 1 ? `${b3} ` : ''}3B`);\n hr && subStr.push(`${hr > 1 ? `${hr} ` : ''}HR`);\n subStr = subStr.join(', ');\n const isSubstr = subStr.length > 0;\n\n return `PA:${pa}, ${h} of ${ab}${isSubstr ? ` (${subStr})` : ''}`;\n };\n\n const stats = isStats ? getStats() : '';\n\n return (\n

    \n {`${player.hit_order}. ${player.who}. ${stats}`}\n

    \n );\n};\n\nexport default ContentCardTitle;\n","import React from 'react';\n\nconst Ellipse = ({ fill, ...props }) => (\n \n \n \n);\n\nexport default Ellipse;\n","import React from 'react';\nimport Ellipse from '../Ellipse';\nimport cl from './BallsStrikes.module.scss';\n\nconst BallsStrikes = ({ balls, strikes }) => (\n
    \n 0 && '#2B9D6A'} />\n 1 && '#2B9D6A'} />\n 2 && '#2B9D6A'} />\n 3 && '#2B9D6A'} />\n 0 && '#E2001C'} />\n 1 && '#E2001C'} />\n 2 && '#E2001C'} />\n
    \n);\n\nexport default BallsStrikes;\n","import React from 'react';\n\nconst Rectangle = ({ fill, ...props }) => (\n \n \n \n);\n\nexport default Rectangle;\n","import React from 'react';\nimport Rectangle from '../Rectangle';\nimport cl from './Bases.module.scss';\n\nconst Bases = ({ r1, r2, r3 }) => (\n
    \n \n \n \n
    \n);\n\nexport default Bases;\n","import React from 'react';\nimport Ellipse from '../Ellipse';\nimport cl from './Outs.module.scss';\n\nconst Outs = ({ outs }) => (\n
    \n 0 && '#1A4C96'} />\n 1 && '#1A4C96'} />\n
    \n);\n\nexport default Outs;\n","import React from 'react';\nimport cl from './ContentCardSigns.module.scss';\nimport BallsStrikes from 'components/UI/icons/BallsStrikes/BallsStrikes';\nimport Bases from 'components/UI/icons/Bases/Bases';\nimport Outs from 'components/UI/icons/Outs/Outs';\n\nconst ContentCardSigns = ({ table }) => {\n const { r1, r2, r3, outs, balls, strikes } = table;\n\n return (\n <>\n
    \n \n \n
    \n \n \n );\n};\n\nexport default ContentCardSigns;\n","import React from 'react';\nimport cl from './ContentCardSimple.module.scss';\n// import PortraitImg from 'images/portrait.png';\nimport { useSelector } from 'react-redux';\nimport ContentCardPortrait from '../ContentCardPortrait/ContentCardPortrait';\nimport classNames from 'classnames';\nimport ContentCardTitle from '../ContentCardTitle/ContentCardTitle';\nimport ContentCardSigns from '../ContentCardSigns/ContentCardSigns';\n\nconst ContentCardSimple = ({ player, noCardTitle = false, noSigns = false }) => {\n // const imagesData = useSelector(state => state.game.imagesData);\n const isVideo = useSelector(state => state.game.isVideo);\n\n const lastMoment = player.moments.slice(-1)[0];\n\n const eventsSummary = lastMoment?.events?.reduce((sum, event) => [...sum, event.description], []) || [];\n const cardText = eventsSummary.length > 0 ? eventsSummary.join('.') + '.' : '';\n // const imgClassName = !imagesData[player.who_id] ? cl.default : '';\n // const imgSrc = imagesData[player.who_id] || PortraitImg;\n\n const wrapperClasses = classNames(cl.rectanglesEllipsesWrapper, {\n [cl.noVideo]: !isVideo\n });\n return (\n
    \n {!noCardTitle && }\n
    \n \n
    \n {cardText}\n {!noSigns && (\n
    \n \n
    \n )}\n
    \n
    \n
    \n );\n};\n\nexport default ContentCardSimple;\n","import React from 'react';\nimport cl from './ContentCardComplexFooter.module.scss';\nimport BallsStrikes from 'components/UI/icons/BallsStrikes/BallsStrikes';\nimport Bases from 'components/UI/icons/Bases/Bases';\nimport Outs from 'components/UI/icons/Outs/Outs';\nimport { useSelector } from 'react-redux';\nimport classNames from 'classnames';\n\nconst ContentCardComplexFooter = ({ lastMoment, noSigns }) => {\n const isVideo = useSelector(state => state.game.isVideo);\n\n const eventsSummary = [];\n const { r1, r2, r3, outs, balls, strikes } = lastMoment?.table || 0;\n\n lastMoment?.events?.forEach(event => eventsSummary.push(event.description));\n\n const cardText = eventsSummary.join('.') + '.';\n\n const wrapperClasses = classNames(cl.rectanglesEllipsesWrapper, {\n [cl.noVideo]: !isVideo\n });\n return (\n
    \n

    {cardText}

    \n {!noSigns && (\n
    \n
    \n \n \n
    \n \n
    \n )}\n
    \n );\n};\n\nexport default ContentCardComplexFooter;\n","export default __webpack_public_path__ + \"static/media/switch_arrow.c468c60c.svg\";","import React from 'react';\nimport cl from './SwitchArrow.module.scss';\nimport SwitchArrowIcon from 'icons/switch_arrow.svg'\n\nconst SwitchArrow = () => {\n return (\n
    \n switch-arrow\n
    \n );\n};\n\nexport default SwitchArrow;\n","import React from 'react';\nimport classNames from 'classnames';\n\nconst ItemRowSideText = ({ event, cl, side = 'left', rowNumber = 1 }) => {\n const leftSideClasses = classNames(cl.leftSide, {\n [cl.textBold]: (event.left_row2_index && rowNumber === 2) || (event.left_row1_index && rowNumber === 1)\n });\n\n const rightSideClasses = classNames(cl.rightSide, {\n [cl.textBold]: (event.right_row1_index && rowNumber === 1) || (event.right_row2_index && rowNumber === 2)\n });\n\n const classes = side === 'left' ? leftSideClasses : rightSideClasses;\n return (\n

    \n {event[`${side}_row${rowNumber}_text`] || event[`${side}_row${rowNumber}_index`]}\n

    \n );\n};\n\nexport default ItemRowSideText;\n","import React from 'react';\nimport SwitchArrow from 'components/UI/dividers/SwitchArrow/SwitchArrow';\nimport ItemRowSideText from './ItemRowSideText';\n\nconst ItemRow = ({ event, rowNumber = 1, cl }) => (\n
    \n \n \n \n
    \n);\n\nexport default ItemRow;\n","import React from 'react';\nimport ItemRow from './ItemRow';\n\nconst ItemTextBlockBody = ({ cl, event }) => {\n const isSecondRow = event.rows_numbers === 2;\n\n return (\n
    \n \n {isSecondRow && }\n
    \n );\n};\n\nexport default ItemTextBlockBody;\n","import React from 'react';\n\nconst ItemTextBlockHeader = ({ cl, header }) => {\n const headerClasses = [cl.textBold, cl.textAlignCenter].join(' ');\n\n return

    {header}

    ;\n};\n\nexport default ItemTextBlockHeader;\n","import React from 'react';\nimport ItemTextBlockBody from './ItemTextBlockBody';\nimport ItemTextBlockHeader from './ItemTextBlockHeader';\n\nconst ItemTextBlock = ({ cl, header, event, isVideo }) => {\n const isHeader = header !== null && !isVideo;\n\n return (\n
    \n {isHeader && }\n \n
    \n );\n};\n\nexport default ItemTextBlock;\n","import React from 'react';\nimport PortraitImg from 'images/portrait.png';\nimport ContentCardPortrait from 'components/Game/ContentCardPortrait/ContentCardPortrait';\n\nconst ItemRightPortrait = ({ cl, event, imagesData }) => {\n const rightImgClass = !imagesData[event.old_player] ? cl.default : '';\n const rightImgSrc = imagesData[event.old_player] || PortraitImg;\n\n const rightSide = event.old_player ? (\n \n ) : (\n
    \n );\n\n return <>{rightSide};\n};\n\nexport default ItemRightPortrait;\n","import React from 'react';\nimport cl from '../ContentCardReplacement.module.scss';\nimport PortraitImg from 'images/portrait.png';\nimport { useSelector } from 'react-redux';\nimport ContentCardPortrait from '../../ContentCardPortrait/ContentCardPortrait';\nimport classNames from 'classnames';\nimport ItemTextBlock from './ItemTextBlock';\nimport ItemRightPortrait from './ItemRightPortrait';\n\nconst ContentCardReplacementItem = ({ event, header = null }) => {\n const imagesData = useSelector(state => state.game.imagesData);\n const isVideo = useSelector(state => state.game.isVideo);\n\n const leftImgClass = !imagesData[event.new_player] ? cl.default : '';\n const leftImgSrc = imagesData[event.new_player] || PortraitImg;\n \n const replaceClasses = classNames(cl.replace, { [cl.noVideo]: !isVideo });\n return (\n
    \n \n \n \n
    \n );\n};\n\nexport default ContentCardReplacementItem;\n","import React, { Fragment } from 'react';\nimport { useSelector } from 'react-redux';\nimport { getShortName } from 'utils';\nimport cl from './ContentCardReplacement.module.scss';\nimport ContentCardReplacementItem from './ContentCardReplacementItem/ContentCardReplacementItem';\n\nconst ContentCardReplacement = ({ events }) => {\n const isVideo = useSelector(state => state.game.isVideo);\n\n let teamName;\n return (\n
    \n {events.map((event, i) => {\n\t\t\t\tconst isTeamsNotEqual = event.team !== teamName\n\t\t\t\t\n if (isTeamsNotEqual) {\n teamName = event.team;\n const headerTitle = `${getShortName(event.team, 18)} replacements`;\n\n return (\n \n {isVideo &&

    {headerTitle}

    }\n \n
    \n );\n }\n\n return (\n \n \n \n );\n })}\n
    \n );\n};\n\nexport default ContentCardReplacement;\n","import React from 'react';\nimport cl from './Rects.module.scss';\n\nconst RectText = ({ icons }) => {\n const classes = [cl.rectText, cl[icons.rect_color]];\n return
    {icons.rect_text.toUpperCase()}
    ;\n};\n\nexport default RectText;\n","import React from 'react';\nimport cl from './Rects.module.scss';\n\nconst RectScore = ({ icons }) => {\n const classes = [cl.score, cl.rectText];\n const scoreText = icons.score_gue + ' - ' + icons.score_own;\n\n return
    {scoreText}
    ;\n};\n\nexport default RectScore;\n","import RectScore from 'components/UI/icons/Rects/RectScore';\nimport RectText from 'components/UI/icons/Rects/RectText';\nimport React, { useLayoutEffect, useRef, useMemo } from 'react';\n\nconst BodyTop = ({ cl, sit, innerRects = false }) => {\n const ref = useRef(null);\n\n const eventsSummary = useMemo(\n () => sit.events.reduce((sum, event) => [...sum, event.description], []),\n [sit.events]\n );\n\n useLayoutEffect(() => {\n if (ref.current === null) return;\n ref.current.innerHTML = eventsSummary.join('.') + '.';\n }, [eventsSummary, sit.icons.rect_text]);\n\n const isRectScore = sit.icons.score_own !== undefined;\n\n const cardText = eventsSummary.join('.') + '.';\n return (\n
    \n \n {cardText}\n

    \n {innerRects && (\n
    \n \n {isRectScore && }\n
    \n )}\n
    \n );\n};\n\nexport default BodyTop;\n","import React from 'react';\nimport cl from './ContentCardComplexBody.module.scss';\nimport 'scss/colorWords.scss';\nimport ContentCardReplacement from '../ContentCardReplacement/ContentCardReplacement';\nimport RectText from 'components/UI/icons/Rects/RectText';\nimport RectScore from 'components/UI/icons/Rects/RectScore';\nimport { useSelector } from 'react-redux';\nimport ContentCardSigns from '../ContentCardSigns/ContentCardSigns';\nimport BodyTop from './BodyTop';\nimport classNames from 'classnames';\n\nconst ContentCardComplexBody = ({ sit, noSigns, innerRects }) => {\n const isVideo = useSelector(state => state.game.isVideo);\n\n const isRectScore = sit.icons.score_own !== undefined;\n\n const bottomClasses = classNames(cl.bottom, {\n [cl.noVideo]: !isVideo\n });\n return (\n <>\n {sit.icons.rect_text !== 'Replacement' ? (\n
    \n \n {!innerRects &&
    \n \n {isRectScore && }\n {!noSigns && }\n
    }\n
    \n ) : (\n \n )}\n \n );\n};\n\nexport default ContentCardComplexBody;\n","import React, { useLayoutEffect, useRef } from 'react';\nimport ContentCardPortrait from '../ContentCardPortrait/ContentCardPortrait';\nimport ContentCardTitle from '../ContentCardTitle/ContentCardTitle';\nimport RectText from 'components/UI/icons/Rects/RectText';\nimport RectScore from 'components/UI/icons/Rects/RectScore';\n// import PortraitImg from 'images/portrait.png';\n// import classNames from 'classnames';\n\nconst HeaderTop = ({ cl, eventsSummary, player, sit, noCardTitle, innerRects }) => {\n const ref = useRef(null);\n\n // const imagesData = useSelector(state => state.game.imagesData);\n\n useLayoutEffect(() => {\n ref.current.innerHTML = eventsSummary.length > 0 ? eventsSummary.join('.') + '.' : '';\n }, [eventsSummary, sit.icons.rect_text]);\n\n const cardText = eventsSummary.length > 0 ? eventsSummary.join('.') + '.' : '';\n // const imgSrc = imagesData[player.who_id] || PortraitImg;\n // const imgClasses = classNames({ [cl.default]: !imagesData[player.who_id] });\n const isRectScore = sit.icons.score_own !== undefined;\n return (\n
    \n {!noCardTitle && }\n
    \n \n
    \n

    \n {cardText}\n

    \n {innerRects && (\n
    \n \n {isRectScore && }\n
    \n )}\n
    \n
    \n
    \n );\n};\n\nexport default HeaderTop;\n","import React from 'react';\nimport RectText from 'components/UI/icons/Rects/RectText';\nimport RectScore from 'components/UI/icons/Rects/RectScore';\nimport ContentCardSigns from '../ContentCardSigns/ContentCardSigns';\nimport { useSelector } from 'react-redux';\nimport classNames from 'classnames';\n\nconst HeaderBottom = ({ cl, eventsSummary, isRectText, sit, noSigns }) => {\n const isVideo = useSelector(state => state.game.isVideo);\n\n const isRectScore = sit.icons.score_own !== undefined;\n\n const bottomClasses = classNames(cl.bottom, {\n [cl.noVideo]: !isVideo\n });\n\n const bottomStyles =\n eventsSummary.length === 0 && !isVideo ? { position: 'absolute', top: '1.6rem', right: 0 } : null;\n return (\n
    \n {isRectText && }\n {isRectScore && }\n {!noSigns && }\n
    \n );\n};\n\nexport default HeaderBottom;\n","import React, { useMemo } from 'react';\nimport cl from './ContentCardComplexHeader.module.scss';\nimport 'scss/colorWords.scss';\nimport ContentCardReplacement from '../ContentCardReplacement/ContentCardReplacement';\nimport HeaderTop from './HeaderTop';\nimport HeaderBottom from './HeaderBottom';\n\nconst ContentCardComplexHeader = ({ player, sit, noCardTitle, noSigns, innerRects }) => {\n const eventsSummary = useMemo(\n () =>\n sit.icons.rect_text !== 'Replacement'\n ? sit.events.reduce((sum, event) => [...sum, event.description], [])\n : [],\n // eslint-disable-next-line\n [sit.events]\n );\n\n const isRectText = sit.icons.rect_text !== 'Replacement';\n\n return (\n
    \n \n {!innerRects && (\n \n )}\n\n {!isRectText && }\n
    \n );\n};\n\nexport default ContentCardComplexHeader;\n","import React from 'react';\nimport ContentCardComplexFooter from '../ContentCardComplexFooter/ContentCardComplexFooter';\nimport ContentCardComplexBody from '../ContentCardComplexBody/ContentCardComplexBody';\nimport ContentCardComplexHeader from '../ContentCardComplexHeader/ContentCardComplexHeader';\n\nconst ContentCardComplex = ({\n player,\n situationsArr,\n noCardTitle = false,\n noSigns = false,\n innerRects = false\n}) => {\n const lastMoment = player.moments.slice(-1)[0];\n const isFooter = !lastMoment.icons?.rect_text || lastMoment.icons?.rect_text === 'Replacement';\n\n return (\n <>\n \n {situationsArr.slice(1).map((sit, i) => (\n \n ))}\n {isFooter && }\n \n );\n};\n\nexport default ContentCardComplex;\n","import React, { forwardRef } from 'react';\nimport cl from './ContentSituationsListItem.module.scss';\nimport ContentCardSimple from '../ContentCardSimple/ContentCardSimple';\nimport ContentCardComplex from '../ContentCardComplex/ContentCardComplex';\nimport ContentCardReplacement from '../ContentCardReplacement/ContentCardReplacement';\nimport { useSelector } from 'react-redux';\nimport classNames from 'classnames';\n\nconst ENDINGS = ['ST', 'ND', 'RD', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH'];\n\nconst ContentSituationsListItem = (\n { player, situationClick, currentCard, cardIndex, beforeAfterData },\n ref\n) => {\n const situationFilter = useSelector(state => state.game.situationFilter);\n const isVideo = useSelector(state => state.game.isVideo);\n // useEffect(() => {\n // let observer = new IntersectionObserver(entries => {\n // entries.forEach(entry => {\n // const { isIntersecting } = entry;\n\n // if (isIntersecting) {\n // console.log('Intersecting', player.who);\n // } else {\n // console.log('Not intersecting', player.who);\n // }\n // });\n // });\n // observer.observe(activeRef.current);\n\n // }, []);\n\n const itemClasses = classNames(cl.listItem, {\n [cl.active]: currentCard.moments && player.moments[0].inner.id === currentCard.moments[0].inner.id,\n [cl.dataBeforeNoVideo]: !isVideo\n });\n\n //Filling situationsArr with moments where icons.rect_text exists\n const situationsArr = [];\n player.moments.forEach(moment => moment.icons?.rect_text && situationsArr.push(moment));\n\n const activeRef =\n currentCard.moments && player.moments[0].inner.id === currentCard.moments[0].inner.id\n ? ref\n : null || null;\n\n const dataBefore = beforeAfterData[cardIndex]?.before\n ? `${player.side.toUpperCase()} ${player.inning_number}${ENDINGS[player.inning_number - 1]}`\n : null;\n const isDataAfter = beforeAfterData[cardIndex]?.after && situationFilter === 'All';\n\n const styles = {};\n if (dataBefore && situationFilter !== 'All') styles.marginTop = cardIndex === 0 ? 24 : 26;\n if (!isDataAfter && situationFilter !== 'All') styles.marginBottom = 0;\n\n const dataAfterClasses = classNames(cl.dataAfter, { [cl.dataAfterNoVideo]: !isVideo });\n return (\n \n {player.type === 'Replacement' ? (\n \n ) : situationsArr.length > 0 ? (\n \n ) : (\n \n )}\n {isDataAfter && (\n
    \n RUNS: {beforeAfterData[cardIndex].after.runs}\n HITS: {beforeAfterData[cardIndex].after.hits}\n ERRORS: {beforeAfterData[cardIndex].after.err}\n LOB: {beforeAfterData[cardIndex].after.lob}\n
    \n )}\n \n );\n};\n\nexport default forwardRef(ContentSituationsListItem);\n","import { useDispatch, useSelector } from 'react-redux';\nimport { setActiveCardList, setCurrentCard, setCurrentMoment } from 'redux/gameReducer';\n\nconst KEYS = ['ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight'];\n\nconst useArrowNavigate = (cards, currentCard) => {\n const activeCardList = useSelector(state => state.game.activeCardList);\n const currentMoment = useSelector(state => state.game.currentMoment);\n const focus = useSelector(state => state.game.focus);\n\n // const playbackMode = useSelector(state => state.game.playbackMode);\n const dispatch = useDispatch();\n\n const handleKeyDown = e => {\n if (!KEYS.includes(e.key)) return;\n e.preventDefault();\n\n // Set playback mode to pause\n // playbackMode !== 'pause' && dispatch(setPlaybackMode('pause'));\n\n const cardIndex = cards.findIndex(card => card.moments[0].inner.id === currentCard.moments[0].inner.id);\n const newMoments = [];\n currentCard.type !== 'Replacement'\n ? currentCard.moments?.forEach(moment => moment.icons && newMoments.push(moment))\n : newMoments.push(currentCard.moments[0]);\n const momentIndex = newMoments?.findIndex(moment => moment.inner?.id === currentMoment?.inner?.id);\n\n if (focus !== 'list') return;\n\n switch (e.key) {\n case 'ArrowUp':\n if (cardIndex === 0 && activeCardList !== 'events') break;\n if (e.shiftKey) {\n const prevCard = cards\n .slice(0, cardIndex)\n .reverse()\n .find(card => card.who_id === currentCard.who_id);\n if (prevCard === undefined) break;\n dispatch(setCurrentCard(prevCard));\n break;\n }\n if (activeCardList === 'events') {\n if (momentIndex === 0 && cardIndex === 0) break;\n if (momentIndex === 0 || (momentIndex === -1 && cardIndex !== 0)) {\n dispatch(setCurrentCard(cards[cardIndex - 1]));\n break;\n }\n dispatch(setCurrentMoment(currentCard.moments[momentIndex - 1]));\n break;\n }\n dispatch(setCurrentCard(cards[cardIndex - 1]));\n break;\n case 'ArrowDown':\n if (cardIndex >= cards.length - 1 && activeCardList !== 'events') break;\n if (e.shiftKey) {\n const nextCard = cards.slice(cardIndex + 1).find(card => card.who_id === currentCard.who_id);\n if (nextCard === undefined) break;\n dispatch(setCurrentCard(nextCard));\n break;\n }\n if (activeCardList === 'events') {\n if (\n (momentIndex >= currentCard.moments.length - 1 && cardIndex >= cards.length - 1) ||\n momentIndex === -1\n )\n break;\n if (momentIndex >= currentCard.moments.length - 1) {\n dispatch(setCurrentCard({ ...cards[cardIndex + 1], toFirstMoment: true }));\n // dispatch(setCurrentCard({ ...cards[cardIndex + 1], manualMoment: true }));\n break;\n }\n\n dispatch(setCurrentMoment(currentCard.moments[momentIndex + 1]));\n break;\n }\n dispatch(setCurrentCard(cards[cardIndex + 1]));\n break;\n case 'ArrowLeft':\n dispatch(setActiveCardList('cards'));\n break;\n case 'ArrowRight':\n dispatch(setActiveCardList('events'));\n break;\n default:\n break;\n }\n };\n return handleKeyDown;\n};\n\nexport default useArrowNavigate;\n","import React from 'react';\nimport cl from './PlayOnline.module.scss';\n\nconst PlayOnline = ({ className, ...props }) => (\n \n);\n\nexport default PlayOnline;\n","import React from 'react';\nimport cl from './ContentControls.module.scss';\nimport PlayOnline from 'components/UI/buttons/PlayOnline/PlayOnline';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setCurrentCard, setIsLastMomentMode, setPlaybackMode } from 'redux/gameReducer';\nimport ForwardRepeat from 'components/UI/buttons/ForwardRepeat/ForwardRepeat';\nimport FirstLastMoment from 'components/UI/buttons/FirstLastMoment/FirstLastMoment';\nimport { forwardRef } from 'react';\n\nconst ContentControls = ({ noPlayPause = false, isPlayOnline = true, ...props }, ref) => {\n const playbackMode = useSelector(s => s.game.playbackMode);\n const isLastMomentMode = useSelector(s => s.game.isLastMomentMode);\n\tconst filteredCards = useSelector(s => s.game.filteredCards)\n\n const dispatch = useDispatch();\n\n const playbackModeClick = e => {\n const newMode =\n e.currentTarget.name === 'play-pause' ? (playbackMode === 'play' ? 'pause' : 'play') : 'playOnline';\n dispatch(setPlaybackMode(newMode));\n };\n\n const handlefirstLastBtn = () => dispatch(setIsLastMomentMode());\n\n const getClassName = name => {\n if (\n (playbackMode !== 'playOnline' && name === 'play-pause') ||\n (playbackMode === 'playOnline' && name === 'play-online')\n )\n return cl.active;\n return '';\n };\n\n const handleScrollDownClick = () => {\n ref.current.scrollTop = ref.current.scrollHeight;\n\n\t\tdispatch(setCurrentCard(filteredCards[filteredCards.length - 1]))\n\t\tdispatch(setPlaybackMode('play'))\n };\n return (\n
    \n {!noPlayPause && (\n <>\n \n \n \n )}\n {isPlayOnline && (\n \n )}\n
    \n );\n};\n\nexport default forwardRef(ContentControls);\n","import React from 'react';\nimport cl from './PlaysFooter.module.scss';\n\nconst PlaysFooter = ({ currentTab, handleClick }) => {\n const getClass = name => currentTab === name ? cl.active : '';\n\n return (\n
      \n
    • \n \n
    • \n
    • \n \n
    • \n
    • \n \n
    • \n
    \n );\n};\n\nexport default PlaysFooter;\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { setSearchParam } from 'utils';\nimport PlaysFooter from '../PlaysFooter/PlaysFooter';\nimport { setCurrentTab, setPitchState } from 'redux/gameReducer';\nimport { useSelector } from 'react-redux';\n\nconst MobileLandscapeTabs = ({ cl }) => {\n const currentTab = useSelector(s => s.game.currentTab);\n\n const dispatch = useDispatch();\n\n const handleTabClick = e => {\n setSearchParam('ptab', e.target.name);\n dispatch(setCurrentTab(e.target.name));\n dispatch(setPitchState('Field'));\n };\n\n return (\n
    \n \n
    \n );\n};\n\nexport default MobileLandscapeTabs;\n","import React, { forwardRef, useEffect, useRef } from 'react';\nimport cl from './ContentSituationsList.module.scss';\nimport ContentSituationsListItem from '../ContentSituationsListItem/ContentSituationsListItem';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setCurrentCard, setListScrollTop } from 'redux/gameReducer';\nimport useArrowNavigate from 'hooks/useArrowNavigate';\nimport ContentControls from '../ContentControls/ContentControls';\nimport MobileLandscapeTabs from './MobileLandscapeTabs';\nimport classNames from 'classnames';\nimport useGameFocus from 'hooks/useGameFocus';\n\nconst ControlsWrapper = forwardRef(({}, ref) => {\n const listScrollTop = useSelector(state => state.game.listScrollTop);\n\n return (\n
    \n \n
    \n );\n});\n\nconst ContentSituationsList = ({ filteredCards, currentCard, beforeAfterData, isVideo, currentTab }, ref) => {\n const activeCardList = useSelector(state => state.game.activeCardList);\n const isMobile = useSelector(state => state.shared.isMobile);\n\n const dispatch = useDispatch();\n const handleKeyDown = useArrowNavigate(filteredCards, currentCard);\n\n const listRef = useRef(0);\n const scrollTimeoutRef = useRef();\n\n useEffect(() => {\n if (!isMobile) {\n const timeout = setTimeout(() => {\n if (!listRef.current) return;\n\n const isListScroll =\n (listRef.current.scrollTop === 0 && listRef.current.scrollHeight > listRef.current.clientHeight) ||\n listRef.current.scrollTop > 0;\n dispatch(setListScrollTop(isListScroll));\n }, 400);\n\n return () => {\n clearTimeout(timeout);\n };\n }\n\n const scrollHandler = () => {\n clearTimeout(scrollTimeoutRef.current);\n\n scrollTimeoutRef.current = setTimeout(() => {\n const element = document.documentElement;\n\n const isListScroll = element.scrollTop + window.innerHeight < element.scrollHeight;\n dispatch(setListScrollTop(isListScroll));\n }, 100);\n };\n\n window.addEventListener('scroll', scrollHandler);\n\n return () => {\n clearTimeout(scrollTimeoutRef.current);\n window.removeEventListener('scroll', scrollHandler);\n };\n }, []);\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [currentCard, filteredCards, handleKeyDown]);\n\n const situationClick = player => () => {\n // playbackMode !== 'pause' && dispatch(setPlaybackMode('pause'));\n dispatch(setCurrentCard({ ...player, manualClick: true }));\n };\n\n const scrollHandler = e => {\n clearTimeout(scrollTimeoutRef.current);\n\n scrollTimeoutRef.current = setTimeout(() => {\n const isListScroll = e.target.scrollTop + e.target.clientHeight < e.target.scrollHeight;\n dispatch(setListScrollTop(isListScroll));\n }, 100);\n };\n\n const wrapperClasses = classNames(cl.wrapper, {\n [cl.landscapeDisplayNone]: currentTab === 'videos'\n });\n const classes = classNames(cl.blueDiv, {\n [cl.wider]: activeCardList === 'cards',\n [cl.taller]: activeCardList !== 'cards'\n });\n\n const listClasses = classNames(cl.list, {\n [cl.listNoVideo]: !isVideo,\n [cl.mobilePlaysListHeight]: isVideo,\n [cl.mobilePlaysListHeightVideo]: isVideo && currentTab === 'videos'\n });\n\n console.log(filteredCards);\n return (\n
    \n {isVideo && currentTab !== 'videos' && }\n\n
      \n {filteredCards.map((card, i) => (\n \n ))}\n
    \n
    \n {/* {!isVideo && ( */}\n \n {/* )} */}\n {/* */}\n
    \n );\n};\n\nexport default forwardRef(ContentSituationsList);\n","import React from 'react';\nimport cl from './ContentFooter.module.scss';\nimport ContentPitcher from '../ContentPitcher/ContentPitcher';\nimport ContentControls from '../ContentControls/ContentControls';\n\nconst ContentFooter = () => (\n
    \n \n \n
    \n);\n\nexport default ContentFooter;\n","import React from 'react';\n\nconst NoVideoScreen = () => {\n return (\n \n No video\n \n );\n};\n\nexport default NoVideoScreen;\n","import React from 'react';\n\nconst FullscreenBtn = ({ isOff = true, width = '100%', height = '100%' }) => {\n return (\n \n {isOff ? (\n <>\n \n \n \n \n \n ) : (\n <>\n \n \n \n \n \n )}\n \n );\n};\n\nexport default FullscreenBtn;\n","import React from 'react';\n\nconst PlayBtn = () => {\n return (\n \n \n \n );\n};\n\nexport default PlayBtn;\n","import React from 'react';\n\nconst PauseBtn = () => {\n return (\n \n \n \n \n );\n};\n\nexport default PauseBtn;\n","import React, { forwardRef, useEffect, useState, useRef } from 'react';\nimport cl from '../Videos/Videos.module.scss';\nimport { useSelector } from 'react-redux';\nimport classNames from 'classnames';\nimport PlayBtn from 'components/UI/icons/VideoControlsBtns/PlayBtn/PlayBtn';\nimport PauseBtn from 'components/UI/icons/VideoControlsBtns/PauseBtn/PauseBtn';\nimport FullscreenBtn from 'components/UI/icons/VideoControlsBtns/FullscreenBtn/FullscreenBtn';\nimport { closeFullscreen, openFullscreen } from 'utils';\nimport { useDispatch } from 'react-redux';\nimport { setPreferredVideoState, setSeekValue, setViewMode } from 'redux/gameReducer';\nimport useGameFocus from 'hooks/useGameFocus';\nimport Arrow from 'components/UI/buttons/Arrow/Arrow';\n\nconst MobileArrows = () => {\n const viewMode = useSelector(s => s.game.viewMode);\n\n const dispatch = useDispatch();\n\n const handlePrevModeClick = () => {\n const curViewModeNumber = +viewMode[viewMode.length - 1];\n\n dispatch(setViewMode(`mode-${curViewModeNumber - 1}`));\n dispatch(setSeekValue(null));\n };\n const handleNextModeClick = () => {\n const curViewModeNumber = +viewMode[viewMode.length - 1];\n\n dispatch(setViewMode(`mode-${curViewModeNumber + 1}`));\n dispatch(setSeekValue(null));\n };\n\n const isLeftArrow = viewMode[viewMode.length - 1] !== '1';\n const isRightArrow = viewMode[viewMode.length - 1] !== '3';\n return (\n <>\n {isLeftArrow && (\n \n )}\n {isRightArrow && (\n \n )}\n \n );\n};\n\nconst VideoControls = ({ setPlayPause, fullscreenAvailable = true, currentTab = null }, ref) => {\n const [isSynchronization, setIsSynchronization] = useState(false);\n\n const setGameFocus = useGameFocus('timeline');\n\n const videoState = useSelector(state => state.game.videoState);\n const isFullscreen = useSelector(state => state.game.isFullscreen);\n const viewMode = useSelector(state => state.game.viewMode);\n const preferredVideoState = useSelector(state => state.game.preferredVideoState);\n\n const isMobile = useSelector(s => s.shared.isMobile);\n\n const dispatch = useDispatch();\n\n const timeoutRef = useRef(null);\n const previousTimeRef = useRef(0);\n const clickTimerRef = useRef();\n\n const isFullscreenModeAvailable = fullscreenAvailable && !isMobile;\n\n useEffect(() => {\n const timeDelta = Date.now() - previousTimeRef.current;\n previousTimeRef.current = Date.now();\n\n if (timeDelta > 300) return;\n\n clearTimeout(timeoutRef.current);\n setIsSynchronization(true);\n\n timeoutRef.current = setTimeout(() => {\n setIsSynchronization(false);\n }, 300);\n\n return () => {\n clearTimeout(timeoutRef.current);\n };\n }, [videoState]);\n\n const handleFullscreenBtnClick = () => {\n if (isMobile) return;\n\n isFullscreen ? closeFullscreen() : openFullscreen(ref.current.parentElement.parentElement);\n };\n const handleFullscreenBtnTouch = () => {\n if (!isMobile) return;\n\n isFullscreen ? closeFullscreen() : openFullscreen(ref.current.parentElement.parentElement);\n };\n\n const playMode = videoState === 1 || videoState === 3 || isSynchronization ? 'pause' : 'play';\n const prefVideoStateValue = playMode === 'play' ? 1 : 2;\n\n const handleWrapperClick = e => {\n if (isMobile) return;\n // console.log(ref.current.lastChild.style.visibility);\n\n if (e.detail === 1) {\n clickTimerRef.current = setTimeout(() => {\n setPlayPause(playMode);\n dispatch(setPreferredVideoState(prefVideoStateValue));\n }, 200);\n }\n\n if (!isFullscreenModeAvailable) return;\n\n if (e.detail === 2) {\n clearTimeout(clickTimerRef.current);\n handleFullscreenBtnClick();\n }\n };\n\n const handlePlayPauseBtnClick = e => {\n if (isMobile) return;\n\n // const prefVideoStateValue = playMode === 'play' ? 1 : 2\n const prefVideoStateValue = preferredVideoState === 1 ? 2 : 1;\n const playMode = preferredVideoState === 1 ? 'pause' : 'play';\n\n // playMode === 'pause' && clearTimeout(playTimeout);\n setPlayPause(playMode);\n dispatch(setPreferredVideoState(prefVideoStateValue));\n };\n const handlePlayPauseBtnTouch = e => {\n if (!isMobile) return;\n\n console.log(e);\n // const prefVideoStateValue = playMode === 'play' ? 1 : 2\n const prefVideoStateValue = preferredVideoState === 1 ? 2 : 1;\n const playMode = preferredVideoState === 1 ? 'pause' : 'play';\n\n // playMode === 'pause' && clearTimeout(playTimeout);\n setPlayPause(playMode);\n dispatch(setPreferredVideoState(prefVideoStateValue));\n };\n\n const getPlayPauseBtn = () => {\n const comp = preferredVideoState !== 1 ? : ;\n // const comp = playMode === 'play' ? : ;\n\n return (\n \n );\n };\n\n const wrapperClasses = classNames(cl.controlsWrapper, {\n [cl.fullOpacity]: videoState === 2,\n [cl.leftZero]: viewMode.slice(-1) === '1'\n });\n\n const handleInnerWrapperClick = e => {\n e.stopPropagation();\n setGameFocus();\n };\n return (\n
    handleWrapperClick(e)}>\n
    \n \n \n
    \n {getPlayPauseBtn()}\n {isFullscreenModeAvailable && (\n \n )}\n
    \n {currentTab === 'videos' && }\n \n \n );\n};\n\nexport default forwardRef(VideoControls);\n","import SimpleToggler from 'components/UI/togglers/SimpleToggler/SimpleToggler';\nimport React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setIsVideoEffects } from 'redux/gameReducer';\nimport cl from './VideoOptions.module.scss';\n\nconst Effects = () => {\n const { isVideoEffects } = useSelector(state => state.game);\n\n const dispatch = useDispatch();\n\n const handleChange = e => dispatch(setIsVideoEffects(e.target.checked));\n return (\n
    \n Effects\n \n
    \n );\n};\n\nexport default Effects;\n","import React from 'react';\nimport cl from './VideoOptions.module.scss';\nimport classNames from 'classnames';\n\nconst ModeListItem = ({ mode, currentMode, handleModeClick }) => {\n const itemClasses = classNames({\n [cl.active]: mode === currentMode\n });\n\n return (\n
  • \n {mode}\n
  • \n );\n};\n\nexport default ModeListItem;\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useSelector } from 'react-redux';\nimport { setVideoLengthMode } from 'redux/gameReducer';\nimport ModeListItem from './ModeListItem';\nimport cl from './VideoOptions.module.scss';\n\nconst ModeList = props => {\n const videoLengthMode = useSelector(state => state.game.videoLengthMode);\n\n const dispatch = useDispatch();\n\n const MODES = ['Full', 'Short', 'Super Short'];\n\n const handleModeClick = name => () => dispatch(setVideoLengthMode(name));\n return (\n
      \n {MODES.map((mode, i) => (\n \n ))}\n
    \n );\n};\n\nexport default ModeList;\n","import ArrowDown from 'components/UI/icons/ArrowDown';\nimport React, { useState, useEffect, useRef } from 'react';\nimport { getShortName } from 'utils';\nimport cl from './VideoSpeedDropdown.module.scss';\n\nfunction listenForOutsideClicks(listening, setListening, menuRef, setIsOpen, setSearchFieldValue) {\n return () => {\n if (listening) return;\n if (!menuRef.current) return;\n setListening(true);\n [`click`, `touchstart`].forEach(type => {\n document.addEventListener(type, evt => {\n if (menuRef.current?.contains(evt.target)) return;\n setIsOpen(false);\n setSearchFieldValue('');\n });\n });\n };\n}\n\nconst SearchField = ({ value, setValue }) => {\n const handleSearchFieldChange = e => {\n setValue(e.target.value);\n };\n return (\n \n );\n};\n\nconst VideoSpeedDropdown = ({\n title,\n options,\n currentOption,\n handleClick,\n wrapperStyles = null,\n listStyles = null,\n itemStyles = null,\n itemTextStyles = null,\n titleStyles = null,\n shortNames = false,\n searchField = false\n}) => {\n const [listening, setListening] = useState(false);\n const [isOpen, setIsOpen] = useState(false);\n const [searchFieldValue, setSearchFieldValue] = useState('');\n\n const menuRef = useRef(null);\n // eslint-disable-next-line\n useEffect(listenForOutsideClicks(listening, setListening, menuRef, setIsOpen, setSearchFieldValue));\n\n const handleTitleClick = () => {\n setIsOpen(!isOpen);\n };\n\n const handleOptionClick = option => () => {\n handleClick(option);\n setIsOpen(false);\n setSearchFieldValue('');\n };\n\n const getFilteredOptions = options => {\n const filterArr = searchFieldValue.split(' ');\n\n return options.filter(option => {\n return filterArr.reduce((sum, word) => {\n if (\n !option\n .split(' ')\n .find(optionWord => optionWord.slice(0, word.length).toLowerCase() === word.toLowerCase())\n ) {\n sum = false;\n }\n return sum;\n }, true);\n });\n };\n\n const filteredOptions = searchFieldValue === '' ? options : getFilteredOptions(options);\n return (\n
    \n
    \n {title}\n \n
    \n {isOpen && (\n
      \n {searchField && (\n
    • \n \n
    • \n )}\n {filteredOptions.map((option, i) => (\n \n {shortNames ? getShortName(option, shortNames) : option}\n \n ))}\n
    \n )}\n
    \n );\n};\n\nexport default VideoSpeedDropdown;\n","import VideoSpeedDropdown from 'components/UI/dropdown/VideoSpeedDropdown/VideoSpeedDropdown';\nimport React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setVideoPlaybackRate } from 'redux/gameReducer';\n\nconst SpeedSelector = () => {\n const speedOptions = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n const videoPlaybackRate = useSelector(state => state.game.videoPlaybackRate);\n\n const dispatch = useDispatch();\n\n const handleItemClick = option => {\n dispatch(setVideoPlaybackRate(option));\n };\n return (\n \n );\n};\n\nexport default SpeedSelector;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Effects from './Effects';\nimport ModeList from './ModeList';\nimport SpeedSelector from './SpeedSelector';\nimport cl from './VideoOptions.module.scss';\n\nconst VideoOptions = ({ currentTab }) => {\n const currentMoment = useSelector(state => state.game.currentMoment);\n const isBroadcast = useSelector(state => state.game.isBroadcast);\n const viewMode = useSelector(state => state.game.viewMode);\n const preview = useSelector(state => state.game.preview);\n\n const timeData = {\n pitch: currentMoment.metering?.pitch?.time_start_pitch_window,\n hitting: currentMoment.metering?.hit?.time_start_hit_window\n };\n\n const isFirstBroadcastedVideo =\n currentTab === 'videos' &&\n !isBroadcast &&\n viewMode === 'mode-1' &&\n JSON.parse(preview.camera_views[0]).cameras[0] === 'broadcast_link';\n\n const isModeListDisabled = timeData[currentTab] || isBroadcast || isFirstBroadcastedVideo;\n\n return (\n
    \n
    \n \n \n \n
    \n
    \n );\n};\n\nexport default VideoOptions;\n","import cl from '../Videos.module.scss';\nimport { useSelector } from 'react-redux';\nimport BallsStrikes from 'components/UI/icons/BallsStrikes/BallsStrikes';\nimport Bases from 'components/UI/icons/Bases/Bases';\nimport Outs from 'components/UI/icons/Outs/Outs';\n\nconst Signs = () => {\n\tconst currentCard = useSelector(state => state.game.currentCard);\n\n const situationsArr = [];\n currentCard.moments?.forEach(moment => moment.icons?.rect_text && situationsArr.push(moment));\n\n const { r1, r2, r3, outs, balls, strikes } = situationsArr[situationsArr.length - 1]?.table || {};\n return (\n
    \n \n \n \n
    \n );\n};\n\nexport default Signs;\n","import cl from '../Videos.module.scss';\nimport HeaderLogo from '../../HeaderLogo/HeaderLogo';\n\nconst TeamInfo = ({ score, side }) => {\n return (\n
    \n \n {/* {guests.name} */}\n

    {score}

    \n
    \n );\n};\n\nexport default TeamInfo;\n","import React from 'react';\nimport cl from './Video.module.scss';\nimport PlaysEvents from '../PlaysEvents/PlaysEvents';\nimport VideoOptions from '../VideoOptions/VideoOptions';\nimport { useSelector } from 'react-redux';\nimport Signs from '../Videos/SidePanel/Signs';\nimport TeamInfo from '../Videos/SidePanel/TeamInfo';\n\nconst SidePanel = () => {\n const { guests, owners } = useSelector(state => state.game.preview);\n\n return (\n
    \n
    \n \n
    \n\n \n \n\n \n\n
    \n \n
    \n
    \n );\n};\n\nexport default SidePanel;\n","import React from 'react';\n\nconst TimelineEventChanger = ({ direction = 'left', handleClick, bgColor = '#1A4C96' }) => {\n const path =\n direction === 'left' ? (\n \n ) : (\n \n );\n\n return (\n \n );\n};\n\nexport default TimelineEventChanger;\n","import React, { forwardRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './Timeline.module.scss';\n\nconst DraggableArea = (\n { x1, x2, handleMouseDown, viewBoxWidth, totalSeconds, SECONDS_SRC, currentTab, forFullscreen },\n ref\n) => {\n const videoCurrentTime = useSelector(state => state.game.videoCurrentTime);\n const currentMoment = useSelector(state => state.game.currentMoment);\n\n const x1relative = (viewBoxWidth / 100) * x1;\n const x2relative = (viewBoxWidth / 100) * x2;\n\n const leftLineTotalSecs = (totalSeconds / 100) * x1;\n const leftLineMins = Math.floor(leftLineTotalSecs / 60);\n const leftLineSecs = (leftLineTotalSecs - leftLineMins * 60).toFixed(0);\n const leftLineTime = `${leftLineMins}:${leftLineSecs.length === 1 ? 0 : ''}${leftLineSecs}`;\n\n const rightLineTotalSecs = (totalSeconds / 100) * x2;\n const rightLineMins = Math.floor(rightLineTotalSecs / 60);\n const rightLineSecs = (rightLineTotalSecs - rightLineMins * 60).toFixed(0);\n const rightLineTime = `${rightLineMins}:${rightLineSecs.length === 1 ? 0 : ''}${rightLineSecs}`;\n\n const redLineTotalSecs = videoCurrentTime - (SECONDS_SRC[currentTab].timeStart ?? 0);\n\n const redLineMins = Math.floor(redLineTotalSecs / 60);\n\tconst rawSecs = redLineTotalSecs - redLineMins * 60\n const redLineSecs = Math.floor(rawSecs);\n\tconst redLineMSecs = String((rawSecs - redLineSecs).toFixed(3)).slice(2)\n const redLineTime = `${redLineMins}:${redLineSecs.length === 1 ? 0 : ''}${redLineSecs},${redLineMSecs}`;\n\n const redLinePercent = (redLineTotalSecs * 100) / totalSeconds;\n\n const isRedLineMoreX2 = (viewBoxWidth / 100) * redLinePercent > x2relative;\n const redLineRelative = isRedLineMoreX2 ? x2relative : (viewBoxWidth / 100) * redLinePercent;\n return (\n <>\n {/* Draggable field */}\n e.preventDefault()}\n name='drag-area'\n ref={ref}\n />\n {/* Red line */}\n e.preventDefault()}\n name='red-line'\n />\n e.preventDefault()}\n />\n \n {redLineTime}\n \n \n {redLineTime}\n \n\n {/* Left line */}\n e.preventDefault()}\n name='left-line'\n />\n e.preventDefault()}\n />\n \n {leftLineTime}\n \n\n {/* Right line */}\n e.preventDefault()}\n name='right-line'\n />\n e.preventDefault()}\n />\n \n {rightLineTime}\n \n \n );\n};\n\nexport default forwardRef(DraggableArea);\n","import TimelineEventChanger from 'components/UI/buttons/TimelineEventChanger/TimelineEventChanger';\nimport useGameFocus from 'hooks/useGameFocus';\nimport React, { useRef, useEffect, useLayoutEffect, Fragment } from 'react';\nimport { shallowEqual, useDispatch } from 'react-redux';\nimport { useSelector } from 'react-redux';\nimport {\n setSeekValue,\n setTimelineSliderCoords as setSliderCoords,\n setTimelineWidth as setChartWidth,\n setFullTimelineWidth as setFullChartWidth,\n setVideoCurrentTime\n} from 'redux/gameReducer';\nimport DraggableArea from './DraggableArea';\nimport cl from './Timeline.module.scss';\nimport classNames from 'classnames';\n\nconst Timeline = ({ addedClass = null, currentTab = 'videos', forFullscreen = false }) => {\n const videoLengthMode = useSelector(s => s.game.videoLengthMode);\n const sliderCoords = useSelector(s => s.game.timelineSliderCoords, shallowEqual);\n const currentMoment = useSelector(s => s.game.currentMoment, shallowEqual);\n const videoCurrentTime = useSelector(s => s.game.videoCurrentTime);\n const isFullscreen = useSelector(s => s.game.isFullscreen);\n const isBroadcast = useSelector(s => s.game.isBroadcast);\n const focus = useSelector(s => s.game.focus);\n const preview = useSelector(s => s.game.preview);\n const viewMode = useSelector(s => s.game.viewMode);\n\n const mobileWidth = useSelector(s => s.shared.mobileWidth);\n const isMobile = useSelector(s => s.shared.isMobile);\n const isMobileTimeline = useSelector(s => s.shared.isMobileTimeline);\n const isMobileScoreboard = useSelector(s => s.shared.isMobileScoreboard);\n\n const fullTimelineWidth = useSelector(s => s.game.fullTimelineWidth);\n const timelineWidth = useSelector(s => s.game.timelineWidth);\n\n const chartWidth =\n (isMobile && document.documentElement.clientWidth > document.documentElement.clientHeight) ||\n forFullscreen\n ? fullTimelineWidth\n : timelineWidth;\n\n const dispatch = useDispatch();\n\n const sliderRef = useRef();\n const sliderNameRef = useRef();\n const mouseDownXCoordRef = useRef();\n const mouseDownStateRef = useRef();\n const rectRef = useRef();\n const mouseClickTimeRef = useRef(null);\n const chartRef = useRef(null);\n const firstLoadRef = useRef(true);\n\n const isFirstBroadcastedVideo =\n currentTab === 'videos' &&\n !isBroadcast &&\n viewMode === 'mode-1' &&\n JSON.parse(preview.camera_views[0]).cameras[0] === 'broadcast_link';\n\n const videoLengthPrefix = isFirstBroadcastedVideo\n ? 'broadcast'\n : videoLengthMode.toLowerCase().replace(' ', '_');\n\n const SECONDS_SRC = currentMoment.video\n ? {\n pitch: {\n timeStart:\n currentMoment.metering?.pitch?.time_start_pitch_window ||\n currentMoment.video[`${videoLengthPrefix}_seconds_from`],\n timeEnd:\n currentMoment.metering?.pitch?.time_end_pitch_window ||\n currentMoment.video[`${videoLengthPrefix}_seconds_to`]\n },\n hitting: {\n timeStart:\n currentMoment.metering?.hit?.time_start_hit_window ||\n currentMoment.video[`${videoLengthPrefix}_seconds_from`],\n timeEnd:\n currentMoment.metering?.hit?.time_end_hit_window ||\n currentMoment.video[`${videoLengthPrefix}_seconds_to`]\n },\n running: {\n timeStart: currentMoment.video[`${videoLengthPrefix}_seconds_from`],\n timeEnd: currentMoment.video[`${videoLengthPrefix}_seconds_to`]\n },\n videos: {\n timeStart: currentMoment.video[`${videoLengthPrefix}_seconds_from`],\n timeEnd: currentMoment.video[`${videoLengthPrefix}_seconds_to`]\n }\n }\n : {};\n\n useEffect(() => {\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n };\n // eslint-disable-next-line\n }, []);\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n // eslint-disable-next-line\n }, [handleKeyDown]);\n\n useEffect(() => {\n if (chartRef.current.clientWidth === 0) return;\n\n dispatch(\n forFullscreen\n ? setFullChartWidth(chartRef.current.clientWidth)\n : setChartWidth(chartRef.current.clientWidth)\n );\n }, [mobileWidth, isFullscreen]);\n\n useLayoutEffect(() => {\n if (firstLoadRef.current === true) return;\n\n if (!currentMoment.video) return;\n\n dispatch(setSliderCoords({ x1: 0, x2: 100 }));\n\n // Old super short method\n // if (videoLengthMode !== 'Super Short') {\n // dispatch(setSliderCoords({ x1: 0, x2: 100 }));\n // return;\n // }\n\n // const { video } = currentMoment;\n\n // const totalSeconds = video.short_seconds_to - video.short_seconds_from;\n\n // const startSecondsDelta = video.super_short_seconds_from - video.short_seconds_from;\n // const startSecondsPercent = (startSecondsDelta * 100) / totalSeconds;\n\n // const endSecondsDelta = video.super_short_seconds_to - video.short_seconds_from;\n // const endSecondsPercent = (endSecondsDelta * 100) / totalSeconds;\n\n // dispatch(setSliderCoords({ x1: startSecondsPercent, x2: endSecondsPercent }));\n\n // const newCoords = videoLengthMode === 'Super Short' ? { x1: 35, x2: 65 } : { x1: 0, x2: 100 };\n // eslint-disable-next-line\n }, [currentMoment]);\n\n useLayoutEffect(() => {\n if (firstLoadRef.current === true) {\n firstLoadRef.current = false;\n return;\n }\n\n if (!currentMoment.video) return;\n\n dispatch(setSliderCoords({ x1: 0, x2: 100, noChange: true }));\n\n // eslint-disable-next-line\n }, [videoLengthMode]);\n\n function handleMouseMove(e) {\n const slider = sliderRef.current;\n const parent = slider.parentElement;\n\n let currentCoord =\n e.clientX <= parent.getBoundingClientRect().left\n ? 0\n : e.clientX > parent.getBoundingClientRect().right\n ? parent.getBoundingClientRect().width\n : e.clientX - parent.getBoundingClientRect().left;\n\n const currentCoordPercents = +((currentCoord * 100) / parent.getBoundingClientRect().width).toFixed(4);\n\n if (sliderNameRef.current === 'left-line') {\n dispatch(\n setSliderCoords({\n ...sliderCoords,\n x1: sliderCoords.x2 - 1 > currentCoordPercents ? currentCoordPercents : sliderCoords.x2 - 1,\n changedCoord: 'x1'\n })\n );\n\n return;\n }\n if (sliderNameRef.current === 'right-line') {\n dispatch(\n setSliderCoords({\n ...sliderCoords,\n x2: sliderCoords.x1 + 1 < currentCoordPercents ? currentCoordPercents : sliderCoords.x1 + 1,\n changedCoord: 'x2'\n })\n );\n return;\n }\n if (sliderNameRef.current === 'red-line') {\n const secondsTotal = SECONDS_SRC[currentTab].timeEnd - SECONDS_SRC[currentTab].timeStart;\n const seekToValue = SECONDS_SRC[currentTab].timeStart + (secondsTotal * currentCoordPercents) / 100;\n\n const leftSliderTime = SECONDS_SRC[currentTab].timeStart + (secondsTotal * sliderCoords.x1) / 100;\n // const secondsTotal =\n // video[`${videoLengthPrefix}_seconds_to`] - video[`${videoLengthPrefix}_seconds_from`];\n // const seekToValue =\n // video[`${videoLengthPrefix}_seconds_from`] + (secondsTotal * currentCoordPercents) / 100;\n\n // const leftSliderTime =\n // video[`${videoLengthPrefix}_seconds_from`] + (secondsTotal * sliderCoords.x1) / 100;\n\n const seekToTime = seekToValue <= leftSliderTime ? leftSliderTime : seekToValue;\n\n dispatch(setSeekValue(seekToTime));\n dispatch(setVideoCurrentTime(seekToTime));\n\n return;\n }\n\n if (sliderNameRef.current === 'drag-area') {\n const slider = sliderRef.current;\n const parent = slider.parentElement;\n\n const percentRatio = parent.getBoundingClientRect().width / 100;\n const pixelsDelta = e.clientX - mouseDownXCoordRef.current;\n const percentsDelta = +(pixelsDelta / percentRatio).toFixed(4);\n\n const getCoords = () => {\n let tempX1 = sliderCoords.x1;\n let tempX2 = sliderCoords.x2;\n\n if (mouseDownStateRef.current.x1 + percentsDelta < 0) {\n tempX1 = 0;\n tempX2 = mouseDownStateRef.current.x2 - mouseDownStateRef.current.x1;\n\n return { x1: tempX1, x2: tempX2 };\n }\n\n if (mouseDownStateRef.current.x2 + percentsDelta > 100) {\n tempX1 = mouseDownStateRef.current.x1 + (100 - mouseDownStateRef.current.x2);\n tempX2 = 100;\n\n return { x1: tempX1, x2: tempX2 };\n }\n\n return {\n x1: mouseDownStateRef.current.x1 + percentsDelta,\n x2: mouseDownStateRef.current.x2 + percentsDelta\n };\n };\n\n dispatch(setSliderCoords(getCoords()));\n return;\n }\n }\n\n const handleMouseUp = e => {\n sliderRef.current.parentElement.style.cursor = 'default';\n if (sliderNameRef.current.includes('line')) rectRef.current.style.cursor = 'grab';\n\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n\n const mouseClickDelta = Date.now() - mouseClickTimeRef.current;\n if (mouseClickDelta < 140) {\n const slider = sliderRef.current;\n const parent = slider.parentElement;\n\n let currentCoord =\n e.clientX <= parent.getBoundingClientRect().left\n ? 0\n : e.clientX > parent.getBoundingClientRect().right\n ? parent.getBoundingClientRect().width\n : e.clientX - parent.getBoundingClientRect().left;\n\n const currentCoordPercents = +((currentCoord * 100) / parent.getBoundingClientRect().width).toFixed(4);\n\n // Old videoLengthPrefix method\n // const videoLengthPrefix = videoLengthMode === 'Full' ? 'full' : 'short';\n\n const secondsTotal = SECONDS_SRC[currentTab].timeEnd - SECONDS_SRC[currentTab].timeStart;\n const seekToValue = SECONDS_SRC[currentTab].timeStart + (secondsTotal * currentCoordPercents) / 100;\n // const secondsTotal =\n // video[`${videoLengthPrefix}_seconds_to`] - video[`${videoLengthPrefix}_seconds_from`];\n // const seekToValue =\n // video[`${videoLengthPrefix}_seconds_from`] + (secondsTotal * currentCoordPercents) / 100;\n dispatch(setSeekValue(seekToValue));\n dispatch(setVideoCurrentTime(seekToValue));\n }\n };\n\n const handleMouseDown = e => {\n mouseClickTimeRef.current = Date.now();\n\n sliderRef.current = e.target;\n sliderNameRef.current = e.target.attributes.name.value;\n mouseDownXCoordRef.current = e.clientX;\n mouseDownStateRef.current = JSON.parse(JSON.stringify(sliderCoords));\n\n sliderRef.current.parentElement.style.cursor = 'e-resize';\n if (sliderNameRef.current.includes('line')) rectRef.current.style.cursor = 'e-resize';\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n };\n\n // Old method\n // const videoLengthPrefix = videoLengthMode === 'Full' ? 'full' : 'short';\n\n const totalSeconds = currentMoment.video\n ? SECONDS_SRC[currentTab].timeEnd - SECONDS_SRC[currentTab].timeStart\n : 0;\n // const totalSeconds = currentMoment.video\n // ? currentMoment.video[`${videoLengthPrefix}_seconds_to`] -\n // currentMoment.video[`${videoLengthPrefix}_seconds_from`]\n // : 0;\n\n const minutesSide = Math.floor(totalSeconds / 60);\n const secondsSide = (totalSeconds - minutesSide * 60).toFixed(0);\n const rightTitle = `${minutesSide}:${secondsSide.length === 1 ? 0 : ''}${secondsSide}`;\n\n // Lines positioning\n let LINES_NUMBER = 1;\n // let LINES_NUMBER = 0;\n let Y_SHIFT;\n const LINES_DATA = [];\n const LINES_TEXT_ABBR = ['H', 'B1', 'B2', 'B3'];\n\n const getRelativeX = time => {\n const totalSecsToX = time - (SECONDS_SRC[currentTab].timeStart ?? 0);\n // const totalSecsToX = time - (currentMoment.video[`${videoLengthPrefix}_seconds_from`] ?? 0);\n\n const timelinePercents = (totalSecsToX * 100) / totalSeconds;\n const relativeX = (chartWidth / 100) * timelinePercents;\n return relativeX;\n };\n\n if (currentMoment.metering) {\n const { bases, pitch, play, hit, field } = currentMoment.metering;\n\n // Lines number calculating\n if (pitch) LINES_NUMBER++;\n // if (hit) LINES_NUMBER++;\n LINES_NUMBER = Object.values(bases).reduce((sum, base) => (base ? sum + 1 : sum), LINES_NUMBER);\n\n // Y shift calc\n Y_SHIFT = 4.5 * (LINES_NUMBER - 1);\n\n // Lines data compute\n // Pitch line calc\n if (pitch) {\n const tempLineData = {\n title: 'Ball',\n color: '#1A4C96',\n secondaryColor: '#4D80CB',\n events: []\n };\n\n pitch?.time_start && tempLineData.events.push({ timeStart: pitch.time_start, timeEnd: pitch.time_end });\n hit?.time_start && tempLineData.events.push({ timeStart: hit.time_start, timeEnd: hit.time_end });\n play.forEach(value =>\n tempLineData.events.push({ timeStart: value.time_start, timeEnd: value.time_end })\n );\n LINES_DATA.push(tempLineData);\n }\n\n //Hitter line calc\n const tempLineData = {\n title: 'Hitter',\n color: '#FFAB00',\n secondaryColor: '#FFD173',\n events: []\n };\n\n field\n ?.filter(value => value.who === 'H')\n .forEach(value =>\n tempLineData.events.push({\n timeStart: value.time_start,\n timeEnd: value.time_end,\n textFrom: LINES_TEXT_ABBR[value.run_from],\n textTo: LINES_TEXT_ABBR[value.run_to]\n })\n );\n LINES_DATA.push(tempLineData);\n\n // Run lines calc\n\n if (bases.r1) {\n const tempLineData = {\n title: 'Run1',\n color: '#BF8610',\n secondaryColor: '#DFBA6F',\n events: []\n };\n\n field\n ?.filter(value => value.who === 'B1')\n .forEach(value =>\n tempLineData.events.push({\n timeStart: value.time_start,\n timeEnd: value.time_end,\n textFrom: LINES_TEXT_ABBR[value.run_from],\n textTo: LINES_TEXT_ABBR[value.run_to]\n })\n );\n LINES_DATA.push(tempLineData);\n }\n if (bases.r2) {\n const tempLineData = {\n title: 'Run2',\n color: '#8D6004',\n secondaryColor: '#C69736',\n events: []\n };\n\n field\n ?.filter(value => value.who === 'B2')\n .forEach(value =>\n tempLineData.events.push({\n timeStart: value.time_start,\n timeEnd: value.time_end,\n textFrom: LINES_TEXT_ABBR[value.run_from],\n textTo: LINES_TEXT_ABBR[value.run_to]\n })\n );\n LINES_DATA.push(tempLineData);\n }\n if (bases.r3) {\n const tempLineData = {\n title: 'Run3',\n color: '#5C4006',\n secondaryColor: '#AE9054',\n events: []\n };\n\n field\n ?.filter(value => value.who === 'B3')\n .forEach(value =>\n tempLineData.events.push({\n timeStart: value.time_start,\n timeEnd: value.time_end,\n textFrom: LINES_TEXT_ABBR[value.run_from],\n textTo: LINES_TEXT_ABBR[value.run_to]\n })\n );\n LINES_DATA.push(tempLineData);\n }\n }\n\n const handleTimelineEvtChanger = direction => () => {\n // Calc array for start times of events\n const { field, hit, pitch, play } = currentMoment.metering;\n\n const timesArr = [];\n field?.forEach(evt => timesArr.push(evt.time_start));\n play?.forEach(evt => timesArr.push(evt.time_start));\n pitch?.time_start && timesArr.push(pitch.time_start);\n hit?.time_start && timesArr.push(hit.time_start);\n\n const sortValue = direction === 'right' ? 1 : -1;\n const sortValue2 = sortValue * -1;\n timesArr.sort((a, b) => (a > b ? sortValue : sortValue2));\n\n if (direction === 'right') {\n const closestValue = timesArr.find(value => videoCurrentTime < value);\n closestValue > 0 && dispatch(setSeekValue(closestValue));\n return;\n }\n\n const closestValue = timesArr.find(value => videoCurrentTime > value + 0.2);\n closestValue > 0 && dispatch(setSeekValue(closestValue));\n };\n\n function handleKeyDown(e) {\n if (focus !== 'timeline') return;\n\n switch (e.key) {\n case 'ArrowLeft':\n dispatch(setSeekValue(videoCurrentTime - 1 / 30));\n case 'ArrowRight':\n dispatch(setSeekValue(videoCurrentTime + 1 / 30));\n default:\n break;\n }\n }\n\n let topShift = isMobileScoreboard ? 83.5 : 0;\n if (currentTab !== 'videos') topShift += (document.documentElement.clientWidth / 16) * 10;\n topShift += 'px';\n\n const wrapperClasses = classNames(cl.wrapper, {\n [addedClass]: !!addedClass,\n [cl.mobileDisplayNone]: !isMobileTimeline,\n [cl.mobileLandscapeDNone]: currentTab !== 'videos'\n });\n const rightEvtChangesClasses = classNames(cl.onlyMobile, cl.rightEvtChanger);\n return (\n
    \n
    \n \n \n
    \n \n {/* Left titles */}\n {LINES_NUMBER > 0 &&\n LINES_DATA.map(({ title }, i) => (\n \n {title}\n \n ))}\n \n \n {LINES_NUMBER > 0 && (\n <>\n {/* Draggable area */}\n {totalSeconds > 0 && (!isBroadcast || (isBroadcast && currentTab === 'videos')) && (\n \n )}\n\n {/* Horizontal lines */}\n {totalSeconds > 0 && LINES_DATA.map(({ color, secondaryColor, events }, i) => (\n // Horizontal line\n \n \n {/* Rects and texts */}\n {events.map(({ timeStart, timeEnd, textFrom, textTo }, j) => {\n const xStart = getRelativeX(timeStart);\n const yStart = (i + 3) * 9 - 4 - Y_SHIFT;\n const xEnd = xStart + getRelativeX(timeEnd) - getRelativeX(timeStart);\n const yEnd = yStart + 8;\n const halfHeight = 8 / 2;\n const cornerValue = 3;\n\n const path = `M${xStart} ${yStart + halfHeight}L${xStart + cornerValue} ${yStart}L${\n xEnd - cornerValue\n } ${yStart}L${xEnd} ${yStart + halfHeight}L${xEnd - cornerValue} ${yEnd}L${\n xStart + cornerValue\n } ${yEnd}Z`;\n\n return (\n \n \n\n {/* */}\n \n {textFrom}-{textTo}\n \n \n );\n })}\n \n ))}\n \n \n \n \n \n \n )}\n \n \n {LINES_NUMBER > 0 && (\n \n {rightTitle}\n \n )}\n \n
    \n \n
    \n
    \n );\n};\n\nexport default Timeline;\n","import cl from '../Videos.module.scss';\nimport ContentCardReplacement from '../../ContentCardReplacement/ContentCardReplacement';\nimport ContentCardComplex from '../../ContentCardComplex/ContentCardComplex';\nimport ContentCardSimple from '../../ContentCardSimple/ContentCardSimple';\nimport TimelineEventChanger from 'components/UI/buttons/TimelineEventChanger/TimelineEventChanger';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { setCurrentCard } from 'redux/gameReducer';\n\nconst CurrentCard = ({ currentCard }) => {\n const filteredCards = useSelector(s => s.game.filteredCards, shallowEqual);\n\n const dispatch = useDispatch();\n\n const changeCardBtnClick = direction => () => {\n const cardIndex = filteredCards.findIndex(\n card => card.moments[0].inner.id === currentCard.moments[0].inner.id\n );\n\n if (direction === 'left') {\n if (cardIndex === 0) return;\n\n dispatch(setCurrentCard(filteredCards[cardIndex - 1]));\n }\n\n if (cardIndex >= filteredCards.length - 1) return;\n\n dispatch(setCurrentCard(filteredCards[cardIndex + 1]));\n };\n\n const situationsArr = [];\n currentCard.moments?.forEach(moment => moment.icons?.rect_text && situationsArr.push(moment));\n\n return (\n
    \n \n\n
    \n {currentCard.type === 'Replacement' ? (\n \n ) : situationsArr.length > 0 ? (\n \n ) : (\n \n )}\n
    \n\t\t\t\n \n
    \n );\n};\n\nexport default CurrentCard;\n","import React from 'react';\nimport cl from './Video.module.scss';\nimport Timeline from '../Timeline/Timeline';\nimport { useSelector } from 'react-redux';\nimport CurrentCard from '../Videos/BottomPanel/CurrentCard';\n\nconst BottomPanel = () => {\n const currentCard = useSelector(state => state.game.currentCard);\n const currentMoment = useSelector(state => state.game.currentMoment);\n\n const situationsArr = [];\n currentCard.moments?.forEach(moment => moment.icons?.rect_text && situationsArr.push(moment));\n\n const pitcherName = currentCard?.moments\n ?.slice(-1)[0]\n ?.pitcher.pitches_name.replace(' ', ' ')\n .toUpperCase();\n const ballPlayerName = currentCard?.who?.replace(' ', ' ').toUpperCase();\n\n const speedValue = currentMoment?.metering?.pitch?.start_speed.toFixed(1) ?? '';\n return (\n
    \n \n {currentCard?.moments && }\n
    \n
    \n
    \n P:\n {pitcherName}\n
    \n
    \n B:\n {ballPlayerName}\n
    \n
    \n {speedValue} mph\n
    \n
    \n );\n};\n\nexport default BottomPanel;\n","import React, { useRef, useEffect, Suspense, Fragment } from 'react';\nimport cl from './Video.module.scss';\nimport YouTube from 'react-youtube';\nimport { useSelector } from 'react-redux';\nimport classNames from 'classnames';\nimport NoVideoScreen from './NoVideoScreen';\nimport FullscreenBtn from 'components/UI/icons/VideoControlsBtns/FullscreenBtn/FullscreenBtn';\nimport { openFullscreen } from 'utils';\nimport VideoControls from '../VideoControls/VideoControls';\nimport SidePanel from './SidePanel';\nimport BottomPanel from './BottomPanel';\nimport { Canvas } from '@react-three/fiber';\n// import { FontLoader } from 'three/examples/jsm/loaders/FontLoader';\n// import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry';\n// import ComfortaaFont from 'fonts/Comfortaa_Regular.json';\n// import { Quaternion, Vector3 } from 'three';\nimport { degToRad } from 'three/src/math/MathUtils';\n\nconst BatPath = ({ currentMoment, videoCurrentTime }) => {\n // const { camera } = useThree();\n\n // camera.lookAt(-5.39615, 8.88691, 0);\n\t// camera.rotation.z = degToRad(3.077909001)\n\n const { data_3d: batCoords, speeds } = currentMoment?.metering?.bat || {};\n // const { time_start: timeStart } = currentMoment?.metering?.hit || {};\n\n const curTimeCorr = videoCurrentTime;\n // const curTimeCorr = videoCurrentTime + 0.286;\n\n const timeStart = speeds[0][1];\n\n const totalHitTime = speeds[speeds.length - 1][1] - timeStart;\n // const totalHitTime = speeds[speeds.length - 1][1];\n\n const elapsedTime =\n curTimeCorr < timeStart ||\n videoCurrentTime > currentMoment.video.full_seconds_to ||\n videoCurrentTime < currentMoment.video.full_seconds_from\n ? 0\n : curTimeCorr - timeStart;\n const coordsLength = batCoords.length;\n\n const sliceCoef = totalHitTime / coordsLength;\n const sliceCount = elapsedTime / sliceCoef;\n\n // const textRef = useRef(null);\n\n // const { camera } = useThree();\n // camera.aspect = 1.77777\n // camera.lookAt(-80, 0, 0);\n // useFrame(() => {\n // if (textRef.current === null) return;\n // let zPosition = textRef.current.position.z;\n // textRef.current.position.z = zPosition < 100 ? zPosition + 1 : -140;\n // });\n\n // extend({ TextGeometry });\n // const font = new FontLoader().parse(ComfortaaFont);\n\n const dotRadius = 0.04;\n\n // const xCorrect = 0;\n // const zCorrect = 0;\n const xCorrect = 1; \n const zCorrect = -0.5; \n\n const getDistance = (coords, prevCoords) =>\n Math.sqrt(\n (coords[3] - prevCoords[3]) ** 2 + (coords[4] - prevCoords[4]) ** 2 + (coords[5] - prevCoords[5]) ** 2\n );\n\n const firstDistance = getDistance(batCoords[1], batCoords[0]);\n const defaultMinMaxDistance = { min: firstDistance, max: firstDistance };\n\n const minMaxDistance = batCoords.reduce((sum, cur, i) => {\n if (i < 2) return sum;\n\n const curDistance = getDistance(cur, batCoords[i - 1]);\n\n if (curDistance < sum.min) {\n sum.min = curDistance;\n return sum;\n }\n\n if (curDistance > sum.max) {\n sum.max = curDistance;\n return sum;\n }\n\n return sum;\n }, defaultMinMaxDistance);\n\n const minOpacity = 0.3;\n const maxOpacity = 1;\n\n const opacityCoef = (maxOpacity - minOpacity) / (minMaxDistance.max - minMaxDistance.min);\n return (\n <>\n {sliceCount &&\n batCoords.slice(0, sliceCount).map((coords, i, arr) => {\n const curOpacity = i > 0 ? minOpacity + getDistance(coords, arr[i - 1]) * opacityCoef : minOpacity;\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n })}\n\n {/* \n \n \n */}\n \n );\n};\n\nconst ControlSpheres = () => (\n <>\n {/* */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nconst CanvasWrapper = ({ currentMoment }) => {\n const videoCurrentTime = useSelector(state => state.game.videoCurrentTime);\n\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nconst Video = ({ videoId, videoNumber, handleOnReady, stateChangeHandler, setPlayPause }) => {\n // const [currentTime, setCurrentTime] = useState(0);\n\n const wrapperRef = useRef();\n const timerRef = useRef();\n const controlsWrapperRef = useRef();\n const currentTimeInterval = useRef();\n\n const currentCard = useSelector(state => state.game.currentCard);\n const currentMoment = useSelector(state => state.game.currentMoment);\n const viewMode = useSelector(state => state.game.viewMode);\n const isVideoEffects = useSelector(state => state.game.isVideoEffects);\n const maxVideoMomentBroadcast = useSelector(state => state.game.maxVideoMomentBroadcast);\n\n useEffect(() => () => clearInterval(currentTimeInterval.current), []);\n\n const onReady = e => {\n handleOnReady(videoNumber, e.target);\n\n // currentTimeInterval.current = setInterval(() => {\n // setCurrentTime(e.target.getCurrentTime().toFixed(4));\n // }, 20);\n };\n\n const onStateChange = e => {\n stateChangeHandler(videoNumber, e.target, e.data);\n };\n\n const openFullScreen = () => {\n openFullscreen(wrapperRef.current);\n };\n // const closeFullScreen = () => {\n // closeFullscreen();\n // };\n\n const videoClasses = classNames(cl.videoWrapper, {\n [cl.videoOne]: videoNumber === 1,\n [cl.videoTwo]: videoNumber === 2,\n [cl.videoThree]: videoNumber === 3,\n [cl.videoFour]: videoNumber === 4,\n [cl.aspectRatio16]: (videoNumber === 1 || videoNumber === 2) && viewMode === 'mode-2'\n });\n\n const fullscreenBtnClasses = classNames(cl.btnWrapper, {\n [cl.dnone]: viewMode.slice(-1) === '1',\n [cl.topLeftBtn]: videoNumber === 1,\n [cl.topRightBtn]: videoNumber === 2,\n [cl.bottomLeftBtn]: videoNumber === 3,\n [cl.bottomRightBtn]: videoNumber === 4\n });\n\n function handleMouseMove() {\n if (!currentMoment.video) return;\n\n clearTimeout(timerRef.current);\n\n controlsWrapperRef.current.lastChild.style.opacity = 1;\n controlsWrapperRef.current.lastChild.style.visibility = 'visible';\n\n timerRef.current = setTimeout(() => {\n if (!controlsWrapperRef.current) return;\n controlsWrapperRef.current.lastChild.style.opacity = 0;\n timerRef.current = setTimeout(() => {\n if (controlsWrapperRef.current) controlsWrapperRef.current.lastChild.style.visibility = 'hidden';\n }, 300);\n }, 500);\n }\n\n const isBatPath = videoNumber === 1 && isVideoEffects && currentMoment?.metering?.bat?.data_3d;\n return (\n
    \n {Object.keys(currentCard).length !== 0 ? (\n
    \n \n {isBatPath && }\n {/* {currentMoment.video?.seconds_from.toFixed(2)} */}\n {/* \n {currentTime}\n */}\n {/* {videoCurrentTime?.toFixed(2)} */}\n {/* {currentMoment.video?.seconds_to.toFixed(2)} */}\n
    \n \n {/* */}\n
    \n \n
    \n
    \n {!currentMoment.video && !maxVideoMomentBroadcast && }\n
    \n ) : (\n <>\n )}\n \n \n
    \n );\n};\n\nexport default Video;\n","import React, { useLayoutEffect, useRef, forwardRef, useEffect } from 'react';\nimport Video from '../Video/Video';\nimport getYouTubeID from 'get-youtube-id';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n setCurrentCard,\n setCurrentMoment,\n setMaxVideoMomentBroadcast,\n setSeekValue,\n setVideoCurrentTime,\n setVideoState,\n setViewMode\n} from 'redux/gameReducer';\nimport VideoControls from '../VideoControls/VideoControls';\n\nconst VideoList = ({ viewMode }, ref) => {\n const preview = useSelector(state => state.game.preview);\n const currentMoment = useSelector(s => s.game.currentMoment);\n const currentCard = useSelector(s => s.game.currentCard);\n const videoState = useSelector(s => s.game.videoState);\n const preferredVideoState = useSelector(s => s.game.preferredVideoState);\n const videoCurrentTime = useSelector(s => s.game.videoCurrentTime);\n const videoPlaybackRate = useSelector(s => s.game.videoPlaybackRate);\n const seekValue = useSelector(s => s.game.seekValue);\n const sliderCoords = useSelector(s => s.game.timelineSliderCoords);\n const videoLengthMode = useSelector(s => s.game.videoLengthMode);\n const filteredCards = useSelector(s => s.game.filteredCards);\n const isLastMomentMode = useSelector(s => s.game.isLastMomentMode);\n const playbackMode = useSelector(s => s.game.playbackMode);\n const isBroadcast = useSelector(s => s.game.isBroadcast);\n const maxVideoMomentBroadcast = useSelector(s => s.game.maxVideoMomentBroadcast);\n\n const dispatch = useDispatch();\n\n const video1Ref = useRef(null);\n const video2Ref = useRef(null);\n const video3Ref = useRef(null);\n const video4Ref = useRef(null);\n\n const timeIntervalRef = useRef(null);\n const intervalRef = useRef(null);\n const modeRef = useRef('play');\n\n const startRef = useRef(null);\n const endRef = useRef(null);\n const nextMomentTimeoutRef = useRef();\n const videoHandlingTimeoutRef = useRef();\n const playTimeoutRef = useRef();\n const alreadySeekingRef = useRef(false);\n const isPrevMomentInterrupted = useRef(false);\n\n // New synchronization method\n const allTimesIntervalRef = useRef();\n const syncTimeoutRef = useRef(false);\n\n const modeNumber = +viewMode.slice(-1);\n\n const VIDEO_NUMBERS =\n viewMode.slice(-1) === '1'\n ? { 1: video1Ref }\n : {\n 1: video1Ref,\n 2: video2Ref,\n 3: video3Ref,\n 4: video4Ref\n };\n\n useEffect(\n () => () => {\n clearInterval(intervalRef.current);\n },\n []\n );\n useEffect(() => {\n if (video1Ref.current === null) return;\n\n videoHandling(false, false);\n }, [filteredCards]);\n\n useEffect(() => {\n const isInterruptedMoment =\n !!preview.camera_info.broadcast_link_add_moment_from &&\n currentMoment?.inner?.id >= preview.camera_info.broadcast_link_add_moment_from;\n\n if (\n ((isPrevMomentInterrupted.current === false && isInterruptedMoment) ||\n (isPrevMomentInterrupted.current === true && !isInterruptedMoment)) &&\n viewMode === 'mode-1'\n ) {\n isPrevMomentInterrupted.current = isInterruptedMoment;\n\n setTimeout(() => {\n dispatch(setViewMode('mode-2'));\n\n setTimeout(() => {\n dispatch(setViewMode('mode-1'));\n }, 10);\n }, 10);\n }\n\n function handleKeyDown(e) {\n if (e.code !== 'Space' || video1Ref.current === null || !currentMoment.video) return;\n e.preventDefault();\n\n const currentState = video1Ref.current.getPlayerState();\n\n e.code === 'Space' && setPlayPause(currentState === 1 ? 'pause' : 'play');\n }\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n // eslint-disable-next-line\n }, [currentMoment]);\n\n useEffect(() => {\n clearInterval(allTimesIntervalRef.current);\n\n if (preferredVideoState === 2) {\n clearTimeout(playTimeoutRef.current);\n syncTimeoutRef.current = false;\n alreadySeekingRef.current = false;\n }\n\n if (viewMode === 'mode-1') return;\n\n allTimesIntervalRef.current = setInterval(() => {\n const video1Time = video1Ref.current?.getCurrentTime();\n const video2Time = video2Ref.current?.getCurrentTime();\n const video3Time = video3Ref.current?.getCurrentTime();\n const video4Time = video4Ref.current?.getCurrentTime();\n\n if (!video1Time || !video2Time || !video3Time || !video4Time) return;\n\n const delta1 = 0;\n const delta2 = Math.abs(video1Time - video2Time);\n const delta3 = Math.abs(video1Time - video3Time);\n const delta4 = Math.abs(video1Time - video4Time);\n\n const deltaArr = [delta1, delta2, delta3, delta4];\n\n const deltaCap = 0.08;\n const deltaCaps = [\n getCamDelta(modeNumber, 1),\n getCamDelta(modeNumber, 2),\n getCamDelta(modeNumber, 3),\n getCamDelta(modeNumber, 4)\n ];\n const isBigDelta = deltaArr.some(\n (delta, i) => delta > Math.abs(deltaCaps[0] - deltaCaps[i]) + deltaCap\n );\n\n if (isBigDelta && !alreadySeekingRef.current) {\n video1Ref.current.pauseVideo();\n video2Ref.current?.pauseVideo();\n video3Ref.current?.pauseVideo();\n video4Ref.current?.pauseVideo();\n\n delta2 > Math.abs(deltaCaps[0] - deltaCaps[1]) + deltaCap &&\n video2Ref.current?.seekTo(video1Time + (deltaCaps[0] - deltaCaps[1]), true);\n delta3 > Math.abs(deltaCaps[0] - deltaCaps[2]) + deltaCap &&\n video3Ref.current?.seekTo(video1Time + (deltaCaps[0] - deltaCaps[2]), true);\n delta4 > Math.abs(deltaCaps[0] - deltaCaps[3]) + deltaCap &&\n video4Ref.current?.seekTo(video1Time + (deltaCaps[0] - deltaCaps[3]), true);\n }\n\n // const isAllPaused = Object.entries(VIDEO_NUMBERS).every(entry => {\n // const entryState = entry[1].current?.getPlayerState();\n // return entryState === 2;\n // });\n\n const isAllReady = Object.entries(VIDEO_NUMBERS).every(entry => {\n const entryState = entry[1].current?.getPlayerState();\n return entryState === -1 || entryState === 2;\n });\n\n if (isAllReady && !isBigDelta && preferredVideoState === 1 && !syncTimeoutRef.current) {\n syncTimeoutRef.current = true;\n\n video1Ref.current.playVideo();\n video2Ref.current?.playVideo();\n video3Ref.current?.playVideo();\n video4Ref.current?.playVideo();\n\n syncTimeoutRef.current = false;\n alreadySeekingRef.current = false;\n }\n }, 90);\n\n return () => {\n clearInterval(allTimesIntervalRef.current);\n clearTimeout(playTimeoutRef.current);\n };\n }, [preferredVideoState, viewMode]);\n\n //\n\n useLayoutEffect(() => {\n video1Ref.current = null;\n video2Ref.current = null;\n video3Ref.current = null;\n video4Ref.current = null;\n }, [viewMode]);\n\n useEffect(() => {\n if (video1Ref.current === null) return;\n\n clearTimeout(videoHandlingTimeoutRef.current);\n clearInterval(intervalRef.current);\n\n const { video } = currentMoment;\n\n let secondsTotal, secondsFromRated;\n\n if (video) {\n const videoLengthPrefix =\n !isBroadcast &&\n viewMode === 'mode-1' &&\n JSON.parse(preview.camera_views[0]).cameras[0] === 'broadcast_link'\n ? 'broadcast'\n : videoLengthMode.toLowerCase().replace(' ', '_');\n\n secondsTotal = video[`${videoLengthPrefix}_seconds_to`] - video[`${videoLengthPrefix}_seconds_from`];\n secondsFromRated =\n video[`${videoLengthPrefix}_seconds_from`] +\n (secondsTotal / 100) * (sliderCoords.changedCoord !== 'x2' ? sliderCoords.x1 : sliderCoords.x2);\n }\n\n if (sliderCoords.noChange && videoCurrentTime > secondsFromRated) {\n videoHandling(false, false);\n return;\n }\n\n const isForcePlay = preferredVideoState === 1;\n\n video1Ref.current?.pauseVideo();\n video2Ref.current?.pauseVideo();\n video3Ref.current?.pauseVideo();\n video4Ref.current?.pauseVideo();\n\n if (video) {\n const videoLengthPrefix =\n !isBroadcast &&\n viewMode === 'mode-1' &&\n JSON.parse(preview.camera_views[0]).cameras[0] === 'broadcast_link'\n ? 'broadcast'\n : videoLengthMode.toLowerCase().replace(' ', '_');\n\n const secondsTotal =\n video[`${videoLengthPrefix}_seconds_to`] - video[`${videoLengthPrefix}_seconds_from`];\n\n const secondsFromRated =\n video[`${videoLengthPrefix}_seconds_from`] +\n (secondsTotal / 100) * (sliderCoords.changedCoord !== 'x2' ? sliderCoords.x1 : sliderCoords.x2);\n\n if (!currentMoment?.noStartSeeking) {\n video1Ref.current?.seekTo(secondsFromRated - getCamDelta(modeNumber, 1), true);\n video2Ref.current?.seekTo(secondsFromRated - getCamDelta(modeNumber, 2), true);\n video3Ref.current?.seekTo(secondsFromRated - getCamDelta(modeNumber, 3), true);\n video4Ref.current?.seekTo(secondsFromRated - getCamDelta(modeNumber, 4), true);\n }\n }\n\n videoHandlingTimeoutRef.current = setTimeout(\n () => {\n videoHandling(false, isForcePlay);\n },\n videoLengthMode === 'Super Short' ? 1500 : 30\n );\n\n // eslint-disable-next-line\n }, [currentMoment, sliderCoords]);\n\n useEffect(() => {\n if (video1Ref.current === null) return;\n\n playbackMode === 'play' && clearTimeout(nextMomentTimeoutRef.current);\n\n videoHandling(false);\n // eslint-disable-next-line\n }, [isLastMomentMode]);\n\n useEffect(() => {\n (currentMoment.manualClick || currentCard.manualClick) && clearTimeout(nextMomentTimeoutRef.current);\n }, [currentMoment, currentCard]);\n\n useEffect(() => {\n modeRef.current = playbackMode;\n\n if (currentMoment.video) return;\n\n if (playbackMode === 'pause') {\n clearTimeout(nextMomentTimeoutRef.current);\n return;\n }\n\n playbackMode === 'play' && toNextMomentOrCard();\n // eslint-disable-next-line\n }, [playbackMode]);\n\n useEffect(() => {\n if (seekValue === null) return;\n\n seekVideos(seekValue);\n dispatch(setSeekValue(null));\n // eslint-disable-next-line\n }, [seekValue]);\n\n useEffect(() => {\n rateChangeHandler(videoPlaybackRate);\n }, [videoPlaybackRate]);\n\n useEffect(() => {\n clearInterval(timeIntervalRef.current);\n\n const camDelta1 = getCamDelta(modeNumber, 1);\n timeIntervalRef.current = setInterval(\n () => {\n const time = video1Ref.current?.getCurrentTime();\n\n time && dispatch(setVideoCurrentTime(time + camDelta1));\n },\n videoState === 1 ? 15 : 200\n );\n\n return () => {\n clearInterval(timeIntervalRef.current);\n };\n // eslint-disable-next-line\n }, [currentMoment, videoState]);\n\n const { camera_info: cameraInfo, camera_views: cameraViews } = preview;\n\n const getCamLink = (modeNumber, index) => {\n const isInterruptedMoment =\n !!preview.camera_info.broadcast_link_add_moment_from &&\n currentMoment?.inner?.id >= preview.camera_info.broadcast_link_add_moment_from;\n\n if (modeNumber === 1 && isInterruptedMoment) return cameraInfo.broadcast_link_add;\n\n return cameraInfo[JSON.parse(cameraViews[modeNumber - 1]).cameras[index]];\n };\n\n function getCamDelta(modeNumber, videoNumber) {\n return cameraInfo[\n JSON.parse(cameraViews[modeNumber - 1]).cameras[videoNumber - 1].replace('link', 'time')\n ];\n }\n\n const MODE_LINKS = {\n 'mode-1': [getCamLink(1, 0)],\n 'mode-2': [getCamLink(2, 0), getCamLink(2, 1), getCamLink(2, 2), getCamLink(2, 3)],\n 'mode-3': [getCamLink(3, 0), getCamLink(3, 1), getCamLink(3, 2), getCamLink(3, 3)]\n };\n\n const videoId1 = getYouTubeID(MODE_LINKS[viewMode][0]) || 'WCjLd7QAJq8';\n const videoId2 = getYouTubeID(MODE_LINKS[viewMode][1]) || null;\n const videoId3 = getYouTubeID(MODE_LINKS[viewMode][2]) || null;\n const videoId4 = getYouTubeID(MODE_LINKS[viewMode][3]) || null;\n\n const viewModeNumber = +viewMode.slice(-1);\n\n function toNextMomentOrCard() {\n const momentIndex = currentCard.moments.findIndex(moment => moment.inner.id === currentMoment.inner?.id);\n\n if (momentIndex < currentCard.moments.length - 1) {\n const nextMoment = currentCard.moments[momentIndex + 1];\n\n dispatch(setCurrentMoment(nextMoment));\n\n if (!nextMoment.video) return;\n\n const { video: nextVideo } = nextMoment;\n const videoLengthPrefix =\n !isBroadcast &&\n viewMode === 'mode-1' &&\n JSON.parse(preview.camera_views[0]).cameras[0] === 'broadcast_link'\n ? 'broadcast'\n : videoLengthMode.toLowerCase().replace(' ', '_');\n\n const getSliderCoords = video => {\n return {\n x1: 0,\n x2: 0\n };\n };\n //\n\n const secondsTotal =\n nextVideo[`${videoLengthPrefix}_seconds_to`] - nextVideo[`${videoLengthPrefix}_seconds_from`];\n\n const secondsFromRated =\n nextVideo[`${videoLengthPrefix}_seconds_from`] + (secondsTotal / 100) * getSliderCoords(nextVideo).x1;\n\n video1Ref.current?.seekTo(secondsFromRated - getCamDelta(modeNumber, 1), true);\n video2Ref.current?.seekTo(secondsFromRated - getCamDelta(modeNumber, 2), true);\n video3Ref.current?.seekTo(secondsFromRated - getCamDelta(modeNumber, 3), true);\n video4Ref.current?.seekTo(secondsFromRated - getCamDelta(modeNumber, 4), true);\n\n const secondsToRated =\n nextVideo[`${videoLengthPrefix}_seconds_from`] + (secondsTotal / 100) * getSliderCoords(nextVideo).x2;\n endRef.current = secondsToRated;\n } else {\n let cardIndex = filteredCards.findIndex(\n card => card.moments[0].inner.id === currentCard.moments[0].inner.id\n );\n\n cardIndex++;\n\n if (cardIndex < filteredCards.length) {\n dispatch(\n setCurrentCard({\n ...filteredCards[cardIndex],\n toFirstMoment: !isLastMomentMode,\n manualClick: false\n })\n );\n\n return;\n }\n // dispatch(setPlaybackMode('pause'));\n }\n }\n\n const videoHandling = (doSeek = true, isForcePlay = true, seekToCurrentTime = false) => {\n clearInterval(intervalRef.current);\n\n if (!currentMoment.video) {\n const maxVideoMoment = filteredCards.reduce((maxMoment, card) => {\n card.type !== 'Replacement' &&\n card.moments?.forEach(moment => {\n if (moment.icons && moment.video) {\n maxMoment = moment;\n }\n });\n\n return maxMoment;\n }, []);\n\n if (currentMoment.inner.id > maxVideoMoment.inner.id) {\n preferredVideoState === 1 && video1Ref.current?.playVideo();\n\n if (maxVideoMoment?.video?.broadcast_seconds_to) {\n dispatch(setMaxVideoMomentBroadcast(true));\n }\n\n if (video1Ref.current?.getCurrentTime() < maxVideoMoment?.video?.broadcast_seconds_to) {\n video1Ref.current?.seekTo(maxVideoMoment.video.broadcast_seconds_to);\n }\n // video1Ref.current?.pauseVideo();\n // setTimeout(() => {\n // videoHandling(true, isForcePlay);\n // }, 1000);\n return;\n }\n\n dispatch(setMaxVideoMomentBroadcast(false));\n\n video1Ref.current?.pauseVideo();\n video2Ref.current?.pauseVideo();\n video3Ref.current?.pauseVideo();\n video4Ref.current?.pauseVideo();\n\n if (modeRef.current !== 'pause') {\n nextMomentTimeoutRef.current = setTimeout(toNextMomentOrCard, 3000);\n }\n return;\n }\n\n if (\n currentCard.moments.length === 0\n // || !currentCard.moments[0].video\n ) {\n video1Ref.current?.pauseVideo();\n video2Ref.current?.pauseVideo();\n video3Ref.current?.pauseVideo();\n video4Ref.current?.pauseVideo();\n\n return;\n }\n\n const { video } = currentMoment;\n const videoLengthPrefix =\n !isBroadcast &&\n viewMode === 'mode-1' &&\n JSON.parse(preview.camera_views[0]).cameras[0] === 'broadcast_link'\n ? 'broadcast'\n : videoLengthMode.toLowerCase().replace(' ', '_');\n const secondsTotal =\n video[`${videoLengthPrefix}_seconds_to`] - video[`${videoLengthPrefix}_seconds_from`];\n\n const secondsFromRated =\n video[`${videoLengthPrefix}_seconds_from`] + (secondsTotal / 100) * sliderCoords.x1;\n\n const seekToTime = seekToCurrentTime ? videoCurrentTime : secondsFromRated;\n\n if (doSeek) {\n video1Ref.current?.seekTo(seekToTime - getCamDelta(modeNumber, 1), true);\n video2Ref.current?.seekTo(seekToTime - getCamDelta(modeNumber, 2), true);\n video3Ref.current?.seekTo(seekToTime - getCamDelta(modeNumber, 3), true);\n video4Ref.current?.seekTo(seekToTime - getCamDelta(modeNumber, 4), true);\n }\n\n if (isForcePlay) {\n video1Ref.current?.playVideo();\n video2Ref.current?.playVideo();\n video3Ref.current?.playVideo();\n video4Ref.current?.playVideo();\n }\n\n const secondsToRated =\n video[`${videoLengthPrefix}_seconds_from`] + (secondsTotal / 100) * sliderCoords.x2;\n\n startRef.current = secondsFromRated;\n endRef.current = secondsToRated;\n\n const camDelta1 = getCamDelta(modeNumber, 1);\n\n intervalRef.current = setInterval(() => {\n if (video1Ref.current === null) return;\n\n const currentTime = video1Ref.current.getCurrentTime() + camDelta1;\n\n if (currentTime < startRef.current && viewMode === 'mode-1') {\n video1Ref.current?.seekTo(seekToTime - getCamDelta(modeNumber, 1), true);\n // console.log('seeking video1 to: ',seekToTime - getCamDelta(modeNumber, 1), '...');\n return;\n }\n\n if (currentTime >= endRef.current) {\n if (modeRef.current === 'pause') {\n videoHandling(true, isForcePlay);\n return;\n }\n\n //To next moment or card\n toNextMomentOrCard();\n }\n }, 50);\n };\n\n function rateChangeHandler(e) {\n const value = typeof e === 'number' ? e : e.data;\n\n video1Ref.current?.setPlaybackRate(value);\n video2Ref.current?.setPlaybackRate(value);\n video3Ref.current?.setPlaybackRate(value);\n video4Ref.current?.setPlaybackRate(value);\n }\n\n const seekVideos = sec => {\n // New synchronization method\n alreadySeekingRef.current = false;\n video1Ref.current?.seekTo(sec - getCamDelta(modeNumber, 1), true);\n video2Ref.current?.seekTo(sec - getCamDelta(modeNumber, 2), true);\n video3Ref.current?.seekTo(sec - getCamDelta(modeNumber, 3), true);\n video4Ref.current?.seekTo(sec - getCamDelta(modeNumber, 4), true);\n };\n\n function setPlayPause(state) {\n if (state === 'play') {\n video1Ref.current?.playVideo();\n video2Ref.current?.playVideo();\n video3Ref.current?.playVideo();\n video4Ref.current?.playVideo();\n\n return;\n }\n\n video1Ref.current?.pauseVideo();\n video2Ref.current?.pauseVideo();\n video3Ref.current?.pauseVideo();\n video4Ref.current?.pauseVideo();\n }\n\n //Handle on funcs\n\n const handleOnReady = (videoNumber, target) => {\n VIDEO_NUMBERS[videoNumber].current = target;\n\n const isForcePlay = preferredVideoState === 1;\n\n let seekToCurrentTime = videoCurrentTime > 0;\n\n if (currentMoment?.video) {\n const videoLengthPrefix =\n !isBroadcast &&\n viewMode === 'mode-1' &&\n JSON.parse(preview.camera_views[0]).cameras[0] === 'broadcast_link'\n ? 'broadcast'\n : videoLengthMode.toLowerCase().replace(' ', '_');\n\n const timeStartVideo = currentMoment?.video[`${videoLengthPrefix}_seconds_from`];\n const timeEndVideo = currentMoment?.video[`${videoLengthPrefix}_seconds_to`];\n // const timeEndPitch = currentMoment?.metering?.pitch?.time_end_pitch_window;\n\n seekToCurrentTime =\n videoCurrentTime > 0 && videoCurrentTime > timeStartVideo && videoCurrentTime < timeEndVideo;\n }\n\n videoHandling(true, isForcePlay, seekToCurrentTime);\n\n target.setPlaybackRate(videoPlaybackRate);\n };\n\n const stateChangeHandler = (videoNumber, target, stateValue) => {\n videoNumber === 1 && dispatch(setVideoState(stateValue));\n\n stateValue === 1 && preferredVideoState === 2 && target.pauseVideo();\n };\n\n return (\n <>\n {viewModeNumber === 1 && (\n \n )}\n {viewModeNumber === 2 && (\n <>\n \n \n \n \n \n )}\n {viewModeNumber === 3 && (\n <>\n \n \n \n \n \n )}\n {(currentMoment.video || (!currentMoment.video && maxVideoMomentBroadcast)) && (\n \n )}\n \n );\n};\n\nexport default forwardRef(VideoList);\n","import React from 'react';\nimport cl from '../Videos.module.scss';\nimport PlaysEvents from '../../PlaysEvents/PlaysEvents';\nimport VideoOptions from '../../VideoOptions/VideoOptions';\nimport { useSelector } from 'react-redux';\nimport Signs from './Signs';\nimport TeamInfo from './TeamInfo';\n\nconst SidePanel = ({ currentTab }) => {\n const { guests, owners } = useSelector(state => state.game.preview);\n\n return (\n
    \n
    \n \n
    \n\n \n \n \n\n
    \n \n
    \n
    \n );\n};\n\nexport default SidePanel;\n","import React from 'react';\nimport cl from '../Videos.module.scss';\nimport Timeline from '../../Timeline/Timeline';\nimport { useSelector } from 'react-redux';\nimport CurrentCard from './CurrentCard';\n\nconst BottomPanel = () => {\n const currentCard = useSelector(state => state.game.currentCard);\n const currentMoment = useSelector(state => state.game.currentMoment);\n\n const pitcherName = currentCard?.moments\n ?.slice(-1)[0]\n ?.pitcher.pitches_name.replace(' ', ' ')\n .toUpperCase();\n const ballPlayerName = currentCard?.who?.replace(' ', ' ').toUpperCase();\n\n const speedValue = currentMoment?.metering?.pitch?.start_speed.toFixed(1) ?? '';\n return (\n
    \n \n {currentCard?.moments && }\n
    \n
    \n
    \n P:\n {pitcherName}\n
    \n
    \n B:\n {ballPlayerName}\n
    \n
    \n {speedValue} mph\n
    \n
    \n );\n};\n\nexport default BottomPanel;\n","import React, { useRef, useEffect } from 'react';\nimport cl from './Videos.module.scss';\nimport { useSelector } from 'react-redux';\nimport classNames from 'classnames';\nimport VideoList from '../VideoList/VideoList';\nimport { closeFullscreen, openFullscreen } from 'utils';\nimport SidePanel from './SidePanel/SidePanel';\nimport BottomPanel from './BottomPanel/BottomPanel';\n\nconst Videos = ({ currentTab }) => {\n const wrapperRef = useRef();\n const timerRef = useRef();\n const controlsWrapperRef = useRef();\n\n const viewMode = useSelector(s => s.game.viewMode);\n const isFullscreen = useSelector(s => s.game.isFullscreen);\n const currentMoment = useSelector(s => s.game.currentMoment);\n const playerCardFilterFocused = useSelector(s => s.game.playerCardFilterFocused);\n const preferredVideoState = useSelector(s => s.game.preferredVideoState);\n const maxVideoMomentBroadcast = useSelector(s => s.game.maxVideoMomentBroadcast);\n\n const isMobile = useSelector(s => s.shared.isMobile);\n\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n useEffect(() => {\n if (playerCardFilterFocused) {\n document.removeEventListener('keydown', handleKeyDown);\n return;\n }\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isFullscreen, playerCardFilterFocused]);\n\n function handleKeyDown(e) {\n if (e.code !== 'KeyF') return;\n e.preventDefault();\n\n e.code === 'KeyF' && (isFullscreen ? closeFullscreen() : openFullscreen(wrapperRef.current));\n }\n\n function handleMouseMove() {\n if ((!currentMoment.video && !maxVideoMomentBroadcast) || isMobile) return;\n\n clearTimeout(timerRef.current);\n\n controlsWrapperRef.current.lastChild.style.opacity = 1;\n controlsWrapperRef.current.lastChild.style.visibility = 'visible';\n\n timerRef.current = setTimeout(() => {\n if (!controlsWrapperRef.current) return;\n controlsWrapperRef.current.lastChild.style.opacity = 0;\n timerRef.current = setTimeout(() => {\n if (controlsWrapperRef.current) controlsWrapperRef.current.lastChild.style.visibility = 'hidden';\n }, 300);\n }, 500);\n }\n\n function handleTouch() {\n if (!currentMoment.video || !isMobile) return;\n\n clearTimeout(timerRef.current);\n\n controlsWrapperRef.current.lastChild.style.opacity = 1;\n controlsWrapperRef.current.lastChild.style.visibility = 'visible';\n\n timerRef.current = setTimeout(\n () => {\n if (!controlsWrapperRef.current) return;\n controlsWrapperRef.current.lastChild.style.opacity = 0;\n timerRef.current = setTimeout(() => {\n controlsWrapperRef.current.lastChild.style.visibility = 'hidden';\n }, 100);\n },\n preferredVideoState === 1 ? 500 : 2500\n );\n }\n\n const outerWrapperClasses = classNames(cl.outerWrapper, cl.mobileLandscapeVideo);\n const wrapperClasses = classNames(cl.wrapper, {\n [cl.videos1]: viewMode === 'mode-1',\n [cl.videos4]: viewMode === 'mode-2' || viewMode === 'mode-3'\n });\n return (\n
    \n \n \n
    \n \n \n \n );\n};\n\nexport default Videos;\n","export default __webpack_public_path__ + \"static/media/field_right.277635bf.jpg\";","export default __webpack_public_path__ + \"static/media/field_icon.e4ba1658.png\";","import React from 'react';\nimport YouTube from 'react-youtube';\nimport cl from './HittingField.module.scss';\nimport classNames from 'classnames';\nimport { useSelector } from 'react-redux';\nimport getYouTubeID from 'get-youtube-id';\n\nconst CameraView = ({ camera2D, handleOnReady, isVisible = true }) => {\n const preview = useSelector(s => s.game.preview);\n\n const { camera_info: cameraInfo } = preview;\n\n const { ip_cam_link: ipCamLink } = cameraInfo;\n\n\tconst videoId = getYouTubeID(ipCamLink) || null\n\n const onReady = ({ target }) => {\n handleOnReady(target);\n };\n\n const videoClasses = classNames(cl.cameraView, {\n [cl.hidden]: !isVisible\n });\n return (\n \n );\n};\n\nexport default CameraView;\n","import { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentCard } from 'redux/gameReducer';\n\nconst useSetMomentById = () => {\n const filteredCards = useSelector(state => state.game.filteredCards);\n\n const dispatch = useDispatch();\n\n const setMomentById = id => {\n const tempCard = filteredCards.find(card => card.moments.some(moment => moment.inner.id === id));\n\n tempCard && dispatch(setCurrentCard({ ...tempCard, customMoment: id }));\n };\n\n return setMomentById;\n};\n\nexport default useSetMomentById;\n","import { tooltip } from './HittingField.module.scss';\n\nconst Tooltip = ({ text }) => {\n return
    {text}
    ;\n};\n\nexport default Tooltip;\n","import React, { Suspense, useMemo, useState, useRef, useLayoutEffect, memo, lazy } from 'react';\nimport cl from './HittingField.module.scss';\nimport { Canvas, useFrame } from '@react-three/fiber';\nimport { CatmullRomCurve3, FrontSide, TextureLoader } from 'three';\nimport { OrbitControls } from '@react-three/drei';\nimport FieldBg from 'images/field_right.jpg';\nimport classNames from 'classnames';\nimport * as THREE from 'three';\nimport ArrowDown from 'components/UI/icons/ArrowDown';\nimport CameraIcon from 'images/video_camera_icon.png';\nimport FieldIcon from 'images/field_icon.png';\nimport CameraView from './CameraView';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport useSetMomentById from 'hooks/useSetMomentById';\nimport Tooltip from './Tooltip';\n// import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry';\n// import { FontLoader } from 'three/examples/jsm/loaders/FontLoader';\n// import ComfortaaFont from 'fonts/Comfortaa_Regular.json';\nconst Model = lazy(() => import('models/Stadium'));\n\n// extend({ TextGeometry });\n\nconst OptionsBar = ({ isAutoRotate, handleAutoRotateClick, handleResetClick }) => {\n const rotateBtnClass = classNames({\n [cl.active]: isAutoRotate\n });\n\n return (\n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n );\n};\n\nconst Curve = ({\n moment,\n coef,\n setDrawPoints,\n currentMoment,\n setMomentById,\n handlePointerOver,\n handlePointerOut\n}) => {\n const { data_3d: data } = moment?.metering?.hit;\n\n const [pointerOver, setPointerOver] = useState(false);\n\n const cashedStepTotal = useRef(0);\n const tubeRef = useRef(null);\n const textRef = useRef(null);\n\n let stepTotalRef = cashedStepTotal.current;\n\n useLayoutEffect(() => {\n setDrawPoints(false);\n\n stepTotalRef = 0;\n cashedStepTotal.current = 0;\n }, [data]);\n\n const points = data.reduce((sum, coord) => {\n const newCoord = new THREE.Vector3(coord[0] * coef - 320, coord[2] * coef, coord[1] * -coef + 217);\n\n sum.push(newCoord);\n return sum;\n }, []);\n\n const curveCoords = new CatmullRomCurve3(points);\n\n // const textureRef = useMemo(() => new TextureLoader().load(CurveTexture), []);\n\n useFrame(({ camera }) => {\n if (textRef.current) {\n textRef.current.quaternion.copy(camera.quaternion);\n textRef.current.geometry.center();\n }\n\n if (stepTotalRef > 30510) return;\n if (stepTotalRef > 30110) {\n setDrawPoints(true);\n cashedStepTotal.current = stepTotalRef;\n return;\n }\n cashedStepTotal.current = stepTotalRef;\n\n stepTotalRef += 400;\n tubeRef.current.setDrawRange(0, stepTotalRef);\n });\n const isCurrentTube = currentMoment.inner.id === moment.inner.id;\n\n const handleMeshClick = () => setMomentById(moment.inner.id);\n\n // const font = new FontLoader().parse(ComfortaaFont);\n // const textCoords = data[Math.floor(data.length / 2)];\n\n const distanceText = `Angle: ${String(Math.round(moment.metering.hit.angle))}° Velocity: ${String(\n Math.round(moment.metering.hit.start_speed)\n )} mph \nDistance: ${String(Math.round(moment.metering.hit.distance))} m.`;\n return (\n <>\n \n \n \n \n {\n if (cashedStepTotal.current < 30110) return;\n handlePointerOver(distanceText);\n setPointerOver(true);\n }}\n onPointerOut={() => {\n if (cashedStepTotal.current < 30110) return;\n handlePointerOut(distanceText);\n setPointerOver(false);\n }}>\n \n \n
    \n {/* {hovered && (\n \n \n \n \n )} */}\n \n );\n};\n\nconst CurveAndPoints = memo(\n ({ moment, coef, currentMoment, setMomentById, handlePointerOver, handlePointerOut }) => {\n const [drawPoints, setDrawPoints] = useState(false);\n const { data_3d: data3D } = moment?.metering?.hit;\n\n return (\n <>\n \n {drawPoints && }\n \n );\n },\n propsComparison\n);\n\nfunction propsComparison(prevProps, nextProps) {\n return JSON.stringify(prevProps) === JSON.stringify(nextProps);\n}\n\nconst Curves = memo(\n ({ batterMoments, coef, currentMoment, setMomentById, handlePointerOver, handlePointerOut }) => {\n return (\n <>\n {batterMoments.map(moment => {\n return (\n \n );\n })}\n \n );\n },\n propsComparison\n);\n\nconst TouchPoints = ({ data, coef }) => (\n <>\n {data\n .filter(coords => coords[3] === 1)\n .map((coord, i) => (\n \n \n \n \n ))}\n \n);\n\nconst HittingField = ({ handleOnReady, isInterruptedMoment }) => {\n const [isAutoRotate, setAutoRotate] = useState(true);\n const [isCameraView, setCameraView] = useState(false);\n const [hovered, setHovered] = useState({ isHovered: false, text: '' });\n\n const innings = useSelector(state => state.game.innings, shallowEqual);\n const currentCard = useSelector(state => state.game.currentCard, shallowEqual);\n const currentMoment = useSelector(state => state.game.currentMoment, shallowEqual);\n const hitState = useSelector(state => state.game.hitState);\n const isBroadcast = useSelector(state => state.game.isBroadcast);\n\n const { hit } = currentMoment.metering || {};\n const { camera_2d: camera2D } = hit || 0;\n\n const textureRef = useMemo(() => new TextureLoader().load(FieldBg), []);\n\n const controlsRef = useRef();\n const pointerTimeout = useRef(null);\n\n // useLayoutEffect(() => {\n // if (isCameraView) return;\n\n // setCurveCount(0);\n\n // if (!data_3d) return;\n\n // setTimeout(() => {\n // setCurveCount(1);\n // }, 150);\n // }, [data_3d, isCameraView]);\n\n // useEffect(() => {\n // if (!data_3d || curveCount === 0) return;\n\n // const length = data_3d.length;\n\n // let timeout;\n\n // if (curveCount < length) {\n // timeout = setTimeout(() => {\n // setCurveCount(prev => prev + 1);\n // }, 3);\n // }\n\n // return () => {\n // clearTimeout(timeout);\n // };\n // }, [curveCount]);\n\n const handleAutoRotateClick = () => setAutoRotate(prev => !prev);\n const handleResetClick = () => controlsRef.current.reset();\n\n const handlePointerOverCurve = text => {\n clearTimeout(pointerTimeout.current);\n\n setHovered({ isHovered: true, text });\n\n document.body.style.cursor = 'pointer';\n };\n\n const handlePointerOutCurve = text => {\n clearTimeout(pointerTimeout.current);\n\n pointerTimeout.current = setTimeout(() => {\n setHovered({ isHovered: false, text });\n }, 4000);\n\n document.body.style.cursor = 'auto';\n };\n\n // const font = new FontLoader().parse(ComfortaaFont)\n\n const coef = 925 / 90;\n\n const batterCards = useMemo(\n () =>\n innings.reduce((sum, inning, i) => {\n inning['bottom/owners']\n ?.filter(card => card.who_id === currentCard.who_id)\n .forEach(card => {\n sum.push(card);\n });\n inning['top/guests']\n ?.filter(card => card.who_id === currentCard.who_id)\n .forEach(card => {\n sum.push(card);\n });\n\n return sum;\n }, []),\n [innings, currentCard]\n );\n\n const batterMoments = useMemo(\n () =>\n batterCards.reduce((sum, card) => {\n card.moments.filter(moment => moment.metering?.hit?.data_3d).forEach(moment => sum.push(moment));\n\n return sum;\n }, []),\n [batterCards]\n );\n\n const cameraSwitchBtnHandler = () => setCameraView(prev => !prev);\n\n const btnIcon = isCameraView ? FieldIcon : CameraIcon;\n const isBtnIcon = camera2D !== null && currentMoment.video && !isBroadcast && !isInterruptedMoment;\n\n const setMomentById = useSetMomentById();\n\n const wrapperClasses = classNames(cl.field, {\n [cl.dnone]: hitState !== 'Field'\n });\n return (\n
    \n {(!isCameraView || camera2D === null || isInterruptedMoment) && (\n <>\n \n \n {/* \n \n \n */}\n {/* */}\n \n\n {/* Other trajectories */}\n \n\n \n \n\n \n \n \n\n \n {hovered.isHovered && }\n \n )}\n {!isBroadcast && !isInterruptedMoment && (\n \n )}\n {/* {isCameraView && camera2D !== null && } */}\n {isBtnIcon && (\n \n )}\n
    \n );\n};\n\nexport default memo(HittingField);\n","export default \"data:image/png;base64,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\"","import React, { Fragment, useState, useEffect, useRef, useLayoutEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setSeekValue } from 'redux/gameReducer';\nimport { getFixedNumber } from 'utils';\nimport cl from './PlaysHitting.module.scss';\nimport classNames from 'classnames';\n\nconst Header = ({ maxSpeed, angle }) => {\n const maxSpeedValue = maxSpeed !== undefined ? `${getFixedNumber(maxSpeed, 1)} mph` : '—';\n const angleValue = angle !== undefined ? `${getFixedNumber(angle, 2)}°` : '—';\n\n return (\n
    \n
    \n
    \n Attack Angle\n {angleValue}\n
    \n
    \n
    \n
    \n Max speed\n {maxSpeedValue}\n
    \n
    \n
    \n );\n};\n\nconst Graph = ({ speeds, video, impactTime }) => {\n const [curveIndex, setCurveIndex] = useState(0);\n const videoCurrentTime = useSelector(state => state.game.videoCurrentTime);\n\n const isMobile = useSelector(state => state.shared.isMobile);\n\n const curveTimeoutRef = useRef();\n const svgRef = useRef();\n\n const dispatch = useDispatch();\n\n const VIEWBOX_WIDTH = 327;\n const VIEWBOX_HEIGHT = 84;\n const GRAPH_START_X = !isMobile ? 33 : 23;\n const GRAPH_START_Y = 5;\n const GRAPH_WIDTH = !isMobile ? 294 : 304;\n const GRAPH_HEIGHT = 60;\n\n const minSpeed = speeds.slice(1).reduce((min, cur) => (cur[0] < min ? cur[0] : min), speeds[0][0]);\n const maxSpeed = speeds.slice(1).reduce((max, cur) => (cur[0] > max ? cur[0] : max), speeds[0][0]);\n\n const maxSpeedRounded = Math.ceil(maxSpeed);\n const minSpeedRounded = Math.floor(minSpeed);\n\n const leftTitles = [\n maxSpeedRounded,\n maxSpeedRounded - (maxSpeedRounded - minSpeedRounded) / 2,\n minSpeedRounded\n ];\n\n const verticalGraphPart = (speeds[speeds.length - 1][1] - speeds[0][1]) / 5;\n // const verticalGraphPart = speeds[speeds.length - 1][1] / 5;\n\n const bottomTitles = [\n verticalGraphPart.toFixed(2),\n (verticalGraphPart * 2).toFixed(2),\n (verticalGraphPart * 3).toFixed(2),\n (verticalGraphPart * 4).toFixed(2)\n ];\n\n const maxXValue = +bottomTitles.slice(-1)[0] + verticalGraphPart;\n\n const xCoef = GRAPH_WIDTH / maxXValue;\n const yCoef = 42 / (maxSpeedRounded - minSpeedRounded);\n\n const impactDotCoords = { x: 0, y: 0 };\n\n const curveCoords = speeds.map((coords, index, arr) => {\n const newXCoord = (coords[1] - arr[0][1]) * xCoef + GRAPH_START_X;\n const newYCoord = GRAPH_START_Y + 11 + 42 - (coords[0] - minSpeedRounded) * yCoef;\n\n if (impactTime >= coords[1]) {\n const nextXCoord = (arr[index + 2][1] - arr[0][1]) * xCoef + GRAPH_START_X;\n const nextYCoord = GRAPH_START_Y + 11 + 42 - (arr[index + 2][0] - minSpeedRounded) * yCoef;\n\n impactDotCoords.x = nextXCoord;\n impactDotCoords.y = nextYCoord;\n }\n return [newXCoord, newYCoord];\n });\n\n useLayoutEffect(() => {\n clearTimeout(curveTimeoutRef.current);\n\n setCurveIndex(0);\n if (curveCoords.length === 0) return;\n setTimeout(() => {\n setCurveIndex(1);\n }, 150);\n }, [speeds]);\n\n useEffect(() => {\n if (curveIndex === 0) return;\n\n curveTimeoutRef.current = setTimeout(\n () => {\n setCurveIndex(prev => (prev < curveCoords.length ? prev + 1 : prev));\n },\n curveIndex === 0 ? 500 : 30\n );\n }, [curveIndex]);\n\n let curvePath = `M${curveCoords[0][0]} ${curveCoords[0][1]}`;\n curveCoords.shift();\n curveCoords.slice(0, curveIndex).forEach(coords => {\n curvePath += `L${coords[0]} ${coords[1]}`;\n });\n\n const curTimeCorr = videoCurrentTime;\n\n const totalHitTime = speeds[speeds.length - 1][1] - speeds[0][1];\n\n const swingTimeStart = speeds[0][1];\n\n const elapsedTime =\n curTimeCorr < swingTimeStart ||\n videoCurrentTime > video.full_seconds_to ||\n videoCurrentTime < video.full_seconds_from\n ? 0\n : curTimeCorr - swingTimeStart;\n\n const coef = GRAPH_WIDTH / totalHitTime;\n const redLineXCoord = GRAPH_START_X + elapsedTime * coef;\n const isRedLine = elapsedTime < totalHitTime && elapsedTime > 0;\n\n // !\n\n const handleMouseDown = e => {\n const { left: svgLeft, right: svgRight } = svgRef.current.getBoundingClientRect();\n const svgWidth = svgRight - svgLeft;\n\n const graphFullWidth = GRAPH_START_X + GRAPH_WIDTH;\n\n const graphStartsRel = (GRAPH_START_X / graphFullWidth) * 100;\n const clickRel = ((e.clientX - svgLeft) / svgWidth) * 100;\n\n // Return if clicked outside graph path\n if (clickRel < graphStartsRel) return;\n\n const pathStartsXCoord = svgWidth * (GRAPH_START_X / graphFullWidth) + svgLeft;\n const pathEndsXCoord = svgRight;\n const pathWidth = pathEndsXCoord - pathStartsXCoord;\n\n const clickPathRel = (e.clientX - pathStartsXCoord) / pathWidth;\n\n const clickTime = speeds[0][1] + totalHitTime * clickPathRel;\n\n dispatch(setSeekValue(clickTime));\n // dispatch(setVideoCurrentTime(clickTime));\n };\n // !\n return (\n
    \n

    Bat speed (mph)

    \n \n {/* Horizontal lines */}\n {leftTitles.map((title, i) => (\n \n \n \n {title}\n \n \n ))}\n\n {/* Vertical lines */}\n {bottomTitles.map((title, i) => {\n const verticalPart = GRAPH_WIDTH / 5;\n return (\n \n \n \n {title}\n \n \n );\n })}\n\n {/* Vertical red line */}\n {isRedLine && (\n \n )}\n\n {/* Curve */}\n \n\n {/* Impact dot */}\n curveIndex ? 0 : 3}\n fill='red'\n cx={impactDotCoords.x}\n cy={impactDotCoords.y}\n style={curveCoords.length > curveIndex ? { opacity: 0 } : null}\n />\n\n {/* Impact dot projection */}\n curveIndex ? 0 : 0.5}\n strokeDasharray='4 2'\n style={curveCoords.length > curveIndex ? { opacity: 0 } : null}\n className={cl.impactDotLine}\n />\n \n
    \n );\n};\n\nconst HittingGraph = ({ currentMoment }) => {\n const hitState = useSelector(s => s.game.hitState);\n\n const {\n max_speed: maxSpeed,\n attack_angle: angle,\n speeds,\n impact_time: impactTime\n } = currentMoment?.metering?.bat || {};\n\n const wrapperClasses = classNames(cl.graph, {\n [cl.dnone]: hitState !== 'Field'\n });\n return (\n
    \n
    \n {speeds && }\n
    \n );\n};\n\nexport default HittingGraph;\n","import React from 'react';\nimport cl from './PlaysHitting.module.scss';\nimport { useSelector } from 'react-redux';\nimport classNames from 'classnames';\n\nconst HittingStats = ({ hit }) => {\n const hitState = useSelector(s => s.game.hitState);\n\n const { start_speed: startSpeed, distance, angle, max_height: maxHeight } = hit || 0;\n\n const exitVelocityValue = startSpeed !== undefined ? startSpeed.toFixed(1) + ' mph' : '—';\n const distanceValue = distance !== undefined ? distance.toFixed(1) + ' m' : '—';\n const maxHeightValue = maxHeight !== undefined ? maxHeight.toFixed(1) + ' m' : '—';\n const angleValue = angle !== undefined ? angle.toFixed(0) + '°' : '—';\n\n\tconst wrapperClasses = classNames(cl.stats, {\n [cl.dnone]: hitState !== 'Field'\n });\n return (\n
    \n
    \n
    \n Exit Velocity\n {exitVelocityValue}\n
    \n
    \n Launch Angle\n {angleValue}\n
    \n
    \n
    \n
    \n Height\n {maxHeightValue}\n
    \n
    \n Distance\n {distanceValue}\n
    \n
    \n
    \n );\n};\n\nexport default HittingStats;\n","import React, { useRef, useEffect } from 'react';\nimport cl from './HittingVideo.module.scss';\nimport classNames from 'classnames';\nimport YouTube from 'react-youtube';\nimport { useSelector } from 'react-redux';\nimport NoVideoScreen from 'components/Game/Video/NoVideoScreen';\n\nconst HittingVideo = ({ videoId, position, handleOnReady, stateChangeHandler}) => {\n // eslint-disable-next-line\n const fullWidth = useSelector(state => state.shared.mobileWidth);\n const currentMoment = useSelector(state => state.game.currentMoment);\n\n const videoWrapperRef = useRef(null);\n const timerRef = useRef();\n const controlsWrapperRef = useRef();\n const currentTimeInterval = useRef();\n\n useEffect(\n () => () => {\n clearTimeout(timerRef.current);\n\t\t\tclearInterval(currentTimeInterval.current);\n },\n []\n );\n\n const videoClasses = classNames(cl.video, {\n [cl.topLeftVideo]: position === 'top-left',\n [cl.topRightVideo]: position === 'top-right',\n [cl.bottomLeftVideo]: position === 'bottom-left',\n [cl.bottomRightVideo]: position === 'bottom-right'\n });\n\n const { batter_position: batterPosition } = currentMoment.metering?.pitch || {};\n\n const POS_OPTIONS = {\n 'top-left':\n batterPosition === 0 ? { x: -0.09, y: -0.5, delta: 0.24 } : { x: -0.65, y: -0.52, delta: 0.24 },\n 'top-right':\n batterPosition === 0 ? { x: -0.5833, y: -0.5, delta: 0.24 } : { x: -0.2, y: -0.5, delta: 0.24 },\n 'bottom-left':\n batterPosition === 0 ? { x: -0.22, y: -0.01, delta: 0.52 } : { x: -0.15, y: -0.01, delta: 0.52 },\n 'bottom-right':\n batterPosition === 0 ? { x: -0.1, y: -0.01, delta: 0.52 } : { x: -0.22, y: -0.01, delta: 0.52 }\n };\n\n const xCoef = videoWrapperRef?.current?.clientWidth / ((1920 / 100) * (POS_OPTIONS[position].delta * 100));\n\n const onReady = e => {\n handleOnReady(position, e.target);\n };\n\n const onStateChange = e => {\n stateChangeHandler(position, e.target, e.data);\n };\n\n function handleMouseMove() {\n if (!currentMoment.video || position !== 'bottom') return;\n\n clearTimeout(timerRef.current);\n\n controlsWrapperRef.current.firstChild.style.opacity = 1;\n controlsWrapperRef.current.firstChild.style.visibility = 'visible';\n\n timerRef.current = setTimeout(() => {\n if (!controlsWrapperRef.current) return;\n controlsWrapperRef.current.firstChild.style.opacity = 0;\n timerRef.current = setTimeout(() => {\n controlsWrapperRef.current.firstChild.style.visibility = 'hidden';\n }, 300);\n }, 500);\n }\n\n return (\n \n \n \n \n {/* \n {currentQuality}\n */}\n {/* \n {currentTime}\n */}\n {!currentMoment.video && }\n \n );\n};\n\nexport default HittingVideo;\n","import React, { forwardRef, useRef, useEffect } from 'react';\nimport cl from '../PlaysHitting.module.scss';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport VideoControls from 'components/Game/VideoControls/VideoControls';\nimport getYouTubeID from 'get-youtube-id';\nimport {\n setCurrentCard,\n setCurrentMoment,\n setSeekValue,\n setVideoCurrentTime,\n setVideoState\n} from 'redux/gameReducer';\nimport HittingVideo from './HittingVideo';\nimport classNames from 'classnames';\n\nconst HittingVideos = (props, ref) => {\n const wrapperRef = useRef();\n const timerRef = useRef();\n const controlsWrapperRef = useRef();\n\n const preview = useSelector(state => state.game.preview, shallowEqual);\n const hitState = useSelector(state => state.game.hitState);\n\n const { camera_info: cameraInfo } = preview;\n\n const videoState = useSelector(s => s.game.videoState);\n const preferredVideoState = useSelector(s => s.game.preferredVideoState);\n const videoCurrentTime = useSelector(s => s.game.videoCurrentTime);\n const currentMoment = useSelector(s => s.game.currentMoment, shallowEqual);\n const currentCard = useSelector(s => s.game.currentCard, shallowEqual);\n const sliderCoords = useSelector(s => s.game.timelineSliderCoords, shallowEqual);\n const videoLengthMode = useSelector(s => s.game.videoLengthMode);\n const filteredCards = useSelector(s => s.game.filteredCards, shallowEqual);\n const isLastMomentMode = useSelector(s => s.game.isLastMomentMode);\n const playbackMode = useSelector(s => s.game.playbackMode);\n const seekValue = useSelector(s => s.game.seekValue);\n const videoPlaybackRate = useSelector(s => s.game.videoPlaybackRate);\n\n const dispatch = useDispatch();\n\n const video1Ref = useRef(null);\n const video2Ref = useRef(null);\n const video3Ref = useRef(null);\n const video4Ref = useRef(null);\n\n const timeIntervalRef = useRef(null);\n const intervalRef = useRef(null);\n const modeRef = useRef('play');\n const endRef = useRef(null);\n const nextMomentTimeoutRef = useRef();\n const videoHandlingTimeoutRef = useRef();\n const playTimeoutRef = useRef();\n const alreadySeekingRef = useRef(false);\n const prevBatterPositionRef = useRef(0);\n\n // New synchronization method\n const allTimesIntervalRef = useRef();\n const syncTimeoutRef = useRef(false);\n\n const VIDEO_REFS = {\n 'top-left': video1Ref,\n 'top-right': video2Ref,\n 'bottom-left': video3Ref,\n 'bottom-right': video4Ref,\n 'field-video': ref\n };\n\n const getVideoNumByPos = {\n 'top-left': 1,\n 'top-right': 2,\n 'bottom-left': 3,\n 'bottom-right': 4\n };\n\n const prevVideoStatesRef = useRef({\n 'top-left': -1,\n 'top-right': -1,\n 'bottom-left': -1,\n 'bottom-right': -1\n });\n\n const videoLengthPrefix = videoLengthMode.toLowerCase().replace(' ', '_');\n\n const SECONDS_SRC = currentMoment.video\n ? {\n hitting: {\n timeStart:\n currentMoment.metering?.hit?.time_start_hit_window ||\n currentMoment.video[`${videoLengthPrefix}_seconds_from`],\n timeEnd:\n currentMoment.metering?.hit?.time_end_hit_window ||\n currentMoment.video[`${videoLengthPrefix}_seconds_to`]\n }\n }\n : {};\n\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n useEffect(() => {\n clearInterval(allTimesIntervalRef.current);\n\n if (preferredVideoState === 2) {\n clearTimeout(playTimeoutRef.current);\n syncTimeoutRef.current = false;\n alreadySeekingRef.current = false;\n }\n\n allTimesIntervalRef.current = setInterval(() => {\n const video1Time = video1Ref.current?.getCurrentTime();\n const video2Time = video2Ref.current?.getCurrentTime();\n const video3Time = video3Ref.current?.getCurrentTime();\n const video4Time = video4Ref.current?.getCurrentTime();\n const fieldVideoTime = ref.current?.getCurrentTime();\n\n if (!video1Time || !video2Time || !video3Time || !video4Time || !fieldVideoTime) return;\n\n const delta1 = 0;\n const delta2 = Math.abs(video1Time - video2Time);\n const delta3 = Math.abs(video1Time - video3Time);\n const delta4 = Math.abs(video1Time - video4Time);\n const delta5 = Math.abs(video1Time - fieldVideoTime);\n\n const deltaArr = [delta1, delta2, delta3, delta4, delta5];\n\n const deltaCap = 0.08;\n const deltaCaps = [getCamDelta(1), getCamDelta(2), getCamDelta(3), getCamDelta(4), 0];\n const isBigDelta = deltaArr.some((delta, i) => {\n return (\n delta > Math.abs(deltaCaps[0] - deltaCaps[i]) + deltaCap ||\n delta < Math.abs(deltaCaps[0] - deltaCaps[i]) - deltaCap\n );\n });\n\n if (isBigDelta && !alreadySeekingRef.current) {\n video1Ref.current.pauseVideo();\n video2Ref.current?.pauseVideo();\n video3Ref.current?.pauseVideo();\n video4Ref.current?.pauseVideo();\n ref.current?.pauseVideo();\n // delta1 > deltaCaps[1] + deltaCap && video2Ref.current?.seekTo(video1Time + (deltaCaps[0] - deltaCaps[1]), true);\n (delta2 > Math.abs(deltaCaps[0] - deltaCaps[1]) + deltaCap ||\n delta2 < Math.abs(deltaCaps[0] - deltaCaps[1]) - deltaCap) &&\n video2Ref.current?.seekTo(video1Time + (deltaCaps[0] - deltaCaps[1]), true);\n (delta3 > Math.abs(deltaCaps[0] - deltaCaps[2]) + deltaCap ||\n delta3 < Math.abs(deltaCaps[0] - deltaCaps[2]) - deltaCap) &&\n video3Ref.current?.seekTo(video1Time + (deltaCaps[0] - deltaCaps[2]), true);\n (delta4 > Math.abs(deltaCaps[0] - deltaCaps[3]) + deltaCap ||\n delta4 < Math.abs(deltaCaps[0] - deltaCaps[3]) - deltaCap) &&\n video4Ref.current?.seekTo(video1Time + (deltaCaps[0] - deltaCaps[3]), true);\n (delta5 > Math.abs(deltaCaps[0] - deltaCaps[4]) + deltaCap ||\n delta5 < Math.abs(deltaCaps[0] - deltaCaps[4]) - deltaCap) &&\n ref.current?.seekTo(video1Time + (deltaCaps[0] - deltaCaps[4]), true);\n\n // alreadySeekingRef.current = true\n }\n\n const isAllReady = Object.entries(VIDEO_REFS).every(entry => {\n const entryState = entry[1].current?.getPlayerState();\n return entryState === -1 || entryState === 2;\n });\n\n if (isAllReady && !isBigDelta && preferredVideoState === 1 && !syncTimeoutRef.current) {\n syncTimeoutRef.current = true;\n\n // playTimeoutRef.current = setTimeout(() => {\n video1Ref.current.playVideo();\n video2Ref.current?.playVideo();\n video3Ref.current?.playVideo();\n video4Ref.current?.playVideo();\n ref.current?.playVideo();\n\n syncTimeoutRef.current = false;\n alreadySeekingRef.current = false;\n // }, 20);\n }\n }, 90);\n\n return () => {\n clearInterval(allTimesIntervalRef.current);\n clearTimeout(playTimeoutRef.current);\n };\n }, [preferredVideoState]);\n\n useEffect(() => {\n const isAllReady = !Object.values(VIDEO_REFS).some(value => value.current === null);\n\n if (!isAllReady) return;\n\n clearTimeout(videoHandlingTimeoutRef.current);\n clearInterval(intervalRef.current);\n\n const isForcePlay = preferredVideoState === 1;\n\n video1Ref.current.pauseVideo();\n video2Ref.current.pauseVideo();\n video3Ref.current.pauseVideo();\n video4Ref.current.pauseVideo();\n ref.current.pauseVideo();\n\n const { video } = currentMoment;\n\n if (video) {\n const secondsTotal = SECONDS_SRC.hitting.timeEnd - SECONDS_SRC.hitting.timeStart;\n const secondsFromRated =\n SECONDS_SRC.hitting.timeStart +\n (secondsTotal / 100) * (sliderCoords.changedCoord !== 'x2' ? sliderCoords.x1 : sliderCoords.x2);\n\n video1Ref.current.seekTo(secondsFromRated - getCamDelta(1), true);\n video2Ref.current.seekTo(secondsFromRated - getCamDelta(2), true);\n video3Ref.current.seekTo(secondsFromRated - getCamDelta(3), true);\n video4Ref.current.seekTo(secondsFromRated - getCamDelta(4), true);\n ref.current.seekTo(secondsFromRated - 0, true);\n\n prevBatterPositionRef.current = currentMoment.metering?.pitch?.batter_position;\n // Object.values(VIDEO_REFS).forEach((value, i) => {\n // value.current?.seekTo(secondsFromRated - getCamDelta(i + 1), true);\n // });\n }\n\n videoHandlingTimeoutRef.current = setTimeout(\n () => {\n videoHandling(false, isForcePlay);\n },\n videoLengthMode === 'Super Short' ? 1500 : 30\n );\n // eslint-disable-next-line\n }, [currentMoment, sliderCoords]);\n\n useEffect(() => {\n const isAllReady = !Object.values(VIDEO_REFS).some(value => value.current === null);\n\n if (!isAllReady) return;\n\n playbackMode === 'play' && clearTimeout(nextMomentTimeoutRef.current);\n\n videoHandling(false);\n // eslint-disable-next-line\n }, [isLastMomentMode]);\n\n useEffect(() => {\n (currentMoment.manualClick || currentCard.manualClick) && clearTimeout(nextMomentTimeoutRef.current);\n }, [currentMoment, currentCard]);\n\n useEffect(() => {\n modeRef.current = playbackMode;\n\n if (currentMoment.video) return;\n\n if (playbackMode === 'pause') {\n clearTimeout(nextMomentTimeoutRef.current);\n return;\n }\n\n playbackMode === 'play' && toNextMomentOrCard();\n // eslint-disable-next-line\n }, [playbackMode]);\n\n useEffect(() => {\n if (seekValue === null) return;\n\n seekVideos(seekValue);\n dispatch(setSeekValue(null));\n // eslint-disable-next-line\n }, [seekValue]);\n\n useEffect(() => {\n const isAllReady = !Object.values(VIDEO_REFS).some(value => value.current === null);\n if (!isAllReady) return;\n\n rateChangeHandler(videoPlaybackRate);\n // eslint-disable-next-line\n }, [videoPlaybackRate]);\n\n useEffect(() => {\n clearInterval(timeIntervalRef.current);\n\n const camDelta1 = getCamDelta(1);\n\n timeIntervalRef.current = setInterval(\n () => {\n // if (VIDEO_REFS['top-left'].current?.getPlayerState === 5) return\n const time = VIDEO_REFS['top-left'].current?.getCurrentTime();\n time && dispatch(setVideoCurrentTime(time + camDelta1));\n },\n videoState === 1 ? 15 : 200\n );\n\n return () => {\n clearInterval(timeIntervalRef.current);\n };\n // eslint-disable-next-line\n }, [currentMoment, videoState]);\n\n const { batter_position: batterPosition } = currentMoment.metering?.pitch || {};\n\n const {\n left_add_link: topLeftLink,\n right_add_link: topRightLink,\n bat_right_link: bottomLeftLink,\n bat_left_link: bottomRightLink\n // left_main_link: topLeftLink,\n // right_main_link: topRightLink,\n // left_main_link: bottomLeftLink,\n // right_main_link: bottomRightLink\n } = cameraInfo;\n\n function getCamDelta(videoNumber) {\n const titles = {\n 1: batterPosition === 0 ? 'left_add_time' : 'right_add_time',\n 2: batterPosition === 0 ? 'right_add_time' : 'left_add_time',\n 3: batterPosition === 0 ? 'bat_right_time' : 'bat_left_time',\n 4: batterPosition === 0 ? 'bat_left_time' : 'bat_right_time'\n };\n\n return cameraInfo[titles[videoNumber]];\n }\n\n // const videoId1 = getYouTubeID(topLeftLink) || 'WCjLd7QAJq8';\n // const videoId2 = getYouTubeID(topRightLink) || null;\n // const videoId3 = getYouTubeID(bottomLeftLink) || null;\n // const videoId4 = getYouTubeID(bottomRightLink) || null;\n const videoId1 = getYouTubeID(batterPosition === 0 ? topLeftLink : topRightLink) || 'WCjLd7QAJq8';\n const videoId2 = getYouTubeID(batterPosition === 0 ? topRightLink : topLeftLink) || null;\n const videoId3 = getYouTubeID(batterPosition === 0 ? bottomLeftLink : bottomRightLink) || null;\n const videoId4 = getYouTubeID(batterPosition === 0 ? bottomRightLink : bottomLeftLink) || null;\n\n function toNextMomentOrCard() {\n const momentIndex = currentCard.moments.findIndex(moment => moment.inner.id === currentMoment.inner?.id);\n\n if (momentIndex < currentCard.moments.length - 1) {\n const nextMoment = currentCard.moments[momentIndex + 1];\n\n dispatch(setCurrentMoment(nextMoment));\n\n if (!nextMoment.video) return;\n\n const { video: nextVideo } = nextMoment;\n\n const getSliderCoords = video => ({\n x1: 0,\n x2: 0\n });\n\n const NEXT_SECONDS_SRC = {\n hitting: {\n timeStart:\n nextMoment.metering?.hit?.time_start_hit_window ||\n nextMoment.video[`${videoLengthPrefix}_seconds_from`],\n timeEnd:\n nextMoment.metering?.hit?.time_end_hit_window ||\n nextMoment.video[`${videoLengthPrefix}_seconds_to`]\n }\n };\n\n const secondsTotal = NEXT_SECONDS_SRC.hitting.timeEnd - NEXT_SECONDS_SRC.hitting.timeStart;\n\n const secondsFromRated =\n NEXT_SECONDS_SRC.hitting.timeStart + (secondsTotal / 100) * getSliderCoords(nextVideo).x1;\n\n Object.values(VIDEO_REFS).forEach((value, i) =>\n value.current.seekTo(secondsFromRated - getCamDelta(i + 1), true)\n );\n\n const secondsToRated =\n NEXT_SECONDS_SRC.hitting.timeStart + (secondsTotal / 100) * getSliderCoords(nextVideo).x2;\n endRef.current = secondsToRated;\n } else {\n let cardIndex = filteredCards.findIndex(\n card => card.moments[0].inner.id === currentCard.moments[0].inner.id\n );\n\n cardIndex++;\n\n if (cardIndex < filteredCards.length) {\n dispatch(\n setCurrentCard({\n ...filteredCards[cardIndex],\n toFirstMoment: !isLastMomentMode,\n manualClick: false\n })\n );\n\n return;\n }\n\n // dispatch(setPlaybackMode('pause'));\n }\n }\n\n const videoHandling = (doSeek = true, isForcePlay = true, seekToCurrentTime = false) => {\n clearInterval(intervalRef.current);\n\n if (!currentMoment.video) {\n Object.values(VIDEO_REFS).forEach(value => value.current?.pauseVideo());\n\n if (modeRef.current !== 'pause') {\n nextMomentTimeoutRef.current = setTimeout(toNextMomentOrCard, 3000);\n }\n return;\n }\n\n if (currentCard.moments.length === 0 || !currentCard.moments[0].video) {\n Object.values(VIDEO_REFS).forEach(value => value.current?.pauseVideo());\n return;\n }\n\n const secondsTotal = SECONDS_SRC.hitting.timeEnd - SECONDS_SRC.hitting.timeStart;\n\n const secondsFromRated = SECONDS_SRC.hitting.timeStart + (secondsTotal / 100) * sliderCoords.x1;\n\n const seekToTime = seekToCurrentTime ? videoCurrentTime : secondsFromRated;\n\n doSeek &&\n Object.values(VIDEO_REFS).forEach((value, i) =>\n value.current?.seekTo(seekToTime - getCamDelta(i + 1), true)\n );\n\n isForcePlay &&\n Object.values(VIDEO_REFS).forEach(value => {\n value.current?.playVideo();\n });\n\n const secondsToRated = SECONDS_SRC.hitting.timeStart + (secondsTotal / 100) * sliderCoords.x2;\n\n endRef.current = secondsToRated;\n\n const camDelta1 = getCamDelta(1);\n\n intervalRef.current = setInterval(() => {\n if (Object.values(VIDEO_REFS).some(value => !value.current)) return;\n\n const currentTime = VIDEO_REFS['top-left'].current.getCurrentTime() + camDelta1;\n\n if (currentTime >= endRef.current) {\n if (modeRef.current === 'pause') {\n videoHandling(true, isForcePlay);\n return;\n }\n\n //To next moment or card\n toNextMomentOrCard();\n }\n }, 50);\n };\n\n function rateChangeHandler(e) {\n const value = typeof e === 'number' ? e : e.data;\n\n VIDEO_REFS['top-left'].current?.setPlaybackRate(value);\n VIDEO_REFS['top-right'].current?.setPlaybackRate(value);\n VIDEO_REFS['bottom-left'].current?.setPlaybackRate(value);\n VIDEO_REFS['bottom-right'].current?.setPlaybackRate(value);\n VIDEO_REFS['field-video'].current?.setPlaybackRate(value);\n }\n\n const seekVideos = sec => {\n Object.values(VIDEO_REFS).forEach((value, i) => value.current?.seekTo(sec - getCamDelta(i + 1), true));\n };\n\n function setPlayPause(state) {\n if (state === 'play') {\n video1Ref.current?.playVideo();\n video2Ref.current?.playVideo();\n video3Ref.current?.playVideo();\n video4Ref.current?.playVideo();\n ref.current?.playVideo();\n\n return;\n }\n\n video1Ref.current?.pauseVideo();\n video2Ref.current?.pauseVideo();\n video3Ref.current?.pauseVideo();\n video4Ref.current?.pauseVideo();\n ref.current?.pauseVideo();\n }\n\n //Handle on funcs\n\n const handleOnReady = (position, target) => {\n VIDEO_REFS[position].current = target;\n\n const isForcePlay = preferredVideoState === 1;\n\n const timeStartHit = currentMoment?.metering?.hit?.time_start_hit_window;\n const timeEndHit = currentMoment?.metering?.hit?.time_end_hit_window;\n const seekToCurrentTime =\n videoCurrentTime > 0 && videoCurrentTime > timeStartHit && videoCurrentTime < timeEndHit;\n // const seekToCurrentTime = videoCurrentTime > 0 && !currentMoment.metering.hit;\n\n videoHandling(true, isForcePlay, seekToCurrentTime);\n\n target.setPlaybackRate(videoPlaybackRate);\n // position === 'top-left' && dispatch(setVideoPlaybackRate(target.getPlaybackRate()));\n };\n\n const stateChangeHandler = (position, target, stateValue) => {\n position === 'top-left' && dispatch(setVideoState(stateValue));\n\n if (prevVideoStatesRef.current[position] === 5 && SECONDS_SRC.hitting?.timeEnd) {\n const secondsTotal = SECONDS_SRC.hitting.timeEnd - SECONDS_SRC.hitting.timeStart;\n const secondsFromRated =\n SECONDS_SRC.hitting.timeStart +\n (secondsTotal / 100) * (sliderCoords.changedCoord !== 'x2' ? sliderCoords.x1 : sliderCoords.x2);\n\n target.seekTo(secondsFromRated - getCamDelta(getVideoNumByPos[position]), true);\n preferredVideoState === 1 &&\n setTimeout(() => {\n target.playVideo();\n }, 200);\n }\n\n prevVideoStatesRef.current[position] = stateValue;\n\n stateValue === 1 && preferredVideoState === 2 && target.pauseVideo();\n\n // const isAllReady = !Object.entries(VIDEO_REFS).some(entry => {\n // const entryState = entry[1].current?.getPlayerState();\n // return (entryState === 3 || entryState === -1) && position !== entry[0];\n // });\n\n // const isAllPaused = Object.entries(VIDEO_REFS).every(entry => {\n // const entryState = entry[1].current?.getPlayerState();\n // return entryState === 2 || entryState === 3 || position !== entry[0];\n // });\n\n // const isAllQued = Object.entries(VIDEO_REFS).every(entry => {\n // const entryState = entry[1].current?.getPlayerState();\n // return entryState === 5 || position !== entry[0];\n // });\n\n const video1 = video1Ref.current;\n const video2 = video2Ref.current;\n const video3 = video3Ref.current;\n const video4 = video4Ref.current;\n const video5 = ref.current;\n\n // if (stateValue === 1) {\n // !isAllReady && target.pauseVideo();\n\n // if (isAllReady) {\n // if (preferredVideoState === 2) {\n // video1.pauseVideo();\n // video2.pauseVideo();\n // video3.pauseVideo();\n // video4.pauseVideo();\n // return;\n // }\n\n // video1 && preferredVideoState === 1 && video1.playVideo();\n // video2 && preferredVideoState === 1 && video2.playVideo();\n // video3 && preferredVideoState === 1 && video3.playVideo();\n // video4 && preferredVideoState === 1 && video4.playVideo();\n // }\n // }\n\n // if (stateValue === 2) {\n // video1 && video1.getPlayerState() === 1 && video1.pauseVideo();\n // video2 && video2.getPlayerState() === 1 && video2.pauseVideo();\n // video3 && video3.getPlayerState() === 1 && video3.pauseVideo();\n // video4 && video4.getPlayerState() === 1 && video4.pauseVideo();\n // }\n\n // if (stateValue === 3 && isAllPaused) {\n // video1 && preferredVideoState === 1 && video1.playVideo();\n // video2 && preferredVideoState === 1 && video2.playVideo();\n // video3 && preferredVideoState === 1 && video3.playVideo();\n // video4 && preferredVideoState === 1 && video4.playVideo();\n // }\n\n // if (stateValue === 5 && SECONDS_SRC.hitting) {\n\n // \t\tconst secondsTotal = SECONDS_SRC.hitting.timeEnd - SECONDS_SRC.hitting.timeStart;\n // \t\tconst secondsFromRated =\n // \t\t\tSECONDS_SRC.hitting.timeStart +\n // \t\t\t(secondsTotal / 100) * (sliderCoords.changedCoord !== 'x2' ? sliderCoords.x1 : sliderCoords.x2);\n\n // \t\ttarget.seekTo(secondsFromRated, true);\n // \t\tconsole.log('asdasd');\n // \t\tsetTimeout(() => {target.playVideo()}, 100)\n // }\n\n if (stateValue === 5 && preferredVideoState === 1) {\n video1?.playVideo();\n video2?.playVideo();\n video3?.playVideo();\n video4?.playVideo();\n video5?.playVideo();\n }\n };\n\n function handleMouseMove() {\n if (!currentMoment.video) return;\n\n clearTimeout(timerRef.current);\n\n controlsWrapperRef.current.lastChild.style.opacity = 1;\n controlsWrapperRef.current.lastChild.style.visibility = 'visible';\n\n timerRef.current = setTimeout(() => {\n if (!controlsWrapperRef.current) return;\n controlsWrapperRef.current.lastChild.style.opacity = 0;\n timerRef.current = setTimeout(() => {\n controlsWrapperRef.current.lastChild.style.visibility = 'hidden';\n }, 300);\n }, 500);\n }\n\n const wrapperClasses = classNames(cl.videos, {\n [cl.dnone]: hitState !== 'Videos'\n });\n return (\n
    \n \n \n \n \n\n {currentMoment.video && (\n \n )}\n
    \n );\n};\n\nexport default forwardRef(HittingVideos);\n","import NoVideoScreen from 'components/Game/Video/NoVideoScreen';\nimport clPlays from '../PlaysHitting.module.scss';\nimport cl from './HittingVideo.module.scss';\nimport { useEffect, useRef } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { setCurrentCard, setCurrentMoment } from 'redux/gameReducer';\n\nconst BroadcastHittingVideos = () => {\n const currentMoment = useSelector(s => s.game.currentMoment, shallowEqual);\n const currentCard = useSelector(s => s.game.currentCard, shallowEqual);\n const preferredVideoState = useSelector(s => s.game.preferredVideoState);\n const videoLengthMode = useSelector(s => s.game.videoLengthMode);\n const preview = useSelector(s => s.game.preview);\n const filteredCards = useSelector(s => s.game.filteredCards, shallowEqual);\n const isLastMomentMode = useSelector(s => s.game.isLastMomentMode);\n const playbackMode = useSelector(s => s.game.playbackMode);\n const isBroadcast = useSelector(s => s.game.isBroadcast);\n\n const dispatch = useDispatch();\n\n const nextMomentTimeoutRef = useRef();\n const intervalRef = useRef(null);\n const videoHandlingTimeoutRef = useRef();\n const modeRef = useRef('play');\n\n useEffect(\n () => () => {\n clearTimeout(nextMomentTimeoutRef.current);\n clearTimeout(videoHandlingTimeoutRef.current);\n clearInterval(intervalRef.current);\n },\n []\n );\n\n useEffect(() => {\n clearTimeout(videoHandlingTimeoutRef.current);\n clearInterval(intervalRef.current);\n\n const isForcePlay = preferredVideoState === 1;\n\n videoHandlingTimeoutRef.current = setTimeout(\n () => {\n videoHandling(false, isForcePlay);\n },\n videoLengthMode === 'Super Short' ? 1500 : 30\n );\n }, [currentMoment]);\n\n useEffect(() => {\n (currentMoment.manualClick || currentCard.manualClick) && clearTimeout(nextMomentTimeoutRef.current);\n }, [currentMoment, currentCard]);\n\n useEffect(() => {\n modeRef.current = playbackMode;\n\n if (playbackMode === 'pause') {\n clearTimeout(nextMomentTimeoutRef.current);\n return;\n }\n\n playbackMode === 'play' && toNextMomentOrCard();\n // eslint-disable-next-line\n }, [playbackMode]);\n\n function toNextMomentOrCard() {\n const momentIndex = currentCard.moments.findIndex(moment => moment.inner.id === currentMoment.inner?.id);\n\n if (momentIndex < currentCard.moments.length - 1) {\n const nextMoment = currentCard.moments[momentIndex + 1];\n\n dispatch(setCurrentMoment(nextMoment));\n\n if (!nextMoment.video || nextMoment?.inner?.id >= preview.camera_info.broadcast_link_add_moment_from)\n return;\n } else {\n let cardIndex = filteredCards.findIndex(\n card => card.moments[0].inner.id === currentCard.moments[0].inner.id\n );\n\n cardIndex++;\n\n if (cardIndex < filteredCards.length) {\n dispatch(\n setCurrentCard({\n ...filteredCards[cardIndex],\n toFirstMoment: !isLastMomentMode,\n manualClick: false\n })\n );\n\n return;\n }\n }\n }\n\n const videoHandling = (doSeek = true, isForcePlay = true, seekToCurrentTime = false) => {\n clearInterval(intervalRef.current);\n\n if (\n !currentMoment.video ||\n currentMoment?.inner?.id >= preview.camera_info.broadcast_link_add_moment_from ||\n isBroadcast\n ) {\n if (modeRef.current !== 'pause') {\n nextMomentTimeoutRef.current = setTimeout(toNextMomentOrCard, 3000);\n }\n return;\n }\n\n if (currentCard.moments.length === 0 || !currentCard.moments[0].video) {\n return;\n }\n };\n return (\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n );\n};\n\nexport default BroadcastHittingVideos;\n","import { useRef } from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport HittingField from './HittingField/HittingField';\nimport HittingGraph from './HittingGraph';\nimport HittingStats from './HittingStats';\nimport HittingVideos from './HittingVideos/HittingVideos';\nimport BroadcastHittingVideos from './HittingVideos/BroadcastHittingVideos';\n\nconst HittingFieldVideos = ({ isInterruptedMoment, isBroadcast }) => {\n const fieldVideoRef = useRef(null);\n\n const videoPlaybackRate = useSelector(s => s.game.videoPlaybackRate);\n\n const handleOnReady = target => {\n fieldVideoRef.current = target;\n\n target.pauseVideo();\n target.setPlaybackRate(videoPlaybackRate);\n };\n\n return (\n <>\n \n {!isBroadcast && !isInterruptedMoment && }\n {(isBroadcast || isInterruptedMoment) && }\n {/* {(mobileWidth > 1000 || hittingMode === 'Field') && } */}\n {/* {(mobileWidth > 1000 || hittingMode === 'Videos') && } */}\n \n );\n};\n\nconst PlaysHitting = () => {\n const currentMoment = useSelector(state => state.game.currentMoment, shallowEqual);\n const preview = useSelector(s => s.game.preview);\n const isBroadcast = useSelector(s => s.game.isBroadcast);\n\n const isInterruptedMoment =\n !isBroadcast &&\n !!preview.camera_info.broadcast_link_add_moment_from &&\n currentMoment?.inner?.id >= preview.camera_info.broadcast_link_add_moment_from;\n return (\n <>\n {/* {(mobileWidth > 1000 || hittingMode === 'Stats') && } */}\n {/* {(mobileWidth > 1000 || hittingMode === 'Graph') && } */}\n \n \n \n \n );\n};\n\nexport default PlaysHitting;\n","import React from 'react';\nimport cl from './PlaysField.module.scss';\n\nconst PlaysFieldBall = ({ coord, index, coordsLength }) => {\n const ballClasses = [cl.ball];\n index === coordsLength - 1 && ballClasses.push(cl.onTop);\n\n\tconst ballHalfSize = `${12.5 * coord[4] / 2}px`\n\tconst xShadowHalfSize = `${7.5 * coord[4] / 2}px`\n\n const ballStyles = {\n left: `calc(${coord[0] * 100 / 1920}% - ${ballHalfSize})`,\n top: `calc(${coord[1] * 100 / 1080}% - ${ballHalfSize})`,\n // left: coord[0] * coeff.x - (12.5 * coord[4]) / 2,\n // top: coord[1] * coeff.y - (12.5 * coord[4]) / 2,\n width: 12.5 * coord[4] + 'px',\n height: 12.5 * coord[4] + 'px'\n };\n\n const shadowStyles = {\n left: `calc(${coord[2] * 100 / 1920}% - ${ballHalfSize})`,\n top: `calc(${coord[3] * 100 / 1080}% - ${xShadowHalfSize})`,\n // left: coord[2] * coeff.x - (12.5 * coord[4]) / 2,\n // top: coord[3] * coeff.y - (7.5 * coord[4]) / 2,\n width: 12.5 * coord[4] + 'px',\n height: 7.5 * coord[4] + 'px'\n };\n\n return (\n <>\n
    \n
    \n \n );\n};\n\nexport default PlaysFieldBall;\n","import React, { useMemo, useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport PlaysFieldBall from './PlaysFieldBall';\n\nconst PlaysFieldBalls = ({ coords, currentMoment }) => {\n const [pauseBallsCount, setPauseBallsCount] = useState(0);\n\n const videoLengthMode = useSelector(state => state.game.videoLengthMode);\n const videoCurrentTime = useSelector(state => state.game.videoCurrentTime);\n const preferredVideoState = useSelector(state => state.game.preferredVideoState);\n\n useEffect(() => {\n if (preferredVideoState !== 2) return;\n\n setPauseBallsCount(0);\n\n setTimeout(() => {\n setPauseBallsCount(1);\n }, 40);\n }, [currentMoment]);\n\n useEffect(() => {\n if (pauseBallsCount === 0) return;\n\n let graphTimeout;\n if (pauseBallsCount < coords.length) {\n graphTimeout = setTimeout(() => setPauseBallsCount(prev => prev + 1), 40);\n return;\n }\n\n return () => {\n clearTimeout(graphTimeout);\n };\n // eslint-disable-next-line\n }, [pauseBallsCount]);\n\n const videoLengthPrefix = videoLengthMode.toLowerCase().replace(' ', '_');\n\n const SECONDS_SRC = currentMoment.video\n ? {\n pitch: {\n timeStart:\n currentMoment.metering?.pitch?.time_start_pitch_window ||\n currentMoment.video[`${videoLengthPrefix}_seconds_from`],\n timeEnd:\n currentMoment.metering?.pitch?.time_end_pitch_window ||\n currentMoment.video[`${videoLengthPrefix}_seconds_to`]\n }\n }\n : {};\n\n const { time_start: pitchTimeStart, time_end: pitchTimeEnd } = currentMoment.metering?.pitch || {};\n const totalPitchTime = pitchTimeEnd - pitchTimeStart;\n const timePerBall = totalPitchTime / coords.length;\n\n const isCount = pitchTimeStart < videoCurrentTime && SECONDS_SRC.pitch?.timeEnd >= videoCurrentTime;\n const count = preferredVideoState === 2 ? pauseBallsCount : isCount ? Math.ceil((videoCurrentTime - pitchTimeStart) / timePerBall) : coords.length;\n return (\n <>\n {useMemo(\n () =>\n coords\n .slice(0, count)\n .map((coord, i) => (\n \n )),\n [count, coords]\n )}\n \n );\n};\n\nexport default PlaysFieldBalls;\n","import React from 'react';\nimport cl from './PlaysField.module.scss';\nimport gridImg from 'images/grid.png';\nimport PlaysFieldBalls from './PlaysFieldBalls';\nimport { useSelector } from 'react-redux';\nimport classNames from 'classnames';\n\nconst STRIKE_BALL_COLORS = {\n STRIKE: '#E2001C',\n BALL: '#2B9D6A'\n};\n\nconst PlaysField = ({ currentMoment }) => {\n const pitchState = useSelector(state => state.game.pitchState);\n\n const wrapperClasses = classNames({\n [cl.outerWrapper]: pitchState === 'Field',\n [cl.dnone]: pitchState !== 'Field'\n });\n\n const isStrikeBallValue = currentMoment.metering?.pitch;\n const strikeBallValue = currentMoment.metering?.pitch?.is_strike ? 'STRIKE' : 'BALL';\n\n const ballsCoords = currentMoment?.metering?.pitch?.data_2d || [];\n return (\n
    \n
    \n grid\n \n
    \n {isStrikeBallValue && (\n
    \n {strikeBallValue}\n
    \n )}\n
    \n );\n};\n\nexport default PlaysField;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAACeCAYAAADTyT/iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAZqSURBVHgB7dx9aFV1HMfx7zn3+W6723TOuTnMaT6mFm6GZuBIGMEEoQZBRARFREJUf+X/6T9FBEoEQUgWUURWgxQTA8UQrYbWfCiHD8x8nHu6D+fce87pnqv3cr3M+dvD3b0f+Lz+Oeee/XbP4b537t3+2Feb17n7sCbaJiEYtmjtuhAkb3Zn45LA211t4R4psbe+vHPY3X78Ym27lFg5XYtr+3eDH0UTzuPuPu84UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAeVUWnbtuzT131WyTGfTjn/FOKRMzdS0NEf38ukWB8yprlcLFDSsYt5zmR2d7zkoR/Hw6sfXZVcF9+cfm1+hRKYFSXUv/kD3/TsyZm96dvnAun66ZbS3BC1IEB3uN0exz7zkWyxwr1rnK9VqGzyQqjKSjvJ6fcaAYDhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgcr9D/jJPvPN4xeMyuxjv0+7llvlSFBEq+25aLaKosqAflN17UDUXryze/jV/GO7Do1slUkK+PRY0CcxmYSo4cw68FdiWf6xwsfjiQT1WHVIm/C5B+NWJGGKprpeyw7T9ulyLWlLg1DZc4dp5+64Nc3+3csbPf9mH1++beciRk2nPp50Wlvm+E4qPrfcGLHqVNee7TfblzX5M/OP03f9a+522Tzf9zJJZsoJG0kJyyTcHLVWhHxa5t1iKG5n7rTqkK48JiRlO+GUNfFzO47jt9NN0t9bo7I+Fy4Y0EZbW4K5t8fWFsnt91w2F/Tdspo7HgsWZc7Jju7UypfWVxx197Phtj1TtU9KYEf30OvbO6s/zVzD3oE97vb952p2SpEdOpNYbSSdoY5VwSMPWpM/TFt5zsmpK+aGf/5LtuQf8+pieD2aqfL9nvQ6v0eMsb6W/sme/8nhkS35x/Yci24SRZV+bUR1bXVYH3etYTqRX3oTS/KP/XEpOU8eosKnm+Ggo/RaREIeM/05aMgUKIdb3ew/1rU2fDD/2FDcCQzHLb/K948mbH/MdAJjfe3GsLVo3UL/7+7+3/3J591tU43nqigaitlVqmv7B63G8b5uOk6ocM3xvsRDfylLpuxAytaUXouU5fhTttz3Whjpt8gnF/q/FkXK4cbi/tRUh7xT+slxpX9ri699JJAJ9fnRu9OXNq8IKo1Gmm7pt+2lL2+o+NXdP9FnvOJu32iv+kmK7N5bpfJ6/h0HiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHSnmykJly/FcGUsqjlybCsm1f4XMX61zlei0x0wl5NBlSXa8c7taI0/DtidgWKYKRuDQVPnexzlWu1xI3pe6JBb4fVNcrh2us1S93ra08KEXgjhp8pyPylbu/be9Ah7vNPp5ppbqWic7yyoU7czXZ8cH+kTVjLbJsp8axnZZdg1bFVMbmPkg0Ydd/8Vt0Y/4x93F9leeWzJDsSN6k7QR6+5P3DUktfDxVdVVarD7indJrmBvtKwTjvtG+syv1/eGAfm2shdk7rjrsuTCVsbkPcjtqLZ1d4Tnn7vcPpp52t0013iOjhj1HZkh2JG/SkkqfR0bdY0bKydxpAa82rXd+ypZw+jWd0muYC7e80Xegqy3cM9aie6N9NxcOGp0u7ufKe52Rz9z99OdKJlz28Uwba7Tvhy/UvitFNtHRvvw7DhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAMRwohgPFcKAYDhTDgWI4UAwHiuFAMRwo5ZFQMcOp7T6VWC9FkEjZcwqfu1jnKtdrGTasWTUBfXqHsC2c7bseNeWAFMnmleHewmORkNYrJVCqa4mEvFJX5bmhul4pXHWFlnhqsf+0zIBvjkcz25k6n4BcSyF+xoFiOFAMB4rhQDEcKIYDxXCgcn/HDcTsuSf7Eg1SJngt4+NMZkB3ZzI72iVH5KIQDk3kf16aR4kZngm6AAAAAElFTkSuQmCC\"","const Lines = ({ startX, startY }) => {\n return (\n <>\n {/* Horizontal lines */}\n \n \n \n \n \n\n {/* Vertical lines */}\n \n \n \n \n \n \n );\n};\n\nexport default Lines;\n","import { graphTitle } from '../PlaysSpin.module.scss';\n\nconst LinesText = ({ startX, startY, graphRatio, minMaxValues }) => {\n const maxY = Math.ceil(minMaxValues.maxY * 100);\n const minY = Math.floor(minMaxValues.minY * 100);\n const maxX = Math.ceil(minMaxValues.maxX * 100);\n const minX = Math.floor(minMaxValues.minX * 100);\n\n const averageY = (maxY - minY) / 4;\n const averageX = (maxX - minX) / 4;\n return (\n <>\n {/* Horizontal lines text */}\n \n {(maxY / graphRatio) * -1}\n \n \n {Math.round(((maxY - averageY) / graphRatio) * -1)}\n \n \n {Math.round(((maxY + minY) / 2 / graphRatio) * -1)}\n \n \n {Math.round(((minY + averageY) / graphRatio) * -1)}\n \n \n {(minY / graphRatio) * -1}\n \n\n {/* Vertical lines text */}\n \n {minX / graphRatio}\n \n \n {Math.round((minX + averageX) / graphRatio)}\n \n \n {Math.round((maxX + minX) / 2 / graphRatio)}\n \n \n {Math.round((maxX - averageX) / graphRatio)}\n \n \n {maxX / graphRatio}\n \n \n );\n};\n\nexport default LinesText;\n","import useSetMomentById from 'hooks/useSetMomentById';\nimport { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { getPitchColorByName } from 'utils';\nimport { dot as dotClass, showingGroup, graphTooltip } from '../PlaysSpin.module.scss';\n\nconst Dots = ({ chartData, startX, startY, minMaxValues }) => {\n const [hoveredDot, setHoveredDot] = useState({\n visible: false,\n spinX: 0,\n spinY: 0,\n coords: [0, 0],\n pitchType: ''\n });\n\n const setMomentById = useSetMomentById();\n const { pitch_types: pitchTypes } = useSelector(state => state.game.preview);\n\n const maxX = Math.ceil(minMaxValues.maxX * 100);\n const minX = Math.floor(minMaxValues.minX * 100);\n const maxY = Math.ceil(minMaxValues.maxY * 100);\n const minY = Math.floor(minMaxValues.minY * 100);\n\n const xCoef = 100 / (maxX - minX);\n const yCoef = 100 / (maxY - minY);\n\n const handleDotClick = id => () => setMomentById(id);\n\n const spinValueX = Math.round(hoveredDot.spinX);\n const spinValueY = Math.round(hoveredDot.spinY);\n\n const hoveredDotXCoord =\n hoveredDot.coords[0] >= 90\n ? hoveredDot.coords[0] - 51\n : hoveredDot.coords[0] < 28\n ? hoveredDot.coords[0] + 57\n : hoveredDot.coords[0];\n const hoveredDotYCoord = hoveredDot.coords[1] <= 58 ? hoveredDot.coords[1] + 72 : hoveredDot.coords[1] - 16;\n return (\n <>\n {chartData.map(dot => {\n const coordX = (dot.offsetX * 100 - minX) * xCoef;\n const coordY = (dot.offsetY * 100 - minY) * yCoef;\n\n return (\n \n setHoveredDot(prev => ({\n ...prev,\n spinX: dot.offsetX * 100,\n spinY: dot.offsetY * -100,\n visible: true,\n coords: [coordX + startX, startY + 100 - coordY],\n pitchType: pitchTypes[dot.pitchType][0]\n }))\n }\n onPointerOut={() => setHoveredDot(prev => ({ ...prev, visible: false }))}\n />\n );\n })}\n {hoveredDot.visible && (\n \n \n \n {hoveredDot.pitchType}\n \n \n dx: {spinValueX}\n \n \n dy: {spinValueY}\n \n \n )}\n \n );\n};\n\nexport default Dots;\n","import { useLayoutEffect, useState } from 'react';\nimport { currentDotLine as lineClass } from '../PlaysSpin.module.scss';\n\nconst CurrentDotLines = ({ startX, startY, currentDot, minMaxValues }) => {\n const [currentDotRadius, setCurrentDotRadius] = useState(0);\n\n useLayoutEffect(() => {\n setCurrentDotRadius(0);\n\n setTimeout(() => {\n setCurrentDotRadius(1);\n }, 10);\n\n // eslint-disable-next-line\n }, [currentDot]);\n\n useLayoutEffect(() => {\n if (currentDotRadius === 0) return;\n\n currentDotRadius < 5 &&\n setTimeout(() => {\n setCurrentDotRadius(prev => (prev + 0.45 > 7.5 ? 7.5 : prev + 0.45));\n }, 10);\n\n // eslint-disable-next-line\n }, [currentDotRadius]);\n\n const maxX = Math.ceil(minMaxValues.maxX * 100);\n const minX = Math.floor(minMaxValues.minX * 100);\n const maxY = Math.ceil(minMaxValues.maxY * 100);\n const minY = Math.floor(minMaxValues.minY * 100);\n\n const xCoef = 100 / (maxX - minX);\n const yCoef = 100 / (maxY - minY);\n\n const coordX = (currentDot.offsetX * 100 - minX) * xCoef;\n const coordY = (currentDot.offsetY * 100 - minY) * yCoef;\n\n const isCurrentDot =\n currentDot.offsetX !== undefined &&\n coordX + 15 > startX &&\n coordY + 10 > startY &&\n coordX + startX < 115 &&\n coordY + startY < 110;\n\n const verticalLineY2Coord = Math.max((startY + 100) * (currentDotRadius / 5.05), startY + 100 - coordY);\n const horizontalLineX1Coord = Math.min(startX / (currentDotRadius / 5.05), coordX + startX);\n\n if (!isCurrentDot) return <>;\n\n return (\n <>\n {/* Axis lines projections */}\n {/* Vertical */}\n \n {/* Horizontal */}\n \n \n );\n};\n\nexport default CurrentDotLines;\n","import { getPitchColorByName } from 'utils';\nimport { useSelector } from 'react-redux';\nimport { useState, useEffect } from 'react';\nimport { currentDot as dotClass, currentDotWhite as whiteDotClass } from '../PlaysSpin.module.scss';\nimport classNames from 'classnames';\n\nconst CurrentDot = ({ startX, startY, currentDot, minMaxValues }) => {\n const [classToggled, setClassToggled] = useState(false);\n\n const { pitch_types: pitchTypes } = useSelector(state => state.game.preview);\n\n useEffect(() => {\n setClassToggled(true);\n\n setTimeout(() => {\n setClassToggled(false);\n }, 0);\n }, [currentDot]);\n\n const maxX = Math.ceil(minMaxValues.maxX * 100);\n const minX = Math.floor(minMaxValues.minX * 100);\n const maxY = Math.ceil(minMaxValues.maxY * 100);\n const minY = Math.floor(minMaxValues.minY * 100);\n\n const xCoef = 100 / (maxX - minX);\n const yCoef = 100 / (maxY - minY);\n\n const coordX = (currentDot.offsetX * 100 - minX) * xCoef;\n const coordY = (currentDot.offsetY * 100 - minY) * yCoef;\n\n const isCurrentDot =\n currentDot.offsetX !== undefined &&\n coordX + 15 > startX &&\n coordY + 10 > startY &&\n coordX + startX < 115 &&\n coordY + startY < 110;\n\n const whiteDotClasses = classNames({\n [whiteDotClass]: !classToggled\n });\n const dotClasses = classNames({\n [dotClass]: !classToggled\n });\n\n if (!isCurrentDot) return <>;\n\n return (\n <>\n {/* Dot */}\n \n \n \n );\n};\n\nexport default CurrentDot;\n","import React, { useState, useRef } from 'react';\nimport Lines from './Chart/Lines';\nimport LinesText from './Chart/LinesText';\nimport Dots from './Chart/Dots';\nimport CurrentDotLines from './Chart/CurrentDotLines';\nimport CurrentDot from './Chart/CurrentDot';\n\nconst GRAPH_START_X = 15;\nconst GRAPH_START_Y = 10;\n\nconst PlaysSpinChart = ({ chartData, currentDot }) => {\n const [graphRatio] = useState(1);\n\n const ref = useRef();\n\n // useLayoutEffect(() => {\n // //Calculating MAX absolute value\n // const maxValue = chartData.reduce(\n // (max, cur) => Math.max(Math.abs(cur.offsetX), Math.abs(cur.offsetY), max),\n // 0\n // );\n\n // const newGraphRatio = 100 / (maxValue * 100);\n\n // setGraphRatio(newGraphRatio - 0.3);\n // }, [chartData]);\n\n // useEffect(() => {\n // const wheelHandler = e => {\n // e = window.event || e;\n // var delta = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail));\n\n // const newGraphRatio = delta > 0 ? 0.1 : -0.1;\n // setGraphRatio(prev => {\n // if (newGraphRatio < 0 && prev < 0.2) return 0.1;\n // return prev + newGraphRatio;\n // });\n // };\n\n // const elem = ref.current;\n\n // if (elem.addEventListener) {\n // elem.addEventListener('mousewheel', wheelHandler, false);\n // elem.addEventListener('scroll', wheelHandler, false);\n // elem.addEventListener('DOMMouseScroll', wheelHandler, false);\n // } else {\n // elem.attachEvent('onmousewheel', wheelHandler);\n // }\n\n // return () => {\n // if (elem.removeEventListener) {\n // elem.removeEventListener('mousewheel', wheelHandler, false);\n // elem.removeEventListener('scroll', wheelHandler, false);\n // elem.removeEventListener('DOMMouseScroll', wheelHandler, false);\n // } else {\n // elem.detachEvent('onmousewheel', wheelHandler);\n // }\n // };\n // }, []);\n\n const minMaxValues = chartData.reduce((sum, cur) => {\n if (\n sum.maxX === undefined ||\n sum.minX === undefined ||\n sum.maxY === undefined ||\n sum.minY === undefined\n ) {\n sum.maxX = cur.offsetX;\n sum.minX = cur.offsetX;\n sum.maxY = cur.offsetY;\n sum.minY = cur.offsetY;\n\n return sum;\n }\n\n if (cur.offsetX < sum.minX) sum.minX = cur.offsetX;\n if (cur.offsetX > sum.maxX) sum.maxX = cur.offsetX;\n if (cur.offsetY < sum.minY) sum.minY = cur.offsetY;\n if (cur.offsetY > sum.maxY) sum.maxY = cur.offsetY;\n\n return sum;\n }, {});\n return (\n \n {/* Render horizontal and vertical grid lines */}\n \n\n {/* Lines text */}\n \n\n {/* Current dot lines */}\n \n\n {/* Dots */}\n \n\n {/* Render current dot */}\n \n \n );\n};\n\nexport default PlaysSpinChart;\n","import classNames from 'classnames';\nimport React, { useState, useLayoutEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './PlaysSpin.module.scss';\nimport PlaysSpinChart from './PlaysSpinChart';\n\nconst PlaysSpin = ({ pitch }) => {\n const [chartData, setChartData] = useState([]);\n const [currentDot, setCurrentDot] = useState({ type: null, offsetX: null, offsetY: null });\n\n const pitchState = useSelector(state => state.game.pitchState);\n const currentCard = useSelector(state => state.game.currentCard);\n const innings = useSelector(state => state.game.innings);\n const currentMoment = useSelector(state => state.game.currentMoment);\n\n useLayoutEffect(() => {\n if (Object.keys(currentCard).length === 0) {\n setChartData([]);\n return;\n }\n\n const testData = [];\n\n let currentDotParams = {\n type: pitch?.pitch_type,\n offsetX: pitch?.offset_x,\n offsetY: pitch?.offset_y\n };\n innings.forEach(inning => {\n inning['top/guests'].forEach(card =>\n card.moments\n .filter(moment => !moment.metering.pitch?.is_pick_off)\n .forEach(moment => {\n const pitchType = moment.metering.pitch?.pitch_type;\n\n if (\n moment.pitcher?.pitches_name === currentMoment?.pitcher?.pitches_name &&\n moment.metering.pitch\n ) {\n testData.push({\n pitchType,\n offsetX: moment.metering.pitch.offset_x,\n offsetY: moment.metering.pitch.offset_y,\n\t\t\t\t\t\t\t\tmomentId: moment.inner.id\n });\n }\n })\n );\n inning['bottom/owners']?.forEach(card =>\n card.moments\n .filter(moment => !moment.metering.pitch?.is_pick_off)\n .forEach(moment => {\n const pitchType = moment.metering.pitch?.pitch_type;\n\n if (\n moment.pitcher?.pitches_name === currentMoment?.pitcher?.pitches_name &&\n moment.metering.pitch\n ) {\n testData.push({\n pitchType,\n offsetX: moment.metering.pitch.offset_x,\n offsetY: moment.metering.pitch.offset_y,\n\t\t\t\t\t\t\t\tmomentId: moment.inner.id\n });\n }\n })\n );\n });\n\n setChartData(testData);\n setCurrentDot(currentDotParams);\n }, [currentCard, innings, currentMoment]);\n\n const wrapperClasses = classNames(cl.spin, {\n [cl.dnone]: pitchState !== 'SpeedSpinInfo'\n });\n return (\n
    \n \n
    \n );\n};\n\nexport default PlaysSpin;\n","import React from 'react';\n\nconst ListDot = ({ fill = '#1A4C96' }) => {\n return (\n \n \n \n );\n};\n\nexport default ListDot;\n","import React from 'react';\nimport ListDot from 'components/UI/icons/ListDot/ListDot';\nimport cl from './Legend.module.scss';\nimport { getChartColor, getPitchColorByName } from 'utils';\nimport usePitchTypes from 'hooks/usePitchTypes';\n\nconst LegendItem = ({ title, pitchTypes }) => (\n
  • \n \n {usePitchTypes(title)}\n
  • \n);\n\nexport default LegendItem;\n","import React from 'react';\nimport cl from './Legend.module.scss';\nimport LegendItem from './LegendItem';\nimport { useSelector } from 'react-redux';\n\nconst Legend = ({ legendData = [] }) => {\n const { pitch_types: pitchTypes } = useSelector(state => state.game.preview);\n\n return (\n
      \n {legendData.map((item, i) => (\n \n ))}\n
    \n );\n};\n\nexport default Legend;\n","import { useState, memo } from 'react';\nimport useSetMomentById from 'hooks/useSetMomentById';\nimport { getPitchColorByName, propsAreEqual } from 'utils';\nimport { dot as dotClass, plainText, showingGroup } from '../PlaysSpeed.module.scss';\n\nconst Dot = ({ dot, handleDotClick, pitchTypes, setHoveredDot }) => (\n \n setHoveredDot(prev => ({\n ...prev,\n speed: dot.speed,\n visible: true,\n coords: [dot.coords[0], dot.coords[1]],\n pitchType: pitchTypes[dot.type][0]\n }))\n }\n onPointerOut={() => setHoveredDot(prev => ({ ...prev, visible: false }))}\n />\n);\n\nconst Dots = ({ dotsCoords, pitchTypes }) => {\n const [hoveredDot, setHoveredDot] = useState({ visible: false, speed: 0, coords: [0, 0] });\n\n const setMomentById = useSetMomentById();\n\n const dotsArr = Object.entries(dotsCoords).reduce((sum, pair) => {\n pair[1].forEach(coords =>\n sum.push({ type: +pair[0], coords: [coords[0], coords[1]], momentId: coords[2], speed: coords[3] })\n );\n return sum;\n }, []);\n\n const handleDotClick = id => () => setMomentById(id);\n\n const speedValue = +(hoveredDot.speed * 10).toFixed(0) / 10;\n\n const hoveredDotXCoord = hoveredDot.coords[0] <= 390 ? hoveredDot.coords[0] : hoveredDot.coords[0] - 65;\n const hoveredDotYCoord = hoveredDot.coords[1] > 40 ? hoveredDot.coords[1] : hoveredDot.coords[1] + 75;\n return (\n <>\n {dotsArr.map(dot => {\n return (\n \n );\n })}\n {hoveredDot.visible && (\n \n \n \n {hoveredDot.pitchType}\n \n \n {speedValue} mph\n \n \n )}\n \n );\n};\n\nexport default memo(Dots, propsAreEqual);\n","import { useState, useEffect } from 'react';\nimport { getPitchColorByName } from 'utils';\nimport usePitchTypes from 'hooks/usePitchTypes';\nimport cl from '../PlaysSpeed.module.scss';\nimport classNames from 'classnames';\n\nconst CurrentDot = ({ currentDot, coords, pitchTypes }) => {\n const [classToggled, setClassToggled] = useState(false);\n\n useEffect(() => {\n setClassToggled(true);\n\n setTimeout(() => {\n setClassToggled(false);\n }, 0);\n }, [currentDot]);\n\n const LINE_DOWN_WIDTH = 1;\n const LINE_DOWN_COLOR = '#ACACAC';\n\n const { minXCoord, maxYCoord, xInterval, minYAxisValue, yValuePerHeight } = coords;\n\n const tempDotTextCoord = minXCoord + xInterval * currentDot.index - 14;\n const curDotTextCoord = tempDotTextCoord < 90 ? 90 : tempDotTextCoord > 357 ? 357 : tempDotTextCoord;\n const curDotText = usePitchTypes(currentDot.type);\n\n const whiteDotClasses = classNames({\n [cl.currentDotWhite]: !classToggled\n });\n const dotClasses = classNames({\n [cl.currentDot]: !classToggled\n });\n return (\n <>\n {/* Current dot line */}\n \n\n {/* Current dot */}\n <>\n \n \n \n\n {/* Current dot text */}\n <>\n \n {curDotText}\n \n \n {currentDot.speed.toFixed(1)} mph\n \n \n \n );\n};\n\nexport default CurrentDot;\n","import { plainText } from '../PlaysSpeed.module.scss';\n\nconst Lines = ({ coords }) => {\n const { maxYAxisValue, minYAxisValue, maxYCoord, minYCoord } = coords;\n\n const averageValue = (maxYAxisValue - minYAxisValue) / 3;\n const yAxisValues = [\n maxYAxisValue,\n maxYAxisValue - averageValue,\n minYAxisValue + averageValue,\n minYAxisValue\n ];\n\n const lineBtwAvg = (maxYCoord - minYCoord) / 3;\n return (\n <>\n {/* Horizontal lines text */}\n {[1, 1, 1, 1].map((_, i) => (\n \n {yAxisValues[i]}\n \n ))}\n\n {/* Horizontal lines */}\n {[1, 1, 1, 1].map((_, i) => (\n \n ))}\n \n );\n};\n\nexport default Lines;\n","import React from 'react';\nimport cl from './PlaysSpeed.module.scss';\nimport { useSelector } from 'react-redux';\nimport Dots from './Chart/Dots';\nimport CurrentDot from './Chart/CurrentDot';\nimport Lines from './Chart/Lines';\n\nconst PlaysSpeedChart = ({ chartData, currentDot = {} }) => {\n const { pitch_types: pitchTypes } = useSelector(state => state.game.preview);\n\n function getMaxMinYAxisValue(max, min) {\n max = Math.ceil(max);\n min = Math.floor(min);\n\n if ((max - min) % 3) {\n const average = (3 - ((max - min) % 3)) / 2;\n max += Math.ceil(average);\n min -= Math.floor(average);\n }\n return [max, min];\n }\n\n const chartValuesArr = chartData.reduce((sum, pair) => {\n sum.push(pair[1]);\n return sum;\n }, []);\n\n let maxYValue = Math.max(...chartValuesArr) + -2;\n let minYValue = Math.min(...chartValuesArr) - -2;\n\n const [maxYAxisValue, minYAxisValue] = getMaxMinYAxisValue(maxYValue, minYValue);\n\n const minYCoord = 36;\n const maxYCoord = 115;\n const minXCoord = 50;\n const maxXCoord = 420;\n\n const innerHeight = maxYCoord - minYCoord;\n const innerWidth = maxXCoord - minXCoord;\n\n const yValuePerHeight = (maxYAxisValue - minYAxisValue) / innerHeight;\n\n const xInterval = chartValuesArr.length > 1 ? innerWidth / (chartValuesArr.length - 1) : 0;\n\n let dotsCoords;\n\n if (chartValuesArr.length > 1) {\n dotsCoords = chartData.reduce((sum, pair, index) => {\n const newValue = [\n minXCoord + xInterval * index,\n maxYCoord - (pair[1] - minYAxisValue) / yValuePerHeight,\n pair[2],\n pair[1]\n ];\n\n sum[pair[0]] = !sum[pair[0]] ? [newValue] : [...sum[pair[0]], newValue];\n return sum;\n }, {});\n }\n\n const isDots = chartValuesArr.length > 1;\n const isCurrentDot = currentDot.index !== undefined;\n return (\n \n {/* Horizontal and vertical lines */}\n \n\n {/* Dots */}\n {isDots && }\n\n {/* Current dot */}\n {isCurrentDot && (\n \n )}\n \n );\n};\n\nexport default PlaysSpeedChart;\n","import classNames from 'classnames';\n// import Arrow from 'components/UI/buttons/Arrow/Arrow';\nimport React, { useState, useLayoutEffect, useRef } from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\n// import { setPitchState } from 'redux/gameReducer';\nimport Legend from './Legend/Legend';\nimport cl from './PlaysSpeed.module.scss';\nimport PlaysSpeedChart from './PlaysSpeedChart';\n\nconst PlaysSpeed = ({ currentMoment }) => {\n const [chartData, setChartData] = useState([]);\n const [currentDot, setCurrentDot] = useState({ type: null, speed: null });\n const ref = useRef(null);\n const currentCard = useSelector(state => state.game.currentCard, shallowEqual);\n const innings = useSelector(state => state.game.innings, shallowEqual);\n const pitchState = useSelector(state => state.game.pitchState);\n // const dispatch = useDispatch();\n\n useLayoutEffect(() => {\n if (Object.keys(currentCard).length === 0) {\n // if (Object.keys(currentCard).length === 0 || !currentCard.moments[0]?.metering?.pitch?.start_speed) {\n setChartData([]);\n return;\n }\n\n const testData = [];\n\n let currentDotParams = {};\n\n innings.forEach(inning => {\n inning['top/guests'].forEach(card =>\n card.moments\n .filter(moment => !moment.metering.pitch?.is_pick_off)\n .forEach(moment => {\n const pitchType = moment.metering.pitch?.pitch_type;\n if (\n moment.inner.id === currentMoment?.inner?.id &&\n moment.pitcher?.pitches_name === currentMoment?.pitcher?.pitches_name &&\n moment.metering.pitch\n ) {\n currentDotParams.type = pitchType;\n currentDotParams.speed = moment.metering.pitch.start_speed;\n currentDotParams.index = testData.length;\n }\n if (\n moment.pitcher?.pitches_name === currentMoment?.pitcher?.pitches_name &&\n moment.metering.pitch\n ) {\n testData.push([pitchType, moment.metering.pitch.start_speed, moment.inner.id]);\n }\n })\n );\n inning['bottom/owners']?.forEach(card =>\n card.moments\n .filter(moment => !moment.metering.pitch?.is_pick_off)\n .forEach(moment => {\n const pitchType = moment.metering.pitch?.pitch_type;\n if (\n moment.inner.id === currentMoment?.inner?.id &&\n moment.pitcher?.pitches_name === currentMoment?.pitcher?.pitches_name &&\n moment.metering.pitch\n ) {\n currentDotParams.type = pitchType;\n currentDotParams.speed = moment.metering.pitch.start_speed;\n currentDotParams.index = testData.length;\n }\n if (\n moment.pitcher?.pitches_name === currentMoment?.pitcher?.pitches_name &&\n moment.metering.pitch\n ) {\n testData.push([pitchType, moment.metering.pitch.start_speed, moment.inner.id]);\n }\n })\n );\n });\n\n setChartData(testData);\n setCurrentDot(currentDotParams);\n }, [currentCard, innings, currentMoment]);\n\n const wrapperClasses = classNames(cl.speed, {\n [cl.dnone]: pitchState !== 'SpeedSpinInfo'\n });\n\n // Pitch types array for Legend comp\n const pitchTypesSet = new Set();\n chartData.forEach(pair => pitchTypesSet.add(pair[0]));\n const pitchTypesArr = Array.from(pitchTypesSet).sort((a, b) => (a > b ? 1 : -1));\n\n return (\n
    \n {Object.keys(chartData).length !== 0 && (\n <>\n

    Release speed

    \n \n \n \n )}\n
    \n );\n};\n\nexport default PlaysSpeed;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './PitchValues.module.scss';\nimport classNames from 'classnames';\n\nconst PitchValues = () => {\n const currentMoment = useSelector(s => s.game.currentMoment);\n const pitchState = useSelector(s => s.game.pitchState);\n\n const {\n offset_x,\n offset_y,\n rotation,\n start_speed: initSpeed,\n end_speed: plateSpeed,\n release_height: releaseHeight,\n release_side: releaseSide\n } = currentMoment?.metering?.pitch || {};\n\n const releaseValue = initSpeed?.toFixed(1) ?? '';\n const platePointValue = plateSpeed?.toFixed(1) ?? '';\n\n const trueSpinValue = rotation ? rotation.toFixed(2) + ' rpm' : ' ';\n const verticalBreakValue = offset_y ? (offset_y * -100).toFixed(2) + ' cm' : ' ';\n const horizontalBreakValue = offset_x ? (offset_x * 100).toFixed(2) + ' cm' : ' ';\n\n const releaseHeightValue = releaseHeight?.toFixed(1) ?? '';\n const releaseSideValue = releaseSide?.toFixed(1) ?? '';\n\n const wrapperClasses = classNames(cl.pitchValues, {\n [cl.dnone]: pitchState !== 'SpeedSpinInfo'\n });\n return (\n
    \n
    \n

    Release speed /

    \n

    Plate point speed

    \n

    {releaseValue} mph /

    \n

    {platePointValue} mph

    \n
    \n\n
    \n
    \n

    True spin

    \n

    {trueSpinValue}

    \n
    \n
    \n

    Vertical break

    \n

    {verticalBreakValue}

    \n
    \n
    \n

    Horizontal break

    \n

    {horizontalBreakValue}

    \n
    \n
    \n\n
    \n

    Release height

    \n

    {releaseHeightValue} m

    \n

    Release side

    \n

    {releaseSideValue} m

    \n
    \n
    \n );\n};\n\nexport default PitchValues;\n","import React, { useRef, useEffect } from 'react';\nimport cl from './PitchVideo.module.scss';\nimport classNames from 'classnames';\nimport YouTube from 'react-youtube';\nimport { useDispatch, useSelector } from 'react-redux';\nimport NoVideoScreen from 'components/Game/Video/NoVideoScreen';\nimport VideoControls from 'components/Game/VideoControls/VideoControls';\n\nconst POS_OPTIONS = {\n 'top-left': { x: -0.34, y: -0.22, delta: 0.14 },\n // 'top-left': { x: -0.34, y: -0.2, delta: 0.14 },\n 'top-right': { x: -0.505, y: -0.225, delta: 0.14 },\n // 'top-right': { x: -0.505, y: -0.205, delta: 0.14 },\n bottom: { x: -0.27, y: -0.14, delta: 0.42 }\n // bottom: { x: -0.27, y: -0.07, delta: 0.42 }\n};\n\nconst PitchVideo = ({ videoId, position, handleOnReady, stateChangeHandler, setPlayPause = null }) => {\n // const [currentTime, setCurrentTime] = useState(0);\n\n // eslint-disable-next-line\n const fullWidth = useSelector(state => state.shared.mobileWidth);\n const currentMoment = useSelector(state => state.game.currentMoment);\n const pitchState = useSelector(state => state.game.pitchState);\n\n const videoWrapperRef = useRef(null);\n const timerRef = useRef();\n const controlsWrapperRef = useRef();\n const currentTimeInterval = useRef();\n\n useEffect(\n () => () => {\n clearTimeout(timerRef.current);\n clearInterval(currentTimeInterval.current);\n },\n []\n );\n\n const videoClasses = classNames(cl.video, {\n [cl.topLeftVideo]: position === 'top-left',\n [cl.topRightVideo]: position === 'top-right',\n [cl.bottomVideo]: position === 'bottom',\n [cl.dnone]: pitchState !== 'Videos'\n });\n\n const xCoef =\n (videoWrapperRef?.current?.clientWidth ?? 0) / ((1920 / 100) * (POS_OPTIONS[position].delta * 100));\n\n const onReady = e => {\n handleOnReady(position, e.target);\n };\n\n const onStateChange = e => {\n stateChangeHandler(position, e.target, e.data);\n };\n\n function handleMouseMove() {\n if (!currentMoment.video || position !== 'bottom') return;\n\n clearTimeout(timerRef.current);\n\n controlsWrapperRef.current.lastChild.style.opacity = 1;\n controlsWrapperRef.current.lastChild.style.visibility = 'visible';\n\n timerRef.current = setTimeout(() => {\n if (!controlsWrapperRef.current) return;\n controlsWrapperRef.current.lastChild.style.opacity = 0;\n timerRef.current = setTimeout(() => {\n controlsWrapperRef.current.lastChild.style.visibility = 'hidden';\n }, 300);\n }, 500);\n }\n\n const isVideoControls = currentMoment.video && position === 'bottom';\n const isInvisWrapper = position !== 'bottom';\n return (\n \n \n \n \n {isVideoControls && (\n \n )}\n {/* \n {currentQuality}\n */}\n {/* \n {currentTime}\n */}\n {isInvisWrapper &&
    }\n {!currentMoment.video && }\n \n );\n // return video-1;\n};\n\nexport default PitchVideo;\n","import React, { useRef, useEffect } from 'react';\nimport getYouTubeID from 'get-youtube-id';\nimport PitchVideo from './PitchVideo';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport {\n setCurrentCard,\n setCurrentMoment,\n setSeekValue,\n setVideoCurrentTime,\n setVideoState\n} from 'redux/gameReducer';\n\nconst PitchVideos = () => {\n const { camera_info: cameraInfo } = useSelector(state => state.game.preview);\n\n const videoState = useSelector(s => s.game.videoState);\n const preferredVideoState = useSelector(s => s.game.preferredVideoState);\n const videoCurrentTime = useSelector(s => s.game.videoCurrentTime);\n const currentMoment = useSelector(s => s.game.currentMoment, shallowEqual);\n const currentCard = useSelector(s => s.game.currentCard, shallowEqual);\n const sliderCoords = useSelector(s => s.game.timelineSliderCoords);\n const videoLengthMode = useSelector(s => s.game.videoLengthMode);\n const filteredCards = useSelector(s => s.game.filteredCards, shallowEqual);\n const isLastMomentMode = useSelector(s => s.game.isLastMomentMode);\n const playbackMode = useSelector(s => s.game.playbackMode);\n const seekValue = useSelector(s => s.game.seekValue);\n const videoPlaybackRate = useSelector(s => s.game.videoPlaybackRate);\n const preview = useSelector(s => s.game.preview);\n\n const dispatch = useDispatch();\n\n const video1Ref = useRef(null);\n const video2Ref = useRef(null);\n const video3Ref = useRef(null);\n\n const timeIntervalRef = useRef(null);\n const intervalRef = useRef(null);\n const modeRef = useRef('play');\n const endRef = useRef(null);\n const nextMomentTimeoutRef = useRef();\n const playTimeoutRef = useRef();\n const alreadySeekingRef = useRef(false);\n const videoHandlingTimeoutRef = useRef();\n\n // New synchronization method\n const allTimesIntervalRef = useRef();\n const syncTimeoutRef = useRef(false);\n\n const videoLengthPrefix = videoLengthMode.toLowerCase().replace(' ', '_');\n\n const SECONDS_SRC = currentMoment.video\n ? {\n pitch: {\n timeStart:\n currentMoment.metering?.pitch?.time_start_pitch_window ||\n currentMoment.video[`${videoLengthPrefix}_seconds_from`],\n timeEnd:\n currentMoment.metering?.pitch?.time_end_pitch_window ||\n currentMoment.video[`${videoLengthPrefix}_seconds_to`]\n }\n }\n : {};\n\n const VIDEO_REFS = {\n 'top-left': video1Ref,\n 'top-right': video2Ref,\n bottom: video3Ref\n };\n\n useEffect(() => {\n clearInterval(allTimesIntervalRef.current);\n\n if (preferredVideoState === 2) {\n clearTimeout(playTimeoutRef.current);\n syncTimeoutRef.current = false;\n alreadySeekingRef.current = false;\n }\n\n allTimesIntervalRef.current = setInterval(() => {\n const video1Time = video1Ref.current?.getCurrentTime();\n const video2Time = video2Ref.current?.getCurrentTime();\n const video3Time = video3Ref.current?.getCurrentTime();\n\n if (!video1Time || !video2Time || !video3Time) return;\n\n const delta1 = 0;\n const delta2 = Math.abs(video1Time - video2Time);\n const delta3 = Math.abs(video1Time - video3Time);\n\n const deltaArr = [delta1, delta2, delta3];\n\n const deltaCap = 0.08;\n const deltaCaps = [getCamDelta(1), getCamDelta(2), getCamDelta(3)];\n const isBigDelta = deltaArr.some(\n (delta, i) =>\n delta > Math.abs(deltaCaps[0] - deltaCaps[i]) + deltaCap ||\n delta < Math.abs(deltaCaps[0] - deltaCaps[i]) - deltaCap\n );\n\n if (isBigDelta && !alreadySeekingRef.current) {\n video1Ref.current.pauseVideo();\n video2Ref.current?.pauseVideo();\n video3Ref.current?.pauseVideo();\n\n (delta2 > Math.abs(deltaCaps[0] - deltaCaps[1]) + deltaCap ||\n delta2 < Math.abs(deltaCaps[0] - deltaCaps[1]) - deltaCap) &&\n video2Ref.current?.seekTo(video1Time + (deltaCaps[0] - deltaCaps[1]), true);\n (delta3 > Math.abs(deltaCaps[0] - deltaCaps[2]) + deltaCap ||\n delta3 < Math.abs(deltaCaps[0] - deltaCaps[2]) - deltaCap) &&\n video3Ref.current?.seekTo(video1Time + (deltaCaps[0] - deltaCaps[2]), true);\n\n // alreadySeekingRef.current = true\n }\n\n\n\n const isAllReady = Object.entries(VIDEO_REFS).every((entry, i) => {\n const entryState = entry[1].current?.getPlayerState();\n console.log('index', i, 'state', entryState);\n return entryState === -1 || entryState === 2;\n });\n\n const isTwoReadyOneBuffer = Object.values(VIDEO_REFS).reduce((sum, cur, i) => {\n const valueState = cur.current?.getPlayerState();\n\n\t\t\t\tsum[valueState]++\n\n\t\t\t\treturn sum\n\t\t\t}, {\n '-1': 0,\n 0: 0,\n 1: 0,\n 2: 0,\n 3: 0,\n 4: 0,\n 5: 0\n });\n\n if ((isAllReady || (isTwoReadyOneBuffer[2] === 2 && isTwoReadyOneBuffer[3] === 1)) && !isBigDelta && preferredVideoState === 1 && !syncTimeoutRef.current) {\n syncTimeoutRef.current = true;\n\n video1Ref.current.playVideo();\n video2Ref.current?.playVideo();\n video3Ref.current?.playVideo();\n\n syncTimeoutRef.current = false;\n alreadySeekingRef.current = false;\n }\n }, 90);\n\n return () => {\n clearInterval(allTimesIntervalRef.current);\n clearTimeout(playTimeoutRef.current);\n };\n }, [preferredVideoState]);\n\n useEffect(() => {\n const isAllReady = !Object.values(VIDEO_REFS).some(value => value.current === null);\n\n if (!isAllReady) return;\n\n clearTimeout(videoHandlingTimeoutRef.current);\n clearInterval(intervalRef.current);\n\n const isForcePlay = preferredVideoState === 1;\n\n video1Ref.current?.pauseVideo();\n video2Ref.current?.pauseVideo();\n video3Ref.current?.pauseVideo();\n\n const { video } = currentMoment;\n\n if (video) {\n const secondsTotal = SECONDS_SRC.pitch.timeEnd - SECONDS_SRC.pitch.timeStart;\n\n const secondsFromRated =\n SECONDS_SRC.pitch.timeStart +\n (secondsTotal / 100) * (sliderCoords.changedCoord !== 'x2' ? sliderCoords.x1 : sliderCoords.x2);\n\n Object.values(VIDEO_REFS).forEach((value, i) =>\n value.current?.seekTo(secondsFromRated - getCamDelta(i + 1), true)\n );\n }\n\n videoHandlingTimeoutRef.current = setTimeout(\n () => {\n videoHandling(false, isForcePlay);\n },\n videoLengthMode === 'Super Short' ? 1500 : 30\n );\n\n // eslint-disable-next-line\n }, [currentMoment, sliderCoords]);\n\n useEffect(() => {\n const isAllReady = !Object.values(VIDEO_REFS).some(value => value.current === null);\n\n if (!isAllReady) return;\n\n playbackMode === 'play' && clearTimeout(nextMomentTimeoutRef.current);\n\n videoHandling(false);\n // eslint-disable-next-line\n }, [isLastMomentMode]);\n\n useEffect(() => {\n (currentMoment.manualClick || currentCard.manualClick) && clearTimeout(nextMomentTimeoutRef.current);\n }, [currentMoment, currentCard]);\n\n useEffect(() => {\n modeRef.current = playbackMode;\n\n if (currentMoment.video) return;\n\n if (playbackMode === 'pause') {\n clearTimeout(nextMomentTimeoutRef.current);\n return;\n }\n\n playbackMode === 'play' && toNextMomentOrCard();\n // eslint-disable-next-line\n }, [playbackMode]);\n\n useEffect(() => {\n if (seekValue === null) return;\n\n seekVideos(seekValue);\n dispatch(setSeekValue(null));\n // eslint-disable-next-line\n }, [seekValue]);\n\n useEffect(() => {\n const isAllReady = !Object.values(VIDEO_REFS).some(value => value.current === null);\n if (!isAllReady) return;\n\n rateChangeHandler(videoPlaybackRate);\n // eslint-disable-next-line\n }, [videoPlaybackRate]);\n\n useEffect(() => {\n clearInterval(timeIntervalRef.current);\n\n const camDelta1 = getCamDelta(1);\n\n timeIntervalRef.current = setInterval(\n () => {\n const time = VIDEO_REFS['top-left'].current?.getCurrentTime();\n time && dispatch(setVideoCurrentTime(time + camDelta1));\n },\n videoState === 1 ? 15 : 200\n );\n\n return () => {\n clearInterval(timeIntervalRef.current);\n };\n // eslint-disable-next-line\n }, [currentMoment, videoState]);\n\n const { left_main_link: topLeftLink, right_main_link: topRightLink, pitch_link: bottomLink } = cameraInfo;\n\n function getCamDelta(videoNumber) {\n const titles = {\n 1: 'left_main_time',\n 2: 'right_main_time',\n 3: 'pitch_time'\n };\n\n return cameraInfo[titles[videoNumber]];\n }\n\n const videoId1 = getYouTubeID(topLeftLink) || 'WCjLd7QAJq8';\n const videoId2 = getYouTubeID(topRightLink) || null;\n const videoId3 = getYouTubeID(bottomLink) || null;\n\n function toNextMomentOrCard() {\n const momentIndex = currentCard.moments.findIndex(moment => moment.inner.id === currentMoment.inner?.id);\n\n if (momentIndex < currentCard.moments.length - 1) {\n const nextMoment = currentCard.moments[momentIndex + 1];\n\n dispatch(setCurrentMoment(nextMoment));\n\n if (!nextMoment.video || nextMoment?.inner?.id >= preview.camera_info.broadcast_link_add_moment_from)\n return;\n\n const { video: nextVideo } = nextMoment;\n const videoLengthPrefix = videoLengthMode.toLowerCase().replace(' ', '_');\n\n const getSliderCoords = video => {\n return {\n x1: 0,\n x2: 0\n // x1: videoLengthMode === 'Super Short' ? startSecondsPercent : 0,\n // x2: videoLengthMode === 'Super Short' ? endSecondsPercent : 0\n };\n };\n //\n\n const NEXT_SECONDS_SRC = {\n pitch: {\n timeStart:\n nextMoment.metering?.pitch?.time_start_pitch_window ||\n nextMoment.video[`${videoLengthPrefix}_seconds_from`],\n timeEnd:\n nextMoment.metering?.pitch?.time_end_pitch_window ||\n nextMoment.video[`${videoLengthPrefix}_seconds_to`]\n }\n };\n\n const secondsTotal = NEXT_SECONDS_SRC.pitch.timeEnd - NEXT_SECONDS_SRC.pitch.timeStart;\n\n const secondsFromRated =\n NEXT_SECONDS_SRC.pitch.timeStart + (secondsTotal / 100) * getSliderCoords(nextVideo).x1;\n\n Object.values(VIDEO_REFS).forEach((value, i) =>\n value.current.seekTo(secondsFromRated - getCamDelta(i + 1), true)\n );\n\n const secondsToRated =\n NEXT_SECONDS_SRC.pitch.timeStart + (secondsTotal / 100) * getSliderCoords(nextVideo).x2;\n\n endRef.current = secondsToRated;\n } else {\n let cardIndex = filteredCards.findIndex(\n card => card.moments[0].inner.id === currentCard.moments[0].inner.id\n );\n\n cardIndex++;\n\n if (cardIndex < filteredCards.length) {\n console.log(isLastMomentMode);\n dispatch(\n setCurrentCard({\n ...filteredCards[cardIndex],\n toFirstMoment: !isLastMomentMode,\n manualClick: false\n })\n );\n\n return;\n }\n }\n }\n\n const videoHandling = (doSeek = true, isForcePlay = true, seekToCurrentTime = false) => {\n clearInterval(intervalRef.current);\n\n if (\n !currentMoment.video ||\n (preview.camera_info.broadcast_link_add_moment_from &&\n currentMoment?.inner?.id >= preview.camera_info.broadcast_link_add_moment_from)\n ) {\n Object.values(VIDEO_REFS).forEach(value => value.current?.pauseVideo());\n if (modeRef.current !== 'pause') {\n nextMomentTimeoutRef.current = setTimeout(toNextMomentOrCard, 3000);\n }\n return;\n }\n\n if (currentCard.moments.length === 0 || !currentCard.moments[0].video) {\n Object.values(VIDEO_REFS).forEach(value => value.current.pauseVideo());\n\n return;\n }\n\n const { video } = currentMoment;\n\n const secondsTotal = SECONDS_SRC.pitch.timeEnd - SECONDS_SRC.pitch.timeStart;\n const secondsFromRated = SECONDS_SRC.pitch.timeStart + (secondsTotal / 100) * sliderCoords.x1;\n\n const seekToTime = seekToCurrentTime ? videoCurrentTime : secondsFromRated;\n\n doSeek &&\n Object.values(VIDEO_REFS).forEach((value, i) =>\n value.current?.seekTo(seekToTime - getCamDelta(i + 1), true)\n );\n\n isForcePlay &&\n Object.values(VIDEO_REFS).forEach(value => {\n value.current?.playVideo();\n });\n\n const secondsToRated = SECONDS_SRC.pitch.timeStart + (secondsTotal / 100) * sliderCoords.x2;\n\n endRef.current = secondsToRated;\n\n const camDelta1 = getCamDelta(1);\n\n intervalRef.current = setInterval(() => {\n if (Object.values(VIDEO_REFS).some(value => !value.current)) return;\n\n const currentTime = VIDEO_REFS['top-left'].current.getCurrentTime() + camDelta1;\n\n if (currentTime >= endRef.current) {\n if (modeRef.current === 'pause') {\n videoHandling(true, isForcePlay);\n return;\n }\n\n //To next moment or card\n toNextMomentOrCard();\n }\n }, 50);\n };\n\n function rateChangeHandler(e) {\n const value = typeof e === 'number' ? e : e.data;\n\n VIDEO_REFS['top-left'].current?.setPlaybackRate(value);\n VIDEO_REFS['top-right'].current?.setPlaybackRate(value);\n VIDEO_REFS['bottom'].current?.setPlaybackRate(value);\n }\n\n const seekVideos = sec => {\n Object.values(VIDEO_REFS).forEach((value, i) => {\n value.current.seekTo(sec - getCamDelta(i + 1), true);\n });\n };\n\n function setPlayPause(state) {\n if (state === 'play') {\n video1Ref.current?.playVideo();\n video2Ref.current?.playVideo();\n video3Ref.current?.playVideo();\n\n return;\n }\n\n video1Ref.current?.pauseVideo();\n video2Ref.current?.pauseVideo();\n video3Ref.current?.pauseVideo();\n }\n\n //Handle on funcs\n const handleOnReady = (position, target) => {\n VIDEO_REFS[position].current = target;\n\n const isForcePlay = preferredVideoState === 1;\n\n const timeStartPitch = currentMoment?.metering?.pitch?.time_start_pitch_window;\n const timeEndPitch = currentMoment?.metering?.pitch?.time_end_pitch_window;\n const seekToCurrentTime =\n videoCurrentTime > 0 && videoCurrentTime > timeStartPitch && videoCurrentTime < timeEndPitch;\n\n videoHandling(true, isForcePlay, seekToCurrentTime);\n\n target.setPlaybackRate(videoPlaybackRate);\n };\n\n const stateChangeHandler = (position, target, stateValue) => {\n position === 'top-left' && dispatch(setVideoState(stateValue));\n\n stateValue === 1 && preferredVideoState === 2 && target.pauseVideo();\n };\n\n return (\n <>\n \n \n \n \n );\n};\n\nexport default PitchVideos;\n","import NoVideoScreen from 'components/Game/Video/NoVideoScreen';\nimport cl from './PitchVideo.module.scss';\nimport { useEffect, useRef } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { setCurrentCard, setCurrentMoment } from 'redux/gameReducer';\n\nconst BroadcastPitchVideos = () => {\n const currentMoment = useSelector(s => s.game.currentMoment, shallowEqual);\n const currentCard = useSelector(s => s.game.currentCard, shallowEqual);\n const preferredVideoState = useSelector(s => s.game.preferredVideoState);\n const videoLengthMode = useSelector(s => s.game.videoLengthMode);\n const preview = useSelector(s => s.game.preview);\n const filteredCards = useSelector(s => s.game.filteredCards, shallowEqual);\n const isLastMomentMode = useSelector(s => s.game.isLastMomentMode);\n const playbackMode = useSelector(s => s.game.playbackMode);\n const isBroadcast = useSelector(s => s.game.isBroadcast);\n\n const dispatch = useDispatch();\n\n const nextMomentTimeoutRef = useRef();\n const intervalRef = useRef(null);\n const videoHandlingTimeoutRef = useRef();\n const modeRef = useRef('play');\n\n useEffect(\n () => () => {\n clearTimeout(nextMomentTimeoutRef.current);\n clearTimeout(videoHandlingTimeoutRef.current);\n clearInterval(intervalRef.current);\n },\n []\n );\n\n useEffect(() => {\n clearTimeout(videoHandlingTimeoutRef.current);\n clearInterval(intervalRef.current);\n\n const isForcePlay = preferredVideoState === 1;\n\n videoHandlingTimeoutRef.current = setTimeout(\n () => {\n videoHandling(false, isForcePlay);\n },\n videoLengthMode === 'Super Short' ? 1500 : 30\n );\n }, [currentMoment]);\n\n useEffect(() => {\n (currentMoment.manualClick || currentCard.manualClick) && clearTimeout(nextMomentTimeoutRef.current);\n }, [currentMoment, currentCard]);\n\n useEffect(() => {\n modeRef.current = playbackMode;\n\n if (playbackMode === 'pause') {\n clearTimeout(nextMomentTimeoutRef.current);\n return;\n }\n\n playbackMode === 'play' && toNextMomentOrCard();\n // eslint-disable-next-line\n }, [playbackMode]);\n\n function toNextMomentOrCard() {\n const momentIndex = currentCard.moments.findIndex(moment => moment.inner.id === currentMoment.inner?.id);\n\n if (momentIndex < currentCard.moments.length - 1) {\n const nextMoment = currentCard.moments[momentIndex + 1];\n\n dispatch(setCurrentMoment(nextMoment));\n\n if (!nextMoment.video || nextMoment?.inner?.id >= preview.camera_info.broadcast_link_add_moment_from)\n return;\n } else {\n let cardIndex = filteredCards.findIndex(\n card => card.moments[0].inner.id === currentCard.moments[0].inner.id\n );\n\n cardIndex++;\n\n if (cardIndex < filteredCards.length) {\n dispatch(\n setCurrentCard({\n ...filteredCards[cardIndex],\n toFirstMoment: !isLastMomentMode,\n manualClick: false\n })\n );\n\n return;\n }\n }\n }\n\n const videoHandling = (doSeek = true, isForcePlay = true, seekToCurrentTime = false) => {\n clearInterval(intervalRef.current);\n\n if (\n !currentMoment.video ||\n currentMoment?.inner?.id >= preview.camera_info.broadcast_link_add_moment_from ||\n isBroadcast\n ) {\n if (modeRef.current !== 'pause') {\n nextMomentTimeoutRef.current = setTimeout(toNextMomentOrCard, 3000);\n }\n return;\n }\n\n if (currentCard.moments.length === 0 || !currentCard.moments[0].video) {\n return;\n }\n };\n\n return (\n <>\n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n );\n};\n\nexport default BroadcastPitchVideos;\n","import React from 'react';\nimport PlaysField from '../PlaysField/PlaysField';\nimport PlaysSpin from '../PlaysSpin/PlaysSpin';\nimport PlaysSpeed from '../PlaysSpeed/PlaysSpeed';\nimport { useSelector } from 'react-redux';\nimport PitchValues from './PitchValues/PitchValues';\nimport PitchVideos from './PitchVideo/PitchVideos';\nimport BroadcastPitchVideos from './PitchVideo/BroadcastPitchVideos';\n\nconst PlaysPitch = () => {\n const currentMoment = useSelector(state => state.game.currentMoment);\n const isBroadcast = useSelector(state => state.game.isBroadcast);\n const preview = useSelector(state => state.game.preview);\n\n const isInterruptedMoment =\n !isBroadcast &&\n !!preview.camera_info.broadcast_link_add_moment_from &&\n currentMoment?.inner?.id >= preview.camera_info.broadcast_link_add_moment_from;\n return (\n <>\n \n \n \n {!isBroadcast && !isInterruptedMoment && }\n {(isBroadcast || isInterruptedMoment) && }\n \n \n );\n};\n\nexport default PlaysPitch;\n","export default __webpack_public_path__ + \"static/media/blue_ball_curve.28c615a0.jpg\";","import classNames from 'classnames';\nimport Arrow from 'components/UI/buttons/Arrow/Arrow';\nimport { memo, Suspense, useMemo, useState, useRef, useEffect, useLayoutEffect, lazy } from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport cl from './PlaysRunning.module.scss';\nimport { Canvas, extend, useFrame } from '@react-three/fiber';\nimport { CatmullRomCurve3, FrontSide, RectAreaLight, TextureLoader, Vector3 } from 'three';\nimport { OrbitControls } from '@react-three/drei';\nimport FieldBg from 'images/field_right.jpg';\nimport ArrowDown from 'components/UI/icons/ArrowDown';\nimport ComfortaaFont from 'fonts/Comfortaa_Regular.json';\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry';\nimport { FontLoader } from 'three/examples/jsm/loaders/FontLoader';\nimport { getFieldColor } from 'utils';\nimport CurveTexture from 'images/blue_ball_curve.jpg';\n\nextend({ TextGeometry });\n\nconst Model = lazy(() => import('models/Stadium'));\n\n// const BallPaths = ({ field }) => {\n// const ballPaths = field.reduce((sum, { data_2d: data2d }) => {\n// let ballPath = '';\n// ballPath += `M${data2d[0][0]} ${data2d[0][1]}`;\n// data2d.slice(1).forEach(coord => (ballPath += `L${coord[0]} ${coord[1]}`));\n// sum.push(ballPath);\n\n// return sum;\n// }, []);\n\n// return (\n// <>\n// {ballPaths.map((path, i) => (\n// \n// ))}\n// \n// );\n// };\n\nconst OptionsBar = ({ isAutoRotate, handleAutoRotateClick, handleResetClick }) => {\n const rotateBtnClass = classNames({\n [cl.active]: isAutoRotate\n });\n\n return (\n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n );\n};\n\nconst Line = ({ runData, xStartPos, yStartPos, coef, count, lineNumber, curLineNumber }) => {\n const textRef = useRef();\n\n useFrame(({ camera }) => {\n if (textRef.current) textRef.current.quaternion.copy(camera.quaternion);\n });\n\n const curDataSlice =\n curLineNumber < lineNumber ? 0 : curLineNumber === lineNumber ? count : runData.data_3d.length;\n\n const font = new FontLoader().parse(ComfortaaFont);\n\n let lastCoords;\n\n const renderedPart = runData.data_3d.slice(0, curDataSlice);\n const runnerName = String(runData.who);\n\n if (curDataSlice !== 0) {\n lastCoords = renderedPart[renderedPart.length - 1];\n }\n\n const isRender = curDataSlice > 0;\n\n const newData3D = runData.data_3d.filter((coords, i, arr) => {\n return i === 0 || (coords[0] !== arr[i - 1][0] && coords[1] !== arr[i - 1][1]);\n });\n\n const points = newData3D.slice(0, curDataSlice).reduce((sum, coord) => {\n // const points = runData.data_3d.slice(0, curDataSlice).reduce((sum, coord) => {\n const newCoord = new Vector3(coord[0] * coef - 320, -5, coord[1] * -coef + 167);\n\n sum.push(newCoord);\n return sum;\n }, []);\n\n const curveCoords = new CatmullRomCurve3(points);\n return (\n <>\n {isRender ? (\n <>\n \n \n \n \n\n \n \n \n \n \n ) : (\n <>\n )}\n \n );\n};\n\nconst Lines = ({ field, xStartPos, yStartPos, coef, currentMoment }) => {\n const [count, setCount] = useState(null);\n const [curLineNumber, setLineNumber] = useState(0);\n\n const timeoutRef = useRef();\n\n const uniqueField = field.reduce((sum, cur) => {\n const tempData3D = cur.data_3d.filter((pair, i) => !(i % 10));\n\n sum.push({ ...cur, data_3d: tempData3D });\n\n return sum;\n }, []);\n\n const widerField = uniqueField.reduce((sum, cur) => {\n const tempData3D = cur.data_3d.slice(1).reduce(\n (innerSum, curPair, i) => {\n const lastX = innerSum[innerSum.length - 1][0];\n const lastY = innerSum[innerSum.length - 1][1];\n const deltaX = curPair[0] - lastX;\n const deltaY = curPair[1] - lastY;\n const multiplyBy = 8;\n const avgX = deltaX / multiplyBy;\n const avgY = deltaY / multiplyBy;\n\n for (let i = 1; i <= multiplyBy; i++) {\n innerSum.push([lastX + avgX * i, lastY + avgY * i]);\n }\n\n return innerSum;\n },\n [cur.data_3d[0]]\n );\n\n sum.push({ ...cur, data_3d: tempData3D });\n\n return sum;\n }, []);\n\n useEffect(() => {\n setCount(0);\n\n return () => {\n clearTimeout(timeoutRef.current);\n };\n }, []);\n\n useLayoutEffect(() => {\n clearTimeout(timeoutRef.current);\n\n if (count === null || widerField.length === 0) return;\n\n setCount(null);\n setLineNumber(0);\n\n setTimeout(() => {\n setCount(0);\n }, 20);\n }, [currentMoment]);\n\n useEffect(() => {\n if (count === null || widerField.length === 0) return;\n\n timeoutRef.current = setTimeout(() => {\n if (widerField[curLineNumber].data_3d.length > count) {\n setCount(prev => prev + 7);\n return;\n }\n\n if (curLineNumber + 1 < field.length) {\n setCount(0);\n setLineNumber(prev => prev + 1);\n }\n }, 5);\n }, [count]);\n\n // const points = newCoords.slice(5).reduce((sum, coord) => {\n // const tempCoord = new Vector3(xStartPos + coord[0] * coef, -1, yStartPos - coord[1] * coef);\n // sum.push(tempCoord);\n\n // return sum;\n // }, []);\n\n // const newCoord1 = new Vector3(0, 0, 0);\n // const newCoord2 = new Vector3(0, 100, -100);\n // const newCoord3 = new Vector3(-1, 100, 100);\n // const newCoord3 = new Vector3(100, -100, 0);\n\n // const newCoord = new THREE.Vector3(-320, coord[2] * 5, 217);\n // const newCoord = new THREE.Vector3(coord[0]-325, coord[2] * 20, (coord[1] - 1490) / 3 + 150);\n // const newCoord = new THREE.Vector3(coord[0] / 3.5 - 450, coord[2] * 20, (coord[1] - 1490) / 3 + 150);\n // const linePoints = [newCoord, newCoord2, newCoord3];\n\n // const curveCoords = new LineCurve3(newCoord1, newCoord2);\n // const curveCoords = new CatmullRomCurve3(points, false, 'catmullrom', 0);\n // chordal and catmullrom.\n return (\n <>\n {widerField.map((runData, j) => (\n \n ))}\n \n // \n // \n\n // {/* */}\n // \n // \n );\n};\n\nconst TouchPoints = ({ data_3d, coef, curveCount }) => (\n <>\n {data_3d\n .slice(0, curveCount)\n .filter(coords => coords[3] === 1)\n .map(coord => (\n \n \n \n \n ))}\n \n);\n\nconst ToolTip = memo(({ hit, coef }) => {\n const { data_3d, start_speed, angle, distance } = hit || {};\n\n const textRef = useRef();\n\n useFrame(({ camera }) => {\n if (textRef.current) {\n textRef.current.quaternion.copy(camera.quaternion);\n textRef.current.geometry.center();\n }\n });\n\n const font = new FontLoader().parse(ComfortaaFont);\n const textCoords = data_3d[Math.floor(data_3d.length / 2)];\n\n const distanceText = useMemo(\n () => `Angle: ${String(Math.round(angle))}° Speed: ${String(Math.round(start_speed))} mph \nDistance: ${String(Math.round(distance))} m.`,\n [angle, distance, start_speed]\n );\n return (\n \n \n \n \n );\n});\n\nconst CurvePath = ({ hit, coef, curveCount }) => {\n const { data_3d } = hit || {};\n\n const [hovered, setHovered] = useState(false);\n\n const tubeRef = useRef(null);\n\n useEffect(() => {\n if (tubeRef.current === null) return;\n\n document.body.style.cursor = hovered ? 'pointer' : 'auto';\n }, [hovered]);\n\n const points = data_3d.slice(0, curveCount).reduce((sum, coord) => {\n const newCoord = new Vector3(coord[0] * coef - 320, coord[2] * coef, coord[1] * -coef + 167);\n\n sum.push(newCoord);\n return sum;\n }, []);\n\n const curveCoords = new CatmullRomCurve3(points);\n\n const textureRef = useMemo(() => new TextureLoader().load(CurveTexture), []);\n return (\n <>\n {\n setHovered(true);\n }}\n onPointerOut={() => {\n setHovered(false);\n }}>\n \n \n \n {hovered && }\n \n );\n};\n\nconst Curve = ({ hit, coef }) => {\n const { data_3d } = hit || 0;\n const [curveCount, setCurveCount] = useState(null);\n\n useLayoutEffect(() => {\n setCurveCount(0);\n\n if (!data_3d) return;\n\n setTimeout(() => {\n setCurveCount(1);\n }, 150);\n }, [data_3d]);\n\n useEffect(() => {\n if (!data_3d || curveCount === 0) return;\n\n const length = data_3d.length;\n\n let timeout;\n\n if (curveCount < length) {\n timeout = setTimeout(() => {\n setCurveCount(prev => prev + 1);\n }, 3);\n }\n\n return () => {\n clearTimeout(timeout);\n };\n }, [curveCount]);\n\n const isRenderPath = data_3d && curveCount > 1;\n return (\n <>\n {isRenderPath && (\n <>\n \n \n \n )}\n \n );\n};\n\nconst PlaysRunningField = ({ hit, field, setRunningMode }) => {\n const [isAutoRotate, setAutoRotate] = useState(false);\n const [zoomCoef, setZoomCoef] = useState(1);\n\n const currentMoment = useSelector(state => state.game.currentMoment, shallowEqual);\n const runState = useSelector(state => state.game.runState);\n // const dispatch = useDispatch();\n\n const controlsRef = useRef();\n const wrapperRef = useRef();\n\n useEffect(() => {\n const xCoef = wrapperRef.current.clientWidth / 568.72;\n const yCoef = wrapperRef.current.clientHeight / 497.81;\n const resultCoef = Math.min(xCoef, yCoef);\n\n setZoomCoef(resultCoef);\n }, []);\n\n const handleResetClick = () => controlsRef.current.reset();\n const handleAutoRotateClick = () => setAutoRotate(prev => !prev);\n\n const textureRef = useMemo(() => new TextureLoader().load(FieldBg), []);\n\n const xStartPos = -389;\n const yStartPos = 388;\n\n const coef = 925 / 90;\n\n const wrapperClasses = classNames(cl.fieldWrapper, {\n [cl.dnone]: runState !== 'Field'\n });\n return (\n
    \n {/* */}\n {/* {isBallPaths && } */}\n {/* */}\n \n \n {/* \n \n \n */}\n\n {/* */}\n \n\n {field && (\n \n )}\n\n \n\n {/* */}\n \n\n\t\t\t\t\t{/* */}\n \n\n \n \n \n\n \n {/*
    \n setRunningMode('Info')} />\n
    */}\n
    \n );\n};\n\nexport default memo(PlaysRunningField);\n","import React from 'react';\nimport { getFixedNumber } from 'utils';\nimport cl from './PlaysRunning.module.scss';\n\nconst BASES_BY_NUMBER = ['H', '1B', '2B', '3B'];\n\nconst PlaysRunningInfoItem = ({ item }) => {\n const {\n max_speed: maxSpeed,\n who,\n run_from: runFrom,\n run_to: runTo,\n time_end: timeEnd,\n time_start: timeStart\n } = item;\n\n const timeDelta = timeEnd - timeStart;\n return (\n
    \n {`${who} run from ${BASES_BY_NUMBER[runFrom]} to ${BASES_BY_NUMBER[runTo]} base:`}

    \n

    {`S: ${getFixedNumber(maxSpeed, 1)} km/h T: ${getFixedNumber(\n timeDelta,\n 1\n )} s`}

    \n
    \n );\n};\n\nexport default PlaysRunningInfoItem;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './PlaysRunning.module.scss';\nimport PlaysRunningInfoItem from './PlaysRunningInfoItem';\n\n\nconst PlaysRunningInfoList = () => {\n const { metering } = useSelector(state => state.game.currentMoment);\n\n return (\n
    \n {metering?.field && metering.field.map((item, i) => (\n \n ))}\n
    \n );\n};\n\nexport default PlaysRunningInfoList;\n","import classNames from 'classnames';\nimport cl from './PlaysRunning.module.scss';\nimport PlaysRunningInfoList from './PlaysRunningInfoList';\nimport { useSelector } from 'react-redux';\n\nconst PlaysRunningInfo = () => {\n const runState = useSelector(s => s.game.runState);\n\n const wrapperClasses = classNames(cl.info, {\n [cl.dnone]: runState !== 'Info'\n });\n return (\n
    \n

    Running

    \n \n {/*
    \n setRunningMode('Field')} />\n
    */}\n
    \n );\n};\n\nexport default PlaysRunningInfo;\n","import React, { useRef, useEffect } from 'react';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport PlaysRunningField from './PlaysRunningField';\nimport PlaysRunningInfo from './PlaysRunningInfo';\nimport { setCurrentCard, setCurrentMoment } from 'redux/gameReducer';\n\nconst PlaysRunning = () => {\n const currentMoment = useSelector(s => s.game.currentMoment, shallowEqual);\n const currentCard = useSelector(s => s.game.currentCard, shallowEqual);\n const preferredVideoState = useSelector(s => s.game.preferredVideoState);\n const videoLengthMode = useSelector(s => s.game.videoLengthMode);\n const preview = useSelector(s => s.game.preview);\n const filteredCards = useSelector(s => s.game.filteredCards, shallowEqual);\n const isLastMomentMode = useSelector(s => s.game.isLastMomentMode);\n const playbackMode = useSelector(s => s.game.playbackMode);\n\n const dispatch = useDispatch();\n\n const nextMomentTimeoutRef = useRef();\n const intervalRef = useRef(null);\n const videoHandlingTimeoutRef = useRef();\n const modeRef = useRef('play');\n\n useEffect(\n () => () => {\n clearTimeout(nextMomentTimeoutRef.current);\n clearTimeout(videoHandlingTimeoutRef.current);\n clearInterval(intervalRef.current);\n },\n []\n );\n\n useEffect(() => {\n clearTimeout(videoHandlingTimeoutRef.current);\n clearInterval(intervalRef.current);\n\n videoHandlingTimeoutRef.current = setTimeout(\n () => {\n videoHandling();\n },\n videoLengthMode === 'Super Short' ? 1500 : 30\n );\n }, [currentMoment]);\n\n useEffect(() => {\n (currentMoment.manualClick || currentCard.manualClick) && clearTimeout(nextMomentTimeoutRef.current);\n }, [currentMoment, currentCard]);\n\n useEffect(() => {\n modeRef.current = playbackMode;\n\n if (playbackMode === 'pause') {\n clearTimeout(nextMomentTimeoutRef.current);\n return;\n }\n\n playbackMode === 'play' && toNextMomentOrCard();\n // eslint-disable-next-line\n }, [playbackMode]);\n\n function toNextMomentOrCard() {\n const momentIndex = currentCard.moments.findIndex(moment => moment.inner.id === currentMoment.inner?.id);\n\n if (momentIndex < currentCard.moments.length - 1) {\n const nextMoment = currentCard.moments[momentIndex + 1];\n\n dispatch(setCurrentMoment(nextMoment));\n\n if (!nextMoment.video || nextMoment?.inner?.id >= preview.camera_info.broadcast_link_add_moment_from)\n return;\n } else {\n let cardIndex = filteredCards.findIndex(\n card => card.moments[0].inner.id === currentCard.moments[0].inner.id\n );\n\n cardIndex++;\n\n if (cardIndex < filteredCards.length) {\n dispatch(\n setCurrentCard({\n ...filteredCards[cardIndex],\n toFirstMoment: !isLastMomentMode,\n manualClick: false\n })\n );\n\n return;\n }\n }\n }\n\n const videoHandling = () => {\n clearInterval(intervalRef.current);\n\n if (modeRef.current !== 'pause') {\n nextMomentTimeoutRef.current = setTimeout(toNextMomentOrCard, 3000);\n }\n\n if (currentCard.moments.length === 0 || !currentCard.moments[0].video) {\n return;\n }\n };\n\n // !Previous version of moments handling\n\n // const currentMoment = useSelector(state => state.game.currentMoment, shallowEqual);\n // const currentCard = useSelector(state => state.game.currentCard, shallowEqual);\n // const playbackMode = useSelector(state => state.game.playbackMode);\n // const filteredCards = useSelector(state => state.game.filteredCards, shallowEqual);\n // const isLastMomentMode = useSelector(state => state.game.isLastMomentMode);\n\n // const dispatch = useDispatch();\n\n // const playRef = useRef();\n\n // useEffect(() => () => clearTimeout(playRef.current), []);\n\n // useEffect(() => {\n // if (playbackMode === 'pause') return;\n\n // clearTimeout(playRef.current);\n\n // const newMoments = [];\n // currentCard.type !== 'Replacement'\n // ? currentCard.moments?.forEach(moment => moment.icons && newMoments.push(moment))\n // : newMoments.push(currentCard.moments[0]);\n\n // const momentIndex = newMoments?.findIndex(moment => moment.inner?.id === currentMoment?.inner?.id);\n // const cardIndex = filteredCards.findIndex(\n // card => card.moments[0].inner.id === currentCard.moments[0].inner.id\n // );\n\n // playRef.current = setTimeout(() => {\n // if (\n // (momentIndex >= currentCard.moments.length - 1 && cardIndex >= filteredCards.length - 1) ||\n // momentIndex === -1\n // ) {\n // // dispatch(setPlaybackMode('pause'));\n // return;\n // }\n // if (momentIndex >= currentCard.moments.length - 1) {\n // dispatch(\n // setCurrentCard({\n // ...filteredCards[cardIndex + 1],\n // toFirstMoment: !isLastMomentMode,\n // manualMoment: true\n // })\n // );\n // return;\n // }\n // dispatch(setCurrentMoment(newMoments[momentIndex + 1]));\n // }, 2000);\n // // eslint-disable-next-line\n // }, [currentMoment, isLastMomentMode]);\n\n // useEffect(() => {\n // if (playbackMode === 'pause') {\n // clearTimeout(playRef.current);\n // return;\n // }\n\n // const newMoments = [];\n // currentCard.type !== 'Replacement'\n // ? currentCard.moments?.forEach(moment => moment.icons && newMoments.push(moment))\n // : newMoments.push(currentCard.moments[0]);\n\n // const momentIndex = newMoments?.findIndex(moment => moment.inner?.id === currentMoment?.inner?.id);\n // const cardIndex = filteredCards.findIndex(\n // card => card.moments[0].inner.id === currentCard.moments[0].inner.id\n // );\n\n // playRef.current = setTimeout(() => {\n // if (\n // (momentIndex >= currentCard.moments.length - 1 && cardIndex >= filteredCards.length - 1) ||\n // momentIndex === -1\n // ) {\n // // dispatch(setPlaybackMode('pause'));\n // return;\n // }\n // if (momentIndex >= currentCard.moments.length - 1) {\n // dispatch(setCurrentCard({ ...filteredCards[cardIndex + 1], manualMoment: true }));\n // return;\n // }\n // dispatch(setCurrentMoment(newMoments[momentIndex + 1]));\n // }, 2000);\n // // eslint-disable-next-line\n // }, [playbackMode]);\n return (\n <>\n \n \n {/* {(mobileWidth > 1000 || runningMode === 'Info') && } */}\n \n );\n};\n\nexport default PlaysRunning;\n","import React from 'react';\nimport PlaysHitting from '../PlaysHitting/PlaysHitting';\nimport PlaysPitch from '../PlaysPitch/PlaysPitch';\nimport PlaysRunning from '../PlaysRunning/PlaysRunning';\n\nconst PlaysContent = ({ currentTab }) => {\n const renderComponent =\n\tcurrentTab === 'hitting' ? (\n \n ) : currentTab === 'running' ? (\n \n ) : (\n \n );\n\n return <>{renderComponent};\n};\nexport default PlaysContent;\n","import React, { useLayoutEffect } from 'react';\nimport cl from './Plays.module.scss';\n// import PlaysEvents from '../PlaysEvents/PlaysEvents';\n// import PlaysFooter from '../PlaysFooter/PlaysFooter';\nimport PlaysContent from '../PlaysContent/PlaysContent';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getSearchParam } from 'utils';\n// import { setSearchParam } from 'utils';\nimport { setCurrentTab, setHitState, setPitchState, setRunState } from 'redux/gameReducer';\nimport classNames from 'classnames';\nimport Arrow from 'components/UI/buttons/Arrow/Arrow';\n// import { setPitchState } from 'redux/gameReducer';\n// import MobilePitcherFilters from '../Content/MobilePitcherFilters';\n\nconst Plays = ({ isVideo }) => {\n // const ptab = getSearchParam('ptab');\n // const defaultPtab = ['pitch', 'hitting', 'running'].includes(ptab) ? ptab : 'pitch';\n // const [currentTab, setCurrentTab] = useState(defaultPtab);\n // const [moments, setMoments] = useState([]);\n // const currentCard = useSelector(state => state.game.currentCard);\n const currentTab = useSelector(state => state.game.currentTab);\n const pitchState = useSelector(state => state.game.pitchState);\n const hitState = useSelector(state => state.game.hitState);\n const runState = useSelector(state => state.game.runState);\n\n const dispatch = useDispatch();\n\n useLayoutEffect(() => {\n const tab = getSearchParam('tab');\n const defaultPtab = ['pitch', 'hitting', 'running'].includes(tab) ? tab : 'pitch';\n dispatch(setCurrentTab(defaultPtab));\n // const ptab = getSearchParam('ptab');\n // const defaultPtab = ['pitch', 'hitting', 'running'].includes(ptab) ? ptab : 'pitch';\n // dispatch(setCurrentTab(defaultPtab))\n // eslint-disable-next-line\n }, []);\n\n // useEffect(() => {\n // const newMoments = [];\n // currentCard.type !== 'Replacement'\n // ? currentCard.moments?.forEach(moment => moment.icons && newMoments.push(moment))\n // : newMoments.push(currentCard.moments[0]);\n // setMoments(newMoments);\n // // eslint-disable-next-line\n // }, [currentCard]);\n\n // const handleTabClick = e => {\n // setSearchParam('ptab', e.target.name);\n // dispatch(setCurrentTab(e.target.name));\n // dispatch(setPitchState('Field'))\n // };\n\n const handleLeftArrowClick = () => {\n if (currentTab === 'pitch') {\n const prevState = pitchState === 'SpeedSpinInfo' ? 'Videos' : 'Field';\n dispatch(setPitchState(prevState));\n }\n if (currentTab === 'hitting') dispatch(setHitState('Field'));\n if (currentTab === 'running') dispatch(setRunState('Field'));\n };\n const handleRightArrowClick = () => {\n if (currentTab === 'pitch') {\n const nextState = pitchState === 'Field' ? 'Videos' : 'SpeedSpinInfo';\n dispatch(setPitchState(nextState));\n }\n if (currentTab === 'hitting') dispatch(setHitState('Videos'));\n if (currentTab === 'running') dispatch(setRunState('Info'));\n };\n\n const isLeftArrow =\n (currentTab === 'pitch' && pitchState !== 'Field') ||\n (currentTab === 'hitting' && hitState !== 'Field') ||\n (currentTab === 'running' && runState !== 'Field');\n const isRightArrow =\n (currentTab === 'pitch' && pitchState !== 'SpeedSpinInfo') ||\n (currentTab === 'hitting' && hitState !== 'Videos') ||\n (currentTab === 'running' && runState !== 'Info');\n\n const playsClasses = classNames(cl.plays, {\n [cl.playsNoVideo]: !isVideo,\n [cl.hitting]: isVideo && currentTab === 'hitting',\n [cl.running]: isVideo && currentTab === 'running',\n [cl.pitch]: isVideo && currentTab !== 'hitting' && currentTab !== 'running',\n [cl.videosGrid]: pitchState === 'Videos'\n });\n return (\n
    \n {isVideo && (\n <>\n {/*
    \n \n
    */}\n {/* */}\n \n\n {isLeftArrow && (\n
    \n \n
    \n )}\n {isRightArrow && (\n
    \n \n
    \n )}\n \n )}\n {/*
    \n
    */}\n {/*
    \n \n
    */}\n
    \n );\n};\n\nexport default Plays;\n","import Arrow from 'components/UI/buttons/Arrow/Arrow';\nimport VerticalScrollDivider from 'components/UI/dividers/VerticalScrollDivider/VerticalScrollDivider';\nimport useScrollHorizontally from 'hooks/useScrollHorizontally';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport HeaderInfo from '../HeaderInfo/HeaderInfo';\nimport HeaderScoresList from '../HeaderScoresList/HeaderScoresList';\nimport HeaderTeams from '../HeaderTeams/HeaderTeams';\n\nconst LandscapeScores = ({ cl, currentTab }) => {\n const [scrollRef, isLeftScroll, isRightScroll] =\n useScrollHorizontally();\n const innings = useSelector(state => state.game.innings);\n const preview = useSelector(state => state.game.preview);\n\n\n const scrollHorizontally = e => {\n const start = scrollRef.current.scrollLeft,\n change = 120,\n increment = 10;\n let currentTime = 0;\n\n Math.easeInOutQuad = function (t, b, c, d) {\n t /= d / 2;\n if (t < 1) return (c / 2) * t * t + b;\n t--;\n return (-c / 2) * (t * (t - 2) - 1) + b;\n };\n\n const animateScroll = function (name) {\n currentTime += increment;\n const val = Math.easeInOutQuad(currentTime, start, name === 'scroll-left' ? -change : change, 300);\n scrollRef.current.scrollLeft = val;\n if (currentTime < 300) {\n setTimeout(() => animateScroll(name), increment);\n }\n };\n\n animateScroll(e.currentTarget.name);\n };\n\n const leftArrowGroup = isLeftScroll ? (\n <>\n \n \n \n ) : (\n <>\n \n \n \n );\n\n const rightArrowGroup = isRightScroll ? (\n <>\n \n \n \n ) : (\n <>\n \n \n \n );\n return (\n
    \n \n
    \n
    {leftArrowGroup}
    \n \n
    {rightArrowGroup}
    \n
    \n \n
    \n );\n};\n\nexport default LandscapeScores;\n","import React from 'react';\nimport cl from './ContentGraphics.module.scss';\nimport Videos from '../Videos/Videos';\nimport Plays from '../Plays/Plays';\nimport LandscapeScores from './LandscapeScores';\nimport PlaysEvents from '../PlaysEvents/PlaysEvents';\nimport useGameFocus from 'hooks/useGameFocus';\nimport { useSelector } from 'react-redux';\nimport classNames from 'classnames';\nimport OptionsDropdown from '../Header/MobileOptionsBar/OptionsDropdown/OptionsDropdown';\n\nconst ContentGraphics = ({ currentTab, isVideo }) => {\n const isMobileScoreboard = useSelector(s => s.shared.isMobileScoreboard);\n const isMobileTimeline = useSelector(s => s.shared.isMobileTimeline);\n\n const renderTab = () => {\n switch (currentTab) {\n case 'videos':\n return isVideo ? : ;\n default:\n return ;\n }\n };\n\n const topShift = isMobileScoreboard ? '83.5px' : '0px';\n\n const graphicsClasses = classNames(cl.graphics, {\n [cl.mobileLandscapeVideo]: currentTab === 'videos',\n [cl.videoTab]: currentTab === 'videos'\n });\n\n const scoresClasses = classNames({\n [cl.portraitDisplayNone]: currentTab !== 'videos',\n [cl.displayNone]: currentTab === 'videos'\n });\n const optionsClasses = classNames(cl.onlyMobileLandscape, {\n [cl.withMobileTimeline]: isMobileTimeline,\n [cl.verticalEvents]: currentTab === 'videos'\n });\n return (\n
    \n {isVideo && (\n
    \n \n
    \n )}\n {renderTab()}\n
    \n \n \n
    \n
    \n );\n};\n\nexport default ContentGraphics;\n","import cl from './ProgressBar.module.scss';\n\nconst ProgressBar = ({ progress, ...props }) => (\n
    \n
    \n \n);\n\nexport default ProgressBar;\n","import React from 'react';\nimport cl from './Loader.module.scss';\nimport ProgressBar from '../ProgressBar/ProgressBar';\n\nconst Loader = ({ styles = null, loadedPercents = null }) => {\n const isPercentsTitle = loadedPercents && loadedPercents >= 10;\n\n const progressStyles = {\n bottom: '-4.5rem',\n left: '50%',\n translate: '-50% 0',\n borderRadius: '2px',\n height: '4px',\n width: 100,\n backgroundColor: 'white'\n };\n return (\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n {isPercentsTitle && }\n
    \n );\n};\n\nexport default Loader;\n","import axios from 'axios';\n\nexport const axiosInstance = axios.create({\n baseURL: 'https://baseball-gametrack.ru/api'\n});\n\nexport const axiosCancelToken = axios.CancelToken","import { forwardRef } from 'react';\nimport cl from './ContentMobileBox.module.scss';\n\nconst MobileBoxTableHeader = ({ getTableHeaders }, ref) => {\n return (\n
    \n
    \n
    \n
    \n
    \n
    \n {getTableHeaders()}\n
    \n
    \n );\n};\n\nexport default forwardRef(MobileBoxTableHeader);\n","import React, { useState, useEffect, useRef } from 'react';\nimport { Link } from 'react-router-dom';\nimport cl from './ContentMobileBox.module.scss';\nimport MobileBoxTableHeader from './MobileBoxTableHeader';\n\nconst TABLES_INFO = {\n Batting: {\n headers: [\n { name: 'POS', isWider: false, isWidest: true },\n { name: 'AB', isWider: false },\n { name: 'R', isWider: false },\n { name: 'H', isWider: false },\n { name: '2B', isWider: false },\n { name: '3B', isWider: false },\n { name: 'HR', isWider: false },\n { name: 'RBI', isWider: false },\n { name: 'GDP', isWider: false },\n { name: 'BB', isWider: false },\n { name: 'IBB', isWider: false },\n { name: 'HP', isWider: false },\n { name: 'SH', isWider: false },\n { name: 'SF', isWider: false },\n { name: 'SO', isWider: false },\n { name: 'TB', isWider: false },\n { name: 'AVG', isWider: true },\n { name: 'SLG', isWider: true },\n { name: 'OBP', isWider: true },\n { name: 'OPS', isWider: true }\n ]\n },\n Running: {\n headers: [\n { name: 'POS', isWider: false, isWidest: true },\n { name: 'SB', isWider: false },\n { name: 'CS', isWider: false },\n { name: 'SB_pr', isWider: true },\n { name: 'LOB', isWider: false }\n ]\n },\n Pitching: {\n headers: [\n { name: 'IP', isWider: false },\n { name: 'PA', isWider: false },\n { name: 'R', isWider: false },\n { name: 'ER', isWider: false },\n { name: 'H', isWider: false },\n { name: '2B', isWider: false },\n { name: '3B', isWider: false },\n { name: 'HR', isWider: false },\n { name: 'BB', isWider: false },\n { name: 'IBB', isWider: false },\n { name: 'HP', isWider: false },\n { name: 'SH', isWider: false },\n { name: 'SF', isWider: false },\n { name: 'SO', isWider: false },\n { name: 'WP', isWider: false },\n { name: 'BK', isWider: false },\n { name: 'ERA', isWider: false, isWidest: true },\n { name: 'NP', isWider: false },\n { name: 'NS', isWider: false },\n { name: 'NB', isWider: false }\n ]\n },\n Fielding: {\n headers: [\n { name: 'POS', isWider: false, isWidest: true },\n { name: 'CH', isWider: false },\n { name: 'PO', isWider: false },\n { name: 'A', isWider: false },\n { name: 'E', isWider: false },\n { name: 'DP', isWider: false },\n { name: 'FLD', isWider: true }\n ]\n },\n Catching: {\n headers: [\n { name: 'SB', isWider: false },\n { name: 'CS', isWider: false },\n { name: 'PB', isWider: false }\n ]\n }\n};\n\nconst BATTING_TITLES = ['Batting', 'Running', 'Fielding'];\n\nconst MobileBoxTable = ({ currentMode, tableData }) => {\n const [isScrollable, setIsScrollable] = useState(false);\n\n useEffect(() => {\n setIsScrollable(rowsRef.current.scrollWidth > rowsRef.current.clientWidth);\n }, [currentMode]);\n\n const headerScroll = useRef();\n const rowsRef = useRef();\n\n const getTableHeaders = () =>\n TABLES_INFO[currentMode].headers.map((mode, i) => (\n
    \n {mode.name === 'SB_pr' ? '%SB' : mode.name === 'FLD' ? 'FLD%' : mode.name}\n
    \n ));\n\n let rowDelta = 0;\n\n let orderedPlayersStats;\n\n const { players_stats, pitchers, catchers } = tableData;\n\n if (currentMode !== 'Pitching' && currentMode !== 'Catching') orderedPlayersStats = players_stats.slice();\n\n if (currentMode === 'Pitching') orderedPlayersStats = pitchers.slice();\n if (currentMode === 'Catching') orderedPlayersStats = catchers.slice();\n\n const isPitcherOrCatcher = ['Pitching', 'Catching'].includes(currentMode);\n\n const getValue = (title, player) => {\n const tableMode = currentMode.toLowerCase();\n\n if (player.id === -1) return ' ';\n if (title.name === 'POS') return player.content.positions.join('/');\n\n if (!isPitcherOrCatcher) {\n if (player.content.stats[tableMode][title.name] === 'INF') return 'INF';\n\n if (['AVG', 'SLG', 'OBP', 'OPS'].includes(title.name))\n return Number(player.content.stats.batting[title.name]).toFixed(3);\n\n if (title.name === 'SB_pr') return Number(player.content.stats.running.SB_pr).toFixed(3);\n\n if (title.name === 'FLD') return Number(player.content.stats.fielding.FLD).toFixed(3);\n\n return player.content.stats[tableMode][title.name];\n }\n\n if (currentMode === 'Pitching') {\n if (player.pitching[title.name] === 'INF') return 'INF';\n if (title.name === 'ERA') return Number(player.pitching.ERA).toFixed(3);\n\n return player.pitching[title.name];\n }\n\n if (currentMode === 'Catching') {\n if (player.catching[title.name] === 'INF') return 'INF';\n\n return player.catching[title.name];\n }\n\n return ' ';\n };\n return (\n
    \n \n
    \n
    \n {orderedPlayersStats.map((player, i) => {\n if (player.is_substituted && BATTING_TITLES.includes(currentMode)) rowDelta++;\n\n const playerLinkName = isPitcherOrCatcher ? player.name : player.content.name;\n return (\n
    \n {currentMode !== 'Pitching' && currentMode !== 'Catching' && (\n
    \n {(player.is_substituted && BATTING_TITLES.includes(currentMode)) ||\n !BATTING_TITLES.includes(currentMode)\n ? ' '\n : i + 1 - rowDelta}\n
    \n )}\n \n {playerLinkName}\n
    \n
    \n );\n })}\n
    TOTALS
    \n
    \n (headerScroll.current.scrollLeft = e.target.scrollLeft)}\n ref={rowsRef}>\n {orderedPlayersStats.map((player, i) => {\n return (\n \n {TABLES_INFO[currentMode].headers.map((title, i) => {\n const value = getValue(title, player);\n // player.id === -1\n // ? ' '\n // : title.name === 'POS'\n // ? player.content.positions.join('/')\n // : ['SB', 'CS', 'SB_pr', 'LOB', 'PB'].includes(title.name)\n // ? player.content.stats[currentMode === 'Running' ? 'running' : 'catching'][title.name]\n // : ['CH', 'PO', 'A', 'E', 'DP', 'FLD'].includes(title.name)\n // ? player.content.stats.fielding[title.name]\n // : title.isWider\n // ? player.content.stats[\n // BATTING_TITLES.includes(currentMode) ? 'batting' : currentMode.toLowerCase()\n // ][title.name] === 'Infinity'\n // ? 'INF'\n // : Number(\n // player.content.stats[\n // BATTING_TITLES.includes(currentMode) ? 'batting' : currentMode.toLowerCase()\n // ][title.name]\n // ).toFixed(3)\n // : player.content.stats[\n // BATTING_TITLES.includes(currentMode) ? 'batting' : currentMode.toLowerCase()\n // ][title.name];\n\n return (\n
    \n {Number(value) !== -1 ? value : '—'}\n
    \n );\n })}\n
    \n );\n })}\n \n {TABLES_INFO[currentMode].headers.map((title, i) => (\n
    \n {title.name === 'POS'\n ? ' '\n : title.name === 'SB_pr'\n ? tableData.total_stats.running.SB_pr\n : title.name === 'FLD'\n ? Number(tableData.total_stats.fielding.FLD).toFixed(3)\n : ['CH', 'PO', 'A', 'E', 'DP'].includes(title.name)\n ? tableData.total_stats.fielding[title.name]\n : title.isWider\n ? Number(tableData.total_stats[currentMode.toLowerCase()][title.name]).toFixed(3)\n : ['SB', 'CS', 'LOB', 'PB'].includes(title.name)\n ? tableData.total_stats[currentMode === 'Running' ? 'running' : 'catching'][title.name]\n : tableData.total_stats[\n BATTING_TITLES.includes(currentMode) ? 'batting' : currentMode.toLowerCase()\n ][title.name]}\n
    \n ))}\n \n \n \n \n );\n};\n\nexport default MobileBoxTable;\n","import { useState } from 'react';\nimport cl from './GraphsBlock.module.scss';\n\nconst GraphsBlock = ({ defaultOption = null, children, noSelector = false, ...props }) => {\n const [currentOption, setCurrentOption] = useState(defaultOption);\n\n if (noSelector)\n return (\n
    \n {children}\n
    \n );\n\n return (\n
    \n {children(currentOption, setCurrentOption)}\n
    \n );\n};\n\nexport default GraphsBlock;\n","import { createContext, useContext } from 'react';\nimport { CatmullRomCurve3, FrontSide, Vector3 } from 'three';\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry';\nimport { FontLoader } from 'three/examples/jsm/loaders/FontLoader';\n\nexport const ctx = createContext();\n\nconst ThreeTextCtx = ({ children }) => {\n return (\n \n {children}\n \n );\n};\n\nexport const useThreeTextCtx = () => useContext(ctx);\n\nexport default ThreeTextCtx;\n","import { memo, useRef, useState, useEffect } from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport { HSVtoRGB } from 'utils';\n// import ComfortaaFont from 'fonts/Comfortaa_Regular.json';\nimport { useThreeTextCtx } from 'context/ThreeTextCtx';\n\n// const TouchPoints = ({ data3D, coef, curveCount }) => (\n// <>\n// {data3D\n// .slice(0, curveCount)\n// .filter(coords => coords[3] === 1)\n// .map(coord => (\n// \n// \n// \n// \n// ))}\n// \n// );\n\nconst CurvePath = memo(\n ({ hit, coef, setDrawPoints, minMaxDistance, handlePointerOver, handlePointerOut }) => {\n const { data_3d: data3D, distance, angle, 'exit velocity': speed } = hit.hit_info;\n const { game_id: gameId, mom_id: momentId } = hit.pitch_info;\n\n const [pointerOver, setPointerOver] = useState(false);\n\n // const [tubeRadius, setTubeRadius] = useState(3);\n\n const tubeRef = useRef(null);\n // const textRef = useRef(null);\n\n const { Vector3, CatmullRomCurve3, FrontSide } = useThreeTextCtx();\n\n // extend({ TextGeometry });\n\n // useEffect(() => {\n // if (tubeRef.current === null) return;\n\n // document.body.style.cursor = hovered ? 'pointer' : 'auto';\n // }, [hovered]);\n\n const cashedStepTotal = useRef(0);\n\n let stepTotalRef = cashedStepTotal.current;\n useEffect(() => {\n setDrawPoints(false);\n\n stepTotalRef = 0;\n cashedStepTotal.current = 0;\n }, [data3D]);\n\n // useEffect(() => {\n // if (!hovered) {\n // setTubeRadius(3);\n // return;\n // }\n\n // setTubeRadius(prev => prev + 0.1);\n // }, [hovered]);\n\n // useEffect(() => {\n // if (!hovered) {\n // setTubeRadius(3);\n // return;\n // }\n // if (tubeRadius <= 3 || tubeRadius >= 5) return;\n\n // setTubeRadius(prev => prev + 0.1);\n // }, [tubeRadius, hovered]);\n\n const points = data3D.reduce((sum, coord) => {\n const newCoord = new Vector3(coord[0] * coef - 320, coord[2] * coef, coord[1] * -coef + 167);\n\n sum.push(newCoord);\n return sum;\n }, []);\n\n const curveCoords = new CatmullRomCurve3(points);\n\n useFrame(() => {\n // if (textRef.current) {\n // textRef.current.quaternion.copy(camera.quaternion);\n // textRef.current.geometry.center();\n // }\n\n // if (hovered) tubeRef.current\n\n if (stepTotalRef > 30510) return;\n if (stepTotalRef > 30110) {\n setDrawPoints(true);\n cashedStepTotal.current = stepTotalRef;\n return;\n }\n stepTotalRef += 400;\n tubeRef.current.setDrawRange(0, stepTotalRef);\n });\n\n const colorsMin = 0.65;\n const colorsMax = 1;\n const colorsDelta = colorsMax - colorsMin;\n\n const distanceDelta = distance - minMaxDistance.min;\n const distanceRel = distanceDelta / (minMaxDistance.max - minMaxDistance.min);\n\n const resultColorRel = !isNaN(distanceRel) ? colorsMin + colorsDelta * distanceRel : colorsMin;\n\n const meshColor = HSVtoRGB(resultColorRel, 1, 1);\n\n const handleMeshClick = () => {\n window.open(`/game/${gameId}?card=${momentId}&tab=hitting`, '_blank');\n };\n\n // const font = new FontLoader().parse(ComfortaaFont);\n // const textCoords = data3D[Math.floor(data3D.length / 2)];\n\n const distanceText = `Angle: ${String(Math.round(angle))}° Velocity: ${String(Math.round(speed))} mph \nDistance: ${String(Math.round(distance))} m.`;\n return (\n <>\n \n \n \n \n {\n if (cashedStepTotal.current < 30110) return;\n handlePointerOver(distanceText);\n setPointerOver(true);\n }}\n onPointerOut={() => {\n if (cashedStepTotal.current < 30110) return;\n handlePointerOut(distanceText);\n setPointerOver(false);\n }}>\n \n \n \n {/* {hovered && (\n \n \n \n \n )} */}\n \n );\n }\n);\n\nconst Curve = ({ hit, curveCount, minMaxDistance, handlePointerOver, handlePointerOut }) => {\n const [drawPoints, setDrawPoints] = useState(false);\n const coef = 925 / 90;\n\n return (\n <>\n \n {/* {drawPoints && } */}\n \n );\n};\n\nexport default Curve;\n","import { useState, memo } from 'react';\nimport { getRndValue } from 'utils';\nimport Curve from './Curve';\nimport ThreeTextCtx from 'context/ThreeTextCtx';\n\n// import CurveTexture from 'images/blue_ball_curve.jpg';\n// import { TextureLoader } from 'three';\n\nconst Curves = ({ hitsData, handlePointerOver, handlePointerOut }) => {\n const maxLength = hitsData.reduce((sum, hit) => {\n const curLength = hit.hit_info.data_3d.length;\n if (curLength > sum) sum = curLength;\n\n return sum;\n }, 0);\n\n const [curveCount] = useState(maxLength);\n\n const isRenderCurves = curveCount > 1;\n // 240 - 359\n\n const defaultMinMaxDistance = { min: hitsData[0].hit_info.distance, max: hitsData[0].hit_info.distance };\n const minMaxDistance = hitsData.reduce((result, { hit_info: { distance } }) => {\n if (distance < result.min) result.min = distance;\n if (distance > result.max) result.max = distance;\n\n return result;\n }, defaultMinMaxDistance);\n return (\n \n {hitsData.map((hit, i) => {\n const { data_3d: data3D } = hit.hit_info;\n\n const curCurveCount = curveCount > data3D.length ? data3D.length : curveCount;\n\n return (\n \n );\n })}\n \n );\n};\n\nfunction propsComparison(prevProps, nextProps) {\n return JSON.stringify(prevProps) === JSON.stringify(nextProps);\n}\n\nexport default memo(Curves, propsComparison);\n","import { tooltip } from './PitchesTrajectories.module.scss';\n\nconst Tooltip = ({ text }) => {\n return
    {text}
    ;\n};\n\nexport default Tooltip;\n","import classNames from 'classnames';\nimport React, { memo, Suspense, useMemo, useState, useRef, useEffect, lazy } from 'react';\nimport cl from './PitchesTrajectories.module.scss';\nimport { Canvas } from '@react-three/fiber';\nimport { TextureLoader } from 'three';\nimport { OrbitControls } from '@react-three/drei';\nimport FieldBg from 'images/field_right.jpg';\nimport Curves from './Curves/Curves';\nimport Tooltip from './Tooltip';\nimport Loader from 'components/UI/loaders/Loader/Loader';\n\nconst Model = lazy(() => import('models/Stadium'));\n\nconst OptionsBar = ({ isAutoRotate, handleAutoRotateClick, handleResetClick }) => {\n const rotateBtnClass = classNames({\n [cl.active]: isAutoRotate\n });\n\n return (\n
    \n
    \n \n \n
    \n {/*
    \n \n
    */}\n
    \n );\n};\n\nconst PitchesTrajectories = ({ metrix }) => {\n const filteredMetrix = metrix.reduce((sum, { pitches_all: pitchesAll }) => {\n pitchesAll.filter(({ hit_info }) => hit_info.data_3d).forEach(hit => sum.push(hit));\n\n return sum;\n }, []);\n\n const [isAutoRotate, setAutoRotate] = useState(true);\n const [zoomCoef, setZoomCoef] = useState(1);\n const [isGraphVisible, setGraphVisibility] = useState(false);\n const [hovered, setHovered] = useState({ isHovered: false, text: '' });\n\n const graphRef = useRef();\n\n useEffect(() => {\n let options = {\n root: null,\n rootMargin: '300px 0px',\n threshold: 0\n };\n\n let observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n setGraphVisibility(true);\n } else {\n setGraphVisibility(false);\n }\n });\n }, options);\n observer.observe(graphRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const controlsRef = useRef();\n const wrapperRef = useRef();\n const pointerTimeout = useRef(null);\n\n useEffect(() => {\n const xCoef = wrapperRef.current.clientWidth / 568.72;\n const yCoef = wrapperRef.current.clientHeight / 497.81;\n const resultCoef = Math.min(xCoef, yCoef);\n\n setZoomCoef(resultCoef);\n }, []);\n\n const handleResetClick = () => controlsRef.current.reset();\n const handleAutoRotateClick = () => setAutoRotate(prev => !prev);\n\n const textureRef = useMemo(() => new TextureLoader().load(FieldBg), []);\n\n const isCurves = filteredMetrix.length > 0;\n\n const handlePointerOverCurve = text => {\n clearTimeout(pointerTimeout.current);\n\n setHovered({ isHovered: true, text });\n\n document.body.style.cursor = 'pointer';\n };\n\n const handlePointerOutCurve = text => {\n clearTimeout(pointerTimeout.current);\n\n pointerTimeout.current = setTimeout(() => {\n setHovered({ isHovered: false, text });\n }, 4000);\n\n document.body.style.cursor = 'auto';\n };\n return (\n
    \n }>\n \n {isGraphVisible && (\n <>\n {/* \n \n \n */}\n\n {/* */}\n \n {/* */}\n\n {isCurves && (\n \n )}\n\n \n\n \n\n \n \n )}\n \n \n \n\n {/* Tooltip */}\n {hovered.isHovered && }\n
    \n );\n};\n\nexport default memo(PitchesTrajectories);\n","import classNames from 'classnames';\nimport { getPitchColorByName } from 'utils';\nimport cl from './OptionsToggler.module.scss';\n\nconst OptionsToggler = ({\n optionsArr,\n currentOption,\n handleOptionClick,\n vertical = false,\n\tnoSort = false,\n children,\n ...props\n}) => {\n const wrapperClasses = classNames(cl.wrapper, {\n [cl.vertical]: vertical\n });\n\n const isDataArray = Array.isArray(optionsArr);\n const existData = isDataArray ? optionsArr : Object.keys(optionsArr);\n\t\n\tlet sortedData = existData.slice(1);\n\tif (!noSort) {\n\t\tsortedData.sort((a,b) => a > b ? 1 : -1)\n\t}\n\tsortedData.unshift(existData[0])\n return (\n
      \n {sortedData.map((option, i, arr) => {\n const optionClasses = classNames(cl.option, {\n [cl.active]: option === currentOption,\n [cl.lastListItem]: children && arr.length === i + 1\n });\n\n const isStyles = isDataArray || optionsArr.option === null || option === currentOption;\n const itemStyles = isStyles ? null : { backgroundColor: getPitchColorByName(option) };\n return (\n
    • \n {option}\n
    • \n );\n })}\n {children &&
    • {children}
    • }\n
    \n );\n};\n\nexport default OptionsToggler;\n","import cl from './TimeDynamicCheckbox.module.scss';\nimport classNames from 'classnames';\nimport { getPitchColorByName, getPitchСlassColorByName } from 'utils';\n\nconst TimeDynamicCheckbox = ({\n optionsArr,\n availableOptions,\n handleOptionClick,\n vertical = false,\n classColor = false,\n children,\n ...props\n}) => {\n const wrapperClasses = classNames(cl.wrapper, {\n [cl.vertical]: vertical\n });\n\n const isDataArray = Array.isArray(optionsArr);\n const existData = isDataArray ? optionsArr : Object.keys(optionsArr);\n const filteredData = existData.filter(\n pitchType => availableOptions.includes(pitchType.name) || pitchType.name === 'All Pitches'\n );\n const sortedData = filteredData.slice(1).sort((a, b) => (a.name > b.name ? 1 : -1));\n sortedData.unshift(existData[0]);\n return (\n
      \n {sortedData.map((option, i, arr) => {\n const optionClasses = classNames(cl.option, {\n [cl.inActive]: !option.checked,\n [cl.lastListItem]: children && arr.length === i + 1,\n [cl.whiteColor]: option.name === 'All Pitches'\n });\n\n const itemStyles = {\n backgroundColor: !classColor\n ? getPitchColorByName(option.name)\n : getPitchСlassColorByName(option.name)\n };\n return (\n
    • \n {option.name}\n
    • \n );\n })}\n {children &&
    • {children}
    • }\n
    \n );\n};\n\nexport default TimeDynamicCheckbox;\n","import cl from './UpDownArrow.module.scss';\n\nconst UpDownArrow = ({ up, handleClick, ...props }) => {\n const path = up ? `M0,25L25,0L50,25` : `M0,0L25,25L50,0`;\n return (\n \n );\n};\n\nexport default UpDownArrow;\n","import cl from './GraphsHeader.module.scss';\nimport OptionsToggler from 'components/UI/togglers/OptionsToggler/OptionsToggler';\nimport classNames from 'classnames';\nimport TimeDynamicCheckbox from 'components/UI/checkboxes/TimeDynamicCheckbox/TimeDynamicCheckbox';\nimport UpDownArrow from 'components/UI/buttons/UpDownArrow/UpDownArrow';\n\nconst GraphsHeader = ({\n optionsArr,\n availableOptions,\n title,\n subTitle,\n currentOption,\n setCurrentOption,\n currentOption2 = null,\n setCurrentOption2 = null,\n currentOption3 = null,\n setCurrentOption3 = null,\n noSelector = false,\n graphsArrow = false,\n\tclassColor = false,\n ...props\n}) => {\n const optionsTogglerStyles = {\n position: 'absolute',\n right: '.4375rem',\n top: currentOption2 !== null ? '30%' : '50%',\n transform: currentOption2 !== null ? 'translateY(-55%)' : 'translateY(-50%)'\n };\n\n const optionsToggler2Styles = {\n position: 'absolute',\n right: '.4375rem',\n bottom: '30%',\n transform: 'translateY(55%)'\n };\n\n const handleOptionClick = option => () => setCurrentOption(option);\n const handleOption2Click = option => () => {\n setCurrentOption2(prev =>\n prev.map(curOption =>\n curOption.name === option.name ? { ...curOption, checked: !curOption.checked } : curOption\n )\n );\n };\n\n const handleArrowClick = () => {\n setCurrentOption3(prev => (prev === 'opened' ? 'closed' : 'opened'));\n };\n\n const titleClasses = classNames(cl.title, {\n [cl.highTitle]: currentOption2 !== null\n });\n return (\n
    \n

    {title}

    \n

    {subTitle}

    \n {graphsArrow && (\n \n )}\n {!noSelector && (\n \n )}\n {currentOption2 !== null && (\n \n )}\n
    \n );\n};\n\nexport default GraphsHeader;\n","import React from 'react';\nimport cl from './SortArrows.module.scss';\n\nconst SortArrows = ({ direction = 'asc', ...props }) => (\n \n \n \n \n \n \n \n \n);\n\nexport default SortArrows;\n","import { memo, useState } from 'react';\nimport cl from './BattersTable.module.scss';\nimport classNames from 'classnames';\nimport SortArrows from 'components/UI/icons/SortArrows/SortArrows';\n\nconst TableHeader = ({ activeColumn, handleHeaderClick }) => {\n const titlesArr = [\n { text: 'Batter name', clName: 'name', sortField: 'name' },\n { text: 'Hit number', clName: 'value', sortField: 'hitNumber' },\n { text: 'Hit angle', clName: 'value', sortField: 'angle' },\n { text: 'Exit velocity', clName: 'value', sortField: 'velocity' },\n { text: 'Distance', clName: 'value', sortField: 'distance' }\n ];\n\n return (\n
    \n {titlesArr.map(({ text, clName, sortField }, i) => {\n const isActiveCell = sortField === activeColumn.sortField;\n\n const cellClasses = classNames(cl[clName], cl.headerCell, {\n [cl.active]: isActiveCell\n });\n return (\n
    \n {text}\n {isActiveCell && (\n \n )}\n
    \n );\n })}\n
    \n );\n};\n\nconst TableCell = ({ row, cell: { clName, value, ending }, activeColumn }) => {\n const cellClasses = classNames(cl[clName], {\n [cl.active]: value === activeColumn.sortField\n });\n\n const formattedValue = clName === 'value' ? Math.round(row[value]) : row[value];\n return (\n
    \n {formattedValue}\n {ending}\n
    \n );\n};\n\nconst TableRow = ({ row, rowCells, activeColumn, handleRowClick }) => {\n return (\n
    \n {rowCells.map((cell, i) => (\n \n ))}\n
    \n );\n};\n\nconst BattersTable = ({ metrix }) => {\n const [activeColumn, setActiveColumn] = useState({ sortField: 'velocity', dir: 'desc' });\n\n const rowCells = [\n { clName: 'name', value: 'name', ending: '' },\n { clName: 'value', value: 'hitNumber', ending: '' },\n { clName: 'value', value: 'angle', ending: '°' },\n { clName: 'value', value: 'velocity', ending: ' mph' },\n { clName: 'value', value: 'distance', ending: ' m' }\n ];\n\n const battersArr = metrix.reduce((sum, { pitches_all, preview }) => {\n console.log(pitches_all);\n pitches_all\n .filter(({ hit_info }) => hit_info.angle)\n .forEach(\n ({ hit_info: { angle, 'exit velocity': velocity, distance }, pitch_info: { game_id, mom_id } }, i) =>\n sum.push({\n name: `${preview.batter_name} ${preview.batter_surname}`,\n hitNumber: i + 1,\n angle,\n velocity,\n distance,\n game_id,\n mom_id\n })\n );\n\n return sum;\n }, []);\n\n const handleHeaderClick = sortField => () =>\n setActiveColumn(prev => {\n if (prev.sortField === sortField) return { ...prev, dir: prev.dir === 'asc' ? 'desc' : 'asc' };\n return { ...prev, sortField };\n });\n\n battersArr.sort((a, b) => {\n if (activeColumn.dir === 'asc') return a[activeColumn.sortField] > b[activeColumn.sortField] ? 1 : -1;\n return a[activeColumn.sortField] > b[activeColumn.sortField] ? -1 : 1;\n });\n\n const handleRowClick = (gameId, momentId) => () => {\n window.open(`/game/${gameId}?card=${momentId}&tab=hitting`, '_blank');\n };\n\n console.log(battersArr);\n return (\n
    \n \n {battersArr.map((row, i) => (\n \n ))}\n
    \n );\n};\n\nexport default memo(BattersTable);\n","const HorizontalRows = ({ PARAMS }) => {\n const rowsArr = new Array(PARAMS.ROWS_NUMBER).fill(null);\n const rowsDelta = PARAMS.GRAPH_HEIGHT / (PARAMS.ROWS_NUMBER - 1);\n\n return (\n <>\n {rowsArr.map((_, i) => (\n \n ))}\n \n );\n};\n\nexport default HorizontalRows;\n","import { leftValue } from './PitchersReleaseSpeeds.module.scss';\n\nconst LeftValues = ({ PARAMS, minMaxValues }) => {\n const minMaxDelta = minMaxValues.max - minMaxValues.min;\n\n const valueStep = minMaxDelta / (PARAMS.ROWS_NUMBER - 1);\n\n const leftValues = [];\n for (let i = 0; i < PARAMS.ROWS_NUMBER; i++) {\n if (i === 0) {\n leftValues.push(Math.round(minMaxValues.max));\n continue;\n }\n\n if (i === PARAMS.ROWS_NUMBER - 1) {\n leftValues.push(Math.round(minMaxValues.min));\n continue;\n }\n\n leftValues.push(Math.round(minMaxValues.max - valueStep * i));\n }\n\n const rowStep = PARAMS.GRAPH_HEIGHT / (PARAMS.ROWS_NUMBER - 1);\n return (\n <>\n {leftValues.map((value, i) => (\n \n {value}\n \n ))}\n \n );\n};\n\nexport default LeftValues;\n","import { Fragment } from 'react';\nimport { leftValue } from './PitchersReleaseSpeeds.module.scss';\n\nconst VerticalPitcherRowsAndTitles = ({ PARAMS, linesArr, totalPitchesCount, pitchDeltaWidth }) => {\n return (\n <>\n {linesArr.map((lineData, i, arr) => {\n const xCoord = PARAMS.LEFT_PADDING + pitchDeltaWidth * lineData.accum;\n\n // Top Y coord calc\n let topYCoord = 0;\n if (i === 0 || lineData.count / totalPitchesCount >= 0.14) topYCoord = PARAMS.TOP_PADDING - 45;\n if (\n i !== 0 &&\n lineData.count / totalPitchesCount < 0.14 &&\n arr[i - 1].count / totalPitchesCount >= 0.14\n )\n topYCoord = PARAMS.TOP_PADDING - 70;\n if (\n i !== 0 &&\n lineData.count / totalPitchesCount < 0.14 &&\n arr[i - 1].count / totalPitchesCount < 0.14\n )\n topYCoord = PARAMS.TOP_PADDING - 95;\n return (\n \n \n {lineData.pitcherName}\n \n \n \n );\n })}\n \n );\n};\n\nexport default VerticalPitcherRowsAndTitles;\n","import { Fragment, useState } from 'react';\nimport { getPitchColorByName } from 'utils';\nimport { showingGroup, plainText, dot } from './PitchersReleaseSpeeds.module.scss';\n\nconst Dots = ({ PARAMS, linesArr, minMaxValues, pitchDeltaWidth }) => {\n const [hoveredDot, setHoveredDot] = useState({ visible: false, speed: 0, coords: [0, 0] });\n\n const handleDotClick = (gameId, momentId) => () => {\n window.open(`/game/${gameId}?card=${momentId}&tab=pitching`, '_blank');\n };\n\n const minMaxSpeedDelta = minMaxValues.max - minMaxValues.min;\n const heightPerValue = PARAMS.GRAPH_HEIGHT / minMaxSpeedDelta;\n\n const zeroYCoord = PARAMS.TOP_PADDING + PARAMS.GRAPH_HEIGHT;\n\n const speedValue = +(hoveredDot.speed * 10).toFixed(0) / 10;\n\n const hoveredDotXCoord =\n hoveredDot.coords[0] <= PARAMS.GRAPH_WIDTH ? hoveredDot.coords[0] : hoveredDot.coords[0] - 65;\n const hoveredDotYCoord = hoveredDot.coords[1] > 40 ? hoveredDot.coords[1] - 5 : hoveredDot.coords[1] + 75;\n return (\n <>\n {linesArr.map((pitcherData, i) => {\n const { pitchTypes } = pitcherData;\n return (\n \n {pitcherData.pitches.map((pitch, j, arr) => {\n let xCoord = PARAMS.LEFT_PADDING + pitchDeltaWidth * (j + 1);\n if (i > 0) xCoord += pitchDeltaWidth * (pitcherData.accum - arr.length);\n\n const yCoord = zeroYCoord - heightPerValue * (pitch.speed - minMaxValues.min);\n return (\n \n setHoveredDot(prev => ({\n ...prev,\n speed: pitch.speed,\n visible: true,\n coords: [xCoord, yCoord],\n pitchType: pitchTypes[pitch.pitchType]\n }))\n }\n onPointerOut={() => setHoveredDot(prev => ({ ...prev, visible: false }))}\n />\n );\n })}\n \n );\n })}\n {hoveredDot.visible && (\n \n \n \n {hoveredDot.pitchType}\n \n \n {speedValue} mph\n \n \n )}\n \n );\n};\n\nexport default Dots;\n","import React from 'react';\nimport ListDot from 'components/UI/icons/ListDot/ListDot';\nimport cl from './Legend.module.scss';\nimport { getPitchColorByName } from 'utils';\n\nconst LegendItem = ({ title }) => (\n
  • \n \n {title}\n
  • \n);\n\nexport default LegendItem;\n","import React from 'react';\nimport cl from './Legend.module.scss';\nimport LegendItem from './LegendItem';\n\nconst Legend = ({ legendData = [] }) => (\n
      \n {legendData.map((item, i) => (\n \n ))}\n
    \n);\n\nexport default Legend;\n","import { useEffect, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nconst useScrollingArrows = () => {\n const [isLeftArrow, setIsLeftArrow] = useState(false);\n const [isRightArrow, setIsRightArrow] = useState(false);\n\n const innerWrapperRef = useRef(null);\n\n\tconst mobileOrientation = useSelector(s => s.shared.mobileOrientation)\n\n useEffect(() => {\n if (innerWrapperRef.current === null) return;\n\n setIsLeftArrow(innerWrapperRef.current.scrollLeft <= 0 ? false : true);\n setIsRightArrow(\n innerWrapperRef.current.scrollLeft + innerWrapperRef.current.clientWidth <\n innerWrapperRef.current.scrollWidth\n ? true\n : false\n );\n }, [mobileOrientation]);\n\n const horizontalScrollHandler = e => {\n setIsLeftArrow(e.target.scrollLeft <= 0 ? false : true);\n setIsRightArrow(e.target.scrollLeft + e.target.clientWidth < e.target.scrollWidth ? true : false);\n };\n\n return [isLeftArrow, isRightArrow, innerWrapperRef, horizontalScrollHandler];\n};\n\nexport default useScrollingArrows;\n","import useScrollingArrows from 'hooks/useScrollingArrows';\nimport cl from './MobileScrollingWrapper.module.scss';\nimport classNames from 'classnames';\nimport Arrow from 'components/UI/buttons/Arrow/Arrow';\n\nconst MobileScrollingWrapper = ({ className = null, children, ...props }) => {\n const [isLeftArrow, isRightArrow, innerWrapperRef, horizontalScrollHandler] = useScrollingArrows();\n\n const leftArrowClasses = classNames(cl.arrowBtn, cl.leftArrowBtn);\n const rightArrowClasses = classNames(cl.arrowBtn, cl.rightArrowBtn);\n\n const isFooter = Array.isArray(children);\n return (\n
    \n {isLeftArrow && }\n
    \n {isFooter ? children[0] : children}\n
    \n {isRightArrow && }\n {isFooter && children[1]}\n
    \n );\n};\n\nexport default MobileScrollingWrapper;\n","import cl from './PitchersReleaseSpeeds.module.scss';\nimport HorizontalRows from './HorizontalRows';\nimport { memo } from 'react';\nimport LeftValues from './LeftValues';\nimport VerticalPitcherRowsAndTitles from './VerticalPitcherRowsAndTitles';\nimport Dots from './Dots';\nimport Legend from './Legend/Legend';\nimport MobileScrollingWrapper from 'components/PlayerStats/MobileScrollingWrapper/MobileScrollingWrapper';\n\nconst PARAMS = {\n WRAPPER_WIDTH: 1248,\n WRAPPER_HEIGHT: 330,\n LEFT_PADDING: 99,\n TOP_PADDING: 139,\n GRAPH_HEIGHT: 102,\n GRAPH_WIDTH: 1131,\n ROWS_NUMBER: 4,\n MIN_MAX_VALUES_GAP: 1\n};\n\nconst PitchersReleaseSpeeds = ({ metrix }) => {\n // Default data\n const addedData = metrix.reduce((sum, { preview, pitches_all }) => {\n const pitcherData = {};\n pitcherData.pitcherName = `${preview.pitcher_name} ${preview.pitcher_surname}`;\n pitcherData.pitches = pitches_all.reduce(\n (pitchesSum, { pitch_info: { pitch_type: pitchType, speed, mom_id, game_id } }) => {\n const pitch = { pitchType, speed: speed * 2.24, mom_id, game_id };\n pitchesSum.push(pitch);\n\n return pitchesSum;\n },\n []\n );\n pitcherData.pitchTypes = preview.pitch_types;\n\n sum.push(pitcherData);\n\n return sum;\n }, []);\n\n // Min & max values calculating\n const minMaxValues = addedData.reduce((sum, pitcherData) => {\n const speedsArr = pitcherData.pitches.map(({ speed }) => speed);\n\n const minSpeed = Math.min(...speedsArr);\n const maxSpeed = Math.max(...speedsArr);\n\n if (!sum.min || minSpeed < sum.min) sum.min = minSpeed;\n if (!sum.max || maxSpeed > sum.max) sum.max = maxSpeed;\n\n return sum;\n }, {});\n\n minMaxValues.min -= PARAMS.MIN_MAX_VALUES_GAP;\n minMaxValues.max += PARAMS.MIN_MAX_VALUES_GAP;\n\n // Lines and balls calc\n const linesArr = addedData.reduce((sum, pitcherData, i) => {\n const lineData = {\n pitcherName: pitcherData.pitcherName,\n count: pitcherData.pitches.length,\n accum: (sum[i - 1]?.accum ?? 0) + pitcherData.pitches.length,\n pitches: pitcherData.pitches,\n pitchTypes: pitcherData.pitchTypes\n };\n\n sum.push(lineData);\n return sum;\n }, []);\n\n const totalPitchesCount = addedData.reduce((sum, pitcherData) => sum + pitcherData.pitches.length, 0);\n const pitchDeltaWidth = PARAMS.GRAPH_WIDTH / totalPitchesCount;\n\n const legendPitchTypes = Array.from(\n new Set(metrix.map(pitcher => pitcher.preview.pitch_types).reduce((sum, arr) => sum.concat(arr), []))\n );\n\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default memo(PitchersReleaseSpeeds);\n","import React, { Fragment } from 'react';\nimport { getPitchColorByName } from 'utils';\nimport cl from './FrequencySpeedGraph.module.scss';\n\nconst PARAMS = {\n GRAPH_WIDTH: 480,\n GRAPH_HEIGHT: 364,\n LEFT_VERTICAL_GRID_LINES_NUMBER: 5,\n RIGHT_VERTICAL_GRID_LINES_NUMBER: 5,\n VERTICAL_GRID_LINES_TOP: 0,\n VERTICAL_GRID_LINES_LEFT: 45,\n VERTICAL_GRID_LINES_HEIGHT: 300,\n GRAPH_ROWS_HEIGHT: 22,\n BETWEEN_ROWS_HEIGHT: 28\n};\n\nconst Rows = ({ maxSpeedLineValue, minSpeedLineValue, relValuesData, totalPitches }) => (\n <>\n {/* Rows rendering */}\n {Object.entries(relValuesData)\n .sort((a, b) => (a[1].count > b[1].count ? -1 : 1))\n .map((measure, i, thisArr) => {\n const yCoord =\n PARAMS.ZERO_COORDS.Y -\n PARAMS.GRAPH_ROWS_HEIGHT / 2 -\n (thisArr.length - (i + 1)) * (PARAMS.BETWEEN_ROWS_HEIGHT + PARAMS.GRAPH_ROWS_HEIGHT) +\n (PARAMS.BETWEEN_ROWS_HEIGHT / 2 + PARAMS.GRAPH_ROWS_HEIGHT / 2) * (thisArr.length - 1);\n\n const leftSideWidth = PARAMS.LEFT_VERTICAL_GRID_LINES_STEP * PARAMS.LEFT_VERTICAL_GRID_LINES_NUMBER;\n const leftEdgeLine = PARAMS.ZERO_COORDS.X - leftSideWidth;\n const leftValueCoef = leftSideWidth / 100;\n\n const rightSideWidth =\n PARAMS.RIGHT_VERTICAL_GRID_LINES_STEP * (PARAMS.RIGHT_VERTICAL_GRID_LINES_NUMBER - 1);\n const rightEdgeLine = PARAMS.ZERO_COORDS.X + rightSideWidth + PARAMS.RIGHT_VERTICAL_GRID_LINES_STEP;\n const rightValueCoef = rightSideWidth / (maxSpeedLineValue - minSpeedLineValue);\n const rightFirstLine = PARAMS.ZERO_COORDS.X + PARAMS.RIGHT_VERTICAL_GRID_LINES_STEP;\n\n const measureFrequency = (measure[1].count * 100) / totalPitches;\n const minSpeed = measure[1].avgSpeed - measure[1].skoSpeed;\n const maxSpeed = measure[1].avgSpeed + measure[1].skoSpeed;\n return (\n \n {/* Left chart row */}\n {/* Row background */}\n \n {/* Row body */}\n \n {/* Row value */}\n \n {+measureFrequency.toFixed(2) + '%'}\n \n {/* Row title */}\n \n {`${measure[0]} (${measure[1].count} / ${totalPitches} pitches)`}\n \n {/* Right chart row */}\n {/* Horizontal grid line */}\n \n {/* Row title */}\n \n {+((minSpeed + maxSpeed) / 2).toFixed(2)}\n \n {/* Row body */}\n \n {/* Vertical slice line */}\n \n \n );\n })}\n \n);\n\nconst FrequencySpeedGraph = ({ data, relValuesData, ...props }) => {\n PARAMS.LEFT_VERTICAL_GRID_LINES_STEP = 255 / PARAMS.LEFT_VERTICAL_GRID_LINES_NUMBER;\n PARAMS.RIGHT_VERTICAL_GRID_LINES_STEP = 185 / PARAMS.RIGHT_VERTICAL_GRID_LINES_NUMBER;\n PARAMS.ZERO_COORDS = { X: PARAMS.VERTICAL_GRID_LINES_LEFT + 230, Y: PARAMS.VERTICAL_GRID_LINES_TOP + 155 };\n\n for (let pitchName in relValuesData) {\n const { speeds, count } = relValuesData[pitchName];\n\n // Avg speed\n const avgSpeed = speeds.reduce((sum, curSpeed) => sum + curSpeed, 0) / speeds.length;\n relValuesData[pitchName].avgSpeed = avgSpeed;\n\n // Sko speed\n const sumDiffSpeeds = speeds.reduce((sum, curSpeed) => sum + (curSpeed - avgSpeed) ** 2, 0);\n const sumDiffSpeedsAvg = sumDiffSpeeds / count;\n const skoSpeed = Math.sqrt(sumDiffSpeedsAvg);\n relValuesData[pitchName].skoSpeed = skoSpeed;\n }\n\n const minMaxSpeeds = data.reduce(\n (sum, pitch, index) => {\n const { speed } = pitch.pitch_info;\n const mphSpeed = speed * 2.24;\n\n if (index === 0) {\n sum.minSpeed = mphSpeed;\n sum.maxSpeed = mphSpeed;\n\n return sum;\n }\n\n if (mphSpeed < sum.minSpeed) sum.minSpeed = mphSpeed;\n if (mphSpeed > sum.maxSpeed) sum.maxSpeed = mphSpeed;\n\n return sum;\n },\n { minSpeed: 0, maxSpeed: 0 }\n );\n\n const { minSpeed, maxSpeed } = minMaxSpeeds;\n\n const maxFrequencyLineValue = 100;\n\n const minSpeedLineValue = Math.ceil(minSpeed / 10 - 1) * 10;\n const maxSpeedLineValue = Math.ceil(maxSpeed / 10 + 0) * 10;\n\n const bottomLeftNumbers = [];\n for (let i = 1; i <= PARAMS.LEFT_VERTICAL_GRID_LINES_NUMBER; i++) {\n bottomLeftNumbers.push(((maxFrequencyLineValue / PARAMS.LEFT_VERTICAL_GRID_LINES_NUMBER) * i).toFixed(0));\n }\n const bottomRightNumbers = [];\n for (let i = 0; i < PARAMS.RIGHT_VERTICAL_GRID_LINES_NUMBER; i++) {\n bottomRightNumbers.push(\n Math.round(\n minSpeedLineValue +\n ((maxSpeedLineValue - minSpeedLineValue) / (PARAMS.RIGHT_VERTICAL_GRID_LINES_NUMBER - 1)) * i\n )\n );\n }\n\n return (\n \n {/* Main layout rendering */}\n {/* Vertical center grid line */}\n \n {/* Left side */}\n {bottomLeftNumbers.map((number, i) => (\n \n {/* Left vertical line */}\n \n {/* Bottom-left number */}\n \n {number}\n \n \n ))}\n\n {/* Left side title */}\n \n Pitch Type, %\n \n {/* Right side */}\n {bottomRightNumbers.map((number, i) => (\n \n {/* Right vertical line */}\n \n {/* Bottom-right number (only odd numbers rendered) */}\n {i < 4 && (\n \n {number}\n \n )}\n \n ))}\n\n {/* Right side title */}\n \n Speed, mph\n \n\n \n \n );\n};\n\nexport default FrequencySpeedGraph;\n","import { showingGroup } from './FieldGraph.module.scss';\n\nconst Tooltip = ({ hoveredDot }) => {\n const spinValueX = Math.round(hoveredDot.spinX);\n const spinValueY = Math.round(hoveredDot.spinY);\n\n const hoveredDotXCoord = hoveredDot.coords[0] <= 300 ? hoveredDot.coords[0] : hoveredDot.coords[0] - 65;\n const hoveredDotYCoord = hoveredDot.coords[1] > 50 ? hoveredDot.coords[1] : hoveredDot.coords[1] + 75;\n return (\n \n \n \n {hoveredDot.pitchType}\n \n \n dx: {spinValueX} dy: {spinValueY}\n \n \n );\n};\n\nexport default Tooltip;\n","import { Fragment, useState, useRef, useEffect } from 'react';\nimport OptionsToggler from 'components/UI/togglers/OptionsToggler/OptionsToggler';\nimport SimpleToggler from 'components/UI/togglers/SimpleToggler/SimpleToggler';\nimport cl from './FieldGraph.module.scss';\nimport { getPitchColorByName } from 'utils';\nimport Tooltip from './Tooltip';\n\nconst PARAMS = {\n GRAPH_WIDTH: 455,\n GRAPH_HEIGHT: 330,\n VERTICAL_COLUMNS_NUM: 12,\n HORIZONTAL_ROWS_NUM: 6\n};\n\nconst Dots = ({ arrData, pitchTypes, coords, linesCoords, setHoveredDot }) => {\n const { xCoordRelCoef, zeroXCoord } = coords;\n const { yZeroBreakCoef, zeroYBreakLine } = linesCoords;\n\n const handleDotClick = (gameId, momentId) => () => {\n window.open(`/game/${gameId}?card=${momentId}&tab=pitching`, '_blank');\n };\n return (\n <>\n {arrData.map((pitch, i) => {\n const { break: breakCoords, pitch_info: pitchInfo } = pitch;\n const { break_x: x, break_y: y } = breakCoords;\n const { pitch_type: pitchType, game_id: gameId, mom_id: momentId } = pitchInfo;\n\n const xCoord = zeroXCoord + x * xCoordRelCoef;\n const yCoord = y === 0 ? zeroYBreakLine : zeroYBreakLine + y * 100 * yZeroBreakCoef;\n return (\n \n setHoveredDot(prev => ({\n ...prev,\n spinX: x * 100,\n spinY: y * -100,\n visible: true,\n coords: [xCoord, yCoord],\n pitchType: pitchTypes[pitchType]\n }))\n }\n onPointerOut={() => setHoveredDot(prev => ({ ...prev, visible: false }))}\n />\n );\n })}\n \n );\n};\nconst EllipsedDots = ({\n avgCoords,\n pitchTypes,\n coords,\n relValuesData,\n totalPitches,\n linesCoords,\n arrData\n}) => {\n const { xCoordRelCoef, zeroXCoord } = coords;\n const { yZeroBreakCoef, zeroYBreakLine } = linesCoords;\n\n return (\n <>\n {Object.entries(avgCoords).map(([pitchType, data], i) => {\n const xCoord = zeroXCoord + data.avgBreakX * xCoordRelCoef;\n const yCoord =\n data.avgBreakY === 0 ? zeroYBreakLine : zeroYBreakLine + data.avgBreakY * 100 * yZeroBreakCoef;\n\n const circleColor = getPitchColorByName(pitchTypes[pitchType]);\n const opacityValue =\n 0.5 + ((relValuesData[pitchTypes[pitchType]].count * 100) / totalPitches / 100) * 0.5;\n\n const filteredArrData = arrData.filter(pitch => pitch.pitch_info.pitch_type === +pitchType);\n\n const sumDiffBreaks = filteredArrData.reduce(\n (sum, { break: breakValues }) => {\n const x = sum.x + (breakValues.break_x - data.avgBreakX) ** 2;\n const y = sum.y + (breakValues.break_y - data.avgBreakY) ** 2;\n\n return { x, y };\n },\n {\n x: 0,\n y: 0\n }\n );\n const sumDiffBreaksAvg = { x: sumDiffBreaks.x / data.count, y: sumDiffBreaks.y / data.count };\n const skoBreaks = { x: Math.sqrt(sumDiffBreaksAvg.x), y: Math.sqrt(sumDiffBreaksAvg.y) };\n return (\n \n \n \n \n );\n })}\n \n );\n};\n\nconst Frames = ({\n avgCoords,\n arrData,\n preview,\n isDots,\n relValuesData,\n coords,\n linesCoords,\n setHoveredDot\n}) => {\n const { zone, pitch_types: pitchTypes } = preview || {};\n const {\n y_strike_down: yStrikeDown,\n x_strike_up: yStrikeUp,\n x_strike_left: xStrikeLeft,\n x_strike_right: xStrikeRight,\n shadow_border: shadowBorder\n } = zone || {};\n\n let totalPitches = arrData.length;\n const { xCoordRelCoef, yCoordAbsCoef, yCoordRelCoef, zeroXCoord, zeroYCoord } = coords;\n\n // Dashed frame params\n const dashedFrameX = zeroXCoord + xCoordRelCoef * xStrikeLeft;\n const dashedFrameWidth = zeroXCoord + xCoordRelCoef * xStrikeRight - dashedFrameX;\n const dashedFrameY = zeroYCoord - yStrikeUp * yCoordRelCoef + yCoordAbsCoef;\n const dashedFrameHeight = zeroYCoord - yStrikeDown * yCoordRelCoef + yCoordAbsCoef - dashedFrameY;\n\n return (\n \n {/* Frames */}\n {/* Wrapper frame */}\n {/* */}\n\n {/* Outer frame */}\n {/* */}\n\n {/* Inner frame */}\n \n\n {/* Dots */}\n {isDots && (\n \n )}\n {/* Ellipsed Dots */}\n {!isDots && (\n \n )}\n\n {/* Dashed frame */}\n \n\n {/* Title */}\n {/* \n {`${title1} (${totalPitches})`}\n */}\n \n );\n};\n\nconst VerticalGridLines = ({ linesCoords }) => {\n const { GRAPH_WIDTH: graphWidth, GRAPH_HEIGHT: graphHeight, VERTICAL_COLUMNS_NUM: columnsNumber } = PARAMS;\n const columnWidth = 30;\n // const columnWidth = graphWidth / columnsNumber;\n\n const { rightBorderValue } = linesCoords;\n\n const centerLineX = graphWidth / 2;\n const xCoordPerLine = (graphWidth / 2 / rightBorderValue) * columnWidth;\n return (\n <>\n {/* Center Line */}\n \n \n 0\n \n\n {/* Left Lines */}\n {new Array(columnsNumber / 2).fill(null).map((_, i, arr) => {\n const colText = (i + 1) * -30;\n const colXCoord = centerLineX - (i + 1) * xCoordPerLine;\n const isBottomTextTitle = colXCoord > 0;\n\n return (\n \n \n {isBottomTextTitle && (\n \n {colText}\n \n )}\n \n );\n })}\n\n {/* Right Lines */}\n {new Array(columnsNumber / 2).fill(null).map((_, i, arr) => {\n const colText = (i + 1) * 30;\n const colXCoord = centerLineX + (i + 1) * xCoordPerLine;\n const isBottomTextTitle = colXCoord < graphWidth;\n\n return (\n \n \n {isBottomTextTitle && (\n \n {colText}\n \n )}\n \n );\n })}\n \n );\n};\n\nconst HorizontalGridLines = ({ linesCoords }) => {\n const { GRAPH_WIDTH: graphWidth, GRAPH_HEIGHT: graphHeight, HORIZONTAL_ROWS_NUM: rowsNumber } = PARAMS;\n const rowHeight = 30;\n // const rowHeight = graphHeight / rowsNumber;\n\n const { topBorderValue, bottomBorderValue } = linesCoords;\n\n const centerLineY = graphHeight / 2;\n const centerLineValue = Math.round((bottomBorderValue + topBorderValue) / 2);\n const yCoordPerLine = (graphHeight / 2 / ((bottomBorderValue - topBorderValue) / 2)) * rowHeight;\n return (\n <>\n {/* Center Line */}\n \n \n {-centerLineValue}\n \n\n {/* Top Lines */}\n {new Array(rowsNumber / 2).fill(null).map((_, i, arr) => {\n const rowText = -(centerLineValue + (i + 1) * 30);\n const rowYCoord = centerLineY + yCoordPerLine * (i + 1);\n const isLeftTextTitle = rowYCoord >= 0;\n\n return (\n \n \n {isLeftTextTitle && (\n \n {rowText}\n \n )}\n \n );\n })}\n\n {/* Bottom Lines */}\n {new Array(rowsNumber / 2).fill(null).map((_, i, arr) => {\n const rowText = -(centerLineValue - (i + 1) * 30);\n const rowYCoord = centerLineY - yCoordPerLine * (i + 1);\n const isLeftTextTitle = rowYCoord + 25 < graphHeight;\n\n return (\n \n \n {isLeftTextTitle && (\n \n {rowText}\n \n )}\n \n );\n })}\n\n {/* top Y field line */}\n {/* \n \n Top {Math.floor(minMaxAvgBreak.maxY * 100)}\n */}\n\n {/* center Y field line */}\n {/* \n \n Center {Math.floor((minMaxAvgBreak.minY + avgDelta.y / 2) * 100)}\n */}\n\n {/* bottom Y field line */}\n {/* \n \n Bottom {bottomYFieldValue}\n */}\n \n );\n};\n\nconst FieldGraph = ({\n filteredData,\n relValuesData,\n preview,\n optionsArr,\n currentOption,\n setCurrentOption,\n ...props\n}) => {\n const [isChecked, setChecked] = useState(false);\n const [isGraphVisible, setGraphVisibility] = useState(false);\n const [hoveredDot, setHoveredDot] = useState({ visible: false, spinX: 0, spinY: 0, coords: [0, 0] });\n\n const graphRef = useRef();\n\n useEffect(() => {\n let options = {\n root: null,\n rootMargin: '300px 0px',\n threshold: 0\n };\n\n let observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n setGraphVisibility(true);\n } else {\n setGraphVisibility(false);\n }\n });\n }, options);\n observer.observe(graphRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const optionsTogglerStyles = {\n position: 'absolute',\n right: '.4375rem',\n top: '.4375rem'\n };\n\n const handleOptionClick = option => () => setCurrentOption(option);\n const handleTogglerChange = () => setChecked(prev => !prev);\n\n const isDots = currentOption === 'All Pitches';\n\n const { zone } = preview;\n\n const zeroYCoord = PARAMS.GRAPH_HEIGHT * 0.88;\n const yCoordRelCoef = 160;\n const yCoordAbsCoef = 0;\n const zeroXCoord = PARAMS.GRAPH_WIDTH * 0.5;\n const xCoordRelCoef = 160;\n\n const coords = { xCoordRelCoef, yCoordAbsCoef, yCoordRelCoef, zeroXCoord, zeroYCoord };\n\n const avgCoords = filteredData.reduce((sum, { pitch_info: pitchInfo, coordinates, break: breakValues }) => {\n if (sum[pitchInfo.pitch_type] === undefined) {\n sum[pitchInfo.pitch_type] = { sumX: 0, sumY: 0, count: 0, sumBreakX: 0, sumBreakY: 0 };\n }\n\n sum[pitchInfo.pitch_type].sumX += coordinates.zone_x;\n sum[pitchInfo.pitch_type].sumY += coordinates.zone_y;\n sum[pitchInfo.pitch_type].count++;\n sum[pitchInfo.pitch_type].avgX = sum[pitchInfo.pitch_type].sumX / sum[pitchInfo.pitch_type].count;\n sum[pitchInfo.pitch_type].avgY = sum[pitchInfo.pitch_type].sumY / sum[pitchInfo.pitch_type].count;\n sum[pitchInfo.pitch_type].sumBreakX += breakValues.break_x;\n sum[pitchInfo.pitch_type].sumBreakY += breakValues.break_y;\n sum[pitchInfo.pitch_type].avgBreakX =\n sum[pitchInfo.pitch_type].sumBreakX / sum[pitchInfo.pitch_type].count;\n sum[pitchInfo.pitch_type].avgBreakY =\n sum[pitchInfo.pitch_type].sumBreakY / sum[pitchInfo.pitch_type].count;\n\n return sum;\n }, {});\n\n const minMaxAvgBreak = Object.values(avgCoords).reduce((sum, value) => {\n if (sum.minX === undefined) {\n sum.minX = value.avgBreakX;\n sum.maxX = value.avgBreakX;\n sum.minY = value.avgBreakY;\n sum.maxY = value.avgBreakY;\n\n return sum;\n }\n\n if (value.avgBreakX < sum.minX) sum.minX = value.avgBreakX;\n if (value.avgBreakX > sum.maxX) sum.maxX = value.avgBreakX;\n if (value.avgBreakY < sum.minY) sum.minY = value.avgBreakY;\n if (value.avgBreakY > sum.maxY) sum.maxY = value.avgBreakY;\n\n return sum;\n }, {});\n\n const avgDelta = {\n x: minMaxAvgBreak.maxX - minMaxAvgBreak.minX,\n y: minMaxAvgBreak.maxY - minMaxAvgBreak.minY\n };\n\n const totalPitches = filteredData.length;\n\n const centerYFieldLine =\n zeroYCoord - ((zone?.x_strike_up ?? 0 + zone?.y_strike_down ?? 0) / 2) * yCoordRelCoef + yCoordAbsCoef;\n\n const topFieldLine = centerYFieldLine - (avgDelta.y / 2) * yCoordRelCoef;\n const bottomYFieldLine = centerYFieldLine + (avgDelta.y / 2) * yCoordRelCoef;\n\n const centerFieldValue = Math.floor((minMaxAvgBreak.minY + avgDelta.y / 2) * 100);\n const bottomYFieldValue = Math.floor(minMaxAvgBreak.minY * 100);\n\n const valuesCoef = 1.6;\n // const valuesCoef = ((avgDelta.y / 2) * yCoordRelCoef) / ((avgDelta.y / 2) * 100);\n\n // console.log(valuesCoef);\n\n const topBorderValue = centerFieldValue + centerYFieldLine / valuesCoef;\n const bottomBorderValue = centerFieldValue - (PARAMS.GRAPH_HEIGHT - centerYFieldLine) / valuesCoef;\n\n const halfGraphWidth = PARAMS.GRAPH_WIDTH / 2;\n const leftBorderValue = (-halfGraphWidth / xCoordRelCoef) * 100;\n const rightBorderValue = (halfGraphWidth / xCoordRelCoef) * 100;\n\n const yZeroBreakCoef = PARAMS.GRAPH_HEIGHT / (bottomBorderValue - topBorderValue);\n const zeroYBreakLine = -topBorderValue * yZeroBreakCoef;\n\n const linesCoords = {\n topFieldLine,\n minMaxAvgBreak,\n avgDelta,\n centerYFieldLine,\n bottomYFieldLine,\n bottomYFieldValue,\n topBorderValue,\n bottomBorderValue,\n leftBorderValue,\n rightBorderValue,\n yZeroBreakCoef,\n zeroYBreakLine\n };\n return (\n
    \n
    \n \n {isGraphVisible && (\n <>\n \n {filteredData.length > 0 && (\n <>\n \n \n \n )}\n {hoveredDot.visible && }\n \n )}\n \n \n Gravity\n \n \n
    \n {/* Bottom wrapper title */}\n

    Horizontal break, cm

    \n {/* Left wrapper title */}\n

    Downward Vertical Break, cm

    \n
    \n );\n};\n\nexport default FieldGraph;\n","import FrequencySpeedGraph from './FrequencySpeedGraph/FrequencySpeedGraph';\nimport FieldGraph from './FieldGraph/FieldGraph';\n\nconst PitchesSpeedField = ({ filteredData = [], preview = {}, relValuesData = {}, ...props }) => {\n return (\n <>\n \n \n \n );\n};\n\nexport default PitchesSpeedField;\n","import { showingGroup } from './TwinPitchesGraph.module.scss';\n\nconst Tooltip = ({ hoveredDot, isType = true }) => {\n const speedValue = +hoveredDot.speed.toFixed(2) + ' mph';\n\n const hoveredDotXCoord =\n hoveredDot.coords[0] <= 75\n ? hoveredDot.coords[0] + 80\n : hoveredDot.coords[0] <= 220\n ? hoveredDot.coords[0]\n : hoveredDot.coords[0] - 65;\n const hoveredDotYCoord = hoveredDot.coords[1] > 50 ? hoveredDot.coords[1] : hoveredDot.coords[1] + 75;\n let rectY = hoveredDotYCoord - 50;\n let rectHeight = 35;\n const rectWidth = 138;\n const rectX = hoveredDotXCoord - rectWidth / 2;\n\n if (!isType) {\n rectY += 16;\n rectHeight -= 16;\n }\n return (\n \n \n {isType && (\n \n {hoveredDot.pitchType}\n \n )}\n \n Speed: {speedValue}\n \n \n );\n};\n\nexport default Tooltip;\n","import { useRef, useLayoutEffect, useEffect, useState, Fragment } from 'react';\nimport cl from './TwinPitchesGraph.module.scss';\nimport { getPitchColorByName } from 'utils';\nimport Tooltip from './Tooltip';\nimport SubTitle from './SubTitle';\n// import h337 from 'heatmap.js';\n\nconst PARAMS = {\n GRAPH_WIDTH: 294,\n GRAPH_HEIGHT: 388,\n SIDE_PADDING: 30\n};\n\nconst Dots = ({ arrData, pitchTypes, coords, setHoveredDot }) => {\n const handleDotClick = (gameId, momentId) => () => {\n window.open(`/game/${gameId}?card=${momentId}&tab=pitching`, '_blank');\n };\n return (\n <>\n {arrData.map((pitch, i) => {\n const { coordinates, pitch_info: pitchInfo } = pitch;\n const { zone_x: x, zone_y: y } = coordinates;\n const { pitch_type: pitchType, game_id: gameId, mom_id: momentId, speed } = pitchInfo;\n\n const { xCoordRelCoef, yCoordAbsCoef, yCoordRelCoef, zeroXCoord, zeroYCoord } = coords;\n\n const xCoord = zeroXCoord + x * xCoordRelCoef;\n const yCoord = y === 0 ? zeroYCoord : zeroYCoord - y * yCoordRelCoef + yCoordAbsCoef;\n return (\n \n setHoveredDot(prev => ({\n ...prev,\n speed: speed * 2.24,\n visible: true,\n coords: [xCoord, yCoord],\n pitchType: pitchTypes[pitchType]\n }))\n }\n onPointerOut={() => setHoveredDot(prev => ({ ...prev, visible: false }))}\n />\n );\n })}\n \n );\n};\n\nconst HeatAreas = ({ arrData, coords }) => {\n const { zeroXCoord, zeroYCoord, xCoordRelCoef, yCoordAbsCoef, yCoordRelCoef } = coords;\n const heatRowsCount = 35;\n const heatColsCount = 32;\n const rowHeight = PARAMS.GRAPH_HEIGHT / heatRowsCount;\n const colWidth = PARAMS.GRAPH_WIDTH / heatColsCount;\n\n // now generate some random data\n let maxValue = 0;\n\n const dotsCoords = arrData.reduce((sum, pitch) => {\n const { coordinates, pitch_info: pitchInfo } = pitch;\n const { zone_x: x, zone_y: y } = coordinates;\n\n const xCoord = zeroXCoord + x * xCoordRelCoef;\n const yCoord = y === 0 ? zeroYCoord : zeroYCoord - y * yCoordRelCoef + yCoordAbsCoef;\n\n const rowNumber = Math.floor(yCoord / rowHeight);\n const colNumber = Math.floor(xCoord / colWidth);\n\n if (!sum[rowNumber]) sum[rowNumber] = [];\n if (!sum[rowNumber][colNumber]) sum[rowNumber][colNumber] = 0;\n\n sum[rowNumber][colNumber]++;\n\n maxValue = Math.max(maxValue, sum[rowNumber][colNumber]);\n\n return sum;\n }, []);\n\n const points = dotsCoords.reduce((sum, coords, i) => {\n if (coords === undefined) return sum;\n\n coords.forEach((col, j) => {\n if (col === undefined) return;\n\n const newPoint = {\n x: +(j * colWidth + colWidth / 2).toFixed(2),\n y: +(i * rowHeight + rowHeight / 2).toFixed(2),\n value: col\n // value: col <= 5 ? +col : 5\n };\n\n sum.push(newPoint);\n });\n\n return sum;\n }, []);\n\n const maxRadius = 25;\n return (\n <>\n {points.map((point, i) => {\n const { x, y, value } = point;\n\n const firstLayerMaxValue = maxValue < 5 ? maxValue * 0.5 : maxValue * 0.33;\n const firstLayerRadius =\n maxValue === 1\n ? maxRadius / 3\n : maxValue < 3\n ? value * (maxRadius / 3)\n : value < firstLayerMaxValue\n ? (value / firstLayerMaxValue) * maxRadius\n : maxRadius;\n\n const opacity = firstLayerRadius / maxRadius;\n return (\n \n {/* */}\n \n \n );\n })}\n {/* Second layer */}\n {points.map((point, i) => {\n const { x, y, value } = point;\n\n const secondLayerMaxValue = maxValue < 5 ? maxValue : maxValue * 0.66;\n const secondLayerRadius =\n value >= 3\n ? value < secondLayerMaxValue\n ? (value / secondLayerMaxValue) * (maxRadius - 4)\n : maxRadius - 4\n : 0;\n\n const opacity = secondLayerRadius / (maxRadius - 4);\n return (\n \n );\n })}\n {/* Third layer */}\n {points.map((point, i) => {\n const { x, y, value } = point;\n\n const thirdLayerMaxValue = maxValue;\n\n const thirdLayerRadius =\n value >= 5\n ? value < thirdLayerMaxValue\n ? (value / thirdLayerMaxValue) * (maxRadius - 10)\n : maxRadius - 10\n : 0;\n\n const opacity = thirdLayerRadius / (maxRadius - 10);\n return (\n \n \n \n );\n })}\n \n );\n};\n\nconst Frames = ({ top, title1, filteredData, selectedPitchType, preview, currentOption, setHoveredDot }) => {\n const { zone, pitch_types: pitchTypes } = preview;\n\n const {\n y_strike_down: yStrikeDown,\n x_strike_up: yStrikeUp,\n x_strike_left: xStrikeLeft,\n x_strike_right: xStrikeRight,\n shadow_border: shadowBorder\n } = zone || {};\n\n const arrData = selectedPitchType\n ? filteredData.filter(pitch => pitchTypes[pitch.pitch_info.pitch_type] === selectedPitchType)\n : filteredData;\n\n let totalPitches = arrData.length;\n\n const zeroYCoord = PARAMS.GRAPH_HEIGHT * 0.8615;\n const yCoordRelCoef = 179;\n // const yCoordRelCoef = 340;\n const yCoordAbsCoef = 0;\n // const yCoordAbsCoef = 75;\n\n const zeroXCoord = PARAMS.GRAPH_WIDTH * 0.5;\n // const zeroXCoord = PARAMS.GRAPH_WIDTH * 0.2645;\n const xCoordRelCoef = 179;\n // const xCoordRelCoef = 248;\n\n // Dashed frame params\n const dashedFrameX = zeroXCoord + xCoordRelCoef * xStrikeLeft;\n const dashedFrameWidth = zeroXCoord + xCoordRelCoef * xStrikeRight - dashedFrameX;\n const dashedFrameY = zeroYCoord - yStrikeUp * yCoordRelCoef + yCoordAbsCoef;\n const dashedFrameHeight = zeroYCoord - yStrikeDown * yCoordRelCoef + yCoordAbsCoef - dashedFrameY;\n\n const isDots = currentOption === 'All Pitches';\n return (\n <>\n {/* Center X line */}\n {/* */}\n {/* Center Y line */}\n {/* */}\n {/* Left Dashed Line */}\n {/* */}\n {/* Right Dashed Line */}\n {/* */}\n\n {/* Frames */}\n {/* Wrapper frame */}\n \n\n {/* Outer frame */}\n \n\n {/* Inner frame */}\n \n\n {/* Dots */}\n {isDots && (\n \n )}\n\n {/* Heat areas */}\n {!isDots && (\n <>\n \n \n \n \n \n )}\n\n {/* Dashed frame */}\n \n\n {/* Title */}\n \n {`${title1} (${totalPitches})`}\n \n\n {/* Subtitle */}\n {/* */}\n \n );\n};\n\nconst Column = ({ right, center, coef, data, reverse = false }) => {\n const { percents: srcPercents, footer } = data;\n const percents = isNaN(srcPercents) ? 0 : srcPercents;\n\n const percentValueRef = useRef(null);\n\n useLayoutEffect(() => {\n if (percentValueRef.current === null) return;\n\n percentValueRef.current.style.transition = 'unset';\n percentValueRef.current.style.opacity = 0;\n\n setTimeout(() => {\n if (percentValueRef.current) {\n percentValueRef.current.style.transition = 'opacity .3s';\n percentValueRef.current.style.opacity = 1;\n }\n }, 300);\n }, [percents]);\n\n const xCoord = right - 20;\n const yCoordFilled = reverse ? center : center - coef * percents;\n\n const valueXCoord = xCoord + 10;\n\n const percentsYCoord = reverse\n ? yCoordFilled + coef * percents + 16\n : footer\n ? center + 15\n : yCoordFilled - 5;\n // const percentsYCoord = reverse ? center + columnHeight + 25 : yCoordFilled - 5;\n const legendCircleFill = footer === 'Heart' ? '#B6C6D6' : footer === 'Shadow' ? '#EAEAEA' : 'transparent';\n const isLegendText = footer === 'Heart';\n const percentsValue = Math.round(percents);\n return (\n <>\n {/* Filled */}\n \n {/* Empty */}\n {/* */}\n {/* Value */}\n {/* \n {value}\n */}\n {/* Percents */}\n \n {percentsValue}%\n \n {/* Footer */}\n {footer && (\n <>\n \n {isLegendText && (\n \n Legend:\n \n )}\n \n {footer}\n \n \n )}\n \n );\n};\n\nconst Columns = ({ right, center, values }) => {\n const columnHeight = 150 / 2;\n const coef = columnHeight / 100;\n\n return (\n <>\n {Object.entries(values).map((entry, i) => (\n \n ))}\n \n );\n};\n\n// const PercentsGraph = ({ left, center, filteredData, selectedPitchType, preview }) => {\n// const { pitch_types: pitchTypes } = preview;\n\n// const filteredPitches = selectedPitchType\n// ? filteredData.filter(pitch => pitchTypes[pitch.pitch_info.pitch_type] === selectedPitchType)\n// : filteredData;\n\n// const filteredPitchesCount = filteredPitches.length;\n// const defaultCountByResult = {\n// swingHeart: 0,\n// swingShadow: 0,\n// swingChase: 0,\n// takeHeart: 0,\n// takeShadow: 0,\n// takeChase: 0,\n// totalHeart: 0,\n// totalShadow: 0,\n// totalChase: 0\n// };\n\n// const pitchesCountByResult = filteredPitches.reduce((sum, pitch) => {\n// const { result, zone } = pitch;\n\n// if (result.swing) {\n// zone.heart && sum.swingHeart++;\n// zone.edge && sum.swingShadow++;\n// zone.waste && sum.swingChase++;\n// }\n\n// if (result.take) {\n// zone.heart && sum.takeHeart++;\n// zone.edge && sum.takeShadow++;\n// zone.waste && sum.takeChase++;\n// }\n\n// zone.heart && sum.totalHeart++;\n// zone.edge && sum.totalShadow++;\n// zone.waste && sum.totalChase++;\n\n// return sum;\n// }, defaultCountByResult);\n\n// const {\n// swingChase,\n// takeChase,\n// swingShadow,\n// takeShadow,\n// swingHeart,\n// takeHeart,\n// totalChase,\n// totalShadow,\n// totalHeart\n// } = pitchesCountByResult;\n\n// const topRightPercents = Math.round((swingChase * 100) / (swingChase + takeChase));\n// const topCenterPercents = Math.round((swingShadow * 100) / (swingShadow + takeShadow));\n// const topLeftPercents = Math.round((swingHeart * 100) / (swingHeart + takeHeart));\n\n// const topValues = {\n// topRight: {\n// percents: topRightPercents,\n// footer: null,\n// column: 3\n// },\n// bottomRight: {\n// percents: 100 - topRightPercents,\n// footer: null,\n// reverse: true,\n// column: 3\n// },\n// topCenter: {\n// percents: topCenterPercents,\n// footer: null,\n// column: 2\n// },\n// bottomCenter: {\n// percents: 100 - topCenterPercents,\n// footer: null,\n// reverse: true,\n// column: 2\n// },\n// topLeft: {\n// percents: topLeftPercents,\n// footer: null,\n// column: 1\n// },\n// bottomLeft: {\n// percents: 100 - topLeftPercents,\n// footer: null,\n// reverse: true,\n// column: 1\n// }\n// };\n\n// const bottomValues = {\n// topRight: {\n// percents: (totalChase * 100) / filteredPitchesCount,\n// footer: 'Chase',\n// column: 3\n// },\n// topCenter: {\n// percents: (totalShadow * 100) / filteredPitchesCount,\n// footer: 'Shadow',\n// column: 2\n// },\n// topLeft: {\n// percents: (totalHeart * 100) / filteredPitchesCount,\n// footer: 'Heart',\n// column: 1\n// }\n// };\n\n// return (\n// <>\n// {/* Top line titles */}\n// \n// Swing\n// \n// \n// Take\n// \n// {/* Bottom line titles */}\n// \n// Pitches\n// \n// \n// by zone\n// \n// \n// {/* Bottom columns */}\n// \n\n// {/* Top line */}\n// \n// {/* Bottom line */}\n// \n// \n// );\n// };\n\nconst LeftChart = ({ filteredData, selectedPitchType, preview, currentOption }) => {\n const [hoveredDot, setHoveredDot] = useState({ visible: false, speed: 0, coords: [0, 0] });\n\n const mainTitle = selectedPitchType ?? 'All pitches';\n\n return (\n <>\n \n {/* */}\n {hoveredDot.visible && }\n \n );\n};\n\nconst TwinPitchesGraph = ({\n filteredData = [],\n selectedPitchType = null,\n preview = {},\n currentOption = 'All Pitches',\n ...props\n}) => {\n const [isGraphVisible, setGraphVisibility] = useState(false);\n\n const wrapperRef = useRef();\n const graphRef = useRef();\n\n useEffect(() => {\n let options = {\n root: null,\n rootMargin: '300px 0px',\n threshold: 0\n };\n\n let observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n setGraphVisibility(true);\n } else {\n setGraphVisibility(false);\n }\n });\n }, options);\n observer.observe(graphRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n
    \n \n {isGraphVisible && (\n \n )}\n \n
    \n );\n};\n\nexport default TwinPitchesGraph;\n","import { getPitchColorByName } from 'utils';\nimport PitchesSpeedField from '../PitchesSpeedField/PitchesSpeedField';\nimport TwinPitchesGraph from '../TwinPitchesGraph/TwinPitchesGraph';\nimport cl from './ThreeGraphsRow.module.scss';\n\nconst ThreeGraphsRow = ({ currentOption, setCurrentOption, pitcher }) => {\n const { pitch_types: pitchTypes } = pitcher.preview;\n\n\tconst relValuesData = pitcher.pitches_all.reduce((sum, pitch) => {\n const { speed, pitch_type, pitchGraphCoords } = pitch.pitch_info;\n const pitchType = pitchTypes[pitch_type];\n\n if (sum[pitchType] !== undefined) {\n sum[pitchType].count += 1;\n sum[pitchType].speeds.push(speed * 2.24);\n sum[pitchType].pitchGraphCoords.push({ ...pitchGraphCoords, color: getPitchColorByName(pitchType) });\n\n return sum;\n }\n\n sum[pitchType] = {\n count: 1,\n speeds: [speed * 2.24],\n pitchGraphCoords: [{ ...pitchGraphCoords, color: getPitchColorByName(pitchType) }]\n };\n\n return sum;\n }, {});\n\n return (\n
    \n \n \n
    \n );\n};\n\nexport default ThreeGraphsRow;\n","import GraphsBlock from './GraphsBlock';\nimport GraphsHeader from './GraphsHeader/GraphsHeader';\nimport ThreeGraphsRow from './ThreeGraphsRow/ThreeGraphsRow';\n\nconst PitchersGraphRow = ({ pitcher }) => (\n \n {(currentOption, setCurrentOption) => (\n <>\n \n \n \n )}\n \n);\n\nconst PitchersGraphRows = ({ metrix }) => {\n return (\n <>\n {metrix.map((pitcher, i) => (\n \n ))}\n \n );\n};\n\nexport default PitchersGraphRows;\n","import GraphsBlock from './GraphsBlock';\nimport PitchesTrajectories from './PitchesTrajectories/PitchesTrajectories';\nimport GraphsHeader from './GraphsHeader/GraphsHeader';\nimport BattersTable from './BattersTable/BattersTable';\nimport PitchersReleaseSpeeds from './PitchersReleaseSpeeds/PitchersReleaseSpeeds';\nimport PitchersGraphRows from './PitchersGraphRows';\n\nconst Graphs = ({ graphsData }) => {\n const { batters_metrix: battersMetrix, pitchers_metrix: pitchersMetrix, name: teamName } = graphsData;\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n );\n};\n\nexport default Graphs;\n","import React from 'react';\n// import ContentBoxFooter from '../../ContentBoxFooter/ContentBoxFooter';\nimport cl from './ContentMobileBox.module.scss';\nimport MobileBoxTable from './MobileBoxTable';\nimport { useSelector } from 'react-redux';\nimport Graphs from '../Graphs/Graphs';\n\nconst ContentMobileBox = ({ tableData, graphsData }) => {\n const currentMode = useSelector(s => s.game.boxMode);\n\n const isTable = currentMode !== 'Info' && currentMode !== 'Machine Vision Statistics';\n // const isFooter = currentMode === 'Info' && footer !== '';\n const { batters_metrix, pitchers_metrix } = graphsData;\n const isGraphs =\n Object.keys(graphsData).length !== 0 &&\n batters_metrix[0].pitches_all.length > 0 &&\n pitchers_metrix[0].pitches_all.length > 0;\n const isStatistics = currentMode === 'Machine Vision Statistics' && isGraphs;\n return (\n
    \n {/* */}\n {isTable && }\n {isStatistics && }\n {/* {isFooter && } */}\n
    \n );\n};\n\nexport default ContentMobileBox;\n","import React from 'react';\n\nconst ContentBoxTableBodyCell = ({ title, toFixList, player, tableName }) => {\n const getValue = () => {\n if (player.id === -1) return ' ';\n if (title === 'POS') return player.content.positions.join('/');\n\n if (tableName === 'batting') {\n if (player.content.stats[tableName][title] === 'Infinity') return 'INF';\n \n if (['SB_pr', 'LOB', 'CS', 'SB'].includes(title)) {\n\t\t\t\tif (toFixList.includes(title)) return Number(player.content.stats.running[title]).toFixed(3);\n return player.content.stats.running[title];\n }\n if (['CH', 'PO', 'A', 'E', 'DP', 'FLD'].includes(title)) {\n\t\t\t\tif (toFixList.includes(title)) return Number(player.content.stats.fielding[title]).toFixed(3);\n\t\t\t\treturn player.content.stats.fielding[title];\n }\n\n\t\t\tif (toFixList.includes(title)) return Number(player.content.stats[tableName][title]).toFixed(3);\n\n return player.content.stats[tableName][title];\n }\n\n if (tableName === 'pitching') {\n if (player.pitching === null) return ' ';\n if (toFixList.includes(title)) return Number(player.pitching[title]).toFixed(3);\n return player.pitching[title];\n }\n\n if (tableName === 'catching') {\n if (['SB', 'CS', 'PB'].includes(title)) return player.catching[title];\n }\n\n return ' ';\n };\n\n const cellStyle = toFixList.includes(title) ? { width: '3rem' } : null;\n const value = getValue();\n\n const filteredValue = Number(value) < 0 ? '—' : value;\n\n return {filteredValue};\n};\n\nexport default ContentBoxTableBodyCell;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport ContentBoxTableBodyCell from './ContentBoxTableBodyCell';\n\nconst ContentBoxTableBodyRow = ({ player, TABLES_INFO, toFixList, rowIndex, tableName, rowDelta }) => (\n \n \n {(player.is_substituted && tableName === 'batting') || tableName !== 'batting'\n ? ' '\n : rowIndex + 1 - rowDelta}\n \n \n \n {tableName === 'batting' ? player.content.name : player.name}\n \n \n {TABLES_INFO[tableName].headers.map((title, i) => (\n \n ))}\n \n);\n\nexport default ContentBoxTableBodyRow;\n","import React from 'react';\nimport ContentBoxTableBodyRow from './ContentBoxTableBodyRow';\n\nconst ContentBoxTableBody = ({ TABLES_INFO, tableName, orderedPlayersStats, toFixList }) => {\n const { pitchers, catchers, players_stats: playersStats } = orderedPlayersStats;\n let rowDelta = 0;\n\n const playersArr = tableName === 'pitching' ? pitchers : tableName === 'catching' ? catchers : playersStats;\n\n return (\n \n {playersArr.map((player, i) => {\n if (player.is_substituted && tableName === 'batting') rowDelta++;\n\n return (\n \n );\n })}\n \n );\n};\n\nexport default ContentBoxTableBody;\n","const ContentBoxTableFooterCell = ({ title, toFixList, tableName, tableData }) => {\n const { total_stats: totalStats } = tableData;\n const { batting, running, fielding } = totalStats;\n\n const getValue = () => {\n if (title === 'POS') return ' ';\n\n if (tableName === 'batting') {\n if (['SB_pr', 'LOB', 'CS', 'SB'].includes(title)) return running[title];\n\n if (['CH', 'PO', 'A', 'E', 'DP', 'FLD'].includes(title)) return fielding[title];\n\n if (toFixList.includes(title)) return Number(batting[title]).toFixed(3);\n\n return batting[title];\n }\n\n if (toFixList.includes(title)) return Number(totalStats[tableName][title]).toFixed(3);\n\n return totalStats[tableName][title];\n };\n return {getValue()};\n};\n\nexport default ContentBoxTableFooterCell;\n","import React from 'react';\nimport ContentBoxTableFooterCell from './ContentBoxTableFooterCell';\n\nconst ContentBoxTableFooter = ({ TABLES_INFO, tableName, tableData, toFixList }) => {\n const {\n catchers,\n pitchers,\n total_stats: { batting }\n } = tableData;\n\n function getTableGroup() {\n if (tableName === 'pitching') return pitchers;\n if (tableName === 'catching') return catchers;\n return batting;\n }\n\n const footerStyles = getTableGroup().length % 2 ? { backgroundColor: '#eaeaea' } : {};\n return (\n \n \n \n TOTALS\n {TABLES_INFO[tableName].headers.map((title, i) => (\n \n ))}\n \n \n );\n};\n\nexport default ContentBoxTableFooter;\n","import React from 'react';\n\nconst ContentBoxTableHeaderCell = ({ title }) => {\n const titleText = title === 'SB_pr' ? '%SB' : title === 'FLD' ? 'FLD%' : title;\n\n return {titleText};\n};\n\nexport default ContentBoxTableHeaderCell;\n","import React from 'react';\nimport ContentBoxTableHeaderCell from './ContentBoxTableHeaderCell';\n\nconst ContentBoxTableHeader = ({ TABLES_INFO, tableName }) => {\n return (\n \n \n \n \n {TABLES_INFO[tableName].headers.map((title, i) => (\n \n ))}\n \n \n );\n};\n\nexport default ContentBoxTableHeader;\n","import React from 'react';\nimport cl from './ContentBoxTable.module.scss';\nimport ContentBoxTableBody from './ContentBoxTableBody';\nimport ContentBoxTableFooter from './ContentBoxTableFooter';\nimport ContentBoxTableHeader from './ContentBoxTableHeader';\n\nconst TABLES_INFO = {\n batting: {\n headers: [\n 'POS',\n 'AB',\n 'R',\n 'H',\n '2B',\n '3B',\n 'HR',\n 'RBI',\n 'GDP',\n 'BB',\n 'IBB',\n 'HP',\n 'SH',\n 'SF',\n 'SO',\n 'TB',\n 'AVG',\n 'SLG',\n 'OBP',\n 'OPS',\n 'SB',\n 'CS',\n 'SB_pr',\n 'LOB',\n 'CH',\n 'PO',\n 'A',\n 'E',\n 'DP',\n 'FLD'\n ]\n },\n pitching: {\n headers: [\n 'IP',\n 'PA',\n 'R',\n 'ER',\n 'H',\n '2B',\n '3B',\n 'HR',\n 'BB',\n 'IBB',\n 'HP',\n 'SH',\n 'SF',\n 'SO',\n 'WP',\n 'BK',\n 'ERA',\n 'NP',\n 'NS',\n 'NB'\n ]\n },\n fielding: {\n headers: ['CH', 'PO', 'A', 'E', 'DP', 'FLD']\n },\n catching: {\n headers: ['SB', 'CS', 'PB']\n }\n};\n\nconst ContentBoxTable = ({ tableData, tableClass, tableName, toFixList = [] }) => {\n const orderedPlayersStats = JSON.parse(JSON.stringify(tableData));\n\n return (\n \n \n \n \n
    \n );\n};\n\nexport default ContentBoxTable;\n","import React from 'react';\nimport cl from './ContentBox.module.scss';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getShortName } from 'utils';\nimport { setBoxActiveButton } from 'redux/gameReducer';\n\nconst ContentBoxButton = ({ team }) => {\n const { preview, boxActiveButton: activeButton } = useSelector(state => state.game);\n\n const dispatch = useDispatch();\n\n const getClassName = name => (name === activeButton ? cl.active : null);\n\n const handleButtonClick = name => () => dispatch(setBoxActiveButton(name));\n\n return (\n \n {preview && getShortName(preview[team].name, 8)}\n \n );\n};\n\nexport default ContentBoxButton;\n","import { useEffect, useState, useRef } from 'react';\nimport { buttons } from './ContentBox.module.scss';\nimport ContentBoxButton from './ContentBoxButton';\n\nconst ContentBoxButtons = () => {\n const [buttonsTopPosition, setButtonsTopPosition] = useState({ left: 0, top: 0 });\n const buttonsRef = useRef();\n\n useEffect(() => {\n function handleWindowResize() {\n const parentElement = buttonsRef.current.parentElement;\n\n setButtonsTopPosition({\n top: parentElement.getBoundingClientRect().top + document.documentElement.scrollTop,\n left: parentElement.getBoundingClientRect().left\n });\n }\n\n handleWindowResize();\n\n window.addEventListener('resize', handleWindowResize);\n\n return () => {\n window.removeEventListener('resize', handleWindowResize);\n };\n }, []);\n\n return (\n \n \n \n \n );\n};\n\nexport default ContentBoxButtons;\n","import React from 'react';\nimport cl from './ContentBox.module.scss';\nimport ContentBoxTable from './ContentBoxTable';\nimport ContentBoxButtons from './ContentBoxButtons';\n\nconst ContentBoxTables = ({ tableData }) => {\n return (\n
    \n
    \n \n \n \n \n
    \n
    \n );\n};\n\nexport default ContentBoxTables;\n","import React from 'react';\nimport cl from './ContentBox.module.scss';\nimport ContentBoxFooter from '../ContentBoxFooter/ContentBoxFooter';\nimport ContentBoxTables from './ContentBoxTables';\nimport Graphs from './Graphs/Graphs';\n\nconst ContentBoxDesktop = ({ tableData, footer, graphsData }) => {\n const { batters_metrix, pitchers_metrix } = graphsData;\n const isGraphs =\n Object.keys(graphsData).length !== 0 &&\n batters_metrix[0].pitches_all.length > 0 &&\n pitchers_metrix[0].pitches_all.length > 0;\n\n return (\n
    \n \n {isGraphs && }\n \n
    \n );\n};\n\nexport default ContentBoxDesktop;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { setSearchParam } from 'utils';\nimport Loader from 'components/UI/loaders/Loader/Loader';\nimport { axiosInstance, axiosCancelToken } from 'axios-instance';\nimport { useParams } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport ContentMobileBox from './MobileBox/ContentMobileBox';\nimport ContentBoxDesktop from './ContentBoxDesktop';\nimport { setBoxData } from 'redux/gameReducer';\n\nconst ContentBox = () => {\n const [isLoading, setIsLoading] = useState(false);\n // const [boxData, setBoxData] = useState({});\n const [boxGraphsData, setBoxGraphsData] = useState({});\n\n const { gameId } = useParams();\n\n const boxData = useSelector(state => state.game.boxData);\n const activeButton = useSelector(state => state.game.boxActiveButton);\n\n const dispatch = useDispatch();\n\n const cancelTokenRef = useRef();\n\n const { footer } = boxData || {};\n\n useEffect(() => {\n setSearchParam('tab', 'box');\n\n const fetchBoxData = async () => {\n cancelTokenRef.current = axiosCancelToken.source();\n\n try {\n setIsLoading(true);\n let response = await axiosInstance.get(`/game_${gameId}/box`, {\n cancelToken: cancelTokenRef.current.token\n });\n\n dispatch(setBoxData(response.data));\n setIsLoading(false);\n\n response = await axiosInstance.get(`/game_metrix?game_id=${gameId}`, {\n cancelToken: cancelTokenRef.current.token\n });\n\n setBoxGraphsData(response.data);\n } catch (err) {\n err.message !== null && console.log(err.message);\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchBoxData();\n return () => {\n cancelTokenRef.current.cancel(null);\n };\n // eslint-disable-next-line\n }, []);\n\n const tableData = boxData[activeButton];\n const graphsData = boxGraphsData[activeButton] || {};\n\n // Loader\n if (isLoading) return ;\n\n // Empty boxData render\n if (Object.keys(boxData).length === 0) return <>;\n\n // Main render\n return (\n <>\n \n \n \n );\n};\n\nexport default ContentBox;\n","import React, { useEffect, useLayoutEffect, useState, useRef } from 'react';\nimport cl from './Content.module.scss';\nimport ContentSituationsList from '../ContentSituationsList/ContentSituationsList';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport axios from 'axios';\nimport {\n setSituations,\n setInningNumber,\n setCurrentCard,\n setFilteredCards,\n setCurrentMoment,\n setIsFilteredPlayer,\n setMoments\n} from 'redux/gameReducer';\nimport ContentFooter from '../ContentFooter/ContentFooter';\nimport ContentGraphics from '../ContentGraphics/ContentGraphics';\nimport { getBeforeAfterFlags, getSearchParam, setSearchParam } from 'utils';\nimport ContentBox from '../ContentBox/ContentBox';\nimport MobilePitcherFilters from './MobilePitcherFilters';\nimport PlaysEvents from '../PlaysEvents/PlaysEvents';\nimport Timeline from '../Timeline/Timeline';\nimport VideoOptions from '../VideoOptions/VideoOptions';\nimport classNames from 'classnames';\n\nconst Content = ({ currentTab }) => {\n const [cards, setCards] = useState([]);\n\n const innings = useSelector(s => s.game.innings, shallowEqual);\n const situationFilter = useSelector(s => s.game.situationFilter);\n const currentCard = useSelector(s => s.game.currentCard, shallowEqual);\n const currentMoment = useSelector(s => s.game.currentMoment, shallowEqual);\n const filteredCards = useSelector(s => s.game.filteredCards, shallowEqual);\n const playbackMode = useSelector(s => s.game.playbackMode);\n const errorMsg = useSelector(s => s.game.errorMsg, shallowEqual);\n const gameId = useSelector(s => s.game.currentGameId, shallowEqual);\n const isVideo = useSelector(s => s.game.isVideo);\n const playerCardFilter = useSelector(s => s.game.playerCardFilter);\n const playerCardFilterBy = useSelector(s => s.game.playerCardFilterBy);\n const isBroadcast = useSelector(s => s.game.isBroadcast);\n\n const isMobileScoreboard = useSelector(s => s.shared.isMobileScoreboard);\n const isMobileTimeline = useSelector(s => s.shared.isMobileTimeline);\n const isMobile = useSelector(s => s.shared.isMobile);\n\n\n const dispatch = useDispatch();\n\n const situationsChildRef = useRef();\n const gameIdRef = useRef(0); //Delete later\n const scrollToRef = useRef(false);\n const beforeAfterRef = useRef({});\n\n useEffect(() => {\n function situationsConcat(member) {\n member.moments?.forEach(moment => {\n moment.filter &&\n (typeof moment.filter === 'object'\n ? newSituations.push(...moment.filter)\n : newSituations.push(moment.filter));\n });\n }\n\n function momentsDecompose(member, moments, inning, side) {\n newCards.push({\n inning_number: inning.number,\n ...member,\n moments: [moments[0]],\n type: 'Replacement',\n side,\n who_id: 'replace'\n });\n if (moments.length <= 1) return;\n\n moments[1].icons?.rect_text !== 'Replacement'\n ? newCards.push({ inning_number: inning.number, ...member, moments: moments.slice(1), side })\n : momentsDecompose(member, moments.slice(1), inning, side);\n }\n\n function newCardsConcat(team, inning, side) {\n team.forEach(member => {\n member.moments[0]?.icons?.rect_text !== 'Replacement'\n ? newCards.push({ inning_number: inning.number, ...member, side })\n : member.moments.length === 1\n ? newCards.push({\n inning_number: inning.number,\n ...member,\n type: 'Replacement',\n side,\n who_id: 'replace'\n })\n : momentsDecompose(member, member.moments, inning, side);\n situationsConcat(member);\n });\n }\n\n // const fetchImage = async id => {\n // const token = axios.CancelToken.source();\n // tokens[id] = token;\n // try {\n // const response = await axios.get(`http://baseball-gametrack.ru/api/logo/${playersInfo[id]}`, {\n // responseType: 'arraybuffer',\n // timeout: 2500,\n // cancelToken: token.token\n // });\n // dispatch(\n // setImagesData({\n // [id]: 'data:image/jpg;base64, ' + Buffer.from(response.data, 'binary').toString('base64')\n // // [who]: 'data:image/jpg;base64, ' + Buffer.from(response.data, 'binary').toString('base64')\n // })\n // );\n // } catch (err) {\n // setTimeout(() => fetchImage(id), 2000);\n // console.log(err.message);\n // }\n // };\n\n const newSituations = ['All'];\n const newCards = [];\n\n innings.forEach(inning => {\n newCardsConcat(inning['top/guests'], inning, 'top');\n inning['bottom/owners'] && newCardsConcat(inning['bottom/owners'], inning, 'bottom');\n });\n\n /****************Images fetching*****************/\n // const testArr = []\n // console.log(playersInfo);\n // console.log(playersInfo[166]);\n // newCards.filter(card => playersInfo[card.who_id]).forEach(card => testArr.push(card.who_id))\n // console.log(testArr.includes(166));\n\n const tokens = {};\n\n //Fetch players images\n // Object.entries(playersInfo)\n // .forEach(entry => {\n // if (queriesRef.current.includes(entry[0])) return;\n // queriesRef.current.push(entry[0]);\n // fetchImage(entry[0]);\n // });\n\n /************************************************/\n\n const newFilteredCards = getFilteredCards(newCards);\n beforeAfterRef.current = getBeforeAfterFlags(newFilteredCards, innings);\n\n /*******************Delete later******************/\n if (gameIdRef.current !== gameId && playbackMode !== 'playOnline') {\n gameIdRef.current = gameId;\n dispatch(setInningNumber(1));\n }\n /*************************************************/\n setCards(newCards);\n dispatch(setFilteredCards(newFilteredCards));\n\n if (Object.keys(currentCard).length !== 0 && isBroadcast) {\n const newCurCard = newFilteredCards.find(\n card => card.moments[0].inner.id === currentCard.moments[0].inner.id\n );\n\n const newMoments = [];\n\n newCurCard.type !== 'Replacement'\n ? newCurCard.moments?.forEach(moment => moment.icons && newMoments.push(moment))\n : newMoments.push(newCurCard.moments[0]);\n\n newCurCard && dispatch(setCurrentCard({ ...currentCard, ...newCurCard, noMomentChange: true }));\n dispatch(setMoments(newMoments));\n\n const newMoment = newMoments.find(moment => moment.inner.id === currentMoment.inner.id);\n\n if (newMoment?.video && !currentMoment.video) {\n dispatch(setCurrentMoment({ ...newMoment, noStartSeeking: true }));\n }\n // const newCurCard = newFilteredCards.find(\n // card => card.moments[0].inner.id === currentCard.moments[0].inner.id\n // );\n\n // newCurCard && dispatch(setCurrentCard({ ...currentCard, ...newCurCard, noMomentChange: true }));\n }\n\n if ((playbackMode === 'play' || playbackMode === 'pause') && Object.keys(currentCard).length === 0) {\n const card = +getSearchParam('card');\n let cardIndex =\n card !== undefined\n ? newFilteredCards.findIndex(({ moments }) => {\n return moments.some(({ inner }) => inner.id === card);\n\n // player.moments[0].inner.id === card;\n })\n : 0;\n\n if (cardIndex === -1) cardIndex = 0;\n\n const newCurCard = { ...newFilteredCards[cardIndex], customMoment: card };\n dispatch(setCurrentCard(newCurCard));\n }\n\n // ! Current card update if last card in list selected\n if (currentCard?.moments && !isBroadcast) {\n filteredCards[filteredCards.length - 1]?.moments[0].inner.id === currentCard?.moments[0].inner.id &&\n // playbackMode === 'playOnline' &&\n (newFilteredCards.length !== 0\n ? dispatch(setCurrentCard({ ...newFilteredCards[newFilteredCards.length - 1] }))\n : dispatch(setCurrentCard({})));\n }\n\n dispatch(setSituations(newSituations));\n // eslint-disable-next-line\n\n return () => {\n console.log('fetch return');\n console.log(tokens);\n Object.values(tokens).forEach(token => token.cancel(null));\n console.log('tokens canceled');\n };\n // eslint-disable-next-line\n }, [innings]);\n\n useLayoutEffect(() => {\n if (cards.length === 0) return;\n\n const filteredCards = getFilteredCards(cards);\n beforeAfterRef.current = getBeforeAfterFlags(filteredCards, innings);\n\n dispatch(setFilteredCards(filteredCards));\n // playbackMode === 'pause' && setCurrentCard({ ...filteredCards[0], row_number: 0 });\n if (playbackMode === 'pause' && situationFilter !== 'All') {\n dispatch(setCurrentCard(filteredCards[0]));\n scrollToRef.current = true;\n }\n\n if (playbackMode === 'pause' && situationFilter === 'All') scrollToRef.current = true;\n\n if (playbackMode === 'playOnline') {\n // setCurrentCard({ ...filteredCards.slice(-1)[0], row_number: filteredCards.length - 1 });\n const lastCard = filteredCards.slice(-1)[0];\n dispatch(setCurrentCard(lastCard));\n }\n // eslint-disable-next-line\n }, [situationFilter, playerCardFilter, playerCardFilterBy]);\n\n useEffect(() => {\n if (filteredCards.length === 0) {\n // setCurrentCard({}); //Delete later\n return;\n }\n\n //Add parent node checking on null or undefined\n //Add field 'scroll' (bool) to setFilteredCards to know when scroll\n // if (playbackMode === 'pause' && situationFilter === 'All') {\n // situationsChildRef.current.parentNode.scrollTop = situationsChildRef.current.offsetTop;\n // // situationsChildRef.current.parentNode.scrollTop = 50;\n // }\n if (scrollToRef.current && situationsChildRef.current) {\n situationsChildRef.current.parentNode.scrollTop =\n situationsChildRef.current.offsetTop + situationsChildRef.current.clientHeight / 2 - 200;\n scrollToRef.current = false;\n }\n\n //Set current card on pause playbackMode\n if (playbackMode === 'pause') {\n const newCurrentCard = filteredCards.find(\n card =>\n card.inning_number === currentCard.inning_number &&\n card.who_id === currentCard.who_id &&\n card.moments[0].inner.id === currentCard.moments[0].inner.id\n );\n\n if (newCurrentCard) {\n // dispatch(setCurrentCard({ ...newCurrentCard, customMoment:\n // \tcurrentCard.customMoment\n // }));\n return;\n }\n\n dispatch(setCurrentCard(filteredCards.slice(-1)[0]));\n return;\n }\n\n playbackMode === 'playOnline' && dispatch(setCurrentCard(filteredCards.slice(-1)[0]));\n // eslint-disable-next-line\n }, [filteredCards]);\n\n useEffect(() => {\n if (currentTab === 'box') {\n scrollToRef.current = true;\n return;\n }\n if (filteredCards.length === 0) return;\n\n if (scrollToRef.current && situationsChildRef.current) {\n situationsChildRef.current.parentNode.scrollTop =\n situationsChildRef.current.offsetTop + situationsChildRef.current.clientHeight / 2 - 200;\n scrollToRef.current = false;\n }\n // eslint-disable-next-line\n }, [currentTab]);\n\n useEffect(() => {\n if (Object.keys(currentCard).length === 0) return;\n\n if (currentCard.noMomentChange) {\n // const newMoments = [];\n\n // currentCard.type !== 'Replacement'\n // ? currentCard.moments?.forEach(moment => moment.icons && newMoments.push(moment))\n // : newMoments.push(currentCard.moments[0]);\n\n // dispatch(setMoments(newMoments));\n\n // const newMoment = newMoments.find(moment => moment.inner.id === currentMoment.inner.id)\n\n // newMoment.video && !currentMoment.video && dispatch(setCurrentMoment(newMoment))\n\n return;\n }\n\n const cardId = currentCard.customMoment || (currentCard.moments && currentCard.moments[0].inner.id);\n setSearchParam('card', cardId);\n\n dispatch(setInningNumber(currentCard.inning_number || 1));\n\n //Set moments\n const newMoments = [];\n currentCard.type !== 'Replacement'\n ? currentCard.moments?.forEach(moment => moment.icons && newMoments.push(moment))\n : newMoments.push(currentCard.moments[0]);\n\n //Set current moment\n if (currentCard.customMoment) {\n const newMoment = currentCard.moments.find(moment => moment.inner.id === currentCard.customMoment);\n dispatch(setCurrentMoment(newMoment));\n }\n\n if (!currentCard.customMoment) {\n currentCard.toFirstMoment\n ? dispatch(setCurrentMoment(newMoments[0] || {}))\n : dispatch(setCurrentMoment(newMoments.slice(-1)[0] || {}));\n }\n\n dispatch(setMoments(newMoments));\n\n // No smooth scroll on manual card click\n if (currentCard.manualClick || !situationsChildRef.current) return;\n\n // Smooth scrolling\n if (isMobile) {\n document.documentElement.scrollTop =\n situationsChildRef.current.offsetTop + situationsChildRef.current.clientHeight / 2 - 85;\n\n return;\n }\n\n situationsChildRef.current.parentNode.scrollTop =\n situationsChildRef.current.offsetTop + situationsChildRef.current.clientHeight / 2 - 200;\n\n // eslint-disable-next-line\n }, [currentCard]);\n\n useEffect(() => {\n if (playbackMode !== 'playOnline') return;\n // inningNumber !== innings.length\n // ? dispatch(setInningNumber(innings.length))\n // : setCurrentCard({ ...filteredCards.slice(-1)[0], row_number: filteredCards.length - 1 });\n dispatch(setCurrentCard({ ...filteredCards.slice(-1)[0] }));\n\n // eslint-disable-next-line\n }, [playbackMode]);\n\n const getFilteredCards = cards => {\n let filteredCards =\n situationFilter !== 'All'\n ? cards.filter(card =>\n card.moments.length > 0\n ? card.moments.some(moment => moment.filter?.includes(situationFilter))\n : false\n )\n : cards;\n\n const filterArr = playerCardFilter.split(' ');\n\n playerCardFilter === '' && dispatch(setIsFilteredPlayer(true));\n\n if (playerCardFilter !== '') {\n function getWordsEquality(searchText) {\n const searchedWordsArr = searchText.split(' ');\n\n return filterArr.reduce((sum, filterWord) => {\n if (\n !searchedWordsArr.find(\n whoWord => whoWord.slice(0, filterWord.length).toLowerCase() === filterWord.toLowerCase()\n )\n )\n sum = false;\n return sum;\n }, true);\n }\n\n const tempFilteredCards = filteredCards.filter(({ who, moments }) => {\n if (playerCardFilterBy === 'batter') return getWordsEquality(who);\n\n return moments.some(({ pitcher: { pitches_name: pitcherName } }) => getWordsEquality(pitcherName));\n });\n\n if (tempFilteredCards.length > 0) {\n dispatch(setIsFilteredPlayer(true));\n filteredCards = tempFilteredCards;\n }\n\n tempFilteredCards.length === 0 && dispatch(setIsFilteredPlayer(false));\n }\n return filteredCards;\n };\n\n // Mobile pitcher filters top-shift calc\n let topShift = 0;\n if (isMobileScoreboard) topShift += 83.5;\n if (isMobileTimeline) topShift += 45;\n if (currentTab !== 'videos') topShift += (document.documentElement.clientWidth / 16) * 10;\n topShift += 'px';\n\n // Classnames\n const contentClasses = classNames({\n [cl.content]: isVideo,\n [cl.contentNoVideo]: !isVideo\n });\n const eventsClasses = classNames([cl.mobileDisplayNone], { [cl.eventsArea]: !isVideo });\n const mobilePitcherFiltersClasses = classNames(cl.landscapeDisplayNone, cl.mobilePitcherFiltersWrapper, {\n [cl.noVideo]: !isVideo\n });\n\n // Testing funcs\n // !Remove after testing\n\n const handleIncreaseBtnClick = async () => await axios.get('http://localhost:3001/inc');\n const handleDecreaseBtnClick = async () => await axios.get('http://localhost:3001/dec');\n const handleResetBtnClick = async () => await axios.get('http://localhost:3001/reset');\n\n // !\n return (\n <>\n {currentTab !== 'box' ? (\n
    \n
    \n {isVideo && }\n
    \n \n
    \n {isVideo && }\n {isVideo && }\n
    \n \n
    \n \n {isVideo && }\n {/*
    \n \n \n \n
    */}\n {/* {isCameraSelector && } */}\n
    \n {errorMsg !== null && (\n \n {errorMsg}\n

    \n )}\n
    \n ) : (\n \n )}\n \n );\n};\n\nexport default Content;\n","import React from 'react';\nimport cl from './ErrorLoader.module.scss';\n\nconst ErrorLoader = ({ error, styles = null }) => (\n

    \n {error}\n

    \n);\n\nexport default ErrorLoader;\n","import { useState, useEffect, useRef } from 'react';\nimport {\n setCurrentGameId,\n setErrorMsg,\n setFullData,\n setIsBroadcast,\n setIsVideo,\n setPlayersInfo,\n\tsetVideoLengthMode\n} from 'redux/gameReducer';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { axiosInstance, axiosCancelToken } from 'axios-instance';\nimport { useParams } from 'react-router-dom';\n// import axios from 'axios';\n\nconst useGameFetch = url => {\n const [isLoading, setIsLoading] = useState(false);\n const [loadedPercents, setLoadedPercents] = useState(null);\n const [error, setError] = useState(null);\n const innings = useSelector(state => state.game.innings, shallowEqual);\n\n const intervalRef = useRef();\n const dataRef = useRef(0);\n const cancelTokenRef = useRef();\n\n const { gameId } = useParams();\n\n useEffect(\n () => () => {\n typeof cancelTokenRef.current != 'undefined' && cancelTokenRef.current.cancel(null);\n clearTimeout(intervalRef.current);\n },\n []\n );\n\n useEffect(() => {\n error && setError(null);\n // eslint-disable-next-line\n }, [innings]);\n\n const concatPlayersInfo = (players, summary) => {\n return players\n .filter(player => player.photo !== '')\n .reduce((sum, player) => {\n sum[player.id] = player.photo;\n return sum;\n }, summary);\n };\n\n const getFullData =\n (firstTime = false, innerUrl = url) =>\n async dispatch => {\n cancelTokenRef.current = axiosCancelToken.source();\n\n try {\n firstTime && setIsLoading(true);\n const resp = await axiosInstance.get(innerUrl, {\n // const resp = await axios.get('http://localhost:3001', {\n cancelToken: cancelTokenRef.current.token,\n onDownloadProgress: ({ total, loaded }) => setLoadedPercents((loaded * 100) / total)\n });\n // if (JSON.stringify(dataRef.current) === JSON.stringify(resp.data)) return;\n dispatch(setErrorMsg(null));\n error && setError(null);\n\n const dataLength = JSON.stringify(resp.data).length;\n\n intervalRef.current = setTimeout(() => {\n dispatch(getFullData(false, innerUrl));\n }, 5000);\n\n if (dataRef.current === dataLength) return;\n dataRef.current = dataLength;\n\n if (firstTime) {\n //Concat players info from fetched data\n const { guests, owners, has_measures, camera_info } = resp.data.preview;\n\n let newPlayersInfo = {};\n newPlayersInfo = concatPlayersInfo(guests.players, newPlayersInfo);\n newPlayersInfo = concatPlayersInfo(owners.players, newPlayersInfo);\n\n dispatch(setPlayersInfo(newPlayersInfo));\n\n const isVideoGame = (has_measures && camera_info?.left_main_link) || camera_info?.broadcast_link;\n dispatch(setIsVideo(isVideoGame));\n\n const isBroadcastGame = camera_info?.broadcast_link && !camera_info?.left_main_link;\n dispatch(setIsBroadcast(isBroadcastGame));\n\t\t\t\t\tif (isBroadcastGame) dispatch(setVideoLengthMode('Broadcast'))\n }\n\n dispatch(setFullData(resp.data));\n } catch (err) {\n setError(err.message);\n !err.__CANCEL__ && dispatch(setErrorMsg(err.message));\n console.log(err.__CANCEL__);\n if (!err.__CANCEL__) {\n intervalRef.current = setTimeout(() => {\n dispatch(getFullData(false, innerUrl));\n }, 5000);\n }\n } finally {\n if (firstTime) {\n setIsLoading(false);\n setLoadedPercents(null);\n dispatch(setCurrentGameId(gameId));\n }\n }\n };\n\n return [error, isLoading, loadedPercents, getFullData];\n};\n\nexport default useGameFetch;\n","import React, { useState, useEffect } from 'react';\nimport Header from 'components/Game/Header/Header';\nimport Filters from 'components/Game/Filters/Filters';\nimport Content from 'components/Game/Content/Content';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport Loader from 'components/UI/loaders/Loader/Loader';\nimport ErrorLoader from 'components/UI/loaders/ErrorLoader/ErrorLoader';\nimport useGameFetch from 'hooks/useGameFetch';\nimport { resetData, setCurrentTab as setCurrentSubTab, setIsFullscreen } from 'redux/gameReducer';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { getSearchParam, setSearchParam } from 'utils';\nimport { setMobileWidth } from 'redux/sharedReducer';\n\nconst Game = () => {\n const tab = getSearchParam('tab');\n const defaultTab = ['box', 'videos', 'pitch', 'hitting', 'running', 'plays'].includes(tab) ? tab : 'pitch';\n\n const [currentTab, setCurrentTab] = useState(defaultTab);\n const { gameId } = useParams();\n const [searchParams] = useSearchParams();\n\n const innings = useSelector(state => state.game.innings, shallowEqual);\n const errorMsg = useSelector(state => state.game.errorMsg, shallowEqual);\n\n const dispatch = useDispatch();\n\n const [error, isLoading, loadedPercents, getFullData] = useGameFetch(`/game_${gameId}`);\n\n useEffect(() => {\n dispatch(getFullData(true));\n dispatch(setCurrentSubTab(searchParams.get('tab')));\n\n const resizeHandle = () => {\n dispatch(setMobileWidth(window.innerWidth));\n };\n\n const toggleFullscreen = ({ matches }) => dispatch(setIsFullscreen(matches ? true : false));\n\n resizeHandle();\n window.addEventListener('resize', resizeHandle);\n\n window.matchMedia('(display-mode: fullscreen)').addEventListener('change', toggleFullscreen);\n\n return () => {\n dispatch(resetData());\n window.removeEventListener('resize', resizeHandle);\n window.matchMedia('(display-mode: fullscreen)').removeEventListener('change', toggleFullscreen);\n };\n\n // eslint-disable-next-line\n }, []);\n\n const handleTabClick = e => {\n const tabText = e.target ? e.target.name : e.toLowerCase();\n const resultTabText = tabText === 'hit' ? 'hitting' : tabText === 'run' ? 'running' : tabText;\n\n setSearchParam('tab', resultTabText);\n setCurrentTab(resultTabText);\n\n dispatch(setCurrentSubTab(resultTabText));\n };\n\n const isFilters = currentTab !== 'box';\n\n // Error handling render\n if (errorMsg !== null && innings.length === 0) return ;\n\n // Loading render\n if (isLoading) return ;\n\n // Empty innings render\n if (innings.length === 0) return <>;\n\n // Main render\n return (\n <>\n
    \n {isFilters && }\n \n \n );\n};\n\nexport default Game;\n","import { Link } from 'react-router-dom';\nimport cl from '../ContentSideTables.module.scss';\n\nconst Header = () => {\n return (\n
    \n Go to Team Stat\n
    \n );\n};\n\nexport default Header;\n","import { Link } from 'react-router-dom';\nimport { useMemo } from 'react';\nimport { getShortName } from 'utils';\nimport { useSelector } from 'react-redux';\nimport cl from '../ContentSideTables.module.scss';\n\nconst TableBody = () => {\n\tconst leagues = useSelector(state => state.games.leagues);\n const isMobile = useSelector(state => state.shared.isMobile);\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const currentLeague = useSelector(state => state.games.currentLeague);\n\n const leagueTeams = leagues\n .slice()\n .find(league =>\n currentLeague.id === undefined\n ? league.name === currentLeague.name || league.name === currentLeague.title\n : league.id === currentLeague.id\n )?.teams;\n\n const sortedTeams = useMemo(\n () =>\n leagueTeams\n ? leagueTeams.sort((a, b) => (a.wins > b.wins || (a.wins === b.wins && a.loses < b.loses) ? -1 : 1))\n : [],\n [leagueTeams]\n );\n return (\n
    \n {sortedTeams.map(team => (\n
    \n
    \n \n {' '}\n {getShortName(team.name, isMobile ? 30 : 21)}\n \n
    \n
    \n
    {team.wins}
    \n
    {team.loses}
    \n
    {team.pct !== -1 ? team.pct : '—'}
    \n
    \n
    \n ))}\n
    \n );\n};\n\nexport default TableBody;\n","import cl from '../ContentSideTables.module.scss';\n\nconst TableHeader = () => {\n return (\n
    \n
    Team
    \n
    \n
    W
    \n
    L
    \n
    PCT
    \n
    \n
    \n );\n};\n\nexport default TableHeader;\n","import cl from '../ContentSideTables.module.scss';\nimport TableBody from './TableBody';\nimport TableHeader from './TableHeader';\n\nconst Table = () => {\n \n return (\n
    \n \n \n
    \n );\n};\n\nexport default Table;\n","import cl from '../ContentSideTables.module.scss';\nimport Header from './Header';\nimport Table from './Table';\n\nconst PctTable = () => (\n
    \n
    \n \n \n);\n\nexport default PctTable;\n","const defaultState = {\n\tsummaryYearsData: {},\n games: [],\n leagues: [],\n players: null,\n currentLeague: { id: -1, name: 'All', title: 'All' },\n currentStadium: 'All',\n currentHome: 'All',\n currentGuests: 'All',\n leaguesImages: {},\n mobileTableMode: 'Calendar',\n currentSwitchTableMode: 'batting',\n currentSwitchDropdownValue: { batting: 'AB', fielding: 'CH', running: 'SB', pitching: 'GS' }\n};\n\nconst SET_SUMMARY_YEARS_DATA = 'SET_SUMMARY_YEARS_DATA';\nconst SET_GAMES_AND_LEAGUES = 'SET_GAMES_AND_LEAGUES';\nconst SET_CURRENT_GAMES_LEAGUE = 'SET_CURRENT_GAMES_LEAGUE';\nconst SET_CURRENT_STADIUM = 'SET_CURRENT_STADIUM';\nconst SET_CURRENT_HOME = 'SET_CURRENT_HOME';\nconst SET_CURRENT_GUESTS = 'SET_CURRENT_GUESTS';\nconst ADD_LEAGUE_IMAGE = 'ADD_LEAGUE_IMAGE';\nconst SET_MOBILE_TABLE_MODE = 'SET_MOBILE_TABLE_MODE';\nconst SET_CURRENT_SWITCH_TABLE_MODE = 'SET_CURRENT_SWITCH_TABLE_MODE';\nconst SET_CURRENT_SWITCH_DROPDOWN_VALUE = 'SET_CURRENT_SWITCH_DROPDOWN_VALUE';\nconst RESET_TABLE_FILTERS = 'RESET_TABLE_FILTERS';\n\nexport const gamesReducer = (state = defaultState, action) => {\n switch (action.type) {\n\t\tcase SET_SUMMARY_YEARS_DATA:\n\t\t\treturn { ...state, summaryYearsData: action.payload };\n case SET_GAMES_AND_LEAGUES:\n return {\n ...state,\n games: action.payload.games,\n leagues: action.payload.leagues,\n players: action.payload.players\n };\n case SET_CURRENT_GAMES_LEAGUE:\n return { ...state, currentLeague: action.payload };\n case SET_CURRENT_STADIUM:\n return { ...state, currentStadium: action.payload };\n case SET_CURRENT_HOME:\n return { ...state, currentHome: action.payload };\n case SET_CURRENT_GUESTS:\n return { ...state, currentGuests: action.payload };\n case ADD_LEAGUE_IMAGE:\n return { ...state, leaguesImages: { ...state.leaguesImages, ...action.payload } };\n case SET_MOBILE_TABLE_MODE:\n return { ...state, mobileTableMode: action.payload };\n case SET_CURRENT_SWITCH_TABLE_MODE:\n return { ...state, currentSwitchTableMode: action.payload };\n case SET_CURRENT_SWITCH_DROPDOWN_VALUE:\n return {\n ...state,\n currentSwitchDropdownValue: {\n ...state.currentSwitchDropdownValue,\n [state.currentSwitchTableMode]: action.payload\n }\n };\n case RESET_TABLE_FILTERS:\n return { ...state, currentStadium: 'All', currentHome: 'All', currentGuests: 'All' };\n default:\n return state;\n }\n};\n\nexport const setSummaryYearsData = payload => ({ type: SET_SUMMARY_YEARS_DATA, payload });\nexport const setGamesAndLeagues = payload => ({ type: SET_GAMES_AND_LEAGUES, payload });\nexport const setCurrentLeague = payload => ({ type: SET_CURRENT_GAMES_LEAGUE, payload });\nexport const setCurrentStadium = payload => ({ type: SET_CURRENT_STADIUM, payload });\nexport const setCurrentHome = payload => ({ type: SET_CURRENT_HOME, payload });\nexport const setCurrentGuests = payload => ({ type: SET_CURRENT_GUESTS, payload });\nexport const addLeagueImage = payload => ({ type: ADD_LEAGUE_IMAGE, payload });\nexport const setMobileTableMode = payload => ({ type: SET_MOBILE_TABLE_MODE, payload });\nexport const setCurrentSwitchTableMode = payload => ({ type: SET_CURRENT_SWITCH_TABLE_MODE, payload });\nexport const setCurrentSwitchDropdownValue = payload => ({ type: SET_CURRENT_SWITCH_DROPDOWN_VALUE, payload });\nexport const resetTableFilters = () => ({ type: RESET_TABLE_FILTERS });\n","import cl from '../ContentSideTables.module.scss';\nimport { setCurrentSwitchTableMode } from 'redux/gamesReducer';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport { useDispatch } from 'react-redux';\nimport { Link } from 'react-router-dom';\n\nconst Header = ({ tableMode }) => {\n const dispatch = useDispatch();\n\n const handleTableModeClick = mode => dispatch(setCurrentSwitchTableMode(mode.toLowerCase()));\n const tableModeValue = tableMode[0].toUpperCase() + tableMode.slice(1);\n\n return (\n
    \n
    \n \n
    \n Go to Player Stat\n
    \n );\n};\n\nexport default Header;\n","import Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport cl from '../ContentSideTables.module.scss';\nimport { setCurrentSwitchDropdownValue } from 'redux/gamesReducer';\nimport { useDispatch } from 'react-redux';\n\nconst DROPDOWN_VALUES = {\n batting: [\n 'AB',\n 'R',\n 'H',\n '2B',\n '3B',\n 'HR',\n 'RBI',\n 'GDP',\n 'BB',\n 'IBB',\n 'HP',\n 'SH',\n 'SF',\n 'SO',\n 'TB',\n 'AVG',\n 'SLG',\n 'OBP',\n 'OPS'\n ],\n running: ['SB', 'CS', '%SB', 'LOB'],\n fielding: ['CH', 'PO', 'A', 'E', 'DP', 'FLD%'],\n pitching: [\n 'IP',\n 'PA',\n 'R',\n 'ER',\n 'H',\n '2B',\n '3B',\n 'HR',\n 'BB',\n 'IBB',\n 'HP',\n 'SH',\n 'SF',\n 'SO',\n 'WP',\n 'BK',\n 'ERA',\n 'NP',\n 'NS',\n 'NB'\n ]\n};\n\nconst TableHeader = ({ tableMode, dropdownValue }) => {\n const dispatch = useDispatch();\n\n const handleDropdownClick = value => dispatch(setCurrentSwitchDropdownValue(value));\n\n return (\n
    \n
    Name
    \n
    \n
    Team
    \n
    \n \n
    \n
    \n
    \n );\n};\n\nexport default TableHeader;\n","import cl from '../ContentSideTables.module.scss';\nimport { Link } from 'react-router-dom';\nimport { getShortName } from 'utils';\n\nconst TableBodyRow = ({ row, tableMode, dropdownValue, REPLACES, currentGameType, isToFixed }) => {\n const teams = row.teams.map((team, i, arr) => {\n if (i !== 0)\n return (\n <>\n /\n \n {getShortName(team.name, arr.length > 1 ? 3 : 6)}\n \n \n );\n return (\n \n {getShortName(team.name, arr.length > 1 ? 3 : 6)}\n \n );\n });\n\n return (\n
    \n
    \n \n {row.surname} {row.name}\n \n
    \n
    \n
    {teams}
    \n
    \n {REPLACES[dropdownValue[tableMode]]\n ? !isToFixed\n ? row[REPLACES[dropdownValue[tableMode]]]\n : row[REPLACES[dropdownValue[tableMode]]].toFixed(3)\n : !isToFixed\n ? row[dropdownValue[tableMode]]\n : row[dropdownValue[tableMode]].toFixed(3)}\n
    \n
    \n
    \n );\n};\n\nexport default TableBodyRow;\n","import { useSelector } from 'react-redux';\nimport { useMemo } from 'react';\nimport cl from '../ContentSideTables.module.scss';\nimport TableBodyRow from './TableBodyRow';\n\nconst REPLACES = { 'FLD%': 'FLD', '%SB': 'SB_pr' };\n\nconst TableBody = ({ tableMode, dropdownValue }) => {\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const players = useSelector(state => state.games.players);\n const currentLeague = useSelector(state => state.games.currentLeague);\n\n const league = players.find(\n curLeague => curLeague.title === currentLeague.title || curLeague.title === currentLeague.name\n );\n\n const sortedPlayers = useMemo(() => {\n if (league) {\n const sortField = REPLACES[dropdownValue[tableMode]] || dropdownValue[tableMode];\n return league.players[tableMode].toSorted((a, b) => (a[sortField] > b[sortField] ? -1 : 1)).slice(0, 5);\n }\n\n return [];\n }, [league, tableMode, dropdownValue]);\n\n const isToFixed = ['AVG', 'SLG', 'OBP', 'OPS', 'ERA', '%SB', 'FLD%'].includes(dropdownValue[tableMode]);\n return (\n
    \n {sortedPlayers.map(row => (\n \n ))}\n
    \n );\n};\n\nexport default TableBody;\n","import { useSelector } from 'react-redux';\nimport cl from '../ContentSideTables.module.scss';\nimport TableHeader from './TableHeader';\nimport TableBody from './TableBody';\n\nconst Table = ({ tableMode }) => {\n const dropdownValue = useSelector(state => state.games.currentSwitchDropdownValue);\n\n return (\n
    \n \n \n
    \n );\n};\n\nexport default Table;\n","import cl from '../ContentSideTables.module.scss';\nimport { useSelector } from 'react-redux';\nimport Header from './Header';\nimport Table from './Table';\n\nconst SwitchTable = () => {\n const tableMode = useSelector(state => state.games.currentSwitchTableMode);\n \n return (\n
    \n
    \n
    \n \n );\n};\n\nexport default SwitchTable;\n","import cl from './ContentSideTables.module.scss';\nimport { useSelector } from 'react-redux';\nimport PctTable from './PctTable/PctTable';\nimport SwitchTable from './SwitchTable/SwitchTable';\nimport classNames from 'classnames';\n\nconst ContentSideTables = () => {\n const currentLeague = useSelector(state => state.games.currentLeague);\n const isMobile = useSelector(state => state.shared.isMobile);\n const mobileTableMode = useSelector(state => state.games.mobileTableMode);\n\n const isTables = currentLeague.id !== -1;\n\n const sideClasses = classNames(cl.side, {\n [cl.addHeight]: mobileTableMode === 'Team tablo/Leader'\n });\n\n const styles = !isTables\n ? { height: isMobile ? 'auto' : '70vh' }\n : { maxHeight: isMobile ? 'auto' : '75vh' };\n return (\n
    \n {isTables && (\n <>\n {(!isMobile || mobileTableMode === 'Team tablo/Leader') && (\n <>\n \n \n \n )}\n \n )}\n
    \n );\n};\n\nexport default ContentSideTables;\n","import cl from './NoDataMessage.module.scss'\n\nconst NoDataMessage = ({ text }) =>

    {text}

    ;\n\nexport default NoDataMessage;\n","import { useState, useEffect, useRef, useMemo } from 'react';\nimport CalendarImage from 'images/calendar.png';\nimport Calendar from 'react-calendar';\nimport './style.scss';\nimport { useSelector } from 'react-redux';\n\nfunction listenForOutsideClicks(listening, setListening, menuRef, setIsVisible) {\n return () => {\n if (listening) return;\n if (!menuRef.current) return;\n setListening(true);\n [`click`, `touchstart`].forEach(type => {\n document.addEventListener(type, evt => {\n if (menuRef.current?.contains(evt.target)) return;\n setIsVisible(false);\n });\n });\n };\n}\n\nconst ContentGridCalendar = ({ value, onChange }) => {\n const [listening, setListening] = useState(false);\n const [isVisible, setIsVisible] = useState(false);\n\n const menuRef = useRef(null);\n\n const games = useSelector(state => state.games.games);\n const currentLeague = useSelector(state => state.games.currentLeague);\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const currentStadium = useSelector(state => state.games.currentStadium);\n const currentHome = useSelector(state => state.games.currentHome);\n const currentGuests = useSelector(state => state.games.currentGuests);\n\n // eslint-disable-next-line\n useEffect(listenForOutsideClicks(listening, setListening, menuRef, setIsVisible));\n\n const toggleCalendar = () => setIsVisible(!isVisible);\n\n const changeHandler = value => {\n onChange(value);\n toggleCalendar();\n };\n\n //Games filtering\n let filteredData = useMemo(() => {\n const filteredGames = games.filter(\n game =>\n (currentStadium !== 'All' ? game.stadium_name === currentStadium : true) &&\n (currentLeague.id !== -1 ? game.league_id === currentLeague.id : currentGameType === game.game_type)\n // \t&&\n // (currentHome !== 'All' ? game.owners_name === currentHome : true) &&\n // (currentGuests !== 'All' ? game.guests_name === currentGuests : true)\n );\n\n if (currentHome !== 'All' && currentGuests !== 'All') {\n return filteredGames.filter(\n game =>\n (game.owners_name === currentHome || game.owners_name === currentGuests) &&\n (game.guests_name === currentHome || game.guests_name === currentGuests)\n );\n }\n\n if (currentHome !== 'All')\n return filteredGames.filter(\n game => game.owners_name === currentHome || game.guests_name === currentHome\n );\n\n if (currentGuests !== 'All')\n return filteredGames.filter(\n game => game.owners_name === currentGuests || game.guests_name === currentGuests\n );\n\n return filteredGames;\n }, [games, currentLeague, currentGameType, currentStadium, currentHome, currentGuests]);\n\n return (\n
    \n calendar\n {isVisible && (\n {\n let tileDate = date;\n tileDate.setHours(0, tileDate.getTimezoneOffset() * -1, 0, 0);\n\n return filteredData.some(game => game.date === tileDate.toJSON().slice(0, 10))\n ? tileDate.getDay() === 0 || tileDate.getDay() === 6\n ? 'fontBold activeWeekend'\n : 'fontBold'\n : null;\n }}\n tileDisabled={({ _, date }) =>\n !filteredData.some(game => {\n let tileDate = date;\n tileDate.setHours(0, tileDate.getTimezoneOffset() * -1, 0, 0);\n\n return game.date === tileDate.toJSON().slice(0, 10);\n })\n }\n />\n )}\n
    \n );\n};\n\nexport default ContentGridCalendar;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAA7AAAAOwBeShxvQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKESURBVFiF7dc9aFRBEAfwnyYWCURMEwtJoZUpFEEQ/CgEA9qZRjCCqI0pRBAEC220EoOIVn4VB5aChY1gYSIIVhYa0UJExCBiVAJGET9Qi53n7b08yHnRw8I/LPdm9j+zc7uzb+Z1mI1OjGA3ZjBZwfkdbMJhLMd9fJ/L4DSmMYavWD2PxdeEj1vhc7RM6MQi9Ge67TiBsxHxLnxoMYBhPMIWHMIBXMjmJ+EcfpTG3iCMV8z97hgPX3sr5s51YjGu4UgQb2JJPPfiFC61uAP7sS3z9RRbQx6NtdViyCaKHPiCVS0uTsqfz+FrWvozBWqodVYYHcUzrMQxPJxHABPYjJ24istlwoKIpEf9CNqFUemaq5l/orU6fh1BnoTtwijpPUDaimdtDmAGFjZBXIo9Up4U2KHxDbk6dAV6wmZpptuGjWXnzQSwXroNAyF3hTyccYZD1xXyQMjrM84RqcY0oLgFsK+JYP4kajS3A38VVQEcxPFMXovzWBHyIpwx+wjOxJzgng/bAsfD95wBtBX/c6AqgCtS9SowhCdYF3KX1KiczDgnQ1dcw3VhM5RxxsJ3Azoy0vX4ncI9qXaTyugr3JHK8ze8w228Ds4bPMaDkN/jbXA+hu417qr3mEP8oznQI3UvBRZq7BmhT327xXNfidNf8t+r8XX+y3kZN6RGosA+vMBgyN3SNuZt2qXQdYc8GDb5rk6E7wZUHUGPVCWnsyCXafw+6JOq2aeQu8JuKuP046X6d0CvlD8zIdeol+McMyX5u9kfJ1Ml+VMWTIGyzbQKVB3BRvVOltbKcdOoCmBEY3fUSjluGv/kNWwriiTcgIttXnsD7nZI2ds9B/lv4Dmu/gQJWb5CI6E/vQAAAABJRU5ErkJggg==\"","import cl from './ContentCalendar.module.scss';\n\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst MONTHS = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];\n\nconst ContentCalendarListItem = ({ date, handleClick, ...props }) => {\n return (\n
  • \n {date && (\n <>\n

    {DAYS[date.getDay()]}

    \n

    {`${MONTHS[date.getMonth()]} ${date.getDate()}`}

    \n \n )}\n
  • \n );\n};\n\nexport default ContentCalendarListItem;\n","import { forwardRef } from 'react';\nimport cl from './ContentCalendar.module.scss';\nimport ContentCalendarListItem from './ContentCalendarListItem';\n\nconst ContentCalendarList = ({ currentDate, handleClick, availableDates }, ref) => {\n const dates = [];\n\n const currentDateIndex = availableDates.findIndex(date => date === currentDate.toJSON().slice(0, 10));\n\n for (let i = 0; i < 15; i++) {\n const availableDate =\n availableDates[currentDateIndex - 6 + i] !== undefined\n ? availableDates[currentDateIndex - 6 + i]\n : null;\n const tempDate = availableDate ? new Date(availableDate) : null;\n dates.push(tempDate);\n }\n\n return (\n
    \n
      \n {dates.map((date, i) => {\n const itemStyles =\n date === null\n ? { opacity: 0 }\n : currentDate.toDateString() === date.toDateString()\n ? { fontWeight: 'bold', color: 'black' }\n : null;\n return ;\n })}\n
    \n
    \n );\n};\n\nexport default forwardRef(ContentCalendarList);\n","import Arrow from 'components/UI/buttons/Arrow/Arrow';\nimport { useEffect, useLayoutEffect, useRef, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setCurrentDate } from 'redux/sharedReducer';\nimport cl from './ContentCalendar.module.scss';\nimport ContentCalendarList from './ContentCalendarList';\nimport classNames from 'classnames';\n\nconst ContentCalendar = ({ onChange, calendarScroll }) => {\n const ref = useRef();\n const timeoutRef = useRef(null);\n\n const currentDate = useSelector(state => state.shared.currentDate);\n const isMobile = useSelector(state => state.shared.isMobile);\n const games = useSelector(state => state.games.games);\n const currentLeague = useSelector(state => state.games.currentLeague);\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const currentStadium = useSelector(state => state.games.currentStadium);\n const currentHome = useSelector(state => state.games.currentHome);\n const currentGuests = useSelector(state => state.games.currentGuests);\n const currentYear = useSelector(state => state.shared.currentYear);\n\n const dispatch = useDispatch();\n\n useLayoutEffect(() => {\n ref.current.style.transition = 'none';\n ref.current.style.transform = `translate(${isMobile ? 43 : 0}px)`;\n\n setTimeout(() => {\n if (ref.current) {\n ref.current.style.transition = 'all .25s';\n timeoutRef.current = null;\n }\n }, 30);\n }, [currentDate, isMobile]);\n\n useEffect(() => {\n if (!calendarScroll.isScroll) return;\n\n ref.current.style.transform = `translate(${\n (isMobile ? 43 : 0) - (isMobile ? 43 : 60.5) * calendarScroll.amount\n }px)`;\n }, [calendarScroll, isMobile]);\n\n useEffect(() => {\n let filteredGames = games.filter(\n game =>\n (currentStadium !== 'All' ? game.stadium_name === currentStadium : true) &&\n (currentLeague.id !== -1 ? game.league_id === currentLeague.id : currentGameType === game.game_type)\n // \t&&\n // (currentHome !== 'All' ? game.owners_name === currentHome : true) &&\n // (currentGuests !== 'All' ? game.guests_name === currentGuests : true)\n );\n\n if (currentHome !== 'All' && currentGuests !== 'All') {\n filteredGames = filteredGames.filter(\n game =>\n (game.owners_name === currentHome || game.owners_name === currentGuests) &&\n (game.guests_name === currentHome || game.guests_name === currentGuests)\n );\n } else {\n filteredGames =\n currentHome !== 'All'\n ? filteredGames.filter(game => game.owners_name === currentHome || game.guests_name === currentHome)\n : currentGuests !== 'All'\n ? filteredGames.filter(\n game => game.owners_name === currentGuests || game.guests_name === currentGuests\n )\n : filteredGames;\n }\n\n const sortedDates = filteredGames\n .reduce((sum, game) => {\n sum.push(game.date);\n return sum;\n }, [])\n .sort((a, b) => (a > b ? 1 : -1));\n\n const uniqueSortedDates = Array.from(new Set(sortedDates));\n\n const isDate = uniqueSortedDates.find(date => date === new Date().toJSON().slice(0, 10));\n\n let minDateDelta = Math.abs(new Date(uniqueSortedDates[0]) - new Date());\n let minDate = new Date();\n\n if (!isDate) {\n minDate = new Date(uniqueSortedDates[0] || new Date().toJSON().slice(0, 10));\n uniqueSortedDates.forEach(date => {\n const tempDelta = Math.abs(new Date(date) - new Date());\n if (tempDelta < minDateDelta) {\n minDate = new Date(date);\n minDateDelta = tempDelta;\n }\n });\n }\n\n !isDate ? dispatch(setCurrentDate(minDate)) : dispatch(setCurrentDate(new Date()));\n // eslint-disable-next-line\n }, [currentLeague, currentYear, games, currentHome, currentGuests, currentStadium]);\n\n let availableDates = useMemo(() => {\n const filteredGames = games.filter(\n game =>\n (currentStadium !== 'All' ? game.stadium_name === currentStadium : true) &&\n (currentLeague.id !== -1 ? game.league_id === currentLeague.id : currentGameType === game.game_type)\n // \t&&\n // (currentHome !== 'All' ? game.owners_name === currentHome : true) &&\n // (currentGuests !== 'All' ? game.guests_name === currentGuests : true)\n );\n\n if (currentHome !== 'All' && currentGuests !== 'All') {\n return filteredGames.filter(\n game =>\n (game.owners_name === currentHome || game.owners_name === currentGuests) &&\n (game.guests_name === currentHome || game.guests_name === currentGuests)\n );\n }\n\n if (currentHome !== 'All')\n return filteredGames.filter(\n game => game.owners_name === currentHome || game.guests_name === currentHome\n );\n\n if (currentGuests !== 'All')\n return filteredGames.filter(\n game => game.owners_name === currentGuests || game.guests_name === currentGuests\n );\n\n return filteredGames;\n }, [games, currentLeague, currentGameType, currentStadium, currentHome, currentGuests]);\n\n availableDates = availableDates\n .reduce((sum, game) => {\n sum.push(game.date);\n return sum;\n }, [])\n .sort((a, b) => (a > b ? 1 : -1));\n\n availableDates = Array.from(new Set(availableDates));\n\n const handleDateClick = date => () => {\n if (timeoutRef.current !== null) return;\n\n const currentDateIndex = availableDates.findIndex(\n availDate => availDate === currentDate.toJSON().slice(0, 10)\n );\n const targetDateIndex = availableDates.findIndex(availDate => availDate === date.toJSON().slice(0, 10));\n\n const daysDelta = targetDateIndex - currentDateIndex;\n ref.current.style.transform = `translate(${(isMobile ? 43 : 0) - (isMobile ? 43 : 60.5) * daysDelta}px)`;\n timeoutRef.current = setTimeout(() => {\n onChange(date);\n }, 350); //250\n };\n\n const handleArrowClick = dir => () => {\n const currentDateIndex = availableDates.findIndex(\n availDate => availDate === currentDate.toJSON().slice(0, 10)\n );\n const targetDate = availableDates[currentDateIndex + (dir === 'right' ? 1 : -1)];\n\n targetDate && handleDateClick(new Date(targetDate))();\n };\n\n //Arrow classes handling\n const leftArrowClasses = classNames(cl.arrow, {\n [cl.hidden]: availableDates.length === 0 || availableDates[0] === currentDate.toJSON().slice(0, 10)\n });\n const rightArrowClasses = classNames(cl.arrow, {\n [cl.hidden]:\n availableDates.length === 0 || availableDates.slice(-1)[0] === currentDate.toJSON().slice(0, 10)\n });\n return (\n
    \n \n \n \n
    \n );\n};\n\nexport default ContentCalendar;\n","import React, { useState } from 'react';\nimport cl from './ContentTable.module.scss';\nimport ContentGridCalendar from '../ContentGridCalendar/ContentGridCalendar';\nimport ContentCalendar from '../ContentCalendar/ContentCalendar';\nimport { setCurrentDate } from 'redux/sharedReducer';\nimport { useSelector, useDispatch } from 'react-redux';\n\nconst ContentCalendars = () => {\n const [calendarScroll, setCalendarScroll] = useState({ isScroll: false, amount: 0 });\n\n const currentDate = useSelector(state => state.shared.currentDate);\n const dispatch = useDispatch();\n\n const calendarChangeHandler = value => {\n let newDate = value;\n newDate.setHours(0, newDate.getTimezoneOffset() * -1, 0, 0);\n\n dispatch(setCurrentDate(newDate));\n };\n\n const gridCalendarChangeHandler = value => {\n let newDate = value;\n newDate.setHours(0, newDate.getTimezoneOffset() * -1, 0, 0);\n\n const daysDelta = (newDate - currentDate) / 1000 / 60 / 60 / 24;\n \n setCalendarScroll({ isScroll: true, amount: daysDelta < -3 ? -4 : daysDelta > 3 ? 4 : daysDelta });\n setTimeout(() => {\n dispatch(setCurrentDate(newDate));\n setCalendarScroll({ isScroll: false, amount: 0 });\n }, 250);\n };\n\n return (\n
    \n \n \n
    \n );\n};\n\nexport default ContentCalendars;\n","import { useMemo, useState } from 'react';\nimport cl from './ContentTable.module.scss';\nimport LeagueImage from 'images/league_image.png';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport { getShortName } from 'utils';\nimport { setCurrentGuests, setCurrentHome } from 'redux/gamesReducer';\n\nconst Logo = () => {\n const [isLoaded, setLoaded] = useState(false);\n\n const { logo: logoUrlPart } = useSelector(state => state.games.currentLeague);\n\n const imgUrl = `http://baseball-gametrack.ru/api/logo/${logoUrlPart}`;\n\n const pHolderStyles = isLoaded && logoUrlPart ? { display: 'none' } : {};\n const imgStyles = !isLoaded || !logoUrlPart ? { display: 'none' } : { marginLeft: 'unset' };\n return (\n <>\n league-img\n league-img setLoaded(true)} />\n \n );\n};\n\nconst ContentTeam = ({ games }) => {\n const currentLeague = useSelector(state => state.games.currentLeague);\n // const leaguesImages = useSelector(state => state.games.leaguesImages);\n const currentHome = useSelector(state => state.games.currentHome);\n const currentGuests = useSelector(state => state.games.currentGuests);\n\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const isMobile = useSelector(state => state.shared.isMobile);\n\n const dispatch = useDispatch();\n\n const handleHomeDropdownClick = option => dispatch(setCurrentHome(option));\n const handleGuestsDropdownClick = option => dispatch(setCurrentGuests(option));\n\n const filteredHeadings = games.filter(game => {\n return currentLeague.id === -1 ? currentGameType === game.game_type : game.league_id === currentLeague.id;\n });\n\n //teamOptions calculation\n const teamOptions = useMemo(\n () =>\n Array.from(\n new Set(\n filteredHeadings.reduce(\n (sum, cur) => {\n sum.push(cur.owners_name);\n sum.push(cur.guests_name);\n return sum;\n },\n ['All']\n )\n )\n ),\n [filteredHeadings]\n );\n\n //teamOptions sorting\n useMemo(() => teamOptions.sort((a, b) => (a > b ? 1 : -1)), [teamOptions]);\n return (\n
    \n \n
    \n

    {currentLeague.name}

    \n

    Search game:

    \n
    \n
    \n \n
    \n VS\n
    \n \n
    \n
    \n
    \n
    \n );\n};\n\nexport default ContentTeam;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABUCAYAAAA/MEEUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABiiSURBVHgB1dwHsF1V1Qfw/d4LaY9QU2gJAaQoWBAsVKnBLvau4KgDOgOWUefjG0cddNRRRxkbfOCoYP10EHVAkBZFigooIEpPCC1BSCOBhJDE81v3rcvO5ebxUi7Czpy5N/ecs8/aa//Xf5W9z+tbvXr10aWULcrToK1YsaJssskm5WnQZvc1irm0+XJI+S+3VatWxWcjTxkYGCj/5TazvzxN2rx588pf//rX8nRpT5liICEP6PC5cuXK+O546KGHyu23316WLl26xjWO+v6nqo0qPWwG0tfX94TfoWPzzTcPPunv7y9z584tv/zlL8vs2bPj+te//vVl1KiWaA8//HBZtmxZmTRpUvyfwtzT69ZTxaRSIMN3aPjzn/9c5syZU3bZZZcyZsyYMnny5LLFFlvE+S233DIGjmOuueaastVWW5WLLrqobLrppmW33XYrL3zhC6O/Z7xi0hyYyPz5CxtFjC7XXXdD2XfffQMlN954Y5k4cWJ59atfXbbZZrsydeq0MnbsuHLTTTeV8847r+y8885xfqeddip//OMfyw477FAuvPDC8sY3vrGMHz8+lNkrJfVc9RSzePHixkxmlbvuurtsv/32MdDNNtssBgVFv/rVr8qLX/zi8ta3vrVBz5bl4osvDjN74IEHyq677lrGjRtXpk2bFoqkbKaodTPTjdV6qhiCM6Nrr702Buk7cxg7dkxZsGBBDJiiRo8eXR555JFGSQ83SlwUaJg+fXr8Dm2uee5zn1vuvffeuO7KK6/sORn31JS0VMDy5SvKzTffHAjZa6+9wgsJ6KAJp9xxxx0NIW9W7r777jA590HHY489Vv7973+XX//614EipjVhwoT4neJ61XrOMVCyfPnyNkp4noULF5RXvvKVZbvttmuuWVnOPvucUAhlLV++rOy447Q4v2TJknL//feHqS1atChIGkqgj1KRd69aT00Jh9x3330xiMawYoa53cWLH2q8zrWN0lY1SlocnGGQBj9mzLg4v2DBwubeuQ3pXlYefXRFEDEF68snxDxjTSlNwQAee2xFoMd3HOL7rbfeWv7xj3+EOYlXMtiDCCTM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\"","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setMobileTableMode } from 'redux/gamesReducer';\nimport { setSearchParam } from 'utils';\nimport cl from './ContentTable.module.scss';\n\nconst ContentTableModeLinks = () => {\n const mobileTableMode = useSelector(state => state.games.mobileTableMode);\n const dispatch = useDispatch();\n\n const handleModeClick = mode => () => {\n dispatch(setMobileTableMode(mode));\n\t\tsetSearchParam('mode', mode)\n };\n return (\n
    \n\t\t\t{mobileTableMode !== 'Calendar' && }\n {mobileTableMode !== 'Team tablo/Leader' && (\n \n )}\n {/* {mobileTableMode !== 'Leaders' && } */}\n
    \n );\n};\n\nexport default ContentTableModeLinks;\n","import React from 'react';\nimport cl from './ContentTable.module.scss';\nimport ContentCalendars from './ContentCalendars';\nimport ContentTeam from './ContentTeam';\nimport ContentTableModeLinks from './ContentTableModeLinks';\nimport { useSelector } from 'react-redux';\n\nconst ContentTableHeader = ({ games }) => {\n const isMobile = useSelector(state => state.shared.isMobile);\n const currentLeague = useSelector(state => state.games.currentLeague);\n const mobileTableMode = useSelector(state => state.games.mobileTableMode);\n\n return (\n
    \n {(!isMobile || (isMobile && mobileTableMode === 'Calendar')) && }\n {(!isMobile || (isMobile && mobileTableMode === 'Calendar')) && }\n {mobileTableMode !== 'Calendar' && (\n
    Team tablo/Leader
    \n //
    {mobileTableMode === 'Team tablo' ? 'Team tablo' : 'Leaders'}
    \n )}\n {currentLeague.id !== -1 && }\n
    \n );\n};\n\nexport default ContentTableHeader;\n","import classNames from 'classnames';\nimport Ellipse from 'components/UI/icons/Ellipse';\nimport React, { forwardRef } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { setCurrentTab } from 'redux/gameReducer';\nimport { getShortName } from 'utils';\n\nconst MONTHS = {\n '01': 'january',\n '02': 'february',\n '03': 'march',\n '04': 'april',\n '05': 'may',\n '06': 'june',\n '07': 'july',\n '08': 'august',\n '09': 'september',\n 10: 'october',\n 11: 'november',\n 12: 'december'\n};\n\nconst WEEK_DAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\nconst ItemLinks = ({ game, linksClass }) => {\n const dispatch = useDispatch();\n\n const handleLinkClick = tabTitle => () => dispatch(setCurrentTab(tabTitle));\n return (\n
    \n
    \n {game.has_moments && (\n <>\n \n Box\n \n \n {game.has_videos ? 'Pitch' : 'Plays'}\n \n \n )}\n {game.has_videos && (\n \n Videos\n \n )}\n
    \n
    \n );\n};\n\nconst ContentTableListItem = ({ game, index, arr, cl }, ref) => {\n const leagues = useSelector(state => state.games.leagues);\n const isMobile = useSelector(state => state.shared.isMobile);\n const currentLeague = useSelector(state => state.games.currentLeague);\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const currentDate = useSelector(state => state.shared.currentDate);\n const scrollItemRef = ref;\n\n const isDate = index === 0 || arr[index].date !== arr[index - 1].date;\n const isActive = currentDate.toJSON().slice(0, 10) === game.date;\n const weekDay = ', ' + WEEK_DAYS[new Date(game.date).getDay()];\n const dataBefore = isDate ? game.date.slice(8, 10) + ' ' + MONTHS[game.date.slice(5, 7)] + weekDay : null;\n\n const gameStartFullTime = new Date(game.date + ' ' + game.start_time);\n\n const tableRowClasses = classNames(cl.tableRow, {\n [cl.withDate]: isDate,\n [cl.active]: isActive,\n [cl.paddingRightOne]: currentLeague.id !== -1\n });\n\n const completionClasses = classNames(cl.completionSign, {\n [cl.completedGame]: game.end_status,\n [cl.scheduledGame]: !game.end_status && gameStartFullTime > new Date(),\n [cl.incompletedGame]: !game.end_status && gameStartFullTime <= new Date()\n });\n return (\n
  • \n
    {game.start_time.slice(0, 5)}
    \n
    \n {game.stadium_name}\n {currentLeague.id === -1 && (\n / {leagues.find(league => league.id === game.league_id)?.name}\n )}\n
    \n
    \n \n {' '}\n {getShortName(game.owners_name, isMobile ? 20 : 28)}\n \n
    \n
    \n {game.score_owners} - {game.score_guests}\n
    \n
    \n \n {' '}\n {getShortName(game.guests_name, isMobile ? 20 : 28)}\n \n
    \n \n
    {game.inn !== null ? `${game.inn} inn` : '—'}
    \n
    \n {game.end_status !== null ? game.end_status : (game.has_moments && gameStartFullTime <= new Date()) ? 'In progress' : ''}\n {/* */}\n
    \n {currentLeague.id === -1 &&
    {leagues.find(league => league.id === game.league_id)?.name}
    }\n
  • \n );\n};\n\nexport default forwardRef(ContentTableListItem);\n","import React from 'react';\nimport { forwardRef } from 'react';\nimport ContentTableListItem from './ContentTableListItem';\n\nconst ContentTableList = ({ cl, filteredData }, ref) => (\n
      \n {filteredData.map((game, index, arr) => (\n \n ))}\n
    \n);\nexport default forwardRef(ContentTableList);\n","import { useMemo } from 'react';\nimport classNames from 'classnames';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport cl from './ContentTable.module.scss';\nimport { setCurrentStadium } from 'redux/gamesReducer';\nimport { useDispatch, useSelector } from 'react-redux';\n\nconst ContentTableSubHeader = ({ curLeagueId, games }) => {\n const { currentStadium, currentLeague } = useSelector(state => state.games);\n const { currentGameType } = useSelector(state => state.shared);\n const dispatch = useDispatch();\n\n const handleStadiumDropdownClick = option => dispatch(setCurrentStadium(option));\n\n const filteredHeadings = games.filter(game => {\n return currentLeague.id === -1 ? currentGameType === game.game_type : game.league_id === currentLeague.id;\n });\n\n //stadiumOptions calculation\n const stadiumOptions = useMemo(\n () =>\n Array.from(\n new Set(\n filteredHeadings.reduce(\n (sum, cur) => {\n sum.push(cur.stadium_name);\n return sum;\n },\n ['All']\n )\n )\n ),\n [filteredHeadings]\n );\n\n const headerClasses = classNames(cl.tableHeader, {\n [cl.paddingRightOne]: curLeagueId !== -1\n });\n\n return (\n
    \n
    Time
    \n
    \n \n
    \n
    Home
    \n
     
    \n
    Guests
    \n
     
    \n
    Inn
    \n\t\t\t
    Status
    \n {curLeagueId === -1 &&
    League
    }\n
    \n );\n};\n\nexport default ContentTableSubHeader;\n","import NoDataMessage from 'components/NoDataMessage/NoDataMessage';\nimport React, { useEffect, useMemo, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './ContentTable.module.scss';\nimport ContentTableHeader from './ContentTableHeader';\nimport ContentTableList from './ContentTableList';\nimport ContentTableSubHeader from './ContentTableSubHeader';\n\nconst ContentTable = ({ games }) => {\n const currentStadium = useSelector(s => s.games.currentStadium);\n const currentLeague = useSelector(s => s.games.currentLeague);\n const currentHome = useSelector(s => s.games.currentHome);\n const currentGuests = useSelector(s => s.games.currentGuests);\n const mobileTableMode = useSelector(s => s.games.mobileTableMode);\n\n const currentGameType = useSelector(s => s.shared.currentGameType);\n const currentDate = useSelector(s => s.shared.currentDate);\n const isMobile = useSelector(s => s.shared.isMobile);\n\n const scrollItemRef = useRef(null);\n\n useEffect(() => {\n if (scrollItemRef.current === null) return;\n\n setTimeout(() => {\n if (!scrollItemRef.current) return;\n\n if (isMobile) {\n document.documentElement.scrollTop =\n scrollItemRef.current.offsetTop;\n return;\n }\n scrollItemRef.current.parentNode.scrollTop = scrollItemRef.current.offsetTop;\n }, 100);\n }, [currentDate, currentLeague, isMobile]);\n\n //Games filtering\n let filteredData = useMemo(() => {\n const filteredGames = games.filter(\n game =>\n (currentStadium !== 'All' ? game.stadium_name === currentStadium : true) &&\n (currentLeague.id !== -1 ? game.league_id === currentLeague.id : currentGameType === game.game_type)\n // \t&&\n // (currentHome !== 'All' ? game.owners_name === currentHome : true) &&\n // (currentGuests !== 'All' ? game.guests_name === currentGuests : true)\n );\n\n if (currentHome !== 'All' && currentGuests !== 'All') {\n return filteredGames.filter(\n game =>\n (game.owners_name === currentHome || game.owners_name === currentGuests) &&\n (game.guests_name === currentHome || game.guests_name === currentGuests)\n );\n }\n\n return currentHome !== 'All'\n ? filteredGames.filter(game => game.owners_name === currentHome || game.guests_name === currentHome)\n : currentGuests !== 'All'\n ? filteredGames.filter(game => game.owners_name === currentGuests || game.guests_name === currentGuests)\n : filteredGames;\n }, [games, currentStadium, currentLeague, currentGameType, currentHome, currentGuests]);\n\n //Games sorting\n filteredData = useMemo(\n () =>\n filteredData\n .sort((a, b) => (a.date > b.date ? 1 : -1))\n .sort((a, b) => (a.date === b.date && a.start_time < b.start_time ? -1 : 1)),\n [filteredData]\n );\n\n const isGamesEmpty = filteredData.length === 0;\n return (\n
    \n \n\n {(!isMobile || mobileTableMode === 'Calendar') && JSON.stringify(currentDate) !== null && (\n
    \n \n {!isGamesEmpty && }\n {isGamesEmpty && }\n
    \n )}\n
    \n );\n};\n\nexport default ContentTable;\n","import ContentSideTables from '../ContentSideTables/ContentSideTables';\nimport ContentTable from '../ContentTable/ContentTable';\nimport { useSelector } from 'react-redux';\nimport cl from './Content.module.scss';\n\nconst Content = ({ games }) => {\n const currentLeague = useSelector(state => state.games.currentLeague);\n\n return (\n
    \n
    \n
    \n \n {currentLeague.id !== -1 && }\n
    \n
    \n
    \n );\n};\n\nexport default Content;\n","import React from 'react';\nimport cl from './HeaderWrapper.module.scss';\n\nconst HeaderWrapper = ({ children, ...props }) => {\n return (\n
    \n
    {children}
    \n
    \n );\n};\n\nexport default HeaderWrapper;\n","import { createContext } from \"react\";\n\nexport const PlayerYearsContext = createContext()\nexport const AnimationContext = createContext();\nexport const GamesLoadingContext = createContext();","import React, { useContext, useEffect, useRef } from 'react';\nimport cl from './HeaderSelections.module.scss';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentYear, setCurrentDate, setCurrentGameType } from 'redux/sharedReducer';\nimport { getYears, setSearchParam } from 'utils';\nimport { setCurrentLeague } from 'redux/gamesReducer';\nimport ContentTableModeLinks from '../ContentTable/ContentTableModeLinks';\nimport ContentTeam from '../ContentTable/ContentTeam';\nimport ContentCalendars from '../ContentTable/ContentCalendars';\nimport { GamesLoadingContext } from 'context';\n\nconst HeaderSelections = () => {\n const { currentYear, currentGameType } = useSelector(state => state.shared);\n const { currentLeague, games, summaryYearsData } = useSelector(state => state.games);\n\n const dispatch = useDispatch();\n\n const firstMountRef = useRef(true);\n\n\tconst isLoading = useContext(GamesLoadingContext)\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n firstMountRef.current = false;\n return;\n }\n setSearchParam('year', currentYear);\n }, [currentYear]);\n\n // useEffect(() => {\n // \tif (firstMountRef.current === true) {\n // \t\tfirstMountRef.current = false\n // \t\treturn\n // \t}\n // setSearchParam('game_type', currentGameType);\n // }, [currentGameType]);\n\n const handleClick = option => {\n // const tempDate = new Date(option, 0, 1);\n // tempDate.setHours(0, tempDate.getTimezoneOffset() * -1, 0, 0);\n\n dispatch(setCurrentDate(new Date()));\n // dispatch(setCurrentDate(tempDate));\n dispatch(setCurrentYear(option));\n dispatch(setCurrentLeague({ id: -1, name: 'All' }));\n };\n\n const getClassName = name => (name === currentGameType ? cl.active : '');\n\n const handleTypeClick = type => () => {\n dispatch(setCurrentGameType(type));\n dispatch(setCurrentLeague({ id: -1, name: 'All' }));\n };\n\n // const yearsArr = getYears();\n const yearsArr = Object.keys(summaryYearsData)\n .map(year => +year)\n .reverse();\n\n return (\n
    \n
    \n \n
    \n
      \n
    • \n Baseball\n
    • \n
    • \n Softball\n
    • \n
    \n
    {currentLeague.id !== -1 && }
    \n
    \n \n
    \n
    \n \n
    \n
    \n );\n};\n\nexport default HeaderSelections;\n","import classNames from 'classnames';\nimport React from 'react';\nimport cl from './HeaderLeagues.module.scss';\n\nconst HeaderLeaguesListItem = ({ league, handleClick, currentLeague, isLoading }) => {\n const leagueName = league.name !== 'All' ? league.name : 'All leagues';\n\n const itemClasses = classNames(cl.league, {\n [cl.active]:\n currentLeague.id === undefined\n ? league.name === currentLeague.name || league.name === currentLeague.title\n : league.id === currentLeague.id,\n [cl.lightGray]: isLoading\n });\n return (\n
  • \n {leagueName}\n
  • \n );\n};\n\nexport default HeaderLeaguesListItem;\n","import React, { forwardRef, useContext, useEffect, useRef } from 'react';\nimport cl from './HeaderLeagues.module.scss';\nimport { useSelector, useDispatch } from 'react-redux';\nimport HeaderLeaguesListItem from './HeaderLeaguesListItem';\nimport { setMobileTableMode, setCurrentLeague } from 'redux/gamesReducer';\nimport { setSearchParam } from 'utils';\nimport { GamesLoadingContext } from 'context';\n\nconst HeaderLeaguesList = ({ leagues }, ref) => {\n\tconst isLoading = useContext(GamesLoadingContext)\n\n const currentLeague = useSelector(state => state.games.currentLeague);\n const dispatch = useDispatch();\n\n const firstMountRef = useRef(true);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n firstMountRef.current = false;\n return;\n }\n\n setSearchParam('league_id', currentLeague.id);\n if (currentLeague.id === -1) {\n setSearchParam('mode', 'Calendar');\n\t\t\tdispatch(setMobileTableMode('Calendar'));\n }\n\t\t// eslint-disable-next-line\n }, [currentLeague]);\n\n const handleLeagueClick = league => () => {\n\t\tif (isLoading) return\n\n league.id === -1 && dispatch(setMobileTableMode('Calendar'));\n dispatch(setCurrentLeague(league));\n // setSearchParam('league_id', league.id)\n };\n\n return (\n
      \n {leagues.map(league => (\n \n ))}\n
    \n );\n};\n\nexport default forwardRef(HeaderLeaguesList);\n","import React, { useState, useEffect, useLayoutEffect, useRef, useMemo } from 'react';\nimport cl from './HeaderLeagues.module.scss';\nimport Arrow from 'components/UI/buttons/Arrow/Arrow';\nimport HeaderLeaguesList from './HeaderLeaguesList';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentLeaguesScroll } from 'redux/sharedReducer';\n\nconst HeaderLeagues = () => {\n const [isLeftScroll, setIsLeftScroll] = useState(false);\n const [isRightScroll, setIsRightScroll] = useState(true);\n\n const leaguesRef = useRef();\n const firstMountRef = useRef(true);\n\n const { games, leagues } = useSelector(state => state.games);\n const { currentGameType, currentYear, isMobile } = useSelector(state => state.shared);\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n const leaguesScrollDispatch = () => {\n dispatch(setCurrentLeaguesScroll(leaguesRef.current.scrollLeft));\n setIsLeftScroll(leaguesRef.current.scrollLeft <= 0 ? false : true);\n setIsRightScroll(\n leaguesRef.current.scrollLeft + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth\n );\n };\n\n const ref = leaguesRef.current;\n ref.addEventListener('scroll', leaguesScrollDispatch);\n\n setIsLeftScroll(leaguesRef.current.scrollLeft <= 0 ? false : true);\n setIsRightScroll(\n leaguesRef.current.scrollLeft + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth\n );\n\n return () => {\n ref.removeEventListener('scroll', leaguesScrollDispatch);\n };\n // eslint-disable-next-line\n }, []);\n\n useLayoutEffect(() => {\n // leaguesRef.current.style.scrollBehavior = 'unset';\n // leaguesRef.current.scrollLeft = currentScroll;\n // leaguesRef.current.style.scrollBehavior = 'smooth';\n // eslint-disable-next-line\n }, []);\n\n // useEffect(() => {\n // setIsLeftScroll(currentScroll <= 0 ? false : true);\n // setIsRightScroll(currentScroll + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth);\n // }, [currentScroll]);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n return;\n }\n\n leaguesRef.current.scrollLeft = 0;\n dispatch(setCurrentLeaguesScroll(0));\n // eslint-disable-next-line\n }, [currentGameType, currentYear]);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n firstMountRef.current = false;\n return;\n }\n\n setIsLeftScroll(leaguesRef.current.scrollLeft <= 0 ? false : true);\n setIsRightScroll(\n leaguesRef.current.scrollLeft + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth\n );\n // setIsLeftScroll(currentScroll <= 0 ? false : true);\n // setIsRightScroll(currentScroll + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth);\n // eslint-disable-next-line\n }, [leagues, currentGameType]);\n\n const scrollLeagues = e => {\n if (e.currentTarget.name === 'scroll-left') {\n const scrollValue = leaguesRef.current.scrollLeft - 249;\n leaguesRef.current.scrollLeft -= 249;\n dispatch(setCurrentLeaguesScroll(scrollValue));\n return;\n }\n const scrollValue = leaguesRef.current.scrollLeft + 249;\n leaguesRef.current.scrollLeft += 249;\n dispatch(setCurrentLeaguesScroll(scrollValue));\n };\n\n const filteredLeagues = useMemo(() => {\n const newLeagues = leagues.filter(\n league => league.game_type === currentGameType && games.some(game => game.league_id === league.id)\n );\n newLeagues.unshift({ id: -1, name: 'All' });\n return newLeagues;\n // eslint-disable-next-line\n }, [leagues, currentGameType]);\n\n return (\n
    \n \n \n \n
    \n );\n};\n\nexport default HeaderLeagues;\n","import React from 'react';\nimport cl from './Header.module.scss';\nimport HeaderWrapper from 'components/HeaderWrapper/HeaderWrapper';\nimport HeaderSelections from '../HeaderSelections/HeaderSelections';\nimport HeaderLeagues from '../HeaderLeagues/HeaderLeagues';\n\nconst Header = () => (\n \n
    \n \n \n
    \n
    \n);\n\nexport default Header;\n","import React, { useState, useEffect, useRef } from 'react';\n// import axios from 'axios';\nimport { axiosInstance, axiosCancelToken } from 'axios-instance';\nimport Content from 'components/Games/Content/Content';\nimport Header from 'components/Games/Header/Header';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport {\n // addLeagueImage,\n resetTableFilters,\n setGamesAndLeagues,\n setMobileTableMode,\n setSummaryYearsData\n} from 'redux/gamesReducer';\nimport { setCurrentLeague } from 'redux/gamesReducer';\nimport ErrorLoader from 'components/UI/loaders/ErrorLoader/ErrorLoader';\nimport Loader from 'components/UI/loaders/Loader/Loader';\nimport { getSearchParam, setSearchParam } from 'utils';\nimport { setCurrentGameType, setCurrentYear } from 'redux/sharedReducer';\nimport { GamesLoadingContext } from 'context';\n\nconst Games = () => {\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState('');\n const [loadedPercents, setLoadedPercents] = useState(null);\n\n const cancelTokenRef = useRef();\n const firstMountRef = useRef(true);\n\n const games = useSelector(state => state.games.games, shallowEqual);\n const currentLeague = useSelector(state => state.games.currentLeague, shallowEqual);\n const mobileTableMode = useSelector(state => state.games.mobileTableMode);\n const summaryYearsData = useSelector(state => state.games.summaryYearsData, shallowEqual);\n\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const currentYear = useSelector(state => state.shared.currentYear);\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (currentLeague.id !== -1) {\n const paramsArray = [\n { param: 'year', value: currentYear },\n { param: 'mode', value: mobileTableMode },\n { param: 'league_id', value: currentLeague.id }\n ];\n setSearchParam(paramsArray);\n }\n\n getSearchParam('mode') && dispatch(setMobileTableMode(getSearchParam('mode')));\n getSearchParam('game_type') && dispatch(setCurrentGameType(getSearchParam('game_type')));\n\n const fetchGamesData = async () => {\n cancelTokenRef.current = axiosCancelToken.source();\n\n try {\n setIsLoading(true);\n\n const response = await axiosInstance.get(`/main`, {\n cancelToken: cancelTokenRef.current.token,\n // timeout: 10000,\n onDownloadProgress: ({ total, loaded }) => setLoadedPercents((loaded * 100) / total)\n });\n\n setError('');\n dispatch(setSummaryYearsData(response.data));\n dispatch(setGamesAndLeagues(response.data[currentYear] ?? { games: [], leagues: [], players: null }));\n\n if (games === null) {\n console.log('dispatched after fetching');\n // dispatch(setCurrentLeague({ id: -1, name: 'All' }));\n }\n\n const curYear = +new Date().getFullYear();\n const yearsArr = Object.keys(response.data);\n\n if (getSearchParam('year')) {\n yearsArr.includes(getSearchParam('year')) && dispatch(setCurrentYear(+getSearchParam('year')));\n }\n\n if (currentYear !== curYear && !yearsArr.includes(String(currentYear))) {\n dispatch(setCurrentYear(curYear));\n }\n\n if (getSearchParam('league_id')) {\n const tempLeague = response.data[currentYear]?.leagues.find(\n league => league.id === +getSearchParam('league_id')\n );\n tempLeague && dispatch(setCurrentGameType(tempLeague.game_type));\n setTimeout(() => tempLeague && dispatch(setCurrentLeague(tempLeague)));\n }\n } catch (err) {\n if (err.message === null) return;\n // if (err.message.includes('timeout') && currentYear === 2023) {\n // dispatch(setCurrentYear(2022));\n // } else {\n setError(err.message);\n // }\n } finally {\n setIsLoading(false);\n setLoadedPercents(null);\n }\n };\n fetchGamesData();\n\n return () => {\n cancelTokenRef.current.cancel(null);\n };\n // eslint-disable-next-line\n }, []);\n\n useEffect(() => {\n if (firstMountRef.current === true) return;\n\n const yearData = summaryYearsData[currentYear] ?? { games: [], leagues: [], players: null };\n\n dispatch(setGamesAndLeagues(yearData));\n\n // const fetchGamesData = async () => {\n // cancelTokenRef.current = axios.CancelToken.source();\n\n // try {\n // setIsLoading(true);\n // const response = await axios.get(`http://baseball-gametrack.ru/api/main/year-${currentYear}`, {\n // cancelToken: cancelTokenRef.current.token,\n // timeout: 10000,\n // onDownloadProgress: ({ total, loaded }) => setLoadedPercents((loaded * 100) / total)\n // });\n\n // setError('');\n // dispatch(setGamesAndLeagues(response.data));\n\n // if (games === null) {\n // console.log('dispatched after fetching');\n // // dispatch(setCurrentLeague({ id: -1, name: 'All' }));\n // }\n // } catch (err) {\n // if (err.message === null) return;\n // if (err.message.includes('timeout') && currentYear === 2023) {\n // dispatch(setCurrentYear(2022));\n // } else {\n // setError(err.message);\n // }\n // } finally {\n // setIsLoading(false);\n // setLoadedPercents(null);\n // }\n // };\n // fetchGamesData();\n\n // return () => {\n // cancelTokenRef.current.cancel(null);\n // };\n // eslint-disable-next-line\n }, [currentYear]);\n\n // useEffect(() => {\n // if (games === null) return;\n\n // const fetchImage = async (id, name, url) => {\n // try {\n // const response = await axios.get(`http://baseball-gametrack.ru/api/logo/${url}`, {\n // responseType: 'arraybuffer',\n // timeout: 2500\n // });\n\n // dispatch(\n // addLeagueImage({\n // [id]: 'data:image/jpg;base64, ' + Buffer.from(response.data, 'binary').toString('base64'),\n // [name]: 'data:image/jpg;base64, ' + Buffer.from(response.data, 'binary').toString('base64')\n // })\n // );\n // } catch (err) {\n // // err.message === 'Request failed with status code 523' &&\n // setTimeout(() => fetchImage(id, name, url), 2500);\n // console.log(err.message);\n // }\n // };\n\n // leagues\n // .filter(league => league.logo !== '' && !leaguesImages[league.id])\n // .forEach(league => league.id !== -1 && fetchImage(league.id, league.name, league.logo));\n // // eslint-disable-next-line\n // }, [games, leagues]);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n return;\n }\n\n dispatch(resetTableFilters());\n // eslint-disable-next-line\n }, [currentGameType, currentYear, currentLeague]);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n firstMountRef.current = false;\n return;\n }\n\n // dispatch(setCurrentLeague({ id: -1, name: 'All' }));\n // dispatch(setMobileTableMode('Calendar'));\n // eslint-disable-next-line\n }, [currentGameType, currentYear]);\n\n const contentLoaderStyles = {\n margin: 'unset',\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)'\n };\n\n const { Provider } = GamesLoadingContext;\n\n if (error !== '') return ;\n\n return (\n <>\n \n
    \n \n {isLoading ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport default Games;\n","import React from 'react';\nimport { getShortName } from 'utils';\nimport { useParams } from 'react-router-dom';\n\nconst HeaderSelectionsTeamName = ({ teamClass }) => {\n const { teamName } = useParams();\n\n return

    {getShortName(teamName, 24)}

    ;\n};\n\nexport default HeaderSelectionsTeamName;\n","const defaultState = {\n teamData: [],\n\tmobileTableMode: 'Players'\n};\n\nconst SET_TEAM_DATA = 'SET_TEAM_DATA';\nconst SET_MOBILE_TEAM_GAMES_TABLE_MODE = 'SET_MOBILE_TEAM_GAMES_TABLE_MODE';\n\nexport const teamGamesReducer = (state = defaultState, action) => {\n switch (action.type) {\n case SET_TEAM_DATA:\n return { ...state, teamData: action.payload };\n case SET_MOBILE_TEAM_GAMES_TABLE_MODE:\n return { ...state, mobileTableMode: action.payload };\n default:\n return state;\n }\n};\n\nexport const setTeamData = payload => ({ type: SET_TEAM_DATA, payload });\nexport const setMobileTableMode = payload => ({ type: SET_MOBILE_TEAM_GAMES_TABLE_MODE, payload });","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setMobileTableMode } from 'redux/teamGamesReducer';\n\nconst ContentHeaderModeLink = ({ title, cl }) => {\n const mobileTableMode = useSelector(state => state.teamGames.mobileTableMode);\n const dispatch = useDispatch();\n\n const handleModeClick = mode => () => dispatch(setMobileTableMode(mode));\n const getClassName = title => (mobileTableMode === title ? cl.active : null);\n\n return (\n \n );\n};\n\nexport default ContentHeaderModeLink;\n","import React from 'react';\nimport ContentHeaderModeLink from './ContentHeaderModeLink';\nimport cl from './ContentMobileHeader.module.scss';\n\nconst ContentHeaderModeLinks = () => {\n return (\n
    \n \n \n
    \n );\n};\n\nexport default ContentHeaderModeLinks;\n","import React from 'react';\nimport ContentHeaderModeLinks from '../ContentMobileHeader/ContentHeaderModeLinks';\n\nconst HeaderSelectionsLinks = ({ wrapperClass }) => (\n
    \n \n
    \n);\n\nexport default HeaderSelectionsLinks;\n","import React from 'react';\nimport cl from './RoundLoader.module.scss';\n\nconst RoundLoader = () => (\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n);\n\nexport default RoundLoader;\n","import React, { useState, useLayoutEffect } from 'react';\nimport TeamLogo from 'images/team_logo.png';\nimport HeaderSelectionsTeamName from './HeaderSelectionsTeamName';\nimport HeaderSelectionsLinks from './HeaderSelectionsLinks';\nimport { useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport RoundLoader from 'components/UI/loaders/RoundLoader/RoundLoader';\n\nconst Logo = ({ cl }) => {\n const [isLoaded, setLoaded] = useState(false);\n\n const [league] = useSelector(state => state.teamGames.teamData);\n\n const { teamName } = useParams();\n\n useLayoutEffect(() => {\n setLoaded(false);\n }, [teamName]);\n\n const pHolderStyles = league.logo ? { display: 'none' } : {};\n const loaderStyles = isLoaded || !league.logo ? { display: 'none' } : {};\n const imgStyles = !isLoaded || !league.logo ? { display: 'none' } : {};\n return (\n <>\n
    \n
    \n \n
    \n \n setLoaded(true)}\n style={imgStyles}\n />\n
    \n \n );\n};\n\nconst HeaderSelectionsTeamInfo = ({ cl }) => (\n
    \n \n \n \n
    \n);\n\nexport default HeaderSelectionsTeamInfo;\n","export default \"data:image/png;base64,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\"","import React from 'react';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentYear, setCurrentDate } from 'redux/sharedReducer';\nimport { setCurrentLeague } from 'redux/gamesReducer';\nimport { getYears } from 'utils';\n\nconst HeaderSelectionsYears = ({yearsClass}) => {\n const currentYear = useSelector(state => state.shared.currentYear);\n\n\tconst dispatch = useDispatch();\n\n const handleClick = option => {\n const tempDate = new Date(option, 0, 1);\n tempDate.setHours(0, tempDate.getTimezoneOffset() * -1, 0, 0);\n\n dispatch(setCurrentDate(tempDate));\n dispatch(setCurrentYear(option));\n dispatch(setCurrentLeague({ id: -1, title: 'All' }));\n };\n\n\tconst yearsArr = getYears()\n return (\n
    \n \n
    \n );\n};\n\nexport default HeaderSelectionsYears;\n","import React from 'react';\nimport cl from './HeaderSelections.module.scss';\nimport HeaderSelectionsTeamInfo from './HeaderSelectionsTeamInfo';\nimport HeaderSelectionsYears from './HeaderSelectionsYears';\n\nconst HeaderSelections = () => (\n
    \n \n \n
    \n);\n\nexport default HeaderSelections;\n","import React from 'react';\nimport cl from './HeaderLeagues.module.scss';\nimport classNames from 'classnames';\n\nconst HeaderLeaguesListItem = ({ league, handleClick, currentLeague }) => {\n const leagueName = league.title !== 'All' ? league.title : 'All leagues';\n\n const leagueClasses = classNames(cl.league, {\n [cl.active]: league.id === currentLeague.id\n });\n\n return (\n
  • \n {leagueName}\n
  • \n );\n};\n\nexport default HeaderLeaguesListItem;\n","import React, { forwardRef } from 'react';\nimport cl from './HeaderLeagues.module.scss';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentLeague } from 'redux/gamesReducer';\nimport HeaderLeaguesListItem from './HeaderLeaguesListItem';\n\nconst HeaderLeaguesList = ({ leagues }, ref) => {\n const currentLeague = useSelector(state => state.games.currentLeague);\n const dispatch = useDispatch();\n\n const handleLeagueClick = league => () => dispatch(setCurrentLeague({...league, name: league.title, title: league.title}));\n\n return (\n
      \n {leagues.map(league => (\n \n ))}\n
    \n );\n};\n\nexport default forwardRef(HeaderLeaguesList);\n","import React, { useState, useEffect, useRef, useMemo } from 'react';\nimport cl from './HeaderLeagues.module.scss';\nimport Arrow from 'components/UI/buttons/Arrow/Arrow';\nimport HeaderLeaguesList from './HeaderLeaguesList';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentLeaguesScroll } from 'redux/sharedReducer';\nimport { useParams } from 'react-router-dom';\n\nconst HeaderLeagues = () => {\n const [isLeftScroll, setIsLeftScroll] = useState(false);\n const [isRightScroll, setIsRightScroll] = useState(true);\n\n const { teamName } = useParams();\n\n const leaguesRef = useRef();\n const firstMountRef = useRef(true);\n\n const currentScroll = useSelector(state => state.shared.currentLeaguesScroll);\n const currentYear = useSelector(state => state.shared.currentYear);\n const teamData = useSelector(state => state.teamGames.teamData);\n const isMobile = useSelector(state => state.shared.isMobile);\n const dispatch = useDispatch();\n\n const setScrollArrows = () => {\n setIsLeftScroll(currentScroll <= 0 ? false : true);\n setIsRightScroll(currentScroll + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth);\n };\n\n useEffect(() => {\n const leaguesScrollDispatch = () => {\n dispatch(setCurrentLeaguesScroll(leaguesRef.current.scrollLeft));\n setIsLeftScroll(leaguesRef.current.scrollLeft <= 0 ? false : true);\n setIsRightScroll(\n leaguesRef.current.scrollLeft + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth\n );\n };\n\n const ref = leaguesRef.current;\n ref.addEventListener('scroll', leaguesScrollDispatch);\n\n setIsLeftScroll(leaguesRef.current.scrollLeft <= 0 ? false : true);\n setIsRightScroll(\n leaguesRef.current.scrollLeft + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth\n );\n\n return () => {\n ref.removeEventListener('scroll', leaguesScrollDispatch);\n };\n // eslint-disable-next-line\n }, []);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n return;\n }\n\n leaguesRef.current.scrollLeft = 0;\n dispatch(setCurrentLeaguesScroll(0));\n setScrollArrows();\n // eslint-disable-next-line\n }, [currentYear]);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n firstMountRef.current = false;\n return;\n }\n\n setIsLeftScroll(leaguesRef.current.scrollLeft <= 0 ? false : true);\n setIsRightScroll(\n leaguesRef.current.scrollLeft + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth\n );\n\n // eslint-disable-next-line\n }, [teamData]);\n\n const scrollLeagues = e => {\n if (e.currentTarget.name === 'scroll-left') {\n const scrollValue = leaguesRef.current.scrollLeft - 249;\n leaguesRef.current.scrollLeft -= 249;\n dispatch(setCurrentLeaguesScroll(scrollValue));\n return;\n }\n const scrollValue = leaguesRef.current.scrollLeft + 249;\n leaguesRef.current.scrollLeft += 249;\n dispatch(setCurrentLeaguesScroll(scrollValue));\n };\n\n const leaguesArr = useMemo(() => {\n const newLeagues = [];\n teamData\n .filter(curLeague => curLeague.league.year === currentYear)\n .forEach(curLeague => newLeagues.push(curLeague.league));\n newLeagues.unshift({ id: -1, title: 'All' });\n return newLeagues;\n // eslint-disable-next-line\n }, [teamName, teamData, currentYear]);\n\n return (\n
    \n \n \n \n
    \n );\n};\n\nexport default HeaderLeagues;\n","import React from 'react';\nimport cl from './Header.module.scss';\nimport HeaderWrapper from 'components/HeaderWrapper/HeaderWrapper';\nimport HeaderSelections from '../HeaderSelections/HeaderSelections';\nimport HeaderLeagues from '../HeaderLeagues/HeaderLeagues';\n\nconst Header = () => (\n \n
    \n \n \n
    \n
    \n);\n\nexport default Header;\n","import React from 'react';\n\nconst ContentPlayersTableHeader = ({ headerStyle }) => (\n
    \n
    #
    \n
    Player
    \n
    POS
    \n
    B/T
    \n
    HT
    \n
    WT
    \n
    YOB
    \n
    \n);\n\nexport default ContentPlayersTableHeader;\n","import React from 'react';\n\nconst RowPlayerHands = ({ player }) => (\n
    \n {player.bat_hand}/{player.throw_hand}\n
    \n);\n\nexport default RowPlayerHands;\n","const defaultState = {\n playerStatsData: {},\n playerCurrentTeam: 'All teams',\n tableType: 'Batting',\n sortField: { Batting: 'AB', Fielding: 'CH', Running: 'SB', Pitching: 'GS' }\n};\n\nconst SET_PLAYER_STATS_DATA = 'SET_PLAYER_STATS_DATA';\nconst SET_PLAYER_CURRENT_TEAM = 'SET_PLAYER_CURRENT_TEAM';\nconst SET_TABLE_TYPE = 'SET_TABLE_TYPE';\nconst SET_PLAYER_SORT_FIELD = 'SET_PLAYER_SORT_FIELD';\n\nexport const playerStatsReducer = (state = defaultState, action) => {\n switch (action.type) {\n case SET_PLAYER_STATS_DATA:\n return { ...state, playerStatsData: action.payload };\n case SET_PLAYER_CURRENT_TEAM:\n return { ...state, playerCurrentTeam: action.payload };\n case SET_TABLE_TYPE:\n return { ...state, tableType: action.payload };\n case SET_PLAYER_SORT_FIELD:\n return { ...state, sortField: { ...state.sortField, [state.tableType]: action.payload } };\n default:\n return state;\n }\n};\n\nexport const setPlayerStatsData = payload => ({ type: SET_PLAYER_STATS_DATA, payload });\nexport const setPlayerCurrentTeam = payload => ({ type: SET_PLAYER_CURRENT_TEAM, payload });\nexport const setTableType = payload => ({ type: SET_TABLE_TYPE, payload });\nexport const setSortField = payload => ({ type: SET_PLAYER_SORT_FIELD, payload });\n","import React from 'react'\nimport { Link, useParams } from 'react-router-dom';\nimport { setPlayerCurrentTeam as setCurrentTeam } from 'redux/playerStatsReducer';\nimport { useDispatch } from 'react-redux';\n\nconst RowPlayerName = ({player, nameClass}) => {\n const { teamName } = useParams();\n\n const dispatch = useDispatch();\n\n\tconst handlePlayerClick = () => {\n dispatch(setCurrentTeam(teamName));\n };\n\n\treturn (\n\t\t
    \n \n {player.name + ' ' + player.surname}\n \n
    \n\t)\n}\n\nexport default RowPlayerName","import React from 'react';\nimport RowPlayerHands from './RowPlayerHands';\nimport RowPlayerName from './RowPlayerName';\n\nconst ContentPlayersTableRow = ({ player, index, cl }) => (\n
  • \n
    {index + 1}
    \n \n
    {player.pos ?? '—'}
    \n \n
    {player.height}
    \n
    {player.weight}
    \n
    {player.yob}
    \n
  • \n);\n\nexport default ContentPlayersTableRow;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport ContentPlayersTableRow from './ContentPlayersTableRow/ContentPlayersTableRow';\n\nconst ContentPlayersTableBody = ({ cl }) => {\n const teamData = useSelector(state => state.teamGames.teamData);\n const currentYear = useSelector(state => state.shared.currentYear);\n const currentLeague = useSelector(state => state.games.currentLeague);\n \n const PLAYERS_DATA =\n currentLeague.id !== -1\n ? teamData.find(item => item.league.id === currentLeague.id)?.roster || []\n : teamData.reduce((sum, cur) => {\n if (cur.league.year === currentYear) {\n cur.roster.forEach(\n curPlayer =>\n !sum.find(\n sumPlayer => sumPlayer.surname === curPlayer.surname && sumPlayer.name === curPlayer.name\n ) && sum.push(curPlayer)\n );\n }\n return sum;\n }, []);\n return (\n
      \n {PLAYERS_DATA.map((player, i) => (\n \n ))}\n
    \n );\n};\n\nexport default ContentPlayersTableBody;\n","import React from 'react';\nimport cl from './ContentPlayersTable.module.scss';\nimport { Link, useParams } from 'react-router-dom';\nimport ContentPlayersTableHeader from './ContentPlayersTableHeader';\nimport ContentPlayersTableBody from './ContentPlayersTableBody';\n\nconst ContentPlayersTable = () => {\n const { teamName } = useParams();\n\n return (\n
    \n
    \n \n \n
    \n
    \n Go to Player Stat\n
    \n
    \n );\n};\n\nexport default ContentPlayersTable;\n","import React from 'react';\n\nconst ContentGamesTableHeader = ({ cl }) => {\n return (\n
    \n
    Data
    \n
    Home
    \n
     
    \n
    Guests
    \n
     
    \n
    Inn
    \n
    \n );\n};\n\nexport default ContentGamesTableHeader;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nconst MONTHS = {\n '01': 'january',\n '02': 'february',\n '03': 'march',\n '04': 'april',\n '05': 'may',\n '06': 'june',\n '07': 'july',\n '08': 'august',\n '09': 'september',\n 10: 'october',\n 11: 'november',\n 12: 'december'\n};\n\nconst RowDate = ({ date }) => {\n const isMobile = useSelector(state => state.shared.isMobile);\n\n const dateFormat = !isMobile ? MONTHS[date.slice(5, 7)].slice(0, 3) : MONTHS[date.slice(5, 7)];\n\tconst dateString = date.slice(8, 10) + ' ' + dateFormat\n\n return
    {dateString}
    ;\n};\n\nexport default RowDate;\n","import React from 'react'\n\nconst RowInningsInfo = ({lastInn}) => {\n\treturn (\n\t\t
    {lastInn !== null ? `${lastInn} inn` : '—'}
    \n\t)\n}\n\nexport default RowInningsInfo","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { capitalizeFirstLetter } from 'utils';\n\nconst RowLink = ({ to, id }) => {capitalizeFirstLetter(to)};\n\nexport default RowLink;\n","import RowLink from './RowLink';\n\nconst RowLinks = ({ game }) => (\n
    \n
    \n {game.last_inn !== null && (\n <>\n \n \n \n )}\n {game.has_records && }\n
    \n
    \n);\n\nexport default RowLinks;\n","import React from 'react';\n\nconst RowScores = ({ game }) => (\n
    \n {game.homies.score} - {game.visitors.score}\n
    \n);\nexport default RowScores;\n","import React from 'react';\nimport { Link, useParams } from 'react-router-dom';\nimport { getShortName } from 'utils';\n\nconst RowTeamName = ({ teamClass, teamName }) => {\n const { gameType } = useParams();\n\n return (\n
    \n {getShortName(teamName, 22)}\n
    \n );\n};\n\nexport default RowTeamName;\n","import React from 'react';\nimport RowDate from './RowDate';\nimport RowInningsInfo from './RowInningsInfo';\nimport RowLinks from './RowLinks';\nimport RowScores from './RowScores';\nimport RowTeamName from './RowTeamName';\n\nconst ContentGamesTableRow = ({ cl, game }) => {\n return (\n
  • \n \n \n \n \n \n \n
  • \n );\n};\n\nexport default ContentGamesTableRow;\n","import React from 'react';\nimport ContentGamesTableRow from './ContentGamesTableRow/ContentGamesTableRow';\n\nconst ContentGamesTableBody = ({ cl, games }) => (\n
      \n {games.map(game => (\n \n ))}\n
    \n);\n\nexport default ContentGamesTableBody;\n","import React, { useMemo } from 'react';\nimport cl from './ContentGamesTable.module.scss';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport ContentGamesTableHeader from './ContentGamesTableHeader';\nimport ContentGamesTableBody from './ContentGamesTableBody';\n\nconst ContentGamesTable = () => {\n const currentLeague = useSelector(state => state.games.currentLeague);\n const currentYear = useSelector(state => state.shared.currentYear);\n const teamData = useSelector(state => state.teamGames.teamData);\n\n //Filtering teamData leagues by current year\n const currentYearLeagues = useMemo(\n () => teamData.filter(curLeague => curLeague.league.year === currentYear),\n [teamData, currentYear]\n );\n\n //Games summary by currentLeague\n const gamesArray = useMemo(\n () =>\n currentLeague.id === -1\n ? currentYearLeagues.reduce((sum, curLeague) => {\n curLeague.games.forEach(game => sum.push(game));\n return sum;\n }, [])\n : currentYearLeagues.find(curLeague =>\n currentLeague.id === undefined\n ? curLeague.league.title === currentLeague.title\n : curLeague.league.id === currentLeague.id\n )?.games || [],\n [currentYearLeagues, currentLeague]\n );\n\n //Games sorting\n const sortedGamesArray = useMemo(() => gamesArray.sort((a, b) => (a.date > b.date ? 1 : -1)), [gamesArray]);\n return (\n
    \n
    \n \n \n
    \n
    \n Go to Team Stat\n
    \n
    \n );\n};\n\nexport default ContentGamesTable;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link, useParams } from 'react-router-dom';\n\nconst ContentMobileHeaderStatsLink = ({ wrapperClass }) => {\n const { teamName } = useParams();\n\n const mobileTableMode = useSelector(state => state.teamGames.mobileTableMode);\n\n const statsLink =\n mobileTableMode === 'Calendar' ? (\n Go to Team Stat\n ) : (\n Go to Player Stat\n );\n return
    {statsLink}
    ;\n};\n\nexport default ContentMobileHeaderStatsLink;\n","import React from 'react';\nimport ContentHeaderModeLinks from './ContentHeaderModeLinks';\nimport cl from './ContentMobileHeader.module.scss';\nimport ContentMobileHeaderStatsLink from './ContentMobileHeaderStatsLink';\n\nconst ContentMobileHeader = () => (\n
    \n \n \n
    \n);\n\nexport default ContentMobileHeader;\n","import React from 'react';\nimport ContentPlayersTable from '../ContentPlayersTable/ContentPlayersTable';\nimport ContentGamesTable from '../ContentGamesTable/ContentGamesTable';\nimport cl from './Content.module.scss';\nimport { useSelector } from 'react-redux';\nimport ContentMobileHeader from '../ContentMobileHeader/ContentMobileHeader';\n\nconst Content = () => {\n const isMobile = useSelector(state => state.shared.isMobile);\n const mobileTableMode = useSelector(state => state.teamGames.mobileTableMode);\n\n\tconst isPlayersTable = mobileTableMode === 'Players'\n\tconst isGamesTable = mobileTableMode === 'Calendar' || !isMobile\n return (\n
    \n
    \n
    \n {isMobile && }\n {isPlayersTable && }\n {isGamesTable && }\n
    \n
    \n
    \n );\n};\n\nexport default Content;\n","import React, { useState, useEffect, useRef } from 'react';\nimport ErrorLoader from 'components/UI/loaders/ErrorLoader/ErrorLoader';\nimport Header from 'components/TeamGames/Header/Header';\nimport Content from 'components/TeamGames/Content/Content';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setTeamData } from 'redux/teamGamesReducer';\nimport { useParams } from 'react-router-dom';\nimport Loader from 'components/UI/loaders/Loader/Loader';\nimport { axiosCancelToken, axiosInstance } from 'axios-instance';\n\nconst TeamGames = () => {\n const [isTeamLoading, setIsTeamLoading] = useState(false);\n const [error, setError] = useState('');\n\n const { gameType, teamName } = useParams();\n\n const teamData = useSelector(state => state.teamGames.teamData);\n const dispatch = useDispatch();\n\n const cancelTeamTokenRef = useRef();\n\n useEffect(() => () => cancelTeamTokenRef.current.cancel(null), []);\n\n useEffect(() => {\n const fetchGamesData = async () => {\n cancelTeamTokenRef.current = axiosCancelToken.source();\n\n try {\n setIsTeamLoading(true);\n const response = await axiosInstance.get(`/${gameType}/team?team_name=${teamName}`, {\n cancelToken: cancelTeamTokenRef.current.token,\n timeout: 10000\n });\n\n setError('');\n dispatch(setTeamData(response.data));\n } catch (err) {\n if (err.message === null) return;\n console.log(err.message);\n setError(err.message);\n } finally {\n setIsTeamLoading(false);\n }\n };\n fetchGamesData();\n // eslint-disable-next-line\n }, [teamName]);\n\n return (\n <>\n {error !== '' ? (\n \n ) : isTeamLoading && teamData.length === 0 ? (\n \n ) : teamData.length === 0 ? (\n <>\n ) : (\n <>\n
    \n \n \n )}\n \n );\n};\n\nexport default TeamGames;\n","const defaultState = {\n statsData: {},\n\tcustomStatsData: {},\n\tcurrentCustomLeagues: [],\n\tcurrentCustomLeaguesForFetch: [],\n tableMode: 'Batting',\n sortField: { Batting: 'G', 'Fielding / Running': 'G', Pitching: 'G' },\n sortDirection: 'desc',\n\tstatsPlayerFilterValue: ''\n};\n\nconst SET_STATS_DATA = 'SET_STATS_DATA';\nconst SET_CUSTOM_STATS_DATA = 'SET_CUSTOM_STATS_DATA';\nconst SET_CURRENT_CUSTOM_LEAGUES = 'SET_CURRENT_CUSTOM_LEAGUES';\nconst SET_CURRENT_CUSTOM_LEAGUES_FOR_FETCH = 'SET_CURRENT_CUSTOM_LEAGUES_FOR_FETCH';\nconst SET_TABLE_MODE = 'SET_TABLE_MODE';\nconst SET_SORT_FIELD = 'SET_SORT_FIELD';\nconst SET_SORT_DIRECTION = 'SET_SORT_DIRECTION';\nconst SET_STATS_PLAYER_FILTER_VALUE = 'SET_STATS_PLAYER_FILTER_VALUE';\n\nexport const statsReducer = (state = defaultState, action) => {\n switch (action.type) {\n case SET_STATS_DATA:\n return { ...state, statsData: action.payload };\n case SET_CUSTOM_STATS_DATA:\n return { ...state, customStatsData: action.payload };\n case SET_CURRENT_CUSTOM_LEAGUES:\n return { ...state, currentCustomLeagues: action.payload };\n case SET_CURRENT_CUSTOM_LEAGUES_FOR_FETCH:\n return { ...state, currentCustomLeaguesForFetch: action.payload };\n case SET_TABLE_MODE:\n return { ...state, tableMode: action.payload };\n case SET_SORT_FIELD:\n return { ...state, sortField: { ...state.sortField, [state.tableMode]: action.payload } };\n case SET_SORT_DIRECTION:\n return { ...state, sortDirection: action.payload };\n case SET_STATS_PLAYER_FILTER_VALUE:\n return { ...state, statsPlayerFilterValue: action.payload };\n default:\n return state;\n }\n};\n\nexport const setStatsData = payload => ({ type: SET_STATS_DATA, payload });\nexport const setCustomStatsData = payload => ({ type: SET_CUSTOM_STATS_DATA, payload });\nexport const setCurrentCustomLeagues = payload => ({ type: SET_CURRENT_CUSTOM_LEAGUES, payload });\nexport const setCurrentCustomLeaguesForFetch = payload => ({ type: SET_CURRENT_CUSTOM_LEAGUES_FOR_FETCH, payload });\nexport const setTableMode = payload => ({ type: SET_TABLE_MODE, payload });\nexport const setSortField = payload => ({ type: SET_SORT_FIELD, payload });\nexport const setSortDirection = payload => ({ type: SET_SORT_DIRECTION, payload });\nexport const setStatsPlayerFilterValue = payload => ({ type: SET_STATS_PLAYER_FILTER_VALUE, payload });\n","import React, { useState, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useDispatch } from 'react-redux';\nimport { setStatsPlayerFilterValue } from 'redux/statsReducer';\nimport cl from './ContentPlayerFilterField.module.scss';\nimport classNames from 'classnames';\n\nconst ContentPlayerFilterField = ({ mobile = false, styles = null }) => {\n\tconst playerFilter = useSelector(state => state.stats.statsPlayerFilterValue)\n const [tempPlayerFilter, setTempPlayerFilter] = useState(playerFilter);\n\n const filterTimeoutRef = useRef();\n\n\tconst dispatch = useDispatch()\n\n const handleFilterFieldChange = e => {\n const value = e.target.value;\n setTempPlayerFilter(value);\n clearTimeout(filterTimeoutRef.current);\n\n filterTimeoutRef.current = setTimeout(() => {\n dispatch(setStatsPlayerFilterValue(value));\n }, 400);\n };\n\n\tconst inputClasses = classNames(cl.filterField, {\n\t\t[cl.mobile]: mobile\n\t})\n return (\n \n );\n};\n\nexport default ContentPlayerFilterField;\n","import React, { useMemo, useState } from 'react';\nimport cl from './HeaderSelections.module.scss';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentYear, setCurrentDate, setCurrentGameType } from 'redux/sharedReducer';\nimport { setCurrentLeague } from 'redux/gamesReducer';\nimport { setTableMode } from 'redux/statsReducer';\nimport { Link, useParams } from 'react-router-dom';\nimport ContentPlayerFilterField from '../ContentPlayerTable/ContentPlayerFilterField';\nimport { getSearchParam, setSearchParam } from 'utils';\n\nconst TABLE_MODES = ['Batting', 'Fielding / Running', 'Pitching'];\n\nconst HeaderSelections = () => {\n const { statsType } = useParams();\n\n\tconst [currentTeam, setCurrentTeam] = useState(getSearchParam('team') || 'All');\n\n const currentYear = useSelector(state => state.shared.currentYear);\n const currentGameType = useSelector(state => state.shared.currentGameType);\n\n const tableMode = useSelector(state => state.stats.tableMode);\n const statsData = useSelector(state => state.stats.statsData);\n\n\tconst currentLeague = useSelector(state => state.games.currentLeague);\n\n const dispatch = useDispatch();\n\n const handleClick = option => {\n const tempDate = new Date(option, 0, 1);\n tempDate.setHours(0, tempDate.getTimezoneOffset() * -1, 0, 0);\n\n\t\tdispatch(setCurrentLeague({ id: -1, name: 'All' }));\n dispatch(setCurrentDate(tempDate));\n dispatch(setCurrentYear(option));\n };\n\n const getClassName = name =>\n name === statsType || (name === 'player' && statsType !== 'team') ? cl.active : '';\n\n const handleModeClick = mode => dispatch(setTableMode(mode));\n const handleGameTypeClick = gameType => dispatch(setCurrentGameType(gameType));\n\n\tconst yearsArr = Object.keys(statsData)\n .map(year => +year)\n .reverse();\n\n\t\t// Team selections\n\t\tconst handleTeamClick = team => {\n\t\t\tsetCurrentTeam(team);\n\t\t\tsetSearchParam('team', team);\n\t\t};\n\n\t\tlet filteredStatsData = useMemo(\n\t\t\t() =>\n\t\t\t\tcurrentLeague.id !== -1\n\t\t\t\t\t? statsData[currentYear]?.find(\n\t\t\t\t\t\t\titem =>\n\t\t\t\t\t\t\t\t(item.title === currentLeague.name || item.title === currentLeague.title) &&\n\t\t\t\t\t\t\t\titem.type === currentGameType\n\t\t\t\t\t\t)?.players[tableMode.toLowerCase()] || []\n\t\t\t\t\t: statsData[currentYear]?.find(item => item.title === 'All leagues' && item.type === currentGameType)\n\t\t\t\t\t\t\t?.players[tableMode.toLowerCase()] || [],\n\t\n\t\t\t[currentLeague, statsData, tableMode, currentGameType, currentYear]\n\t\t);\n\t\n\t\tconst teamOptions = useMemo(\n\t\t\t() =>\n\t\t\t\tArray.from(\n\t\t\t\t\tnew Set(\n\t\t\t\t\t\tfilteredStatsData.reduce((sum, cur) => {\n\t\t\t\t\t\t\tcur.teams.forEach(team => sum.push(team.name));\n\t\t\t\t\t\t\treturn sum;\n\t\t\t\t\t\t}, [])\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t[filteredStatsData]\n\t\t);\n\t\n\t\tconst sortedTeamOptions = useMemo(() => {\n\t\t\tconst sortedTeamsArr = teamOptions.sort((a, b) => (a > b ? 1 : -1));\n\t\t\tsortedTeamsArr.unshift('All');\n\t\n\t\t\treturn sortedTeamsArr;\n\t\t}, [teamOptions]);\n return (\n
    \n
    \n \n Player\n \n \n Team\n \n
    \n \n
    \n
    \n {statsType === 'player' && (\n
    \n \n\t\t\t\t\t\n
    \n )}\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n );\n};\n\nexport default HeaderSelections;\n","import classNames from 'classnames';\nimport React from 'react';\nimport cl from './HeaderLeagues.module.scss';\n\nconst HeaderLeaguesListItem = ({ league, handleClick, currentLeague, isLoading }) => {\n const leagueName = league.title !== 'All' ? league.title : 'All leagues';\n\n const itemClasses = classNames(cl.league, {\n [cl.active]: league.title === currentLeague.title || league.title === currentLeague.name,\n [cl.lightGray]: isLoading\n });\n return (\n
  • \n {leagueName}\n
  • \n );\n};\n\nexport default HeaderLeaguesListItem;","import { createContext, useContext } from 'react';\n\nconst ctx = createContext();\n\nconst StatsLoadingProvider = ({ value, children }) => {children};\n\nexport const useStatsLoadingCtx = () => useContext(ctx);\n\nexport default StatsLoadingProvider;\n","import React, { forwardRef } from 'react';\nimport cl from './HeaderLeagues.module.scss';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentLeague } from 'redux/gamesReducer';\nimport HeaderLeaguesListItem from './HeaderLeaguesListItem';\nimport { useStatsLoadingCtx } from 'context/StatsLoadingContext';\n\nconst HeaderLeaguesList = ({ leagues }, ref) => {\n const isLoading = useStatsLoadingCtx();\n\n const currentLeague = useSelector(state => state.games.currentLeague);\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const dispatch = useDispatch();\n\n const handleLeagueClick = league => () => {\n if (isLoading) return;\n\n const { id, title } = league;\n\n dispatch(setCurrentLeague({ ...league, name: title, title, id }));\n };\n\n return (\n
      \n {leagues\n .filter(\n league =>\n (league.type === currentGameType || league.id === -1 || league.id === -2) && league.id !== null\n )\n .map((league, index) => (\n \n ))}\n
    \n );\n};\n\nexport default forwardRef(HeaderLeaguesList);\n","import React, { useState, useEffect, useRef, useMemo } from 'react';\nimport cl from './HeaderLeagues.module.scss';\nimport Arrow from 'components/UI/buttons/Arrow/Arrow';\nimport HeaderLeaguesList from './HeaderLeaguesList';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentLeaguesScroll } from 'redux/sharedReducer';\nimport { setCurrentLeague } from 'redux/gamesReducer';\n\nconst HeaderLeagues = () => {\n const [isLeftScroll, setIsLeftScroll] = useState(false);\n const [isRightScroll, setIsRightScroll] = useState(true);\n\n const leaguesRef = useRef();\n const firstMountRef = useRef(true);\n\n const currentYear = useSelector(state => state.shared.currentYear);\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const isMobile = useSelector(state => state.shared.isMobile);\n const statsData = useSelector(state => state.stats.statsData);\n const dispatch = useDispatch();\n\n useEffect(() => {\n const leaguesScrollDispatch = () => {\n dispatch(setCurrentLeaguesScroll(leaguesRef.current.scrollLeft));\n setIsLeftScroll(leaguesRef.current.scrollLeft <= 0 ? false : true);\n setIsRightScroll(\n leaguesRef.current.scrollLeft + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth\n );\n };\n\n const ref = leaguesRef.current;\n ref.addEventListener('scroll', leaguesScrollDispatch);\n\n setIsLeftScroll(leaguesRef.current.scrollLeft <= 0 ? false : true);\n setIsRightScroll(\n leaguesRef.current.scrollLeft + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth\n );\n\n return () => {\n ref.removeEventListener('scroll', leaguesScrollDispatch);\n };\n // eslint-disable-next-line\n }, []);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n return;\n }\n\n leaguesRef.current.style.scrollBehavior = 'unset';\n leaguesRef.current.scrollLeft = 0;\n leaguesRef.current.style.scrollBehavior = 'smooth';\n\n dispatch(setCurrentLeaguesScroll(0));\n\n // eslint-disable-next-line\n }, [currentYear]);\n useEffect(() => {\n if (firstMountRef.current === true) {\n return;\n }\n\n leaguesRef.current.style.scrollBehavior = 'unset';\n leaguesRef.current.scrollLeft = 0;\n leaguesRef.current.style.scrollBehavior = 'smooth';\n\n setIsLeftScroll(leaguesRef.current.scrollLeft <= 0 ? false : true);\n setIsRightScroll(\n leaguesRef.current.scrollLeft + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth\n );\n\n dispatch(setCurrentLeaguesScroll(0));\n dispatch(setCurrentLeague({ id: -1, name: 'All' }));\n // eslint-disable-next-line\n }, [currentGameType]);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n firstMountRef.current = false;\n return;\n }\n\n setIsLeftScroll(leaguesRef.current.scrollLeft <= 0 ? false : true);\n setIsRightScroll(\n leaguesRef.current.scrollLeft + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth\n );\n // eslint-disable-next-line\n }, [currentYear]);\n\n const scrollLeagues = e => {\n if (e.currentTarget.name === 'scroll-left') {\n const scrollValue = leaguesRef.current.scrollLeft - 249;\n leaguesRef.current.scrollLeft -= 249;\n dispatch(setCurrentLeaguesScroll(scrollValue));\n\n return;\n }\n\n const scrollValue = leaguesRef.current.scrollLeft + 249;\n leaguesRef.current.scrollLeft += 249;\n dispatch(setCurrentLeaguesScroll(scrollValue));\n };\n\n const leaguesArr = useMemo(() => {\n const newLeagues = statsData[currentYear] ? statsData[currentYear].slice() : [];\n newLeagues.unshift({ id: -2, title: 'Custom leagues' });\n newLeagues.unshift({ id: -1, title: 'All' });\n\n return newLeagues;\n // eslint-disable-next-line\n }, [statsData, currentYear]);\n\n return (\n
    \n \n \n \n
    \n );\n};\n\nexport default HeaderLeagues;\n","import React from 'react';\nimport cl from './Header.module.scss';\nimport HeaderWrapper from 'components/HeaderWrapper/HeaderWrapper';\nimport HeaderSelections from '../HeaderSelections/HeaderSelections';\nimport HeaderLeagues from '../HeaderLeagues/HeaderLeagues';\n\nconst Header = () => {\n return (\n \n
    \n \n \n
    \n
    \n );\n};\n\nexport default Header;\n","export default __webpack_public_path__ + \"static/media/checkmark_blank.bd9fc8ea.svg\";","export default __webpack_public_path__ + \"static/media/checkmark_filled.ea3c045f.svg\";","import CheckmarkBlank from 'icons/checkmark_blank.svg';\nimport CheckmarkFilled from 'icons/checkmark_filled.svg';\n\nconst Checkmark = ({ isActive }) => {\n return Checkmark;\n};\n\nexport default Checkmark;\n","import ArrowDown from 'components/UI/icons/ArrowDown';\nimport React, { useState } from 'react';\n// import { getShortName } from 'utils';\nimport cl from './Dropdown.module.scss';\nimport classNames from 'classnames';\nimport useComponentVisible from 'hooks/useComponentVisible';\nimport CrossClose from 'components/UI/buttons/CrossClose/CrossClose';\nimport Checkmark from 'components/UI/checkboxes/CheckMark/Checkmark';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setCurrentCustomLeagues } from 'redux/statsReducer';\n\n// const SearchField = ({ value, setValue }) => {\n// const handleSearchFieldChange = e => {\n// setValue(e.target.value);\n// };\n// return (\n// \n// );\n// };\n\nconst Dropdown = ({\n title,\n options,\n currentOptions,\n handleOkBtn,\n wrapperStyles = null,\n listWrapperClass = null,\n listStyles = null,\n itemStyles = null,\n itemTextStyles = null,\n titleStyles = null,\n listWrapperStyles = null,\n shortNames = false,\n searchField = false,\n disabled = false\n}) => {\n // const [listening, setListening] = useState(false);\n // const [isOpen, setIsOpen] = useState(false);\n const [searchFieldValue, setSearchFieldValue] = useState('');\n\n const currentCustomLeagues = useSelector(state => state.stats.currentCustomLeagues);\n const dispatch = useDispatch();\n\n // const menuRef = useRef(null);\n // eslint-disable-next-line\n // useEffect(listenForOutsideClicks(listening, setListening, menuRef, setIsOpen, setSearchFieldValue));\n const {\n ref: menuRef,\n isComponentVisible: isOpen,\n setIsComponentVisible: setIsOpen\n } = useComponentVisible(false, setSearchFieldValue);\n\n const handleTitleClick = () => {\n if (disabled) return;\n\n setIsOpen(!isOpen);\n };\n\n const handleOptionClick = option => () => {\n const isLeague = currentCustomLeagues.find(prevOption => prevOption === option.id);\n\n let newLeagues = [...currentCustomLeagues];\n\n if (!isLeague) newLeagues.push(option.id);\n if (isLeague) newLeagues = newLeagues.filter(prevOption => prevOption !== option.id);\n\n\t\tconsole.log(newLeagues)\n\n\t\tdispatch(setCurrentCustomLeagues(newLeagues))\n \n // handleClick(option);\n // setIsOpen(false);\n };\n\n\tconst handleOkBtnClick = () => {\n\t\thandleOkBtn?.();\n\t\tsetIsOpen(false)\n\t}\n\n const handleCrossClick = () => {\n setIsOpen(false);\n };\n\n const getFilteredOptions = options => {\n const filterArr = searchFieldValue.split(' ');\n\n return options.filter(option => {\n return filterArr.reduce((sum, word) => {\n if (\n !option\n .split(' ')\n .find(optionWord => optionWord.slice(0, word.length).toLowerCase() === word.toLowerCase())\n ) {\n sum = false;\n }\n return sum;\n }, true);\n });\n };\n\n const titleClasses = classNames(cl.title, {\n [cl.disabled]: disabled\n });\n\n const filteredOptions = searchFieldValue === '' ? options : getFilteredOptions(options);\n\n console.log(currentCustomLeagues);\n return (\n
    \n
    \n {title}\n
    \n \n
    \n
    \n {isOpen && (\n
    \n
      \n {/* {searchField && (\n
    • \n \n
    • \n )} */}\n {filteredOptions.map((option, i) => {\n return (\n
    • \n \n

      {option.title}

      \n {/* {shortNames ? getShortName(option, shortNames) : option} */}\n
    • \n );\n })}\n
    \n
    \n \n
    \n \n
    \n )}\n
    \n );\n};\n\nexport default Dropdown;\n","import React, { useState, useEffect, useRef } from 'react';\nimport cl from './ContentTeamTable.module.scss';\nimport { Link } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setCurrentCustomLeaguesForFetch, setSortDirection, setSortField } from 'redux/statsReducer';\nimport CustomLeaguesDropdown from 'components/UI/dropdown/CustomLeaguesDropdown/Dropdown';\n\nconst ContentTeamTable = ({ getTableHeaders, getTableRows, getSortedStatsData }) => {\n const [isScrollable, setIsScrollable] = useState(true);\n\n const tableMode = useSelector(state => state.stats.tableMode);\n const sortField = useSelector(state => state.stats.sortField);\n const sortDirection = useSelector(state => state.stats.sortDirection);\n const statsData = useSelector(state => state.stats.statsData);\n const currentLeague = useSelector(state => state.games.currentLeague);\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const isMobile = useSelector(state => state.shared.isMobile);\n const mobileOrientation = useSelector(state => state.shared.mobileOrientation);\n const currentYear = useSelector(state => state.shared.currentYear);\n\n const currentCustomLeagues = useSelector(state => state.stats.currentCustomLeagues);\n const customStatsData = useSelector(state => state.stats.customStatsData);\n\n const dispatch = useDispatch();\n\n const headerScroll = useRef(null);\n const rowsScroll = useRef(null);\n\n useEffect(() => {\n if (rowsScroll.current === null || !isMobile) return;\n\n setTimeout(() => setIsScrollable(rowsScroll.current?.clientWidth < rowsScroll.current?.scrollWidth), 500);\n // eslint-disable-next-line\n }, []);\n\n useEffect(() => {\n if (!isMobile) return;\n\n setIsScrollable(rowsScroll.current.clientWidth < rowsScroll.current.scrollWidth);\n }, [tableMode, currentLeague.id, isMobile]);\n\n useEffect(() => {\n if (!isMobile || rowsScroll.current === null) return;\n\n setTimeout(() => {\n setIsScrollable(rowsScroll.current.clientWidth < rowsScroll.current.scrollWidth);\n }, 150);\n }, [isMobile, mobileOrientation]);\n\n const handleFieldClick = field => () => {\n sortField[tableMode] !== field\n ? dispatch(setSortField(field))\n : dispatch(setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc'));\n };\n\n const filteredStatsData =\n currentLeague.id === -2\n ? customStatsData.find(item => item.type === currentGameType)?.teams[tableMode.toLowerCase()] || []\n : currentLeague.id !== -1\n ? statsData[currentYear].find(\n item => item.title === currentLeague.name && item.type === currentGameType\n )?.teams[tableMode.toLowerCase()] || []\n : statsData[currentYear].find(item => item.title === 'All leagues' && item.type === currentGameType)\n ?.teams[tableMode.toLowerCase()] || [];\n\n const leftHeaderStyles = !isScrollable ? { borderRight: 'none', boxShadow: 'none' } : null;\n\n // Mobile render\n if (isMobile) {\n return (\n
    \n
    \n
    \n
    Team
    \n
    \n
    \n {getTableHeaders(sortField[tableMode], sortDirection, handleFieldClick, cl, {\n top: '.1rem',\n transform: 'translateX(-50%) scale(0.7)'\n })}\n
    \n
    \n
    \n \n {getSortedStatsData(filteredStatsData, sortField[tableMode], sortDirection).map((row, index) => {\n return (\n
    \n
    \n {row.name}\n
    \n
    \n );\n })}\n
    \n (headerScroll.current.scrollLeft = e.target.scrollLeft)}\n ref={rowsScroll}>\n {getSortedStatsData(filteredStatsData, sortField[tableMode], sortDirection).map((row, index) => {\n return (\n \n {getTableRows(row, cl, sortField[tableMode])}\n
    \n );\n })}\n \n \n \n );\n }\n\n const leaguesDropdownOptions =\n statsData[currentYear]?.filter(({ id, type }) => id !== null && type === currentGameType) || [];\n\n const handleOkBtn = () => {\n dispatch(setCurrentCustomLeaguesForFetch(currentCustomLeagues));\n };\n\n\tconsole.log(filteredStatsData)\n // Desktop render\n return (\n
    \n
    \n
    \n
    Team
    \n {getTableHeaders(sortField[tableMode], sortDirection, handleFieldClick, cl)}\n
    \n
      \n {getSortedStatsData(filteredStatsData, sortField[tableMode], sortDirection).map((row, index) => {\n return (\n
    • \n
      \n \n {' '}\n {row.name}\n \n
      \n {getTableRows(row, cl, sortField[tableMode])}\n
    • \n );\n })}\n
    \n
    \n {currentLeague.id === -2 && (\n \n )}\n
    \n );\n};\n\nexport default ContentTeamTable;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport { Link } from 'react-router-dom';\nimport ContentPlayerFilterField from '../ContentPlayerFilterField';\n\nconst MobileTable = ({\n cl,\n filteredStatsData,\n sortedTeamOptions,\n currentTeam,\n handleFieldClick,\n handleTeamClick,\n getTableHeaders,\n getTableRows,\n getSortedStatsData\n}) => {\n const [isScrollable, setIsScrollable] = useState(true);\n\n const headerScroll = useRef(null);\n const rowsScroll = useRef(null);\n\n const playerFilter = useSelector(state => state.stats.statsPlayerFilterValue);\n const isMobile = useSelector(state => state.shared.isMobile);\n const mobileOrientation = useSelector(state => state.shared.mobileOrientation);\n const tableMode = useSelector(state => state.stats.tableMode);\n const currentLeague = useSelector(state => state.games.currentLeague);\n const sortField = useSelector(state => state.stats.sortField);\n const sortDirection = useSelector(state => state.stats.sortDirection);\n\n useEffect(() => {\n if (rowsScroll.current === null || !isMobile) return;\n\n setTimeout(() => setIsScrollable(rowsScroll.current?.clientWidth < rowsScroll.current?.scrollWidth), 500);\n // eslint-disable-next-line\n }, []);\n\n useEffect(() => {\n if (!isMobile) return;\n\n setIsScrollable(rowsScroll.current.clientWidth < rowsScroll.current.scrollWidth);\n }, [tableMode, currentLeague.id, isMobile]);\n\n useEffect(() => {\n if (!isMobile || rowsScroll.current === null) return;\n\n setTimeout(() => {\n rowsScroll.current !== null &&\n setIsScrollable(rowsScroll.current.clientWidth < rowsScroll.current.scrollWidth);\n }, 150);\n }, [isMobile, mobileOrientation]);\n\n const leftHeaderStyles = !isScrollable ? { borderRight: 'none', boxShadow: 'none' } : null;\n\n return (\n
    \n {filteredStatsData.length !== 0 || playerFilter === '' ? (\n <>\n
    \n
    \n
    Players
    \n
    \n
    \n
    Team
    \n {getTableHeaders(sortField[tableMode], sortDirection, handleFieldClick, cl, {\n top: '.1rem',\n transform: 'translateX(-50%) scale(0.7)'\n })}\n
    \n
    \n
    \n \n {getSortedStatsData(filteredStatsData, sortField[tableMode], sortDirection).map(\n (row) => (\n
    \n
    \n \n {' '}\n \n {row.name} {row.surname}\n \n \n
    \n
    \n )\n )}\n
    \n (headerScroll.current.scrollLeft = e.target.scrollLeft)}\n ref={rowsScroll}>\n {getSortedStatsData(filteredStatsData, sortField[tableMode], sortDirection).map(\n (row) => {\n return (\n \n
    \n {row.teams\n .reduce((sum, team) => {\n sum.push(team.name.slice(0, 2).toUpperCase());\n return sum;\n }, [])\n .join(' / ')}\n
    \n {getTableRows(row, cl, sortField[tableMode])}\n
    \n );\n }\n )}\n \n \n \n ) : (\n

    No players found.

    \n )}\n
    \n \n \n
    \n \n );\n};\n\nexport default MobileTable;\n","import React, { useState, useMemo } from 'react';\nimport cl from './ContentPlayerTable.module.scss';\nimport { Link } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getSearchParam, getShortName, setSearchParam } from 'utils';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport CustomLeaguesDropdown from 'components/UI/dropdown/CustomLeaguesDropdown/Dropdown';\nimport { setCurrentCustomLeaguesForFetch, setSortDirection, setSortField } from 'redux/statsReducer';\nimport ContentPlayerFilterField from './ContentPlayerFilterField';\nimport MobileTable from './MobileTable/MobileTable';\n\nconst ContentPlayerTable = ({ getTableHeaders, getTableRows, getSortedStatsData }) => {\n const [currentTeam, setCurrentTeam] = useState(getSearchParam('team') || 'All');\n\n const currentCustomLeagues = useSelector(state => state.stats.currentCustomLeagues);\n const customStatsData = useSelector(state => state.stats.customStatsData);\n\n const isMobile = useSelector(state => state.shared.isMobile);\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const currentYear = useSelector(state => state.shared.currentYear);\n\n const tableMode = useSelector(state => state.stats.tableMode);\n const sortField = useSelector(state => state.stats.sortField);\n const sortDirection = useSelector(state => state.stats.sortDirection);\n const statsData = useSelector(state => state.stats.statsData);\n const playerFilter = useSelector(state => state.stats.statsPlayerFilterValue);\n\n const currentLeague = useSelector(state => state.games.currentLeague);\n\n const dispatch = useDispatch();\n\n const handleTeamClick = team => {\n setCurrentTeam(team);\n setSearchParam('team', team);\n };\n\n const handleFieldClick = field => () => {\n sortField[tableMode] !== field\n ? dispatch(setSortField(field))\n : dispatch(setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc'));\n };\n\n let filteredStatsData = useMemo(\n () =>\n currentLeague.id === -2\n ? customStatsData.find(item => item.type === currentGameType)?.players[tableMode.toLowerCase()] || []\n : currentLeague.id !== -1\n ? statsData[currentYear]?.find(\n item =>\n (item.title === currentLeague.name || item.title === currentLeague.title) &&\n item.type === currentGameType\n )?.players[tableMode.toLowerCase()] || []\n : statsData[currentYear]?.find(item => item.title === 'All leagues' && item.type === currentGameType)\n ?.players[tableMode.toLowerCase()] || [],\n\n [\n currentLeague.id,\n currentLeague.name,\n currentLeague.title,\n customStatsData,\n statsData,\n currentYear,\n tableMode,\n currentGameType\n ]\n );\n\n const teamOptions = useMemo(\n () =>\n Array.from(\n new Set(\n filteredStatsData.reduce((sum, cur) => {\n cur.teams.forEach(team => sum.push(team.name));\n return sum;\n }, [])\n )\n ),\n [filteredStatsData]\n );\n\n const sortedTeamOptions = useMemo(() => {\n const sortedTeamsArr = teamOptions.sort((a, b) => (a > b ? 1 : -1));\n sortedTeamsArr.unshift('All');\n\n return sortedTeamsArr;\n }, [teamOptions]);\n\n //Filtering by team\n filteredStatsData = useMemo(\n () =>\n currentTeam !== 'All'\n ? filteredStatsData.filter(player => player.teams.find(team => team.name === currentTeam))\n : filteredStatsData,\n [filteredStatsData, currentTeam]\n );\n\n const filterArr = playerFilter.split(' ');\n filteredStatsData =\n playerFilter !== ''\n ? filteredStatsData.filter(player => {\n return filterArr.reduce((sum, word) => {\n if (\n !(\n player.name.slice(0, word.length).toLowerCase() === word.toLowerCase() ||\n player.surname.slice(0, word.length).toLowerCase() === word.toLowerCase()\n )\n ) {\n sum = false;\n }\n return sum;\n }, true);\n })\n : filteredStatsData;\n\n const leaguesDropdownOptions =\n statsData[currentYear]?.filter(({ id, type }) => id !== null && type === currentGameType) || [];\n\n // Mobile render\n if (isMobile) {\n return (\n \n );\n }\n\n // Desktop render\n\n\tconst handleOkBtn = () => {\n\t\tdispatch(setCurrentCustomLeaguesForFetch(currentCustomLeagues))\n\t}\n\n return (\n
    \n {filteredStatsData.length !== 0 || playerFilter === '' ? (\n
    \n
    \n
    \n
    \n \n
    \n {getTableHeaders(sortField[tableMode], sortDirection, handleFieldClick, cl)}\n
    \n
      \n {getSortedStatsData(filteredStatsData, sortField[tableMode], sortDirection).map((row, index) => {\n return (\n
    • \n
      \n \n {' '}\n \n {row.name} {row.surname}\n \n \n
      \n
      \n \n {getShortName(row.teams[0].name, row.teams[1] ? 12 : 28)}\n \n {row.teams[1] && (\n <>\n  /{' '}\n \n {getShortName(row.teams[1].name, 12)}\n \n \n )}\n {row.teams[2] && (\n <>\n  /{' '}\n \n {row.teams[2].name}\n \n \n )}\n
      \n {getTableRows(row, cl, sortField[tableMode])}\n
    • \n );\n })}\n
    \n
    \n ) : (\n

    No players found.

    \n )}\n \n {currentLeague.id === -2 && (\n \n )}\n {/* */}\n
    \n );\n};\n\nexport default ContentPlayerTable;\n","import React from 'react';\nimport SortArrows from '../icons/SortArrows/SortArrows';\nimport cl from './SortField.module.scss';\n\nconst SortField = ({\n sortField,\n sortDirection,\n handleClick,\n addedClass = null,\n renamedField = null,\n arrowStyles = null,\n noAction = false,\n children\n}) => {\n const isActive = sortField === (renamedField || children);\n const classes = [cl.cell, addedClass];\n const isArrows = isActive && !noAction;\n isActive && !noAction && classes.push(cl.active);\n noAction && classes.push(cl.defaultCursor);\n\n return (\n
    \n {children}\n {isArrows && (\n
    \n \n
    \n )}\n
    \n );\n};\n\nexport default SortField;\n","import React from 'react';\nimport cl from './ActiveBodyCell.module.scss';\nimport classNames from 'classnames';\n\nconst ActiveBodyCell = ({\n sortField,\n addedClass = null,\n row,\n fixed = null,\n noAction = false,\n currentGameType = null,\n isCustomLeagues = null,\n\tstatsType = null,\n children\n}) => {\n const isRow = row !== undefined;\n\n let classes, cellValue;\n\n if (isRow) {\n classes = classNames(addedClass, {\n [cl.activeCell]: sortField === children && !noAction\n });\n\n cellValue =\n row[children] < 0\n ? '—'\n : row[children] === 'inf' || row[children] === 'INF'\n ? 'INF'\n : fixed\n ? Number(row[children]).toFixed(fixed)\n : children === 'G' && isCustomLeagues && statsType !== 'player'\n ? row[children][currentGameType]\n : row[children];\n }\n\n return <>{isRow &&
    {cellValue}
    };\n};\n\nexport default ActiveBodyCell;\n","import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport cl from './Content.module.scss';\nimport { useParams } from 'react-router-dom';\nimport ContentTeamTable from '../ContentTeamTable/ContentTeamTable';\nimport ContentPlayerTable from '../ContentPlayerTable/ContentPlayerTable';\nimport SortField from 'components/UI/sortField/SortField';\nimport { useDispatch, useSelector } from 'react-redux';\nimport ActiveBodyCell from 'components/UI/ActiveBodyCell/ActiveBodyCell';\nimport {\n setCurrentCustomLeagues,\n setCurrentCustomLeaguesForFetch,\n setCustomStatsData\n} from 'redux/statsReducer';\nimport { axiosCancelToken, axiosInstance } from 'axios-instance';\nimport Loader from 'components/UI/loaders/Loader/Loader';\n\nconst Content = () => {\n const { statsType } = useParams();\n\n const tableMode = useSelector(state => state.stats.tableMode);\n\n const currentGameType = useSelector(state => state.shared.currentGameType);\n const currentYear = useSelector(state => state.shared.currentYear);\n const currentLeague = useSelector(state => state.games.currentLeague);\n\n const cancelStatsTokenRef = useRef();\n const [isStatsLoading, setIsStatsLoading] = useState(true);\n // const [loadedPercents, setLoadedPercents] = useState(null);\n const [error, setError] = useState('');\n const currentCustomLeaguesForFetch = useSelector(state => state.stats.currentCustomLeaguesForFetch);\n\n const dispatch = useDispatch();\n\n // !Custom data fetching\n\n const refactorCustomData = customData => {\n return customData.map(statsByType => {\n const playersFielding = statsByType.players.fielding.reduce((sum, player, index) => {\n sum.push({ ...player, ...statsByType.players.running[index] });\n return sum;\n }, []);\n const teamsFielding = statsByType.teams.fielding.reduce((sum, player, index) => {\n sum.push({ ...player, ...statsByType.teams.running[index] });\n return sum;\n }, []);\n\n return {\n ...statsByType,\n players: {\n batting: statsByType.players.batting,\n pitching: statsByType.players.pitching,\n 'fielding / running': playersFielding\n },\n teams: {\n batting: statsByType.teams.batting,\n pitching: statsByType.teams.pitching,\n 'fielding / running': teamsFielding\n }\n };\n });\n };\n\n const fetchCustomStats = useCallback(async () => {\n cancelStatsTokenRef.current = axiosCancelToken.source();\n\n try {\n setIsStatsLoading(true);\n\n const response = await axiosInstance.get(\n `/custom_leagues_stats?leagues=${\n currentCustomLeaguesForFetch.length > 0 ? currentCustomLeaguesForFetch.join(',') : 0\n }`,\n {\n cancelToken: cancelStatsTokenRef.current.token,\n // timeout: 10000,\n // onDownloadProgress: ({ total, loaded }) => setLoadedPercents((loaded * 100) / total)\n }\n );\n\n setError('');\n dispatch(setCustomStatsData(refactorCustomData(response.data)));\n\n return response;\n } catch (err) {\n if (err.message === null) return;\n console.log(err.message);\n setError(err.message);\n } finally {\n setIsStatsLoading(false);\n }\n }, [dispatch, currentCustomLeaguesForFetch]);\n //!\n\n useLayoutEffect(() => {\n dispatch(setCurrentCustomLeagues([]));\n dispatch(setCurrentCustomLeaguesForFetch([]));\n }, [currentGameType, currentYear, dispatch]);\n\n useLayoutEffect(() => {\n if (currentLeague.id !== -2) return;\n\n fetchCustomStats();\n }, [currentLeague.id, fetchCustomStats]);\n\n useEffect(() => {\n return () => {\n currentLeague.id === -2 && cancelStatsTokenRef.current?.cancel();\n };\n }, [currentLeague.id]);\n\n const getTableHeaders = (sortField, sortDirection, handleFieldClick, cl, arrowStyles = null) =>\n tableMode === 'Batting' ? (\n <>\n \n G\n \n \n AB\n \n \n R\n \n \n H\n \n \n 2B\n \n \n 3B\n \n \n HR\n \n \n RBI\n \n \n GDP\n \n \n BB\n \n \n IBB\n \n \n HP\n \n \n SH\n \n \n SF\n \n \n SO\n \n \n TB\n \n \n AVG\n \n \n SLG\n \n \n OBP\n \n \n OPS\n \n \n ) : tableMode === 'Pitching' ? (\n <>\n \n G\n \n \n GS\n \n \n W\n \n \n L\n \n \n CG\n \n \n SV\n \n \n IP\n \n \n PA\n \n \n R\n \n \n ER\n \n \n H\n \n \n 2B\n \n \n 3B\n \n \n HR\n \n \n BB\n \n \n IBB\n \n \n HP\n \n \n SH\n \n \n SF\n \n \n SO\n \n \n WP\n \n \n BK\n \n \n ERA\n \n \n NP\n \n \n NS\n \n \n NB\n \n \n ) : (\n <>\n \n G\n \n \n SB\n \n \n CS\n \n \n %SB\n \n \n LOB\n \n \n CH\n \n \n PO\n \n \n A\n \n \n E\n \n \n DP\n \n \n FLD\n \n \n );\n\n const getTableRows = (row, cl, sortField) =>\n tableMode === 'Batting' ? (\n <>\n \n G\n \n \n AB\n \n \n R\n \n \n H\n \n \n 2B\n \n \n 3B\n \n \n HR\n \n \n RBI\n \n \n GDP\n \n \n BB\n \n \n IBB\n \n \n HP\n \n \n SH\n \n \n SF\n \n \n SO\n \n \n TB\n \n \n AVG\n \n \n SLG\n \n \n OBP\n \n \n OPS\n \n \n ) : tableMode === 'Pitching' ? (\n <>\n \n G\n \n \n GS\n \n \n W\n \n \n L\n \n \n CG\n \n \n SV\n \n \n IP\n \n \n PA\n \n \n R\n \n \n ER\n \n \n H\n \n \n 2B\n \n \n 3B\n \n \n HR\n \n \n BB\n \n \n IBB\n \n \n HP\n \n \n SH\n \n \n SF\n \n \n SO\n \n \n WP\n \n \n BK\n \n \n ERA\n \n \n NP\n \n \n NS\n \n \n NB\n \n \n ) : (\n <>\n \n G\n \n \n SB\n \n \n CS\n \n \n SB_pr\n \n \n LOB\n \n \n CH\n \n \n PO\n \n \n A\n \n \n E\n \n \n DP\n \n \n FLD\n \n \n );\n\n //Sorting filtered array\n const getSortedStatsData = (filteredStatsData, sortField, sortDirection) =>\n filteredStatsData.sort((a, b) => {\n const valueA =\n statsType !== 'player' && sortField === 'G' && currentLeague.id === -2\n ? a[sortField][currentGameType]\n : a[sortField];\n const valueB =\n statsType !== 'player' && sortField === 'G' && currentLeague.id === -2\n ? b[sortField][currentGameType]\n : b[sortField];\n\n return Number(valueA) === Number(valueB) && `${a.name} ${a.surname}` > `${b.name} ${b.surname}`\n ? sortDirection === 'asc'\n ? 1\n : -1\n : Number(valueA) === Number(valueB) && `${a.name} ${a.surname}` < `${b.name} ${b.surname}`\n ? sortDirection === 'asc'\n ? -1\n : 1\n : Number(valueA) > Number(valueB) || valueA === 'inf' || isNaN(valueA)\n ? sortDirection === 'asc'\n ? 1\n : -1\n : sortDirection === 'asc'\n ? -1\n : 1;\n });\n\n const contentLoaderStyles = {\n margin: 'unset',\n position: 'absolute',\n top: '200px',\n left: '50%',\n transform: 'translateX(-50%)'\n };\n\n const contentTable =\n isStatsLoading && currentLeague.id === -2 ? (\n \n ) : statsType !== 'player' ? (\n \n ) : (\n \n );\n\n return (\n
    \n
    \n
    {contentTable}
    \n
    \n
    \n );\n};\n\nexport default Content;\n","import React, { useState, useEffect, useRef } from 'react';\nimport ErrorLoader from 'components/UI/loaders/ErrorLoader/ErrorLoader';\nimport { useSelector } from 'react-redux';\nimport { useDispatch } from 'react-redux';\nimport { axiosInstance, axiosCancelToken } from 'axios-instance';\nimport Header from 'components/Stats/Header/Header';\nimport Content from 'components/Stats/Content/Content';\nimport { setCustomStatsData, setStatsData } from 'redux/statsReducer';\nimport Loader from 'components/UI/loaders/Loader/Loader';\nimport { setTableType } from 'redux/playerStatsReducer';\nimport StatsLoadingProvider from 'context/StatsLoadingContext';\n\nconst Stats = () => {\n const [isStatsLoading, setIsStatsLoading] = useState(true);\n const [error, setError] = useState('');\n const [loadedPercents, setLoadedPercents] = useState(null);\n\n const firstMountRef = useRef(true);\n const cancelStatsTokenRef = useRef();\n\n const statsTableMode = useSelector(state => state.stats.tableMode);\n const currentYear = useSelector(state => state.shared.currentYear);\n\n const dispatch = useDispatch();\n\n useEffect(() => () => cancelStatsTokenRef.current.cancel(null), []);\n\n useEffect(() => {\n if (firstMountRef.current === true) return;\n\n dispatch(setTableType(statsTableMode === 'Pitching' ? 'Pitching' : 'Batting'));\n // eslint-disable-next-line\n }, [statsTableMode]);\n\n useEffect(() => {\n const refactorData = leaguesByYears => {\n return Object.entries(leaguesByYears).reduce(\n (sumByYear, [curYear, leagues]) => {\n const modifiedLeagues = Array.isArray(leagues) ? leagues : [];\n\n sumByYear[curYear] = modifiedLeagues.reduce((sum, { id, title, type, players, teams }) => {\n const leaguePlayersFielding = players.fielding.reduce((sum, player, index) => {\n sum.push({ ...player, ...players.running[index] });\n return sum;\n }, []);\n\n const leagueTeamsFielding = teams.fielding.reduce((sum, player, index) => {\n sum.push({ ...player, ...teams.running[index] });\n return sum;\n }, []);\n\n const resultLeague = {\n id,\n title,\n type,\n players: {\n batting: players.batting,\n pitching: players.pitching,\n 'fielding / running': leaguePlayersFielding\n },\n teams: {\n batting: teams.batting,\n pitching: teams.pitching,\n 'fielding / running': leagueTeamsFielding\n }\n };\n\n sum.push(resultLeague);\n\n return sum;\n }, []);\n\n return sumByYear;\n },\n\n {}\n );\n };\n const refactorCustomData = customData => {\n return customData.map(statsByType => {\n const playersFielding = statsByType.players.fielding.reduce((sum, player, index) => {\n sum.push({ ...player, ...statsByType.players.running[index] });\n return sum;\n }, []);\n const teamsFielding = statsByType.teams.fielding.reduce((sum, player, index) => {\n sum.push({ ...player, ...statsByType.teams.running[index] });\n return sum;\n }, []);\n\n return {\n ...statsByType,\n players: {\n batting: statsByType.players.batting,\n pitching: statsByType.players.pitching,\n 'fielding / running': playersFielding\n },\n teams: {\n batting: statsByType.teams.batting,\n pitching: statsByType.teams.pitching,\n 'fielding / running': teamsFielding\n }\n };\n });\n };\n\n const fetchCustomStats = async leaguesArr => {\n cancelStatsTokenRef.current = axiosCancelToken.source();\n\n try {\n const response = await axiosInstance.get(`/custom_leagues_stats?leagues=${leaguesArr.join(',')}`, {\n cancelToken: cancelStatsTokenRef.current.token,\n // timeout: 10000,\n onDownloadProgress: ({ total, loaded }) => setLoadedPercents((loaded * 100) / total)\n });\n\n setError('');\n\n return response;\n } catch (err) {\n if (err.message === null) return;\n console.log(err.message);\n setError(err.message);\n }\n };\n\n const fetchStats = async () => {\n cancelStatsTokenRef.current = axiosCancelToken.source();\n\n try {\n setIsStatsLoading(true);\n const response = await axiosInstance.get(`/stats`, {\n cancelToken: cancelStatsTokenRef.current.token,\n // timeout: 10000,\n // onDownloadProgress: ({ total, loaded }) => setLoadedPercents((loaded * 100) / total)\n });\n\n // Get custom stats for all leagues in selected year\n const customResponse = await fetchCustomStats([0]);\n // const customResponse = await fetchCustomStats(response.data[currentYear].filter(({id}) => id !== null).map(({ id }) => id));\n\n const statsData = refactorData(response.data);\n const customStatsData = refactorCustomData(customResponse.data);\n\n\t\t\t\tconsole.log(customStatsData)\n setError('');\n dispatch(setStatsData(statsData));\n dispatch(setCustomStatsData(customStatsData));\n } catch (err) {\n if (err.message === null) return;\n console.log(err.message);\n setError(err.message);\n } finally {\n setIsStatsLoading(false);\n setLoadedPercents(null);\n }\n };\n fetchStats();\n\n if (firstMountRef.current === true) {\n firstMountRef.current = false;\n return;\n }\n\n // eslint-disable-next-line\n }, []);\n\n const contentLoaderStyles = {\n margin: 'unset',\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)'\n };\n\n // Error handling\n if (error !== '') return ;\n\n // Loader\n if (isStatsLoading)\n return (\n <>\n {/* \n
    \n */}\n \n \n );\n\n // Content\n return (\n <>\n \n
    \n \n \n \n );\n};\n\nexport default Stats;\n","import React, { useEffect, useRef, useState, useLayoutEffect, useContext } from 'react';\nimport cl from './HeaderSelections.module.scss';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setCurrentYear, setCurrentDate } from 'redux/sharedReducer';\nimport PortraitImg from 'images/portrait.png';\nimport { setPlayerCurrentTeam as setCurrentTeam, setTableType } from 'redux/playerStatsReducer';\nimport { getShortName, getYears } from 'utils';\nimport { setCurrentLeague } from 'redux/gamesReducer';\nimport { useParams } from 'react-router-dom';\nimport { PlayerYearsContext } from 'context';\nimport Skeleton from 'react-loading-skeleton';\nimport 'react-loading-skeleton/dist/skeleton.css';\n\nexport const Logo = () => {\n const [isLoaded, setLoaded] = useState(false);\n const [error, setError] = useState(false);\n\n const { playerId } = useParams();\n\n useLayoutEffect(() => {\n setLoaded(false);\n setError(false);\n }, [playerId]);\n\n const imgUrl = `http://baseball-gametrack.ru/api/logo/${playerId}`;\n\n const imgStyles = !isLoaded ? { display: 'none' } : {};\n const pHolderStyles = isLoaded || error ? { display: 'none' } : {};\n const defaultImgStyles = error ? {} : { display: 'none' };\n return (\n <>\n
    \n setLoaded(true)}\n onError={() => setError(true)}\n style={imgStyles}\n />\n \n \n
    \n \n );\n};\n\nconst HeaderSelections = () => {\n const { playerYears, setPlayerYears, calculateTeamsArray } = useContext(PlayerYearsContext);\n\n const firstMountRef = useRef(true);\n\n const {\n playerStatsData: statsData,\n playerCurrentTeam: currentTeam,\n tableType\n } = useSelector(state => state.playerStats);\n const isMobile = useSelector(state => state.shared.isMobile);\n const currentLeague = useSelector(state => state.games.currentLeague);\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n const teamsArray = calculateTeamsArray(tableType);\n\n if (firstMountRef.current === true) {\n firstMountRef.current = false;\n\n if (currentTeam !== null && teamsArray.length > 1) return;\n }\n dispatch(setCurrentTeam(teamsArray.length > 1 ? 'All teams' : teamsArray[0]));\n // eslint-disable-next-line\n }, [playerYears]);\n\n const handleYearClick = option => {\n setPlayerYears(option);\n\n dispatch(setCurrentLeague({ id: -1, name: 'All', title: 'All' }));\n\n if (option === 'All years') return;\n\n const tempDate = new Date(option, 0, 1);\n tempDate.setHours(0, tempDate.getTimezoneOffset() * -1, 0, 0);\n\n dispatch(setCurrentDate(tempDate));\n dispatch(setCurrentYear(option));\n };\n\n const handleTeamClick = team => {\n dispatch(setCurrentTeam(team));\n };\n\n const teamsArray = calculateTeamsArray(tableType);\n teamsArray.length > 1 && teamsArray.unshift('All teams');\n\n const handleTableOptionClick = option => {\n const teamsArray = calculateTeamsArray(option);\n\n dispatch(setCurrentTeam(teamsArray.length > 1 ? 'All teams' : teamsArray[0]));\n dispatch(setTableType(option));\n };\n\n //Table options calculating\n function getSortedTableOptions() {\n const filteredLeagues =\n playerYears === 'All years'\n ? currentTeam === 'All teams'\n ? statsData.leagues.filter(league => league.teams.find(team => team[tableType.toLowerCase()]))\n : statsData.leagues.filter(league =>\n league.teams.find(team => team.name === currentTeam && team[tableType.toLowerCase()])\n )\n : currentTeam === 'All teams'\n ? statsData.leagues.filter(\n league => league.year === playerYears && league.teams.find(team => team[tableType.toLowerCase()])\n )\n : statsData.leagues.filter(\n league =>\n league.year === playerYears &&\n league.teams.find(team => team.name === currentTeam && team[tableType.toLowerCase()])\n );\n\n const selectedLeague = statsData.leagues.find(league => league.id === currentLeague.id);\n\n const options = [];\n const anotherTableType =\n tableType === 'Batting' || tableType === 'Fielding' || tableType === 'Running' ? 'Pitching' : 'Batting';\n\n //All leagues\n if (currentLeague.id === -1) {\n const anotherTableTypeFilteredLeagues =\n playerYears === 'All years'\n ? currentTeam === 'All teams'\n ? statsData.leagues.filter(league =>\n league.teams.find(team => team[anotherTableType.toLowerCase()])\n )\n : statsData.leagues.filter(league =>\n league.teams.find(team => team.name === currentTeam && team[anotherTableType.toLowerCase()])\n )\n : currentTeam === 'All teams'\n ? statsData.leagues.filter(\n league =>\n league.year === playerYears && league.teams.find(team => team[anotherTableType.toLowerCase()])\n )\n : statsData.leagues.filter(\n league =>\n league.year === playerYears &&\n league.teams.find(team => team.name === currentTeam && team[anotherTableType.toLowerCase()])\n );\n\n if (filteredLeagues.length > 0) {\n if (tableType === 'Pitching') {\n options.push('Pitching');\n } else {\n options.push('Batting');\n options.push('Fielding');\n options.push('Running');\n }\n }\n if (anotherTableTypeFilteredLeagues.length > 0) {\n if (anotherTableType === 'Pitching') {\n options.push('Pitching');\n } else {\n if (options.length > 0) {\n options.unshift('Running');\n options.unshift('Fielding');\n options.unshift('Batting');\n } else {\n options.push('Batting');\n options.push('Fielding');\n options.push('Running');\n }\n }\n }\n\n return options;\n }\n\n //Selected league\n const filteredLeague = selectedLeague.teams.find(team => team.name === currentTeam);\n\n if (filteredLeague) {\n if (filteredLeague.batting) {\n options.push('Batting');\n options.push('Fielding');\n options.push('Running');\n }\n filteredLeague.pitching && options.push('Pitching');\n } else {\n if (selectedLeague.teams.find(team => team.batting)) {\n options.push('Batting');\n options.push('Fielding');\n options.push('Running');\n }\n selectedLeague.teams.find(team => team.pitching) && options.push('Pitching');\n }\n\n return options;\n }\n\n const yearsArr = getYears();\n yearsArr.unshift('All years');\n return (\n
    \n
    \n \n
    \n {statsData.name}\n

    {statsData.surname}

    \n
    \n
    \n
    \n
    \n \n
    \n
    \n {teamsArray.length > 1 ? (\n \n ) : (\n getShortName(currentTeam || '', 16)\n )}\n
    \n {isMobile && (\n
    \n {getSortedTableOptions().length > 1 ? (\n \n ) : getSortedTableOptions().length === 1 ? (\n tableType\n ) : (\n ''\n )}\n
    \n )}\n
    \n
    \n );\n};\n\nexport default HeaderSelections;\n","import React from 'react';\nimport cl from './HeaderLeagues.module.scss';\n\nconst HeaderLeaguesListItem = ({ league, handleClick, currentLeague }) => {\n\tconst leagueName = league.title !== 'All' ? league.title : 'All leagues';\n return (\n \n {leagueName}\n \n );\n};\n\nexport default HeaderLeaguesListItem;\n","import React, { forwardRef } from 'react';\nimport cl from './HeaderLeagues.module.scss';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentLeague } from 'redux/gamesReducer';\nimport HeaderLeaguesListItem from './HeaderLeaguesListItem';\nimport { setPlayerCurrentTeam, setTableType } from 'redux/playerStatsReducer';\n\nconst HeaderLeaguesList = ({ leagues, playerYears }, ref) => {\n const currentLeague = useSelector(state => state.games.currentLeague);\n const { playerStatsData: statsData, tableType } = useSelector(state => state.playerStats);\n\n const dispatch = useDispatch();\n\n const handleLeagueClick = league => () => {\n if (playerYears === 'All years') return;\n dispatch(setCurrentLeague(league));\n\n const anotherTableType = tableType === 'Batting' ? 'Pitching' : 'Batting';\n\n if (league.id === -1) {\n const teamsArr = Array.from(\n statsData.leagues\n .filter(\n league => league.year === playerYears && league.teams.find(team => team[tableType.toLowerCase()])\n )\n .reduce((sum, league) => {\n league.teams.forEach(team => sum.add(team.name));\n return sum;\n }, new Set())\n );\n\n dispatch(setPlayerCurrentTeam(teamsArr.length > 1 ? 'All teams' : teamsArr[0]));\n return;\n }\n\n let tempTableType = tableType;\n //Table type switching\n if (!league.teams.find(team => team[tableType.toLowerCase()])) {\n dispatch(setTableType(anotherTableType));\n tempTableType = anotherTableType;\n }\n\n const teamArr = league.teams.filter(team => team[tempTableType.toLowerCase()]);\n dispatch(\n setPlayerCurrentTeam(teamArr.length > 1 ? 'All teams' : teamArr.length === 1 ? teamArr[0].name : '')\n );\n };\n\n const classes = [cl.leagues];\n playerYears === 'All years' && classes.push(cl.disabled);\n return (\n
      \n {leagues.map((league, index) => (\n \n ))}\n
    \n );\n};\n\nexport default forwardRef(HeaderLeaguesList);\n","import React, { useState, useEffect, useLayoutEffect, useRef, useMemo, useContext } from 'react';\nimport cl from './HeaderLeagues.module.scss';\nimport Arrow from 'components/UI/buttons/Arrow/Arrow';\nimport HeaderLeaguesList from './HeaderLeaguesList';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentLeaguesScroll } from 'redux/sharedReducer';\nimport { setCurrentLeague } from 'redux/gamesReducer';\nimport { useParams } from 'react-router-dom';\nimport { PlayerYearsContext } from 'context';\n\nconst HeaderLeagues = () => {\n const { playerYears, calculateTeamsArray } = useContext(PlayerYearsContext);\n\n const [isLeftScroll, setIsLeftScroll] = useState(false);\n const [isRightScroll, setIsRightScroll] = useState(true);\n\n const { playerName, playerSurname } = useParams();\n\n const leaguesRef = useRef();\n const firstMountRef = useRef(true);\n\n const { playerStatsData, playerCurrentTeam } = useSelector(state => state.playerStats);\n const { currentLeaguesScroll: currentScroll, isMobile } = useSelector(state => state.shared);\n const dispatch = useDispatch();\n\n const setScrollArrows = () => {\n setIsLeftScroll(currentScroll <= 0 ? false : true);\n setIsRightScroll(currentScroll + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth);\n };\n\n useLayoutEffect(() => {\n leaguesRef.current.style.scrollBehavior = 'unset';\n leaguesRef.current.scrollLeft = currentScroll;\n leaguesRef.current.style.scrollBehavior = 'smooth';\n\n const filteredLeagues = playerStatsData.leagues.filter(league => league.year === playerYears);\n filteredLeagues.length !== 1\n ? dispatch(setCurrentLeague({ id: -1, name: 'All' }))\n : dispatch(setCurrentLeague(filteredLeagues[0]));\n // eslint-disable-next-line\n }, []);\n\n useLayoutEffect(() => {\n setIsLeftScroll(currentScroll <= 0 ? false : true);\n setIsRightScroll(currentScroll + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth);\n }, [currentScroll]);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n return;\n }\n\n leaguesRef.current.scrollLeft = 0;\n dispatch(setCurrentLeaguesScroll(0));\n setScrollArrows();\n\n //Set currentLeague to first if leagues count === 1, else set to All\n const filteredLeagues = playerStatsData.leagues.filter(league => league.year === playerYears);\n filteredLeagues.length !== 1\n ? dispatch(setCurrentLeague({ id: -1, name: 'All' }))\n : dispatch(setCurrentLeague(filteredLeagues[0]));\n // eslint-disable-next-line\n }, [playerYears]);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n firstMountRef.current = false;\n return;\n }\n\n setIsLeftScroll(currentScroll <= 0 ? false : true);\n setIsRightScroll(currentScroll + leaguesRef.current.clientWidth < leaguesRef.current.scrollWidth);\n // eslint-disable-next-line\n }, [playerStatsData.leagues]);\n\n const scrollLeagues = e => {\n if (e.currentTarget.name === 'scroll-left') {\n const scrollValue = leaguesRef.current.scrollLeft - 249;\n leaguesRef.current.scrollLeft -= 249;\n dispatch(setCurrentLeaguesScroll(scrollValue));\n return;\n }\n const scrollValue = leaguesRef.current.scrollLeft + 249;\n leaguesRef.current.scrollLeft += 249;\n dispatch(setCurrentLeaguesScroll(scrollValue));\n };\n\n const filteredLeagues = useMemo(() => {\n const newLeagues =\n playerYears === 'All years'\n ? playerStatsData.leagues.slice()\n : playerStatsData.leagues.filter(league => league.year === playerYears);\n newLeagues.unshift({ id: -1, title: 'All' });\n\n return newLeagues;\n // eslint-disable-next-line\n }, [playerName, playerSurname, playerYears, playerCurrentTeam]);\n\n return (\n
    \n \n \n \n
    \n );\n};\n\nexport default HeaderLeagues;\n","import React from 'react';\nimport cl from './Header.module.scss';\nimport HeaderWrapper from 'components/HeaderWrapper/HeaderWrapper';\nimport HeaderSelections from '../HeaderSelections/HeaderSelections';\nimport HeaderLeagues from '../HeaderLeagues/HeaderLeagues';\n\nconst Header = () => {\n return (\n \n
    \n \n \n
    \n
    \n );\n};\n\nexport default Header;\n","import React from 'react';\nimport cl from './Content.module.scss';\nimport { Logo } from '../HeaderSelections/HeaderSelections';\n\nconst ContentMobilePlayerInfo = ({ statsData }) => {\n return (\n
    \n
    \n\t\t\t\t\n
    \n
    \n {statsData.name} {statsData.surname}\n
    \n

    \n {statsData.pos || '—'} | B/T: {statsData.bat_hand}/{statsData.throw_hand} | {statsData.height}{' '}\n {statsData.weight}LBS | Age: {new Date().getFullYear() - statsData.yob}\n

    \n
    \n
    \n
    \n );\n};\n\nexport default ContentMobilePlayerInfo;\n","import { PlayerYearsContext } from 'context';\nimport { createContext, useContext, useEffect, useState, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './PlayerStatsAnimationContext.module.scss';\n\nconst ctx = createContext();\n\nconst PlayerStatsAnimationProvider = ({ children }) => {\n const [valueCoef, setValueCoef] = useState(0);\n\n const wrapperRef = useRef(null);\n const firstMountRef = useRef(true);\n\n const { playerYears } = useContext(PlayerYearsContext);\n\n const { playerCurrentTeam: currentTeam } = useSelector(s => s.playerStats);\n const { currentLeague } = useSelector(s => s.games);\n\n useEffect(() => {\n if (wrapperRef.current === null) return;\n\n let observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n setValueCoef(prev => prev + 0.01);\n } else {\n setValueCoef(0);\n }\n });\n });\n observer.observe(wrapperRef.current);\n\n return observer.disconnect;\n }, []);\n\n useEffect(() => {\n if (valueCoef === 0) return;\n\n const getTimeoutDelay = coef => {\n if (coef < 0.5) return 9;\n if (coef < 0.75) return 6;\n return 3;\n };\n\n const getValueAddition = coef => {\n if (coef < 0.5) return 0.03;\n if (coef < 0.75) return 0.02;\n return 0.01;\n };\n\n const timeout = setTimeout(() => {\n setValueCoef(prev => (prev < 1 ? prev + getValueAddition(valueCoef) : 1));\n }, getTimeoutDelay(valueCoef));\n\n return () => {\n clearTimeout(timeout);\n };\n }, [valueCoef]);\n\n useEffect(() => {\n if (firstMountRef.current === true) {\n firstMountRef.current = false;\n return;\n }\n\n setValueCoef(0);\n\n setTimeout(() => {\n setValueCoef(prev => prev + 0.01);\n }, 10);\n }, [playerYears, currentTeam, currentLeague.id]);\n\n return (\n \n
    \n {children}\n
    \n
    \n );\n};\n\nexport const usePlayerStatsAnimationCtx = () => useContext(ctx);\n\nexport default PlayerStatsAnimationProvider;\n","import classNames from 'classnames';\nimport cl from '../Banner.module.scss';\nimport { usePlayerStatsAnimationCtx } from 'context/PlayerStatsAnimationContext/PlayerStatsAnimationContext';\n\nconst TotalInfoItem = ({ item, parent }) => {\n const { par1, par2 } = item;\n\n const valueCoef = usePlayerStatsAnimationCtx();\n\n const par1Title = par1 === 'RHB' ? 'Right' : par1;\n const par2Title = par2 === 'LHB' ? 'Left Handed Batters' : par2;\n\n const title = `${par1Title} / ${par2Title} (${parent[par1]} / ${parent[par2]})`;\n const value = parent[`${par1}/${par2}`];\n\tconst formattedValue = value !== '–' ? value : '—'\n\n\tif (par1 === 'RHB') {\n const itemClasses = classNames(cl.groupItem, cl.rhbLhbGroupItem);\n\n\t\tfunction getValues(value, sum) {\n\t\t\tconst formattedValue = Number(((value * 100) / sum).toFixed(1));\n\t\n\t\t\tlet animatedValue = '—';\n\t\n\t\t\tif (formattedValue !== '—') {\n\t\t\t\tanimatedValue =\n\t\t\t\t\tvalueCoef < 1 && formattedValue !== 0 ? (formattedValue * valueCoef).toFixed(1) : formattedValue;\n\t\t\t\tanimatedValue += '%';\n\t\t\t}\n\t\n\t\t\treturn { formattedValue, animatedValue };\n\t\t}\n\n const { formattedValue: valueLeft, animatedValue: animatedValueLeft } = getValues(parent[par1], parent[par1] + parent[par2]);\n const { formattedValue: valueRight } = getValues(parent[par2], parent[par1] + parent[par2]);\n\t\tconst animatedValueRight = valueRight > 0 ? `${Number(((100 - valueLeft) * valueCoef).toFixed(1))}%` : '0%';\n\n return (\n
    \n
    {title}
    \n \n {animatedValueLeft}\n
    \n \n {animatedValueRight}\n \n \n );\n }\n\n return (\n
    \n

    {title}

    \n

    {formattedValue}

    \n
    \n );\n};\n\nconst TotalInfo = ({ data }) => {\n const itemsArr = [\n { par1: 'IP', par2: 'G' },\n { par1: 'Pitches', par2: 'Batters' },\n { par1: 'RHB', par2: 'LHB' }\n ];\n return (\n
    \n

    Total info

    \n {itemsArr.map((item, i) => (\n \n ))}\n
    \n );\n};\n\nexport default TotalInfo","import cl from '../Banner.module.scss';\nimport { usePlayerStatsAnimationCtx } from 'context/PlayerStatsAnimationContext/PlayerStatsAnimationContext';\n\nconst CommonGroupItem = ({ item, parent, staticTitle }) => {\n const { par1, par2 } = item;\n\n const valueCoef = usePlayerStatsAnimationCtx();\n\n const modifiedStaticTitle = par1 === 'GO' && par2 === 'FC' ? 'Outs' : staticTitle;\n\n const {\n abs: absValue,\n abs_rel: absRelValue,\n rel: value\n } = par2 !== null ? parent[`${par1}/${par2}`] : parent[par1];\n\n let title = par2 !== null ? `${par1} & ${par2}` : par1;\n title += ` (${absValue} / ${absRelValue} ${modifiedStaticTitle})`;\n\n const formattedValue = value !== '–' ? value : '—';\n\n let animatedValue = '—';\n\n if (formattedValue !== '—') {\n animatedValue =\n valueCoef < 1 && formattedValue !== 0 ? (formattedValue * valueCoef).toFixed(1) : formattedValue;\n animatedValue += '%';\n }\n\n return (\n \n

    {title}

    \n

    {animatedValue}

    \n \n );\n};\n\nconst CommonGroup = ({ data, param, title, itemsArr, staticTitle }) => (\n
    \n

    {title}

    \n {itemsArr.map((item, i) => (\n \n ))}\n
    \n);\n\nexport default CommonGroup;\n","import cl from '../Banner.module.scss';\nimport { usePlayerStatsAnimationCtx } from 'context/PlayerStatsAnimationContext/PlayerStatsAnimationContext';\n\nconst SORT_PRIORITY = {\n '0-0': 1,\n '0-1': 2,\n '1-1': 3,\n '1-2': 4,\n '1-0': 5,\n '2-2': 6,\n '0-2': 7,\n '2-1': 8,\n '3-2': 9,\n '2-0': 10,\n '3-1': 11,\n '3-0': 12\n};\n\nconst CountsDistributionItem = ({ item, staticTitle }) => {\n const [title, { abs: absValue, abs_rel: absRelValue, rel: value }] = item;\n\n const valueCoef = usePlayerStatsAnimationCtx();\n\n const formattedTitle = `${title} (${absValue} / ${absRelValue} ${staticTitle})`;\n const formattedValue = value !== '–' ? value : '—';\n\n let animatedValue = '—';\n\n if (formattedValue !== '—') {\n animatedValue =\n valueCoef < 1 && formattedValue !== 0 ? (formattedValue * valueCoef).toFixed(1) : formattedValue;\n animatedValue += '%';\n }\n\n return (\n \n

    {formattedTitle}

    \n

    {animatedValue}

    \n \n );\n};\n\nconst CountsDistribution = ({ data, staticTitle }) => {\n const sortedList = JSON.parse(JSON.stringify(Object.entries(data.CountsDistribution))).sort((a, b) =>\n SORT_PRIORITY[a] > SORT_PRIORITY[b] ? -1 : 1\n );\n\n return (\n
    \n

    Counts distribution

    \n {sortedList.map((item, i) => (\n \n ))}\n
    \n );\n};\n\nexport default CountsDistribution;\n","import TotalInfo from './Groups/TotalInfo';\nimport CommonGroup from './Groups/CommonGroup';\nimport CountsDistribution from './Groups/CountsDistribution';\n\nconst BannerColumns = ({parentObj}) => {\n const GROUPS_PARAMS = {\n BatterAppearance: [\n { par1: 'SO', par2: null },\n { par1: 'BB', par2: 'HBP' },\n { par1: 'H', par2: null },\n { par1: 'PO', par2: 'FC' },\n { par1: 'E', par2: null }\n ],\n OutsDistribution: [\n { par1: 'SO', par2: null },\n { par1: 'FO', par2: null },\n { par1: 'GO', par2: 'FC' }\n ],\n PitchesZoneDistribution: [\n { par1: 'Balls', par2: null },\n { par1: 'Strikes', par2: null }\n ],\n PitchesSwingDistribution: [\n { par1: 'Swing', par2: null },\n { par1: 'Take', par2: null }\n ],\n BatterSwingResult: [\n { par1: 'Miss', par2: null },\n { par1: 'Contact', par2: null }\n ],\n HitsDistribution: [\n { par1: 'Hits', par2: null },\n { par1: 'Fly', par2: null },\n { par1: 'Line', par2: null },\n { par1: 'Grounds', par2: null }\n ]\n };\n\n return (\n <>\n
    \n \n \n \n
    \n
    \n \n \n \n \n
    \n
    \n \n
    \n \n );\n};\n\nexport default BannerColumns;\n","import { PlayerYearsContext } from 'context';\nimport React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport BannerColumns from './BannerColumns';\nimport PlayerStatsAnimationProvider from 'context/PlayerStatsAnimationContext/PlayerStatsAnimationContext';\n\nconst Banner = () => {\n const { playerYears } = useContext(PlayerYearsContext);\n\n const { playerStatsData: statsData, playerCurrentTeam: currentTeam } = useSelector(s => s.playerStats);\n const { currentLeague } = useSelector(state => state.games);\n\n const { total, total_annual, teams, leagues } = statsData.pitcher_banner;\n\n const getParentObj = () => {\n if (playerYears === 'All years' && currentTeam === 'All teams') return total;\n if (playerYears === 'All years' && currentTeam !== 'All teams')\n return teams.find(team => team.name === currentTeam);\n if (currentLeague.id === -1 && currentTeam === 'All teams') return total_annual[playerYears];\n if (currentLeague.id === -1 && currentTeam !== 'All teams')\n return teams.find(team => team.name === currentTeam).annual[playerYears];\n\n const curLeague = leagues.find(league => league.id === currentLeague.id);\n return curLeague.teams.find(team => team.name === currentTeam);\n };\n\n const parentObj = getParentObj();\n return parentObj ? (\n \n \n \n ) : (\n <>\n );\n};\n\nexport default Banner;\n","import classNames from 'classnames';\nimport React, { useState, useRef, useEffect } from 'react';\nimport cl from './FilterField.module.scss';\nimport { getShortName } from 'utils';\n\nfunction listenForOutsideClicks(listening, setListening, menuRef, setIsOpen) {\n return () => {\n if (listening) return;\n if (!menuRef.current) return;\n setListening(true);\n [`click`, `touchstart`].forEach(type => {\n document.addEventListener(type, evt => {\n if (menuRef.current?.contains(evt.target)) return;\n setIsOpen(false);\n });\n });\n };\n}\n\nconst FilterField = ({\n mobile = false,\n handleChange,\n handleClick,\n wrapperStyles = null,\n listStyles = null,\n itemStyles = null,\n itemTextStyles = null,\n shortNames = false,\n listValues = [],\n isAllOption = false,\n ...props\n}) => {\n const [tempFilter, setTempFilter] = useState('');\n const [listening, setListening] = useState(false);\n const [isOpen, setIsOpen] = useState(false);\n\n const filterTimeoutRef = useRef();\n const menuRef = useRef(null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(listenForOutsideClicks(listening, setListening, menuRef, setIsOpen));\n\n const handleFilterFieldChange = e => {\n const value = e.target.value;\n setTempFilter(value);\n\t\tsetIsOpen(true)\n clearTimeout(filterTimeoutRef.current);\n\n filterTimeoutRef.current = setTimeout(() => {\n handleChange(value);\n }, 400);\n };\n\n const handleInputClick = () => {\n setIsOpen(prev => !prev);\n };\n\n const handleOptionClick = option => () => {\n option = option !== 'All' ? option : '';\n\n handleClick(option);\n setIsOpen(false);\n setTempFilter(option);\n };\n\n const inputClasses = classNames(cl.filterField, {\n [cl.mobile]: mobile\n });\n\n\tconst loweredTempFilter = tempFilter.toLowerCase()\n\n let modifiedValues = listValues.filter(value => value.toLowerCase().includes(loweredTempFilter));\n modifiedValues = isAllOption ? ['All', ...modifiedValues] : modifiedValues;\n return (\n
    \n \n {isOpen && (\n
      \n {modifiedValues.map((option, i) => (\n
    • \n {shortNames ? getShortName(option, shortNames) : option}\n
    • \n ))}\n
    \n )}\n
    \n );\n};\n\nexport default FilterField;\n","import { useState } from 'react';\nimport cl from './FilteredGraphs.module.scss';\n\nconst GraphsBlock = ({ defaultOption, children, ...props }) => {\n const [currentOption, setCurrentOption] = useState(defaultOption);\n\n return (\n
    \n {children(currentOption, setCurrentOption)}\n
    \n );\n};\n\nexport default GraphsBlock;\n","import React, { Fragment } from 'react';\nimport { getPitchColorByName } from 'utils';\nimport cl from './FrequencySpeedGraph.module.scss';\n\nconst PARAMS = {\n GRAPH_WIDTH: 480,\n GRAPH_HEIGHT: 364,\n LEFT_VERTICAL_GRID_LINES_NUMBER: 5,\n RIGHT_VERTICAL_GRID_LINES_NUMBER: 5,\n VERTICAL_GRID_LINES_TOP: 0,\n VERTICAL_GRID_LINES_LEFT: 45,\n VERTICAL_GRID_LINES_HEIGHT: 300,\n GRAPH_ROWS_HEIGHT: 22,\n BETWEEN_ROWS_HEIGHT: 28\n};\n\nconst Rows = ({ maxSpeedLineValue, minSpeedLineValue, relValuesData, totalPitches }) => (\n <>\n {/* Rows rendering */}\n {Object.entries(relValuesData)\n .sort((a, b) => (a[1].count > b[1].count ? -1 : 1))\n .map((measure, i, thisArr) => {\n const yCoord =\n PARAMS.ZERO_COORDS.Y -\n PARAMS.GRAPH_ROWS_HEIGHT / 2 -\n (thisArr.length - (i + 1)) * (PARAMS.BETWEEN_ROWS_HEIGHT + PARAMS.GRAPH_ROWS_HEIGHT) +\n (PARAMS.BETWEEN_ROWS_HEIGHT / 2 + PARAMS.GRAPH_ROWS_HEIGHT / 2) * (thisArr.length - 1);\n\n const leftSideWidth = PARAMS.LEFT_VERTICAL_GRID_LINES_STEP * PARAMS.LEFT_VERTICAL_GRID_LINES_NUMBER;\n const leftEdgeLine = PARAMS.ZERO_COORDS.X - leftSideWidth;\n const leftValueCoef = leftSideWidth / 100;\n\n const rightSideWidth =\n PARAMS.RIGHT_VERTICAL_GRID_LINES_STEP * (PARAMS.RIGHT_VERTICAL_GRID_LINES_NUMBER - 1);\n const rightEdgeLine = PARAMS.ZERO_COORDS.X + rightSideWidth + PARAMS.RIGHT_VERTICAL_GRID_LINES_STEP;\n const rightValueCoef = rightSideWidth / (maxSpeedLineValue - minSpeedLineValue);\n const rightFirstLine = PARAMS.ZERO_COORDS.X + PARAMS.RIGHT_VERTICAL_GRID_LINES_STEP;\n\n const measureFrequency = (measure[1].count * 100) / totalPitches;\n const minSpeed = measure[1].avgSpeed - measure[1].skoSpeed;\n const maxSpeed = measure[1].avgSpeed + measure[1].skoSpeed;\n return (\n \n {/* Left chart row */}\n {/* Row background */}\n \n {/* Row body */}\n \n {/* Row value */}\n \n {+measureFrequency.toFixed(2) + '%'}\n \n {/* Row title */}\n \n {`${measure[0]} (${measure[1].count} / ${totalPitches} pitches)`}\n \n {/* Right chart row */}\n {/* Horizontal grid line */}\n \n {/* Row title */}\n \n {+((minSpeed + maxSpeed) / 2).toFixed(2)}\n \n {/* Row body */}\n \n {/* Vertical slice line */}\n \n \n );\n })}\n \n);\n\nconst FrequencySpeedGraph = ({ data, relValuesData }) => {\n PARAMS.LEFT_VERTICAL_GRID_LINES_STEP = 255 / PARAMS.LEFT_VERTICAL_GRID_LINES_NUMBER;\n PARAMS.RIGHT_VERTICAL_GRID_LINES_STEP = 185 / PARAMS.RIGHT_VERTICAL_GRID_LINES_NUMBER;\n PARAMS.ZERO_COORDS = { X: PARAMS.VERTICAL_GRID_LINES_LEFT + 230, Y: PARAMS.VERTICAL_GRID_LINES_TOP + 155 };\n\n for (let pitchName in relValuesData) {\n const { speeds, count } = relValuesData[pitchName];\n\n // Avg speed\n const avgSpeed = speeds.reduce((sum, curSpeed) => sum + curSpeed, 0) / speeds.length;\n relValuesData[pitchName].avgSpeed = avgSpeed;\n\n // Sko speed\n const sumDiffSpeeds = speeds.reduce((sum, curSpeed) => sum + (curSpeed - avgSpeed) ** 2, 0);\n const sumDiffSpeedsAvg = sumDiffSpeeds / count;\n const skoSpeed = Math.sqrt(sumDiffSpeedsAvg);\n relValuesData[pitchName].skoSpeed = skoSpeed;\n }\n\n const minMaxSpeeds = data.reduce(\n (sum, pitch, index) => {\n const { speed } = pitch.pitch_info;\n const mphSpeed = speed * 2.24;\n\n if (index === 0) {\n sum.minSpeed = mphSpeed;\n sum.maxSpeed = mphSpeed;\n\n return sum;\n }\n\n if (mphSpeed < sum.minSpeed) sum.minSpeed = mphSpeed;\n if (mphSpeed > sum.maxSpeed) sum.maxSpeed = mphSpeed;\n\n return sum;\n },\n { minSpeed: 0, maxSpeed: 0 }\n );\n\n const { minSpeed, maxSpeed } = minMaxSpeeds;\n\n const maxFrequencyLineValue = 100;\n\n const minSpeedLineValue = Math.ceil(minSpeed / 10 - 1) * 10;\n const maxSpeedLineValue = Math.ceil(maxSpeed / 10 + 0) * 10;\n\n const bottomLeftNumbers = [];\n for (let i = 1; i <= PARAMS.LEFT_VERTICAL_GRID_LINES_NUMBER; i++) {\n bottomLeftNumbers.push(((maxFrequencyLineValue / PARAMS.LEFT_VERTICAL_GRID_LINES_NUMBER) * i).toFixed(0));\n }\n const bottomRightNumbers = [];\n for (let i = 0; i < PARAMS.RIGHT_VERTICAL_GRID_LINES_NUMBER; i++) {\n bottomRightNumbers.push(\n Math.round(\n minSpeedLineValue +\n ((maxSpeedLineValue - minSpeedLineValue) / (PARAMS.RIGHT_VERTICAL_GRID_LINES_NUMBER - 1)) * i\n )\n );\n }\n\n return (\n \n {/* Main layout rendering */}\n {/* Vertical center grid line */}\n \n {/* Left side */}\n {bottomLeftNumbers.map((number, i) => (\n \n {/* Left vertical line */}\n \n {/* Bottom-left number */}\n \n {number}\n \n \n ))}\n\n {/* Left side title */}\n \n Pitch Type, %\n \n {/* Right side */}\n {bottomRightNumbers.map((number, i) => (\n \n {/* Right vertical line */}\n \n {/* Bottom-right number (only odd numbers rendered) */}\n {i < 4 && (\n \n {number}\n \n )}\n \n ))}\n\n {/* Right side title */}\n \n Speed, mph\n \n\n \n \n );\n};\n\nexport default FrequencySpeedGraph;\n","import { showingGroup } from './FieldGraph.module.scss';\n\nconst Tooltip = ({ hoveredDot }) => {\n const spinValueX = Math.round(hoveredDot.spinX);\n const spinValueY = Math.round(hoveredDot.spinY);\n\n const hoveredDotXCoord = hoveredDot.coords[0] <= 300 ? hoveredDot.coords[0] : hoveredDot.coords[0] - 65;\n const hoveredDotYCoord = hoveredDot.coords[1] > 50 ? hoveredDot.coords[1] : hoveredDot.coords[1] + 75;\n return (\n \n \n \n {hoveredDot.pitchType}\n \n \n dx: {spinValueX} dy: {spinValueY}\n \n \n );\n};\n\nexport default Tooltip;\n","import { Fragment, useState, useRef, useEffect } from 'react';\nimport OptionsToggler from 'components/UI/togglers/OptionsToggler/OptionsToggler';\nimport SimpleToggler from 'components/UI/togglers/SimpleToggler/SimpleToggler';\nimport cl from './FieldGraph.module.scss';\nimport { getPitchColorByName } from 'utils';\nimport Tooltip from './Tooltip';\n\nconst PARAMS = {\n GRAPH_WIDTH: 455,\n GRAPH_HEIGHT: 330,\n VERTICAL_COLUMNS_NUM: 12,\n HORIZONTAL_ROWS_NUM: 6\n};\n\nconst Dots = ({ arrData, pitchTypes, coords, linesCoords, setHoveredDot }) => {\n const { xCoordRelCoef, zeroXCoord } = coords;\n const { yZeroBreakCoef, zeroYBreakLine } = linesCoords;\n\n const handleDotClick = (gameId, momentId) => () => {\n window.open(`/game/${gameId}?card=${momentId}&tab=pitching`, '_blank');\n };\n return (\n <>\n {arrData.map((pitch, i) => {\n const { break: breakCoords, pitch_info: pitchInfo } = pitch;\n const { break_x: x, break_y: y } = breakCoords;\n const { pitch_type: pitchType, game_id: gameId, mom_id: momentId } = pitchInfo;\n\n const xCoord = zeroXCoord + x * xCoordRelCoef;\n const yCoord = y === 0 ? zeroYBreakLine : zeroYBreakLine + y * 100 * yZeroBreakCoef;\n return (\n \n setHoveredDot(prev => ({\n ...prev,\n spinX: x * 100,\n spinY: y * -100,\n visible: true,\n coords: [xCoord, yCoord],\n pitchType: pitchTypes[pitchType]\n }))\n }\n onPointerOut={() => setHoveredDot(prev => ({ ...prev, visible: false }))}\n />\n );\n })}\n \n );\n};\nconst EllipsedDots = ({\n avgCoords,\n pitchTypes,\n coords,\n relValuesData,\n totalPitches,\n linesCoords,\n arrData\n}) => {\n const { xCoordRelCoef, zeroXCoord } = coords;\n const { yZeroBreakCoef, zeroYBreakLine } = linesCoords;\n\n return (\n <>\n {Object.entries(avgCoords).map(([pitchType, data], i) => {\n const xCoord = zeroXCoord + data.avgBreakX * xCoordRelCoef;\n const yCoord =\n data.avgBreakY === 0 ? zeroYBreakLine : zeroYBreakLine + data.avgBreakY * 100 * yZeroBreakCoef;\n\n const circleColor = getPitchColorByName(pitchTypes[pitchType]);\n const opacityValue =\n 0.5 + ((relValuesData[pitchTypes[pitchType]].count * 100) / totalPitches / 100) * 0.5;\n\n const filteredArrData = arrData.filter(pitch => pitch.pitch_info.pitch_type === +pitchType);\n\n const sumDiffBreaks = filteredArrData.reduce(\n (sum, { break: breakValues }) => {\n const x = sum.x + (breakValues.break_x - data.avgBreakX) ** 2;\n const y = sum.y + (breakValues.break_y - data.avgBreakY) ** 2;\n\n return { x, y };\n },\n {\n x: 0,\n y: 0\n }\n );\n const sumDiffBreaksAvg = { x: sumDiffBreaks.x / data.count, y: sumDiffBreaks.y / data.count };\n const skoBreaks = { x: Math.sqrt(sumDiffBreaksAvg.x), y: Math.sqrt(sumDiffBreaksAvg.y) };\n return (\n \n \n \n \n );\n })}\n \n );\n};\n\nconst Frames = ({\n avgCoords,\n arrData,\n preview,\n isDots,\n relValuesData,\n coords,\n linesCoords,\n setHoveredDot\n}) => {\n const { zone, pitch_types: pitchTypes } = preview;\n const {\n y_strike_down: yStrikeDown,\n x_strike_up: yStrikeUp,\n x_strike_left: xStrikeLeft,\n x_strike_right: xStrikeRight,\n shadow_border: shadowBorder\n } = zone;\n\n let totalPitches = arrData.length;\n const { xCoordRelCoef, yCoordAbsCoef, yCoordRelCoef, zeroXCoord, zeroYCoord } = coords;\n\n // Dashed frame params\n const dashedFrameX = zeroXCoord + xCoordRelCoef * xStrikeLeft;\n const dashedFrameWidth = zeroXCoord + xCoordRelCoef * xStrikeRight - dashedFrameX;\n const dashedFrameY = zeroYCoord - yStrikeUp * yCoordRelCoef + yCoordAbsCoef;\n const dashedFrameHeight = zeroYCoord - yStrikeDown * yCoordRelCoef + yCoordAbsCoef - dashedFrameY;\n\n return (\n \n {/* Frames */}\n {/* Wrapper frame */}\n {/* */}\n\n {/* Outer frame */}\n {/* */}\n\n {/* Inner frame */}\n \n\n {/* Dots */}\n {isDots && (\n \n )}\n {/* Ellipsed Dots */}\n {!isDots && (\n \n )}\n\n {/* Dashed frame */}\n \n\n {/* Title */}\n {/* \n {`${title1} (${totalPitches})`}\n */}\n \n );\n};\n\nconst VerticalGridLines = ({ linesCoords }) => {\n const { GRAPH_WIDTH: graphWidth, GRAPH_HEIGHT: graphHeight, VERTICAL_COLUMNS_NUM: columnsNumber } = PARAMS;\n const columnWidth = 30;\n // const columnWidth = graphWidth / columnsNumber;\n\n const { rightBorderValue } = linesCoords;\n\n const centerLineX = graphWidth / 2;\n const xCoordPerLine = (graphWidth / 2 / rightBorderValue) * columnWidth;\n return (\n <>\n {/* Center Line */}\n \n \n 0\n \n\n {/* Left Lines */}\n {new Array(columnsNumber / 2).fill(null).map((_, i, arr) => {\n const colText = (i + 1) * -30;\n const colXCoord = centerLineX - (i + 1) * xCoordPerLine;\n const isBottomTextTitle = colXCoord > 0;\n\n return (\n \n \n {isBottomTextTitle && (\n \n {colText}\n \n )}\n \n );\n })}\n\n {/* Right Lines */}\n {new Array(columnsNumber / 2).fill(null).map((_, i, arr) => {\n const colText = (i + 1) * 30;\n const colXCoord = centerLineX + (i + 1) * xCoordPerLine;\n const isBottomTextTitle = colXCoord < graphWidth;\n\n return (\n \n \n {isBottomTextTitle && (\n \n {colText}\n \n )}\n \n );\n })}\n \n );\n};\n\nconst HorizontalGridLines = ({ linesCoords }) => {\n const { GRAPH_WIDTH: graphWidth, GRAPH_HEIGHT: graphHeight, HORIZONTAL_ROWS_NUM: rowsNumber } = PARAMS;\n const rowHeight = 30;\n // const rowHeight = graphHeight / rowsNumber;\n\n const { topBorderValue, bottomBorderValue } = linesCoords;\n\n const centerLineY = graphHeight / 2;\n const centerLineValue = Math.round((bottomBorderValue + topBorderValue) / 2);\n const yCoordPerLine = (graphHeight / 2 / ((bottomBorderValue - topBorderValue) / 2)) * rowHeight;\n return (\n <>\n {/* Center Line */}\n \n \n {-centerLineValue}\n \n\n {/* Top Lines */}\n {new Array(rowsNumber / 2).fill(null).map((_, i, arr) => {\n const rowText = -(centerLineValue + (i + 1) * 30);\n const rowYCoord = centerLineY + yCoordPerLine * (i + 1);\n const isLeftTextTitle = rowYCoord >= 0;\n\n return (\n \n \n {isLeftTextTitle && (\n \n {rowText}\n \n )}\n \n );\n })}\n\n {/* Bottom Lines */}\n {new Array(rowsNumber / 2).fill(null).map((_, i, arr) => {\n const rowText = -(centerLineValue - (i + 1) * 30);\n const rowYCoord = centerLineY - yCoordPerLine * (i + 1);\n const isLeftTextTitle = rowYCoord + 25 < graphHeight;\n\n return (\n \n \n {isLeftTextTitle && (\n \n {rowText}\n \n )}\n \n );\n })}\n\n {/* top Y field line */}\n {/* \n \n Top {Math.floor(minMaxAvgBreak.maxY * 100)}\n */}\n\n {/* center Y field line */}\n {/* \n \n Center {Math.floor((minMaxAvgBreak.minY + avgDelta.y / 2) * 100)}\n */}\n\n {/* bottom Y field line */}\n {/* \n \n Bottom {bottomYFieldValue}\n */}\n \n );\n};\n\nconst FieldGraph = ({\n filteredData,\n relValuesData,\n preview,\n optionsArr,\n currentOption,\n setCurrentOption\n}) => {\n const [isChecked, setChecked] = useState(false);\n const [isGraphVisible, setGraphVisibility] = useState(false);\n const [hoveredDot, setHoveredDot] = useState({ visible: false, spinX: 0, spinY: 0, coords: [0, 0] });\n\n const graphRef = useRef();\n\n useEffect(() => {\n let options = {\n root: null,\n rootMargin: '300px 0px',\n threshold: 0\n };\n\n let observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n setGraphVisibility(true);\n } else {\n setGraphVisibility(false);\n }\n });\n }, options);\n observer.observe(graphRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const optionsTogglerStyles = {\n position: 'absolute',\n right: '.4375rem',\n top: '.4375rem'\n };\n\n const handleOptionClick = option => () => setCurrentOption(option);\n const handleTogglerChange = () => setChecked(prev => !prev);\n\n const isDots = currentOption === 'All Pitches';\n\n const { zone } = preview;\n\n const zeroYCoord = PARAMS.GRAPH_HEIGHT * 0.88;\n const yCoordRelCoef = 160;\n const yCoordAbsCoef = 0;\n const zeroXCoord = PARAMS.GRAPH_WIDTH * 0.5;\n const xCoordRelCoef = 160;\n\n const coords = { xCoordRelCoef, yCoordAbsCoef, yCoordRelCoef, zeroXCoord, zeroYCoord };\n\n const avgCoords = filteredData.reduce((sum, { pitch_info: pitchInfo, coordinates, break: breakValues }) => {\n if (sum[pitchInfo.pitch_type] === undefined) {\n sum[pitchInfo.pitch_type] = { sumX: 0, sumY: 0, count: 0, sumBreakX: 0, sumBreakY: 0 };\n }\n\n sum[pitchInfo.pitch_type].sumX += coordinates.zone_x;\n sum[pitchInfo.pitch_type].sumY += coordinates.zone_y;\n sum[pitchInfo.pitch_type].count++;\n sum[pitchInfo.pitch_type].avgX = sum[pitchInfo.pitch_type].sumX / sum[pitchInfo.pitch_type].count;\n sum[pitchInfo.pitch_type].avgY = sum[pitchInfo.pitch_type].sumY / sum[pitchInfo.pitch_type].count;\n sum[pitchInfo.pitch_type].sumBreakX += breakValues.break_x;\n sum[pitchInfo.pitch_type].sumBreakY += breakValues.break_y;\n sum[pitchInfo.pitch_type].avgBreakX =\n sum[pitchInfo.pitch_type].sumBreakX / sum[pitchInfo.pitch_type].count;\n sum[pitchInfo.pitch_type].avgBreakY =\n sum[pitchInfo.pitch_type].sumBreakY / sum[pitchInfo.pitch_type].count;\n\n return sum;\n }, {});\n\n const minMaxAvgBreak = Object.values(avgCoords).reduce((sum, value) => {\n if (sum.minX === undefined) {\n sum.minX = value.avgBreakX;\n sum.maxX = value.avgBreakX;\n sum.minY = value.avgBreakY;\n sum.maxY = value.avgBreakY;\n\n return sum;\n }\n\n if (value.avgBreakX < sum.minX) sum.minX = value.avgBreakX;\n if (value.avgBreakX > sum.maxX) sum.maxX = value.avgBreakX;\n if (value.avgBreakY < sum.minY) sum.minY = value.avgBreakY;\n if (value.avgBreakY > sum.maxY) sum.maxY = value.avgBreakY;\n\n return sum;\n }, {});\n\n const avgDelta = {\n x: minMaxAvgBreak.maxX - minMaxAvgBreak.minX,\n y: minMaxAvgBreak.maxY - minMaxAvgBreak.minY\n };\n\n const totalPitches = filteredData.length;\n\n const centerYFieldLine =\n zeroYCoord - ((zone.x_strike_up + zone.y_strike_down) / 2) * yCoordRelCoef + yCoordAbsCoef;\n\n const topFieldLine = centerYFieldLine - (avgDelta.y / 2) * yCoordRelCoef;\n const bottomYFieldLine = centerYFieldLine + (avgDelta.y / 2) * yCoordRelCoef;\n\n const centerFieldValue = Math.floor((minMaxAvgBreak.minY + avgDelta.y / 2) * 100);\n const bottomYFieldValue = Math.floor(minMaxAvgBreak.minY * 100);\n\n const valuesCoef = 1.6;\n // const valuesCoef = ((avgDelta.y / 2) * yCoordRelCoef) / ((avgDelta.y / 2) * 100);\n\n // console.log(valuesCoef);\n\n const topBorderValue = centerFieldValue + centerYFieldLine / valuesCoef;\n const bottomBorderValue = centerFieldValue - (PARAMS.GRAPH_HEIGHT - centerYFieldLine) / valuesCoef;\n\n const halfGraphWidth = PARAMS.GRAPH_WIDTH / 2;\n const leftBorderValue = (-halfGraphWidth / xCoordRelCoef) * 100;\n const rightBorderValue = (halfGraphWidth / xCoordRelCoef) * 100;\n\n const yZeroBreakCoef = PARAMS.GRAPH_HEIGHT / (bottomBorderValue - topBorderValue);\n const zeroYBreakLine = -topBorderValue * yZeroBreakCoef;\n\n const linesCoords = {\n topFieldLine,\n minMaxAvgBreak,\n avgDelta,\n centerYFieldLine,\n bottomYFieldLine,\n bottomYFieldValue,\n topBorderValue,\n bottomBorderValue,\n leftBorderValue,\n rightBorderValue,\n yZeroBreakCoef,\n zeroYBreakLine\n };\n return (\n
    \n
    \n \n {isGraphVisible && (\n <>\n \n {filteredData.length > 0 && (\n <>\n \n \n \n )}\n {hoveredDot.visible && }\n \n )}\n \n \n Gravity\n \n \n
    \n {/* Bottom wrapper title */}\n

    Horizontal break, cm

    \n {/* Left wrapper title */}\n

    Downward Vertical Break, cm

    \n
    \n );\n};\n\nexport default FieldGraph;\n","import FrequencySpeedGraph from './FrequencySpeedGraph/FrequencySpeedGraph';\n// import FieldImg from 'images/player_stats_field.jpg';\nimport cl from './PitchesSpeedField.module.scss';\nimport FieldGraph from './FieldGraph/FieldGraph';\n\nconst PitchesSpeedField = ({ filteredData, preview, relValuesData, ...props }) => {\n return (\n
    \n \n \n {/* field */}\n
    \n );\n};\n\nexport default PitchesSpeedField;\n","import cl from './GraphsHeader.module.scss';\nimport OptionsToggler from 'components/UI/togglers/OptionsToggler/OptionsToggler';\nimport classNames from 'classnames';\nimport TimeDynamicCheckbox from 'components/UI/checkboxes/TimeDynamicCheckbox/TimeDynamicCheckbox';\nimport UpDownArrow from 'components/UI/buttons/UpDownArrow/UpDownArrow';\nimport ArrowDown from 'components/UI/icons/ArrowDown';\n\nconst GraphsHeader = ({\n optionsArr,\n availableOptions,\n title,\n subTitle,\n\thandleMobileDatasetFilterClick = null,\n currentOption,\n setCurrentOption,\n currentOption2 = null,\n setCurrentOption2 = null,\n currentOption3 = null,\n setCurrentOption3 = null,\n noSelector = false,\n graphsArrow = false,\n addedClass = null,\n ...props\n}) => {\n const optionsTogglerStyles = {\n position: 'absolute',\n right: '.4375rem',\n top: currentOption2 !== null ? '30%' : '50%',\n transform: currentOption2 !== null ? 'translateY(-55%)' : 'translateY(-50%)'\n };\n\n const optionsToggler2Styles = {\n position: 'absolute',\n right: '.4375rem',\n bottom: '30%',\n transform: 'translateY(55%)'\n };\n\n const handleOptionClick = option => () => setCurrentOption(option);\n const handleOption2Click = option => () => {\n setCurrentOption2(prev =>\n prev.map(curOption =>\n curOption.name === option.name ? { ...curOption, checked: !curOption.checked } : curOption\n )\n );\n };\n\n const handleArrowClick = () => {\n setCurrentOption3(prev => (prev === 'opened' ? 'closed' : 'opened'));\n };\n\n const titleClasses = classNames(cl.title, {\n [cl.highTitle]: currentOption2 !== null\n });\n return (\n
    \n

    {title}

    \n\t\t\t{handleMobileDatasetFilterClick && (\n \n )}\n

    {subTitle}

    \n {graphsArrow && (\n \n )}\n {!noSelector && (\n \n )}\n {currentOption2 !== null && (\n \n )}\n
    \n );\n};\n\nexport default GraphsHeader;\n","import { useMemo } from 'react';\n\nconst batterGroupsArr = ['pitcher', 'count', 'type', 'speed', 'zone', 'result', 'swing', 'contact'];\n\nexport const useFilterBatterGroupData = (\n data,\n currentFilterValues,\n groupName,\n teamName = null,\n pitcherFullName = null\n) =>\n useMemo(\n () =>\n data.pitches_all?.filter(pitch => {\n const { pitcher } = pitch;\n const { pitcher: curPitcher, type: pitchType, speed } = currentFilterValues;\n\n return batterGroupsArr.every(group => {\n if (currentFilterValues[group] === 'all' || group === groupName) return true;\n\n if (group === 'pitcher' && curPitcher === 'team') return pitcher.team_name.includes(teamName);\n\n if (group === 'pitcher' && curPitcher === 'pitcher')\n return `${pitcher['pitcher name']} ${pitcher['pitcher surname']}`.includes(pitcherFullName);\n\n if (group === 'type') return data.preview.pitch_classes[pitch.pitch_info.pitch_type] === pitchType;\n\n if (group === 'speed') {\n const pitchClassName = data.preview.pitch_classes[pitch.pitch_info.pitch_type];\n const curPitchSpeed = pitch.pitch_info.speed;\n \n return curPitchSpeed >= speed[pitchClassName].min && curPitchSpeed <= speed[pitchClassName].max;\n }\n const tempGroupName =\n group === 'swing' || group === 'contact' ? 'result' : group === 'type' ? 'pitch_info' : group;\n\n return pitch[tempGroupName][currentFilterValues[group]];\n });\n }) || [],\n [data, currentFilterValues, groupName, teamName, pitcherFullName]\n );\n\nconst pitcherGroupsArr = ['batter', 'count', 'zone', 'result', 'swing', 'contact'];\n\nexport const useFilterPitcherGroupData = (\n data,\n currentFilterValues,\n groupName,\n teamName = null,\n batterFullName = null\n) =>\n useMemo(\n () =>\n data.pitches_all?.filter(pitch => {\n const { batter } = pitch;\n const { batter: curBatter } = currentFilterValues;\n\n return pitcherGroupsArr.every(group => {\n if (currentFilterValues[group] === 'all') return true;\n\n if (group === 'batter' && curBatter === 'team') return batter.team_name.includes(teamName);\n\n if (group === 'batter' && curBatter === 'batter')\n return `${batter['batter name']} ${batter['batter surname']}`.includes(batterFullName);\n\n const tempGroupName = group === 'swing' || group === 'contact' ? 'result' : group;\n return pitch[tempGroupName][currentFilterValues[group]] || group === groupName;\n });\n }) || [],\n [data, currentFilterValues, groupName, teamName, batterFullName]\n );\n","import { useState } from 'react';\nimport cl from './FilteredGraphs.module.scss';\nimport classNames from 'classnames';\n\nconst GraphsTimeDynamicBlock = ({ defaultOption, defaultOption2, defaultOption3, children, ...props }) => {\n const calculatedDefOptions2 = defaultOption2.reduce(\n (sum, option, index) => {\n sum.push({ name: option, type: index, checked: true });\n\n return sum;\n },\n [\n {\n name: 'All Pitches',\n type: -1,\n checked: true\n }\n ]\n );\n\n const [currentOption, setCurrentOption] = useState(defaultOption);\n const [currentOption2, setCurrentOption2] = useState(calculatedDefOptions2);\n const [currentOption3, setCurrentOption3] = useState(defaultOption3);\n\n const wrapperClasses = classNames(cl.graphsBlock, cl.dynamicBlock, {\n [cl.openedHeight]: currentOption3 === 'opened',\n [cl.closedHeight]: currentOption3 !== 'opened'\n });\n return (\n
    \n {children(\n currentOption,\n setCurrentOption,\n currentOption2,\n setCurrentOption2,\n currentOption3,\n setCurrentOption3\n )}\n
    \n );\n};\n\nexport default GraphsTimeDynamicBlock;\n","import { memo, useRef, useState, useEffect } from 'react';\nimport {\n useFrame\n // extend\n} from '@react-three/fiber';\nimport { HSVtoRGB } from 'utils';\n// import ComfortaaFont from 'fonts/Comfortaa_Regular.json';\nimport { useThreeTextCtx } from 'context/ThreeTextCtx';\n\n// const TouchPoints = ({ data3D, coef, curveCount }) => (\n// <>\n// {data3D\n// .slice(0, curveCount)\n// .filter(coords => coords[3] === 1)\n// .map(coord => (\n// \n// \n// \n// \n// ))}\n// \n// );\n\nconst CurvePath = memo(\n ({ hit, coef, setDrawPoints, minMaxDistance, handlePointerOver, handlePointerOut }) => {\n const { data_3d: data3D, distance, angle, 'exit velocity': speed } = hit.hit_info;\n const { game_id: gameId, mom_id: momentId } = hit.pitch_info;\n\n const [pointerOver, setPointerOver] = useState(false);\n\n const tubeRef = useRef(null);\n // const textRef = useRef(null);\n\n const { Vector3, CatmullRomCurve3, FrontSide } = useThreeTextCtx();\n\n // extend({ TextGeometry });\n\n // useEffect(() => {\n // if (tubeRef.current === null) return;\n\n // document.body.style.cursor = hovered ? 'pointer' : 'auto';\n // }, [hovered]);\n\n const cashedStepTotal = useRef(0);\n\n let stepTotalRef = cashedStepTotal.current;\n useEffect(() => {\n setDrawPoints(false);\n\n stepTotalRef = 0;\n cashedStepTotal.current = 0;\n }, [data3D]);\n\n // useEffect(() => {\n // if (!hovered) {\n // setTubeRadius(3);\n // return;\n // }\n\n // setTubeRadius(prev => prev + 0.1);\n // }, [hovered]);\n\n // useEffect(() => {\n // if (!hovered) {\n // setTubeRadius(3);\n // return;\n // }\n // if (tubeRadius <= 3 || tubeRadius >= 5) return;\n\n // setTubeRadius(prev => prev + 0.1);\n // }, [tubeRadius, hovered]);\n\n const points = data3D.reduce((sum, coord) => {\n const newCoord = new Vector3(coord[0] * coef - 320, coord[2] * coef, coord[1] * -coef + 167);\n\n sum.push(newCoord);\n return sum;\n }, []);\n\n const curveCoords = new CatmullRomCurve3(points);\n\n useFrame(({ camera }) => {\n // if (textRef.current) {\n // textRef.current.quaternion.copy(camera.quaternion);\n // textRef.current.geometry.center();\n // }\n\n // if (pointerOver) {\n // tubeRef.current.attributes.args = [curveCoords, 500, 10, 10, false];\n // }\n\n if (stepTotalRef > 30510) return;\n if (stepTotalRef > 30110) {\n setDrawPoints(true);\n cashedStepTotal.current = stepTotalRef;\n return;\n }\n stepTotalRef += 400;\n tubeRef.current.setDrawRange(0, stepTotalRef);\n });\n\n const colorsMin = 0.65;\n const colorsMax = 1;\n const colorsDelta = colorsMax - colorsMin;\n\n const distanceDelta = distance - minMaxDistance.min;\n const distanceRel = distanceDelta / (minMaxDistance.max - minMaxDistance.min);\n\n const resultColorRel = colorsMin + colorsDelta * distanceRel;\n\n const meshColor = HSVtoRGB(resultColorRel, 1, 1);\n\n const handleMeshClick = () => {\n window.open(`/game/${gameId}?card=${momentId}&tab=hitting`, '_blank');\n };\n\n // const font = new FontLoader().parse(ComfortaaFont);\n // const textCoords = data3D[Math.floor(data3D.length / 2)];\n\n const distanceText = `Angle: ${String(Math.round(angle))}° Velocity: ${String(Math.round(speed))} mph \nDistance: ${String(Math.round(distance))} m.`;\n return (\n <>\n \n \n \n \n {\n if (cashedStepTotal.current < 30110) return;\n handlePointerOver(distanceText);\n setPointerOver(true);\n }}\n onPointerOut={() => {\n if (cashedStepTotal.current < 30110) return;\n handlePointerOut(distanceText);\n setPointerOver(false);\n }}>\n \n \n \n\n {/* {hovered && (\n \n \n \n \n )} */}\n \n );\n }\n);\n\nconst Curve = ({ hit, curveCount, minMaxDistance, handlePointerOver, handlePointerOut }) => {\n const [drawPoints, setDrawPoints] = useState(false);\n const coef = 925 / 90;\n\n return (\n <>\n \n {/* {drawPoints && } */}\n \n );\n};\n\nexport default Curve;\n","import { useState, memo } from 'react';\nimport { getRndValue } from 'utils';\nimport Curve from './Curve';\nimport ThreeTextCtx from 'context/ThreeTextCtx';\n\n// import CurveTexture from 'images/blue_ball_curve.jpg';\n// import { TextureLoader } from 'three';\n\nconst Curves = ({ hitsData, handlePointerOver, handlePointerOut }) => {\n const maxLength = hitsData.reduce((sum, hit) => {\n const curLength = hit.hit_info.data_3d.length;\n if (curLength > sum) sum = curLength;\n\n return sum;\n }, 0);\n\n const [curveCount] = useState(maxLength);\n\n const isRenderCurves = curveCount > 1;\n // 240 - 359\n\n const defaultMinMaxDistance = { min: hitsData[0].hit_info.distance, max: hitsData[0].hit_info.distance };\n const minMaxDistance = hitsData.reduce((result, { hit_info: { distance } }) => {\n if (distance < result.min) result.min = distance;\n if (distance > result.max) result.max = distance;\n\n return result;\n }, defaultMinMaxDistance);\n return (\n \n {isRenderCurves &&\n hitsData.map((hit, i) => {\n const { data_3d: data3D } = hit.hit_info;\n\n const curCurveCount = curveCount > data3D.length ? data3D.length : curveCount;\n\n return (\n \n );\n })}\n \n );\n};\n\nfunction propsComparison(prevProps, nextProps) {\n return JSON.stringify(prevProps) === JSON.stringify(nextProps);\n}\n\nexport default memo(Curves, propsComparison);\n","import { tooltip } from './PitchesTrajectories.module.scss';\n\nconst Tooltip = ({ text }) => {\n return
    {text}
    ;\n};\n\nexport default Tooltip;\n","import classNames from 'classnames';\nimport React, { memo, Suspense, useMemo, useState, useRef, useEffect, forwardRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './PitchesTrajectories.module.scss';\nimport { Canvas } from '@react-three/fiber';\nimport { FrontSide, TextureLoader } from 'three';\nimport { OrbitControls } from '@react-three/drei';\nimport FieldBg from 'images/field_right.jpg';\n// import ArrowDown from 'components/UI/icons/ArrowDown';\nimport Curves from './Curves/Curves';\nimport Tooltip from './Tooltip';\n\nconst OptionsBar = ({ isAutoRotate, handleAutoRotateClick, handleResetClick }) => {\n const rotateBtnClass = classNames({\n [cl.active]: isAutoRotate\n });\n\n return (\n
    \n
    \n \n \n
    \n {/*
    \n \n
    */}\n
    \n );\n};\n\nconst PitchesTrajectories = ({ data }) => {\n const [isAutoRotate, setAutoRotate] = useState(true);\n const [zoomCoef, setZoomCoef] = useState(1);\n const [isGraphVisible, setGraphVisibility] = useState(false);\n const [hovered, setHovered] = useState({ isHovered: false, text: '' });\n\n const graphRef = useRef();\n const pointerTimeout = useRef(null);\n\n useEffect(() => {\n let options = {\n root: null,\n rootMargin: '-300px 0px',\n // rootMargin: '300px 0px',\n threshold: 0\n };\n\n let observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n setGraphVisibility(true);\n } else {\n setGraphVisibility(false);\n }\n });\n }, options);\n observer.observe(graphRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const currentMoment = useSelector(state => state.game.currentMoment);\n\n const controlsRef = useRef();\n const wrapperRef = useRef();\n\n useEffect(() => {\n const xCoef = wrapperRef.current.clientWidth / 568.72;\n const yCoef = wrapperRef.current.clientHeight / 497.81;\n const resultCoef = Math.min(xCoef, yCoef);\n\n setZoomCoef(resultCoef);\n }, []);\n\n const handleResetClick = () => controlsRef.current.reset();\n const handleAutoRotateClick = () => setAutoRotate(prev => !prev);\n\n const textureRef = useMemo(() => new TextureLoader().load(FieldBg), []);\n\n const hitsData = data.filter(({ hit_info }) => hit_info.data_3d !== null);\n const isCurves = hitsData.length > 0;\n\n const handlePointerOverCurve = text => {\n clearTimeout(pointerTimeout.current);\n\n setHovered({ isHovered: true, text });\n\n document.body.style.cursor = 'pointer';\n };\n\n const handlePointerOutCurve = text => {\n clearTimeout(pointerTimeout.current);\n\n pointerTimeout.current = setTimeout(() => {\n setHovered({ isHovered: false, text });\n }, 4000);\n\n document.body.style.cursor = 'auto';\n };\n return (\n
    \n \n \n \n \n \n \n\n {isGraphVisible && isCurves && (\n \n )}\n\n \n \n\n \n \n \n\n \n\n {hovered.isHovered && }\n
    \n );\n};\n\nexport default memo(PitchesTrajectories);\n","const StraightLines = () => (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nconst RadialLines = () => (\n <>\n \n \n \n \n \n \n \n \n \n);\n\nconst DegreesTitles = () => (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nconst PitcherImg = () => (\n \n);\n\nconst BgLayout = () => {\n return (\n <>\n \n \n \n \n \n );\n};\n\nexport default BgLayout;\n","import { footerText } from './HitsAnglesGraph.module.scss';\n\nconst Footer = ({\n PARAMS: { GRAPH_WIDTH: graphWidth, GRAPH_HEIGHT: graphHeight },\n angleValues,\n footerField,\n footerUnits\n}) => {\n const minMaxAvgValues = angleValues\n .filter(valueGroup => valueGroup[`min${footerField}`] !== undefined)\n .reduce(\n (sum, valueGroup) => {\n if (sum.min === undefined || valueGroup[`min${footerField}`] < sum.min)\n sum.min = valueGroup[`min${footerField}`];\n if (sum.max === undefined || valueGroup[`max${footerField}`] > sum.max)\n sum.max = valueGroup[`max${footerField}`];\n\n sum.sumValues += valueGroup[`sum${footerField}`];\n sum.sumHits += valueGroup.hitsCount;\n\n return sum;\n },\n { sumValues: 0, sumHits: 0 }\n );\n\n minMaxAvgValues.avg = minMaxAvgValues.sumValues / minMaxAvgValues.sumHits;\n\n // const minValue = `${Math.round(minMaxAvgValues.min * 10) / 10} ${footerUnits}`;\n const avgValue = `${Math.round(minMaxAvgValues.avg * 10) / 10} ${footerUnits}`;\n const maxValue = `${Math.round(minMaxAvgValues.max * 10) / 10} ${footerUnits}`;\n return (\n \n AVG: {avgValue} MAX: {maxValue}\n \n );\n};\n\nexport default Footer;\n","import { degToRad } from 'three/src/math/MathUtils';\nimport BgLayout from './BgLayout';\nimport cl from './HitsAnglesGraph.module.scss';\nimport Footer from './Footer';\n\nconst PARAMS = {\n GRAPH_WIDTH: 307,\n GRAPH_HEIGHT: 450,\n LINE_WIDTH: 179,\n ZERO_X: 98.45,\n ZERO_Y: 230.35,\n RADIALS_NUMBER: 8\n};\n\nconst MainTitle = ({ title }) => (\n \n {title}\n \n);\n\nconst MobileMainTitle = ({ title }) =>

    {title}

    ;\n\nconst RadialTitles = ({ minMaxValue, title }) => {\n const { min, max } = minMaxValue;\n\n const minMaxDelta = max - min;\n const valuePerCircle = minMaxDelta / PARAMS.RADIALS_NUMBER;\n\n const titles = [];\n for (let i = 1; i <= PARAMS.RADIALS_NUMBER; i++) {\n titles.push((min + valuePerCircle * i).toFixed(1));\n }\n\n const xCoord = PARAMS.ZERO_X - 4;\n return (\n <>\n {/* Center value */}\n {/* \n {min}\n */}\n\n {/* Top values */}\n {titles.map((value, i) => {\n const yCoord = PARAMS.ZERO_Y - 20 - i * 22.5;\n const filteredValue = title !== 'Hits by angle, hits' ? value : (value * 10) % 10 ? '' : +value;\n\n return (\n \n {filteredValue}\n \n );\n })}\n {/* Bottom values */}\n {titles.map((value, i) => {\n const yCoord = PARAMS.ZERO_Y + 20 + i * 22.5;\n const filteredValue = title !== 'Hits by angle, hits' ? value : (value * 10) % 10 ? '' : +value;\n\n return (\n \n {filteredValue}\n \n );\n })}\n \n );\n};\n\nconst Segment = ({ angle, dataField, minMaxValue }) => {\n const { min, max } = minMaxValue;\n const { deg } = angle;\n\n const minMaxDelta = max - min;\n const rel = (angle[dataField] - min) / minMaxDelta;\n\n let path = `M${PARAMS.ZERO_X},${PARAMS.ZERO_Y}`;\n\n let secondDotXCoord = PARAMS.LINE_WIDTH * rel * Math.cos(degToRad(deg + 10)) + PARAMS.ZERO_X;\n let secondDotYCoord = PARAMS.ZERO_Y - PARAMS.LINE_WIDTH * rel * Math.sin(degToRad(deg + 10));\n path += `L${secondDotXCoord},${secondDotYCoord}`;\n\n let centerDotXCoord = PARAMS.LINE_WIDTH * rel * 1.005 * Math.cos(degToRad(deg + 5)) + PARAMS.ZERO_X;\n let centerDotYCoord = PARAMS.ZERO_Y - PARAMS.LINE_WIDTH * rel * 1.005 * Math.sin(degToRad(deg + 5));\n\n let thirdDotXCoord = PARAMS.LINE_WIDTH * rel * Math.cos(degToRad(deg)) + PARAMS.ZERO_X;\n let thirdDotYCoord = PARAMS.ZERO_Y - PARAMS.LINE_WIDTH * rel * Math.sin(degToRad(deg));\n\n path += `Q${centerDotXCoord},${centerDotYCoord} ${thirdDotXCoord},${thirdDotYCoord}Z`;\n\n const pathFillColor = `hsla(${169 + 0.41 * rel * 100}, 30%, ${88 - 0.15 * rel * 100}%, 1)`;\n return ;\n};\n\nconst Segments = ({ angleValues, dataField, minMaxValue }) => (\n <>\n {angleValues.map((angle, i) => (\n \n ))}\n \n);\n\nconst HitsAnglesGraph = ({\n title,\n angleValues,\n dataField,\n isFooter = true,\n footerField = '',\n footerUnits = ''\n}) => {\n const minMaxValue = angleValues.reduce(\n (sum, value) => {\n if (value[dataField] > sum.max) sum.max = value[dataField];\n if (value[dataField] < sum.min) sum.min = value[dataField];\n\n return sum;\n },\n { min: 0, max: 0 }\n );\n\n return (\n
    \n \n \n \n\n {/* Title */}\n \n\n {/* Radial Titles */}\n \n\n {/* Segments */}\n \n\n {/* Footer */}\n {isFooter && (\n \n )}\n \n
    \n );\n};\n\nexport default HitsAnglesGraph;\n","import HitsAnglesGraph from './HitsAnglesGraph';\nimport cl from './HitsAnglesGraphs.module.scss';\n\nconst HitsAnglesGraphs = ({ data }) => {\n const notNullAngleData = data.filter(({ hit_info: { angle } }) => angle !== null);\n\n const defaultAnglesValues = [];\n\n for (let i = -90; i <= 80; i += 10) {\n defaultAnglesValues.push({\n deg: i,\n hitsCount: 0,\n sumVelocity: 0,\n avgVelocity: 0,\n sumDistance: 0,\n avgDistance: 0\n });\n }\n\n const angleValues = notNullAngleData.reduce(\n (sum, { hit_info: { angle, distance, 'exit velocity': exitVelocity } }, index) => {\n const resultAngle = Math.floor(angle / 10) * 10;\n const sumIndex = resultAngle / 10 + 9;\n const sumAngleObj = sum[sumIndex];\n\n sumAngleObj.hitsCount++;\n\n sumAngleObj.sumVelocity += exitVelocity;\n if (sumAngleObj.minVelocity === undefined || exitVelocity < sumAngleObj.minVelocity) {\n sumAngleObj.minVelocity = exitVelocity;\n }\n if (sumAngleObj.maxVelocity === undefined || exitVelocity > sumAngleObj.maxVelocity) {\n sumAngleObj.maxVelocity = exitVelocity;\n }\n sumAngleObj.avgVelocity = sumAngleObj.sumVelocity / sumAngleObj.hitsCount;\n\n sumAngleObj.sumDistance += distance;\n if (sumAngleObj.minDistance === undefined || distance < sumAngleObj.minDistance) {\n sumAngleObj.minDistance = distance;\n }\n if (sumAngleObj.maxDistance === undefined || distance > sumAngleObj.maxDistance) {\n sumAngleObj.maxDistance = distance;\n }\n sumAngleObj.avgDistance = sumAngleObj.sumDistance / sumAngleObj.hitsCount;\n\n return sum;\n },\n defaultAnglesValues\n );\n\n return (\n
    \n \n \n \n
    \n );\n};\n\nexport default HitsAnglesGraphs;\n","import { showingGroup } from './TwinPitchesGraph.module.scss';\n\nconst Tooltip = ({ hoveredDot, isType = true }) => {\n const speedValue = +hoveredDot.speed.toFixed(2) + ' mph';\n\n const hoveredDotXCoord =\n hoveredDot.coords[0] <= 75\n ? hoveredDot.coords[0] + 80\n : hoveredDot.coords[0] <= 315\n ? hoveredDot.coords[0]\n : hoveredDot.coords[0] - 65;\n const hoveredDotYCoord = hoveredDot.coords[1] > 50 ? hoveredDot.coords[1] : hoveredDot.coords[1] + 75;\n let rectY = hoveredDotYCoord - 50;\n let rectHeight = 35;\n const rectWidth = 138;\n const rectX = hoveredDotXCoord - rectWidth / 2;\n\n if (!isType) {\n rectY += 16;\n rectHeight -= 16;\n }\n return (\n \n \n {isType && (\n \n {hoveredDot.pitchType}\n \n )}\n \n Speed: {speedValue}\n \n \n );\n};\n\nexport default Tooltip;\n","import { subTitle } from './TwinPitchesGraph.module.scss';\n\nconst SubTitle = ({ zeroXCoord, top, arrData }) => {\n const minMaxSpeed = arrData.reduce((minMax, { pitch_info: { speed } }, i) => {\n if (speed < minMax.min || i === 0) minMax.min = speed;\n if (speed > minMax.max || i === 0) minMax.max = speed;\n\n return minMax;\n }, {});\n\n minMaxSpeed.min *= 2.24;\n minMaxSpeed.max *= 2.24;\n return (\n <>\n \n Min: {Math.round(minMaxSpeed.min)} mph\n \n \n Max: {Math.round(minMaxSpeed.max)} mph\n \n \n );\n};\n\nexport default SubTitle;\n","import { useRef, useLayoutEffect, useEffect, useState, Fragment } from 'react';\nimport cl from './TwinPitchesGraph.module.scss';\nimport { getPitchColorByName } from 'utils';\nimport Tooltip from './Tooltip';\nimport SubTitle from './SubTitle';\n// import h337 from 'heatmap.js';\n\nconst PARAMS = {\n GRAPH_WIDTH: 463,\n GRAPH_HEIGHT: 388,\n SIDE_PADDING: 30\n};\n\nconst Dots = ({ arrData, pitchTypes, coords, setHoveredDot }) => {\n // const [radius, setRadius] = useState(1);\n\n // useEffect(() => {\n // setRadius(1);\n\n // setTimeout(() => {\n // setRadius(8);\n // }, 300);\n // }, [coords]);\n const handleDotClick = (gameId, momentId) => () => {\n window.open(`/game/${gameId}?card=${momentId}&tab=pitching`, '_blank');\n };\n return (\n <>\n {arrData.map((pitch, i) => {\n const { coordinates, pitch_info: pitchInfo } = pitch;\n const { zone_x: x, zone_y: y } = coordinates;\n const { pitch_type: pitchType, game_id: gameId, mom_id: momentId, speed } = pitchInfo;\n\n const { xCoordRelCoef, yCoordAbsCoef, yCoordRelCoef, zeroXCoord, zeroYCoord } = coords;\n\n const xCoord = zeroXCoord + x * xCoordRelCoef;\n const yCoord = y === 0 ? zeroYCoord : zeroYCoord - y * yCoordRelCoef + yCoordAbsCoef;\n return (\n \n setHoveredDot(prev => ({\n ...prev,\n speed: speed * 2.24,\n visible: true,\n coords: [xCoord, yCoord],\n pitchType: pitchTypes[pitchType]\n }))\n }\n onPointerOut={() => setHoveredDot(prev => ({ ...prev, visible: false }))}\n />\n );\n })}\n \n );\n};\n\nconst HeatAreas = ({ arrData, coords }) => {\n const { zeroXCoord, zeroYCoord, xCoordRelCoef, yCoordAbsCoef, yCoordRelCoef } = coords;\n const heatRowsCount = 35;\n const heatColsCount = 32;\n const rowHeight = PARAMS.GRAPH_HEIGHT / heatRowsCount;\n const colWidth = PARAMS.GRAPH_WIDTH / heatColsCount;\n\n // now generate some random data\n let maxValue = 0;\n\n const dotsCoords = arrData.reduce((sum, pitch) => {\n const { coordinates, pitch_info: pitchInfo } = pitch;\n const { zone_x: x, zone_y: y } = coordinates;\n\n const xCoord = zeroXCoord + x * xCoordRelCoef;\n const yCoord = y === 0 ? zeroYCoord : zeroYCoord - y * yCoordRelCoef + yCoordAbsCoef;\n\n const rowNumber = Math.floor(yCoord / rowHeight);\n const colNumber = Math.floor(xCoord / colWidth);\n\n if (!sum[rowNumber]) sum[rowNumber] = [];\n if (!sum[rowNumber][colNumber]) sum[rowNumber][colNumber] = 0;\n\n sum[rowNumber][colNumber]++;\n\n maxValue = Math.max(maxValue, sum[rowNumber][colNumber]);\n\n return sum;\n }, []);\n\n console.log(dotsCoords);\n console.log(maxValue);\n\n const points = dotsCoords.reduce((sum, coords, i) => {\n if (coords === undefined) return sum;\n\n coords.forEach((col, j) => {\n if (col === undefined) return;\n\n const newPoint = {\n x: +(j * colWidth + colWidth / 2).toFixed(2),\n y: +(i * rowHeight + rowHeight / 2).toFixed(2),\n value: col\n // value: col <= 5 ? +col : 5\n };\n\n sum.push(newPoint);\n });\n\n return sum;\n }, []);\n\n console.log(points);\n const maxRadius = 25;\n return (\n <>\n {points.map((point, i) => {\n const { x, y, value } = point;\n\n const firstLayerMaxValue = maxValue < 5 ? maxValue * 0.5 : maxValue * 0.33;\n const firstLayerRadius =\n maxValue === 1\n ? maxRadius / 3\n : maxValue < 3\n ? value * (maxRadius / 3)\n : value < firstLayerMaxValue\n ? (value / firstLayerMaxValue) * maxRadius\n : maxRadius;\n\n const opacity = firstLayerRadius / maxRadius;\n\n // let path = '';\n // const topLeftX = x - firstLayerRadius;\n // const topLeftY = y - firstLayerRadius;\n // const topRightX = x + firstLayerRadius;\n // const topRightY = topLeftY;\n // const bottomRightX = topRightX;\n // const bottomRightY = y + firstLayerRadius;\n // const bottomLeftX = topLeftX;\n // const bottomLeftY = bottomRightY;\n\n // const topRightCornering = getRndValue(-firstLayerRadius, firstLayerRadius);\n // const bottomRightCornering = getRndValue(-firstLayerRadius, firstLayerRadius)\n // const bottomLeftCornering = getRndValue(-firstLayerRadius, firstLayerRadius)\n\n // // top-left point\n // path += `M${topLeftX},${topLeftY}`;\n // // top-right\n // path += `C${topLeftX + getRndValue(0, firstLayerRadius)} ${\n // topLeftY + getRndValue(-firstLayerRadius, firstLayerRadius)\n // }, ${topRightX - getRndValue(0, firstLayerRadius)} ${\n // topRightY + topRightCornering\n // }, ${topRightX} ${topRightY}`;\n // // bottom-right\n // path += `C${topRightX + getRndValue(0, firstLayerRadius)} ${topRightY - topRightCornering}, ${\n // bottomRightX + bottomRightCornering\n // // bottomRightX + getRndValue(-firstLayerRadius, firstLayerRadius)\n // } ${bottomRightY - getRndValue(0, firstLayerRadius)}, ${bottomRightX} ${bottomRightY}`;\n // // bottom-left\n // path += `C${bottomRightX - getRndValue(0, firstLayerRadius)} ${\n // bottomRightY - bottomRightCornering\n // // bottomRightY + getRndValue(-firstLayerRadius, firstLayerRadius)\n // }, ${bottomLeftX + getRndValue(0, firstLayerRadius)} ${\n // bottomLeftY + bottomLeftCornering\n // // bottomLeftY + getRndValue(-firstLayerRadius, firstLayerRadius)\n // }, ${bottomLeftX} ${bottomLeftY}`;\n // // top-left\n // path += `C${bottomLeftX - getRndValue(0, firstLayerRadius)} ${\n // bottomLeftY - bottomLeftCornering\n // // bottomRightY + getRndValue(-firstLayerRadius, firstLayerRadius)\n // }, ${topLeftX + getRndValue(-firstLayerRadius, firstLayerRadius)} ${\n // topLeftY + getRndValue(-firstLayerRadius, firstLayerRadius)\n // }, ${topLeftX} ${topLeftY}`;\n\n return (\n \n {/* */}\n \n \n );\n })}\n {/* Second layer */}\n {points.map((point, i) => {\n const { x, y, value } = point;\n\n const secondLayerMaxValue = maxValue < 5 ? maxValue : maxValue * 0.66;\n const secondLayerRadius =\n value >= 3\n ? value < secondLayerMaxValue\n ? (value / secondLayerMaxValue) * (maxRadius - 4)\n : maxRadius - 4\n : 0;\n\n const opacity = secondLayerRadius / (maxRadius - 4);\n return (\n \n );\n })}\n {/* Third layer */}\n {points.map((point, i) => {\n const { x, y, value } = point;\n\n const thirdLayerMaxValue = maxValue;\n\n const thirdLayerRadius =\n value >= 5\n ? value < thirdLayerMaxValue\n ? (value / thirdLayerMaxValue) * (maxRadius - 10)\n : maxRadius - 10\n : 0;\n\n const opacity = thirdLayerRadius / (maxRadius - 10);\n return (\n \n \n \n );\n })}\n \n );\n};\n\nconst Frames = ({ top, title1, filteredData, selectedPitchType, preview, currentOption, setHoveredDot }) => {\n const { zone, pitch_types: pitchTypes } = preview;\n\n const {\n y_strike_down: yStrikeDown,\n x_strike_up: yStrikeUp,\n x_strike_left: xStrikeLeft,\n x_strike_right: xStrikeRight,\n shadow_border: shadowBorder\n } = zone;\n\n const arrData = selectedPitchType\n ? filteredData.filter(pitch => pitchTypes[pitch.pitch_info.pitch_type] === selectedPitchType)\n : filteredData;\n\n let totalPitches = arrData.length;\n\n const zeroYCoord = PARAMS.GRAPH_HEIGHT * 0.8615;\n const yCoordRelCoef = 179;\n // const yCoordRelCoef = 340;\n const yCoordAbsCoef = 0;\n // const yCoordAbsCoef = 75;\n\n const zeroXCoord = PARAMS.GRAPH_WIDTH * 0.2645;\n const xCoordRelCoef = 179;\n // const xCoordRelCoef = 248;\n\n // Dashed frame params\n const dashedFrameX = zeroXCoord + xCoordRelCoef * xStrikeLeft;\n const dashedFrameWidth = zeroXCoord + xCoordRelCoef * xStrikeRight - dashedFrameX;\n const dashedFrameY = zeroYCoord - yStrikeUp * yCoordRelCoef + yCoordAbsCoef;\n const dashedFrameHeight = zeroYCoord - yStrikeDown * yCoordRelCoef + yCoordAbsCoef - dashedFrameY;\n\n const isDots = currentOption === 'All Pitches';\n return (\n <>\n {/* Center X line */}\n {/* */}\n {/* Center Y line */}\n {/* */}\n {/* Left Dashed Line */}\n {/* */}\n {/* Right Dashed Line */}\n {/* */}\n\n {/* Frames */}\n {/* Wrapper frame */}\n \n\n {/* Outer frame */}\n \n\n {/* Inner frame */}\n \n\n {/* Dots */}\n {isDots && (\n \n )}\n\n {/* Heat areas */}\n {!isDots && (\n <>\n \n \n \n \n \n )}\n\n {/* Dashed frame */}\n \n\n {/* Title */}\n \n {`${title1} (${totalPitches})`}\n \n\n {/* Subtitle */}\n \n \n );\n};\n\nconst Column = ({ right, center, coef, data, reverse = false }) => {\n const { percents: srcPercents, footer } = data;\n const percents = isNaN(srcPercents) ? 0 : srcPercents;\n\n const percentValueRef = useRef(null);\n\n useLayoutEffect(() => {\n if (percentValueRef.current === null) return;\n\n percentValueRef.current.style.transition = 'unset';\n percentValueRef.current.style.opacity = 0;\n\n setTimeout(() => {\n if (percentValueRef.current) {\n percentValueRef.current.style.transition = 'opacity .3s';\n percentValueRef.current.style.opacity = 1;\n }\n }, 300);\n }, [percents]);\n\n const xCoord = right - 20;\n const yCoordFilled = reverse ? center : center - coef * percents;\n\n const valueXCoord = xCoord + 10;\n\n const percentsYCoord = reverse\n ? yCoordFilled + coef * percents + 16\n : footer\n ? center + 15\n : yCoordFilled - 5;\n // const percentsYCoord = reverse ? center + columnHeight + 25 : yCoordFilled - 5;\n const legendCircleFill = footer === 'Heart' ? '#B6C6D6' : footer === 'Shadow' ? '#EAEAEA' : 'transparent';\n const isLegendText = footer === 'Heart';\n const percentsValue = Math.round(percents);\n return (\n <>\n {/* Filled */}\n \n {/* Empty */}\n {/* */}\n {/* Value */}\n {/* \n {value}\n */}\n {/* Percents */}\n \n {percentsValue}%\n \n {/* Footer */}\n {footer && (\n <>\n \n {isLegendText && (\n \n Legend:\n \n )}\n \n {footer}\n \n \n )}\n \n );\n};\n\nconst Columns = ({ right, center, values }) => {\n const columnHeight = 150 / 2;\n const coef = columnHeight / 100;\n\n return (\n <>\n {Object.entries(values).map((entry, i) => (\n \n ))}\n \n );\n};\n\nconst PercentsGraph = ({ left, center, filteredData, selectedPitchType, preview }) => {\n const { pitch_types: pitchTypes } = preview;\n\n const filteredPitches = selectedPitchType\n ? filteredData.filter(pitch => pitchTypes[pitch.pitch_info.pitch_type] === selectedPitchType)\n : filteredData;\n\n const filteredPitchesCount = filteredPitches.length;\n const defaultCountByResult = {\n swingHeart: 0,\n swingShadow: 0,\n swingChase: 0,\n takeHeart: 0,\n takeShadow: 0,\n takeChase: 0,\n totalHeart: 0,\n totalShadow: 0,\n totalChase: 0\n };\n\n const pitchesCountByResult = filteredPitches.reduce((sum, pitch) => {\n const { result, zone } = pitch;\n\n if (result.swing) {\n zone.heart && sum.swingHeart++;\n zone.edge && sum.swingShadow++;\n zone.waste && sum.swingChase++;\n }\n\n if (result.take) {\n zone.heart && sum.takeHeart++;\n zone.edge && sum.takeShadow++;\n zone.waste && sum.takeChase++;\n }\n\n zone.heart && sum.totalHeart++;\n zone.edge && sum.totalShadow++;\n zone.waste && sum.totalChase++;\n\n return sum;\n }, defaultCountByResult);\n\n const {\n swingChase,\n takeChase,\n swingShadow,\n takeShadow,\n swingHeart,\n takeHeart,\n totalChase,\n totalShadow,\n totalHeart\n } = pitchesCountByResult;\n\n const topRightPercents = Math.round((swingChase * 100) / (swingChase + takeChase));\n const topCenterPercents = Math.round((swingShadow * 100) / (swingShadow + takeShadow));\n const topLeftPercents = Math.round((swingHeart * 100) / (swingHeart + takeHeart));\n\n const topValues = {\n topRight: {\n percents: topRightPercents,\n footer: null,\n column: 3\n },\n bottomRight: {\n percents: 100 - topRightPercents,\n footer: null,\n reverse: true,\n column: 3\n },\n topCenter: {\n percents: topCenterPercents,\n footer: null,\n column: 2\n },\n bottomCenter: {\n percents: 100 - topCenterPercents,\n footer: null,\n reverse: true,\n column: 2\n },\n topLeft: {\n percents: topLeftPercents,\n footer: null,\n column: 1\n },\n bottomLeft: {\n percents: 100 - topLeftPercents,\n footer: null,\n reverse: true,\n column: 1\n }\n };\n\n const bottomValues = {\n topRight: {\n percents: (totalChase * 100) / filteredPitchesCount,\n footer: 'Chase',\n column: 3\n },\n topCenter: {\n percents: (totalShadow * 100) / filteredPitchesCount,\n footer: 'Shadow',\n column: 2\n },\n topLeft: {\n percents: (totalHeart * 100) / filteredPitchesCount,\n footer: 'Heart',\n column: 1\n }\n };\n\n return (\n <>\n {/* Top line titles */}\n \n Swing\n \n \n Take\n \n {/* Bottom line titles */}\n \n Pitches\n \n \n by zone\n \n \n {/* Bottom columns */}\n \n\n {/* Top line */}\n \n {/* Bottom line */}\n \n \n );\n};\n\nconst LeftChart = ({ filteredData, selectedPitchType, preview, currentOption }) => {\n const [hoveredDot, setHoveredDot] = useState({ visible: false, speed: 0, coords: [0, 0] });\n\n const mainTitle = selectedPitchType ?? 'All pitches';\n\n return (\n <>\n \n \n {hoveredDot.visible && }\n \n );\n};\n\nconst TwinPitchesGraph = ({ data, filteredData, selectedPitchType = null, preview, currentOption }) => {\n const [isGraphVisible, setGraphVisibility] = useState(false);\n\n const wrapperRef = useRef();\n const graphRef = useRef();\n\n useEffect(() => {\n let options = {\n root: null,\n rootMargin: '300px 0px',\n threshold: 0\n };\n\n let observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n setGraphVisibility(true);\n } else {\n setGraphVisibility(false);\n }\n });\n }, options);\n observer.observe(graphRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n useEffect(() => {\n // const heatmapInstance = h337.create({\n // // only container is required, the rest will be defaults\n // // container: document.getElementById('root')\n // container: wrapperRef.current\n // });\n // const zeroYCoord = wrapperRef.current.clientHeight * 0.85;\n // const yCoordAbsCoef = wrapperRef.current.clientHeight / 5.173333;\n // const zeroXCoord = wrapperRef.current.clientWidth * 0.2645;\n // console.log(dotsCoords);\n // console.log(maxValue);\n // let len = arrData.length;\n // while (len--) {\n // const val = Math.floor(Math.random() * 100);\n // max = Math.max(max, val);\n // const point = {\n // // x: zeroXCoord,\n // y: zeroYCoord,\n // x: Math.floor(Math.random() * width),\n // // y: Math.floor(Math.random() * height),\n // value: val\n // };\n // points.push(point);\n // }\n // heatmap data format\n // const dataValues = {\n // min: 1,\n // max: 5,\n // // data: [\n // // { x: 40, y: 50, value: 1 },\n // // { x: 80.5, y: 50.4, value: 1 },\n // // { x: 90, y: 50.3, value: 1 },\n // // { x: 200, y: 150, value: 3 },\n // // { x: 150, y: 50, value: 10 }\n // // ]\n // data: points\n // };\n // console.log(data);\n // if you have a set of datapoints always use setData instead of addData\n // for data initialization\n // heatmapInstance.setData(dataValues);\n // heatmapInstance.repaint();\n // heatmapInstanceRef.current.setData(data);\n // heatmapInstanceRef.current.repaint();\n }, [filteredData]);\n\n return (\n
    \n \n {isGraphVisible && (\n \n )}\n \n
    \n );\n};\n\nexport default TwinPitchesGraph;\n","import { twinGraphsWrapper } from '../FilteredGraphs.module.scss';\nimport TwinPitchesGraph from './TwinPitchesGraph';\n\nconst TwinPitchesGraphs = ({ relValuesData, preview, currentOption, filteredData }) => {\n return (\n
    \n \n\n {Object.entries(relValuesData)\n .sort((a, b) => (a[1].count > b[1].count ? -1 : 1))\n .map((entry, index) => (\n \n ))}\n
    \n );\n};\n\nexport default TwinPitchesGraphs;\n","import { Fragment } from 'react';\nimport { MONTHS } from 'utils';\nimport cl from './ArsenalGraph.module.scss';\n\nconst BottomMarks = ({ PARAMS, bottomMarks, currentTimeInterval }) => {\n const marksInterval = PARAMS.HORIZONTAL_GRID_LINES_WIDTH / (bottomMarks.length + 1);\n const yCoords = [PARAMS.ZERO_COORDS.Y + 1, PARAMS.ZERO_COORDS.Y + 6];\n\n return (\n <>\n {bottomMarks.map((mark, i) => {\n const xCoord = PARAMS.ZERO_COORDS.X + marksInterval * (i + 1);\n\n const text =\n currentTimeInterval === 'Season'\n ? mark\n : currentTimeInterval === 'Month'\n ? `${MONTHS[+mark.slice(5, 7) - 1]}, ${mark.slice(2, 4)}`\n : mark.split('-').reverse().join('.');\n return (\n \n \n \n {text}\n \n \n );\n })}\n \n );\n};\n\nexport default BottomMarks;\n","import { Fragment } from 'react';\nimport cl from './ArsenalGraph.module.scss';\n\nconst HorizontalLinesAndNumbers = ({ PARAMS, marks, graphType }) => {\n const isLeftMarks = marks.some(value => !isNaN(value));\n\n\tconst marksDelta = marks[marks.length - 1] - marks[0]\n return (\n <>\n {marks.map((number, i) => {\n const leftMarkValue = graphType !== 'VerticalBreak' ? number : (-number).toFixed(1);\n\n return (\n \n {/* Horizontal lines */}\n \n {/* Left numbers */}\n {isLeftMarks && (marksDelta !== 0 ? true : i === 3) && (\n \n {leftMarkValue}\n \n )}\n \n );\n })}\n \n );\n};\n\nexport default HorizontalLinesAndNumbers;\n","import { Fragment, useState, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport { getPitchColorByName, getPitchСlassColorByName } from 'utils';\nimport cl from './ArsenalGraph.module.scss';\nimport BottomMarks from './BottomMarks';\n// import Dots from './Dots';\nimport HorizontalLinesAndNumbers from './HorizontalLinesAndNumbers';\nimport MobileScrollingWrapper from '../MobileScrollingWrapper/MobileScrollingWrapper';\n\nconst PARAMS = {\n HORIZONTAL_GRID_LINES_NUMBER: 5,\n HORIZONTAL_GRID_LINES_WIDTH: 1120,\n HORIZONTAL_GRID_LINES_LEFT: 55,\n HORIZONTAL_GRID_LINES_TOP: 65,\n GRAPH_LINES_HEIGHT: 322,\n LEFT_PADDING: 12,\n TOP_PADDING: 30\n};\n\nconst HoveringLines = ({ PARAMS, leftMarks, yScaleMultiplier }) => {\n const { leftValues, summary, availablePitchTypes } = leftMarks;\n const leftValuesDelta = leftValues[leftValues.length - 1] - leftValues[0];\n const minValue = +leftValues[0];\n const totalColumns = Object.keys(summary).length;\n const columnStepX = PARAMS.HORIZONTAL_GRID_LINES_WIDTH / (totalColumns + 1);\n const columnStartX = PARAMS.HORIZONTAL_GRID_LINES_LEFT + columnStepX;\n const rowsStartY = PARAMS.HORIZONTAL_GRID_LINES_TOP + PARAMS.GRAPH_LINES_HEIGHT;\n const defaultTotalValues = availablePitchTypes.reduce((sum, type) => {\n sum[type] = [];\n return sum;\n }, {});\n\n const totalValues = availablePitchTypes.reduce((sum, type) => {\n const values = Object.values(summary).map(obj => obj[type]);\n sum[type] = values;\n return sum;\n }, defaultTotalValues);\n return (\n <>\n {Object.entries(totalValues).map(([type, values], i) => {\n const startPointX = columnStartX;\n const startPointY =\n leftValuesDelta !== 0\n ? rowsStartY - (values[0] - minValue) * yScaleMultiplier\n : PARAMS.HORIZONTAL_GRID_LINES_TOP + (PARAMS.GRAPH_LINES_HEIGHT / 5) * 2;\n\n const pathDest = values.reduce((pathSum, value, j, arr) => {\n if (j === 0) return pathSum;\n\n pathSum += !value\n ? ''\n : `${!arr[j - 1] ? 'M' : 'L'}${columnStartX + columnStepX * j},${\n leftValuesDelta !== 0\n ? rowsStartY - (value - minValue) * yScaleMultiplier\n : PARAMS.HORIZONTAL_GRID_LINES_TOP + (PARAMS.GRAPH_LINES_HEIGHT / 5) * 2\n }`;\n return pathSum;\n }, `M${startPointX},${startPointY}`);\n\n const pathClasses = classNames(cl.hoveringLine, cl[`hoveringLine${i + 1}`]);\n return (\n \n \n {values.map((value, j) => {\n if (value) {\n return (\n \n \n \n );\n }\n\n return ;\n })}\n \n );\n })}\n \n );\n};\nconst Lines = ({\n PARAMS,\n leftMarks,\n pitchTypes,\n pitchClasses,\n yScaleMultiplier,\n currentTimeInterval = null,\n classColor\n}) => {\n const { leftValues, summary, availablePitchTypes } = leftMarks;\n const leftValuesDelta = leftValues[leftValues.length - 1] - leftValues[0];\n const minValue = +leftValues[0];\n const totalColumns = Object.keys(summary).length;\n const columnStepX = PARAMS.HORIZONTAL_GRID_LINES_WIDTH / (totalColumns + 1);\n const columnStartX = PARAMS.HORIZONTAL_GRID_LINES_LEFT + columnStepX;\n const rowsStartY = PARAMS.HORIZONTAL_GRID_LINES_TOP + PARAMS.GRAPH_LINES_HEIGHT;\n const defaultTotalValues = availablePitchTypes.reduce((sum, type) => {\n sum[type] = [];\n return sum;\n }, {});\n\n const totalValues = availablePitchTypes.reduce((sum, type) => {\n const values = Object.values(summary).map(obj => obj[type]);\n sum[type] = values;\n return sum;\n }, defaultTotalValues);\n\n return (\n <>\n {Object.entries(totalValues).map(([type, values], i) => {\n const startPointX = columnStartX;\n const startPointY =\n leftValuesDelta !== 0\n ? rowsStartY - (values[0] - minValue) * yScaleMultiplier\n : PARAMS.HORIZONTAL_GRID_LINES_TOP + (PARAMS.GRAPH_LINES_HEIGHT / 5) * 2;\n\n const pathDest = values.reduce((pathSum, value, j, arr) => {\n if (j === 0) return pathSum;\n\n pathSum += !value\n ? ''\n : `${!arr[j - 1] ? 'M' : 'L'}${columnStartX + columnStepX * j},${\n leftValuesDelta !== 0\n ? rowsStartY - (value - minValue) * yScaleMultiplier\n : PARAMS.HORIZONTAL_GRID_LINES_TOP + (PARAMS.GRAPH_LINES_HEIGHT / 5) * 2\n }`;\n return pathSum;\n }, `M${startPointX},${startPointY}`);\n\n const pathClasses = classNames(cl.graphPath, cl[`graphPath${i + 1}`]);\n const graphNumberClasses = classNames(cl.graphNumber, cl[`graphNumber${i + 1}`]);\n\n const isPath = values.some(value => value !== 0);\n return (\n \n {isPath && (\n \n )}\n {values.map((value, j) => {\n if (value) {\n const valueText =\n currentTimeInterval !== 'Game' ? +(value * 100).toFixed(0) / 100 : Math.round(value);\n return (\n \n \n \n {valueText}\n \n \n );\n }\n\n return ;\n })}\n \n );\n })}\n \n );\n};\n\nconst ArsenalGraph = ({\n filteredData,\n currentTimeInterval,\n currentPitchTypes,\n pitchTypes = [],\n pitchClasses = [],\n title,\n graphType = 'Pitches',\n classColor = false\n}) => {\n const [isGraphVisible, setGraphVisibility] = useState(false);\n\n const graphRef = useRef();\n\n useEffect(() => {\n let options = {\n root: null,\n rootMargin: '200px 0px',\n threshold: 0\n };\n\n let observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n setGraphVisibility(true);\n } else {\n setGraphVisibility(false);\n }\n });\n }, options);\n observer.observe(graphRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n function getBottomMarks() {\n if (currentTimeInterval === 'Season') {\n const datesSet = filteredData.reduce((sum, { pitch_info: pitchInfo }) => {\n sum.add(pitchInfo.date.slice(0, 4));\n\n return sum;\n }, new Set());\n\n return Array.from(datesSet).sort((a, b) => (a > b ? 1 : -1));\n }\n if (currentTimeInterval === 'Month') {\n const datesSet = filteredData.reduce((sum, { pitch_info: pitchInfo }) => {\n sum.add(pitchInfo.date.slice(0, 7));\n\n return sum;\n }, new Set());\n\n return Array.from(datesSet).sort((a, b) => (a > b ? 1 : -1));\n }\n if (currentTimeInterval === 'Game') {\n const datesSet = filteredData.reduce((sum, { pitch_info: pitchInfo }) => {\n sum.add(pitchInfo.date);\n\n return sum;\n }, new Set());\n\n return Array.from(datesSet).sort((a, b) => (a > b ? 1 : -1));\n }\n\n return [];\n }\n function getLeftMarks(bottomMarks) {\n const graphsWithAllPitches = [\n 'Pitches',\n 'InZone',\n 'OutZone',\n 'Inside',\n 'Outside',\n 'Low',\n 'High',\n 'HardByType',\n 'SwingByType',\n 'TakeByType',\n 'SoftByType'\n ];\n\n const availablePitchTypes = currentPitchTypes\n .filter(\n pitchType =>\n pitchType.checked && (pitchType.type === -1 ? graphsWithAllPitches.includes(graphType) : 1)\n )\n .map(pitchType => pitchType.type);\n const filteredByAvailablePitchTypes = filteredData.filter(({ pitch_info: pitchInfo }) =>\n availablePitchTypes.includes(pitchInfo.pitch_type)\n );\n const minValueCorrection = 0,\n maxValueCorrection = 0;\n\n function getDefaultSumBy() {\n return bottomMarks.reduce((sum, timeInterval) => {\n sum[timeInterval] = {};\n return sum;\n }, {});\n }\n function getFilteredPitches(cur, sliceTo) {\n return filteredByAvailablePitchTypes.filter(\n ({ pitch_info }) => pitch_info.date.slice(0, sliceTo) === cur\n );\n }\n function getPitchesByTime(cur, sliceTo) {\n return filteredData.filter(({ pitch_info }) => pitch_info.date.slice(0, sliceTo) === cur);\n }\n function getDefaultSumByType() {\n return availablePitchTypes.reduce((sum, type) => {\n sum[type] = 0;\n return sum;\n }, {});\n }\n function getSumByType(pitches, defaultSumByType) {\n return pitches.reduce((sum, { pitch_info }) => {\n const { pitch_type: pitchType } = pitch_info;\n\n sum[pitchType]++;\n availablePitchTypes.includes(-1) && sum['-1']++;\n\n return sum;\n }, defaultSumByType);\n }\n function getParamByType(param, pitches) {\n return pitches\n .filter(({ result }) => result[param])\n .reduce((sum, { pitch_info }) => {\n const { pitch_type: pitchType } = pitch_info;\n\n sum[pitchType]++;\n availablePitchTypes.includes(-1) && sum['-1']++;\n\n return sum;\n }, getDefaultSumByType());\n }\n function convertToRel(total, pitches) {\n return Object.entries(total).reduce((sum, entry) => {\n sum[entry[0]] = (entry[1] * 100) / pitches.length;\n\n return sum;\n }, {});\n }\n\n function getPercentInZoneByType(pitches) {\n const sumInZoneByType = pitches\n .filter(({ zone }) => zone['in zone'])\n .reduce((sum, { pitch_info }) => {\n const { pitch_type: pitchType } = pitch_info;\n\n sum[pitchType]++;\n availablePitchTypes.includes(-1) && sum['-1']++;\n\n return sum;\n }, getDefaultSumByType());\n\n return convertToRel(sumInZoneByType, pitches);\n }\n function getPercentOutZoneByType(pitches) {\n const sumOutZoneByType = pitches\n .filter(({ zone }) => zone['out zone'])\n .reduce((sum, { pitch_info }) => {\n const { pitch_type: pitchType } = pitch_info;\n\n sum[pitchType]++;\n availablePitchTypes.includes(-1) && sum['-1']++;\n\n return sum;\n }, getDefaultSumByType());\n\n return convertToRel(sumOutZoneByType, pitches);\n }\n\n function getPercentInsideByType(pitches) {\n const sumInsideByType = pitches\n .filter(({ zone }) => zone.inside)\n .reduce((sum, { pitch_info }) => {\n const { pitch_type: pitchType } = pitch_info;\n\n sum[pitchType]++;\n availablePitchTypes.includes(-1) && sum['-1']++;\n\n return sum;\n }, getDefaultSumByType());\n\n return convertToRel(sumInsideByType, pitches);\n }\n\n function getPercentOutsideByType(pitches) {\n const sumOutsideByType = pitches\n .filter(({ zone }) => zone.outside)\n .reduce((sum, { pitch_info }) => {\n const { pitch_type: pitchType } = pitch_info;\n\n sum[pitchType]++;\n availablePitchTypes.includes(-1) && sum['-1']++;\n\n return sum;\n }, getDefaultSumByType());\n\n return convertToRel(sumOutsideByType, pitches);\n }\n\n function getPercentLowByType(pitches) {\n const sumLowByType = pitches\n .filter(({ zone }) => zone.low)\n .reduce((sum, { pitch_info }) => {\n const { pitch_type: pitchType } = pitch_info;\n\n sum[pitchType]++;\n availablePitchTypes.includes(-1) && sum['-1']++;\n\n return sum;\n }, getDefaultSumByType());\n\n return convertToRel(sumLowByType, pitches);\n }\n\n function getPercentHighByType(pitches) {\n const sumHighByType = pitches\n .filter(({ zone }) => zone.high)\n .reduce((sum, { pitch_info }) => {\n const { pitch_type: pitchType } = pitch_info;\n\n sum[pitchType]++;\n availablePitchTypes.includes(-1) && sum['-1']++;\n\n return sum;\n }, getDefaultSumByType());\n\n return convertToRel(sumHighByType, pitches);\n }\n\n function getRelSumByType(allPitchesByTime, sumByType) {\n const relByType = {};\n\n for (let key in sumByType) {\n relByType[key] = (sumByType[key] * 100) / allPitchesByTime.length;\n }\n\n return relByType;\n }\n function getSpeedByType(pitches, sumByType) {\n const speedsSumByType = pitches.reduce((sum, { pitch_info }) => {\n const { pitch_type: pitchType, speed } = pitch_info;\n\n if (sum[pitchType] === undefined) sum[pitchType] = 0;\n\n sum[pitchType] += speed * 2.24;\n\n return sum;\n }, {});\n\n const result = {};\n\n for (let pitchType in speedsSumByType) {\n result[pitchType] = speedsSumByType[pitchType] / sumByType[pitchType];\n }\n\n return result;\n }\n function getSpinByType(pitches, sumByType) {\n const spinSumByType = pitches.reduce((sum, { pitch_info, break: breakValue }) => {\n const { pitch_type: pitchType } = pitch_info;\n const { spin } = breakValue;\n\n if (sum[pitchType] === undefined) sum[pitchType] = 0;\n\n sum[pitchType] += spin;\n\n return sum;\n }, {});\n\n const result = {};\n\n for (let pitchType in spinSumByType) {\n result[pitchType] = spinSumByType[pitchType] / sumByType[pitchType];\n }\n\n return result;\n }\n function getVerticalBreakByType(pitches, sumByType) {\n const verticalBreakSumByType = pitches.reduce((sum, { pitch_info, break: breakValue }) => {\n const { pitch_type: pitchType } = pitch_info;\n const { break_y } = breakValue;\n\n if (sum[pitchType] === undefined) sum[pitchType] = 0;\n\n sum[pitchType] += break_y * 100;\n\n return sum;\n }, {});\n const result = {};\n\n for (let pitchType in verticalBreakSumByType) {\n result[pitchType] = verticalBreakSumByType[pitchType] / sumByType[pitchType];\n }\n\n return result;\n }\n function getHorizontalBreakByType(pitches, sumByType) {\n const horizontalBreakSumByType = pitches.reduce((sum, { pitch_info, break: breakValue }) => {\n const { pitch_type: pitchType } = pitch_info;\n const { break_x } = breakValue;\n\n if (sum[pitchType] === undefined) sum[pitchType] = 0;\n\n sum[pitchType] += break_x * 100;\n\n return sum;\n }, {});\n\n const result = {};\n\n for (let pitchType in horizontalBreakSumByType) {\n result[pitchType] = horizontalBreakSumByType[pitchType] / sumByType[pitchType];\n }\n\n return result;\n }\n function getSumByTimeInterval(sliceTo) {\n const defaultSumByInterval = getDefaultSumBy();\n\n return bottomMarks.reduce((totalSum, interval) => {\n const pitches = getFilteredPitches(interval, sliceTo);\n const allPitchesByTime = getPitchesByTime(interval, sliceTo);\n const defaultSumByType = getDefaultSumByType();\n const sumByType = getSumByType(pitches, defaultSumByType);\n\n const GRAPH_FUNCS = {\n Pitches: sumByType,\n HardByType: getParamByType('base hit & hard hit', pitches),\n SwingByType: getParamByType('swing', pitches),\n TakeByType: getParamByType('take', pitches),\n SoftByType: getParamByType('soft hit', pitches),\n PitchesRel: getRelSumByType(allPitchesByTime, sumByType),\n Speed: getSpeedByType(pitches, sumByType),\n Spin: getSpinByType(pitches, sumByType),\n VerticalBreak: getVerticalBreakByType(pitches, sumByType),\n HorizontalBreak: getHorizontalBreakByType(pitches, sumByType),\n InZone: getPercentInZoneByType(pitches),\n OutZone: getPercentOutZoneByType(pitches),\n Inside: getPercentInsideByType(pitches),\n Outside: getPercentOutsideByType(pitches),\n Low: getPercentLowByType(pitches),\n High: getPercentHighByType(pitches)\n };\n\n const total = GRAPH_FUNCS[graphType];\n\n totalSum[interval] = total;\n return totalSum;\n }, defaultSumByInterval);\n }\n function getMinMaxValues(sumByTimeInterval) {\n return Object.values(sumByTimeInterval).reduce((sum, interval) => {\n const intervalValues = Object.values(interval);\n const intervalValuesWOZero = intervalValues.filter(value => value !== 0);\n const maxValue = Math.max(...intervalValuesWOZero);\n const minValue = Math.min(...intervalValuesWOZero);\n\n if (sum.max < maxValue || sum.max === undefined) sum.max = maxValue;\n if (sum.min > minValue || sum.min === undefined) sum.min = minValue;\n\n return sum;\n }, {});\n }\n function getCorrectedMinMaxValues(minMaxValues) {\n return { min: minMaxValues.min + minValueCorrection, max: minMaxValues.max + maxValueCorrection };\n }\n function getValueDelta(correctedMinMaxValues) {\n return (correctedMinMaxValues.max - correctedMinMaxValues.min) / PARAMS.HORIZONTAL_GRID_LINES_NUMBER;\n }\n function getLeftValues(correctedMinMaxValues, valueDelta) {\n const GRAPH_FIXES = {\n Pitches: 0,\n PitchesRel: 2,\n Speed: 2,\n Spin: 0,\n VerticalBreak: 1,\n HorizontalBreak: 1,\n InZone: 0,\n OutZone: 0,\n Inside: 0,\n Outside: 0,\n Low: 0,\n High: 0\n };\n\n const result = [];\n for (let i = 0; i <= PARAMS.HORIZONTAL_GRID_LINES_NUMBER; i++) {\n const value = correctedMinMaxValues.min + valueDelta * i;\n result.push(value.toFixed(GRAPH_FIXES[graphType]));\n // result.push(Math.floor(value));\n }\n\n return result;\n }\n function getGraphSummaryData(sliceTo) {\n const summary = getSumByTimeInterval(sliceTo);\n const minMaxValues = getMinMaxValues(summary);\n const correctedMinMaxValues = getCorrectedMinMaxValues(minMaxValues);\n const valueDelta = getValueDelta(correctedMinMaxValues);\n const leftValues = getLeftValues(correctedMinMaxValues, valueDelta);\n\n return { leftValues, summary, availablePitchTypes };\n }\n\n // Season\n if (currentTimeInterval === 'Season') {\n return getGraphSummaryData(4);\n }\n // Month\n if (currentTimeInterval === 'Month') {\n return getGraphSummaryData(7);\n }\n // Games\n return getGraphSummaryData(10);\n }\n\n const bottomMarks = getBottomMarks();\n const leftMarks = getLeftMarks(bottomMarks);\n\n const { leftValues } = leftMarks;\n const yScaleMultiplier = PARAMS.GRAPH_LINES_HEIGHT / (leftValues[leftValues.length - 1] - leftValues[0]);\n\n PARAMS.HORIZONTAL_GRID_LINES_STEP = PARAMS.GRAPH_LINES_HEIGHT / PARAMS.HORIZONTAL_GRID_LINES_NUMBER;\n PARAMS.ZERO_COORDS = {\n X: PARAMS.HORIZONTAL_GRID_LINES_LEFT,\n Y: PARAMS.HORIZONTAL_GRID_LINES_TOP + PARAMS.GRAPH_LINES_HEIGHT\n };\n\n return (\n \n \n {isGraphVisible && (\n <>\n {' '}\n {/* Main layout rendering */}\n {/* Top-left title */}\n \n {title}\n \n {/* Horizontal center grid line */}\n \n {/* Horizontal lines + left numbers rendering */}\n \n {/* Horizontal marks + numbers*/}\n {/* Marks */}\n \n {/* Graph lines */}\n \n \n \n )}\n \n \n );\n};\n\nexport default ArsenalGraph;\n","import ArsenalGraph from 'components/PlayerStats/ArsenalGraph/ArsenalGraph';\n\nconst ArsenalGraphs = ({ filteredData, currentOption, currentOption2, pitchTypes }) => {\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ArsenalGraphs;\n","import cl from './FilteredGraphs.module.scss';\nimport FilterField from 'components/UI/dropdown/FilterField/FilterField';\nimport GraphsBlock from './GraphsBlock';\nimport PitchesSpeedField from './PitchesSpeedField/PitchesSpeedField';\nimport GraphsHeader from './GraphsHeader/GraphsHeader';\nimport { useState, useMemo, useEffect } from 'react';\nimport { getPitchColorByName, getRndValue } from 'utils';\nimport { useFilterPitcherGroupData } from 'hooks/useFilterGraphsData';\nimport { useSelector } from 'react-redux';\nimport GraphsTimeDynamicBlock from './GraphsTimeDynamicBlock';\nimport PitchesTrajectories from './PitchesTrajectories/PitchesTrajectories';\nimport HitsAnglesGraphs from './HitsAnglesGraphs/HitsAnglesGraphs';\nimport TwinPitchesGraphs from './TwinPitchesGraph/TwinPitchesGraphs';\nimport ArsenalGraphs from './ArsenalGraphs';\nimport classNames from 'classnames';\nimport CrossClose from 'components/UI/buttons/CrossClose/CrossClose';\n\nconst FIELD_NAMES = {\n batter: {\n 'All batters': 'all',\n 'Right handed': 'right handed',\n 'Left handed': 'left handed'\n },\n count: {\n 'Any count': 'all',\n 'Ahead in count': 'ahwad',\n 'Behind in count': 'behind',\n '0-0': '0-0',\n '0-2': '0-2',\n '3-0': '3-0'\n },\n zone: {\n 'Any zone': 'all',\n 'In zone': 'in zone',\n 'Out zone': 'out zone',\n Heart: 'heart',\n Edge: 'edge',\n 'Chase&Waste': 'waste',\n Low: 'low',\n High: 'high',\n Outside: 'outside',\n Inside: 'inside'\n },\n result: {\n 'All pitches': 'all',\n Swing: 'swing',\n Take: 'take'\n },\n swing: {\n 'All swings': 'all',\n Miss: 'miss',\n Contact: 'contact'\n },\n contact: {\n 'All contacts': 'all',\n 'Base hits & Hard hit': 'base hit & hard hit',\n 'Slow hit': 'soft hit',\n Fly: 'fly',\n Line: 'line',\n Grounds: 'gruond'\n }\n};\n\nconst GroupItem = ({ data, groupName, handleFilterClick, currentFilterValues }) => {\n const { name, absValue, absValueTotal, relValue, staticText } = data;\n const isRelValueNumber = typeof relValue === 'number' && !isNaN(relValue);\n\n const dataValue = isRelValueNumber ? `${relValue}%` : isNaN(relValue) ? '-' : relValue;\n return (\n \n );\n};\n\nconst Group = ({\n data,\n groupData,\n currentFilterValues,\n handleFilterClick,\n filteredTeamName,\n filteredPlayerFullName\n}) => {\n const { title, groupName, items } = groupData;\n\n const teamName = currentFilterValues.batter === 'team' ? filteredTeamName : null;\n const playerFullName = currentFilterValues.batter === 'batter' ? filteredPlayerFullName : null;\n\n const filteredData = useFilterPitcherGroupData(\n data,\n currentFilterValues,\n groupName,\n teamName,\n playerFullName\n );\n\n const total =\n groupName === 'swing' || groupName === 'contact'\n ? filteredData\n .map(pitch => pitch.result)\n .filter(group =>\n groupName === 'swing'\n ? group[FIELD_NAMES[groupName]['Miss']] || group[FIELD_NAMES[groupName]['Contact']]\n : group[FIELD_NAMES[groupName]['Base hits & Hard hit']] ||\n group[FIELD_NAMES[groupName]['Slow hit']] ||\n group[FIELD_NAMES[groupName]['Fly']] ||\n group[FIELD_NAMES[groupName]['Line']] ||\n group[FIELD_NAMES[groupName]['Grounds']]\n )\n : filteredData.map(pitch => pitch[groupName]);\n\n const totalLength = total.length;\n\n const modifiedGroupData = items.map(({ name, staticText }) => {\n const paramName = FIELD_NAMES[groupName][name];\n const absValue = paramName !== 'all' ? total.filter(group => group[paramName]).length : totalLength;\n\n return {\n name,\n staticText,\n absValue,\n absValueTotal: totalLength,\n relValue:\n paramName === 'all' ? 100 : totalLength > 0 ? +((absValue * 100) / totalLength).toFixed(1) : 0 ?? '-'\n };\n });\n\n // const leftHandedRelValue = rightHandedRelValue !== '-' ? 100 - rightHandedRelValue : '-';\n\n return (\n
    \n

    {title}

    \n {modifiedGroupData.map((item, i) => (\n \n ))}\n
    \n );\n};\n\nconst TextGroup = ({ setTextGroupFilter, data }) => {\n function getSortedArr(set) {\n return Array.from(set).sort((a, b) => (a > b ? 1 : -1));\n }\n\n const uniqueValues = useMemo(() => {\n const defaultValues = { teams: new Set(), games: new Set(), batters: new Set() };\n const tempData = data.reduce((sum, cur) => {\n const { team_name: teamName, 'batter name': batterName, 'batter surname': batterSurname } = cur.batter;\n const { date } = cur.pitch_info;\n\n sum.teams.add(teamName);\n sum.games.add(`${date.slice(8, 10)}/${date.slice(5, 7)} ${teamName}`);\n sum.batters.add(`${batterName} ${batterSurname}`);\n\n return sum;\n }, defaultValues);\n\n tempData.teams = getSortedArr(tempData.teams);\n tempData.games = getSortedArr(tempData.games);\n tempData.batters = getSortedArr(tempData.batters);\n\n return tempData;\n }, [data]);\n return (\n
    \n
    \n

    Team

    \n {\n setTextGroupFilter(prev => ({ ...prev, team: value }));\n }}\n handleClick={value => {\n setTextGroupFilter(prev => ({ ...prev, team: value }));\n }}\n listValues={uniqueValues.teams}\n isAllOption\n />\n
    \n
    \n

    Game

    \n {\n setTextGroupFilter(prev => ({ ...prev, game: value }));\n }}\n handleClick={value => {\n setTextGroupFilter(prev => ({ ...prev, game: value }));\n }}\n listValues={uniqueValues.games}\n isAllOption\n />\n
    \n
    \n

    Batter

    \n {\n setTextGroupFilter(prev => ({ ...prev, batter: value }));\n }}\n handleClick={value => {\n setTextGroupFilter(prev => ({ ...prev, batter: value }));\n }}\n listValues={uniqueValues.batters}\n isAllOption\n />\n
    \n
    \n );\n};\n\nconst CustomGroup = ({ data, currentFilterValues, handleFilterClick }) => {\n const againstFilteredData =\n data.pitches_all?.filter(\n pitch =>\n (currentFilterValues.count === 'all' ? true : pitch.count[currentFilterValues.count]) &&\n (currentFilterValues.zone === 'all' ? true : pitch.zone[currentFilterValues.zone]) &&\n (currentFilterValues.result === 'all' ? true : pitch.result[currentFilterValues.result]) &&\n (currentFilterValues.swing === 'all' ? true : pitch.result[currentFilterValues.swing]) &&\n (currentFilterValues.contact === 'all' ? true : pitch.result[currentFilterValues.contact])\n ) || [];\n\n const totalBatters = againstFilteredData.reduce((sum, cur) => {\n const existBatterIndex = sum.findIndex(batter => batter.h_id === cur.batter.h_id);\n existBatterIndex === -1 && sum.push(cur.batter);\n\n return sum;\n }, []);\n\n const leftHandedBatters = totalBatters.filter(batter => batter['left handed']);\n const rightHandedBattersLength = totalBatters.length - leftHandedBatters.length;\n\n const rightHandedRelValue =\n totalBatters.length > 0 ? +((rightHandedBattersLength * 100) / totalBatters.length).toFixed(1) : 0 ?? '-';\n const leftHandedRelValue =\n totalBatters.length > 0 ? +((leftHandedBatters.length * 100) / totalBatters.length).toFixed(1) : 0 ?? '-';\n\n const customGroupData = {\n title: 'Against who',\n items: [\n {\n name: 'All batters',\n absValue: totalBatters.length,\n absValueTotal: totalBatters.length,\n relValue: 100,\n staticText: 'players'\n },\n {\n name: 'Right handed',\n absValue: rightHandedBattersLength,\n absValueTotal: totalBatters.length,\n relValue: rightHandedRelValue,\n staticText: 'players'\n },\n {\n name: 'Left handed',\n absValue: leftHandedBatters.length,\n absValueTotal: totalBatters.length,\n relValue: leftHandedRelValue,\n staticText: 'players'\n }\n ]\n };\n\n const { title, items } = customGroupData;\n return (\n
    \n

    {title}

    \n {items.map((item, i) => (\n \n ))}\n
    \n );\n};\n\nconst LeftColumnOptions = ({\n pitchesData = {},\n data = {},\n handleFilterClick,\n currentFilterValues,\n filteredTeamName,\n filteredPlayerFullName,\n handleTeamNameChange,\n handlePlayerNameChange,\n setTextGroupFilter,\n isDatasetFilterVisible,\n setDatasetFilterVisible\n}) => {\n const groupsArr = [\n {\n title: 'Count',\n groupName: 'count',\n\n items: [\n {\n name: 'Any count',\n staticText: 'pitches'\n },\n { name: 'Ahead in count', staticText: 'pitches' },\n { name: 'Behind in count', staticText: 'pitches' },\n { name: '0-0', staticText: 'pitches' },\n { name: '0-2', staticText: 'pitches' },\n { name: '3-0', staticText: 'pitches' }\n ]\n },\n {\n title: 'Zone',\n groupName: 'zone',\n items: [\n { name: 'Any zone', staticText: 'pitches' },\n { name: 'In zone', staticText: 'pitches' },\n { name: 'Out zone', staticText: 'pitches' },\n { name: 'Heart', staticText: 'pitches' },\n { name: 'Edge', staticText: 'pitches' },\n { name: 'Chase&Waste', staticText: 'pitches' },\n { name: 'Low', staticText: 'pitches' },\n { name: 'High', staticText: 'pitches' },\n { name: 'Outside', staticText: 'pitches' },\n { name: 'Inside', staticText: 'pitches' }\n ]\n },\n {\n title: 'Result',\n groupName: 'result',\n items: [\n { name: 'All pitches', staticText: 'pitches' },\n { name: 'Swing', staticText: 'pitches' },\n { name: 'Take', staticText: 'pitches' }\n ]\n },\n {\n title: ' ',\n groupName: 'swing',\n items: [\n { name: 'All swings', staticText: 'swings' },\n { name: 'Miss', staticText: 'swings' },\n { name: 'Contact', staticText: 'swings' }\n ]\n },\n {\n title: ' ',\n groupName: 'contact',\n items: [\n { name: 'All contacts', staticText: 'contacts' },\n { name: 'Base hits & Hard hit', staticText: 'contacts' },\n { name: 'Slow hit', staticText: 'contacts' },\n { name: 'Fly', staticText: 'contacts' },\n { name: 'Line', staticText: 'contacts' },\n { name: 'Grounds', staticText: 'contacts' }\n ]\n }\n ];\n\n const handleCrossClick = () => {\n setDatasetFilterVisible(false);\n };\n\n const outerWrapperClasses = classNames(cl.leftColumnOuterWrapper, {\n [cl.visible]: isDatasetFilterVisible\n });\n return (\n
    \n
    \n

    \n Dataset filter{' '}\n \n

    \n
    \n \n\n \n {groupsArr.map((group, i) => (\n \n ))}\n
    \n
    \n
    \n );\n};\n\nconst RightColumnGraphs = ({\n currentFilterValues,\n filteredTeamName,\n filteredPlayerFullName,\n data,\n setDatasetFilterVisible\n}) => {\n const { preview } = data;\n const { pitch_types: pitchTypes } = preview;\n\n const { name: playerName, surname: playerSurname } = useSelector(\n state => state.playerStats.playerStatsData\n );\n\n const isMobile = useSelector(s => s.shared.isMobile);\n\n const teamName = currentFilterValues.batter === 'team' ? filteredTeamName : null;\n const playerFullName = currentFilterValues.batter === 'batter' ? filteredPlayerFullName : null;\n const filteredData = useFilterPitcherGroupData(data, currentFilterValues, teamName, playerFullName);\n\n // Count and speed values\n const relValuesData = filteredData.reduce((sum, pitch) => {\n const { speed, pitch_type, pitchGraphCoords } = pitch.pitch_info;\n const pitchType = pitchTypes[pitch_type];\n\n if (sum[pitchType] !== undefined) {\n sum[pitchType].count += 1;\n sum[pitchType].speeds.push(speed * 2.24);\n sum[pitchType].pitchGraphCoords.push({ ...pitchGraphCoords, color: getPitchColorByName(pitchType) });\n\n return sum;\n }\n\n sum[pitchType] = {\n count: 1,\n speeds: [speed * 2.24],\n pitchGraphCoords: [{ ...pitchGraphCoords, color: getPitchColorByName(pitchType) }]\n };\n\n return sum;\n }, {});\n\n //! Delete after testing\n // const arsenalAddedData = JSON.parse(JSON.stringify(filteredData));\n\n // for (let i = 0; i < 1500; i++) {\n // let month = getRndValue(6, 10);\n // month = month < 10 ? `0${month}` : month;\n // let day = getRndValue(5, 6);\n // day = day < 10 ? `0${day}` : day;\n // const year = getRndValue(2019, 2023);\n\n // const date = `${year}-${month}-${day}`;\n\n // const pitch_type = getRndValue(0, pitchTypes.length - 1);\n // const speed = getRndValue(11, 14);\n // const spin = getRndValue(200, 2000);\n // const break_y = getRndValue(1200, 2900) / -1000;\n // const break_x = (getRndValue(0, 1000) - 500) / 1000;\n // const inZone = getRndValue(0, 1);\n // const outZone = 1 - inZone;\n // const inside = getRndValue(0, 1);\n // const outside = 1 - inside;\n // const low = getRndValue(0, 1);\n // const high = 1 - low;\n\n // const newPitch = {\n // pitch_info: { pitch_type, date, speed },\n // break: { spin, break_y, break_x },\n // zone: { 'in zone': inZone, 'out zone': outZone, inside, outside, low, high }\n // };\n\n // arsenalAddedData.push(newPitch);\n // }\n\n // const arsenalRelValuesData = arsenalAddedData.reduce((sum, pitch) => {\n // const { speed, pitch_type, pitchGraphCoords } = pitch.pitch_info;\n // const pitchType = pitchTypes[pitch_type];\n\n // if (sum[pitchType] !== undefined) {\n // sum[pitchType].count += 1;\n // sum[pitchType].speeds.push(speed * 2.23741);\n // sum[pitchType].pitchGraphCoords.push({ ...pitchGraphCoords, color: getPitchColorByName(pitchType) });\n\n // return sum;\n // }\n\n // sum[pitchType] = {\n // count: 1,\n // speeds: [speed],\n // pitchGraphCoords: [{ ...pitchGraphCoords, color: getPitchColorByName(pitchType) }]\n // };\n\n // return sum;\n // }, {});\n\n // ! delete after testing\n\n // let twinFilteredData = JSON.parse(JSON.stringify(filteredData));\n\n // twinFilteredData = twinFilteredData.map(pitch =>\n // pitch.coordinates.zone_y === 0\n // ? {\n // ...pitch,\n // coordinates: { zone_x: getRndValue(-200, 200) / 1000, zone_y: getRndValue(520, 930) / 1000 }\n // }\n // : pitch\n // );\n\n // for (let i = 0; i < 100; i++) {\n // const pitch = {\n // pitch_info: { pitch_type: 1 },\n // coordinates: { zone_x: getRndValue(-200, 200) / 1000, zone_y: getRndValue(520, 930) / 1000 },\n // result: {\n // swing: 0,\n // take: 1,\n // miss: 0,\n // contact: 0,\n // 'base hit & hard hit': 0,\n // 'soft hit': 0,\n // fly: 0,\n // line: 0,\n // gruond: 0\n // },\n // zone: {\n // 'in zone': 0,\n // 'out zone': 1,\n // heart: 0,\n // edge: 0,\n // waste: 1,\n // low: 1,\n // high: 0,\n // outside: 0,\n // inside: 0\n // }\n // };\n\n // twinFilteredData.push(pitch);\n // }\n\n // const twinData = isFakeTwinBalls ? twinFilteredData : filteredData;\n // const twinData = filteredData;\n\n // const twinFakeBallsHandler = () => setFakeTwinBalls(prev => !prev);\n // !\n\n const handleMobileDatasetFilterClick = () => {\n setDatasetFilterVisible(true);\n };\n\n return (\n
    \n \n {(currentOption, setCurrentOption) => (\n <>\n \n \n \n )}\n \n \n {(currentOption, setCurrentOption) => (\n <>\n \n \n \n )}\n \n \n {(\n currentOption,\n setCurrentOption,\n currentOption2,\n setCurrentOption2,\n currentOption3,\n setCurrentOption3\n ) => (\n <>\n \n \n \n )}\n \n \n {(currentOption, setCurrentOption) => (\n <>\n \n \n \n )}\n \n \n {(currentOption, setCurrentOption) => (\n <>\n {/* */}\n \n \n )}\n \n
    \n );\n};\n\nconst FilteredGraphs = ({ pitchesData }) => {\n const [currentFilterValues, setCurrentFilterValues] = useState({\n batter: 'all',\n count: 'all',\n zone: 'all',\n result: 'all',\n swing: 'all',\n contact: 'all'\n });\n const [filteredTeamName, setFilteredTeamName] = useState('');\n const [filteredPlayerFullName, setFilteredPlayerFullName] = useState('');\n\n const [textGroupFilter, setTextGroupFilter] = useState({ team: '', game: '', batter: '' });\n\n const [isDatasetFilterVisible, setDatasetFilterVisible] = useState(false);\n\n\tuseEffect(() => {\n if (isDatasetFilterVisible) {\n document.body.style.overflow = 'hidden';\n document.body.style.touchAction = 'none';\n return;\n }\n\t\t\n\t\tdocument.body.style = '';\n }, [isDatasetFilterVisible]);\n\n const filteredData = useMemo(() => {\n function checkFieldIdentity(comparedFields, fieldFilter, exactComparing = true) {\n if (fieldFilter === '') return true;\n\n const filterArr = fieldFilter.split(' ');\n\n return filterArr.reduce((sum, word) => {\n if (\n !exactComparing &&\n !comparedFields.some(\n field => String(field).slice(0, word.length).toLowerCase() === String(word).toLowerCase()\n )\n ) {\n sum = false;\n }\n\n if (\n exactComparing &&\n !comparedFields.some(field => String(field).toLowerCase() === String(word).toLowerCase())\n ) {\n sum = false;\n }\n\n return sum;\n }, true);\n }\n\n function gameDataCheck(gameFilter, { date }, { team_name: teamName }) {\n if (gameFilter === '') return true;\n\n const filteredWords = gameFilter.split(' ');\n\n return filteredWords.reduce((result, word) => {\n if (result === false) return result;\n\n const regex = /([0-3][0-9]\\/[0-1][0-9])/;\n const matchedRegex = word.match(regex);\n if (matchedRegex) {\n const day = matchedRegex[0].slice(0, 2);\n const month = matchedRegex[0].slice(3, 5);\n\n const dateDay = date.slice(8, 10);\n const dateMonth = date.slice(5, 7);\n\n if (day !== dateDay || month !== dateMonth) return false;\n return true;\n }\n\n if (word === '') return result;\n\n return teamName.toLowerCase() === word.toLowerCase();\n }, true);\n }\n\n const { pitches_all: pitchesAll } = pitchesData;\n\n const newPitchesAll = pitchesAll.filter(({ batter, pitch_info: pitchInfo }) => {\n const { team: teamFilter, game: gameFilter, batter: batterFilter } = textGroupFilter;\n\n return (\n checkFieldIdentity([batter.team_name], teamFilter) &&\n gameDataCheck(gameFilter, pitchInfo, batter) &&\n checkFieldIdentity([batter['batter name'], batter['batter surname']], batterFilter)\n );\n });\n\n return { preview: pitchesData.preview, pitches_all: newPitchesAll };\n }, [textGroupFilter, pitchesData]);\n\n function handleFilterClick(groupName, value) {\n setCurrentFilterValues(prev => ({ ...prev, [groupName]: value }));\n }\n\n const handleTeamNameChange = name => {\n setFilteredTeamName(name);\n };\n const handlePlayerNameChange = name => {\n setFilteredPlayerFullName(name);\n };\n\n return (\n
    \n \n \n
    \n );\n};\n\nexport default FilteredGraphs;\n","import React from 'react';\nimport cl from './PitcherContentGraphs.module.scss';\nimport Banner from './Banner/Banner';\nimport FilteredGraphs from './FilteredGraphs/FilteredGraphs';\n\nconst PitcherContentGraphs = ({ pitchesData }) => {\n const isFilteredGraphs = !!pitchesData;\n\t\n return (\n
    \n \n {isFilteredGraphs && }\n
    \n );\n};\n\nexport default PitcherContentGraphs;\n","import Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport SortArrows from 'components/UI/icons/SortArrows/SortArrows';\nimport SortField from 'components/UI/sortField/SortField';\nimport React, { Fragment } from 'react';\nimport { useSelector } from 'react-redux';\n\nconst ContentBattingTableHeader = ({\n cl,\n playerYears,\n currentLeague,\n getSortedTableOptions,\n handleTableOptionClick,\n sortField,\n sortDirection,\n handleFieldClick,\n fieldsInfo,\n\tsetSortDirection\n}) => {\n const tableType = useSelector(state => state.playerStats.tableType);\n\n const getHeaderCells = () => {\n return (\n <>\n {fieldsInfo.map((field, i) => (\n \n {field.headerWrapped ? (\n
    \n \n {field.childField || field.name}\n \n
    \n ) : (\n \n {field.childField || field.name}\n \n )}\n
    \n ))}\n \n );\n };\n\n\tconst handleGameHeaderClick = () => {\n\t\tsetSortDirection(prev => prev === 'asc' ? 'desc' : 'asc')\n\t}\n return (\n
    \n {playerYears === 'All years' &&
    Years
    }\n {currentLeague.id === -1 &&
    League
    }\n {currentLeague.id !== -1 && (\n
    \n Game\n
    \n \n
    \n
    \n )}\n
    \n Team\n
    \n {getSortedTableOptions().length > 1 ? (\n \n ) : getSortedTableOptions().length === 1 ? (\n tableType\n ) : (\n ''\n )}\n
    \n
    \n {currentLeague.id === -1 && (\n \n G\n \n )}\n {getHeaderCells()}\n
    \n );\n};\n\nexport default ContentBattingTableHeader;\n","import ActiveBodyCell from 'components/UI/ActiveBodyCell/ActiveBodyCell';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { getShortName } from 'utils';\n\nconst FIELDS_OBJ = {\n G: 'batting',\n AB: 'batting',\n H: 'batting',\n '2B': 'batting',\n '3B': 'batting',\n HR: 'batting',\n RBI: 'batting',\n GDP: 'batting',\n BB: 'batting',\n IBB: 'batting',\n HP: 'batting',\n SH: 'batting',\n SF: 'batting',\n SO: 'batting',\n TB: 'batting',\n AVG: 'batting',\n SLG: 'batting',\n OBP: 'batting',\n OPS: 'batting',\n CH: 'fielding',\n PO: 'fielding',\n A: 'fielding',\n E: 'fielding',\n DP: 'fielding',\n FLD: 'fielding',\n R: 'batting',\n SB: 'running',\n CS: 'running',\n SB_pr: 'running',\n LOB: 'running'\n};\n\nconst ContentBattingTableBody = ({\n cl,\n currentLeague,\n playerYears,\n filteredLeague,\n filteredLeagues,\n sortField,\n sortDirection,\n handleLeagueClick,\n MONTHS,\n\tfieldsInfo\n}) => {\n const currentTeam = useSelector(state => state.playerStats.playerCurrentTeam);\n const playerStatsData = useSelector(state => state.playerStats.playerStatsData);\n\n const filteredLeagueGamesSummary =\n filteredLeague &&\n (!Array.isArray(filteredLeague)\n ? filteredLeague.batting.games_batting.reduce((sum, game, i) => {\n const sumGame = {\n ...game,\n ...filteredLeague.fielding.games_fielding[i],\n ...filteredLeague.running.games_running[i],\n team_name: filteredLeague.name\n };\n sum.push(sumGame);\n return sum;\n }, [])\n : filteredLeague\n .filter(team => team.batting || team.running || team.fielding)\n .reduce((totalSum, team) => {\n const teamGamesArr = team.batting.games_batting.reduce((sum, game, i) => {\n const sumGame = {\n ...game,\n ...team.fielding.games_fielding[i],\n ...team.running.games_running[i],\n team_name: team.name\n };\n sum.push(sumGame);\n return sum;\n }, []);\n\n return totalSum.concat(teamGamesArr);\n }, []));\n\n const sortedLeagueGames =\n filteredLeague &&\n filteredLeagueGamesSummary\n .slice()\n .sort((a, b) =>\n a.date > b.date ? (sortDirection === 'asc' ? 1 : -1) : sortDirection === 'asc' ? -1 : 1\n // a[sortField] > b[sortField] ? (sortDirection === 'asc' ? 1 : -1) : sortDirection === 'asc' ? -1 : 1\n );\n\n let sortedLeagues = [];\n let allTeamGames = [];\n if (currentTeam !== 'All teams') {\n sortedLeagues = filteredLeagues.slice().sort((a, b) => {\n const teamA = a.teams.find(team => team.name === currentTeam);\n const teamB = b.teams.find(team => team.name === currentTeam);\n\n const fieldTypeA =\n sortField !== 'G'\n ? FIELDS_OBJ[sortField]\n : teamA.batting.G > 0\n ? 'batting'\n : teamA.fielding.G > 0\n ? 'fielding'\n : 'running';\n const fieldTypeB =\n sortField !== 'G'\n ? FIELDS_OBJ[sortField]\n : teamB.batting.G > 0\n ? 'batting'\n : teamB.fielding.G > 0\n ? 'fielding'\n : 'running';\n\n return teamA[fieldTypeA][sortField] > teamB[fieldTypeB][sortField]\n ? sortDirection === 'asc'\n ? 1\n : -1\n : sortDirection === 'asc'\n ? -1\n : 1;\n });\n }\n\n if (currentTeam === 'All teams') {\n allTeamGames = filteredLeagues.reduce((totalGames, league) => {\n league.teams.forEach(team =>\n totalGames.push({\n title: league.title,\n year: league.year,\n game: team,\n team_name: team.name,\n id: league.id,\n teams: league.teams\n })\n );\n\n return totalGames;\n }, []);\n\n allTeamGames = allTeamGames.filter(\n row => row.game.batting || row.game.fielding || row.game.running || row.game.pitching\n );\n\n allTeamGames.sort((a, b) => {\n const fieldTypeA =\n sortField !== 'G'\n ? FIELDS_OBJ[sortField]\n : a.game.batting.G > 0\n ? 'batting'\n : a.game.fielding.G > 0\n ? 'fielding'\n : 'running';\n const fieldTypeB =\n sortField !== 'G'\n ? FIELDS_OBJ[sortField]\n : b.game.batting.G > 0\n ? 'batting'\n : b.game.fielding.G > 0\n ? 'fielding'\n : 'running';\n\n return a.game[fieldTypeA][sortField] > b.game[fieldTypeB][sortField]\n ? sortDirection === 'asc'\n ? 1\n : -1\n : sortDirection === 'asc'\n ? -1\n : 1;\n });\n }\n\n const leagueStyles = [cl.league];\n playerYears === 'All years' && leagueStyles.push(cl.noCursor);\n\n const yearsAllLeagueTeamTotals =\n currentLeague.id === -1 &&\n currentTeam !== 'All teams' &&\n (currentTeam !== undefined && playerStatsData.teams.find(team => team.name === currentTeam)\n ? playerYears === 'All years'\n ? playerStatsData.teams.find(team => team.name === currentTeam).stats\n : playerStatsData.teams.find(team => team.name === currentTeam).annual_stats[playerYears]\n : null);\n\n const yearsAllLeagueAllTeamTotals =\n currentLeague.id === -1 && currentTeam === 'All teams' && playerYears === 'All years'\n ? playerStatsData.total\n : playerStatsData.total_annual[playerYears];\n\n const selectedLeague = playerStatsData.leagues.find(league => league.id === currentLeague.id);\n\n const getAllLeaguesBodyCells = row => {\n return (\n <>\n {fieldsInfo.map((field, i) => (\n \n {field.name}\n \n ))}\n \n );\n };\n\n const getSelectedLeagueBodyCells = row => {\n return (\n <>\n {fieldsInfo.map((field, i) => (\n \n {field.name}\n \n ))}\n \n );\n };\n\n return (\n
      \n {currentLeague.id === -1 ? (\n // All leagues\n <>\n {currentTeam !== 'All teams' ? (\n <>\n {sortedLeagues.map((row, index) => {\n const team = row.teams.find(team => team.name === currentTeam);\n const gRow =\n team.batting.G > 0 ? team.batting : team.fielding?.G > 0 ? team.fielding : team.running;\n return (\n
    • \n {playerYears === 'All years' &&
      {row.year}
      }\n
      \n {row.title}\n
      \n
      {getShortName(team.name, 20)}
      \n \n G\n \n {getAllLeaguesBodyCells(team)}\n
    • \n );\n })}\n {yearsAllLeagueTeamTotals && (\n
    • \n {playerYears === 'All years' &&
      }\n
      TOTALS
      \n
      \n \n G\n \n {getAllLeaguesBodyCells(yearsAllLeagueTeamTotals)}\n
    • \n )}\n \n ) : (\n <>\n {allTeamGames\n .filter(row => row.game.batting || row.game.fielding || row.game.running || row.game.pitching)\n .map((row, i) => {\n const gRow =\n row.game.batting.G > 0\n ? row.game.batting\n : row.game.fielding?.G > 0\n ? row.game.fielding\n : row.game.running;\n return (\n
    • \n {playerYears === 'All years' &&
      {row.year}
      }\n
      \n {row.title}\n
      \n
      {getShortName(row.team_name, 20)}
      \n \n G\n \n\t\t\t\t\t\t\t\t\t\t\t{getAllLeaguesBodyCells(row.game)}\n
    • \n );\n })}\n {yearsAllLeagueAllTeamTotals && (\n
    • \n {playerYears === 'All years' &&
      }\n
      TOTALS
      \n
      \n \n G\n \n\t\t\t\t\t\t\t\t\t{getAllLeaguesBodyCells(yearsAllLeagueAllTeamTotals)}\n
    • \n )}\n \n )}\n \n ) : (\n // Selected league\n <>\n {sortedLeagueGames.map((row, index) => (\n
    • \n
      \n {row.date.slice(8, 10)} {MONTHS[+row.date.slice(5, 7) - 1]},{' '}\n \n {getShortName(row.home_team.name, 20)} - {getShortName(row.visit_team.name, 20)}\n \n
      \n
      {getShortName(row.team_name, 20)}
      \n\t\t\t\t\t\t\t{getSelectedLeagueBodyCells(row)}\n
    • \n ))}\n\n
    • \n
      TOTALS
      \n
      \n\t\t\t\t\t\t{getAllLeaguesBodyCells(currentTeam === 'All teams' ? selectedLeague.total : filteredLeague)}\n
    • \n \n )}\n
    \n );\n};\n\nexport default ContentBattingTableBody;\n","import React, { useState, useEffect } from 'react';\nimport cl from './ContentBattingTable.module.scss';\nimport { useSelector } from 'react-redux';\nimport ContentBattingTableHeader from './ContentBattingTableHeader';\nimport ContentBattingTableBody from './ContentBattingTableBody';\n\nconst fieldsInfo = [\n { name: 'AB', type: 'batting', fixed: null, addedClass: cl.wide },\n { name: 'R', type: 'batting', fixed: null, addedClass: cl.tall },\n { name: 'H', type: 'batting', fixed: null, addedClass: cl.tall },\n { name: '2B', type: 'batting', fixed: null, addedClass: cl.tall },\n { name: '3B', type: 'batting', fixed: null, addedClass: cl.tall },\n { name: 'HR', type: 'batting', fixed: null, addedClass: cl.tall },\n { name: 'RBI', type: 'batting', fixed: null, addedClass: null },\n { name: 'GDP', type: 'batting', fixed: null, addedClass: cl.wide },\n { name: 'BB', type: 'batting', fixed: null, addedClass: null },\n { name: 'IBB', type: 'batting', fixed: null, addedClass: null },\n { name: 'HP', type: 'batting', fixed: null, addedClass: cl.tall },\n { name: 'SH', type: 'batting', fixed: null, addedClass: cl.tall },\n { name: 'SF', type: 'batting', fixed: null, addedClass: cl.tall },\n { name: 'SO', type: 'batting', fixed: null, addedClass: cl.tall },\n { name: 'TB', type: 'batting', fixed: null, addedClass: cl.wide },\n { name: 'AVG', type: 'batting', fixed: 3, addedClass: cl.wider },\n { name: 'SLG', type: 'batting', fixed: 3, addedClass: cl.wider },\n { name: 'OBP', type: 'batting', fixed: 3, addedClass: cl.wider },\n { name: 'OPS', type: 'batting', fixed: 3, addedClass: cl.wider },\n { name: 'SB', type: 'running', fixed: null, addedClass: cl.tall, headerWrapped: true },\n { name: 'CS', type: 'running', fixed: null, addedClass: cl.tall },\n { name: 'SB_pr', type: 'running', fixed: null, addedClass: cl.wider, childField: '%SB' },\n { name: 'LOB', type: 'running', fixed: null, addedClass: null },\n { name: 'CH', type: 'fielding', fixed: null, addedClass: cl.wide, headerWrapped: true },\n { name: 'PO', type: 'fielding', fixed: null, addedClass: null, headerWrapped: true },\n { name: 'A', type: 'fielding', fixed: null, addedClass: null },\n { name: 'E', type: 'fielding', fixed: null, addedClass: cl.tall },\n { name: 'DP', type: 'fielding', fixed: null, addedClass: cl.tall },\n { name: 'FLD', type: 'fielding', fixed: 3, addedClass: cl.wider, childField: 'FLD%' }\n];\n\nconst ContentBattingTable = ({\n filteredLeagues = [],\n filteredLeague,\n playerYears,\n MONTHS,\n handleLeagueClick,\n getSortedTableOptions,\n handleTableOptionClick\n}) => {\n const [sortField, setSortField] = useState('G');\n const [sortDirection, setSortDirection] = useState('asc');\n\n const currentLeague = useSelector(state => state.games.currentLeague);\n\n useEffect(() => {\n currentLeague.id !== -1 && sortField === 'G' && setSortField('AB');\n\n // eslint-disable-next-line\n }, [currentLeague.id]);\n\n const handleFieldClick = field => () => {\n sortField !== field ? setSortField(field) : setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc');\n };\n\n return (\n
    \n
    \n \n \n
    \n
    \n );\n};\n\nexport default ContentBattingTable;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './ContentPitchingTable.module.scss';\nimport ActiveBodyCell from 'components/UI/ActiveBodyCell/ActiveBodyCell';\nimport { getShortName } from 'utils';\nimport { Link } from 'react-router-dom';\n\nconst ContentPitchingTableBody = ({\n filteredLeagues = [],\n filteredLeague,\n playerYears,\n currentLeague,\n sortField,\n sortDirection,\n MONTHS,\n handleLeagueClick,\n fieldsInfo\n}) => {\n const currentTeam = useSelector(state => state.playerStats.playerCurrentTeam);\n const playerStatsData = useSelector(state => state.playerStats.playerStatsData);\n\n const filteredLeagueGamesSummary =\n filteredLeague &&\n (!Array.isArray(filteredLeague)\n ? filteredLeague.pitching?.games_pitching.reduce((sum, game, i) => {\n const sumGame = {\n ...game,\n team_name: filteredLeague.name\n };\n sum.push(sumGame);\n return sum;\n }, []) || []\n : filteredLeague.reduce((totalSum, team) => {\n const teamGamesArr = team.pitching.games_pitching.reduce((sum, game, i) => {\n const sumGame = {\n ...game,\n team_name: team.name\n };\n sum.push(sumGame);\n return sum;\n }, []);\n\n return totalSum.concat(teamGamesArr);\n }, []));\n\n const sortedLeagueGames =\n filteredLeague &&\n filteredLeagueGamesSummary.slice().sort((a, b) =>\n a.date > b.date\n ? // Number(a[sortField]) > Number(b[sortField])\n sortDirection === 'asc'\n ? 1\n : -1\n : sortDirection === 'asc'\n ? -1\n : 1\n );\n\n let sortedLeagues = [];\n let allTeamGames = [];\n if (currentTeam !== 'All teams') {\n sortedLeagues = filteredLeagues\n .filter(row => row.teams.find(team => team.name === currentTeam).pitching)\n .slice()\n .sort((a, b) =>\n Number(a.teams.find(team => team.name === currentTeam).pitching[sortField]) >\n Number(b.teams.find(team => team.name === currentTeam).pitching[sortField])\n ? sortDirection === 'asc'\n ? 1\n : -1\n : sortDirection === 'asc'\n ? -1\n : 1\n );\n }\n\n if (currentTeam === 'All teams') {\n allTeamGames = filteredLeagues.reduce((totalGames, league) => {\n league.teams.forEach(team =>\n totalGames.push({\n title: league.title,\n year: league.year,\n game: team,\n team_name: team.name,\n id: league.id,\n teams: league.teams\n })\n );\n\n return totalGames;\n }, []);\n\n allTeamGames = allTeamGames.filter(row => row.game.pitching);\n\n allTeamGames.sort((a, b) =>\n Number(a.game.pitching[sortField]) > Number(b.game.pitching[sortField])\n ? sortDirection === 'asc'\n ? 1\n : -1\n : sortDirection === 'asc'\n ? -1\n : 1\n );\n }\n\n const leagueStyles = [cl.league];\n playerYears === 'All years' && leagueStyles.push(cl.noCursor);\n\n const yearsAllLeagueTeamTotals =\n currentLeague.id === -1 &&\n currentTeam !== 'All teams' &&\n (currentTeam !== undefined && playerStatsData.teams.find(team => team.name === currentTeam)\n ? playerYears === 'All years'\n ? playerStatsData.teams.find(team => team.name === currentTeam).stats\n : playerStatsData.teams.find(team => team.name === currentTeam).annual_stats[playerYears]\n : null);\n\n const yearsAllLeagueAllTeamTotals =\n currentLeague.id === -1 && currentTeam === 'All teams' && playerYears === 'All years'\n ? playerStatsData.total\n : playerStatsData.total_annual[playerYears];\n\n const selectedLeague = playerStatsData.leagues.find(league => league.id === currentLeague.id);\n\n const getAllLeaguesBodyCells = row => {\n return (\n <>\n {fieldsInfo.map((field, i) => (\n \n {field.name}\n \n ))}\n \n );\n };\n\n const getSelectedLeagueBodyCells = row => {\n return (\n <>\n {fieldsInfo.map((field, i) => (\n \n {field.name}\n \n ))}\n \n );\n };\n return (\n
      \n {currentLeague.id === -1 ? (\n //All leagues\n <>\n {currentTeam !== 'All teams' ? (\n <>\n {sortedLeagues.map((row, index) => {\n const team = row.teams.find(team => team.name === currentTeam);\n return team.pitching ? (\n
    • \n {playerYears === 'All years' &&
      {row.year}
      }\n
      \n {row.title}\n
      \n
      {getShortName(team.name, 20)}
      \n {currentLeague.id === -1 && (\n \n G\n \n )}\n {getAllLeaguesBodyCells(team)}\n
    • \n ) : (\n <>\n );\n })}\n {yearsAllLeagueTeamTotals && (\n
    • \n {playerYears === 'All years' &&
      }\n
      TOTALS
      \n
      \n {currentLeague.id === -1 && (\n \n G\n \n )}\n {getAllLeaguesBodyCells(yearsAllLeagueTeamTotals)}\n
    • \n )}\n \n ) : (\n <>\n {allTeamGames.map((row, i) => {\n return row.game.pitching ? (\n
    • \n {playerYears === 'All years' &&
      {row.year}
      }\n
      \n {row.title}\n
      \n
      {getShortName(row.team_name, 20)}
      \n {currentLeague.id === -1 && (\n \n G\n \n )}\n {getAllLeaguesBodyCells(row.game)}\n
    • \n ) : (\n <>\n );\n })}\n {yearsAllLeagueAllTeamTotals && (\n
    • \n {playerYears === 'All years' &&
      }\n
      TOTALS
      \n
      \n {currentLeague.id === -1 && (\n \n G\n \n )}\n {getAllLeaguesBodyCells(yearsAllLeagueAllTeamTotals)}\n
    • \n )}\n \n )}\n \n ) : (\n //Selected league\n <>\n {sortedLeagueGames.map((row, index) => (\n
    • \n
      \n {row.date.slice(8, 10)} {MONTHS[+row.date.slice(5, 7) - 1]},\n \n  {getShortName(row.home_team.name, 20)} - {getShortName(row.visit_team.name, 20)}\n \n
      \n
      {getShortName(row.team_name, 20)}
      \n {getSelectedLeagueBodyCells(row)}\n
    • \n ))}\n
    • \n
      TOTALS
      \n
      \n {getAllLeaguesBodyCells(currentTeam === 'All teams' ? selectedLeague.total : filteredLeague)}\n
    • \n \n )}\n
    \n );\n};\n\nexport default ContentPitchingTableBody;\n","import React from 'react';\nimport cl from './ContentPitchingTable.module.scss';\nimport SortField from 'components/UI/sortField/SortField';\nimport Dropdown from 'components/UI/dropdown/GamesDropdown/Dropdown';\nimport { useSelector } from 'react-redux';\nimport SortArrows from 'components/UI/icons/SortArrows/SortArrows';\n\nconst ContentPitchingTableHeader = ({\n playerYears,\n currentLeague,\n sortField,\n sortDirection,\n handleFieldClick,\n getSortedTableOptions,\n handleTableOptionClick,\n fieldsInfo,\n\tsetSortDirection\n}) => {\n const tableType = useSelector(state => state.playerStats.tableType);\n\n const getHeaderCells = () => {\n return (\n <>\n {fieldsInfo.map((field, i) => (\n \n {field.name}\n \n ))}\n \n );\n };\n\n\tconst handleGameHeaderClick = () => {\n\t\tsetSortDirection(prev => prev === 'asc' ? 'desc' : 'asc')\n\t}\n return (\n
    \n {playerYears === 'All years' &&
    Years
    }\n {currentLeague.id === -1 &&
    League
    }\n {currentLeague.id !== -1 && (\n
    \n Game\n
    \n \n
    \n
    \n )}\n
    \n Team\n
    \n {getSortedTableOptions().length > 1 ? (\n \n ) : getSortedTableOptions().length === 1 ? (\n tableType\n ) : (\n ''\n )}\n
    \n
    \n {currentLeague.id === -1 && (\n \n G\n \n )}\n {getHeaderCells()}\n
    \n );\n};\n\nexport default ContentPitchingTableHeader;\n","import React, { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './ContentPitchingTable.module.scss';\nimport ContentPitchingTableBody from './ContentPitchingTableBody';\nimport ContentPitchingTableHeader from './ContentPitchingTableHeader';\n\nconst fieldsInfo = [\n\t{ name: 'GS', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'W', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'L', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'CG', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'SV', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'IP', type: 'pitching', fixed: null, addedClass: cl.wide2_4 },\n\t{ name: 'PA', type: 'pitching', fixed: null, addedClass: cl.wide },\n\t{ name: 'R', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'ER', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'H', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: '2B', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: '3B', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'HR', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'BB', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'IBB', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'HP', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'SH', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'SF', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'SO', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'WP', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'BK', type: 'pitching', fixed: null, addedClass: null },\n\t{ name: 'ERA', type: 'pitching', fixed: 3, addedClass: cl.wide3 },\n\t{ name: 'NP', type: 'pitching', fixed: null, addedClass: cl.wide2_2 },\n\t{ name: 'NS', type: 'pitching', fixed: null, addedClass: cl.wide2_2 },\n\t{ name: 'NB', type: 'pitching', fixed: null, addedClass: cl.wide2_2 }\n];\n\nconst ContentPitchingTable = ({\n filteredLeagues = [],\n filteredLeague,\n playerYears,\n MONTHS,\n handleLeagueClick,\n getSortedTableOptions,\n handleTableOptionClick\n}) => {\n const [sortField, setSortField] = useState('G');\n const [sortDirection, setSortDirection] = useState('asc');\n\n const currentLeague = useSelector(state => state.games.currentLeague);\n\n\tuseEffect(() => {\n currentLeague.id !== -1 && sortField === 'G' && setSortField('GS');\n\n // eslint-disable-next-line\n }, [currentLeague.id]);\n\n const handleFieldClick = field => () => {\n sortField !== field ? setSortField(field) : setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc');\n };\n return (\n
    \n
    \n \n \n
    \n
    \n );\n};\n\nexport default ContentPitchingTable;\n","import React, { forwardRef } from 'react';\nimport SortField from 'components/UI/sortField/SortField';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setSortField } from 'redux/playerStatsReducer';\nimport SortArrows from 'components/UI/icons/SortArrows/SortArrows';\n\nconst ContentMobileTableHeader = (\n { cl, playerYears, currentLeague, isScrollable, sortField, sortDirection, fieldsInfo, setSortDirection },\n ref\n) => {\n const tableMode = useSelector(state => state.playerStats.tableType);\n const dispatch = useDispatch();\n\n const getTableHeaders = (sortField, sortDirection, handleFieldClick, arrowStyles = null) => (\n <>\n {currentLeague.id === -1 && (tableMode === 'Batting' || tableMode === 'Pitching') && (\n \n G\n \n )}\n {fieldsInfo\n .filter(field => field.type === tableMode.toLowerCase())\n .map((field, i) => (\n \n {field.childField || field.name}\n \n ))}\n \n );\n\n const handleFieldClick = field => () => {\n sortField[tableMode] !== field\n ? dispatch(setSortField(field))\n : setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc');\n };\n\n let leftHeaderStyles = {\n flex: `0 0 ${currentLeague.id !== -1 ? 190 : playerYears === 'All years' ? 185.5 : 140.5}px`\n };\n !isScrollable && Object.assign(leftHeaderStyles, { borderRight: 'none', boxShadow: 'none' });\n\n const handleGameHeaderClick = () => {\n setSortDirection(prev => (prev === 'asc' ? 'desc' : 'asc'));\n };\n return (\n
    \n
    \n {playerYears === 'All years' &&
    Years
    }\n {currentLeague.id === -1 &&
    League
    }\n {currentLeague.id !== -1 && (\n
    \n Game\n \n \n
    \n
    \n )}\n
    \n
    \n {getTableHeaders(sortField[tableMode], sortDirection, handleFieldClick, {\n top: '.1rem',\n transform: 'translateX(-50%) scale(0.7)'\n })}\n
    \n \n );\n};\n\nexport default forwardRef(ContentMobileTableHeader);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { getShortName } from 'utils';\nimport ActiveBodyCell from 'components/UI/ActiveBodyCell/ActiveBodyCell';\nimport { Link } from 'react-router-dom';\n\nconst ContentMobileTableBody = ({\n cl,\n isScrollable,\n currentLeague,\n currentTeam,\n fieldsInfo,\n filteredLeagues,\n filteredLeague,\n MONTHS,\n handleLeagueClick,\n sortDirection,\n playerYears,\n headerScroll,\n rowScrollRef\n}) => {\n const tableMode = useSelector(state => state.playerStats.tableType);\n const playerStatsData = useSelector(state => state.playerStats.playerStatsData);\n const sortField = useSelector(state => state.playerStats.sortField);\n\n const getTableRows = (row, sortField) => (\n <>\n {currentLeague.id === -1 && (tableMode === 'Batting' || tableMode === 'Pitching') && (\n \n G\n \n )}\n {fieldsInfo\n .filter(field => field.type === tableMode.toLowerCase())\n .map((field, i) => (\n \n {field.name}\n \n ))}\n \n );\n\n const filteredLeagueGamesSummary =\n filteredLeague &&\n (!Array.isArray(filteredLeague)\n ? filteredLeague[tableMode.toLowerCase()][`games_${tableMode.toLowerCase()}`].filter(\n game => game.game_id\n )\n : filteredLeague\n .filter(row => row[tableMode.toLowerCase()])\n .reduce((totalSum, team) => {\n team[tableMode.toLowerCase()][`games_${tableMode.toLowerCase()}`].forEach(game =>\n totalSum.push(game)\n );\n\n return totalSum;\n }, []));\n\n const sortedLeagueGames =\n filteredLeague &&\n filteredLeagueGamesSummary.slice().sort((a, b) =>\n a.date > b.date\n ? // a[sortField[tableMode]] > b[sortField[tableMode]]\n sortDirection === 'asc'\n ? 1\n : -1\n : sortDirection === 'asc'\n ? -1\n : 1\n );\n\n let sortedLeagues = [];\n let allTeamGames = [];\n\n if (currentTeam !== 'All teams') {\n sortedLeagues = filteredLeagues.slice().sort((a, b) => {\n const teamA = a.teams.find(team => team.name === currentTeam);\n const teamB = b.teams.find(team => team.name === currentTeam);\n\n let tableTypeA = 'pitching';\n let tableTypeB = 'pitching';\n\n if (tableMode !== 'Pitching') {\n tableTypeA =\n sortField[tableMode] !== 'G'\n ? tableMode.toLowerCase()\n : teamA.batting.G > 0\n ? 'batting'\n : teamA.fielding.G > 0\n ? 'fielding'\n : 'running';\n tableTypeB =\n sortField[tableMode] !== 'G'\n ? tableMode.toLowerCase()\n : teamB.batting.G > 0\n ? 'batting'\n : teamB.fielding.G > 0\n ? 'fielding'\n : 'running';\n }\n\n return Number(teamA[tableTypeA][sortField[tableMode]]) > Number(teamB[tableTypeB][sortField[tableMode]])\n ? sortDirection === 'asc'\n ? 1\n : -1\n : sortDirection === 'asc'\n ? -1\n : 1;\n });\n }\n\n if (currentTeam === 'All teams') {\n allTeamGames = filteredLeagues.reduce((totalGames, league) => {\n league.teams\n .filter(team => team[tableMode.toLowerCase()])\n .forEach(team =>\n totalGames.push({\n title: league.title,\n year: league.year,\n game: team,\n team_name: team.name,\n id: league.id,\n teams: league.teams\n })\n );\n\n return totalGames;\n }, []);\n\n allTeamGames.sort((a, b) => {\n let tableTypeA = 'pitching';\n let tableTypeB = 'pitching';\n\n if (tableMode !== 'Pitching') {\n tableTypeA =\n sortField[tableMode] !== 'G'\n ? tableMode.toLowerCase()\n : a.game.batting.G > 0\n ? 'batting'\n : a.game.fielding.G > 0\n ? 'fielding'\n : 'running';\n tableTypeB =\n sortField[tableMode] !== 'G'\n ? tableMode.toLowerCase()\n : b.game.batting.G > 0\n ? 'batting'\n : b.game.fielding.G > 0\n ? 'fielding'\n : 'running';\n }\n\n return Number(a.game[tableTypeA][sortField[tableMode]]) >\n Number(b.game[tableTypeB][sortField[tableMode]])\n ? sortDirection === 'asc'\n ? 1\n : -1\n : sortDirection === 'asc'\n ? -1\n : 1;\n });\n }\n\n const yearsAllLeagueTeamTotals =\n currentLeague.id === -1 &&\n currentTeam !== 'All teams' &&\n (currentTeam !== undefined && playerStatsData.teams.find(team => team.name === currentTeam)\n ? playerYears === 'All years'\n ? playerStatsData.teams.find(team => team.name === currentTeam).stats\n : playerStatsData.teams.find(team => team.name === currentTeam).annual_stats[playerYears]\n : null);\n\n const yearsAllLeagueAllTeamTotals =\n currentLeague.id === -1 && currentTeam === 'All teams' && playerYears === 'All years'\n ? playerStatsData.total\n : playerStatsData.total_annual[playerYears];\n\n const selectedLeague = playerStatsData.leagues.find(league => league.id === currentLeague.id);\n return (\n
    \n
    \n {currentLeague.id === -1 ? ( //All leagues\n <>\n {currentTeam !== 'All teams' ? (\n <>\n {sortedLeagues.map((row, index) => (\n
    \n {playerYears === 'All years' &&
    {row.year}
    }\n
    \n {row.title}\n
    \n
    \n ))}\n {sortedLeagues.length > 0 && (\n
    \n {playerYears === 'All years' &&
    }\n
    TOTALS
    \n
    \n )}\n \n ) : (\n <>\n {allTeamGames.map((row, index) => (\n
    \n {playerYears === 'All years' &&
    {row.year}
    }\n
    \n {row.title}\n
    \n
    \n ))}\n {allTeamGames.length > 0 && (\n
    \n {playerYears === 'All years' &&
    }\n
    TOTALS
    \n
    \n )}\n \n )}\n \n ) : (\n //Selected league\n <>\n {sortedLeagueGames.map((row, index) => (\n
    \n
    \n
    \n {row.date.slice(8, 10)} {MONTHS[+row.date.slice(5, 7) - 1]},\n
    \n \n {getShortName(row.home_team.name, 14)} - {getShortName(row.visit_team.name, 14)}\n \n
    \n
    \n ))}\n {sortedLeagueGames.length > 0 && (\n
    \n
    \n
    \n
    TOTALS
    \n
    \n
    \n )}\n \n )}\n
    \n (headerScroll.current.scrollLeft = e.target.scrollLeft)}\n ref={rowScrollRef}>\n {currentLeague.id === -1 ? ( //All leagues\n <>\n {currentTeam !== 'All teams' ? (\n <>\n {sortedLeagues.map((row, index) => {\n const team = row.teams.find(team => team.name === currentTeam);\n\n const gameRow =\n tableMode === 'Pitching'\n ? team.pitching\n : tableMode !== 'Batting'\n ? team[tableMode.toLowerCase()]\n : {\n ...team.batting,\n G:\n team.batting.G > 0\n ? team.batting.G\n : team.fielding.G > 0\n ? team.fielding.G\n : team.running.G\n };\n return (\n \n {getTableRows(gameRow, sortField[tableMode])}\n
    \n );\n })}\n {sortedLeagues.length > 0 && (\n \n {getTableRows(\n yearsAllLeagueTeamTotals[tableMode.toLowerCase()],\n\n sortField[tableMode]\n )}\n \n )}\n \n ) : (\n <>\n {allTeamGames.map((row, index) => {\n const gameRow =\n tableMode === 'Pitching'\n ? row.game.pitching\n : tableMode !== 'Batting'\n ? row.game[tableMode.toLowerCase()]\n : {\n ...row.game.batting,\n G:\n row.game.batting.G > 0\n ? row.game.batting.G\n : row.game.fielding.G > 0\n ? row.game.fielding.G\n : row.game.running.G\n };\n\n return (\n \n {getTableRows(gameRow, sortField[tableMode])}\n \n );\n })}\n {allTeamGames.length > 0 && (\n \n {getTableRows(\n yearsAllLeagueAllTeamTotals[tableMode.toLowerCase()],\n\n sortField[tableMode]\n )}\n \n )}\n \n )}\n \n ) : (\n //Selected league\n <>\n {sortedLeagueGames.map((row, index) => (\n \n {getTableRows(row, sortField[tableMode])}\n \n ))}\n {sortedLeagueGames.length > 0 && (\n \n {getTableRows(\n currentTeam === 'All teams'\n ? selectedLeague.total[tableMode.toLowerCase()]\n : filteredLeague[tableMode.toLowerCase()],\n\n sortField[tableMode]\n )}\n \n )}\n \n )}\n \n \n );\n};\n\nexport default ContentMobileTableBody;\n","import React, { useState, useRef, useEffect } from 'react';\nimport cl from './ContentMobileTable.module.scss';\nimport { useSelector } from 'react-redux';\nimport { useDispatch } from 'react-redux';\nimport { setSortField } from 'redux/playerStatsReducer';\nimport ContentMobileTableHeader from './ContentMobileTableHeader';\nimport ContentMobileTableBody from './ContentMobileTableBody';\n\nconst ContentMobileTable = ({ filteredLeagues, filteredLeague, playerYears, MONTHS, handleLeagueClick }) => {\n const [sortDirection, setSortDirection] = useState('asc');\n const [isScrollable, setIsScrollable] = useState(true);\n\n const currentLeague = useSelector(state => state.games.currentLeague);\n const tableMode = useSelector(state => state.playerStats.tableType);\n const currentTeam = useSelector(state => state.playerStats.playerCurrentTeam);\n const sortField = useSelector(state => state.playerStats.sortField);\n const mobileOrientation = useSelector(state => state.shared.mobileOrientation);\n\n const dispatch = useDispatch();\n\n const headerScroll = useRef(null);\n const rowScrollRef = useRef();\n\n useEffect(() => {\n if (rowScrollRef.current === null) return;\n\n setTimeout(\n () => setIsScrollable(rowScrollRef.current?.clientWidth < rowScrollRef.current?.scrollWidth),\n 500\n );\n }, []);\n\n useEffect(() => {\n setIsScrollable(rowScrollRef.current.clientWidth < rowScrollRef.current.scrollWidth);\n\n if (currentLeague.id !== -1 && sortField[tableMode] === 'G') {\n const defaultSortFields = { Batting: 'AB', Fielding: 'CH', Running: 'SB', Pitching: 'GS' };\n dispatch(setSortField(defaultSortFields[tableMode]));\n }\n // eslint-disable-next-line\n }, [tableMode, currentLeague.id]);\n\n useEffect(() => {\n if (rowScrollRef.current === null) return;\n\n setTimeout(() => {\n setIsScrollable(rowScrollRef.current.clientWidth < rowScrollRef.current.scrollWidth);\n }, 150);\n }, [mobileOrientation]);\n\n const fieldsInfo = [\n { name: 'AB', type: 'batting' },\n { name: 'R', type: 'batting' },\n { name: 'H', type: 'batting' },\n { name: '2B', type: 'batting' },\n { name: '3B', type: 'batting' },\n { name: 'HR', type: 'batting' },\n { name: 'RBI', type: 'batting' },\n { name: 'GDP', type: 'batting' },\n { name: 'BB', type: 'batting' },\n { name: 'IBB', type: 'batting' },\n { name: 'HP', type: 'batting' },\n { name: 'SH', type: 'batting' },\n { name: 'SF', type: 'batting' },\n { name: 'SO', type: 'batting' },\n { name: 'TB', type: 'batting' },\n { name: 'AVG', type: 'batting', fixed: 3, addedClass: cl.wider },\n { name: 'SLG', type: 'batting', fixed: 3, addedClass: cl.wider },\n { name: 'OBP', type: 'batting', fixed: 3, addedClass: cl.wider },\n { name: 'OPS', type: 'batting', fixed: 3, addedClass: cl.wider },\n { name: 'SB', type: 'running' },\n { name: 'CS', type: 'running' },\n { name: 'SB_pr', type: 'running', fixed: 3, childField: '%SB' },\n { name: 'LOB', type: 'running' },\n { name: 'CH', type: 'fielding' },\n { name: 'PO', type: 'fielding' },\n { name: 'A', type: 'fielding' },\n { name: 'E', type: 'fielding' },\n { name: 'DP', type: 'fielding' },\n { name: 'FLD', type: 'fielding', fixed: 3, addedClass: cl.wider },\n { name: 'GS', type: 'pitching' },\n { name: 'W', type: 'pitching' },\n { name: 'L', type: 'pitching' },\n { name: 'CG', type: 'pitching' },\n { name: 'SV', type: 'pitching' },\n { name: 'IP', type: 'pitching', fixed: 1 },\n { name: 'PA', type: 'pitching' },\n { name: 'R', type: 'pitching' },\n { name: 'ER', type: 'pitching' },\n { name: 'H', type: 'pitching' },\n { name: '2B', type: 'pitching' },\n { name: '3B', type: 'pitching' },\n { name: 'HR', type: 'pitching' },\n { name: 'BB', type: 'pitching' },\n { name: 'IBB', type: 'pitching' },\n { name: 'HP', type: 'pitching' },\n { name: 'SH', type: 'pitching' },\n { name: 'SF', type: 'pitching' },\n { name: 'SO', type: 'pitching' },\n { name: 'WP', type: 'pitching' },\n { name: 'BK', type: 'pitching' },\n { name: 'ERA', type: 'pitching', fixed: 2, addedClass: cl.wider },\n { name: 'NP', type: 'pitching' },\n { name: 'NS', type: 'pitching' },\n { name: 'NB', type: 'pitching' }\n ];\n\n return (\n
    \n \n \n
    \n );\n};\n\nexport default ContentMobileTable;\n","import React from 'react';\nimport ContentBattingTable from '../ContentBattingTable/ContentBattingTable';\nimport ContentPitchingTable from '../ContentPitchingTable/ContentPitchingTable';\nimport ContentMobileTable from '../ContentMobileTable/ContentMobileTable';\nimport { useSelector } from 'react-redux';\nimport NoDataMessage from 'components/NoDataMessage/NoDataMessage';\n\nconst MONTHS = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];\n\nconst ContentTables = ({\n getSortedTableOptions,\n filteredLeagues,\n filteredLeague,\n handleTableOptionClick,\n playerYears,\n handleLeagueClick\n}) => {\n const isMobile = useSelector(state => state.shared.isMobile);\n const tableType = useSelector(state => state.playerStats.tableType);\n\n const isStatsEmpty = getSortedTableOptions().length === 0;\n\n\t// Rendering\n if (isStatsEmpty) return ;\n\n if (isMobile)\n return (\n \n );\n\n return (\n <>\n {tableType === 'Batting' ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport default ContentTables;\n","import classNames from 'classnames';\nimport cl from '../Banner.module.scss';\nimport { usePlayerStatsAnimationCtx } from 'context/PlayerStatsAnimationContext/PlayerStatsAnimationContext';\n\nconst TotalInfoItem = ({ item, parent }) => {\n const { par1, par2 } = item;\n\n\tconst valueCoef = usePlayerStatsAnimationCtx();\n\n const par1Title = par1 === 'LHP' ? 'Left' : par1;\n const par2Title = par2 === 'RHP' ? 'Right Handed Pitchers' : par2;\n\n const title = `${par1Title} / ${par2Title} (${parent[par1]} / ${parent[par2]})`;\n const value = parent[`${par1}/${par2}`];\n const formattedValue = value !== '–' ? value : '—';\n\n if (par1 === 'LHP') {\n const itemClasses = classNames(cl.groupItem, cl.lhpRhpGroupItem);\n\n\t\tfunction getValues(value, sum) {\n\t\t\tconst formattedValue = Number(((value * 100) / sum).toFixed(1));\n\t\n\t\t\tlet animatedValue = '—';\n\t\n\t\t\tif (formattedValue !== '—') {\n\t\t\t\tanimatedValue =\n\t\t\t\t\tvalueCoef < 1 && formattedValue !== 0 ? (formattedValue * valueCoef).toFixed(1) : formattedValue;\n\t\t\t\tanimatedValue += '%';\n\t\t\t}\n\t\n\t\t\treturn { formattedValue, animatedValue };\n\t\t}\n\n const { formattedValue: valueLeft, animatedValue: animatedValueLeft } = getValues(parent[par1], parent[par1] + parent[par2]);\n const { formattedValue: valueRight } = getValues(parent[par2], parent[par1] + parent[par2]);\n\t\tconst animatedValueRight = valueRight > 0 ? `${Number(((100 - valueLeft) * valueCoef).toFixed(1))}%` : '0%';\n\n return (\n
    \n
    {title}
    \n \n {animatedValueLeft}\n
    \n \n {animatedValueRight}\n \n \n );\n }\n\n return (\n
    \n

    {title}

    \n

    {formattedValue}

    \n
    \n );\n};\n\nconst TotalInfo = ({ data }) => {\n const itemsArr = [\n { par1: 'PA', par2: 'G' },\n { par1: 'Pitches', par2: 'PA' },\n { par1: 'LHP', par2: 'RHP' }\n ];\n return (\n
    \n

    Total info

    \n {itemsArr.map((item, i) => (\n \n ))}\n
    \n );\n};\n\nexport default TotalInfo;\n","import cl from '../Banner.module.scss';\nimport { usePlayerStatsAnimationCtx } from 'context/PlayerStatsAnimationContext/PlayerStatsAnimationContext';\n\nconst PARAM_VOCABULARY = {\n Swing: 'Swings',\n Miss: 'Misses',\n Take: 'Takes',\n Hits: 'Base Hits',\n Fly: 'Flyes',\n Line: 'Lines',\n\tHitsInPlay: 'Hits In Play'\n};\n\nconst CommonGroupItem = ({ item, parent, staticTitle }) => {\n const { par1, par2 } = item;\n\n\tconst valueCoef = usePlayerStatsAnimationCtx();\n\n if (par1 === null && par2 === null)\n return (\n
    \n  \n
    \n );\n\n const modifiedStaticTitle = par1 === 'GO' && par2 === 'FC' ? 'Outs' : staticTitle;\n\n const {\n abs: absValue,\n abs_rel: absRelValue,\n rel: value\n } = (par2 !== null ? parent[`${par1}/${par2}`] : parent[par1]) || {};\n\n let title = par2 !== null ? `${par1} & ${par2}` : par1;\n\n title = PARAM_VOCABULARY[par1] ?? title;\n\n title += ` (${absValue ?? '-'} / ${absRelValue ?? '-'} ${modifiedStaticTitle})`;\n\n const formattedValue = value !== '–' ? value : '—';\n\n let animatedValue = '—';\n\n if (formattedValue !== '—') {\n animatedValue =\n valueCoef < 1 && formattedValue !== 0\n ? (formattedValue * valueCoef).toFixed(1)\n : formattedValue ?? '- ';\n animatedValue += '%';\n }\n\n return (\n \n

    {title}

    \n

    {animatedValue}

    \n \n );\n};\n\nconst CommonGroup = ({ data, param, title, itemsArr, staticTitle }) => (\n
    \n

    {title}

    \n {itemsArr.map((item, i) => (\n \n ))}\n
    \n);\n\nexport default CommonGroup;\n","import cl from '../Banner.module.scss';\nimport classNames from 'classnames';\nimport { usePlayerStatsAnimationCtx } from 'context/PlayerStatsAnimationContext/PlayerStatsAnimationContext';\n\nconst SORT_PRIORITY = {\n '0-0': 1,\n '0-1': 2,\n '1-1': 3,\n '1-2': 4,\n '1-0': 5,\n '2-2': 6,\n '0-2': 7,\n '2-1': 8,\n '3-2': 9,\n '2-0': 10,\n '3-1': 11,\n '3-0': 12\n};\n\nconst CountsDistributionItem = ({ item }) => {\n const [title, { swings, takes }] = item;\n\n const valueCoef = usePlayerStatsAnimationCtx();\n\n function getValues(value, sum) {\n const formattedValue = Number(((value * 100) / sum).toFixed(1));\n\n let animatedValue = '—';\n\n if (formattedValue !== '—') {\n animatedValue =\n valueCoef < 1 && formattedValue !== 0 ? (formattedValue * valueCoef).toFixed(1) : formattedValue;\n animatedValue += '%';\n }\n\n return { formattedValue, animatedValue };\n }\n\n const formattedTitle = `${title} (${swings} / ${takes})`;\n\n const itemClasses = classNames(cl.groupItem, cl.countsGroupItem);\n\n const { formattedValue: valueLeft, animatedValue: animatedValueLeft } = getValues(swings, swings + takes);\n const { formattedValue: valueRight } = getValues(takes, swings + takes);\n const animatedValueRight = valueRight > 0 ? `${Number(((100 - valueLeft) * valueCoef).toFixed(1))}%` : 0;\n return (\n
    \n
    {formattedTitle}
    \n \n {animatedValueLeft}\n
    \n \n {animatedValueRight}\n \n \n );\n};\n\nconst CountsDistribution = ({ data, staticTitle }) => {\n const sortedList = Object.entries(data.CountsDistribution).sort((a, b) =>\n SORT_PRIORITY[a] > SORT_PRIORITY[b] ? -1 : 1\n );\n\n return (\n
    \n

    Swings/Takes by count distribution

    \n {sortedList\n .filter(([_, { swings, takes }]) => swings > 0 || takes > 0)\n .map((item, i) => (\n \n ))}\n
    \n );\n};\n\nexport default CountsDistribution;\n","import TotalInfo from './Groups/TotalInfo';\nimport CommonGroup from './Groups/CommonGroup';\nimport CountsDistribution from './Groups/CountsDistribution';\n\nconst BannerColumns = ({ parentObj }) => {\n const GROUPS_PARAMS = {\n PlateAppearance: [\n { par1: 'SO', par2: null },\n { par1: 'BB', par2: 'HBP' },\n { par1: 'H', par2: null },\n { par1: 'PO', par2: null },\n { par1: 'E', par2: null }\n ],\n OutsDistribution: [\n { par1: 'FO', par2: null },\n { par1: 'GO', par2: null },\n { par1: 'FC', par2: null }\n ],\n PitchesBySwingDistribution: [\n { par1: 'Swing', par2: null },\n { par1: 'Take', par2: null }\n ],\n BatterSwingResult: [\n { par1: 'Misses', par2: null },\n { par1: 'Fouls', par2: null },\n { par1: 'HitsInPlay', par2: null }\n ],\n HitsDistribution: [\n { par1: 'Hits', par2: null },\n { par1: 'Fly', par2: null },\n { par1: 'Line', par2: null },\n { par1: 'Grounds', par2: null },\n { par1: 'Bunts', par2: null }\n ]\n };\n\n return (\n <>\n
    \n \n \n \n
    \n
    \n \n \n \n
    \n
    \n \n
    \n \n );\n};\n\nexport default BannerColumns;\n","import { PlayerYearsContext } from 'context';\nimport React, { useContext, memo } from 'react';\nimport { useSelector } from 'react-redux';\nimport BannerColumns from './BannerColumns';\nimport PlayerStatsAnimationProvider from 'context/PlayerStatsAnimationContext/PlayerStatsAnimationContext';\n\nconst Banner = () => {\n const { playerYears } = useContext(PlayerYearsContext);\n\n const statsData = useSelector(s => s.playerStats.playerStatsData);\n const currentTeam = useSelector(s => s.playerStats.playerCurrentTeam);\n const currentLeague = useSelector(state => state.games.currentLeague);\n\n const { total, total_annual, teams, leagues } = statsData.batting_banner;\n\n const getParentObj = () => {\n if (playerYears === 'All years' && currentTeam === 'All teams') return total;\n if (playerYears === 'All years' && currentTeam !== 'All teams')\n return teams.find(team => team.name === currentTeam);\n if (currentLeague.id === -1 && currentTeam === 'All teams') return total_annual[playerYears];\n if (currentLeague.id === -1 && currentTeam !== 'All teams')\n return teams.find(team => team.name === currentTeam).annual[playerYears];\n\n const curLeague = leagues.find(league => league.id === currentLeague.id);\n return curLeague.teams.find(team => team.name === currentTeam);\n };\n\n const parentObj = getParentObj();\n return parentObj ? (\n \n \n \n ) : (\n <>\n );\n};\n\nexport default memo(Banner);\n","import { useState } from 'react';\nimport cl from './FilteredGraphs.module.scss';\n\nconst GraphsBlock = ({ defaultOption, children, noSelector = false, ...props }) => {\n const [currentOption, setCurrentOption] = useState(defaultOption);\n\n if (noSelector)\n return (\n
    \n {children}\n
    \n );\n\n return (\n
    \n {children(currentOption, setCurrentOption)}\n
    \n );\n};\n\nexport default GraphsBlock;\n","import cl from './GraphsHeader.module.scss';\nimport OptionsToggler from 'components/UI/togglers/OptionsToggler/OptionsToggler';\nimport classNames from 'classnames';\nimport TimeDynamicCheckbox from 'components/UI/checkboxes/TimeDynamicCheckbox/TimeDynamicCheckbox';\nimport UpDownArrow from 'components/UI/buttons/UpDownArrow/UpDownArrow';\nimport ArrowDown from 'components/UI/icons/ArrowDown';\n\nconst GraphsHeader = ({\n optionsArr,\n availableOptions,\n title,\n subTitle,\n handleMobileDatasetFilterClick = null,\n currentOption,\n setCurrentOption,\n currentOption2 = null,\n setCurrentOption2 = null,\n currentOption3 = null,\n setCurrentOption3 = null,\n noSelector = false,\n graphsArrow = false,\n classColor = false,\n addedClass = null,\n ...props\n}) => {\n const optionsTogglerStyles = {\n position: 'absolute',\n right: '.4375rem',\n top: currentOption2 !== null ? '30%' : '50%',\n transform: currentOption2 !== null ? 'translateY(-55%)' : 'translateY(-50%)'\n };\n\n const optionsToggler2Styles = {\n position: 'absolute',\n right: '.4375rem',\n bottom: '30%',\n transform: 'translateY(55%)'\n };\n\n const handleOptionClick = option => () => setCurrentOption(option);\n const handleOption2Click = option => () => {\n setCurrentOption2(prev =>\n prev.map(curOption =>\n curOption.name === option.name ? { ...curOption, checked: !curOption.checked } : curOption\n )\n );\n };\n\n const handleArrowClick = () => {\n setCurrentOption3(prev => (prev === 'opened' ? 'closed' : 'opened'));\n };\n\n const titleClasses = classNames(cl.title, {\n [cl.highTitle]: currentOption2 !== null\n });\n return (\n
    \n

    {title}

    \n {handleMobileDatasetFilterClick && (\n \n )}\n

    {subTitle}

    \n {graphsArrow && (\n \n )}\n {!noSelector && (\n \n )}\n {currentOption2 !== null && (\n \n )}\n
    \n );\n};\n\nexport default GraphsHeader;\n","import { memo, useRef, useState, useEffect } from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport { HSVtoRGB } from 'utils';\nimport { useThreeTextCtx } from 'context/ThreeTextCtx';\n// import ComfortaaFont from 'fonts/Comfortaa_Regular.json';\n\n// const TouchPoints = ({ data3D, coef, curveCount }) => (\n// <>\n// {data3D\n// .slice(0, curveCount)\n// .filter(coords => coords[3] === 1)\n// .map(coord => (\n// \n// \n// \n// \n// ))}\n// \n// );\n\nconst CurvePath = memo(\n ({ hit, coef, setDrawPoints, minMaxDistance, handlePointerOver, handlePointerOut }) => {\n const { data_3d: data3D, distance, angle, 'exit velocity': speed } = hit.hit_info;\n const { game_id: gameId, mom_id: momentId } = hit.pitch_info;\n\n const [pointerOver, setPointerOver] = useState(false);\n\n // const [tubeRadius, setTubeRadius] = useState(3);\n\n const tubeRef = useRef(null);\n // const textRef = useRef(null);\n\n const { Vector3, CatmullRomCurve3, FrontSide } = useThreeTextCtx();\n\n // extend({ TextGeometry });\n\n // useEffect(() => {\n // if (tubeRef.current === null) return;\n\n // document.body.style.cursor = hovered ? 'pointer' : 'auto';\n // }, [hovered]);\n\n const cashedStepTotal = useRef(0);\n\n let stepTotalRef = cashedStepTotal.current;\n useEffect(() => {\n setDrawPoints(false);\n\n stepTotalRef = 0;\n cashedStepTotal.current = 0;\n }, [data3D]);\n\n // useEffect(() => {\n // if (!hovered) {\n // setTubeRadius(3);\n // return;\n // }\n\n // setTubeRadius(prev => prev + 0.1);\n // }, [hovered]);\n\n // useEffect(() => {\n // if (!hovered) {\n // setTubeRadius(3);\n // return;\n // }\n // if (tubeRadius <= 3 || tubeRadius >= 5) return;\n\n // setTubeRadius(prev => prev + 0.1);\n // }, [tubeRadius, hovered]);\n\n const points = data3D.reduce((sum, coord) => {\n const newCoord = new Vector3(coord[0] * coef - 320, coord[2] * coef, coord[1] * -coef + 167);\n\n sum.push(newCoord);\n return sum;\n }, []);\n\n const curveCoords = new CatmullRomCurve3(points);\n\n useFrame(() => {\n // if (textRef.current) {\n // textRef.current.quaternion.copy(camera.quaternion);\n // textRef.current.geometry.center();\n // }\n\n // if (hovered) tubeRef.current\n\n if (stepTotalRef > 30510) return;\n if (stepTotalRef > 30110) {\n setDrawPoints(true);\n cashedStepTotal.current = stepTotalRef;\n return;\n }\n stepTotalRef += 400;\n tubeRef.current.setDrawRange(0, stepTotalRef);\n });\n\n const colorsMin = 0.65;\n const colorsMax = 1;\n const colorsDelta = colorsMax - colorsMin;\n\n const distanceDelta = distance - minMaxDistance.min;\n const distanceRel = distanceDelta / (minMaxDistance.max - minMaxDistance.min);\n\n const resultColorRel = !isNaN(distanceRel) ? colorsMin + colorsDelta * distanceRel : colorsMin;\n\n const meshColor = HSVtoRGB(resultColorRel, 1, 1);\n\n const handleMeshClick = () => {\n window.open(`/game/${gameId}?card=${momentId}&tab=hitting`, '_blank');\n };\n\n // const font = new FontLoader().parse(ComfortaaFont);\n // const textCoords = data3D[Math.floor(data3D.length / 2)];\n\n const distanceText = `Angle: ${String(Math.round(angle))}° Velocity: ${String(Math.round(speed))} mph \nDistance: ${String(Math.round(distance))} m.`;\n return (\n <>\n \n \n \n \n {\n if (cashedStepTotal.current < 30110) return;\n handlePointerOver(distanceText);\n setPointerOver(true);\n }}\n onPointerOut={() => {\n if (cashedStepTotal.current < 30110) return;\n handlePointerOut(distanceText);\n setPointerOver(false);\n }}>\n \n \n \n {/* {hovered && (\n \n \n \n \n )} */}\n \n );\n }\n);\n\nconst Curve = ({ hit, curveCount, minMaxDistance, handlePointerOver, handlePointerOut }) => {\n const [drawPoints, setDrawPoints] = useState(false);\n const coef = 925 / 90;\n\n return (\n <>\n \n {/* {drawPoints && } */}\n \n );\n};\n\nexport default Curve;\n","import { useState, memo } from 'react';\nimport { getRndValue } from 'utils';\nimport Curve from './Curve';\nimport ThreeTextCtx from 'context/ThreeTextCtx';\n\n// import CurveTexture from 'images/blue_ball_curve.jpg';\n// import { TextureLoader } from 'three';\n\nconst Curves = ({ hitsData, handlePointerOver, handlePointerOut }) => {\n const maxLength = hitsData.reduce((sum, hit) => {\n const curLength = hit.hit_info.data_3d.length;\n if (curLength > sum) sum = curLength;\n\n return sum;\n }, 0);\n\n const [curveCount] = useState(maxLength);\n\n const isRenderCurves = curveCount > 1;\n // 240 - 359\n\n const defaultMinMaxDistance = { min: hitsData[0].hit_info.distance, max: hitsData[0].hit_info.distance };\n const minMaxDistance = hitsData.reduce((result, { hit_info: { distance } }) => {\n if (distance < result.min) result.min = distance;\n if (distance > result.max) result.max = distance;\n\n return result;\n }, defaultMinMaxDistance);\n return (\n \n {hitsData.map((hit, i) => {\n const { data_3d: data3D } = hit.hit_info;\n\n const curCurveCount = curveCount > data3D.length ? data3D.length : curveCount;\n\n return (\n \n );\n })}\n \n );\n};\n\nfunction propsComparison(prevProps, nextProps) {\n return JSON.stringify(prevProps) === JSON.stringify(nextProps);\n}\n\nexport default memo(Curves, propsComparison);\n","import { tooltip } from './PitchesTrajectories.module.scss';\n\nconst Tooltip = ({ text }) => {\n return
    {text}
    ;\n};\n\nexport default Tooltip;\n","import classNames from 'classnames';\nimport React, { memo, Suspense, useMemo, useState, useRef, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport cl from './PitchesTrajectories.module.scss';\nimport { Canvas } from '@react-three/fiber';\nimport { FrontSide, TextureLoader } from 'three';\nimport { OrbitControls } from '@react-three/drei';\nimport FieldBg from 'images/field_right.jpg';\nimport Curves from './Curves/Curves';\nimport Tooltip from './Tooltip';\n\nconst OptionsBar = ({ isAutoRotate, handleAutoRotateClick, handleResetClick }) => {\n const rotateBtnClass = classNames({\n [cl.active]: isAutoRotate\n });\n\n return (\n
    \n
    \n \n \n
    \n
    \n );\n};\n\nconst PitchesTrajectories = ({ data }) => {\n const [isAutoRotate, setAutoRotate] = useState(true);\n const [zoomCoef, setZoomCoef] = useState(1);\n const [isGraphVisible, setGraphVisibility] = useState(false);\n const [hovered, setHovered] = useState({ isHovered: false, text: '' });\n\n const graphRef = useRef();\n\n useEffect(() => {\n let options = {\n root: null,\n rootMargin: '300px 0px',\n threshold: 0\n };\n\n let observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n setGraphVisibility(true);\n } else {\n setGraphVisibility(false);\n }\n });\n }, options);\n observer.observe(graphRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const { currentMoment } = useSelector(state => state.game);\n\n const controlsRef = useRef();\n const wrapperRef = useRef();\n const pointerTimeout = useRef(null);\n\n useEffect(() => {\n const xCoef = wrapperRef.current.clientWidth / 568.72;\n const yCoef = wrapperRef.current.clientHeight / 497.81;\n const resultCoef = Math.min(xCoef, yCoef);\n\n setZoomCoef(resultCoef);\n }, []);\n\n const handleResetClick = () => controlsRef.current.reset();\n const handleAutoRotateClick = () => setAutoRotate(prev => !prev);\n\n const textureRef = useMemo(() => new TextureLoader().load(FieldBg), []);\n\n const hitsData = data.filter(({ hit_info }) => hit_info.data_3d !== null);\n const isCurves = hitsData.length > 0;\n\n const handlePointerOverCurve = text => {\n clearTimeout(pointerTimeout.current);\n\n setHovered({ isHovered: true, text });\n\n document.body.style.cursor = 'pointer';\n };\n\n const handlePointerOutCurve = text => {\n clearTimeout(pointerTimeout.current);\n\n pointerTimeout.current = setTimeout(() => {\n setHovered({ isHovered: false, text });\n }, 4000);\n\n document.body.style.cursor = 'auto';\n };\n return (\n
    \n \n {isGraphVisible && (\n \n \n \n \n \n\n {isCurves && (\n \n )}\n\n \n \n\n \n \n )}\n \n\n \n\n {/* Tooltip */}\n {hovered.isHovered && }\n
    \n );\n};\n\nexport default memo(PitchesTrajectories);\n","const StraightLines = () => (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nconst RadialLines = () => (\n <>\n \n \n \n \n \n \n \n \n \n);\n\nconst DegreesTitles = () => (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nconst PitcherImg = () => (\n \n);\n\nconst BgLayout = () => {\n return (\n <>\n \n \n \n \n \n );\n};\n\nexport default BgLayout;\n","import { footerText } from './HitsAnglesGraph.module.scss';\n\nconst Footer = ({\n PARAMS: { GRAPH_WIDTH: graphWidth, GRAPH_HEIGHT: graphHeight },\n angleValues,\n footerField,\n footerUnits\n}) => {\n const minMaxAvgValues = angleValues\n .filter(valueGroup => valueGroup[`min${footerField}`] !== undefined)\n .reduce(\n (sum, valueGroup) => {\n if (sum.min === undefined || valueGroup[`min${footerField}`] < sum.min)\n sum.min = valueGroup[`min${footerField}`];\n if (sum.max === undefined || valueGroup[`max${footerField}`] > sum.max)\n sum.max = valueGroup[`max${footerField}`];\n\n sum.sumValues += valueGroup[`sum${footerField}`];\n sum.sumHits += valueGroup.hitsCount;\n\n return sum;\n },\n { sumValues: 0, sumHits: 0 }\n );\n\n minMaxAvgValues.avg = minMaxAvgValues.sumValues / minMaxAvgValues.sumHits;\n\n // const minValue = `${Math.round(minMaxAvgValues.min * 10) / 10} ${footerUnits}`;\n const avgValue = `${Math.round(minMaxAvgValues.avg * 10) / 10} ${footerUnits}`;\n const maxValue = `${Math.round(minMaxAvgValues.max * 10) / 10} ${footerUnits}`;\n return (\n \n AVG: {avgValue} MAX: {maxValue}\n \n );\n};\n\nexport default Footer;\n","import { degToRad } from 'three/src/math/MathUtils';\nimport BgLayout from './BgLayout';\nimport cl from './HitsAnglesGraph.module.scss';\nimport Footer from './Footer';\n\nconst PARAMS = {\n GRAPH_WIDTH: 307,\n GRAPH_HEIGHT: 450,\n LINE_WIDTH: 179,\n ZERO_X: 98.45,\n ZERO_Y: 230.35,\n RADIALS_NUMBER: 8\n};\n\nconst MainTitle = ({ title }) => (\n \n {title}\n \n);\n\nconst MobileMainTitle = ({ title }) => (\n\t

    {title}

    \n);\n\nconst RadialTitles = ({ minMaxValue, title }) => {\n const { min, max } = minMaxValue;\n\n const minMaxDelta = max - min;\n const valuePerCircle = minMaxDelta / PARAMS.RADIALS_NUMBER;\n\n const titles = [];\n for (let i = 1; i <= PARAMS.RADIALS_NUMBER; i++) {\n titles.push((min + valuePerCircle * i).toFixed(1));\n }\n\n const xCoord = PARAMS.ZERO_X - 4;\n return (\n <>\n {/* Top values */}\n {titles.map((value, i) => {\n const yCoord = PARAMS.ZERO_Y - 20 - i * 22.5;\n const filteredValue = title !== 'Hits by angle, hits' ? value : (value * 10) % 10 ? '' : +value;\n\n return (\n \n {filteredValue}\n \n );\n })}\n {/* Bottom values */}\n {titles.map((value, i) => {\n const yCoord = PARAMS.ZERO_Y + 20 + i * 22.5;\n const filteredValue = title !== 'Hits by angle, hits' ? value : (value * 10) % 10 ? '' : +value;\n\n return (\n \n {filteredValue}\n \n );\n })}\n \n );\n};\n\nconst Segment = ({ angle, dataField, minMaxValue }) => {\n const { min, max } = minMaxValue;\n const { deg } = angle;\n\n const minMaxDelta = max - min;\n const rel = (angle[dataField] - min) / minMaxDelta;\n\n let path = `M${PARAMS.ZERO_X},${PARAMS.ZERO_Y}`;\n\n let secondDotXCoord = PARAMS.LINE_WIDTH * rel * Math.cos(degToRad(deg + 10)) + PARAMS.ZERO_X;\n let secondDotYCoord = PARAMS.ZERO_Y - PARAMS.LINE_WIDTH * rel * Math.sin(degToRad(deg + 10));\n path += `L${secondDotXCoord},${secondDotYCoord}`;\n\n let centerDotXCoord = PARAMS.LINE_WIDTH * rel * 1.005 * Math.cos(degToRad(deg + 5)) + PARAMS.ZERO_X;\n let centerDotYCoord = PARAMS.ZERO_Y - PARAMS.LINE_WIDTH * rel * 1.005 * Math.sin(degToRad(deg + 5));\n\n let thirdDotXCoord = PARAMS.LINE_WIDTH * rel * Math.cos(degToRad(deg)) + PARAMS.ZERO_X;\n let thirdDotYCoord = PARAMS.ZERO_Y - PARAMS.LINE_WIDTH * rel * Math.sin(degToRad(deg));\n\n path += `Q${centerDotXCoord},${centerDotYCoord} ${thirdDotXCoord},${thirdDotYCoord}Z`;\n\n const pathFillColor = `hsla(${169 + 0.41 * rel * 100}, 30%, ${88 - 0.15 * rel * 100}%, 1)`;\n return ;\n};\n\nconst Segments = ({ angleValues, dataField, minMaxValue }) => (\n <>\n {angleValues.map((angle, i) => (\n \n ))}\n \n);\n\nconst HitsAnglesGraph = ({ title, angleValues, dataField, isFooter = true, footerField, footerUnits }) => {\n const minMaxValue = angleValues.reduce(\n (sum, value) => {\n if (value[dataField] > sum.max) sum.max = value[dataField];\n if (value[dataField] < sum.min) sum.min = value[dataField];\n\n return sum;\n },\n { min: 0, max: 0 }\n );\n\n return (\n
    \n\t\t\t\n \n \n\n {/* Title */}\n \n\n {/* Radial Titles */}\n \n\n {/* Segments */}\n \n\n {/* Footer */}\n {isFooter && (\n \n )}\n \n
    \n );\n};\n\nexport default HitsAnglesGraph;\n","import HitsAnglesGraph from './HitsAnglesGraph';\nimport cl from './HitsAnglesGraphs.module.scss';\n\nconst HitsAnglesGraphs = ({ data }) => {\n const notNullAngleData = data.filter(({ hit_info: { angle } }) => angle !== null);\n\n const defaultAnglesValues = [];\n\n for (let i = -90; i <= 80; i += 10) {\n defaultAnglesValues.push({\n deg: i,\n hitsCount: 0,\n sumVelocity: 0,\n avgVelocity: 0,\n sumDistance: 0,\n avgDistance: 0\n });\n }\n\n const angleValues = notNullAngleData.reduce(\n (sum, { hit_info: { angle, distance, 'exit velocity': exitVelocity } }, index) => {\n const resultAngle = Math.floor(angle / 10) * 10;\n const sumIndex = resultAngle / 10 + 9;\n const sumAngleObj = sum[sumIndex];\n\n sumAngleObj.hitsCount++;\n\n sumAngleObj.sumVelocity += exitVelocity;\n\t\t\tif (sumAngleObj.minVelocity === undefined || exitVelocity < sumAngleObj.minVelocity) {\n sumAngleObj.minVelocity = exitVelocity;\n }\n if (sumAngleObj.maxVelocity === undefined || exitVelocity > sumAngleObj.maxVelocity) {\n sumAngleObj.maxVelocity = exitVelocity;\n }\n sumAngleObj.avgVelocity = sumAngleObj.sumVelocity / sumAngleObj.hitsCount;\n\n sumAngleObj.sumDistance += distance;\n\t\t\tif (sumAngleObj.minDistance === undefined || distance < sumAngleObj.minDistance) {\n sumAngleObj.minDistance = distance;\n }\n if (sumAngleObj.maxDistance === undefined || distance > sumAngleObj.maxDistance) {\n sumAngleObj.maxDistance = distance;\n }\n sumAngleObj.avgDistance = sumAngleObj.sumDistance / sumAngleObj.hitsCount;\n\n return sum;\n },\n defaultAnglesValues\n );\n\n return (\n
    \n \n \n \n
    \n );\n};\n\nexport default HitsAnglesGraphs;\n","import { bottomValue } from './FacedGraph.module.scss';\n\nconst BottomValues = ({ minMaxSpeed, PARAMS }) => {\n const valuesDelta = (Math.ceil(minMaxSpeed.max) - Math.floor(minMaxSpeed.min)) / PARAMS.COLS_NUMBER;\n const graphDelta = PARAMS.GRAPH_WIDTH / PARAMS.COLS_NUMBER;\n\n const valuesArr = [];\n for (let i = 0; i <= PARAMS.COLS_NUMBER; i++) {\n valuesArr.push(Math.round((Math.floor(minMaxSpeed.min) + valuesDelta * i) * 10) / 10);\n }\n\n const yCoord = PARAMS.PADDING_TOP + PARAMS.GRAPH_HEIGHT + 20;\n return (\n <>\n {valuesArr.map((value, i) => {\n const xCoord = PARAMS.PADDING_LEFT + i * graphDelta;\n\n return (\n \n {value}\n \n );\n })}\n \n );\n};\n\nexport default BottomValues;\n","import { Fragment } from 'react';\nimport { getPitchСlassPrimaryColorByName } from 'utils';\nimport { footerValue } from './FacedGraph.module.scss';\nimport cl from './FacedGraph.module.scss'\n\nconst Footer = ({ totalClasses, PARAMS, data, pitchClasses }) => {\n const yCoord = PARAMS.PADDING_TOP + PARAMS.GRAPH_HEIGHT + 42;\n\n const minMaxSum = data.reduce((minMax, { pitch_info: { speed, pitch_type: pitchType } }) => {\n if (minMax[pitchClasses[pitchType]] === undefined) {\n minMax[pitchClasses[pitchType]] = { min: speed, max: speed, sum: speed, count: 1 };\n\n return minMax;\n }\n\n if (speed < minMax[pitchClasses[pitchType]].min) {\n minMax[pitchClasses[pitchType]].min = speed;\n }\n if (speed > minMax[pitchClasses[pitchType]].max) {\n minMax[pitchClasses[pitchType]].max = speed;\n }\n\n minMax[pitchClasses[pitchType]].sum += speed;\n minMax[pitchClasses[pitchType]].count++;\n\n return minMax;\n }, {});\n\n return (\n \n {totalClasses\n .filter(classTitle => classTitle !== '')\n .map((classTitle, i) => {\n const xCoord = PARAMS.PADDING_LEFT + 135 + 207 * i;\n const minValue = Math.round(minMaxSum[classTitle].min * 2.24);\n const avgValue = Math.round((minMaxSum[classTitle].sum / minMaxSum[classTitle].count) * 2.24);\n const maxValue = Math.round(minMaxSum[classTitle].max * 2.24);\n return (\n \n \n \n {classTitle} (Min:{minValue}, Avg:{avgValue}, Max:{maxValue})\n \n \n );\n })}\n \n );\n};\n\nexport default Footer;\n","import { Fragment } from 'react';\nimport { graphColumn } from './FacedGraph.module.scss';\nimport { getPitchСlassColorByName, getPitchСlassPrimaryColorByName } from 'utils';\n\nconst Graph = ({ summary, PARAMS, minMaxSpeed, maxCount }) => {\n const minMaxSpeedDelta = Math.ceil(minMaxSpeed.max) - Math.floor(minMaxSpeed.min);\n const colWidth = (PARAMS.GRAPH_WIDTH / minMaxSpeedDelta) * 2;\n const heightPerHit = PARAMS.GRAPH_HEIGHT / maxCount;\n\n return (\n <>\n {Object.entries(summary).map(([colNumber, valuesByTypes], i) => (\n \n {Object.entries(valuesByTypes)\n .sort((a, b) => (a[1] > b[1] ? -1 : 1))\n .map(([type, value], j) => {\n const colHeight = heightPerHit * value;\n const xCoord = PARAMS.PADDING_LEFT + colWidth * colNumber;\n const yCoord = PARAMS.PADDING_TOP + PARAMS.GRAPH_HEIGHT - colHeight;\n\n return (\n \n \n \n \n );\n })}\n \n ))}\n \n );\n};\n\nexport default Graph;\n","import { Fragment } from 'react';\nimport { leftValue } from './FacedGraph.module.scss';\n\nconst LeftValues = ({ maxCount, PARAMS }) => {\n const valuesDelta = maxCount / PARAMS.ROWS_NUMBER;\n const graphDelta = PARAMS.GRAPH_HEIGHT / PARAMS.ROWS_NUMBER;\n\n const hitsValues = [];\n for (let i = 0; i <= PARAMS.ROWS_NUMBER; i++) {\n hitsValues.push(valuesDelta * i);\n }\n hitsValues.reverse();\n\n const xCoord = PARAMS.PADDING_LEFT - 8;\n return (\n <>\n {hitsValues.map((value, i) => {\n const yCoord = PARAMS.PADDING_TOP + graphDelta * i + 5;\n\n return (\n \n {!(value % 1 || value === 0) && (\n \n {value}\n \n )}\n \n );\n })}\n \n );\n};\n\nexport default LeftValues;\n","import { leftTitle, bottomTitle } from './FacedGraph.module.scss';\n\nconst HorizontalLines = ({ PARAMS }) => {\n const linesArr = new Array(PARAMS.ROWS_NUMBER + 1).fill('');\n const rowDelta = PARAMS.GRAPH_HEIGHT / PARAMS.ROWS_NUMBER;\n\n return (\n <>\n {linesArr.map((_, i) => (\n \n ))}\n \n );\n};\n\nconst VerticalLines = ({ PARAMS }) => {\n const linesArr = new Array(PARAMS.COLS_NUMBER + 1).fill('');\n const colDelta = PARAMS.GRAPH_WIDTH / PARAMS.COLS_NUMBER;\n\n return (\n <>\n {linesArr.map((_, i) => (\n \n ))}\n \n );\n};\n\nconst Titles = ({ PARAMS }) => {\n const leftTitleCoords = { x: PARAMS.PADDING_LEFT - 40, y: PARAMS.PADDING_TOP + PARAMS.GRAPH_HEIGHT + 15 };\n const bottomTitleCoords = { x: PARAMS.PADDING_LEFT - 1, y: PARAMS.PADDING_TOP + PARAMS.GRAPH_HEIGHT + 34 };\n return (\n <>\n {/* Left title */}\n \n Pitches\n \n\n {/* Bottom title */}\n \n Speed, mph\n \n \n );\n};\n\nconst StaticLayout = ({ PARAMS }) => {\n return (\n <>\n \n \n \n \n );\n};\n\nexport default StaticLayout;\n","import { Fragment } from 'react';\nimport { getPitchСlassPrimaryColorByName } from 'utils';\nimport { footerValue } from './FacedGraph.module.scss';\nimport cl from './FacedGraph.module.scss';\n\nconst MobileFooter = ({ totalClasses, PARAMS, data, pitchClasses }) => {\n const minMaxSum = data.reduce((minMax, { pitch_info: { speed, pitch_type: pitchType } }) => {\n if (minMax[pitchClasses[pitchType]] === undefined) {\n minMax[pitchClasses[pitchType]] = { min: speed, max: speed, sum: speed, count: 1 };\n\n return minMax;\n }\n\n if (speed < minMax[pitchClasses[pitchType]].min) {\n minMax[pitchClasses[pitchType]].min = speed;\n }\n if (speed > minMax[pitchClasses[pitchType]].max) {\n minMax[pitchClasses[pitchType]].max = speed;\n }\n\n minMax[pitchClasses[pitchType]].sum += speed;\n minMax[pitchClasses[pitchType]].count++;\n\n return minMax;\n }, {});\n\n return (\n
    \n {totalClasses\n .filter(classTitle => classTitle !== '')\n .map((classTitle, i) => {\n const xCoord = PARAMS.PADDING_LEFT + 135;\n const yCoord = PARAMS.PADDING_TOP + PARAMS.GRAPH_HEIGHT + 42 + i * 35;\n const minValue = Math.round(minMaxSum[classTitle].min * 2.24);\n const avgValue = Math.round((minMaxSum[classTitle].sum / minMaxSum[classTitle].count) * 2.24);\n const maxValue = Math.round(minMaxSum[classTitle].max * 2.24);\n return (\n
    {classTitle} (Min:{minValue}, Avg:{avgValue}, Max:{maxValue})\n\t\t\t\t\t\t\t{/*
    \n\t\t\t\t\t\t\t
    {classTitle} (Min:{minValue}, Avg:{avgValue}, Max:{maxValue})
    */}\n {/* */}\n {/* \n {classTitle} (Min:{minValue}, Avg:{avgValue}, Max:{maxValue})\n */}\n
    \n );\n })}\n
    \n );\n};\n\nexport default MobileFooter;\n","import BottomValues from './BottomValues';\nimport cl from './FacedGraph.module.scss';\nimport Footer from './Footer';\nimport Graph from './Graph';\nimport LeftValues from './LeftValues';\nimport StaticLayout from './StaticLayout';\nimport MobileFooter from './MobileFooter';\nimport MobileScrollingWrapper from 'components/PlayerStats/MobileScrollingWrapper/MobileScrollingWrapper';\n\nconst PARAMS = {\n WRAPPER_WIDTH: 940,\n WRAPPER_HEIGHT: 365,\n GRAPH_WIDTH: 829,\n GRAPH_HEIGHT: 277,\n PADDING_LEFT: 63,\n PADDING_TOP: 27,\n ROWS_NUMBER: 4,\n COLS_NUMBER: 12\n};\n\nconst PITCH_CLASSES_PRIORITY = {\n Fastball: 3,\n Breaking: 2,\n Offspeed: 1\n};\n\nconst FacedGraph = ({ data, preview }) => {\n const { pitch_classes: pitchClasses } = preview;\n\n const minMaxSpeed = data.reduce((sum, { pitch_info: { speed } }) => {\n if (sum.min === undefined || speed < sum.min) sum.min = speed;\n if (sum.max === undefined || speed > sum.max) sum.max = speed;\n\n return sum;\n }, {});\n\n minMaxSpeed.min *= 2.24;\n minMaxSpeed.max *= 2.24;\n\n // Left and right speed corridor correction\n minMaxSpeed.min -= 14;\n minMaxSpeed.max += 14;\n\n let totalClasses = [];\n\n const summary = data.reduce((sum, { pitch_info: { speed, pitch_type: pitchType } }) => {\n totalClasses.push(pitchClasses[pitchType]);\n\n const colNumber = Math.floor((Math.floor(speed * 2.24) - Math.floor(minMaxSpeed.min)) / 2);\n if (sum[colNumber] === undefined) {\n sum[colNumber] = { [pitchClasses[pitchType]]: 1 };\n\n return sum;\n }\n\n if (sum[colNumber][pitchClasses[pitchType]] === undefined) {\n sum[colNumber][pitchClasses[pitchType]] = 1;\n\n return sum;\n }\n\n sum[colNumber][pitchClasses[pitchType]]++;\n\n return sum;\n }, {});\n\n totalClasses = Array.from(new Set(totalClasses)).sort((a, b) =>\n PITCH_CLASSES_PRIORITY[a] > PITCH_CLASSES_PRIORITY[b] ? -1 : 1\n );\n\n const maxCount = Object.values(summary).reduce((max, col) => {\n Object.values(col).forEach(value => {\n if (value > max) max = value;\n });\n\n return max;\n }, 0);\n\n return (\n \n \n {/* Layout */}\n \n\n {/* Bottom values */}\n {maxCount > 0 && }\n\n {/* Left values */}\n \n\n {/* Graph */}\n \n\n {/* Footer */}\n
    \n \n {/* Mobile Footer */}\n \n \n );\n};\n\nexport default FacedGraph;\n","import { useState } from 'react';\nimport cl from './FilteredGraphs.module.scss';\nimport classNames from 'classnames';\n\nconst GraphsTimeDynamicBlock = ({ defaultOption, defaultOption2, defaultOption3, children, ...props }) => {\n const calculatedDefOptions2 = defaultOption2.reduce(\n (sum, option, index) => {\n sum.push({ name: option, type: index, checked: true });\n\n return sum;\n },\n [\n {\n name: 'All Pitches',\n type: -1,\n checked: true\n }\n ]\n );\n\n const [currentOption, setCurrentOption] = useState(defaultOption);\n const [currentOption2, setCurrentOption2] = useState(calculatedDefOptions2);\n const [currentOption3, setCurrentOption3] = useState(defaultOption3);\n\n const wrapperClasses = classNames(cl.graphsBlock, cl.dynamicBlock, {\n [cl.openedHeight]: currentOption3 === 'opened',\n [cl.closedHeight]: currentOption3 !== 'opened'\n });\n return (\n \n {children(\n currentOption,\n setCurrentOption,\n currentOption2,\n setCurrentOption2,\n currentOption3,\n setCurrentOption3\n )}\n \n );\n};\n\nexport default GraphsTimeDynamicBlock;\n","import { showingGroup } from './TwinPitchesGraph.module.scss';\n\nconst Tooltip = ({ hoveredDot, isType = true }) => {\n const speedValue = +hoveredDot.speed.toFixed(2) + ' mph';\n\n const hoveredDotXCoord =\n hoveredDot.coords[0] <= 75\n ? hoveredDot.coords[0] + 80\n : hoveredDot.coords[0] <= 315\n ? hoveredDot.coords[0]\n : hoveredDot.coords[0] - 65;\n const hoveredDotYCoord = hoveredDot.coords[1] > 50 ? hoveredDot.coords[1] : hoveredDot.coords[1] + 75;\n let rectY = hoveredDotYCoord - 50;\n let rectHeight = 35;\n const rectWidth = 138;\n const rectX = hoveredDotXCoord - rectWidth / 2;\n\n if (!isType) {\n rectY += 16;\n rectHeight -= 16;\n }\n return (\n \n \n {isType && (\n \n {hoveredDot.pitchType}\n \n )}\n \n Speed: {speedValue}\n \n \n );\n};\n\nexport default Tooltip;\n","import { useState, useEffect, useRef } from \"react\"\n\nconst useIntersection = () => {\n\tconst [isVisible, setVisibility] = useState(false);\n\n const intersectionRef = useRef();\n\n\tuseEffect(() => {\n let options = {\n root: null,\n rootMargin: '300px 0px',\n threshold: 0\n };\n\n let observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n setVisibility(true);\n } else {\n setVisibility(false);\n }\n });\n }, options);\n observer.observe(intersectionRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n\treturn [intersectionRef, isVisible]\n}\n\nexport default useIntersection","import { graphMainTitle } from './TwinPitchesGraph.module.scss';\n\nconst GraphTitle = ({ title }) => {\n return

    {title}

    ;\n};\n\nexport default GraphTitle;\n","import { useRef, useLayoutEffect, useState, Fragment } from 'react';\nimport cl from './TwinPitchesGraph.module.scss';\nimport { getPitchСlassColorByName } from 'utils';\nimport Tooltip from './Tooltip';\nimport useIntersection from 'hooks/useIntersection';\nimport GraphTitle from './GraphTitle';\nimport MobileScrollingWrapper from 'components/PlayerStats/MobileScrollingWrapper/MobileScrollingWrapper';\nimport classNames from 'classnames';\n\nconst PARAMS = {\n GRAPH_WIDTH: 713,\n GRAPH_HEIGHT: 388,\n SIDE_PADDING: 30\n};\n\nconst Dots = ({ arrData, pitchClasses, coords, setHoveredDot }) => {\n const handleDotClick = (gameId, momentId) => () => {\n window.open(`/game/${gameId}?card=${momentId}&tab=pitching`, '_blank');\n };\n\n return (\n <>\n {arrData.map((pitch, i) => {\n const { coordinates, pitch_info: pitchInfo } = pitch;\n const { zone_x: x, zone_y: y } = coordinates;\n const { pitch_type: pitchType, game_id: gameId, mom_id: momentId, speed } = pitchInfo;\n\n const { xCoordRelCoef, yCoordAbsCoef, yCoordRelCoef, zeroXCoord, zeroYCoord } = coords;\n\n const xCoord = zeroXCoord + x * xCoordRelCoef;\n const yCoord = y === 0 ? zeroYCoord : zeroYCoord - y * yCoordRelCoef + yCoordAbsCoef;\n return (\n \n setHoveredDot(prev => ({\n ...prev,\n speed: speed * 2.24,\n visible: true,\n coords: [xCoord, yCoord],\n pitchType: pitchClasses[pitchType]\n }))\n }\n onPointerOut={() => setHoveredDot(prev => ({ ...prev, visible: false }))}\n />\n );\n })}\n \n );\n};\n\nconst HeatAreas = ({ arrData, coords }) => {\n const { zeroXCoord, zeroYCoord, xCoordRelCoef, yCoordAbsCoef, yCoordRelCoef } = coords;\n const heatRowsCount = 35;\n const heatColsCount = 32;\n const rowHeight = PARAMS.GRAPH_HEIGHT / heatRowsCount;\n const colWidth = PARAMS.GRAPH_WIDTH / heatColsCount;\n\n // now generate some random data\n let maxValue = 0;\n\n const dotsCoords = arrData.reduce((sum, pitch) => {\n const { coordinates } = pitch;\n const { zone_x: x, zone_y: y } = coordinates;\n\n const xCoord = zeroXCoord + x * xCoordRelCoef;\n const yCoord = y === 0 ? zeroYCoord : zeroYCoord - y * yCoordRelCoef + yCoordAbsCoef;\n\n const rowNumber = Math.floor(yCoord / rowHeight);\n const colNumber = Math.floor(xCoord / colWidth);\n\n if (!sum[rowNumber]) sum[rowNumber] = [];\n if (!sum[rowNumber][colNumber]) sum[rowNumber][colNumber] = 0;\n\n sum[rowNumber][colNumber]++;\n\n maxValue = Math.max(maxValue, sum[rowNumber][colNumber]);\n\n return sum;\n }, []);\n\n const points = dotsCoords.reduce((sum, coords, i) => {\n if (coords === undefined) return sum;\n\n coords.forEach((col, j) => {\n if (col === undefined) return;\n\n const newPoint = {\n x: +(j * colWidth + colWidth / 2).toFixed(2),\n y: +(i * rowHeight + rowHeight / 2).toFixed(2),\n value: col\n };\n\n sum.push(newPoint);\n });\n\n return sum;\n }, []);\n\n const maxRadius = 25;\n return (\n <>\n {points.map((point, i) => {\n const { x, y, value } = point;\n\n const firstLayerMaxValue = maxValue < 5 ? maxValue * 0.5 : maxValue * 0.33;\n const firstLayerRadius =\n maxValue === 1\n ? maxRadius / 3\n : maxValue < 3\n ? value * (maxRadius / 3)\n : value < firstLayerMaxValue\n ? (value / firstLayerMaxValue) * maxRadius\n : maxRadius;\n\n const opacity = firstLayerRadius / maxRadius;\n\n return (\n \n \n \n );\n })}\n {/* Second layer */}\n {points.map((point, i) => {\n const { x, y, value } = point;\n\n const secondLayerMaxValue = maxValue < 5 ? maxValue : maxValue * 0.66;\n const secondLayerRadius =\n value >= 3\n ? value < secondLayerMaxValue\n ? (value / secondLayerMaxValue) * (maxRadius - 4)\n : maxRadius - 4\n : 0;\n\n const opacity = secondLayerRadius / (maxRadius - 4);\n return (\n \n );\n })}\n {/* Third layer */}\n {points.map((point, i) => {\n const { x, y, value } = point;\n\n const thirdLayerMaxValue = maxValue;\n\n const thirdLayerRadius =\n value >= 5\n ? value < thirdLayerMaxValue\n ? (value / thirdLayerMaxValue) * (maxRadius - 10)\n : maxRadius - 10\n : 0;\n\n const opacity = thirdLayerRadius / (maxRadius - 10);\n return (\n \n \n \n );\n })}\n \n );\n};\n\nconst Frames = ({ top, title1, filteredData, preview, currentOption, selectedField, setHoveredDot }) => {\n const { zone, pitch_classes: pitchClasses } = preview;\n\n const {\n y_strike_down: yStrikeDown,\n x_strike_up: yStrikeUp,\n x_strike_left: xStrikeLeft,\n x_strike_right: xStrikeRight,\n shadow_border: shadowBorder\n } = zone;\n\n const arrData = filteredData.filter(({ result }) => result[selectedField]);\n\n let totalPitches = arrData.length;\n\n const zeroYCoord = PARAMS.GRAPH_HEIGHT * 0.8615;\n const yCoordRelCoef = 179;\n const yCoordAbsCoef = 0;\n\n const zeroXCoord = PARAMS.GRAPH_WIDTH * 0.1718;\n const xCoordRelCoef = 179;\n\n // Dashed frame params\n const dashedFrameX = zeroXCoord + xCoordRelCoef * xStrikeLeft;\n const dashedFrameWidth = zeroXCoord + xCoordRelCoef * xStrikeRight - dashedFrameX;\n const dashedFrameY = zeroYCoord - yStrikeUp * yCoordRelCoef + yCoordAbsCoef;\n const dashedFrameHeight = zeroYCoord - yStrikeDown * yCoordRelCoef + yCoordAbsCoef - dashedFrameY;\n\n const isDots = currentOption === 'All Pitches';\n return (\n <>\n {/* Center X line */}\n {/* */}\n {/* Center Y line */}\n {/* */}\n {/* Left Dashed Line */}\n {/* */}\n {/* Right Dashed Line */}\n {/* */}\n\n {/* Frames */}\n {/* Wrapper frame */}\n \n\n {/* Outer frame */}\n \n\n {/* Inner frame */}\n \n\n {/* Dots */}\n {isDots && (\n \n )}\n\n {/* Heat areas */}\n {!isDots && (\n <>\n \n \n \n \n \n )}\n\n {/* Dashed frame */}\n \n\n {/* Title */}\n \n {`${title1} (${totalPitches})`}\n \n \n );\n};\nconst RightFrames = ({ top, title1, filteredData, selectedField, preview, currentOption, setHoveredDot }) => {\n const { zone, pitch_classes: pitchClasses } = preview;\n\n const {\n y_strike_down: yStrikeDown,\n x_strike_up: yStrikeUp,\n x_strike_left: xStrikeLeft,\n x_strike_right: xStrikeRight,\n shadow_border: shadowBorder\n } = zone;\n\n const arrData = filteredData.filter(({ result }) => result[selectedField]);\n\n let totalPitches = arrData.length;\n\n const zeroYCoord = PARAMS.GRAPH_HEIGHT * 0.8615;\n const yCoordRelCoef = 179;\n const yCoordAbsCoef = 0;\n\n const zeroXCoord = PARAMS.GRAPH_WIDTH * 0.82819;\n\n const xCoordRelCoef = 179;\n\n // Dashed frame params\n const dashedFrameX = zeroXCoord + xCoordRelCoef * xStrikeLeft;\n const dashedFrameWidth = zeroXCoord + xCoordRelCoef * xStrikeRight - dashedFrameX;\n const dashedFrameY = zeroYCoord - yStrikeUp * yCoordRelCoef + yCoordAbsCoef;\n const dashedFrameHeight = zeroYCoord - yStrikeDown * yCoordRelCoef + yCoordAbsCoef - dashedFrameY;\n\n const isDots = currentOption === 'All Pitches';\n return (\n <>\n {/* Center X line */}\n {/* */}\n {/* Center Y line */}\n {/* */}\n {/* Left Dashed Line */}\n {/* */}\n {/* Right Dashed Line */}\n {/* */}\n\n {/* Frames */}\n {/* Wrapper frame */}\n \n\n {/* Outer frame */}\n \n\n {/* Inner frame */}\n \n\n {/* Dots */}\n {isDots && (\n \n )}\n\n {/* Heat areas */}\n {!isDots && (\n <>\n \n \n \n \n \n )}\n\n {/* Dashed frame */}\n \n\n {/* Title */}\n \n {`${title1} (${totalPitches})`}\n \n \n );\n};\n\nconst Column = ({ right, center, coef, data, reverse = false, byPitchZone = false }) => {\n const { percents: srcPercents, footer } = data;\n const percents = isNaN(srcPercents) ? 0 : srcPercents;\n\n const percentValueRef = useRef(null);\n\n useLayoutEffect(() => {\n if (percentValueRef.current === null) return;\n\n percentValueRef.current.style.transition = 'unset';\n percentValueRef.current.style.opacity = 0;\n\n setTimeout(() => {\n if (percentValueRef.current) {\n percentValueRef.current.style.transition = 'opacity .3s';\n percentValueRef.current.style.opacity = 1;\n }\n }, 300);\n }, [percents]);\n\n const xCoord = right - 20;\n const yCoordFilled = reverse ? center : center - coef * percents;\n\n const valueXCoord = xCoord + 10;\n\n const percentsYCoord = reverse\n ? yCoordFilled + coef * percents + 16\n : footer\n ? center + 15\n : yCoordFilled - 5;\n // const percentsYCoord = reverse ? center + columnHeight + 25 : yCoordFilled - 5;\n const legendCircleFill = footer === 'Heart' ? '#B6C6D6' : footer === 'Shadow' ? '#EAEAEA' : 'transparent';\n const isLegendText = footer === 'Heart';\n const percentsValue = Math.round(percents);\n return (\n <>\n {/* Filled */}\n \n {/* Empty */}\n {/* */}\n {/* Value */}\n {/* \n {value}\n */}\n {/* Percents */}\n \n {percentsValue}%\n \n {/* Footer */}\n {footer && (\n <>\n \n {isLegendText && (\n \n Legend:\n \n )}\n \n {footer}\n \n \n )}\n \n );\n};\n\nconst Columns = ({ right, center, values, byPitchZone }) => {\n const columnHeight = 150 / 2;\n const coef = columnHeight / 100;\n\n const rightCoef = !byPitchZone ? 42 : 32;\n return (\n <>\n {Object.entries(values).map((entry, i) => (\n \n ))}\n \n );\n};\n\nconst PercentsGraph = ({ left, center, filteredData, byPitchZone }) => {\n const filteredPitches = !byPitchZone\n ? filteredData.filter(({ result }) => result.swing || result.take)\n : filteredData.filter(({ result }) => result['soft hit'] || result['base hit & hard hit']);\n\n const filteredPitchesCount = filteredPitches.length;\n const defaultCountByResult = {\n swingHeart: 0,\n swingShadow: 0,\n swingChase: 0,\n takeHeart: 0,\n takeShadow: 0,\n takeChase: 0,\n totalHeart: 0,\n totalShadow: 0,\n totalChase: 0,\n\n softLow: 0,\n softHigh: 0,\n softOutside: 0,\n softInside: 0,\n hardLow: 0,\n hardHigh: 0,\n hardOutside: 0,\n hardInside: 0,\n totalLow: 0,\n totalHigh: 0,\n totalOutside: 0,\n totalInside: 0\n };\n\n const pitchesCountByResult = filteredPitches.reduce((sum, pitch) => {\n const { result, zone } = pitch;\n\n if (result.swing) {\n zone.heart && sum.swingHeart++;\n zone.edge && sum.swingShadow++;\n zone.waste && sum.swingChase++;\n }\n\n if (result.take) {\n zone.heart && sum.takeHeart++;\n zone.edge && sum.takeShadow++;\n zone.waste && sum.takeChase++;\n }\n\n if (result['soft hit']) {\n zone.low && sum.softLow++;\n zone.high && sum.softHigh++;\n zone.outside && sum.softOutside++;\n zone.inside && sum.softInside++;\n }\n if (result['base hit & hard hit']) {\n zone.low && sum.hardLow++;\n zone.high && sum.hardHigh++;\n zone.outside && sum.hardOutside++;\n zone.inside && sum.hardInside++;\n }\n\n zone.heart && sum.totalHeart++;\n zone.edge && sum.totalShadow++;\n zone.waste && sum.totalChase++;\n zone.low && sum.totalLow++;\n zone.high && sum.totalHigh++;\n zone.outside && sum.totalOutside++;\n zone.inside && sum.totalInside++;\n\n return sum;\n }, defaultCountByResult);\n\n const {\n swingChase,\n takeChase,\n swingShadow,\n takeShadow,\n swingHeart,\n takeHeart,\n totalChase,\n totalShadow,\n totalHeart,\n\n softLow,\n softHigh,\n softOutside,\n softInside,\n hardLow,\n hardHigh,\n hardOutside,\n hardInside,\n totalInside,\n totalOutside,\n totalHigh,\n totalLow\n } = pitchesCountByResult;\n\n let topRightPercents = 0;\n let topCenterPercents = 0;\n let topLeftPercents = 0;\n let topRightCenterPercents = 0;\n let topLeftCenterPercents = 0;\n\n if (!byPitchZone) {\n topRightPercents = Math.round((swingChase * 100) / (swingChase + takeChase));\n topCenterPercents = Math.round((swingShadow * 100) / (swingShadow + takeShadow));\n topLeftPercents = Math.round((swingHeart * 100) / (swingHeart + takeHeart));\n }\n\n if (byPitchZone) {\n topRightPercents = Math.round((softInside * 100) / (softInside + hardInside));\n topRightCenterPercents = Math.round((softOutside * 100) / (softOutside + hardOutside));\n topLeftCenterPercents = Math.round((softHigh * 100) / (softHigh + hardHigh));\n topLeftPercents = Math.round((softLow * 100) / (softLow + hardLow));\n }\n\n const topValues = !byPitchZone\n ? {\n topRight: {\n percents: topRightPercents,\n footer: null,\n column: 3\n },\n bottomRight: {\n percents: 100 - topRightPercents,\n footer: null,\n reverse: true,\n column: 3\n },\n topCenter: {\n percents: topCenterPercents,\n footer: null,\n column: 2\n },\n bottomCenter: {\n percents: 100 - topCenterPercents,\n footer: null,\n reverse: true,\n column: 2\n },\n topLeft: {\n percents: topLeftPercents,\n footer: null,\n column: 1\n },\n bottomLeft: {\n percents: 100 - topLeftPercents,\n footer: null,\n reverse: true,\n column: 1\n }\n }\n : {\n topRight: {\n percents: topRightPercents,\n footer: null,\n column: 4\n },\n bottomRight: {\n percents: 100 - topRightPercents,\n footer: null,\n reverse: true,\n column: 4\n },\n topRightCenter: {\n percents: topRightCenterPercents,\n footer: null,\n column: 3\n },\n bottomRightCenter: {\n percents: 100 - topRightCenterPercents,\n footer: null,\n reverse: true,\n column: 3\n },\n topLeftCenter: {\n percents: topLeftCenterPercents,\n footer: null,\n column: 2\n },\n bottomLeftCenter: {\n percents: 100 - topLeftCenterPercents,\n footer: null,\n reverse: true,\n column: 2\n },\n topLeft: {\n percents: topLeftPercents,\n footer: null,\n column: 1\n },\n bottomLeft: {\n percents: 100 - topLeftPercents,\n footer: null,\n reverse: true,\n column: 1\n }\n };\n const bottomValues = !byPitchZone\n ? {\n topRight: {\n percents: (totalChase * 100) / filteredPitchesCount,\n footer: 'Chase',\n column: 3\n },\n topCenter: {\n percents: (totalShadow * 100) / filteredPitchesCount,\n footer: 'Shadow',\n column: 2\n },\n topLeft: {\n percents: (totalHeart * 100) / filteredPitchesCount,\n footer: 'Heart',\n column: 1\n }\n }\n : {\n right: {\n percents: (totalInside * 100) / filteredPitchesCount,\n footer: 'Inside',\n column: 4\n },\n rightCenter: {\n percents: (totalOutside * 100) / filteredPitchesCount,\n footer: 'Outside',\n column: 3\n },\n leftCenter: {\n percents: (totalHigh * 100) / filteredPitchesCount,\n footer: 'High',\n column: 2\n },\n left: {\n percents: (totalLow * 100) / filteredPitchesCount,\n footer: 'Low',\n column: 1\n }\n };\n\n const lineLength = !byPitchZone ? left + 167 : left + 199;\n return (\n <>\n {/* Top line titles */}\n \n {!byPitchZone ? 'Swing' : 'Miss&soft'}\n \n \n {!byPitchZone ? 'Take' : 'Base&Hard'}\n \n {/* Bottom line titles */}\n \n Pitches\n \n \n by zone\n \n \n {/* Bottom columns */}\n \n\n {/* Top line */}\n \n {/* Bottom line */}\n \n \n );\n};\n\nconst LeftChart = ({\n filteredData,\n selectedPitchClass,\n preview,\n currentOption,\n subTitle1,\n subTitle2,\n byPitchZone = false\n}) => {\n const [hoveredDot, setHoveredDot] = useState({ visible: false, speed: 0, coords: [0, 0] });\n\n return (\n <>\n \n \n \n {hoveredDot.visible && }\n \n );\n};\n\nconst TwinPitchesGraph = ({\n filteredData,\n preview,\n currentOption,\n selectedPitchClass = null,\n title = null,\n subTitle1,\n subTitle2\n}) => {\n const [graphRef, isGraphVisible] = useIntersection();\n\n\tconst graphWrapperClasses = classNames(cl.graphWrapper, {\n\t\t[cl.pt2]: title\n\t})\n return (\n \n
    \n \n {isGraphVisible && (\n \n )}\n \n
    \n {title && }\n
    \n );\n};\n\nexport default TwinPitchesGraph;\n","import TwinPitchesGraph from './TwinPitchesGraph';\nimport { twinGraphsWrapper } from '../FilteredGraphs.module.scss';\nimport { Fragment } from 'react';\n\nconst TwinPitchesGraphs = ({ relValuesData, preview, currentOption }) => {\n return (\n
    \n {Object.entries(relValuesData)\n .sort((a, b) => (a[1].count > b[1].count ? -1 : 1))\n .map((entry, index) => (\n \n \n \n \n ))}\n
    \n );\n};\n\nexport default TwinPitchesGraphs;\n","import ArsenalGraph from 'components/PlayerStats/ArsenalGraph/ArsenalGraph';\n\nconst ArsenalGraphs = ({ filteredData, currentOption, currentOption2, pitchClasses }) => {\n return (\n <>\n \n \n \n \n \n );\n};\n\nexport default ArsenalGraphs;\n","import cl from './FilteredGraphs.module.scss';\nimport FilterField from 'components/UI/dropdown/FilterField/FilterField';\nimport GraphsBlock from './GraphsBlock';\nimport GraphsHeader from './GraphsHeader/GraphsHeader';\nimport { useState, useMemo, useRef, useEffect } from 'react';\nimport { useFilterBatterGroupData } from 'hooks/useFilterGraphsData';\nimport { useSelector } from 'react-redux';\nimport PitchesTrajectories from './PitchesTrajectories/PitchesTrajectories';\nimport HitsAnglesGraphs from './HitsAnglesGraphs/HitsAnglesGraphs';\nimport FacedGraph from './FacedGraph/FacedGraph';\nimport GraphsTimeDynamicBlock from './GraphsTimeDynamicBlock';\nimport TwinPitchesGraphs from './TwinPitchesGraph/TwinPitchesGraphs';\nimport ArsenalGraphs from './ArsenalGraphs';\nimport CrossClose from 'components/UI/buttons/CrossClose/CrossClose';\nimport classNames from 'classnames';\n\nconst FIELD_NAMES = {\n pitcher: {\n 'All pitchers': 'all',\n 'Right handed': 'RHP',\n 'Left handed': 'LHP'\n },\n count: {\n 'Any count': 'all',\n 'First pitches': 'first_pitch',\n 'Close to BB': 'close_to_BB',\n '2 strikes': 'strike2',\n Other: 'other'\n },\n type: {\n 'All pitches': 'all',\n Fastballs: 'Fastball',\n Breaking: 'Breaking',\n Offspeed: 'Offspeed'\n },\n zone: {\n 'Any zone': 'all',\n Low: 'low',\n High: 'high',\n Outside: 'outside',\n Inside: 'inside'\n },\n result: {\n 'All pitches': 'all',\n Swing: 'swing',\n Take: 'take'\n },\n swing: {\n 'All swings': 'all',\n Miss: 'miss',\n Contact: 'contact'\n },\n contact: {\n 'All contacts': 'all',\n 'Base hits & Hard hit': 'base hit & hard hit',\n 'Slow hit': 'soft hit',\n Fly: 'fly',\n Line: 'line',\n Grounds: 'gruond'\n }\n};\n\nconst SpeedGroupItem = ({ pitchClass, handleFilterChange, isActive = true, JSONspeeds }) => {\n const [pitchClassName, pitchClassValue] = pitchClass;\n const { title, r, g, b, speeds } = pitchClassValue;\n\n const [sliderCoords, setSliderCoords] = useState({ x1: 0, x2: 100 });\n\n const sliderRef = useRef();\n const sliderNameRef = useRef();\n const mouseDownXCoordRef = useRef();\n const mouseDownStateRef = useRef();\n const mouseClickTimeRef = useRef(null);\n const sliderCoordsTimer = useRef();\n\n const minMaxMph = useMemo(() => {\n const minMax = speeds.reduce((minMax, curSpeed, i) => {\n if (curSpeed > minMax.max || i === 0) minMax.max = curSpeed;\n if (curSpeed < minMax.min || i === 0) minMax.min = curSpeed;\n\n return minMax;\n }, {});\n\n minMax.min = Math.floor(minMax.min);\n minMax.max = Math.ceil(minMax.max);\n\n return minMax;\n }, [speeds]);\n\n const minMaxDelta = minMaxMph.max - minMaxMph.min;\n\n useEffect(() => {\n clearTimeout(sliderCoordsTimer.current);\n\n sliderCoordsTimer.current = setTimeout(() => {\n const minSpeed = +(minMaxMph.min + (minMaxDelta / 100) * sliderCoords.x1).toFixed(0);\n const maxSpeed = +(minMaxMph.min + (minMaxDelta / 100) * sliderCoords.x2).toFixed(0);\n\n handleFilterChange(pitchClassName, { min: minSpeed, max: maxSpeed });\n }, 250);\n\n return () => {\n clearTimeout(sliderCoordsTimer.current);\n };\n }, [sliderCoords]);\n\n useEffect(() => {\n const minSpeed = +(minMaxMph.min + (minMaxDelta / 100) * sliderCoords.x1).toFixed(0);\n const maxSpeed = +(minMaxMph.min + (minMaxDelta / 100) * sliderCoords.x2).toFixed(0);\n\n handleFilterChange(pitchClassName, { min: minSpeed, max: maxSpeed });\n }, [JSONspeeds]);\n\n function handleMouseMove(e) {\n const slider = sliderRef.current;\n const parent = slider.parentElement;\n\n const sliderWidth = slider.getBoundingClientRect().width;\n const fixedX =\n sliderNameRef.current === 'left-slider' ? e.clientX - sliderWidth / 2 : e.clientX + sliderWidth / 2;\n\n let currentCoord =\n fixedX <= parent.getBoundingClientRect().left\n ? 0\n : fixedX > parent.getBoundingClientRect().right\n ? parent.getBoundingClientRect().width\n : fixedX - parent.getBoundingClientRect().left;\n\n const currentCoordPercents = +((currentCoord * 100) / parent.getBoundingClientRect().width).toFixed(4);\n\n if (sliderNameRef.current === 'left-slider') {\n setSliderCoords({\n ...sliderCoords,\n x1: sliderCoords.x2 - 30 > currentCoordPercents ? currentCoordPercents : sliderCoords.x2 - 30,\n changedCoord: 'x1'\n });\n\n return;\n }\n if (sliderNameRef.current === 'right-slider') {\n setSliderCoords({\n ...sliderCoords,\n x2: sliderCoords.x1 + 30 < currentCoordPercents ? currentCoordPercents : sliderCoords.x1 + 30,\n changedCoord: 'x2'\n });\n\n return;\n }\n }\n\n const handleMouseUp = () => {\n // sliderRef.current.parentElement.style.cursor = 'default';\n // if (sliderNameRef.current.includes('line')) rectRef.current.style.cursor = 'grab';\n\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n\n // const mouseClickDelta = Date.now() - mouseClickTimeRef.current;\n // if (mouseClickDelta < 140) {\n // const slider = sliderRef.current;\n // const parent = slider.parentElement;\n\n // let currentCoord =\n // e.clientX <= parent.getBoundingClientRect().left\n // ? 0\n // : e.clientX > parent.getBoundingClientRect().right\n // ? parent.getBoundingClientRect().width\n // : e.clientX - parent.getBoundingClientRect().left;\n\n // const currentCoordPercents = +((currentCoord * 100) / parent.getBoundingClientRect().width).toFixed(4);\n\n // dispatch(setSeekValue(seekToValue));\n // dispatch(setVideoCurrentTime(seekToValue));\n // }\n };\n\n const handleMouseDown = e => {\n mouseClickTimeRef.current = Date.now();\n\n sliderRef.current = e.target;\n sliderNameRef.current = e.target.attributes.name.value;\n mouseDownXCoordRef.current = e.clientX;\n mouseDownStateRef.current = JSON.parse(JSON.stringify(sliderCoords));\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n };\n\n const x1SpeedValue = (minMaxMph.min + (minMaxDelta / 100) * sliderCoords.x1).toFixed(0);\n const x2SpeedValue = (minMaxMph.min + (minMaxDelta / 100) * sliderCoords.x2).toFixed(0);\n const x2SliderRightCoord = 100 - sliderCoords.x2 < 5 ? 5 : 100 - sliderCoords.x2;\n return (\n
    \n

    \n {title}\n

    \n \n {isActive && (\n <>\n e.preventDefault()}>
    \n e.preventDefault()}>\n \n {x1SpeedValue} mph\n \n \n {x2SpeedValue} mph\n \n \n )}\n Min: {isActive ? minMaxMph.min : '-'} mph\n Max: {isActive ? minMaxMph.max : '-'} mph\n \n \n );\n};\n\nconst SpeedGroup = ({\n data,\n groupData,\n currentFilterValues,\n handleFilterChange,\n filteredTeamName,\n filteredPlayerFullName\n}) => {\n const { groupName } = groupData;\n\n const teamName = currentFilterValues.pitcher === 'team' ? filteredTeamName : null;\n const playerFullName = currentFilterValues.pitcher === 'pitcher' ? filteredPlayerFullName : null;\n\n const filteredData = useFilterBatterGroupData(data, currentFilterValues, 'speed', teamName, playerFullName);\n\n const pitchClasses = data.preview.pitch_classes;\n\n // Summary speeds by pitchClass\n const summary = filteredData\n .filter(cur => pitchClasses[cur.pitch_info.pitch_type] !== '')\n .reduce(\n (sum, cur) => {\n const formattedSpeed = Math.round(cur.pitch_info.speed * 2.24 * 100) / 100;\n const pitchClass = pitchClasses[cur.pitch_info.pitch_type];\n\n sum[pitchClass].speeds.push(formattedSpeed);\n\n return sum;\n },\n {\n Fastball: { title: 'Fastballs', r: 217, g: 43, b: 51, speeds: [] },\n Breaking: { title: 'Breaking', r: 36, g: 168, b: 215, speeds: [] },\n Offspeed: { title: 'Offspeed', r: 141, g: 181, b: 142, speeds: [] }\n }\n );\n\n return (\n
    \n

    Pitch speed

    \n {Object.entries(summary).map((pitchClass, i) => (\n 0}\n JSONspeeds={JSON.stringify(pitchClass[1].speeds)}\n />\n ))}\n
    \n );\n};\n\nconst GroupItem = ({ data, groupName, handleFilterClick, currentFilterValues }) => {\n const { name, absValue, absValueTotal, relValue, staticText } = data;\n const isRelValueNumber = typeof relValue === 'number' && !isNaN(relValue);\n\n const dataValue = isRelValueNumber ? `${relValue}%` : isNaN(relValue) ? '-' : relValue;\n return (\n \n );\n};\n\nconst Group = ({\n data,\n groupData,\n currentFilterValues,\n handleFilterClick,\n filteredTeamName,\n filteredPlayerFullName\n}) => {\n const { title, groupName, items } = groupData;\n\n const teamName = currentFilterValues.pitcher === 'team' ? filteredTeamName : null;\n const playerFullName = currentFilterValues.pitcher === 'pitcher' ? filteredPlayerFullName : null;\n\n const filteredData = useFilterBatterGroupData(\n data,\n currentFilterValues,\n groupName,\n teamName,\n playerFullName\n );\n\n const total =\n groupName === 'swing' || groupName === 'contact'\n ? filteredData\n .map(pitch => pitch.result)\n .filter(group =>\n groupName === 'swing'\n ? group[FIELD_NAMES[groupName]['Miss']] || group[FIELD_NAMES[groupName]['Contact']]\n : group[FIELD_NAMES[groupName]['Base hits & Hard hit']] ||\n group[FIELD_NAMES[groupName]['Slow hit']] ||\n group[FIELD_NAMES[groupName]['Fly']] ||\n group[FIELD_NAMES[groupName]['Line']] ||\n group[FIELD_NAMES[groupName]['Grounds']]\n )\n : groupName === 'type'\n ? filteredData.map(pitch => pitch.pitch_info)\n : filteredData.map(pitch => pitch[groupName]);\n\n const totalLength = total.length;\n\n const modifiedGroupData = items.map(({ name, staticText }) => {\n const paramName = FIELD_NAMES[groupName][name];\n\n const getAbsValue = () => {\n if (paramName === 'all') return totalLength;\n\n if (groupName === 'type') {\n const { pitch_classes: pitchClasses } = data.preview;\n\n return total.filter(({ pitch_type: pitchType }) => paramName === pitchClasses[pitchType]).length;\n }\n\n return total.filter(group => group[paramName]).length;\n };\n\n const absValue = getAbsValue();\n\n return {\n name,\n staticText,\n absValue,\n absValueTotal: totalLength,\n relValue:\n paramName === 'all' ? 100 : totalLength > 0 ? +((absValue * 100) / totalLength).toFixed(1) : 0 ?? '-'\n };\n });\n\n // const leftHandedRelValue = rightHandedRelValue !== '-' ? 100 - rightHandedRelValue : '-';\n\n return (\n
    \n

    {title}

    \n {modifiedGroupData.map((item, i) => (\n \n ))}\n
    \n );\n};\n\nconst TextGroup = ({ setTextGroupFilter, data }) => {\n function getSortedArr(set) {\n return Array.from(set).sort((a, b) => (a > b ? 1 : -1));\n }\n\n const uniqueValues = useMemo(() => {\n const defaultValues = { teams: new Set(), games: new Set(), pitchers: new Set() };\n const tempData = data.reduce((sum, cur) => {\n const {\n team_name: teamName,\n 'pitcher name': pitcherName,\n 'pitcher surname': pitcherSurname\n } = cur.pitcher;\n const { date } = cur.pitch_info;\n\n sum.teams.add(teamName);\n sum.games.add(`${date.slice(8, 10)}/${date.slice(5, 7)} ${teamName}`);\n sum.pitchers.add(`${pitcherName} ${pitcherSurname}`);\n\n return sum;\n }, defaultValues);\n\n tempData.teams = getSortedArr(tempData.teams);\n tempData.games = getSortedArr(tempData.games);\n tempData.pitchers = getSortedArr(tempData.pitchers);\n\n return tempData;\n }, [data]);\n return (\n
    \n
    \n

    Team

    \n {\n setTextGroupFilter(prev => ({ ...prev, team: value }));\n }}\n handleClick={value => {\n setTextGroupFilter(prev => ({ ...prev, team: value }));\n }}\n listValues={uniqueValues.teams}\n isAllOption\n />\n
    \n
    \n

    Game

    \n {\n setTextGroupFilter(prev => ({ ...prev, game: value }));\n }}\n handleClick={value => {\n setTextGroupFilter(prev => ({ ...prev, game: value }));\n }}\n listValues={uniqueValues.games}\n isAllOption\n />\n
    \n
    \n

    Pitcher

    \n {\n setTextGroupFilter(prev => ({ ...prev, pitcher: value }));\n }}\n handleClick={value => {\n setTextGroupFilter(prev => ({ ...prev, pitcher: value }));\n }}\n listValues={uniqueValues.pitchers}\n isAllOption\n />\n
    \n
    \n );\n};\n\nconst CustomGroup = ({ data, currentFilterValues, handleFilterClick }) => {\n const againstFilteredData =\n data.pitches_all?.filter(\n batt =>\n (currentFilterValues.count === 'all' ? true : batt.count[currentFilterValues.count]) &&\n (currentFilterValues.zone === 'all' ? true : batt.zone[currentFilterValues.zone]) &&\n (currentFilterValues.result === 'all' ? true : batt.result[currentFilterValues.result]) &&\n (currentFilterValues.swing === 'all' ? true : batt.result[currentFilterValues.swing]) &&\n (currentFilterValues.contact === 'all' ? true : batt.result[currentFilterValues.contact])\n ) || [];\n\n const totalPitchers = againstFilteredData.reduce((sum, cur) => {\n const existPitcherIndex = sum.findIndex(pitcher => pitcher.h_id === cur.pitcher.h_id);\n existPitcherIndex === -1 && sum.push(cur.pitcher);\n\n return sum;\n }, []);\n\n const leftHandedPitchers = totalPitchers.filter(pitcher => pitcher.LHP);\n const rightHandedPitchersLength = totalPitchers.length - leftHandedPitchers.length;\n\n const rightHandedRelValue =\n totalPitchers.length > 0\n ? +((rightHandedPitchersLength * 100) / totalPitchers.length).toFixed(1)\n : 0 ?? '-';\n const leftHandedRelValue =\n totalPitchers.length > 0\n ? +((leftHandedPitchers.length * 100) / totalPitchers.length).toFixed(1)\n : 0 ?? '-';\n\n const customGroupData = {\n title: 'Against who',\n items: [\n {\n name: 'All pitchers',\n absValue: totalPitchers.length,\n absValueTotal: totalPitchers.length,\n relValue: 100,\n staticText: 'players'\n },\n {\n name: 'Right handed',\n absValue: rightHandedPitchersLength,\n absValueTotal: totalPitchers.length,\n relValue: rightHandedRelValue,\n staticText: 'players'\n },\n {\n name: 'Left handed',\n absValue: leftHandedPitchers.length,\n absValueTotal: totalPitchers.length,\n relValue: leftHandedRelValue,\n staticText: 'players'\n }\n ]\n };\n\n const { title, items } = customGroupData;\n return (\n
    \n

    {title}

    \n {items.map((item, i) => (\n \n ))}\n
    \n );\n};\n\nconst LeftColumnOptions = ({\n battingData = {},\n data = {},\n handleFilterClick,\n handleSpeedFilterChange,\n currentFilterValues,\n filteredTeamName,\n filteredPlayerFullName,\n handleTeamNameChange,\n handlePlayerNameChange,\n setTextGroupFilter,\n isDatasetFilterVisible,\n setDatasetFilterVisible\n}) => {\n const groupsArr = [\n {\n title: 'Count',\n groupName: 'count',\n\n items: [\n {\n name: 'Any count',\n staticText: 'pitches'\n },\n { name: 'First pitches', staticText: 'pitches' },\n { name: 'Close to BB', staticText: 'pitches' },\n { name: '2 strikes', staticText: 'pitches' },\n { name: 'Other', staticText: 'pitches' }\n ]\n },\n {\n title: 'Pitch type',\n groupName: 'type',\n items: [\n { name: 'All pitches', staticText: 'pitches' },\n { name: 'Fastballs', staticText: 'pitches' },\n { name: 'Breaking', staticText: 'pitches' },\n { name: 'Offspeed', staticText: 'pitches' }\n ]\n },\n {\n title: 'Pitch speed',\n groupName: 'speed',\n items: [\n { title: 'Fastballs', r: 217, g: 43, b: 51, bgColor: '#D92B33' },\n { title: 'Breaking', r: 36, g: 168, b: 215, bgColor: '#24A8D7' },\n { title: 'Offspeed', r: 141, g: 181, b: 142, bgColor: '#8DB58E' }\n ]\n },\n {\n title: 'Pitch zone',\n groupName: 'zone',\n items: [\n { name: 'Any zone', staticText: 'pitches' },\n { name: 'Low', staticText: 'pitches' },\n { name: 'High', staticText: 'pitches' },\n { name: 'Outside', staticText: 'pitches' },\n { name: 'Inside', staticText: 'pitches' }\n ]\n },\n {\n title: 'Result',\n groupName: 'result',\n items: [\n { name: 'All pitches', staticText: 'pitches' },\n { name: 'Swing', staticText: 'pitches' },\n { name: 'Take', staticText: 'pitches' }\n ]\n },\n {\n title: ' ',\n groupName: 'swing',\n items: [\n { name: 'All swings', staticText: 'swings' },\n { name: 'Miss', staticText: 'swings' },\n { name: 'Contact', staticText: 'swings' }\n ]\n },\n {\n title: ' ',\n groupName: 'contact',\n items: [\n { name: 'All contacts', staticText: 'contacts' },\n { name: 'Base hits & Hard hit', staticText: 'contacts' },\n { name: 'Slow hit', staticText: 'contacts' },\n { name: 'Fly', staticText: 'contacts' },\n { name: 'Line', staticText: 'contacts' },\n { name: 'Grounds', staticText: 'contacts' }\n ]\n }\n ];\n\n const handleCrossClick = () => {\n setDatasetFilterVisible(false);\n };\n\n const outerWrapperClasses = classNames(cl.leftColumnOuterWrapper, {\n [cl.visible]: isDatasetFilterVisible\n });\n return (\n
    \n
    \n

    \n Dataset filter\n \n

    \n
    \n \n\n \n {groupsArr.map((group, i) => {\n if (group.groupName === 'speed')\n return (\n \n );\n return (\n \n );\n })}\n
    \n
    \n
    \n );\n};\n\nconst RightColumnGraphs = ({\n currentFilterValues,\n filteredTeamName,\n filteredPlayerFullName,\n data,\n setDatasetFilterVisible\n}) => {\n const { preview } = data;\n const { pitch_classes: pitchClasses } = preview;\n\n const { name: playerName, surname: playerSurname } = useSelector(\n state => state.playerStats.playerStatsData\n );\n\n const isMobile = useSelector(s => s.shared.isMobile);\n\n const teamName = currentFilterValues.batter === 'team' ? filteredTeamName : null;\n const playerFullName = currentFilterValues.batter === 'batter' ? filteredPlayerFullName : null;\n\n const filteredData = useFilterBatterGroupData(data, currentFilterValues, 'all', teamName, playerFullName);\n\n // Count and speed values\n const relValuesData = filteredData.reduce((sum, pitch) => {\n const { pitch_type } = pitch.pitch_info;\n\n const pitchClass = pitchClasses[pitch_type];\n\n if (sum[pitchClass] !== undefined) {\n sum[pitchClass].count += 1;\n sum[pitchClass].pitches.push(pitch);\n\n return sum;\n }\n\n sum[pitchClass] = {\n count: 1,\n pitches: [pitch]\n };\n\n return sum;\n }, {});\n\n const handleMobileDatasetFilterClick = () => {\n setDatasetFilterVisible(true);\n };\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n {(currentOption, setCurrentOption) => (\n <>\n \n \n \n )}\n \n\n \n {(\n currentOption,\n setCurrentOption,\n currentOption2,\n setCurrentOption2,\n currentOption3,\n setCurrentOption3\n ) => (\n <>\n \n \n \n )}\n \n
    \n );\n};\n\nconst FilteredGraphs = ({ battingData }) => {\n const [currentFilterValues, setCurrentFilterValues] = useState({\n pitcher: 'all',\n count: 'all',\n type: 'all',\n speed: {\n '': { min: 0, max: 10000 },\n Fastball: { min: 0, max: 10000 },\n Breaking: { min: 0, max: 10000 },\n Offspeed: { min: 0, max: 10000 }\n },\n zone: 'all',\n result: 'all',\n swing: 'all',\n contact: 'all'\n });\n\n const [filteredTeamName, setFilteredTeamName] = useState('');\n const [filteredPlayerFullName, setFilteredPlayerFullName] = useState('');\n\n const [textGroupFilter, setTextGroupFilter] = useState({ team: '', game: '', pitcher: '' });\n\n const [isDatasetFilterVisible, setDatasetFilterVisible] = useState(false);\n\n useEffect(() => () => (document.body.style = ''), []);\n\n useEffect(() => {\n if (isDatasetFilterVisible) {\n document.body.style.overflow = 'hidden';\n document.body.style.touchAction = 'none';\n return;\n }\n\n document.body.style = '';\n }, [isDatasetFilterVisible]);\n\n const filteredData = useMemo(() => {\n function checkFieldIdentity(comparedFields, fieldFilter, exactComparing = true) {\n if (fieldFilter === '') return true;\n\n const filterArr = fieldFilter.split(' ');\n\n return filterArr.reduce((sum, word) => {\n if (\n !exactComparing &&\n !comparedFields.some(\n field => String(field).slice(0, word.length).toLowerCase() === String(word).toLowerCase()\n )\n ) {\n sum = false;\n }\n\n if (\n exactComparing &&\n !comparedFields.some(field => String(field).toLowerCase() === String(word).toLowerCase())\n ) {\n sum = false;\n }\n\n return sum;\n }, true);\n }\n\n function gameDataCheck(gameFilter, { date }, { team_name: teamName }) {\n if (gameFilter === '') return true;\n\n const filteredWords = gameFilter.split(' ');\n\n return filteredWords.reduce((result, word) => {\n if (result === false) return result;\n\n const regex = /([0-3][0-9]\\/[0-1][0-9])/;\n const matchedRegex = word.match(regex);\n if (matchedRegex) {\n const day = matchedRegex[0].slice(0, 2);\n const month = matchedRegex[0].slice(3, 5);\n\n const dateDay = date.slice(8, 10);\n const dateMonth = date.slice(5, 7);\n\n if (day !== dateDay || month !== dateMonth) return false;\n return true;\n }\n\n if (word === '') return result;\n\n return teamName.toLowerCase() === word.toLowerCase();\n }, true);\n }\n\n const { pitches_all: pitchesAll } = battingData;\n\n const newPitchesAll = pitchesAll.filter(({ pitcher, pitch_info: pitchInfo }) => {\n const { team: teamFilter, game: gameFilter, pitcher: pitcherFilter } = textGroupFilter;\n\n return (\n checkFieldIdentity([pitcher.team_name], teamFilter) &&\n gameDataCheck(gameFilter, pitchInfo, pitcher) &&\n // checkFieldIdentity([pitchInfo.game_id], gameFilter) &&\n checkFieldIdentity([pitcher['pitcher name'], pitcher['pitcher surname']], pitcherFilter)\n );\n });\n\n return { preview: battingData.preview, pitches_all: newPitchesAll };\n }, [textGroupFilter, battingData]);\n\n function handleFilterClick(groupName, value) {\n setCurrentFilterValues(prev => ({ ...prev, [groupName]: value }));\n }\n function handleSpeedFilterChange(pitchClassName, value) {\n let { min: mSValueMin, max: mSValueMax } = value;\n mSValueMin /= 2.24;\n mSValueMax /= 2.24;\n\n setCurrentFilterValues(prev => ({\n ...prev,\n speed: { ...prev.speed, [pitchClassName]: { min: mSValueMin, max: mSValueMax } }\n }));\n }\n\n const handleTeamNameChange = name => {\n setFilteredTeamName(name);\n };\n const handlePlayerNameChange = name => {\n setFilteredPlayerFullName(name);\n };\n\n return (\n
    \n \n \n
    \n );\n};\n\nexport default FilteredGraphs;\n","import React from 'react';\nimport cl from './BatterContentGraphs.module.scss';\nimport Banner from './Banner/Banner';\nimport FilteredGraphs from './FilteredGraphs/FilteredGraphs';\n\nconst BatterContentGraphs = ({ battingData }) => {\n const isFilteredGraphs = !!battingData;\n\t\n return (\n
    \n \n {isFilteredGraphs && }\n
    \n );\n};\n\nexport default BatterContentGraphs;\n","import React, { useContext } from 'react';\nimport cl from './Content.module.scss';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setTableType, setPlayerCurrentTeam } from 'redux/playerStatsReducer';\nimport { setCurrentLeague } from 'redux/gamesReducer';\nimport ContentMobilePlayerInfo from './ContentMobilePlayerInfo';\nimport PitcherContentGraphs from '../PitcherContentGraphs/PitcherContentGraphs';\nimport ContentTables from '../ContentTables/ContentTables';\nimport { PlayerYearsContext } from 'context';\nimport BatterContentGraphs from '../BatterContentGraphs/BatterContentGraphs';\n\nconst Content = ({ pitchesData, battingData }) => {\n const { playerYears, calculateTeamsArray } = useContext(PlayerYearsContext);\n\n const {\n playerStatsData: statsData,\n playerCurrentTeam: currentTeam,\n tableType\n } = useSelector(state => state.playerStats);\n const currentLeague = useSelector(state => state.games.currentLeague);\n const isMobile = useSelector(state => state.shared.isMobile);\n const dispatch = useDispatch();\n\n const handleTableOptionClick = option => {\n const teamsArray = calculateTeamsArray(option);\n\n dispatch(setPlayerCurrentTeam(teamsArray.length > 1 ? 'All teams' : teamsArray[0]));\n dispatch(setTableType(option));\n };\n\n const filteredLeagues =\n playerYears === 'All years'\n ? currentTeam === 'All teams'\n ? statsData.leagues.filter(league => league.teams.find(team => team[tableType.toLowerCase()]))\n : statsData.leagues.filter(league =>\n league.teams.find(team => team.name === currentTeam && team[tableType.toLowerCase()])\n )\n : currentTeam === 'All teams'\n ? statsData.leagues.filter(\n league => league.year === playerYears && league.teams.find(team => team[tableType.toLowerCase()])\n )\n : statsData.leagues.filter(\n league =>\n league.year === playerYears &&\n league.teams.find(team => team.name === currentTeam && team[tableType.toLowerCase()])\n );\n\n const selectedLeague = statsData.leagues.find(league => league.id === currentLeague.id);\n\n const filteredLeague =\n currentLeague.id === -1\n ? null\n : currentTeam === 'All teams'\n ? selectedLeague.teams\n : selectedLeague.teams.find(team => team.name === currentTeam && team[tableType.toLowerCase()]) || [];\n\n const handleLeagueClick = league => () => {\n if (playerYears === 'All years') return;\n dispatch(setCurrentLeague(league));\n\n if (league.id === -1) {\n const teamsArr = Array.from(\n statsData.leagues\n .filter(league => league.year === playerYears)\n .reduce((sum, league) => {\n league.teams.forEach(team => sum.add(team.name));\n return sum;\n }, new Set())\n );\n\n dispatch(setPlayerCurrentTeam(teamsArr.length > 1 ? 'All teams' : teamsArr[0]));\n return;\n }\n\n dispatch(setPlayerCurrentTeam(league.teams.length > 1 ? 'All teams' : league.teams[0].name));\n };\n\n //Table options calculating\n function getSortedTableOptions() {\n const options = [];\n const anotherTableType = tableType === 'Batting' ? 'Pitching' : 'Batting';\n\n //All leagues\n if (currentLeague.id === -1) {\n if (filteredLeagues.length > 0) options.push(tableType);\n\n const anotherTableTypeFilteredLeagues =\n playerYears === 'All years'\n ? currentTeam === 'All teams'\n ? statsData.leagues.filter(league =>\n league.teams.find(team => team[anotherTableType.toLowerCase()])\n )\n : statsData.leagues.filter(league =>\n league.teams.find(team => team.name === currentTeam && team[anotherTableType.toLowerCase()])\n )\n : currentTeam === 'All teams'\n ? statsData.leagues.filter(\n league =>\n league.year === playerYears && league.teams.find(team => team[anotherTableType.toLowerCase()])\n )\n : statsData.leagues.filter(\n league =>\n league.year === playerYears &&\n league.teams.find(team => team.name === currentTeam && team[anotherTableType.toLowerCase()])\n );\n\n if (anotherTableTypeFilteredLeagues.length > 0) options.push(anotherTableType);\n\n //Sort options\n options.sort((a, b) => (a > b ? 1 : -1));\n return options;\n }\n\n //Selected league\n const filteredLeague = selectedLeague.teams.find(team => team.name === currentTeam);\n\n if (filteredLeague) {\n filteredLeague.batting && options.push('Batting');\n filteredLeague.pitching && options.push('Pitching');\n } else {\n selectedLeague.teams.find(team => team.batting) && options.push('Batting');\n selectedLeague.teams.find(team => team.pitching) && options.push('Pitching');\n }\n\n return options;\n }\n\n const isBatterGraphs =\n (tableType === 'Batting' || tableType === 'Running' || tableType === 'Fielding') &&\n getSortedTableOptions().length !== 0 &&\n statsData.batting_banner.teams.length > 0;\n\n const isPitcherGraphs =\n tableType === 'Pitching' &&\n getSortedTableOptions().length !== 0 &&\n statsData.pitcher_banner.teams.length > 0;\n return (\n
    \n
    \n
    \n {Object.keys(statsData).length === 0 ? (\n <>\n ) : (\n <>\n {isMobile && }\n
    \n

    \n {statsData.pos || '—'} | B/T: {statsData.bat_hand}/{statsData.throw_hand} |{' '}\n {statsData.height} {statsData.weight}LBS | Age: {new Date().getFullYear() - statsData.yob}\n

    \n \n
    \n {isBatterGraphs && }\n {isPitcherGraphs && }\n \n )}\n
    \n
    \n
    \n );\n};\n\nexport default Content;\n","import { useState, useRef, useEffect } from 'react';\nimport { axiosInstance, axiosCancelToken } from 'axios-instance';\n\nconst useFetch = url => {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState('');\n\n const cancelTokenRef = useRef();\n\n useEffect(\n () => () => {\n cancelTokenRef.current?.cancel(null);\n },\n []\n );\n\n async function fetchData() {\n cancelTokenRef.current = axiosCancelToken.source();\n\n try {\n setIsLoading(true);\n const response = await axiosInstance.get(url, {\n cancelToken: cancelTokenRef.current.token,\n timeout: 10000\n });\n setError('');\n\n return response;\n } catch (err) {\n setError(err.message);\n return err;\n } finally {\n setIsLoading(false);\n }\n }\n\n return { fetchData, isLoading, error };\n};\n\nexport default useFetch;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setCurrentLeague } from 'redux/gamesReducer';\nimport { setPlayerStatsData, setPlayerCurrentTeam as setCurrentTeam } from 'redux/playerStatsReducer';\nimport { setTableMode } from 'redux/statsReducer';\nimport { useParams } from 'react-router-dom';\nimport Header from 'components/PlayerStats/Header/Header';\nimport Content from 'components/PlayerStats/Content/Content';\nimport ErrorLoader from 'components/UI/loaders/ErrorLoader/ErrorLoader';\nimport Loader from 'components/UI/loaders/Loader/Loader';\nimport { PlayerYearsContext } from 'context';\nimport useFetch from 'hooks/useFetch';\n\nconst PlayerStats = () => {\n const { playerId } = useParams();\n\n const currentYear = useSelector(s => s.shared.currentYear);\n\n const [playerYears, setPlayerYears] = useState(currentYear);\n const [pitchesData, setPitchesData] = useState(null);\n const [battingData, setBattingData] = useState(null);\n\n const currentLeague = useSelector(s => s.games.currentLeague);\n const playerTableMode = useSelector(s => s.playerStats.tableType);\n const playerStatsData = useSelector(s => s.playerStats.playerStatsData);\n\n const dispatch = useDispatch();\n\n const firstMountRef = useRef(true);\n\n const {\n fetchData: fetchStats,\n isLoading: isStatsLoading,\n error: statsError\n } = useFetch(`/player?id=${playerId}`);\n\n const urlPlayerYears = playerYears !== 'All years' ? playerYears : -1;\n\n const { fetchData: fetchPitches } = useFetch(`/pitcher_metrix?id=${playerId}&year=${urlPlayerYears}`);\n const { fetchData: fetchBatting } = useFetch(`/batting_metrix?id=${playerId}&year=${urlPlayerYears}`);\n\n useEffect(\n () => () => {\n dispatch(setPlayerStatsData({}));\n dispatch(setCurrentTeam(null));\n },\n // eslint-disable-next-line\n []\n );\n\n useEffect(() => {\n if (firstMountRef.current === true) return;\n\n dispatch(setTableMode(playerTableMode));\n // eslint-disable-next-line\n }, [playerTableMode]);\n\n useEffect(() => {\n const isLeague = leagues => leagues.find(league => league.id === currentLeague.id);\n\n (async () => {\n try {\n const response = await fetchStats();\n\n !isLeague(response.data.leagues) && dispatch(setCurrentLeague({ id: -1, name: 'All', title: 'All' }));\n dispatch(setPlayerStatsData(response.data));\n } catch ({ message }) {\n console.warn(message);\n }\n })();\n\n if (firstMountRef.current === true) {\n firstMountRef.current = false;\n return;\n }\n\n dispatch(setCurrentLeague({ id: -1, name: 'All', title: 'All' }));\n\n // eslint-disable-next-line\n }, [playerId]);\n\n useEffect(() => {\n (async () => {\n try {\n const pitchesResponse = await fetchPitches();\n const battingResponse = await fetchBatting();\n\n setPitchesData(pitchesResponse.data);\n setBattingData(battingResponse.data);\n } catch ({ message }) {\n console.warn(message);\n }\n })();\n\n // eslint-disable-next-line\n }, [playerYears]);\n\n function calculateTeamsArray(tableMode) {\n const selectedLeague = playerStatsData.leagues.find(league => league.id === currentLeague.id);\n\n return playerYears === 'All years'\n ? Array.from(\n playerStatsData.leagues\n .filter(league => league.teams.find(team => team[tableMode.toLowerCase()]))\n .reduce((sum, league) => {\n league.teams.forEach(team => sum.add(team.name));\n return sum;\n }, new Set())\n )\n : currentLeague.id === -1\n ? Array.from(\n playerStatsData.leagues\n .filter(\n league =>\n league.year === playerYears && league.teams.find(team => team[tableMode.toLowerCase()])\n )\n .reduce((sum, league) => {\n league.teams.forEach(team => sum.add(team.name));\n return sum;\n }, new Set())\n )\n : selectedLeague?.teams\n ? selectedLeague.teams.length > 1\n ? selectedLeague.teams.reduce((sum, team) => {\n sum.push(team.name);\n return sum;\n }, [])\n : [selectedLeague.teams[0].name]\n : [];\n }\n\n // Fetch error handling\n if (statsError !== '') return ;\n\n // Stats loader\n if (isStatsLoading) return ;\n\n // Empty stats render\n if (Object.keys(playerStatsData).length === 0) return <>;\n\n // Main render\n return (\n \n
    \n \n \n );\n};\n\nexport default PlayerStats;\n","const defaultState = {\n count: 7,\n\tisStars: true,\n\tisEvents: true\n};\n\nconst SET_COUNT = 'SET_COUNT';\nconst SET_IS_STARS = 'SET_IS_STARS';\nconst SET_IS_EVENTS = 'SET_IS_EVENTS';\n\nexport const threeReducer = (state = defaultState, action) => {\n switch (action.type) {\n case SET_COUNT:\n return { ...state, count: action.payload };\n case SET_IS_STARS:\n return { ...state, isStars: action.payload };\n case SET_IS_EVENTS:\n return { ...state, isEvents: action.payload };\n default:\n return state;\n }\n};\n\nexport const setCount = payload => ({ type: SET_COUNT, payload });\nexport const setIsStars = payload => ({ type: SET_IS_STARS, payload });\nexport const setIsEvents = payload => ({ type: SET_IS_EVENTS, payload });","export default __webpack_public_path__ + \"static/media/sun_texture.4b569137.jpg\";","export default __webpack_public_path__ + \"static/media/mercury_texture.88fde76f.jpg\";","export default __webpack_public_path__ + \"static/media/venus_texture.59b4ebd0.jpg\";","export default __webpack_public_path__ + \"static/media/earth_texture.6c0e8cf7.jpg\";","export default __webpack_public_path__ + \"static/media/mars_texture.bb07b073.jpg\";","export default __webpack_public_path__ + \"static/media/jupiter_texture.3bdf53c1.jpg\";","export default __webpack_public_path__ + \"static/media/saturn_texture.5200f189.jpg\";","export default __webpack_public_path__ + \"static/media/uranus_texture.43f8336c.jpg\";","import React, { Suspense, lazy } from 'react';\nimport { Canvas } from '@react-three/fiber';\nimport Galaxy from './Galaxy';\nimport Buttons from './Buttons';\nimport { useSelector } from 'react-redux';\n// import { Model } from './Car';\nimport Loader from 'components/UI/loaders/Loader/Loader';\nimport { OrbitControls } from '@react-three/drei';\n// (async () => {\n\nconst Model = lazy(() => import('./Stadium'));\n// })();\n\n// (async () => {\n// const { Component1 } = await import('./Component1');\n// })();\n\n// const MyComponent = lazy(() => import('./MyComponent'))\nconst CanvasComp = ({ cl }) => {\n // const count = useSelector(state => state.three.count);\n // const isStars = useSelector(state => state.three.isStars);\n const isEvents = useSelector(state => state.three.isEvents);\n\n return (\n <>\n }>\n \n {/* */}\n {/* */}\n \n {/* */}\n \n \n \n {/* */}\n \n );\n};\n\nexport default CanvasComp;\n","import React from 'react';\nimport CanvasComp from './CanvasComp';\nimport cl from './Content.module.scss';\n\nconst Content = () => {\n return (\n
    \n {/* */}\n \n
    \n );\n};\n\nexport default Content;\n","import Content from 'components/ThreePage/Content/Content';\nimport React from 'react';\n\nconst ThreePage = () => {\n return ;\n};\n\nexport default ThreePage;\n","import React, { useLayoutEffect } from 'react';\nimport './App.scss';\nimport { BrowserRouter as Router, Routes, Route, Navigate, useNavigate, useLocation } from 'react-router-dom';\nimport { QueryParamProvider } from 'use-query-params';\nimport NavBar from './components/NavBar/NavBar';\nimport Game from './pages/Game';\nimport Games from 'pages/Games';\nimport TeamGames from 'pages/TeamGames';\nimport Stats from 'pages/Stats';\nimport PlayerStats from 'pages/PlayerStats';\nimport { useDispatch } from 'react-redux';\nimport { setIsMobile, setMobileOrientation } from 'redux/sharedReducer';\nimport ThreePage from 'pages/ThreePage';\n\nconst App = () => {\n const dispatch = useDispatch();\n\n useLayoutEffect(() => {\n function IsMobileCard() {\n let check = false;\n\n (function (a) {\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\n a\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(\n a.substr(0, 4)\n )\n )\n check = true;\n })(navigator.userAgent || navigator.vendor || window.opera);\n\n return check;\n }\n\n dispatch(setIsMobile(IsMobileCard()));\n\n // if (window.innerHeight > 768 && window.innerHeight < window.innerWidth)\n // document.documentElement.style.zoom = document.documentElement.clientHeight / 820;\n // document.documentElement.style.zoom = window.innerHeight / 820;\n\n if (!IsMobileCard()) return;\n\n const orientationChangeHandler = () => {\n setTimeout(() => {\n const mql = window.matchMedia('(orientation: portrait)');\n dispatch(setMobileOrientation(mql.matches ? 90 : 0));\n }, 200);\n };\n\n window.addEventListener('orientationchange', orientationChangeHandler);\n\n return () => {\n window.removeEventListener('orientationchange', orientationChangeHandler);\n };\n // eslint-disable-next-line\n }, []);\n\n const RouteAdapter = ({ children }) => {\n const navigate = useNavigate();\n const location = useLocation();\n\n const adaptedHistory = React.useMemo(\n () => ({\n replace(location) {\n navigate(location, { replace: true, state: location.state });\n },\n push(location) {\n navigate(location, { replace: false, state: location.state });\n }\n }),\n [navigate]\n );\n return children({ history: adaptedHistory, location });\n };\n\n // if (/Android|webOS|iPhone|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Mobile|Opera Mini/i.test(navigator.userAgent)) {\n // // Take the user to a different screen here.\n // \talert('Mobile!')\n // } else {\n\n // \talert('Desktop!')\n // }\n\n return (\n \n \n \n \n } />\n } />\n } />\n } />\n } />\n } />\n } />\n \n \n \n );\n};\n\nexport default App;\n","import { combineReducers } from 'redux';\nimport { gameReducer } from './gameReducer';\nimport { gamesReducer } from './gamesReducer';\nimport { playerStatsReducer } from './playerStatsReducer';\nimport { sharedReducer } from './sharedReducer';\nimport { statsReducer } from './statsReducer';\nimport { teamGamesReducer } from './teamGamesReducer';\nimport { threeReducer } from './threeReducer';\n\nconst rootReducer = combineReducers({\n game: gameReducer,\n games: gamesReducer,\n teamGames: teamGamesReducer,\n\tstats: statsReducer,\n\tplayerStats: playerStatsReducer,\n shared: sharedReducer,\n\tthree: threeReducer\n});\n\nexport default rootReducer;\n","import { createStore, applyMiddleware, compose } from 'redux';\nimport thunk from 'redux-thunk';\nimport rootReducer from './rootReducer';\n\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\nconst store = createStore(\n rootReducer,\n process.env.NODE_ENV === 'development' ? composeEnhancers(applyMiddleware(thunk)) : applyMiddleware(thunk)\n);\n// const store = createStore(rootReducer, composeEnhancers(applyMiddleware(thunk)));\n\nexport default store;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport { Provider } from 'react-redux';\nimport store from './redux'\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}