{"version":3,"file":"vendor-canvas-DYy4hma_.js","sources":["../../../../packages/kognia-ui/src/theme/colors.ts","../../../../packages/kognia-ui/src/theme/index.tsx","../../../../packages/kognia-ui/src/theme/animations.ts","../../../../packages/kognia-ui/src/theme/shadows.ts","../../../../packages/kognia-ui/src/theme/typography.ts","../../../../packages/overlay-generator/src/utils/decorators.ts","../../../../packages/overlay-generator/src/types.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/glyphs/ArrowHighlightGlyph.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/interface.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/utils.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/ArrowHighlight.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/glyphs/CircleAreaGlyph.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/PlayerCircleAreaHighlight.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/CircleClosestRivalHighlight.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/assets/Circle.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/assets/CircleDashed.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/assets/SemiCircle.ts","../../../../packages/overlay-generator/src/node-script/checkEnv.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/assets/index.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/glyphs/HighlightGlyph.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/glyphs/PolygonGlyph.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/DefensiveLinePlayerDepthHighlight.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/HighlightCirclePlayer.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/glyphs/LineGlyph.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/LineHighlight.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/glyphs/ArrowGlyph.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/LineToHalfwayWithArrow.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/LineWithArrow.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/PolygonArea.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/glyphs/ScatterGlyph.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/ScatterLine.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/glyphs/SemiCircleGlyph.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/SemiCircleHighlight.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/glyphs/PolylineGlyph.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/TeamPerimeter.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/WidthPlayerHighlight.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/StraightLineToEndPositionWithArrow.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/PlayersVerticalArrow.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/PolyLineWithArrowCurrentPosition.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/CircleAreaHighlight.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/overlay-elements/OverlayElementsFactory.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/utils.ts","../../../../packages/overlay-generator/src/overlay-canvas-renderer/index.ts"],"sourcesContent":["export enum Colors {\n white = '#FFFFFF',\n\n // Primary\n grape = '#291F7D',\n primary = '#5440F7',\n linkHover = '#4C3AE0',\n brandPastel = '#6857e4',\n lavender = '#BBB3FF',\n titanPurple = '#E8E6FF',\n melrose = '#F4F2FF',\n navy = '#111135',\n\n // Greys\n storm = '#6F738C',\n iron = '#CECED9',\n athens = '#EDEDF2',\n background = '#F5F5F7',\n ghost = '#E1E4E8',\n\n // Blues\n night = '#171928',\n shark = '#262940',\n midnight = '#0C257A',\n blue = '#205CFA',\n bluePastel = '#3073F5',\n blueRiver = '#22A7F1',\n cloud = '#98B6ED',\n\n frog = '#175954',\n // Greens\n green = '#0BB07B',\n grass = '#2B9890',\n fresco = '#B5D3D3',\n fountain = '#47C4BB',\n aqua = '#5AE2DE',\n aquaPastel = '#86E3E3',\n river = '#DBFFFD',\n twilight = '#F7FFFF',\n sky = '#F0FFFE',\n\n // Reds\n red = '#DD2727',\n maroon = '#800D0D',\n strawberry = '#FFEFF0',\n\n // Oranges\n orange = '#FFAD0D',\n peach = '#FACD75',\n carrot = '#FFF4DD',\n dawn = '#FFFBF3',\n}\n","import { createTheme, alpha, type SimplePaletteColorOptions } from '@mui/material';\n\nimport { Colors } from './colors';\n\ndeclare module '@mui/material/styles' {\n interface Palette {\n tertiary: SimplePaletteColorOptions;\n quaternary: SimplePaletteColorOptions;\n }\n\n interface PaletteOptions {\n tertiary?: SimplePaletteColorOptions;\n quaternary?: SimplePaletteColorOptions;\n }\n}\n\ndeclare module '@mui/material/Button' {\n interface ButtonPropsVariantOverrides {\n underlined: true;\n }\n}\n\ndeclare module '@mui/material/Checkbox' {\n interface CheckboxPropsColorOverrides {\n tertiary: true;\n quaternary: true;\n }\n}\n\ndeclare module '@mui/material/SvgIcon' {\n interface SvgIconPropsColorOverrides {\n tertiary: true;\n quaternary: true;\n }\n}\n\nconst borderRadius = 4;\nexport const themeBaseSpacing = 8;\nexport const themeZIndexes = {\n mobileStepper: 1000,\n speedDial: 1050,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n popper: 6000,\n snackbar: 9001,\n tooltip: 9002,\n};\n\nexport const defaultFontFamily = \"'Rubik', sans-serif\";\n\nexport const theme = createTheme({\n spacing: themeBaseSpacing,\n breakpoints: {\n values: {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n },\n },\n palette: {\n mode: 'light',\n primary: {\n main: Colors.primary,\n light: Colors.lavender,\n },\n secondary: {\n main: Colors.storm,\n light: Colors.iron,\n },\n tertiary: {\n main: Colors.bluePastel,\n light: Colors.cloud,\n },\n quaternary: {\n main: Colors.fountain,\n light: Colors.fresco,\n },\n warning: {\n main: Colors.orange,\n light: Colors.dawn,\n },\n error: {\n main: Colors.red,\n light: Colors.strawberry,\n },\n info: {\n main: Colors.blue,\n light: Colors.sky,\n },\n success: {\n main: Colors.green,\n light: Colors.fresco,\n contrastText: Colors.white,\n },\n text: {\n primary: Colors.night,\n secondary: Colors.shark,\n disabled: Colors.iron,\n },\n divider: Colors.titanPurple,\n grey: {\n 200: Colors.athens,\n },\n },\n shape: {\n borderRadius: borderRadius,\n },\n zIndex: themeZIndexes,\n typography: {\n fontFamily: defaultFontFamily,\n },\n components: {\n MuiInputBase: {\n styleOverrides: {\n sizeSmall: {\n input: {\n height: '24px',\n },\n },\n },\n },\n MuiTooltip: {\n styleOverrides: {\n tooltip: {\n fontFamily: defaultFontFamily,\n lineHeight: `${themeBaseSpacing * 3}px`,\n backgroundColor: Colors.night,\n padding: `${themeBaseSpacing}px ${themeBaseSpacing * 2}px`,\n fontSize: 14,\n color: Colors.white,\n },\n },\n },\n MuiButton: {\n variants: [\n {\n props: { variant: 'underlined' },\n style: {\n fontWeight: 'normal',\n borderBottom: `1px solid ${Colors.night}`,\n textTransform: 'none',\n boxShadow: 'none',\n minWidth: 0,\n borderRadius: `${borderRadius}px ${borderRadius}px 0 0`,\n padding: `${themeBaseSpacing / 2}px ${themeBaseSpacing / 2}px`,\n '&:hover': {\n backgroundColor: alpha(Colors.lavender, 0.1),\n },\n },\n },\n {\n props: { variant: 'underlined', color: 'primary' },\n style: {\n color: Colors.primary,\n borderBottomColor: Colors.primary,\n '&:hover': {\n backgroundColor: alpha(Colors.primary, 0.1),\n },\n },\n },\n ],\n styleOverrides: {\n root: ({ ownerState }) => ({\n textTransform: 'none',\n boxShadow: 'none',\n borderRadius: 2,\n\n ...(ownerState.variant === 'outlined' && {\n backgroundColor: '#FFF',\n\n ...(ownerState.color === 'secondary' && {\n color: Colors.night,\n\n '&:hover': {\n backgroundColor: alpha('#FFF', 0.88),\n },\n }),\n }),\n }),\n },\n },\n MuiCheckbox: {\n defaultProps: {\n disableRipple: true,\n },\n styleOverrides: {\n root: {\n color: Colors.storm,\n },\n },\n },\n },\n});\n","import { keyframes } from '@mui/material';\nimport { Colors } from './colors';\n\nexport const animationDurations = {\n fast: '0.3s',\n medium: '0.6s',\n long: '0.9s',\n veryLong: '1.8s',\n};\n\nexport const animations = {\n fadeIn: keyframes`\n 0% {\n opacity: 0;\n }\n\n 100% {\n opacity: 1;\n }\n `,\n fadeOut: keyframes`\n 0% {\n opacity: 1;\n }\n\n 100% {\n opacity: 100;\n }\n `,\n loading: keyframes`\n 0% {\n background-color: ${Colors.athens};\n }\n\n 50% {\n background-color: ${Colors.ghost};\n }\n\n 100% {\n background-color: ${Colors.athens};\n }`,\n spin: keyframes`\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n `,\n};\n","// TODO: define all shadows in material ui theme (replace default mui shadows)\nexport const boxShadows = [\n 'none',\n '0 3px 3px -1px rgba(10, 22, 70, 0.1), 0 0 1px 0 rgba(10, 22, 70, 0.06)',\n '0 1px 1px 0 rgba(10, 22, 70, 0.1), 0 0 1px 0 rgba(10, 22, 70, 0.06)',\n];\n","export const fontSizes = {\n default: '14px',\n small: '12px',\n xSmall: '11px',\n xxSmall: '10px',\n xxxSmall: '9px',\n medium: '16px',\n large: '20px',\n xLarge: '24px',\n xxLarge: '30px',\n // Functional names\n modalTitle: '11px',\n keypadBadge: '10px',\n keypadOptionalText: '10px',\n};\n\nexport const letterSpacing = {\n modalTitle: '1.6px',\n};\n\nexport const fontWeight = {\n modalTitle: '500',\n '400': 400,\n '500': 500,\n '700': 700,\n};\n","import { Events } from '../types';\n\ninterface LoggerParams {\n type: keyof typeof Events;\n}\n\nexport function LogEvent({ type }: LoggerParams) {\n return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n const original = descriptor.value;\n\n descriptor.value = function (...args: any[]) {\n const detail = args.length > 0 ? args.map((value) => value) : '';\n\n if (process.env.NODE_ENV === 'development') {\n //console.log(`%c [OVERLAY_GENERATOR]`, 'color: orange', type, detail);\n }\n\n return original.apply(this, args);\n };\n };\n}\n\nexport function Time() {\n return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n const original = descriptor.value;\n\n descriptor.value = function (...args: any[]) {\n if (process.env.NODE_ENV !== 'development') return original.apply(this, args);\n\n //console.time(propertyKey);\n const result = original.apply(this, args);\n //console.timeEnd(propertyKey);\n return result;\n };\n };\n}\n","import { Colors } from 'kognia-ui';\n\nexport const Events = {\n OVERLAY_ELEMENTS_META_DATA: 'OVERLAY_ELEMENTS_META_DATA',\n SET_RECORDING_DATA: 'SET_RECORDING_DATA',\n CHANGE_QUALITY: 'CHANGE_QUALITY',\n CHANGE_RENDER_SCALE: 'CHANGE_RENDER_SCALE',\n DRAW_FRAME_IN_CANVAS: 'DRAW_FRAME_IN_CANVAS',\n END_LOADING_DATA: 'END_LOADING_DATA',\n END_LOADING_ASYNC_DATA: 'END_LOADING_ASYNC_DATA',\n INIT: 'INIT',\n LOAD: 'LOAD',\n LOAD_METADATA: 'LOAD_METADATA',\n START_LOADING_DATA: 'START_LOADING_DATA',\n START_LOADING_ASYNC_DATA: 'START_LOADING_ASYNC_DATA',\n UPDATE_METADATA: 'UPDATE_METADATA',\n} as const;\n\nexport enum GlyphElement {\n ARROW = 'arrow',\n ARROW_HIGHLIGHT = 'arrow_highlight',\n CIRCLE_AREA = 'circle_area',\n DASHED_LINE = 'dashed_line',\n HIGHLIGHT = 'highlight',\n LINE = 'line',\n POLYARROW = 'polyarrow',\n POLYGON = 'polygon',\n POLYLINE = 'polyline',\n SCATTER = 'scatter',\n}\n\nexport type Glyph = {\n element: GlyphElement;\n size: number;\n colorPrimary: Colors;\n colorSecondary?: Colors;\n alpha?: number;\n style?: string;\n dynamic?: 'lin';\n initial_size?: number;\n final_size?: number;\n};\n\nexport type OverlayElement = {\n priority: number;\n glyphs: Glyph[];\n};\n\nexport enum OverlayElementNames {\n DEFENSIVE_LINE_PLAYER_DEPTH_HIGHLIGHT = 'defensive_line_player_depth_highlight',\n DEFENSIVE_LINE_WIDTH_GAP_OK = 'defensive_line_width_gap_ok',\n DEFENSIVE_LINE_WIDTH_GAP_NOT_OK = 'defensive_line_width_gap_not_ok',\n SWITCH_OF_PLAY_PASSER_HIGHLIGHT = 'switch_of_play_passer_highlight',\n SWITCH_OF_PLAY_RECEIVER_HIGHLIGHT = 'switch_of_play_receiver_highlight',\n SWITCH_OF_PLAY_PASS_ARROW = 'switch_of_play_pass_arrow',\n MARKED_ATTACKING_PLAYER_HIGHLIGHT = 'marked_attacking_player_highlight',\n MARKER_DEFENDING_PLAYER_HIGHLIGHT = 'marker_defending_player_highlight',\n MARKER_TO_MARKED_LINE = 'marker_to_marked_line',\n UNMARKED_ATTACKING_PLAYER_HIGHLIGHT = 'unmarked_attacking_player_highlight',\n DEFENDING_PLAYER_MARKING_POSSESSOR_HIGHLIGHT = 'defending_player_marking_possessor_highlight',\n FINISHING_PASS_OVERCOMING_PASS_ARROW = 'finishing_pass_overcoming_pass_arrow',\n FINISHING_PASS_PASSER_HIGHLIGHT = 'finishing_pass_passer_highlight',\n REALIZED_FINISHING_SUPPORT_HIGHLIGHT = 'realized_finishing_support_highlight',\n REALIZED_FINISHING_SUPPORT_SUPPORTING_PLAYER_PATH = 'realized_finishing_support_supporting_player_path',\n OVERCOME_PLAYER_HIGHLIGHT = 'overcome_player_highlight',\n OVERCOMING_PASS_PASSER_HIGHLIGHT = 'overcoming_pass_passer_highlight',\n OVERCOMING_PASS_ARROW = 'overcoming_pass_arrow',\n VERTICALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_LEFT = 'vertically_overcoming_pass_receiver_highlight_semicircle_left',\n VERTICALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_RIGHT = 'vertically_overcoming_pass_receiver_highlight_semicircle_right',\n REALIZED_VERTICAL_SUPPORT_SUPPORTING_PLAYER_PATH = 'realized_vertical_support_supporting_player_path',\n HORIZONTALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_DOWN = 'horizontally_overcoming_pass_receiver_highlight_semicircle_down',\n HORIZONTALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_UP = 'horizontally_overcoming_pass_receiver_highlight_semicircle_up',\n REALIZED_HORIZONTAL_SUPPORT_SUPPORTING_PLAYER_PATH = 'realized_horizontal_support_supporting_player_path',\n EMERGENCY_PASS_PASSER_HIGHLIGHT = 'emergency_pass_passer_highlight',\n EMERGENCY_PASS_RECEIVER_HIGHLIGHT = 'emergency_pass_receiver_highlight',\n STRIKER_EMERGENCY_PASS_SUPPORTER_HIGHLIGHT_SEMICIRCLE_UP = 'striker_emergency_pass_supporter_highlight_semicircle_up',\n EMERGENCY_SUPPORT_SUPPORTING_PLAYER_PATH = 'emergency_support_supporting_player_path',\n RECEIVING_BETWEEN_LINES_CLOSEST_PLAYER_CIRCLE = 'receiving_between_lines_closest_player_circle',\n PASSING_BETWEEN_LINES_PASSER_HIGHLIGHT = 'passing_between_lines_passer_highlight',\n WIDE_PLAYER_HIGHLIGHT = 'wide_player_highlight',\n TEAM_PERIMETER = 'team_perimeter',\n TEAM_PERIMETER_AFTER_RECOVERY = 'team_perimeter_after_recovery',\n TEAM_PERIMETER_AFTER_LOSS = 'team_perimeter_after_loss',\n DEFENSIVE_LINE_TO_HALFWAY_LINE_ARROWS = 'defensive_line_to_halfway_line_arrows',\n RUN_BEHIND_DEFENSIVE_LINE = 'run_behind_defensive_line',\n PLAYER_TAKING_ADVANTAGE_OF_DEFENSIVE_LINE_IMBALANCE_HIGHLIGHT = 'player_taking_advantage_of_defensive_line_imbalance_highlight',\n NEUTRALIZING_OPPONENT_ADVANTAGE_OF_DEFENSIVE_LINE_IMBALANCE_ATTACKING_PLAYER_HIGHLIGHT = 'neutralizing_opponent_advantage_of_defensive_line_imbalance_attacking_player_highlight',\n FINISHING_PLAYER_HIGHLIGHT = 'finishing_player_highlight',\n LONG_BALL_PASS_ARROW = 'long_ball_pass_arrow',\n LONG_BALL_PASSER_HIGHLIGHT = 'long_ball_passer_highlight',\n FINISHING_AFTER_CROSS_PLAYER_HIGHLIGHT = 'finishing_after_cross_player_highlight',\n GOAL_KICK_START_PASSER_HIGHLIGHT = 'goal_kick_start_passer_highlight',\n GOAL_KICK_START_RECEIVER_HIGHLIGHT = 'goal_kick_start_receiver_highlight',\n GOAL_KICK_SECTION_HIGHLIGHT = 'goal_kick_section_highlight',\n CROSS_PASSER_HIGHLIGHT = 'cross_passer_highlight',\n CROSS_SAME_TEAM_TOUCH_ZONE_BORDER_HIGHLIGHT = 'cross_same_team_touch_zone_border_highlight',\n CROSS_OPPOSITION_TEAM_TOUCH_ZONE_BORDER_HIGHLIGHT = 'cross_opposition_team_touch_zone_border_highlight',\n FOUL_PLAYER_HIGHLIGHT = 'foul_player_highlight',\n FOUL_CIRCLE_HIGHLIGHT = 'foul_circle_highlight',\n PROGRESSION_PLAYER_HIGHLIGHT = 'progression_player_highlight',\n PROGRESSION_AFTER_RECOVERY_ARROW = 'progression_after_recovery_arrow',\n POSSESSION_PLAYER_HIGHLIGHT = 'possession_player_highlight',\n POSSESSION_CIRCLE_HIGHLIGHT = 'possession_circle_highlight',\n PRESSING_AFTER_LOSS_HIGHLIGHT = 'pressing_after_loss_highlight',\n HOLDING_AFTER_LOSS_HIGHLIGHT = 'holding_after_loss_highlight',\n DEFENDER_PRESSING_POSSESSOR_HIGHLIGHT = 'defender_pressing_possessor_highlight',\n MOVING_FORWARD_DURING_ORGANIZED_PRESSURE_ARROWS = 'moving_forward_during_organized_pressure_arrows',\n DEFENDING_RUN_BEHIND_DEFENSIVE_LINE = 'defending_run_behind_defensive_line',\n CLEAR_THE_BOX_DEFENDER_ARROW = 'clear_the_box_defender_arrow',\n SECOND_BALL_OFFENSIVE_CONTROLLER_HIGHLIGHT = 'second_ball_offensive_controller_highlight',\n SECOND_BALL_DEFENSIVE_CONTROLLER_HIGHLIGHT = 'second_ball_defensive_controller_highlight',\n RUN_INTO_THE_BOX = 'run_into_the_box',\n DEFENDING_RUN_INTO_THE_BOX = 'defending_run_into_the_box',\n PASS_BEHIND_DEFENSIVE_LINE_RECEIVER_HIGHLIGHT = 'pass_behind_defensive_line_receiver_highlight',\n PASS_BEHIND_DEFENSIVE_LINE_ARROW = 'pass_behind_defensive_line_arrow',\n}\n\ntype OverlayElements = {\n [key in OverlayElementNames]: OverlayElement;\n};\n\nexport const overlayElementTypes: OverlayElements = {\n [OverlayElementNames.DEFENSIVE_LINE_PLAYER_DEPTH_HIGHLIGHT]: {\n priority: -1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.red,\n style: 'circle',\n },\n {\n element: GlyphElement.POLYGON,\n size: 1,\n colorPrimary: Colors.orange,\n alpha: 0.5,\n },\n ],\n },\n [OverlayElementNames.DEFENSIVE_LINE_WIDTH_GAP_OK]: {\n priority: -1,\n glyphs: [\n {\n element: GlyphElement.LINE,\n size: 0.1,\n colorPrimary: Colors.red,\n },\n ],\n },\n [OverlayElementNames.DEFENSIVE_LINE_WIDTH_GAP_NOT_OK]: {\n priority: -1,\n glyphs: [\n {\n element: GlyphElement.DASHED_LINE,\n size: 0.1,\n colorPrimary: Colors.red,\n },\n ],\n },\n [OverlayElementNames.SWITCH_OF_PLAY_PASSER_HIGHLIGHT]: {\n priority: 2,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.aqua,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.SWITCH_OF_PLAY_RECEIVER_HIGHLIGHT]: {\n priority: 2,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.white,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.SWITCH_OF_PLAY_PASS_ARROW]: {\n priority: 2,\n glyphs: [\n {\n element: GlyphElement.ARROW,\n size: 0.1,\n colorPrimary: Colors.aqua,\n },\n ],\n },\n [OverlayElementNames.MARKED_ATTACKING_PLAYER_HIGHLIGHT]: {\n priority: -1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.red,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.MARKER_DEFENDING_PLAYER_HIGHLIGHT]: {\n priority: -1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.red,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.MARKER_TO_MARKED_LINE]: {\n priority: -1,\n glyphs: [\n {\n element: GlyphElement.LINE,\n size: 0.1,\n colorPrimary: Colors.red,\n },\n ],\n },\n [OverlayElementNames.UNMARKED_ATTACKING_PLAYER_HIGHLIGHT]: {\n priority: -1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.white,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.DEFENDING_PLAYER_MARKING_POSSESSOR_HIGHLIGHT]: {\n priority: -1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.red,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.FINISHING_PASS_OVERCOMING_PASS_ARROW]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.ARROW,\n size: 0.1,\n colorPrimary: Colors.blue,\n },\n ],\n },\n [OverlayElementNames.FINISHING_PASS_PASSER_HIGHLIGHT]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.blue,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.REALIZED_FINISHING_SUPPORT_HIGHLIGHT]: {\n priority: 2,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.blue,\n colorSecondary: Colors.blue,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.REALIZED_FINISHING_SUPPORT_SUPPORTING_PLAYER_PATH]: {\n priority: 2,\n glyphs: [\n {\n element: GlyphElement.SCATTER,\n size: 0.1,\n colorPrimary: Colors.blue,\n },\n ],\n },\n [OverlayElementNames.OVERCOME_PLAYER_HIGHLIGHT]: {\n priority: 3,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.peach,\n colorSecondary: Colors.peach,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.OVERCOMING_PASS_PASSER_HIGHLIGHT]: {\n priority: 3,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.aqua,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.OVERCOMING_PASS_ARROW]: {\n priority: 3,\n glyphs: [\n {\n element: GlyphElement.ARROW,\n size: 0.1,\n colorPrimary: Colors.aqua,\n },\n ],\n },\n [OverlayElementNames.VERTICALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_LEFT]: {\n priority: 3,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.aqua,\n colorSecondary: Colors.aqua,\n style: 'semicircle-left',\n },\n ],\n },\n [OverlayElementNames.VERTICALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_RIGHT]: {\n priority: 3,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.aqua,\n colorSecondary: Colors.aqua,\n style: 'semicircle-right',\n },\n ],\n },\n [OverlayElementNames.REALIZED_VERTICAL_SUPPORT_SUPPORTING_PLAYER_PATH]: {\n priority: 3,\n glyphs: [\n {\n element: GlyphElement.SCATTER,\n size: 0.1,\n colorPrimary: Colors.aqua,\n },\n ],\n },\n [OverlayElementNames.HORIZONTALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_DOWN]: {\n priority: 5,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.white,\n style: 'semicircle-down',\n },\n ],\n },\n [OverlayElementNames.HORIZONTALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_UP]: {\n priority: 5,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.white,\n style: 'semicircle-up',\n },\n ],\n },\n [OverlayElementNames.REALIZED_HORIZONTAL_SUPPORT_SUPPORTING_PLAYER_PATH]: {\n priority: 5,\n glyphs: [\n {\n element: GlyphElement.SCATTER,\n size: 0.1,\n colorPrimary: Colors.white,\n },\n ],\n },\n [OverlayElementNames.EMERGENCY_PASS_PASSER_HIGHLIGHT]: {\n priority: 5,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.red,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.EMERGENCY_PASS_RECEIVER_HIGHLIGHT]: {\n priority: 5,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.red,\n colorSecondary: Colors.red,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.STRIKER_EMERGENCY_PASS_SUPPORTER_HIGHLIGHT_SEMICIRCLE_UP]: {\n priority: 4,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.red,\n colorSecondary: Colors.red,\n style: 'semicircle-up',\n },\n ],\n },\n [OverlayElementNames.EMERGENCY_SUPPORT_SUPPORTING_PLAYER_PATH]: {\n priority: 4,\n glyphs: [\n {\n element: GlyphElement.SCATTER,\n size: 0.1,\n colorPrimary: Colors.red,\n },\n ],\n },\n [OverlayElementNames.RECEIVING_BETWEEN_LINES_CLOSEST_PLAYER_CIRCLE]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.CIRCLE_AREA,\n size: 1,\n colorPrimary: Colors.white,\n alpha: 0.3,\n },\n ],\n },\n [OverlayElementNames.PASSING_BETWEEN_LINES_PASSER_HIGHLIGHT]: {\n priority: 2,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.blue,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.WIDE_PLAYER_HIGHLIGHT]: {\n priority: 7,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.white,\n style: 'circle',\n },\n {\n element: GlyphElement.LINE,\n size: 0.1,\n colorPrimary: Colors.white,\n },\n ],\n },\n [OverlayElementNames.TEAM_PERIMETER]: {\n priority: -1,\n glyphs: [\n {\n element: GlyphElement.POLYLINE,\n size: 0.1,\n colorPrimary: Colors.orange,\n },\n ],\n },\n [OverlayElementNames.TEAM_PERIMETER_AFTER_RECOVERY]: {\n priority: -1,\n glyphs: [\n {\n element: GlyphElement.POLYLINE,\n size: 0.1,\n colorPrimary: Colors.blueRiver,\n },\n ],\n },\n [OverlayElementNames.TEAM_PERIMETER_AFTER_LOSS]: {\n priority: -1,\n glyphs: [\n {\n element: GlyphElement.POLYLINE,\n size: 0.1,\n colorPrimary: Colors.orange,\n },\n ],\n },\n [OverlayElementNames.DEFENSIVE_LINE_TO_HALFWAY_LINE_ARROWS]: {\n priority: 6,\n glyphs: [\n {\n element: GlyphElement.ARROW,\n size: 0.1,\n colorPrimary: Colors.white,\n },\n ],\n },\n [OverlayElementNames.RUN_BEHIND_DEFENSIVE_LINE]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.DASHED_LINE,\n size: 0.1,\n colorPrimary: Colors.blue,\n },\n ],\n },\n [OverlayElementNames.RUN_INTO_THE_BOX]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.DASHED_LINE,\n size: 0.1,\n colorPrimary: Colors.midnight,\n },\n ],\n },\n [OverlayElementNames.PLAYER_TAKING_ADVANTAGE_OF_DEFENSIVE_LINE_IMBALANCE_HIGHLIGHT]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.blue,\n colorSecondary: Colors.blue,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.NEUTRALIZING_OPPONENT_ADVANTAGE_OF_DEFENSIVE_LINE_IMBALANCE_ATTACKING_PLAYER_HIGHLIGHT]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.storm,\n colorSecondary: Colors.white,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.FINISHING_PLAYER_HIGHLIGHT]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.peach,\n colorSecondary: Colors.peach,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.LONG_BALL_PASS_ARROW]: {\n priority: 2,\n glyphs: [\n {\n element: GlyphElement.ARROW,\n size: 0.1,\n colorPrimary: Colors.aqua,\n },\n ],\n },\n [OverlayElementNames.LONG_BALL_PASSER_HIGHLIGHT]: {\n priority: 2,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.aqua,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.FINISHING_AFTER_CROSS_PLAYER_HIGHLIGHT]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.peach,\n colorSecondary: Colors.aqua,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.GOAL_KICK_START_PASSER_HIGHLIGHT]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.peach,\n colorSecondary: Colors.aqua,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.GOAL_KICK_START_RECEIVER_HIGHLIGHT]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.peach,\n colorSecondary: Colors.aqua,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.GOAL_KICK_SECTION_HIGHLIGHT]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.POLYGON,\n size: 1,\n colorPrimary: Colors.aqua,\n alpha: 0.2,\n },\n ],\n },\n [OverlayElementNames.CROSS_PASSER_HIGHLIGHT]: {\n priority: 2,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.blue,\n colorSecondary: Colors.blue,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.CROSS_SAME_TEAM_TOUCH_ZONE_BORDER_HIGHLIGHT]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.POLYGON,\n size: 1,\n colorPrimary: Colors.white,\n alpha: 0.4,\n },\n ],\n },\n [OverlayElementNames.CROSS_OPPOSITION_TEAM_TOUCH_ZONE_BORDER_HIGHLIGHT]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.POLYGON,\n size: 1,\n colorPrimary: Colors.red,\n alpha: 0.2,\n },\n ],\n },\n [OverlayElementNames.FOUL_PLAYER_HIGHLIGHT]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.red,\n colorSecondary: Colors.white,\n style: 'circle_dashed',\n },\n ],\n },\n [OverlayElementNames.FOUL_CIRCLE_HIGHLIGHT]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.CIRCLE_AREA,\n size: 1,\n dynamic: 'lin',\n initial_size: 5,\n final_size: 15,\n colorPrimary: Colors.red,\n alpha: 0.3,\n },\n ],\n },\n [OverlayElementNames.PROGRESSION_PLAYER_HIGHLIGHT]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.blue,\n colorSecondary: Colors.white,\n style: 'circle_dashed',\n },\n ],\n },\n [OverlayElementNames.PROGRESSION_AFTER_RECOVERY_ARROW]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.ARROW_HIGHLIGHT,\n size: 8,\n colorPrimary: Colors.blue,\n colorSecondary: Colors.blue,\n style: 'solid',\n alpha: 0.5,\n },\n ],\n },\n [OverlayElementNames.POSSESSION_PLAYER_HIGHLIGHT]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.blue,\n colorSecondary: Colors.white,\n style: 'circle_dashed',\n },\n ],\n },\n [OverlayElementNames.POSSESSION_CIRCLE_HIGHLIGHT]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.CIRCLE_AREA,\n size: 1,\n dynamic: 'lin',\n initial_size: 5,\n final_size: 15,\n colorPrimary: Colors.blueRiver,\n alpha: 0.3,\n },\n ],\n },\n [OverlayElementNames.PRESSING_AFTER_LOSS_HIGHLIGHT]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.red,\n colorSecondary: Colors.red,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.HOLDING_AFTER_LOSS_HIGHLIGHT]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.white,\n colorSecondary: Colors.red,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.DEFENDER_PRESSING_POSSESSOR_HIGHLIGHT]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.HIGHLIGHT,\n size: 2,\n colorPrimary: Colors.red,\n colorSecondary: Colors.red,\n style: 'circle',\n },\n ],\n },\n [OverlayElementNames.MOVING_FORWARD_DURING_ORGANIZED_PRESSURE_ARROWS]: {\n priority: 3,\n glyphs: [\n {\n element: GlyphElement.DASHED_LINE,\n size: 0.1,\n colorPrimary: Colors.red,\n },\n ],\n },\n [OverlayElementNames.DEFENDING_RUN_BEHIND_DEFENSIVE_LINE]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.DASHED_LINE,\n size: 0.1,\n colorPrimary: Colors.red,\n },\n ],\n },\n [OverlayElementNames.DEFENDING_RUN_INTO_THE_BOX]: {\n priority: 1,\n glyphs: [\n {\n element: GlyphElement.DASHED_LINE,\n size: 0.1,\n colorPrimary: Colors.maroon,\n },\n ],\n },\n [OverlayElementNames.CLEAR_THE_BOX_DEFENDER_ARROW]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.DASHED_LINE,\n size: 0.1,\n colorPrimary: Colors.red,\n },\n ],\n },\n [OverlayElementNames.SECOND_BALL_OFFENSIVE_CONTROLLER_HIGHLIGHT]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.CIRCLE_AREA,\n size: 1,\n dynamic: 'lin',\n initial_size: 3,\n final_size: 3,\n colorPrimary: Colors.blue,\n alpha: 0.4,\n },\n ],\n },\n [OverlayElementNames.SECOND_BALL_DEFENSIVE_CONTROLLER_HIGHLIGHT]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.CIRCLE_AREA,\n size: 1,\n dynamic: 'lin',\n initial_size: 3,\n final_size: 3,\n colorPrimary: Colors.red,\n alpha: 0.3,\n },\n ],\n },\n [OverlayElementNames.PASS_BEHIND_DEFENSIVE_LINE_RECEIVER_HIGHLIGHT]: {\n priority: 0,\n glyphs: [\n {\n element: GlyphElement.CIRCLE_AREA,\n size: 1,\n colorPrimary: Colors.aqua,\n initial_size: 5,\n final_size: 5,\n alpha: 0.2,\n },\n ],\n },\n [OverlayElementNames.PASS_BEHIND_DEFENSIVE_LINE_ARROW]: {\n priority: 2,\n glyphs: [\n {\n element: GlyphElement.ARROW,\n size: 0.1,\n colorPrimary: Colors.aqua,\n },\n ],\n },\n};\n\nexport type HomographyRow = [number, number, number];\n\nexport type Homography = [HomographyRow, HomographyRow, HomographyRow];\n\nexport type Size = {\n width: number; // Width in meters\n height: number; // Height in meters\n};\n\nexport type PitchSize = {\n length: number; // Width in meters\n width: number; // Height in meters\n};\n\nexport type Coordinates = { x: number; y: number };\n","import Konva from 'konva';\n\nimport { Coordinates } from '../../types';\n\ntype Options = { colorPrimary: string; opacity: number; size: number; dashed?: boolean };\n\nconst arrow = new Konva.Arrow({\n points: [],\n listening: false,\n});\n\nexport class ArrowHighlightGlyph {\n shape: Konva.Arrow;\n size: number;\n\n constructor({ colorPrimary, opacity, size }: Options) {\n this.size = size;\n\n this.shape = arrow.clone({\n fill: colorPrimary,\n opacity: opacity,\n stroke: colorPrimary,\n strokeWidth: size,\n });\n }\n\n update(coordinates: Coordinates[], scaleFactor: number) {\n this.shape.pointerLength((this.size / 3) * scaleFactor);\n this.shape.pointerWidth((this.size / 3) * scaleFactor);\n this.shape.strokeWidth((this.size / 1.5) * scaleFactor);\n\n this.shape.points(coordinates.map((coordinate) => [coordinate.x * scaleFactor, coordinate.y * scaleFactor]).flat());\n }\n}\n","import Konva from 'konva';\n\nimport { PlayersPositions } from '../../main';\nimport { PitchSize } from '../../types';\nimport { Reference, Segment } from '../../utils/loaders';\nimport { Teams } from '../types';\n\nexport interface UpdatePositionOptions {\n frame: number;\n pitchSize: PitchSize;\n playersPositions: PlayersPositions;\n segments: Segment[];\n scale: number;\n teams: Teams;\n}\n\nexport abstract class OverlayElementGlyphs {\n abstract overlayElementTypeId: string;\n abstract startFrame: number;\n abstract endFrame: number;\n abstract references: Reference[];\n abstract priority: number;\n abstract excludedPlayerIdsFromRender: string[];\n abstract isVisible: boolean;\n\n abstract addToLayer(layer: Konva.Layer): void;\n\n abstract removeFromLayer(): void;\n\n abstract update(options: UpdatePositionOptions): void;\n\n abstract hide(): void;\n\n abstract show(): void;\n\n abstract setExcludedPlayerIdsFromRender(references: string[]): void;\n}\n","import { PlayersPosition } from '../../main';\nimport { Coordinates, PitchSize } from '../../types';\nimport { Reference, Segment } from '../../utils/loaders';\nimport { Teams } from '../types';\nimport { OverlayElementGlyphs } from './interface';\n\nexport const findPlayersCoordinates = (playerIds: string[], playersPositions: PlayersPosition) => {\n const resultPlayerIds = {} as { [key in string]: Coordinates };\n\n if (!playersPositions) return resultPlayerIds;\n\n for (let i = 0; i < playerIds.length; i++) {\n const playerId = playerIds[i];\n\n const playerCoordinates = playersPositions[playerId];\n if (!playerCoordinates) continue;\n resultPlayerIds[playerId] = playerCoordinates;\n }\n\n return resultPlayerIds;\n};\n\nexport const findClosestRivalPlayerDistance = (\n playerId: string,\n playersPosition: PlayersPosition,\n teams: Teams,\n): number | null => {\n const isPlayerInHomeTeam = teams.homeTeam.playerIds.some((homePlayerId) => homePlayerId === playerId);\n const rivalPlayerIds = isPlayerInHomeTeam ? teams.awayTeam.playerIds : teams.homeTeam.playerIds;\n\n let closestDistance = null;\n\n for (let i = 0; i < rivalPlayerIds.length; i++) {\n const rivalPosition = playersPosition[rivalPlayerIds[i]];\n const playerPosition = playersPosition[playerId];\n\n if (!rivalPosition || !playerPosition) continue;\n const y = rivalPosition.x - playerPosition.x;\n const x = rivalPosition.y - playerPosition.y;\n\n const distance = Math.sqrt(x * x + y * y);\n\n if (distance && (!closestDistance || distance < closestDistance)) {\n closestDistance = distance;\n }\n }\n\n return closestDistance;\n};\n\nexport const getPlayerReferences = (references: Reference[]) => {\n return references.reduce(\n (acc, reference) => {\n if (reference.referenceType === 'players') {\n return reference.values.map((v) => v);\n }\n return acc;\n },\n [],\n );\n};\n\nexport const getStaticCoordinates = (references: Reference[]) => {\n return references.reduce(\n (acc, reference) => {\n if (reference.referenceType === 'static-coordinates') {\n return reference.values.map((value) => {\n return { x: Number(value[0]), y: Number(value[1]) };\n });\n }\n return acc;\n },\n [],\n );\n};\n\nexport const adjustStaticCoordinatesByPitchSize = (coordinates: Coordinates[], pitchSize: PitchSize) => {\n return coordinates.map((coordinate) => {\n return {\n x: pitchSize.length / 2 + coordinate.x,\n y: pitchSize.width / 2 + coordinate.y,\n };\n });\n};\n\nexport const isFrameInRange = (frame: number, overlayElement: OverlayElementGlyphs) => {\n const isInRange = frame >= overlayElement.startFrame && frame <= overlayElement.endFrame;\n\n !isInRange ? overlayElement.hide() : overlayElement.show();\n\n return isInRange;\n};\n\nfunction generateFramesArray(start: number, end: number): number[] {\n const result = [];\n for (let i = start; i <= end; i++) {\n result.push(i);\n }\n return result;\n}\n\nexport function sampleArrayValues(startFrame: number, endFrame: number, sampleSize: number): any[] {\n const listOfFrames = generateFramesArray(startFrame, endFrame);\n const result = [listOfFrames[0]];\n for (let i = 1; i < listOfFrames.length - 1; i += sampleSize) {\n result.push(listOfFrames[i]);\n }\n result.push(listOfFrames[listOfFrames.length - 1]);\n return result;\n}\n\nexport function getPlayerTeam(playerId: string, teams: Teams) {\n return teams.homeTeam.playerIds.includes(playerId) ? teams.homeTeam.id : teams.awayTeam.id;\n}\n\nexport function getCurrentSegment(frame: number, segments: Segment[]) {\n return segments.find((segment) => frame >= segment.startFrame && frame <= segment.endFrame);\n}\n\nexport function defensiveLinePitchSide(\n playersXPositions: number[],\n pitchSize: PitchSize,\n teamId: string,\n segment?: Segment,\n): 'left' | 'right' {\n if (segment) {\n if (segment.pitchLeftSideTeamId === teamId) return 'left';\n if (segment.pitchRightSideTeamId === teamId) return 'right';\n }\n\n const isDefensiveLineInLeftHalf =\n playersXPositions.reduce((acc, xpos) => acc + xpos, 0) / playersXPositions.length < pitchSize.length / 2;\n\n return isDefensiveLineInLeftHalf ? 'left' : 'right';\n}\n","import Konva from 'konva';\nimport { Coordinates, OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { ArrowHighlightGlyph } from '../glyphs/ArrowHighlightGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { adjustStaticCoordinatesByPitchSize, getStaticCoordinates, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class ArrowHighlight extends OverlayElementGlyphs {\n arrowHighlight: ArrowHighlightGlyph;\n overlayElementTypeId: string;\n arrowCoordinates: Coordinates[];\n references: Reference[];\n startFrame: number;\n endFrame: number;\n updated: boolean = false;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const lineGlyphConfig = config.glyphs[0];\n\n this.arrowHighlight = new ArrowHighlightGlyph({\n colorPrimary: lineGlyphConfig.colorPrimary,\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n });\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.arrowCoordinates = getStaticCoordinates(this.references);\n this.startFrame = startFrame;\n this.endFrame = endFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.arrowHighlight.shape);\n }\n\n update({ playersPositions, scale, frame, pitchSize }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this) || this.updated) return;\n\n this.updated = true;\n\n this.arrowHighlight.update(adjustStaticCoordinatesByPitchSize(this.arrowCoordinates, pitchSize), scale);\n }\n\n removeFromLayer = () => {\n this.arrowHighlight.shape.destroy();\n };\n\n show = () => {\n this.arrowHighlight.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.arrowHighlight.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\n\nimport { Coordinates } from '../../types';\n\ntype Options = { colorPrimary: string; opacity: number; size: number };\n\nconst circle = new Konva.Circle({\n listening: false,\n});\n\nexport class CircleAreaGlyph {\n shape: Konva.Circle;\n\n constructor({ colorPrimary, opacity }: Options) {\n this.shape = circle.clone({\n fill: colorPrimary,\n opacity: opacity,\n });\n }\n\n update(size: number, coordinates: Coordinates, scaleFactor: number) {\n const adjustedSize = size * scaleFactor;\n this.shape.radius(adjustedSize);\n this.shape.x(coordinates.x * scaleFactor);\n this.shape.y(coordinates.y * scaleFactor);\n }\n}\n","import Konva from 'konva';\nimport { OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { CircleAreaGlyph } from '../glyphs/CircleAreaGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { getPlayerReferences, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nfunction getSizeFromPercentage(initialValue: number, finalValue: number, percentage: number) {\n return ((finalValue - initialValue / 100) * percentage + initialValue) / 100;\n}\n\nfunction getPercentageFromRange(initialValue: number, finalValue: number, currentValue: number) {\n return ((currentValue - initialValue) / (finalValue - initialValue)) * 100;\n}\n\nexport class PlayerCircleAreaHighlight extends OverlayElementGlyphs {\n circle: CircleAreaGlyph;\n finalSize: number = 0;\n initialSize: number = 0;\n overlayElementTypeId: string;\n playerId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const lineGlyphConfig = config.glyphs[0];\n\n this.circle = new CircleAreaGlyph({\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n colorPrimary: lineGlyphConfig.colorPrimary,\n });\n\n this.initialSize = lineGlyphConfig.initial_size ?? 1;\n this.finalSize = lineGlyphConfig.final_size ?? 1;\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playerId = getPlayerReferences(this.references)[0];\n this.startFrame = startFrame;\n this.endFrame = endFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.circle.shape);\n }\n\n update({ playersPositions, scale, frame, pitchSize, teams }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n\n const framePlayers = playersPositions[frame];\n const percentage = getPercentageFromRange(this.startFrame, this.endFrame, frame);\n const size = getSizeFromPercentage(this.initialSize, this.finalSize, percentage);\n\n if (!framePlayers) console.warn(`No trajectories for frame ${frame} in overlay element CircleAreaHighlight`);\n\n if (framePlayers && framePlayers[this.playerId]) {\n this.excludedPlayerIdsFromRender.includes(this.playerId) ? this.hide() : this.show();\n\n this.circle.update(size, framePlayers[this.playerId], scale);\n }\n }\n\n removeFromLayer = () => {\n this.circle.shape.destroy();\n };\n\n show = () => {\n this.circle.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.circle.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\nimport { OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { CircleAreaGlyph } from '../glyphs/CircleAreaGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { findClosestRivalPlayerDistance, getPlayerReferences, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class CircleClosestRivalHighlight extends OverlayElementGlyphs {\n circle: CircleAreaGlyph;\n overlayElementTypeId: string;\n playerId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const lineGlyphConfig = config.glyphs[0];\n\n this.circle = new CircleAreaGlyph({\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n colorPrimary: lineGlyphConfig.colorPrimary,\n });\n\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playerId = getPlayerReferences(this.references)[0];\n this.startFrame = startFrame;\n this.endFrame = endFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.circle.shape);\n }\n\n update({ playersPositions, scale, frame, teams }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n\n const closestDistance = findClosestRivalPlayerDistance(this.playerId, playersPositions[frame], teams);\n const playersCoordinates = playersPositions?.[frame]?.[this.playerId];\n\n if (playersCoordinates && closestDistance) {\n this.excludedPlayerIdsFromRender.includes(this.playerId) ? this.hide() : this.show();\n this.circle.update(closestDistance, playersCoordinates, scale);\n }\n }\n\n removeFromLayer = () => {\n this.circle.shape.destroy();\n };\n\n show = () => {\n this.circle.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.circle.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import { Colors } from 'kognia-ui';\n\nexport const circleSvg = (colorPrimary: Colors, colorSecondary: Colors) => `\n\n\n \n \n\n\n \n \n \n \n \n \n \n \n \n \n \n \n\n`;\n","import { Colors } from 'kognia-ui';\n\nexport const circleDashedSvg = (colorPrimary: Colors, colorSecondary: Colors) => `\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n`;\n","import { Colors } from 'kognia-ui';\n\nexport const semiCircleSvg = (colorPrimary: Colors, colorSecondary: Colors) => `\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n`;\n","// https://github.com/flexdinesh/browser-or-node/blob/master/src/index.js\nexport const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n","import { Colors } from 'kognia-ui';\nimport { circleSvg } from './Circle';\nimport { circleDashedSvg } from './CircleDashed';\nimport { semiCircleSvg } from './SemiCircle';\nimport { isNode } from '../../node-script/checkEnv';\n\nconst createInlineSvg = (svg: string) =>\n isNode ? `data:image/svg+xml;utf8,${svg}` : `data:image/svg+xml;utf8,${encodeURIComponent(svg)}`;\n\n// TODO: improve imageInterface type or remove it if possible\nconst createSemicircle = (colorPrimary: Colors, colorSecondary: Colors, imageInterface: any) => {\n const image = new imageInterface();\n image.src = createInlineSvg(semiCircleSvg(colorPrimary, colorSecondary));\n\n return image;\n};\n\nconst createCircle = (colorPrimary: Colors, colorSecondary: Colors, imageInterface: any) => {\n const image = new imageInterface();\n image.src = createInlineSvg(circleSvg(colorPrimary, colorSecondary));\n\n return image;\n};\n\nconst createCircleDashed = (colorPrimary: Colors, colorSecondary: Colors, imageInterface: any) => {\n const image = new imageInterface();\n image.src = createInlineSvg(circleDashedSvg(colorPrimary, colorSecondary));\n\n return image;\n};\n\nexport { createSemicircle, createCircleDashed, createCircle };\n","import { Colors } from 'kognia-ui';\nimport Konva from 'konva';\nimport { createCircle, createCircleDashed } from '../assets';\n\ntype Options = {\n playerId: string;\n colorPrimary: Colors;\n colorSecondary?: Colors;\n type: 'dashed' | 'circle';\n opacity: number;\n size: number;\n startX: number;\n startY: number;\n imageInterface: unknown;\n};\n\nexport class HighlightGlyph {\n shape: Konva.Image;\n playerId: string;\n size: number;\n\n constructor({\n playerId,\n colorPrimary,\n colorSecondary,\n type = 'dashed',\n opacity,\n size,\n startX,\n startY,\n imageInterface,\n }: Options) {\n this.size = size;\n this.playerId = playerId;\n\n this.shape = new Konva.Image({\n opacity: opacity,\n width: size,\n height: size,\n x: startX,\n y: startY,\n image:\n type === 'dashed'\n ? createCircleDashed(colorPrimary, colorSecondary ?? colorPrimary, imageInterface)\n : createCircle(colorPrimary, colorSecondary ?? colorPrimary, imageInterface),\n });\n }\n\n update(x: number, y: number, scaleFactor: number) {\n this.updatePosition(x * scaleFactor, y * scaleFactor);\n this.updateSize(scaleFactor);\n }\n\n private updatePosition(x: number, y: number) {\n this.shape.offsetX(this.size / 2);\n this.shape.offsetY(this.size / 2);\n this.shape.x(x - this.size / 2);\n this.shape.y(y - this.size / 2);\n }\n\n private updateSize(scaleFactor: number) {\n this.shape.scaleX(scaleFactor);\n this.shape.scaleY(scaleFactor);\n }\n}\n","import Konva from 'konva';\n\nimport { Coordinates } from '../../types';\n\ntype Options = { colorPrimary: string; opacity: number; size: number };\n\nconst line = new Konva.Line({ closed: true, listening: false });\n\nexport class PolygonGlyph {\n shape: Konva.Line;\n size: number;\n\n constructor({ colorPrimary, opacity, size }: Options) {\n this.shape = line.clone({\n fill: colorPrimary,\n opacity: opacity,\n points: [],\n });\n this.size = size;\n }\n\n update(coordinates: Coordinates[], scaleFactor: number) {\n this.shape.strokeWidth(this.size * scaleFactor);\n this.shape.points(\n coordinates.reduce(\n (acc, coordinate) => [...acc, coordinate.x * scaleFactor, coordinate.y * scaleFactor],\n [] as number[],\n ),\n );\n }\n}\n","import Konva from 'konva';\nimport { Coordinates, OverlayElement, PitchSize } from '../../types';\n\nimport { Reference, Segment } from '../../utils/loaders';\nimport { HighlightGlyph } from '../glyphs/HighlightGlyph';\nimport { PolygonGlyph } from '../glyphs/PolygonGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport {\n defensiveLinePitchSide,\n findPlayersCoordinates,\n getCurrentSegment,\n getPlayerTeam,\n isFrameInRange,\n} from './utils';\n\ntype Options = {\n references: Reference[];\n overlayElementTypeId: string;\n startFrame: number;\n endFrame: number;\n config: OverlayElement;\n imageInterface: unknown;\n};\n\nconst findPlayerWithMinOrMaxY = (playersCoordinates: Record, type: 'min' | 'max'): string => {\n let resultY = type === 'min' ? 99999 : -1;\n let resultPlayerId = '';\n\n Object.keys(playersCoordinates).forEach((playerId) => {\n if (\n (type === 'min' && playersCoordinates[playerId].y < resultY) ||\n (type === 'max' && playersCoordinates[playerId].y > resultY)\n ) {\n resultY = playersCoordinates[playerId].y;\n resultPlayerId = playerId;\n }\n });\n\n return resultPlayerId;\n};\n\nexport class DefensiveLinePlayerDepthHighlight extends OverlayElementGlyphs {\n defenseArea: PolygonGlyph;\n overlayElementTypeId: string;\n players: HighlightGlyph[] = [];\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ references, overlayElementTypeId, startFrame, endFrame, config, imageInterface }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const playerGlyphConfig = config.glyphs[0];\n const polygonGlyphConfig = config.glyphs[1];\n\n this.defenseArea = new PolygonGlyph({\n colorPrimary: polygonGlyphConfig.colorPrimary,\n opacity: polygonGlyphConfig.alpha ?? 1,\n size: polygonGlyphConfig.size,\n });\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.startFrame = startFrame;\n this.endFrame = endFrame;\n this.priority = config.priority;\n\n this.references.forEach((reference) => {\n if (reference.referenceType === 'players') {\n this.players = reference.values.map((playerId) => {\n return new HighlightGlyph({\n playerId: playerId,\n colorPrimary: playerGlyphConfig.colorPrimary,\n colorSecondary: playerGlyphConfig.colorSecondary,\n opacity: playerGlyphConfig.alpha ?? 1,\n size: playerGlyphConfig.size,\n startX: 0,\n startY: 0,\n type: 'dashed',\n imageInterface,\n });\n });\n }\n });\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.defenseArea.shape);\n this.players.forEach((player) => {\n layer.add(player.shape);\n });\n }\n\n update({ playersPositions, scale, frame, pitchSize, segments, teams }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this) || !this.players[0]) return;\n\n const teamId = getPlayerTeam(this.players[0].playerId, teams);\n const segment = getCurrentSegment(frame, segments);\n\n const playersCoordinates = findPlayersCoordinates(\n this.players.map((player) => player.playerId),\n playersPositions[frame],\n );\n\n const firstPlayerInLine = playersCoordinates[findPlayerWithMinOrMaxY(playersCoordinates, 'min')];\n const lastPlayerInLine = playersCoordinates[findPlayerWithMinOrMaxY(playersCoordinates, 'max')];\n const minXPos = this.getXPositionForLastPlayerInLine(playersCoordinates, pitchSize, teamId, segment);\n\n try {\n this.players.forEach((player) => {\n if (playersCoordinates[player.playerId]) {\n this.excludedPlayerIdsFromRender.includes(player.playerId) ? player.shape.hide() : player.shape.show();\n\n player.update(playersCoordinates[player.playerId].x, playersCoordinates[player.playerId].y, scale);\n }\n });\n\n const topLineVertices = [\n { x: minXPos, y: 0 },\n { x: firstPlayerInLine.x, y: 0 },\n ];\n const bottomLineVertices = [\n { x: lastPlayerInLine.x, y: pitchSize.width },\n { x: minXPos, y: pitchSize.width },\n ];\n const playersVertices = this.players\n .map((player) => playersCoordinates[player.playerId])\n .filter((player) => player?.x);\n\n this.defenseArea.update([...topLineVertices, ...playersVertices, ...bottomLineVertices], scale);\n } catch (e) {}\n }\n\n removeFromLayer = () => {\n this.players.forEach((player) => player.shape.destroy());\n this.defenseArea.shape.destroy();\n };\n\n show = () => {\n this.players.forEach((player) => player.shape.show());\n this.defenseArea.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.players.forEach((player) => player.shape.hide());\n this.defenseArea.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n\n private getXPositionForLastPlayerInLine(\n playersCoordinates: { [key in number]: Coordinates },\n pitchSize: PitchSize,\n teamId: string,\n segment?: Segment,\n ): number {\n const playersXPositions = Object.values(playersCoordinates).map((player) => player.x);\n\n return defensiveLinePitchSide(playersXPositions, pitchSize, teamId, segment) === 'left'\n ? Math.min(...playersXPositions)\n : Math.max(...playersXPositions);\n }\n}\n","import Konva from 'konva';\nimport { OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { HighlightGlyph } from '../glyphs/HighlightGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { findPlayersCoordinates, getPlayerReferences, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n imageInterface: unknown;\n};\n\nexport class HighlightCirclePlayer extends OverlayElementGlyphs {\n players: HighlightGlyph[];\n overlayElementTypeId: string;\n playersIds: string[];\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame, imageInterface }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const highlightGlyphConfig = config.glyphs[0];\n const playersIds = getPlayerReferences(references);\n\n this.endFrame = endFrame;\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.startFrame = startFrame;\n this.playersIds = getPlayerReferences(this.references);\n this.priority = config.priority;\n\n this.players = playersIds.map(\n (playerId) =>\n new HighlightGlyph({\n colorPrimary: highlightGlyphConfig.colorPrimary,\n colorSecondary: highlightGlyphConfig.colorSecondary,\n opacity: highlightGlyphConfig.alpha ?? 1,\n playerId: playerId,\n size: highlightGlyphConfig.size,\n startX: 0,\n startY: 0,\n type: highlightGlyphConfig.style === 'circle' ? 'circle' : 'dashed',\n imageInterface,\n }),\n );\n }\n\n addToLayer(layer: Konva.Layer) {\n this.players.forEach((player) => layer.add(player.shape));\n }\n\n update({ playersPositions, scale, frame }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n\n const referencesToExclude = this.excludedPlayerIdsFromRender;\n const playersCoordinates = findPlayersCoordinates(this.playersIds, playersPositions[frame]);\n\n this.players.forEach((player) => {\n if (referencesToExclude.includes(player.playerId) || !playersCoordinates[player.playerId]) {\n player.shape.hide();\n } else {\n player.shape.show();\n player.update(playersCoordinates[player.playerId].x, playersCoordinates[player.playerId].y, scale);\n }\n });\n }\n\n removeFromLayer = () => {\n this.players.forEach((player) => player.shape.destroy());\n };\n\n show = () => {\n this.players.forEach((player) => player.shape.show());\n this.isVisible = true;\n };\n\n hide = () => {\n this.players.forEach((player) => player.shape.hide());\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\n\nimport { Coordinates } from '../../types';\n\ntype Options = { colorPrimary: string; opacity: number; size: number; dashed?: boolean };\n\nconst line = new Konva.Line({\n lineCap: 'round',\n lineJoin: 'round',\n listening: false,\n});\n\nexport class LineGlyph {\n shape: Konva.Line;\n size: number;\n isDashed: boolean;\n\n constructor({ colorPrimary, opacity, size, dashed }: Options) {\n this.isDashed = Boolean(dashed);\n this.size = size;\n const dashedOptions = dashed ? { dash: this.getDashedLinePoints(1) } : {};\n\n this.shape = line.clone({\n opacity: opacity,\n points: [],\n stroke: colorPrimary,\n strokeWidth: size,\n ...dashedOptions,\n });\n }\n\n update(coordinates: Coordinates[], scaleFactor: number) {\n this.shape.dash(this.getDashedLinePoints(scaleFactor));\n this.shape.strokeWidth(this.size * scaleFactor);\n this.shape.points(\n coordinates.reduce((acc, coordinate) => {\n return coordinate?.x ? [...acc, coordinate.x * scaleFactor, coordinate.y * scaleFactor] : acc;\n }, [] as number[]),\n );\n }\n\n private getDashedLinePoints(scaleFactor: number) {\n return this.isDashed ? [this.size * scaleFactor * 8, this.size * scaleFactor * 8] : [];\n }\n}\n","import Konva from 'konva';\nimport { GlyphElement, OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { LineGlyph } from '../glyphs/LineGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { findPlayersCoordinates, getPlayerReferences, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class LineHighlight extends OverlayElementGlyphs {\n line: LineGlyph;\n overlayElementTypeId: string;\n playersIds: string[];\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const lineGlyphConfig = config.glyphs[0];\n\n this.line = new LineGlyph({\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n colorPrimary: lineGlyphConfig.colorPrimary,\n dashed: lineGlyphConfig.element === GlyphElement.DASHED_LINE,\n });\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playersIds = getPlayerReferences(this.references);\n this.startFrame = startFrame;\n this.endFrame = endFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.line.shape);\n }\n\n update({ playersPositions, scale, frame, pitchSize }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n\n const playersCoordinates = findPlayersCoordinates(this.playersIds, playersPositions[frame]);\n\n const excludedPlayerIds = this.excludedPlayerIdsFromRender;\n\n this.line.update(\n this.playersIds.filter((p) => !excludedPlayerIds.includes(p)).map((playerId) => playersCoordinates[playerId]),\n scale,\n );\n }\n\n removeFromLayer = () => {\n this.line.shape.destroy();\n };\n\n show = () => {\n this.line.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.line.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\n\nimport { Coordinates } from '../../types';\n\ntype Options = { colorPrimary: string; opacity: number; size: number; dashed?: boolean; id?: string };\n\nconst arrow = new Konva.Arrow({\n points: [],\n lineCap: 'round',\n lineJoin: 'round',\n listening: false,\n});\n\nconst DASH_SPACING = 8;\nexport class ArrowGlyph {\n shape: Konva.Arrow;\n size: number;\n isDashed: boolean;\n pointerLength: number = 0.8;\n pointerWidth: number = 0.6;\n\n constructor({ colorPrimary, opacity, size, dashed = false, id }: Options) {\n this.isDashed = Boolean(dashed);\n this.size = size;\n const dashedOptions = dashed ? { dash: this.getDashedLinePoints(1) } : {};\n\n this.shape = arrow.clone({\n fill: colorPrimary,\n opacity: opacity,\n pointerLength: this.pointerLength,\n pointerWidth: this.pointerWidth,\n stroke: colorPrimary,\n strokeWidth: size,\n id,\n ...dashedOptions,\n });\n }\n\n update(coordinates: Coordinates[], scaleFactor: number) {\n this.shape.pointerLength(this.pointerLength * scaleFactor);\n this.shape.pointerWidth(this.pointerWidth * scaleFactor);\n this.shape.dash(this.getDashedLinePoints(scaleFactor));\n this.shape.strokeWidth(this.size * scaleFactor);\n this.shape.points(\n coordinates.reduce(\n (acc: number[], coordinate) => [...acc, coordinate.x * scaleFactor, coordinate.y * scaleFactor],\n [],\n ),\n );\n }\n\n private getDashedLinePoints(scaleFactor: number) {\n return this.isDashed ? [this.size * scaleFactor * DASH_SPACING, this.size * scaleFactor * DASH_SPACING] : [];\n }\n}\n","import Konva from 'konva';\nimport { GlyphElement, OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { ArrowGlyph } from '../glyphs/ArrowGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { getPlayerReferences, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class LineToHalfwayWithArrows extends OverlayElementGlyphs {\n arrow: ArrowGlyph;\n overlayElementTypeId: string;\n playerId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const lineGlyphConfig = config.glyphs[0];\n\n this.arrow = new ArrowGlyph({\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n colorPrimary: lineGlyphConfig.colorPrimary,\n dashed: lineGlyphConfig.element === GlyphElement.DASHED_LINE,\n });\n\n this.endFrame = endFrame;\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playerId = getPlayerReferences(this.references)[0];\n this.startFrame = startFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.arrow.shape);\n }\n\n update({ playersPositions, scale, frame, pitchSize }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n\n this.excludedPlayerIdsFromRender.includes(this.playerId) ? this.hide() : this.show();\n const player = playersPositions?.[frame]?.[this.playerId];\n\n if (player) {\n this.arrow.update(\n [\n player,\n {\n x: pitchSize.length / 2,\n y: player.y,\n },\n ],\n scale,\n );\n }\n }\n\n removeFromLayer = () => {\n this.arrow.shape.destroy();\n };\n\n show = () => {\n this.arrow.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.arrow.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\nimport { GlyphElement, OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { ArrowGlyph } from '../glyphs/ArrowGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { findPlayersCoordinates, getPlayerReferences, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class LineWithArrow extends OverlayElementGlyphs {\n arrow: ArrowGlyph;\n overlayElementTypeId: string;\n playersIds: string[];\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const lineGlyphConfig = config.glyphs[0];\n\n this.arrow = new ArrowGlyph({\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n colorPrimary: lineGlyphConfig.colorPrimary,\n dashed: lineGlyphConfig.element === GlyphElement.DASHED_LINE,\n });\n\n this.endFrame = endFrame;\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playersIds = getPlayerReferences(this.references);\n this.startFrame = startFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.arrow.shape);\n }\n\n update({ playersPositions, scale, frame }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n\n const firstPlayer = findPlayersCoordinates([this.playersIds[0]], playersPositions[frame]);\n const lastPlayer = findPlayersCoordinates([this.playersIds[1]], playersPositions[this.endFrame]);\n\n if (firstPlayer[this.playersIds[0]] && lastPlayer[this.playersIds[1]]) {\n // TODO check why sometimes lastPlayer is undefined\n const excludedPlayerIds = this.excludedPlayerIdsFromRender;\n\n //TODO fix how priority is handled (sometimes is 1 and sometimes is 0)\n excludedPlayerIds.includes(this.playersIds[1]) && excludedPlayerIds.includes(this.playersIds[0])\n ? this.hide()\n : this.show();\n this.arrow.update([firstPlayer[this.playersIds[0]], lastPlayer[this.playersIds[1]]], scale);\n }\n }\n\n removeFromLayer = () => {\n this.arrow.shape.destroy();\n };\n\n show = () => {\n this.arrow.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.arrow.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\nimport { Coordinates, OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { PolygonGlyph } from '../glyphs/PolygonGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport {\n adjustStaticCoordinatesByPitchSize,\n findPlayersCoordinates,\n getPlayerReferences,\n getStaticCoordinates,\n isFrameInRange,\n} from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class PolygonArea extends OverlayElementGlyphs {\n area: PolygonGlyph;\n overlayElementTypeId: string;\n playersIds: string[];\n staticCoordinates: Coordinates[];\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const polygonGlyphConfig = config.glyphs[0];\n\n this.area = new PolygonGlyph({\n colorPrimary: polygonGlyphConfig.colorPrimary,\n opacity: polygonGlyphConfig.alpha ?? 1,\n size: polygonGlyphConfig.size,\n });\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playersIds = getPlayerReferences(this.references);\n\n this.staticCoordinates = getStaticCoordinates(this.references);\n this.startFrame = startFrame;\n this.endFrame = endFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.area.shape);\n }\n\n update({ playersPositions, scale, frame, pitchSize }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n\n const playersCoordinates = findPlayersCoordinates(this.playersIds, playersPositions[frame]);\n\n this.area.update(\n [\n ...this.playersIds.map((playerId) => playersCoordinates[playerId]),\n ...adjustStaticCoordinatesByPitchSize(this.staticCoordinates, pitchSize),\n ],\n scale,\n );\n\n this.area.shape.show();\n }\n\n removeFromLayer = () => {\n this.area.shape.destroy();\n };\n\n show = () => {\n this.area.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.area.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\n\nimport { Coordinates } from '../../types';\n\ntype Options = { colorPrimary: string; opacity: number; size: number };\n\nconst circle = new Konva.Circle({\n listening: false,\n});\n\nexport class ScatterGlyph {\n shape: Konva.Group;\n size: number;\n colorPrimary: string;\n\n constructor({ colorPrimary, opacity, size }: Options) {\n this.shape = new Konva.Group({ opacity });\n this.size = size;\n this.colorPrimary = colorPrimary;\n }\n\n update(coordinates: Coordinates[], scaleFactor: number) {\n this.shape.destroyChildren();\n\n coordinates.forEach((coordinate) => {\n if (coordinate) {\n this.shape.add(\n circle.clone({\n fill: this.colorPrimary,\n radius: this.size * scaleFactor,\n x: coordinate.x * scaleFactor,\n y: coordinate.y * scaleFactor,\n }),\n );\n }\n });\n }\n}\n","import Konva from 'konva';\nimport { Glyph, OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { ScatterGlyph } from '../glyphs/ScatterGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { findPlayersCoordinates, getPlayerReferences, isFrameInRange, sampleArrayValues } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class ScatterLine extends OverlayElementGlyphs {\n scatter: ScatterGlyph;\n overlayElementTypeId: string;\n playerId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n updated: boolean = false;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n config: Glyph;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const lineGlyphConfig = config.glyphs[0];\n\n this.scatter = new ScatterGlyph({\n colorPrimary: lineGlyphConfig.colorPrimary,\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n });\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playerId = getPlayerReferences(this.references)[0];\n this.startFrame = startFrame;\n this.endFrame = endFrame;\n this.priority = config.priority;\n this.config = lineGlyphConfig;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.scatter.shape);\n }\n\n update({ playersPositions, scale, frame, pitchSize }: UpdatePositionOptions) {\n if (this.excludedPlayerIdsFromRender.includes(this.playerId) || !playersPositions[frame]) {\n this.hide();\n return;\n } else {\n this.show();\n }\n\n if (!isFrameInRange(frame, this) || this.updated) return;\n\n this.updated = true;\n\n const sampleOfFrames = sampleArrayValues(this.startFrame, this.endFrame, 8);\n const coordinatesOfPlayerInAllFrames = sampleOfFrames.map((frame) => {\n return findPlayersCoordinates([this.playerId], playersPositions[frame]);\n });\n\n this.scatter.update(\n coordinatesOfPlayerInAllFrames.map((coordinatesInFrame) => coordinatesInFrame[this.playerId]),\n scale,\n );\n }\n\n removeFromLayer = () => {\n this.scatter.shape.destroy();\n };\n\n show = () => {\n this.scatter.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.updated = false;\n this.scatter.shape.destroyChildren();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import { Colors } from 'kognia-ui';\nimport Konva from 'konva';\n\nimport { Coordinates } from '../../types';\nimport { createSemicircle } from '../assets';\n\ntype Options = {\n colorPrimary: Colors;\n colorSecondary: Colors;\n opacity: number;\n size: number;\n rotation: number;\n imageInterface: unknown;\n};\n\nexport class SemiCircleGlyph {\n shape: Konva.Image;\n size: number;\n\n constructor({ colorPrimary, colorSecondary, opacity, size, rotation, imageInterface }: Options) {\n this.size = size;\n\n this.shape = new Konva.Image({\n opacity: opacity,\n width: size,\n height: size,\n image: createSemicircle(colorPrimary, colorSecondary, imageInterface),\n rotation: rotation,\n });\n }\n\n update(coordinates: Coordinates, scaleFactor: number) {\n const adjustedSize = this.size * scaleFactor;\n this.shape.width(adjustedSize);\n this.shape.height(adjustedSize);\n this.shape.offsetX(adjustedSize / 2);\n this.shape.offsetY(adjustedSize / 2);\n this.shape.x(coordinates.x * scaleFactor);\n this.shape.y(coordinates.y * scaleFactor);\n }\n}\n","import Konva from 'konva';\nimport { OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { SemiCircleGlyph } from '../glyphs/SemiCircleGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { findPlayersCoordinates, getPlayerReferences, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n imageInterface: unknown;\n};\n\nconst getRotationFromStyle = (style: string) => {\n switch (style) {\n case 'semicircle-left':\n return 180;\n case 'semicircle-up':\n return -90;\n case 'semicircle-down':\n return 90;\n case 'semicircle-right':\n default:\n return 0;\n }\n};\n\nexport class SemiCircleHighlight extends OverlayElementGlyphs {\n semiCircle: SemiCircleGlyph;\n overlayElementTypeId: string;\n playerId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame, imageInterface }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const lineGlyphConfig = config.glyphs[0];\n const rotation = getRotationFromStyle(lineGlyphConfig.style ?? '');\n\n this.semiCircle = new SemiCircleGlyph({\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n colorPrimary: lineGlyphConfig.colorPrimary,\n colorSecondary: lineGlyphConfig.colorSecondary ?? lineGlyphConfig.colorPrimary,\n rotation,\n imageInterface,\n });\n\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playerId = getPlayerReferences(this.references)[0];\n this.startFrame = startFrame;\n this.endFrame = endFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.semiCircle.shape);\n }\n\n update({ playersPositions, scale, frame }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n const playersCoordinates = findPlayersCoordinates([this.playerId], playersPositions[frame])?.[this.playerId];\n\n this.excludedPlayerIdsFromRender.includes(this.playerId) || !playersCoordinates ? this.hide() : this.show();\n\n playersCoordinates && this.semiCircle.update(playersCoordinates, scale);\n }\n\n removeFromLayer = () => {\n this.semiCircle.shape.destroy();\n };\n\n show = () => {\n this.semiCircle.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.semiCircle.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\n\nimport { Coordinates } from '../../types';\n\ntype Options = { colorPrimary: string; opacity: number; size: number };\n\nconst line = new Konva.Line({\n closed: true,\n lineCap: 'round',\n lineJoin: 'round',\n listening: false,\n points: [],\n});\n\nexport class PolylineGlyph {\n shape: Konva.Line;\n size: number;\n\n constructor({ colorPrimary, opacity, size }: Options) {\n this.shape = line.clone({\n opacity: opacity,\n stroke: colorPrimary,\n strokeWidth: size,\n });\n this.size = size;\n }\n\n update(coordinates: Coordinates[], scaleFactor: number) {\n this.shape.strokeWidth(this.size * scaleFactor);\n this.shape.points(\n coordinates.reduce(\n (acc, coordinate) => [...acc, coordinate.x * scaleFactor, coordinate.y * scaleFactor],\n [] as number[],\n ),\n );\n }\n}\n","import Konva from 'konva';\nimport { OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { PolylineGlyph } from '../glyphs/PolylineGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { findPlayersCoordinates, getPlayerReferences, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class TeamPerimeter extends OverlayElementGlyphs {\n area: PolylineGlyph;\n overlayElementTypeId: string;\n playersIds: string[];\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const polygonGlyphConfig = config.glyphs[0];\n\n this.area = new PolylineGlyph({\n colorPrimary: polygonGlyphConfig.colorPrimary,\n opacity: polygonGlyphConfig.alpha ?? 1,\n size: polygonGlyphConfig.size,\n });\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playersIds = getPlayerReferences(this.references);\n this.startFrame = startFrame;\n this.endFrame = endFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.area.shape);\n }\n\n update({ playersPositions, scale, frame }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n\n const playersCoordinates = findPlayersCoordinates(this.playersIds, playersPositions[frame]);\n\n this.excludedPlayerIdsFromRender.some((p) => this.playersIds.includes(p)) ? this.hide() : this.show();\n\n this.area.update(\n this.playersIds\n .filter((playerId) => {\n if (!playersCoordinates[playerId]) {\n console.warn(`No coordinates for player ${playerId} in frame ${frame} in overlay element TeamPerimeter`);\n }\n return playersCoordinates[playerId];\n })\n .map((playerId) => playersCoordinates[playerId]),\n scale,\n );\n\n this.area.shape.show();\n }\n\n removeFromLayer = () => {\n this.area.shape.destroy();\n };\n\n show = () => {\n this.area.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.area.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\nimport { OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { HighlightGlyph } from '../glyphs/HighlightGlyph';\nimport { LineGlyph } from '../glyphs/LineGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { findPlayersCoordinates, getPlayerReferences, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n imageInterface: unknown;\n};\n\nexport class WidthPlayerHighlight extends OverlayElementGlyphs {\n highlightPlayer: HighlightGlyph;\n line: LineGlyph;\n overlayElementTypeId: string;\n playersIds: string[];\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame, imageInterface }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const highlightGlyphConfig = config.glyphs[0];\n const lineGlyphConfig = config.glyphs[1];\n const playersIds = getPlayerReferences(references);\n\n this.highlightPlayer = new HighlightGlyph({\n colorPrimary: highlightGlyphConfig.colorPrimary,\n colorSecondary: highlightGlyphConfig.colorSecondary,\n opacity: highlightGlyphConfig.alpha ?? 1,\n playerId: playersIds[0],\n size: highlightGlyphConfig.size,\n startX: 0,\n startY: 0,\n type: highlightGlyphConfig.style === 'circle' ? 'circle' : 'dashed',\n imageInterface,\n });\n\n this.line = new LineGlyph({\n colorPrimary: lineGlyphConfig.colorPrimary,\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n });\n this.endFrame = endFrame;\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playersIds = getPlayerReferences(this.references);\n this.startFrame = startFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.highlightPlayer.shape);\n layer.add(this.line.shape);\n }\n\n update({ playersPositions, scale, frame, pitchSize }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n\n const playersCoordinates = findPlayersCoordinates([this.highlightPlayer.playerId], playersPositions[frame]);\n const playerCoordinates = playersCoordinates[this.highlightPlayer.playerId];\n\n this.excludedPlayerIdsFromRender.includes(this.highlightPlayer.playerId) || !playerCoordinates\n ? this.hide()\n : this.show();\n\n if (!playerCoordinates) {\n console.warn(\n `No coordinates for player ${this.highlightPlayer.playerId} in frame ${frame} in overlay element WidthPlayerHighlight`,\n );\n return;\n }\n\n this.line.update(\n [\n playerCoordinates,\n {\n x: playerCoordinates.x,\n y: playerCoordinates.y > pitchSize.width / 2 ? pitchSize.width : 0,\n },\n ],\n scale,\n );\n this.highlightPlayer.update(\n playersCoordinates[this.highlightPlayer.playerId].x,\n playersCoordinates[this.highlightPlayer.playerId].y,\n scale,\n );\n }\n\n removeFromLayer = () => {\n this.highlightPlayer.shape.destroy();\n this.line.shape.destroy();\n };\n\n show = () => {\n this.highlightPlayer.shape.show();\n this.line.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.highlightPlayer.shape.hide();\n this.line.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\nimport { GlyphElement, OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { ArrowGlyph } from '../glyphs/ArrowGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { findPlayersCoordinates, getPlayerReferences, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class StraightLineToEndPositionWithArrow extends OverlayElementGlyphs {\n arrow: ArrowGlyph;\n overlayElementTypeId: string;\n playersIds: string[];\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n const lineGlyphConfig = config.glyphs[0];\n\n this.arrow = new ArrowGlyph({\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n colorPrimary: lineGlyphConfig.colorPrimary,\n dashed: lineGlyphConfig.element === GlyphElement.DASHED_LINE,\n });\n\n this.endFrame = endFrame;\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playersIds = getPlayerReferences(this.references);\n this.startFrame = startFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.arrow.shape);\n }\n\n update({ playersPositions, scale, frame }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n\n const playerCurrentFrameCoordinates = findPlayersCoordinates([this.playersIds[0]], playersPositions[frame]);\n const playerEndFrameCoordinates = findPlayersCoordinates([this.playersIds[0]], playersPositions[this.endFrame]);\n\n if (playerCurrentFrameCoordinates[this.playersIds[0]]) {\n this.arrow.update(\n [\n playerCurrentFrameCoordinates[this.playersIds[0]],\n {\n x: playerEndFrameCoordinates[this.playersIds[0]]?.x,\n y: playerCurrentFrameCoordinates[this.playersIds[0]].y,\n },\n ],\n scale,\n );\n }\n }\n\n removeFromLayer = () => {\n this.arrow.shape.destroy();\n };\n\n show = () => {\n this.arrow.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.arrow.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\nimport { GlyphElement, OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { ArrowGlyph } from '../glyphs/ArrowGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { getPlayerReferences, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class PlayerVerticalArrow extends OverlayElementGlyphs {\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n playerShapes: ArrowGlyph[];\n playersIds: string[];\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const lineGlyphConfig = config.glyphs[0];\n\n this.endFrame = endFrame;\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.startFrame = startFrame;\n this.priority = config.priority;\n this.playersIds = getPlayerReferences(this.references);\n this.playerShapes = this.playersIds.map((playerId) => {\n return new ArrowGlyph({\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n colorPrimary: lineGlyphConfig.colorPrimary,\n dashed: lineGlyphConfig.element === GlyphElement.DASHED_LINE,\n id: playerId,\n });\n });\n }\n\n addToLayer(layer: Konva.Layer) {\n this.playerShapes.forEach((player) => {\n layer.add(player.shape);\n });\n }\n\n update({ playersPositions, scale, frame }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n this.excludedPlayerIdsFromRender.some((p) => this.playersIds.includes(p)) ? this.hide() : this.show();\n\n const players = playersPositions[frame];\n const lastFramePlayers = playersPositions[this.endFrame];\n\n this.playerShapes.forEach((player) => {\n if (!players[player.shape.id()]) return player.shape.hide();\n\n player.update(\n [\n players[player.shape.id()],\n {\n x: lastFramePlayers[player.shape.id()].x,\n y: players[player.shape.id()].y,\n },\n ],\n scale,\n );\n });\n }\n\n removeFromLayer = () => {\n this.playerShapes.forEach((player) => player.shape.destroy());\n };\n\n show = () => {\n this.playerShapes.forEach((player) => player.shape.show());\n this.isVisible = true;\n };\n\n hide = () => {\n this.playerShapes.forEach((player) => player.shape.hide());\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\nimport { GlyphElement, OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { ArrowGlyph } from '../glyphs/ArrowGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { findPlayersCoordinates, getPlayerReferences, isFrameInRange, sampleArrayValues } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class PolyLineWithArrowCurrentPosition extends OverlayElementGlyphs {\n arrow: ArrowGlyph;\n overlayElementTypeId: string;\n playersIds: string[];\n references: Reference[];\n startFrame: number;\n endFrame: number;\n updated: boolean = false;\n priority: number;\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const lineGlyphConfig = config.glyphs[0];\n\n this.arrow = new ArrowGlyph({\n colorPrimary: lineGlyphConfig.colorPrimary,\n dashed: lineGlyphConfig.element === GlyphElement.DASHED_LINE,\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n });\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.playersIds = getPlayerReferences(this.references);\n this.startFrame = startFrame;\n this.endFrame = endFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.arrow.shape);\n }\n\n update({ playersPositions, scale, frame }: UpdatePositionOptions) {\n this.excludedPlayerIdsFromRender.some((p) => this.playersIds.includes(p)) ? this.hide() : this.show();\n if (!isFrameInRange(frame, this)) return;\n\n const sampleOfFrames = sampleArrayValues(frame, this.endFrame, 12);\n const coordinatesOfPlayerInAllFrames = sampleOfFrames.map((frame) => {\n return {\n frame: frame,\n cords: findPlayersCoordinates([this.playersIds[0]], playersPositions[frame]),\n };\n });\n\n const coordinates = coordinatesOfPlayerInAllFrames\n .filter((item) => item.frame > frame)\n .map((coordinatesInFrame) => coordinatesInFrame.cords[this.playersIds[0]]);\n\n if (coordinates.some((c) => c === undefined)) {\n this.hide();\n return;\n } else {\n this.show();\n }\n\n this.arrow.update(coordinates, scale);\n }\n\n removeFromLayer = () => {\n this.arrow.shape.destroy();\n };\n\n show = () => {\n this.arrow.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.arrow.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import Konva from 'konva';\nimport { Coordinates, OverlayElement } from '../../types';\n\nimport { Reference } from '../../utils/loaders';\nimport { CircleAreaGlyph } from '../glyphs/CircleAreaGlyph';\nimport { OverlayElementGlyphs, UpdatePositionOptions } from './interface';\nimport { adjustStaticCoordinatesByPitchSize, getStaticCoordinates, isFrameInRange } from './utils';\n\ntype Options = {\n config: OverlayElement;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n};\n\nexport class CircleAreaHighlight extends OverlayElementGlyphs {\n circle: CircleAreaGlyph;\n finalSize: number = 0;\n initialSize: number = 0;\n overlayElementTypeId: string;\n references: Reference[];\n startFrame: number;\n endFrame: number;\n priority: number;\n staticCoordinates: Coordinates[];\n excludedPlayerIdsFromRender: string[] = [];\n isVisible: boolean = true;\n\n constructor({ config, endFrame, overlayElementTypeId, references, startFrame }: Options) {\n super();\n // TODO should we do this more explicit in config?\n const lineGlyphConfig = config.glyphs[0];\n\n this.circle = new CircleAreaGlyph({\n opacity: lineGlyphConfig.alpha ?? 1,\n size: lineGlyphConfig.size,\n colorPrimary: lineGlyphConfig.colorPrimary,\n });\n\n this.initialSize = lineGlyphConfig.initial_size ?? 1;\n this.finalSize = lineGlyphConfig.final_size ?? 1;\n this.overlayElementTypeId = overlayElementTypeId;\n this.references = references;\n this.staticCoordinates = getStaticCoordinates(this.references);\n this.startFrame = startFrame;\n this.endFrame = endFrame;\n this.priority = config.priority;\n }\n\n addToLayer(layer: Konva.Layer) {\n layer.add(this.circle.shape);\n }\n\n update({ scale, frame, pitchSize }: UpdatePositionOptions) {\n if (!isFrameInRange(frame, this)) return;\n\n const coordinates = adjustStaticCoordinatesByPitchSize(this.staticCoordinates, pitchSize);\n const circleCenter = coordinates[0];\n const circleEdge = coordinates[1];\n const radius = circleEdge.x - circleCenter.x;\n\n this.circle.update(radius, coordinates[0], scale);\n }\n\n removeFromLayer = () => {\n this.circle.shape.destroy();\n };\n\n show = () => {\n this.circle.shape.show();\n this.isVisible = true;\n };\n\n hide = () => {\n this.circle.shape.hide();\n this.isVisible = false;\n };\n\n setExcludedPlayerIdsFromRender(references: string[]) {\n this.excludedPlayerIdsFromRender = references;\n }\n}\n","import { OverlayElementNames, overlayElementTypes } from '../../types';\n\nimport { OverlayElement } from '../../utils/loaders';\nimport { ArrowHighlight } from './ArrowHighlight';\nimport { PlayerCircleAreaHighlight } from './PlayerCircleAreaHighlight';\nimport { CircleClosestRivalHighlight } from './CircleClosestRivalHighlight';\nimport { DefensiveLinePlayerDepthHighlight } from './DefensiveLinePlayerDepthHighlight';\nimport { HighlightCirclePlayer } from './HighlightCirclePlayer';\nimport { OverlayElementGlyphs } from './interface';\nimport { LineHighlight } from './LineHighlight';\nimport { LineToHalfwayWithArrows } from './LineToHalfwayWithArrow';\nimport { LineWithArrow } from './LineWithArrow';\nimport { PolygonArea } from './PolygonArea';\nimport { ScatterLine } from './ScatterLine';\nimport { SemiCircleHighlight } from './SemiCircleHighlight';\nimport { TeamPerimeter } from './TeamPerimeter';\nimport { WidthPlayerHighlight } from './WidthPlayerHighlight';\nimport { StraightLineToEndPositionWithArrow } from './StraightLineToEndPositionWithArrow';\nimport { PlayerVerticalArrow } from './PlayersVerticalArrow';\nimport { PolyLineWithArrowCurrentPosition } from './PolyLineWithArrowCurrentPosition';\nimport { CircleAreaHighlight } from './CircleAreaHighlight';\n\nexport const overlayElementsFactory = (\n overlayElement: OverlayElement,\n imageInterface: unknown,\n): OverlayElementGlyphs => {\n const options = {\n references: overlayElement.references,\n overlayElementTypeId: overlayElement.overlayElementTypeId,\n startFrame: overlayElement.startFrame,\n endFrame: overlayElement.endFrame,\n config: overlayElementTypes[overlayElement.overlayElementTypeId],\n imageInterface,\n };\n\n switch (overlayElement.overlayElementTypeId) {\n case OverlayElementNames.DEFENSIVE_LINE_PLAYER_DEPTH_HIGHLIGHT:\n return new DefensiveLinePlayerDepthHighlight(options);\n\n case OverlayElementNames.TEAM_PERIMETER_AFTER_LOSS:\n case OverlayElementNames.TEAM_PERIMETER:\n case OverlayElementNames.TEAM_PERIMETER_AFTER_RECOVERY:\n return new TeamPerimeter(options);\n\n case OverlayElementNames.PLAYER_TAKING_ADVANTAGE_OF_DEFENSIVE_LINE_IMBALANCE_HIGHLIGHT:\n case OverlayElementNames.NEUTRALIZING_OPPONENT_ADVANTAGE_OF_DEFENSIVE_LINE_IMBALANCE_ATTACKING_PLAYER_HIGHLIGHT:\n case OverlayElementNames.DEFENDING_PLAYER_MARKING_POSSESSOR_HIGHLIGHT:\n case OverlayElementNames.EMERGENCY_PASS_PASSER_HIGHLIGHT:\n case OverlayElementNames.EMERGENCY_PASS_RECEIVER_HIGHLIGHT:\n case OverlayElementNames.FINISHING_AFTER_CROSS_PLAYER_HIGHLIGHT:\n case OverlayElementNames.FINISHING_PASS_PASSER_HIGHLIGHT:\n case OverlayElementNames.FINISHING_PLAYER_HIGHLIGHT:\n case OverlayElementNames.GOAL_KICK_START_PASSER_HIGHLIGHT:\n case OverlayElementNames.GOAL_KICK_START_RECEIVER_HIGHLIGHT:\n case OverlayElementNames.LONG_BALL_PASSER_HIGHLIGHT:\n case OverlayElementNames.MARKED_ATTACKING_PLAYER_HIGHLIGHT:\n case OverlayElementNames.MARKER_DEFENDING_PLAYER_HIGHLIGHT:\n case OverlayElementNames.OVERCOME_PLAYER_HIGHLIGHT:\n case OverlayElementNames.OVERCOMING_PASS_PASSER_HIGHLIGHT:\n case OverlayElementNames.PASSING_BETWEEN_LINES_PASSER_HIGHLIGHT:\n case OverlayElementNames.REALIZED_FINISHING_SUPPORT_HIGHLIGHT:\n case OverlayElementNames.SWITCH_OF_PLAY_PASSER_HIGHLIGHT:\n case OverlayElementNames.SWITCH_OF_PLAY_RECEIVER_HIGHLIGHT:\n case OverlayElementNames.UNMARKED_ATTACKING_PLAYER_HIGHLIGHT:\n case OverlayElementNames.PROGRESSION_PLAYER_HIGHLIGHT:\n case OverlayElementNames.HOLDING_AFTER_LOSS_HIGHLIGHT:\n case OverlayElementNames.FOUL_PLAYER_HIGHLIGHT:\n case OverlayElementNames.CROSS_PASSER_HIGHLIGHT:\n case OverlayElementNames.POSSESSION_PLAYER_HIGHLIGHT:\n case OverlayElementNames.PRESSING_AFTER_LOSS_HIGHLIGHT:\n case OverlayElementNames.DEFENDER_PRESSING_POSSESSOR_HIGHLIGHT:\n return new HighlightCirclePlayer(options);\n\n case OverlayElementNames.GOAL_KICK_SECTION_HIGHLIGHT:\n case OverlayElementNames.CROSS_SAME_TEAM_TOUCH_ZONE_BORDER_HIGHLIGHT:\n case OverlayElementNames.CROSS_OPPOSITION_TEAM_TOUCH_ZONE_BORDER_HIGHLIGHT:\n return new PolygonArea(options);\n\n case OverlayElementNames.WIDE_PLAYER_HIGHLIGHT:\n return new WidthPlayerHighlight(options);\n\n case OverlayElementNames.DEFENSIVE_LINE_WIDTH_GAP_OK:\n case OverlayElementNames.DEFENSIVE_LINE_WIDTH_GAP_NOT_OK:\n case OverlayElementNames.MARKER_TO_MARKED_LINE:\n return new LineHighlight(options);\n\n case OverlayElementNames.OVERCOMING_PASS_ARROW:\n case OverlayElementNames.LONG_BALL_PASS_ARROW:\n case OverlayElementNames.SWITCH_OF_PLAY_PASS_ARROW:\n case OverlayElementNames.FINISHING_PASS_OVERCOMING_PASS_ARROW:\n case OverlayElementNames.PASS_BEHIND_DEFENSIVE_LINE_ARROW:\n return new LineWithArrow(options);\n\n case OverlayElementNames.MOVING_FORWARD_DURING_ORGANIZED_PRESSURE_ARROWS:\n return new StraightLineToEndPositionWithArrow(options);\n\n case OverlayElementNames.DEFENSIVE_LINE_TO_HALFWAY_LINE_ARROWS:\n return new LineToHalfwayWithArrows(options);\n\n case OverlayElementNames.CLEAR_THE_BOX_DEFENDER_ARROW:\n return new PlayerVerticalArrow(options);\n\n case OverlayElementNames.RUN_BEHIND_DEFENSIVE_LINE:\n case OverlayElementNames.DEFENDING_RUN_BEHIND_DEFENSIVE_LINE:\n case OverlayElementNames.RUN_INTO_THE_BOX:\n case OverlayElementNames.DEFENDING_RUN_INTO_THE_BOX:\n return new PolyLineWithArrowCurrentPosition(options);\n\n case OverlayElementNames.RECEIVING_BETWEEN_LINES_CLOSEST_PLAYER_CIRCLE:\n return new CircleClosestRivalHighlight(options);\n\n case OverlayElementNames.FOUL_CIRCLE_HIGHLIGHT:\n case OverlayElementNames.POSSESSION_CIRCLE_HIGHLIGHT:\n case OverlayElementNames.SECOND_BALL_OFFENSIVE_CONTROLLER_HIGHLIGHT:\n case OverlayElementNames.SECOND_BALL_DEFENSIVE_CONTROLLER_HIGHLIGHT:\n return new PlayerCircleAreaHighlight(options);\n\n case OverlayElementNames.REALIZED_FINISHING_SUPPORT_SUPPORTING_PLAYER_PATH:\n case OverlayElementNames.REALIZED_VERTICAL_SUPPORT_SUPPORTING_PLAYER_PATH:\n case OverlayElementNames.REALIZED_HORIZONTAL_SUPPORT_SUPPORTING_PLAYER_PATH:\n case OverlayElementNames.EMERGENCY_SUPPORT_SUPPORTING_PLAYER_PATH:\n return new ScatterLine(options);\n\n case OverlayElementNames.VERTICALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_LEFT:\n case OverlayElementNames.VERTICALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_RIGHT:\n case OverlayElementNames.HORIZONTALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_DOWN:\n case OverlayElementNames.HORIZONTALLY_OVERCOMING_PASS_RECEIVER_HIGHLIGHT_SEMICIRCLE_UP:\n case OverlayElementNames.STRIKER_EMERGENCY_PASS_SUPPORTER_HIGHLIGHT_SEMICIRCLE_UP:\n return new SemiCircleHighlight(options);\n\n case OverlayElementNames.PROGRESSION_AFTER_RECOVERY_ARROW:\n return new ArrowHighlight(options);\n\n case OverlayElementNames.PASS_BEHIND_DEFENSIVE_LINE_RECEIVER_HIGHLIGHT:\n return new CircleAreaHighlight(options);\n\n default:\n throw new Error(`Overlay element type ${overlayElement.overlayElementTypeId} is not supported`);\n }\n};\n","import { TacticId } from '../main';\nimport { OverlayTactic } from '../utils/loaders';\nimport { OverlayElementGlyphs } from './overlay-elements/interface';\n\nexport const findExcludedReferences = (overlayElements: OverlayElementGlyphs[]) => {\n const minPriority = Math.min(...overlayElements.map((c) => c.priority));\n const conflictingOverlayElementWithMinPriority = overlayElements.find((c) => c.priority === minPriority);\n if (conflictingOverlayElementWithMinPriority) {\n return conflictingOverlayElementWithMinPriority.references;\n }\n\n return [];\n};\n\nexport function findOverlayTacticsByFrame(frame: number, overlayTactics: OverlayTactic[]) {\n return overlayTactics\n .filter((overlayTactic: OverlayTactic) => {\n return frame >= overlayTactic.startFrame && frame <= overlayTactic.endFrame;\n })\n .filter((t) => t.overlayElements.some((e) => frame >= e.startFrame && frame <= e.endFrame));\n}\n\nexport function filterOverlayTacticsByTacticId(overlayTactics: OverlayTactic[], tactics?: TacticId[]) {\n return overlayTactics.filter((overlayElement) => !tactics || tactics.includes(overlayElement.tacticTypeId));\n}\n\nexport function filterOverlayTactics(frame: number, overlayTactics: OverlayTactic[], tactics?: TacticId[]) {\n const activeOverlayTactics = findOverlayTacticsByFrame(frame, overlayTactics);\n\n return {\n availableOverlayTactics: activeOverlayTactics,\n filteredOverlayTactics: filterOverlayTacticsByTacticId(activeOverlayTactics, tactics),\n };\n}\n","import Konva from 'konva';\nimport { PlayersPositions, TacticId } from '../main';\nimport { PitchSize } from '../types';\nimport { Time } from '../utils/decorators';\n\nimport { OverlayTactic, OverlayTacticWithGlyphs, Segment } from '../utils/loaders';\nimport { overlayElementsFactory } from './overlay-elements/OverlayElementsFactory';\nimport { getPlayerReferences } from './overlay-elements/utils';\nimport { Teams } from './types';\nimport { filterOverlayTactics, findExcludedReferences } from './utils';\n\ntype SearchOverlayElement = {\n key: string;\n overlayTacticWithGlyphs: OverlayTacticWithGlyphs;\n};\n\ntype RenderFrameOptions = {\n container: HTMLDivElement;\n frame: number;\n playersPositions: PlayersPositions;\n overlayTactics: OverlayTactic[];\n pitchSize: PitchSize;\n segments: Segment[];\n scale: number;\n teams: Teams;\n filters: {\n tactics?: TacticId[];\n };\n};\n\nexport type OverlayElementDebugInfo = {\n id: string;\n priority: number;\n players: string[];\n isVisible: boolean;\n excludedPlayers: string[];\n};\n\nconst generateOverlayTacticKey = (overlayTactic: OverlayTactic) =>\n `${overlayTactic.tacticTypeId}-${overlayTactic.startFrame}-${overlayTactic.endFrame}`;\n\nexport interface OverlayRendererConfig {\n useContainer: boolean;\n imageInterface: unknown;\n}\n\nexport class OverlayRenderer {\n frame: number = 0;\n activeOverlayElements: SearchOverlayElement[] = [];\n availableOverlayTactics: OverlayTactic[] = [];\n layer: Konva.Layer;\n stage: Konva.Stage | undefined;\n useContainer: boolean;\n imageInterface: unknown;\n\n constructor(config: OverlayRendererConfig) {\n this.layer = new Konva.Layer({\n listening: false,\n x: 0,\n y: 0,\n });\n this.stage = undefined;\n this.useContainer = config.useContainer;\n this.imageInterface = config.imageInterface;\n }\n\n renderFrame({\n container,\n frame,\n playersPositions,\n overlayTactics,\n scale,\n teams,\n pitchSize,\n segments,\n filters,\n }: RenderFrameOptions) {\n this.frame = frame;\n if (!this.stage) {\n if (this.useContainer) {\n this.stage = new Konva.Stage({\n container,\n });\n } else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n this.stage = new Konva.Stage();\n }\n this.stage.add(this.layer);\n }\n\n if (this.useContainer && this.stage?.container() !== container) this.stage.container(container);\n\n if (this.stage.width() !== pitchSize.length * scale || this.stage.height() !== pitchSize.width * scale) {\n if (this.useContainer) {\n container.style.width = `${pitchSize.length * scale}px`;\n container.style.height = `${pitchSize.width * scale}px`;\n }\n this.stage.width(pitchSize.length * scale);\n this.stage.height(pitchSize.width * scale);\n }\n\n this.setupCurrentFrame(frame, overlayTactics, filters);\n const overlayElements = this.resolveOverlayElementsPriorities(this.activeOverlayElements, frame);\n\n overlayElements.map((overlayElementGlyphs) => {\n overlayElementGlyphs?.update({\n frame,\n playersPositions,\n scale,\n pitchSize,\n segments,\n teams,\n });\n });\n\n return this.getFrameInfo();\n }\n\n private getFrameInfo() {\n return {\n frameNumber: this.frame,\n frameTactics: this.getAvailableTacticIdsForCurrentFrame(),\n overlayElementsDebugInfo: this.getOverlayElementsForCurrentFrame(),\n };\n }\n\n private getAvailableTacticIdsForCurrentFrame(): TacticId[] {\n return this.availableOverlayTactics.map((overlayTactic) => overlayTactic.tacticTypeId);\n }\n\n private getOverlayElementsForCurrentFrame(): OverlayElementDebugInfo[] {\n return this.activeOverlayElements\n .map((overlayElement) => overlayElement.overlayTacticWithGlyphs.overlayElementsGlyphs)\n .flat()\n .filter((overlayElement) => this.frame >= overlayElement.startFrame && this.frame <= overlayElement.endFrame)\n .map((overlayElement) => ({\n id: overlayElement.overlayElementTypeId,\n priority: overlayElement.priority,\n players: getPlayerReferences(overlayElement.references),\n isVisible: overlayElement.isVisible,\n excludedPlayers: overlayElement.excludedPlayerIdsFromRender,\n }));\n }\n\n @Time()\n private resolveOverlayElementsPriorities(searchOverlayElements: SearchOverlayElement[], frame: number) {\n const overlayElementsWithKey = searchOverlayElements\n .map((activeOverlayTactic) => activeOverlayTactic.overlayTacticWithGlyphs.overlayElementsGlyphs)\n .flat();\n\n overlayElementsWithKey.forEach((overlayElementWithGlyphs) => {\n const playerReferences = getPlayerReferences(overlayElementWithGlyphs.references);\n const conflictingOverlayElement = overlayElementsWithKey.filter((o) => {\n return (\n frame >= o.startFrame &&\n frame <= o.endFrame &&\n o.overlayElementTypeId !== overlayElementWithGlyphs.overlayElementTypeId &&\n o.priority < overlayElementWithGlyphs.priority &&\n o.priority !== -1 &&\n playerReferences.some((r) => {\n return getPlayerReferences(o.references).includes(r);\n })\n );\n });\n\n const conflictingPlayerIds = getPlayerReferences(findExcludedReferences(conflictingOverlayElement));\n\n overlayElementWithGlyphs.setExcludedPlayerIdsFromRender(conflictingPlayerIds);\n });\n\n return overlayElementsWithKey;\n }\n\n private setupCurrentFrame(frame: number, overlayTactics: OverlayTactic[], filters: { tactics?: TacticId[] }) {\n const { availableOverlayTactics, filteredOverlayTactics } = filterOverlayTactics(\n frame,\n overlayTactics,\n filters.tactics,\n );\n\n this.availableOverlayTactics = availableOverlayTactics;\n\n this.cleanInvalidOverlayTactics(filteredOverlayTactics);\n this.setupOverlayTactics(filteredOverlayTactics);\n }\n\n private cleanInvalidOverlayTactics(overlayTactics: OverlayTactic[]) {\n const generatedKeys = overlayTactics.map((overlayElement) => generateOverlayTacticKey(overlayElement));\n\n this.activeOverlayElements = this.activeOverlayElements.filter((overlayElement) => {\n const isValidOverlayElement = generatedKeys.includes(overlayElement.key);\n\n if (!isValidOverlayElement) {\n overlayElement.overlayTacticWithGlyphs.overlayElementsGlyphs.forEach((e) => e?.removeFromLayer());\n }\n\n return isValidOverlayElement;\n });\n }\n\n private setupOverlayTactics(activeOverlayTactics: OverlayTactic[]) {\n const loadedOverlayTacticsKeys = this.activeOverlayElements.map((overlayTactic) => overlayTactic.key);\n\n const notInitializedOverlayTactics = activeOverlayTactics.filter(\n (overlayTactic) => !loadedOverlayTacticsKeys.includes(generateOverlayTacticKey(overlayTactic)),\n );\n\n this.initializeOverlayTactics(notInitializedOverlayTactics);\n }\n\n private initializeOverlayTactics(overlayTactics: OverlayTactic[]) {\n const overlayTacticsWithGlyphs: SearchOverlayElement[] = overlayTactics.map((overlayTactic) => {\n const overlayElementsGlyphs = overlayTactic.overlayElements.map((item) =>\n overlayElementsFactory(item, this.imageInterface),\n );\n\n overlayElementsGlyphs.forEach((overlayElementGlyph) => overlayElementGlyph?.addToLayer(this.layer));\n\n return {\n key: generateOverlayTacticKey(overlayTactic),\n overlayTacticWithGlyphs: {\n endFrame: overlayTactic.endFrame,\n overlayElementsGlyphs,\n startFrame: overlayTactic.startFrame,\n tacticId: overlayTactic.tacticTypeId,\n },\n };\n });\n\n this.activeOverlayElements = [...this.activeOverlayElements, ...overlayTacticsWithGlyphs];\n }\n}\n"],"names":["Colors","borderRadius","themeBaseSpacing","themeZIndexes","defaultFontFamily","theme","createTheme","alpha","ownerState","animationDurations","animations","keyframes","boxShadows","fontSizes","letterSpacing","fontWeight","LogEvent","type","target","propertyKey","descriptor","original","args","value","Time","Events","GlyphElement","OverlayElementNames","overlayElementTypes","arrow","Konva","ArrowHighlightGlyph","colorPrimary","opacity","size","__publicField","coordinates","scaleFactor","coordinate","OverlayElementGlyphs","findPlayersCoordinates","playerIds","playersPositions","resultPlayerIds","i","playerId","playerCoordinates","findClosestRivalPlayerDistance","playersPosition","teams","rivalPlayerIds","homePlayerId","closestDistance","rivalPosition","playerPosition","y","x","distance","getPlayerReferences","references","acc","reference","v","getStaticCoordinates","adjustStaticCoordinatesByPitchSize","pitchSize","isFrameInRange","frame","overlayElement","isInRange","generateFramesArray","start","end","result","sampleArrayValues","startFrame","endFrame","sampleSize","listOfFrames","getPlayerTeam","getCurrentSegment","segments","segment","defensiveLinePitchSide","playersXPositions","teamId","xpos","ArrowHighlight","config","overlayElementTypeId","lineGlyphConfig","layer","scale","circle","CircleAreaGlyph","adjustedSize","getSizeFromPercentage","initialValue","finalValue","percentage","getPercentageFromRange","currentValue","PlayerCircleAreaHighlight","framePlayers","CircleClosestRivalHighlight","playersCoordinates","_a","circleSvg","colorSecondary","circleDashedSvg","semiCircleSvg","isNode","createInlineSvg","svg","createSemicircle","imageInterface","image","createCircle","createCircleDashed","HighlightGlyph","startX","startY","line","PolygonGlyph","findPlayerWithMinOrMaxY","resultY","resultPlayerId","DefensiveLinePlayerDepthHighlight","player","playerGlyphConfig","polygonGlyphConfig","firstPlayerInLine","lastPlayerInLine","minXPos","topLineVertices","bottomLineVertices","playersVertices","HighlightCirclePlayer","highlightGlyphConfig","playersIds","referencesToExclude","LineGlyph","dashed","dashedOptions","LineHighlight","excludedPlayerIds","p","DASH_SPACING","ArrowGlyph","id","LineToHalfwayWithArrows","LineWithArrow","firstPlayer","lastPlayer","PolygonArea","ScatterGlyph","ScatterLine","coordinatesOfPlayerInAllFrames","coordinatesInFrame","SemiCircleGlyph","rotation","getRotationFromStyle","style","SemiCircleHighlight","PolylineGlyph","TeamPerimeter","WidthPlayerHighlight","StraightLineToEndPositionWithArrow","playerCurrentFrameCoordinates","playerEndFrameCoordinates","PlayerVerticalArrow","players","lastFramePlayers","PolyLineWithArrowCurrentPosition","item","c","CircleAreaHighlight","circleCenter","radius","overlayElementsFactory","options","findExcludedReferences","overlayElements","minPriority","conflictingOverlayElementWithMinPriority","findOverlayTacticsByFrame","overlayTactics","overlayTactic","t","e","filterOverlayTacticsByTacticId","tactics","filterOverlayTactics","activeOverlayTactics","generateOverlayTacticKey","OverlayRenderer","container","filters","overlayElementGlyphs","searchOverlayElements","overlayElementsWithKey","activeOverlayTactic","overlayElementWithGlyphs","playerReferences","conflictingOverlayElement","o","r","conflictingPlayerIds","availableOverlayTactics","filteredOverlayTactics","generatedKeys","isValidOverlayElement","loadedOverlayTacticsKeys","notInitializedOverlayTactics","overlayTacticsWithGlyphs","overlayElementsGlyphs","overlayElementGlyph","__decorateClass"],"mappings":"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ACT,KAAM,GACN,aAAcA,EAAO,IACvB,CACF,CACF,EACC,8DAAoF,CACnF,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,KACrB,eAAgBA,EAAO,KACvB,MAAO,iBACT,CACF,CACF,EACC,+DAAqF,CACpF,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,KACrB,eAAgBA,EAAO,KACvB,MAAO,kBACT,CACF,CACF,EACC,iDAAuE,CACtE,SAAU,EACV,OAAQ,CACN,CACE,QAAS,UACT,KAAM,GACN,aAAcA,EAAO,IACvB,CACF,CACF,EACC,gEAAsF,CACrF,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,MACvB,MAAO,iBACT,CACF,CACF,EACC,8DAAoF,CACnF,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,MACvB,MAAO,eACT,CACF,CACF,EACC,mDAAyE,CACxE,SAAU,EACV,OAAQ,CACN,CACE,QAAS,UACT,KAAM,GACN,aAAcA,EAAO,KACvB,CACF,CACF,EACC,gCAAsD,CACrD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,IACvB,MAAO,QACT,CACF,CACF,EACC,kCAAwD,CACvD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,IACrB,eAAgBA,EAAO,IACvB,MAAO,QACT,CACF,CACF,EACC,yDAA+E,CAC9E,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,IACrB,eAAgBA,EAAO,IACvB,MAAO,eACT,CACF,CACF,EACC,yCAA+D,CAC9D,SAAU,EACV,OAAQ,CACN,CACE,QAAS,UACT,KAAM,GACN,aAAcA,EAAO,GACvB,CACF,CACF,EACC,8CAAoE,CACnE,SAAU,EACV,OAAQ,CACN,CACE,QAAS,cACT,KAAM,EACN,aAAcA,EAAO,MACrB,MAAO,EACT,CACF,CACF,EACC,uCAA6D,CAC5D,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,KACvB,MAAO,QACT,CACF,CACF,EACC,sBAA4C,CAC3C,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,MACvB,MAAO,QACT,EACA,CACE,QAAS,OACT,KAAM,GACN,aAAcA,EAAO,KACvB,CACF,CACF,EACC,eAAqC,CACpC,SAAU,GACV,OAAQ,CACN,CACE,QAAS,WACT,KAAM,GACN,aAAcA,EAAO,MACvB,CACF,CACF,EACC,8BAAoD,CACnD,SAAU,GACV,OAAQ,CACN,CACE,QAAS,WACT,KAAM,GACN,aAAcA,EAAO,SACvB,CACF,CACF,EACC,0BAAgD,CAC/C,SAAU,GACV,OAAQ,CACN,CACE,QAAS,WACT,KAAM,GACN,aAAcA,EAAO,MACvB,CACF,CACF,EACC,sCAA4D,CAC3D,SAAU,EACV,OAAQ,CACN,CACE,QAAS,QACT,KAAM,GACN,aAAcA,EAAO,KACvB,CACF,CACF,EACC,0BAAgD,CAC/C,SAAU,EACV,OAAQ,CACN,CACE,QAAS,cACT,KAAM,GACN,aAAcA,EAAO,IACvB,CACF,CACF,EACC,iBAAuC,CACtC,SAAU,EACV,OAAQ,CACN,CACE,QAAS,cACT,KAAM,GACN,aAAcA,EAAO,QACvB,CACF,CACF,EACC,8DAAoF,CACnF,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,KACrB,eAAgBA,EAAO,KACvB,MAAO,QACT,CACF,CACF,EACC,uFAA6G,CAC5G,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,MACvB,MAAO,QACT,CACF,CACF,EACC,2BAAiD,CAChD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,MACvB,MAAO,QACT,CACF,CACF,EACC,qBAA2C,CAC1C,SAAU,EACV,OAAQ,CACN,CACE,QAAS,QACT,KAAM,GACN,aAAcA,EAAO,IACvB,CACF,CACF,EACC,2BAAiD,CAChD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,KACvB,MAAO,QACT,CACF,CACF,EACC,uCAA6D,CAC5D,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,KACvB,MAAO,QACT,CACF,CACF,EACC,iCAAuD,CACtD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,KACvB,MAAO,QACT,CACF,CACF,EACC,mCAAyD,CACxD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,KACvB,MAAO,QACT,CACF,CACF,EACC,4BAAkD,CACjD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,UACT,KAAM,EACN,aAAcA,EAAO,KACrB,MAAO,EACT,CACF,CACF,EACC,uBAA6C,CAC5C,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,KACrB,eAAgBA,EAAO,KACvB,MAAO,QACT,CACF,CACF,EACC,4CAAkE,CACjE,SAAU,EACV,OAAQ,CACN,CACE,QAAS,UACT,KAAM,EACN,aAAcA,EAAO,MACrB,MAAO,EACT,CACF,CACF,EACC,kDAAwE,CACvE,SAAU,EACV,OAAQ,CACN,CACE,QAAS,UACT,KAAM,EACN,aAAcA,EAAO,IACrB,MAAO,EACT,CACF,CACF,EACC,sBAA4C,CAC3C,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,IACrB,eAAgBA,EAAO,MACvB,MAAO,eACT,CACF,CACF,EACC,sBAA4C,CAC3C,SAAU,EACV,OAAQ,CACN,CACE,QAAS,cACT,KAAM,EACN,QAAS,MACT,aAAc,EACd,WAAY,GACZ,aAAcA,EAAO,IACrB,MAAO,EACT,CACF,CACF,EACC,6BAAmD,CAClD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,KACrB,eAAgBA,EAAO,MACvB,MAAO,eACT,CACF,CACF,EACC,iCAAuD,CACtD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,kBACT,KAAM,EACN,aAAcA,EAAO,KACrB,eAAgBA,EAAO,KACvB,MAAO,QACP,MAAO,EACT,CACF,CACF,EACC,4BAAkD,CACjD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,KACrB,eAAgBA,EAAO,MACvB,MAAO,eACT,CACF,CACF,EACC,4BAAkD,CACjD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,cACT,KAAM,EACN,QAAS,MACT,aAAc,EACd,WAAY,GACZ,aAAcA,EAAO,UACrB,MAAO,EACT,CACF,CACF,EACC,8BAAoD,CACnD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,IACrB,eAAgBA,EAAO,IACvB,MAAO,QACT,CACF,CACF,EACC,6BAAmD,CAClD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,MACrB,eAAgBA,EAAO,IACvB,MAAO,QACT,CACF,CACF,EACC,sCAA4D,CAC3D,SAAU,EACV,OAAQ,CACN,CACE,QAAS,YACT,KAAM,EACN,aAAcA,EAAO,IACrB,eAAgBA,EAAO,IACvB,MAAO,QACT,CACF,CACF,EACC,gDAAsE,CACrE,SAAU,EACV,OAAQ,CACN,CACE,QAAS,cACT,KAAM,GACN,aAAcA,EAAO,GACvB,CACF,CACF,EACC,oCAA0D,CACzD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,cACT,KAAM,GACN,aAAcA,EAAO,GACvB,CACF,CACF,EACC,2BAAiD,CAChD,SAAU,EACV,OAAQ,CACN,CACE,QAAS,cACT,KAAM,GACN,aAAcA,EAAO,MACvB,CACF,CACF,EACC,6BAAmD,CAClD,SAAU,EACV,OAAQ,CACN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"}